@jungjaehoon/mama-os 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +13 -16
  2. package/dist/gateways/discord.d.ts +4 -0
  3. package/dist/gateways/discord.d.ts.map +1 -1
  4. package/dist/gateways/discord.js +40 -2
  5. package/dist/gateways/discord.js.map +1 -1
  6. package/dist/gateways/image-analyzer.d.ts.map +1 -1
  7. package/dist/gateways/image-analyzer.js +10 -1
  8. package/dist/gateways/image-analyzer.js.map +1 -1
  9. package/dist/gateways/slack.d.ts.map +1 -1
  10. package/dist/gateways/slack.js +3 -0
  11. package/dist/gateways/slack.js.map +1 -1
  12. package/dist/multi-agent/agent-process-manager.d.ts +10 -0
  13. package/dist/multi-agent/agent-process-manager.d.ts.map +1 -1
  14. package/dist/multi-agent/agent-process-manager.js +36 -2
  15. package/dist/multi-agent/agent-process-manager.js.map +1 -1
  16. package/dist/multi-agent/multi-agent-base.d.ts +19 -0
  17. package/dist/multi-agent/multi-agent-base.d.ts.map +1 -1
  18. package/dist/multi-agent/multi-agent-base.js +96 -0
  19. package/dist/multi-agent/multi-agent-base.js.map +1 -1
  20. package/dist/multi-agent/multi-agent-discord.d.ts.map +1 -1
  21. package/dist/multi-agent/multi-agent-discord.js +36 -0
  22. package/dist/multi-agent/multi-agent-discord.js.map +1 -1
  23. package/dist/multi-agent/multi-agent-slack.d.ts.map +1 -1
  24. package/dist/multi-agent/multi-agent-slack.js +38 -2
  25. package/dist/multi-agent/multi-agent-slack.js.map +1 -1
  26. package/dist/multi-agent/types.d.ts +8 -2
  27. package/dist/multi-agent/types.d.ts.map +1 -1
  28. package/dist/multi-agent/types.js.map +1 -1
  29. package/dist/multi-agent/workflow-engine.d.ts +80 -0
  30. package/dist/multi-agent/workflow-engine.d.ts.map +1 -0
  31. package/dist/multi-agent/workflow-engine.js +395 -0
  32. package/dist/multi-agent/workflow-engine.js.map +1 -0
  33. package/dist/multi-agent/workflow-types.d.ts +111 -0
  34. package/dist/multi-agent/workflow-types.d.ts.map +1 -0
  35. package/dist/multi-agent/workflow-types.js +9 -0
  36. package/dist/multi-agent/workflow-types.js.map +1 -0
  37. package/package.json +1 -1
  38. package/public/viewer/js/modules/chat.js +34 -15
  39. package/public/viewer/js/modules/dashboard.js +41 -46
  40. package/public/viewer/js/utils/dom.js +15 -15
  41. package/public/viewer/src/modules/chat.ts +36 -15
  42. package/public/viewer/src/modules/dashboard.ts +43 -52
  43. package/public/viewer/src/utils/dom.ts +16 -16
  44. package/public/viewer/viewer.css +45 -2
  45. package/public/viewer/viewer.html +16 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-engine.d.ts","sourceRoot":"","sources":["../../src/multi-agent/workflow-engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EAEd,iBAAiB,EAEjB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAM7B,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;gBAEJ,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAOlF;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,KACd,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,gBAAgB,CAA6C;gBAEzD,MAAM,EAAE,cAAc;IAKlC;;;OAGG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IA8BxD;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI/C;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI;IAoC/C;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI;IA0C7D;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,EAAE;IA2B7D;;;;;;OAMG;IACG,OAAO,CACX,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,YAAY,GACxB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAwF5D;;OAEG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IASpC;;OAEG;IACH,SAAS,IAAI,OAAO;YAIN,WAAW;IAmFzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiCxB,OAAO,CAAC,YAAY;CAGrB"}
@@ -0,0 +1,395 @@
1
+ "use strict";
2
+ /**
3
+ * Workflow Engine
4
+ *
5
+ * Parses workflow plans from Conductor responses, validates DAGs,
6
+ * executes steps in topological order with parallel execution per level,
7
+ * and emits progress events for platform handlers.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.WorkflowEngine = exports.StepExecutionError = void 0;
11
+ const events_1 = require("events");
12
+ const crypto_1 = require("crypto");
13
+ const DEFAULT_STEP_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
14
+ const DEFAULT_MAX_EPHEMERAL = 5;
15
+ const DEFAULT_MAX_DURATION_MS = 10 * 60 * 1000; // 10 minutes
16
+ class StepExecutionError extends Error {
17
+ duration_ms;
18
+ stepId;
19
+ agentId;
20
+ constructor(message, stepId, agentId, duration_ms) {
21
+ super(message);
22
+ this.name = 'StepExecutionError';
23
+ this.stepId = stepId;
24
+ this.agentId = agentId;
25
+ this.duration_ms = duration_ms;
26
+ }
27
+ }
28
+ exports.StepExecutionError = StepExecutionError;
29
+ /**
30
+ * WorkflowEngine
31
+ *
32
+ * Events:
33
+ * - 'progress': WorkflowProgressEvent
34
+ */
35
+ class WorkflowEngine extends events_1.EventEmitter {
36
+ config;
37
+ activeExecutions = new Map();
38
+ constructor(config) {
39
+ super();
40
+ this.config = config;
41
+ }
42
+ /**
43
+ * Parse a workflow_plan JSON block from Conductor's response.
44
+ * Returns null if no valid plan is found.
45
+ */
46
+ parseWorkflowPlan(response) {
47
+ const match = response.match(/```workflow_plan\s*\n([\s\S]*?)\n```/);
48
+ if (!match)
49
+ return null;
50
+ try {
51
+ const plan = JSON.parse(match[1].trim());
52
+ if (!plan.name || !Array.isArray(plan.steps) || plan.steps.length === 0) {
53
+ return null;
54
+ }
55
+ // Validate each step has required fields
56
+ for (const step of plan.steps) {
57
+ if (!step.id || !step.agent || !step.prompt)
58
+ return null;
59
+ if (!step.agent.id ||
60
+ !step.agent.display_name ||
61
+ !step.agent.backend ||
62
+ !step.agent.model ||
63
+ !step.agent.system_prompt) {
64
+ return null;
65
+ }
66
+ }
67
+ return plan;
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ }
73
+ /**
74
+ * Extract text content outside the workflow_plan block (for display as Conductor's direct message).
75
+ */
76
+ extractNonPlanContent(response) {
77
+ return response.replace(/```workflow_plan\s*\n[\s\S]*?\n```/, '').trim();
78
+ }
79
+ /**
80
+ * Validate DAG structure: no cycles, valid dependencies, agent limits.
81
+ * Returns error message or null if valid.
82
+ */
83
+ validatePlan(plan) {
84
+ const maxAgents = this.config.max_ephemeral_agents ?? DEFAULT_MAX_EPHEMERAL;
85
+ if (plan.steps.length > maxAgents) {
86
+ return `Too many steps (${plan.steps.length}), max is ${maxAgents}`;
87
+ }
88
+ const stepIds = new Set(plan.steps.map((s) => s.id));
89
+ // Check for duplicate step IDs
90
+ if (stepIds.size !== plan.steps.length) {
91
+ return 'Duplicate step IDs detected';
92
+ }
93
+ // Check dependency references
94
+ for (const step of plan.steps) {
95
+ if (step.depends_on) {
96
+ for (const dep of step.depends_on) {
97
+ if (!stepIds.has(dep)) {
98
+ return `Step "${step.id}" depends on unknown step "${dep}"`;
99
+ }
100
+ if (dep === step.id) {
101
+ return `Step "${step.id}" depends on itself`;
102
+ }
103
+ }
104
+ }
105
+ }
106
+ // Cycle detection via topological sort
107
+ const sorted = this.topologicalSort(plan.steps);
108
+ if (!sorted) {
109
+ return 'Cycle detected in workflow DAG';
110
+ }
111
+ return null;
112
+ }
113
+ /**
114
+ * Topological sort of workflow steps.
115
+ * Returns sorted steps or null if a cycle exists.
116
+ */
117
+ topologicalSort(steps) {
118
+ const inDegree = new Map();
119
+ const adjacency = new Map();
120
+ const stepMap = new Map();
121
+ for (const step of steps) {
122
+ stepMap.set(step.id, step);
123
+ inDegree.set(step.id, 0);
124
+ adjacency.set(step.id, []);
125
+ }
126
+ for (const step of steps) {
127
+ if (step.depends_on) {
128
+ for (const dep of step.depends_on) {
129
+ if (!adjacency.has(dep)) {
130
+ throw new Error(`Step "${step.id}" depends on unknown step "${dep}"`);
131
+ }
132
+ adjacency.get(dep).push(step.id);
133
+ inDegree.set(step.id, (inDegree.get(step.id) ?? 0) + 1);
134
+ }
135
+ }
136
+ }
137
+ const queue = [];
138
+ for (const [id, degree] of inDegree) {
139
+ if (degree === 0)
140
+ queue.push(id);
141
+ }
142
+ const sorted = [];
143
+ while (queue.length > 0) {
144
+ const id = queue.shift();
145
+ sorted.push(stepMap.get(id));
146
+ for (const neighbor of adjacency.get(id) ?? []) {
147
+ const newDegree = (inDegree.get(neighbor) ?? 1) - 1;
148
+ inDegree.set(neighbor, newDegree);
149
+ if (newDegree === 0)
150
+ queue.push(neighbor);
151
+ }
152
+ }
153
+ return sorted.length === steps.length ? sorted : null;
154
+ }
155
+ /**
156
+ * Group steps into execution levels (steps at same level run in parallel).
157
+ */
158
+ buildExecutionLevels(steps) {
159
+ const sorted = this.topologicalSort(steps);
160
+ if (!sorted)
161
+ return [];
162
+ const levelMap = new Map();
163
+ for (const step of sorted) {
164
+ let maxDepLevel = -1;
165
+ if (step.depends_on) {
166
+ for (const dep of step.depends_on) {
167
+ const depLevel = levelMap.get(dep) ?? 0;
168
+ if (depLevel > maxDepLevel)
169
+ maxDepLevel = depLevel;
170
+ }
171
+ }
172
+ levelMap.set(step.id, maxDepLevel + 1);
173
+ }
174
+ const levels = [];
175
+ for (const step of sorted) {
176
+ const level = levelMap.get(step.id) ?? 0;
177
+ while (levels.length <= level)
178
+ levels.push([]);
179
+ levels[level].push(step);
180
+ }
181
+ return levels;
182
+ }
183
+ /**
184
+ * Execute a workflow plan.
185
+ *
186
+ * @param plan - Validated workflow plan
187
+ * @param executeStep - Callback to execute a single step (provided by platform handler)
188
+ * @returns Execution result with all step outputs
189
+ */
190
+ async execute(plan, executeStep) {
191
+ const executionId = (0, crypto_1.randomUUID)();
192
+ const executionState = { cancelled: false };
193
+ this.activeExecutions.set(executionId, executionState);
194
+ const maxDuration = this.config.max_duration_ms ?? DEFAULT_MAX_DURATION_MS;
195
+ const execution = {
196
+ id: executionId,
197
+ planName: plan.name,
198
+ startedAt: Date.now(),
199
+ status: 'running',
200
+ steps: [],
201
+ };
202
+ const stepResults = new Map();
203
+ const levels = this.buildExecutionLevels(plan.steps);
204
+ // Global timeout
205
+ const globalTimeout = setTimeout(() => {
206
+ executionState.cancelled = true;
207
+ }, maxDuration);
208
+ try {
209
+ for (const level of levels) {
210
+ if (executionState.cancelled)
211
+ break;
212
+ const levelResults = await Promise.allSettled(level.map((step) => this.executeStep(step, stepResults, executeStep, executionId, executionState)));
213
+ for (let i = 0; i < levelResults.length; i++) {
214
+ const step = level[i];
215
+ const levelResult = levelResults[i];
216
+ if (levelResult.status === 'fulfilled') {
217
+ stepResults.set(step.id, levelResult.value);
218
+ execution.steps.push(levelResult.value);
219
+ }
220
+ else {
221
+ const reason = levelResult.reason;
222
+ const duration_ms = reason instanceof StepExecutionError ? reason.duration_ms : 0;
223
+ const failedResult = {
224
+ stepId: step.id,
225
+ agentId: step.agent.id,
226
+ result: '',
227
+ duration_ms,
228
+ status: 'failed',
229
+ error: reason?.message || String(reason),
230
+ };
231
+ stepResults.set(step.id, failedResult);
232
+ execution.steps.push(failedResult);
233
+ if (!step.optional) {
234
+ execution.status = 'failed';
235
+ break;
236
+ }
237
+ }
238
+ }
239
+ if (execution.status === 'failed')
240
+ break;
241
+ }
242
+ if (executionState.cancelled && execution.status === 'running') {
243
+ execution.status = 'cancelled';
244
+ }
245
+ else if (execution.status === 'running') {
246
+ execution.status = 'completed';
247
+ }
248
+ }
249
+ finally {
250
+ clearTimeout(globalTimeout);
251
+ this.activeExecutions.delete(executionId);
252
+ }
253
+ execution.completedAt = Date.now();
254
+ // Build final result
255
+ const result = this.buildFinalResult(plan, stepResults, execution);
256
+ this.emitProgress({
257
+ type: 'workflow-completed',
258
+ executionId,
259
+ summary: result,
260
+ duration_ms: execution.completedAt - execution.startedAt,
261
+ });
262
+ return { result, execution };
263
+ }
264
+ /**
265
+ * Cancel a running workflow execution.
266
+ */
267
+ cancel(executionId) {
268
+ const state = this.activeExecutions.get(executionId);
269
+ if (state) {
270
+ state.cancelled = true;
271
+ return true;
272
+ }
273
+ return false;
274
+ }
275
+ /**
276
+ * Check if workflow orchestration is enabled.
277
+ */
278
+ isEnabled() {
279
+ return this.config.enabled;
280
+ }
281
+ async executeStep(step, previousResults, executeStep, executionId, executionState) {
282
+ if (executionState.cancelled) {
283
+ return {
284
+ stepId: step.id,
285
+ agentId: step.agent.id,
286
+ result: '',
287
+ duration_ms: 0,
288
+ status: 'skipped',
289
+ };
290
+ }
291
+ this.emitProgress({
292
+ type: 'step-started',
293
+ executionId,
294
+ stepId: step.id,
295
+ agentDisplayName: step.agent.display_name,
296
+ agentBackend: step.agent.backend,
297
+ agentModel: step.agent.model,
298
+ });
299
+ // Interpolate previous step results into prompt
300
+ const resolvedPrompt = this.interpolatePrompt(step.prompt, previousResults);
301
+ const timeout = step.timeout_ms ?? DEFAULT_STEP_TIMEOUT_MS;
302
+ const start = Date.now();
303
+ try {
304
+ const result = await executeStep(step.agent, resolvedPrompt, timeout);
305
+ const duration_ms = Date.now() - start;
306
+ this.emitProgress({
307
+ type: 'step-completed',
308
+ executionId,
309
+ stepId: step.id,
310
+ agentDisplayName: step.agent.display_name,
311
+ agentBackend: step.agent.backend,
312
+ agentModel: step.agent.model,
313
+ result: result.substring(0, 500),
314
+ duration_ms,
315
+ });
316
+ return {
317
+ stepId: step.id,
318
+ agentId: step.agent.id,
319
+ result,
320
+ duration_ms,
321
+ status: 'success',
322
+ };
323
+ }
324
+ catch (error) {
325
+ const duration_ms = Date.now() - start;
326
+ const errorMsg = error instanceof Error ? error.message : String(error);
327
+ this.emitProgress({
328
+ type: 'step-failed',
329
+ executionId,
330
+ stepId: step.id,
331
+ agentDisplayName: step.agent.display_name,
332
+ agentBackend: step.agent.backend,
333
+ agentModel: step.agent.model,
334
+ error: errorMsg,
335
+ duration_ms,
336
+ });
337
+ if (step.optional) {
338
+ return {
339
+ stepId: step.id,
340
+ agentId: step.agent.id,
341
+ result: '',
342
+ duration_ms,
343
+ status: 'failed',
344
+ error: errorMsg,
345
+ };
346
+ }
347
+ throw new StepExecutionError(errorMsg, step.id, step.agent.id, duration_ms);
348
+ }
349
+ }
350
+ /**
351
+ * Replace {{step_id.result}} placeholders with actual step results.
352
+ */
353
+ interpolatePrompt(prompt, results) {
354
+ return prompt.replace(/\{\{(\w[\w-]*)\.result\}\}/g, (_match, stepId) => {
355
+ const result = results.get(stepId);
356
+ if (!result || result.status !== 'success') {
357
+ return `[Step "${stepId}" not available]`;
358
+ }
359
+ return result.result;
360
+ });
361
+ }
362
+ /**
363
+ * Build the final combined result from all step outputs.
364
+ */
365
+ buildFinalResult(plan, results, execution) {
366
+ if (execution.status === 'cancelled') {
367
+ return `Workflow "${plan.name}" was cancelled.`;
368
+ }
369
+ // If synthesis step is defined, use its template
370
+ if (plan.synthesis?.prompt_template) {
371
+ return this.interpolatePrompt(plan.synthesis.prompt_template, results);
372
+ }
373
+ // Default: concatenate all successful step results
374
+ const parts = [];
375
+ for (const step of plan.steps) {
376
+ const result = results.get(step.id);
377
+ if (result && result.status === 'success' && result.result) {
378
+ parts.push(`### ${step.agent.display_name}\n${result.result}`);
379
+ }
380
+ else if (result && result.status === 'failed') {
381
+ parts.push(`### ${step.agent.display_name}\n❌ Failed: ${result.error}`);
382
+ }
383
+ }
384
+ const totalMs = execution.completedAt
385
+ ? execution.completedAt - execution.startedAt
386
+ : Date.now() - execution.startedAt;
387
+ const totalSec = Math.round(totalMs / 1000);
388
+ return `## Workflow: ${plan.name} (${totalSec}s)\n\n${parts.join('\n\n')}`;
389
+ }
390
+ emitProgress(event) {
391
+ this.emit('progress', event);
392
+ }
393
+ }
394
+ exports.WorkflowEngine = WorkflowEngine;
395
+ //# sourceMappingURL=workflow-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-engine.js","sourceRoot":"","sources":["../../src/multi-agent/workflow-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Dynamic Workflow Orchestration Types
3
+ *
4
+ * Conductor가 사용자 의도를 분석하여 동적으로 생성하는
5
+ * 워크플로우 DAG 관련 타입 정의.
6
+ */
7
+ export type AgentBackend = 'claude' | 'codex-mcp' | 'gemini';
8
+ /**
9
+ * Conductor가 동적으로 생성하는 임시 에이전트 정의
10
+ */
11
+ export interface EphemeralAgentDef {
12
+ /** Unique ID within the workflow, e.g. "planner-1", "coder-2" */
13
+ id: string;
14
+ /** Display name with emoji, e.g. "🔍 Researcher" */
15
+ display_name: string;
16
+ /** Runtime backend */
17
+ backend: AgentBackend;
18
+ /** Model ID */
19
+ model: string;
20
+ /** Inline system prompt */
21
+ system_prompt: string;
22
+ /** Agent tier level @default 1 */
23
+ tier?: 1 | 2 | 3;
24
+ /** Tool permissions override */
25
+ tool_permissions?: {
26
+ allowed?: string[];
27
+ blocked?: string[];
28
+ };
29
+ }
30
+ /**
31
+ * 워크플로우 DAG의 한 단계
32
+ */
33
+ export interface WorkflowStep {
34
+ /** Unique step ID within the workflow */
35
+ id: string;
36
+ /** Agent definition for this step */
37
+ agent: EphemeralAgentDef;
38
+ /** Prompt template — supports {{step_id.result}} interpolation */
39
+ prompt: string;
40
+ /** Step IDs this step depends on */
41
+ depends_on?: string[];
42
+ /** Timeout in ms @default 300000 (5 min) */
43
+ timeout_ms?: number;
44
+ /** If true, workflow continues even if this step fails @default false */
45
+ optional?: boolean;
46
+ }
47
+ /**
48
+ * Conductor가 출력하는 워크플로우 계획
49
+ */
50
+ export interface WorkflowPlan {
51
+ /** Human-readable name for the workflow */
52
+ name: string;
53
+ /** Ordered steps forming a DAG */
54
+ steps: WorkflowStep[];
55
+ /** Optional synthesis step to combine all results */
56
+ synthesis?: {
57
+ agent?: EphemeralAgentDef;
58
+ prompt_template?: string;
59
+ };
60
+ }
61
+ /**
62
+ * 워크플로우 설정 (MultiAgentConfig.workflow)
63
+ */
64
+ export interface WorkflowConfig {
65
+ /** Enable dynamic workflow orchestration */
66
+ enabled: boolean;
67
+ /** Max ephemeral agents per workflow @default 5 */
68
+ max_ephemeral_agents?: number;
69
+ /** Max total workflow duration in ms @default 600000 (10 min) */
70
+ max_duration_ms?: number;
71
+ }
72
+ /**
73
+ * 단계 실행 결과
74
+ */
75
+ export interface StepResult {
76
+ stepId: string;
77
+ agentId: string;
78
+ result: string;
79
+ duration_ms: number;
80
+ status: 'success' | 'failed' | 'timeout' | 'skipped';
81
+ error?: string;
82
+ }
83
+ /**
84
+ * 워크플로우 실행 상태
85
+ */
86
+ export interface WorkflowExecution {
87
+ id: string;
88
+ planName: string;
89
+ startedAt: number;
90
+ completedAt?: number;
91
+ status: 'running' | 'completed' | 'failed' | 'cancelled';
92
+ steps: StepResult[];
93
+ }
94
+ /**
95
+ * 워크플로우 진행 이벤트 (콜백용)
96
+ */
97
+ export interface WorkflowProgressEvent {
98
+ type: 'step-started' | 'step-completed' | 'step-failed' | 'workflow-completed';
99
+ executionId: string;
100
+ stepId?: string;
101
+ agentDisplayName?: string;
102
+ agentBackend?: string;
103
+ agentModel?: string;
104
+ result?: string;
105
+ error?: string;
106
+ /** Elapsed time for the step or total workflow */
107
+ duration_ms?: number;
108
+ /** Summary of all step results (for workflow-completed) */
109
+ summary?: string;
110
+ }
111
+ //# sourceMappingURL=workflow-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-types.d.ts","sourceRoot":"","sources":["../../src/multi-agent/workflow-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Dynamic Workflow Orchestration Types
4
+ *
5
+ * Conductor가 사용자 의도를 분석하여 동적으로 생성하는
6
+ * 워크플로우 DAG 관련 타입 정의.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=workflow-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-types.js","sourceRoot":"","sources":["../../src/multi-agent/workflow-types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jungjaehoon/mama-os",
3
- "version": "0.9.1",
3
+ "version": "0.9.2",
4
4
  "description": "MAMA OS - Your AI Operating System. Control + Visibility for AI-Powered Automation",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",