Commit Graph

116 Commits

Author SHA1 Message Date
林凯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
linkai0924
0b271a7847
Merge pull request #86 from IronRookieCoder/fix-snip-tool
fix(builtin-tools): handle undefined message_ids in SnipTool.call()
2026-05-15 17:01:26 +08:00
林凯90331
b0f10760fe fix(favorite): sync load/unload state and improve error visibility
Clear listFavoriteItems cache after load/unload to ensure UI reflects latest state on next open

Filter defaultValue by Active status in cloud-enabled menu so unloaded items are not pre-selected

Surface specific error reasons instead of generic failure count in cloud-enabled menu

Signed-off-by: 林凯90331 <90331@sangfor.com>

Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-15 16:44:24 +08:00
IronRookieCoder
39106e4f9d
Merge branch 'main' into fix-snip-tool 2026-05-15 14:40:34 +08:00
林凯90331
6b5b801dae fix(ink): treat newline as return and suppress favorite fetch error in TUI
Some terminals on CentOS emit \n or \r\n instead of \r for the Enter key.

Map both sequences to 'return' in parseKeypress so key.return is set correctly.

Replace console.warn with logForDebugging in favorite.ts to prevent

network errors from polluting the TUI output.

Signed-off-by: 林凯90331 <90331@sangfor.com>

Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-15 11:06:18 +08:00
DoSun
0fb2ea4af5 fix: 修正 listBuiltinSkills 导入名称
Co-Authored-By: Auto <noreply@anthropic.com>
2026-05-14 20:05:48 +08:00
DoSun
62de2ddc20
Merge pull request #95 from y574444354/feat/server-refactor
Feat/server refactor
2026-05-14 19:14:34 +08:00
linkai0924
1c22fe8d2a
Merge pull request #94 from y574444354/feat/server-refactor-90331-2
feat(favorite): optimize list caching and expand MCP type support
2026-05-14 19:09:36 +08:00
林凯90331
fd36738e9e feat(favorite): optimize list caching and expand MCP type support
Add 30s in-memory cache for favorite item list to reduce API calls

Expand supported MCP server types beyond local/remote to stdio/sse/ws/sdk and more

Change single MCP server conversion to use stdio type with separate command/args/env fields

Reduce page size from 100 to 20 for faster initial load

Switch parallel remote fetching to sequential to avoid rate limiting

Signed-off-by: 林凯90331 <90331@sangfor.com>

Co-authored-by: CoStrict <zgsm@sangfor.com.cn>
2026-05-14 18:56:44 +08:00
DoSun
481e6fc3c9 Merge remote-tracking branch 'origin/feat/server-refactor' into fix/serve-command-real-impl 2026-05-14 17:07:50 +08:00
Askhz
4b7922d59b fix: 更新凭证路径注释为 ~/.costrict/share/auth.json
Co-Authored-By: CoStrict-DeepSeek-V4-Pro <deepseek-ai@claude-code-best.win>
2026-05-14 17:03:12 +08:00
IronRookieCoder
a8c8c533d0 fix(builtin-tools): handle undefined message_ids in SnipTool.call()
## Bug 详情
调用 Snip 工具时,若模型通过 ExecuteExtraTool 传入空 params,
SnipTool.call() 中访问 input.message_ids.length 会抛出
`Cannot read properties of undefined (reading 'length')`。

## 根因
Snip 是延迟工具(非 CORE_TOOLS),需通过 ExecuteExtraTool 间接调用。
ExecuteExtraTool 将 params 直接透传给目标工具,不做 Zod schema 验证。
当 params 为空对象 {} 时,input.message_ids 为 undefined。

## 修复方案
在 SnipTool.call() 中使用 optional chaining 安全访问 message_ids。

## 变更要点
- packages/builtin-tools/src/tools/SnipTool/SnipTool.ts: 防御性处理空 message_ids
- src/costrict/provider/auth.ts: 删除 unreachable continue(lint 自动修复)
- src/services/rawDump/worker.ts: Math.pow → **(lint 自动修复)

## 自测
- 已人工验证

Co-Authored-By: Auto <noreply@anthropic.com>
2026-05-14 15:47:35 +08:00
DoSun
cbc948b044 Merge branch 'feat/server-refactor'
# Conflicts:
#	build.ts
#	src/main.tsx
#	src/services/rawDump/worker.ts
2026-05-14 15:21:25 +08:00
geroge
42107f7d2f
Merge pull request #64 from y574444354/feat/migrate-review-agents
【Review】feat: 将 review skill 迁移到 extract-to-disk 架构
2026-05-13 19:38:26 +08:00
IronRookieCoder
62f4cb9daf fix: 修复 CoStrict provider 提前停止与 token override 问题 2026-05-13 16:24:34 +08:00
DoSun
3bfc695cb4 chore: 清理临时 rebase 脚本 2026-05-13 10:29:34 +08:00
DoSun
3abca0c053 merge: 合并 origin/main 到 feat/server-refactor,解决冲突并保留 server 完整实现 2026-05-13 10:27:14 +08:00
Askhz
902b7d4ed5 fix: 移除闲置字段id/name,认证文件路径改为~/.costrict/share/auth.json
Co-Authored-By: CoStrict-DeepSeek-V4-Pro <deepseek-ai@claude-code-best.win>
2026-05-13 09:54:40 +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
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
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
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
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
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
4fce66348c 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
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
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
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
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
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
林凯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
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
林凯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
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
kingboung
4054ae9f4b feat: migrate review agents and skills to unified costrict-review repo
- Add generate-review-builtin.ts script (downloads from zgsm-ai/costrict-review)
- Add review module (index.ts, extension.ts) with locale-aware skill init
- Add CommandLocale module with zh-CN/en templates for /review and /security-review
- Integrate REVIEW_AGENTS into builtInAgents.ts
- Route /review command to CoStrictReviewer agent
- Simplify /security-review to use Skill tool with locale templates
- Remove old generate-skills.ts and inline security-review skill

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 09:40:24 +08:00
kingboung
e4025f5d79 chore: add review module stubs and gitignore rules
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 09:34:18 +08:00
Askhz
307b025dea chore: 统一所有 provider 的 User-Agent 为 csc/${VERSION}
- getUserAgent() 简化为 csc/${VERSION},去除 USER_TYPE/entrypoint 等附加信息
- OpenAI/Grok client 通过 defaultHeaders 覆盖 SDK 自带的 User-Agent
- CoStrict 主查询和 sideQuery 的 OpenAI client 同步添加 defaultHeaders
- CoStrict fetch 的 X-Costrict-Version 同步更新为 csc/${VERSION} 格式

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-29 18:23:57 +08:00
Askhz
98c9f219f7 fix: pass through user-configured model name instead of overriding with first API model
CoStrict provider now directly passes the user's configured model name
to the API, instead of replacing it with the first model from the
/ai-gateway/api/v1/models list.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-22 15:48:15 +08:00