DoSun
c63d8c60ce
perf: optimize subagent transcript lookup with cache, meta-based resolution and startup index
2026-05-20 11:22:26 +08:00
DoSun
c5a3142dfe
fix: default tool_use status to completed in transcript decompose
2026-05-20 11:22:25 +08:00
DoSun
bd968b8266
feat: messages API returns parts with accurate running status for active subagents
2026-05-20 11:22:25 +08:00
DoSun
a7a00a1a26
fix: use callID matching for task progress part updates
...
Remove mainPartID/mainMessageID from SubagentToolState. Emit
message.part.updated with random id and callID for task progress,
so consumer can match by callID when part IDs differ after tab switch.
2026-05-20 11:22:23 +08:00
DoSun
07f6ebe004
fix: normalize tool names and remove metadata.sessionId from running/completed events
...
- Apply normalizeToolName consistently in all tool_result paths (wasStreamed=true and wasStreamed=false)
- Remove metadata.sessionId from running state in streamStateTracker content_block_stop
- Remove metadata.sessionId from emitTaskProgress and emitTaskCompleted
- Add streamStateTracker.ts with stream-to-opencode event conversion
- Add subagent task lifecycle events (started/progress/completed)
- Handle tombstone, attachment, progress message types
2026-05-20 11:22:22 +08:00
linkai0924
da1985708f
Merge pull request #130 from Askhz/fix/deepseek-v4-pro-reasoning-fallback
...
fix: add fallback for non-standard reasoning/reasoning_details fields in OpenAI stream adapter
2026-05-19 20:51:26 +08:00
linkai0924
f655c50e51
Merge pull request #132 from IronRookieCoder/fix/weixin-startup-bad-weak-ptr
...
fix(weixin): avoid startup initialization without account
2026-05-19 20:50:42 +08:00
linkai0924
9481d58c2b
Merge pull request #131 from Askhz/fix/ctrl-enter-newline
...
fix: 修复 Ctrl+Enter 在标准终端中应插入换行而非发送消息
2026-05-19 20:50:33 +08:00
linkai0924
6e8bb0f72d
Merge pull request #135 from Askhz/feat/costrict-cheapest-model-for-haiku-tasks
...
feat(costrict): use cheapest model by creditConsumption for haiku-tier auxiliary tasks
2026-05-19 20:46:40 +08:00
Askhz
0aa86c9f84
feat(costrict): use cheapest model by creditConsumption for haiku-tier auxiliary tasks
...
All auxiliary requests (session memory, extract memories, side queries,
forked agents) now resolve to the model with the lowest creditConsumption
from the /v1/models list when using the CoStrict provider, instead of
falling back to the main conversation model.
- Add getCheapestCoStrictModel() to select cheapest model from cached list
- Resolve haiku-family models to cheapest model in resolveCoStrictModel
- Change getSmallFastModel() for CoStrict to return haiku alias
- Fix sideQuery() to respect opts.model with known-model validation
- Override mainLoopModel in SessionMemory and extractMemories forked agents
- Use getSmallFastModel() for findRelevantMemories under CoStrict
Co-Authored-By: CoStrict-DeepSeek-V4-Pro <deepseek-ai@claude-code-best.win>
2026-05-19 19:13:49 +08:00
linkai0924
be10194239
Merge pull request #134 from y574444354/fix/favorite-list-all-types
...
fix: favorite list route should respect type query parameter
2026-05-19 17:59:42 +08:00
林凯90331
9093d20fcf
fix: favorite list route should respect type query parameter
...
The /global/favorite/skills GET route was hardcoded to list only
skill-type favorites, causing cloud hub to show Cloud status for
non-skill favorites (agent, command, mcp) even after they were
loaded locally.
Now it reads the optional type query parameter and passes it to
listFavoriteItems, matching the opencode server behavior.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-19 17:57:38 +08:00
IronRookieCoder
31380447de
fix(weixin): avoid startup initialization without account
...
## Bug 详情
未配置微信账号时,启动阶段的 weixin MCP 子进程可能在初始化链路中触发 `std::bad_weak_ptr`,导致 `csc --debug` 看起来无法正常启动或使用。
## 根因
`runWeixinMcpServer` 在检查账号前先执行配置和分析初始化;未登录本应快速失败,但实际会先进入额外初始化路径。
## 修复方案
将账号检查前置,未配置账号时保持原有 stderr 提示和退出码,避免进入后续初始化。
## 变更要点
- `weixin serve` 未配置账号时直接输出原有提示并退出
- 已配置账号时仍按原流程初始化配置、分析 sink 并启动 MCP server
## 自测
- `bun test packages/weixin/src/__tests__/accounts.test.ts packages/weixin/src/__tests__/pairing.test.ts`
- 空 `WEIXIN_STATE_DIR` 下执行 `bun run src/entrypoints/cli.tsx weixin serve`,确认快速退出并输出未配置账号提示
2026-05-19 17:18:07 +08:00
Askhz
728af38c52
fix: 修复 Ctrl+Enter 在标准终端中应插入换行而非发送消息
...
- parse-keypress.ts: \n (LF) 字节标记为 ctrl=true,因为标准终端中
Ctrl+Enter 发送 \n,需与普通 Enter (\r) 区分
- defaultBindings.ts: 新增 ctrl+enter -> chat:newline 快捷键绑定,
支持 Kitty 键盘协议终端(如 Windows Terminal 1.25+)
Co-Authored-By: Sonnet-4.6-CoStrict <noreply@anthropic.com>
2026-05-19 16:16:24 +08:00
Askhz
933622fbe0
fix: add fallback for non-standard reasoning/reasoning_details fields in OpenAI stream adapter
...
CoStrict DeepSeek-V4-Pro returns thinking content in `delta.reasoning`
(string) and `delta.reasoning_details` (array) instead of the standard
`delta.reasoning_content` field. Add extractReasoning() with priority
fallback so all three formats are mapped to Anthropic thinking blocks.
Co-Authored-By: Auto <noreply@anthropic.com>
2026-05-19 14:32:45 +08:00
github-actions[bot]
321be8a128
chore(release): bump version to 4.1.3
2026-05-19 04:00:30 +00:00
linkai0924
0574a8e00e
Merge pull request #128 from Askhz/fix/lsp-windows-spawn-shell
...
fix: 修复 Windows 上 LSP 服务器启动 ENOENT 错误
2026-05-19 11:59:49 +08:00
linkai0924
f39c4b3416
Merge pull request #129 from IronRookieCoder/fix/image-multimodal-model-support
...
fix(costrict): handle image input for model compatibility
2026-05-19 11:59:33 +08:00
IronRookieCoder
b36e8e4ff2
fix(costrict): handle image input for model compatibility
...
## Bug 详情
CoStrict 在读取图片后会把图片放在 tool_result.content 中,OpenAI 兼容层只保留文本,导致模型没有收到真实图片内容。
非多模态模型收到图片请求时,后端会返回底层 400 错误,例如 not a multimodal model。
## 根因
OpenAI 消息转换逻辑没有处理 tool_result 中嵌套的 image block。
CoStrict 查询路径没有在发送请求前检查模型的图片输入能力,也没有归一化非多模态模型错误。
## 修复方案
将 tool_result 中的图片转换为后续 user 多模态消息,确保兼容层能传递 image_url。
在 CoStrict 模型元数据明确声明 supportsImages=false 时,提前返回英文错误提示;同时对后端非多模态错误做英文提示归一化。
## 变更要点
- Preserve image blocks nested in tool_result for OpenAI-compatible providers
- Add CoStrict image-capability gate based on supportsImages metadata
- Normalize non-multimodal backend errors to a clear English message
- Add regression tests for nested tool_result images and non-multimodal model handling
## 自测
- bun test src/costrict/provider/index.test.ts
- bun test packages/@ant/model-provider/src/shared/__tests__/openaiConvertMessages.test.ts
2026-05-19 11:38:16 +08:00
linkai0924
b7153a12a7
Merge pull request #127 from IronRookieCoder/fix/yaml-frontmatter-node-polyfill
...
fix(yaml): guard Bun YAML parser availability
2026-05-19 09:50:50 +08:00
Askhz
8dfd1ddc0b
fix: 修复 Windows 上 LSP 服务器启动 ENOENT 错误
...
Windows 的 spawn() 使用 CreateProcess API,只能直接执行 PE 可执行文件
(.exe/.com),无法解析 npm 全局安装产生的 .cmd 包装脚本。启用 shell 选项
后由 cmd.exe 解析脚本路径,解决 typescript-language-server 等 LSP 服务器
在 Windows 上找不到命令的问题。
Co-Authored-By: Auto <noreply@anthropic.com>
2026-05-19 09:32:07 +08:00
IronRookieCoder
a506e933a9
fix(yaml): guard Bun YAML parser availability
...
## Bug 详情
Windows 下通过 npm shim 执行 csc 时,/agents 只显示 built-in agents,User agents 和 Project agents 未加载;debug 日志中 agents 和 skills 的 frontmatter 均报 Cannot read properties of undefined (reading 'parse')。
## 根因
csc.cmd 实际通过 Node 执行 dist/cli-node.js。Node 入口注入了 globalThis.Bun polyfill,但该 polyfill 不包含 Bun.YAML。parseYaml 只判断 Bun 对象存在,导致误调用 Bun.YAML.parse。
## 修复方案
将 Bun 分支改为能力检测,仅在 Bun.YAML.parse 存在时使用 Bun 内置 YAML 解析器,否则回退到 yaml npm 包。
## 变更要点
- 为 parseYaml 增加 Bun.YAML.parse 可用性判断
- 保持真实 Bun runtime 使用 Bun.YAML.parse
- 保持 Node 入口使用 require('yaml').parse 回退
## 自测
- bun 下验证 parseYaml 可解析基础 frontmatter
- Node 下验证 yaml 包可解析基础 frontmatter
- bun run typecheck 已运行,但失败于仓库既有无关类型错误
2026-05-18 20:45:56 +08:00
linkai0924
14b2030d30
Merge pull request #126 from y574444354/feat/raw-dump-parent-ids
...
feat(rawDump): add parent_ids to commit payload
2026-05-18 20:26:25 +08:00
林凯90331
ad90f40088
feat(rawDump): add parent_ids to commit payload
...
Include parent commit hashes in raw dump commit reporting.
- git log format now includes %P (parent hashes)
- parseCommitLog extracts parent_ids as string array
- CommitPayload type extended with parent_ids field
- merge commits may have multiple parents
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 20:06:15 +08:00
github-actions[bot]
a76c92ea2d
chore(release): bump version to 4.1.2
2026-05-18 11:17:21 +00:00
linkai0924
70b5e285aa
Merge pull request #124 from IronRookieCoder/fix/git-bash-raw-mode
...
Fix/git bash raw mode
2026-05-18 19:15:14 +08:00
linkai0924
e901c66cd1
Merge pull request #122 from IronRookieCoder/fix/task-exception-status-hint
...
Fix/task exception status hint
2026-05-18 19:09:34 +08:00
IronRookieCoder
61610d08cd
fix(openai): reject invalid streamed tool arguments
...
## Bug 详情
OpenAI 兼容流返回工具调用时,模型可能输出无法解析为 JSON object 的 arguments,例如 TaskUpdate 参数片段最终拼成非法 JSON。此前这类返回会被任务工具宽松修复或降级为 {},用户看不到模型返回不合法,工具也可能进入错误执行路径。
## 根因
normalizeContentFromAPI 在解析 tool_use.input 失败后会尝试 repairTaskToolInput,并在无法修复时回退为空对象;OpenAI 组装层没有把非法工具调用转换成用户可见提示。
## 修复方案
将工具调用参数作为模型边界输入严格校验:最终工具名必须存在,工具参数必须解析为 JSON object。非法响应抛出 InvalidToolCallResponseError,并在 OpenAI 组装层转换为普通英文 assistant 提示,工具不再执行。
## 变更要点
- 移除任务工具参数的宽松修复和 {} 降级逻辑
- 新增非法工具调用参数和缺失工具名的显式错误
- OpenAI 组装层捕获非法工具调用并显示普通英文提示
- 增加流式分片省略 name 时保留初始工具名的测试
## 自测
- bun test src/utils/__tests__/messages.test.ts
- bun test packages/@ant/model-provider/src/shared/__tests__/openaiStreamAdapter.test.ts
- git diff --check
- bun run typecheck 仍失败,失败项为仓库既有类型问题,未涉及本次改动文件
2026-05-18 17:59:13 +08:00
linkai0924
175552cc76
Merge pull request #123 from Askhz/fix/disable-context-collapse-auto-compact
...
fix: 禁用 CONTEXT_COLLAPSE 修复自动压缩不触发的问题
2026-05-18 17:44:29 +08:00
linkai0924
c9ce63e7d4
Merge pull request #125 from y574444354/fix/favorite-status-priority
...
fix: cloud favorite status priority and runtime lifecycle
2026-05-18 17:38:50 +08:00
林凯90331
02ffda9d4c
fix: cloud favorite status priority and runtime lifecycle
...
- deriveStatus: prioritize favorite lifecycle over local config presence
- autoEnableCloudFavorites: skip unloaded items to prevent re-loading
- load/unload: sync agent/command favorites to ~/.claude/{agents,commands}/
- /hub toggle: trigger MCP reconnection and agent definition refresh
- cloud-enabled menu: trigger load for newly checked items
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 17:38:10 +08:00
Askhz
2ae463a8fe
refactor: dev.ts 和 build.ts 统一从 defines.ts 导入 feature flags
...
之前三个文件各自维护独立的 feature 列表,导致合并时容易漏掉变更
(如 CONTEXT_COLLAPSE 在 defines.ts 已禁用但 build.ts 仍启用)。
现在 dev.ts 和 build.ts 都从 defines.ts 导入 DEFAULT_BUILD_FEATURES,
与上游保持一致的单一定义源模式。
Co-Authored-By: CoStrict-DeepSeek-V4-Pro <deepseek-ai@claude-code-best.win>
2026-05-18 17:28:16 +08:00
IronRookieCoder
7b3260e757
fix(ink): restore Git Bash raw input handling
...
## Bug 详情
Windows Git Bash 终端下,csc 4.1.x 的 REPL 输入异常:回车需要按两次,方向键无法选择历史对话,输入 / 无法正常显示或触发命令。
## 根因
Windows raw mode 风险判断将 Git for Windows 的 MINGW64/MINGW32 与 MSYS2/Cygwin/mintty 环境一并禁用 raw mode,导致 Git Bash 走 cooked input fallback,Ink 无法按预期解析 Enter、方向键和 slash 输入。
## 修复方案
将 Git for Windows 的 MINGW64/MINGW32 从 raw mode 不安全名单中排除,恢复 Git Bash 的 raw mode 输入处理,同时保留 MSYS/UCRT/CLANG/Cygwin 和显式禁用开关的保护路径。
## 变更要点
- 调整 Ink raw mode 风险检测,Git Bash 保持 raw mode
- 同步启动早期输入捕获的 Git Bash raw mode 判断
- 增加 Git Bash raw mode 回归测试,并保留 MSYS2/Cygwin 场景覆盖
## 自测
- bun test packages/@ant/ink/src/core/__tests__/raw-mode-support.test.ts src/utils/__tests__/earlyInput.test.ts
- git diff --check
- bun run typecheck(失败,失败点为仓库既有 Zod 类型、缺失声明、MACRO.COMMIT、AppState 等错误,不涉及本次修改文件)
2026-05-18 17:13:17 +08:00
Askhz
5b19f83040
fix: 禁用 build.ts 中的 CONTEXT_COLLAPSE
...
与 defines.ts 和 dev.ts 保持一致,构建产物中也不再启用空壳
CONTEXT_COLLAPSE,恢复 autocompact 正常工作。
Co-Authored-By: CoStrict-DeepSeek-V4-Pro <deepseek-ai@claude-code-best.win>
2026-05-18 16:49:59 +08:00
geroge
99f99b74e8
Merge pull request #120 from IronRookieCoder/personal/plugin-auto-update-config
...
fix(plugin): make marketplace auto-update configurable by default
2026-05-18 16:43:08 +08:00
Askhz
9062511428
fix: 禁用 CONTEXT_COLLAPSE 修复自动压缩不触发的问题
...
CONTEXT_COLLAPSE 是空壳 stub,启用后会在 shouldAutoCompact() 中抑制
autocompact,但自身的 collapse 能力并未实现,导致上下文超限后不会触发
自动压缩,一直涨到 API 返回 413 硬报错。
上游已在 0290fe32 修复,CSC 在合并 upstream/main v2.4.2 时漏掉了这个
变更。此次修复与上游一致:注释掉 defines.ts 和 dev.ts 中的
CONTEXT_COLLAPSE feature flag。
Co-Authored-By: CoStrict-DeepSeek-V4-Pro <deepseek-ai@claude-code-best.win>
2026-05-18 16:11:19 +08:00
IronRookieCoder
416e2767ed
fix(query): surface missing task tool call failures
...
## Bug 详情
GLM-5 返回 `stop_reason=tool_use` 但没有携带真实任务工具调用时,任务列表流程会停在“准备查看/更新任务”的文本状态,用户无法判断任务是卡住还是已结束。
## 根因
原有缺失工具调用恢复逻辑会尝试追加一次隐式恢复提示;任务相关场景下如果模型没有发出 `TaskList`、`TaskUpdate` 等实际工具调用,缺少用户可见的失败提示。
## 修复方案
对任务相关的缺失工具调用直接输出英文错误,并保留普通缺失工具调用的一次恢复机会;同时把合成缺失工具结果占位改为明确英文失败文案。
## 变更要点
- 新增任务相关 `stop_reason=tool_use` 但无工具调用的检测和失败返回
- 新增通用缺失工具调用恢复失败时的英文错误提示
- 将合成缺失工具结果文案从内部占位改为用户可理解的失败说明
- 增加 query 缺失工具调用恢复路径测试
## 自测
- `bun test src/__tests__/queryMissingToolUseRecovery.test.ts`
- `bun test src/utils/__tests__/messages.test.ts`
- `bun run typecheck` 未完全通过,剩余错误来自仓库既有问题;本次修改相关文件无 TypeScript 错误
2026-05-18 14:50:56 +08:00
IronRookieCoder
602efce18a
docs: update contributors
2026-05-18 00:32:15 +00:00
IronRookieCoder
3a463313ea
fix(plugin): make marketplace auto-update configurable by default
...
## Bug 详情
/plugin marketplace 中的 Enable/Disable auto-update 会继承 CLI binary auto-updater 的禁用状态。在 CSC 默认关闭 CLI auto-updater 的场景下,plugin marketplace 的自动更新配置入口不可见,用户无法按 marketplace 配置 autoUpdate。
## 根因
shouldSkipPluginAutoupdate() 复用了 isAutoUpdaterDisabled(),导致 ENABLE_AUTOUPDATER、/config channel、development build、nonessential traffic 等 CLI updater 门禁同时影响 plugin marketplace 自动更新。
## 修复方案
将 plugin marketplace auto-update 门禁收敛为 DISABLE_AUTOUPDATER 和 FORCE_AUTOUPDATE_PLUGINS:默认不跳过 plugin auto-update;DISABLE_AUTOUPDATER 显式关闭;FORCE_AUTOUPDATE_PLUGINS 可覆盖关闭状态。
## 变更要点
- 调整 shouldSkipPluginAutoupdate(),使 plugin auto-update 独立于 CLI binary updater 配置
- 新增 plugin autoupdate 门禁单元测试
- 补充 plugin auto-update 机制文档,记录 UI、配置优先级和环境变量行为
## 自测
- bun test src/utils/__tests__/pluginAutoupdateConfig.test.ts
- bun test src/utils/settings/__tests__/config.test.ts
- bun run typecheck 仍失败,失败项为仓库既有 Zod 类型、缺声明和依赖类型问题,非本次变更引入
2026-05-16 16:58:20 +08:00
github-actions[bot]
9cdff19cb7
chore(release): bump version to 4.1.1
2026-05-16 03:32:18 +00:00
geroge
7178eac204
Merge pull request #116 from IronRookieCoder/fix/tasks-tool-arguments-repair
...
Fix/tasks tool arguments repair
2026-05-16 10:59:25 +08:00
geroge
d042115b6a
Merge pull request #115 from IronRookieCoder/fix-exit-terminal-state
...
Fix exit terminal state
2026-05-16 10:59:03 +08:00
geroge
b49678aaf0
Merge pull request #118 from IronRookieCoder/fix/agents-build-empty-list
...
Fix/agents build empty list
2026-05-16 10:58:08 +08:00
IronRookieCoder
aaeb662bee
fix(agents): reload empty agent definitions in menu
...
## Bug 详情
生产构建后执行交互式 /agents 时,菜单可能从 AppState 读到空的 agentDefinitions,导致显示 No agents found;同一环境下 bun run dev 可以正常显示 agents。
## 根因
生产 bundle 中底层 agent loader 和内置 agents 均可用,但 /agents 动态菜单只消费启动时注入的 AppState.agentDefinitions。构建产物复现时该状态可能为空,菜单没有现场刷新兜底。
## 修复方案
在 AgentsMenu 打开时检测 allAgents 和 activeAgents 是否同时为空;为空时基于当前 cwd 调用 getAgentDefinitionsWithOverrides 重新加载并写回 AppState,正常已有 agents 的路径直接跳过。
## 变更要点
- 为 AgentsMenu 增加空 agentDefinitions 的 fallback reload
- 使用取消标记避免组件卸载后继续写状态
- 保持现有编辑、删除和正常 dev 路径不变
## 自测
- bun run build
- ./dist/cli-bun.js agents 可列出 27 active agents
- bun run typecheck 仍存在仓库既有类型错误,未新增 AgentsMenu 相关错误
2026-05-16 10:48:31 +08:00
IronRookieCoder
fd55d42048
Merge branch 'y574444354:main' into main
2026-05-16 09:08:18 +08:00
linkai0924
091d3a07d1
Merge pull request #117 from y574444354/fix/hub-command
...
fix(favorite): ensure /hub enabled skills appear in command list immediately
2026-05-15 22:49:22 +08:00
林凯90331
5bfaeb21bd
fix(favorite): ensure /hub enabled skills appear in command list immediately
...
Replace incomplete clearSkillCaches() with clearCommandsCache() so the
loadAllCommands memoize layer is also busted when a cloud favorite skill is
enabled or disabled via /hub.
Add skillChangeDetector.notify() to trigger an immediate REPL command list
refresh instead of waiting for the file watcher to detect the change.
Signed-off-by: 林凯90331 <90331@sangfor.com>
Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-15 22:46:03 +08:00
IronRookieCoder
1b8e022522
fix(openai): recover missing streamed tool calls
...
## Bug 详情
OpenAI 兼容流在部分工具调用场景下会出现累计参数片段、复用 tool_calls index 或结束原因为 tool_calls 但缺少 tool_use 块,导致后续 TaskUpdate 等工具调用丢失或参数解析失败。
## 根因
OpenAI stream adapter 直接透传参数片段,无法区分累计快照和增量片段;同一 tool_calls index 被后端复用时也没有重开 tool_use 块。Task 工具参数 JSON 解析失败后统一退回空对象,query 主循环也没有对 stop_reason=tool_use 但无 tool_use 块的响应做恢复。
## 修复方案
在 OpenAI stream adapter 中去重累计参数并处理工具身份变化;仅对 Task 工具做窄范围参数修复,避免将无效 TaskUpdate 修复成 no-op;query 主循环发现缺失 tool_use 块时追加一次元消息让模型补发工具调用。
## 变更要点
- 修复 OpenAI 工具流参数快照去重和 tool_calls index 复用处理
- 增加 TaskCreate/TaskGet/TaskList/TaskUpdate 的解析失败窄范围容错
- 阻止无效 TaskUpdate status 或仅 taskId 输入被修复成空更新
- 增加缺失 tool_use 块的一次性 query recovery transition
- 补充 stream adapter、Task 参数修复和 query recovery 回归测试
## 自测
- bun test packages/@ant/model-provider/src/shared/__tests__/openaiStreamAdapter.test.ts src/utils/__tests__/messages.test.ts src/__tests__/queryMissingToolUseRecovery.test.ts
- bun run typecheck 当前仍失败,错误位于既有未改动文件。
2026-05-15 21:19:04 +08:00
IronRookieCoder
4aa15ac52a
fix(terminal): clear Ink UI on REPL shutdown
...
## Bug 详情
使用 /exit 退出交互式 REPL 后,终端可能保留提示输入、命令补全或其他 Ink 临时 UI,导致 shell prompt 与旧 UI 重叠,出现光标和显示异常。
## 根因
shutdown 路径会恢复 raw mode、bracketed paste、focus reporting 等终端模式,但普通主屏幕 REPL 不会清理 Ink 当前占用的可见区域。进程退出前 React 也不一定能完成 /exit 输入清空后的重新渲染。
## 修复方案
在 Ink 实例中增加主屏幕 shutdown 清理方法,根据最后一帧和声明光标位置清除 Ink 占用区域;gracefulShutdown 在非 alternate-screen 场景调用该方法,alternate-screen 继续保留原有退出逻辑。
## 变更要点
- 新增 ERASE_TO_END_SCREEN CSI 常量用于从当前光标位置清到屏幕底部
- 增加 Ink.clearMainScreenForShutdown() 统一计算并清理主屏幕 REPL 区域
- 在 gracefulShutdown 的终端清理阶段区分 alternate-screen 和主屏幕 Ink 实例
## 自测
- 已运行局部 Biome 检查:bunx biome check packages/@ant/ink/src/core/ink.tsx packages/@ant/ink/src/core/termio/csi.ts src/utils/gracefulShutdown.ts
- 已通过 Bun 直接导入验证新增 Ink 方法和 gracefulShutdown 模块可解析
- 全量 typecheck/build 当前被既有无关问题阻断:ctx_viz/LogoV2/doubaoSTT 类型错误,以及 generate-review-builtin 访问 git@github.com:zgsm-ai/costrict-review.git 失败
2026-05-15 19:03:35 +08:00
DoSun
754157fd88
Merge pull request #114 from Askhz/fix/thinking-model-duplicate-response
...
fix(serve): skip thinking-only message fragments to prevent duplicate response in cs-cloud
2026-05-15 18:12:58 +08:00