diff --git a/my-deepagent/docs/schemas/personas/default-interactive@1.yaml b/my-deepagent/docs/schemas/personas/default-interactive@1.yaml index cf98af5..7ec0c74 100644 --- a/my-deepagent/docs/schemas/personas/default-interactive@1.yaml +++ b/my-deepagent/docs/schemas/personas/default-interactive@1.yaml @@ -2,8 +2,8 @@ name: default-interactive version: 1 description: "interactive 모드 만능 어시스턴트. 탐색·수정·실행 모두 지원." backend: openrouter -model: "openrouter:anthropic/claude-haiku-4-5" -provider_origin: "US/Anthropic" +model: "openrouter:deepseek/deepseek-chat" +provider_origin: "CN/DeepSeek" capabilities: - spec_write - code_edit @@ -42,7 +42,7 @@ allowed_tools: - write_todos - task deepagents_backend: local_shell -fallback_model: "openrouter:deepseek/deepseek-chat" +fallback_model: "openrouter:anthropic/claude-haiku-4-5" max_cost_per_call_usd: 0.05 model_params: max_tokens: 2048 diff --git a/my-deepagent/static/app.js b/my-deepagent/static/app.js index 42c867a..ce0f19a 100644 --- a/my-deepagent/static/app.js +++ b/my-deepagent/static/app.js @@ -757,6 +757,21 @@ function updateSessionStatePill(state) { pill.className = `conv-session-state state-${state}`; } +function updateSessionModelPill(model) { + const pill = $conv("#session-model-pill"); + if (!pill) return; + if (!model) { + pill.textContent = ""; + pill.className = "conv-model-pill"; + return; + } + // Trim the "openrouter:" prefix for display; keep full id in tooltip. + const display = model.replace(/^openrouter:/, ""); + pill.textContent = display; + pill.title = `model: ${model}`; + pill.className = "conv-model-pill"; +} + async function loadSessionList() { try { const list = await jsonFetch("/sessions?limit=50"); @@ -797,6 +812,7 @@ async function loadAndAttachSession(sessionId) { return; } updateSessionStatePill(detail.session.state); + updateSessionModelPill(detail.session.model); const messages = detail.messages || []; for (const m of messages) { @@ -968,17 +984,14 @@ async function bootstrapConversationPage() { setTimeout(() => { input._composing = false; }, 0); }); input.addEventListener("keydown", (ev) => { - // Honor Cmd/Ctrl+Enter as explicit "send" override even during composition. - if ((ev.metaKey || ev.ctrlKey) && ev.key === "Enter") { - ev.preventDefault(); - sendMessage(ev.target.value); - return; - } - // Plain Enter during composition (e.g. Korean IME committing 한글) must - // pass through to the textarea — do nothing. - if (ev.key === "Enter" && input._composing) { - return; - } + if (ev.key !== "Enter") return; + // Shift+Enter → newline (let the textarea handle it natively). + if (ev.shiftKey) return; + // IME composition (Korean/Japanese/Chinese candidate commit) → never send. + if (input._composing) return; + // Plain Enter (and Cmd/Ctrl+Enter for backwards compat) → send. + ev.preventDefault(); + sendMessage(ev.target.value); }); // v0.3 PR #8: deep link `?session=` auto-loads the named session. const params = new URLSearchParams(window.location.search); diff --git a/my-deepagent/static/conversation.html b/my-deepagent/static/conversation.html index cb16f5d..c931d8c 100644 --- a/my-deepagent/static/conversation.html +++ b/my-deepagent/static/conversation.html @@ -26,6 +26,7 @@ + @@ -39,7 +40,7 @@ diff --git a/my-deepagent/static/style.css b/my-deepagent/static/style.css index aaca7ce..40878eb 100644 --- a/my-deepagent/static/style.css +++ b/my-deepagent/static/style.css @@ -1211,3 +1211,13 @@ details[open] summary { line-height: 1.55; color: var(--text-muted); } + +.conv-model-pill { + font-family: var(--font-mono); + font-size: 11.5px; + padding: 2px 8px; + border-radius: 999px; + background: rgba(0, 0, 0, 0.06); + color: var(--text-muted); + letter-spacing: 0.01em; +}