@optima-chat/gen-cli 1.0.0 → 1.0.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 (98) hide show
  1. package/dist/index.js +0 -0
  2. package/package.json +1 -1
  3. package/dist/backends/bfl.d.ts +0 -18
  4. package/dist/backends/bfl.d.ts.map +0 -1
  5. package/dist/backends/bfl.js +0 -130
  6. package/dist/backends/bfl.js.map +0 -1
  7. package/dist/backends/comfyui.d.ts +0 -10
  8. package/dist/backends/comfyui.d.ts.map +0 -1
  9. package/dist/backends/comfyui.js +0 -121
  10. package/dist/backends/comfyui.js.map +0 -1
  11. package/dist/backends/index.d.ts +0 -24
  12. package/dist/backends/index.d.ts.map +0 -1
  13. package/dist/backends/index.js +0 -59
  14. package/dist/backends/index.js.map +0 -1
  15. package/dist/backends/types.d.ts +0 -99
  16. package/dist/backends/types.d.ts.map +0 -1
  17. package/dist/backends/types.js +0 -2
  18. package/dist/backends/types.js.map +0 -1
  19. package/dist/backends/video-dashscope.d.ts +0 -10
  20. package/dist/backends/video-dashscope.d.ts.map +0 -1
  21. package/dist/backends/video-dashscope.js +0 -108
  22. package/dist/backends/video-dashscope.js.map +0 -1
  23. package/dist/backends/video-index.d.ts +0 -23
  24. package/dist/backends/video-index.d.ts.map +0 -1
  25. package/dist/backends/video-index.js +0 -57
  26. package/dist/backends/video-index.js.map +0 -1
  27. package/dist/commands/download.d.ts +0 -3
  28. package/dist/commands/download.d.ts.map +0 -1
  29. package/dist/commands/download.js +0 -169
  30. package/dist/commands/download.js.map +0 -1
  31. package/dist/commands/edit.d.ts +0 -3
  32. package/dist/commands/edit.d.ts.map +0 -1
  33. package/dist/commands/edit.js +0 -155
  34. package/dist/commands/edit.js.map +0 -1
  35. package/dist/commands/generate.d.ts +0 -3
  36. package/dist/commands/generate.d.ts.map +0 -1
  37. package/dist/commands/generate.js +0 -135
  38. package/dist/commands/generate.js.map +0 -1
  39. package/dist/commands/init.d.ts +0 -3
  40. package/dist/commands/init.d.ts.map +0 -1
  41. package/dist/commands/init.js +0 -144
  42. package/dist/commands/init.js.map +0 -1
  43. package/dist/commands/interrupt.d.ts +0 -3
  44. package/dist/commands/interrupt.d.ts.map +0 -1
  45. package/dist/commands/interrupt.js +0 -54
  46. package/dist/commands/interrupt.js.map +0 -1
  47. package/dist/commands/model.d.ts +0 -3
  48. package/dist/commands/model.d.ts.map +0 -1
  49. package/dist/commands/model.js +0 -82
  50. package/dist/commands/model.js.map +0 -1
  51. package/dist/commands/node.d.ts +0 -3
  52. package/dist/commands/node.d.ts.map +0 -1
  53. package/dist/commands/node.js +0 -148
  54. package/dist/commands/node.js.map +0 -1
  55. package/dist/commands/queue.d.ts +0 -3
  56. package/dist/commands/queue.d.ts.map +0 -1
  57. package/dist/commands/queue.js +0 -199
  58. package/dist/commands/queue.js.map +0 -1
  59. package/dist/commands/system.d.ts +0 -3
  60. package/dist/commands/system.d.ts.map +0 -1
  61. package/dist/commands/system.js +0 -85
  62. package/dist/commands/system.js.map +0 -1
  63. package/dist/commands/workflow.d.ts +0 -3
  64. package/dist/commands/workflow.d.ts.map +0 -1
  65. package/dist/commands/workflow.js +0 -244
  66. package/dist/commands/workflow.js.map +0 -1
  67. package/dist/services/api.d.ts +0 -23
  68. package/dist/services/api.d.ts.map +0 -1
  69. package/dist/services/api.js +0 -108
  70. package/dist/services/api.js.map +0 -1
  71. package/dist/services/bfl-api.d.ts +0 -67
  72. package/dist/services/bfl-api.d.ts.map +0 -1
  73. package/dist/services/bfl-api.js +0 -108
  74. package/dist/services/bfl-api.js.map +0 -1
  75. package/dist/services/dashscope-api.d.ts +0 -69
  76. package/dist/services/dashscope-api.d.ts.map +0 -1
  77. package/dist/services/dashscope-api.js +0 -134
  78. package/dist/services/dashscope-api.js.map +0 -1
  79. package/dist/services/dashscope-tts-api.d.ts +0 -23
  80. package/dist/services/dashscope-tts-api.d.ts.map +0 -1
  81. package/dist/services/dashscope-tts-api.js +0 -56
  82. package/dist/services/dashscope-tts-api.js.map +0 -1
  83. package/dist/services/fashn-api.d.ts +0 -57
  84. package/dist/services/fashn-api.d.ts.map +0 -1
  85. package/dist/services/fashn-api.js +0 -84
  86. package/dist/services/fashn-api.js.map +0 -1
  87. package/dist/services/groq-api.d.ts +0 -18
  88. package/dist/services/groq-api.d.ts.map +0 -1
  89. package/dist/services/groq-api.js +0 -30
  90. package/dist/services/groq-api.js.map +0 -1
  91. package/dist/services/websocket.d.ts +0 -33
  92. package/dist/services/websocket.d.ts.map +0 -1
  93. package/dist/services/websocket.js +0 -217
  94. package/dist/services/websocket.js.map +0 -1
  95. package/dist/utils/workflow.d.ts +0 -17
  96. package/dist/utils/workflow.d.ts.map +0 -1
  97. package/dist/utils/workflow.js +0 -81
  98. package/dist/utils/workflow.js.map +0 -1
@@ -1,144 +0,0 @@
1
- import { mkdir, writeFile, access, readFile } from 'fs/promises';
2
- import { join, dirname } from 'path';
3
- import { fileURLToPath } from 'url';
4
- import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
5
- import { success, info } from '../utils/logger.js';
6
- import { addEnhancedHelp } from '../utils/helpText.js';
7
- const __dirname = dirname(fileURLToPath(import.meta.url));
8
- /**
9
- * Load skill templates from package files
10
- */
11
- async function loadSkillTemplates() {
12
- try {
13
- const skillTemplateDir = join(__dirname, '../../.claude/skills/comfy-cli');
14
- const skillContent = await readFile(join(skillTemplateDir, 'SKILL.md'), 'utf-8');
15
- return {
16
- 'comfy-cli.md': skillContent,
17
- };
18
- }
19
- catch (error) {
20
- throw new Error(`Failed to load skill templates: ${error instanceof Error ? error.message : String(error)}`);
21
- }
22
- }
23
- export function registerInitCommand(program) {
24
- const cmd = program
25
- .command('init')
26
- .description('初始化 Claude Code Skills - 在当前目录配置 ComfyUI CLI 技能')
27
- .option('-f, --force', '覆盖已存在的技能文件', false)
28
- .action(async (options) => {
29
- const pretty = isPrettyMode(options);
30
- try {
31
- const skillsDir = join(process.cwd(), '.claude', 'skills');
32
- // Check if .claude/skills already exists
33
- let exists = false;
34
- try {
35
- await access(skillsDir);
36
- exists = true;
37
- }
38
- catch {
39
- // Directory doesn't exist, which is fine
40
- }
41
- if (exists && !options.force) {
42
- if (pretty) {
43
- info('✅ Claude Code Skills already configured in this directory.');
44
- info(`\n📁 Skills directory: ${skillsDir}`);
45
- info('\n💡 Use --force to overwrite existing skills.');
46
- }
47
- else {
48
- outputSuccess({
49
- message: 'Skills already configured',
50
- skills_directory: skillsDir,
51
- hint: 'Use --force to overwrite',
52
- });
53
- }
54
- return;
55
- }
56
- // Create .claude/skills directory
57
- await mkdir(skillsDir, { recursive: true });
58
- // Load skill templates from package files
59
- const skillTemplates = await loadSkillTemplates();
60
- // Write skills files
61
- const createdSkills = [];
62
- for (const [skillName, content] of Object.entries(skillTemplates)) {
63
- // Create skill directory (e.g., .claude/skills/comfy-cli/)
64
- const skillDirName = skillName.replace('.md', '');
65
- const skillDirPath = join(skillsDir, skillDirName);
66
- await mkdir(skillDirPath, { recursive: true });
67
- // Create SKILL.md file inside the directory
68
- const skillFilePath = join(skillDirPath, 'SKILL.md');
69
- await writeFile(skillFilePath, content);
70
- createdSkills.push(skillDirName);
71
- }
72
- // Success message
73
- if (pretty) {
74
- success('✅ ComfyUI CLI Skills initialized successfully!\n');
75
- info(`📁 Skills directory: ${skillsDir}`);
76
- info('📦 Created skills:');
77
- createdSkills.forEach((skill) => {
78
- info(` - ${skill}/`);
79
- });
80
- info('\n🎯 Next steps:');
81
- info(' 1. Open this project in Claude Code');
82
- info(' 2. Claude will automatically discover the ComfyUI CLI skill');
83
- info(' 3. Ask Claude questions like:');
84
- info(' • "帮我生成一张猫的图片"');
85
- info(' • "把这张图片改成动漫风格"');
86
- info(' • "用这张图片生成一个视频"');
87
- info('\n💡 Claude will use ComfyUI CLI automatically!');
88
- info('\n📚 Learn more: https://github.com/Optima-Chat/comfy-cli');
89
- }
90
- else {
91
- outputSuccess({
92
- message: 'Skills initialized successfully',
93
- skills_directory: skillsDir,
94
- created_skills: createdSkills,
95
- next_steps: [
96
- 'Open this project in Claude Code',
97
- 'Claude will auto-discover ComfyUI CLI skill',
98
- 'Ask Claude to generate/edit images or create videos',
99
- ],
100
- docs: 'https://github.com/Optima-Chat/comfy-cli',
101
- });
102
- }
103
- }
104
- catch (error) {
105
- outputError('INIT_FAILED', `初始化失败: ${error instanceof Error ? error.message : String(error)}`, options);
106
- }
107
- });
108
- // Add enhanced help
109
- addEnhancedHelp(cmd, {
110
- examples: [
111
- '# 初始化 Claude Code Skills',
112
- '$ comfy init',
113
- '',
114
- '# 强制覆盖已存在的技能文件',
115
- '$ comfy init --force',
116
- ],
117
- outputJson: `{
118
- "success": true,
119
- "data": {
120
- "message": "Skills initialized successfully",
121
- "skills_directory": "/path/to/project/.claude/skills",
122
- "created_skills": ["comfy-cli"],
123
- "next_steps": [
124
- "Open this project in Claude Code",
125
- "Claude will auto-discover ComfyUI CLI skill",
126
- "Ask Claude to generate/edit images or create videos"
127
- ]
128
- }
129
- }`,
130
- relatedCommands: [
131
- { command: 'config set server <url>', description: '配置 ComfyUI 服务器地址' },
132
- { command: 'generate <prompt>', description: '生成图像' },
133
- { command: 'edit <image> <prompt>', description: '编辑图像' },
134
- { command: 'video <image>', description: '生成视频' },
135
- ],
136
- notes: [
137
- '在项目根目录运行,会创建 .claude/skills/comfy-cli/ 目录',
138
- 'Claude Code 会自动发现并加载该技能',
139
- '初始化后可以用自然语言让 Claude 生成/编辑图像或视频',
140
- '使用 --force 可覆盖已存在的技能文件',
141
- ],
142
- });
143
- }
144
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerInterruptCommand(program: Command): void;
3
- //# sourceMappingURL=interrupt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interrupt.d.ts","sourceRoot":"","sources":["../../src/commands/interrupt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,QAiDxD"}
@@ -1,54 +0,0 @@
1
- import { ComfyAPIClient } from '../services/api.js';
2
- import { success } from '../utils/logger.js';
3
- import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
4
- import { addEnhancedHelp } from '../utils/helpText.js';
5
- export function registerInterruptCommand(program) {
6
- const cmd = program
7
- .command('interrupt')
8
- .description('中断当前执行 - 立即停止 ComfyUI 当前正在执行的任务')
9
- .action(async (options) => {
10
- const pretty = isPrettyMode(options);
11
- try {
12
- const client = new ComfyAPIClient();
13
- await client.interrupt();
14
- if (pretty) {
15
- success('已发送中断信号');
16
- }
17
- else {
18
- outputSuccess({
19
- message: '已发送中断信号',
20
- });
21
- }
22
- }
23
- catch (err) {
24
- outputError('INTERRUPT_FAILED', `中断失败: ${err}`, options);
25
- }
26
- });
27
- // Add enhanced help for interrupt command
28
- addEnhancedHelp(cmd, {
29
- examples: [
30
- '# 中断当前执行的任务',
31
- '$ comfy interrupt',
32
- '',
33
- '# Pretty 模式',
34
- '$ comfy interrupt --pretty',
35
- ],
36
- outputJson: `{
37
- "success": true,
38
- "data": {
39
- "message": "已发送中断信号"
40
- }
41
- }`,
42
- relatedCommands: [
43
- { command: 'queue status', description: '查看队列状态' },
44
- { command: 'queue clear --confirm', description: '清空等待队列' },
45
- { command: 'queue delete <id>', description: '删除队列中的任务' },
46
- ],
47
- notes: [
48
- '立即停止当前正在执行的任务',
49
- '只影响正在执行的任务,不影响队列中等待的任务',
50
- '若要清空队列,使用 queue clear 命令',
51
- ],
52
- });
53
- }
54
- //# sourceMappingURL=interrupt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interrupt.js","sourceRoot":"","sources":["../../src/commands/interrupt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAS,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACpC,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YAEzB,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,SAAS,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC;oBACZ,OAAO,EAAE,SAAS;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,kBAAkB,EAAE,SAAS,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,0CAA0C;IAC1C,eAAe,CAAC,GAAG,EAAE;QACnB,QAAQ,EAAE;YACR,aAAa;YACb,mBAAmB;YACnB,EAAE;YACF,aAAa;YACb,4BAA4B;SAC7B;QACD,UAAU,EAAE;;;;;EAKd;QACE,eAAe,EAAE;YACf,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE;YAClD,EAAE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,QAAQ,EAAE;YAC3D,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE;SAC1D;QACD,KAAK,EAAE;YACL,eAAe;YACf,wBAAwB;YACxB,0BAA0B;SAC3B;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerModelCommand(program: Command): void;
3
- //# sourceMappingURL=model.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAiFpD"}
@@ -1,82 +0,0 @@
1
- import { ComfyAPIClient } from '../services/api.js';
2
- import { info } from '../utils/logger.js';
3
- import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
4
- import { addEnhancedHelp } from '../utils/helpText.js';
5
- import Table from 'cli-table3';
6
- export function registerModelCommand(program) {
7
- const modelCmd = program
8
- .command('model')
9
- .description('模型管理');
10
- // comfy model list
11
- const listCmd = modelCmd
12
- .command('list')
13
- .description('列出可用模型 - 查看 ComfyUI 服务器上已安装的所有模型')
14
- .option('--type <type>', '模型类型 (checkpoints, loras, vae, etc.)')
15
- .action(async (options) => {
16
- const pretty = isPrettyMode(options);
17
- try {
18
- const client = new ComfyAPIClient();
19
- const models = await client.listModels(options.type);
20
- const modelList = Array.isArray(models) ? models : Object.values(models).flat();
21
- if (pretty) {
22
- if (modelList.length === 0) {
23
- info('未找到模型');
24
- return;
25
- }
26
- const table = new Table({
27
- head: ['序号', '模型名称'],
28
- colWidths: [8, 70],
29
- });
30
- modelList.forEach((model, index) => {
31
- table.push([index + 1, model]);
32
- });
33
- console.log(table.toString());
34
- info(`共 ${modelList.length} 个模型${options.type ? ` (${options.type})` : ''}`);
35
- }
36
- else {
37
- outputSuccess({
38
- models: modelList,
39
- total: modelList.length,
40
- type: options.type || null,
41
- });
42
- }
43
- }
44
- catch (err) {
45
- outputError('MODEL_LIST_FAILED', `获取模型列表失败: ${err}`, options);
46
- }
47
- });
48
- // Add enhanced help for list command
49
- addEnhancedHelp(listCmd, {
50
- examples: [
51
- '# 列出所有模型(JSON 模式)',
52
- '$ comfy model list',
53
- '',
54
- '# 列出指定类型的模型',
55
- '$ comfy model list --type checkpoints',
56
- '',
57
- '# Pretty 模式',
58
- '$ comfy model list --pretty',
59
- ],
60
- outputJson: `{
61
- "success": true,
62
- "data": {
63
- "models": [
64
- "flux1-dev-kontext_fp8_scaled.safetensors",
65
- "wan2.1_i2v_720p_14B_fp8_scaled.safetensors"
66
- ],
67
- "total": 2,
68
- "type": null
69
- }
70
- }`,
71
- relatedCommands: [
72
- { command: 'node list', description: '列出所有节点类型' },
73
- { command: 'system stats', description: '查看系统信息' },
74
- ],
75
- notes: [
76
- '返回 ComfyUI 服务器上已安装的模型列表',
77
- '可通过 --type 参数过滤特定类型',
78
- '常见类型: checkpoints, loras, vae, upscale_models, embeddings',
79
- ],
80
- });
81
- }
82
- //# sourceMappingURL=model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerNodeCommand(program: Command): void;
3
- //# sourceMappingURL=node.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/commands/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAwJnD"}
@@ -1,148 +0,0 @@
1
- import { ComfyAPIClient } from '../services/api.js';
2
- import { info } from '../utils/logger.js';
3
- import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
4
- import { addEnhancedHelp } from '../utils/helpText.js';
5
- import Table from 'cli-table3';
6
- export function registerNodeCommand(program) {
7
- const nodeCmd = program
8
- .command('node')
9
- .description('节点信息查询');
10
- // comfy node list
11
- const listCmd = nodeCmd
12
- .command('list')
13
- .description('列出所有节点类型 - 查看 ComfyUI 中可用的所有节点类型')
14
- .option('--filter <text>', '过滤节点名称')
15
- .action(async (options) => {
16
- const pretty = isPrettyMode(options);
17
- try {
18
- const client = new ComfyAPIClient();
19
- const nodeInfo = await client.getObjectInfo();
20
- let nodeList = Object.keys(nodeInfo);
21
- if (options.filter) {
22
- nodeList = nodeList.filter((name) => name.toLowerCase().includes(options.filter.toLowerCase()));
23
- }
24
- if (pretty) {
25
- if (nodeList.length === 0) {
26
- info('未找到节点');
27
- return;
28
- }
29
- const table = new Table({
30
- head: ['序号', '节点类型'],
31
- colWidths: [8, 70],
32
- });
33
- nodeList.forEach((nodeName, index) => {
34
- table.push([index + 1, nodeName]);
35
- });
36
- console.log(table.toString());
37
- info(`共 ${nodeList.length} 个节点类型`);
38
- }
39
- else {
40
- outputSuccess({
41
- nodes: nodeList,
42
- total: nodeList.length,
43
- filter: options.filter || null,
44
- });
45
- }
46
- }
47
- catch (err) {
48
- outputError('NODE_LIST_FAILED', `获取节点列表失败: ${err}`, options);
49
- }
50
- });
51
- // Add enhanced help for list command
52
- addEnhancedHelp(listCmd, {
53
- examples: [
54
- '# 列出所有节点类型',
55
- '$ comfy node list',
56
- '',
57
- '# 过滤包含 "Load" 的节点',
58
- '$ comfy node list --filter Load',
59
- '',
60
- '# Pretty 模式',
61
- '$ comfy node list --pretty',
62
- ],
63
- outputJson: `{
64
- "success": true,
65
- "data": {
66
- "nodes": [
67
- "KSampler",
68
- "LoadImage",
69
- "SaveImage",
70
- "CLIPTextEncode"
71
- ],
72
- "total": 4,
73
- "filter": null
74
- }
75
- }`,
76
- relatedCommands: [
77
- { command: 'node info <class>', description: '查看特定节点的详细信息' },
78
- { command: 'model list', description: '列出可用模型' },
79
- ],
80
- notes: [
81
- '返回 ComfyUI 中所有可用节点类型',
82
- '使用 --filter 参数进行模糊搜索',
83
- '配合 node info 命令查看节点详细信息',
84
- ],
85
- });
86
- // comfy node info
87
- const infoCmd = nodeCmd
88
- .command('info')
89
- .description('查看节点详情 - 查看指定节点的输入输出参数和配置')
90
- .argument('<class>', '节点类名')
91
- .action(async (nodeClass, options) => {
92
- const pretty = isPrettyMode(options);
93
- try {
94
- const client = new ComfyAPIClient();
95
- const nodeInfo = await client.getObjectInfo(nodeClass);
96
- if (pretty) {
97
- console.log(`\n📦 节点: ${nodeClass}\n`);
98
- console.log(JSON.stringify(nodeInfo, null, 2));
99
- }
100
- else {
101
- outputSuccess({
102
- class: nodeClass,
103
- info: nodeInfo,
104
- });
105
- }
106
- }
107
- catch (err) {
108
- outputError('NODE_INFO_FAILED', `获取节点信息失败: ${err}`, options);
109
- }
110
- });
111
- // Add enhanced help for info command
112
- addEnhancedHelp(infoCmd, {
113
- examples: [
114
- '# 查看 KSampler 节点详情',
115
- '$ comfy node info KSampler',
116
- '',
117
- '# 查看 LoadImage 节点详情',
118
- '$ comfy node info LoadImage',
119
- '',
120
- '# Pretty 模式',
121
- '$ comfy node info SaveImage --pretty',
122
- ],
123
- outputJson: `{
124
- "success": true,
125
- "data": {
126
- "class": "KSampler",
127
- "info": {
128
- "input": {
129
- "required": {...},
130
- "optional": {...}
131
- },
132
- "output": [...],
133
- "category": "sampling"
134
- }
135
- }
136
- }`,
137
- relatedCommands: [
138
- { command: 'node list', description: '列出所有节点类型' },
139
- { command: 'node list --filter <text>', description: '搜索节点' },
140
- ],
141
- notes: [
142
- '返回节点的完整定义信息',
143
- '包含输入参数、输出类型、分类等',
144
- '用于构建自定义 workflow 时了解节点接口',
145
- ],
146
- });
147
- }
148
- //# sourceMappingURL=node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/commands/node.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerQueueCommand(program: Command): void;
3
- //# sourceMappingURL=queue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/commands/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QA+MpD"}