@pi-unipi/subagents 2.4.0 → 2.5.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 (66) hide show
  1. package/README.md +3 -1
  2. package/dist/agent-manager.d.ts +81 -0
  3. package/dist/agent-manager.d.ts.map +1 -0
  4. package/dist/agent-manager.js +292 -0
  5. package/dist/agent-manager.js.map +1 -0
  6. package/dist/agent-runner.d.ts +51 -0
  7. package/dist/agent-runner.d.ts.map +1 -0
  8. package/dist/agent-runner.js +262 -0
  9. package/dist/agent-runner.js.map +1 -0
  10. package/dist/config.d.ts +24 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +132 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/conversation-viewer.d.ts +40 -0
  15. package/dist/conversation-viewer.d.ts.map +1 -0
  16. package/dist/conversation-viewer.js +276 -0
  17. package/dist/conversation-viewer.js.map +1 -0
  18. package/dist/core-compat.d.ts +14 -0
  19. package/dist/core-compat.d.ts.map +1 -0
  20. package/dist/core-compat.js +24 -0
  21. package/dist/core-compat.js.map +1 -0
  22. package/dist/custom-agents.d.ts +14 -0
  23. package/dist/custom-agents.d.ts.map +1 -0
  24. package/dist/custom-agents.js +106 -0
  25. package/dist/custom-agents.js.map +1 -0
  26. package/dist/file-lock.d.ts +42 -0
  27. package/dist/file-lock.d.ts.map +1 -0
  28. package/dist/file-lock.js +91 -0
  29. package/dist/file-lock.js.map +1 -0
  30. package/dist/index.d.ts +10 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +751 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/model-resolver.d.ts +19 -0
  35. package/dist/model-resolver.d.ts.map +1 -0
  36. package/dist/model-resolver.js +61 -0
  37. package/dist/model-resolver.js.map +1 -0
  38. package/dist/types.d.ts +96 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +47 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/widget.d.ts +56 -0
  43. package/dist/widget.d.ts.map +1 -0
  44. package/dist/widget.js +396 -0
  45. package/dist/widget.js.map +1 -0
  46. package/package.json +10 -6
  47. package/src/__tests__/badge-generation.test.ts +0 -315
  48. package/src/__tests__/config.test.ts +0 -240
  49. package/src/__tests__/esc-propagation.test.ts +0 -162
  50. package/src/__tests__/file-lock.test.ts +0 -244
  51. package/src/__tests__/shutdown-stale-ctx.test.ts +0 -185
  52. package/src/__tests__/workflow-integration.test.ts +0 -334
  53. package/src/agent-manager.ts +0 -334
  54. package/src/agent-runner.ts +0 -329
  55. package/src/config.ts +0 -147
  56. package/src/conversation-viewer.ts +0 -299
  57. package/src/custom-agents.ts +0 -118
  58. package/src/file-lock.ts +0 -102
  59. package/src/index.ts +0 -862
  60. package/src/model-resolver.ts +0 -79
  61. package/src/prompts.ts +0 -39
  62. package/src/skills/explore/SKILL.md +0 -32
  63. package/src/skills/work/SKILL.md +0 -40
  64. package/src/types.ts +0 -146
  65. package/src/widget.ts +0 -454
  66. package/tsconfig.json +0 -19
package/dist/widget.js ADDED
@@ -0,0 +1,396 @@
1
+ /**
2
+ * @pi-unipi/subagents — Live widget
3
+ *
4
+ * Shows running/completed agents above the editor with:
5
+ * - Animated braille spinners
6
+ * - Finished agent lingering (1 turn success, 2 turns error)
7
+ * - Priority-based overflow (running > queued > finished)
8
+ * - Status bar integration
9
+ * - Activity description grouping
10
+ * - ANSI-aware truncation via pi-tui
11
+ */
12
+ import { truncateToWidth } from "@earendil-works/pi-tui";
13
+ // ---- Constants ----
14
+ /** Maximum lines the widget may render. */
15
+ const MAX_WIDGET_LINES = 12;
16
+ /** Braille spinner frames. */
17
+ const SPINNER = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
18
+ /** Statuses that indicate error/non-success (for linger behavior). */
19
+ const ERROR_STATUSES = new Set(["error", "aborted", "stopped"]);
20
+ /** Tool name → human-readable action for activity descriptions. */
21
+ const TOOL_DISPLAY = {
22
+ read: "reading",
23
+ bash: "running command",
24
+ edit: "editing",
25
+ write: "writing",
26
+ grep: "searching",
27
+ find: "finding files",
28
+ ls: "listing",
29
+ };
30
+ // ---- Formatting helpers ----
31
+ /** Format duration. */
32
+ function formatMs(ms) {
33
+ if (ms >= 60_000)
34
+ return `${(ms / 60_000).toFixed(1)}m`;
35
+ if (ms >= 1_000)
36
+ return `${(ms / 1_000).toFixed(1)}s`;
37
+ return `${ms}ms`;
38
+ }
39
+ /** Format turns with optional max limit: "⟳5≤30" or "⟳5". */
40
+ function formatTurns(turn, max) {
41
+ return max != null ? `⟳${turn}≤${max}` : `⟳${turn}`;
42
+ }
43
+ /**
44
+ * Build a human-readable activity string from currently-running tools.
45
+ * Groups by tool type with counts: "reading 3 files, searching 2 patterns".
46
+ */
47
+ function describeActivity(activeTools, responseText) {
48
+ if (activeTools.size > 0) {
49
+ const groups = new Map();
50
+ for (const toolName of activeTools.values()) {
51
+ const action = TOOL_DISPLAY[toolName] ?? toolName;
52
+ groups.set(action, (groups.get(action) ?? 0) + 1);
53
+ }
54
+ const parts = [];
55
+ for (const [action, count] of groups) {
56
+ if (count > 1) {
57
+ parts.push(`${action} ${count} ${action === "searching" ? "patterns" : "files"}`);
58
+ }
59
+ else {
60
+ parts.push(action);
61
+ }
62
+ }
63
+ return parts.join(", ") + "…";
64
+ }
65
+ if (responseText && responseText.trim().length > 0) {
66
+ const lastLine = responseText.split("\n").find((l) => l.trim())?.trim() ?? "";
67
+ if (lastLine.length > 60)
68
+ return lastLine.slice(0, 60) + "…";
69
+ if (lastLine.length > 0)
70
+ return lastLine;
71
+ }
72
+ return "thinking…";
73
+ }
74
+ // ---- Widget ----
75
+ export class AgentWidget {
76
+ manager;
77
+ activity;
78
+ spinnerFrame = 0;
79
+ timer;
80
+ uiCtx;
81
+ tui;
82
+ widgetRegistered = false;
83
+ /** Last content key — skips requestRender when only spinner changed. */
84
+ lastContentKey = "";
85
+ /** Tracks how many turns each finished agent has survived. */
86
+ finishedTurnAge = new Map();
87
+ /** How many extra turns error/aborted agents linger. */
88
+ static ERROR_LINGER_TURNS = 2;
89
+ /** Last status bar text for dedup. */
90
+ lastStatusText;
91
+ constructor(manager, activity) {
92
+ this.manager = manager;
93
+ this.activity = activity;
94
+ }
95
+ setUICtx(ctx) {
96
+ if (ctx !== this.uiCtx) {
97
+ this.uiCtx = ctx;
98
+ this.widgetRegistered = false;
99
+ this.tui = undefined;
100
+ this.lastStatusText = undefined;
101
+ }
102
+ }
103
+ /**
104
+ * Called on each new turn (tool_execution_start).
105
+ * Ages finished agents and clears those that have lingered long enough.
106
+ */
107
+ onTurnStart() {
108
+ for (const [id, age] of this.finishedTurnAge) {
109
+ this.finishedTurnAge.set(id, age + 1);
110
+ }
111
+ this.update();
112
+ }
113
+ ensureTimer() {
114
+ if (this.timer)
115
+ return;
116
+ this.timer = setInterval(() => {
117
+ this.spinnerFrame = (this.spinnerFrame + 1) % SPINNER.length;
118
+ if (this.lastContentKey)
119
+ this.triggerRender();
120
+ }, 80);
121
+ }
122
+ /** Record an agent as finished (call when agent completes). */
123
+ markFinished(agentId) {
124
+ if (!this.finishedTurnAge.has(agentId)) {
125
+ this.finishedTurnAge.set(agentId, 0);
126
+ }
127
+ }
128
+ update() {
129
+ this.triggerRender();
130
+ }
131
+ /** Check if a finished agent should still be shown. */
132
+ shouldShowFinished(agentId, status) {
133
+ const age = this.finishedTurnAge.get(agentId) ?? 0;
134
+ const maxAge = ERROR_STATUSES.has(status) ? AgentWidget.ERROR_LINGER_TURNS : 1;
135
+ return age < maxAge;
136
+ }
137
+ /**
138
+ * Build a content key capturing what's actually visible.
139
+ * Excludes spinner — spinner-only changes skip requestRender.
140
+ */
141
+ buildContentKey() {
142
+ const allAgents = this.manager.listAgents();
143
+ const parts = [];
144
+ for (const a of allAgents) {
145
+ if (a.status === "running" || a.status === "queued") {
146
+ const act = this.activity.get(a.id);
147
+ parts.push(`${a.id}:${a.status}:${a.toolUses}:${act?.turnCount ?? 0}:${act?.tokens ?? ""}:${describeActivity(act?.activeTools ?? new Map(), act?.responseText ?? "")}`);
148
+ }
149
+ else if (a.completedAt && this.shouldShowFinished(a.id, a.status)) {
150
+ parts.push(`${a.id}:${a.status}:${a.toolUses}:finished`);
151
+ }
152
+ }
153
+ return parts.join("|");
154
+ }
155
+ triggerRender() {
156
+ if (!this.uiCtx)
157
+ return;
158
+ const contentKey = this.buildContentKey();
159
+ const hasContent = contentKey.length > 0;
160
+ // Nothing to show — clear widget
161
+ if (!hasContent) {
162
+ if (this.widgetRegistered) {
163
+ this.uiCtx.setWidget("unipi-agents", undefined);
164
+ this.widgetRegistered = false;
165
+ this.tui = undefined;
166
+ this.lastContentKey = "";
167
+ }
168
+ if (this.lastStatusText !== undefined) {
169
+ this.uiCtx.setStatus?.("subagents", undefined);
170
+ this.lastStatusText = undefined;
171
+ }
172
+ // Clean up stale finished entries
173
+ const allAgents = this.manager.listAgents();
174
+ for (const [id] of this.finishedTurnAge) {
175
+ if (!allAgents.some((a) => a.id === id))
176
+ this.finishedTurnAge.delete(id);
177
+ }
178
+ return;
179
+ }
180
+ // Status bar
181
+ this.updateStatusBar();
182
+ // Register widget callback once
183
+ if (!this.widgetRegistered) {
184
+ this.uiCtx.setWidget("unipi-agents", (tui, theme) => {
185
+ this.tui = tui;
186
+ return {
187
+ render: (width) => this.renderWidget(tui, theme, width),
188
+ invalidate: () => {
189
+ this.widgetRegistered = false;
190
+ this.tui = undefined;
191
+ },
192
+ };
193
+ }, { placement: "aboveEditor" });
194
+ this.widgetRegistered = true;
195
+ this.lastContentKey = "";
196
+ }
197
+ // Only request render when content actually changed
198
+ if (contentKey !== this.lastContentKey) {
199
+ this.lastContentKey = contentKey;
200
+ this.tui?.requestRender?.();
201
+ }
202
+ }
203
+ updateStatusBar() {
204
+ if (!this.uiCtx?.setStatus)
205
+ return;
206
+ const allAgents = this.manager.listAgents();
207
+ let runningCount = 0;
208
+ let queuedCount = 0;
209
+ for (const a of allAgents) {
210
+ if (a.status === "running")
211
+ runningCount++;
212
+ else if (a.status === "queued")
213
+ queuedCount++;
214
+ }
215
+ let newStatusText;
216
+ if (runningCount > 0 || queuedCount > 0) {
217
+ const parts = [];
218
+ if (runningCount > 0)
219
+ parts.push(`${runningCount} running`);
220
+ if (queuedCount > 0)
221
+ parts.push(`${queuedCount} queued`);
222
+ const total = runningCount + queuedCount;
223
+ newStatusText = `${parts.join(", ")} agent${total === 1 ? "" : "s"}`;
224
+ }
225
+ if (newStatusText !== this.lastStatusText) {
226
+ this.uiCtx.setStatus("subagents", newStatusText);
227
+ this.lastStatusText = newStatusText;
228
+ }
229
+ }
230
+ /** Render a finished agent line. */
231
+ renderFinishedLine(a, theme, w) {
232
+ const duration = formatMs((a.completedAt ?? Date.now()) - a.startedAt);
233
+ let icon;
234
+ let statusText;
235
+ if (a.status === "completed") {
236
+ icon = theme.fg("success", "✓");
237
+ statusText = "";
238
+ }
239
+ else if (a.status === "stopped") {
240
+ icon = theme.fg("dim", "■");
241
+ statusText = theme.fg("dim", " stopped");
242
+ }
243
+ else if (a.status === "error") {
244
+ icon = theme.fg("error", "✗");
245
+ const errMsg = a.error ? `: ${a.error.slice(0, 40)}` : "";
246
+ statusText = theme.fg("error", ` error${errMsg}`);
247
+ }
248
+ else {
249
+ // aborted
250
+ icon = theme.fg("error", "✗");
251
+ statusText = theme.fg("warning", " aborted");
252
+ }
253
+ const parts = [];
254
+ const act = this.activity.get(a.id);
255
+ if (act)
256
+ parts.push(formatTurns(act.turnCount, act.maxTurns));
257
+ if (a.toolUses > 0)
258
+ parts.push(`${a.toolUses} tool use${a.toolUses === 1 ? "" : "s"}`);
259
+ parts.push(duration);
260
+ const line = theme.fg("dim", "├─") +
261
+ " " +
262
+ icon +
263
+ " " +
264
+ theme.fg("dim", a.type) +
265
+ " " +
266
+ theme.fg("dim", a.description) +
267
+ " " +
268
+ theme.fg("dim", "·") +
269
+ " " +
270
+ theme.fg("dim", parts.join(" · ")) +
271
+ statusText;
272
+ return truncateToWidth(line, w);
273
+ }
274
+ renderWidget(tui, theme, width) {
275
+ const allAgents = this.manager.listAgents();
276
+ const running = allAgents.filter((a) => a.status === "running");
277
+ const queued = allAgents.filter((a) => a.status === "queued");
278
+ const finished = allAgents.filter((a) => a.status !== "running" &&
279
+ a.status !== "queued" &&
280
+ a.completedAt &&
281
+ this.shouldShowFinished(a.id, a.status));
282
+ const hasActive = running.length > 0 || queued.length > 0;
283
+ const hasFinished = finished.length > 0;
284
+ if (!hasActive && !hasFinished)
285
+ return [];
286
+ const w = width ?? tui.terminal?.columns ?? 80;
287
+ const frame = SPINNER[this.spinnerFrame % SPINNER.length];
288
+ const headingColor = hasActive ? "accent" : "dim";
289
+ const headingIcon = hasActive ? "●" : "○";
290
+ // Build sections: finished (1 line each), running (2 lines each), queued (1 line)
291
+ const finishedLines = finished.map((a) => this.renderFinishedLine(a, theme, w));
292
+ const runningLines = running.map((a) => {
293
+ const act = this.activity.get(a.id);
294
+ const toolCount = a.toolUses;
295
+ const tokens = act?.tokens ?? "";
296
+ const elapsed = formatMs(Date.now() - a.startedAt);
297
+ const activity = act ? describeActivity(act.activeTools, act.responseText) : "starting…";
298
+ const parts = [];
299
+ if (act?.turnCount)
300
+ parts.push(formatTurns(act.turnCount, act.maxTurns));
301
+ if (toolCount > 0)
302
+ parts.push(`${toolCount} tool use${toolCount === 1 ? "" : "s"}`);
303
+ if (tokens)
304
+ parts.push(tokens);
305
+ parts.push(elapsed);
306
+ return [
307
+ truncateToWidth(theme.fg("dim", "├─") +
308
+ ` ${theme.fg("accent", frame)} ${theme.bold(a.type)} ${theme.fg("dim", a.description)} ${theme.fg("dim", "·")} ${theme.fg("dim", parts.join(" · "))}`, w),
309
+ truncateToWidth(theme.fg("dim", "│ ") + theme.fg("dim", ` ⎿ ${activity}`), w),
310
+ ];
311
+ });
312
+ const queuedLine = queued.length > 0
313
+ ? truncateToWidth(theme.fg("dim", "├─") + ` ${theme.fg("muted", "◦")} ${theme.fg("dim", `${queued.length} queued`)}`, w)
314
+ : undefined;
315
+ // Assemble with overflow cap
316
+ const maxBody = MAX_WIDGET_LINES - 1; // heading takes 1 line
317
+ const totalBody = finishedLines.length + runningLines.length * 2 + (queuedLine ? 1 : 0);
318
+ const lines = [truncateToWidth(theme.fg(headingColor, headingIcon) + " " + theme.fg(headingColor, "Agents"), w)];
319
+ if (totalBody <= maxBody) {
320
+ // Everything fits
321
+ lines.push(...finishedLines);
322
+ for (const pair of runningLines)
323
+ lines.push(...pair);
324
+ if (queuedLine)
325
+ lines.push(queuedLine);
326
+ // Fix last connector: ├─ → └─
327
+ if (lines.length > 1) {
328
+ const last = lines.length - 1;
329
+ lines[last] = lines[last].replace("├─", "└─");
330
+ if (runningLines.length > 0 && !queuedLine && last >= 2) {
331
+ lines[last - 1] = lines[last - 1].replace("├─", "└─");
332
+ lines[last] = lines[last].replace("│ ", " ");
333
+ }
334
+ }
335
+ }
336
+ else {
337
+ // Overflow — prioritize: running > queued > finished
338
+ let budget = maxBody - 1; // reserve 1 for overflow indicator
339
+ let hiddenRunning = 0;
340
+ let hiddenFinished = 0;
341
+ // 1. Running agents (2 lines each)
342
+ for (const pair of runningLines) {
343
+ if (budget >= 2) {
344
+ lines.push(...pair);
345
+ budget -= 2;
346
+ }
347
+ else {
348
+ hiddenRunning++;
349
+ }
350
+ }
351
+ // 2. Queued
352
+ if (queuedLine && budget >= 1) {
353
+ lines.push(queuedLine);
354
+ budget--;
355
+ }
356
+ // 3. Finished
357
+ for (const fl of finishedLines) {
358
+ if (budget >= 1) {
359
+ lines.push(fl);
360
+ budget--;
361
+ }
362
+ else {
363
+ hiddenFinished++;
364
+ }
365
+ }
366
+ // Overflow summary
367
+ const overflowParts = [];
368
+ if (hiddenRunning > 0)
369
+ overflowParts.push(`${hiddenRunning} running`);
370
+ if (hiddenFinished > 0)
371
+ overflowParts.push(`${hiddenFinished} finished`);
372
+ if (overflowParts.length > 0) {
373
+ lines.push(truncateToWidth(theme.fg("dim", "└─") + ` ${theme.fg("dim", `+${hiddenRunning + hiddenFinished} more (${overflowParts.join(", ")})`)}`, w));
374
+ }
375
+ }
376
+ return lines;
377
+ }
378
+ dispose() {
379
+ if (this.timer) {
380
+ clearInterval(this.timer);
381
+ this.timer = undefined;
382
+ }
383
+ if (this.uiCtx) {
384
+ if (this.widgetRegistered) {
385
+ this.uiCtx.setWidget("unipi-agents", undefined);
386
+ }
387
+ if (this.lastStatusText !== undefined) {
388
+ this.uiCtx.setStatus?.("subagents", undefined);
389
+ }
390
+ }
391
+ this.widgetRegistered = false;
392
+ this.tui = undefined;
393
+ this.lastStatusText = undefined;
394
+ }
395
+ }
396
+ //# sourceMappingURL=widget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget.js","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/subagents",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "description": "Subagents for UniPi — parallel execution, file locking, workflow integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -12,14 +12,12 @@
12
12
  }
13
13
  },
14
14
  "scripts": {
15
- "build": "tsc",
15
+ "build": "rm -rf dist && tsc -p tsconfig.build.json && node scripts/verify-build.mjs",
16
+ "prepack": "npm run build",
16
17
  "dev": "tsc --watch",
17
18
  "test": "npx tsx --test src/__tests__/*.test.ts"
18
19
  },
19
20
  "dependencies": {
20
- "@pi-unipi/core": "2.4.0",
21
- "@pi-unipi/workflow": "2.4.0",
22
- "@pi-unipi/info-screen": "2.4.0",
23
21
  "@earendil-works/pi-agent-core": "^0.80.0"
24
22
  },
25
23
  "devDependencies": {
@@ -30,8 +28,14 @@
30
28
  "@earendil-works/pi-tui": "^0.80.0",
31
29
  "typebox": "^1.1.38"
32
30
  },
31
+ "files": [
32
+ "dist/**",
33
+ "README.md"
34
+ ],
33
35
  "pi": {
34
- "extensions": [],
36
+ "extensions": [
37
+ "./dist/index.js"
38
+ ],
35
39
  "skills": [],
36
40
  "prompts": [],
37
41
  "themes": []