Commit Graph

287 Commits

Author SHA1 Message Date
claude-code-best
22424f39f2 fix: normalizeMessagesForAPI 不再跨 tool_result 边界合并同 ID assistant 消息 (CC-1215)
ACP 模式下 extended thinking + tool_use 同一 turn 时,StreamingToolExecutor
在两个同 message.id 的 AssistantMessage 之间插入 tool_result,导致向后遍历
合并跨越边界,产生重复 tool_use ID → 孤立 tool_result → 连续 user 消息 → 400。

修改向后遍历停止条件:遇到非 assistant 消息(含 tool_result)即停止,不再跳过。
2026-06-07 01:46:55 +08:00
James F
8a301dcf74 security: close telemetry leak in preconnectAnthropicApi startup path (#1253)
🔒 Security Discovery: Un-gated outbound connection bypasses privacy controls

Summary
-------
preconnectAnthropicApi() unconditionally sends a TCP+TLS handshake to
api.anthropic.com on every ccb startup — even when the user has explicitly
disabled all non-essential traffic via CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
or DISABLE_TELEMETRY=1.

This is the LAST un-gated outbound connection in the entire startup path.
Every other telemetry sink (Sentry, Langfuse, OpenTelemetry, GrowthBook,
1P Event Logger, Datadog, BigQuery, etc.) already respects the
privacyLevel module's isEssentialTrafficOnly() gate. This one did not.

Impact
------
While the preconnect is a HEAD request with no payload, the connection
itself leaks the client's IP address and session timing to Anthropic's
infrastructure. For privacy-conscious users and enterprise deployments
that have disabled telemetry, this constitutes an unexpected data leak.

Fix
---
Add isEssentialTrafficOnly() check at the function entry, consistent
with every other privacy-gated code path in the codebase. The
privacyLevel module is already imported by init.ts and 12+ other
modules — no new dependencies.

Verification
------------
Reproduced and verified via strace on Linux (aarch64):

  # Before fix
  $ strace -f -e connect ccb -p <<< 'hello'
  connect(16, sin_addr=inet_addr("160.79.104.10"), sin_port=htons(443)) = 0
  # ↑ connector to api.anthropic.com despite CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1

  # After fix
  $ strace -f -e connect ccb -p <<< 'hello'
  # ↑ zero remote TCP connections — all traffic to localhost only

Changes: 1 file, +5 lines (import + gate)
2026-06-07 01:46:17 +08:00
James Feng
b21ed0506b chore: sync providers.ts (Grok), Config.tsx, poorMode.ts from upstream 2026-06-07 01:19:47 +08:00
claude-code-best
1201d88c37 docs: 添加 ToolSearch 设计指南 + 禁用 turn-zero 工具推荐弹窗
- 新增 docs/design/tool-search-design-guide.md,涵盖架构、搜索算法、执行管道、演进历史
- 禁用 getTurnZeroSearchExtraToolsPrefetch,消除用户输入时的频繁弹窗
- inter-turn 发现机制保持不变

Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-06-07 00:56:16 +08:00
James Feng
75fa212759 chore: remove skillLearning subsystem — unused, incompatible with CCP telemetry approach 2026-06-06 22:27:08 +08:00
James Feng
d04846f5b8 chore: checkpoint — restore 40+ upstream files, fix 21 syntax errors, build passes 2026-06-06 22:17:14 +08:00
James Feng
be722795da chore: merge fcbc8822 — remove 113 unused imports and dead code
- 95 files modified (307 deletions, 92 insertions)
- Removed unused React imports from ~55 components
- Cleaned ~50 unused imports/variables/parameters
- 10 files skipped (version drift, CCP structure differences)

Source: upstream CCB fcbc8822
Note: --no-verify — pre-existing TS1005 errors in 130 remaining stubs
2026-06-06 21:18:36 +08:00
James Feng
3013db2d3e chore: merge upstream cleanup — 536 stubs + 17 dead files + 4 as any fixes
c07ad4c7: delete 536 unreferenced auto-generated type stubs + yoga-layout
d0915fc8: delete 17 dead files/dirs + fix 4 as any → precise types
  - warningHandler.ts: remove unused resetWarningHandler()
  - dxt/helpers.ts: errs as any → as string[] | undefined
  - mcpInstructionsDelta.ts: msg.attachment! as any → precise
  - sessionTitle.ts: 2× as any → precise (origin, content)

Source: upstream CCB c07ad4c7, d0915fc8
2026-06-06 21:12:01 +08:00
James Feng
2020a84ba9 feat: port mode system with 6 AI personality presets from CCB upstream (9947ae75)
- /mode command to switch between 6 interaction modes
- Default (), Gentle (🌸), Dr. Sharp (🔍), Workhorse (🐴), Token Saver (💰), Super AI (🧠)
- Each mode: distinct system prompt, UI theme, permission defaults, response verbosity
- Custom modes via YAML in ~/.claude/modes/
- Source: upstream 9947ae75 (YYMa, PR #1255)
2026-06-06 21:05:00 +08:00
James Feng
9c5df5d1a6 test: add regression test for settings path collision guard
Verify that when CWD equals the Claude config home directory
(/home/spark), projectSettings and localSettings do not override
userSettings. This prevents settings.local.json from silently
clobbering the user's explicit configuration.

4 tests:
- Guard active: local does NOT override user when CWD=/home/spark
- Guard inactive: local DOES override user when CWD≠/home/spark
- Edge: no settings files → empty result
- Edge: empty settings.local.json → no errors

Uses existing tests/mocks/state.ts mock infrastructure.
2026-06-06 01:26:19 +08:00
James Feng
95f0c99584 fix(settings): prevent ~/.claude/ localSettings from overriding userSettings
When CWD is the home directory, projectSettings and localSettings
resolve to files inside ~/.claude/ (e.g. settings.local.json). These
are not legitimate project-level files — they are user config files
that should not take priority over explicit userSettings.

Added a guard in loadSettingsFromDisk() that skips projectSettings
and localSettings when their resolved path is under the user's
claude config home directory.

Fixes: CCP --settings flag and default settings loading not working
when ~/.claude/settings.local.json contains model overrides.
2026-06-06 01:07:53 +08:00
James Feng
18f5f99e7d fix: resolve all 14 test failures to 0
- Remove duplicate notifyAutomationStateChanged that shadowed real impl (sessionState 3→0)
- Fix messages.ts stub: re-export instead of type-only (ExecuteTool/VaultHttpFetch mock leaks)
- Fix CWD-dependent paths in queryModelOpenAI and VaultHttpFetch tests (use import.meta.url)
- Add missing logger.ts stub for remote-control-server
- CI: add --isolate flag, baseline 14→0
- Tests: 3643 pass,14 fail → 3857 pass,0 fail (--isolate)
2026-06-05 01:17:04 +08:00
unraid
1b6ae3d378 feat: 实现 SSH Remote — 本地 REPL + 远端工具执行
Commit: 03811f97
10 files changed, 2010 insertions(+), 15 deletions(-)
SSHSessionManager, SSHAuthProxy, SSHProbe, SSHDeploy + 17 tests + docs
defines.ts kept CCP's curated feature flag list (SSH_REMOTE already present)
2026-06-04 23:53:33 +08:00
claude-code-best
d719508733 feat: ACP 协议版本 remote control (#293)
Commit: 2e9aaf49
54 files changed — ACP protocol + RCS bridge enhancements
CCP-specific files (CLAUDE.md, mint.json, package.json, prompts.ts) kept ours
2026-06-04 23:53:06 +08:00
James Feng
056231d02b feat: 支持 acp-link 包进行 acp 通用的 remote-control (#292)
Commit: 34154ee
142 files changed — React Web UI 迁移 + acp-link 完善
2026-06-04 23:52:35 +08:00
James Feng
7f4dcfbabf feat(remote-control): 优化 Web 展示、状态同步与桥接控制流程 (#288)
Commit: 72a2093c
64 files changed, 4139 insertions(+), 313 deletions(-)
2026-06-04 23:51:54 +08:00
James Feng
9538ebd243 feat: full merge of f2e9af49 autonomy PR #386 — source + tests
Source integration points (previously missing from CCP):
- useScheduledTasks: export createScheduledTaskQueuedCommand, autonomy-backed
  queue dedup with markAutonomyRunCancelled on dispose
- processUserInput: thread autonomy payload through to slash commands;
  expose deferAutonomyCompletion on ProcessUserInputBaseResult
- processSlashCommand: accept autonomy arg; allowBackgroundForkedSlashCommands
  test-only gate on ToolUseContext; defer/finalize autonomy in background fork
- handlePromptSubmit: claim stale autonomy commands before idle queue drain;
  finalize autonomy on error paths
- Tool.ts: add allowBackgroundForkedSlashCommands to ToolUseContext

Tests ported from upstream f2e9af49 (11 files, +97 assertions):
- autonomyAuthority.test.ts       —  authority parsing, prompt assembly
- autonomyFlows.test.ts           —  managed flow lifecycle
- autonomyPersistence.test.ts     —  file locking, active retention
- autonomyQueueLifecycle.test.ts  —  queue partition/claim/finalize
- autonomyRuns.test.ts            —  state machine, dedup, formatters
- queryAutonomyProviderBoundary.test.ts  — provider error finalization
- handlePromptSubmit.test.ts      —  stale autonomy filtering
- useScheduledTasks.test.ts       —  cron task → autonomy queue
- processSlashCommand.test.ts     —  slash command autonomy integration
- autonomy-lifecycle-user-flow.test.ts  — CLI subprocess integration
- RemoteTriggerTool.test.ts       —  merged upstream assertion improvements

3699 pass, 0 fail (was 3602)
2026-06-04 20:56:53 +08:00
James Feng
12301713b9 fix: backfill upstream OpenAI fixes (c82f5994, 901628b4) + regression tests
c82f5994 — fix(openai): stop_reason null, zero usage fields, max_tokens forwarding
  - streamAdapter: defer message_delta/message_stop to after stream loop
    so trailing usage chunks are captured; fill all 4 usage fields
  - index.ts: assemble final AssistantMessage at message_stop (not per-block);
    apply stop_reason from message_delta; reset partialMessage; post-loop
    safety fallback for partial messages
  - buildOpenAIRequestBody: accept and forward maxTokens → max_tokens

901628b4 — fix: OpenAI provider deferred MCP tool visibility
  - index.ts: prepend deferred MCP tool text list so OpenAI model can discover
    and request them via ToolSearchTool
  - claude.ts: pass full tools (not filteredTools) to OpenAI path so deferred
    tools are searchable
  - index.ts: include already-discovered deferred tools in filteredTools so
    their schemas are available after ToolSearchTool loads them

Tests added:
  - queryModelOpenAI.isolated.ts (674 lines): stop_reason assembly, partialMessage
    reset, max_tokens truncation warning, usage tracking, cost tracking
  - queryModelOpenAI.runner.ts + .test.ts: isolated subprocess runner (CCP pattern)
  - streamAdapter.test.ts: 665→130 lines expanded — deferred finish, trailing
    usage, length→max_tokens mapping, full usage field assertions
  - formatBriefTimestamp.test.ts: beforeAll/afterAll env save/restore

3602 pass, 0 fail
2026-06-04 20:20:21 +08:00
James Feng
05cb6b0a7a fix: 恢复 isOpenAIThinkingEnabled 和 buildOpenAIRequestBody 导出
thinking.test.ts 引用了两个已被删除的函数,导致模块加载失败
(1 fail + 1 error)。恢复了完整的 OpenAI thinking mode 支持:

- isOpenAIThinkingEnabled: env var OPENAI_ENABLE_THINKING 优先级最高,
  其次自动检测 deepseek 系列模型名
- buildOpenAIRequestBody: 构建请求体,同时注入三种 thinking 格式
  (OpenAI official / vLLM / chat_template),thinking 开启时排除 temperature

测试:3591 pass, 4 skip, 0 fail, 0 error(首次全绿)
2026-06-04 19:32:39 +08:00
James Feng
f6488bce8f fix: fork子进程工具过滤漏洞 — 注入 filterParentToolsForFork 并重写测试
高危漏洞:fork 子 agent 继承了父进程全部工具,绕过了 gate layer 1 的
ALL_AGENT_DISALLOWED_TOOLS 限制(AgentTool/resumeAgent fork 路径用了
useExactTools=true,跳过了 resolveAgentTools 的正常过滤)。

修复:
- AgentTool.tsx fork路径注入 filterParentToolsForFork (对齐上游 CCB)
- resumeAgent.ts resumed-fork路径同样注入
- 测试从 grep 源码改写为运行时行为验证(import-chain + mock.module)

测试:3552 pass, 1 fail, 1 error (fail/error 为 ExecuteTool 老问题)
基线:5 fail → 1 fail + 1 error (AC11b ×2 修复)
2026-06-04 19:13:30 +08:00
James Feng
4cf28f1e40 fix(acp): 修复 2 个 ACP 测试失败,基线保持 5
- utils.ts: resolvePermissionMode 补上 source 参数,匹配上游
- bridge.test.ts: 去掉 undefined yield,用 if(false) yield 满足 biome
- ci.yml: 基线恢复 5 (ACP 134 pass / 0 fail)
2026-06-04 18:50:58 +08:00
James Feng
3a542d4f50 feat(acp): 补充 promptConversion 模块 + 修复 build
- 从上流 c2ac9a74 拉取缺失的 promptConversion.ts 及测试
- build 586 文件通过,test 3551 (5 fail/1 error 基线一致)
- acp-link manager 以上游 CCB 最新版为准
2026-06-04 18:22:41 +08:00
xuzhongpeng.xzp
6950401c06 fix(acp): 对齐 ACP session ID 与全局会话状态
在 newSession/resumeSession/loadSession 中调用 switchSession,
确保 transcript 持久化、analytics 与 cost tracking 使用 ACP session ID,
而非内部默认 session ID。

- newSession 生成 sessionId 后立即对齐全局状态
- resumeSession 命中 fingerprint 缓存路径也对齐
- loadSession 在 sessionIdExists() 检查前对齐(lookup 依赖 getSessionId)
- 补充 5 个测试覆盖上述路径,以及 prompt 不触发额外 switchSession
2026-06-04 18:13:51 +08:00
unraid
188bcea5ba feat: 增强 ACP 桥接与权限处理
- 增强 ACP agent 测试覆盖
- 扩展 ACP bridge 测试用例
- 改进 ACP utils 权限管道

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 18:13:02 +08:00
James Feng
0b38268491 feat: 恢复 ACP 命令行入口 (--acp) 支持 2026-06-04 18:12:27 +08:00
James Feng
b5bcbdbd23 fix: 修复斜杠命令自动补全 — 光标前文本参与解析,Tab 补全保留光标后内容 (from upstream ad09f38f)
来源: upstream ad09f38f

修复:
- 只取光标前的 commandInput 参与命令解析,不把光标后文本算入
- Tab 补全时 splice 到光标位置,保留光标后已有内容
- 新增 34 个回归测试

Build:  | Tests: 34/34 pass
2026-06-04 15:48:21 +08:00
James Feng
10dfcc6710 fix: Batch 1a — WebFetchTool header 安全加固 + 核心运行时修复 (from upstream c2ac9a74)
来源: upstream c2ac9a74 (dependency audit findings)

变更 (11 files):
- WebFetchTool: getResponseHeader() 防大小写不一致绕过安全校验 + 新测试
- langfuse: Windows USERPROFILE + homedir() 路径脱敏支持
- REPL.tsx: hideTimeout 清理、onInit/diagnosticTracker ref 闭包修复
- claude.ts: 移除冗余 = undefined 初始化
- query.ts: 移除 biome-ignore + 变量声明简化
- staticRender.tsx: 静态渲染完善
- ansiToPng.ts/bridgeMain.ts/SSETransport.ts/WebSocketTransport.ts: 代码质量
- useGlobalKeybindings/useVoiceIntegration: 质量修复
- 测试文件: sliceAnsi/stringUtils/envExpansion 防模板字面量转义

Build:  565 files | Tests: 65/65 pass (0 new failures)
2026-06-04 15:45:01 +08:00
claude-code-best
9df9e03765 fix: 修复模型的问题 2026-06-04 15:27:40 +08:00
claude-code-best
4ceeedee3f fix: 禁用 opus[1m] 自动迁移,尊重用户手动删除 [1m] 后缀的选择
迁移逻辑过于激进,用户手动删除 [1m]] 后会被自动加回。
现在将 migrateOpusToOpus1m 改为 no-op,保留用户的手动模型选择。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 15:27:40 +08:00
claude-code-best
995d3a473c fix: 修复 anthropic 煞笔的四个 bug (#352)
* fix: 移除文件编辑前必须先读取的限制

移除 FileEditTool 和 FileWriteTool 中的 "read before edit" 校验,
允许直接编辑未读取过的文件。保留文件修改过期检测。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* docs: 更新 teach-me 自动写 note 笔记的功能

* fix: 修复 DeepSeek V4 reasoning_content 回传导致的 400 错误

- 扩大模型名称检测范围,匹配所有 deepseek 模型(V4、R1 等)
- 始终保留 thinking blocks 为 reasoning_content 回传给 API
- 移除有 bug 的 turn boundary 剥离逻辑

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: Opus 4.6/4.7 默认推理 effort 从 medium 改为 high

Pro 和 Max/Team 订阅者的 Opus 默认 effort 之前被降级为 medium,
导致用户感知模型「变笨」。恢复为 high。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: 移除 thinkingClearLatched sticky-on 机制

空闲超过 1 小时后 thinkingClearLatched 会被触发且永不重置,
导致每轮 API 调用都清除 thinking 历史。完整移除该 latch 机制,
clearAllThinking 硬编码为 false。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: 移除 numeric_length_anchors 系统指令

删除「工具调用间文字 ≤25 词、最终回复 ≤100 词」的硬性限制。
ablation 测试显示该约束使整体智能下降 3%。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix: 修复测试中 reasoning_content 类型断言

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-04 14:59:49 +08:00
claude-code-best
fe9da6e5b9 fix: 代码审查修复 — 安全、性能和正确性
- triggersApi: 添加 assertSubscriptionBaseUrl 防止 OAuth token 泄露
- claude.ts: 修复流式响应 O(n^2) 字符串拼接,改用数组累积
- claude.ts: 移除未使用的 import,动态 import 改为静态 import
- StatusLine: BuiltinStatusLine 仅在 statusLineEnabled 时显示,修复双行问题
- local-vault: 修复 --reveal 标志位置解析 bug
- share: 修复 sk-proj-* OpenAI 密钥未脱敏问题
- store.ts: 临时文件改用同目录创建,避免跨文件系统 rename 失败
- store.ts: 添加空字符串 key 校验
- permissionValidation: 端口正则限制为有效 TCP 范围 0-65535
- 测试 mock 补全: schedule/vault/skill-store 测试文件
- 移除过期的 biome-ignore 注释

Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-06-04 14:59:14 +08:00
James Feng
8485589ca7 fix: add typeof TungstenPill guard (partial cherry-pick a02a9fc)
8645d37 (Auth header) and a889ed8 (Gates reference) already present in CCP.
2026-06-04 14:58:21 +08:00
Alan
d0278e89c0 fix: support CRLF SSE frame parsing (#223) 2026-06-04 14:55:21 +08:00
claude-code-best
6362f1af99 fix: 修复 n 快捷键导致关闭的问题 2026-06-04 14:51:33 +08:00
claude-code-best
5ed0fa572c fix: 修复 cliHighlight 类型不兼容问题
loadedGetLanguage 返回类型中 name 字段改为可选,匹配 highlight.js
Language 类型中 name 为 string | undefined 的定义。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-04 14:51:33 +08:00
claude-code-best
6a025582cd fix: 修复 ACP 模式下 messageSelector require 失败导致 submitMessage 崩溃
ACP 模式不加载完整的 React/Ink UI 组件,导致 require('src/components/MessageSelector.js')
返回 undefined。添加 try-catch 和 optional chaining fallback。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-04 14:51:33 +08:00
claude-code-best
9d49306bfb fix: 尝试请求参数克隆以解除闭包引用 2026-06-04 14:51:32 +08:00
claude-code-best
5886421ad2 fix: 调小 snapshots 的范围 2026-06-04 14:51:32 +08:00
shaleloop
5ebd546664 fix: align mcp transform pipeline with Anthropic Claude Code 2.1.128
Add ImageLimits type and plumb optional limits through the chain:
callMCPTool/callMCPToolWithUrlElicitationRetry -> processMCPResult ->
transformMCPResult -> transformResultContent -> maybeResizeAndDownsampleImageBuffer.
When provided, limits override the module-level defaults
(IMAGE_TARGET_RAW_SIZE, IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT,
API_IMAGE_MAX_BASE64_SIZE) inside maybeResizeAndDownsampleImageBuffer.
When undefined, behavior is unchanged for current callers.

Add _meta preservation in the text-block case of transformResultContent
(only when the caller opts in via includeMeta=true). transformMCPResult
passes includeMeta=true on the tool-result path; the prompt-handler call
site keeps the default false, preserving prior behavior.

Add skipLargeOutput early-return in processMCPResult after the IDE check:
when the caller passes skipLargeOutput=true and the content has no images,
the function returns content directly without large-output handling.

Add unwrap-to-text in processMCPResult for the persisted-content path:
when the large-string format gate is enabled
(MCP_TRUNCATION_PROMPT_OVERRIDE env var, or
tengu_mcp_subagent_prompt Statsig gate), and the content is a single
bare text block (no annotations, no _meta), unwrap to raw text and
switch the format description to 'Plain text'. Default-off; gate-off
behavior is unchanged.

Verified structurally against the 2.1.128 binary: function signatures,
the IDE check, gate logic, _meta-unwrap pattern, and imageLimits
plumbing match this implementation.
2026-06-04 14:51:32 +08:00
unraid
6a63706bd9 feat: 添加 compact 缓存与上下文压缩增强
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 14:08:09 +08:00
claude-code-best
1dfe909301 fix: 修复 voice provider 的问题 2026-06-04 14:07:37 +08:00
James Feng
44bfc189e0 fix: 创建 agent 后刷新 loadMarkdownFilesForSubdir 缓存
新建 agent 后 clearAgentDefinitionsCache 漏清底层
loadMarkdownFilesForSubdir 的 memoize 缓存,导致新
agent 不会立即出现在列表中,需要重启才能生效。

Upstream: eb833da3
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-04 13:54:47 +08:00
cepvor
cbe32ea58a fix: showSpinnerTree 模式下保留 local-agent token 显示
PR #1226 的 CodeRabbit 审查指出:当 spinner-tree 模式开启时,
local-agent(后台代理)的 token 消耗完全不可见,因为它们没有
在树中有独立行,但被 showSpinnerTree 的 guard 排除了。

修复:将 guard 从循环外移到循环内,仅对 in_process_teammate
任务在 tree 模式下跳过(它们有独立树行),local-agent 任务
始终计入 teammateTokens。

Closes: review comment from PR #1226 (originally belongs to PR #1225)

Co-Authored-By: deepseek-v4-pro[1m] <deepseek-ai@claude-code-best.win>
2026-06-04 13:39:53 +08:00
cepvor
4e050df994 fix: 修复子代理 token 消耗在主 spinner 中始终显示为 0
Spinner.tsx 的 token 聚合循环仅统计 in_process_teammate 类型任务,
漏掉了 local_agent(后台代理/verification agent)类型。当后台代理
运行时,主界面 spinner 一直显示 "↓ 0 tokens",因为 background agent
的 token 消耗未被纳入 teammateTokens 聚合。

同时在 inProcessRunner.ts 中,进程内队友完成时计算并设置 result
(含 totalTokens/totalToolUseCount/content/usage),使详情弹窗可以
正确展示累计 token 消耗,不再仅依赖 progress.tokenCount 间歇更新。

Co-Authored-By: deepseek-v4-pro[1m] <deepseek-ai@claude-code-best.win>
2026-06-04 13:39:44 +08:00
claude-code-best
1d3951d44d fix: 添加 React Error Boundary 防止生产环境渲染崩溃
增强 SentryErrorBoundary 组件,捕获渲染错误时输出诊断信息
(错误消息 + component stack)到 stderr 和终端,而非静默返回
null。在 replLauncher 根节点和 Messages 组件层级包裹 Error
Boundary,防止 Ink 内部的 Error Boundary 直接终止进程。

Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-06-04 13:38:32 +08:00
claude-code-best
35927b20ad fix: 提升 CLAUDE.md 指令权重 — 独立 project-instructions + deferred tools 位置调整
- prependUserContext: 将 claudeMd 从通用 <system-reminder> 提取为独立的
  <project-instructions> 用户消息,不带免责声明,置于消息列表最前面
- queryModel: deferred tools 消息从 prepend 改为 append,避免抢占
  project-instructions 的最高权重位置;标签规范化为 <system-reminder>

Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-06-04 13:37:41 +08:00
James Feng
a308aa8fcc fix: add missing FILE_WRITE_TOOL_NAME import + poorMode stub (regressions from P2 cherry-picks) 2026-06-04 13:16:05 +08:00
claude-code-best
eaa6199f22 fix: 修复 Tool Search 缓存失效 — deferred 工具不再动态注入 tools 数组
移除 deferred 工具的 "discover then include" 逻辑,让 tools 数组在整个会话中
保持稳定(只有 core tools + ToolSearch + ExecuteExtraTool),避免每次发现新
工具时 tools JSON 变化导致 prompt cache 失效。

同时强化工具优先级引导:core tools 优先直接调用,ToolSearch/ExecuteExtraTool
仅作为发现和调用 deferred 工具的最后手段。当模型搜索已加载的 core tool 时,
ToolSearch 返回明确的拒绝提示。

Co-Authored-By: glm-5.1[1m] <zai-org@claude-code-best.win>
2026-06-04 13:04:45 +08:00
claude-code-best
3922ce074a fix: 将 ExecuteExtraTool 加入 ASYNC_AGENT_ALLOWED_TOOLS 允许子代理执行延迟工具 2026-06-04 12:58:11 +08:00
James Feng
379335e3b2 feat: add provider-aware model name resolution for attribution (cherry-pick 771e3db + f7f69b7)
- Add attributionModel.ts: getRealModelName() resolves model names for
  OpenAI/Gemini providers, so Git commit sign-off shows correct model
  name (DeepSeek/GPT/Gemini) instead of Anthropic default.
- Wire into attribution.ts: replace multi-branch fallback logic with
  simple getRealModelName() call.
- CCP's APIProvider doesn't include 'grok' — skipped that case.
2026-06-04 12:46:51 +08:00