用途
Ably Codebase Review 用于审查整个 Ably CLI 代码库,检查其是否符合 ably-new-command 技能中定义的规范与约定。当被要求审计代码库时使用该技能。
主要能力
该技能结合两类工具:
- LSP:用于需要类型系统感知的结构化分析,包括 goToDefinition(解析命令实际继承的基类)、findReferences(追踪 fail()、logJsonResult、logJsonEvent 的所有调用点)、hover(显示解析后的类型、继承成员、完整类型层级)、documentSymbol(结构化列出类中的所有方法/属性)。
- grep/read:用于文本匹配即可完成的检查,例如 this.error() 调用、组件字符串大小写、new Error(...) 包装、shouldOutputJson 守卫、formatSuccess() 结尾、formatProgress() 手动省略号、chalk.cyan() 使用、引号资源名、静态示例中的 --json / --pretty-json、标志展开、waitUntilInterruptedOrTimeout 使用、缺失测试文件、subscribe 测试中的 --duration 标志、mock 辅助导入等。
使用方式
第 0 步:验证 LSP 前置条件
在进行分析前,检查 LSP 工具是否可用。若不可用,提示用户运行:
claude plugin add anthropic/claude-code-lsp
然后重启 Claude Code 并重新运行该技能。同时检查 typescript-language-server,若未找到则全局安装:
npm install -g typescript-language-server typescript
第 1 步:阅读参考技能
阅读以下文件以理解规范模式:
.claude/skills/ably-new-command/SKILL.md— 检查清单与约定.claude/skills/ably-new-command/references/patterns.md— 实现模板.claude/skills/ably-new-command/references/testing.md— 测试脚手架
第 2 步:启动扫描代理
并行启动以下代理,每个代理获得聚焦的任务,并按检查项使用合适的工具(LSP 或 grep/read):
- 代理 1:基类与继承扫描 — 验证每个命令是否按技能规则继承正确的基类。使用 LSP documentSymbol 查找类导出,goToDefinition 确认基类引用解析到正确文件,hover 查看完整类型层级。标记继承错误基类的命令,或应使用专用基类却直接使用 AblyBaseCommand 的命令(例外:rooms/spaces 中不需要实时生命周期的纯 REST 命令)。同时验证主题索引文件是否继承 BaseTopicCommand 并具有正确的 topicName 和 commandGroup 属性。
- 代理 2:错误处理扫描 — 验证所有命令仅使用 fail() 处理错误,而非 this.error() 或 chalk.red()。使用 LSP findReferences 获取 fail 的每个调用点,grep 查找 this.error() 直接调用,检查组件字符串是否为 camelCase,检查 this.fail() 中不必要的 new Error(...) 包装,检查 catch 块中是否有多余的 oclif 错误重抛守卫。验证 src/utils/errors.ts 中所有错误码,通过 WebFetch 获取 https://ably.com/docs/platform/errors/codes 的官方描述并逐一核对提示。
- 代理 3:输出格式化扫描 — 验证所有人类输出使用正确的格式辅助函数和正确的输出方法(状态用 stderr,数据用 stdout)。检查 chalk.cyan()、formatProgress() 手动省略号、formatSuccess() 结尾、this.log(formatProgress|formatSuccess|formatListening|formatWarning) 等应改用基类辅助函数的情况、shouldOutputJson 守卫、引号资源名、box-drawing 字符、subscribe 命令是否在订阅前获取初始状态、非 JSON 输出是否隐藏了 JSON 模式中可用的字段、命令文件中重复 SDK 类型的本地接口定义。
- 代理 4:标志架构扫描 — 验证每个命令按技能规则使用正确的标志集。检查 productApiFlags、clientIdFlag、durationFlag、rewindFlag、timeRangeFlags、ControlBaseCommand.globalFlags 的使用,并与规则交叉比对。
- 代理 5:JSON 输出与信封扫描 — 验证所有命令在使用 --json 时产生正确的 JSON 输出。使用 LSP findReferences 获取 logJsonResult 和 logJsonEvent 的所有调用点,检查 formatJsonRecord 直接使用、shouldOutputJson 使用,验证数据嵌套在域键下(事件/单项用单数,集合用复数),检查 hold 命令是否在 logJsonResult 后发出 logHolding,被动 subscribe 命令是否发出 logListening。
- 代理 6:测试模式扫描 — 验证测试文件遵循技能的测试约定。检查每个命令是否有对应测试文件,检查 5 个必需的 describe 块(help、argument validation、functionality、flags、error handling)是否使用精确标准名称,检查 --duration 在单元测试 runCommand() 参数中是否不应出现,检查 mock 使用、CLI 认证标志、共享测试辅助函数的使用。
- 代理 7:生命周期与约定扫描 — 验证命令使用正确的生命周期辅助函数并包含必需元数据。检查 waitUntilInterruptedOrTimeout 应改用 this.waitAndTrackCleanup(),检查 subscribe 命令中的 setupChannelStateLogging,检查 rooms/* 和 spaces/* 命令中 room.attach() 或 space.enter() 是否仅对需要实时连接的命令调用。
适用场景
适用于对 Ably CLI 代码库进行整体审计,检查其是否符合 ably-new-command 技能定义的规范与约定。
限制
该技能依赖 LSP 工具和 typescript-language-server,若未安装则无法继续。部分检查项(如错误码提示验证)需要通过网络获取官方文档。具体功能、收费、价格、平台、效果或使用步骤等未在资料中提供的细节暂未提供。