pi-crew 0.9.49 → 0.9.50

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 (39) hide show
  1. package/CHANGELOG.md +209 -0
  2. package/dist/build-meta.json +50 -32
  3. package/dist/index.mjs +75 -42
  4. package/dist/index.mjs.map +4 -4
  5. package/package.json +1 -2
  6. package/skills/distill-persona/SKILL.md +83 -145
  7. package/skills/distill-persona/references/cross-skill-differentiation.md +12 -0
  8. package/skills/distill-persona/references/description-discipline.md +6 -0
  9. package/skills/distill-persona/references/diagnostic-path.md +25 -0
  10. package/skills/distill-persona/references/fidelity-rubric.md +19 -0
  11. package/skills/distill-persona/references/field-models.md +20 -0
  12. package/skills/distill-persona/references/optional-body-sections.md +9 -0
  13. package/skills/distill-persona/references/registry-routing.md +11 -0
  14. package/skills/distill-persona/references/self-upgrade-directive.md +20 -0
  15. package/skills/distill-persona/references/taste-principles.md +8 -0
  16. package/skills/distill-persona/references/topic-variant.md +13 -0
  17. package/skills/distill-persona/references/update-mode.md +7 -0
  18. package/skills/distill-persona/scripts/validate-run.mjs +297 -0
  19. package/skills/distill-software/SKILL.md +151 -90
  20. package/skills/research/SKILL.md +1 -1
  21. package/src/extension/crew-cleanup.ts +18 -1
  22. package/src/extension/crew-vibes/index.ts +11 -2
  23. package/src/extension/register.ts +1 -1
  24. package/src/extension/registration/command-registration.ts +1 -0
  25. package/src/extension/registration/commands.ts +7 -3
  26. package/src/extension/registration/lifecycle-handlers.ts +1 -3
  27. package/src/extension/registration/ui.ts +4 -0
  28. package/src/extension/registration/viewers.ts +3 -0
  29. package/src/extension/team-tool/run.ts +7 -6
  30. package/src/runtime/chain-runner.ts +3 -2
  31. package/src/runtime/pipeline-runner.ts +8 -7
  32. package/src/ui/live-run-sidebar.ts +2 -0
  33. package/src/ui/mascot.ts +11 -9
  34. package/src/ui/render-coalescer.ts +9 -0
  35. package/src/ui/run-snapshot-cache.ts +10 -11
  36. package/src/ui/terminal-status.ts +5 -0
  37. package/src/ui/widget/index.ts +3 -5
  38. package/src/ui/widget/widget-types.ts +0 -1
  39. package/assets/runner-spritesheet.png +0 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,215 @@
3
3
  > **Note:** `atomic-write-v2.ts` / `AtomicWriter` mentioned in historical entries below was consolidated into `atomic-write.ts` as of v0.9.42. This changelog is preserved as historical record — the migration was completed (the v2 class was never adopted; v1 won on simplicity + symlink-safety + link+unlink atomicity). See `docs/migration/atomic-write-v2-migration.md` for the decision rationale.
4
4
 
5
5
 
6
+ ## [0.9.50] — UI animation audit + distillation toolkit v2 (2026-07-25)
7
+
8
+ Eliminates a class of timer-leak / flicker bugs surfaced by the UI animation
9
+ audit (3 parallel reviewer agents, 15 findings), ships the second iteration of
10
+ the distillation toolkit (skill-skipping fixes + anti-lazy levers + dogfood
11
+ feedback), and hardens the crew-vibes footer against a stale-context crash
12
+ that blocked Tier 5 live-TUI verification.
13
+
14
+ ### UI animation audit — 11 of 15 findings applied (619a0cd)
15
+
16
+ From `reports/ui-animation-audit-2026-07-24.md` (9240 bytes, 3 reviewers,
17
+ cross-validated). 12 of 16 enumerated timers rated SAFE, 4 RISKY, 0 LEAKED.
18
+ Applied 11 low-risk fixes; deferred C3 (shared RenderScheduler refactor),
19
+ R1 (render-loop idle-stop), C4 (widget TTL cache — reverted, needs
20
+ invalidate-on-write model), C6 (mascot obscured check), C9 (dead loaders)
21
+ as separate follow-ups needing design + regression tests.
22
+
23
+ **HIGH severity**:
24
+ - **`src/ui/terminal-status.ts` (T1)**: idle re-assert was a recursive
25
+ `setTimeout` that kept the process alive forever on SIGTERM (zombie
26
+ title loop). Added `.unref()` on both idleTimer and flashTimer, and
27
+ wired a `dispose()` callback into `crew-cleanup.ts` SIGTERM/SIGHUP
28
+ handler via `register.ts` opts so the timers stop on shutdown.
29
+ - **`src/extension/registration/commands.ts` + `src/ui/mascot.ts` (C1)**:
30
+ mascot armin framerate 33ms → 100ms (30fps → 10fps) to stop Windows
31
+ TUI flicker. Compensated by 3× per-tick advancement across all 7 armin
32
+ effects (typewriter 6→18 chars, scanline 1→3 rows, rain 1→3, fade
33
+ 18→54, crt 1→3, glitch 1→3, dissolve 22→66) so effects finish in the
34
+ same wall-clock time.
35
+
36
+ **MEDIUM severity**:
37
+ - **`src/extension/registration/viewers.ts` (C2)**: `LiveConversationOverlay`
38
+ wrapper now exposes `dispose()` — was leaking the 200ms `pollTimer` on
39
+ programmatic dismiss.
40
+ - **`src/ui/live-run-sidebar.ts` (C5)**: `autoCloseTimeout` now
41
+ `clearTimeout`-before-set + `.unref()` — was stacking timers (multiple
42
+ `done()` calls) on signature churn.
43
+ - **`src/extension/registration/lifecycle-handlers.ts` (C7)**: crew widget
44
+ pauses while `RunDashboard` overlay is open (`uiState.dashboardOpen` gate
45
+ in `renderTick`); widget stopped rendering under the dashboard overlay.
46
+ Also: `uiState?` made optional + guarded with `if (deps.uiState)` in
47
+ `commands.ts` to avoid regressing the existing nullable-deps pattern.
48
+ - **`src/ui/widget/widget-types.ts` (C8)**: removed dead
49
+ `CrewWidgetState.interval` field (vestigial polling handle never
50
+ assigned, only cleared) across widget-types/index/lifecycle-handlers.
51
+
52
+ **LOW severity**:
53
+ - **`src/ui/render-coalescer.ts` (R3)**: `flush()` now resets `#dropped`
54
+ counter and reports via `#onDrop` callback so observability catches
55
+ dropped frames instead of silent dropping.
56
+ - **`src/ui/run-snapshot-cache.ts` (R2)**: `scheduleRefresh` timer
57
+ `.unref()`'d — was holding the loop alive on idle.
58
+ - **`package.json`**: removed `assets/runner-spritesheet.png` from npm
59
+ `files` field (114KB JPEG source, only used at build-time by
60
+ `build-crew-vibes-font.py`; runtime uses ANSI art + PUA font glyphs).
61
+ Kept in git for reproducibility.
62
+
63
+ ### Crew-vibes stale-context crash fix (40d0380)
64
+
65
+ - **`src/extension/crew-vibes/index.ts`**: `refreshFooter` body wrapped
66
+ wholly in `safeUiCall`. Root cause: `fetchProviderAndRefresh` is async
67
+ — after its `await` the session may have shut down (the
68
+ `session_shutdown` handler cleared the timers, but an in-flight
69
+ `fetchProviderAndRefresh` still resumed), making ctx stale.
70
+ `refreshFooter` then accessed the `hasUI` GETTER, which calls the
71
+ runner's `assertActive()` and THROWS on a stale ctx — uncaught, this
72
+ crashed pi (exit 7) on every non-interactive / shutdown-race startup.
73
+ A stale ctx now logs a warn and degrades gracefully instead of
74
+ crashing — matching the file's stated philosophy: *"Crew-vibes must
75
+ NEVER break the user's session. A broken spinner is not worth a
76
+ crashed pi."* Found while running `real-test-pi-crew` Tier 5 (live
77
+ TUI probe), where pi crashed immediately on spawn, blocking the live
78
+ verification tier.
79
+
80
+ ### Windows test flake fix (99f8452)
81
+
82
+ - **`test/unit/subagent-tools-integration.test.ts`**: `session_before_switch`
83
+ test — added a 200ms drain between `session_shutdown` emit and
84
+ `removeDirWithRetry` call. The background agent's in-flight I/O
85
+ (`mkdir` under `.crew/state/runs`) raced the dir deletion → ENOENT
86
+ `unhandledRejection` AFTER the test ended, failing the whole file on
87
+ `windows-latest`. Same class of bug as commit `58e2491` (Rule 3 test),
88
+ different test case.
89
+
90
+ ### Distillation toolkit v2 (52f089b → ba8b15c, 5 commits)
91
+
92
+ Second iteration of the distillation skillset shipped in v0.9.49.
93
+ Hardens the agent discipline around skill-reading + APPLY evidence,
94
+ adds human-in-the-loop + adversarial scrutinize gates, and dogfoods
95
+ the improved tool on pi-crew itself (mechanical error-message helper
96
+ migration).
97
+
98
+ - **`feat(skills): bundle distillation toolkit`** (`52f089b`) — bundles
99
+ `distill-persona` (person 6-stream + topic exhaustive-sweep; V1-V5,
100
+ F2' dual-agent scoring, 10 mental models, Core Principle #6
101
+ decompose, #7 untrusted-source boundary, Phase 2.6 pre-apply
102
+ effectiveness gate), `distill-software` (codebase flavor: Code-DNA
103
+ 12-axis, toolchain matrix, edge-honesty rubric, tiered effort),
104
+ `research` (field/topic flavor: iterative depth + cost-transparency
105
+ + state-on-disk hooks + rigor: citation verify, source eval,
106
+ tension discovery). Each ships `validate-skill-structure.mjs`
107
+ (output gate) + `validate-run.mjs` (process gate) so agents cannot
108
+ skip the ship-gate. Safe I/O helpers: SSRF guard (`is_safe_url`) +
109
+ secret redaction (8 regex rules).
110
+ - **`feat(skills): fix skill-skipping`** (`1640ba5`) — root cause from
111
+ `pi source core/skills.js`: only the 1-line frontmatter `description`
112
+ enters the agent's system prompt; the skill BODY is never
113
+ auto-injected, so agents skip-read + skip-phases with impunity
114
+ (verified: agents wrote SKILL.md but skipped APPLY; gate never
115
+ checked APPLY evidence). Three layered fixes: (1) embed *"REQUIRED:
116
+ read SKILL.md FULLY + run validate-run, ALL-GREEN"* in the
117
+ description of all 3 distill skills — the only text always in
118
+ context; (2) trim `distill-persona` to <50KB (one read returns the
119
+ whole skill; relocate 11 methodology blocks to `references/`) + add
120
+ Phase 3→4 hard-stop; (3) `validate-run.mjs` APPLY-evidence checks
121
+ (APPLY-LOG.md — distillation = source → essence → APPLY to target;
122
+ standalone SKILL.md = NOT complete) + `--build` mode (alias-tolerant,
123
+ skips APPLY-LOG) for engine-skill builds. Both gates wired into the
124
+ distill workflow ship-gate step so builds cannot declare done
125
+ incomplete.
126
+ - **`feat(skills): anti-lazy levers`** (`df9d45e`) — agents kept finding
127
+ new skip-paths despite artifact-presence gates (latest: distilled 7
128
+ patterns, applied 1, lazily dismissed 6 with "too small / not needed
129
+ yet" — no evidence). Machine gates check artifact PRESENCE not
130
+ reasoning QUALITY, so add two structural levers: (a) **Phase 2.7 PLAN
131
+ APPROVAL GATE** (human-in-the-loop): after the effectiveness-gate,
132
+ present an apply/reject/defer+evidence table and STOP — wait for user
133
+ approval before applying. REJECT requires grep/test evidence (not
134
+ "too small"); DEFER logged to a future-apply roadmap. Autonomous
135
+ fallback writes a LOW-YIELD DEFENSE if applied <30%. (b) **Phase 5.5
136
+ ADVERSARIAL SCRUTINIZE PASS**: fresh-context audit hunting
137
+ reasoning-quality failures (unevidenced rejections, undocumented
138
+ deferrals, low-yield-without-defense, trivial applies, silent
139
+ skips). Outputs `SCRUTINIZE-REPORT.md`; HIGH findings must resolve
140
+ before done. `validate-run.mjs` (default mode): 3 new checks —
141
+ `apply-plan.md` exists, approval/defense marker present,
142
+ `SCRUTINIZE-REPORT.md` exists. `--build` mode skips them (engine
143
+ builds have no target-apply). Decisive proof: a synthetic lazy-case
144
+ (1/7 applied, no approval, no scrutinize) now fails validate-run on
145
+ all three; adding APPROVED + SCRUTINIZE-REPORT flips them to pass.
146
+ - **`feat(distill): remove skill-building from distill-software`**
147
+ (`30f1c93`) — `distill-software` is now purely a target-transformation
148
+ tool (APPLY mode) — it NEVER builds a SKILL.md. That was the root
149
+ cause blocking distillations: agents hit "Phase 3 Build SKILL.md"
150
+ and derailed into Capture mode (building a skill instead of
151
+ transforming the target). `validate-run.mjs` is now mode-aware: APPLY
152
+ mode (APPLY-LOG present) makes SKILL.md optional and requires
153
+ apply-plan + scrutinize; CAPTURE mode (persona/workflow skill-builds)
154
+ keeps SKILL.md required, skips apply-plan/scrutinize. **First real
155
+ APPLY** using the fixed skill (the test): migrated 6 inline
156
+ `err instanceof Error ? err.message : String(err)` patterns to the
157
+ `errorMessage()` helper across `run.ts` / `chain-runner.ts` /
158
+ `pipeline-runner.ts`, resolving 3 shadowing conflicts (local vars
159
+ named `errorMessage`) via renames to `waitErrMsg` / `errMsg` + 9
160
+ downstream edits. Verified: full test suite 190/191 pass (0 fail),
161
+ tsc clean, independent fresh-context scrutinize confirms
162
+ behavior-preserving (no HIGH/MED).
163
+ - **`fix(distill-software): dogfood feedback R1-R3`** (`ba8b15c`) —
164
+ three feedback rounds from oh-my-pi→mya verify reports + operator
165
+ critique. R1: V5 citation rigor — line numbers from `grep -n` output
166
+ only, never estimated (was 42-58% wrong); prefer grep-reproducible
167
+ snippet. PRESENCE counting via `grep -c` exact pattern, never
168
+ semantic scan (overcounted 13→1). Large-file decompose — Core
169
+ Principle #6 + Phase 1 truncation guard. R2: DEFER scrutiny +
170
+ scrutinize hunt #6 for high-value deferrals. Abstraction-surface
171
+ coverage (extraction-completeness guard). R3 (operator critique —
172
+ over-fit + compromised + balanced): de-hardcode the inventory (method
173
+ DERIVED FROM LANGUAGE — no prescribed TS grep, no named example).
174
+ Core Principle #8 reworded to the BALANCED stance: SIZE is never a
175
+ filter axis (large = decompose + apply every batch, never defer),
176
+ BUT this is NOT "apply everything" — verify (V1-V5) + compare
177
+ (3-axis) + effectiveness (2.6) still freely REJECT/SKIP/MERGE on
178
+ merit. The single forbidden filter axis is size; all merit axes
179
+ still apply. Validated by dogfood test on pi-crew;
180
+ `validate-skill-structure` 13/0 ALL-GREEN.
181
+
182
+ ### Lint hygiene (06132e6)
183
+
184
+ - **`src/runtime/chain-runner.ts` + `src/runtime/pipeline-runner.ts`**:
185
+ Biome `--write` fixed 2 FIXABLE `organizeImports` errors introduced
186
+ by `30f1c93` (errorMessage migration left imports out of order).
187
+ `test:critical` 97/97 still pass; lint + format + typecheck all clean.
188
+ Bundle rebuilt so the fix is live for this release.
189
+
190
+ ### Verification
191
+
192
+ - `npm run test:critical` → 97/97 pass (~12-18s run-to-run).
193
+ - `npm run typecheck` → exit 0 (`strip-types import ok`).
194
+ - `npm run lint` → clean (0 errors after the 06132e6 fix).
195
+ - `npx biome format .` → clean (no fixes applied).
196
+ - `npm run build:bundle` → success, dist/index.mjs 2686.9 KB, md5
197
+ `a1481171595fbbe13e9ba0fdc2f97eb8` (rebased after the lint fix).
198
+ - **real-test-pi-crew** all 8 tiers (this session):
199
+ - Tier 1 — `test:critical` 97/97 ✅
200
+ - Tier 2 — 3-path kill-switch proof (default / `=0` / `=1`) all
201
+ 97/97 ✅
202
+ - Tier 3 — typecheck + bundle + staleness OK ✅
203
+ - Tier 4 — install via `packages: ["../../source/my_pi/pi-crew"]`
204
+ in `~/.pi/agent/settings.json` ✅
205
+ - Tier 5 — tmux session spawn OK; `capture-pane` empty (env issue,
206
+ not regression — same as prior sessions)
207
+ - Tier 6 — pty probe definitive: pi renders full TUI (`pi v0.82.0`,
208
+ help line, input box, separators), no crash ✅
209
+ - Tier 7 — smoke team `team_20260725083754_36b77e2431b4cb3c`
210
+ (fast-fix) 3/3 tasks, ~5.5 min, verifier 12.2s, no hang ✅
211
+ - Tier 8 — md5 sync: requires `/quit` + reopen after each bundle
212
+ rebuild (user did so — see session confirmation)
213
+
214
+
6
215
  ## [0.9.49] — Distill workflow + runtime reliability + CI hardening (2026-07-24)
7
216
 
8
217
  Ships the `distill.workflow.md` to the npm package (was project-level only),
@@ -1100,7 +1100,7 @@
1100
1100
  "format": "esm"
1101
1101
  },
1102
1102
  "src/extension/crew-cleanup.ts": {
1103
- "bytes": 5488,
1103
+ "bytes": 6276,
1104
1104
  "imports": [
1105
1105
  {
1106
1106
  "path": "src/runtime/pi-args.ts",
@@ -6936,7 +6936,7 @@
6936
6936
  "format": "esm"
6937
6937
  },
6938
6938
  "src/ui/render-coalescer.ts": {
6939
- "bytes": 2540,
6939
+ "bytes": 2718,
6940
6940
  "imports": [
6941
6941
  {
6942
6942
  "path": "src/utils/internal-error.ts",
@@ -7381,7 +7381,7 @@
7381
7381
  "format": "esm"
7382
7382
  },
7383
7383
  "src/ui/widget/index.ts": {
7384
- "bytes": 13698,
7384
+ "bytes": 13630,
7385
7385
  "imports": [
7386
7386
  {
7387
7387
  "path": "src/config/defaults.ts",
@@ -9373,6 +9373,11 @@
9373
9373
  ],
9374
9374
  "format": "esm"
9375
9375
  },
9376
+ "src/utils/guards.ts": {
9377
+ "bytes": 4343,
9378
+ "imports": [],
9379
+ "format": "esm"
9380
+ },
9376
9381
  "src/state/run-metrics.ts": {
9377
9382
  "bytes": 5832,
9378
9383
  "imports": [
@@ -9513,8 +9518,13 @@
9513
9518
  "format": "esm"
9514
9519
  },
9515
9520
  "src/runtime/chain-runner.ts": {
9516
- "bytes": 19139,
9521
+ "bytes": 19143,
9517
9522
  "imports": [
9523
+ {
9524
+ "path": "src/utils/guards.ts",
9525
+ "kind": "import-statement",
9526
+ "original": "../utils/guards.ts"
9527
+ },
9518
9528
  {
9519
9529
  "path": "src/runtime/chain-parser.ts",
9520
9530
  "kind": "import-statement",
@@ -9833,7 +9843,7 @@
9833
9843
  "format": "esm"
9834
9844
  },
9835
9845
  "src/extension/team-tool/run.ts": {
9836
- "bytes": 42582,
9846
+ "bytes": 42464,
9837
9847
  "imports": [
9838
9848
  {
9839
9849
  "path": "src/agents/discover-agents.ts",
@@ -9885,6 +9895,11 @@
9885
9895
  "kind": "import-statement",
9886
9896
  "original": "../../worktree/worktree-manager.ts"
9887
9897
  },
9898
+ {
9899
+ "path": "src/utils/guards.ts",
9900
+ "kind": "import-statement",
9901
+ "original": "../../utils/guards.ts"
9902
+ },
9888
9903
  {
9889
9904
  "path": "src/utils/internal-error.ts",
9890
9905
  "kind": "import-statement",
@@ -10522,7 +10537,7 @@
10522
10537
  "format": "esm"
10523
10538
  },
10524
10539
  "src/extension/registration/viewers.ts": {
10525
- "bytes": 4252,
10540
+ "bytes": 4299,
10526
10541
  "imports": [
10527
10542
  {
10528
10543
  "path": "src/config/config.ts",
@@ -10955,7 +10970,7 @@
10955
10970
  "format": "esm"
10956
10971
  },
10957
10972
  "src/ui/mascot.ts": {
10958
- "bytes": 14771,
10973
+ "bytes": 14829,
10959
10974
  "imports": [
10960
10975
  {
10961
10976
  "path": "src/utils/visual.ts",
@@ -11002,7 +11017,7 @@
11002
11017
  "format": "esm"
11003
11018
  },
11004
11019
  "src/extension/registration/commands.ts": {
11005
- "bytes": 46314,
11020
+ "bytes": 46482,
11006
11021
  "imports": [
11007
11022
  {
11008
11023
  "path": "src/config/config.ts",
@@ -11320,7 +11335,7 @@
11320
11335
  "format": "esm"
11321
11336
  },
11322
11337
  "src/extension/crew-vibes/index.ts": {
11323
- "bytes": 14575,
11338
+ "bytes": 15022,
11324
11339
  "imports": [
11325
11340
  {
11326
11341
  "path": "src/ui/pi-ui-compat.ts",
@@ -11377,7 +11392,7 @@
11377
11392
  "format": "esm"
11378
11393
  },
11379
11394
  "src/extension/registration/command-registration.ts": {
11380
- "bytes": 2118,
11395
+ "bytes": 2142,
11381
11396
  "imports": [
11382
11397
  {
11383
11398
  "path": "src/config/config.ts",
@@ -11471,7 +11486,7 @@
11471
11486
  "format": "esm"
11472
11487
  },
11473
11488
  "src/ui/run-snapshot-cache.ts": {
11474
- "bytes": 36714,
11489
+ "bytes": 36736,
11475
11490
  "imports": [
11476
11491
  {
11477
11492
  "path": "node:crypto",
@@ -11657,7 +11672,7 @@
11657
11672
  "format": "esm"
11658
11673
  },
11659
11674
  "src/ui/live-run-sidebar.ts": {
11660
- "bytes": 11756,
11675
+ "bytes": 11862,
11661
11676
  "imports": [
11662
11677
  {
11663
11678
  "path": "node:fs",
@@ -11733,7 +11748,7 @@
11733
11748
  "format": "esm"
11734
11749
  },
11735
11750
  "src/extension/registration/ui.ts": {
11736
- "bytes": 6479,
11751
+ "bytes": 6727,
11737
11752
  "imports": [
11738
11753
  {
11739
11754
  "path": "src/config/config.ts",
@@ -12515,7 +12530,7 @@
12515
12530
  "format": "esm"
12516
12531
  },
12517
12532
  "src/extension/registration/lifecycle-handlers.ts": {
12518
- "bytes": 36458,
12533
+ "bytes": 36374,
12519
12534
  "imports": [
12520
12535
  {
12521
12536
  "path": "node:fs",
@@ -12949,7 +12964,7 @@
12949
12964
  "format": "esm"
12950
12965
  },
12951
12966
  "src/extension/register.ts": {
12952
- "bytes": 5297,
12967
+ "bytes": 5363,
12953
12968
  "imports": [
12954
12969
  {
12955
12970
  "path": "src/config/config.ts",
@@ -13111,7 +13126,7 @@
13111
13126
  "imports": [],
13112
13127
  "exports": [],
13113
13128
  "inputs": {},
13114
- "bytes": 6002780
13129
+ "bytes": 6010444
13115
13130
  },
13116
13131
  "dist/index.mjs": {
13117
13132
  "imports": [
@@ -14876,7 +14891,7 @@
14876
14891
  "bytesInOutput": 3634
14877
14892
  },
14878
14893
  "src/runtime/pi-json-output.ts": {
14879
- "bytesInOutput": 4323
14894
+ "bytesInOutput": 4327
14880
14895
  },
14881
14896
  "src/runtime/child-pi-streams.ts": {
14882
14897
  "bytesInOutput": 9234
@@ -14891,7 +14906,7 @@
14891
14906
  "bytesInOutput": 29439
14892
14907
  },
14893
14908
  "src/extension/crew-cleanup.ts": {
14894
- "bytesInOutput": 2872
14909
+ "bytesInOutput": 3027
14895
14910
  },
14896
14911
  "src/utils/file-coalescer.ts": {
14897
14912
  "bytesInOutput": 1204
@@ -15671,7 +15686,7 @@
15671
15686
  "bytesInOutput": 1943
15672
15687
  },
15673
15688
  "src/ui/render-coalescer.ts": {
15674
- "bytesInOutput": 1979
15689
+ "bytesInOutput": 2165
15675
15690
  },
15676
15691
  "src/utils/visual.ts": {
15677
15692
  "bytesInOutput": 4539
@@ -15728,7 +15743,7 @@
15728
15743
  "bytesInOutput": 6263
15729
15744
  },
15730
15745
  "src/ui/widget/index.ts": {
15731
- "bytesInOutput": 9607
15746
+ "bytesInOutput": 9552
15732
15747
  },
15733
15748
  "src/ui/tool-progress-formatter.ts": {
15734
15749
  "bytesInOutput": 2682
@@ -15964,6 +15979,9 @@
15964
15979
  "src/runtime/team-runner.ts": {
15965
15980
  "bytesInOutput": 62017
15966
15981
  },
15982
+ "src/utils/guards.ts": {
15983
+ "bytesInOutput": 174
15984
+ },
15967
15985
  "src/state/run-metrics.ts": {
15968
15986
  "bytesInOutput": 1522
15969
15987
  },
@@ -15980,7 +15998,7 @@
15980
15998
  "bytesInOutput": 4930
15981
15999
  },
15982
16000
  "src/runtime/chain-runner.ts": {
15983
- "bytesInOutput": 15716
16001
+ "bytesInOutput": 15688
15984
16002
  },
15985
16003
  "src/runtime/handoff-manager.ts": {
15986
16004
  "bytesInOutput": 12576
@@ -16019,7 +16037,7 @@
16019
16037
  "bytesInOutput": 6553
16020
16038
  },
16021
16039
  "src/extension/team-tool/run.ts": {
16022
- "bytesInOutput": 31463
16040
+ "bytesInOutput": 31308
16023
16041
  },
16024
16042
  "src/extension/team-tool.ts": {
16025
16043
  "bytesInOutput": 37886
@@ -16049,7 +16067,7 @@
16049
16067
  "bytesInOutput": 14103
16050
16068
  },
16051
16069
  "src/extension/registration/viewers.ts": {
16052
- "bytesInOutput": 3182
16070
+ "bytesInOutput": 3242
16053
16071
  },
16054
16072
  "src/ui/dashboard-panes/agents-pane.ts": {
16055
16073
  "bytesInOutput": 4528
@@ -16106,13 +16124,13 @@
16106
16124
  "bytesInOutput": 1913
16107
16125
  },
16108
16126
  "src/ui/mascot.ts": {
16109
- "bytesInOutput": 15857
16127
+ "bytesInOutput": 15930
16110
16128
  },
16111
16129
  "src/ui/settings-overlay.ts": {
16112
16130
  "bytesInOutput": 30796
16113
16131
  },
16114
16132
  "src/extension/registration/commands.ts": {
16115
- "bytesInOutput": 40620
16133
+ "bytesInOutput": 40730
16116
16134
  },
16117
16135
  "src/runtime/subagent-manager.ts": {
16118
16136
  "bytesInOutput": 16716
@@ -16124,7 +16142,7 @@
16124
16142
  "bytesInOutput": 4563
16125
16143
  },
16126
16144
  "src/ui/live-run-sidebar.ts": {
16127
- "bytesInOutput": 9794
16145
+ "bytesInOutput": 9918
16128
16146
  },
16129
16147
  "src/extension/registration/ui.ts": {
16130
16148
  "bytesInOutput": 4277
@@ -16178,7 +16196,7 @@
16178
16196
  "bytesInOutput": 3150
16179
16197
  },
16180
16198
  "src/extension/register.ts": {
16181
- "bytesInOutput": 1848
16199
+ "bytesInOutput": 1914
16182
16200
  },
16183
16201
  "src/ui/deploy-bundled-themes.ts": {
16184
16202
  "bytesInOutput": 1188
@@ -16196,7 +16214,7 @@
16196
16214
  "bytesInOutput": 1204
16197
16215
  },
16198
16216
  "src/extension/crew-vibes/index.ts": {
16199
- "bytesInOutput": 11458
16217
+ "bytesInOutput": 11473
16200
16218
  },
16201
16219
  "src/extension/crew-vibes/config.ts": {
16202
16220
  "bytesInOutput": 5251
@@ -16223,7 +16241,7 @@
16223
16241
  "bytesInOutput": 2457
16224
16242
  },
16225
16243
  "src/extension/registration/command-registration.ts": {
16226
- "bytesInOutput": 1111
16244
+ "bytesInOutput": 1137
16227
16245
  },
16228
16246
  "src/extension/registration/context-builder.ts": {
16229
16247
  "bytesInOutput": 3792
@@ -16241,7 +16259,7 @@
16241
16259
  "bytesInOutput": 382
16242
16260
  },
16243
16261
  "src/ui/run-snapshot-cache.ts": {
16244
- "bytesInOutput": 28658
16262
+ "bytesInOutput": 28672
16245
16263
  },
16246
16264
  "src/extension/registration/crash-recovery-cache.ts": {
16247
16265
  "bytesInOutput": 701
@@ -16262,7 +16280,7 @@
16262
16280
  "bytesInOutput": 2451
16263
16281
  },
16264
16282
  "src/extension/registration/lifecycle-handlers.ts": {
16265
- "bytesInOutput": 24143
16283
+ "bytesInOutput": 24058
16266
16284
  },
16267
16285
  "src/runtime/crew-broker.ts": {
16268
16286
  "bytesInOutput": 35322
@@ -16322,7 +16340,7 @@
16322
16340
  "bytesInOutput": 81
16323
16341
  }
16324
16342
  },
16325
- "bytes": 2750679
16343
+ "bytes": 2751387
16326
16344
  }
16327
16345
  }
16328
16346
  }