@optima-chat/comfy-cli 0.4.2 → 0.5.0

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.
@@ -0,0 +1,39 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "WebFetch(domain:github.com)",
5
+ "WebFetch(domain:raw.githubusercontent.com)",
6
+ "Bash(mkdir:*)",
7
+ "Bash(git init:*)",
8
+ "Bash(gh repo create:*)",
9
+ "Bash(git push:*)",
10
+ "Bash(git add:*)",
11
+ "Bash(git commit:*)",
12
+ "Bash(gh api:*)",
13
+ "Bash(npm install)",
14
+ "Bash(npm run build:*)",
15
+ "Bash(npm publish:*)",
16
+ "Bash(npm install:*)",
17
+ "Bash(find:*)",
18
+ "Bash(for:*)",
19
+ "Bash(do)",
20
+ "Bash(done)",
21
+ "Bash(comfy:*)",
22
+ "Bash(cat:*)",
23
+ "Read(//tmp/**)",
24
+ "Bash(curl -o /tmp/banner-cartoon.png \"http://dev.optima.chat:8188/view?filename=comfy-cli_00016_.png&type=output\")",
25
+ "Bash(npm:*)",
26
+ "Bash(gh secret set:*)",
27
+ "Bash(gh run list:*)",
28
+ "Bash(git tag:*)",
29
+ "Bash(gh release view:*)",
30
+ "Bash(node:*)",
31
+ "Bash(gh issue view:*)",
32
+ "Bash(python3:*)",
33
+ "Bash(git reset:*)",
34
+ "Bash(git checkout:*)"
35
+ ],
36
+ "deny": [],
37
+ "ask": []
38
+ }
39
+ }
@@ -0,0 +1,441 @@
1
+ ---
2
+ name: comfy-cli
3
+ description: "ComfyUI CLI tool for AI agents. ALWAYS use when user wants to: generate images (生成图片/画图/图像/生成画), edit images (编辑图片/修改图片/图生图/改图), create videos (生成视频/图生视频/制作视频), manage ComfyUI workflows (工作流/ComfyUI). Uses 'comfy generate', 'comfy edit', 'comfy video' commands."
4
+ ---
5
+
6
+ # ComfyUI CLI - AI Image & Video Generation
7
+
8
+ ## When to Use This Skill
9
+
10
+ Use this skill when:
11
+ - User wants to generate images from text prompts (文生图)
12
+ - User wants to edit or transform existing images (图生图)
13
+ - User wants to create videos from images (图生视频)
14
+ - User asks about ComfyUI workflows, queue status, or models
15
+ - User mentions: 生成图片、画图、图像处理、视频生成、ComfyUI
16
+
17
+ ## Available Commands
18
+
19
+ ### 1. Generate Images: `comfy generate`
20
+
21
+ Generate images from text prompts using Stable Diffusion / FLUX models.
22
+
23
+ **Syntax:**
24
+ ```bash
25
+ comfy generate "PROMPT" [OPTIONS]
26
+ ```
27
+
28
+ **Parameters:**
29
+ - `PROMPT`: Text description of the image to generate
30
+ - `--width <number>`: Image width (default: 1024)
31
+ - `--height <number>`: Image height (default: 1024)
32
+ - `--no-wait`: Submit and return immediately without waiting for completion
33
+ - `--pretty`: Human-readable table format output (default: JSON)
34
+
35
+ **Returns:**
36
+ - JSON with `prompt_id`, `status`, `outputs` (image file paths)
37
+ - Default behavior: waits for completion and shows real-time progress
38
+
39
+ **When to use:**
40
+ - User asks to generate/create images from text
41
+ - User provides image description
42
+ - Text-to-image generation
43
+
44
+ ### 2. Edit Images: `comfy edit`
45
+
46
+ Edit or transform existing images with text prompts (Image-to-Image).
47
+
48
+ **Syntax:**
49
+ ```bash
50
+ comfy edit <IMAGE_PATH> "PROMPT" [OPTIONS]
51
+ ```
52
+
53
+ **Parameters:**
54
+ - `IMAGE_PATH`: Path to input image file
55
+ - `PROMPT`: Transformation description (e.g., "anime style", "add more details")
56
+ - `--no-wait`: Submit and return immediately without waiting for completion
57
+ - `--pretty`: Human-readable table format output (default: JSON)
58
+
59
+ **Returns:**
60
+ - JSON with `prompt_id`, `status`, `outputs` (edited image file paths)
61
+ - Default behavior: waits for completion and shows real-time progress
62
+
63
+ **When to use:**
64
+ - User wants to modify/edit an existing image
65
+ - User wants to apply style transfer
66
+ - Image-to-image transformation
67
+
68
+ ### 3. Create Videos: `comfy video`
69
+
70
+ Generate videos from images using I2V (Image-to-Video) models.
71
+
72
+ **Syntax:**
73
+ ```bash
74
+ comfy video <IMAGE_PATH> [OPTIONS]
75
+ ```
76
+
77
+ **Parameters:**
78
+ - `IMAGE_PATH`: Path to input image file
79
+ - `-p, --prompt <text>`: Motion description prompt (optional)
80
+ - `-n, --negative <text>`: Negative prompt (optional)
81
+ - `--width <number>`: Video width (default: 512)
82
+ - `--height <number>`: Video height (default: 512)
83
+ - `--no-wait`: Submit and return immediately without waiting for completion
84
+ - `--pretty`: Human-readable table format output (default: JSON)
85
+
86
+ **Returns:**
87
+ - JSON with `prompt_id`, `status`, `outputs` (video file paths)
88
+ - Default behavior: waits for completion and shows real-time progress
89
+
90
+ **When to use:**
91
+ - User wants to animate a static image
92
+ - User wants to create video from image
93
+ - Image-to-video generation
94
+
95
+ ### 4. Download Results: `comfy download`
96
+
97
+ Download generated images/videos to local directory.
98
+
99
+ **Syntax:**
100
+ ```bash
101
+ comfy download <PROMPT_ID> [OPTIONS]
102
+ ```
103
+
104
+ **Parameters:**
105
+ - `PROMPT_ID`: The prompt ID returned from generate/edit/video commands
106
+ - `-o, --output <dir>`: Output directory (default: ./comfy-output)
107
+ - `--pretty`: Human-readable output
108
+
109
+ **Returns:**
110
+ - JSON with downloaded file paths
111
+
112
+ ### 5. Workflow Management
113
+
114
+ **List workflow history:**
115
+ ```bash
116
+ comfy workflow list [--limit 10] [--pretty]
117
+ ```
118
+
119
+ **Get workflow result:**
120
+ ```bash
121
+ comfy workflow get <PROMPT_ID> [--pretty]
122
+ ```
123
+
124
+ **Submit custom workflow:**
125
+ ```bash
126
+ comfy workflow submit <WORKFLOW_FILE> [--pretty]
127
+ ```
128
+
129
+ ### 6. Queue Management
130
+
131
+ **Check queue status:**
132
+ ```bash
133
+ comfy queue status [--pretty]
134
+ ```
135
+
136
+ **Clear queue:**
137
+ ```bash
138
+ comfy queue clear --confirm [--pretty]
139
+ ```
140
+
141
+ **Delete queue item:**
142
+ ```bash
143
+ comfy queue delete <ITEM_ID> [--pretty]
144
+ ```
145
+
146
+ **Interrupt current execution:**
147
+ ```bash
148
+ comfy interrupt [--pretty]
149
+ ```
150
+
151
+ ### 7. Model Management
152
+
153
+ **List available models:**
154
+ ```bash
155
+ comfy model list [--type checkpoints|loras|vae|...] [--pretty]
156
+ ```
157
+
158
+ **Model types:**
159
+ - `checkpoints`: Stable Diffusion / FLUX checkpoint models
160
+ - `loras`: LoRA models
161
+ - `vae`: VAE models
162
+ - `controlnet`: ControlNet models
163
+ - `upscale_models`: Upscaler models
164
+
165
+ ### 8. System Information
166
+
167
+ **Get system stats:**
168
+ ```bash
169
+ comfy system stats [--pretty]
170
+ ```
171
+
172
+ Returns: GPU/CPU usage, memory, device info
173
+
174
+ ### 9. Configuration
175
+
176
+ **Set ComfyUI server address (required for first use):**
177
+ ```bash
178
+ comfy config set server http://localhost:8188
179
+ ```
180
+
181
+ **View current config:**
182
+ ```bash
183
+ comfy config list [--pretty]
184
+ ```
185
+
186
+ **Other config options:**
187
+ ```bash
188
+ comfy config set timeout 30000
189
+ comfy config set outputDir ./my-outputs
190
+ ```
191
+
192
+ ## Output Format
193
+
194
+ All commands default to **JSON output** (AI-friendly, reduces 50%+ tokens):
195
+
196
+ ```json
197
+ {
198
+ "success": true,
199
+ "data": {
200
+ "prompt_id": "abc123",
201
+ "status": "completed",
202
+ "outputs": ["./comfy-output/image_001.png"]
203
+ }
204
+ }
205
+ ```
206
+
207
+ Use `--pretty` flag for human-readable table format with colors.
208
+
209
+ ## Workflow Examples
210
+
211
+ ### Example 1: Quick Image Generation
212
+ **User**: "帮我生成一张猫的图片"
213
+
214
+ **Assistant**:
215
+ ```bash
216
+ comfy generate "a cute cat"
217
+ ```
218
+
219
+ **Result**: Returns JSON with `prompt_id` and `outputs` containing image file paths. Default behavior waits for completion and shows real-time progress via WebSocket.
220
+
221
+ ### Example 2: High-Resolution Image
222
+ **User**: "生成一张 1920x1080 的风景画"
223
+
224
+ **Assistant**:
225
+ ```bash
226
+ comfy generate "beautiful landscape with mountains and lake" --width 1920 --height 1080
227
+ ```
228
+
229
+ ### Example 3: Image Style Transfer
230
+ **User**: "把这张图片改成动漫风格"
231
+
232
+ **Assistant** (assuming user uploaded `photo.jpg`):
233
+ ```bash
234
+ comfy edit photo.jpg "anime style"
235
+ ```
236
+
237
+ ### Example 4: Image Editing with Details
238
+ **User**: "给这张照片添加更多细节,提高质量"
239
+
240
+ **Assistant**:
241
+ ```bash
242
+ comfy edit photo.jpg "add more details, enhance quality, 4k resolution"
243
+ ```
244
+
245
+ ### Example 5: Video Creation
246
+ **User**: "用这张人物图片生成一个视频"
247
+
248
+ **Assistant**:
249
+ ```bash
250
+ comfy video portrait.png --prompt "smooth motion, natural movement"
251
+ ```
252
+
253
+ ### Example 6: Non-blocking Generation
254
+ **User**: "生成一张图片,不用等完成"
255
+
256
+ **Assistant**:
257
+ ```bash
258
+ comfy generate "sunset over ocean" --no-wait
259
+ ```
260
+
261
+ Returns immediately with `prompt_id`. Check status later with:
262
+ ```bash
263
+ comfy workflow get <prompt_id>
264
+ ```
265
+
266
+ ### Example 7: Batch Image Generation
267
+ **User**: "帮我生成 3 张不同的猫的图片"
268
+
269
+ **Assistant**:
270
+ ```bash
271
+ comfy generate "a cute cat sitting" --no-wait
272
+ comfy generate "a cat playing with toys" --no-wait
273
+ comfy generate "a cat sleeping on a couch" --no-wait
274
+ ```
275
+
276
+ Then check queue status:
277
+ ```bash
278
+ comfy queue status
279
+ ```
280
+
281
+ ### Example 8: Workflow with Model Check
282
+ **User**: "检查一下有哪些可用的模型,然后生成图片"
283
+
284
+ **Assistant**:
285
+ ```bash
286
+ # First check available models
287
+ comfy model list --type checkpoints
288
+
289
+ # Then generate with appropriate prompt
290
+ comfy generate "a beautiful portrait"
291
+ ```
292
+
293
+ ### Example 9: Complete Workflow
294
+ **User**: "生成一张图片,编辑它,然后生成视频"
295
+
296
+ **Assistant**:
297
+ ```bash
298
+ # 1. Generate base image
299
+ comfy generate "a portrait of a woman"
300
+ # Output: ./comfy-output/image_001.png
301
+
302
+ # 2. Edit the image
303
+ comfy edit ./comfy-output/image_001.png "add cinematic lighting"
304
+ # Output: ./comfy-output/image_002.png
305
+
306
+ # 3. Create video from edited image
307
+ comfy video ./comfy-output/image_002.png --prompt "slow motion, cinematic"
308
+ # Output: ./comfy-output/video_001.mp4
309
+ ```
310
+
311
+ ## Best Practices
312
+
313
+ ### 1. Output Format Selection
314
+ - **Default (JSON)**: Best for AI agents, programmatic parsing, reduces tokens
315
+ - **Pretty mode**: Best for human inspection, debugging, visual feedback
316
+ - Use `--pretty` when user explicitly wants to see formatted output
317
+
318
+ ### 2. Wait Strategy
319
+ - **Default (wait)**: Recommended for interactive workflows, shows real-time progress
320
+ - **--no-wait**: Use when submitting multiple jobs, batch processing, or time-consuming operations
321
+ - After `--no-wait`, use `comfy workflow get <prompt_id>` to check completion
322
+
323
+ ### 3. Error Handling
324
+ - Always check `success` field in JSON response
325
+ - If error occurs, check:
326
+ 1. ComfyUI server is running: `comfy system stats`
327
+ 2. Server address is correct: `comfy config list`
328
+ 3. Queue is not stuck: `comfy queue status`
329
+
330
+ ### 4. Performance Optimization
331
+ - Use appropriate image sizes (1024x1024 for SD, 512x512 for videos)
332
+ - Consider `--no-wait` for batch operations
333
+ - Check system resources before large generations: `comfy system stats`
334
+
335
+ ### 5. First-time Setup
336
+ Always configure server address before first use:
337
+ ```bash
338
+ comfy config set server http://localhost:8188
339
+ ```
340
+
341
+ ## Common Patterns
342
+
343
+ ### Pattern 1: Generate and Download
344
+ ```bash
345
+ # Generate image
346
+ comfy generate "a cat" --no-wait
347
+ # Returns: { "prompt_id": "abc123" }
348
+
349
+ # Download result later
350
+ comfy download abc123
351
+ ```
352
+
353
+ ### Pattern 2: Iterative Editing
354
+ ```bash
355
+ # Start with base image
356
+ comfy generate "a portrait"
357
+
358
+ # Edit step 1
359
+ comfy edit output_001.png "add dramatic lighting"
360
+
361
+ # Edit step 2
362
+ comfy edit output_002.png "increase contrast"
363
+ ```
364
+
365
+ ### Pattern 3: Queue Management
366
+ ```bash
367
+ # Submit multiple jobs
368
+ comfy generate "cat" --no-wait
369
+ comfy generate "dog" --no-wait
370
+ comfy generate "bird" --no-wait
371
+
372
+ # Check queue
373
+ comfy queue status
374
+
375
+ # If needed, clear queue
376
+ comfy queue clear --confirm
377
+ ```
378
+
379
+ ## Tips
380
+
381
+ **Server Connection:**
382
+ - Default server: `http://localhost:8188`
383
+ - For remote servers: `comfy config set server http://remote-ip:8188`
384
+ - Check connection: `comfy system stats`
385
+
386
+ **Model Selection:**
387
+ - ComfyUI automatically uses default checkpoint model
388
+ - Check available models: `comfy model list --type checkpoints`
389
+ - For custom workflows, use: `comfy workflow submit custom.json`
390
+
391
+ **Output Files:**
392
+ - Default output directory: `./comfy-output/`
393
+ - Change with: `comfy config set outputDir ./my-outputs`
394
+ - Downloaded files retain original ComfyUI filenames
395
+
396
+ **Real-time Progress:**
397
+ - Default wait mode shows progress via WebSocket
398
+ - Progress includes: node execution, current step, percentage
399
+ - Use `--no-wait` to skip progress monitoring
400
+
401
+ **Interruption:**
402
+ - Stop current generation: `comfy interrupt`
403
+ - Clear pending jobs: `comfy queue clear --confirm`
404
+
405
+ **JSON Parsing:**
406
+ - All JSON responses follow consistent structure
407
+ - Check `success` field first
408
+ - Access data via `data` field
409
+ - Errors include `error` field with details
410
+
411
+ ## Configuration
412
+
413
+ Config file location: `~/.comfy-cli/config.json`
414
+
415
+ **Available settings:**
416
+ - `server`: ComfyUI server address (required)
417
+ - `timeout`: Request timeout in milliseconds (default: 30000)
418
+ - `autoConnect`: Auto-connect to WebSocket (default: true)
419
+ - `outputDir`: Default output directory (default: `./comfy-output`)
420
+
421
+ ## Troubleshooting
422
+
423
+ **"Connection refused" error:**
424
+ - Ensure ComfyUI is running: Check browser at http://localhost:8188
425
+ - Verify server address: `comfy config list`
426
+ - Test connection: `comfy system stats`
427
+
428
+ **"Workflow failed" error:**
429
+ - Check error details in JSON response
430
+ - Verify model files are available: `comfy model list`
431
+ - Check ComfyUI console logs
432
+
433
+ **Slow generation:**
434
+ - Check GPU availability: `comfy system stats`
435
+ - Reduce image resolution
436
+ - Check queue: `comfy queue status`
437
+
438
+ **Missing output files:**
439
+ - Check output directory: `comfy config list`
440
+ - Verify generation completed: `comfy workflow get <prompt_id>`
441
+ - Use `comfy download <prompt_id>` to re-download
package/README.md CHANGED
@@ -39,6 +39,41 @@ comfy queue status
39
39
  comfy model list --type checkpoints
40
40
  ```
41
41
 
42
+ ## Claude Code 集成
43
+
44
+ ComfyUI CLI 支持 Claude Code Skills 自动发现,让 Claude 能够直接通过自然语言调用命令。
45
+
46
+ ### 初始化 Skill
47
+
48
+ 在你的项目中运行:
49
+
50
+ ```bash
51
+ comfy init
52
+ ```
53
+
54
+ 这会在项目中创建 `.claude/skills/comfy-cli/` 目录和 Skill 配置文件。
55
+
56
+ ### 使用示例
57
+
58
+ 打开 Claude Code 后,直接对话:
59
+
60
+ - **"帮我生成一张猫的图片"** → Claude 自动调用 `comfy generate "a cat"`
61
+ - **"把这张图片改成动漫风格"** → Claude 调用 `comfy edit <file> "anime style"`
62
+ - **"用这张图片生成视频"** → Claude 调用 `comfy video <file>`
63
+
64
+ ### Skill 管理
65
+
66
+ ```bash
67
+ # 查看已安装的 Skill
68
+ ls .claude/skills/
69
+
70
+ # 重新初始化(覆盖)
71
+ comfy init --force
72
+
73
+ # 删除 Skill
74
+ rm -rf .claude/skills/comfy-cli/
75
+ ```
76
+
42
77
  ## 输出格式
43
78
 
44
79
  默认输出 **JSON 格式**(AI 友好),支持两种模式:
@@ -209,6 +244,12 @@ comfy config reset --confirm
209
244
 
210
245
  ## 在 Claude Code 中使用
211
246
 
247
+ ### 方式一:使用 Skills(推荐)
248
+
249
+ 在项目中运行 `comfy init` 创建 Skill 配置,Claude 会自动发现并使用。详见 [Claude Code 集成](#claude-code-集成) 章节。
250
+
251
+ ### 方式二:全局配置
252
+
212
253
  在你的 `~/.claude/CLAUDE.md` 中添加:
213
254
 
214
255
  ```markdown
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerInitCommand(program: Command): void;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA8FnD"}
@@ -0,0 +1,108 @@
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
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
+ /**
8
+ * Load skill templates from package files
9
+ */
10
+ async function loadSkillTemplates() {
11
+ try {
12
+ const skillTemplateDir = join(__dirname, '../../.claude/skills/comfy-cli');
13
+ const skillContent = await readFile(join(skillTemplateDir, 'SKILL.md'), 'utf-8');
14
+ return {
15
+ 'comfy-cli.md': skillContent,
16
+ };
17
+ }
18
+ catch (error) {
19
+ throw new Error(`Failed to load skill templates: ${error instanceof Error ? error.message : String(error)}`);
20
+ }
21
+ }
22
+ export function registerInitCommand(program) {
23
+ program
24
+ .command('init')
25
+ .description('Initialize Claude Code Skills in current directory')
26
+ .option('-f, --force', 'Overwrite existing skills', false)
27
+ .action(async (options) => {
28
+ const pretty = isPrettyMode(options);
29
+ try {
30
+ const skillsDir = join(process.cwd(), '.claude', 'skills');
31
+ // Check if .claude/skills already exists
32
+ let exists = false;
33
+ try {
34
+ await access(skillsDir);
35
+ exists = true;
36
+ }
37
+ catch {
38
+ // Directory doesn't exist, which is fine
39
+ }
40
+ if (exists && !options.force) {
41
+ if (pretty) {
42
+ info('✅ Claude Code Skills already configured in this directory.');
43
+ info(`\n📁 Skills directory: ${skillsDir}`);
44
+ info('\n💡 Use --force to overwrite existing skills.');
45
+ }
46
+ else {
47
+ outputSuccess({
48
+ message: 'Skills already configured',
49
+ skills_directory: skillsDir,
50
+ hint: 'Use --force to overwrite',
51
+ });
52
+ }
53
+ return;
54
+ }
55
+ // Create .claude/skills directory
56
+ await mkdir(skillsDir, { recursive: true });
57
+ // Load skill templates from package files
58
+ const skillTemplates = await loadSkillTemplates();
59
+ // Write skills files
60
+ const createdSkills = [];
61
+ for (const [skillName, content] of Object.entries(skillTemplates)) {
62
+ // Create skill directory (e.g., .claude/skills/comfy-cli/)
63
+ const skillDirName = skillName.replace('.md', '');
64
+ const skillDirPath = join(skillsDir, skillDirName);
65
+ await mkdir(skillDirPath, { recursive: true });
66
+ // Create SKILL.md file inside the directory
67
+ const skillFilePath = join(skillDirPath, 'SKILL.md');
68
+ await writeFile(skillFilePath, content);
69
+ createdSkills.push(skillDirName);
70
+ }
71
+ // Success message
72
+ if (pretty) {
73
+ success('✅ ComfyUI CLI Skills initialized successfully!\n');
74
+ info(`📁 Skills directory: ${skillsDir}`);
75
+ info('📦 Created skills:');
76
+ createdSkills.forEach((skill) => {
77
+ info(` - ${skill}/`);
78
+ });
79
+ info('\n🎯 Next steps:');
80
+ info(' 1. Open this project in Claude Code');
81
+ info(' 2. Claude will automatically discover the ComfyUI CLI skill');
82
+ info(' 3. Ask Claude questions like:');
83
+ info(' • "帮我生成一张猫的图片"');
84
+ info(' • "把这张图片改成动漫风格"');
85
+ info(' • "用这张图片生成一个视频"');
86
+ info('\n💡 Claude will use ComfyUI CLI automatically!');
87
+ info('\n📚 Learn more: https://github.com/Optima-Chat/comfy-cli');
88
+ }
89
+ else {
90
+ outputSuccess({
91
+ message: 'Skills initialized successfully',
92
+ skills_directory: skillsDir,
93
+ created_skills: createdSkills,
94
+ next_steps: [
95
+ 'Open this project in Claude Code',
96
+ 'Claude will auto-discover ComfyUI CLI skill',
97
+ 'Ask Claude to generate/edit images or create videos',
98
+ ],
99
+ docs: 'https://github.com/Optima-Chat/comfy-cli',
100
+ });
101
+ }
102
+ }
103
+ catch (error) {
104
+ outputError('INIT_FAILED', `Initialization failed: ${error instanceof Error ? error.message : String(error)}`, options);
105
+ }
106
+ });
107
+ }
108
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,6 +15,7 @@ import { registerNodeCommand } from './commands/node.js';
15
15
  import { registerSystemCommand } from './commands/system.js';
16
16
  import { registerConfigCommand } from './commands/config.js';
17
17
  import { registerInterruptCommand } from './commands/interrupt.js';
18
+ import { registerInitCommand } from './commands/init.js';
18
19
  const __filename = fileURLToPath(import.meta.url);
19
20
  const __dirname = dirname(__filename);
20
21
  const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));
@@ -68,5 +69,6 @@ registerNodeCommand(program);
68
69
  registerSystemCommand(program);
69
70
  registerConfigCommand(program);
70
71
  registerInterruptCommand(program);
72
+ registerInitCommand(program);
71
73
  program.parse();
72
74
  //# sourceMappingURL=index.js.map
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,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"}
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;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,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;AAClC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optima-chat/comfy-cli",
3
- "version": "0.4.2",
3
+ "version": "0.5.0",
4
4
  "description": "A CLI tool for ComfyUI designed for LLM interactions",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -37,6 +37,7 @@
37
37
  },
38
38
  "files": [
39
39
  "dist",
40
+ ".claude",
40
41
  "workflows"
41
42
  ],
42
43
  "publishConfig": {