建议:新增 bl completion <shell> 命令,提供 zsh/bash/fish 自动补全
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 新手友好度
- 55/100
- Issue 類型
- 功能
- 描述清晰度
- 描述清楚
- 活躍度
- 活躍
- 技術堆疊
- bash, fish, node.js, shell, typescript, zsh
研究方向
Run bl --introspect and read where the existing skill/reference generators consume that metadata under packages/cli; the new completion subcommand and its introspect→shell conversion layer belong alongside them. Build the zsh path first against the issue's acceptance cases (bl text ch<TAB>, --api <TAB> listing choices, --outpu<TAB>), then reuse the same conversion for bash and fish, and add choices for --output to globalFlags in the introspect schema. Done when pnpm check passes and every acceptance example completes; coordinate with the reporter, who has a working local prototype.
由索引模型根據 Issue 內容生成。
描述
背景
bl 目前没有 shell 补全命令(bl completion 报 Unknown command),322 个多级子命令(如 memory node show、agents security alerts)加上每个命令十几个 flag,纯靠手敲和 --help 记忆成本比较高。
现状
bl --introspect已经输出结构化的命令元数据(commands[].path / flags / choices / description,globalFlags),天然适合作为补全的数据源,但目前只有 skill/reference 生成在消费它。- issues 里没有找到补全相关的既有讨论。
提议
新增顶层命令:
bl completion <zsh|bash|fish> # 输出补全脚本到 stdout(可重定向)
bl completion zsh --install # (可选)自动写入 rc 文件
数据流复用 --introspect:
introspect JSON → 转换层 → 各 shell 的补全脚本/函数
zsh 侧的转换规则(已在本地验证可行):
| introspect 字段 | zsh spec |
|---|---|
flags.choices: [chat, responses] |
'--api[desc]:value:(chat responses)' |
type: switch |
'--stream[desc]' |
valueHint 含 path/file |
':file:_files' |
| 其他 string | '--message[desc]:value:' |
多级命令用「收集已输入的非 flag 词 → 前缀匹配 → 前缀组补下一级 / 叶子命令补 flags」的 dispatch 即可,不需要为每个命令写死函数。
实现时值得注意的两个坑(本地原型踩过)
- zsh
_arguments里消费已输入子命令的占位 positional 必须写成'N:cmd:'(带尾冒号、空 action);写成'N:cmd'会被当成可补全位置参数,与 flag 候选形成"二义",导致单次 TAB 只列出不插入。 - flag 描述文本需要双层转义:shell 引号层 +
_arguments描述层的]和:(zh-CN 描述里的全角冒号没事,但半角冒号会截断 spec)。
顺带发现的数据缺口
--introspect 的 globalFlags 里 --output 没有带 choices: ["text", "json"],补全只能硬编码。建议在 schema 里补上这个字段,任何消费方都能受益。
验收示例(以 zsh 为例)
bl text ch<TAB> → bl text chat
bl text chat --sys<TAB> → --system(列出时带描述)
bl text chat --api <TAB> → chat / responses
bl --outpu<TAB> → --output
备注
我已按上述思路在本地基于 bl --introspect 生成 zsh 补全并逐项验证通过(bl 2.6.1,322 命令 / 81 命令组)。如果这个方向可行,我愿意提交 PR 把转换层按仓库结构(packages/cli + 单一逻辑改动 + pnpm check)实现。
- 主要語言
- TypeScript
- 星號
- 364
- 分支
- 32
- 平均合併
- 1 天 14 小時
- 30 天內合併 PR
- 36
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
modelstudioai/cli 的其他 Issue
-
難度 3/5 3-5 天 新手友好度 48/100
modelstudioai/cli#287 ·
維護者通常 1 天內回覆
-
bug
難度 4/5 1-2 天 新手友好度 62/100
modelstudioai/cli#279 ·
維護者通常 1 天內回覆
-
bug
難度 4/5 1-2 天 新手友好度 48/100
modelstudioai/cli#264 ·
維護者通常 1 天內回覆
-
難度 5/5 一週以上 新手友好度 35/100
modelstudioai/cli#202 · 3 則留言 · 1 個 reaction ·
維護者通常 1 天內回覆
查看 modelstudioai/cli 的全部 Issue
相似的 Issue
-
難度 2/5 1-3 小時 新手友好度 76/100
marmelab/react-admin#11431 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 88/100
db-ux-design-system/core-web#8655 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 74/100
維護者通常 1 天內回覆
-
bug
難度 2/5 1-3 小時 新手友好度 76/100
stripe/react-stripe-js#728 ·
-
[Upload Grade C dataset] the pop-up changes it's size while uploading the document => Jumping effect未關閉bug
難度 2/5 1-3 小時 新手友好度 66/100
epam/statgpt-admin-frontend#305 ·
維護者通常 1 天內回覆