@gotgenes/pi-subagents 6.7.0 → 6.8.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 +24 -0
- package/docs/architecture/architecture.md +30 -29
- package/docs/plans/0111-split-agent-record-lifecycle.md +582 -0
- package/docs/plans/0123-remove-vi-fn-cast-smell.md +179 -0
- package/docs/retro/0110-agent-activity-tracker.md +44 -0
- package/docs/retro/0111-split-agent-record-lifecycle.md +61 -0
- package/package.json +1 -1
- package/src/agent-manager.ts +41 -21
- package/src/agent-record.ts +45 -34
- package/src/execution-state.ts +17 -0
- package/src/index.ts +2 -1
- package/src/notification-state.ts +27 -0
- package/src/notification.ts +9 -6
- package/src/record-observer.ts +6 -7
- package/src/service-adapter.ts +8 -7
- package/src/tools/agent-tool.ts +6 -4
- package/src/tools/get-result-tool.ts +7 -5
- package/src/tools/steer-tool.ts +8 -6
- package/src/ui/agent-menu.ts +2 -2
- package/src/worktree-state.ts +35 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,30 @@ 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.8.1](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v6.8.0...pi-subagents-v6.8.1) (2026-05-21)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Documentation
|
|
12
|
+
|
|
13
|
+
* plan remove vi.fn() cast smell from test helpers ([#123](https://github.com/gotgenes/pi-packages/issues/123)) ([d0e33b3](https://github.com/gotgenes/pi-packages/commit/d0e33b39cf419bb03a2d69c39992600752ce8517))
|
|
14
|
+
* **retro:** add retro notes for issue [#111](https://github.com/gotgenes/pi-packages/issues/111) ([37eea32](https://github.com/gotgenes/pi-packages/commit/37eea32b32135b792c6c94933267c3e5a5f2cd7b))
|
|
15
|
+
|
|
16
|
+
## [6.8.0](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v6.7.0...pi-subagents-v6.8.0) (2026-05-21)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* add ExecutionState interface ([#111](https://github.com/gotgenes/pi-packages/issues/111)) ([4f33e09](https://github.com/gotgenes/pi-packages/commit/4f33e09b8578509985308b225111cfdfce22bb06))
|
|
22
|
+
* add NotificationState class ([#111](https://github.com/gotgenes/pi-packages/issues/111)) ([cbee34d](https://github.com/gotgenes/pi-packages/commit/cbee34d1944e411dd8593ac0cfbaa3fa66982d00))
|
|
23
|
+
* add WorktreeState class ([#111](https://github.com/gotgenes/pi-packages/issues/111)) ([eddb0c8](https://github.com/gotgenes/pi-packages/commit/eddb0c84311d420f3b50c2861f7585cfd8d1037f))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Documentation
|
|
27
|
+
|
|
28
|
+
* plan AgentRecord lifecycle state split ([#111](https://github.com/gotgenes/pi-packages/issues/111)) ([c271d89](https://github.com/gotgenes/pi-packages/commit/c271d8931729e620e46f05e82cdca8276dbd0a6d))
|
|
29
|
+
* **retro:** add retro notes for issue [#110](https://github.com/gotgenes/pi-packages/issues/110) ([4a48c65](https://github.com/gotgenes/pi-packages/commit/4a48c655752902f86b864f224e209831f73e241d))
|
|
30
|
+
* update architecture doc for AgentRecord lifecycle split ([#111](https://github.com/gotgenes/pi-packages/issues/111)) ([b0d8967](https://github.com/gotgenes/pi-packages/commit/b0d8967601eb7aca41cf59ce7f40f399ccc51fec))
|
|
31
|
+
|
|
8
32
|
## [6.7.0](https://github.com/gotgenes/pi-packages/compare/pi-subagents-v6.6.0...pi-subagents-v6.7.0) (2026-05-21)
|
|
9
33
|
|
|
10
34
|
|
|
@@ -377,17 +377,17 @@ Each step is sequenced so it makes the next step easier.
|
|
|
377
377
|
|
|
378
378
|
### Current smells
|
|
379
379
|
|
|
380
|
-
| Smell
|
|
381
|
-
|
|
|
382
|
-
| ~~Global mutable state~~
|
|
383
|
-
| Closure bag as class
|
|
384
|
-
| ~~Mutable state bag~~
|
|
385
|
-
| ~~Settings relay~~
|
|
386
|
-
| Post-construction mutation |
|
|
387
|
-
| Fire-and-forget callbacks
|
|
388
|
-
| Duplicate `SpawnOptions`
|
|
389
|
-
| Type dumping ground
|
|
390
|
-
| Wide dependency bags
|
|
380
|
+
| Smell | Location | Evidence |
|
|
381
|
+
| ------------------------------ | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
382
|
+
| ~~Global mutable state~~ | ~~`agent-types.ts`~~ | **Fixed #108**: `AgentTypeRegistry` class; `reloadCustomAgents` callback removed from `AgentToolDeps` and `AgentMenuDeps` |
|
|
383
|
+
| Closure bag as class | `createNotificationSystem()` | Returns 4 functions sharing closure state (`pendingNudges`, timers) |
|
|
384
|
+
| ~~Mutable state bag~~ | ~~`AgentActivity` (7 fields)~~ | **Fixed #110**: `AgentActivityTracker` class; `ui-observer.ts` calls transition methods; widget, notification, agent-tool use read-only accessors |
|
|
385
|
+
| ~~Settings relay~~ | ~~`AgentMenuDeps` (13 fields)~~ | **Fixed #109**: `SettingsManager` class; 6 callback fields collapsed to `settings: SettingsManager`; `AgentMenuDeps` now 8 fields |
|
|
386
|
+
| ~~Post-construction mutation~~ | ~~`AgentRecord` non-transition state~~ | **Fixed #111**: `ExecutionState`, `WorktreeState`, `NotificationState` collaborators; `pendingSteers` moved to `AgentManager`; stats encapsulated behind mutation methods |
|
|
387
|
+
| Fire-and-forget callbacks | `AgentManagerOptions` | `onStart`, `onComplete`, `onCompact` wired as closures in `index.ts` |
|
|
388
|
+
| Duplicate `SpawnOptions` | `service.ts` + `agent-manager.ts` | Two incompatible shapes (JSON-friendly vs runtime types) with the same name |
|
|
389
|
+
| Type dumping ground | `types.ts` | `NotificationDetails` used only by notification/renderer; ~~`DEFAULT_AGENT_NAMES` moved to `AgentTypeRegistry` (#108)~~; `AgentConfig` (21 fields) consumers use 2–4 each |
|
|
390
|
+
| Wide dependency bags | `AgentToolDeps` (7), `AgentMenuDeps` (8) | Settings narrowed (#109); registry narrowed (#108); more narrowing planned in D steps |
|
|
391
391
|
|
|
392
392
|
### Step A: Extract state into classes (foundation, parallel)
|
|
393
393
|
|
|
@@ -431,15 +431,16 @@ The shared map on `SubagentRuntime` is now `Map<string, AgentActivityTracker>`.
|
|
|
431
431
|
|
|
432
432
|
Impact: eliminates output-argument writes in `ui-observer.ts`, makes the mutation contract explicit.
|
|
433
433
|
|
|
434
|
-
### Step B: Split `AgentRecord` lifecycle state (#111)
|
|
434
|
+
### ~~Step B: Split `AgentRecord` lifecycle state (#111)~~ — **Done**
|
|
435
435
|
|
|
436
|
-
|
|
437
|
-
The fix is not setter methods — it's splitting along lifecycle boundaries so each object is born complete.
|
|
436
|
+
Split post-construction mutation into phase-specific collaborators, each born complete:
|
|
438
437
|
|
|
439
|
-
- **`
|
|
440
|
-
-
|
|
441
|
-
-
|
|
442
|
-
- **`pendingSteers`**
|
|
438
|
+
- **`ExecutionState`** (`session`, `outputFile`) — constructed in `onSessionCreated`, attached as `record.execution`.
|
|
439
|
+
- **`WorktreeState`** (`path`, `branch`, `cleanupResult`) — constructed at worktree setup, attached as `record.worktreeState`.
|
|
440
|
+
- **`NotificationState`** (`toolCallId`, `resultConsumed`) — constructed by agent-tool after spawn, attached as `record.notification`.
|
|
441
|
+
- **`pendingSteers`** moved to `Map<string, string[]>` on `AgentManager`; steer-tool and service-adapter call `manager.queueSteer()`.
|
|
442
|
+
- Stats (`toolUses`, `lifetimeUsage`, `compactionCount`) encapsulated behind mutation methods (`incrementToolUses`, `addUsage`, `incrementCompactions`) with read-only getters.
|
|
443
|
+
- `AgentRecordInit` trimmed from 19 optional fields to 4 construction-time fields.
|
|
443
444
|
|
|
444
445
|
Each piece is born complete at the moment its information is available.
|
|
445
446
|
The record doesn't accumulate half-baked state — it receives fully constructed collaborators.
|
|
@@ -486,17 +487,17 @@ The 654-line file splits along a natural seam.
|
|
|
486
487
|
|
|
487
488
|
### Expected impact
|
|
488
489
|
|
|
489
|
-
| Metric | Before
|
|
490
|
-
| ------------------------------------------ |
|
|
491
|
-
| Module-scoped mutable state | ~~1 (`agent-types.ts` Map)~~
|
|
492
|
-
| Closure-bag "classes" | ~~2~~ 1 (`createNotificationSystem`; settings free functions **fixed #109**)
|
|
493
|
-
| Externally-mutated state bags | ~~2~~ 1 (`AgentRecord`
|
|
494
|
-
| `AgentManagerOptions` fields | 8
|
|
495
|
-
| `AgentToolDeps` fields | ~~9~~ **7** (−6 registry #108, −1 settings #109 → +1 settings obj)
|
|
496
|
-
| `AgentMenuDeps` fields | ~~13~~ **8** (−6 settings #109 collapsed to 1; −1 registry #108)
|
|
497
|
-
| `SpawnOptions` callback fields | 1 (`onSessionCreated`)
|
|
498
|
-
| Callbacks threaded through deps | ~~8~~ 0 remaining settings callbacks (**fixed #109**); `emitEvent` ×3 remain
|
|
499
|
-
| Types in `types.ts` without a natural home | 4
|
|
490
|
+
| Metric | Before | After |
|
|
491
|
+
| ------------------------------------------ | -------------------------------------------------------------------------------- | ------- |
|
|
492
|
+
| Module-scoped mutable state | ~~1 (`agent-types.ts` Map)~~ | **0** ✓ |
|
|
493
|
+
| Closure-bag "classes" | ~~2~~ 1 (`createNotificationSystem`; settings free functions **fixed #109**) | 0 |
|
|
494
|
+
| Externally-mutated state bags | ~~2~~ ~~1~~ **0** (`AgentRecord` **fixed #111**; `AgentActivity` **fixed #110**) | 0 ✓ |
|
|
495
|
+
| `AgentManagerOptions` fields | 8 | 5 |
|
|
496
|
+
| `AgentToolDeps` fields | ~~9~~ **7** (−6 registry #108, −1 settings #109 → +1 settings obj) | ~5 |
|
|
497
|
+
| `AgentMenuDeps` fields | ~~13~~ **8** (−6 settings #109 collapsed to 1; −1 registry #108) | ~6 ✓ |
|
|
498
|
+
| `SpawnOptions` callback fields | 1 (`onSessionCreated`) | 0 |
|
|
499
|
+
| Callbacks threaded through deps | ~~8~~ 0 remaining settings callbacks (**fixed #109**); `emitEvent` ×3 remain | 0 |
|
|
500
|
+
| Types in `types.ts` without a natural home | 4 | 0 |
|
|
500
501
|
|
|
501
502
|
### Dependency graph
|
|
502
503
|
|