@synergenius/flow-weaver-pack-weaver 0.9.151 → 0.9.153

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 (93) hide show
  1. package/dist/ai-chat-provider.js +4 -4
  2. package/dist/ai-chat-provider.js.map +1 -1
  3. package/dist/bot/ai-client.d.ts +30 -0
  4. package/dist/bot/ai-client.d.ts.map +1 -1
  5. package/dist/bot/ai-client.js +37 -0
  6. package/dist/bot/ai-client.js.map +1 -1
  7. package/dist/bot/behavior-defaults.d.ts.map +1 -1
  8. package/dist/bot/behavior-defaults.js +7 -2
  9. package/dist/bot/behavior-defaults.js.map +1 -1
  10. package/dist/bot/capability-registry.d.ts.map +1 -1
  11. package/dist/bot/capability-registry.js +48 -30
  12. package/dist/bot/capability-registry.js.map +1 -1
  13. package/dist/bot/file-validator.d.ts +7 -0
  14. package/dist/bot/file-validator.d.ts.map +1 -1
  15. package/dist/bot/file-validator.js +76 -0
  16. package/dist/bot/file-validator.js.map +1 -1
  17. package/dist/bot/instance-manager.d.ts +22 -7
  18. package/dist/bot/instance-manager.d.ts.map +1 -1
  19. package/dist/bot/instance-manager.js +69 -7
  20. package/dist/bot/instance-manager.js.map +1 -1
  21. package/dist/bot/orchestrator.d.ts +11 -9
  22. package/dist/bot/orchestrator.d.ts.map +1 -1
  23. package/dist/bot/orchestrator.js +56 -107
  24. package/dist/bot/orchestrator.js.map +1 -1
  25. package/dist/bot/runner.d.ts +29 -0
  26. package/dist/bot/runner.d.ts.map +1 -1
  27. package/dist/bot/runner.js +114 -73
  28. package/dist/bot/runner.js.map +1 -1
  29. package/dist/bot/step-executor.d.ts.map +1 -1
  30. package/dist/bot/step-executor.js +106 -25
  31. package/dist/bot/step-executor.js.map +1 -1
  32. package/dist/bot/swarm-controller.d.ts +7 -6
  33. package/dist/bot/swarm-controller.d.ts.map +1 -1
  34. package/dist/bot/swarm-controller.js +64 -74
  35. package/dist/bot/swarm-controller.js.map +1 -1
  36. package/dist/bot/task-types.d.ts +1 -0
  37. package/dist/bot/task-types.d.ts.map +1 -1
  38. package/dist/bot/weaver-tools.d.ts +1 -1
  39. package/dist/bot/weaver-tools.d.ts.map +1 -1
  40. package/dist/bot/weaver-tools.js +6 -1
  41. package/dist/bot/weaver-tools.js.map +1 -1
  42. package/dist/node-types/agent-execute.js +2 -2
  43. package/dist/node-types/agent-execute.js.map +1 -1
  44. package/dist/node-types/bot-report.d.ts.map +1 -1
  45. package/dist/node-types/bot-report.js +5 -2
  46. package/dist/node-types/bot-report.js.map +1 -1
  47. package/dist/node-types/build-context.js +2 -1
  48. package/dist/node-types/build-context.js.map +1 -1
  49. package/dist/node-types/exec-validate-retry.d.ts +3 -3
  50. package/dist/node-types/exec-validate-retry.d.ts.map +1 -1
  51. package/dist/node-types/exec-validate-retry.js +13 -184
  52. package/dist/node-types/exec-validate-retry.js.map +1 -1
  53. package/dist/node-types/load-config.d.ts +1 -0
  54. package/dist/node-types/load-config.d.ts.map +1 -1
  55. package/dist/node-types/load-config.js +1 -0
  56. package/dist/node-types/load-config.js.map +1 -1
  57. package/dist/node-types/plan-task.d.ts +7 -5
  58. package/dist/node-types/plan-task.d.ts.map +1 -1
  59. package/dist/node-types/plan-task.js +282 -83
  60. package/dist/node-types/plan-task.js.map +1 -1
  61. package/dist/ui/bot-panel.js +1 -1
  62. package/dist/ui/capability-editor.js +48 -30
  63. package/dist/ui/profile-editor.js +46 -28
  64. package/dist/ui/swarm-dashboard.js +71 -33
  65. package/dist/ui/task-detail-view.js +22 -2
  66. package/dist/workflows/weaver-bot.d.ts +2 -2
  67. package/dist/workflows/weaver-bot.d.ts.map +1 -1
  68. package/dist/workflows/weaver-bot.js +5 -4
  69. package/dist/workflows/weaver-bot.js.map +1 -1
  70. package/flowweaver.manifest.json +1 -1
  71. package/package.json +1 -1
  72. package/src/ai-chat-provider.ts +4 -4
  73. package/src/bot/ai-client.ts +65 -0
  74. package/src/bot/behavior-defaults.ts +5 -2
  75. package/src/bot/capability-registry.ts +48 -30
  76. package/src/bot/file-validator.ts +97 -0
  77. package/src/bot/instance-manager.ts +77 -7
  78. package/src/bot/orchestrator.ts +63 -126
  79. package/src/bot/runner.ts +124 -70
  80. package/src/bot/step-executor.ts +115 -25
  81. package/src/bot/swarm-controller.ts +65 -76
  82. package/src/bot/task-types.ts +1 -0
  83. package/src/bot/weaver-tools.ts +7 -1
  84. package/src/node-types/agent-execute.ts +2 -2
  85. package/src/node-types/bot-report.ts +5 -2
  86. package/src/node-types/build-context.ts +2 -1
  87. package/src/node-types/exec-validate-retry.ts +14 -203
  88. package/src/node-types/load-config.ts +1 -0
  89. package/src/node-types/plan-task.ts +313 -88
  90. package/src/ui/bot-panel.tsx +1 -1
  91. package/src/ui/swarm-dashboard.tsx +3 -3
  92. package/src/ui/task-detail-view.tsx +25 -2
  93. package/src/workflows/weaver-bot.ts +5 -4
@@ -1,56 +1,125 @@
1
- import { callAIWithTools, callCapabilityTriage, parseJsonResponse, normalizePlan } from '../bot/ai-client.js';
1
+ import { callPlatformWithMessages, callCapabilityTriage } from '../bot/ai-client.js';
2
2
  import { auditEmit } from '../bot/audit-logger.js';
3
- import { PLAN_OPERATIONS } from '../bot/operations.js';
3
+ import { executeStep } from '../bot/step-executor.js';
4
4
  import { getCapabilitiesByNames, BUILT_IN_CAPABILITIES } from '../bot/capability-registry.js';
5
5
  // ---------------------------------------------------------------------------
6
- // Plan tool definition passed via native tool_use so the AI returns
7
- // structured JSON arguments instead of prose. Works across Anthropic and OpenAI.
6
+ // Tool definitionsbuilt dynamically from capability-granted operations
8
7
  // ---------------------------------------------------------------------------
9
- /** Build the create_plan tool definition with dynamic operation list. */
10
- function buildPlanTool(operations) {
11
- const ops = operations.length > 0 ? operations : PLAN_OPERATIONS;
12
- return {
13
- name: 'create_plan',
14
- description: 'Create a structured execution plan for this task. Call this tool with the plan steps and summary.',
8
+ /** All known tool schemas, keyed by operation name. */
9
+ const TOOL_SCHEMAS = {
10
+ read_file: {
11
+ name: 'read_file',
12
+ description: 'Read a file and return its content',
13
+ parameters: { type: 'object', properties: { file: { type: 'string' } }, required: ['file'] },
14
+ },
15
+ write_file: {
16
+ name: 'write_file',
17
+ description: 'Write a file (full content)',
18
+ parameters: { type: 'object', properties: { file: { type: 'string' }, content: { type: 'string' } }, required: ['file', 'content'] },
19
+ },
20
+ patch_file: {
21
+ name: 'patch_file',
22
+ description: 'Find and replace in a file',
15
23
  parameters: {
16
24
  type: 'object',
17
25
  properties: {
18
- summary: { type: 'string', description: 'One-line summary of what the plan does' },
19
- steps: {
20
- type: 'array',
21
- description: 'Ordered list of operations to execute',
22
- items: {
23
- type: 'object',
24
- properties: {
25
- operation: {
26
- type: 'string',
27
- description: `Tool to invoke: ${ops.join(', ')}`,
28
- },
29
- description: { type: 'string', description: 'What this step does' },
30
- args: {
31
- type: 'object',
32
- description: 'Arguments for the operation (e.g. {file, content} for write_file, {file, find, replace} for patch_file)',
33
- },
34
- },
35
- required: ['operation', 'description', 'args'],
36
- },
37
- },
26
+ file: { type: 'string' },
27
+ patches: { type: 'array', items: { type: 'object', properties: { find: { type: 'string' }, replace: { type: 'string' } } } },
38
28
  },
39
- required: ['summary', 'steps'],
29
+ required: ['file', 'patches'],
40
30
  },
41
- };
31
+ },
32
+ run_shell: {
33
+ name: 'run_shell',
34
+ description: 'Run a shell command',
35
+ parameters: { type: 'object', properties: { command: { type: 'string' } }, required: ['command'] },
36
+ },
37
+ list_files: {
38
+ name: 'list_files',
39
+ description: 'List files in a directory',
40
+ parameters: { type: 'object', properties: { directory: { type: 'string' }, pattern: { type: 'string' } } },
41
+ },
42
+ task_create: {
43
+ name: 'task_create',
44
+ description: 'Create a swarm subtask',
45
+ parameters: {
46
+ type: 'object',
47
+ properties: {
48
+ title: { type: 'string' },
49
+ description: { type: 'string' },
50
+ assignedProfile: { type: 'string' },
51
+ parentId: { type: 'string' },
52
+ dependsOn: { type: 'array', items: { type: 'string' } },
53
+ complexity: { type: 'string' },
54
+ },
55
+ required: ['title'],
56
+ },
57
+ },
58
+ done: {
59
+ name: 'done',
60
+ description: 'Signal task completion. Call this when you have finished the task.',
61
+ parameters: { type: 'object', properties: { summary: { type: 'string' } }, required: ['summary'] },
62
+ },
63
+ remember: {
64
+ name: 'remember',
65
+ description: 'Save a project convention for future sessions',
66
+ parameters: { type: 'object', properties: { key: { type: 'string' }, value: { type: 'string' } }, required: ['key', 'value'] },
67
+ },
68
+ recall: {
69
+ name: 'recall',
70
+ description: 'Recall saved project conventions',
71
+ parameters: { type: 'object', properties: {} },
72
+ },
73
+ validate: {
74
+ name: 'validate',
75
+ description: 'Validate a Flow Weaver workflow file',
76
+ parameters: { type: 'object', properties: { file: { type: 'string' } }, required: ['file'] },
77
+ },
78
+ respond: {
79
+ name: 'respond',
80
+ description: 'Send a text response to the user',
81
+ parameters: { type: 'object', properties: { response: { type: 'string' } }, required: ['response'] },
82
+ },
83
+ };
84
+ /** Build tool definitions from capability-granted operation names. */
85
+ function buildToolDefinitions(grantedTools) {
86
+ const tools = [];
87
+ const seen = new Set();
88
+ for (const name of grantedTools) {
89
+ if (seen.has(name))
90
+ continue;
91
+ seen.add(name);
92
+ const schema = TOOL_SCHEMAS[name];
93
+ if (schema)
94
+ tools.push(schema);
95
+ }
96
+ // Always include 'done' so the AI can signal completion
97
+ if (!seen.has('done')) {
98
+ tools.push(TOOL_SCHEMAS.done);
99
+ }
100
+ return tools;
42
101
  }
102
+ // ---------------------------------------------------------------------------
103
+ // Safety limits
104
+ // ---------------------------------------------------------------------------
105
+ const MAX_TOOL_CALLS = 30;
106
+ const AGENT_TIMEOUT_MS = 180_000; // 3 minutes
107
+ // ---------------------------------------------------------------------------
108
+ // Agent Loop — replaces Plan Task + Execute & Validate
109
+ // ---------------------------------------------------------------------------
43
110
  /**
44
- * Sends task + context to the AI provider and gets back a structured
45
- * execution plan. The core AI planning node.
111
+ * Agent loop: sends task + tools to the AI, executes tool calls iteratively
112
+ * until the AI signals completion or a safety limit is reached.
113
+ *
114
+ * Replaces the old Plan Task → Execute & Validate two-phase workflow.
46
115
  *
47
116
  * @flowWeaver nodeType
48
- * @label Plan Task
49
- * @icon task
117
+ * @label Agent Loop
118
+ * @icon psychology
50
119
  * @color blue
51
120
  * @input ctx [order:0] - Weaver context (JSON)
52
121
  * @input [modelOverride] [order:1] - Model ID override from profile behavior
53
- * @output ctx [order:0] - Weaver context with planJson (JSON)
122
+ * @output ctx [order:0] - Weaver context with results (JSON)
54
123
  * @output onSuccess [order:-2] - On Success
55
124
  * @output onFailure [order:-1] [hidden] - On Failure
56
125
  */
@@ -59,13 +128,22 @@ export async function weaverPlanTask(execute, ctx, modelOverride) {
59
128
  const { env } = context;
60
129
  if (!execute) {
61
130
  context.planJson = '{"steps":[],"summary":"dry run"}';
131
+ context.resultJson = JSON.stringify({ success: true, toolCallCount: 0 });
132
+ context.filesModified = '[]';
133
+ context.stepLogJson = '[]';
134
+ context.allValid = true;
62
135
  return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
63
136
  }
64
137
  const pInfo = modelOverride
65
138
  ? { ...env.providerInfo, model: modelOverride }
66
139
  : env.providerInfo;
140
+ const { projectDir } = env;
67
141
  if (!context.taskJson) {
68
- context.planJson = JSON.stringify({ steps: [], summary: 'Planning failed: missing taskJson' });
142
+ context.planJson = JSON.stringify({ steps: [], summary: 'Agent loop failed: missing taskJson' });
143
+ context.resultJson = JSON.stringify({ success: false, error: 'missing taskJson' });
144
+ context.filesModified = '[]';
145
+ context.stepLogJson = '[]';
146
+ context.allValid = false;
69
147
  return { onSuccess: false, onFailure: true, ctx: JSON.stringify(context) };
70
148
  }
71
149
  const task = JSON.parse(context.taskJson);
@@ -74,18 +152,16 @@ export async function weaverPlanTask(execute, ctx, modelOverride) {
74
152
  const availableCapNames = behavior?.capabilities ?? BUILT_IN_CAPABILITIES.map(c => c.name);
75
153
  const availableCaps = getCapabilitiesByNames(availableCapNames);
76
154
  // Capability triage: cheap Haiku call selects which capabilities this task needs
77
- let selectedCaps = availableCaps; // fallback: all available
155
+ let selectedCaps = availableCaps;
78
156
  const triageResult = await callCapabilityTriage(pInfo, task.instruction, availableCaps);
79
157
  if (triageResult) {
80
158
  selectedCaps = getCapabilitiesByNames(triageResult);
81
159
  }
82
- // If triage failed, selectedCaps = all available (no degradation)
160
+ // Build system prompt from capabilities
83
161
  let systemPrompt;
84
162
  try {
85
163
  const mod = await import('../bot/system-prompt.js');
86
164
  const basePrompt = mod.buildPromptFromCapabilities(selectedCaps);
87
- // Only include the context bundle if the 'context' capability was selected.
88
- // This prevents sending 10k+ tokens of FW authoring docs for simple file creation tasks.
89
165
  const selectedCapNames = new Set(selectedCaps.map(c => c.name));
90
166
  const contextBundle = selectedCapNames.has('context') ? context.contextBundle : undefined;
91
167
  const botPrompt = mod.buildBotSystemPrompt(contextBundle, undefined, context.env?.projectDir);
@@ -93,59 +169,182 @@ export async function weaverPlanTask(execute, ctx, modelOverride) {
93
169
  }
94
170
  catch (err) {
95
171
  if (process.env.WEAVER_VERBOSE)
96
- console.error('[plan-task] system prompt build failed:', err);
97
- systemPrompt = 'You are Weaver, an AI workflow bot. Return ONLY valid JSON with a plan.';
172
+ console.error('[agent-loop] system prompt build failed:', err);
173
+ systemPrompt = 'You are Weaver, an AI workflow bot. Use the provided tools to complete tasks.';
98
174
  }
99
- const userPrompt = `Task: ${task.instruction}\nMode: ${task.mode ?? 'create'}\n${task.id ? `Task ID: ${task.id}` : ''}\n${task.targets ? 'Targets: ' + task.targets.join(', ') : ''}
100
-
101
- Plan this task by calling the create_plan tool with concrete steps.
102
- Rules:
103
- 1. Every step MUST have complete, concrete args — no empty patches, no placeholders.
104
- 2. For file creation tasks, use write_file with full file content in args.
105
- 3. If you need to discover file contents first, plan ONLY discovery steps (read_file, list_files).
106
- 4. Do NOT plan patch_file unless you know the exact find/replace strings.`;
175
+ // Build tool definitions from capability-granted operations
176
+ let tools;
107
177
  try {
108
- // Build plan tool with operations scoped to selected capabilities
109
178
  const mod2 = await import('../bot/system-prompt.js');
110
179
  const grantedTools = mod2.collectToolsFromCapabilities(selectedCaps);
111
- // Always include respond in the available operations
112
- const planOps = grantedTools.length > 0 ? [...grantedTools, 'respond'] : PLAN_OPERATIONS;
113
- const planTool = buildPlanTool(planOps);
114
- // Use native tool_use when available (Anthropic, OpenAI).
115
- // The AI calls create_plan with structured args instead of returning prose.
116
- const result = await callAIWithTools(pInfo, systemPrompt, userPrompt, [planTool], 8192);
117
- let plan;
118
- // Check if AI used the create_plan tool (structured response)
119
- const planCall = result.toolCalls.find(tc => tc.name === 'create_plan');
120
- if (planCall) {
121
- plan = normalizePlan(planCall.arguments);
180
+ tools = buildToolDefinitions(grantedTools);
181
+ }
182
+ catch {
183
+ tools = buildToolDefinitions(['read_file', 'write_file', 'patch_file', 'run_shell', 'list_files', 'task_create']);
184
+ }
185
+ // Build initial user prompt
186
+ let userPrompt = `Task: ${task.instruction}\nMode: ${task.mode ?? 'create'}\n${task.id ? `Your Task ID is ${task.id}. Use parentId: "@self" in task_create to create subtasks under this task.` : ''}\n${task.targets ? 'Targets: ' + task.targets.join(', ') : ''}
187
+
188
+ Execute this task step by step using the available tools.
189
+ When you are done, call the "done" tool with a summary of what you accomplished.
190
+ Rules:
191
+ 1. Read files before modifying them (use read_file to get exact content for patches).
192
+ 2. Use patch_file for modifications, write_file only for new files.
193
+ 3. Verify your work by running tests or tsc when appropriate.`;
194
+ // Append retry context when this is a retry attempt (attempt > 0)
195
+ const attempt = task.attempt ?? 0;
196
+ if (attempt > 0) {
197
+ const retryParts = ['\n\n--- RETRY CONTEXT (attempt ' + (attempt + 1) + ') ---'];
198
+ if (task.lastError) {
199
+ retryParts.push('Previous attempt failed with error: ' + task.lastError);
200
+ }
201
+ const summaries = task.runSummaries ?? [];
202
+ const lastSummary = summaries.length > 0 ? summaries[summaries.length - 1] : undefined;
203
+ if (lastSummary) {
204
+ if (lastSummary.outcome)
205
+ retryParts.push('Last outcome: ' + lastSummary.outcome);
206
+ if (lastSummary.summary)
207
+ retryParts.push('Last summary: ' + lastSummary.summary);
208
+ if (lastSummary.filesModified && lastSummary.filesModified.length > 0) {
209
+ retryParts.push('Files already created/modified: ' + lastSummary.filesModified.join(', '));
210
+ }
122
211
  }
123
- else {
124
- // Fallback: parse JSON from text content (CLI providers, or AI chose not to use tool)
125
- const text = result.content;
126
- try {
127
- const raw = parseJsonResponse(text);
128
- plan = normalizePlan(raw);
212
+ retryParts.push('Do NOT recreate files that already exist. Read them first and continue from where the previous attempt left off.');
213
+ retryParts.push('---');
214
+ userPrompt += retryParts.join('\n');
215
+ }
216
+ // Seed symbolic ID map for task references
217
+ const symbolicIdMap = {};
218
+ if (task.id)
219
+ symbolicIdMap['@self'] = task.id;
220
+ if (task.parentId)
221
+ symbolicIdMap['@parent'] = task.parentId;
222
+ // State tracking
223
+ const filesModified = [];
224
+ const stepLog = [];
225
+ let toolCallCount = 0;
226
+ const deadline = Date.now() + AGENT_TIMEOUT_MS;
227
+ // Messages array for multi-turn conversation
228
+ const messages = [
229
+ { role: 'system', content: systemPrompt },
230
+ { role: 'user', content: userPrompt },
231
+ ];
232
+ auditEmit('run-start', { task: task.instruction, mode: 'agent-loop' });
233
+ try {
234
+ // Agent loop
235
+ let done = false;
236
+ while (!done && toolCallCount < MAX_TOOL_CALLS && Date.now() < deadline) {
237
+ const result = await callPlatformWithMessages(messages, tools, pInfo.model, pInfo.maxTokens ?? 8192);
238
+ // If AI returns text with no tool calls, we're done
239
+ if (!result.toolCalls || result.toolCalls.length === 0) {
240
+ if (result.content) {
241
+ console.log(`\x1b[36m→ Agent: ${result.content.slice(0, 200)}\x1b[0m`);
242
+ }
243
+ done = true;
244
+ break;
129
245
  }
130
- catch {
131
- // LLM returned plain text — wrap as a text-response plan.
132
- const trimmed = text.trim();
133
- const firstLine = trimmed.split('\n')[0].slice(0, 120);
134
- plan = {
135
- steps: [{ id: 'step-1', operation: 'respond', description: firstLine, args: { response: trimmed } }],
136
- summary: firstLine,
137
- };
246
+ // Process each tool call
247
+ for (const tc of result.toolCalls) {
248
+ if (toolCallCount >= MAX_TOOL_CALLS || Date.now() >= deadline) {
249
+ done = true;
250
+ break;
251
+ }
252
+ toolCallCount++;
253
+ const toolName = tc.name;
254
+ const toolArgs = tc.arguments;
255
+ // Check for done signal
256
+ if (toolName === 'done' || toolName === 'complete') {
257
+ console.log(`\x1b[36m→ Agent done: ${toolArgs.summary ?? 'completed'}\x1b[0m`);
258
+ // Execute through step-executor for consistent handling
259
+ try {
260
+ const stepResult = await executeStep({ operation: toolName, args: toolArgs }, projectDir, symbolicIdMap);
261
+ stepLog.push({ step: `${toolCallCount}:${toolName}`, status: 'ok', detail: stepResult.output ?? 'done' });
262
+ }
263
+ catch {
264
+ stepLog.push({ step: `${toolCallCount}:${toolName}`, status: 'ok', detail: 'done' });
265
+ }
266
+ // Add assistant message with tool use and tool result to messages
267
+ messages.push({
268
+ role: 'assistant',
269
+ content: result.content || undefined,
270
+ tool_use: { id: tc.id, name: toolName, input: toolArgs },
271
+ });
272
+ messages.push({
273
+ role: 'user',
274
+ tool_use_id: tc.id,
275
+ content: 'Task completed.',
276
+ });
277
+ done = true;
278
+ break;
279
+ }
280
+ // Execute the tool via step-executor
281
+ let toolOutput;
282
+ try {
283
+ const stepResult = await executeStep({ operation: toolName, args: toolArgs }, projectDir, symbolicIdMap);
284
+ // Track files modified — only from write/patch operations, not reads/listings
285
+ const isWriteOp = toolName === 'write_file' || toolName === 'patch_file' || toolName === 'create_workflow' || toolName === 'modify_source' || toolName === 'implement_node';
286
+ if (isWriteOp && stepResult.file)
287
+ filesModified.push(stepResult.file);
288
+ // Build output for AI
289
+ if (stepResult.blocked) {
290
+ toolOutput = `BLOCKED: ${stepResult.blockReason}`;
291
+ stepLog.push({ step: `${toolCallCount}:${toolName}`, status: 'blocked', detail: stepResult.blockReason });
292
+ }
293
+ else {
294
+ toolOutput = stepResult.output ?? 'OK';
295
+ stepLog.push({ step: `${toolCallCount}:${toolName}`, status: 'ok', detail: toolName });
296
+ }
297
+ console.log(`\x1b[32m + ${toolCallCount}: ${toolName}\x1b[0m`);
298
+ }
299
+ catch (err) {
300
+ const msg = err instanceof Error ? err.message : String(err);
301
+ toolOutput = `ERROR: ${msg}`;
302
+ stepLog.push({ step: `${toolCallCount}:${toolName}`, status: 'error', detail: msg });
303
+ console.error(`\x1b[31m x ${toolCallCount}: ${toolName}: ${msg}\x1b[0m`);
304
+ }
305
+ // Append assistant tool_use + tool result to messages for next iteration
306
+ messages.push({
307
+ role: 'assistant',
308
+ content: result.content || undefined,
309
+ tool_use: { id: tc.id, name: toolName, input: toolArgs },
310
+ });
311
+ messages.push({
312
+ role: 'user',
313
+ tool_use_id: tc.id,
314
+ content: toolOutput,
315
+ });
138
316
  }
139
317
  }
140
- console.log(`\x1b[36m→ Plan: ${plan.summary ?? 'generated'}\x1b[0m`);
141
- auditEmit('plan-created', { summary: plan.summary, stepCount: plan.steps?.length ?? 0 });
142
- context.planJson = JSON.stringify(plan);
318
+ // Deduplicate files
319
+ const uniqueFiles = [...new Set(filesModified)];
320
+ // Store results in context (compatible with exec-validate-retry output format)
321
+ context.resultJson = JSON.stringify({
322
+ success: true,
323
+ toolCallCount,
324
+ filesModified: uniqueFiles,
325
+ stepsCompleted: toolCallCount,
326
+ stepsTotal: toolCallCount,
327
+ });
328
+ context.planJson = JSON.stringify({ steps: [], summary: `Agent loop: ${toolCallCount} tool calls` });
329
+ context.filesModified = JSON.stringify(uniqueFiles);
330
+ context.stepLogJson = JSON.stringify(stepLog);
331
+ context.allValid = true;
332
+ auditEmit('run-complete', {
333
+ success: true,
334
+ toolCalls: toolCallCount,
335
+ filesModified: uniqueFiles.length,
336
+ });
337
+ console.log(`\x1b[36m→ Agent loop: ${toolCallCount} tool calls, ${uniqueFiles.length} files modified\x1b[0m`);
143
338
  return { onSuccess: true, onFailure: false, ctx: JSON.stringify(context) };
144
339
  }
145
340
  catch (err) {
146
341
  const msg = err instanceof Error ? err.message : String(err);
147
- console.error(`\x1b[31m→ Planning failed: ${msg}\x1b[0m`);
148
- context.planJson = JSON.stringify({ steps: [], summary: `Planning failed: ${msg}` });
342
+ console.error(`\x1b[31m→ Agent loop failed: ${msg}\x1b[0m`);
343
+ context.resultJson = JSON.stringify({ success: false, error: msg });
344
+ context.planJson = JSON.stringify({ steps: [], summary: `Agent loop failed: ${msg}` });
345
+ context.filesModified = JSON.stringify([...new Set(filesModified)]);
346
+ context.stepLogJson = JSON.stringify(stepLog);
347
+ context.allValid = false;
149
348
  return { onSuccess: false, onFailure: true, ctx: JSON.stringify(context) };
150
349
  }
151
350
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plan-task.js","sourceRoot":"","sources":["../../src/node-types/plan-task.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-task.js","sourceRoot":"","sources":["../../src/node-types/plan-task.ts"],"names":[],"mappings":"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"}
@@ -280,7 +280,7 @@ function BotPanel() {
280
280
  React.createElement(Typography, {
281
281
  variant: "caption-thick",
282
282
  color: "color-text-high"
283
- }, `${inst.profileId} #${inst.index}`),
283
+ }, inst.profileId ? `${inst.instanceId} (${inst.profileId})` : inst.instanceId),
284
284
  React.createElement(StatusIcon, {
285
285
  status: statusToIconStatus(inst.status),
286
286
  size: "sm"
@@ -76,30 +76,28 @@ var CAP_ROLE_ORCHESTRATOR = {
76
76
  You DECOMPOSE and ASSIGN. You never write code or create files directly.
77
77
 
78
78
  Your job:
79
- 1. Analyze the objective and understand the project scope
80
- 2. Create a PROJECT BRIEF (a concise description of what we're building, how pieces connect, conventions to follow)
81
- 3. Break the objective into focused subtasks using task_create. Set parentId to YOUR Task ID (provided in the prompt) on every subtask so they appear as children.
82
- 4. ALWAYS set assignedProfile on every subtask to one of these three:
83
- - "developer" \u2192 code writing, file creation, implementation
84
- - "reviewer" \u2192 code review, quality checks, security audit
85
- - "ops" \u2192 project setup, dependencies, config, infrastructure
86
- NEVER set assignedProfile to "orchestrator". You are the orchestrator \u2014 assigning to yourself creates an infinite loop. Only "developer", "reviewer", or "ops".
87
- 5. Set dependencies so tasks execute in the right order
88
- Use the EXACT title of a previous subtask as the dependsOn value. The system resolves titles to real task IDs at execution time. Example: dependsOn: ["Setup: Initialize project structure"]
89
- 6. Include the project brief in every subtask's description
90
-
91
- CRITICAL: You do NOT have write_file, patch_file, or run_shell. You cannot execute code \u2014 only plan and delegate to developer/reviewer/ops.
92
-
93
- ### Project Brief Format
94
- Include this at the TOP of every subtask description:
95
- "PROJECT: [what we're building]. STRUCTURE: [file layout]. CONVENTIONS: [naming, patterns, exports]."
79
+ 1. Analyze the objective
80
+ 2. Break it into focused subtasks via task_create. Set parentId to "@self" on every subtask.
81
+ 3. ALWAYS set assignedProfile: "developer", "reviewer", or "ops".
82
+ NEVER set assignedProfile to "orchestrator" \u2014 assigning to yourself creates an infinite loop.
83
+ 4. Use the EXACT title of a previous subtask as dependsOn. The system resolves titles to real task IDs.
84
+ 5. Include a project brief in every subtask: "PROJECT: [what]. FILES: [exact paths from workspace root]. CONVENTIONS: [patterns]."
85
+
86
+ CRITICAL: You do NOT have write_file, patch_file, or run_shell. Only plan and delegate.
87
+
88
+ ### Design Phase (MANDATORY)
89
+ Your FIRST subtask MUST be a design task assigned to ops that creates a .design.md file in the project root. This is the single source of truth. It must contain:
90
+ - Module map, TypeScript interfaces (copy-paste ready), export contracts (function signatures)
91
+ - Dependency graph, conventions (naming, error handling, patterns)
92
+ Every subsequent developer task MUST read .design.md before writing code.
96
93
 
97
94
  ### Subtask Quality
98
- Each subtask must be:
99
- - Focused (one file or one concern)
100
- - Self-contained (has enough context to execute independently)
101
- - Properly routed (assignedProfile is set)
102
- - Ordered (dependsOn reflects real dependencies)`
95
+ Each subtask: focused (one concern), self-contained, properly routed, ordered by dependsOn.
96
+
97
+ ### Example
98
+ { operation: "task_create", args: { title: "Design: Create project contract", parentId: "@self", assignedProfile: "ops", complexity: "complex", description: "Create todo-app/.design.md with module map, TypeScript interfaces, export contracts.", dependsOn: [] } }
99
+ { operation: "task_create", args: { title: "Setup project", parentId: "@self", assignedProfile: "ops", dependsOn: ["Design: Create project contract"] } }
100
+ { operation: "task_create", args: { title: "Write code", parentId: "@self", assignedProfile: "developer", dependsOn: ["Setup project"] } }`
103
101
  };
104
102
  var CAP_ROLE_DEVELOPER = {
105
103
  name: "role-developer",
@@ -108,17 +106,28 @@ var CAP_ROLE_DEVELOPER = {
108
106
  You WRITE CODE. Execute the task directly using write_file, patch_file, and run_shell.
109
107
 
110
108
  Your job:
111
- 1. Read the task description (including the project brief)
112
- 2. Create a plan with CONCRETE file operations (write_file, patch_file, run_shell)
113
- 3. Execute every step \u2014 produce actual files on disk
114
- 4. Verify your work compiles and is correct
109
+ 1. Read .design.md in the project root to understand interfaces and contracts
110
+ 2. Read files created by previous tasks (your dependencies are done \u2014 their files are on disk)
111
+ 3. Write code that MATCHES the contracts in .design.md exactly \u2014 same types, same function signatures, same exports
112
+ 4. Verify your imports resolve to real exports in existing files
115
113
 
116
114
  You do NOT have task_create. You cannot create subtasks or delegate.
117
115
  If the task seems too large, do your best \u2014 the orchestrator already decomposed it for you.
118
116
 
117
+ ### File Paths
118
+ All paths in write_file/patch_file are RELATIVE TO THE WORKSPACE ROOT. If the task says "inside todo-app/", your paths MUST start with todo-app/ (e.g., todo-app/src/cli.ts, NOT src/cli.ts).
119
+
120
+ ### Code Quality
121
+ - Write COMPLETE, WORKING code. No TODOs, no placeholders, no empty function bodies, no "// implement later".
122
+ - Every function must be fully implemented with real logic.
123
+ - Use proper TypeScript types. Use strict mode patterns.
124
+ - Export everything that other files will import.
125
+ - Handle edge cases (empty input, file not found, invalid args).
126
+ - Use ESM-compatible patterns: import.meta.url instead of __dirname, import.meta.filename instead of __filename. Use fileURLToPath(import.meta.url) for path resolution.
127
+
119
128
  ### Output Requirements
120
129
  Your plan MUST include at least one write_file, patch_file, or run_shell step.
121
- A plan with only "respond" steps is a FAILURE \u2014 you must produce artifacts.`
130
+ A plan with only read_file, list_files, or respond steps is a FAILURE \u2014 you must produce artifacts.`
122
131
  };
123
132
  var CAP_ROLE_REVIEWER = {
124
133
  name: "role-reviewer",
@@ -142,10 +151,19 @@ var CAP_ROLE_OPS = {
142
151
  You SET UP infrastructure \u2014 package.json, tsconfig.json, directory structure, dependencies.
143
152
 
144
153
  Your job:
145
- 1. Initialize project structure (create config files, directories)
146
- 2. Install dependencies with run_shell
147
- 3. Ensure the project builds and tests can run
154
+ 1. Create the project directory first: run_shell with mkdir -p <project>/src
155
+ 2. Write config files (package.json, tsconfig.json) using write_file
156
+ 3. Install dependencies with run_shell (npm install)
157
+ 4. Ensure the project structure is ready for developers
158
+
159
+ ### File Paths
160
+ All paths are RELATIVE TO THE WORKSPACE ROOT. If the project is in a subfolder (e.g., todo-app/), ALL your paths must include that prefix: todo-app/package.json, todo-app/tsconfig.json, todo-app/src/.
148
161
 
162
+ ### Design Tasks
163
+ When the task is a Design task, create a .design.md file with detailed TypeScript interfaces, module exports, and dependency graph. This file must contain copy-paste ready interface definitions that developers will implement exactly.
164
+
165
+ ### Output Requirements
166
+ Your plan MUST include write_file and/or run_shell steps that create real files.
149
167
  You do NOT have task_create. You execute infrastructure tasks directly.`
150
168
  };
151
169
  var CAP_FILE_OPS = {