@gjczone/pi-swarm 0.4.1 → 0.7.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 (75) hide show
  1. package/README.md +35 -89
  2. package/dist/index.d.ts +3 -10
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +4 -16
  5. package/dist/index.js.map +1 -1
  6. package/dist/shared/controller.d.ts +19 -5
  7. package/dist/shared/controller.d.ts.map +1 -1
  8. package/dist/shared/controller.js +139 -17
  9. package/dist/shared/controller.js.map +1 -1
  10. package/dist/shared/render.d.ts +1 -12
  11. package/dist/shared/render.d.ts.map +1 -1
  12. package/dist/shared/render.js +4 -37
  13. package/dist/shared/render.js.map +1 -1
  14. package/dist/shared/spawner.js +49 -5
  15. package/dist/shared/spawner.js.map +1 -1
  16. package/dist/shared/types.d.ts +38 -0
  17. package/dist/shared/types.d.ts.map +1 -1
  18. package/dist/shared/types.js.map +1 -1
  19. package/dist/shared/worktree.d.ts +2 -0
  20. package/dist/shared/worktree.d.ts.map +1 -1
  21. package/dist/shared/worktree.js +10 -3
  22. package/dist/shared/worktree.js.map +1 -1
  23. package/dist/shared/xml.d.ts +18 -0
  24. package/dist/shared/xml.d.ts.map +1 -0
  25. package/dist/shared/xml.js +31 -0
  26. package/dist/shared/xml.js.map +1 -0
  27. package/dist/state/recovery.d.ts.map +1 -1
  28. package/dist/state/recovery.js +25 -4
  29. package/dist/state/recovery.js.map +1 -1
  30. package/dist/swarm/command.d.ts +4 -5
  31. package/dist/swarm/command.d.ts.map +1 -1
  32. package/dist/swarm/command.js +26 -74
  33. package/dist/swarm/command.js.map +1 -1
  34. package/dist/swarm/mode.d.ts +1 -1
  35. package/dist/swarm/mode.js +2 -2
  36. package/dist/swarm/mode.js.map +1 -1
  37. package/dist/swarm/tool.d.ts +4 -4
  38. package/dist/swarm/tool.d.ts.map +1 -1
  39. package/dist/swarm/tool.js +115 -160
  40. package/dist/swarm/tool.js.map +1 -1
  41. package/dist/team/command.d.ts +2 -4
  42. package/dist/team/command.d.ts.map +1 -1
  43. package/dist/team/command.js +5 -13
  44. package/dist/team/command.js.map +1 -1
  45. package/dist/team/mailbox.d.ts +7 -0
  46. package/dist/team/mailbox.d.ts.map +1 -1
  47. package/dist/team/mailbox.js +99 -13
  48. package/dist/team/mailbox.js.map +1 -1
  49. package/dist/tui/progress.d.ts +26 -9
  50. package/dist/tui/progress.d.ts.map +1 -1
  51. package/dist/tui/progress.js +262 -163
  52. package/dist/tui/progress.js.map +1 -1
  53. package/dist/tui/swarm-markers.d.ts +1 -1
  54. package/dist/tui/swarm-markers.js +1 -1
  55. package/package.json +13 -2
  56. package/dist/team/supervisor.d.ts +0 -171
  57. package/dist/team/supervisor.d.ts.map +0 -1
  58. package/dist/team/supervisor.js +0 -700
  59. package/dist/team/supervisor.js.map +0 -1
  60. package/dist/team/task-graph.d.ts +0 -64
  61. package/dist/team/task-graph.d.ts.map +0 -1
  62. package/dist/team/task-graph.js +0 -216
  63. package/dist/team/task-graph.js.map +0 -1
  64. package/dist/team/tool.d.ts +0 -11
  65. package/dist/team/tool.d.ts.map +0 -1
  66. package/dist/team/tool.js +0 -455
  67. package/dist/team/tool.js.map +0 -1
  68. package/dist/tui/permission-prompt.d.ts +0 -26
  69. package/dist/tui/permission-prompt.d.ts.map +0 -1
  70. package/dist/tui/permission-prompt.js +0 -98
  71. package/dist/tui/permission-prompt.js.map +0 -1
  72. package/dist/tui/team-dashboard.d.ts +0 -48
  73. package/dist/tui/team-dashboard.d.ts.map +0 -1
  74. package/dist/tui/team-dashboard.js +0 -249
  75. package/dist/tui/team-dashboard.js.map +0 -1
@@ -1,48 +0,0 @@
1
- /**
2
- * tui/team-dashboard — SwarmTeam live phase progress dashboard.
3
- *
4
- * Renders a real-time dashboard above the input area when a SwarmTeam
5
- * run is in progress. Shows phase statuses with compact braille spinner
6
- * for active phases, mailbox message count, token usage, and elapsed time.
7
- */
8
- import type { Component } from "@earendil-works/pi-tui";
9
- import type { TeamProgressSnapshot, SubagentUsage } from "../shared/types.js";
10
- export interface TeamDashboardState {
11
- title: string;
12
- goal: string;
13
- status: "running" | "completed" | "failed";
14
- totalPhases: number;
15
- completedPhases: number;
16
- failedPhases: number;
17
- currentPhase?: string;
18
- currentRoles?: string[];
19
- phases: TeamPhaseStatusWithMeta[];
20
- mailboxCount: number;
21
- totalUsage: SubagentUsage;
22
- startedAt: number;
23
- }
24
- interface TeamPhaseStatusWithMeta {
25
- name: string;
26
- role: string;
27
- status: "queued" | "running" | "completed" | "failed" | "skipped";
28
- error?: string;
29
- phaseStartedAt: number;
30
- }
31
- export declare function snapshotToDashboardState(snapshot: TeamProgressSnapshot): TeamDashboardState;
32
- export declare class TeamDashboardComponent implements Component {
33
- private state_;
34
- private animationFrame;
35
- private renderedWidth;
36
- private cachedLines;
37
- private onRequestRender;
38
- private frameIndex;
39
- constructor(onRequestRender?: () => void);
40
- update(state: TeamDashboardState): void;
41
- complete(): void;
42
- dispose(): void;
43
- invalidate(): void;
44
- render(width: number): string[];
45
- private startAnimation;
46
- }
47
- export {};
48
- //# sourceMappingURL=team-dashboard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"team-dashboard.d.ts","sourceRoot":"","sources":["../../src/tui/team-dashboard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EACV,oBAAoB,EAEpB,aAAa,EACd,MAAM,oBAAoB,CAAC;AAyB5B,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,aAAa,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,oBAAoB,GAC7B,kBAAkB,CAoCpB;AAMD,qBAAa,sBAAuB,YAAW,SAAS;IACtD,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,UAAU,CAAK;gBAEX,eAAe,CAAC,EAAE,MAAM,IAAI;IAKxC,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAKvC,QAAQ,IAAI,IAAI;IAgBhB,OAAO,IAAI,IAAI;IAQf,UAAU,IAAI,IAAI;IAKlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAsD/B,OAAO,CAAC,cAAc;CAOvB"}
@@ -1,249 +0,0 @@
1
- /**
2
- * tui/team-dashboard — SwarmTeam live phase progress dashboard.
3
- *
4
- * Renders a real-time dashboard above the input area when a SwarmTeam
5
- * run is in progress. Shows phase statuses with compact braille spinner
6
- * for active phases, mailbox message count, token usage, and elapsed time.
7
- */
8
- // ---------------------------------------------------------------------------
9
- // Constants
10
- // ---------------------------------------------------------------------------
11
- const FRAME_INTERVAL_MS = 80;
12
- const MAX_PHASES = 20;
13
- const ICON_COL_WIDTH = 3;
14
- const BRAILLE_SPINNER = [
15
- "\u28BF",
16
- "\u28FB",
17
- "\u28FD",
18
- "\u28FE",
19
- "\u28F7",
20
- "\u28EF",
21
- "\u28DF",
22
- "\u287F",
23
- ];
24
- // ---------------------------------------------------------------------------
25
- // Snapshot conversion
26
- // ---------------------------------------------------------------------------
27
- export function snapshotToDashboardState(snapshot) {
28
- const now = Date.now();
29
- const runningPhases = snapshot.phases
30
- .filter((p) => p.status === "running")
31
- .map((p) => p.name);
32
- const runningRoles = snapshot.phases
33
- .filter((p) => p.status === "running")
34
- .map((p) => p.role);
35
- return {
36
- title: snapshot.title,
37
- goal: snapshot.goal,
38
- status: snapshot.status,
39
- totalPhases: snapshot.totalPhases,
40
- completedPhases: snapshot.completedPhases,
41
- failedPhases: snapshot.failedPhases,
42
- currentPhase: runningPhases.length > 0
43
- ? runningPhases.join(", ")
44
- : snapshot.currentPhase,
45
- currentRoles: runningRoles.length > 0
46
- ? runningRoles
47
- : snapshot.currentRole
48
- ? [snapshot.currentRole]
49
- : undefined,
50
- phases: snapshot.phases.map((p) => ({
51
- name: p.name,
52
- role: p.role,
53
- status: p.status,
54
- error: p.error,
55
- phaseStartedAt: p.status === "running" ? now : 0,
56
- })),
57
- mailboxCount: snapshot.mailboxCount,
58
- totalUsage: snapshot.totalUsage,
59
- startedAt: snapshot.startedAt,
60
- };
61
- }
62
- // ---------------------------------------------------------------------------
63
- // Component
64
- // ---------------------------------------------------------------------------
65
- export class TeamDashboardComponent {
66
- state_ = null;
67
- animationFrame;
68
- renderedWidth;
69
- cachedLines;
70
- onRequestRender;
71
- frameIndex = 0;
72
- constructor(onRequestRender) {
73
- this.onRequestRender = onRequestRender;
74
- this.startAnimation();
75
- }
76
- update(state) {
77
- this.state_ = state;
78
- this.invalidate();
79
- }
80
- complete() {
81
- if (this.state_) {
82
- this.state_.phases.forEach((p) => {
83
- if (p.status === "queued" || p.status === "running") {
84
- p.status = "completed";
85
- }
86
- });
87
- this.state_.status = "completed";
88
- this.state_.completedPhases =
89
- this.state_.totalPhases - this.state_.failedPhases;
90
- this.state_.currentPhase = undefined;
91
- this.state_.currentRoles = undefined;
92
- }
93
- this.invalidate();
94
- }
95
- dispose() {
96
- if (this.animationFrame !== undefined) {
97
- clearInterval(this.animationFrame);
98
- this.animationFrame = undefined;
99
- }
100
- this.onRequestRender = undefined;
101
- }
102
- invalidate() {
103
- this.renderedWidth = undefined;
104
- this.cachedLines = undefined;
105
- }
106
- render(width) {
107
- const safeWidth = Math.max(20, width);
108
- if (this.cachedLines && this.renderedWidth === safeWidth) {
109
- return this.cachedLines;
110
- }
111
- if (!this.state_ || this.state_.phases.length === 0) {
112
- this.cachedLines = [];
113
- return this.cachedLines;
114
- }
115
- const state = this.state_;
116
- const lines = [];
117
- const contentWidth = safeWidth - 4;
118
- // Header: just title, truncated to fit
119
- const header = truncateText(state.title, contentWidth);
120
- lines.push(` ${header}`);
121
- // Overall progress bar
122
- const barWidth = Math.max(1, contentWidth);
123
- const total = state.totalPhases || 1;
124
- const doneRatio = (state.completedPhases + state.failedPhases) / total;
125
- const doneChars = Math.round(doneRatio * barWidth);
126
- const done = "\u2501".repeat(doneChars);
127
- const remaining = "\u2501".repeat(barWidth - doneChars);
128
- lines.push(` ${done}${remaining}`);
129
- // Phase rows
130
- const maxPhases = Math.min(state.phases.length, MAX_PHASES);
131
- for (let i = 0; i < maxPhases; i += 1) {
132
- const phase = state.phases[i];
133
- if (!phase)
134
- continue;
135
- const row = renderPhaseRow(phase, contentWidth, this.frameIndex);
136
- lines.push(` ${row}`);
137
- }
138
- // Separator
139
- const sep = "\u2500".repeat(contentWidth);
140
- lines.push(` ${sep}`);
141
- // Footer with all info
142
- const footerLine = buildFooter(state, contentWidth);
143
- lines.push(` ${footerLine}`);
144
- // Bottom border
145
- const bottom = `\u2514${"\u2500".repeat(contentWidth)}\u2518`;
146
- lines.push(bottom);
147
- this.cachedLines = lines;
148
- this.renderedWidth = safeWidth;
149
- return this.cachedLines;
150
- }
151
- startAnimation() {
152
- this.animationFrame = setInterval(() => {
153
- this.frameIndex = (this.frameIndex + 1) % BRAILLE_SPINNER.length;
154
- this.invalidate();
155
- this.onRequestRender?.();
156
- }, FRAME_INTERVAL_MS);
157
- }
158
- }
159
- // ---------------------------------------------------------------------------
160
- // Rendering helpers
161
- // ---------------------------------------------------------------------------
162
- function renderPhaseRow(phase, width, frameIndex) {
163
- const icon = phaseStatusIcon(phase, frameIndex).padEnd(ICON_COL_WIDTH, " ");
164
- const displayName = shortenPhaseName(phase.name, phase.role);
165
- const nameWidth = Math.max(6, Math.min(16, Math.floor(width * 0.35)));
166
- const name = truncateText(displayName, nameWidth).padEnd(nameWidth, " ");
167
- const fixed = `${icon} ${name}`;
168
- const remaining = Math.max(0, width - visibleLen(fixed) - 1);
169
- if (phase.status === "running") {
170
- const roleLabel = `${phase.role}`;
171
- return `${fixed} ${truncateText(roleLabel, remaining)}`;
172
- }
173
- if (phase.status === "failed" && phase.error) {
174
- const errorPart = phase.error;
175
- return `${fixed} ${truncateText(errorPart, remaining)}`;
176
- }
177
- if (phase.status === "completed") {
178
- return `${fixed} ok`;
179
- }
180
- if (phase.status === "skipped") {
181
- return `${fixed} skip`;
182
- }
183
- return `${fixed} ...`;
184
- }
185
- function shortenPhaseName(name, role) {
186
- if (name.length <= 12)
187
- return name;
188
- if (name.startsWith(role))
189
- return name.slice(0, Math.max(role.length, 12));
190
- const parts = name.split("-");
191
- if (parts.length > 1) {
192
- return parts.slice(0, 2).join("-");
193
- }
194
- return name.slice(0, 12);
195
- }
196
- function phaseStatusIcon(phase, frameIndex) {
197
- switch (phase.status) {
198
- case "completed":
199
- return "\u2713";
200
- case "running":
201
- return BRAILLE_SPINNER[frameIndex % BRAILLE_SPINNER.length];
202
- case "failed":
203
- return "\u2717";
204
- case "skipped":
205
- return "\u2298";
206
- case "queued":
207
- return "\u25CB";
208
- }
209
- }
210
- function buildFooter(state, width) {
211
- const usage = state.totalUsage ?? {
212
- input: 0,
213
- output: 0,
214
- cacheRead: 0,
215
- cacheWrite: 0,
216
- totalTokens: 0,
217
- };
218
- const phaseCount = `${state.completedPhases + state.failedPhases}/${state.totalPhases}`;
219
- const tokens = `${Math.round(usage.input)}in/${Math.round(usage.output)}out`;
220
- const mailbox = state.mailboxCount > 0 ? ` ${state.mailboxCount}msg` : "";
221
- const elapsed = formatElapsed(Date.now() - state.startedAt);
222
- const parts = [`${phaseCount} ph`, tokens, mailbox.trim(), elapsed].filter(Boolean);
223
- const full = parts.join(" | ");
224
- if (full.length <= width)
225
- return full;
226
- return truncateText(full, width);
227
- }
228
- function formatElapsed(ms) {
229
- const totalSec = Math.floor(ms / 1000);
230
- if (totalSec < 60)
231
- return `${totalSec}s`;
232
- const m = Math.floor(totalSec / 60);
233
- const s = totalSec % 60;
234
- return `${m}m${s}s`;
235
- }
236
- // ---------------------------------------------------------------------------
237
- // Text utilities
238
- // ---------------------------------------------------------------------------
239
- function visibleLen(text) {
240
- return text.replace(/\x1b\[[0-9;]*m/g, "").length;
241
- }
242
- function truncateText(text, maxLen) {
243
- if (text.length <= maxLen)
244
- return text;
245
- if (maxLen <= 1)
246
- return text.slice(0, 1);
247
- return text.slice(0, maxLen - 1) + "\u2026";
248
- }
249
- //# sourceMappingURL=team-dashboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"team-dashboard.js","sourceRoot":"","sources":["../../src/tui/team-dashboard.ts"],"names":[],"mappings":"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"}