leaf-coding-agent 1.0.2 → 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.
Files changed (32) hide show
  1. package/dist/core/agent-session.d.ts +16 -2
  2. package/dist/core/agent-session.d.ts.map +1 -1
  3. package/dist/core/agent-session.js +51 -12
  4. package/dist/core/agent-session.js.map +1 -1
  5. package/dist/core/export-html/index.d.ts.map +1 -1
  6. package/dist/core/export-html/index.js +3 -1
  7. package/dist/core/export-html/index.js.map +1 -1
  8. package/dist/core/extensions/runner.d.ts +4 -1
  9. package/dist/core/extensions/runner.d.ts.map +1 -1
  10. package/dist/core/extensions/runner.js +4 -1
  11. package/dist/core/extensions/runner.js.map +1 -1
  12. package/dist/core/system-prompt.d.ts +14 -0
  13. package/dist/core/system-prompt.d.ts.map +1 -1
  14. package/dist/core/system-prompt.js +43 -23
  15. package/dist/core/system-prompt.js.map +1 -1
  16. package/dist/core/tools/worker.d.ts +1 -0
  17. package/dist/core/tools/worker.d.ts.map +1 -1
  18. package/dist/core/tools/worker.js +26 -6
  19. package/dist/core/tools/worker.js.map +1 -1
  20. package/dist/core/worker-integration.d.ts +0 -4
  21. package/dist/core/worker-integration.d.ts.map +1 -1
  22. package/dist/core/worker-integration.js +42 -23
  23. package/dist/core/worker-integration.js.map +1 -1
  24. package/dist/modes/interactive/components/worker-selector.d.ts +19 -0
  25. package/dist/modes/interactive/components/worker-selector.d.ts.map +1 -0
  26. package/dist/modes/interactive/components/worker-selector.js +64 -0
  27. package/dist/modes/interactive/components/worker-selector.js.map +1 -0
  28. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  29. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  30. package/dist/modes/interactive/interactive-mode.js +32 -21
  31. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  32. 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, // agent (Worker 内部会创建自己的 agent)
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(`- 状态: ${result.success ? "成功" : "失败"}`);
135
- lines.push(`- 耗时: ${result.duration}ms`);
136
- lines.push(`- 任务数: ${result.results.size}`);
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
- lines.push(`- **${workerId}**: ${JSON.stringify(workerResult.result)}`);
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"]}
@@ -38,10 +38,6 @@ export declare class WorkerIntegration {
38
38
  * 注册 Worker Tool
39
39
  */
40
40
  private registerWorkerTool;
41
- /**
42
- * 注册扩展命令
43
- */
44
- private registerCommands;
45
41
  /**
46
42
  * 获取 Worker 状态
47
43
  */
@@ -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,CAUhC;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;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 // 注册扩展命令\n this.registerCommands();\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 \n // 创建 Worker Tool,传递 model 和 apiKey\n const workerTool = createWorkerToolDefinition(this.config.cwd, {\n model: model,\n apiKey: this.config.apiKey,\n });\n \n // 注册到扩展运行器\n this.config.extensionRunner.getAllRegisteredTools().push({\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 已注册\");\n }\n \n /**\n * 注册扩展命令\n */\n private registerCommands(): void {\n // 注册 /worker 命令\n this.config.extensionRunner.getCommand(\"worker\");\n \n console.log(\"[WorkerIntegration] Worker 命令已注册\");\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
+ {"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、toolsagent\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
- // 创建 Worker Tool,传递 model 和 apiKey
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.getAllRegisteredTools().push({
45
- definition: workerTool,
46
- sourceInfo: {
47
- path: "builtin:worker",
48
- source: "builtin",
49
- scope: "temporary",
50
- origin: "top-level",
51
- },
52
- });
53
- console.log("[WorkerIntegration] Worker Tool 已注册");
54
- }
55
- /**
56
- * 注册扩展命令
57
- */
58
- registerCommands() {
59
- // 注册 /worker 命令
60
- this.config.extensionRunner.getCommand("worker");
61
- console.log("[WorkerIntegration] Worker 命令已注册");
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":"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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 // 注册扩展命令\n this.registerCommands();\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 \n // 创建 Worker Tool,传递 model 和 apiKey\n const workerTool = createWorkerToolDefinition(this.config.cwd, {\n model: model,\n apiKey: this.config.apiKey,\n });\n \n // 注册到扩展运行器\n this.config.extensionRunner.getAllRegisteredTools().push({\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 已注册\");\n }\n \n /**\n * 注册扩展命令\n */\n private registerCommands(): void {\n // 注册 /worker 命令\n this.config.extensionRunner.getCommand(\"worker\");\n \n console.log(\"[WorkerIntegration] Worker 命令已注册\");\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
+ {"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、toolsagent\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"]}
@@ -0,0 +1,19 @@
1
+ import { Container, SettingsList } from "@looze/leaf-tui";
2
+ export interface WorkerConfig {
3
+ enabled: boolean;
4
+ maxWorkers: number;
5
+ communicationMode: "socket" | "message" | "shared";
6
+ }
7
+ export interface WorkerSelectorCallbacks {
8
+ onEnabledChange: (enabled: boolean) => void;
9
+ onMaxWorkersChange: (maxWorkers: number) => void;
10
+ onCommunicationModeChange: (mode: "socket" | "message" | "shared") => void;
11
+ onAbortAll: () => void;
12
+ onCancel: () => void;
13
+ }
14
+ export declare class WorkerSelectorComponent extends Container {
15
+ private settingsList;
16
+ constructor(config: WorkerConfig, callbacks: WorkerSelectorCallbacks);
17
+ getSettingsList(): SettingsList;
18
+ }
19
+ //# sourceMappingURL=worker-selector.d.ts.map
@@ -0,0 +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,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"]}
@@ -0,0 +1,64 @@
1
+ import { Container, SettingsList, } from "@looze/leaf-tui";
2
+ import { getSettingsListTheme } from "../theme/theme.js";
3
+ import { DynamicBorder } from "./dynamic-border.js";
4
+ export class WorkerSelectorComponent extends Container {
5
+ settingsList;
6
+ constructor(config, callbacks) {
7
+ super();
8
+ const items = [
9
+ {
10
+ id: "worker-enabled",
11
+ label: "Worker Mode",
12
+ description: "Enable or disable Worker parallel execution mode",
13
+ currentValue: config.enabled ? "ON" : "OFF",
14
+ values: ["ON", "OFF"],
15
+ },
16
+ {
17
+ id: "max-workers",
18
+ label: "Max Workers",
19
+ description: "Maximum number of concurrent Workers",
20
+ currentValue: String(config.maxWorkers),
21
+ values: ["1", "2", "4", "8", "16"],
22
+ },
23
+ {
24
+ id: "communication-mode",
25
+ label: "Communication",
26
+ description: "Communication method between Workers",
27
+ currentValue: config.communicationMode,
28
+ values: ["message", "socket", "shared"],
29
+ },
30
+ {
31
+ id: "abort-all",
32
+ label: "Abort All",
33
+ description: "Stop all running Workers immediately",
34
+ currentValue: "Execute",
35
+ values: ["Execute"],
36
+ },
37
+ ];
38
+ // 上边框
39
+ this.addChild(new DynamicBorder());
40
+ this.settingsList = new SettingsList(items, 10, getSettingsListTheme(), (id, newValue) => {
41
+ switch (id) {
42
+ case "worker-enabled":
43
+ callbacks.onEnabledChange(newValue === "ON");
44
+ break;
45
+ case "max-workers":
46
+ callbacks.onMaxWorkersChange(parseInt(newValue, 10));
47
+ break;
48
+ case "communication-mode":
49
+ callbacks.onCommunicationModeChange(newValue);
50
+ break;
51
+ case "abort-all":
52
+ callbacks.onAbortAll();
53
+ break;
54
+ }
55
+ }, callbacks.onCancel, { enableSearch: true });
56
+ this.addChild(this.settingsList);
57
+ // 下边框
58
+ this.addChild(new DynamicBorder());
59
+ }
60
+ getSettingsList() {
61
+ return this.settingsList;
62
+ }
63
+ }
64
+ //# sourceMappingURL=worker-selector.js.map
@@ -0,0 +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,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"]}
@@ -348,6 +348,7 @@ export declare class InteractiveMode {
348
348
  private handleNameCommand;
349
349
  private handleSessionCommand;
350
350
  private handleWorkerCommand;
351
+ private showWorkerSelector;
351
352
  private handleChangelogCommand;
352
353
  /**
353
354
  * Get capitalized display string for an app keybinding action.