@optima-chat/comfy-cli 0.3.3 → 0.4.1

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 (44) hide show
  1. package/dist/commands/config.d.ts.map +1 -1
  2. package/dist/commands/config.js +129 -28
  3. package/dist/commands/config.js.map +1 -1
  4. package/dist/commands/download.d.ts.map +1 -1
  5. package/dist/commands/download.js +119 -33
  6. package/dist/commands/download.js.map +1 -1
  7. package/dist/commands/edit.d.ts.map +1 -1
  8. package/dist/commands/edit.js +73 -23
  9. package/dist/commands/edit.js.map +1 -1
  10. package/dist/commands/generate.d.ts.map +1 -1
  11. package/dist/commands/generate.js +67 -15
  12. package/dist/commands/generate.js.map +1 -1
  13. package/dist/commands/interrupt.d.ts.map +1 -1
  14. package/dist/commands/interrupt.js +42 -7
  15. package/dist/commands/interrupt.js.map +1 -1
  16. package/dist/commands/model.d.ts.map +1 -1
  17. package/dist/commands/model.js +49 -11
  18. package/dist/commands/model.js.map +1 -1
  19. package/dist/commands/node.d.ts.map +1 -1
  20. package/dist/commands/node.js +96 -18
  21. package/dist/commands/node.js.map +1 -1
  22. package/dist/commands/queue.d.ts.map +1 -1
  23. package/dist/commands/queue.js +127 -25
  24. package/dist/commands/queue.js.map +1 -1
  25. package/dist/commands/system.d.ts.map +1 -1
  26. package/dist/commands/system.js +48 -10
  27. package/dist/commands/system.js.map +1 -1
  28. package/dist/commands/video.d.ts.map +1 -1
  29. package/dist/commands/video.js +86 -25
  30. package/dist/commands/video.js.map +1 -1
  31. package/dist/commands/workflow.d.ts.map +1 -1
  32. package/dist/commands/workflow.js +141 -34
  33. package/dist/commands/workflow.js.map +1 -1
  34. package/dist/index.js +35 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/utils/helpText.d.ts +15 -0
  37. package/dist/utils/helpText.d.ts.map +1 -0
  38. package/dist/utils/helpText.js +37 -0
  39. package/dist/utils/helpText.js.map +1 -0
  40. package/dist/utils/output.d.ts +54 -0
  41. package/dist/utils/output.d.ts.map +1 -0
  42. package/dist/utils/output.js +76 -0
  43. package/dist/utils/output.js.map +1 -0
  44. package/package.json +1 -1
@@ -1,36 +1,37 @@
1
1
  import { ComfyAPIClient } from '../services/api.js';
2
2
  import { loadWorkflow, extractVariables } from '../utils/workflow.js';
3
- import { success, error, info } from '../utils/logger.js';
3
+ import { success, info } from '../utils/logger.js';
4
+ import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
5
+ import { addEnhancedHelp } from '../utils/helpText.js';
4
6
  import Table from 'cli-table3';
5
7
  export function registerWorkflowCommand(program) {
6
8
  const workflowCmd = program
7
9
  .command('workflow')
8
10
  .description('工作流管理');
9
11
  // comfy workflow submit
10
- workflowCmd
12
+ const submitCmd = workflowCmd
11
13
  .command('submit')
12
- .description('提交工作流')
14
+ .description('提交工作流 - 提交自定义 ComfyUI workflow JSON 文件')
13
15
  .argument('<file>', 'workflow JSON 文件路径')
14
- .option('--json', '输出 JSON 格式')
15
16
  .option('--wait', '等待执行完成')
16
17
  .action(async (file, options) => {
18
+ const pretty = isPrettyMode(options);
17
19
  try {
18
- info(`正在加载工作流: ${file}`);
20
+ if (pretty) {
21
+ info(`正在加载工作流: ${file}`);
22
+ }
19
23
  // 加载 workflow
20
24
  const workflow = loadWorkflow(file);
21
25
  // 提取变量
22
26
  const variables = extractVariables(workflow);
23
- if (variables.length > 0) {
27
+ if (pretty && variables.length > 0) {
24
28
  info(`检测到 ${variables.length} 个变量: ${variables.join(', ')}`);
25
29
  info('提示: 使用 generate/edit/video 命令可以自动填充这些变量');
26
30
  }
27
31
  // 提交到 ComfyUI
28
32
  const client = new ComfyAPIClient();
29
33
  const result = await client.submitWorkflow(workflow);
30
- if (options.json) {
31
- console.log(JSON.stringify(result, null, 2));
32
- }
33
- else {
34
+ if (pretty) {
34
35
  success(`工作流已提交`);
35
36
  info(`Prompt ID: ${result.prompt_id}`);
36
37
  if (options.wait) {
@@ -42,27 +43,56 @@ export function registerWorkflowCommand(program) {
42
43
  info(`使用 'comfy workflow get ${result.prompt_id}' 查看结果`);
43
44
  }
44
45
  }
46
+ else {
47
+ outputSuccess({
48
+ prompt_id: result.prompt_id,
49
+ variables: variables.length > 0 ? variables : undefined,
50
+ });
51
+ }
45
52
  }
46
53
  catch (err) {
47
- error(`提交失败: ${err}`);
48
- process.exit(1);
54
+ outputError('WORKFLOW_SUBMIT_FAILED', `提交失败: ${err}`, options);
49
55
  }
50
56
  });
57
+ // Add enhanced help for submit command
58
+ addEnhancedHelp(submitCmd, {
59
+ examples: [
60
+ '# 提交工作流',
61
+ '$ comfy workflow submit my-workflow.json',
62
+ '',
63
+ '# 提交并等待完成',
64
+ '$ comfy workflow submit my-workflow.json --wait',
65
+ ],
66
+ outputJson: `{
67
+ "success": true,
68
+ "data": {
69
+ "prompt_id": "abc-123-def",
70
+ "variables": ["prompt", "width"]
71
+ }
72
+ }`,
73
+ relatedCommands: [
74
+ { command: 'workflow list', description: '查看工作流历史' },
75
+ { command: 'workflow get <id>', description: '查看工作流结果' },
76
+ { command: 'download <id>', description: '下载输出结果' },
77
+ ],
78
+ notes: [
79
+ 'workflow 文件为标准 ComfyUI workflow JSON 格式',
80
+ '支持变量替换(使用 {{variable_name}} 格式)',
81
+ '提交后返回 prompt_id 用于查询和下载结果',
82
+ ],
83
+ });
51
84
  // comfy workflow list
52
- workflowCmd
85
+ const listCmd = workflowCmd
53
86
  .command('list')
54
- .description('列出工作流历史')
55
- .option('--limit <number>', '限制数量', '10')
56
- .option('--json', '输出 JSON 格式')
87
+ .description('列出工作流历史 - 查看最近提交的工作流执行记录')
88
+ .option('--limit <number>', '限制数量 (默认: 10)', '10')
57
89
  .action(async (options) => {
90
+ const pretty = isPrettyMode(options);
58
91
  try {
59
92
  const client = new ComfyAPIClient();
60
93
  const history = await client.getHistory();
61
94
  const historyArray = Object.entries(history).slice(0, parseInt(options.limit));
62
- if (options.json) {
63
- console.log(JSON.stringify(historyArray, null, 2));
64
- }
65
- else {
95
+ if (pretty) {
66
96
  if (historyArray.length === 0) {
67
97
  info('暂无历史记录');
68
98
  return;
@@ -79,33 +109,75 @@ export function registerWorkflowCommand(program) {
79
109
  console.log(table.toString());
80
110
  info(`共 ${historyArray.length} 条记录`);
81
111
  }
112
+ else {
113
+ const workflows = historyArray.map(([promptId, data]) => ({
114
+ prompt_id: promptId,
115
+ completed: data.status?.completed || false,
116
+ status_str: data.status?.status_str || null,
117
+ }));
118
+ outputSuccess({
119
+ workflows,
120
+ total: historyArray.length,
121
+ });
122
+ }
82
123
  }
83
124
  catch (err) {
84
- error(`获取历史失败: ${err}`);
85
- process.exit(1);
125
+ outputError('WORKFLOW_LIST_FAILED', `获取历史失败: ${err}`, options);
86
126
  }
87
127
  });
128
+ // Add enhanced help for list command
129
+ addEnhancedHelp(listCmd, {
130
+ examples: [
131
+ '# 列出最近 10 条工作流历史(默认 JSON)',
132
+ '$ comfy workflow list',
133
+ '',
134
+ '# 列出最近 20 条',
135
+ '$ comfy workflow list --limit 20',
136
+ '',
137
+ '# Pretty 模式',
138
+ '$ comfy workflow list --pretty',
139
+ ],
140
+ outputJson: `{
141
+ "success": true,
142
+ "data": {
143
+ "workflows": [
144
+ {
145
+ "prompt_id": "abc-123-def",
146
+ "completed": true,
147
+ "status_str": "success"
148
+ }
149
+ ],
150
+ "total": 10
151
+ }
152
+ }`,
153
+ relatedCommands: [
154
+ { command: 'workflow get <id>', description: '查看单个工作流详情' },
155
+ { command: 'download <id>', description: '下载工作流输出结果' },
156
+ { command: 'queue status', description: '查看当前队列状态' },
157
+ ],
158
+ notes: [
159
+ '默认显示最近 10 条记录',
160
+ '使用 --limit 参数控制数量',
161
+ '记录包含 prompt_id、完成状态和状态信息',
162
+ ],
163
+ });
88
164
  // comfy workflow get
89
- workflowCmd
165
+ const getCmd = workflowCmd
90
166
  .command('get')
91
- .description('获取工作流结果')
167
+ .description('获取工作流结果 - 查看指定工作流的执行详情和输出')
92
168
  .argument('<prompt_id>', 'Prompt ID')
93
- .option('--json', '输出 JSON 格式')
94
169
  .option('--download', '下载输出图像')
95
- .option('--output <dir>', '输出目录', './output')
170
+ .option('--output <dir>', '输出目录 (默认: ./output)', './output')
96
171
  .action(async (promptId, options) => {
172
+ const pretty = isPrettyMode(options);
97
173
  try {
98
174
  const client = new ComfyAPIClient();
99
175
  const result = await client.getHistory(promptId);
100
176
  if (!result[promptId]) {
101
- error(`未找到 Prompt ID: ${promptId}`);
102
- process.exit(1);
177
+ outputError('WORKFLOW_NOT_FOUND', `未找到 Prompt ID: ${promptId}`, options);
103
178
  }
104
179
  const data = result[promptId];
105
- if (options.json) {
106
- console.log(JSON.stringify(data, null, 2));
107
- }
108
- else {
180
+ if (pretty) {
109
181
  success(`Prompt ID: ${promptId}`);
110
182
  if (data.status) {
111
183
  info(`状态: ${data.status.completed ? '✓ 完成' : '✗ 失败'}`);
@@ -121,11 +193,46 @@ export function registerWorkflowCommand(program) {
121
193
  info('下载功能即将推出');
122
194
  }
123
195
  }
196
+ else {
197
+ outputSuccess({
198
+ prompt_id: promptId,
199
+ completed: data.status?.completed || false,
200
+ status_str: data.status?.status_str || null,
201
+ outputs: data.outputs || null,
202
+ });
203
+ }
124
204
  }
125
205
  catch (err) {
126
- error(`获取结果失败: ${err}`);
127
- process.exit(1);
206
+ outputError('WORKFLOW_GET_FAILED', `获取结果失败: ${err}`, options);
128
207
  }
129
208
  });
209
+ // Add enhanced help for get command
210
+ addEnhancedHelp(getCmd, {
211
+ examples: [
212
+ '# 查看工作流结果',
213
+ '$ comfy workflow get abc-123-def',
214
+ '',
215
+ '# Pretty 模式',
216
+ '$ comfy workflow get abc-123-def --pretty',
217
+ ],
218
+ outputJson: `{
219
+ "success": true,
220
+ "data": {
221
+ "prompt_id": "abc-123-def",
222
+ "completed": true,
223
+ "status_str": "success",
224
+ "outputs": {...}
225
+ }
226
+ }`,
227
+ relatedCommands: [
228
+ { command: 'download <id>', description: '下载工作流输出文件' },
229
+ { command: 'workflow list', description: '查看所有工作流历史' },
230
+ ],
231
+ notes: [
232
+ '返回工作流的完整执行信息',
233
+ '包含状态、输出节点等详细信息',
234
+ '使用 download 命令下载实际文件',
235
+ ],
236
+ });
130
237
  }
131
238
  //# sourceMappingURL=workflow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ import { Command } from 'commander';
3
3
  import { readFileSync } from 'fs';
4
4
  import { fileURLToPath } from 'url';
5
5
  import { dirname, join } from 'path';
6
+ import { setGlobalPrettyMode } from './utils/output.js';
6
7
  import { registerGenerateCommand } from './commands/generate.js';
7
8
  import { registerEditCommand } from './commands/edit.js';
8
9
  import { registerVideoCommand } from './commands/video.js';
@@ -20,8 +21,40 @@ const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'),
20
21
  const program = new Command();
21
22
  program
22
23
  .name('comfy')
23
- .description('A CLI tool for ComfyUI designed for LLM interactions')
24
- .version(packageJson.version);
24
+ .description('ComfyUI CLI for AI Agents - 专为 AI Agent 设计的 ComfyUI 命令行工具')
25
+ .version(packageJson.version)
26
+ .option('--pretty', '使用人类可读的表格格式输出(默认为 JSON)')
27
+ .hook('preAction', (thisCommand) => {
28
+ // 在执行任何命令之前,检查全局 --pretty 选项
29
+ const opts = thisCommand.optsWithGlobals();
30
+ if (opts.pretty) {
31
+ setGlobalPrettyMode(true);
32
+ }
33
+ })
34
+ .addHelpText('after', `
35
+ Output Formats:
36
+ 默认输出 JSON 格式(AI 友好),支持两种输出模式:
37
+ --json JSON 格式(默认)- 机器可读,AI 友好,减少 50%+ token
38
+ --pretty 表格格式 - 人类可读,带颜色和表格
39
+
40
+ 全局使用:comfy --pretty <command>
41
+ 命令使用:comfy <command> --pretty
42
+
43
+ 配置管理:
44
+ 首次使用前需要配置 ComfyUI 服务器地址:
45
+ $ comfy config set server http://localhost:8188
46
+
47
+ 常用命令:
48
+ $ comfy generate "a cat" # 生成图像(默认 JSON 输出)
49
+ $ comfy generate "a cat" --pretty # 生成图像(表格输出)
50
+ $ comfy workflow list # 列出工作流历史
51
+ $ comfy queue status # 查看队列状态
52
+ $ comfy download <prompt_id> # 下载生成结果
53
+
54
+ 文档:
55
+ GitHub: https://github.com/Optima-Chat/comfy-cli
56
+ Issues: https://github.com/Optima-Chat/comfy-cli/issues
57
+ `);
25
58
  // 注册功能命令
26
59
  registerGenerateCommand(program);
27
60
  registerEditCommand(program);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,sDAAsD,CAAC;KACnE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,SAAS;AACT,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAEjC,SAAS;AACT,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,2DAA2D,CAAC;KACxE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;KAC7C,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,6BAA6B;IAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC;KACD,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;CAuBvB,CAAC,CAAC;AAEH,SAAS;AACT,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAEjC,SAAS;AACT,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Command } from 'commander';
2
+ export interface HelpTextOptions {
3
+ examples?: string[];
4
+ outputJson?: string;
5
+ relatedCommands?: Array<{
6
+ command: string;
7
+ description: string;
8
+ }>;
9
+ notes?: string[];
10
+ }
11
+ /**
12
+ * Add enhanced help text to a command with examples, output format, related commands, and notes
13
+ */
14
+ export declare function addEnhancedHelp(command: Command, options: HelpTextOptions): Command;
15
+ //# sourceMappingURL=helpText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpText.d.ts","sourceRoot":"","sources":["../../src/utils/helpText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,eAAe,GACvB,OAAO,CAsCT"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Add enhanced help text to a command with examples, output format, related commands, and notes
3
+ */
4
+ export function addEnhancedHelp(command, options) {
5
+ command.addHelpText('after', () => {
6
+ let text = '';
7
+ if (options.examples && options.examples.length > 0) {
8
+ text += '\nExamples:\n';
9
+ options.examples.forEach(ex => {
10
+ text += ` ${ex}\n`;
11
+ });
12
+ }
13
+ if (options.outputJson) {
14
+ text += '\nOutput (JSON):\n';
15
+ const lines = options.outputJson.split('\n');
16
+ lines.forEach(line => {
17
+ text += ` ${line}\n`;
18
+ });
19
+ }
20
+ if (options.relatedCommands && options.relatedCommands.length > 0) {
21
+ text += '\nRelated Commands:\n';
22
+ options.relatedCommands.forEach(rc => {
23
+ const cmd = `comfy ${rc.command}`.padEnd(30);
24
+ text += ` ${cmd} ${rc.description}\n`;
25
+ });
26
+ }
27
+ if (options.notes && options.notes.length > 0) {
28
+ text += '\nNotes:\n';
29
+ options.notes.forEach(note => {
30
+ text += ` - ${note}\n`;
31
+ });
32
+ }
33
+ return text;
34
+ });
35
+ return command;
36
+ }
37
+ //# sourceMappingURL=helpText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpText.js","sourceRoot":"","sources":["../../src/utils/helpText.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAgB,EAChB,OAAwB;IAExB,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE;QAChC,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,IAAI,IAAI,eAAe,CAAC;YACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBAC5B,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,IAAI,oBAAoB,CAAC;YAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,IAAI,IAAI,uBAAuB,CAAC;YAChC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBACnC,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7C,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC,WAAW,IAAI,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,IAAI,IAAI,YAAY,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC3B,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 设置全局 pretty 模式
3
+ */
4
+ export declare function setGlobalPrettyMode(pretty: boolean): void;
5
+ /**
6
+ * 获取全局 pretty 模式状态
7
+ */
8
+ export declare function isGlobalPrettyMode(): boolean;
9
+ /**
10
+ * 判断是否应该使用 pretty 模式
11
+ * 优先级:命令级别 pretty 选项 > 全局 pretty 选项
12
+ */
13
+ export declare function isPrettyMode(options?: {
14
+ pretty?: boolean;
15
+ }): boolean;
16
+ /**
17
+ * 成功响应结构
18
+ */
19
+ export interface SuccessResponse<T = any> {
20
+ success: true;
21
+ data: T;
22
+ }
23
+ /**
24
+ * 错误响应结构
25
+ */
26
+ export interface ErrorResponse {
27
+ success: false;
28
+ error: {
29
+ code: string;
30
+ message: string;
31
+ };
32
+ }
33
+ /**
34
+ * 输出成功响应
35
+ */
36
+ export declare function outputSuccess<T>(data: T, options?: {
37
+ pretty?: boolean;
38
+ }): void;
39
+ /**
40
+ * 输出错误响应并退出
41
+ */
42
+ export declare function outputError(code: string, message: string, options?: {
43
+ pretty?: boolean;
44
+ }): never;
45
+ /**
46
+ * Pretty 模式下的日志函数
47
+ */
48
+ export declare const prettyLog: {
49
+ success(message: string): void;
50
+ error(message: string): void;
51
+ info(message: string): void;
52
+ warning(message: string): void;
53
+ };
54
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAKpE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG;IACtC,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;CACT;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAW9E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAgBhG;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;qBACH,MAAM,GAAG,IAAI;mBAGf,MAAM,GAAG,IAAI;kBAGd,MAAM,GAAG,IAAI;qBAGV,MAAM,GAAG,IAAI;CAG/B,CAAC"}
@@ -0,0 +1,76 @@
1
+ import chalk from 'chalk';
2
+ // 全局状态,由主程序设置
3
+ let globalPrettyMode = false;
4
+ /**
5
+ * 设置全局 pretty 模式
6
+ */
7
+ export function setGlobalPrettyMode(pretty) {
8
+ globalPrettyMode = pretty;
9
+ }
10
+ /**
11
+ * 获取全局 pretty 模式状态
12
+ */
13
+ export function isGlobalPrettyMode() {
14
+ return globalPrettyMode;
15
+ }
16
+ /**
17
+ * 判断是否应该使用 pretty 模式
18
+ * 优先级:命令级别 pretty 选项 > 全局 pretty 选项
19
+ */
20
+ export function isPrettyMode(options) {
21
+ if (options?.pretty !== undefined) {
22
+ return options.pretty;
23
+ }
24
+ return globalPrettyMode;
25
+ }
26
+ /**
27
+ * 输出成功响应
28
+ */
29
+ export function outputSuccess(data, options) {
30
+ if (isPrettyMode(options)) {
31
+ // Pretty 模式:不输出 JSON,由调用方自行处理输出
32
+ return;
33
+ }
34
+ const response = {
35
+ success: true,
36
+ data,
37
+ };
38
+ console.log(JSON.stringify(response));
39
+ }
40
+ /**
41
+ * 输出错误响应并退出
42
+ */
43
+ export function outputError(code, message, options) {
44
+ if (isPrettyMode(options)) {
45
+ // Pretty 模式:使用带颜色的输出
46
+ console.error(chalk.red('✗'), message);
47
+ process.exit(1);
48
+ }
49
+ const response = {
50
+ success: false,
51
+ error: {
52
+ code,
53
+ message,
54
+ },
55
+ };
56
+ console.log(JSON.stringify(response));
57
+ process.exit(1);
58
+ }
59
+ /**
60
+ * Pretty 模式下的日志函数
61
+ */
62
+ export const prettyLog = {
63
+ success(message) {
64
+ console.log(chalk.green('✓'), message);
65
+ },
66
+ error(message) {
67
+ console.error(chalk.red('✗'), message);
68
+ },
69
+ info(message) {
70
+ console.log(chalk.blue('ℹ'), message);
71
+ },
72
+ warning(message) {
73
+ console.log(chalk.yellow('⚠'), message);
74
+ },
75
+ };
76
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,cAAc;AACd,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,gBAAgB,GAAG,MAAM,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAA8B;IACzD,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAqBD;;GAEG;AACH,MAAM,UAAU,aAAa,CAAI,IAAO,EAAE,OAA8B;IACtE,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,gCAAgC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAuB;QACnC,OAAO,EAAE,IAAI;QACb,IAAI;KACL,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAe,EAAE,OAA8B;IACvF,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,qBAAqB;QACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAkB;QAC9B,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,IAAI;YACJ,OAAO;SACR;KACF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optima-chat/comfy-cli",
3
- "version": "0.3.3",
3
+ "version": "0.4.1",
4
4
  "description": "A CLI tool for ComfyUI designed for LLM interactions",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",