建议:新增 bl completion <shell> 命令,提供 zsh/bash/fish 自动补全
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 3/5
- 预计耗时
- 3-5 天
- 新手友好度
- 48/100
- Issue 类型
- 功能
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- bash, fish, typescript, zsh
- 领域
- cli
调研方向
Start by running bl --introspect and reading how the existing skill/reference generators consume its commands[].path / flags / choices / valueHint and globalFlags inside packages/cli; that gives the shape the conversion layer must emit. Then add a top-level completion <shell> command and a zsh generator following the flag-to-_arguments spec table and the two escaping pitfalls listed in the issue, validating against the four acceptance examples (bl text ch<TAB>, --sys<TAB>, --api <TAB>, --outpu<TAB>). Done means the generated script is emitted to stdout, passes pnpm check, and the --output global flag carries choices in the introspect schema. Note the author already prototyped this locally and offered to open the PR, so coordinate before starting.
由索引模型根据 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 1-2 天 新手友好度 55/100
modelstudioai/cli#286 ·
维护者通常 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
-
area:desktop area:ui bug platform:macos
难度 2/5 1-3 小时 新手友好度 67/100
anthropics/claude-code#106183 ·
维护者通常 1 天内回复
-
难度 1/5 1-3 小时 新手友好度 76/100
维护者通常 1 天内回复
-
feature:App-Tour feature:Chat ready Web
难度 2/5 1-3 小时 新手友好度 62/100
digitalfabrik/integreat-app#4523 · 2 个 reaction ·
维护者通常 3 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
Required Lexical field accepts two empty paragraphs可能已有人在做 @lazerg 今天认领。 未关闭Bug
难度 2/5 1-3 小时 新手友好度 76/100
payloadcms/payload#19222 ·
维护者通常 1 天内回复