heyio 3.2.3 → 3.3.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.
Files changed (39) hide show
  1. package/dist/copilot/tools.d.ts.map +1 -1
  2. package/dist/copilot/tools.js +5 -0
  3. package/dist/copilot/tools.js.map +1 -1
  4. package/dist/squad/agent.d.ts +5 -0
  5. package/dist/squad/agent.d.ts.map +1 -1
  6. package/dist/squad/agent.js +10 -1
  7. package/dist/squad/agent.js.map +1 -1
  8. package/dist/squad/execution/index.d.ts +5 -3
  9. package/dist/squad/execution/index.d.ts.map +1 -1
  10. package/dist/squad/execution/index.js +3 -2
  11. package/dist/squad/execution/index.js.map +1 -1
  12. package/dist/squad/execution/instance.js +1 -1
  13. package/dist/squad/execution/instance.js.map +1 -1
  14. package/dist/squad/execution/planning.d.ts +20 -0
  15. package/dist/squad/execution/planning.d.ts.map +1 -0
  16. package/dist/squad/execution/planning.js +62 -0
  17. package/dist/squad/execution/planning.js.map +1 -0
  18. package/dist/squad/execution/review.d.ts +21 -0
  19. package/dist/squad/execution/review.d.ts.map +1 -0
  20. package/dist/squad/execution/review.js +151 -0
  21. package/dist/squad/execution/review.js.map +1 -0
  22. package/dist/squad/execution/runner.d.ts +5 -4
  23. package/dist/squad/execution/runner.d.ts.map +1 -1
  24. package/dist/squad/execution/runner.js +20 -17
  25. package/dist/squad/execution/runner.js.map +1 -1
  26. package/dist/squad/execution/tasks.d.ts +13 -2
  27. package/dist/squad/execution/tasks.d.ts.map +1 -1
  28. package/dist/squad/execution/tasks.js +58 -59
  29. package/dist/squad/execution/tasks.js.map +1 -1
  30. package/node_modules/@io/shared/dist/types/events.d.ts +1 -1
  31. package/node_modules/@io/shared/dist/types/events.d.ts.map +1 -1
  32. package/node_modules/@io/shared/package.json +1 -1
  33. package/node_modules/@io/shared/src/types/events.ts +2 -0
  34. package/node_modules/@io/shared/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +1 -1
  36. package/dist/squad/execution/meeting.d.ts +0 -30
  37. package/dist/squad/execution/meeting.d.ts.map +0 -1
  38. package/dist/squad/execution/meeting.js +0 -147
  39. package/dist/squad/execution/meeting.js.map +0 -1
@@ -0,0 +1,151 @@
1
+ import { createChildLogger } from '../../logging/logger.js';
2
+ import { getEventBus } from '../event-bus.js';
3
+ import { selectModelForRole } from '../model-selector.js';
4
+ import { addInboxEntry } from '../../store/inbox.js';
5
+ import { transitionInstance } from './instance.js';
6
+ import { executeRework } from './tasks.js';
7
+ const logger = () => createChildLogger('review');
8
+ const MAX_REVIEW_CYCLES = 5;
9
+ /**
10
+ * Gated review cycle:
11
+ * 1. Lead reviews all task results
12
+ * 2. If lead rejects → identifies tasks to rework, specialists rework in parallel
13
+ * 3. If lead approves → QA/veto reviews
14
+ * 4. If QA rejects → same rework loop
15
+ * 5. Max 5 cycles total, then fail to inbox
16
+ */
17
+ export async function reviewWork(params) {
18
+ const log = logger();
19
+ const { instance, runtime, objective } = params;
20
+ await transitionInstance(instance.id, 'reviewing');
21
+ const teamLead = runtime.members.get('technical-pm');
22
+ if (!teamLead)
23
+ throw new Error('No team lead for review');
24
+ // Track review activity under this instance
25
+ teamLead.setInstanceId(instance.id);
26
+ // Find veto/QA members
27
+ const vetoMembers = [...runtime.members.entries()].filter(([role]) => {
28
+ const skill = runtime.skills.get(role);
29
+ return skill?.veto && role !== 'technical-pm';
30
+ });
31
+ let cycles = 0;
32
+ while (cycles < MAX_REVIEW_CYCLES) {
33
+ cycles++;
34
+ log.info({ instanceId: instance.id, cycle: cycles }, 'Review cycle');
35
+ await getEventBus().emit({
36
+ id: crypto.randomUUID(),
37
+ timestamp: new Date(),
38
+ type: 'instance:review_cycle',
39
+ squadId: instance.squadId,
40
+ instanceId: instance.id,
41
+ data: { cycle: cycles, maxCycles: MAX_REVIEW_CYCLES },
42
+ });
43
+ // Build task summary for reviewer
44
+ const taskSummary = instance.tasks
45
+ .map((t) => `- [${t.status}] ${t.description} (${t.assignedTo})\n Result: ${(t.result ?? 'No result').slice(0, 1000)}`)
46
+ .join('\n\n');
47
+ // Step 1: Team Lead reviews
48
+ const reviewModel = selectModelForRole('technical-pm', 'review');
49
+ if (teamLead.getModel() !== reviewModel) {
50
+ await teamLead.switchModel(reviewModel);
51
+ }
52
+ const leadReview = await teamLead.send(`Review all completed work for this objective:\n\nObjective: ${objective}\n\nTask results:\n${taskSummary}\n\nDoes the work meet the objective? Reply with one of:\n- "APPROVED" if all work is satisfactory\n- "REWORK:" followed by a JSON array of objects with "taskId" and "feedback" for each task that needs revision. Example:\nREWORK: [{"taskId": "abc-123", "feedback": "Missing error handling"}]`);
53
+ if (leadReview.toUpperCase().includes('APPROVED')) {
54
+ // Step 2: QA/veto review (gated behind lead approval)
55
+ if (vetoMembers.length === 0) {
56
+ log.info({ instanceId: instance.id }, 'No veto members, lead approval is final');
57
+ return { approved: true, cycles };
58
+ }
59
+ for (const [role, agent] of vetoMembers) {
60
+ agent.setInstanceId(instance.id);
61
+ const qaModel = selectModelForRole(role, 'review');
62
+ if (agent.getModel() !== qaModel) {
63
+ await agent.switchModel(qaModel);
64
+ }
65
+ const qaReview = await agent.send(`As QA, review the following completed work:\n\nObjective: ${objective}\n\nTask results:\n${taskSummary}\n\nDoes this meet quality standards? Reply with:\n- "APPROVED" if satisfactory\n- "REWORK:" followed by a JSON array of objects with "taskId" and "feedback" for tasks that need revision.`);
66
+ if (qaReview.toUpperCase().includes('REWORK:')) {
67
+ // QA rejected — parse rework instructions and loop
68
+ const reworkTasks = parseReworkInstructions(qaReview, instance.tasks);
69
+ if (reworkTasks.length > 0) {
70
+ log.info({ instanceId: instance.id, cycle: cycles, rejectedBy: role, reworkCount: reworkTasks.length }, 'QA rejected, reworking');
71
+ await transitionInstance(instance.id, 'working');
72
+ await executeRework({ instance, runtime, reworkTasks });
73
+ await transitionInstance(instance.id, 'reviewing');
74
+ }
75
+ break; // Back to top of review loop
76
+ }
77
+ }
78
+ // If we didn't break (all QA approved), we're done
79
+ if (!leadReview.toUpperCase().includes('REWORK:')) {
80
+ // Check that we actually reached this point without a QA rejection
81
+ const allQaApproved = true; // If we didn't break, all approved
82
+ if (allQaApproved) {
83
+ log.info({ instanceId: instance.id, cycles }, 'All reviewers approved');
84
+ return { approved: true, cycles };
85
+ }
86
+ }
87
+ }
88
+ else if (leadReview.toUpperCase().includes('REWORK:')) {
89
+ // Lead rejected — parse rework and loop
90
+ const reworkTasks = parseReworkInstructions(leadReview, instance.tasks);
91
+ if (reworkTasks.length > 0) {
92
+ log.info({ instanceId: instance.id, cycle: cycles, reworkCount: reworkTasks.length }, 'Lead rejected, reworking');
93
+ await transitionInstance(instance.id, 'working');
94
+ await executeRework({ instance, runtime, reworkTasks });
95
+ await transitionInstance(instance.id, 'reviewing');
96
+ }
97
+ else {
98
+ // Couldn't parse rework instructions — treat as approved to avoid infinite loop
99
+ log.warn({ instanceId: instance.id }, 'Could not parse rework instructions, treating as approved');
100
+ return { approved: true, cycles };
101
+ }
102
+ }
103
+ else {
104
+ // Ambiguous response — treat as approved
105
+ log.warn({ instanceId: instance.id }, 'Ambiguous review response, treating as approved');
106
+ return { approved: true, cycles };
107
+ }
108
+ }
109
+ // Exhausted review cycles — send to inbox
110
+ const failureReason = `Failed to pass review after ${MAX_REVIEW_CYCLES} cycles for objective: ${objective}`;
111
+ log.error({ instanceId: instance.id }, failureReason);
112
+ await addInboxEntry({
113
+ squadId: instance.squadId,
114
+ instanceId: instance.id,
115
+ kind: 'note',
116
+ title: `Review failed: ${objective.slice(0, 60)}`,
117
+ content: `Instance ${instance.id} exhausted ${MAX_REVIEW_CYCLES} review/rework cycles without reaching approval.\n\nObjective: ${objective}\n\nFinal task states:\n${instance.tasks.map((t) => `- [${t.status}] ${t.description}: ${(t.result ?? 'no result').slice(0, 200)}`).join('\n')}`,
118
+ });
119
+ return { approved: false, cycles, failureReason };
120
+ }
121
+ /**
122
+ * Parse rework instructions from a review response.
123
+ * Expects JSON array after "REWORK:" with {taskId, feedback} objects.
124
+ * Falls back to assigning feedback to all non-done tasks if parsing fails.
125
+ */
126
+ function parseReworkInstructions(response, tasks) {
127
+ const reworkMatch = response.match(/REWORK:\s*(\[[\s\S]*?\])/i);
128
+ if (reworkMatch) {
129
+ try {
130
+ const parsed = JSON.parse(reworkMatch[1]);
131
+ if (Array.isArray(parsed)) {
132
+ return parsed
133
+ .filter((item) => item.taskId && item.feedback)
134
+ .map((item) => ({
135
+ taskId: item.taskId,
136
+ feedback: item.feedback,
137
+ }));
138
+ }
139
+ }
140
+ catch {
141
+ // Fall through to fallback
142
+ }
143
+ }
144
+ // Fallback: extract plain-text feedback and apply to all completed tasks
145
+ const feedbackMatch = response.match(/REWORK:\s*([\s\S]+)/i);
146
+ const feedback = feedbackMatch?.[1]?.trim() ?? 'Please review and fix issues.';
147
+ return tasks
148
+ .filter((t) => t.status === 'done' || t.status === 'failed')
149
+ .map((t) => ({ taskId: t.id, feedback }));
150
+ }
151
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/squad/execution/review.ts"],"names":[],"mappings":"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"}
@@ -9,10 +9,11 @@ export interface RunResult {
9
9
  /**
10
10
  * Run a full instance lifecycle:
11
11
  * 1. Create instance (with worktree)
12
- * 2. Hold round-table meeting
13
- * 3. Execute tasks
14
- * 4. Create PR
15
- * 5. Clean up
12
+ * 2. Team Lead plans tasks (1 LLM call)
13
+ * 3. Execute tasks in parallel
14
+ * 4. Gated review/rework cycles (lead → QA)
15
+ * 5. Create PR
16
+ * 6. Clean up
16
17
  */
17
18
  export declare function runInstance(params: {
18
19
  squad: Squad;
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/squad/execution/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxC,OAAO,EAEN,KAAK,QAAQ,EAMb,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,SAAS;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE;IACzC,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1E,GAAG,OAAO,CAAC,SAAS,CAAC,CA+DrB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/squad/execution/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxC,OAAO,EAEN,KAAK,QAAQ,EAOb,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,SAAS;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE;IACzC,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1E,GAAG,OAAO,CAAC,SAAS,CAAC,CAkErB"}
@@ -1,14 +1,15 @@
1
1
  import { createChildLogger } from '../../logging/logger.js';
2
2
  import { bootSquad, getSquadRuntime } from '../manager.js';
3
- import { cleanupInstance, createInstance, createPullRequest, executeTasks, runMeeting, } from './index.js';
3
+ import { cleanupInstance, createInstance, createPullRequest, executeTasks, planInstance, reviewWork, } from './index.js';
4
4
  const logger = () => createChildLogger('runner');
5
5
  /**
6
6
  * Run a full instance lifecycle:
7
7
  * 1. Create instance (with worktree)
8
- * 2. Hold round-table meeting
9
- * 3. Execute tasks
10
- * 4. Create PR
11
- * 5. Clean up
8
+ * 2. Team Lead plans tasks (1 LLM call)
9
+ * 3. Execute tasks in parallel
10
+ * 4. Gated review/rework cycles (lead → QA)
11
+ * 5. Create PR
12
+ * 6. Clean up
12
13
  */
13
14
  export async function runInstance(params) {
14
15
  const log = logger();
@@ -22,30 +23,32 @@ export async function runInstance(params) {
22
23
  const instance = await createInstance({ squad, issueRef, objective });
23
24
  log.info({ instanceId: instance.id }, 'Starting instance run');
24
25
  try {
25
- // 2. Run meeting
26
- const meetingResult = await runMeeting({ instance, runtime, objective, attachments });
27
- if (!meetingResult.consensus) {
28
- log.warn({ instanceId: instance.id }, 'Meeting did not reach consensus');
26
+ // 2. Team Lead plans
27
+ const planResult = await planInstance({ instance, runtime, objective, attachments });
28
+ if (instance.tasks.length === 0) {
29
+ log.warn({ instanceId: instance.id }, 'No tasks generated from planning');
29
30
  return {
30
31
  instanceId: instance.id,
31
32
  success: false,
32
- error: `Meeting failed to reach consensus${meetingResult.vetoReason ? `: ${meetingResult.vetoReason}` : ''}`,
33
+ error: 'Planning produced no actionable tasks',
33
34
  };
34
35
  }
35
- if (instance.tasks.length === 0) {
36
- log.warn({ instanceId: instance.id }, 'No tasks generated from meeting');
36
+ // 3. Execute tasks in parallel
37
+ await executeTasks({ instance, runtime });
38
+ // 4. Gated review/rework cycles
39
+ const reviewResult = await reviewWork({ instance, runtime, objective });
40
+ if (!reviewResult.approved) {
41
+ await cleanupInstance(instance.id, squad);
37
42
  return {
38
43
  instanceId: instance.id,
39
44
  success: false,
40
- error: 'Meeting produced no actionable tasks',
45
+ error: reviewResult.failureReason ?? 'Review failed',
41
46
  };
42
47
  }
43
- // 3. Execute tasks
44
- await executeTasks({ instance, runtime });
45
- // 4. Create PR
48
+ // 5. Create PR
46
49
  const prTitle = objective.slice(0, 72);
47
50
  const pr = await createPullRequest({ instance, title: prTitle, squadName: squad.name });
48
- // 5. Cleanup (if no PR was created — otherwise keep the branch for review)
51
+ // 6. Cleanup (if no PR was created — otherwise keep the branch for review)
49
52
  if (!pr) {
50
53
  await cleanupInstance(instance.id, squad);
51
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/squad/execution/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/squad/execution/runner.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,22 @@
1
1
  import type { SquadRuntime } from '../manager.js';
2
2
  import { type Instance } from './instance.js';
3
3
  /**
4
- * Execute all tasks in an instance sequentially.
5
- * Team lead reviews each completed task before moving to the next.
4
+ * Execute all tasks in parallel.
5
+ * No per-task review that's handled by the review phase.
6
6
  */
7
7
  export declare function executeTasks(params: {
8
8
  instance: Instance;
9
9
  runtime: SquadRuntime;
10
10
  }): Promise<void>;
11
+ /**
12
+ * Execute tasks that need rework (called during review cycles).
13
+ */
14
+ export declare function executeRework(params: {
15
+ instance: Instance;
16
+ runtime: SquadRuntime;
17
+ reworkTasks: Array<{
18
+ taskId: string;
19
+ feedback: string;
20
+ }>;
21
+ }): Promise<void>;
11
22
  //# sourceMappingURL=tasks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/squad/execution/tasks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,eAAe,CAAC;AAIrF;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGhB"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/squad/execution/tasks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,KAAK,QAAQ,EAAyC,MAAM,eAAe,CAAC;AAIrF;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAehB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC3C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,WAAW,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzD,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ChB"}
@@ -1,11 +1,10 @@
1
1
  import { createChildLogger } from '../../logging/logger.js';
2
- import { getEventBus } from '../event-bus.js';
3
- import { selectModelForRole, selectModelForTask } from '../model-selector.js';
2
+ import { selectModelForTask } from '../model-selector.js';
4
3
  import { transitionInstance } from './instance.js';
5
4
  const logger = () => createChildLogger('task-exec');
6
5
  /**
7
- * Execute all tasks in an instance sequentially.
8
- * Team lead reviews each completed task before moving to the next.
6
+ * Execute all tasks in parallel.
7
+ * No per-task review that's handled by the review phase.
9
8
  */
10
9
  export async function executeTasks(params) {
11
10
  const log = logger();
@@ -14,77 +13,77 @@ export async function executeTasks(params) {
14
13
  const teamLead = runtime.members.get('technical-pm');
15
14
  if (!teamLead)
16
15
  throw new Error('No team lead for task execution');
17
- for (const task of instance.tasks) {
18
- if (task.status === 'done')
19
- continue;
20
- log.info({ taskId: task.id, assignedTo: task.assignedTo, modelTier: task.modelTier }, 'Executing task');
16
+ // Execute all tasks concurrently
17
+ await Promise.all(instance.tasks
18
+ .filter((task) => task.status !== 'done')
19
+ .map((task) => executeTask(task, instance, runtime, log)));
20
+ }
21
+ /**
22
+ * Execute tasks that need rework (called during review cycles).
23
+ */
24
+ export async function executeRework(params) {
25
+ const log = logger();
26
+ const { instance, runtime, reworkTasks } = params;
27
+ await Promise.all(reworkTasks.map(async ({ taskId, feedback }) => {
28
+ const task = instance.tasks.find((t) => t.id === taskId);
29
+ if (!task)
30
+ return;
31
+ task.retryCount++;
21
32
  task.status = 'in_progress';
22
33
  const agent = runtime.members.get(task.assignedTo);
23
34
  if (!agent) {
24
- log.warn({ role: task.assignedTo }, 'No agent for assigned role, team lead will handle');
25
- // Reassign to team lead for delegation decision
26
- task.result = `No agent with role '${task.assignedTo}' available.`;
27
35
  task.status = 'failed';
28
- continue;
36
+ task.result = `No agent with role '${task.assignedTo}' available.`;
37
+ return;
29
38
  }
30
- // Select model based on task tier and retry count
31
- const taskModel = selectModelForTask(task.modelTier, task.retryCount);
32
- if (agent.getModel() !== taskModel) {
33
- await agent.switchModel(taskModel);
39
+ // Track activity under this instance
40
+ agent.setInstanceId(instance.id);
41
+ const model = selectModelForTask(task.modelTier, task.retryCount);
42
+ if (agent.getModel() !== model) {
43
+ await agent.switchModel(model);
34
44
  }
35
45
  try {
36
- // Agent executes the task
37
46
  const workingDir = instance.worktree?.path ?? '';
38
- const taskPrompt = buildTaskPrompt(task, workingDir, instance);
39
- const result = await agent.send(taskPrompt);
47
+ const result = await agent.send(`Your previous work on "${task.description}" needs revision.\n\nFeedback: ${feedback}\n\n${workingDir ? `Working directory: ${workingDir}\n\n` : ''}Please address this feedback and report your updated results.`);
40
48
  task.result = result;
41
- // Team lead reviews (switch to reasoning for review)
42
- const reviewModel = selectModelForRole('technical-pm', 'review');
43
- if (teamLead.getModel() !== reviewModel) {
44
- await teamLead.switchModel(reviewModel);
45
- }
46
- const review = await teamLead.send(`An agent (${task.assignedTo}) completed a task. Review their work:\n\nTask: ${task.description}\n\nAgent's report:\n${result.slice(0, 2000)}\n\nIs this satisfactory? Reply with:\n- "APPROVED" if the work meets requirements\n- "REDO: <feedback>" if it needs changes`);
47
- if (review.toUpperCase().includes('APPROVED')) {
48
- task.status = 'done';
49
- log.info({ taskId: task.id }, 'Task approved');
50
- }
51
- else if (review.toUpperCase().includes('REDO:')) {
52
- // Retry with escalated model
53
- task.retryCount++;
54
- const escalatedModel = selectModelForTask(task.modelTier, task.retryCount);
55
- log.info({ taskId: task.id, retryCount: task.retryCount, model: escalatedModel }, 'Task needs revision, escalating model');
56
- if (agent.getModel() !== escalatedModel) {
57
- await agent.switchModel(escalatedModel);
58
- }
59
- const feedback = review.replace(/^.*REDO:\s*/i, '');
60
- const retry = await agent.send(`Your work on "${task.description}" needs revision. Feedback from team lead:\n\n${feedback}\n\nPlease address this feedback and report your updated results.`);
61
- task.result = retry;
62
- task.status = 'done'; // Accept after one retry
63
- log.info({ taskId: task.id }, 'Task completed after revision with escalated model');
64
- }
65
- else {
66
- task.status = 'done';
67
- }
49
+ task.status = 'done';
50
+ log.info({ taskId: task.id, retryCount: task.retryCount }, 'Rework task completed');
68
51
  }
69
52
  catch (err) {
70
- log.error({ err, taskId: task.id }, 'Task execution failed');
53
+ log.error({ err, taskId: task.id }, 'Rework task failed');
71
54
  task.status = 'failed';
72
55
  task.result = `Error: ${err instanceof Error ? err.message : String(err)}`;
73
56
  }
57
+ }));
58
+ }
59
+ async function executeTask(task, instance, runtime, log) {
60
+ log.info({ taskId: task.id, assignedTo: task.assignedTo, modelTier: task.modelTier }, 'Executing task');
61
+ task.status = 'in_progress';
62
+ const agent = runtime.members.get(task.assignedTo);
63
+ if (!agent) {
64
+ log.warn({ role: task.assignedTo }, 'No agent for assigned role');
65
+ task.result = `No agent with role '${task.assignedTo}' available.`;
66
+ task.status = 'failed';
67
+ return;
68
+ }
69
+ // Track activity under this instance
70
+ agent.setInstanceId(instance.id);
71
+ const model = selectModelForTask(task.modelTier, task.retryCount);
72
+ if (agent.getModel() !== model) {
73
+ await agent.switchModel(model);
74
74
  }
75
- // Move to reviewing phase
76
- await transitionInstance(instance.id, 'reviewing');
77
- // Team lead does final review
78
- const taskSummary = instance.tasks
79
- .map((t) => `- [${t.status}] ${t.description} (${t.assignedTo})`)
80
- .join('\n');
81
- const finalReview = await teamLead.send(`All tasks have been executed. Here's the summary:\n\n${taskSummary}\n\nProvide a final assessment. Should we proceed to create a PR, or are there critical issues? Reply with:\n- "READY_FOR_PR: <PR title>" if ready\n- "NEEDS_WORK: <what's missing>" if not ready`);
82
- if (finalReview.toUpperCase().includes('READY_FOR_PR:')) {
83
- instance.meetingLog.push(`[technical-pm] Final review: ${finalReview}`);
75
+ try {
76
+ const workingDir = instance.worktree?.path ?? '';
77
+ const taskPrompt = buildTaskPrompt(task, workingDir, instance);
78
+ const result = await agent.send(taskPrompt);
79
+ task.result = result;
80
+ task.status = 'done';
81
+ log.info({ taskId: task.id }, 'Task completed');
84
82
  }
85
- else {
86
- // Mark complete anyway we don't loop indefinitely
87
- instance.meetingLog.push(`[technical-pm] Final review (issues noted): ${finalReview}`);
83
+ catch (err) {
84
+ log.error({ err, taskId: task.id }, 'Task execution failed');
85
+ task.status = 'failed';
86
+ task.result = `Error: ${err instanceof Error ? err.message : String(err)}`;
88
87
  }
89
88
  }
90
89
  function buildTaskPrompt(task, workingDir, instance) {
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/squad/execution/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/squad/execution/tasks.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export type SquadEventType = 'squad:created' | 'squad:disbanded' | 'squad:member_added' | 'squad:member_retired';
2
2
  export type AgentEventType = 'agent:task_started' | 'agent:task_completed' | 'agent:tool_call' | 'agent:tool_result' | 'agent:thought' | 'agent:decision' | 'agent:error' | 'agent:permission_denied';
3
- export type InstanceEventType = 'instance:created' | 'instance:meeting_started' | 'instance:meeting_complete' | 'instance:work_started' | 'instance:pr_created' | 'instance:complete' | 'instance:failed';
3
+ export type InstanceEventType = 'instance:created' | 'instance:meeting_started' | 'instance:meeting_complete' | 'instance:planning_complete' | 'instance:review_cycle' | 'instance:work_started' | 'instance:pr_created' | 'instance:complete' | 'instance:failed';
4
4
  export type MeetingEventType = 'meeting:contribution' | 'meeting:consensus_reached' | 'meeting:veto';
5
5
  export type InboxEventType = 'inbox:new' | 'inbox:resolved';
6
6
  export type ScheduleEventType = 'schedule:fired' | 'schedule:completed' | 'schedule:failed';
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACvB,eAAe,GACf,iBAAiB,GACjB,oBAAoB,GACpB,sBAAsB,CAAC;AAE1B,MAAM,MAAM,cAAc,GACvB,oBAAoB,GACpB,sBAAsB,GACtB,iBAAiB,GACjB,mBAAmB,GACnB,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,yBAAyB,CAAC;AAE7B,MAAM,MAAM,iBAAiB,GAC1B,kBAAkB,GAClB,0BAA0B,GAC1B,2BAA2B,GAC3B,uBAAuB,GACvB,qBAAqB,GACrB,mBAAmB,GACnB,iBAAiB,CAAC;AAErB,MAAM,MAAM,gBAAgB,GACzB,sBAAsB,GACtB,2BAA2B,GAC3B,cAAc,CAAC;AAElB,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;AAE5F,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC5C,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC5C,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC/C,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC9C,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC5C,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC/C,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,OAAO,GAChB,UAAU,GACV,UAAU,GACV,aAAa,GACb,YAAY,GACZ,UAAU,GACV,aAAa,CAAC"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACvB,eAAe,GACf,iBAAiB,GACjB,oBAAoB,GACpB,sBAAsB,CAAC;AAE1B,MAAM,MAAM,cAAc,GACvB,oBAAoB,GACpB,sBAAsB,GACtB,iBAAiB,GACjB,mBAAmB,GACnB,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,yBAAyB,CAAC;AAE7B,MAAM,MAAM,iBAAiB,GAC1B,kBAAkB,GAClB,0BAA0B,GAC1B,2BAA2B,GAC3B,4BAA4B,GAC5B,uBAAuB,GACvB,uBAAuB,GACvB,qBAAqB,GACrB,mBAAmB,GACnB,iBAAiB,CAAC;AAErB,MAAM,MAAM,gBAAgB,GACzB,sBAAsB,GACtB,2BAA2B,GAC3B,cAAc,CAAC;AAElB,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;AAE5F,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC5C,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC5C,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC/C,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC9C,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC5C,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC/C,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,OAAO,GAChB,UAAU,GACV,UAAU,GACV,aAAa,GACb,YAAY,GACZ,UAAU,GACV,aAAa,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@io/shared",
3
- "version": "3.2.3",
3
+ "version": "3.3.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -18,6 +18,8 @@ export type InstanceEventType =
18
18
  | 'instance:created'
19
19
  | 'instance:meeting_started'
20
20
  | 'instance:meeting_complete'
21
+ | 'instance:planning_complete'
22
+ | 'instance:review_cycle'
21
23
  | 'instance:work_started'
22
24
  | 'instance:pr_created'
23
25
  | 'instance:complete'