@optima-chat/gen-cli 1.0.0 → 1.0.2

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,57 +0,0 @@
1
- export type TryonCategory = 'auto' | 'tops' | 'bottoms' | 'one-pieces';
2
- export type TryonMode = 'performance' | 'balanced' | 'quality';
3
- export type TryonGarmentPhotoType = 'auto' | 'flat-lay' | 'model';
4
- export interface TryonParams {
5
- model_image: string;
6
- garment_image: string;
7
- category?: TryonCategory;
8
- mode?: TryonMode;
9
- garment_photo_type?: TryonGarmentPhotoType;
10
- num_samples?: number;
11
- output_format?: 'png' | 'jpeg';
12
- seed?: number;
13
- }
14
- export interface FashnRunResponse {
15
- id: string;
16
- status: string;
17
- }
18
- export interface FashnStatusResponse {
19
- id: string;
20
- status: 'starting' | 'processing' | 'completed' | 'failed';
21
- output?: string[];
22
- error?: {
23
- name: string;
24
- message: string;
25
- };
26
- }
27
- export interface PollOptions {
28
- interval?: number;
29
- timeout?: number;
30
- onProgress?: (status: string) => void;
31
- }
32
- export declare class FashnClient {
33
- private client;
34
- constructor(apiKey: string);
35
- /**
36
- * 提交虚拟试穿任务
37
- */
38
- run(params: TryonParams): Promise<FashnRunResponse>;
39
- /**
40
- * 获取任务状态
41
- */
42
- getStatus(id: string): Promise<FashnStatusResponse>;
43
- /**
44
- * 轮询等待结果
45
- */
46
- poll(id: string, options?: PollOptions): Promise<FashnStatusResponse>;
47
- /**
48
- * 将本地图像转换为 base64 data URL
49
- */
50
- imageToBase64(filePath: string): Promise<string>;
51
- /**
52
- * 下载图像到本地
53
- */
54
- downloadImage(url: string, outputDir: string, filename?: string): Promise<string>;
55
- private sleep;
56
- }
57
- //# sourceMappingURL=fashn-api.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fashn-api.d.ts","sourceRoot":"","sources":["../../src/services/fashn-api.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;AACvE,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC;AAC/D,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,MAAM;IAW1B;;OAEG;IACG,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQzD;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAKzD;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA8B/E;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAStD;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAevF,OAAO,CAAC,KAAK;CAGd"}
@@ -1,84 +0,0 @@
1
- import axios from 'axios';
2
- import * as fs from 'fs/promises';
3
- import * as path from 'path';
4
- export class FashnClient {
5
- client;
6
- constructor(apiKey) {
7
- this.client = axios.create({
8
- baseURL: 'https://api.fashn.ai/v1',
9
- headers: {
10
- 'Authorization': `Bearer ${apiKey}`,
11
- 'Content-Type': 'application/json',
12
- },
13
- timeout: 120000,
14
- });
15
- }
16
- /**
17
- * 提交虚拟试穿任务
18
- */
19
- async run(params) {
20
- const response = await this.client.post('/run', {
21
- model_name: 'tryon-v1.6',
22
- inputs: params,
23
- });
24
- return response.data;
25
- }
26
- /**
27
- * 获取任务状态
28
- */
29
- async getStatus(id) {
30
- const response = await this.client.get(`/status/${id}`);
31
- return response.data;
32
- }
33
- /**
34
- * 轮询等待结果
35
- */
36
- async poll(id, options = {}) {
37
- const { interval = 2000, timeout = 300000, onProgress, } = options;
38
- const startTime = Date.now();
39
- while (true) {
40
- if (Date.now() - startTime > timeout) {
41
- throw new Error('FASHN polling timeout exceeded');
42
- }
43
- const result = await this.getStatus(id);
44
- onProgress?.(result.status);
45
- if (result.status === 'completed') {
46
- return result;
47
- }
48
- if (result.status === 'failed') {
49
- const errMsg = result.error ? `${result.error.name}: ${result.error.message}` : 'Unknown error';
50
- throw new Error(`FASHN try-on failed: ${errMsg}`);
51
- }
52
- await this.sleep(interval);
53
- }
54
- }
55
- /**
56
- * 将本地图像转换为 base64 data URL
57
- */
58
- async imageToBase64(filePath) {
59
- const absolutePath = path.resolve(filePath);
60
- const buffer = await fs.readFile(absolutePath);
61
- const base64 = buffer.toString('base64');
62
- const ext = path.extname(filePath).toLowerCase();
63
- const mimeType = ext === '.png' ? 'image/png' : 'image/jpeg';
64
- return `data:${mimeType};base64,${base64}`;
65
- }
66
- /**
67
- * 下载图像到本地
68
- */
69
- async downloadImage(url, outputDir, filename) {
70
- await fs.mkdir(outputDir, { recursive: true });
71
- const response = await axios.get(url, {
72
- responseType: 'arraybuffer',
73
- timeout: 120000,
74
- });
75
- const finalFilename = filename || `tryon_${Date.now()}.png`;
76
- const outputPath = path.join(outputDir, finalFilename);
77
- await fs.writeFile(outputPath, response.data);
78
- return outputPath;
79
- }
80
- sleep(ms) {
81
- return new Promise(resolve => setTimeout(resolve, ms));
82
- }
83
- }
84
- //# sourceMappingURL=fashn-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fashn-api.js","sourceRoot":"","sources":["../../src/services/fashn-api.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- export interface TranscribeParams {
2
- filePath: string;
3
- model?: string;
4
- language?: string;
5
- }
6
- export interface TranscribeResult {
7
- text: string;
8
- }
9
- export declare class GroqClient {
10
- private apiKey;
11
- private baseUrl;
12
- constructor(apiKey: string);
13
- /**
14
- * 语音识别(ASR)
15
- */
16
- transcribe(params: TranscribeParams): Promise<TranscribeResult>;
17
- }
18
- //# sourceMappingURL=groq-api.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"groq-api.d.ts","sourceRoot":"","sources":["../../src/services/groq-api.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAoC;gBAEvC,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsBtE"}
@@ -1,30 +0,0 @@
1
- import axios from 'axios';
2
- import FormData from 'form-data';
3
- import * as fs from 'fs';
4
- export class GroqClient {
5
- apiKey;
6
- baseUrl = 'https://api.groq.com/openai/v1';
7
- constructor(apiKey) {
8
- this.apiKey = apiKey;
9
- }
10
- /**
11
- * 语音识别(ASR)
12
- */
13
- async transcribe(params) {
14
- const form = new FormData();
15
- form.append('file', fs.createReadStream(params.filePath));
16
- form.append('model', params.model || 'whisper-large-v3-turbo');
17
- if (params.language) {
18
- form.append('language', params.language);
19
- }
20
- const response = await axios.post(`${this.baseUrl}/audio/transcriptions`, form, {
21
- headers: {
22
- 'Authorization': `Bearer ${this.apiKey}`,
23
- ...form.getHeaders(),
24
- },
25
- timeout: 60000,
26
- });
27
- return { text: response.data.text };
28
- }
29
- }
30
- //# sourceMappingURL=groq-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"groq-api.js","sourceRoot":"","sources":["../../src/services/groq-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAYzB,MAAM,OAAO,UAAU;IACb,MAAM,CAAS;IACf,OAAO,GAAG,gCAAgC,CAAC;IAEnD,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAwB;QACvC,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,wBAAwB,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,OAAO,uBAAuB,EACtC,IAAI,EACJ;YACE,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACxC,GAAG,IAAI,CAAC,UAAU,EAAE;aACrB;YACD,OAAO,EAAE,KAAK;SACf,CACF,CAAC;QAEF,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;CACF"}
@@ -1,33 +0,0 @@
1
- import { EventEmitter } from 'events';
2
- export interface ProgressData {
3
- value: number;
4
- max: number;
5
- node?: string | null;
6
- prompt_id?: string;
7
- }
8
- export interface ExecutingData {
9
- node: string | null;
10
- prompt_id: string;
11
- }
12
- export interface ExecutedData {
13
- node: string;
14
- output: any;
15
- prompt_id: string;
16
- }
17
- export declare class ComfyWebSocket extends EventEmitter {
18
- private ws;
19
- private clientId;
20
- private reconnectAttempts;
21
- private maxReconnectAttempts;
22
- constructor(clientId?: string);
23
- connect(): Promise<void>;
24
- private handleMessage;
25
- disconnect(): void;
26
- isConnected(): boolean;
27
- getClientId(): string;
28
- }
29
- /**
30
- * 监听特定 prompt_id 的执行进度
31
- */
32
- export declare function monitorProgress(promptId: string, onProgress?: (current: number, total: number, message: string) => void, onComplete?: () => void): Promise<void>;
33
- //# sourceMappingURL=websocket.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/services/websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAK;gBAErB,QAAQ,CAAC,EAAE,MAAM;IAKvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD9B,OAAO,CAAC,aAAa;IAiCrB,UAAU;IAOV,WAAW,IAAI,OAAO;IAItB,WAAW,IAAI,MAAM;CAGtB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,EACtE,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,OAAO,CAAC,IAAI,CAAC,CAmHf"}
@@ -1,217 +0,0 @@
1
- import WebSocket from 'ws';
2
- import { EventEmitter } from 'events';
3
- import { getConfig } from './config.js';
4
- export class ComfyWebSocket extends EventEmitter {
5
- ws = null;
6
- clientId;
7
- reconnectAttempts = 0;
8
- maxReconnectAttempts = 3;
9
- constructor(clientId) {
10
- super();
11
- this.clientId = clientId || `comfy-cli-${Date.now()}`;
12
- }
13
- async connect() {
14
- const config = getConfig();
15
- const serverUrl = new URL(config.server);
16
- // 构建 WebSocket URL
17
- const protocol = serverUrl.protocol === 'https:' ? 'wss:' : 'ws:';
18
- const wsUrl = `${protocol}//${serverUrl.host}/ws?clientId=${this.clientId}`;
19
- return new Promise((resolve, reject) => {
20
- try {
21
- this.ws = new WebSocket(wsUrl);
22
- // 添加连接超时
23
- const connectTimeout = setTimeout(() => {
24
- if (this.ws && this.ws.readyState !== WebSocket.OPEN) {
25
- this.ws.terminate();
26
- reject(new Error('WebSocket connection timeout'));
27
- }
28
- }, 10000); // 10秒超时
29
- this.ws.on('open', () => {
30
- clearTimeout(connectTimeout);
31
- this.reconnectAttempts = 0;
32
- this.emit('connected');
33
- resolve();
34
- });
35
- this.ws.on('message', (data) => {
36
- try {
37
- const message = JSON.parse(data.toString());
38
- this.handleMessage(message);
39
- }
40
- catch (error) {
41
- this.emit('error', new Error(`Failed to parse message: ${error}`));
42
- }
43
- });
44
- this.ws.on('error', (error) => {
45
- clearTimeout(connectTimeout);
46
- this.emit('error', error);
47
- reject(error);
48
- });
49
- this.ws.on('close', () => {
50
- clearTimeout(connectTimeout);
51
- this.emit('disconnected');
52
- this.ws = null;
53
- });
54
- }
55
- catch (error) {
56
- reject(error);
57
- }
58
- });
59
- }
60
- handleMessage(message) {
61
- const { type, data } = message;
62
- switch (type) {
63
- case 'status':
64
- this.emit('status', data);
65
- break;
66
- case 'progress':
67
- this.emit('progress', data);
68
- break;
69
- case 'executing':
70
- this.emit('executing', data);
71
- break;
72
- case 'executed':
73
- this.emit('executed', data);
74
- break;
75
- case 'execution_start':
76
- this.emit('execution_start', data);
77
- break;
78
- case 'execution_cached':
79
- this.emit('execution_cached', data);
80
- break;
81
- case 'execution_success':
82
- this.emit('execution_success', data);
83
- break;
84
- case 'execution_error':
85
- this.emit('execution_error', data);
86
- break;
87
- default:
88
- this.emit('message', message);
89
- }
90
- }
91
- disconnect() {
92
- if (this.ws) {
93
- this.ws.close();
94
- this.ws = null;
95
- }
96
- }
97
- isConnected() {
98
- return this.ws !== null && this.ws.readyState === WebSocket.OPEN;
99
- }
100
- getClientId() {
101
- return this.clientId;
102
- }
103
- }
104
- /**
105
- * 监听特定 prompt_id 的执行进度
106
- */
107
- export async function monitorProgress(promptId, onProgress, onComplete) {
108
- const ws = new ComfyWebSocket();
109
- return new Promise(async (resolve, reject) => {
110
- let currentStep = 0;
111
- let totalSteps = 0;
112
- let hasStarted = false;
113
- let hasCompleted = false;
114
- let timeout;
115
- let completionCheckTimeout = null;
116
- // 设置所有事件监听器
117
- ws.on('connected', () => {
118
- onProgress?.(0, 100, 'WebSocket 已连接,等待执行...');
119
- });
120
- ws.on('status', (data) => {
121
- // 接收到初始状态消息
122
- if (!hasStarted) {
123
- onProgress?.(0, 100, '等待任务开始...');
124
- }
125
- // 检查队列是否为空且任务已完成
126
- if (hasStarted && !hasCompleted && data.status?.exec_info?.queue_remaining === 0) {
127
- if (currentStep === totalSteps && totalSteps > 0) {
128
- hasCompleted = true;
129
- clearTimeout(timeout);
130
- if (completionCheckTimeout)
131
- clearTimeout(completionCheckTimeout);
132
- ws.disconnect();
133
- onComplete?.();
134
- resolve();
135
- }
136
- }
137
- });
138
- ws.on('progress', (data) => {
139
- // 只处理我们的 prompt_id 的消息
140
- if (data.prompt_id !== promptId) {
141
- return;
142
- }
143
- hasStarted = true;
144
- if (data.max > 0) {
145
- currentStep = data.value;
146
- totalSteps = data.max;
147
- const percent = Math.round((currentStep / totalSteps) * 100);
148
- onProgress?.(currentStep, totalSteps, `处理中: ${percent}%`);
149
- // 如果达到最大步数,设置一个延迟检查
150
- if (currentStep === totalSteps) {
151
- if (completionCheckTimeout)
152
- clearTimeout(completionCheckTimeout);
153
- completionCheckTimeout = setTimeout(() => {
154
- if (!hasCompleted) {
155
- hasCompleted = true;
156
- clearTimeout(timeout);
157
- ws.disconnect();
158
- onComplete?.();
159
- resolve();
160
- }
161
- }, 2000); // 等待2秒确认完成
162
- }
163
- }
164
- });
165
- ws.on('executing', (data) => {
166
- // 只处理我们的 prompt_id 的消息
167
- if (data.prompt_id !== promptId) {
168
- return;
169
- }
170
- hasStarted = true;
171
- if (data.node === null) {
172
- // 执行完成
173
- hasCompleted = true;
174
- clearTimeout(timeout);
175
- if (completionCheckTimeout)
176
- clearTimeout(completionCheckTimeout);
177
- ws.disconnect();
178
- onComplete?.();
179
- resolve();
180
- }
181
- });
182
- ws.on('execution_error', (data) => {
183
- if (data.prompt_id === promptId) {
184
- clearTimeout(timeout);
185
- if (completionCheckTimeout)
186
- clearTimeout(completionCheckTimeout);
187
- ws.disconnect();
188
- reject(new Error(`执行失败: ${JSON.stringify(data)}`));
189
- }
190
- });
191
- ws.on('error', (error) => {
192
- clearTimeout(timeout);
193
- if (completionCheckTimeout)
194
- clearTimeout(completionCheckTimeout);
195
- ws.disconnect();
196
- reject(error);
197
- });
198
- // 超时保护
199
- timeout = setTimeout(() => {
200
- if (ws.isConnected()) {
201
- if (completionCheckTimeout)
202
- clearTimeout(completionCheckTimeout);
203
- ws.disconnect();
204
- reject(new Error('执行超时'));
205
- }
206
- }, 5 * 60 * 1000); // 5分钟超时
207
- // 连接 WebSocket
208
- try {
209
- await ws.connect();
210
- }
211
- catch (error) {
212
- clearTimeout(timeout);
213
- reject(error);
214
- }
215
- });
216
- }
217
- //# sourceMappingURL=websocket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/services/websocket.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * 从 workflow 中提取所有 {{variable}} 变量
3
- */
4
- export declare function extractVariables(workflow: any): string[];
5
- /**
6
- * 替换 workflow 中的变量
7
- */
8
- export declare function replaceVariables(workflow: any, values: Record<string, any>): any;
9
- /**
10
- * 加载 workflow 文件
11
- */
12
- export declare function loadWorkflow(workflowPath: string): any;
13
- /**
14
- * 获取内置 workflow 路径
15
- */
16
- export declare function getBuiltinWorkflowPath(name: string): string;
17
- //# sourceMappingURL=workflow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/utils/workflow.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,EAAE,CAmBxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAwBhF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,CAatD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM3D"}
@@ -1,81 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import { fileURLToPath } from 'url';
4
- /**
5
- * 从 workflow 中提取所有 {{variable}} 变量
6
- */
7
- export function extractVariables(workflow) {
8
- const variables = new Set();
9
- const regex = /\{\{(\w+)\}\}/g;
10
- const traverse = (obj) => {
11
- if (typeof obj === 'string') {
12
- let match;
13
- while ((match = regex.exec(obj)) !== null) {
14
- variables.add(match[1]);
15
- }
16
- }
17
- else if (Array.isArray(obj)) {
18
- obj.forEach(traverse);
19
- }
20
- else if (obj && typeof obj === 'object') {
21
- Object.values(obj).forEach(traverse);
22
- }
23
- };
24
- traverse(workflow);
25
- return Array.from(variables);
26
- }
27
- /**
28
- * 替换 workflow 中的变量
29
- */
30
- export function replaceVariables(workflow, values) {
31
- const result = JSON.parse(JSON.stringify(workflow));
32
- const traverse = (obj) => {
33
- if (typeof obj === 'string') {
34
- return obj.replace(/\{\{(\w+)\}\}/g, (match, varName) => {
35
- if (varName in values) {
36
- return String(values[varName]);
37
- }
38
- return match;
39
- });
40
- }
41
- else if (Array.isArray(obj)) {
42
- return obj.map(traverse);
43
- }
44
- else if (obj && typeof obj === 'object') {
45
- const newObj = {};
46
- for (const [key, value] of Object.entries(obj)) {
47
- newObj[key] = traverse(value);
48
- }
49
- return newObj;
50
- }
51
- return obj;
52
- };
53
- return traverse(result);
54
- }
55
- /**
56
- * 加载 workflow 文件
57
- */
58
- export function loadWorkflow(workflowPath) {
59
- const fullPath = path.resolve(workflowPath);
60
- if (!fs.existsSync(fullPath)) {
61
- throw new Error(`Workflow file not found: ${fullPath}`);
62
- }
63
- try {
64
- const content = fs.readFileSync(fullPath, 'utf-8');
65
- return JSON.parse(content);
66
- }
67
- catch (error) {
68
- throw new Error(`Failed to parse workflow file: ${error}`);
69
- }
70
- }
71
- /**
72
- * 获取内置 workflow 路径
73
- */
74
- export function getBuiltinWorkflowPath(name) {
75
- // 从项目根目录的 workflows 目录加载
76
- const __filename = fileURLToPath(import.meta.url);
77
- const __dirname = path.dirname(__filename);
78
- const projectRoot = path.resolve(__dirname, '../../');
79
- return path.join(projectRoot, 'workflows', name);
80
- }
81
- //# sourceMappingURL=workflow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/utils/workflow.ts"],"names":[],"mappings":"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"}