kingboung
e0f8c1a289
fix: show (bundled) label for /review and /security-review commands
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 20:45:33 +08:00
DoSun
ef151d84ba
feat(server): 借鉴 vibe-kanban 优化子进程管理与消息可靠性
...
- 添加内存消息缓冲区,解决 tab 切换后用户消息丢失问题
- prompt() 去除重复 waitReady(),减少不必要的等待
- 新增 kill_on_drop 工具(FinalizationRegistry),待后续启用
- 新增权限模式 hooks 自动配置(仅在显式指定 permission_mode 时生效)
- 清除 serve 模式下的调试 timing 日志
2026-05-12 20:38:35 +08:00
geroge
5c2e1918ca
Merge pull request #73 from mini2s/fix-autocompact
...
feat(compact): add CoStrict model support and prevent infinite compaction loops
2026-05-12 20:12:15 +08:00
mini2s
a796a328c9
feat(compact): add CoStrict model support and prevent infinite compaction loops
2026-05-12 20:07:24 +08:00
Askhz
339ef4bc63
fix: costrict provider 下子 agent 模型别名继承父模型
...
costrict 没有 haiku/sonnet/opus 模型层级,当子 agent(如 Explore)
配置为 haiku 时,parseUserSpecifiedModel 会解析到 Claude haiku
模型 ID 而非继承主会话所选模型。修复为 costrict 下所有 family
alias 强制走 inherit 逻辑,使用 getRuntimeMainLoopModel 以正确
支持 plan mode 等场景。
Co-Authored-By: CoStrict-DeepSeek-V4-Pro <deepseek-ai@claude-code-best.win>
2026-05-12 19:31:36 +08:00
DoSun
daa2dce7b9
Merge pull request #70 from y574444354/feat/server-refactor-90331
...
feat(server): support reading subagent transcripts
2026-05-12 19:14:04 +08:00
kingboung
680342bc28
chore: remove /strict:review and /strict:security-review commands
...
Only keep /review and /security-review via extract-to-disk.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 18:00:10 +08:00
DoSun
be821416e5
Merge pull request #71 from Askhz/fix/server-agent-switch
...
fix(server): 修复内置 agent 切换时系统提示未注入及 @agent 出现在用户消息中的问题
2026-05-12 17:54:11 +08:00
Askhz
e7c384bca5
fix(server): 修复内置 agent 切换时系统提示未注入及 @agent 出现在用户消息中的问题
...
- set_agent 控制消息处理中,查找对应 AgentDefinition 并将其 getSystemPrompt()
写入 options.systemPrompt,使 QueryEngine.ask() 能正确使用 agent 系统提示
- 将 "build"(前端默认模式的显示名称)处理为 undefined,切换回默认模式时
同步清空 options.systemPrompt 和 mainThreadAgentType
- /prompt 和 /prompt_async 接口不再将 agentMentions (@agent-*) 拼入 content,
该语法仅用于 REPL 命令模式,出现在 server 模式的 prompt 中会被模型误解
Co-Authored-By: Sonnet-4.6-CoStrict <noreply@anthropic.com>
2026-05-12 17:50:07 +08:00
kingboung
08ad8a55da
refactor: strict review variants load skill via Skill tool
...
Remove embedded files, use Skill tool to load review/security-review
skill instead, matching the same mechanism as /review.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 17:38:56 +08:00
kingboung
909e001100
feat: register /strict:review and /strict:security-review via registerBundledSkill
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 17:31:24 +08:00
kingboung
c374cab5ed
fix: remove registerBundledSkill for strict review variants
...
All review commands now exclusively use extract-to-disk + skill scanner,
no registerBundledSkill duplication.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 17:16:09 +08:00
geroge
00887762a2
Merge pull request #68 from IronRookieCoder/feat/proxy-ca-improvements
...
feat: 添加代理和 CA 证书功能改进及测试
2026-05-12 17:15:25 +08:00
geroge
fbae6383fd
Merge pull request #69 from y574444354/test-pattern-with-root
...
test: add unit tests for patternWithRoot with Windows path improvements
2026-05-12 17:14:59 +08:00
unknown_
24e62eb6f3
test: add unit tests for patternWithRoot with Windows path improvements
2026-05-12 17:07:46 +08:00
kingboung
ca5114dfcf
fix: remove duplicate review skill registration
...
Remove registerBundledSkill for /review and /security-review since
extract-to-disk + skill scanner already registers them. Only register
/strict:review and /strict:security-review via bundled skill.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 17:03:38 +08:00
kingboung
09bbfb77e1
fix: allow model to invoke Skill tool for review commands
...
Set disableModelInvocation to false so the model can use the Skill tool
to load review/security-review skills as instructed by locale templates.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 17:01:12 +08:00
DoSun
d29801aad2
fix(server): resolve rebase conflicts and align tests with new architecture
2026-05-12 16:56:56 +08:00
kingboung
7565ad59a4
refactor: use inline mode for all review commands
...
Remove context:'fork' from strict variants, all four commands now
execute inline in the main session.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 16:55:48 +08:00
kingboung
7425b59826
feat: register /review and /security-review via registerBundledSkill
...
Replace indirect Skill-tool-based routing with direct bundled skill
registration using SKILL_FILES, matching /strict:review approach.
- reviewSkills.ts registers all four commands (review, security-review,
strict:review, strict:security-review) with embedded files
- Remove review command from commands.ts (now bundled skill)
- Simplify review.ts to only export ultrareview
- Update mcp.ts to get review command from bundled skills
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 16:52:43 +08:00
DoSun
edb72b447b
fix(server): return latest N messages instead of first N in messages endpoint
2026-05-12 16:50:09 +08:00
DoSun
86fac2bd75
feat(server): support deleting non-resident sessions with disk cleanup
2026-05-12 16:50:09 +08:00
DoSun
1a440af30b
feat: 对齐 OpenCode 即时推送架构,session status 事件绕过队列直接推送
...
- sessionState.ts: 单 listener → Set 多订阅者,新增 registerSdkEventConsumer 绕过 SDK 事件队列
- sdkEventQueue.ts: SessionStateChangedEvent 从队列系统移除
- print.ts: runHeadlessStreaming 注册直接消费者,事件即时 output.enqueue()
- query.ts: queryLoop 每轮迭代发送 running 心跳
- server/routes/session.ts: prompt_async 立即 emit busy(不等子进程 init),历史会话先解析 body 再恢复
- server/sessionHandle.ts: prompt() 检测已 busy 时跳过重复 emit
- server/eventBus.ts: 添加 SSE publish 耗时日志
- server/server.ts: 传递 eventBus 给 sessionRoutes
- 新增 16 个 sessionState 多订阅者 + SDK consumer 测试
2026-05-12 16:49:26 +08:00
DoSun
5890d16b3a
feat(server): emit session.updated on title generation with fallback
2026-05-12 16:49:05 +08:00
DoSun
58b4b5e354
fix(server): include created_at in session.created SSE event
...
The session.created event only had session_id and status, causing
downstream adapters to produce empty time objects and new sessions
landing in the 'older' group.
2026-05-12 16:49:05 +08:00
DoSun
922bcf7660
fix(server): accept client messageID to enable optimistic message dedup
2026-05-12 16:48:59 +08:00
kingboung
6c909321ed
feat: register /strict:review and /strict:security-review commands
...
Add strictReview.ts to register strict review variants as bundled skills
with context:'fork' (sub-agent mode), using SKILL_FILES and CommandLocale.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 16:38:24 +08:00
林凯90331
6e8d54da6c
feat(server): support reading subagent transcripts
...
Add fallback in readSessionMessages() to locate subagent transcript files under <project>/<session>/subagents/agent-<id>.jsonl when the sessionId is actually an agentId. Extract entryToSessionMessage and readMessagesFromLines helpers for reuse between main and subagent transcripts.
Also route 'system' messages through the 'message' event in sessionMessageRouter so subscribers can observe them.
Signed-off-by: 林凯90331 <90331@sangfor.com>
Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-12 16:30:45 +08:00
IronRookieCoder
b39887b2d3
feat: 添加代理和 CA 证书功能改进及测试
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 16:24:02 +08:00
unknown_
ade163561b
fix: protect tabs from wrap-ansi expansion in MeasuredText
2026-05-12 16:05:08 +08:00
kingboung
33bdcb9b74
fix: restore verified commit 89c9e87c files after main merge
...
Restore files to match the verified commit state:
- generate-review-builtin.ts: skill-only generation, SSH clone, optimize/agent-prompts branch
- extension.ts: listBuiltinSkillNames, getClaudeConfigHomeDir approach
- lang.ts: re-extract review skills on language switch
- locales: use Skill tool prompt format
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 15:41:21 +08:00
kingboung
4c56bbe268
fix: remove agent-based review code reintroduced from main merge
...
Revert PR #43 agent-based code that was brought in during the main merge:
- Remove generateBuiltinAgents and all agent-related logic from generate script
- Delete src/costrict/review/agent/ directory
- Delete src/commands/security-review.ts (handled by bundled skill)
- Restore PR #64 extension.ts with getClaudeConfigHomeDir approach
- Remove REVIEW_AGENTS from builtInAgents.ts
- Keep review command (needed for MCP entry), but use CommandLocale instead of agent
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 15:32:07 +08:00
kingboung
a645f34ee5
fix: resolve merge conflicts with main, keep branch review architecture
...
- Remove duplicate extractBundledSkill from generated builtin.ts template
- Keep extract-to-disk extension.ts (branch version)
- Keep SSH clone URL for generate-review-builtin
- Revert .gitignore, package.json, locales to branch versions
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 15:16:17 +08:00
y574444354
73f8641033
chore: bump version to 4.0.15 and update CHANGELOG
...
- 版本号 4.0.14 → 4.0.15
- 更新 CHANGELOG.md 添加 4.0.14 变更记录
- markdownConfigLoader: ripgrep 失败时降级到原生文件搜索
2026-05-12 15:10:39 +08:00
kingboung
8599340c68
Merge remote-tracking branch 'origin/main' into feat/migrate-review-agents
...
Conflicts resolved in favor of our branch for review-related files.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 15:08:13 +08:00
kingboung
58518f4b9b
feat: re-extract review skills on language switch
...
When /lang is used to switch language, immediately re-extract review
skills for the new locale and refresh skill caches so changes take
effect without restart.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 14:52:39 +08:00
costrict
b6c353977d
fix(server): 支持按 prompt 动态切换 agent
...
- sessionHandle 添加 --agent spawn 参数和 setAgent() 控制请求
- prompt/prompt_async 路由提取 body.agent 并调用 setAgent
- print.ts 添加 set_agent 控制请求处理
- controlSchemas 添加 SDKControlSetAgentRequestSchema
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 14:42:42 +08:00
y574444354
d3100178e3
fix: 修复 betas 导入名称不匹配
...
TOOL_SEARCH_BETA_HEADER_* → SEARCH_EXTRA_TOOLS_BETA_HEADER_*
与 src/constants/betas.ts 的导出名称保持一致
2026-05-12 12:34:38 +08:00
y574444354
666d2ba2eb
Merge branch 'main' into merge
2026-05-12 12:25:05 +08:00
y574444354
8b6bdd44d8
Revert "Merge pull request #60 from y574444354/feat/migrate-review-agents"
...
This reverts commit 62398b2dcc , reversing
changes made to ba39b17a7e .
2026-05-12 12:11:37 +08:00
y574444354
d59d1f590a
chore: 合并社区 upstream/main 代码至 v2.4.2
...
合并 claude-code-best/claude-code 社区最新代码,包含:
- 配置文件更新:precheck/lint-staged/overrides 等
- 新 feature flags:EXPERIMENTAL_SEARCH_EXTRA_TOOLS、AUTOFIX_PR
- 工具系统架构更新:Tool Search、ACP 协议支持
- 文档更新:CLAUDE.md 同步架构变更
- 依赖更新:SDK 版本升级、lint-staged 加入
冲突处理策略:以 costrict 版本为主,选择性合并上游功能改进
2026-05-12 11:55:04 +08:00
kingboung
37f53440f3
Merge remote-tracking branch 'origin/main' into feat/migrate-review-agents
2026-05-12 11:49:50 +08:00
kingboung
c3e19d7d2a
refactor: migrate review skills from registerBundledSkill to extract-to-disk
...
Replace registerBundledSkill() with runtime extract-to-disk + standard
skill scanner discovery, aligning with upstream opencode PR #360 approach.
- Add extractBundledSkill() to generate script output
- Create extension.ts for runtime skill extraction to ~/.claude/skills/
- Remove reviewSkills.ts (registerBundledSkill registration)
- Update bundled/index.ts to call Extension.initializeBuiltinSkills()
- Add build:builtin-review script to package.json
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 11:49:38 +08:00
kingboung
e68415c7e9
fix: add Skill tool to allowedTools and restore locale templates
...
- Add 'Skill' to allowedTools so model can invoke Skill tool to load
review/security-review SKILL.md content
- Restore src/costrict/command/locales/ with zh-CN/en templates telling
model to use Skill tool (aligns with opencode PR #360 approach)
- Remove model: 'inherit' from review registration (was resolving to
wrong model, strict:plan works without it)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 10:50:43 +08:00
Askhz
158ead6cbe
Merge branch 'main' into feat/costrict-max-tokens
2026-05-12 10:16:21 +08:00
geroge
62398b2dcc
Merge pull request #60 from y574444354/feat/migrate-review-agents
...
feat: migrate review system to bundled skill files mechanism
2026-05-12 10:11:29 +08:00
geroge
ba39b17a7e
Merge pull request #56 from Askhz/chore/remove-attribution-header
...
chore: remove x-anthropic-billing-header from system prompt
2026-05-12 10:11:03 +08:00
geroge
d1197c2efc
Merge pull request #54 from Askhz/feat/costrict-agent-type-header
...
feat: add agent-type request header to CoStrict provider
2026-05-12 10:10:48 +08:00
Askhz
1970c698ea
feat(costrict): 根据模型列表动态设置 max_tokens 参数
...
从 /ai-gateway/api/v1/models 返回的模型信息中读取 maxTokensKey
和 maxTokens 字段,发送请求时动态注入对应参数名和参数值。
maxTokensKey 缺失时默认使用 max_tokens,maxTokens 无值时不传该参数。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 21:23:28 +08:00
Askhz
40dc2720d0
fix(server): 修复 csc.exe server 模式下探针进程因 --feature 参数崩溃导致模型列表为空
...
Bun 将源码编译为独立可执行文件后,process.argv[1] 变为内部虚拟路径
(B:/~BUN/root/cli.js),该路径含 / 被误判为脚本模式,导致 saveChildSpawnPrefix
为子进程生成 --feature / -d 参数。子进程(csc.exe 本身)不识别这些 Bun
运行时参数,以 exit code 1 退出,探针失败,/provider/capabilities 返回空模型。
修复:
- getScriptArgsForChild: 识别并跳过 Bun snapshot 虚拟路径前缀 (B:/~BUN/, /snapshot/)
- saveChildSpawnPrefix: 仅在 scriptArgs 非空(脚本模式)时才生成 --feature/define 参数
- build.ts: 补充 Step 7 编译独立可执行文件 csc.exe / csc
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 20:59:10 +08:00
kingboung
c431001a4a
Merge remote-tracking branch 'origin/main' into feat/migrate-review-agents
2026-05-11 20:54:55 +08:00
kingboung
62efcef508
refactor: consolidate review skill registration and fix command conflicts
...
- Merge strict:review/strict:security-review into reviewSkills.ts (single
file registers all four commands: /review, /security-review,
/strict:review, /strict:security-review)
- Remove conflicting prompt commands from src/commands/ (review.ts,
security-review.ts) so bundled skills take precedence
- Remove REVIEW_AGENTS import from builtInAgents.ts and mcp.ts
- Remove agent generation logic from generate-review-builtin.ts
- Configure allowedTools and model: 'inherit' per claudecode spec
- Switch test branch to optimize/agent-prompts
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 20:52:18 +08:00
林凯90331
f8d4feee98
feat(rawDump): disable raw dump by default
...
Invert the enablement logic so raw dump is disabled unless
CSC_DISABLE_RAW_DUMP or COSTRICT_DISABLE_RAW_DUMP is explicitly
set to 0 or false.
Signed-off-by: 林凯90331 <90331@sangfor.com>
Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-11 20:41:56 +08:00
林凯90331
e8dca4d3bd
feat(cli): add git commit hash and build time to --version output
...
Include commit short hash and formatted build timestamp in the
version string, matching the output format of cs --version.
Signed-off-by: 林凯90331 <90331@sangfor.com>
Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-11 20:27:22 +08:00
kingboung
a5235ab03c
Merge remote-tracking branch 'origin/main' into feat/migrate-review-agents
2026-05-11 20:21:16 +08:00
kingboung
e3ba147dbe
refactor: migrate review system to bundled skill files mechanism
...
Replace custom extension.ts initialization and agent-based routing with
csc's built-in registerBundledSkill({ files }) mechanism. Review and
security-review skills are now registered with embedded files that
get lazily extracted to disk on first invocation. Locale is resolved
at startup via getResolvedLanguage().
- Remove agent generation from generate-review-builtin.ts (skill-only)
- Remove extension.ts, REVIEW_AGENTS registration, strict:* skills
- Add reviewSkills.ts with registerReviewSkills() for unified registration
- Adapt to new costrict-review index.json format (skills-only, new paths)
- Remove src/costrict/command/locales/ (no longer needed)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 20:19:05 +08:00
Askhz
0a93873e3d
fix: DELETE 历史 session 时删除磁盘 transcript 文件
...
- PATCH 接口:历史 session 不在内存时不再 404,直接返回成功
- DELETE 接口:历史 session 通过 resolveSessionFilePath 定位并删除磁盘 .jsonl 文件
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 16:11:52 +08:00
DoSun
3aab6fb889
fix: 修复 services/utils 层 strict 模式类型错误
...
- api/errors: formatAPIError 参数类型适配
- rawDump/logger: 导出可同时作为函数和对象调用的 log
- rawDump/worker: postJson body 类型断言、reduce 泛型标注
- sideQueryOpenAICompat: tool_calls 类型收窄为 FunctionToolCall
2026-05-11 14:33:50 +08:00
DoSun
5d6b31398a
fix: strict 模式类型修复 + 恢复 allow-dangerously-skip-permissions 选项
...
- LogoV2: 抽取 ChannelsNoticeIfLoaded 消除重复,修复 nullability
- main.tsx: 恢复 --allow-dangerously-skip-permissions 选项
- global.d.ts: 添加 doubaoime-asr 模块类型声明
2026-05-11 14:33:44 +08:00
DoSun
c96fe77c45
fix(server): 修复 strict 模式下类型错误
...
- errors.ts: status 转为 ContentfulStatusCode
- server.ts: BunServer 泛型参数修正
- transcriptReader.ts: 补充 compactMetadata 类型声明
2026-05-11 14:33:37 +08:00
DoSun
799ed96b37
feat(server): prompt 支持 parts/agent 传递,import 迁移至子模块
...
- session route: ssePrompt 支持 parts 参数,支持 agent mentions
- session route: createSession 支持自定义 session_id
- provider/sessionManager: InitData import 从 types.js 统一导入
2026-05-11 14:33:31 +08:00
DoSun
3ebfb2c05d
refactor(server): 拆分 SessionHandle 为三个子模块
...
- childSpawn.ts: spawn 参数构建、INIT_TIMEOUT_MS、save/loadChildSpawnPrefix
- sessionControlChannel.ts: control response pending 管理
- sessionMessageRouter.ts: stdout 消息路由 + opencode 事件发射
- sessionHandle.ts: 精简为编排层,委托给子模块
- types.ts: 统一导出 InitData/PendingPermission/PendingQuestion
2026-05-11 14:33:23 +08:00
林凯90331
1ef4182a9e
fix(server): resolve merge conflicts with feat/server-refactor
...
- event.ts: combine /event endpoint with cwdFilter support,
remove unused /global/event endpoint
- sessionHandle.ts: keep INIT_TIMEOUT_MS, emitOpencodeEvent,
emitBusyStatus, toPermissionKey and extractPatterns
Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-11 13:31:24 +08:00
林凯90331
009e9f0c49
feat(server): opencode-compatible question/permission with AskUserQuestion popup support
...
- emit opencode-compatible SSE events for questions and permissions
(flat shape with top-level session_id for wrapEventStream routing)
- adapt question API (/question, /question/:id/reply, /question/:id/reject)
for AskUserQuestion and elicitation workflows
- fix AskUserQuestion tool name matching and guard against double-wrapped events
- allow requiresUserInteraction tools to ask user even in bypassPermissions mode
- avoid blocking on session init to prevent cold-start timeout
- add /global/event SSE endpoint and cwdFilter support
- add question routes and session handle tests
Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-11 12:54:44 +08:00
Askhz
5d288c4290
chore: remove x-anthropic-billing-header from system prompt
2026-05-11 11:47:39 +08:00
林凯90331
1240a1a499
fix(rawDump): prevent batch worker concurrency cascade and add fetch timeout
...
- Add in-process isRunning flag to block reentrant runBatch (file lock
fails when pid === process.pid)
- Replace setInterval + double immediate trigger with self-scheduling
setTimeout that only fires after previous batch awaits
- Move clearQueue() to right after readQueue() so any unexpected
concurrent runBatch sees an empty queue and exits immediately
- Cache repoInfo and workingTreeDiff in processTask, pass into all three
upload functions to halve git invocations per task
- Add 30s AbortController timeout on postJson fetch so the worker no
longer hangs indefinitely on unresponsive networks
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 11:34:44 +08:00
Askhz
4dcb3a2107
feat: add agent-type request header to CoStrict provider
...
在 CoStrict provider 的所有 API 请求中注入 agent-type header,
反映当前会话所使用的 agent 或 skill,默认值为 "build"。
- fetch.ts: createCoStrictFetch 接受可选 agentType 参数,PascalCase
自动转 kebab-case(StrictSpec → strict-spec),注入 agent-type header
- index.ts: queryModelCoStrict 读取 getMainThreadAgentType()(--agent 启动)
或 getActiveSkillName()(slash skill 触发)作为 agentType
- models.ts: /v1/models 请求添加 User-Agent: csc/{VERSION} header
- state.ts: 新增 activeSkillName 状态及 getter/setter
- processSlashCommand.tsx: inline skill 和 fork skill(context:fork)
触发时均调用 setActiveSkillName 记录当前 skill/agent 名
- caches.ts: /clear 时调用 setActiveSkillName(undefined) 重置状态,
避免新会话继承上一会话的 agent-type
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 11:17:02 +08:00
claude-code-best
bc74d0da62
fix: 修复 CI 中 10 个测试的 Bun mock.module 跨文件污染
...
- thinking.test.ts: 补 envUtils.js 防御性 mock,提供 isEnvDefinedFalsy
和 isEnvTruthy 正确实现,覆盖 6 个其他测试文件不完整 mock 导致的污染
- launchLocalVault.test.ts: 补 keychain.js 防御性 mock,强制抛
KeychainUnavailableError 使 store 走文件回退路径,覆盖 store.test.ts
和 keychain.test.ts 的 mock 残留
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-11 09:38:13 +08:00
DoSun
434ee9e806
feat: session status 改造为 prompt 级别 busy/idle 三态,SSE 事件和 status 接口按 cwd 过滤
...
- 新增 SessionBusyStatus 类型(idle/busy/retry),替代进程生命周期状态
- SessionHandle 在 prompt/result/abort/close/error 中追踪 busyStatus 并通过 EventBus 发布 session.status SSE 事件
- /session/status 接口返回扁平 Record<string, SessionBusyStatus>,支持按 cwd 过滤
- EventBus 支持客户端 cwdFilter,SSE 事件按工作空间过滤推送
- sessionManager 在 create/delete 时注册/注销 sessionCwd 映射
2026-05-11 09:26:15 +08:00
claude-code-best
b85cfc69b7
fix: 修复 Bun mock.module 跨文件污染导致 87 个测试失败
...
- 重写 setupAxiosMock 使其完全 per-file 独立,消除共享 handles 数组的竞态
- 将 launchSchedule/launchMemoryStores/launchAgentsPlatform 从直接 mock
源 API 模块改为 mock axios 底层 HTTP 层,避免污染同目录 api.test.ts
- 删除两个 Ink waitUntilExit 超时测试文件
- 修复 hostGuard/keychain 跨文件 mock 污染
- 清理 api.test.ts 中的 require() workaround
- 在 CLAUDE.md 记录 mock 污染排查经验
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-11 08:50:03 +08:00
claude-code-best
8f512c6222
Revert "feat: 添加 GBK 编码自动检测支持,文件读写工具透明处理非 UTF-8 文件"
...
This reverts commit 0ce8f7a1cb .
2026-05-10 22:57:30 +08:00
claude-code-best
24e55654f6
Revert "fix: 修复非 UTF-8 编码文件读写 round-trip 字节损坏"
...
This reverts commit 17c06690d8 .
2026-05-10 22:57:25 +08:00
claude-code-best
77092f71ab
fix: 修复非 UTF-8 编码文件读写 round-trip 字节损坏
...
GBK 文件编辑后被错误写入为 UTF-8(Buffer.from 不支持 gbk 编码,
encodeString 静默 fallback),latin1/ANSI 文件 0x80-0x9F 范围字节因
TextDecoder('latin1') 与 Buffer.from('latin1') 编解码不对称而被篡改。
修复:latin1 解码改用严格 ISO-8859-1 映射保证与 Buffer.from 对称;
GBK 编码通过 TextDecoder 反向构建查找表实现零依赖编码器。
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-10 22:08:52 +08:00
claude-code-best
121bc61aa2
fix: 修复 issue-template 测试误删 .github/workflows 目录
...
afterEach 清理时 rmSync 误删了整个 .github/ 目录(含 workflows),
改为只删测试创建的 ISSUE_TEMPLATE 子目录。
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-10 21:11:50 +08:00
claude-code-best
58b58e649d
feat: 添加 GBK 编码自动检测支持,文件读写工具透明处理非 UTF-8 文件
...
新增 encoding.ts 核心模块实现三层编码检测(BOM → UTF-8 fatal → GBK 回退),
改造同步/异步读取路径和写入路径,使 FileReadTool/FileEditTool/FileWriteTool
能正确处理 GBK 编码文件。包含完整单元测试和 spec 文档。
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-10 20:50:12 +08:00
claude-code-best
cfa7872771
fix: 修复 feature 的使用问题
2026-05-10 19:26:57 +08:00
claude-code-best
f928a11078
fix: 移除 auto mode 的 provider 和模型白名单限制
...
移除 firstParty provider 限制和 claude-(opus|sonnet)-4-[67] 模型白名单,
使所有模型和 provider 在 TRANSCRIPT_CLASSIFIER feature 启用时均可使用 auto mode。
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-10 17:47:38 +08:00
claude-code-best
af0d34ebbe
Merge pull request #446 from claude-code-best/feature/prompt-cut-down
...
feat: 大量系统提示词优化
2026-05-10 15:30:34 +08:00
claude-code-best
d303e1cd9a
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-05-10 09:39:34 +08:00
claude-code-best
da0b4bce24
chore: 移除废弃的 ctx_viz 类型声明
...
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:44 +08:00
claude-code-best
52956804ff
feat: 注册所有新命令到命令系统和工具注册表
...
- commands.ts: 注册所有新命令(memory-stores、vault、schedule 等),
移除 require() 动态加载,统一为 ESM import
- tools.ts: 注册 LocalMemoryRecallTool、VaultHttpFetchTool
- 补充命令测试(bridge-kick、commit、commit-push-pr、init-verifiers)
- 补充工具测试(AgentTool、RemoteTrigger、SkillTool、WebFetch、WebSearch)
- 集成测试:autonomy-lifecycle-user-flow 更新
- 探测脚本和功能文档
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:39 +08:00
claude-code-best
3f3d9d9638
feat: 添加 Provider Registry、StatusLine、Cache Stats 和其他增强
...
- providerRegistry: OpenAI 兼容 provider 切换(Cerebras/Groq/DeepSeek/Qwen)
- StatusLine: 增强状态栏(缓存命中率、TTL 倒计时、自定义 shell 命令)
- cacheStats: 缓存命中率和 token 签名追踪
- ultrareviewPreflight: 代码审查预检服务
- SkillsMenu/filterSkills: 技能菜单过滤增强
- MagicDocs/langfuse prompts: 提示词更新
- claude.ts: API 客户端更新
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:35 +08:00
claude-code-best
444e46a0b4
feat: 添加工具类命令(teleport、recap、break-cache、env、tui 等)
...
- /teleport: 从 claude.ai 恢复会话
- /recap: 生成会话摘要
- /break-cache: 提示缓存管理(once/always/off/status)
- /env: 环境信息展示(含密钥脱敏)
- /tui: 无闪烁 TUI 模式管理
- /onboarding: 引导流程
- /perf-issue: 性能问题诊断
- /debug-tool-call: 工具调用调试
- /usage: 用量统计(合并 /cost 和 /stats 别名)
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:31 +08:00
claude-code-best
4e4dd83f08
feat: 添加 GitHub 集成命令(issue、share、autofix-pr)
...
- /issue: 通过 gh CLI 创建 GitHub issue,支持标签/指派
- /share: 会话日志分享到 GitHub Gist,支持密钥脱敏
- /autofix-pr: 自动修复 CI 失败的 PR,进度追踪
- launchCommand: 共享命令启动器
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:23 +08:00
claude-code-best
fc43aa9e7a
feat: 添加本地 Memory/Vault 管理命令
...
- /local-memory: 本地记忆管理(store/entry CRUD、搜索、归档)
- /local-vault: 本地密钥保险库管理(加解密、keychain 集成)
- permissionValidation: vault 权限校验增强
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:20 +08:00
claude-code-best
8874fedb41
feat: 添加云端管理命令(memory-stores、vault、schedule、skill-store、agents-platform)
...
- /memory-stores: 远程记忆存储管理
- /vault: 密钥保险库管理
- /schedule: 云端定时触发器管理(cron)
- /skill-store: 技能商店浏览和安装
- /agents-platform: 远程 agent 调度管理
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:17 +08:00
claude-code-best
2d1ff66d9b
feat: 添加登录认证增强(workspace key、host guard、auth status)
...
- hostGuard: workspace API key 仅限 api.anthropic.com,OAuth 限定 subscription plane
- saveWorkspaceKey: sk-ant-api03- 前缀校验,安全写入缓存
- AuthPlaneSummary/WorkspaceKeyInput: 登录 UI 组件
- getAuthStatus: 认证状态查询
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:15 +08:00
claude-code-best
3114a82b89
feat: 添加 LocalMemoryRecallTool 和 VaultHttpFetchTool
...
- LocalMemoryRecallTool: 跨会话本地笔记召回,权限门控,大小限制
- VaultHttpFetchTool: 使用 vault 密钥的认证 HTTP 请求,ACL 规则
- agentToolFilter: 子 agent 工具继承过滤层
- ALL_AGENT_DISALLOWED_TOOLS 白名单更新
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:12 +08:00
claude-code-best
87f5107024
feat: 添加 Session Memory 多存储支持
...
Markdown 文件存储的本地记忆系统,支持多 store 管理、
entry 增删改查和归档,存储于 ~/.claude/local-memory/。
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:09 +08:00
claude-code-best
bd054573a5
feat: 添加 Local Vault 加密存储服务
...
AES-256-GCM 加密 vault,支持 OS keychain 和加密文件回退,
scrypt KDF 密钥派生,64KB secret 上限。
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:07 +08:00
claude-code-best
907b8d1443
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-05-09 22:02:04 +08:00
林凯90331
59d3460554
Merge remote-tracking branch 'origin/feat/server-refactor' into feat/cloud-question
2026-05-09 18:18:55 +08:00
Askhz
550dbb5532
feat: serve 模式支持 resume 历史会话继续对话
...
- prompt/prompt_async 接口找不到内存 session 时自动从磁盘历史恢复
- 从 transcript 读取历史 session 的原始 cwd,保证子进程在正确目录启动
- resume 时不传 --session-id 避免与 --resume 冲突(csc 限制)
- sessionManager.createSession 支持传入指定 sessionId,resume 时复用历史 id
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 17:54:25 +08:00
林凯90331
0b36424820
feat(server/question): adapt question API to opencode-compatible format
...
Refactor csc serve question endpoints to match opencode/app-ai-native
expected data models and request/response shapes:
- GET /question now returns QuestionRequest[] (direct array) instead of
{ questions: [...] }
- POST /question/:id/reply accepts { answers: string[][] } mapping to
selected option labels per question
- POST /question/:id/reject no longer requires a request body
- Support dual question sources:
- MCP Elicitation (converted to opencode format with enum→options)
- AskUserQuestionTool permissions exposed as questions
- Add conversion helpers: convertAskUserQuestionToOpencode,
convertElicitationToOpencode, buildElicitationContent
- Reply to AskUserQuestionTool via replyPermission('allow') with
constructed updatedInput.answers map
Also includes serve-mode infrastructure improvements:
- Session routes auto-create sessions on demand via getOrCreateSession
- Set CSC_SERVE_MODE env var in child process spawn
- Skip push-suggestion stream waiting in serve mode
Add comprehensive unit tests for question route opencode conversion.
Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-09 17:52:43 +08:00
claude-code-best
d7361457ec
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-05-09 17:50:15 +08:00
Askhz
f34325f60a
feat: 修复 serve 模式新建会话及消息读取问题
...
- tsconfig.json 加 baseUrl 修复 dev 模式子进程 src/* 路径别名解析
- waitReady/initReject 修复:子进程退出时正确 reject,避免永久 pending
- POST /session 等待子进程 ready 后再返回,避免立即发 prompt 崩溃
- transcriptReader pathCache 不缓存 null,文件未写入时下次可重新查找
- session/status 用 prompting 判断 busy/idle,prompt 结束后正确变为 idle
- /agent 接口补充默认 build 模式
- message.ts 使用 spawnCwd 定位 transcript 文件
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 17:35:05 +08:00
claude-code-best
eafbb82ad5
Merge pull request #442 from claude-code-best/feature/tool_search
...
feat: 支持 SearchExtraTools 能力以替代 Tool Search
2026-05-09 17:23:03 +08:00
claude-code-best
5602a1ed37
Merge pull request #438 from q1352013520/feature/codex-subscription
...
feat: /login支持codex订阅登录
2026-05-09 17:16:12 +08:00
claude-code-best
4c6560e451
refactor: 精简系统提示词 — 合并沟通风格段落、精简 memory/工具描述、截断 gitStatus
...
- 合并 getOutputEfficiencySection + getSimpleToneAndStyleSection 为精简的 Communication style
- 精简 auto memory 指令:删除 4 种类型的详细说明和示例,仅保留核心 description
- 精简 Agent 工具:删除 forkExamples 和 currentExamples 大段示例
- 精简 Bash 工具:合并 sleep 相关指导
- 精简 EnterPlanMode/ExitPlanMode:删除详细 GOOD/BAD 示例
- gitStatus MAX_STATUS_CHARS 从 2000 降到 1000
- 同步更新 prompt engineering audit 测试断言
Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 17:14:41 +08:00
claude-code-best
012c216a37
fix: 修复 prefetch 测试 — turn-zero 推荐已禁用,测试期望值同步更新
...
getTurnZeroSearchExtraToolsPrefetch 在 commit 2cf18c4c 中被禁用(始终返回 null),
但测试仍期望匹配时返回非 null attachment。更新三个用例全部期望 null。
2026-05-09 17:02:40 +08:00
claude-code-best
d27c6ccb47
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-05-09 16:45:56 +08:00
DoSun
265ff7d864
fix: 中断对话时添加 is_interrupted 标记并优化 abort 响应速度
...
- QueryEngine: result 消息新增 is_interrupted 字段,标识用户中断
- sessionHandle: abort() 不再等待子进程退出,改为等待 result 事件(2s 超时兜底)
2026-05-09 16:37:03 +08:00
Bill
dd942049f8
fix: 修复CI格式检查失败
2026-05-09 16:21:07 +08:00
yhangf
3ec07bd2ec
Merge branches 'feature/spec-pro' and 'main' of https://github.com/y574444354/csc into feature/spec-pro
2026-05-09 16:10:01 +08:00
claude-code-best
8565b65d92
feat: 将 Agents/Teams 工具纳入 Tool Search 按需发现
...
将 TeamCreate、TeamDelete、SendMessage 从 CORE_TOOLS 移除,
使其成为 deferred 工具,通过 ToolSearch 按需发现以减少 context token。
swarm 模式下 SendMessage 保持 always loaded,TeamCreate/TeamDelete
在 swarm 未启用时调用返回启用提示。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 15:45:20 +08:00
claude-code-best
f6f2ad3220
fix: 修复缓存命中率警告消息不显示 — 改用 system 类型消息绕过 isMeta 过滤
2026-05-09 15:22:34 +08:00
yhangf
396e4cdbe3
feat(agents): propagate allowedAgentTypes from agent tool resolution to query engine
2026-05-09 15:15:10 +08:00
claude-code-best
a77d8316c9
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-05-09 14:56:22 +08:00
claude-code-best
f04889504e
refactor: 统一自建 Tool Search — 移除 tool_reference/defer_loading 依赖,全 provider 通用
...
- 重命名 ExecuteTool → ExecuteExtraTool,作为一等工具始终可用
- ToolSearchTool 输出改为纯文本(区分 core/deferred),移除 tool_reference blocks
- 移除 modelSupportsToolReference() 及相关 GrowthBook 配置
- 移除 API 侧 defer_loading 字段和 tool search beta header 注入
- 简化 system prompt(工具使用指南从 ~120 行压缩到 ~10 行)
- extractDiscoveredToolNames 支持文本格式解析(向后兼容旧 session 的 tool_reference)
- 更新 promptEngineeringAudit 测试以匹配简化后的 prompt 结构
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 14:19:31 +08:00
yhangf
1efba6b17a
feat(cli): resolve agent tools based on main thread agent definition in headless streaming
2026-05-09 14:18:10 +08:00
DoSun
6274c0e2be
fix: 过滤子进程内部合成消息(model switch breadcrumb)不转发给前端
2026-05-09 11:43:10 +08:00
DoSun
0393ce927d
feat: GET /permission 响应格式对齐前端 PermissionRequest 类型
...
- 工具名 PascalCase 映射为小写 permission key(匹配 i18n)
- 从 tool input 提取 patterns(file_path/command 等)
- 补齐 sessionID/id/tool/callID/metadata/always 字段
2026-05-09 11:18:46 +08:00
DoSun
9c3441331c
feat: serve 模式默认启用权限问询(acceptEdits)并修复回复链路
...
- 默认权限模式从 undefined 改为 acceptEdits(工作目录内读写自动放行)
- 始终传递 --permission-prompt-tool stdio 给子进程
- 修复 updatedInput 为 undefined 导致子进程 Zod 解析失败
- always 回复附带 updatedPermissions + decisionClassification
- 新增 permission_replied/question_replied SSE 事件通知 UI 撤销弹窗
- hook_callback 控制请求自动回复防止子进程阻塞
- PendingPermission 保存 permission_suggestions 供 always 回复使用
2026-05-09 11:10:13 +08:00
DoSun
e37e9d3ad5
feat: enable stream_event forwarding for serve mode streaming
...
QueryEngine previously guarded stream_event yields behind includePartialMessages,
which was undefined in serve mode. Remove the guard so stream_event messages
always flow to the child process stdout. Add stream_event handling in
sessionHandle.routeMessage to emit via EventBus for downstream consumers.
2026-05-09 10:04:19 +08:00
DoSun
862a16c295
Merge pull request #50 from Askhz/feat/server-add-session
...
feat: serve 模式 session 列表按工作目录过滤
2026-05-09 10:01:45 +08:00
Askhz
aca6133318
feat: serve 模式 session 列表按工作目录过滤
...
从请求头 x-csc-directory 读取工作目录(cs-cloud 通过此头传递),
GET /session 和 GET /session/status 只返回该目录下的历史会话
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 09:59:26 +08:00
claude-code-best
fe480d35a4
feat: Remote Control 条件工具注入 — PushNotification/SendUserFile/Brief 仅 bridge 启用时可用
...
- PushNotificationTool、SendUserFileTool 添加 isEnabled() 使用 isBridgeEnabled()
- BriefTool 的 isEnabled() 从 isBriefEnabled() 改为 isBridgeEnabled()
- ExecuteTool 添加 isEnabled() 兜底检查,不可用时返回友好错误
- useReplBridge bridge 首次连接时插入 system 消息通知模型新工具可用
- 移除 toolSearch 中 firstParty base URL 白名单检测,默认启用 tool search
Co-Authored-By: glm-5.1[1m] <zai-org@claude-code-best.win>
2026-05-09 09:45:52 +08:00
claude-code-best
42f0d35b5d
feat: 实现 Tool Search 基础设施层(CORE_TOOLS 白名单 + TF-IDF 索引 + ExecuteTool + 搜索增强)
...
- 新增 CORE_TOOLS 白名单常量(31 个核心工具),重构 isDeferredTool 为白名单制判定
- 新建 TF-IDF 工具索引模块(toolIndex.ts),复用 localSearch.ts 算法函数
- 新建 ExecuteTool 跨 API provider 统一工具执行入口
- 增强 ToolSearchTool:TF-IDF 搜索路径、discover: 模式、并行搜索合并、文本模式回退
- 新增 27 个单元测试,precheck 零错误通过(4108 tests pass)
Co-Authored-By: glm-5.1[1m] <zai-org@claude-code-best.win>
2026-05-08 22:29:15 +08:00
Bill
a6d257e4f6
feat: /login支持codex订阅登录
2026-05-08 20:35:34 +08:00
DoSun
5c3f1e16db
fix: read workspace from x-csc-directory header in session creation
2026-05-08 19:02:09 +08:00
DoSun
02161dd2a6
fix: pass dynamic provider_id from initData instead of hardcoding
...
- Add _providerId field to SessionHandle, extracted from initData.account.apiProvider
- Include provider_id in user message emit, assistant message fallback, and session.ready
- Revert getProviderId normalization (keep raw value from subprocess)
2026-05-08 18:59:00 +08:00
DoSun
e258f58fd7
fix: normalize provider ID to anthropic (was firstParty causing model validation mismatch)
...
The subprocess returns apiProvider='firstParty' for direct Anthropic access,
but the adapter hardcodes providerID='anthropic' in SSE events. This mismatch
causes the frontend's isModelValid check to fail, clearing the model selector.
2026-05-08 18:42:51 +08:00
DoSun
880782b1dd
fix: remove debug logs, add model fallback, fix prompt_async flow
...
- Remove process.stderr.write debug logs from sessionHandle and prompt_async
- Add model fallback in assistant message (use this._model if msg.model missing)
- Add model field to user message emit for adapter consumption
- Wait for session ready before setModel/prompt in prompt_async
- Return 200 JSON instead of 204 No Content from prompt_async
- Set Bun.serve idleTimeout to 255s to prevent connection drops
2026-05-08 18:42:51 +08:00
DoSun
d7a65170cd
Merge pull request #48 from y574444354/feat/favorite-migrate
...
Feat/favorite migrate
2026-05-08 18:42:01 +08:00
林凯90331
41dbd44b4e
feat(hub): migrate favorite command with auto-enable, real-time toggle and server refactor
...
- Migrate favorite command from opencode to csc with /hub command
- Rename /favorite → /cloud-enabled → /knowledge-hub → /hub
- Auto-enable cloud favorites on startup without manual Update button
- Toggle items immediately on check/uncheck without Update button
- Add favorite REST routes and kh alias (later removed)
- Fix UDS socket path length exceeding macOS sockaddr_un.sun_path limit
- Add AbortController timeout to CoStrict fetch to prevent startup blocking
- Fix build robustness (handle missing download-ripgrep script)
- Merge server refactor: Hono-based HTTP API, session management, transcript reader
- Add serve API docs, server module unit tests, and cloud command handler
Signed-off-by: 林凯90331 <90331@sangfor.com>
Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-08 18:18:44 +08:00
Askhz
231c76df84
fix: 完善 serve 模式 session 列表接口
...
- GET /session/:id 支持从磁盘历史记录 fallback,修复历史 session 404
- 过滤无意义的管理命令会话(/exit、/model、/login 等)
- 保留 /crewpilot:plan 等有意义的斜杠命令触发的会话
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-08 18:12:22 +08:00
yhangf
ba2aad5c09
feat(permissions): auto-select AskUserQuestion answers in headless mode
...
- Add headless fallback in `hasPermissionsToUseToolInner` that respects
`askUserQuestionTimeoutSeconds` from settings (default 600s) when
`shouldAvoidPermissionPrompts` is true, instead of hanging indefinitely
- Set `shouldAvoidPermissionPrompts: true` on `toolPermissionContext` in
`-p` (pipe/headless) mode so the new path is triggered
- Hoist `parsedInput` before the try block so the headless path can use
Zod-transformed input (includes defaults like `multiSelect: false`)
2026-05-08 17:57:15 +08:00
Askhz
a62989e245
Merge branch 'feat/server-refactor' into feat/server-add-session
2026-05-08 17:38:11 +08:00
Askhz
084d3fa468
feat: serve 模式 GET /session 接口从磁盘读取历史会话列表
...
- GET /session:调用 listSessionsImpl 扫描 ~/.claude/projects/ 历史 transcript,
合并内存中活跃 handle 的运行时状态,支持 ?dir= 过滤
- GET /session/status:补充磁盘历史 session(全部标为 idle),不再返回空对象
- POST /session/:id/command_async、revert、summarize:补充缺失接口
- Bun.serve 设置 idleTimeout: 0,修复 SSE 长连接被 10s 超时切断的问题
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-08 17:32:04 +08:00
DoSun
ca147a40b7
fix: 修复 serve 模式 SSE 事件流、权限响应、协议对齐
...
- 修复 emitEvent 无限递归(调用自身→调用 eventBus.publishSessionEvent)
- 修复 prompt() 用户消息缺失 uuid/content 字段
- session.ready 事件映射为 session.updated(非重复 session.created)
- 新增用户消息事件(message.updated role:user + message.part.updated)
- 新增 session.status busy/idle、step-start/step-finish、session.idle/diff
- 清理 heartbeat properties 为空对象
- 仅 assistant 类型消息作为 session.message 转发,过滤 system/其他杂消息
- 权限响应映射 once/always/reject → allow/deny
- 会话创建支持 permission ruleset 推导 permission mode
- prompt 路由支持 model 字段切换模型
- 初始化消息支持 hooks 配置
- 新增 HookCallback/ControlCancelRequest 处理
- 权限响应支持 updatedPermissions 和 interrupt
- 新增 --resume-session-at、--permission-prompt-tool stdio 参数
- 追踪 lastMessageUuid 用于消息级回退
- EventBus dead client 清理
2026-05-08 16:59:45 +08:00
yhangf
697ee49752
feat(query-engine): pass mainThreadAgentDefinition to support built-in agent system prompts
2026-05-08 14:43:11 +08:00
Bonerush
7a816de547
fix: 修复条件式 hook 调用导致的 "Rendered fewer hooks than expected" 错误
...
修复在 dev 模式下按下 Ctrl+O 切换 transcript 视图时 React 抛出
"Rendered fewer hooks than expected" 崩溃的问题。
## 根因分析
项目中有大量 hook(useState / useMemo / useRef / useSyncExternalStore 等)
被包裹在 `feature()` 三元表达式中条件调用,例如:
const value = feature('X') ? useHook() : defaultValue;
在 build 模式下 `feature()` 是编译时常量,死代码消除会移除未使用的分支,
hooks 数量在编译后是确定的。但在 dev 模式下(scripts/dev.ts 注入
--feature 启用全部 31 个 feature),`feature()` 是运行时调用,
但始终返回 true,因此所有 hooks 都会被调用,原本不会出问题。
真正的触发器是 REPL.tsx 第 5381 行的提前返回:
if (screen === 'transcript') { return transcriptReturn; }
当用户按下 Ctrl+O 进入 transcript 模式时,该提前返回之后的所有 hooks
(如 displayedAgentMessages 的 useMemo)都不会被调用,导致 React 在
下一次渲染时检测到 hooks 数量与上次不一致而崩溃。
此外,其他文件中也存在相同的条件式 hook 模式——虽然 dev 模式下
feature() 返回 true,所以这些路径实际上不会被触发,但它们是
潜在的隐患:若将来有人通过环境变量关闭某个 feature,
同样的崩溃会立即出现。
## 修复策略
采用统一模式:**始终无条件调用 hook,将 feature() gate 应用到值上**。
// Before (unsafe — hook count varies by feature flag)
const value = feature('X') ? useHook() : defaultValue;
// After (safe — hook always called, gate on the value)
const rawValue = useHook();
const value = feature('X') ? rawValue : defaultValue;
## 修改清单
### 核心修复(REPL.tsx)
- 将 `displayedAgentMessages` useMemo 及依赖变量(viewedTask /
viewedTeammateTask / viewedAgentTask / usesSyncMessages /
rawAgentMessages / displayedMessages)从 transcript 提前返回
之后移至之前,确保两模式下 hooks 调用顺序一致
- 修复 `disableMessageActions` / `useAssistantHistory` /
`voiceIntegration` 的条件式 hook 调用
### 条件式 hook 修复(11 个文件)
- src/hooks/useGlobalKeybindings.tsx — isBriefOnly / toggleBrief
keybinding 改为 isActive 门控
- src/hooks/useReplBridge.tsx — 5 个 BRIDGE_MODE 选值改为无条件调用
- src/hooks/useVoiceIntegration.tsx — 4 个 VOICE_MODE 选值修复
- src/components/PromptInput/Notifications.tsx — 4 个 feature 选值修复
- src/components/PromptInput/PromptInput.tsx — briefOwnsGap /
companionSpeaking 修复
- src/components/PromptInput/PromptInputFooterLeftSide.tsx — 4 个
VOICE_MODE 选值修复
- src/components/PromptInput/PromptInputQueuedCommands.tsx — isBriefOnly
- src/components/Spinner.tsx — briefEnvEnabled 修复
- src/components/TextInput.tsx — voiceState / audioLevels /
animationFrame 修复
- src/components/messages/AttachmentMessage.tsx — isDemoEnv 修复
- src/components/messages/UserPromptMessage.tsx — isBriefOnly /
viewingAgentTaskId / briefEnvEnabled 修复
- src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx
— isBriefOnly 修复
### 其他修复
- src/components/FeedbackSurvey/useFrustrationDetection.ts — 将 3 个
提前返回合并为 shouldSkip 变量,handleTranscriptSelect 提前 return
- src/hooks/useIssueFlagBanner.ts — useRef 移到 USER_TYPE 检查之前
- src/hooks/useUpdateNotification.ts — useState 改为 useRef,
避免版本号变化触发不必要重渲染
### 构建/开发配置
- build.ts — 添加 `sourcemap: 'linked'`
- scripts/dev.ts — NODE_ENV 从 'production' 改为 'development'
Closes #434
2026-05-08 13:17:25 +08:00
geroge
684b81457c
Merge pull request #46 from y574444354/feat/favorite-migrate
...
feat: migrate favorite command from opencode to csc
2026-05-08 09:36:24 +08:00
geroge
85aaeb9a7a
Merge pull request #43 from y574444354/feat/migrate-review-agents
...
feat: migrate review agents to unified costrict-review repo
2026-05-08 09:35:24 +08:00
林凯90331
dacbf1f7ab
feat: migrate favorite command from opencode to csc
...
- Add /favorite REPL slash command with list/view/download/load/unload/uninstall
- Implement core favorite logic in src/costrict/favorite/ using createCoStrictFetch
- Extend GlobalConfig with agents and commands fields for config-layer storage
- Adapt skill load/unload to csc's directory-scanning mechanism (~/.claude/skills/)
- Adapt MCP load/unload to csc's mcpServers config via saveGlobalConfig()
- Decouple from opencode-specific deps: jsonc-parser, Config.invalidate, Filesystem.*
Signed-off-by: 林凯90331 <90331@sangfor.com>
Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-08 08:20:57 +08:00
林凯90331
f3ece2f469
refactor(rawDump): prevent 429 with queue + batch worker
...
Replace per-turn detached workers with a file-backed queue consumed by
a single long-running batch worker (30s interval, 0-10s jitter).
- queue.ts, batchWorker.ts: file queue with pid-based lock for worker
singleton; tasks deduped by sessionID:messageID before processing
- worker.ts: retry with backoff (5s, 10s) for 429 and network errors;
update commit state per upload so partial failures resume cleanly;
export auth, loadSessionMessages, getSessionDirectory and upload*
helpers for batchWorker reuse
- git.ts: cap commit log at 50 entries within last 7 days; pause 500ms
every 10 commits to spread load
- worker.ts: resolve session jsonl via ~/.claude/projects/{normalized}
with fallbacks, scanning for the file containing the target session
- logger.ts: file + stderr logger gated by CSC_RAW_DUMP_DEBUG, default
silent
- sessionDataUploader.ts: implement createSessionTurnUploader to pick
the last assistant message; query.ts fires uploadSessionTurn after
query_api_streaming_end (non-blocking)
Signed-off-by: 林凯90331 <90331@sangfor.com>
Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-07 21:45:20 +08:00
DoSun
33ad9cd568
fix: prompt 路由支持 parts 格式请求体
...
消费端发送 parts 数组格式([{type:'text', text:'...'}]),
csc 同时支持 content 字符串和 parts 数组两种格式
2026-05-07 20:29:49 +08:00
DoSun
d5cfe0aff0
fix: 修复 serve 模式模型接口返回空数据
...
多层问题修复:
- setup.ts: CoStrict 模型预取从 fire-and-forget 改为 await,确保缓存就绪
- sessionHandle.ts: 修复子进程 spawn 参数丢失 -d/--feature 的问题,
修复 models 数组被当 Record 处理的类型错误,始终传 --verbose
- sessionManager.ts: 新增 probe session 预热机制和 initData 缓存,
provider 路由不再依赖活跃 session
- provider.ts: 输出格式匹配消费端 ProviderCapabilitiesResponse 类型,
models 从数组转为 Record<string, ModelInfo>
- session.ts: 修复 scriptArgs 计算逻辑,避免传入 serve 子命令
2026-05-07 20:08:27 +08:00
DoSun
954c218085
fix: 修复 serve 模式 GET /agent 接口,直接从内置 agent 列表加载数据
2026-05-07 18:00:52 +08:00
林凯90331
28d4f1f4e5
feat(rawDump): add session data raw-dump reporting module
...
Introduce a framework-decoupled raw-dump module that uploads conversation, summary, and commits data to the CoStrict server in a non-blocking detached worker process.
- Add src/services/rawDump/ with index, types, state, spawn, git, worker, and README
- Implement reportTurn and reportSession entry points with in-memory dedup and env-based disable switch (CSC_DISABLE_RAW_DUMP / COSTRICT_DISABLE_RAW_DUMP)
- Replace sessionDataUploader stub with uploadSessionTurn that delegates to reportTurn
Signed-off-by: 林凯90331 <90331@sangfor.com>
Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-07 17:27:56 +08:00
claude-code-best
467720f78a
feat: 改为使用 ccb 的邮箱
2026-05-07 12:06:40 +08:00
kingboung
a1d3a3db2d
chore: untrack generated review builtin files from git index
...
Files are still present on disk and generated by build:review-builtin.
.gitignore rules prevent them from being re-committed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 11:49:07 +08:00
kingboung
3beeaa545e
ci: add review agent generation step to build and CI
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 11:46:05 +08:00
claude-code-best
fd7173437b
fix: 修正 GLM 模型 GitHub 署名邮箱为 zai-org
...
Co-Authored-By: glm-5.1[1m] <zai-org@users.noreply.github.com>
2026-05-07 11:35:40 +08:00
claude-code-best
3672413d40
feat: 署名邮箱改为 GitHub noreply 格式并新增模型映射
...
Co-Authored-By: glm-5.1[1m] <zhipuai@users.noreply.github.com>
2026-05-07 11:32:48 +08:00
claude-code-best
f3c1ad8e98
feat: 添加自动邮箱映射功能并完善署名系统
...
- 新增 attributionEmail.ts 实现模型名到邮箱的自动映射
- 重构署名逻辑,统一使用 getRealModelName() 和 getAttributionEmail()
- 将产品名从 Claude Code 更新为 Claude Code Best
- 更新 PRODUCT_URL 指向 claude-code-best fork 仓库
Co-Authored-By: glm-4.7 <noreply@zhipuai.cn>
2026-05-07 11:12:40 +08:00
claude-code-best
8ca45ef63f
fix: 修复模型别名未解析导致署名显示 "haiku" 而非真实模型名
...
去掉 getUserSpecifiedModelSetting() 分支,统一走 getMainLoopModel()(解析别名)
+ resolveProviderModel()(解析 provider 映射)的完整链路。
Co-Authored-By: opus[1m] <noreply@anthropic.com>
2026-05-07 11:10:01 +08:00
claude-code-best
970425b360
fix: 修复非 Anthropic provider 署名模型名获取错误
...
getRealModelName() 现在会检查 provider 特定环境变量(OPENAI_MODEL、GEMINI_MODEL、GROK_MODEL),
确保通过这些变量设置模型时署名显示真实名称而非 Anthropic 默认模型名。
Co-Authored-By: opus[1m] <noreply@anthropic.com>
2026-05-07 10:57:14 +08:00
claude-code-best
18f1112ce1
feat: 添加 prompt 缓存命中率检测与警告功能
...
每次 API 请求后自动计算缓存命中率,低于阈值(默认 80%)时在对话流中显示黄色警告消息。
同时更新 /context 命令输出中显示缓存命中率。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-07 10:49:06 +08:00
DoSun
9a8faf1481
feat: 添加 cloud 命令(cs-cloud 二进制下载与命令转发)
2026-05-07 10:44:43 +08:00