- 增加新的
bl xxx命令 - 删除已有命令
- 重命名命令(包括从单级
bl x改成bl x y或反向) - 调整某个 shared command 在
bl/kscli等产品入口里的暴露路径
命令实现住在 packages/commands,产品路径由入口包决定。实现文件路径按能力组织,但不再等同于最终命令路径。
实现文件:
packages/commands/src/commands/knowledge/retrieve.ts
↓ packages/commands/src/index.ts export { default as knowledgeRetrieve }
产品入口:
packages/cli/src/commands.ts "knowledge retrieve": knowledgeRetrieve ↔ bl knowledge retrieve
packages/kscli/src/main.ts "retrieve": knowledgeRetrieve ↔ kscli retrieve
常见路径形态:
单级命令: packages/commands/src/commands/update.ts ↔ bl update
两级命令: packages/commands/src/commands/text/chat.ts ↔ bl text chat
子组命令: packages/commands/src/commands/memory/profile-get.ts ↔ bl memory profile get
子组要慎用:只有子组下有 ≥2 个 action 时才合理,否则优先拍平到两级。
packages/commands 是命令库,只导出单个 command;不内置 path presets,不关心 bl / kscli。每个产品入口传入自己的 command map,runtime 负责解析、help、鉴权、遥测、执行。
packages/commands/src/commands/<...>.ts
defineCommand({ auth, flags, usageArgs, exampleArgs, validate, run })
↓
packages/commands/src/index.ts
export { default as xxxCommand } from "./commands/...ts"
↓
┌──────────────────────────────┬──────────────────────────────┐
│ packages/cli/src/commands.ts │ packages/kscli/src/main.ts │
│ { "text chat": textChat } │ { "retrieve": knowledge... } │
└──────────────┬───────────────┴──────────────┬───────────────┘
↓ ↓
createCli(commands, identity) → runtime registry/help/middleware
↓
tools/generate-reference.ts reads packages/cli/src/commands.ts
packages/commands/src/commands/<...>.ts:命令实现;usageArgs/exampleArgs只写参数片段,不写bl/kscli前缀packages/commands/src/index.ts:导出命令实现;新增命令必须在这里 re-exportpackages/cli/src/commands.ts:bl产品命令 map;新增/删除/重命名bl命令必须改这里packages/kscli/src/main.ts:kscli产品命令 map;只有该入口需要暴露/变更时才改packages/runtime/src/registry.ts:通用 registry,从传入 map 建树;不要在这里登记业务命令tools/generate-reference.ts:pre-commit /pnpm run sync:skill-assets时读packages/cli/src/commands.ts,写skills/bailian-cli/reference/index.md+<一级命令>.md。该目录纳入 git,勿手改
已删除/勿再引用:旧的 packages/cli/src/commands/catalog.ts、旧的 packages/cli/src/commands/index.ts catalog re-export、packages/cli/src/registry.ts、skipDefaultApiKeySetup、ensureApiKey 启动拦截、config/export-schema.ts。
- 新建/删除/移动对应的
packages/commands/src/commands/<...>.ts -
defineCommand字段使用当前 schema:auth: "apiKey" | "console" | "openapi" | "none"flags(camelCase key,由 runtime 渲染为 kebab-case)usageArgs(不含 bin/path 前缀)exampleArgs(不含 bin/path 前缀)validate(跨 flag 校验)- 普通业务命令的
run(ctx)只读ctx.flags/ctx.settings/ctx.client commands/auth/**可用ctx.authStore(),commands/config/**可用ctx.configStore();不要把这些 store accessor 扩散到普通业务命令
-
packages/commands/src/index.ts:新增或移除对应 export - 如果命令调用 Console Gateway,设置
auth: "console";不要重复声明 console 凭证域 flags - 如果命令不需要网络或自己管理配置/登录,设置
auth: "none";不要绕过 runtime auth stage
-
packages/cli/src/commands.ts:按需增删import与commandsmap key - 新 map key 就是
bl下的命令路径;重命名时全仓 grep 旧路径字符串 - 如果
kscli入口也要暴露/移除该能力,同步packages/kscli/src/main.ts - 不要在
packages/runtime/src/registry.ts或create-cli.ts里写业务命令表
- 运行
pnpm run sync:skill-assets(或正常git commit走 pre-commit),刷新skills/bailian-cli/reference/与SKILL.md的metadata.version并提交 -
README.md/README.zh.md:Quick Start、命令一览、认证说明(用户向,与 help 对齐) -
skills/bailian-cli/SKILL.md:若安装说明或能力边界有变,同步更新
- 按 cli-e2e-tests.md 新建或更新
packages/cli/tests/e2e/<topic>.e2e.test.ts - 删除命令时一并删对应 e2e / README 示例 / reference 生成结果
- 如果 shared command 在不同入口路径下复用,至少确保
bl入口 e2e 覆盖;kscli入口改动需补对应入口测试或手工 smoke
- 全仓 grep 旧命令名字符串,确保以下位置全部更新:
packages/cli/src/commands.tsmap keypackages/kscli/src/main.tsmap key(如适用)- 用户可见 hint / README / tests
skills/bailian-cli/reference/(重建后检查并提交)
- 检查
usageArgs/exampleArgs没有硬编码旧的bl <path>前缀
pnpm run sync:skill-assets
pnpm -F bailian-cli exec tsx src/main.ts <new-command> --help
pnpm -F bailian-cli exec tsx src/main.ts
vp test packages/cli/tests/e2e/<topic>.e2e.test.ts如改了 kscli 入口:
pnpm -F knowledge-studio-cli exec tsx src/main.ts <command> --help- ✗ 只新增
packages/commands/src/commands/...文件,忘了在packages/commands/src/index.ts导出 - ✗ 只导出了命令实现,忘了在
packages/cli/src/commands.ts暴露路径 →bl --help看不到 - ✗ 手改
skills/bailian-cli/reference/*.md→ 下次 generate 被覆盖;应改 command metadata 后重新 generate 并提交 - ✗ 在
usageArgs/exampleArgs写死bl text chat→kscli等入口复用时 help 错 - ✗ Console Gateway 命令忘设
auth: "console"→ console flags / credential 注入都不生效 - ✗ 单 action 的子组是反模式,新增时优先拍平为两级