- 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>
13 KiB
斜杠命令完整测试清单
日期:2026-05-06
适用范围:本 session 累积所有恢复/新建命令(PR-1 ~ PR-4 + audit-fix + H2 refactor)
起点 commit:origin/main (4f1649e2)
最新 commit:fe99cf0e(35+ commits ahead)
测试前准备
cd E:/Source_code/Claude-code-bast-autofix-pr
# 1. 确保最新 dist 含全部 commits
bun run build
# 2. 验证 dist 不是 stale
stat -c '%Y %n' dist/cli.js
git log -1 --format=%ct\ %h
# dist mtime 必须 ≥ HEAD commit time
# 3. 完全退出当前 dev REPL(按 Ctrl+D 或 /quit)后重启
bun run dev
关键提醒:Bun 不会动态重载 dist,任何 source 改动都必须 bun run build + 重启 REPL。
A 组 — 纯本地(无网络/无 key,立即可测)
前置:无
| # | 命令 | 输入 | 期望输出 | 通过 |
|---|---|---|---|---|
| A1 | /version |
直接跑 | 显示版本号(如 1.10.10) |
☐ |
| A2 | /env |
直接跑 | runtime 信息 + env vars 白名单(CLAUDE_/FEATURE_/ANTHROPIC_/BUN_/NODE_/...)+ secrets masked | ☐ |
| A3 | /context |
直接跑 | fork 原生命令:colored grid(走 analyzeContextUsage() 真实 API view,含 compact boundary + projectView 转换)+ token 数与 API 看到的一致 |
☐ |
| A4 | /context 在压缩边界附近 |
直接跑 | 显示 compact boundary 后的 messages,不重复计 token | ☐ |
| A5 | (删 ctx_viz;/context 是唯一 context 可视化命令) |
— | — | — |
| A6 | /debug-tool-call |
默认 N=5 | 列最近 5 个 tool_use+tool_result 配对 | ☐ |
| A7 | /debug-tool-call 10 |
数字参数 | 列最近 10 个 | ☐ |
| A8 | /perf-issue |
直接跑 | 写 ~/.claude/perf-reports/perf-<stamp>.md(mem+cpu+token+per-tool) |
☐ |
| A9 | /perf-issue --format=json |
flag | 写 .json 格式 | ☐ |
| A10 | /perf-issue --limit 1000 |
flag | 仅读 log 最后 1000 行 | ☐ |
| A11 | /break-cache |
默认 once | 写 ~/.claude/.next-request-no-cache marker |
☐ |
| A12 | /break-cache status |
子命令 | 显示 marker 状态 + 累计 break 次数 | ☐ |
| A13 | /break-cache always |
子命令 | 写 always flag 文件 | ☐ |
| A14 | /break-cache off |
子命令 | 删 once + always | ☐ |
| A15 | /tui |
toggle | 切换 marker ~/.claude/.tui-mode |
☐ |
| A16 | /tui status |
子命令 | 显示当前 marker + env var 状态 | ☐ |
| A17 | /tui on /tui off |
子命令 | marker write/unlink | ☐ |
| A18 | /onboarding status |
子命令 | 显示 hasCompletedOnboarding / theme / lastVersion | ☐ |
| A19 | /onboarding theme |
子命令 | 进入 ThemePicker | ☐ |
| A20 | /onboarding trust |
子命令 | 清 trust dialog flag | ☐ |
| A21 | /onboarding reset |
子命令 | 清 hasCompletedOnboarding,下次启动重跑 | ☐ |
| A22 | /recap |
直接跑 | 一行 ≤40 字 session recap | ☐ |
| A23 | /away /catchup |
aliases of recap | 同 A22 | ☐ |
| A24 | /usage |
直接跑 | 合并 cost + stats(Settings/Usage 或 Stats panel) | ☐ |
| A25 | /cost /stats |
aliases of usage | 同 A24 | ☐ |
| A26 | /summary |
直接跑 | 调 manuallyExtractSessionMemory + 显示 summary.md | ☐ |
A 组失败诊断:
- 命令找不到 → 检查 dist staleness + 重启 REPL
feature() unsupported→bun run build时 feature flag 没注入
B 组 — GitHub CLI(需 gh auth login)
前置:gh auth status 显示 logged-in;fork 仓库要有 issues enabled
| # | 命令 | 输入 | 期望输出 | 通过 |
|---|---|---|---|---|
| B1 | /share |
默认 secret gist | 调 gh gist create,输出 gist URL |
☐ |
| B2 | /share --public |
flag | public gist | ☐ |
| B3 | /share --mask-secrets |
flag | redact sk-ant-* Bearer * ghp_* 等模式 |
☐ |
| B4 | /share --summary-only |
flag | 仅前 200 字/turn | ☐ |
| B5 | /share --allow-public-fallback |
flag | gh 失败 → 0x0.st fallback | ☐ |
| B6 | /issue Fix login bug |
title 参数 | 调 gh issue create,rich body 含最近 5 turns + errors |
☐ |
| B7 | /issue --label bug --assignee me <title> |
多 flag | label + assignee 生效 | ☐ |
| B8 | /issue (仓库 issues disabled) |
— | 自动降级到 GitHub Discussions | ☐ |
| B9 | /commit |
直接跑(有 staged) | 生成 commit message 草稿 | ☐ |
| B10 | /commit-push-pr |
直接跑 | commit + push + 创建 PR | ☐ |
B 组失败诊断:
gh: command not found→ 装 https://cli.github.com/gh auth status未登录 →gh auth login- issues disabled → 看是否降级到 discussion
C 组 — Subscription OAuth(已 /login claude.ai)
前置:/login 完成 claude.ai OAuth;/login 显示 ☑ Subscription
| # | 命令 | 输入 | 期望输出 | 通过 |
|---|---|---|---|---|
| C1 | /login |
无参 | 3 plane summary:☑ Subscription、☐/☑ Workspace API key、4 third-party providers(PR-4 新增) | ☐ |
| C2 | /teleport |
无参 | 列最近 sessions(list-style picker) | ☐ |
| C3 | /teleport <session-uuid> |
参数 | resume from claude.ai | ☐ |
| C4 | /tp <session-uuid> |
alias | 同 C3 | ☐ |
| C5 | /teleport <session-uuid> --print |
flag | print mode 直接输出 session URL | ☐ |
| C6 | /autofix-pr 386 |
PR# | CCR 派发,输出 sessionUrl | ☐ |
| C7 | /autofix-pr stop |
子命令 | 停止 active monitor | ☐ |
| C8 | /autofix-pr anthropics/claude-code#999 |
cwd 不匹配 | 拒绝 repo_mismatch(不真创建会话) |
☐ |
| C9 | /schedule list |
子命令 | /v1/code/triggers GET,返回 data:[] 或 trigger 列表 |
☐ |
| C10 | /schedule create <cron> <prompt> |
子命令 | POST,cron expr UTC 验证 | ☐ |
| C11 | /schedule run <id> |
子命令 | POST /run 立即触发 | ☐ |
| C12 | /schedule update <id> <field> <value> |
子命令 | POST(不是 PATCH) | ☐ |
| C13 | /cron list /triggers list |
aliases | 同 C9 | ☐ |
| C14 | /init-verifiers |
无参 | 创建项目 verifier skills | ☐ |
| C15 | /bridge-kick |
无参 | bridge 故障注入测试 | ☐ |
| C16 | /subscribe-pr |
无参 | 列本地 ~/.claude/pr-subscriptions.json |
☐ |
| C17 | /ultrareview <PR#> |
参数 | preflight gate(v1 已有) | ☐ |
C 组失败诊断:
- 401 → 重
/login /v1/agents类 401 → 这些是 workspace endpoint,预期会失败,移到 F 组/schedule401 → 检查 dist 含ccr-triggers-2026-01-30beta header
D 组 — (已删除 2026-05-06)
/providers 命令在 2026-05-06 移除。理由:与 fork 原生 /login 的 "Anthropic Compatible Setup" form 功能重叠(同样配 OpenAI-compat Base URL + API Key),保留单一入口避免双 UI 混淆。
第三方 provider 配置请用 /login 内的 form:选 provider 后填 Base URL + API Key + Haiku/Sonnet/Opus 类别按钮。
src/services/providerRegistry/* utility 模块 保留(4 内置 cerebras/groq/qwen/deepseek 元数据 + DeepSeek 三模式 compatMatrix),可被未来 fork form 的 "Quick Select" enhancement 复用。
E 组 — 本地兜底(PR-3 新增,订阅用户无 key 也能用)
前置:无
E.1 /local-vault(OS keychain + AES fallback)
| # | 命令 | 输入 | 期望输出 | 通过 |
|---|---|---|---|---|
| E1 | /local-vault list |
无参 | 空列表(首次) | ☐ |
| E2 | /local-vault set test-key foo-secret-value |
写 secret | onDone 显示 [REDACTED],不显示原值 |
☐ |
| E3 | /local-vault list |
再跑 | 显示 test-key(不含 value) |
☐ |
| E4 | /local-vault get test-key |
默认 mask | foo-...e (16 chars) 类似格式 |
☐ |
| E5 | /local-vault get test-key --reveal |
明文 + 警告 | foo-secret-value + 警告 "secret revealed in terminal" |
☐ |
| E6 | /local-vault set bad-key C:hack |
path traversal | 拒绝(CRITICAL E1 修复) | ☐ |
| E7 | /local-vault set ../traverse foo |
path traversal | 拒绝 | ☐ |
| E8 | /local-vault delete test-key |
删 | OK | ☐ |
| E9 | /lv list |
alias | 同 E1 | ☐ |
安全验证:
# E1 加密文件存在 + value 不明文
ls ~/.claude/local-vault.enc.json
cat ~/.claude/local-vault.enc.json | grep -c "foo-secret-value" # 必须是 0
# salt 16 字节存在
cat ~/.claude/local-vault.enc.json | grep "_salt"
E.2 /local-memory(多 store 持久化)
| # | 命令 | 输入 | 期望输出 | 通过 |
|---|---|---|---|---|
| E10 | /local-memory list |
无参 | 空 | ☐ |
| E11 | /local-memory create my-store |
创建 | ~/.claude/local-memory/my-store/ 建好 |
☐ |
| E12 | /local-memory store my-store key1 value1 |
写 entry | OK | ☐ |
| E13 | /local-memory fetch my-store key1 |
读 | value1 |
☐ |
| E14 | /local-memory entries my-store |
列 | [key1] |
☐ |
| E15 | /local-memory store my-store ../escape foo |
path traversal | 拒绝 | ☐ |
| E16 | /local-memory archive my-store |
改名 | dir 改为 my-store.archived |
☐ |
| E17 | /lm list |
alias | 同 E10 | ☐ |
E 组失败诊断:
- AES 错 passphrase → 提示重新 setSecret
- keychain 不可用 → 自动 fallback 文件(warn 一次)
- path traversal 接受 → audit-fix-all-40 修复未生效,重新 build
F 组 — Workspace API key(需配 ANTHROPIC_API_KEY=sk-ant-api03-*)
前置:
- 从 https://console.anthropic.com/settings/keys 创建 API key(
sk-ant-api03-*) - Windows:
setx ANTHROPIC_API_KEY "sk-ant-api03-..."持久化 - 完全退出 dev REPL(Ctrl+D /
/quit) + 启动新 shell(让 setx 生效)+bun run dev - 验证:
/login应显示☑ Workspace API key ANTHROPIC_API_KEY set
| # | 命令 | 输入 | 期望输出 | 通过 |
|---|---|---|---|---|
| F1 | /help(配 key 后) |
— | 4 命令 /agents-platform /vault /memory-stores /skill-store 出现(之前 isHidden:true) |
☐ |
| F2 | /help(不配 key) |
— | 4 命令不出现(动态 isHidden) | ☐ |
| F3 | /agents-platform list |
无参 | /v1/agents GET 200,返回 agents 数组 |
☐ |
| F4 | /vault list |
无参 | /v1/vaults GET 200 |
☐ |
| F5 | /vault create test-vault |
子命令 | 创建 vault | ☐ |
| F6 | /vault add-credential <vault_id> api-key sk-secret |
子命令 | onDone 显示 [REDACTED],stdout grep 不到 sk-secret |
☐ |
| F7 | /memory-stores list |
无参 | /v1/memory_stores GET,beta managed-agents-2026-04-01 |
☐ |
| F8 | /memory-stores create test-store |
子命令 | POST | ☐ |
| F9 | /memory-stores update-memory <id> <mid> "new" |
子命令 | PATCH(不是 POST) | ☐ |
| F10 | /skill-store list |
无参 | /v1/skills?beta=true GET |
☐ |
| F11 | /skill-store install <id> |
子命令 | 写 ~/.claude/skills/<name>/SKILL.md |
☐ |
| F12 | 错配(API key 不是 sk-ant-api03-* 前缀) |
配错 key | 友好错(不 401) | ☐ |
| F13 | 不配 key 时调 /vault list(手动 /help 找不到,但直接输入命令名) |
— | 501 + 文案 "ANTHROPIC_API_KEY required" | ☐ |
F 组失败诊断:
- 401 with workspace key → key 没生效(重启 REPL + 检查
echo $ANTHROPIC_API_KEY) - 命令仍 isHidden → dist staleness(rebuild + 重启)
- credential value 出现在 stdout → audit fix 未生效
全过验收标准
- A 组 26/26 pass
- B 组 ≥8/10 pass(有 gh + 仓库权限的)
- C 组 ≥10/17 pass(订阅环境完整)
- D 组 8/8 pass
- E 组 17/17 pass(path traversal 必须拒绝)
- F 组 ≥10/13 pass(取决于 workspace key 是否配)
任何 fail 立即报告:命令 + 实际输出 + 期望输出。我针对 fail 立即修。
已知限制
| 命令 | 限制 |
|---|---|
/teleport 无参 picker |
用 list-style 不是 Ink <SelectInput>(LocalJSXCommandCall 不能 mid-call suspend) |
/autofix-pr cross-repo |
仅元数据,git source 仍来自 cwd(repo_mismatch 显式拒绝跨 cwd) |
/skill-store install |
写到 ~/.claude/skills/,fork 主流程不自动 load 该目录的 markdown skills(用户手动用) |
/providers use <id> |
输出 shell export 命令,不自动 mutate runtime(重启生效) |
测试报告模板
## 测试报告 - 2026-05-XX
### 环境
- OS: Windows 11
- Bun: <version>
- dist mtime: <date>
- HEAD: <commit-hash>
- ANTHROPIC_API_KEY: 配/未配
- gh CLI: 装/未装
### 结果
- A: 26/26 ✅
- B: 8/10(B5/B8 fail)
- C: 12/17(C5/C13/C14/C15/C16 fail)
- D: 8/8 ✅
- E: 17/17 ✅
- F: 12/13(F12 边界)
### 失败详情
B5: <command> → 实际 <output>,期望 <expected>
...