@intrect/openswarm 0.17.2 → 0.17.3

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 (256) hide show
  1. package/README.md +21 -5
  2. package/config.example.yaml +18 -0
  3. package/dist/adapters/agenticLoop.d.ts +2 -0
  4. package/dist/adapters/agenticLoop.d.ts.map +1 -1
  5. package/dist/adapters/agenticLoop.js +6 -3
  6. package/dist/adapters/agenticLoop.js.map +1 -1
  7. package/dist/adapters/base.d.ts.map +1 -1
  8. package/dist/adapters/base.js +9 -0
  9. package/dist/adapters/base.js.map +1 -1
  10. package/dist/adapters/claude.d.ts.map +1 -1
  11. package/dist/adapters/claude.js +6 -3
  12. package/dist/adapters/claude.js.map +1 -1
  13. package/dist/adapters/codex.d.ts.map +1 -1
  14. package/dist/adapters/codex.js +3 -2
  15. package/dist/adapters/codex.js.map +1 -1
  16. package/dist/adapters/codexResponses.d.ts +2 -1
  17. package/dist/adapters/codexResponses.d.ts.map +1 -1
  18. package/dist/adapters/codexResponses.js +34 -30
  19. package/dist/adapters/codexResponses.js.map +1 -1
  20. package/dist/adapters/errorClassification.d.ts +11 -0
  21. package/dist/adapters/errorClassification.d.ts.map +1 -1
  22. package/dist/adapters/errorClassification.js +21 -0
  23. package/dist/adapters/errorClassification.js.map +1 -1
  24. package/dist/adapters/gpt.d.ts.map +1 -1
  25. package/dist/adapters/gpt.js +1 -0
  26. package/dist/adapters/gpt.js.map +1 -1
  27. package/dist/adapters/local.d.ts.map +1 -1
  28. package/dist/adapters/local.js +1 -0
  29. package/dist/adapters/local.js.map +1 -1
  30. package/dist/adapters/openrouter.d.ts.map +1 -1
  31. package/dist/adapters/openrouter.js +1 -0
  32. package/dist/adapters/openrouter.js.map +1 -1
  33. package/dist/adapters/processRegistry.d.ts.map +1 -1
  34. package/dist/adapters/processRegistry.js +8 -0
  35. package/dist/adapters/processRegistry.js.map +1 -1
  36. package/dist/adapters/types.d.ts +2 -0
  37. package/dist/adapters/types.d.ts.map +1 -1
  38. package/dist/agents/pairPipeline.d.ts +10 -139
  39. package/dist/agents/pairPipeline.d.ts.map +1 -1
  40. package/dist/agents/pairPipeline.js +127 -35
  41. package/dist/agents/pairPipeline.js.map +1 -1
  42. package/dist/agents/pairPipelineTypes.d.ts +109 -0
  43. package/dist/agents/pairPipelineTypes.d.ts.map +1 -0
  44. package/dist/agents/pairPipelineTypes.js +2 -0
  45. package/dist/agents/pairPipelineTypes.js.map +1 -0
  46. package/dist/agents/pipelineGuards.d.ts.map +1 -1
  47. package/dist/agents/pipelineGuards.js +346 -0
  48. package/dist/agents/pipelineGuards.js.map +1 -1
  49. package/dist/agents/pipelineTaskPrefix.d.ts +3 -0
  50. package/dist/agents/pipelineTaskPrefix.d.ts.map +1 -0
  51. package/dist/agents/pipelineTaskPrefix.js +16 -0
  52. package/dist/agents/pipelineTaskPrefix.js.map +1 -0
  53. package/dist/agents/reflection.d.ts +1 -1
  54. package/dist/agents/reflection.d.ts.map +1 -1
  55. package/dist/agents/reflection.js +3 -1
  56. package/dist/agents/reflection.js.map +1 -1
  57. package/dist/agents/reviewer.d.ts +6 -0
  58. package/dist/agents/reviewer.d.ts.map +1 -1
  59. package/dist/agents/reviewer.js +4 -1
  60. package/dist/agents/reviewer.js.map +1 -1
  61. package/dist/agents/stageErrorClassification.d.ts +16 -0
  62. package/dist/agents/stageErrorClassification.d.ts.map +1 -0
  63. package/dist/agents/stageErrorClassification.js +38 -0
  64. package/dist/agents/stageErrorClassification.js.map +1 -0
  65. package/dist/agents/stageModelResolver.d.ts +8 -0
  66. package/dist/agents/stageModelResolver.d.ts.map +1 -0
  67. package/dist/agents/stageModelResolver.js +22 -0
  68. package/dist/agents/stageModelResolver.js.map +1 -0
  69. package/dist/agents/worker.d.ts +33 -0
  70. package/dist/agents/worker.d.ts.map +1 -1
  71. package/dist/agents/worker.js +59 -4
  72. package/dist/agents/worker.js.map +1 -1
  73. package/dist/agents/workerFanout.d.ts +38 -0
  74. package/dist/agents/workerFanout.d.ts.map +1 -0
  75. package/dist/agents/workerFanout.js +277 -0
  76. package/dist/agents/workerFanout.js.map +1 -0
  77. package/dist/agents/workerFanoutGate.d.ts +48 -0
  78. package/dist/agents/workerFanoutGate.d.ts.map +1 -0
  79. package/dist/agents/workerFanoutGate.js +146 -0
  80. package/dist/agents/workerFanoutGate.js.map +1 -0
  81. package/dist/agents/workerValidationEvidence.d.ts +5 -0
  82. package/dist/agents/workerValidationEvidence.d.ts.map +1 -0
  83. package/dist/agents/workerValidationEvidence.js +75 -0
  84. package/dist/agents/workerValidationEvidence.js.map +1 -0
  85. package/dist/automation/autonomousRunner.d.ts +18 -6
  86. package/dist/automation/autonomousRunner.d.ts.map +1 -1
  87. package/dist/automation/autonomousRunner.js +209 -39
  88. package/dist/automation/autonomousRunner.js.map +1 -1
  89. package/dist/automation/backlogGrooming.d.ts +52 -0
  90. package/dist/automation/backlogGrooming.d.ts.map +1 -0
  91. package/dist/automation/backlogGrooming.js +231 -0
  92. package/dist/automation/backlogGrooming.js.map +1 -0
  93. package/dist/automation/runnerExecution.d.ts +1 -1
  94. package/dist/automation/runnerExecution.d.ts.map +1 -1
  95. package/dist/automation/runnerExecution.js +31 -9
  96. package/dist/automation/runnerExecution.js.map +1 -1
  97. package/dist/automation/runnerTypes.d.ts +3 -1
  98. package/dist/automation/runnerTypes.d.ts.map +1 -1
  99. package/dist/automation/taskSource.d.ts +6 -3
  100. package/dist/automation/taskSource.d.ts.map +1 -1
  101. package/dist/automation/taskSource.js +5 -0
  102. package/dist/automation/taskSource.js.map +1 -1
  103. package/dist/cli/daemon.d.ts +20 -3
  104. package/dist/cli/daemon.d.ts.map +1 -1
  105. package/dist/cli/daemon.js +42 -2
  106. package/dist/cli/daemon.js.map +1 -1
  107. package/dist/cli/fixBoard.d.ts +14 -0
  108. package/dist/cli/fixBoard.d.ts.map +1 -0
  109. package/dist/cli/fixBoard.js +32 -0
  110. package/dist/cli/fixBoard.js.map +1 -0
  111. package/dist/cli/fixCommand.d.ts +8 -0
  112. package/dist/cli/fixCommand.d.ts.map +1 -1
  113. package/dist/cli/fixCommand.js +47 -8
  114. package/dist/cli/fixCommand.js.map +1 -1
  115. package/dist/cli/memoryCommand.d.ts +37 -0
  116. package/dist/cli/memoryCommand.d.ts.map +1 -0
  117. package/dist/cli/memoryCommand.js +156 -0
  118. package/dist/cli/memoryCommand.js.map +1 -0
  119. package/dist/cli/reviewAudit.d.ts +68 -0
  120. package/dist/cli/reviewAudit.d.ts.map +1 -1
  121. package/dist/cli/reviewAudit.js +147 -4
  122. package/dist/cli/reviewAudit.js.map +1 -1
  123. package/dist/cli/reviewMaxCommand.d.ts +2 -0
  124. package/dist/cli/reviewMaxCommand.d.ts.map +1 -1
  125. package/dist/cli/reviewMaxCommand.js +61 -36
  126. package/dist/cli/reviewMaxCommand.js.map +1 -1
  127. package/dist/cli.js +68 -13
  128. package/dist/cli.js.map +1 -1
  129. package/dist/core/config.d.ts +413 -0
  130. package/dist/core/config.d.ts.map +1 -1
  131. package/dist/core/config.js +51 -5
  132. package/dist/core/config.js.map +1 -1
  133. package/dist/core/eventHub.d.ts +22 -0
  134. package/dist/core/eventHub.d.ts.map +1 -1
  135. package/dist/core/eventHub.js +1 -0
  136. package/dist/core/eventHub.js.map +1 -1
  137. package/dist/core/providerOverride.d.ts +9 -0
  138. package/dist/core/providerOverride.d.ts.map +1 -1
  139. package/dist/core/providerOverride.js +12 -0
  140. package/dist/core/providerOverride.js.map +1 -1
  141. package/dist/core/service.d.ts.map +1 -1
  142. package/dist/core/service.js +8 -2
  143. package/dist/core/service.js.map +1 -1
  144. package/dist/core/types.d.ts +61 -1
  145. package/dist/core/types.d.ts.map +1 -1
  146. package/dist/linear/linear.d.ts +2 -1
  147. package/dist/linear/linear.d.ts.map +1 -1
  148. package/dist/linear/linear.js +16 -6
  149. package/dist/linear/linear.js.map +1 -1
  150. package/dist/locale/prompts/en.d.ts.map +1 -1
  151. package/dist/locale/prompts/en.js +11 -1
  152. package/dist/locale/prompts/en.js.map +1 -1
  153. package/dist/locale/prompts/ko.d.ts.map +1 -1
  154. package/dist/locale/prompts/ko.js +11 -1
  155. package/dist/locale/prompts/ko.js.map +1 -1
  156. package/dist/memory/compaction.d.ts +2 -2
  157. package/dist/memory/compaction.d.ts.map +1 -1
  158. package/dist/memory/compaction.js +22 -17
  159. package/dist/memory/compaction.js.map +1 -1
  160. package/dist/memory/index.d.ts +3 -3
  161. package/dist/memory/index.js +3 -3
  162. package/dist/memory/memoryCore.d.ts +15 -27
  163. package/dist/memory/memoryCore.d.ts.map +1 -1
  164. package/dist/memory/memoryCore.js +112 -97
  165. package/dist/memory/memoryCore.js.map +1 -1
  166. package/dist/memory/memoryFilters.d.ts +8 -0
  167. package/dist/memory/memoryFilters.d.ts.map +1 -0
  168. package/dist/memory/memoryFilters.js +26 -0
  169. package/dist/memory/memoryFilters.js.map +1 -0
  170. package/dist/memory/memoryOps.d.ts +7 -23
  171. package/dist/memory/memoryOps.d.ts.map +1 -1
  172. package/dist/memory/memoryOps.js +49 -109
  173. package/dist/memory/memoryOps.js.map +1 -1
  174. package/dist/memory/repoKnowledge.d.ts.map +1 -1
  175. package/dist/memory/repoKnowledge.js +48 -3
  176. package/dist/memory/repoKnowledge.js.map +1 -1
  177. package/dist/orchestration/conflictDetector.d.ts.map +1 -1
  178. package/dist/orchestration/conflictDetector.js +26 -7
  179. package/dist/orchestration/conflictDetector.js.map +1 -1
  180. package/dist/orchestration/taskScheduler.d.ts +5 -0
  181. package/dist/orchestration/taskScheduler.d.ts.map +1 -1
  182. package/dist/orchestration/taskScheduler.js +36 -12
  183. package/dist/orchestration/taskScheduler.js.map +1 -1
  184. package/dist/registry/memoryBridge.js +4 -4
  185. package/dist/registry/memoryBridge.js.map +1 -1
  186. package/dist/support/chatMemory.js +1 -1
  187. package/dist/support/chatMemory.js.map +1 -1
  188. package/dist/support/dashboardHtml.d.ts +1 -1
  189. package/dist/support/dashboardHtml.d.ts.map +1 -1
  190. package/dist/support/dashboardHtml.js +12 -0
  191. package/dist/support/dashboardHtml.js.map +1 -1
  192. package/dist/support/gitTracker.d.ts +30 -3
  193. package/dist/support/gitTracker.d.ts.map +1 -1
  194. package/dist/support/gitTracker.js +108 -29
  195. package/dist/support/gitTracker.js.map +1 -1
  196. package/dist/support/repoMetadata.d.ts +10 -0
  197. package/dist/support/repoMetadata.d.ts.map +1 -1
  198. package/dist/support/repoMetadata.js +31 -0
  199. package/dist/support/repoMetadata.js.map +1 -1
  200. package/dist/support/updateNotifier.d.ts +12 -0
  201. package/dist/support/updateNotifier.d.ts.map +1 -1
  202. package/dist/support/updateNotifier.js +71 -0
  203. package/dist/support/updateNotifier.js.map +1 -1
  204. package/dist/support/web.d.ts.map +1 -1
  205. package/dist/support/web.js +5 -3
  206. package/dist/support/web.js.map +1 -1
  207. package/dist/support/worktreeManager.d.ts +33 -0
  208. package/dist/support/worktreeManager.d.ts.map +1 -1
  209. package/dist/support/worktreeManager.js +172 -2
  210. package/dist/support/worktreeManager.js.map +1 -1
  211. package/dist/tui/App.js +1 -1
  212. package/dist/tui/App.js.map +1 -1
  213. package/dist/tui/components/AuditBoard.d.ts +3 -2
  214. package/dist/tui/components/AuditBoard.d.ts.map +1 -1
  215. package/dist/tui/components/AuditBoard.js +13 -4
  216. package/dist/tui/components/AuditBoard.js.map +1 -1
  217. package/dist/tui/components/DataTable.d.ts +3 -1
  218. package/dist/tui/components/DataTable.d.ts.map +1 -1
  219. package/dist/tui/components/DataTable.js +22 -5
  220. package/dist/tui/components/DataTable.js.map +1 -1
  221. package/dist/tui/components/StageTimeline.d.ts +1 -1
  222. package/dist/tui/components/StageTimeline.d.ts.map +1 -1
  223. package/dist/tui/components/StageTimeline.js +5 -2
  224. package/dist/tui/components/StageTimeline.js.map +1 -1
  225. package/dist/tui/components/SubagentTree.d.ts +6 -6
  226. package/dist/tui/components/SubagentTree.d.ts.map +1 -1
  227. package/dist/tui/components/SubagentTree.js +33 -5
  228. package/dist/tui/components/SubagentTree.js.map +1 -1
  229. package/dist/tui/eventCoalescer.d.ts +29 -0
  230. package/dist/tui/eventCoalescer.d.ts.map +1 -0
  231. package/dist/tui/eventCoalescer.js +56 -0
  232. package/dist/tui/eventCoalescer.js.map +1 -0
  233. package/dist/tui/hooks/usePipelineEvents.d.ts +1 -1
  234. package/dist/tui/hooks/usePipelineEvents.d.ts.map +1 -1
  235. package/dist/tui/hooks/usePipelineEvents.js +18 -4
  236. package/dist/tui/hooks/usePipelineEvents.js.map +1 -1
  237. package/dist/tui/monitorRows.d.ts +41 -2
  238. package/dist/tui/monitorRows.d.ts.map +1 -1
  239. package/dist/tui/monitorRows.js +86 -7
  240. package/dist/tui/monitorRows.js.map +1 -1
  241. package/dist/tui/panels/MonitorPanel.d.ts +2 -1
  242. package/dist/tui/panels/MonitorPanel.d.ts.map +1 -1
  243. package/dist/tui/panels/MonitorPanel.js +2 -2
  244. package/dist/tui/panels/MonitorPanel.js.map +1 -1
  245. package/dist/tui/panels/PipelinePanel.d.ts.map +1 -1
  246. package/dist/tui/panels/PipelinePanel.js +6 -1
  247. package/dist/tui/panels/PipelinePanel.js.map +1 -1
  248. package/dist/tui/pipelineEvents.d.ts +14 -0
  249. package/dist/tui/pipelineEvents.d.ts.map +1 -1
  250. package/dist/tui/pipelineEvents.js +89 -1
  251. package/dist/tui/pipelineEvents.js.map +1 -1
  252. package/dist/tui/subagentTree.d.ts +26 -3
  253. package/dist/tui/subagentTree.d.ts.map +1 -1
  254. package/dist/tui/subagentTree.js +89 -14
  255. package/dist/tui/subagentTree.js.map +1 -1
  256. package/package.json +1 -1
@@ -5,15 +5,64 @@
5
5
  // ============================================
6
6
  export function projectsToTable(projects) {
7
7
  return {
8
- columns: ['', 'PROJECT', 'RUN', 'QUEUE'],
8
+ columns: ['', 'PROJECT', 'PATH', 'GIT/WT', 'LINEAR', 'RUN', 'QUEUE', 'PEND', 'LAST'],
9
9
  rows: projects.map((p) => [
10
10
  p.enabled ? '●' : '○',
11
11
  p.name,
12
+ compactPath(p.path),
13
+ gitSummary(p),
14
+ p.linearProject ?? '',
12
15
  String(p.running?.length ?? 0),
13
16
  String(p.queued?.length ?? 0),
17
+ String(p.pending?.length ?? 0),
18
+ latestProjectActivity(p),
14
19
  ]),
15
20
  };
16
21
  }
22
+ function compactPath(path) {
23
+ const parts = path.split('/').filter(Boolean);
24
+ return parts.length <= 2 ? path : `…/${parts.slice(-2).join('/')}`;
25
+ }
26
+ function gitSummary(p) {
27
+ const git = p.git;
28
+ const branch = git?.branch ?? (p.prs?.[0]?.branch);
29
+ if (!branch)
30
+ return '';
31
+ const dirty = git?.hasChanges ? ` +${git.uncommittedFiles ?? 0}` : '';
32
+ const sync = `${git?.ahead ? ` ↑${git.ahead}` : ''}${git?.behind ? ` ↓${git.behind}` : ''}`;
33
+ return `${branch}${dirty}${sync}`;
34
+ }
35
+ function latestProjectActivity(p) {
36
+ const running = p.running?.[0];
37
+ if (running)
38
+ return `run ${truncate(running.title || running.id, 18)}`;
39
+ const queued = p.queued?.[0];
40
+ if (queued)
41
+ return `queue ${truncate(queued.title || queued.id, 16)}`;
42
+ const pending = p.pending?.[0];
43
+ if (pending)
44
+ return `${pending.linearState ?? 'Todo'} ${pending.issueIdentifier ?? pending.id}`;
45
+ const pr = p.prs?.[0];
46
+ if (pr)
47
+ return `PR #${pr.number}`;
48
+ return '';
49
+ }
50
+ function shortModel(model) {
51
+ return model ? model.split('-').slice(-2).join('-') : '';
52
+ }
53
+ function elapsed(ms) {
54
+ if (!ms)
55
+ return '';
56
+ if (ms < 1000)
57
+ return `${ms}ms`;
58
+ return `${Math.round(ms / 1000)}s`;
59
+ }
60
+ function titleOf(data) {
61
+ return data.issueIdentifier || data.title || data.taskId || '';
62
+ }
63
+ function truncate(value, max) {
64
+ return value.length > max ? `${value.slice(0, max - 1)}…` : value;
65
+ }
17
66
  const STAGE_ICON = { start: '◐', complete: '●', fail: '✗' };
18
67
  /** Most-recent pipeline stage events as task rows (newest first). */
19
68
  export function pipelineToTable(stages, limit = 15) {
@@ -24,20 +73,36 @@ export function pipelineToTable(stages, limit = 15) {
24
73
  info.set(ev.data.taskId, ev.data.issueIdentifier || ev.data.title || ev.data.taskId);
25
74
  }
26
75
  else if (ev.type === 'pipeline:stage' && ev.data.taskId && ev.data.stage) {
27
- events.push({ taskId: ev.data.taskId, stage: ev.data.stage, status: ev.data.status ?? '', model: ev.data.model });
76
+ events.push({ ...ev.data, taskId: ev.data.taskId, stage: ev.data.stage, status: ev.data.status ?? '' });
28
77
  }
29
78
  }
30
79
  const recent = events.slice(-limit).reverse();
31
80
  return {
32
- columns: ['TASK', 'STAGE', 'MODEL', 'STATUS'],
81
+ columns: ['TASK', 'PROJECT', 'STAGE', 'MODEL', 'STATE', 'AGE', 'DETAIL'],
33
82
  rows: recent.map((e) => [
34
- (info.get(e.taskId) ?? e.taskId).slice(0, 14),
83
+ truncate(info.get(e.taskId) ?? titleOf(e), 16),
84
+ e.repository ?? compactPath(e.projectPath ?? ''),
35
85
  e.stage,
36
- e.model ? e.model.split('-').slice(-2).join('-') : '',
37
- `${STAGE_ICON[e.status] ?? '○'} ${e.status}`,
86
+ shortModel(e.model),
87
+ `${STAGE_ICON[e.status] ?? '○'} ${e.status}${e.decision ? `/${e.decision}` : ''}`,
88
+ elapsed(e.durationMs),
89
+ stageDetail(e),
38
90
  ]),
39
91
  };
40
92
  }
93
+ function stageDetail(e) {
94
+ if (e.error)
95
+ return truncate(e.error, 24);
96
+ if (e.summary)
97
+ return truncate(e.summary, 24);
98
+ if (e.feedback)
99
+ return truncate(e.feedback, 24);
100
+ if (e.filesChangedCount != null)
101
+ return `${e.filesChangedCount} files`;
102
+ if (e.issuesCount != null)
103
+ return `${e.issuesCount} issues`;
104
+ return '';
105
+ }
41
106
  const PRIO = (p) => {
42
107
  if (typeof p === 'string') {
43
108
  const normalized = p.toLowerCase();
@@ -51,13 +116,27 @@ export function stuckToTable(stuck, failed) {
51
116
  i.identifier,
52
117
  i.title.length > 40 ? `${i.title.slice(0, 39)}…` : i.title,
53
118
  PRIO(i.priority),
119
+ i.project?.name ?? '',
54
120
  i.reason.length > 30 ? `${i.reason.slice(0, 29)}…` : i.reason,
121
+ issueContext(i),
55
122
  ];
56
123
  return {
57
- columns: ['KIND', 'ID', 'TITLE', 'PRIO', 'REASON'],
124
+ columns: ['KIND', 'ID', 'TITLE', 'PRIO', 'PROJECT', 'REASON', 'CONTEXT'],
58
125
  rows: [...stuck.map(row('stuck')), ...failed.map(row('failed'))],
59
126
  };
60
127
  }
128
+ function issueContext(i) {
129
+ const latestComment = [...(i.comments ?? [])]
130
+ .sort((a, b) => b.createdAt.localeCompare(a.createdAt))[0];
131
+ if (latestComment?.body)
132
+ return truncate(latestComment.body.replace(/\s+/g, ' ').trim(), 24);
133
+ if (typeof i.stuckDays === 'number')
134
+ return `${i.stuckDays}d stale`;
135
+ const labels = (i.labels ?? []).filter(l => ['retry', 'failed', 'blocked', 'needs-help', 'swarm:stuck'].includes(l));
136
+ if (labels.length > 0)
137
+ return truncate(labels.join(','), 24);
138
+ return i.state ?? '';
139
+ }
61
140
  export function issuesToTable(issues) {
62
141
  return {
63
142
  columns: ['TITLE', 'STATUS', 'PRIO'],
@@ -1 +1 @@
1
- {"version":3,"file":"monitorRows.js","sourceRoot":"","sources":["../../src/tui/monitorRows.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"monitorRows.js","sourceRoot":"","sources":["../../src/tui/monitorRows.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,gEAAgE;AAChE,6EAA6E;AAC7E,6EAA6E;AAC7E,+CAA+C;AAiC/C,MAAM,UAAU,eAAe,CAAC,QAAsB;IACpD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;QACpF,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACxB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YACrB,CAAC,CAAC,IAAI;YACN,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;YACnB,UAAU,CAAC,CAAC,CAAC;YACb,CAAC,CAAC,aAAa,IAAI,EAAE;YACrB,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;YAC9B,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,CAAC;YAC7B,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;YAC9B,qBAAqB,CAAC,CAAC,CAAC;SACzB,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,UAAU,CAAC,CAAa;IAC/B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IAClB,MAAM,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,IAAI,GAAG,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5F,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,qBAAqB,CAAC,CAAa;IAC1C,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,OAAO;QAAE,OAAO,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IACvE,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,MAAM;QAAE,OAAO,SAAS,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IACtE,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,OAAO;QAAE,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;IAChG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,EAAE;QAAE,OAAO,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB;IAC3C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,OAAO,CAAC,EAAsB;IACrC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,EAAE,IAAI,CAAC;IAChC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;AACrC,CAAC;AAED,SAAS,OAAO,CAAC,IAA8B;IAC7C,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,GAAW;IAC1C,OAAO,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACpE,CAAC;AAuBD,MAAM,UAAU,GAA2B,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAEpF,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAAC,MAA0B,EAAE,KAAK,GAAG,EAAE;IACpE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,4BAA4B;IACpE,MAAM,MAAM,GAAwF,EAAE,CAAC;IACvG,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvF,CAAC;aAAM,IAAI,EAAE,CAAC,IAAI,KAAK,gBAAgB,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3E,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,OAAO;QACL,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC;QACxE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC9C,CAAC,CAAC,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;YAChD,CAAC,CAAC,KAAK;YACP,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;YACnB,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;YACjF,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACrB,WAAW,CAAC,CAAC,CAAC;SACf,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,CAA2B;IAC9C,IAAI,CAAC,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC,iBAAiB,IAAI,IAAI;QAAE,OAAO,GAAG,CAAC,CAAC,iBAAiB,QAAQ,CAAC;IACvE,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI;QAAE,OAAO,GAAG,CAAC,CAAC,WAAW,SAAS,CAAC;IAC5D,OAAO,EAAE,CAAC;AACZ,CAAC;AAcD,MAAM,IAAI,GAAG,CAAC,CAAkB,EAAE,EAAE;IAClC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,KAAsB,EAAE,MAAuB;IAC1E,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,CAAgB,EAAY,EAAE,CAAC;QAC5D,IAAI;QACJ,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QAC1D,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;QAChB,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE;QACrB,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;QAC7D,YAAY,CAAC,CAAC,CAAC;KAChB,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;QACxE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,CAAgB;IACpC,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;SAC1C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,aAAa,EAAE,IAAI;QAAE,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7F,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,CAAC,SAAS,SAAS,CAAC;IACpE,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;AACvB,CAAC;AASD,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,OAAO;QACL,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;QACpC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACtB,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;YAC1D,CAAC,CAAC,MAAM;YACR,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;SACjB,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -3,6 +3,7 @@ export interface MonitorPanelProps {
3
3
  port?: number;
4
4
  fetcher: (port: number) => Promise<Table>;
5
5
  empty?: string;
6
+ terminalWidth?: number;
6
7
  }
7
- export declare function MonitorPanel({ port, fetcher, empty }: MonitorPanelProps): import("react").JSX.Element;
8
+ export declare function MonitorPanel({ port, fetcher, empty, terminalWidth }: MonitorPanelProps): import("react").JSX.Element;
8
9
  //# sourceMappingURL=MonitorPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MonitorPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/panels/MonitorPanel.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,iBAAiB,+BAMvE"}
1
+ {"version":3,"file":"MonitorPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/panels/MonitorPanel.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,iBAAiB,+BAMtF"}
@@ -6,7 +6,7 @@ import { Text } from 'ink';
6
6
  import { DataTable } from '../components/DataTable.js';
7
7
  import { useMonitor } from '../hooks/useMonitor.js';
8
8
  import { theme } from '../theme.js';
9
- export function MonitorPanel({ port, fetcher, empty }) {
9
+ export function MonitorPanel({ port, fetcher, empty, terminalWidth }) {
10
10
  const { table, error, loading } = useMonitor(port, fetcher);
11
11
  if (!port)
12
12
  return _jsx(Text, { dimColor: true, children: "\u25CB daemon port unknown" });
@@ -14,6 +14,6 @@ export function MonitorPanel({ port, fetcher, empty }) {
14
14
  return _jsx(Text, { color: theme.err, children: `load failed: ${error}` });
15
15
  if (!table)
16
16
  return _jsx(Text, { dimColor: true, children: loading ? 'loading…' : '(no data)' });
17
- return _jsx(DataTable, { columns: table.columns, rows: table.rows, empty: empty });
17
+ return _jsx(DataTable, { columns: table.columns, rows: table.rows, empty: empty, terminalWidth: terminalWidth });
18
18
  }
19
19
  //# sourceMappingURL=MonitorPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MonitorPanel.js","sourceRoot":"","sources":["../../../src/tui/panels/MonitorPanel.tsx"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,+EAA+E;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AASpC,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAqB;IACtE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAI;QAAE,OAAO,KAAC,IAAI,IAAC,QAAQ,iDAA6B,CAAC;IAC9D,IAAI,KAAK;QAAE,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,YAAG,gBAAgB,KAAK,EAAE,GAAQ,CAAC;IAC3E,IAAI,CAAC,KAAK;QAAE,OAAO,KAAC,IAAI,IAAC,QAAQ,kBAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,GAAQ,CAAC;IAC9E,OAAO,KAAC,SAAS,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AAC/E,CAAC"}
1
+ {"version":3,"file":"MonitorPanel.js","sourceRoot":"","sources":["../../../src/tui/panels/MonitorPanel.tsx"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,+EAA+E;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAUpC,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAqB;IACrF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAI;QAAE,OAAO,KAAC,IAAI,IAAC,QAAQ,iDAA6B,CAAC;IAC9D,IAAI,KAAK;QAAE,OAAO,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,GAAG,YAAG,gBAAgB,KAAK,EAAE,GAAQ,CAAC;IAC3E,IAAI,CAAC,KAAK;QAAE,OAAO,KAAC,IAAI,IAAC,QAAQ,kBAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,GAAQ,CAAC;IAC9E,OAAO,KAAC,SAAS,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,GAAI,CAAC;AAC7G,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PipelinePanel.d.ts","sourceRoot":"","sources":["../../../src/tui/panels/PipelinePanel.tsx"],"names":[],"mappings":"AAWA,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,kBAAkB,+BAuBzD"}
1
+ {"version":3,"file":"PipelinePanel.d.ts","sourceRoot":"","sources":["../../../src/tui/panels/PipelinePanel.tsx"],"names":[],"mappings":"AAYA,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,kBAAkB,+BA2BzD"}
@@ -3,6 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  // Subscribes to the daemon SSE stream and shows the stage timeline + live log,
4
4
  // the CLI counterpart of the web dashboard's PIPELINE tab.
5
5
  import { Box, Text } from 'ink';
6
+ import { useMemo } from 'react';
6
7
  import { StageTimeline } from '../components/StageTimeline.js';
7
8
  import { SubagentTree } from '../components/SubagentTree.js';
8
9
  import { LiveLog } from '../components/LiveLog.js';
@@ -11,12 +12,16 @@ import { buildSubagentTree } from '../subagentTree.js';
11
12
  import { theme } from '../theme.js';
12
13
  export function PipelinePanel({ port }) {
13
14
  const { stages, logs, connected } = usePipelineEvents(port);
15
+ // Stabilize the tree identity so it only rebuilds when stages actually change
16
+ // (log-only updates keep the same `stages` reference). Prevents SubagentTree's
17
+ // spinner effect from re-subscribing every render + lets React.memo skip it. (INT-2407)
18
+ const repositories = useMemo(() => buildSubagentTree(stages), [stages]);
14
19
  const live = !!port && connected;
15
20
  const label = !port
16
21
  ? ' daemon port unknown'
17
22
  : connected
18
23
  ? ` live (:${port})`
19
24
  : ` connecting :${port}…`;
20
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: live ? theme.ok : theme.dim, children: live ? '●' : '○' }), _jsx(Text, { dimColor: true, children: label })] }), _jsx(SubagentTree, { tasks: buildSubagentTree(stages) }), _jsx(Box, { marginTop: 1, children: _jsx(StageTimeline, { stages: stages }) }), _jsx(Box, { marginTop: 1, children: _jsx(LiveLog, { logs: logs }) })] }));
25
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: live ? theme.ok : theme.dim, children: live ? '●' : '○' }), _jsx(Text, { dimColor: true, children: label })] }), _jsx(SubagentTree, { repositories: repositories }), _jsx(Box, { marginTop: 1, children: _jsx(StageTimeline, { stages: stages }) }), _jsx(Box, { marginTop: 1, children: _jsx(LiveLog, { logs: logs }) })] }));
21
26
  }
22
27
  //# sourceMappingURL=PipelinePanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PipelinePanel.js","sourceRoot":"","sources":["../../../src/tui/panels/PipelinePanel.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,2DAA2D;AAC3D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAOpC,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAsB;IACxD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;IACjC,MAAM,KAAK,GAAG,CAAC,IAAI;QACjB,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,WAAW,IAAI,GAAG;YACpB,CAAC,CAAC,gBAAgB,IAAI,GAAG,CAAC;IAC5B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,YAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAQ,EACnE,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,GAAQ,IACxB,EACP,KAAC,YAAY,IAAC,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAI,EAClD,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,aAAa,IAAC,MAAM,EAAE,MAAM,GAAI,GAC7B,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,OAAO,IAAC,IAAI,EAAE,IAAI,GAAI,GACnB,IACF,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"PipelinePanel.js","sourceRoot":"","sources":["../../../src/tui/panels/PipelinePanel.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,2DAA2D;AAC3D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAOpC,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,EAAsB;IACxD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5D,8EAA8E;IAC9E,+EAA+E;IAC/E,wFAAwF;IACxF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;IACjC,MAAM,KAAK,GAAG,CAAC,IAAI;QACjB,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,WAAW,IAAI,GAAG;YACpB,CAAC,CAAC,gBAAgB,IAAI,GAAG,CAAC;IAC5B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,YAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAQ,EACnE,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,GAAQ,IACxB,EACP,KAAC,YAAY,IAAC,YAAY,EAAE,YAAY,GAAI,EAC5C,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,aAAa,IAAC,MAAM,EAAE,MAAM,GAAI,GAC7B,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,OAAO,IAAC,IAAI,EAAE,IAAI,GAAI,GACnB,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -3,11 +3,19 @@ export interface StageEntry {
3
3
  taskId: string;
4
4
  stage: string;
5
5
  status: 'start' | 'complete' | 'fail';
6
+ repository?: string;
7
+ projectPath?: string;
8
+ worktree?: string;
9
+ branch?: string;
10
+ issueIdentifier?: string;
11
+ title?: string;
6
12
  model?: string;
7
13
  durationMs?: number;
8
14
  costUsd?: number;
9
15
  decision?: 'approve' | 'revise' | 'reject';
10
16
  summary?: string;
17
+ activity?: string;
18
+ rateLimitResetsAt?: number;
11
19
  }
12
20
  export interface PipelineState {
13
21
  stages: StageEntry[];
@@ -18,4 +26,10 @@ export declare const MAX_LOGS = 200;
18
26
  export declare const initialPipelineState: PipelineState;
19
27
  /** Fold one HubEvent into pipeline state (reducer shape: (state, action)). */
20
28
  export declare function reducePipelineEvent(state: PipelineState, ev: HubEvent): PipelineState;
29
+ /**
30
+ * Fold a batch of events into state in a single step so a coalesced burst of
31
+ * SSE events produces one new state (one commit → one repaint). (INT-2407)
32
+ */
33
+ export declare function reducePipelineEvents(state: PipelineState, events: HubEvent[]): PipelineState;
34
+ export declare function classifyActivity(line: string): string | undefined;
21
35
  //# sourceMappingURL=pipelineEvents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipelineEvents.d.ts","sourceRoot":"","sources":["../../src/tui/pipelineEvents.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAE5B,eAAO,MAAM,oBAAoB,EAAE,aAAwC,CAAC;AAE5E,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,QAAQ,GAAG,aAAa,CAmBrF"}
1
+ {"version":3,"file":"pipelineEvents.d.ts","sourceRoot":"","sources":["../../src/tui/pipelineEvents.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAE5B,eAAO,MAAM,oBAAoB,EAAE,aAAwC,CAAC;AAE5E,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,QAAQ,GAAG,aAAa,CA+DrF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,CAE5F;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAajE"}
@@ -14,17 +14,105 @@ export function reducePipelineEvent(state, ev) {
14
14
  taskId: d.taskId,
15
15
  stage: d.stage,
16
16
  status: d.status,
17
+ repository: d.repository,
18
+ projectPath: d.projectPath,
19
+ worktree: d.worktree,
20
+ branch: d.branch,
21
+ issueIdentifier: d.issueIdentifier,
22
+ title: d.title,
17
23
  model: d.model,
18
24
  durationMs: d.durationMs,
19
25
  costUsd: d.costUsd,
20
26
  decision: d.decision,
21
27
  summary: d.summary,
28
+ activity: d.status === 'start' ? 'waiting' : activityFromStage(d.error),
29
+ rateLimitResetsAt: d.rateLimitResetsAt,
30
+ };
31
+ return { ...state, stages: [...state.stages, entry].slice(-MAX_STAGES) };
32
+ }
33
+ if (ev.type === 'pipeline:fanout') {
34
+ const d = ev.data;
35
+ const summary = d.enabled
36
+ ? `${d.shouldFanOut ? 'fan-out recommended' : 'single-worker path'} (score ${d.score}/${d.threshold})`
37
+ : 'fan-out disabled';
38
+ const entry = {
39
+ taskId: d.taskId,
40
+ stage: 'fanout',
41
+ status: 'complete',
42
+ summary: d.reasons.length > 0 ? `${summary}: ${d.reasons.join(', ')}` : summary,
43
+ activity: d.shouldFanOut ? 'fan-out' : 'single-worker',
22
44
  };
23
45
  return { ...state, stages: [...state.stages, entry].slice(-MAX_STAGES) };
24
46
  }
25
47
  if (ev.type === 'log') {
26
- return { ...state, logs: [...state.logs, `[${ev.data.stage}] ${ev.data.line}`].slice(-MAX_LOGS) };
48
+ const activity = classifyActivity(ev.data.line);
49
+ return {
50
+ ...state,
51
+ stages: activity
52
+ ? updateLatestActivity(state.stages, ev.data.taskId, ev.data.stage, activity)
53
+ : state.stages,
54
+ logs: [...state.logs, `[${ev.data.stage}] ${ev.data.line}`].slice(-MAX_LOGS),
55
+ };
56
+ }
57
+ if (ev.type === 'process:spawn') {
58
+ return {
59
+ ...state,
60
+ stages: updateLatestActivity(state.stages, ev.data.taskId, ev.data.stage, 'waiting', ev.data.model),
61
+ };
62
+ }
63
+ if (ev.type === 'process:exit') {
64
+ if (!ev.data.taskId || !ev.data.stage)
65
+ return state;
66
+ return {
67
+ ...state,
68
+ stages: state.stages.map((stage) => stage.taskId === ev.data.taskId && stage.stage === ev.data.stage && stage.activity === 'waiting'
69
+ ? { ...stage, activity: undefined }
70
+ : stage),
71
+ };
27
72
  }
28
73
  return state;
29
74
  }
75
+ /**
76
+ * Fold a batch of events into state in a single step so a coalesced burst of
77
+ * SSE events produces one new state (one commit → one repaint). (INT-2407)
78
+ */
79
+ export function reducePipelineEvents(state, events) {
80
+ return events.reduce(reducePipelineEvent, state);
81
+ }
82
+ export function classifyActivity(line) {
83
+ const text = line.trim();
84
+ const lower = text.toLowerCase();
85
+ if (/\b(rate[-\s]?limit|quota|429)\b/.test(lower))
86
+ return 'rate-limited';
87
+ const tool = text.match(/(?:tool[:\s]+|🔧\s*)([a-zA-Z_][\w-]*)/);
88
+ if (tool)
89
+ return `tool: ${tool[1]}`;
90
+ if (/\b(apply_patch|read_file|write_file|edit_file|bash|shell|rg|grep)\b/.test(lower)) {
91
+ const matched = lower.match(/\b(apply_patch|read_file|write_file|edit_file|bash|shell|rg|grep)\b/);
92
+ return matched ? `tool: ${matched[1]}` : 'tool';
93
+ }
94
+ if (/\b(reasoning|thinking|analyzing|checking|planning)\b/.test(lower) || text.startsWith('💭'))
95
+ return 'thinking';
96
+ if (/\b(waiting|pending|queued)\b/.test(lower))
97
+ return 'waiting';
98
+ return undefined;
99
+ }
100
+ function activityFromStage(error) {
101
+ return error ? classifyActivity(error) : undefined;
102
+ }
103
+ function updateLatestActivity(stages, taskId, stageName, activity, model) {
104
+ for (let i = stages.length - 1; i >= 0; i--) {
105
+ const stage = stages[i];
106
+ if (stage.taskId !== taskId || stage.stage !== stageName || stage.status !== 'start')
107
+ continue;
108
+ const next = stages.slice();
109
+ next[i] = {
110
+ ...stage,
111
+ activity,
112
+ model: stage.model ?? model,
113
+ };
114
+ return next;
115
+ }
116
+ return stages;
117
+ }
30
118
  //# sourceMappingURL=pipelineEvents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipelineEvents.js","sourceRoot":"","sources":["../../src/tui/pipelineEvents.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,mEAAmE;AACnE,8EAA8E;AAC9E,4DAA4D;AAC5D,+CAA+C;AAoB/C,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC;AAC9B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B,MAAM,CAAC,MAAM,oBAAoB,GAAkB,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAE5E,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB,CAAC,KAAoB,EAAE,EAAY;IACpE,IAAI,EAAE,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QAClB,MAAM,KAAK,GAAe;YACxB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC;QACF,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"pipelineEvents.js","sourceRoot":"","sources":["../../src/tui/pipelineEvents.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,33 @@
1
1
  import type { StageEntry } from './pipelineEvents.js';
2
2
  export type TaskStatus = 'start' | 'complete' | 'fail';
3
- export interface TaskNode {
3
+ export interface RoleNode {
4
+ role: string;
5
+ status: TaskStatus;
6
+ model?: string;
7
+ durationMs?: number;
8
+ decision?: 'approve' | 'revise' | 'reject';
9
+ summary?: string;
10
+ activity?: string;
11
+ rateLimitResetsAt?: number;
12
+ }
13
+ export interface WorktreeNode {
4
14
  taskId: string;
5
- stages: StageEntry[];
15
+ issueIdentifier?: string;
16
+ title?: string;
17
+ branch?: string;
18
+ worktree?: string;
19
+ currentStage?: string;
20
+ durationMs?: number;
21
+ decision?: 'approve' | 'revise' | 'reject';
22
+ roles: RoleNode[];
6
23
  /** Rolled-up status: fail if any stage failed, complete if all complete, else running. */
7
24
  status: TaskStatus;
8
25
  }
9
- export declare function buildSubagentTree(stages: StageEntry[]): TaskNode[];
26
+ export interface RepositoryNode {
27
+ repository: string;
28
+ projectPath?: string;
29
+ worktrees: WorktreeNode[];
30
+ status: TaskStatus;
31
+ }
32
+ export declare function buildSubagentTree(stages: StageEntry[]): RepositoryNode[];
10
33
  //# sourceMappingURL=subagentTree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subagentTree.d.ts","sourceRoot":"","sources":["../../src/tui/subagentTree.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,0FAA0F;IAC1F,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAelE"}
1
+ {"version":3,"file":"subagentTree.d.ts","sourceRoot":"","sources":["../../src/tui/subagentTree.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,0FAA0F;IAC1F,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,cAAc,EAAE,CAoDxE"}
@@ -1,25 +1,57 @@
1
1
  // ============================================
2
2
  // OpenSwarm - Subagent tree (EPIC INT-1813 S7 / INT-1940)
3
- // Pure grouping of pipeline stage entries into a per-task (per-worktree) tree
4
- // the Claude-Code-subagent view of concurrent runs. Derived from the existing
5
- // taskId-keyed events (each worktree task = one node, its stages = children), so
6
- // no new backend event stream is required to surface the tree.
3
+ // Pure grouping of pipeline stage entries into a repository worktree → role tree.
7
4
  // ============================================
8
5
  export function buildSubagentTree(stages) {
9
- const byTask = new Map();
6
+ const byRepository = new Map();
10
7
  for (const s of stages) {
11
- const arr = byTask.get(s.taskId);
12
- if (arr)
8
+ const repository = s.repository ?? repoNameFromPath(s.projectPath) ?? 'unknown repository';
9
+ const worktreeKey = s.issueIdentifier ?? inferIssueIdentifier(s.taskId) ?? s.taskId ?? s.worktree ?? s.branch;
10
+ const repo = byRepository.get(repository) ?? new Map();
11
+ const arr = repo.get(worktreeKey);
12
+ if (arr) {
13
13
  arr.push(s);
14
- else
15
- byTask.set(s.taskId, [s]);
14
+ repo.delete(worktreeKey);
15
+ repo.set(worktreeKey, arr);
16
+ }
17
+ else {
18
+ repo.set(worktreeKey, [s]);
19
+ }
20
+ byRepository.set(repository, repo);
16
21
  }
17
- return [...byTask.entries()].map(([taskId, taskStages]) => {
18
- const latestStages = latestByStage(taskStages);
22
+ return [...byRepository.entries()].map(([repository, worktreeMap]) => {
23
+ const worktrees = [...worktreeMap.values()].map((worktreeStages) => {
24
+ const latestStages = latestByStage(worktreeStages);
25
+ const latest = latestStages[latestStages.length - 1];
26
+ const roles = latestStages.map((stage) => ({
27
+ role: displayRole(stage.stage),
28
+ status: stage.status,
29
+ model: stage.model,
30
+ durationMs: stage.durationMs,
31
+ decision: stage.decision,
32
+ summary: stage.summary,
33
+ activity: stage.activity,
34
+ rateLimitResetsAt: stage.rateLimitResetsAt,
35
+ }));
36
+ const withMetadata = [...latestStages].reverse();
37
+ return {
38
+ taskId: latest?.taskId ?? worktreeStages[0]?.taskId ?? 'unknown-task',
39
+ issueIdentifier: firstDefined(withMetadata, (stage) => stage.issueIdentifier) ?? inferIssueIdentifier(latest?.taskId) ?? latest?.taskId,
40
+ title: firstDefined(withMetadata, (stage) => stage.title),
41
+ branch: firstDefined(withMetadata, (stage) => stage.branch),
42
+ worktree: firstDefined(withMetadata, (stage) => stage.worktree) ?? worktreeNameFromPath(latest?.projectPath),
43
+ currentStage: latest ? displayRole(latest.stage) : undefined,
44
+ durationMs: latest?.durationMs,
45
+ decision: findLast(latestStages, (stage) => Boolean(stage.decision))?.decision,
46
+ roles,
47
+ status: rollUp(latestStages),
48
+ };
49
+ });
19
50
  return {
20
- taskId,
21
- stages: latestStages,
22
- status: rollUp(latestStages),
51
+ repository,
52
+ projectPath: worktrees.map((w) => w.worktree).find(Boolean) ? undefined : latestProjectPath(worktreeMap),
53
+ worktrees,
54
+ status: rollUp(worktrees.flatMap((w) => w.roles.map((role) => ({ status: role.status })))),
23
55
  };
24
56
  });
25
57
  }
@@ -38,4 +70,47 @@ function rollUp(stages) {
38
70
  return 'complete';
39
71
  return 'start';
40
72
  }
73
+ function displayRole(stage) {
74
+ if (stage === 'draft')
75
+ return 'Drafter';
76
+ if (stage === 'decompose')
77
+ return 'Planner';
78
+ return stage.charAt(0).toUpperCase() + stage.slice(1);
79
+ }
80
+ function repoNameFromPath(projectPath) {
81
+ if (!projectPath)
82
+ return undefined;
83
+ const normalized = projectPath.replace(/\/+$/, '');
84
+ const beforeWorktree = normalized.replace(/\/worktree\/[^/]+$/, '');
85
+ return beforeWorktree.split('/').pop();
86
+ }
87
+ function worktreeNameFromPath(projectPath) {
88
+ return projectPath?.match(/\/worktree\/([^/]+)\/?$/)?.[1];
89
+ }
90
+ function inferIssueIdentifier(taskId) {
91
+ return taskId?.match(/[A-Z]+-\d+/)?.[0];
92
+ }
93
+ function firstDefined(items, select) {
94
+ for (const item of items) {
95
+ const value = select(item);
96
+ if (value !== undefined && value !== '')
97
+ return value;
98
+ }
99
+ return undefined;
100
+ }
101
+ function latestProjectPath(worktreeMap) {
102
+ for (const stages of worktreeMap.values()) {
103
+ const latest = findLast(stages, (stage) => Boolean(stage.projectPath));
104
+ if (latest?.projectPath)
105
+ return latest.projectPath;
106
+ }
107
+ return undefined;
108
+ }
109
+ function findLast(items, predicate) {
110
+ for (let i = items.length - 1; i >= 0; i--) {
111
+ if (predicate(items[i]))
112
+ return items[i];
113
+ }
114
+ return undefined;
115
+ }
41
116
  //# sourceMappingURL=subagentTree.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subagentTree.js","sourceRoot":"","sources":["../../src/tui/subagentTree.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,0DAA0D;AAC1D,gFAAgF;AAChF,8EAA8E;AAC9E,iFAAiF;AACjF,+DAA+D;AAC/D,+CAA+C;AAa/C,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YAChB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE;QACxD,MAAM,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAC/C,OAAO;YACL,MAAM;YACN,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC;SAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,MAAoB;IACzC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,MAAM,CAAC,MAAoB;IAClC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACzF,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"subagentTree.js","sourceRoot":"","sources":["../../src/tui/subagentTree.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intrect/openswarm",
3
- "version": "0.17.2",
3
+ "version": "0.17.3",
4
4
  "description": "Autonomous AI agent orchestrator — Claude, GPT, Codex, and local models (Ollama/LMStudio/llama.cpp)",
5
5
  "license": "MIT",
6
6
  "type": "module",