@nahisaho/katashiro-orchestrator 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,409 @@
1
+ "use strict";
2
+ /**
3
+ * MultiAgentOrchestrator - マルチエージェント並列実行オーケストレーター
4
+ *
5
+ * @requirement REQ-006
6
+ * @design REQ-006-01 複雑タスクを独立サブタスクに分解
7
+ * @design REQ-006-02 1秒以内にサブエージェント生成
8
+ * @design REQ-006-03 1-100の並列実行管理
9
+ * @design REQ-006-04 コンテキスト汚染防止
10
+ * @design REQ-006-05 結果集約・重複除去
11
+ * @design REQ-006-06 部分失敗でも継続
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.MultiAgentOrchestrator = void 0;
15
+ const katashiro_core_1 = require("@nahisaho/katashiro-core");
16
+ const task_decomposer_1 = require("./task-decomposer");
17
+ const types_1 = require("./types");
18
+ /**
19
+ * デフォルト結果集約設定
20
+ */
21
+ const DEFAULT_AGGREGATOR_CONFIG = {
22
+ deduplication: true,
23
+ similarityThreshold: 0.9,
24
+ sortBy: 'priority',
25
+ };
26
+ /**
27
+ * マルチエージェントオーケストレーター
28
+ */
29
+ class MultiAgentOrchestrator {
30
+ config;
31
+ taskDecomposer;
32
+ aggregatorConfig;
33
+ taskExecutor;
34
+ agents = new Map();
35
+ listeners = new Map();
36
+ runningAgents = 0;
37
+ constructor(options = {}) {
38
+ this.config = {
39
+ ...types_1.DEFAULT_ORCHESTRATION_CONFIG,
40
+ ...options.config,
41
+ };
42
+ this.taskDecomposer = options.taskDecomposer ?? new task_decomposer_1.TaskDecomposer();
43
+ this.aggregatorConfig = {
44
+ ...DEFAULT_AGGREGATOR_CONFIG,
45
+ ...options.aggregatorConfig,
46
+ };
47
+ // デフォルトのタスク実行関数(モック)
48
+ this.taskExecutor = options.taskExecutor ?? this.defaultTaskExecutor.bind(this);
49
+ }
50
+ /**
51
+ * タスクを実行(REQ-006-01)
52
+ */
53
+ async execute(taskDescription) {
54
+ const startTime = Date.now();
55
+ // 1. タスク分解
56
+ const planResult = await this.taskDecomposer.decompose(taskDescription);
57
+ if ((0, katashiro_core_1.isErr)(planResult)) {
58
+ return {
59
+ success: false,
60
+ output: null,
61
+ originalCount: 0,
62
+ dedupedCount: 0,
63
+ failures: [{
64
+ taskId: 'decomposition',
65
+ error: {
66
+ code: planResult.error.code,
67
+ message: planResult.error.message,
68
+ retryable: false,
69
+ },
70
+ }],
71
+ metadata: {
72
+ totalDuration: Date.now() - startTime,
73
+ agentsUsed: 0,
74
+ deduplicationApplied: false,
75
+ },
76
+ };
77
+ }
78
+ const plan = planResult.value;
79
+ this.emit('plan:created', { plan });
80
+ // 2. サブエージェント生成(REQ-006-02: 1秒以内)
81
+ const spawnStart = Date.now();
82
+ const subAgents = await this.spawnSubAgents(plan.tasks);
83
+ const spawnDuration = Date.now() - spawnStart;
84
+ if (spawnDuration > 1000) {
85
+ console.warn(`[MultiAgentOrchestrator] Agent spawn took ${spawnDuration}ms (exceeds 1s target)`);
86
+ }
87
+ // 3. 並列実行(REQ-006-03)
88
+ const results = await this.executeParallel(plan.tasks, subAgents);
89
+ // 4. 結果集約(REQ-006-05)
90
+ const aggregated = await this.aggregate(results);
91
+ // 5. クリーンアップ
92
+ await this.terminateAllAgents();
93
+ const totalDuration = Date.now() - startTime;
94
+ return {
95
+ ...aggregated,
96
+ metadata: {
97
+ totalDuration,
98
+ agentsUsed: subAgents.length,
99
+ deduplicationApplied: this.aggregatorConfig.deduplication,
100
+ },
101
+ };
102
+ }
103
+ /**
104
+ * サブエージェントを生成(REQ-006-02)
105
+ */
106
+ async spawnSubAgents(tasks) {
107
+ const agents = [];
108
+ for (const task of tasks) {
109
+ const agent = this.createAgent(task);
110
+ this.agents.set(agent.id, agent);
111
+ agents.push(agent);
112
+ this.emit('agent:spawned', { agent, taskId: task.id });
113
+ }
114
+ return agents;
115
+ }
116
+ /**
117
+ * タスクを並列実行(REQ-006-03, REQ-006-04, REQ-006-06)
118
+ */
119
+ async executeParallel(tasks, agents) {
120
+ const results = new Map();
121
+ const taskAgentMap = new Map();
122
+ // タスクとエージェントのマッピング
123
+ tasks.forEach((task, index) => {
124
+ const agent = agents[index];
125
+ if (agent) {
126
+ taskAgentMap.set(task.id, agent);
127
+ }
128
+ });
129
+ // 並列実行(同時実行数制限あり)
130
+ const taskQueue = [...tasks];
131
+ const runningTasks = [];
132
+ while (taskQueue.length > 0 || runningTasks.length > 0) {
133
+ // 同時実行数を超えない範囲でタスクを開始
134
+ while (taskQueue.length > 0 &&
135
+ this.runningAgents < this.config.maxConcurrentAgents) {
136
+ const task = taskQueue.shift();
137
+ const agent = taskAgentMap.get(task.id);
138
+ const taskPromise = this.executeTask(task, agent)
139
+ .then((result) => {
140
+ results.set(task.id, result);
141
+ })
142
+ .catch((error) => {
143
+ // REQ-006-06: 失敗しても継続
144
+ const errorResult = {
145
+ success: false,
146
+ error: {
147
+ code: 'EXECUTION_ERROR',
148
+ message: error.message,
149
+ retryable: false,
150
+ },
151
+ duration: 0,
152
+ completedAt: new Date().toISOString(),
153
+ };
154
+ results.set(task.id, errorResult);
155
+ this.emit('task:failed', { taskId: task.id, error });
156
+ });
157
+ runningTasks.push(taskPromise);
158
+ }
159
+ // 1つでも完了するまで待機
160
+ if (runningTasks.length > 0) {
161
+ await Promise.race(runningTasks);
162
+ // 完了したPromiseを除去(簡易実装)
163
+ await new Promise(resolve => setTimeout(resolve, 10));
164
+ runningTasks.length = 0;
165
+ }
166
+ }
167
+ // 全タスク完了を待機
168
+ await Promise.all(runningTasks);
169
+ return results;
170
+ }
171
+ /**
172
+ * 単一タスクを実行
173
+ */
174
+ async executeTask(task, agent) {
175
+ this.runningAgents++;
176
+ agent.state = 'working';
177
+ this.emit('task:started', { taskId: task.id, agentId: agent.id });
178
+ try {
179
+ const result = await this.withTimeout(this.taskExecutor(task, agent), this.config.agentTimeout * 1000);
180
+ task.status = result.success ? 'completed' : 'failed';
181
+ task.result = result;
182
+ agent.state = 'idle';
183
+ this.emit('task:completed', { taskId: task.id, result });
184
+ return result;
185
+ }
186
+ catch (error) {
187
+ task.status = 'failed';
188
+ agent.state = 'error';
189
+ const taskError = {
190
+ code: 'TASK_EXECUTION_FAILED',
191
+ message: error instanceof Error ? error.message : String(error),
192
+ retryable: false,
193
+ };
194
+ const result = {
195
+ success: false,
196
+ error: taskError,
197
+ duration: 0,
198
+ completedAt: new Date().toISOString(),
199
+ };
200
+ task.result = result;
201
+ this.emit('task:failed', { taskId: task.id, error: taskError });
202
+ return result;
203
+ }
204
+ finally {
205
+ this.runningAgents--;
206
+ }
207
+ }
208
+ /**
209
+ * 結果を集約(REQ-006-05)
210
+ */
211
+ async aggregate(results) {
212
+ const outputs = [];
213
+ const failures = [];
214
+ for (const [taskId, result] of results) {
215
+ if (result.success && result.output !== undefined) {
216
+ outputs.push(result.output);
217
+ }
218
+ else if (!result.success && result.error) {
219
+ failures.push({ taskId, error: result.error });
220
+ }
221
+ }
222
+ // 重複除去
223
+ const dedupedOutputs = this.aggregatorConfig.deduplication
224
+ ? this.deduplicateResults(outputs)
225
+ : outputs;
226
+ // ソート
227
+ const sortedOutputs = this.sortResults(dedupedOutputs);
228
+ return {
229
+ success: failures.length === 0,
230
+ output: sortedOutputs,
231
+ originalCount: outputs.length,
232
+ dedupedCount: dedupedOutputs.length,
233
+ failures,
234
+ };
235
+ }
236
+ /**
237
+ * 結果の重複を除去
238
+ */
239
+ deduplicateResults(results) {
240
+ if (results.length <= 1)
241
+ return results;
242
+ const unique = [];
243
+ const seenHashes = new Set();
244
+ for (const result of results) {
245
+ const hash = this.hashResult(result);
246
+ if (!seenHashes.has(hash)) {
247
+ seenHashes.add(hash);
248
+ unique.push(result);
249
+ }
250
+ }
251
+ return unique;
252
+ }
253
+ /**
254
+ * 結果をソート
255
+ */
256
+ sortResults(results) {
257
+ // デフォルトは順序を維持
258
+ return results;
259
+ }
260
+ /**
261
+ * 結果のハッシュを生成
262
+ */
263
+ hashResult(result) {
264
+ return JSON.stringify(result);
265
+ }
266
+ /**
267
+ * エージェントを作成(REQ-006-04: 独立コンテキスト)
268
+ */
269
+ createAgent(task) {
270
+ const agentId = (0, katashiro_core_1.generateId)('agent');
271
+ const contextId = (0, katashiro_core_1.generateId)('ctx');
272
+ // 独立したコンテキストを作成(コンテキスト汚染防止)
273
+ const context = {
274
+ id: contextId,
275
+ taskInfo: {
276
+ taskId: task.id,
277
+ taskName: task.name,
278
+ input: task.input,
279
+ },
280
+ conversationHistory: [],
281
+ intermediateResults: [],
282
+ memoryUsage: 0,
283
+ maxMemory: this.config.maxAgentMemory,
284
+ };
285
+ const agent = {
286
+ id: agentId,
287
+ name: `Agent-${task.name}`,
288
+ role: this.determineAgentRole(task),
289
+ state: 'idle',
290
+ assignedTaskId: task.id,
291
+ context,
292
+ availableTools: [],
293
+ createdAt: new Date().toISOString(),
294
+ lastActivity: new Date().toISOString(),
295
+ };
296
+ return agent;
297
+ }
298
+ /**
299
+ * タスクからエージェントロールを決定
300
+ */
301
+ determineAgentRole(task) {
302
+ const name = task.name.toLowerCase();
303
+ if (name.includes('research') || name.includes('search'))
304
+ return 'researcher';
305
+ if (name.includes('analyze') || name.includes('analysis'))
306
+ return 'analyzer';
307
+ if (name.includes('generate') || name.includes('create'))
308
+ return 'generator';
309
+ if (name.includes('validate') || name.includes('verify'))
310
+ return 'validator';
311
+ if (name.includes('execute') || name.includes('run'))
312
+ return 'executor';
313
+ return 'custom';
314
+ }
315
+ /**
316
+ * デフォルトのタスク実行関数
317
+ */
318
+ async defaultTaskExecutor(task, agent) {
319
+ // モック実装: 実際のLLM呼び出しは外部から注入
320
+ await new Promise(resolve => setTimeout(resolve, 50));
321
+ return {
322
+ success: true,
323
+ output: {
324
+ taskId: task.id,
325
+ agentId: agent.id,
326
+ result: `Completed: ${task.name}`,
327
+ },
328
+ duration: 50,
329
+ completedAt: new Date().toISOString(),
330
+ };
331
+ }
332
+ /**
333
+ * タイムアウト付きPromise
334
+ */
335
+ async withTimeout(promise, timeoutMs) {
336
+ let timeoutId;
337
+ const timeoutPromise = new Promise((_, reject) => {
338
+ timeoutId = setTimeout(() => {
339
+ reject(new Error(`Operation timed out after ${timeoutMs}ms`));
340
+ }, timeoutMs);
341
+ });
342
+ try {
343
+ const result = await Promise.race([promise, timeoutPromise]);
344
+ clearTimeout(timeoutId);
345
+ return result;
346
+ }
347
+ catch (error) {
348
+ clearTimeout(timeoutId);
349
+ throw error;
350
+ }
351
+ }
352
+ /**
353
+ * 全エージェントを終了
354
+ */
355
+ async terminateAllAgents() {
356
+ for (const [id, agent] of this.agents) {
357
+ agent.state = 'terminated';
358
+ this.emit('agent:terminated', { agentId: id });
359
+ }
360
+ this.agents.clear();
361
+ }
362
+ /**
363
+ * イベントリスナーを登録
364
+ */
365
+ on(event, listener) {
366
+ const listeners = this.listeners.get(event) ?? [];
367
+ listeners.push(listener);
368
+ this.listeners.set(event, listeners);
369
+ }
370
+ /**
371
+ * イベントを発行
372
+ */
373
+ emit(type, data) {
374
+ const event = {
375
+ type,
376
+ data,
377
+ timestamp: new Date().toISOString(),
378
+ };
379
+ const listeners = this.listeners.get(type) ?? [];
380
+ for (const listener of listeners) {
381
+ try {
382
+ listener(event);
383
+ }
384
+ catch (error) {
385
+ console.error(`[MultiAgentOrchestrator] Event listener error:`, error);
386
+ }
387
+ }
388
+ }
389
+ /**
390
+ * 設定を取得
391
+ */
392
+ getConfig() {
393
+ return { ...this.config };
394
+ }
395
+ /**
396
+ * 現在のエージェント数を取得
397
+ */
398
+ getRunningAgentCount() {
399
+ return this.runningAgents;
400
+ }
401
+ /**
402
+ * 全エージェントを取得
403
+ */
404
+ getAgents() {
405
+ return Array.from(this.agents.values());
406
+ }
407
+ }
408
+ exports.MultiAgentOrchestrator = MultiAgentOrchestrator;
409
+ //# sourceMappingURL=multi-agent-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-agent-orchestrator.js","sourceRoot":"","sources":["../src/multi-agent-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Task Decomposer
3
+ *
4
+ * @fileoverview REQ-009: タスク分解・計画の実装
5
+ * @module @nahisaho/katashiro-orchestrator
6
+ * @since 0.4.0
7
+ */
8
+ import { type Result } from '@nahisaho/katashiro-core';
9
+ import type { ExecutionPlan, TaskInput, TaskPriority, DecompositionConfig } from './types';
10
+ /**
11
+ * タスク分解エラー
12
+ */
13
+ export declare class DecompositionError extends Error {
14
+ readonly code: string;
15
+ readonly details?: Record<string, unknown> | undefined;
16
+ constructor(message: string, code: string, details?: Record<string, unknown> | undefined);
17
+ }
18
+ /**
19
+ * タスク分解戦略
20
+ */
21
+ export interface DecompositionStrategy {
22
+ /** 戦略名 */
23
+ readonly name: string;
24
+ /** 適用可能か判定 */
25
+ canApply(task: string, context?: Record<string, unknown>): boolean;
26
+ /** タスクを分解 */
27
+ decompose(task: string, context?: Record<string, unknown>): Promise<DecomposedTask[]>;
28
+ }
29
+ /**
30
+ * 分解されたタスク(中間形式)
31
+ */
32
+ export interface DecomposedTask {
33
+ /** タスク名 */
34
+ name: string;
35
+ /** 説明 */
36
+ description: string;
37
+ /** 入力タイプ */
38
+ inputType: TaskInput['type'];
39
+ /** 優先度 */
40
+ priority: TaskPriority;
41
+ /** 依存タスク名(インデックス) */
42
+ dependsOn: string[];
43
+ /** 推定時間(秒) */
44
+ estimatedDuration?: number;
45
+ }
46
+ /**
47
+ * タスク分解器
48
+ *
49
+ * EARS Requirements:
50
+ * - Event-Driven: When a complex task is received, the system shall decompose it into subtasks
51
+ * - Ubiquitous: The system shall generate a DAG representing task dependencies
52
+ * - State-Driven: While decomposing, the system shall validate dependency constraints
53
+ */
54
+ export declare class TaskDecomposer {
55
+ private readonly config;
56
+ private readonly strategies;
57
+ constructor(config?: Partial<DecompositionConfig>);
58
+ /**
59
+ * デフォルト戦略を登録
60
+ */
61
+ private registerDefaultStrategies;
62
+ /**
63
+ * 戦略を登録
64
+ */
65
+ registerStrategy(strategy: DecompositionStrategy): void;
66
+ /**
67
+ * タスクを分解して実行計画を生成
68
+ */
69
+ decompose(task: string, context?: Record<string, unknown>): Promise<Result<ExecutionPlan, DecompositionError>>;
70
+ /**
71
+ * リサーチタスクの分解
72
+ */
73
+ private decomposeResearchTask;
74
+ /**
75
+ * 分析タスクの分解
76
+ */
77
+ private decomposeAnalysisTask;
78
+ /**
79
+ * レポート作成タスクの分解
80
+ */
81
+ private decomposeReportTask;
82
+ /**
83
+ * 汎用タスクの分解
84
+ */
85
+ private decomposeGenericTask;
86
+ /**
87
+ * キーワード抽出(簡易版)
88
+ */
89
+ private extractKeywords;
90
+ /**
91
+ * 依存関係の深さを検証
92
+ */
93
+ private validateDependencyDepth;
94
+ /**
95
+ * 循環依存を検出
96
+ */
97
+ private detectCycles;
98
+ /**
99
+ * トポロジカルソート
100
+ */
101
+ private topologicalSort;
102
+ /**
103
+ * 並列実行可能なグループを計算
104
+ *
105
+ * maxConcurrentTasks の制限を適用し、大きなグループを分割します。
106
+ */
107
+ private computeParallelGroups;
108
+ /**
109
+ * 総推定時間を計算(並列実行を考慮)
110
+ */
111
+ private estimateTotalDuration;
112
+ }
113
+ //# sourceMappingURL=task-decomposer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-decomposer.d.ts","sourceRoot":"","sources":["../src/task-decomposer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAW,KAAK,MAAM,EAAc,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAEV,aAAa,EACb,SAAS,EACT,YAAY,EACZ,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,IAAI,EAAE,MAAM;aACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjD,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKpD;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU;IACV,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,cAAc;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IACnE,aAAa;IACb,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY;IACZ,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7B,UAAU;IACV,QAAQ,EAAE,YAAY,CAAC;IACvB,qBAAqB;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;gBAE9C,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAKrD;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAoCjC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAUvD;;OAEG;IACG,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;IA4HrD;;OAEG;YACW,qBAAqB;IAgDnC;;OAEG;YACW,qBAAqB;IA6CnC;;OAEG;YACW,mBAAmB;IA6CjC;;OAEG;YACW,oBAAoB;IAqClC;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiC/B;;OAEG;IACH,OAAO,CAAC,YAAY;IA0CpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IA0C7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAqB9B"}