Commit Graph

1686 Commits

Author SHA1 Message Date
程序员阿江(Relakkes) cf52009220 fix(desktop): keep AskUserQuestion hook order stable
The "no questions" early return sat above two useMemo calls, so any mounted
instance whose question count crossed zero threw "Rendered fewer/more hooks than
expected" and took the surrounding message list down with it. `input` is not
fixed for the lifetime of the instance — chatStore rebuilds tool_use messages
from the transcript under a stable id — so both directions are reachable.

Move the early return below every hook. The two new tests assert on rendering
rather than hook counts, and both go red against the old ordering.
2026-08-04 12:44:21 +08:00
程序员阿江(Relakkes) 35d6021bde refactor(server): move stream block bookkeeping out of the ws handler 2026-08-04 01:42:36 +08:00
程序员阿江(Relakkes) f7debb0b40 refactor(server): move CLI message parsing out of the ws handler 2026-08-04 01:20:32 +08:00
程序员阿江(Relakkes) eabdd12c30 refactor(server): move agent/task lifecycle state out of the ws handler 2026-08-04 01:03:36 +08:00
程序员阿江(Relakkes) 1c1a649658 test(server): guard per-session state cleanup completeness in the ws handler 2026-08-04 00:45:35 +08:00
程序员阿江(Relakkes) d3d30f6a93 test(chat): pin handler and chatStore reducer output with golden snapshots 2026-08-03 21:47:04 +08:00
程序员阿江(Relakkes) 4f9fec8760 ci(quality-gate): route checks by import graph and add offline agent QA 2026-08-03 21:46:54 +08:00
程序员阿江(Relakkes) 1cc76e15c5 chore(release): update v0.5.2 notes with late fixes v0.5.2 2026-08-03 05:03:22 +08:00
程序员阿江(Relakkes) 7420452693 chore(release): prepare v0.5.2 2026-08-03 04:44:47 +08:00
程序员阿江(Relakkes) 070898465e chore: ignore local learnings directory 2026-08-03 04:44:39 +08:00
程序员阿江(Relakkes) 94ebaf5bf4 fix(cli): default missing user type in user agent 2026-08-03 04:44:33 +08:00
程序员阿江(Relakkes) 90f4a0bc98 fix(model): preserve capabilities across context markers 2026-08-03 04:44:27 +08:00
程序员阿江(Relakkes) 128f75ab5b fix(chat): defer context inspection until first turn 2026-08-03 04:32:21 +08:00
程序员阿江(Relakkes) 11df31e358 fix(desktop): hide browser preview behind project menu 2026-08-03 04:24:39 +08:00
程序员阿江(Relakkes) b947382b6d Merge commit '996119ee03a4449fafa888e40e5aecc2c7bbb0ed' 2026-08-03 04:08:05 +08:00
程序员阿江(Relakkes) 996119ee03 fix(desktop): isolate subagent tasks from session activity 2026-08-03 04:07:40 +08:00
程序员阿江(Relakkes) b4807697f8 fix(chat): refresh context after runtime transitions 2026-08-03 04:06:59 +08:00
程序员阿江(Relakkes) 2262973a48 fix(chat): stabilize context usage across model switches 2026-08-03 03:03:08 +08:00
程序员阿江(Relakkes) 0f1ebf8d1f fix(desktop): shift project menu around browser preview 2026-08-03 02:35:58 +08:00
程序员阿江(Relakkes) f6f2a6a6f7 fix(desktop): render project menu in native popup 2026-08-03 01:50:18 +08:00
程序员阿江(Relakkes) 88c5bc716e fix(server): preserve workdir during runtime restart 2026-08-03 01:10:59 +08:00
程序员阿江(Relakkes) 7b3313aeb3 fix(chat): keep inline media when the checkpoint has no tracked changes
The turn checkpoint only sees tracked Write/Edit changes, so media produced
via Bash (e.g. a PIL render at /tmp/result.png) left filesChanged empty and
the gallery filtered the just-rendered image away a beat after it appeared.
Absolute paths are explicit prose, not guesses, and an empty changedFiles is
"no evidence" rather than "no files": both now fall back to legacy text-only
rendering. Non-empty changedFiles still reconciles relative mentions onto
the real paths, and file-chip semantics are unchanged.
2026-08-03 00:38:45 +08:00
程序员阿江(Relakkes) 982e0bf4d9 fix(provider): pass through compatible reasoning effort 2026-08-03 00:32:16 +08:00
程序员阿江(Relakkes) 7da7cd6c82 fix(desktop): keep project menu above browser preview 2026-08-03 00:26:53 +08:00
程序员阿江(Relakkes) 634cf2225a fix(provider): use shared Dropdown for regional endpoint selector
The service-region picker in the provider form was the last native
<select> in the dialog, rendering with platform chrome inconsistent
with the neighboring API format / auth strategy dropdowns. Switch it
to the shared Dropdown component with per-endpoint description rows,
and fall back to a "Custom" label when the base URL matches no
regional endpoint instead of going blank.
2026-08-03 00:03:03 +08:00
程序员阿江(Relakkes) 5775301f45 fix(provider): preserve effort for unlisted compatible models 2026-08-02 23:36:36 +08:00
程序员阿江(Relakkes) 26e56ccea1 fix(agents): keep resumed agents on their spawning card
Resuming a stopped agent adopted the resuming tool's tool_use id, so a
follow-up sent via SendMessage re-filed the agent's tool activity and its
completion notification under the SendMessage card instead of the Agent
card that spawned it.

Persist the spawning Agent tool_use id in agent metadata and prefer it on
resume, falling back to the still-registered task. Never fall back to the
caller's own id — that is the bug itself; leaving it undefined only costs
live activity streaming, which is what pre-existing agents did anyway.
runAsyncAgentLifecycle now takes parentToolUseId as a required parameter so
a missed call site is a compile error rather than a silent regression, and
registerTask keeps the original id when a resume re-registers the task.
2026-08-02 23:06:07 +08:00
程序员阿江(Relakkes) a3d7fed254 fix(chat): align output previews with turn changes 2026-08-02 22:23:34 +08:00
程序员阿江(Relakkes) 4df6c375a6 merge: sync origin/main 2026-08-02 22:23:04 +08:00
程序员阿江(Relakkes) dfc9f7f471 feat(desktop): add back-to-parent button on subagent run page
Mirror the workbench return pattern: returnFromSubagent switches to the
source session tab and closes the ephemeral subagent tab, with fallback
to plain close when the parent tab is gone.
2026-08-02 21:37:19 +08:00
程序员阿江(Relakkes) 336b876e80 fix(desktop): stabilize subagent tool activity 2026-08-02 20:46:57 +08:00
程序员阿江-Relakkes 96a3a36ca5 Merge pull request #1171 from toBerlinWay/fix/1035-output-target-empty-turn
fix(chat): avoid false file output cards
2026-08-02 20:32:43 +08:00
程序员阿江-Relakkes fce17eb635 Merge pull request #1172 from toBerlinWay/fix/1142-subagent-background-task-leak
fix(activity): keep subagent bash tasks out of main session
2026-08-02 20:31:57 +08:00
程序员阿江(Relakkes) 7d6136e26b fix(desktop): keep open-with menu clear of workbench 2026-08-02 19:55:11 +08:00
程序员阿江(Relakkes) be4c1034b6 feat(desktop): add provider region selection 2026-08-02 19:44:46 +08:00
程序员阿江(Relakkes) c28c3ad7fb fix(chat): clear conversation marker at latest 2026-08-02 18:34:41 +08:00
程序员阿江(Relakkes) a26813036e fix(desktop): stabilize parallel subagent status cards 2026-08-02 17:44:47 +08:00
程序员阿江(Relakkes) badfaf52e1 fix(cli): backport Claude Code 2.1.220 hardening 2026-08-02 16:48:30 +08:00
程序员阿江(Relakkes) 8cce4932de fix(oauth): stream Grok reasoning summaries 2026-08-02 16:48:30 +08:00
程序员阿江(Relakkes) d52f9fb646 fix(oauth): stabilize GPT streaming and agent recovery 2026-08-02 16:48:30 +08:00
程序员阿江(Relakkes) a7df7f84fc fix(desktop): compact session sidebar and workbench divider 2026-08-02 16:48:30 +08:00
程序员阿江(Relakkes) a03fd8541e fix(desktop): keep model selector header from letting scrolled items bleed through
Move the sticky header out of the scroll region so the list is hard-clipped
below it instead of relying on engine compositing above the scrolling layer.
2026-08-02 16:48:30 +08:00
程序员阿江(Relakkes) 4626dbef4c fix(adapters): let IM-created sessions inherit the global permission mode #1169
d1415437 hardcoded permissionMode: 'default' in the shared adapter
createSession, which pins every Feishu/Telegram/WhatsApp session to ask
mode and short-circuits the server's fallback to the user's configured
default. Omit the field so ws/handler resolves the global setting at
launch, restoring v0.5.0 behavior while keeping the workDir root check.
2026-08-02 16:48:30 +08:00
程序员阿江(Relakkes) 2d39d2adaa fix(desktop): keep activity panel state across tab switches and window restore
The activity panel derived visibility from volatile per-session caches, and
three lossy paths could drain them: the connectToSession reset branch dropped
backgroundAgentTasks/agentTaskNotifications, reloadHistory replaced background
tasks with transcript-only records (running tasks are never persisted), and a
history load aborted by a concurrent task mutation was silently discarded.
ActiveSession's one-way auto-close then made any transient empty beat
permanent.

Preserve activity fields on reconnect reset, always merge unresolved
background tasks into reloaded history (transcript terminal records still win,
keeping the stopped-task reconcile intact), retry aborted empty history loads
with a bounded delay, and debounce the auto-close behind a history-ready grace
period.
2026-08-02 16:48:30 +08:00
程序员阿江(Relakkes) eacced7ad4 fix(desktop): keep expanded SubAgent run tool cards across live refresh
The SubAgent run detail tab polls every 2s while the run is live, and
mapHistoryMessagesToUiMessages minted a fresh nextId() for every
thinking/tool_use/tool_result block on each pass. The new ids changed
the ToolCallGroup/ToolCallTree React keys, remounting ToolCallBlock and
dropping its local expanded state, so any tool card the user expanded
collapsed again on the next poll.

Derive the UI message id from the transcript identity instead:
msg.id (always set by the server-side entriesToMessages boundary) plus
the block index is deterministic across remaps and unique within the
source message, so polling keeps keys stable and expansion survives.
2026-08-02 16:48:30 +08:00
程序员阿江(Relakkes) 52dce5917a fix(desktop): render images in workspace markdown preview
The MarkdownRenderer security hardening strips every img src that is not
blob:/data:, which is right for untrusted assistant output but also broke
the workbench file preview: relative images lost their src and remote
badges never loaded. The document preview is user-owned local content, so
give MarkdownRenderer an opt-in resolveImageSrc hook and wire it in the
workspace MarkdownSurface: relative sources resolve against the markdown
file's directory and are served through the sandboxed /preview-fs (or
/local-file for absolute paths and workspace escapes), http(s) URLs pass
through to CSP, and other schemes stay stripped.
2026-08-02 16:48:30 +08:00
程序员阿江(Relakkes) bbc0405f65 fix(provider): normalize model reasoning effort by capability 2026-08-02 16:48:30 +08:00
程序员阿江(Relakkes) 637b3e5339 fix(desktop): 引导未配置模型的用户完成设置
在无可用供应商或官方登录时显示配置入口,并在发送前阻止创建无认证会话。
同时识别桌面端 Claude OAuth,并补充回归测试与多语言文案。
2026-08-02 16:48:30 +08:00
程序员阿江(Relakkes) c7b6522d79 feat(provider): 新增玄枢API 供应商并加入 README 赞助商
- provider presets 新增 xuanshuapi(Anthropic 兼容,auth_token 鉴权)
- 默认模型 claude-opus-5 / claude-sonnet-5 / claude-haiku-4-5
- README 中英文赞助商表格新增玄枢API 行及 logo,专属链接注册赠 5 美元
- docs/start/models.md 双语预设清单同步
2026-08-02 16:48:30 +08:00
Relakkes Yang f332057b88 fix(windows): handle tab edits and missing Git Bash #1168
Preserve file indentation across tabs and spaces, route command tools to an available Windows shell, and make the source CLI launcher cross-platform.
2026-08-02 16:45:19 +08:00