v2.9.0 — Settings overhaul, Mistral parallel tool fix, Anthropic provider

- Fix settings save bug: primaryModel captured before _modelSettingsLoaded guard → wiped model roles when models tab not opened
- Fix server: filter empty-string roles before saving to prevent role wipe
- Add Voice and Session settings tabs to UI
- Add OpenWeather API key field to Credentials tab
- Add GET/POST endpoints: /api/settings/voice, /api/settings/session, /api/settings/openweather
- Fix Mistral parallel tool calls: model embeds tool calls as text instead of tool_calls array; parseEmbeddedToolCalls() detects and converts
- Add Anthropic provider adapter (anthropic-adapter.ts)
- Weather tool vault key resolution fix

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
kim
2026-05-23 18:52:40 +09:00
co-authored by Claude Sonnet 4.6
parent eaf6678a21
commit 8aee152f2f
12 changed files with 1226 additions and 157 deletions
+27 -43
View File
@@ -2,13 +2,10 @@
"version": "1.0.1",
"gateway": {
"port": 18789,
"host": [
"127.0.0.1",
"192.168.0.5"
],
"host": "0.0.0.0",
"auth": {
"enabled": true,
"multiUser": false
"multiUser": true
}
},
"ollama": {
@@ -27,11 +24,11 @@
"model": "gemini-3-flash-preview:cloud"
},
"lm_studio": {
"endpoint": "http://localhost:1234",
"endpoint": "http://host.docker.internal:1234",
"model": ""
},
"llama_cpp": {
"endpoint": "http://localhost:8080",
"endpoint": "http://host.docker.internal:8080",
"model": ""
},
"openai": {
@@ -42,7 +39,7 @@
"model": "gpt-5.3-codex"
},
"anthropic": {
"api_key": "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",
"api_key": "",
"model": "claude-sonnet-4-6"
}
}
@@ -127,19 +124,17 @@
},
"agents": [],
"session": {
"maxMessages": 2000,
"compactionThreshold": 0.7,
"memoryFlushThreshold": 0.75
"memoryFlushThreshold": 0.75,
"historyTurns": 8
},
"channels": {
"telegram": {
"enabled": true,
"botToken": "vault:channels.telegram.botToken",
"allowedUserIds": [
8540415328
],
"streamMode": "full",
"userMap": {},
"voiceEnabled": false
"enabled": false,
"botToken": "",
"allowedUserIds": [],
"streamMode": "full"
},
"discord": {
"enabled": false,
@@ -163,7 +158,7 @@
"enabled": true,
"secondary": {
"provider": "ollama",
"model": "kimi-k2.6:cloud"
"model": "mistral-large-3:675b-cloud"
},
"triggers": {
"consecutive_failures": 2,
@@ -216,37 +211,29 @@
"path": "/hooks"
},
"voice": {
"enabled": true,
"enabled": false,
"stt": {
"provider": "whisper_cpp",
"model": "ggml-base.bin",
"language": "ko",
"whisperPath": "/usr/local/bin/whisper-cli",
"modelPath": "/usr/local/share/whisper-models/ggml-base.bin"
"language": "ko"
},
"tts": {
"provider": "edge_tts",
"model": "ko_KR-kss-medium",
"voice": "ko-KR-SunHiNeural"
},
"ffmpegPath": "/usr/bin/ffmpeg"
"provider": "piper",
"model": "ko_KR-kss-medium"
}
},
"telegram": {
"enabled": false,
"botToken": "",
"allowedUserIds": [],
"streamMode": "full"
},
"search": {
"preferred_provider": "searxng",
"searxng_url": "http://localhost:8888",
"search_rigor": "verified",
"google_cx": "",
"ollama_model": ""
},
"telegram": {
"enabled": true,
"botToken": "8504576825:AAGzpUCFm1z7B6sBRxjHxzin4Sczj0e9o-g",
"allowedUserIds": [
8540415328
],
"streamMode": "full",
"userMap": {},
"voiceEnabled": false
"ollama_model": "",
"searxng_url": "http://localhost:8888"
},
"agent_policy": {
"force_web_for_fresh": true,
@@ -256,9 +243,6 @@
"retrieval_mode": "standard"
},
"openweather": {
"api_key": "700dfb2b5fe74c5810c5fbfaa1286af5"
},
"legal": {
"law_go_kr_api_key": "ailawyer"
"api_key": "vault:openweather.api_key"
}
}
+2 -3
View File
@@ -2,8 +2,7 @@
"multi-agent-orchestrator": true,
"lawyer": false,
"psychiatrist": false,
"musician": true,
"musician": false,
"accountant": false,
"investor": true,
"coder": true
"investor": false
}