@gotgenes/pi-subagents 6.14.0 → 6.14.1

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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [6.14.1](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v6.14.0...pi-subagents-v6.14.1) (2026-05-23)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * resolve fallow dead-code warnings ([2113f6b](https://github.com/gotgenes/pi-packages/commit/2113f6bc49812ce32ac68d0e2dd88e0a60b4474a))
14
+
15
+
16
+ ### Documentation
17
+
18
+ * **retro:** add retro notes for issue [#152](https://github.com/gotgenes/pi-packages/issues/152) ([7337bc1](https://github.com/gotgenes/pi-packages/commit/7337bc175528b4fb99dbc765eb06f0bcf2accec1))
19
+
8
20
  ## [6.14.0](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v6.13.1...pi-subagents-v6.14.0) (2026-05-23)
9
21
 
10
22
 
@@ -0,0 +1,34 @@
1
+ ---
2
+ issue: 152
3
+ issue_title: "Add promptSnippet to pi-subagents tools"
4
+ ---
5
+
6
+ # Retro: #152 — Add `promptSnippet` to pi-subagents tools
7
+
8
+ ## Final Retrospective (2026-05-22)
9
+
10
+ ### Session summary
11
+
12
+ Added `promptSnippet` to the `Agent`, `get_subagent_result`, and `steer_subagent` tool registrations in pi-subagents, matching the convention used by pi-github-tools and pi-colgrep.
13
+ The full plan→TDD→ship pipeline completed in one session with zero rework.
14
+ Released as `pi-subagents-v6.14.0`.
15
+
16
+ ### Observations
17
+
18
+ #### What went well
19
+
20
+ - Clean single-cycle execution: the issue was unambiguous, the plan correctly scoped it as one TDD step, and the implementation matched the plan exactly.
21
+ - Cross-package convention check (grepping sibling packages for `promptSnippet` usage) confirmed the `"tool_name: One-liner."` format before writing the plan, avoiding any wording rework.
22
+
23
+ #### What caused friction (agent side)
24
+
25
+ No friction points identified.
26
+ The issue was a straightforward property addition with no design decisions, no interface changes, and no downstream breakage.
27
+
28
+ #### What caused friction (user side)
29
+
30
+ No friction points identified.
31
+
32
+ ### Changes made
33
+
34
+ 1. Created `packages/pi-subagents/docs/retro/0152-add-prompt-snippet.md` (this file).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gotgenes/pi-subagents",
3
- "version": "6.14.0",
3
+ "version": "6.14.1",
4
4
  "exports": {
5
5
  ".": "./src/service.ts"
6
6
  },
@@ -35,8 +35,7 @@
35
35
  "@earendil-works/pi-tui": ">=0.75.0"
36
36
  },
37
37
  "dependencies": {
38
- "@sinclair/typebox": "^0.34.49",
39
- "nanoid": "^5.0.0"
38
+ "@sinclair/typebox": "^0.34.49"
40
39
  },
41
40
  "engines": {
42
41
  "node": ">=22"
@@ -430,6 +430,7 @@ export class AgentManager {
430
430
  }
431
431
 
432
432
  /** Whether any agents are still running or queued. */
433
+ // fallow-ignore-next-line unused-class-member
433
434
  hasRunning(): boolean {
434
435
  return [...this.agents.values()].some(
435
436
  r => r.status === "running" || r.status === "queued",
@@ -437,6 +438,7 @@ export class AgentManager {
437
438
  }
438
439
 
439
440
  /** Abort all running and queued agents immediately. */
441
+ // fallow-ignore-next-line unused-class-member
440
442
  abortAll(): number {
441
443
  let count = 0;
442
444
  // Clear queued agents first
@@ -460,6 +462,7 @@ export class AgentManager {
460
462
  }
461
463
 
462
464
  /** Wait for all running and queued agents to complete (including queued ones). */
465
+ // fallow-ignore-next-line unused-class-member
463
466
  async waitForAll(): Promise<void> {
464
467
  // Loop because drainQueue respects the concurrency limit — as running
465
468
  // agents finish they start queued ones, which need awaiting too.
@@ -1,6 +1,2 @@
1
- export {
2
- type LifecycleManager,
3
- type LifecycleRuntime,
4
- SessionLifecycleHandler,
5
- } from "./lifecycle.js";
6
- export { ToolStartHandler, type ToolStartRuntime } from "./tool-start.js";
1
+ export { SessionLifecycleHandler } from "./lifecycle.js";
2
+ export { ToolStartHandler } from "./tool-start.js";
package/src/types.ts CHANGED
@@ -4,7 +4,6 @@
4
4
 
5
5
  import type { ThinkingLevel } from "@earendil-works/pi-ai";
6
6
 
7
- export type { AgentRecordInit, AgentRecordStatus } from "./agent-record.js";
8
7
 
9
8
  export { AgentRecord } from "./agent-record.js";
10
9
  export type { ThinkingLevel };
@@ -64,6 +64,7 @@ export class AgentWidget {
64
64
  ) {}
65
65
 
66
66
  /** Set the UI context (grabbed from first tool execution). */
67
+ // fallow-ignore-next-line unused-class-member
67
68
  setUICtx(ctx: UICtx) {
68
69
  if (ctx !== this.uiCtx) {
69
70
  // UICtx changed — the widget registered on the old context is gone.
@@ -79,6 +80,7 @@ export class AgentWidget {
79
80
  * Called on each new turn (tool_execution_start).
80
81
  * Ages finished agents and clears those that have lingered long enough.
81
82
  */
83
+ // fallow-ignore-next-line unused-class-member
82
84
  onTurnStart() {
83
85
  // Age all finished agents
84
86
  for (const [id, age] of this.finishedTurnAge) {
@@ -89,6 +91,7 @@ export class AgentWidget {
89
91
  }
90
92
 
91
93
  /** Ensure the widget update timer is running. */
94
+ // fallow-ignore-next-line unused-class-member
92
95
  ensureTimer() {
93
96
  if (!this.widgetInterval) {
94
97
  this.widgetInterval = setInterval(() => this.update(), 80);
@@ -103,6 +106,7 @@ export class AgentWidget {
103
106
  }
104
107
 
105
108
  /** Record an agent as finished (call when agent completes). */
109
+ // fallow-ignore-next-line unused-class-member
106
110
  markFinished(agentId: string) {
107
111
  if (!this.finishedTurnAge.has(agentId)) {
108
112
  this.finishedTurnAge.set(agentId, 0);
@@ -354,6 +358,7 @@ export class AgentWidget {
354
358
  }
355
359
  }
356
360
 
361
+ // fallow-ignore-next-line unused-class-member
357
362
  dispose() {
358
363
  if (this.widgetInterval) {
359
364
  clearInterval(this.widgetInterval);
@@ -90,6 +90,7 @@ export class ConversationViewer implements Component {
90
90
  });
91
91
  }
92
92
 
93
+ // fallow-ignore-next-line unused-class-member
93
94
  handleInput(data: string): void {
94
95
  if (matchesKey(data, "escape") || matchesKey(data, "q")) {
95
96
  this.closed = true;
@@ -199,8 +200,10 @@ export class ConversationViewer implements Component {
199
200
  return lines;
200
201
  }
201
202
 
203
+ // fallow-ignore-next-line unused-class-member
202
204
  invalidate(): void { /* no cached state to clear */ }
203
205
 
206
+ // fallow-ignore-next-line unused-class-member
204
207
  dispose(): void {
205
208
  this.closed = true;
206
209
  if (this.unsubscribe) {