@bradygaster/squad-cli 0.8.5 → 0.8.17-preview

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 (153) hide show
  1. package/README.md +2 -2
  2. package/dist/cli/commands/copilot-bridge.d.ts +42 -0
  3. package/dist/cli/commands/copilot-bridge.d.ts.map +1 -0
  4. package/dist/cli/commands/copilot-bridge.js +191 -0
  5. package/dist/cli/commands/copilot-bridge.js.map +1 -0
  6. package/dist/cli/commands/import.js.map +1 -1
  7. package/dist/cli/commands/rc-tunnel.d.ts +30 -0
  8. package/dist/cli/commands/rc-tunnel.d.ts.map +1 -0
  9. package/dist/cli/commands/rc-tunnel.js +107 -0
  10. package/dist/cli/commands/rc-tunnel.js.map +1 -0
  11. package/dist/cli/commands/rc.d.ts +13 -0
  12. package/dist/cli/commands/rc.d.ts.map +1 -0
  13. package/dist/cli/commands/rc.js +270 -0
  14. package/dist/cli/commands/rc.js.map +1 -0
  15. package/dist/cli/commands/start.d.ts +18 -0
  16. package/dist/cli/commands/start.d.ts.map +1 -0
  17. package/dist/cli/commands/start.js +219 -0
  18. package/dist/cli/commands/start.js.map +1 -0
  19. package/dist/cli/commands/upstream.js.map +1 -1
  20. package/dist/cli/commands/watch.d.ts +10 -0
  21. package/dist/cli/commands/watch.d.ts.map +1 -1
  22. package/dist/cli/commands/watch.js +181 -65
  23. package/dist/cli/commands/watch.js.map +1 -1
  24. package/dist/cli/core/cast.d.ts +40 -0
  25. package/dist/cli/core/cast.d.ts.map +1 -0
  26. package/dist/cli/core/cast.js +442 -0
  27. package/dist/cli/core/cast.js.map +1 -0
  28. package/dist/cli/core/gh-cli.d.ts +25 -0
  29. package/dist/cli/core/gh-cli.d.ts.map +1 -1
  30. package/dist/cli/core/gh-cli.js +15 -1
  31. package/dist/cli/core/gh-cli.js.map +1 -1
  32. package/dist/cli/core/init.d.ts +9 -1
  33. package/dist/cli/core/init.d.ts.map +1 -1
  34. package/dist/cli/core/init.js +108 -13
  35. package/dist/cli/core/init.js.map +1 -1
  36. package/dist/cli/core/migrations.js.map +1 -1
  37. package/dist/cli/core/nap.d.ts +37 -0
  38. package/dist/cli/core/nap.d.ts.map +1 -0
  39. package/dist/cli/core/nap.js +528 -0
  40. package/dist/cli/core/nap.js.map +1 -0
  41. package/dist/cli/core/output.d.ts +5 -0
  42. package/dist/cli/core/output.d.ts.map +1 -1
  43. package/dist/cli/core/output.js +7 -0
  44. package/dist/cli/core/output.js.map +1 -1
  45. package/dist/cli/core/upgrade.d.ts +0 -1
  46. package/dist/cli/core/upgrade.d.ts.map +1 -1
  47. package/dist/cli/core/upgrade.js.map +1 -1
  48. package/dist/cli/core/version.js.map +1 -1
  49. package/dist/cli/shell/agent-status.d.ts +11 -0
  50. package/dist/cli/shell/agent-status.d.ts.map +1 -0
  51. package/dist/cli/shell/agent-status.js +26 -0
  52. package/dist/cli/shell/agent-status.js.map +1 -0
  53. package/dist/cli/shell/commands.d.ts +10 -0
  54. package/dist/cli/shell/commands.d.ts.map +1 -1
  55. package/dist/cli/shell/commands.js +143 -29
  56. package/dist/cli/shell/commands.js.map +1 -1
  57. package/dist/cli/shell/components/AgentPanel.d.ts +1 -4
  58. package/dist/cli/shell/components/AgentPanel.d.ts.map +1 -1
  59. package/dist/cli/shell/components/AgentPanel.js +88 -6
  60. package/dist/cli/shell/components/AgentPanel.js.map +1 -1
  61. package/dist/cli/shell/components/App.d.ts +11 -6
  62. package/dist/cli/shell/components/App.d.ts.map +1 -1
  63. package/dist/cli/shell/components/App.js +212 -35
  64. package/dist/cli/shell/components/App.js.map +1 -1
  65. package/dist/cli/shell/components/ErrorBoundary.d.ts +22 -0
  66. package/dist/cli/shell/components/ErrorBoundary.d.ts.map +1 -0
  67. package/dist/cli/shell/components/ErrorBoundary.js +31 -0
  68. package/dist/cli/shell/components/ErrorBoundary.js.map +1 -0
  69. package/dist/cli/shell/components/InputPrompt.d.ts +3 -0
  70. package/dist/cli/shell/components/InputPrompt.d.ts.map +1 -1
  71. package/dist/cli/shell/components/InputPrompt.js +155 -13
  72. package/dist/cli/shell/components/InputPrompt.js.map +1 -1
  73. package/dist/cli/shell/components/MessageStream.d.ts +17 -4
  74. package/dist/cli/shell/components/MessageStream.d.ts.map +1 -1
  75. package/dist/cli/shell/components/MessageStream.js +215 -23
  76. package/dist/cli/shell/components/MessageStream.js.map +1 -1
  77. package/dist/cli/shell/components/Separator.d.ts +17 -0
  78. package/dist/cli/shell/components/Separator.d.ts.map +1 -0
  79. package/dist/cli/shell/components/Separator.js +10 -0
  80. package/dist/cli/shell/components/Separator.js.map +1 -0
  81. package/dist/cli/shell/components/ThinkingIndicator.d.ts +21 -0
  82. package/dist/cli/shell/components/ThinkingIndicator.d.ts.map +1 -0
  83. package/dist/cli/shell/components/ThinkingIndicator.js +102 -0
  84. package/dist/cli/shell/components/ThinkingIndicator.js.map +1 -0
  85. package/dist/cli/shell/components/index.d.ts +3 -0
  86. package/dist/cli/shell/components/index.d.ts.map +1 -1
  87. package/dist/cli/shell/components/index.js +2 -0
  88. package/dist/cli/shell/components/index.js.map +1 -1
  89. package/dist/cli/shell/coordinator.d.ts +10 -0
  90. package/dist/cli/shell/coordinator.d.ts.map +1 -1
  91. package/dist/cli/shell/coordinator.js +99 -4
  92. package/dist/cli/shell/coordinator.js.map +1 -1
  93. package/dist/cli/shell/error-messages.d.ts +21 -0
  94. package/dist/cli/shell/error-messages.d.ts.map +1 -0
  95. package/dist/cli/shell/error-messages.js +61 -0
  96. package/dist/cli/shell/error-messages.js.map +1 -0
  97. package/dist/cli/shell/index.d.ts +24 -3
  98. package/dist/cli/shell/index.d.ts.map +1 -1
  99. package/dist/cli/shell/index.js +943 -34
  100. package/dist/cli/shell/index.js.map +1 -1
  101. package/dist/cli/shell/lifecycle.d.ts +2 -0
  102. package/dist/cli/shell/lifecycle.d.ts.map +1 -1
  103. package/dist/cli/shell/lifecycle.js +59 -6
  104. package/dist/cli/shell/lifecycle.js.map +1 -1
  105. package/dist/cli/shell/memory.d.ts +6 -1
  106. package/dist/cli/shell/memory.d.ts.map +1 -1
  107. package/dist/cli/shell/memory.js +12 -1
  108. package/dist/cli/shell/memory.js.map +1 -1
  109. package/dist/cli/shell/router.d.ts +16 -0
  110. package/dist/cli/shell/router.d.ts.map +1 -1
  111. package/dist/cli/shell/router.js +27 -0
  112. package/dist/cli/shell/router.js.map +1 -1
  113. package/dist/cli/shell/session-store.d.ts +47 -0
  114. package/dist/cli/shell/session-store.d.ts.map +1 -0
  115. package/dist/cli/shell/session-store.js +125 -0
  116. package/dist/cli/shell/session-store.js.map +1 -0
  117. package/dist/cli/shell/sessions.d.ts +2 -0
  118. package/dist/cli/shell/sessions.d.ts.map +1 -1
  119. package/dist/cli/shell/sessions.js +19 -5
  120. package/dist/cli/shell/sessions.js.map +1 -1
  121. package/dist/cli/shell/shell-metrics.d.ts +34 -0
  122. package/dist/cli/shell/shell-metrics.d.ts.map +1 -0
  123. package/dist/cli/shell/shell-metrics.js +98 -0
  124. package/dist/cli/shell/shell-metrics.js.map +1 -0
  125. package/dist/cli/shell/spawn.d.ts.map +1 -1
  126. package/dist/cli/shell/spawn.js +20 -6
  127. package/dist/cli/shell/spawn.js.map +1 -1
  128. package/dist/cli/shell/terminal.d.ts +26 -0
  129. package/dist/cli/shell/terminal.d.ts.map +1 -1
  130. package/dist/cli/shell/terminal.js +65 -2
  131. package/dist/cli/shell/terminal.js.map +1 -1
  132. package/dist/cli/shell/theme-colors.d.ts +39 -0
  133. package/dist/cli/shell/theme-colors.d.ts.map +1 -0
  134. package/dist/cli/shell/theme-colors.js +39 -0
  135. package/dist/cli/shell/theme-colors.js.map +1 -0
  136. package/dist/cli/shell/types.d.ts +2 -0
  137. package/dist/cli/shell/types.d.ts.map +1 -1
  138. package/dist/cli/shell/useAnimation.d.ts +42 -0
  139. package/dist/cli/shell/useAnimation.d.ts.map +1 -0
  140. package/dist/cli/shell/useAnimation.js +139 -0
  141. package/dist/cli/shell/useAnimation.js.map +1 -0
  142. package/dist/cli-entry.d.ts +0 -7
  143. package/dist/cli-entry.d.ts.map +1 -1
  144. package/dist/cli-entry.js +701 -96
  145. package/dist/cli-entry.js.map +1 -1
  146. package/package.json +18 -2
  147. package/templates/orchestration-log.md +1 -1
  148. package/templates/package.json +3 -0
  149. package/templates/ralph-triage.js +543 -0
  150. package/templates/scribe-charter.md +1 -1
  151. package/templates/squad.agent.md +10 -10
  152. package/templates/workflows/squad-heartbeat.yml +52 -196
  153. package/templates/workflows/squad-insider-release.yml +1 -1
@@ -6,79 +6,131 @@ import path from 'node:path';
6
6
  import { detectSquadDir } from '../core/detect-squad-dir.js';
7
7
  import { fatal } from '../core/errors.js';
8
8
  import { GREEN, RED, DIM, BOLD, RESET, YELLOW } from '../core/output.js';
9
- import { ghAvailable, ghAuthenticated, ghIssueList, ghIssueEdit } from '../core/gh-cli.js';
10
- /**
11
- * Parse team members from team.md roster
12
- */
13
- function parseMembers(text) {
14
- const lines = text.split('\n');
15
- const members = [];
16
- let inMembersTable = false;
17
- for (const line of lines) {
18
- if (line.startsWith('## Members')) {
19
- inMembersTable = true;
20
- continue;
21
- }
22
- if (inMembersTable && line.startsWith('## '))
23
- break;
24
- if (inMembersTable && line.startsWith('|') && !line.includes('---') && !line.includes('Name')) {
25
- const cells = line.split('|').map(c => c.trim()).filter(Boolean);
26
- if (cells.length >= 2 && !['Scribe', 'Ralph'].includes(cells[0])) {
27
- members.push({
28
- name: cells[0],
29
- role: cells[1],
30
- label: `squad:${cells[0].toLowerCase()}`
31
- });
32
- }
33
- }
9
+ import { parseRoutingRules, parseModuleOwnership, parseRoster, triageIssue, } from '@bradygaster/squad-sdk/ralph/triage';
10
+ import { RalphMonitor } from '@bradygaster/squad-sdk/ralph';
11
+ import { EventBus } from '@bradygaster/squad-sdk/runtime/event-bus';
12
+ import { ghAvailable, ghAuthenticated, ghIssueList, ghIssueEdit, ghPrList } from '../core/gh-cli.js';
13
+ export function reportBoard(state, round) {
14
+ const total = Object.values(state).reduce((a, b) => a + b, 0);
15
+ if (total === 0) {
16
+ console.log(`${DIM}📋 Board is clear — Ralph is idling${RESET}`);
17
+ return;
34
18
  }
35
- return members;
19
+ console.log(`\n${BOLD}🔄 Ralph — Round ${round}${RESET}`);
20
+ console.log('━'.repeat(30));
21
+ if (state.untriaged > 0)
22
+ console.log(` 🔴 Untriaged: ${state.untriaged}`);
23
+ if (state.assigned > 0)
24
+ console.log(` 🟡 Assigned: ${state.assigned}`);
25
+ if (state.drafts > 0)
26
+ console.log(` 🟡 Draft PRs: ${state.drafts}`);
27
+ if (state.changesRequested > 0)
28
+ console.log(` ⚠️ Changes requested: ${state.changesRequested}`);
29
+ if (state.ciFailures > 0)
30
+ console.log(` ❌ CI failures: ${state.ciFailures}`);
31
+ if (state.needsReview > 0)
32
+ console.log(` 🔵 Needs review: ${state.needsReview}`);
33
+ if (state.readyToMerge > 0)
34
+ console.log(` 🟢 Ready to merge: ${state.readyToMerge}`);
35
+ console.log();
36
36
  }
37
- /**
38
- * Auto-triage an issue based on content and team roster
39
- */
40
- function triageIssue(issue, members) {
41
- const issueText = issue.title.toLowerCase();
42
- // Domain-based routing
43
- for (const member of members) {
44
- const role = member.role.toLowerCase();
45
- // Frontend/UI
46
- if ((role.includes('frontend') || role.includes('ui')) &&
47
- (issueText.includes('ui') || issueText.includes('frontend') || issueText.includes('css'))) {
48
- return { member, reason: 'frontend/UI domain' };
37
+ function emptyBoardState() {
38
+ return {
39
+ untriaged: 0,
40
+ assigned: 0,
41
+ drafts: 0,
42
+ needsReview: 0,
43
+ changesRequested: 0,
44
+ ciFailures: 0,
45
+ readyToMerge: 0,
46
+ };
47
+ }
48
+ async function checkPRs(roster) {
49
+ const timestamp = new Date().toLocaleTimeString();
50
+ const prs = await ghPrList({ state: 'open', limit: 20 });
51
+ // Filter to squad-related PRs (has squad label or branch starts with squad/)
52
+ const squadPRs = prs.filter(pr => pr.labels.some(l => l.name.startsWith('squad')) ||
53
+ pr.headRefName.startsWith('squad/'));
54
+ if (squadPRs.length === 0) {
55
+ return {
56
+ drafts: 0,
57
+ needsReview: 0,
58
+ changesRequested: 0,
59
+ ciFailures: 0,
60
+ readyToMerge: 0,
61
+ totalOpen: 0,
62
+ };
63
+ }
64
+ const drafts = squadPRs.filter(pr => pr.isDraft);
65
+ const changesRequested = squadPRs.filter(pr => pr.reviewDecision === 'CHANGES_REQUESTED');
66
+ const approved = squadPRs.filter(pr => pr.reviewDecision === 'APPROVED' && !pr.isDraft);
67
+ const ciFailures = squadPRs.filter(pr => pr.statusCheckRollup?.some(check => check.state === 'FAILURE' || check.state === 'ERROR'));
68
+ const readyToMerge = approved.filter(pr => !pr.statusCheckRollup?.some(c => c.state === 'FAILURE' || c.state === 'ERROR' || c.state === 'PENDING'));
69
+ const changesRequestedSet = new Set(changesRequested.map(pr => pr.number));
70
+ const ciFailureSet = new Set(ciFailures.map(pr => pr.number));
71
+ const readyToMergeSet = new Set(readyToMerge.map(pr => pr.number));
72
+ const needsReview = squadPRs.filter(pr => !pr.isDraft &&
73
+ !changesRequestedSet.has(pr.number) &&
74
+ !ciFailureSet.has(pr.number) &&
75
+ !readyToMergeSet.has(pr.number));
76
+ const memberNames = new Set(roster.map(m => m.name.toLowerCase()));
77
+ // Report each category
78
+ if (drafts.length > 0) {
79
+ console.log(`${DIM}[${timestamp}]${RESET} 🟡 ${drafts.length} draft PR(s) in progress`);
80
+ for (const pr of drafts) {
81
+ console.log(` ${DIM}PR #${pr.number}: ${pr.title} (${pr.author.login})${RESET}`);
49
82
  }
50
- // Backend/API
51
- if ((role.includes('backend') || role.includes('api') || role.includes('server')) &&
52
- (issueText.includes('api') || issueText.includes('backend') || issueText.includes('database'))) {
53
- return { member, reason: 'backend/API domain' };
83
+ }
84
+ if (changesRequested.length > 0) {
85
+ console.log(`${YELLOW}[${timestamp}]${RESET} ⚠️ ${changesRequested.length} PR(s) need revision`);
86
+ for (const pr of changesRequested) {
87
+ const owner = memberNames.has(pr.author.login.toLowerCase()) ? ` — ${pr.author.login}` : '';
88
+ console.log(` PR #${pr.number}: ${pr.title} — changes requested${owner}`);
54
89
  }
55
- // Test/QA
56
- if ((role.includes('test') || role.includes('qa')) &&
57
- (issueText.includes('test') || issueText.includes('bug') || issueText.includes('fix'))) {
58
- return { member, reason: 'testing/QA domain' };
90
+ }
91
+ if (ciFailures.length > 0) {
92
+ console.log(`${RED}[${timestamp}]${RESET} ${ciFailures.length} PR(s) with CI failures`);
93
+ for (const pr of ciFailures) {
94
+ const failedChecks = pr.statusCheckRollup?.filter(c => c.state === 'FAILURE' || c.state === 'ERROR') || [];
95
+ const owner = memberNames.has(pr.author.login.toLowerCase()) ? ` — ${pr.author.login}` : '';
96
+ console.log(` PR #${pr.number}: ${pr.title}${owner} — ${failedChecks.map(c => c.name).join(', ')}`);
59
97
  }
60
98
  }
61
- // Fall back to Lead if no match
62
- const lead = members.find(m => m.role.toLowerCase().includes('lead') || m.role.toLowerCase().includes('architect'));
63
- if (lead) {
64
- return { member: lead, reason: 'no domain match — routed to Lead' };
99
+ if (approved.length > 0) {
100
+ if (readyToMerge.length > 0) {
101
+ console.log(`${GREEN}[${timestamp}]${RESET} 🟢 ${readyToMerge.length} PR(s) ready to merge`);
102
+ for (const pr of readyToMerge) {
103
+ console.log(` PR #${pr.number}: ${pr.title} — approved, CI green`);
104
+ }
105
+ }
65
106
  }
66
- return null;
107
+ return {
108
+ drafts: drafts.length,
109
+ needsReview: needsReview.length,
110
+ changesRequested: changesRequestedSet.size,
111
+ ciFailures: ciFailureSet.size,
112
+ readyToMerge: readyToMergeSet.size,
113
+ totalOpen: squadPRs.length,
114
+ };
67
115
  }
68
116
  /**
69
117
  * Run a single check cycle
70
118
  */
71
- async function runCheck(members, hasCopilot, autoAssign) {
119
+ async function runCheck(rules, modules, roster, hasCopilot, autoAssign) {
72
120
  const timestamp = new Date().toLocaleTimeString();
73
121
  try {
74
122
  // Fetch open issues with squad label
75
123
  const issues = await ghIssueList({ label: 'squad', state: 'open', limit: 20 });
76
124
  // Find untriaged issues (no squad:{member} label)
77
- const memberLabels = members.map(m => m.label);
125
+ const memberLabels = roster.map(m => m.label);
78
126
  const untriaged = issues.filter(issue => {
79
127
  const issueLabels = issue.labels.map(l => l.name);
80
128
  return !memberLabels.some(ml => issueLabels.includes(ml));
81
129
  });
130
+ const assignedIssues = issues.filter(issue => {
131
+ const issueLabels = issue.labels.map(l => l.name);
132
+ return memberLabels.some(ml => issueLabels.includes(ml));
133
+ });
82
134
  // Find unassigned squad:copilot issues
83
135
  let unassignedCopilot = [];
84
136
  if (hasCopilot && autoAssign) {
@@ -90,17 +142,19 @@ async function runCheck(members, hasCopilot, autoAssign) {
90
142
  // Label may not exist yet
91
143
  }
92
144
  }
93
- if (untriaged.length === 0 && unassignedCopilot.length === 0) {
94
- console.log(`${DIM}[${timestamp}]${RESET} 📋 Board is clear — no pending work`);
95
- return;
96
- }
97
145
  // Triage untriaged issues
98
146
  for (const issue of untriaged) {
99
- const triage = triageIssue(issue, members);
147
+ const triageInput = {
148
+ number: issue.number,
149
+ title: issue.title,
150
+ body: issue.body,
151
+ labels: issue.labels.map((l) => l.name),
152
+ };
153
+ const triage = triageIssue(triageInput, rules, modules, roster);
100
154
  if (triage) {
101
155
  try {
102
- await ghIssueEdit(issue.number, { addLabel: triage.member.label });
103
- console.log(`${GREEN}✓${RESET} [${timestamp}] Triaged #${issue.number} "${issue.title}" → ${triage.member.name} (${triage.reason})`);
156
+ await ghIssueEdit(issue.number, { addLabel: triage.agent.label });
157
+ console.log(`${GREEN}✓${RESET} [${timestamp}] Triaged #${issue.number} "${issue.title}" → ${triage.agent.name} (${triage.reason})`);
104
158
  }
105
159
  catch (e) {
106
160
  const err = e;
@@ -119,10 +173,17 @@ async function runCheck(members, hasCopilot, autoAssign) {
119
173
  console.error(`${RED}✗${RESET} [${timestamp}] Failed to assign @copilot to #${issue.number}: ${err.message}`);
120
174
  }
121
175
  }
176
+ const prState = await checkPRs(roster);
177
+ return {
178
+ untriaged: untriaged.length,
179
+ assigned: assignedIssues.length,
180
+ ...prState,
181
+ };
122
182
  }
123
183
  catch (e) {
124
184
  const err = e;
125
185
  console.error(`${RED}✗${RESET} [${timestamp}] Check failed: ${err.message}`);
186
+ return emptyBoardState();
126
187
  }
127
188
  }
128
189
  /**
@@ -136,6 +197,7 @@ export async function runWatch(dest, intervalMinutes) {
136
197
  // Detect squad directory
137
198
  const squadDirInfo = detectSquadDir(dest);
138
199
  const teamMd = path.join(squadDirInfo.path, 'team.md');
200
+ const routingMdPath = path.join(squadDirInfo.path, 'routing.md');
139
201
  if (!fs.existsSync(teamMd)) {
140
202
  fatal('No squad found — run init first.');
141
203
  }
@@ -150,24 +212,78 @@ export async function runWatch(dest, intervalMinutes) {
150
212
  }
151
213
  // Parse team.md
152
214
  const content = fs.readFileSync(teamMd, 'utf8');
153
- const members = parseMembers(content);
154
- if (members.length === 0) {
215
+ const roster = parseRoster(content);
216
+ const routingContent = fs.existsSync(routingMdPath) ? fs.readFileSync(routingMdPath, 'utf8') : '';
217
+ const rules = parseRoutingRules(routingContent);
218
+ const modules = parseModuleOwnership(routingContent);
219
+ if (roster.length === 0) {
155
220
  fatal('No squad members found in team.md');
156
221
  }
157
222
  const hasCopilot = content.includes('🤖 Coding Agent') || content.includes('@copilot');
158
223
  const autoAssign = content.includes('<!-- copilot-auto-assign: true -->');
224
+ const monitorSessionId = 'ralph-watch';
225
+ const eventBus = new EventBus();
226
+ const monitor = new RalphMonitor({
227
+ teamRoot: path.dirname(squadDirInfo.path),
228
+ healthCheckInterval: intervalMinutes * 60 * 1000,
229
+ staleSessionThreshold: intervalMinutes * 60 * 1000 * 3,
230
+ statePath: path.join(squadDirInfo.path, '.ralph-state.json'),
231
+ });
232
+ await monitor.start(eventBus);
233
+ await eventBus.emit({
234
+ type: 'session:created',
235
+ sessionId: monitorSessionId,
236
+ agentName: 'Ralph',
237
+ payload: { intervalMinutes },
238
+ timestamp: new Date(),
239
+ });
159
240
  // Print startup banner
160
241
  console.log(`\n${BOLD}🔄 Ralph — Watch Mode${RESET}`);
161
242
  console.log(`${DIM}Polling every ${intervalMinutes} minute(s) for squad work. Ctrl+C to stop.${RESET}\n`);
243
+ let round = 0;
162
244
  // Run immediately, then on interval
163
- await runCheck(members, hasCopilot, autoAssign);
245
+ round++;
246
+ const state = await runCheck(rules, modules, roster, hasCopilot, autoAssign);
247
+ await eventBus.emit({
248
+ type: 'agent:milestone',
249
+ sessionId: monitorSessionId,
250
+ agentName: 'Ralph',
251
+ payload: { milestone: `Completed watch round ${round}`, task: 'watch cycle' },
252
+ timestamp: new Date(),
253
+ });
254
+ await monitor.healthCheck();
255
+ reportBoard(state, round);
164
256
  return new Promise((resolve) => {
165
257
  const intervalId = setInterval(async () => {
166
- await runCheck(members, hasCopilot, autoAssign);
258
+ round++;
259
+ const roundState = await runCheck(rules, modules, roster, hasCopilot, autoAssign);
260
+ await eventBus.emit({
261
+ type: 'agent:milestone',
262
+ sessionId: monitorSessionId,
263
+ agentName: 'Ralph',
264
+ payload: { milestone: `Completed watch round ${round}`, task: 'watch cycle' },
265
+ timestamp: new Date(),
266
+ });
267
+ await monitor.healthCheck();
268
+ reportBoard(roundState, round);
167
269
  }, intervalMinutes * 60 * 1000);
168
270
  // Graceful shutdown
169
- const shutdown = () => {
271
+ let isShuttingDown = false;
272
+ const shutdown = async () => {
273
+ if (isShuttingDown)
274
+ return;
275
+ isShuttingDown = true;
170
276
  clearInterval(intervalId);
277
+ process.off('SIGINT', shutdown);
278
+ process.off('SIGTERM', shutdown);
279
+ await eventBus.emit({
280
+ type: 'session:destroyed',
281
+ sessionId: monitorSessionId,
282
+ agentName: 'Ralph',
283
+ payload: null,
284
+ timestamp: new Date(),
285
+ });
286
+ await monitor.stop();
171
287
  console.log(`\n${DIM}🔄 Ralph — Watch stopped${RESET}`);
172
288
  resolve();
173
289
  };
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Team casting engine — parses coordinator team proposals and scaffolds agent files.
3
+ * @module cli/core/cast
4
+ */
5
+ export interface CastMember {
6
+ name: string;
7
+ role: string;
8
+ scope: string;
9
+ emoji: string;
10
+ }
11
+ export interface CastProposal {
12
+ members: CastMember[];
13
+ universe: string;
14
+ projectDescription: string;
15
+ }
16
+ export interface CastResult {
17
+ teamRoot: string;
18
+ membersCreated: string[];
19
+ filesCreated: string[];
20
+ }
21
+ /** Map a role string to its emoji. Exported for reuse. */
22
+ export declare function roleToEmoji(role: string): string;
23
+ /**
24
+ * Parse a team proposal from the coordinator's response.
25
+ * Handles multiple formats:
26
+ * 1. Strict INIT_TEAM: format
27
+ * 2. Markdown code blocks wrapping INIT_TEAM
28
+ * 3. Pipe-delimited lines without INIT_TEAM header
29
+ * 4. Emoji-prefixed role lines (🏗️ Name — Role Scope)
30
+ * Returns null only if no team members could be extracted.
31
+ */
32
+ export declare function parseCastResponse(response: string): CastProposal | null;
33
+ /**
34
+ * Create all squad agent files for a cast proposal.
35
+ * teamRoot is the project root (parent of .squad/).
36
+ */
37
+ export declare function createTeam(teamRoot: string, proposal: CastProposal): Promise<CastResult>;
38
+ /** Format a cast proposal as a human-readable summary. */
39
+ export declare function formatCastSummary(proposal: CastProposal): string;
40
+ //# sourceMappingURL=cast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cast.d.ts","sourceRoot":"","sources":["../../../src/cli/core/cast.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAeD,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKhD;AAID;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAuBvE;AAqRD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAiH9F;AAID,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAqBhE"}