ChatPayloadBuilder caught EModelEndpoint.valueOf for custom endpoint names (OpenRouter, Deepseek, etc.) and silently sent endpoint=agents, producing 403 "Forbidden: Insufficient permissions" on the server. Type endpoint identity as String end-to-end, add EndpointClassifier to derive endpointType / key / modelDisplayLabel from /api/config, and propagate the dispatch fields to all five chat-send sites in ChatViewModel (doSendMessage, editUserMessage, editAiMessage, regenerateMessageNow, continueGenerationNow). A normalization shim in ConversationMapper converts legacy enum-name rows in the Room cache back to wire format on read. Verified end-to-end against a docker LibreChat v0.8.5 instance with OpenRouter user_provided keys; built-in .env Anthropic regression also passes.
32 lines
368 B
Text
32 lines
368 B
Text
# Gradle
|
|
.gradle/
|
|
build/
|
|
!gradle/wrapper/gradle-wrapper.jar
|
|
|
|
# IDE
|
|
.idea/
|
|
*.iml
|
|
local.properties
|
|
|
|
# Kotlin
|
|
.kotlin/
|
|
|
|
# Android
|
|
*.apk
|
|
*.aab
|
|
*.dex
|
|
*.class
|
|
|
|
# Keystore
|
|
*.jks
|
|
*.keystore
|
|
!app/debug.keystore
|
|
|
|
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# Local Claude Code working notes (issue repros, scratch captures with secrets)
|
|
.claude/issue-*/
|
|
.claude/worktrees/
|
|
.claude/sync-upstream/
|