leaf-coding-agent 1.0.3 → 1.0.4
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.
- package/dist/core/agent-session.d.ts +16 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +51 -12
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +3 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +4 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +4 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/system-prompt.d.ts +14 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +43 -23
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/worker.d.ts +1 -0
- package/dist/core/tools/worker.d.ts.map +1 -1
- package/dist/core/tools/worker.js +26 -6
- package/dist/core/tools/worker.js.map +1 -1
- package/dist/core/worker-integration.d.ts +0 -4
- package/dist/core/worker-integration.d.ts.map +1 -1
- package/dist/core/worker-integration.js +42 -23
- package/dist/core/worker-integration.js.map +1 -1
- package/dist/modes/interactive/components/worker-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/worker-selector.js +18 -23
- package/dist/modes/interactive/components/worker-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +11 -14
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/package.json +1 -1
|
@@ -60,10 +60,10 @@ export function createWorkerToolDefinition(cwd, options) {
|
|
|
60
60
|
systemPrompt: system_prompt || "你是一个 Worker,负责执行分配给你的任务。",
|
|
61
61
|
};
|
|
62
62
|
// 创建 Worker Manager
|
|
63
|
-
const workerManager = new WorkerManager(coordinatorConfig, null,
|
|
64
|
-
communicationManager, {
|
|
63
|
+
const workerManager = new WorkerManager(coordinatorConfig, options?.agent || null, communicationManager, {
|
|
65
64
|
model: options?.model,
|
|
66
65
|
apiKey: options?.apiKey,
|
|
66
|
+
tools: options?.tools || [],
|
|
67
67
|
});
|
|
68
68
|
// 执行所有任务
|
|
69
69
|
const result = await workerManager.executeAll();
|
|
@@ -131,15 +131,25 @@ function formatWorkerResult(result) {
|
|
|
131
131
|
const lines = [];
|
|
132
132
|
lines.push(`## Worker 执行结果`);
|
|
133
133
|
lines.push("");
|
|
134
|
-
lines.push(`-
|
|
135
|
-
lines.push(`-
|
|
136
|
-
lines.push(`-
|
|
134
|
+
lines.push(`- **状态**: ${result.success ? "✓ 成功" : "✗ 失败"}`);
|
|
135
|
+
lines.push(`- **耗时**: ${formatDuration(result.duration)}`);
|
|
136
|
+
lines.push(`- **任务数**: ${result.results.size}`);
|
|
137
|
+
if (result.errors.size > 0) {
|
|
138
|
+
lines.push(`- **失败数**: ${result.errors.size}`);
|
|
139
|
+
}
|
|
137
140
|
lines.push("");
|
|
138
141
|
// 任务结果
|
|
139
142
|
if (result.results.size > 0) {
|
|
140
143
|
lines.push(`### 任务结果`);
|
|
141
144
|
for (const [workerId, workerResult] of result.results) {
|
|
142
|
-
|
|
145
|
+
const resultText = typeof workerResult.result === "string"
|
|
146
|
+
? workerResult.result
|
|
147
|
+
: JSON.stringify(workerResult.result, null, 2);
|
|
148
|
+
// 截断过长的结果
|
|
149
|
+
const truncated = resultText.length > 200
|
|
150
|
+
? resultText.substring(0, 200) + "..."
|
|
151
|
+
: resultText;
|
|
152
|
+
lines.push(`- **${workerId}**: ${truncated}`);
|
|
143
153
|
}
|
|
144
154
|
lines.push("");
|
|
145
155
|
}
|
|
@@ -153,4 +163,14 @@ function formatWorkerResult(result) {
|
|
|
153
163
|
}
|
|
154
164
|
return lines.join("\n");
|
|
155
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* 格式化持续时间
|
|
168
|
+
*/
|
|
169
|
+
function formatDuration(ms) {
|
|
170
|
+
if (ms < 1000)
|
|
171
|
+
return `${ms}ms`;
|
|
172
|
+
if (ms < 60000)
|
|
173
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
174
|
+
return `${Math.floor(ms / 60000)}m ${Math.round((ms % 60000) / 1000)}s`;
|
|
175
|
+
}
|
|
156
176
|
//# sourceMappingURL=worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/core/tools/worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { Type } from \"typebox\";\nimport type { ToolDefinition } from \"../extensions/types.ts\";\nimport { WorkerManager, CommunicationManager } from \"@looze/leaf-agent-core\";\nimport type { WorkerTask, CoordinatorConfig } from \"@looze/leaf-agent-core\";\nimport type { Model } from \"@looze/leaf-ai\";\n\n/**\n * Worker Tool 定义\n * \n * 用于创建和管理 Worker,并行执行任务\n */\n\nconst workerSchema = Type.Object({\n enable: Type.Boolean({ description: \"是否启用 Worker 模式\" }),\n tasks: Type.Array(Type.Object({\n id: Type.String({ description: \"任务 ID\" }),\n description: Type.String({ description: \"任务描述\" }),\n dependencies: Type.Optional(Type.Array(Type.String({ description: \"依赖的任务 ID\" }))),\n system_prompt: Type.Optional(Type.String({ description: \"Worker 的系统提示词\" })),\n })),\n system_prompt: Type.Optional(Type.String({ description: \"默认的 Worker 系统提示词\" })),\n max_workers: Type.Optional(Type.Number({ description: \"最大 Worker 数量\" })),\n communication_mode: Type.Optional(Type.String({ description: \"通信模式:socket/message/shared\" })),\n});\n\nexport type WorkerToolInput = typeof workerSchema;\n\nexport function createWorkerToolDefinition(\n cwd: string,\n options?: {\n model?: Model<any>;\n apiKey?: string;\n tools?: any[];\n }\n): ToolDefinition<typeof workerSchema> {\n return {\n name: \"worker\",\n label: \"Worker\",\n description: \"创建和管理 Worker,并行执行任务。启用 Worker 模式时,会创建多个独立的 Agent 并行执行任务。\",\n promptSnippet: \"创建 Worker 并行执行任务\",\n promptGuidelines: [\n \"Use worker when you need to execute multiple independent tasks in parallel.\",\n \"Worker 模式适合需要并行执行的复杂任务。\",\n \"每个 Worker 有独立的系统提示词和执行环境。\",\n ],\n parameters: workerSchema,\n \n async execute(toolCallId, params, signal, onUpdate, ctx) {\n const { enable, tasks, system_prompt, max_workers, communication_mode } = params;\n \n if (!enable) {\n return {\n content: [{ type: \"text\", text: \"Worker 模式未启用,使用普通模式执行。\" }],\n details: { enabled: false } as any,\n };\n }\n \n // 更新进度\n onUpdate?.({ \n content: [{ type: \"text\", text: `启动 ${tasks.length} 个 Worker...` }],\n details: {} as any\n });\n \n try {\n // 转换任务格式\n const workerTasks: WorkerTask[] = tasks.map(task => ({\n id: task.id,\n description: task.description,\n dependencies: task.dependencies || [],\n status: \"pending\" as const,\n }));\n \n // 创建通信管理器\n const communicationManager = new CommunicationManager(\n (communication_mode as any) || \"message\"\n );\n \n // 创建协调器配置\n const coordinatorConfig: CoordinatorConfig = {\n tasks: workerTasks,\n maxWorkers: max_workers || 4,\n communicationMode: (communication_mode as any) || \"message\",\n systemPrompt: system_prompt || \"你是一个 Worker,负责执行分配给你的任务。\",\n };\n \n // 创建 Worker Manager\n const workerManager = new WorkerManager(\n coordinatorConfig,\n null, // agent (Worker 内部会创建自己的 agent)\n communicationManager,\n {\n model: options?.model,\n apiKey: options?.apiKey,\n }\n );\n \n // 执行所有任务\n const result = await workerManager.executeAll();\n \n // 格式化结果\n const resultText = formatWorkerResult({\n success: result.success,\n results: result.results,\n errors: result.errors,\n duration: result.duration,\n });\n \n return {\n content: [{ type: \"text\", text: resultText }],\n details: { \n enabled: true, \n success: result.success,\n results: Object.fromEntries(result.results),\n errors: Object.fromEntries(result.errors),\n duration: result.duration,\n } as any,\n };\n } catch (error) {\n return {\n content: [{ type: \"text\", text: `Worker 执行失败: ${error}` }],\n details: { \n enabled: true, \n success: false,\n error: String(error),\n },\n isError: true,\n };\n }\n },\n \n renderCall(args, theme, context) {\n const text = (context.lastComponent as any) ?? { setText: () => {} };\n \n if (args.enable) {\n const taskCount = args.tasks?.length || 0;\n text.setText(`worker 启用 Worker 模式,${taskCount} 个任务`);\n } else {\n text.setText(\"worker 未启用\");\n }\n \n return text;\n },\n \n renderResult(result, options, theme, context) {\n const text = (context.lastComponent as any) ?? { setText: () => {} };\n \n const details = result.details as any;\n if (details?.enabled) {\n const success = details.success ? \"✓\" : \"✗\";\n const duration = details.duration;\n const taskCount = Object.keys(details.results || {}).length;\n \n text.setText(`${success} Worker 完成 (${taskCount} 个任务, ${duration}ms)`);\n } else {\n text.setText(\"Worker 模式未启用\");\n }\n \n return text;\n },\n };\n}\n\n/**\n * 格式化 Worker 结果\n */\nfunction formatWorkerResult(result: any): string {\n const lines: string[] = [];\n \n lines.push(`## Worker 执行结果`);\n lines.push(\"\");\n lines.push(`- 状态: ${result.success ? \"成功\" : \"失败\"}`);\n lines.push(`- 耗时: ${result.duration}ms`);\n lines.push(`- 任务数: ${result.results.size}`);\n lines.push(\"\");\n \n // 任务结果\n if (result.results.size > 0) {\n lines.push(`### 任务结果`);\n for (const [workerId, workerResult] of result.results) {\n lines.push(`- **${workerId}**: ${JSON.stringify(workerResult.result)}`);\n }\n lines.push(\"\");\n }\n \n // 错误信息\n if (result.errors.size > 0) {\n lines.push(`### 错误信息`);\n for (const [workerId, error] of result.errors) {\n lines.push(`- **${workerId}**: ${error}`);\n }\n lines.push(\"\");\n }\n \n return lines.join(\"\\n\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/core/tools/worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { Type } from \"typebox\";\nimport type { ToolDefinition } from \"../extensions/types.ts\";\nimport { WorkerManager, CommunicationManager } from \"@looze/leaf-agent-core\";\nimport type { WorkerTask, CoordinatorConfig } from \"@looze/leaf-agent-core\";\nimport type { Model } from \"@looze/leaf-ai\";\n\n/**\n * Worker Tool 定义\n * \n * 用于创建和管理 Worker,并行执行任务\n */\n\nconst workerSchema = Type.Object({\n enable: Type.Boolean({ description: \"是否启用 Worker 模式\" }),\n tasks: Type.Array(Type.Object({\n id: Type.String({ description: \"任务 ID\" }),\n description: Type.String({ description: \"任务描述\" }),\n dependencies: Type.Optional(Type.Array(Type.String({ description: \"依赖的任务 ID\" }))),\n system_prompt: Type.Optional(Type.String({ description: \"Worker 的系统提示词\" })),\n })),\n system_prompt: Type.Optional(Type.String({ description: \"默认的 Worker 系统提示词\" })),\n max_workers: Type.Optional(Type.Number({ description: \"最大 Worker 数量\" })),\n communication_mode: Type.Optional(Type.String({ description: \"通信模式:socket/message/shared\" })),\n});\n\nexport type WorkerToolInput = typeof workerSchema;\n\nexport function createWorkerToolDefinition(\n cwd: string,\n options?: {\n model?: Model<any>;\n apiKey?: string;\n tools?: any[];\n agent?: any;\n }\n): ToolDefinition<typeof workerSchema> {\n return {\n name: \"worker\",\n label: \"Worker\",\n description: \"创建和管理 Worker,并行执行任务。启用 Worker 模式时,会创建多个独立的 Agent 并行执行任务。\",\n promptSnippet: \"创建 Worker 并行执行任务\",\n promptGuidelines: [\n \"Use worker when you need to execute multiple independent tasks in parallel.\",\n \"Worker 模式适合需要并行执行的复杂任务。\",\n \"每个 Worker 有独立的系统提示词和执行环境。\",\n ],\n parameters: workerSchema,\n \n async execute(toolCallId, params, signal, onUpdate, ctx) {\n const { enable, tasks, system_prompt, max_workers, communication_mode } = params;\n \n if (!enable) {\n return {\n content: [{ type: \"text\", text: \"Worker 模式未启用,使用普通模式执行。\" }],\n details: { enabled: false } as any,\n };\n }\n \n // 更新进度\n onUpdate?.({ \n content: [{ type: \"text\", text: `启动 ${tasks.length} 个 Worker...` }],\n details: {} as any\n });\n \n try {\n // 转换任务格式\n const workerTasks: WorkerTask[] = tasks.map(task => ({\n id: task.id,\n description: task.description,\n dependencies: task.dependencies || [],\n status: \"pending\" as const,\n }));\n \n // 创建通信管理器\n const communicationManager = new CommunicationManager(\n (communication_mode as any) || \"message\"\n );\n \n // 创建协调器配置\n const coordinatorConfig: CoordinatorConfig = {\n tasks: workerTasks,\n maxWorkers: max_workers || 4,\n communicationMode: (communication_mode as any) || \"message\",\n systemPrompt: system_prompt || \"你是一个 Worker,负责执行分配给你的任务。\",\n };\n \n // 创建 Worker Manager\n const workerManager = new WorkerManager(\n coordinatorConfig,\n options?.agent || null,\n communicationManager,\n {\n model: options?.model,\n apiKey: options?.apiKey,\n tools: options?.tools || [],\n }\n );\n \n // 执行所有任务\n const result = await workerManager.executeAll();\n \n // 格式化结果\n const resultText = formatWorkerResult({\n success: result.success,\n results: result.results,\n errors: result.errors,\n duration: result.duration,\n });\n \n return {\n content: [{ type: \"text\", text: resultText }],\n details: { \n enabled: true, \n success: result.success,\n results: Object.fromEntries(result.results),\n errors: Object.fromEntries(result.errors),\n duration: result.duration,\n } as any,\n };\n } catch (error) {\n return {\n content: [{ type: \"text\", text: `Worker 执行失败: ${error}` }],\n details: { \n enabled: true, \n success: false,\n error: String(error),\n },\n isError: true,\n };\n }\n },\n \n renderCall(args, theme, context) {\n const text = (context.lastComponent as any) ?? { setText: () => {} };\n \n if (args.enable) {\n const taskCount = args.tasks?.length || 0;\n text.setText(`worker 启用 Worker 模式,${taskCount} 个任务`);\n } else {\n text.setText(\"worker 未启用\");\n }\n \n return text;\n },\n \n renderResult(result, options, theme, context) {\n const text = (context.lastComponent as any) ?? { setText: () => {} };\n \n const details = result.details as any;\n if (details?.enabled) {\n const success = details.success ? \"✓\" : \"✗\";\n const duration = details.duration;\n const taskCount = Object.keys(details.results || {}).length;\n \n text.setText(`${success} Worker 完成 (${taskCount} 个任务, ${duration}ms)`);\n } else {\n text.setText(\"Worker 模式未启用\");\n }\n \n return text;\n },\n };\n}\n\n/**\n * 格式化 Worker 结果\n */\nfunction formatWorkerResult(result: any): string {\n const lines: string[] = [];\n \n lines.push(`## Worker 执行结果`);\n lines.push(\"\");\n lines.push(`- **状态**: ${result.success ? \"✓ 成功\" : \"✗ 失败\"}`);\n lines.push(`- **耗时**: ${formatDuration(result.duration)}`);\n lines.push(`- **任务数**: ${result.results.size}`);\n \n if (result.errors.size > 0) {\n lines.push(`- **失败数**: ${result.errors.size}`);\n }\n \n lines.push(\"\");\n \n // 任务结果\n if (result.results.size > 0) {\n lines.push(`### 任务结果`);\n for (const [workerId, workerResult] of result.results) {\n const resultText = typeof workerResult.result === \"string\" \n ? workerResult.result \n : JSON.stringify(workerResult.result, null, 2);\n \n // 截断过长的结果\n const truncated = resultText.length > 200 \n ? resultText.substring(0, 200) + \"...\" \n : resultText;\n \n lines.push(`- **${workerId}**: ${truncated}`);\n }\n lines.push(\"\");\n }\n \n // 错误信息\n if (result.errors.size > 0) {\n lines.push(`### 错误信息`);\n for (const [workerId, error] of result.errors) {\n lines.push(`- **${workerId}**: ${error}`);\n }\n lines.push(\"\");\n }\n \n return lines.join(\"\\n\");\n}\n\n/**\n * 格式化持续时间\n */\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${Math.floor(ms / 60000)}m ${Math.round((ms % 60000) / 1000)}s`;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-integration.d.ts","sourceRoot":"","sources":["../../src/core/worker-integration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,mBAAW;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,sBAAY;IACZ,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,aAAa,CAAM;IAE3B,YAAY,MAAM,EAAE,uBAAuB,EAE1C;IAED;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"worker-integration.d.ts","sourceRoot":"","sources":["../../src/core/worker-integration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,mBAAW;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,sBAAY;IACZ,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,aAAa,CAAM;IAE3B,YAAY,MAAM,EAAE,uBAAuB,EAE1C;IAED;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAOhC;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwD1B;;OAEG;IACH,eAAe,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAKrE;IAED;;OAEG;IACH,iBAAiB,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAK5E;IAED;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAIrC;IAED;;OAEG;IACH,iBAAiB,IAAI,OAAO,CAK3B;IAED;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;CACF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAE1F","sourcesContent":["/**\n * Worker 集成模块\n * \n * 负责将 Worker 模块集成到 Agent Session 中\n */\n\nimport type { AgentSession } from \"./agent-session.ts\";\nimport { createWorkerToolDefinition } from \"./tools/worker.ts\";\nimport type { ExtensionRunner } from \"./extensions/runner.ts\";\nimport type { Model } from \"@looze/leaf-ai\";\n\n/**\n * Worker 集成配置\n */\nexport interface WorkerIntegrationConfig {\n /** 工作目录 */\n cwd: string;\n /** Agent Session */\n agentSession: AgentSession;\n /** 扩展运行器 */\n extensionRunner: ExtensionRunner;\n /** API Key */\n apiKey?: string;\n}\n\n/**\n * Worker 集成类\n * \n * 负责:\n * 1. 注册 Worker Tool\n * 2. 管理 Worker 生命周期\n * 3. 提供 Worker 状态查询\n */\nexport class WorkerIntegration {\n private config: WorkerIntegrationConfig;\n private workerManager: any; // WorkerManager 实例\n \n constructor(config: WorkerIntegrationConfig) {\n this.config = config;\n }\n \n /**\n * 初始化 Worker 集成\n */\n async initialize(): Promise<void> {\n console.log(\"[WorkerIntegration] 初始化 Worker 集成\");\n \n // 注册 Worker Tool\n this.registerWorkerTool();\n \n console.log(\"[WorkerIntegration] Worker 集成初始化完成\");\n }\n \n /**\n * 注册 Worker Tool\n */\n private registerWorkerTool(): void {\n // 从 agentSession 获取当前模型和工具\n const model = this.config.agentSession.model;\n const agent = (this.config.agentSession as any).agent;\n const tools = (this.config.agentSession as any).agent?.state?.tools || [];\n \n // 创建 Worker Tool,传递 model、apiKey、tools 和 agent\n const workerTool = createWorkerToolDefinition(this.config.cwd, {\n model: model,\n apiKey: this.config.apiKey,\n tools: tools,\n agent: agent,\n });\n \n // 直接访问 extensionRunner 的 extensions 数组\n const extensionRunner = this.config.extensionRunner as any;\n \n // 如果 extensions 为空,创建一个内置扩展\n if (!extensionRunner.extensions || extensionRunner.extensions.length === 0) {\n extensionRunner.extensions = [{\n sourceInfo: {\n path: \"builtin:worker\",\n source: \"builtin\",\n scope: \"temporary\",\n origin: \"top-level\",\n },\n tools: new Map(),\n commands: new Map(),\n handlers: new Map(),\n flagValues: new Map(),\n shortcuts: [],\n }];\n }\n \n // 在第一个扩展中注册 Worker Tool\n const firstExtension = extensionRunner.extensions[0];\n if (firstExtension.tools) {\n firstExtension.tools.set(workerTool.name, {\n definition: workerTool,\n sourceInfo: {\n path: \"builtin:worker\",\n source: \"builtin\",\n scope: \"temporary\",\n origin: \"top-level\",\n },\n });\n \n console.log(\"[WorkerIntegration] Worker Tool 已注册到扩展:\", firstExtension.sourceInfo?.path);\n }\n \n // 刷新工具注册表\n if (extensionRunner.runtime?.refreshTools) {\n extensionRunner.runtime.refreshTools();\n }\n }\n \n /**\n * 获取 Worker 状态\n */\n getWorkerStatus(): Array<{ id: string; status: string; task: string }> {\n if (!this.workerManager) {\n return [];\n }\n return this.workerManager.getWorkerStatus();\n }\n \n /**\n * 获取 Worker 进度\n */\n getWorkerProgress(): { completed: number; total: number; percentage: number } {\n if (!this.workerManager) {\n return { completed: 0, total: 0, percentage: 0 };\n }\n return this.workerManager.getProgress();\n }\n \n /**\n * 中止所有 Worker\n */\n async abortAllWorkers(): Promise<void> {\n if (this.workerManager) {\n await this.workerManager.abortAll();\n }\n }\n \n /**\n * 检查是否有 Worker 正在运行\n */\n hasRunningWorkers(): boolean {\n if (!this.workerManager) {\n return false;\n }\n return !this.workerManager.isAllCompleted();\n }\n \n /**\n * 清理资源\n */\n async cleanup(): Promise<void> {\n if (this.workerManager) {\n await this.workerManager.abortAll();\n this.workerManager = null;\n }\n }\n}\n\n/**\n * 创建 Worker 集成\n */\nexport function createWorkerIntegration(config: WorkerIntegrationConfig): WorkerIntegration {\n return new WorkerIntegration(config);\n}\n"]}
|
|
@@ -25,40 +25,59 @@ export class WorkerIntegration {
|
|
|
25
25
|
console.log("[WorkerIntegration] 初始化 Worker 集成");
|
|
26
26
|
// 注册 Worker Tool
|
|
27
27
|
this.registerWorkerTool();
|
|
28
|
-
// 注册扩展命令
|
|
29
|
-
this.registerCommands();
|
|
30
28
|
console.log("[WorkerIntegration] Worker 集成初始化完成");
|
|
31
29
|
}
|
|
32
30
|
/**
|
|
33
31
|
* 注册 Worker Tool
|
|
34
32
|
*/
|
|
35
33
|
registerWorkerTool() {
|
|
36
|
-
// 从 agentSession
|
|
34
|
+
// 从 agentSession 获取当前模型和工具
|
|
37
35
|
const model = this.config.agentSession.model;
|
|
38
|
-
|
|
36
|
+
const agent = this.config.agentSession.agent;
|
|
37
|
+
const tools = this.config.agentSession.agent?.state?.tools || [];
|
|
38
|
+
// 创建 Worker Tool,传递 model、apiKey、tools 和 agent
|
|
39
39
|
const workerTool = createWorkerToolDefinition(this.config.cwd, {
|
|
40
40
|
model: model,
|
|
41
41
|
apiKey: this.config.apiKey,
|
|
42
|
+
tools: tools,
|
|
43
|
+
agent: agent,
|
|
42
44
|
});
|
|
43
|
-
//
|
|
44
|
-
this.config.extensionRunner
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
45
|
+
// 直接访问 extensionRunner 的 extensions 数组
|
|
46
|
+
const extensionRunner = this.config.extensionRunner;
|
|
47
|
+
// 如果 extensions 为空,创建一个内置扩展
|
|
48
|
+
if (!extensionRunner.extensions || extensionRunner.extensions.length === 0) {
|
|
49
|
+
extensionRunner.extensions = [{
|
|
50
|
+
sourceInfo: {
|
|
51
|
+
path: "builtin:worker",
|
|
52
|
+
source: "builtin",
|
|
53
|
+
scope: "temporary",
|
|
54
|
+
origin: "top-level",
|
|
55
|
+
},
|
|
56
|
+
tools: new Map(),
|
|
57
|
+
commands: new Map(),
|
|
58
|
+
handlers: new Map(),
|
|
59
|
+
flagValues: new Map(),
|
|
60
|
+
shortcuts: [],
|
|
61
|
+
}];
|
|
62
|
+
}
|
|
63
|
+
// 在第一个扩展中注册 Worker Tool
|
|
64
|
+
const firstExtension = extensionRunner.extensions[0];
|
|
65
|
+
if (firstExtension.tools) {
|
|
66
|
+
firstExtension.tools.set(workerTool.name, {
|
|
67
|
+
definition: workerTool,
|
|
68
|
+
sourceInfo: {
|
|
69
|
+
path: "builtin:worker",
|
|
70
|
+
source: "builtin",
|
|
71
|
+
scope: "temporary",
|
|
72
|
+
origin: "top-level",
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
console.log("[WorkerIntegration] Worker Tool 已注册到扩展:", firstExtension.sourceInfo?.path);
|
|
76
|
+
}
|
|
77
|
+
// 刷新工具注册表
|
|
78
|
+
if (extensionRunner.runtime?.refreshTools) {
|
|
79
|
+
extensionRunner.runtime.refreshTools();
|
|
80
|
+
}
|
|
62
81
|
}
|
|
63
82
|
/**
|
|
64
83
|
* 获取 Worker 状态
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-integration.js","sourceRoot":"","sources":["../../src/core/worker-integration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAkB/D;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAA0B;IAChC,aAAa,CAAM,CAAC,uBAAmB;IAE/C,YAAY,MAA+B,EAAE;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAAA,CACtB;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,GAAkB;QAChC,OAAO,CAAC,GAAG,CAAC,6CAAmC,CAAC,CAAC;QAEjD,qBAAiB;QACjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,
|
|
1
|
+
{"version":3,"file":"worker-integration.js","sourceRoot":"","sources":["../../src/core/worker-integration.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Worker 集成模块\n * \n * 负责将 Worker 模块集成到 Agent Session 中\n */\n\nimport type { AgentSession } from \"./agent-session.ts\";\nimport { createWorkerToolDefinition } from \"./tools/worker.ts\";\nimport type { ExtensionRunner } from \"./extensions/runner.ts\";\nimport type { Model } from \"@looze/leaf-ai\";\n\n/**\n * Worker 集成配置\n */\nexport interface WorkerIntegrationConfig {\n /** 工作目录 */\n cwd: string;\n /** Agent Session */\n agentSession: AgentSession;\n /** 扩展运行器 */\n extensionRunner: ExtensionRunner;\n /** API Key */\n apiKey?: string;\n}\n\n/**\n * Worker 集成类\n * \n * 负责:\n * 1. 注册 Worker Tool\n * 2. 管理 Worker 生命周期\n * 3. 提供 Worker 状态查询\n */\nexport class WorkerIntegration {\n private config: WorkerIntegrationConfig;\n private workerManager: any; // WorkerManager 实例\n \n constructor(config: WorkerIntegrationConfig) {\n this.config = config;\n }\n \n /**\n * 初始化 Worker 集成\n */\n async initialize(): Promise<void> {\n console.log(\"[WorkerIntegration] 初始化 Worker 集成\");\n \n // 注册 Worker Tool\n this.registerWorkerTool();\n \n console.log(\"[WorkerIntegration] Worker 集成初始化完成\");\n }\n \n /**\n * 注册 Worker Tool\n */\n private registerWorkerTool(): void {\n // 从 agentSession 获取当前模型和工具\n const model = this.config.agentSession.model;\n const agent = (this.config.agentSession as any).agent;\n const tools = (this.config.agentSession as any).agent?.state?.tools || [];\n \n // 创建 Worker Tool,传递 model、apiKey、tools 和 agent\n const workerTool = createWorkerToolDefinition(this.config.cwd, {\n model: model,\n apiKey: this.config.apiKey,\n tools: tools,\n agent: agent,\n });\n \n // 直接访问 extensionRunner 的 extensions 数组\n const extensionRunner = this.config.extensionRunner as any;\n \n // 如果 extensions 为空,创建一个内置扩展\n if (!extensionRunner.extensions || extensionRunner.extensions.length === 0) {\n extensionRunner.extensions = [{\n sourceInfo: {\n path: \"builtin:worker\",\n source: \"builtin\",\n scope: \"temporary\",\n origin: \"top-level\",\n },\n tools: new Map(),\n commands: new Map(),\n handlers: new Map(),\n flagValues: new Map(),\n shortcuts: [],\n }];\n }\n \n // 在第一个扩展中注册 Worker Tool\n const firstExtension = extensionRunner.extensions[0];\n if (firstExtension.tools) {\n firstExtension.tools.set(workerTool.name, {\n definition: workerTool,\n sourceInfo: {\n path: \"builtin:worker\",\n source: \"builtin\",\n scope: \"temporary\",\n origin: \"top-level\",\n },\n });\n \n console.log(\"[WorkerIntegration] Worker Tool 已注册到扩展:\", firstExtension.sourceInfo?.path);\n }\n \n // 刷新工具注册表\n if (extensionRunner.runtime?.refreshTools) {\n extensionRunner.runtime.refreshTools();\n }\n }\n \n /**\n * 获取 Worker 状态\n */\n getWorkerStatus(): Array<{ id: string; status: string; task: string }> {\n if (!this.workerManager) {\n return [];\n }\n return this.workerManager.getWorkerStatus();\n }\n \n /**\n * 获取 Worker 进度\n */\n getWorkerProgress(): { completed: number; total: number; percentage: number } {\n if (!this.workerManager) {\n return { completed: 0, total: 0, percentage: 0 };\n }\n return this.workerManager.getProgress();\n }\n \n /**\n * 中止所有 Worker\n */\n async abortAllWorkers(): Promise<void> {\n if (this.workerManager) {\n await this.workerManager.abortAll();\n }\n }\n \n /**\n * 检查是否有 Worker 正在运行\n */\n hasRunningWorkers(): boolean {\n if (!this.workerManager) {\n return false;\n }\n return !this.workerManager.isAllCompleted();\n }\n \n /**\n * 清理资源\n */\n async cleanup(): Promise<void> {\n if (this.workerManager) {\n await this.workerManager.abortAll();\n this.workerManager = null;\n }\n }\n}\n\n/**\n * 创建 Worker 集成\n */\nexport function createWorkerIntegration(config: WorkerIntegrationConfig): WorkerIntegration {\n return new WorkerIntegration(config);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-selector.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/worker-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,SAAS,EAET,YAAY,EAGZ,MAAM,iBAAiB,CAAC;AAIzB,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;CACnD;AAED,MAAM,WAAW,uBAAuB;IACvC,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,yBAAyB,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,KAAK,IAAI,CAAC;IAC3E,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,qBAAa,uBAAwB,SAAQ,SAAS;IACrD,OAAO,CAAC,YAAY,CAAe;IAEnC,YACC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"worker-selector.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/worker-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,SAAS,EAET,YAAY,EAGZ,MAAM,iBAAiB,CAAC;AAIzB,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;CACnD;AAED,MAAM,WAAW,uBAAuB;IACvC,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,yBAAyB,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,KAAK,IAAI,CAAC;IAC3E,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,qBAAa,uBAAwB,SAAQ,SAAS;IACrD,OAAO,CAAC,YAAY,CAAe;IAEnC,YACC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,uBAAuB,EAkElC;IAED,eAAe,IAAI,YAAY,CAE9B;CACD","sourcesContent":["import {\n\tContainer,\n\ttype SettingItem,\n\tSettingsList,\n\tSpacer,\n\tText,\n} from \"@looze/leaf-tui\";\nimport { getSettingsListTheme, theme } from \"../theme/theme.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\n\nexport interface WorkerConfig {\n\tenabled: boolean;\n\tmaxWorkers: number;\n\tcommunicationMode: \"socket\" | \"message\" | \"shared\";\n}\n\nexport interface WorkerSelectorCallbacks {\n\tonEnabledChange: (enabled: boolean) => void;\n\tonMaxWorkersChange: (maxWorkers: number) => void;\n\tonCommunicationModeChange: (mode: \"socket\" | \"message\" | \"shared\") => void;\n\tonAbortAll: () => void;\n\tonCancel: () => void;\n}\n\nexport class WorkerSelectorComponent extends Container {\n\tprivate settingsList: SettingsList;\n\n\tconstructor(\n\t\tconfig: WorkerConfig,\n\t\tcallbacks: WorkerSelectorCallbacks,\n\t) {\n\t\tsuper();\n\n\t\tconst items: SettingItem[] = [\n\t\t\t{\n\t\t\t\tid: \"worker-enabled\",\n\t\t\t\tlabel: \"Worker Mode\",\n\t\t\t\tdescription: \"Enable or disable Worker parallel execution mode\",\n\t\t\t\tcurrentValue: config.enabled ? \"ON\" : \"OFF\",\n\t\t\t\tvalues: [\"ON\", \"OFF\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"max-workers\",\n\t\t\t\tlabel: \"Max Workers\",\n\t\t\t\tdescription: \"Maximum number of concurrent Workers\",\n\t\t\t\tcurrentValue: String(config.maxWorkers),\n\t\t\t\tvalues: [\"1\", \"2\", \"4\", \"8\", \"16\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"communication-mode\",\n\t\t\t\tlabel: \"Communication\",\n\t\t\t\tdescription: \"Communication method between Workers\",\n\t\t\t\tcurrentValue: config.communicationMode,\n\t\t\t\tvalues: [\"message\", \"socket\", \"shared\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"abort-all\",\n\t\t\t\tlabel: \"Abort All\",\n\t\t\t\tdescription: \"Stop all running Workers immediately\",\n\t\t\t\tcurrentValue: \"Execute\",\n\t\t\t\tvalues: [\"Execute\"],\n\t\t\t},\n\t\t];\n\n\t\t// 上边框\n\t\tthis.addChild(new DynamicBorder());\n\n\t\tthis.settingsList = new SettingsList(\n\t\t\titems,\n\t\t\t10,\n\t\t\tgetSettingsListTheme(),\n\t\t\t(id, newValue) => {\n\t\t\t\tswitch (id) {\n\t\t\t\t\tcase \"worker-enabled\":\n\t\t\t\t\t\tcallbacks.onEnabledChange(newValue === \"ON\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"max-workers\":\n\t\t\t\t\t\tcallbacks.onMaxWorkersChange(parseInt(newValue, 10));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"communication-mode\":\n\t\t\t\t\t\tcallbacks.onCommunicationModeChange(newValue as \"socket\" | \"message\" | \"shared\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"abort-all\":\n\t\t\t\t\t\tcallbacks.onAbortAll();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallbacks.onCancel,\n\t\t\t{ enableSearch: true },\n\t\t);\n\n\t\tthis.addChild(this.settingsList);\n\t\t\n\t\t// 下边框\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tgetSettingsList(): SettingsList {\n\t\treturn this.settingsList;\n\t}\n}\n"]}
|
|
@@ -1,52 +1,46 @@
|
|
|
1
|
-
import { Container, SettingsList,
|
|
2
|
-
import { getSettingsListTheme
|
|
1
|
+
import { Container, SettingsList, } from "@looze/leaf-tui";
|
|
2
|
+
import { getSettingsListTheme } from "../theme/theme.js";
|
|
3
3
|
import { DynamicBorder } from "./dynamic-border.js";
|
|
4
4
|
export class WorkerSelectorComponent extends Container {
|
|
5
5
|
settingsList;
|
|
6
6
|
constructor(config, callbacks) {
|
|
7
7
|
super();
|
|
8
|
-
// 标题
|
|
9
|
-
this.addChild(new Spacer(1));
|
|
10
|
-
this.addChild(new Text(theme.bold(theme.fg("accent", "Worker 设置")), 1, 0));
|
|
11
|
-
this.addChild(new Spacer(1));
|
|
12
|
-
// 添加边框
|
|
13
|
-
this.addChild(new DynamicBorder());
|
|
14
8
|
const items = [
|
|
15
9
|
{
|
|
16
10
|
id: "worker-enabled",
|
|
17
|
-
label: "Worker
|
|
18
|
-
description: "
|
|
19
|
-
currentValue: config.enabled ? "
|
|
20
|
-
values: ["
|
|
11
|
+
label: "Worker Mode",
|
|
12
|
+
description: "Enable or disable Worker parallel execution mode",
|
|
13
|
+
currentValue: config.enabled ? "ON" : "OFF",
|
|
14
|
+
values: ["ON", "OFF"],
|
|
21
15
|
},
|
|
22
16
|
{
|
|
23
17
|
id: "max-workers",
|
|
24
|
-
label: "
|
|
25
|
-
description: "
|
|
18
|
+
label: "Max Workers",
|
|
19
|
+
description: "Maximum number of concurrent Workers",
|
|
26
20
|
currentValue: String(config.maxWorkers),
|
|
27
21
|
values: ["1", "2", "4", "8", "16"],
|
|
28
22
|
},
|
|
29
23
|
{
|
|
30
24
|
id: "communication-mode",
|
|
31
|
-
label: "
|
|
32
|
-
description: "
|
|
25
|
+
label: "Communication",
|
|
26
|
+
description: "Communication method between Workers",
|
|
33
27
|
currentValue: config.communicationMode,
|
|
34
28
|
values: ["message", "socket", "shared"],
|
|
35
29
|
},
|
|
36
30
|
{
|
|
37
31
|
id: "abort-all",
|
|
38
|
-
label: "
|
|
39
|
-
description: "
|
|
40
|
-
currentValue: "
|
|
41
|
-
values: ["
|
|
32
|
+
label: "Abort All",
|
|
33
|
+
description: "Stop all running Workers immediately",
|
|
34
|
+
currentValue: "Execute",
|
|
35
|
+
values: ["Execute"],
|
|
42
36
|
},
|
|
43
37
|
];
|
|
44
|
-
//
|
|
38
|
+
// 上边框
|
|
45
39
|
this.addChild(new DynamicBorder());
|
|
46
40
|
this.settingsList = new SettingsList(items, 10, getSettingsListTheme(), (id, newValue) => {
|
|
47
41
|
switch (id) {
|
|
48
42
|
case "worker-enabled":
|
|
49
|
-
callbacks.onEnabledChange(newValue === "
|
|
43
|
+
callbacks.onEnabledChange(newValue === "ON");
|
|
50
44
|
break;
|
|
51
45
|
case "max-workers":
|
|
52
46
|
callbacks.onMaxWorkersChange(parseInt(newValue, 10));
|
|
@@ -58,8 +52,9 @@ export class WorkerSelectorComponent extends Container {
|
|
|
58
52
|
callbacks.onAbortAll();
|
|
59
53
|
break;
|
|
60
54
|
}
|
|
61
|
-
}, callbacks.onCancel, { enableSearch:
|
|
55
|
+
}, callbacks.onCancel, { enableSearch: true });
|
|
62
56
|
this.addChild(this.settingsList);
|
|
57
|
+
// 下边框
|
|
63
58
|
this.addChild(new DynamicBorder());
|
|
64
59
|
}
|
|
65
60
|
getSettingsList() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/worker-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,SAAS,EAET,YAAY,
|
|
1
|
+
{"version":3,"file":"worker-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/worker-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,SAAS,EAET,YAAY,GAGZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAS,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgBpD,MAAM,OAAO,uBAAwB,SAAQ,SAAS;IAC7C,YAAY,CAAe;IAEnC,YACC,MAAoB,EACpB,SAAkC,EACjC;QACD,KAAK,EAAE,CAAC;QAER,MAAM,KAAK,GAAkB;YAC5B;gBACC,EAAE,EAAE,gBAAgB;gBACpB,KAAK,EAAE,aAAa;gBACpB,WAAW,EAAE,kDAAkD;gBAC/D,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;gBAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;aACrB;YACD;gBACC,EAAE,EAAE,aAAa;gBACjB,KAAK,EAAE,aAAa;gBACpB,WAAW,EAAE,sCAAsC;gBACnD,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;gBACvC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;aAClC;YACD;gBACC,EAAE,EAAE,oBAAoB;gBACxB,KAAK,EAAE,eAAe;gBACtB,WAAW,EAAE,sCAAsC;gBACnD,YAAY,EAAE,MAAM,CAAC,iBAAiB;gBACtC,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;aACvC;YACD;gBACC,EAAE,EAAE,WAAW;gBACf,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE,sCAAsC;gBACnD,YAAY,EAAE,SAAS;gBACvB,MAAM,EAAE,CAAC,SAAS,CAAC;aACnB;SACD,CAAC;QAEF,YAAM;QACN,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;QAEnC,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CACnC,KAAK,EACL,EAAE,EACF,oBAAoB,EAAE,EACtB,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC;YACjB,QAAQ,EAAE,EAAE,CAAC;gBACZ,KAAK,gBAAgB;oBACpB,SAAS,CAAC,eAAe,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;oBAC7C,MAAM;gBACP,KAAK,aAAa;oBACjB,SAAS,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;oBACrD,MAAM;gBACP,KAAK,oBAAoB;oBACxB,SAAS,CAAC,yBAAyB,CAAC,QAA2C,CAAC,CAAC;oBACjF,MAAM;gBACP,KAAK,WAAW;oBACf,SAAS,CAAC,UAAU,EAAE,CAAC;oBACvB,MAAM;YACR,CAAC;QAAA,CACD,EACD,SAAS,CAAC,QAAQ,EAClB,EAAE,YAAY,EAAE,IAAI,EAAE,CACtB,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEjC,YAAM;QACN,IAAI,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;IAAA,CACnC;IAED,eAAe,GAAiB;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC;IAAA,CACzB;CACD","sourcesContent":["import {\n\tContainer,\n\ttype SettingItem,\n\tSettingsList,\n\tSpacer,\n\tText,\n} from \"@looze/leaf-tui\";\nimport { getSettingsListTheme, theme } from \"../theme/theme.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\n\nexport interface WorkerConfig {\n\tenabled: boolean;\n\tmaxWorkers: number;\n\tcommunicationMode: \"socket\" | \"message\" | \"shared\";\n}\n\nexport interface WorkerSelectorCallbacks {\n\tonEnabledChange: (enabled: boolean) => void;\n\tonMaxWorkersChange: (maxWorkers: number) => void;\n\tonCommunicationModeChange: (mode: \"socket\" | \"message\" | \"shared\") => void;\n\tonAbortAll: () => void;\n\tonCancel: () => void;\n}\n\nexport class WorkerSelectorComponent extends Container {\n\tprivate settingsList: SettingsList;\n\n\tconstructor(\n\t\tconfig: WorkerConfig,\n\t\tcallbacks: WorkerSelectorCallbacks,\n\t) {\n\t\tsuper();\n\n\t\tconst items: SettingItem[] = [\n\t\t\t{\n\t\t\t\tid: \"worker-enabled\",\n\t\t\t\tlabel: \"Worker Mode\",\n\t\t\t\tdescription: \"Enable or disable Worker parallel execution mode\",\n\t\t\t\tcurrentValue: config.enabled ? \"ON\" : \"OFF\",\n\t\t\t\tvalues: [\"ON\", \"OFF\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"max-workers\",\n\t\t\t\tlabel: \"Max Workers\",\n\t\t\t\tdescription: \"Maximum number of concurrent Workers\",\n\t\t\t\tcurrentValue: String(config.maxWorkers),\n\t\t\t\tvalues: [\"1\", \"2\", \"4\", \"8\", \"16\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"communication-mode\",\n\t\t\t\tlabel: \"Communication\",\n\t\t\t\tdescription: \"Communication method between Workers\",\n\t\t\t\tcurrentValue: config.communicationMode,\n\t\t\t\tvalues: [\"message\", \"socket\", \"shared\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"abort-all\",\n\t\t\t\tlabel: \"Abort All\",\n\t\t\t\tdescription: \"Stop all running Workers immediately\",\n\t\t\t\tcurrentValue: \"Execute\",\n\t\t\t\tvalues: [\"Execute\"],\n\t\t\t},\n\t\t];\n\n\t\t// 上边框\n\t\tthis.addChild(new DynamicBorder());\n\n\t\tthis.settingsList = new SettingsList(\n\t\t\titems,\n\t\t\t10,\n\t\t\tgetSettingsListTheme(),\n\t\t\t(id, newValue) => {\n\t\t\t\tswitch (id) {\n\t\t\t\t\tcase \"worker-enabled\":\n\t\t\t\t\t\tcallbacks.onEnabledChange(newValue === \"ON\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"max-workers\":\n\t\t\t\t\t\tcallbacks.onMaxWorkersChange(parseInt(newValue, 10));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"communication-mode\":\n\t\t\t\t\t\tcallbacks.onCommunicationModeChange(newValue as \"socket\" | \"message\" | \"shared\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"abort-all\":\n\t\t\t\t\t\tcallbacks.onAbortAll();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallbacks.onCancel,\n\t\t\t{ enableSearch: true },\n\t\t);\n\n\t\tthis.addChild(this.settingsList);\n\t\t\n\t\t// 下边框\n\t\tthis.addChild(new DynamicBorder());\n\t}\n\n\tgetSettingsList(): SettingsList {\n\t\treturn this.settingsList;\n\t}\n}\n"]}
|