@cloudglab/yapi-cli 0.0.5 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +42 -2
  3. package/dist/cli.js +195 -23
  4. package/dist/cli.js.map +1 -1
  5. package/dist/core/cli-output.d.ts +1 -1
  6. package/dist/core/cli-output.js +114 -25
  7. package/dist/core/cli-output.js.map +1 -1
  8. package/dist/core/cli-registry.js +33 -2
  9. package/dist/core/cli-registry.js.map +1 -1
  10. package/dist/core/errors.js +36 -3
  11. package/dist/core/errors.js.map +1 -1
  12. package/dist/core/http-metrics.d.ts +31 -0
  13. package/dist/core/http-metrics.js +35 -0
  14. package/dist/core/http-metrics.js.map +1 -0
  15. package/dist/core/output.d.ts +18 -4
  16. package/dist/core/output.js +105 -22
  17. package/dist/core/output.js.map +1 -1
  18. package/dist/core/update-probe.d.ts +4 -1
  19. package/dist/core/update-probe.js +43 -2
  20. package/dist/core/update-probe.js.map +1 -1
  21. package/dist/core/url-parser.d.ts +20 -0
  22. package/dist/core/url-parser.js +237 -0
  23. package/dist/core/url-parser.js.map +1 -0
  24. package/dist/install.js +10 -1
  25. package/dist/install.js.map +1 -1
  26. package/dist/manifest.json +27 -2
  27. package/dist/services/yapi/api.d.ts +12 -1
  28. package/dist/services/yapi/api.js +96 -10
  29. package/dist/services/yapi/api.js.map +1 -1
  30. package/dist/tools/shared.d.ts +2 -2
  31. package/dist/tools/shared.js.map +1 -1
  32. package/dist/tools/yapi/register-auth.js +12 -12
  33. package/dist/tools/yapi/register-auth.js.map +1 -1
  34. package/dist/tools/yapi/register-group.js +16 -16
  35. package/dist/tools/yapi/register-group.js.map +1 -1
  36. package/dist/tools/yapi/register-interface.js +177 -55
  37. package/dist/tools/yapi/register-interface.js.map +1 -1
  38. package/dist/tools/yapi/register-project.js +92 -31
  39. package/dist/tools/yapi/register-project.js.map +1 -1
  40. package/dist/tools/yapi/register-test.js +11 -11
  41. package/dist/tools/yapi/register-test.js.map +1 -1
  42. package/dist/tools/yapi/register-util.js +124 -34
  43. package/dist/tools/yapi/register-util.js.map +1 -1
  44. package/dist/version.d.ts +1 -1
  45. package/dist/version.js +1 -1
  46. package/docs/ai-cli-optimization-plan.md +412 -0
  47. package/package.json +1 -1
  48. package/skills/yapi-cli/SKILL.md +15 -0
  49. package/skills/yapi-cli/reference/cli.md +19 -3
  50. package/skills/yapi-cli/reference/commands.md +2 -1
  51. package/skills/yapi-cli/reference/interface.md +13 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.0.8 - 2026-06-23
4
+
5
+ - 新增 `interface-update` 部分更新命令,支持只更新接口标题、路径、方法、分类、状态、标签、描述、请求体与响应体,未传字段保持原值。
6
+ - 补齐 `interface-save` / `interface-update` 的 skill 文档与命令速查说明,并同步源目录与发布目录,避免文档命令与实际注册命令不一致。
7
+ - 修复业务写命令的通用 `--confirm true` 参数解析与写保护闸门;未确认时返回 preview,不再直接发起写请求。
8
+ - 修复 `optionalTrimmedText` 在帮助输出中被误标为必填的问题,`desc`、`reqBody`、`resBody` 等可选字段现在会正确显示为可选。
9
+ - 补充 stdout / stderr 分流说明,明确 `compact` / `normal` / `verbose` 已是合法 JSON,管道消费时不要使用 `2>&1` 污染 JSON 输出。
10
+
11
+ ## 0.0.7 - 2026-06-23
12
+
13
+ - 新增 `--output compact|normal|verbose|pretty` 输出分级;`--json` 继续作为兼容别名,并修复了命令前后位置与 `pnpm dev -- ...` 场景下的全局参数解析。
14
+ - `help` / `list` 现在会展示命令分组、预估成本和推荐下一步,方便在终端与 AI 工作流里更快选择低成本命令。
15
+ - 新增 `project-snapshot`、`interface-snapshot`、`workspace-snapshot` 三个快照命令,一次聚合项目、接口和工作区上下文,减少多次查询。
16
+ - 新增 `url-parse`,并支持直接粘贴 YApi 页面 URL 自动解析或自动执行对应查询命令;当前已覆盖项目、接口、分类、集合、用例、分组、用户和关注页。
17
+ - API 请求新增短时 GET 缓存与 `requestCount` / `durationMs` / `cacheHit` 元信息;常见认证、网络、404、非 JSON 返回等错误提示也更具体。
18
+
19
+ ## 0.0.6 - 2026-06-22
20
+
21
+ - `install` 与 `update` 完成后会输出 `yapi-cli` ASCII 标识,和后续的快速开始指引一起展示,便于首次安装后直接继续操作。
22
+ - README 同步补充安装成功后的终端效果说明,保持文档与命令行体验一致。
23
+
3
24
  ## 0.0.5 - 2026-06-22
4
25
 
5
26
  - `install`、`update`、`uninstall` 的主链路改为对齐 `zentao-cli`:先处理全局 CLI,再通过 `skills add/remove` 安装或卸载 skill,不再把 skill 直接复制到 `~/.opencode/agent`。
package/README.md CHANGED
@@ -8,22 +8,31 @@
8
8
 
9
9
  ## 这版补了什么
10
10
 
11
- - 默认 JSON 输出适合 AI / 脚本消费:统一走 `jsonResult`,并可切到 `pretty` 人类可读模式。
11
+ - 新增 `compact / normal / verbose / pretty` 输出分级;`--json` 仍可用,且支持放在命令前后位置。
12
+ - 新增 `interface-update` 部分更新命令,可只改接口标题、路径、请求体或响应体;`interface-save` 继续用于完整 upsert。
13
+ - 写命令统一支持 `--confirm true`,未确认时返回 preview,不直接发起写请求。
14
+ - 新增 `project-snapshot`、`interface-snapshot`、`workspace-snapshot`,适合先拿上下文再细查。
15
+ - 新增 URL 解析能力:既可以显式执行 `yapi url-parse --url ...`,也可以直接把 YApi 页面 URL 贴给 CLI 自动解析并查询。
12
16
  - 新增内置命令:`doctor`、`changelog`、`completion`,补齐安装 / 更新 / 卸载 / 版本查看链路。
13
17
  - 配置文件按 `url/username/password/authMode` 收敛;`install` / `config-init` 现在统一走配置校验流程:交互终端会逐步提示填写,非交互环境会明确要求显式传参,token 只保存在认证缓存里。
14
18
  - 普通账号 `native` 登录现在兼容两种后端形态:直接明文校验,以及先经 RSA 公钥加密再提交 `/api/user/login`。
15
19
  - `install` / `update` / `uninstall` 的安装链路已对齐 `zentao-cli`:优先安装全局 CLI,再通过 `skills add/remove` 管理 skill,并在必要时自动清理旧的全局 bin 与 npm 残留。
20
+ - `install` / `update` 完成后会打印 ASCII 标识和快速开始提示,首次装好后能直接看到下一步命令。
16
21
  - 命令层统一使用 `InMemoryCliRegistry + Zod schema + jsonResult`,便于 Agent 稳定调用。
17
22
  - 共享了分页、项目 ID、可选文本、布尔值和导出格式等 Zod 片段,减少重复定义。
18
23
  - API 客户端加入超时、重试和错误分层,遇到认证 / 网络 / 配置错误时可直接判断。
19
24
 
20
25
  ## 典型变化
21
26
 
22
- - **输出模式**:`yapi <command> --json` 会返回 JSON 结果;默认模式在终端输出更适合人工阅读的文本。
27
+ - **输出模式**:`yapi <command> --output compact|normal|verbose|pretty` 可切换结果粒度;`--json` 等价于结构化详细输出。
28
+ - **接口更新**:`interface-update` 走部分更新语义,适合只修改 `resBody` / `reqBody` 等单个字段;`interface-save` 适合保存完整接口定义。
29
+ - **写保护**:业务写命令需要显式追加 `--confirm true`,否则返回 preview 信息。
23
30
  - **自检**:`yapi doctor --verbose` 可检查 Node 版本、配置、网络连通性和认证状态。
24
31
  - **版本记录**:`yapi changelog --limit 5`、`--version`、`--since`、`--raw` 都可用。
25
32
  - **补全**:`yapi completion bash|zsh|fish` 会生成对应 shell 的补全脚本。
26
33
  - **更新探测**:`yapi update` 会先探测 npm 版本,再刷新 skill 文件。
34
+ - **快照查询**:可先用 `workspace-snapshot`、`project-snapshot`、`interface-snapshot` 拿聚合上下文,再决定是否细查。
35
+ - **URL 入口**:可直接粘贴 YApi 页面 URL,让 CLI 自动解析并执行对应查询命令。
27
36
 
28
37
  ## 版本要求
29
38
 
@@ -40,6 +49,8 @@ npx -y @cloudglab/yapi-cli@latest install
40
49
 
41
50
  该命令会先安装全局 CLI,再通过 `skills add` 安装内置 Skill。首次安装时,会先检查本机是否已有可用配置;如果没有,会在交互终端里逐步提示你输入 YApi 地址、登录用户名、登录密码和认证方式。
42
51
 
52
+ 安装或更新成功后,终端还会打印 ASCII 标识和一组快速开始命令,方便直接继续执行 `yapi help`、`yapi config-init`、`yapi whoami` 等操作。
53
+
43
54
  如果需要重新安装 CLI 与 skill,可直接运行:
44
55
 
45
56
  ```bash
@@ -57,6 +68,9 @@ yapi update
57
68
  ```bash
58
69
  yapi help
59
70
  yapi list
71
+ yapi --json help
72
+ yapi interface-list --project-id 1 --limit 20 --json
73
+ yapi project-list --output compact
60
74
  yapi install
61
75
  yapi version --verbose
62
76
  yapi doctor
@@ -78,6 +92,27 @@ yapi whoami
78
92
 
79
93
  如果本机之前残留了旧版全局 `yapi` / `yapi-cli` 可执行文件,`install` 会先尝试自动清理,再继续安装。
80
94
 
95
+ ## 输出与管道
96
+
97
+ CLI 的日志走 stderr、结果走 stdout,二者已分离:
98
+
99
+ - `--output compact|normal|verbose` 已是合法 JSON,**无需再用 python 重新解析**;直接用 `jq` 提取字段即可。
100
+ - 拼管道时**别加 `2>&1`**,否则 `[yapi] ...` 日志会混进 stdout 破坏 JSON;丢弃日志用 `2>/dev/null`。
101
+ - `resBody` / `resParams` 等 YApi 字段是字符串化 JSON,用 `jq '<path> | fromjson'` 二次展开。
102
+
103
+ ```bash
104
+ yapi --output verbose interface-get --interface-id 186512 2>/dev/null | jq '.interface.resBody | fromjson'
105
+ ```
106
+
107
+ ## 接口编辑示例
108
+
109
+ ```bash
110
+ yapi interface-update --interfaceId 186512 --resBodyType json --resBody '{"errno":0,"data":[]}' --confirm true
111
+ yapi interface-save --projectId 1688 --interfaceId 186512 --catId 28376 --title "获取个人产品列表" --path "/flow-master/account/ownerProductList" --method POST --resBodyType json --resBody '{"errno":0,"data":[]}' --confirm true
112
+ ```
113
+
114
+ ## 常用命令示例
115
+
81
116
  ```bash
82
117
  yapi group-list
83
118
  yapi project-list --project-id 1
@@ -88,6 +123,11 @@ yapi request --path /api/user/status
88
123
  ```bash
89
124
  yapi user-list
90
125
  yapi user-search --query alice
126
+ yapi workspace-snapshot
127
+ yapi project-snapshot --project-id 1
128
+ yapi interface-snapshot --interface-id 123
129
+ yapi url-parse --url "https://yapi.example.com/project/1/interface/api/123"
130
+ yapi "https://yapi.example.com/project/1/interface/api/123"
91
131
  yapi col-list --project-id 1
92
132
  yapi docs-sync --file docs/api.md --project-id 1 --cat-id 2
93
133
  ```
package/dist/cli.js CHANGED
@@ -10,7 +10,107 @@ import { checkForUpdates, getUpdateSuggestion } from './core/update-probe.js';
10
10
  import { handleCliError } from './core/errors.js';
11
11
  import { setOutputFormat, getOutputFormatter } from './tools/shared.js';
12
12
  import { getAvailableCommandNames, resolveCommandGroup } from './core/manifest.js';
13
+ import { resetRequestMetrics } from './core/http-metrics.js';
14
+ import { previewOrAssertWriteAllowed } from './core/write-guard.js';
15
+ import { loadConfig } from './services/yapi/index.js';
16
+ import { looksLikeHttpUrl, parseYApiPageUrl, resolveParsedYApiUrlCommand } from './core/url-parser.js';
13
17
  const BUILTIN_COMMANDS = ['help', 'list', 'version', 'install', 'update', 'uninstall', 'remove', 'doctor', 'changelog', 'completion'];
18
+ const BUSINESS_WRITE_COMMANDS = new Set([
19
+ 'case-add',
20
+ 'case-add-list',
21
+ 'case-delete',
22
+ 'case-run',
23
+ 'case-update',
24
+ 'category-create',
25
+ 'category-delete',
26
+ 'category-update',
27
+ 'col-case-clone',
28
+ 'col-case-up-index',
29
+ 'col-create',
30
+ 'col-delete',
31
+ 'col-up-index',
32
+ 'col-update',
33
+ 'docs-sync',
34
+ 'follow',
35
+ 'group-create',
36
+ 'group-delete',
37
+ 'group-member-add',
38
+ 'group-member-remove',
39
+ 'group-member-role',
40
+ 'group-update',
41
+ 'import',
42
+ 'interface-create',
43
+ 'interface-delete',
44
+ 'interface-mock-script',
45
+ 'interface-mock-toggle',
46
+ 'interface-save',
47
+ 'interface-up-cat-index',
48
+ 'interface-up-index',
49
+ 'interface-update',
50
+ 'interface-upload',
51
+ 'login',
52
+ 'login-by-token',
53
+ 'logout',
54
+ 'project-copy',
55
+ 'project-create',
56
+ 'project-delete',
57
+ 'project-env-update',
58
+ 'project-follow',
59
+ 'project-member-add',
60
+ 'project-member-email-notice',
61
+ 'project-member-remove',
62
+ 'project-member-role',
63
+ 'project-mock-script',
64
+ 'project-mock-toggle',
65
+ 'project-tag-update',
66
+ 'project-token-update',
67
+ 'project-unfollow',
68
+ 'project-update',
69
+ 'self-update',
70
+ 'user-change-password',
71
+ 'user-delete',
72
+ 'user-register',
73
+ 'user-update',
74
+ 'user-upload-avatar',
75
+ ]);
76
+ function stripGlobalOutputFlags(rawArgs) {
77
+ const args = [];
78
+ let outputFormat = 'pretty';
79
+ for (let index = 0; index < rawArgs.length; index += 1) {
80
+ const token = rawArgs[index];
81
+ if (token === '--') {
82
+ continue;
83
+ }
84
+ if (token === '--json') {
85
+ outputFormat = 'verbose';
86
+ continue;
87
+ }
88
+ if (token === '--output') {
89
+ const next = rawArgs[index + 1];
90
+ if (!next || next.startsWith('-')) {
91
+ throw new Error('缺少 --output 的值');
92
+ }
93
+ outputFormat = parseOutputFormat(next);
94
+ index += 1;
95
+ continue;
96
+ }
97
+ if (token.startsWith('--output=')) {
98
+ outputFormat = parseOutputFormat(token.slice('--output='.length));
99
+ continue;
100
+ }
101
+ args.push(token);
102
+ }
103
+ return { args, outputFormat };
104
+ }
105
+ function parseOutputFormat(value) {
106
+ if (value === 'json' || value === 'verbose') {
107
+ return 'verbose';
108
+ }
109
+ if (value === 'pretty' || value === 'compact' || value === 'normal') {
110
+ return value;
111
+ }
112
+ throw new Error(`未知输出模式: ${value}`);
113
+ }
14
114
  function parseTopLevelArgs(rawArgs) {
15
115
  const args = [...rawArgs];
16
116
  if (args.length === 0) {
@@ -30,23 +130,99 @@ function parseTopLevelArgs(rawArgs) {
30
130
  function isHelpFlag(args) {
31
131
  return args.includes('--help') || args.includes('-h');
32
132
  }
33
- function isJsonFlag(args) {
34
- return args.includes('--json');
133
+ function unwrapJsonContentResult(result) {
134
+ const text = result.content.map((item) => item.text).join('\n');
135
+ try {
136
+ return JSON.parse(text);
137
+ }
138
+ catch {
139
+ return text;
140
+ }
141
+ }
142
+ async function executeBusinessCommand(commandName, commandArgs) {
143
+ const commandGroup = resolveCommandGroup(commandName);
144
+ if (!commandGroup) {
145
+ throw new Error(`URL 解析后映射到未知命令: ${commandName}`);
146
+ }
147
+ const registry = await buildRegistryForCommand({ commandName, commandGroup });
148
+ const command = registry.getCommand(commandName);
149
+ if (!command) {
150
+ throw new Error(`URL 解析后映射到未注册命令: ${commandName}`);
151
+ }
152
+ const input = parseCommandInput(command.schema, commandArgs);
153
+ const writePreview = previewBusinessWrite(commandName, input);
154
+ if (writePreview) {
155
+ return writePreview;
156
+ }
157
+ return await command.handler(input);
158
+ }
159
+ function previewBusinessWrite(commandName, input) {
160
+ if (!BUSINESS_WRITE_COMMANDS.has(commandName)) {
161
+ return null;
162
+ }
163
+ const preview = previewOrAssertWriteAllowed({
164
+ action: commandName,
165
+ confirm: input.confirm === true,
166
+ payload: input,
167
+ });
168
+ return preview ? getOutputFormatter().result(preview) : null;
35
169
  }
36
170
  export async function runCli(rawArgs, appName = 'yapi-cli') {
37
- // 检查全局 --json 标志,设置输出格式
38
- if (isJsonFlag(rawArgs)) {
39
- setOutputFormat('json');
171
+ // 每次 CLI 执行开始时清零请求指标,避免上一次运行的累计值混入当前输出
172
+ resetRequestMetrics();
173
+ let args;
174
+ let outputFormat;
175
+ try {
176
+ ({ args, outputFormat } = stripGlobalOutputFlags(rawArgs));
40
177
  }
41
- else {
42
- setOutputFormat('pretty');
178
+ catch (error) {
179
+ const msg = handleCliError(error);
180
+ process.stderr.write(`${msg}\n`);
181
+ return;
182
+ }
183
+ setOutputFormat(outputFormat);
184
+ const { commandName, commandArgs } = parseTopLevelArgs(args);
185
+ if (commandName && looksLikeHttpUrl(commandName)) {
186
+ const output = getOutputFormatter();
187
+ const config = loadConfig();
188
+ const parsed = parseYApiPageUrl(commandName, config?.url ?? null);
189
+ const resolvedCommand = resolveParsedYApiUrlCommand(parsed);
190
+ if (!resolvedCommand) {
191
+ output.printMessage(formatCommandResult(output.result(parsed)));
192
+ return;
193
+ }
194
+ try {
195
+ const result = await executeBusinessCommand(resolvedCommand.commandName, resolvedCommand.commandArgs);
196
+ if (outputFormat === 'pretty') {
197
+ const lines = [`已从 URL 解析并执行: ${resolvedCommand.displayCommand}`];
198
+ if (parsed.note) {
199
+ lines.push(`说明: ${parsed.note}`);
200
+ }
201
+ lines.push('', formatCommandResult(result));
202
+ output.printMessage(lines.join('\n'));
203
+ return;
204
+ }
205
+ output.printMessage(formatCommandResult(output.result({
206
+ parsed,
207
+ executed: {
208
+ commandName: resolvedCommand.commandName,
209
+ commandArgs: resolvedCommand.commandArgs,
210
+ command: resolvedCommand.displayCommand,
211
+ },
212
+ result: unwrapJsonContentResult(result),
213
+ })));
214
+ }
215
+ catch (error) {
216
+ const msg = handleCliError(error);
217
+ process.stderr.write(`${msg}\n`);
218
+ }
219
+ return;
43
220
  }
44
- const { commandName, commandArgs } = parseTopLevelArgs(rawArgs);
45
- const commandNames = getAvailableCommandNames();
46
221
  // --- 无参 -> 总帮助 ---
47
222
  if (!commandName || commandName === 'help') {
48
223
  if (commandArgs.length === 0) {
49
- printHelp(appName, commandNames);
224
+ const registry = await buildRegistryForCommand();
225
+ printHelp(appName, registry.listCommands());
50
226
  return;
51
227
  }
52
228
  const targetName = commandArgs[0];
@@ -72,12 +248,13 @@ export async function runCli(rawArgs, appName = 'yapi-cli') {
72
248
  }
73
249
  // --- list ---
74
250
  if (commandName === 'list') {
75
- printHelp(appName, commandNames);
251
+ const registry = await buildRegistryForCommand();
252
+ printHelp(appName, registry.listCommands());
76
253
  return;
77
254
  }
78
255
  // --- version ---
79
256
  if (commandName === 'version') {
80
- if (commandArgs.includes('--json')) {
257
+ if (outputFormat !== 'pretty') {
81
258
  process.stdout.write(`${JSON.stringify({ version: CLI_VERSION, name: appName }, null, 2)}\n`);
82
259
  }
83
260
  else if (commandArgs.includes('--verbose')) {
@@ -111,7 +288,7 @@ export async function runCli(rawArgs, appName = 'yapi-cli') {
111
288
  }
112
289
  // --- update ---
113
290
  if (commandName === 'update') {
114
- const updateInfo = checkForUpdates();
291
+ const updateInfo = checkForUpdates({ force: true });
115
292
  if (updateInfo.isUpdateAvailable) {
116
293
  process.stdout.write(`${getUpdateSuggestion(updateInfo)}\n\n`);
117
294
  }
@@ -131,7 +308,7 @@ export async function runCli(rawArgs, appName = 'yapi-cli') {
131
308
  }
132
309
  // --- doctor ---
133
310
  if (commandName === 'doctor') {
134
- await runDoctor(commandArgs);
311
+ await runDoctor(outputFormat === 'pretty' ? commandArgs : ['--json', ...commandArgs]);
135
312
  return;
136
313
  }
137
314
  // --- changelog ---
@@ -141,32 +318,27 @@ export async function runCli(rawArgs, appName = 'yapi-cli') {
141
318
  }
142
319
  // --- completion ---
143
320
  if (commandName === 'completion') {
321
+ const commandNames = getAvailableCommandNames();
144
322
  const script = generateCompletionScript(commandNames, appName, commandArgs[0]);
145
323
  process.stdout.write(script);
146
324
  return;
147
325
  }
148
326
  // --- 业务命令 ---
149
- const commandGroup = resolveCommandGroup(commandName);
150
- if (!commandGroup) {
327
+ if (!resolveCommandGroup(commandName)) {
151
328
  process.stderr.write(`未找到命令: ${commandName}\n运行 \`${appName} help\` 查看可用命令。\n`);
152
329
  process.exitCode = 1;
153
330
  return;
154
331
  }
332
+ const commandGroup = resolveCommandGroup(commandName);
155
333
  const registry = await buildRegistryForCommand({ commandName, commandGroup });
156
334
  const command = registry.getCommand(commandName);
157
- if (!command) {
158
- process.stderr.write(`未找到命令: ${commandName}\n运行 \`${appName} help\` 查看可用命令。\n`);
159
- process.exitCode = 1;
160
- return;
161
- }
162
335
  if (isHelpFlag(commandArgs)) {
163
336
  printCommandHelp(appName, command);
164
337
  return;
165
338
  }
166
339
  // 执行业务命令,统一错误处理
167
340
  try {
168
- const input = parseCommandInput(command.schema, commandArgs);
169
- const result = await command.handler(input);
341
+ const result = await executeBusinessCommand(commandName, commandArgs);
170
342
  const output = getOutputFormatter();
171
343
  output.printMessage(formatCommandResult(result));
172
344
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAU,CAAC;AAE/I,SAAS,iBAAiB,CAAC,OAAiB;IAC1C,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAE1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;QACpB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAc;IAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,UAAU,CAAC,IAAc;IAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAiB,EAAE,OAAO,GAAG,UAAU;IAClE,wBAAwB;IACxB,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,wBAAwB,EAAE,CAAC;IAEhD,oBAAoB;IACpB,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1B,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,UAAU,UAAU,OAAO,mBAAmB,CAAC,CAAC;YAC/E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;QACzG,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,UAAU,UAAU,OAAO,mBAAmB,CAAC,CAAC;YAC/E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,eAAe;IACf,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,kBAAkB;IAClB,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAChG,CAAC;aAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,eAAe,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG;gBACZ,GAAG,OAAO,KAAK,WAAW,EAAE;gBAC5B,SAAS,UAAU,CAAC,WAAW,EAAE;gBACjC,WAAW,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAClC,SAAS,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;aAC5C,CAAC;YACF,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;gBAChD,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;oBACjC,KAAK,CAAC,IAAI,CAAC,SAAS,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO;IACT,CAAC;IAED,kBAAkB;IAClB,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,iBAAiB;IACjB,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,eAAe,EAAE,CAAC;QACrC,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,WAAW,YAAY,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,MAAM,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,6BAA6B;IAC7B,IAAI,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC5D,MAAM,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,iBAAiB;IACjB,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,oBAAoB;IACpB,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;QAChC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,wBAAwB,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,eAAe;IACf,MAAM,YAAY,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,WAAW,UAAU,OAAO,mBAAmB,CAAC,CAAC;QAChF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,WAAW,UAAU,OAAO,mBAAmB,CAAC,CAAC;QAChF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACpC,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,IAAY;IACrD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACnB,GAAG,OAAO,mBAAmB;YAC7B,kCAAkC;YAClC,EAAE;YACF,KAAK;YACL,iCAAiC;YACjC,8BAA8B;SAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACnB,GAAG,OAAO,sBAAsB;YAChC,WAAW;YACX,EAAE;YACF,KAAK;YACL,+BAA+B;YAC/B,0BAA0B;YAC1B,+BAA+B;YAC/B,iCAAiC;SAClC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACnB,GAAG,OAAO,qBAAqB;YAC/B,qCAAqC;YACrC,EAAE;YACF,KAAK;YACL,cAAc,OAAO,2BAA2B;YAChD,cAAc,OAAO,0BAA0B;YAC/C,KAAK,OAAO,iDAAiD,OAAO,eAAe;SACpF,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACnB,GAAG,OAAO,mBAAmB;YAC7B,0BAA0B;YAC1B,EAAE;YACF,KAAK;YACL,qCAAqC;YACrC,qCAAqC;SACtC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type CliCommandDefinition } from './cli-registry.js';
1
+ import type { CliCommandDefinition } from './cli-registry.js';
2
2
  export declare function getBuiltinCommandNames(): string[];
3
3
  /** 格式化 registry 注册命令的执行结果 */
4
4
  export declare function formatCommandResult(result: {
@@ -1,22 +1,29 @@
1
1
  import { describeSchema } from './cli-registry.js';
2
2
  import { CLI_VERSION } from '../version.js';
3
+ import { resolveCommandGroup } from './manifest.js';
4
+ const GROUP_ORDER = ['auth', 'group', 'project', 'interface', 'util', 'test'];
5
+ const GROUP_LABELS = {
6
+ auth: '开始使用',
7
+ group: '分组管理',
8
+ project: '项目与环境',
9
+ interface: '接口查询与变更',
10
+ util: '工具与导出',
11
+ test: '测试与自动化',
12
+ };
3
13
  export function getBuiltinCommandNames() {
4
14
  return ['help', 'install', 'list', 'remove', 'uninstall', 'update', 'version', 'doctor', 'changelog', 'completion'];
5
15
  }
6
16
  /** 格式化 registry 注册命令的执行结果 */
7
17
  export function formatCommandResult(result) {
8
- const text = result.content?.[0]?.text;
9
- return text ?? '';
18
+ const texts = result.content?.map((item) => item.text).filter(Boolean) ?? [];
19
+ return texts.join('\n');
10
20
  }
11
21
  /** 打印总帮助 */
12
22
  export function printHelp(appName, commands) {
13
- const commandList = commands.map((command) => {
14
- if (typeof command === 'string') {
15
- return { name: command, description: '' };
16
- }
17
- return { name: command.name, description: command.description ?? '' };
18
- });
19
- const maxCommandWidth = Math.max(...commandList.map((command) => command.name.length), 0, 12) + 2;
23
+ const normalized = commands.map((command) => normalizeHelpCommand(command));
24
+ const maxCommandWidth = Math.max(...normalized.map((command) => command.name.length), 0, 12) + 2;
25
+ const grouped = groupCommands(normalized);
26
+ const recommended = pickRecommendedCommands(normalized);
20
27
  const lines = [
21
28
  `${appName} v${CLI_VERSION}`,
22
29
  '',
@@ -26,17 +33,25 @@ export function printHelp(appName, commands) {
26
33
  '用法:',
27
34
  ` ${appName} <command> [options]`,
28
35
  ` ${appName} help <command>`,
36
+ ` ${appName} --output compact <command> [options]`,
29
37
  ` npx ${appName} <command> [options]`,
30
38
  '',
31
39
  '快速开始:',
32
- ` ${appName} list 查看全部可用命令(推荐)`,
33
- ` ${appName} help <command> 查看命令参数`,
34
- ` ${appName} whoami 校验当前账号`,
35
- ` ${appName} doctor 自检配置与网络`,
40
+ ` ${appName} list 查看全部可用命令(推荐)`,
41
+ ` ${appName} help <command> 查看命令参数`,
42
+ ` ${appName} whoami 校验当前账号`,
43
+ ` ${appName} doctor --verbose 自检配置与网络`,
44
+ ` ${appName} --output compact search --q 关键词`,
45
+ '',
46
+ '输出模式:',
47
+ ' pretty 人类友好表格(默认)',
48
+ ' compact 精简 JSON,适合 AI 首轮探测',
49
+ ' normal 保留主要字段的 JSON',
50
+ ' verbose 完整 JSON(`--json` 等价)',
36
51
  '',
37
52
  '内置命令:',
38
53
  ' help 显示帮助信息',
39
- ' list 列出所有命令',
54
+ ' list 按分组列出业务命令',
40
55
  ' version 显示版本号',
41
56
  ' install 安装 CLI(配置 + skill)',
42
57
  ' update 检查更新 + 刷新 skill',
@@ -48,20 +63,43 @@ export function printHelp(appName, commands) {
48
63
  '',
49
64
  '业务命令:',
50
65
  ];
51
- if (commandList.length === 0) {
66
+ if (normalized.length === 0) {
52
67
  lines.push(' (暂无)');
53
68
  }
54
69
  else {
55
- for (const command of commandList) {
56
- lines.push(` ${command.name.padEnd(maxCommandWidth)}${command.description}`);
70
+ for (const group of GROUP_ORDER) {
71
+ const commandsInGroup = grouped.get(group) ?? [];
72
+ if (commandsInGroup.length === 0) {
73
+ continue;
74
+ }
75
+ lines.push(` ${GROUP_LABELS[group]}`);
76
+ for (const command of commandsInGroup) {
77
+ lines.push(formatHelpCommandLine(command, maxCommandWidth));
78
+ }
79
+ lines.push('');
80
+ }
81
+ const others = grouped.get('other') ?? [];
82
+ if (others.length > 0) {
83
+ lines.push(' 其他');
84
+ for (const command of others) {
85
+ lines.push(formatHelpCommandLine(command, maxCommandWidth));
86
+ }
87
+ lines.push('');
57
88
  }
58
89
  }
59
- if (commandList.length > 0) {
60
- lines.push('');
61
- lines.push(`共 ${commandList.length} 个业务命令。使用 \`${appName} help <command>\` 查看参数详情。`);
90
+ if (normalized.length > 0) {
91
+ lines.push(`共 ${normalized.length} 个业务命令。使用 \`${appName} help <command>\` 查看参数详情。`);
92
+ if (recommended.length > 0) {
93
+ lines.push('');
94
+ lines.push('推荐起手:');
95
+ for (const command of recommended) {
96
+ lines.push(` - ${appName} ${command.name}`);
97
+ }
98
+ }
62
99
  lines.push('');
63
100
  lines.push('下一步:');
64
101
  lines.push(` - 查看参数:${appName} help <command>`);
102
+ lines.push(` - 精简 JSON:${appName} --output compact <command> ...`);
65
103
  lines.push(` - 校验账号:${appName} whoami`);
66
104
  lines.push(` - 初始化配置:${appName} config-init --url <url> --username <username> --password <password>`);
67
105
  }
@@ -74,15 +112,66 @@ export function printCommandHelp(appName, command) {
74
112
  const description = field.description ? `:${field.description}` : '';
75
113
  return ` --${field.name} <${field.type}> (${requiredLabel})${description}`;
76
114
  });
115
+ const group = resolveCommandGroup(command.name);
77
116
  const lines = [
78
117
  `${appName} ${command.name}`,
79
118
  command.description ?? '',
80
- '',
81
- '参数:',
82
- ...(schemaRows.length > 0 ? schemaRows : [' (暂无参数)']),
83
- '',
84
- `提示:使用 \`${appName} --json ${command.name} ...\` 可输出 JSON 结果`,
85
119
  ];
120
+ if (group) {
121
+ lines.push(`分组:${GROUP_LABELS[group] ?? group}`);
122
+ }
123
+ if (command.metadata?.costHint) {
124
+ lines.push(`预估成本:${formatCostHint(command.metadata.costHint)}`);
125
+ }
126
+ if (command.metadata?.nextBestTools?.length) {
127
+ lines.push(`推荐下一步:${command.metadata.nextBestTools.join(' / ')}`);
128
+ }
129
+ lines.push('');
130
+ lines.push('参数:');
131
+ lines.push(...(schemaRows.length > 0 ? schemaRows : [' (暂无参数)']));
132
+ lines.push('');
133
+ lines.push('输出建议:');
134
+ lines.push(` ${appName} --output compact ${command.name} ... # AI 首轮探测`);
135
+ lines.push(` ${appName} --output normal ${command.name} ... # 保留主要字段`);
136
+ lines.push(` ${appName} --output verbose ${command.name} ... # 完整 JSON`);
137
+ lines.push(` ${appName} ${command.name} ... # 人类友好输出`);
86
138
  process.stdout.write(`${lines.join('\n')}\n`);
87
139
  }
140
+ function normalizeHelpCommand(command) {
141
+ if (typeof command === 'string') {
142
+ return {
143
+ name: command,
144
+ description: '',
145
+ groupKey: resolveCommandGroup(command) ?? 'other',
146
+ };
147
+ }
148
+ return {
149
+ name: command.name,
150
+ description: command.description ?? '',
151
+ metadata: command.metadata,
152
+ groupKey: resolveCommandGroup(command.name) ?? 'other',
153
+ };
154
+ }
155
+ function groupCommands(commands) {
156
+ const grouped = new Map();
157
+ for (const command of commands) {
158
+ grouped.set(command.groupKey, [...(grouped.get(command.groupKey) ?? []), command]);
159
+ }
160
+ for (const [key, items] of grouped) {
161
+ grouped.set(key, [...items].sort((left, right) => left.name.localeCompare(right.name)));
162
+ }
163
+ return grouped;
164
+ }
165
+ function formatHelpCommandLine(command, width) {
166
+ const cost = command.metadata?.costHint ? `[${formatCostHint(command.metadata.costHint)}] ` : '';
167
+ return ` ${command.name.padEnd(width)}${cost}${command.description}`.trimEnd();
168
+ }
169
+ function formatCostHint(costHint) {
170
+ return costHint === 'low' ? '低' : costHint === 'medium' ? '中' : '高';
171
+ }
172
+ function pickRecommendedCommands(commands) {
173
+ const preferred = ['whoami', 'login', 'project-list', 'search', 'interface-list'];
174
+ const index = new Map(commands.map((command) => [command.name, command]));
175
+ return preferred.map((name) => index.get(name)).filter(Boolean);
176
+ }
88
177
  //# sourceMappingURL=cli-output.js.map