pi-crew 0.9.51 → 0.9.52

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 (610) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +216 -20
  3. package/dist/build-meta.json +2090 -1638
  4. package/dist/index.mjs +18057 -17119
  5. package/docs/actions-reference.md +431 -1
  6. package/package.json +19 -9
  7. package/schema.json +41 -0
  8. package/scripts/check-bundle-size.mjs +38 -0
  9. package/scripts/test-runner.mjs +11 -1
  10. package/dist/index.mjs.map +0 -7
  11. package/docs/FEATURE_INTAKE.md +0 -126
  12. package/docs/HARNESS.md +0 -87
  13. package/docs/HARNESS_BACKLOG.md +0 -89
  14. package/docs/PROJECT_REVIEW.md +0 -270
  15. package/docs/PROJECT_REVIEW_FIXES.md +0 -342
  16. package/docs/PROJECT_REVIEW_ROUND4.md +0 -156
  17. package/docs/PROJECT_REVIEW_ROUND5.md +0 -86
  18. package/docs/REVIEW-FINDINGS-2026-06 +0 -357
  19. package/docs/REVIEW-FINDINGS-2026-07-CORE.md +0 -139
  20. package/docs/REVIEW-FINDINGS-2026-07.md +0 -125
  21. package/docs/TEST_MATRIX.md +0 -51
  22. package/docs/archive/README.md +0 -91
  23. package/docs/archive/followup-review-round3-2026-05-12.md +0 -342
  24. package/docs/archive/followup-review-round4-2026-05-13.md +0 -107
  25. package/docs/archive/pi-crew-bugs.md +0 -961
  26. package/docs/archive/pi-crew-test-final.md +0 -120
  27. package/docs/archive/pi-crew-test-results.md +0 -260
  28. package/docs/archive/pi-crew-test-round2.md +0 -136
  29. package/docs/archive/pi-crew-test-round4.md +0 -100
  30. package/docs/archive/pi-crew-test-round5.md +0 -70
  31. package/docs/archive/pi-crew-test-round6.md +0 -110
  32. package/docs/archive/pi-crew-v0.5.10-audit-fix-plan.md +0 -60
  33. package/docs/archive/pi-crew-v0.5.11-audit-fix-plan.md +0 -92
  34. package/docs/archive/pi-crew-v0.5.12-audit-fix-plan.md +0 -76
  35. package/docs/archive/pi-crew-v0.5.13-audit-fix-plan.md +0 -75
  36. package/docs/archive/pi-crew-v0.5.14-audit-fix-plan.md +0 -75
  37. package/docs/archive/pi-crew-v0.5.16-audit-fix-plan.md +0 -35
  38. package/docs/archive/pi-crew-v0.5.17-audit-fix-plan.md +0 -80
  39. package/docs/archive/pi-crew-v0.5.5-audit-fix-plan.md +0 -133
  40. package/docs/archive/pi-crew-v0.5.9-audit-fix-plan.md +0 -88
  41. package/docs/archive/pi-mono-opportunities.md +0 -969
  42. package/docs/archive/pi-mono-review.md +0 -291
  43. package/docs/archive/pi-subagent4-comparison.md +0 -261
  44. package/docs/archive/pi-subagents3-deep-analysis.md +0 -508
  45. package/docs/bugs/bug-021-notification-badge-counter-misleading.md +0 -293
  46. package/docs/bugs/bug-023-chain-windows-path-resolution.md +0 -106
  47. package/docs/bugs/bug-quota-display-truncation.md +0 -223
  48. package/docs/bugs/cross-session-notification-leakage.md +0 -82
  49. package/docs/code-review-2026-05-11.md +0 -592
  50. package/docs/coding-agent-optimization.md +0 -268
  51. package/docs/comparison-pi-subagents-vs-pi-crew.md +0 -303
  52. package/docs/decisions/0001-durable-state.md +0 -41
  53. package/docs/decisions/0002-child-process-for-async.md +0 -42
  54. package/docs/decisions/0003-depth-guard.md +0 -36
  55. package/docs/decisions/0004-execfile-over-exec.md +0 -34
  56. package/docs/decisions/0005-no-parameter-properties.md +0 -49
  57. package/docs/decisions/0006-publish-bundled-esm.md +0 -63
  58. package/docs/decisions/0007-active-run-binary-index.md +0 -54
  59. package/docs/decisions/0008-child-pi-warm-pool.md +0 -61
  60. package/docs/decisions/2026-07-21-broker-phase4-default-on.md +0 -77
  61. package/docs/decisions/2026-07-21-broker-windows-perms.md +0 -91
  62. package/docs/decisions/2026-07-22-broker-phase4-gated-on.md +0 -99
  63. package/docs/decisions/2026-07-24-oidc-trusted-publishing.md +0 -112
  64. package/docs/decisions/2026-07-26-c6-mascot-visibility-not-wired.md +0 -84
  65. package/docs/decisions/README.md +0 -26
  66. package/docs/deep-review-report.md +0 -384
  67. package/docs/distillation/cybersecurity-patterns.md +0 -294
  68. package/docs/feature-analysis-subagent4.md +0 -305
  69. package/docs/fix-plan-disabletools-exit-null.md +0 -219
  70. package/docs/fixes/BATCH_A_H1_H2.md +0 -86
  71. package/docs/fixes/bug-006-foreground-cancel-concurrent.md +0 -78
  72. package/docs/fixes/bug-007-async-notifier-stale-ctx.md +0 -112
  73. package/docs/fixes/bug-008-child-process-silent-timeout.md +0 -100
  74. package/docs/fixes/bug-009-executor-yield-limit-needs-attention.md +0 -75
  75. package/docs/fixes/bug-010-child-process-api-key-filtered.md +0 -109
  76. package/docs/fixes/bug-011-spawn-pi-enoent.md +0 -92
  77. package/docs/fixes/bug-012-essential-env-stripped.md +0 -89
  78. package/docs/fixes/bug-013-background-runner-death.md +0 -84
  79. package/docs/fixes/bug-014-infinite-retry-loop-needs-attention.md +0 -82
  80. package/docs/fixes/bug-015-background-runner-sigterm.md +0 -65
  81. package/docs/fixes/bug-017-background-runner-session-shutdown.md +0 -66
  82. package/docs/fixes/bug-017-background-runner-sigkill-double-fork.md +0 -28
  83. package/docs/fixes/bug-018-child-pi-worker-stdin-hang.md +0 -61
  84. package/docs/fixes/bug-019-phantom-runs-temp-workspace.md +0 -52
  85. package/docs/fixes/bug-020-infinite-retry-loop-needs-attention.md +0 -47
  86. package/docs/fixes/v0.9.10/locks-fix-verify.md +0 -3
  87. package/docs/fixes/v0.9.10/smoke-test.md +0 -12
  88. package/docs/followup-plan-2026-05-12.md +0 -463
  89. package/docs/followup-review-2026-05-12.md +0 -297
  90. package/docs/goals.md +0 -59
  91. package/docs/implementation-plan-top3.md +0 -333
  92. package/docs/issue-29-analysis.md +0 -189
  93. package/docs/live-mailbox-runtime.md +0 -36
  94. package/docs/migration/atomic-write-v2-migration.md +0 -299
  95. package/docs/next-upgrade-roadmap.md +0 -808
  96. package/docs/oh-my-pi-research.md +0 -509
  97. package/docs/optimization-plan-2026-07.md +0 -366
  98. package/docs/optimization-plan.md +0 -644
  99. package/docs/patterns/command-agent-skill.md +0 -71
  100. package/docs/perf/baseline-2026-05.md +0 -113
  101. package/docs/perf/final-report-2026-05.md +0 -206
  102. package/docs/perf/optimization-plan-2026-07-verified.md +0 -396
  103. package/docs/perf/performance-audit-report-2026-07.md +0 -948
  104. package/docs/perf/performance-review-2026-07.md +0 -287
  105. package/docs/perf/sprint-1-report.md +0 -71
  106. package/docs/perf/sprint-2-report.md +0 -81
  107. package/docs/perf/sprint-2.5-report.md +0 -53
  108. package/docs/perf/sprint-3-report.md +0 -36
  109. package/docs/perf/sprint-4-report.md +0 -47
  110. package/docs/perf/sprint-5-report.md +0 -51
  111. package/docs/perf/sprint-6-report.md +0 -94
  112. package/docs/perf/sprint-7-report.md +0 -74
  113. package/docs/perf/upgrade-plan-2026-05.md +0 -147
  114. package/docs/performance-optimization-execution-plan.md +0 -520
  115. package/docs/phase4-triage.md +0 -58
  116. package/docs/pi-crew-investigation-report.md +0 -411
  117. package/docs/product/README.md +0 -31
  118. package/docs/product/platform.md +0 -27
  119. package/docs/product/runtime-safety.md +0 -37
  120. package/docs/product/team-run.md +0 -39
  121. package/docs/product/team-tool.md +0 -37
  122. package/docs/runtime-analysis-child-vs-live.md +0 -171
  123. package/docs/runtime-migration-in-process-analysis.md +0 -250
  124. package/docs/skills/REFERENCE.md +0 -138
  125. package/docs/stories/README.md +0 -32
  126. package/docs/stories/US-DEPS-major-upgrade.md +0 -62
  127. package/docs/stories/backlog.md +0 -36
  128. package/docs/superpowers/plans/2026-06-09-fallow-patterns-adoption.md +0 -1270
  129. package/docs/templates/decision.md +0 -27
  130. package/docs/templates/story.md +0 -44
  131. package/docs/templates/validation-report.md +0 -32
  132. package/docs/ui-optimization-plan.md +0 -447
  133. package/src/adapters/claude-adapter.ts +0 -23
  134. package/src/adapters/codex-adapter.ts +0 -21
  135. package/src/adapters/cursor-adapter.ts +0 -17
  136. package/src/adapters/export-util.ts +0 -143
  137. package/src/adapters/index.ts +0 -15
  138. package/src/adapters/registry.ts +0 -18
  139. package/src/adapters/types.ts +0 -23
  140. package/src/agents/agent-config.ts +0 -194
  141. package/src/agents/agent-search.ts +0 -98
  142. package/src/agents/agent-serializer.ts +0 -38
  143. package/src/agents/discover-agents.ts +0 -623
  144. package/src/benchmark/benchmark-runner.ts +0 -313
  145. package/src/benchmark/feedback-loop.ts +0 -73
  146. package/src/config/config.ts +0 -1269
  147. package/src/config/defaults.ts +0 -193
  148. package/src/config/drift-detector.ts +0 -290
  149. package/src/config/markers.ts +0 -330
  150. package/src/config/resilient-parser.ts +0 -117
  151. package/src/config/role-tools.ts +0 -118
  152. package/src/config/suggestions.ts +0 -75
  153. package/src/config/types.ts +0 -278
  154. package/src/errors.ts +0 -194
  155. package/src/extension/action-suggestions.ts +0 -117
  156. package/src/extension/async-notifier.ts +0 -179
  157. package/src/extension/autonomous-policy.ts +0 -209
  158. package/src/extension/command-completions.ts +0 -120
  159. package/src/extension/context-status-injection.ts +0 -185
  160. package/src/extension/crew-autocomplete.ts +0 -131
  161. package/src/extension/crew-cleanup.ts +0 -168
  162. package/src/extension/crew-input-router.ts +0 -93
  163. package/src/extension/crew-shortcuts.ts +0 -87
  164. package/src/extension/crew-vibes/cat-frames.ts +0 -18
  165. package/src/extension/crew-vibes/config.ts +0 -195
  166. package/src/extension/crew-vibes/figures.ts +0 -101
  167. package/src/extension/crew-vibes/font-detect.ts +0 -71
  168. package/src/extension/crew-vibes/footer.ts +0 -292
  169. package/src/extension/crew-vibes/index.ts +0 -432
  170. package/src/extension/crew-vibes/provider-usage.ts +0 -396
  171. package/src/extension/crew-vibes/render.ts +0 -206
  172. package/src/extension/crew-vibes/speed.ts +0 -286
  173. package/src/extension/cross-extension-rpc.ts +0 -350
  174. package/src/extension/help.ts +0 -62
  175. package/src/extension/import-index.ts +0 -74
  176. package/src/extension/knowledge-injection.ts +0 -402
  177. package/src/extension/management.ts +0 -571
  178. package/src/extension/message-renderers.ts +0 -108
  179. package/src/extension/notification-router.ts +0 -152
  180. package/src/extension/notification-sink.ts +0 -54
  181. package/src/extension/pi-api.ts +0 -56
  182. package/src/extension/plan-orchestrate.ts +0 -302
  183. package/src/extension/project-init.ts +0 -170
  184. package/src/extension/register.ts +0 -113
  185. package/src/extension/registration/artifact-cleanup.ts +0 -20
  186. package/src/extension/registration/command-registration.ts +0 -58
  187. package/src/extension/registration/command-utils.ts +0 -58
  188. package/src/extension/registration/commands.ts +0 -1228
  189. package/src/extension/registration/compaction-guard.ts +0 -333
  190. package/src/extension/registration/context-builder.ts +0 -135
  191. package/src/extension/registration/crash-recovery-cache.ts +0 -54
  192. package/src/extension/registration/foreground-run-controller.ts +0 -238
  193. package/src/extension/registration/hook-registration.ts +0 -119
  194. package/src/extension/registration/lazy-configurers.ts +0 -124
  195. package/src/extension/registration/lifecycle-handlers.ts +0 -923
  196. package/src/extension/registration/lifecycle.ts +0 -259
  197. package/src/extension/registration/observability.ts +0 -322
  198. package/src/extension/registration/registration-types.ts +0 -158
  199. package/src/extension/registration/runtime-cleanup.ts +0 -230
  200. package/src/extension/registration/subagent-helpers.ts +0 -125
  201. package/src/extension/registration/subagent-manager-setup.ts +0 -330
  202. package/src/extension/registration/subagent-tools.ts +0 -456
  203. package/src/extension/registration/team-tool.ts +0 -220
  204. package/src/extension/registration/tool-registration.ts +0 -50
  205. package/src/extension/registration/ui.ts +0 -172
  206. package/src/extension/registration/viewers.ts +0 -121
  207. package/src/extension/registration/wire-cross-extension.ts +0 -37
  208. package/src/extension/result-watcher.ts +0 -139
  209. package/src/extension/rpc-hmac.ts +0 -256
  210. package/src/extension/run-bundle-schema.ts +0 -104
  211. package/src/extension/run-export.ts +0 -97
  212. package/src/extension/run-import.ts +0 -168
  213. package/src/extension/run-index.ts +0 -131
  214. package/src/extension/run-maintenance.ts +0 -190
  215. package/src/extension/session-summary.ts +0 -18
  216. package/src/extension/team-manager-command.ts +0 -153
  217. package/src/extension/team-onboard.ts +0 -177
  218. package/src/extension/team-recommendation.ts +0 -288
  219. package/src/extension/team-tool/anchor.ts +0 -172
  220. package/src/extension/team-tool/api.ts +0 -1244
  221. package/src/extension/team-tool/auto-summarize.ts +0 -142
  222. package/src/extension/team-tool/cache-control.ts +0 -19
  223. package/src/extension/team-tool/cancel.ts +0 -337
  224. package/src/extension/team-tool/chain-dispatch.ts +0 -95
  225. package/src/extension/team-tool/chain-executor.ts +0 -379
  226. package/src/extension/team-tool/config-patch.ts +0 -50
  227. package/src/extension/team-tool/context.ts +0 -149
  228. package/src/extension/team-tool/destructive-gate.ts +0 -52
  229. package/src/extension/team-tool/doctor.ts +0 -431
  230. package/src/extension/team-tool/explain.ts +0 -282
  231. package/src/extension/team-tool/failure-patterns.ts +0 -118
  232. package/src/extension/team-tool/goal-wrap.ts +0 -330
  233. package/src/extension/team-tool/goal.ts +0 -556
  234. package/src/extension/team-tool/handle-schedule.ts +0 -332
  235. package/src/extension/team-tool/handle-settings.ts +0 -520
  236. package/src/extension/team-tool/health-monitor.ts +0 -481
  237. package/src/extension/team-tool/inspect.ts +0 -88
  238. package/src/extension/team-tool/intent-policy.ts +0 -45
  239. package/src/extension/team-tool/lifecycle-actions.ts +0 -615
  240. package/src/extension/team-tool/orchestrate.ts +0 -98
  241. package/src/extension/team-tool/parallel-dispatch.ts +0 -183
  242. package/src/extension/team-tool/plan.ts +0 -50
  243. package/src/extension/team-tool/respond.ts +0 -150
  244. package/src/extension/team-tool/run-not-found.ts +0 -49
  245. package/src/extension/team-tool/run.ts +0 -1035
  246. package/src/extension/team-tool/status.ts +0 -260
  247. package/src/extension/team-tool/workflow-manage.ts +0 -261
  248. package/src/extension/team-tool-types.ts +0 -26
  249. package/src/extension/team-tool.ts +0 -1116
  250. package/src/extension/tool-result.ts +0 -16
  251. package/src/extension/validate-resources.ts +0 -108
  252. package/src/hooks/registry.ts +0 -200
  253. package/src/hooks/types.ts +0 -69
  254. package/src/i18n.ts +0 -212
  255. package/src/observability/correlation.ts +0 -50
  256. package/src/observability/event-bus.ts +0 -86
  257. package/src/observability/event-to-metric.ts +0 -170
  258. package/src/observability/exporters/adapter.ts +0 -27
  259. package/src/observability/exporters/otlp-exporter.ts +0 -356
  260. package/src/observability/exporters/prometheus-exporter.ts +0 -54
  261. package/src/observability/metric-registry.ts +0 -100
  262. package/src/observability/metric-retention.ts +0 -64
  263. package/src/observability/metric-sink.ts +0 -99
  264. package/src/observability/metrics-primitives.ts +0 -219
  265. package/src/plugins/plugin-define.ts +0 -6
  266. package/src/plugins/plugin-registry.ts +0 -32
  267. package/src/plugins/plugins/index.ts +0 -3
  268. package/src/plugins/plugins/nextjs.ts +0 -19
  269. package/src/plugins/plugins/vite.ts +0 -10
  270. package/src/plugins/plugins/vitest.ts +0 -9
  271. package/src/prompt/prompt-runtime.ts +0 -380
  272. package/src/runtime/adaptive-plan.ts +0 -563
  273. package/src/runtime/agent-control.ts +0 -215
  274. package/src/runtime/agent-memory.ts +0 -81
  275. package/src/runtime/agent-observability.ts +0 -122
  276. package/src/runtime/anchor-manager.ts +0 -475
  277. package/src/runtime/async-marker.ts +0 -32
  278. package/src/runtime/async-runner.ts +0 -381
  279. package/src/runtime/attention-events.ts +0 -28
  280. package/src/runtime/auto-summarize.ts +0 -344
  281. package/src/runtime/background-runner.ts +0 -837
  282. package/src/runtime/batch-barrier.ts +0 -147
  283. package/src/runtime/broker-issuer.ts +0 -37
  284. package/src/runtime/cancellation-token.ts +0 -99
  285. package/src/runtime/cancellation.ts +0 -99
  286. package/src/runtime/capability-inventory.ts +0 -137
  287. package/src/runtime/chain-parser.ts +0 -237
  288. package/src/runtime/chain-runner.ts +0 -606
  289. package/src/runtime/checkpoint.ts +0 -291
  290. package/src/runtime/child-pi-constants.ts +0 -42
  291. package/src/runtime/child-pi-kill.ts +0 -180
  292. package/src/runtime/child-pi-pool.ts +0 -68
  293. package/src/runtime/child-pi-spawn.ts +0 -287
  294. package/src/runtime/child-pi-steering.ts +0 -128
  295. package/src/runtime/child-pi-streams.ts +0 -296
  296. package/src/runtime/child-pi-transcript.ts +0 -169
  297. package/src/runtime/child-pi.ts +0 -1105
  298. package/src/runtime/coalesce-tasks.ts +0 -268
  299. package/src/runtime/code-summary.ts +0 -292
  300. package/src/runtime/command-trace.ts +0 -105
  301. package/src/runtime/compact-pipeline.ts +0 -56
  302. package/src/runtime/compact-stages/ansi-strip-stage.ts +0 -25
  303. package/src/runtime/compact-stages/blank-collapse-stage.ts +0 -31
  304. package/src/runtime/compact-stages/deduplicate-stage.ts +0 -34
  305. package/src/runtime/compact-stages/head-snap-stage.ts +0 -57
  306. package/src/runtime/compact-stages/index.ts +0 -23
  307. package/src/runtime/compact-stages/tail-capture-stage.ts +0 -77
  308. package/src/runtime/compact-stages/truncation-stage.ts +0 -74
  309. package/src/runtime/compaction-summary.ts +0 -278
  310. package/src/runtime/completion-guard.ts +0 -207
  311. package/src/runtime/concurrency.ts +0 -58
  312. package/src/runtime/crash-classification.ts +0 -229
  313. package/src/runtime/crash-recovery.ts +0 -577
  314. package/src/runtime/crew-agent-records.ts +0 -593
  315. package/src/runtime/crew-agent-runtime.ts +0 -62
  316. package/src/runtime/crew-broker-child.ts +0 -88
  317. package/src/runtime/crew-broker-client.ts +0 -673
  318. package/src/runtime/crew-broker-tokens.ts +0 -84
  319. package/src/runtime/crew-broker.ts +0 -1276
  320. package/src/runtime/crew-hooks.ts +0 -227
  321. package/src/runtime/cross-extension-rpc.ts +0 -143
  322. package/src/runtime/custom-tools/irc-tool.ts +0 -282
  323. package/src/runtime/custom-tools/submit-result-tool.ts +0 -102
  324. package/src/runtime/deadletter.ts +0 -47
  325. package/src/runtime/delivery-coordinator.ts +0 -211
  326. package/src/runtime/delta-conflict.ts +0 -348
  327. package/src/runtime/deterministic-ast.ts +0 -161
  328. package/src/runtime/diagnostic-export.ts +0 -171
  329. package/src/runtime/direct-run.ts +0 -45
  330. package/src/runtime/dwf-state-store.ts +0 -102
  331. package/src/runtime/dynamic-workflow-context.ts +0 -1016
  332. package/src/runtime/dynamic-workflow-runner.ts +0 -310
  333. package/src/runtime/effectiveness.ts +0 -90
  334. package/src/runtime/errors/crew-errors.ts +0 -162
  335. package/src/runtime/event-stream-bridge.ts +0 -98
  336. package/src/runtime/foreground-control.ts +0 -193
  337. package/src/runtime/foreground-watchdog.ts +0 -132
  338. package/src/runtime/global-worker-cap.ts +0 -96
  339. package/src/runtime/goal-achievement.ts +0 -148
  340. package/src/runtime/goal-evaluator.ts +0 -361
  341. package/src/runtime/goal-loop-runner.ts +0 -828
  342. package/src/runtime/goal-state-store.ts +0 -219
  343. package/src/runtime/green-contract.ts +0 -55
  344. package/src/runtime/group-join.ts +0 -267
  345. package/src/runtime/handoff-manager.ts +0 -598
  346. package/src/runtime/heartbeat-gradient.ts +0 -36
  347. package/src/runtime/heartbeat-watcher.ts +0 -239
  348. package/src/runtime/hidden-handoff.ts +0 -407
  349. package/src/runtime/important-line-classifier.ts +0 -140
  350. package/src/runtime/intercom-bridge.ts +0 -187
  351. package/src/runtime/iteration-hooks.ts +0 -305
  352. package/src/runtime/live-agent-control.ts +0 -136
  353. package/src/runtime/live-agent-manager.ts +0 -704
  354. package/src/runtime/live-control-realtime.ts +0 -56
  355. package/src/runtime/live-extension-bridge.ts +0 -148
  356. package/src/runtime/live-irc.ts +0 -97
  357. package/src/runtime/live-session-health.ts +0 -108
  358. package/src/runtime/live-session-runtime.ts +0 -1139
  359. package/src/runtime/loop-gates.ts +0 -128
  360. package/src/runtime/manifest-cache.ts +0 -375
  361. package/src/runtime/mcp-proxy.ts +0 -105
  362. package/src/runtime/metric-parser.ts +0 -36
  363. package/src/runtime/model-fallback.ts +0 -409
  364. package/src/runtime/model-resolver.ts +0 -126
  365. package/src/runtime/model-scope.ts +0 -158
  366. package/src/runtime/orphan-worker-registry.ts +0 -465
  367. package/src/runtime/output-validator.ts +0 -202
  368. package/src/runtime/overflow-recovery.ts +0 -206
  369. package/src/runtime/parallel-research.ts +0 -68
  370. package/src/runtime/parallel-utils.ts +0 -160
  371. package/src/runtime/parent-guard.ts +0 -134
  372. package/src/runtime/path-overlap.ts +0 -150
  373. package/src/runtime/peer-dep.ts +0 -292
  374. package/src/runtime/per-write-validator.ts +0 -181
  375. package/src/runtime/phase-progress.ts +0 -217
  376. package/src/runtime/phase-tracker.ts +0 -385
  377. package/src/runtime/pi-args.ts +0 -655
  378. package/src/runtime/pi-json-output.ts +0 -170
  379. package/src/runtime/pi-spawn.ts +0 -273
  380. package/src/runtime/pipeline-runner.ts +0 -523
  381. package/src/runtime/plan-templates.ts +0 -201
  382. package/src/runtime/policy-engine.ts +0 -115
  383. package/src/runtime/post-checks.ts +0 -142
  384. package/src/runtime/post-exit-stdio-guard.ts +0 -104
  385. package/src/runtime/process-lifecycle.ts +0 -491
  386. package/src/runtime/process-status.ts +0 -154
  387. package/src/runtime/progress-event-coalescer.ts +0 -44
  388. package/src/runtime/progress-tracker.ts +0 -124
  389. package/src/runtime/prose-compressor.ts +0 -162
  390. package/src/runtime/recovery-recipes.ts +0 -203
  391. package/src/runtime/replace.ts +0 -570
  392. package/src/runtime/resilient-edit.ts +0 -153
  393. package/src/runtime/result-extractor.ts +0 -213
  394. package/src/runtime/retry-executor.ts +0 -100
  395. package/src/runtime/retry-runner.ts +0 -336
  396. package/src/runtime/role-permission.ts +0 -59
  397. package/src/runtime/run-coalesced-task-group.ts +0 -308
  398. package/src/runtime/run-drift.ts +0 -219
  399. package/src/runtime/run-tracker.ts +0 -116
  400. package/src/runtime/runtime-policy.ts +0 -29
  401. package/src/runtime/runtime-resolver.ts +0 -172
  402. package/src/runtime/runtime-warmup.ts +0 -160
  403. package/src/runtime/scheduler.ts +0 -353
  404. package/src/runtime/semaphore.ts +0 -141
  405. package/src/runtime/sensitive-paths.ts +0 -93
  406. package/src/runtime/session-resources.ts +0 -25
  407. package/src/runtime/session-snapshot.ts +0 -59
  408. package/src/runtime/session-usage.ts +0 -79
  409. package/src/runtime/settings-store.ts +0 -155
  410. package/src/runtime/sidechain-output.ts +0 -35
  411. package/src/runtime/single-agent-compose.ts +0 -84
  412. package/src/runtime/skill-effectiveness.ts +0 -524
  413. package/src/runtime/skill-instructions.ts +0 -391
  414. package/src/runtime/stale-reconciler.ts +0 -680
  415. package/src/runtime/stream-preview.ts +0 -184
  416. package/src/runtime/streaming-output.ts +0 -50
  417. package/src/runtime/subagent-manager.ts +0 -561
  418. package/src/runtime/subprocess-tool-registry.ts +0 -70
  419. package/src/runtime/supervisor-contact.ts +0 -64
  420. package/src/runtime/task-display.ts +0 -52
  421. package/src/runtime/task-graph-scheduler.ts +0 -227
  422. package/src/runtime/task-graph.ts +0 -290
  423. package/src/runtime/task-health.ts +0 -83
  424. package/src/runtime/task-id.ts +0 -161
  425. package/src/runtime/task-output-context.ts +0 -602
  426. package/src/runtime/task-packet.ts +0 -268
  427. package/src/runtime/task-quality.ts +0 -199
  428. package/src/runtime/task-runner/capabilities.ts +0 -78
  429. package/src/runtime/task-runner/context-retrieval.ts +0 -163
  430. package/src/runtime/task-runner/live-executor.ts +0 -227
  431. package/src/runtime/task-runner/output-splitter.ts +0 -152
  432. package/src/runtime/task-runner/progress.ts +0 -157
  433. package/src/runtime/task-runner/prompt-builder.ts +0 -278
  434. package/src/runtime/task-runner/prompt-pipeline.ts +0 -88
  435. package/src/runtime/task-runner/result-utils.ts +0 -16
  436. package/src/runtime/task-runner/retrieval-orchestrator.ts +0 -310
  437. package/src/runtime/task-runner/run-projection.ts +0 -125
  438. package/src/runtime/task-runner/state-helpers.ts +0 -176
  439. package/src/runtime/task-runner/tail-read.ts +0 -34
  440. package/src/runtime/task-runner.ts +0 -1420
  441. package/src/runtime/team-runner-artifacts.ts +0 -13
  442. package/src/runtime/team-runner.ts +0 -1993
  443. package/src/runtime/tool-output-pruner.ts +0 -333
  444. package/src/runtime/tool-progress.ts +0 -278
  445. package/src/runtime/usage-tracker.ts +0 -73
  446. package/src/runtime/verification-gates.ts +0 -571
  447. package/src/runtime/verification-integrity.ts +0 -105
  448. package/src/runtime/verification-worktree.ts +0 -186
  449. package/src/runtime/worker-heartbeat.ts +0 -25
  450. package/src/runtime/worker-startup.ts +0 -83
  451. package/src/runtime/workflow-state.ts +0 -195
  452. package/src/runtime/workspace-lock.ts +0 -443
  453. package/src/runtime/workspace-tree.ts +0 -312
  454. package/src/runtime/yield-handler.ts +0 -224
  455. package/src/runtime/zombie-scanner.ts +0 -298
  456. package/src/schema/config-schema.ts +0 -327
  457. package/src/schema/team-tool-schema.ts +0 -415
  458. package/src/schema/validation-types.ts +0 -159
  459. package/src/skills/discover-skills.ts +0 -197
  460. package/src/skills/skill-templates.ts +0 -456
  461. package/src/skills/validate.ts +0 -285
  462. package/src/state/active-run-registry.ts +0 -439
  463. package/src/state/artifact-store.ts +0 -176
  464. package/src/state/atomic-write.ts +0 -903
  465. package/src/state/blob-store.ts +0 -308
  466. package/src/state/contracts.ts +0 -158
  467. package/src/state/crew-init.ts +0 -269
  468. package/src/state/decision-ledger.ts +0 -345
  469. package/src/state/event-log-rotation.ts +0 -342
  470. package/src/state/event-log.ts +0 -1311
  471. package/src/state/event-reconstructor.ts +0 -229
  472. package/src/state/gitignore-manager.ts +0 -46
  473. package/src/state/health-store.ts +0 -79
  474. package/src/state/hook-instinct-bridge.ts +0 -94
  475. package/src/state/hook-integrations.ts +0 -51
  476. package/src/state/instinct-store.ts +0 -275
  477. package/src/state/jsonl-writer.ts +0 -107
  478. package/src/state/locks.ts +0 -562
  479. package/src/state/mailbox.ts +0 -916
  480. package/src/state/observation-store.ts +0 -176
  481. package/src/state/run-cache.ts +0 -193
  482. package/src/state/run-graph.ts +0 -183
  483. package/src/state/run-metrics.ts +0 -165
  484. package/src/state/schedule.ts +0 -166
  485. package/src/state/session-state-map.ts +0 -51
  486. package/src/state/state-store.ts +0 -958
  487. package/src/state/task-claims.ts +0 -61
  488. package/src/state/tiered-eval.ts +0 -480
  489. package/src/state/types-eval.ts +0 -58
  490. package/src/state/types.ts +0 -440
  491. package/src/state/usage.ts +0 -138
  492. package/src/state/worker-atomic-writer.ts +0 -194
  493. package/src/subagents/async-entry.ts +0 -1
  494. package/src/subagents/index.ts +0 -3
  495. package/src/subagents/live/control.ts +0 -1
  496. package/src/subagents/live/manager.ts +0 -1
  497. package/src/subagents/live/realtime.ts +0 -1
  498. package/src/subagents/live/session-runtime.ts +0 -1
  499. package/src/subagents/manager.ts +0 -1
  500. package/src/subagents/spawn.ts +0 -1
  501. package/src/teams/discover-teams.ts +0 -187
  502. package/src/teams/team-config.ts +0 -27
  503. package/src/teams/team-serializer.ts +0 -38
  504. package/src/tools/safe-bash-extension.ts +0 -54
  505. package/src/tools/safe-bash.ts +0 -505
  506. package/src/types/diff.d.ts +0 -18
  507. package/src/types/new-api-types.ts +0 -35
  508. package/src/ui/agent-management-overlay.ts +0 -160
  509. package/src/ui/card-colors.ts +0 -139
  510. package/src/ui/crew-footer.ts +0 -102
  511. package/src/ui/crew-select-list.ts +0 -111
  512. package/src/ui/dashboard-panes/agents-pane.ts +0 -164
  513. package/src/ui/dashboard-panes/cancellation-pane.ts +0 -66
  514. package/src/ui/dashboard-panes/capability-pane.ts +0 -77
  515. package/src/ui/dashboard-panes/health-pane.ts +0 -31
  516. package/src/ui/dashboard-panes/mailbox-pane.ts +0 -35
  517. package/src/ui/dashboard-panes/metrics-pane.ts +0 -37
  518. package/src/ui/dashboard-panes/progress-pane.ts +0 -38
  519. package/src/ui/dashboard-panes/transcript-pane.ts +0 -10
  520. package/src/ui/deploy-bundled-themes.ts +0 -71
  521. package/src/ui/dwf-phase-display.ts +0 -151
  522. package/src/ui/dynamic-border.ts +0 -35
  523. package/src/ui/heartbeat-aggregator.ts +0 -74
  524. package/src/ui/key-utils.ts +0 -42
  525. package/src/ui/keybinding-map.ts +0 -248
  526. package/src/ui/layout-primitives.ts +0 -106
  527. package/src/ui/live-conversation-overlay.ts +0 -183
  528. package/src/ui/live-duration.ts +0 -55
  529. package/src/ui/live-run-sidebar.ts +0 -293
  530. package/src/ui/loaders.ts +0 -6
  531. package/src/ui/mascot.ts +0 -449
  532. package/src/ui/overlays/agent-picker-overlay.ts +0 -65
  533. package/src/ui/overlays/confirm-overlay.ts +0 -60
  534. package/src/ui/overlays/help-overlay.ts +0 -177
  535. package/src/ui/overlays/mailbox-compose-overlay.ts +0 -181
  536. package/src/ui/overlays/mailbox-compose-preview.ts +0 -78
  537. package/src/ui/overlays/mailbox-detail-overlay.ts +0 -154
  538. package/src/ui/pi-ui-compat.ts +0 -68
  539. package/src/ui/powerbar-publisher.ts +0 -459
  540. package/src/ui/render-coalescer.ts +0 -101
  541. package/src/ui/render-diff.ts +0 -160
  542. package/src/ui/render-scheduler.ts +0 -278
  543. package/src/ui/run-action-dispatcher.ts +0 -182
  544. package/src/ui/run-dashboard.ts +0 -904
  545. package/src/ui/run-event-bus.ts +0 -381
  546. package/src/ui/run-snapshot-cache.ts +0 -1057
  547. package/src/ui/settings-overlay.ts +0 -1067
  548. package/src/ui/shared-overlay-scheduler.ts +0 -96
  549. package/src/ui/snapshot-types.ts +0 -90
  550. package/src/ui/spinner.ts +0 -17
  551. package/src/ui/status-colors.ts +0 -143
  552. package/src/ui/syntax-highlight.ts +0 -136
  553. package/src/ui/terminal-status.ts +0 -269
  554. package/src/ui/theme-adapter.ts +0 -271
  555. package/src/ui/theme-discovery.ts +0 -199
  556. package/src/ui/tool-progress-formatter.ts +0 -93
  557. package/src/ui/tool-render.ts +0 -453
  558. package/src/ui/tool-renderers/brief-mode.ts +0 -225
  559. package/src/ui/tool-renderers/index.ts +0 -726
  560. package/src/ui/transcript-cache.ts +0 -128
  561. package/src/ui/transcript-entries.ts +0 -256
  562. package/src/ui/transcript-viewer.ts +0 -424
  563. package/src/ui/widget/index.ts +0 -391
  564. package/src/ui/widget/widget-formatters.ts +0 -182
  565. package/src/ui/widget/widget-model.ts +0 -110
  566. package/src/ui/widget/widget-renderer.ts +0 -182
  567. package/src/ui/widget/widget-types.ts +0 -36
  568. package/src/utils/bm25-search.ts +0 -235
  569. package/src/utils/completion-dedupe.ts +0 -63
  570. package/src/utils/conflict-detect.ts +0 -668
  571. package/src/utils/env-allowlist.ts +0 -30
  572. package/src/utils/env-filter.ts +0 -155
  573. package/src/utils/file-coalescer.ts +0 -98
  574. package/src/utils/fingerprint.ts +0 -180
  575. package/src/utils/frontmatter.ts +0 -70
  576. package/src/utils/fs-watch.ts +0 -37
  577. package/src/utils/gh-protocol.ts +0 -556
  578. package/src/utils/git.ts +0 -260
  579. package/src/utils/guards.ts +0 -107
  580. package/src/utils/ids.ts +0 -24
  581. package/src/utils/incremental-reader.ts +0 -220
  582. package/src/utils/internal-error.ts +0 -10
  583. package/src/utils/names.ts +0 -36
  584. package/src/utils/ndjson.ts +0 -115
  585. package/src/utils/paths.ts +0 -227
  586. package/src/utils/project-detector.ts +0 -160
  587. package/src/utils/redaction.ts +0 -347
  588. package/src/utils/resolve-shell.ts +0 -36
  589. package/src/utils/run-watcher-registry.ts +0 -152
  590. package/src/utils/safe-paths.ts +0 -383
  591. package/src/utils/scan-cache.ts +0 -144
  592. package/src/utils/session-utils.ts +0 -110
  593. package/src/utils/sleep.ts +0 -54
  594. package/src/utils/socket-path.ts +0 -127
  595. package/src/utils/sse-parser.ts +0 -129
  596. package/src/utils/task-name-generator.ts +0 -337
  597. package/src/utils/timings.ts +0 -33
  598. package/src/utils/token-counter.ts +0 -200
  599. package/src/utils/visual.ts +0 -207
  600. package/src/workflows/cost-estimator.ts +0 -34
  601. package/src/workflows/discover-workflows.ts +0 -290
  602. package/src/workflows/intermediate-store.ts +0 -166
  603. package/src/workflows/preflight-validator.ts +0 -168
  604. package/src/workflows/topology-analyzer.ts +0 -203
  605. package/src/workflows/validate-workflow.ts +0 -50
  606. package/src/workflows/workflow-config.ts +0 -70
  607. package/src/workflows/workflow-serializer.ts +0 -32
  608. package/src/worktree/branch-freshness.ts +0 -112
  609. package/src/worktree/cleanup.ts +0 -341
  610. package/src/worktree/worktree-manager.ts +0 -1200
@@ -1,51 +0,0 @@
1
- # Test Matrix
2
-
3
- Maps pi-crew behavior to proof. Every row must have real validation evidence.
4
-
5
- ## Status Values
6
-
7
- | Status | Meaning |
8
- |--------|---------|
9
- | planned | Accepted behavior, not implemented |
10
- | in_progress | Actively being built |
11
- | implemented | Implemented and proof exists |
12
- | changed | Contract changed after implementation |
13
- | retired | No longer part of product |
14
-
15
- ## Matrix
16
-
17
- | Story | Contract | Unit | Integration | CI | Status | Evidence |
18
- |-------|----------|------|-------------|-----|--------|----------|
19
- | Core team run | `docs/product/team-run.md` | yes | yes | yes 3/3 | implemented | 2703 tests pass (133 suites) |
20
- | Child process runner | `docs/product/child-process.md` | yes | yes | yes 3/3 | implemented | child-pi-pool.test.ts, child-pi-timeout.test.ts, mock-child-run.test.ts |
21
- | Async runner | `docs/product/async-runner.md` | yes | yes | yes 3/3 | implemented | async-runner.test.ts, async-restart-recovery.test.ts |
22
- | Live session | `docs/product/live-session.md` | yes | no | yes 3/3 | implemented | live-session-context.test.ts, live-session-runtime.test.ts |
23
- | State durability | `docs/product/state.md` | yes | yes | yes 3/3 | implemented | state-store.test.ts, state-contracts.test.ts, phase3-runtime.test.ts |
24
- | Worktree isolation | `docs/product/worktree.md` | yes | yes | yes 3/3 | implemented | worktree-manager.test.ts, worktree-run.test.ts |
25
- | Team tool API | `docs/product/team-tool.md` | yes | yes | yes 3/3 | implemented | team-tool-dispatch.test.ts, extension-api-surface.test.ts, operator-experience.test.ts |
26
- | Group join | `docs/product/group-join.md` | yes | yes | yes 3/3 | implemented | phase6-runtime-hardening.test.ts |
27
- | Model fallback | `docs/product/model-fallback.md` | yes | no | yes 3/3 | implemented | model-fallback.test.ts |
28
- | Conflict detection | `docs/product/conflict-detect.md` | yes | no | yes 3/3 | implemented | conflict-detect.test.ts, delta-conflict.test.ts |
29
- | Crash recovery | `docs/product/crash-recovery.md` | yes | yes | yes 3/3 | implemented | recovery-recipes.test.ts, async-restart-recovery.test.ts |
30
- | Effectiveness guard | `docs/product/effectiveness.md` | yes | no | yes 3/3 | implemented | effectiveness-guard.test.ts |
31
- | Windows EBUSY | `docs/product/platform.md` | yes | yes | yes 3/3 | implemented | phase6-runtime-hardening.test.ts |
32
- | Depth guard | `docs/product/runtime-safety.md` | yes | no | yes 3/3 | implemented | subagent-depth.test.ts, completion-guard.test.ts |
33
-
34
- ## Evidence Rules
35
-
36
- - **Unit proof**: Pure logic, state transitions, config parsing
37
- - **Integration proof**: Multi-module interaction (team runner → state → child process)
38
- - **CI proof**: Cross-platform (ubuntu, windows, macos) green on GitHub Actions
39
- - A story can be implemented without every proof column if the story explains why
40
- - Agents must run `npm test` and `npm run typecheck` before claiming done
41
-
42
- ## Validation Commands
43
-
44
- ```bash
45
- npm test # Run all unit tests (1655 tests across 268 unit files + 14 integration files)
46
- npm run typecheck # TypeScript check + strip-types import
47
- npm run check # Biome lint + format
48
- npm run test:unit # Unit tests only (fast, parallel)
49
- npm run test:integration # Integration tests only (sequential)
50
- gh run list --limit 1 # Check latest CI status
51
- ```
@@ -1,91 +0,0 @@
1
- # Archived Documents
2
-
3
- This directory contains historical one-off reports and reviews that were
4
- moved out of the main `docs/` directory as part of the **L3 (docs sprawl
5
- cleanup)** in the v0.9.17 cleanup plan.
6
-
7
- **Criterion (per plan §11 L3 circle-back):** "exclude any file referenced by
8
- AGENTS.md or README." Each file here has been verified to have NO source-of-
9
- truth reference in the project — these are point-in-time audits, reviews,
10
- test-round logs, and followup reports that were used once and superseded.
11
-
12
- ## What is archived (22 files)
13
-
14
- ### v0.5.x audit-fix plans (9 files)
15
- Spans the v0.5.5 → v0.5.17 release cycle of bug audits. Each was a point-in-time
16
- list of fixes for that release; all fixes were shipped and the audit is now
17
- historical.
18
-
19
- - `pi-crew-v0.5.5-audit-fix-plan.md`
20
- - `pi-crew-v0.5.9-audit-fix-plan.md`
21
- - `pi-crew-v0.5.10-audit-fix-plan.md`
22
- - `pi-crew-v0.5.11-audit-fix-plan.md`
23
- - `pi-crew-v0.5.12-audit-fix-plan.md`
24
- - `pi-crew-v0.5.13-audit-fix-plan.md`
25
- - `pi-crew-v0.5.14-audit-fix-plan.md`
26
- - `pi-crew-v0.5.16-audit-fix-plan.md`
27
- - `pi-crew-v0.5.17-audit-fix-plan.md`
28
-
29
- ### Round-series test logs (6 files)
30
- The iterative test result logs from `pi-crew-test-roundN` rounds. v0.9.17 has
31
- a new test matrix (`docs/TEST_MATRIX.md`) which supersedes these.
32
-
33
- - `pi-crew-test-final.md`
34
- - `pi-crew-test-results.md`
35
- - `pi-crew-test-round2.md`
36
- - `pi-crew-test-round4.md`
37
- - `pi-crew-test-round5.md`
38
- - `pi-crew-test-round6.md`
39
-
40
- ### Review-round followups (2 files)
41
- Sequential review rounds from May 2026.
42
-
43
- - `followup-review-round3-2026-05-12.md`
44
- - `followup-review-round4-2026-05-13.md`
45
-
46
- ### Single-investigation reports (5 files)
47
- One-off reports retained for historical reference only.
48
-
49
- - `pi-crew-bugs.md` — early-stage bug inventory (May 2026)
50
- - `pi-mono-opportunities.md` — cross-project opportunity scan
51
- - `pi-mono-review.md` — cross-project review
52
- - `pi-subagent4-comparison.md` — subagent-4 comparison
53
- - `pi-subagents3-deep-analysis.md` — subagents-3 deep analysis
54
-
55
- ## How to recover a file
56
-
57
- Files in this directory are still tracked by git (history preserved). To
58
- restore:
59
-
60
- ```bash
61
- git mv docs/archive/FILE.md docs/
62
- # edit docs/README.md or other references if needed
63
- git commit -m "docs: restore FILE.md from archive"
64
- ```
65
-
66
- ## Why these were archived
67
-
68
- `docs/` had grown to ~77 markdown files. Many were one-off reports created
69
- during specific development cycles that:
70
-
71
- - had no source-of-truth reference (not linked from README, AGENTS.md, or
72
- any code file's header comment),
73
- - were superseded by current docs (e.g. `TEST_MATRIX.md`),
74
- - were point-in-time audits that produced code changes already shipped.
75
-
76
- This directory keeps them available for git-history archaeology without
77
- cluttering the active docs surface.
78
-
79
- ## What is NOT archived (still in `docs/`)
80
-
81
- - `architecture.md`, `actions-reference.md`, `commands-reference.md`,
82
- `dynamic-workflows.md` — referenced from `README.md`
83
- - `decisions/` (ADR-style 0001-0008) — referenced from `AGENTS.md`
84
- - `FEATURE_INTAKE.md`, `HARNESS.md`, `HARNESS_BACKLOG.md`, `TEST_MATRIX.md`,
85
- `troubleshooting.md`, `usage.md`, `goals.md`, `live-mailbox-runtime.md`,
86
- `runtime-flow.md`, `resource-formats.md`, `publishing.md`,
87
- `migration-v0.4-v0.5.md` — active project docs
88
- - `bugs/`, `fixes/`, `distillation/`, `product/`, `stories/`, `skills/`,
89
- `templates/`, `superpowers/`, `perf/`, `patterns/` — themed subdirs
90
- - `next-upgrade-roadmap.md` — referenced from `README.md`
91
- - `REVIEW-FINDINGS-2026-06` (file) — current cleanup plan reference
@@ -1,342 +0,0 @@
1
- # Follow-up Review — pi-crew (2026-05-12, round 3)
2
-
3
- Author: Droid (Factory) | Related: `docs/code-review-2026-05-11.md`, `docs/followup-plan-2026-05-12.md`, `docs/followup-review-2026-05-12.md`. HEAD: `5bee878`.
4
-
5
- This is the review round after commit `5bee878` resolved C1–C6. Goal: scrutinize the modules not yet examined closely (event-log, atomic-write, child-pi, redaction, sleep, hooks, cleanup) to find remaining risks.
6
-
7
- ## Result summary
8
-
9
- - `npm run typecheck` → Passed
10
- - `npm run check:lazy-imports` → Passed
11
- - `npm run test:unit` → **1418 tests / 1415 pass / 0 fail / 3 skip** (212s)
12
-
13
- The codebase is in a stable state. The findings below are **low risk** or **defense-in-depth**, not urgent bugs.
14
-
15
- ---
16
-
17
- ## Part A — New findings
18
-
19
- ### D1 — `event-log.appendEvent` has no lock, JSONL may interleave on Windows
20
-
21
- **Severity:** Medium | **Effort:** ~30 minutes | **File:** `src/state/event-log.ts:148`
22
-
23
- **Current state:**
24
- ```ts
25
- fs.appendFileSync(eventsPath, `${JSON.stringify(redactSecrets(fullEvent))}\n`, "utf-8");
26
- ```
27
-
28
- **Problem:**
29
- - `fs.appendFileSync` on POSIX is only atomic for writes smaller than `PIPE_BUF` (~4 KiB). A full event JSON (with data, metadata, transcripts) can exceed that → interleaved lines between 2 processes (parent + background-runner).
30
- - On Windows, append is NOT atomic at any size; 2 processes appending to the same eventsPath can produce interleaved JSON lines → `JSON.parse(line)` in `readEvents`/`scanSequence` throws and skips the line.
31
- - Consequence: lost events, sequence numbers jumping, "appended: false" is returned in a different path (size-limit) but the normal path gives no hint.
32
-
33
- **Trigger:** running `background-runner` in parallel with the parent writing events to the same `eventsPath` (e.g. cancel + retry in succession).
34
-
35
- **Proposed fix:**
36
- 1. Wrap `appendEvent` in `withRunLockSync(manifest, () => { ... })` — ensures exclusive access.
37
- 2. Or use `fs.openSync(..., O_APPEND | O_WRONLY)` + retry with an advisory lock (`flock` POSIX, `LockFileEx` Windows — via the npm package `proper-lockfile`).
38
- 3. Lightest option: switch to `appendEventAsync` via a queue/serialize.
39
-
40
- **Tests to add:** stress test in `test/integration/`: 2 processes each appending 100 events concurrently → assert total parseable line count = 200.
41
-
42
- ---
43
-
44
- ### D2 — `event-log.sequenceCache` Map leaks by number of runs
45
-
46
- **Severity:** Low | **Effort:** ~10 minutes | **File:** `src/state/event-log.ts:60`
47
-
48
- **Current state:**
49
- ```ts
50
- const sequenceCache = new Map<string, { size: number; mtimeMs: number; seq: number }>();
51
- ```
52
-
53
- **Problem:**
54
- - Module-level map, never evicts. Each `eventsPath` (1 per run) takes 1 entry. A long-running parent process (e.g. live-session-runtime) running for many days → the cache could reach thousands of entries.
55
- - Memory isn't large (~100 bytes/entry) but is unbounded.
56
-
57
- **Proposed fix:** use a simple LRU (Map with a max size, evict oldest when exceeding the threshold), or clear after the run ends:
58
- ```ts
59
- export function evictSequenceCache(eventsPath: string): void {
60
- sequenceCache.delete(eventsPath);
61
- }
62
- // Call from updateRunStatus(..., "completed"/"failed"/"cancelled").
63
- ```
64
-
65
- ---
66
-
67
- ### D3 — `atomicWriteFileAsync` has a "matches" fallback → sync path doesn't (parity)
68
-
69
- **Severity:** Low | **Effort:** ~15 minutes | **File:** `src/state/atomic-write.ts:122-138`
70
-
71
- **Current state:**
72
- ```ts
73
- // async path:
74
- try { await renameWithRetryAsync(...); }
75
- catch (renameError) {
76
- const existing = await fs.promises.readFile(filePath, "utf-8");
77
- const matches = existing === content;
78
- if (matches) { /* cleanup temp, return success */ }
79
- throw renameError;
80
- }
81
-
82
- // sync path: just throws, no "matches" fallback.
83
- ```
84
-
85
- **Problem:**
86
- - The async path "forgives" the race condition (the file was already written with the correct content by another process). The sync path throws hard.
87
- - Different semantics → hard to debug when someone uses sync with a race.
88
- - This case is rare (identical content), but the asymmetry is a code smell.
89
-
90
- **Proposed fix:** add the same fallback to sync, or remove the fallback from async (pick one consistent convention):
91
- ```ts
92
- } catch (renameError) {
93
- try {
94
- const existing = fs.readFileSync(filePath, "utf-8");
95
- if (existing === content) {
96
- try { fs.rmSync(tempPath, { force: true }); } catch { /* best-effort */ }
97
- return;
98
- }
99
- } catch { /* fall through */ }
100
- throw renameError;
101
- }
102
- ```
103
-
104
- ---
105
-
106
- ### D4 — `withRunLock` (async) waits until the deadline for an active lock, `withRunLockSync` throws immediately
107
-
108
- **Severity:** Low | **Effort:** ~10 minutes | **File:** `src/state/locks.ts:91-110`
109
-
110
- **Current state:**
111
- - Sync: `if (!isLockStale(...)) throw ...` → fail fast for an active lock.
112
- - Async: only checks staleness in `readLockStateAsync`, doesn't throw for active → loops waiting until the deadline (`staleMs * 2`, usually 60s).
113
-
114
- **Problem:**
115
- - The test `withRunLockSync throws immediately on active (non-stale) lock` proves sync throws immediately.
116
- - Async will hang ~60s then throw → slow cancel/retry experience.
117
- - BUG-004 (round 1) aimed to unify sync ↔ async, but this semantic asymmetry remains.
118
-
119
- **Proposed fix:** unify by one of:
120
- - Sync: add a short wait + retry like async (wait up to 1-2s then throw).
121
- - Async: throw immediately when the lock isn't stale (like sync) — usually better since the caller can retry with higher context.
122
-
123
- ```ts
124
- async function acquireLockWithRetryAsync(filePath: string, staleMs: number): Promise<void> {
125
- let attempt = 0;
126
- const deadline = Date.now() + staleMs * 2;
127
- while (true) {
128
- try { writeLockFile(filePath); return; }
129
- catch (error) {
130
- const code = (error as NodeJS.ErrnoException).code;
131
- if (code !== "EEXIST") throw error;
132
- if (Date.now() > deadline) throw new Error(`Run '${path.basename(filePath)}' is locked.`);
133
- if (!isLockStale(filePath, staleMs)) {
134
- throw new Error(`Run '${path.basename(filePath)}' is locked by another operation.`);
135
- }
136
- try { fs.rmSync(filePath, { force: true }); } catch { /* race */ }
137
- await sleep(Math.min(250, 25 * 2 ** attempt));
138
- attempt++;
139
- }
140
- }
141
- }
142
- ```
143
-
144
- **Tests to add:** mirror the sync test — `withRunLock async throws immediately on active (non-stale) lock`.
145
-
146
- ---
147
-
148
- ### D5 — `sleep.ts` uses `require()` in an ES module
149
-
150
- **Severity:** Low (style) | **Effort:** ~5 minutes | **File:** `src/utils/sleep.ts:18`
151
-
152
- **Current state:**
153
- ```ts
154
- const { execFileSync } = require("node:child_process") as typeof import("node:child_process");
155
- ```
156
-
157
- **Problem:**
158
- - The project is ESM (`"type": "module"`). `require` only works via strip-types backward-compat — not clean.
159
- - AGENTS.md: "Avoid dynamic inline imports, EXCEPT at documented lazy-load boundaries to defer heavy runtime cost (mark with `// LAZY: <reason>`)". This `require` has no marker.
160
- - `child_process` isn't heavy — top-level import is fine.
161
-
162
- **Proposed fix:**
163
- ```ts
164
- import { execFileSync } from "node:child_process";
165
- // ...
166
- execFileSync("sleep", [(ms / 1000).toFixed(3)], { timeout: ms + 1000, stdio: "pipe" });
167
- ```
168
-
169
- ---
170
-
171
- ### D6 — `iteration-hooks.runIterationHook` doesn't filter env like post-checks
172
-
173
- **Severity:** Low | **Effort:** ~5 minutes | **File:** `src/runtime/iteration-hooks.ts:140`
174
-
175
- **Current state:**
176
- ```ts
177
- env: { PATH: process.env.PATH ?? "/usr/bin:/bin", HOME: process.env.HOME ?? "/tmp", USER: process.env.USER, LANG: process.env.LANG, PI_CREW_HOOK: "1" },
178
- ```
179
-
180
- **Problem:**
181
- - Already restricted manually, OK for Linux. But on Windows it lacks `USERPROFILE`, `TEMP`, `TMP`, `ComSpec`, `SystemRoot` → `.cmd/.ps1` scripts may fail.
182
- - post-checks.ts has the same pattern (line 82) — inconsistent with worktree-manager.runSetupHook which moved to `sanitizeEnvSecrets(..., { allowList: [...] })`.
183
-
184
- **Proposed fix:** apply `sanitizeEnvSecrets` with an allowList, unifying all 3 sites (post-checks, iteration-hooks, setup-hook):
185
- ```ts
186
- import { sanitizeEnvSecrets } from "../utils/env-filter.ts";
187
- const HOOK_ENV_ALLOW = ["PATH", "HOME", "USER", "USERPROFILE", "TEMP", "TMP", "TMPDIR", "LANG", "LC_ALL", "ComSpec", "SystemRoot", "PI_*"];
188
- // ...
189
- env: { ...sanitizeEnvSecrets(process.env, { allowList: HOOK_ENV_ALLOW }), PI_CREW_HOOK: "1" },
190
- ```
191
-
192
- **Benefits:**
193
- - 1 source of truth for the hook env whitelist.
194
- - Supports Windows .cmd/.ps1 (USERPROFILE/TEMP needed).
195
- - Avoids code duplication.
196
-
197
- ---
198
-
199
- ### D7 — `cleanup.ts` git helper doesn't force locale (consistency with worktree-manager)
200
-
201
- **Severity:** Info | **Effort:** ~2 minutes | **File:** `src/worktree/cleanup.ts:15`
202
-
203
- **Current state:**
204
- ```ts
205
- function git(cwd: string, args: string[]): string {
206
- return execFileSync("git", args, { cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"] }).trim();
207
- }
208
- ```
209
-
210
- **Problem:**
211
- - `worktree-manager.ts` already forces `LANG: "C", LC_ALL: "C"` (C5 round 2). `cleanup.ts` doesn't yet.
212
- - Doesn't cause a current bug because cleanup doesn't parse error strings; but if error parsing is added later, this gets missed again.
213
- - `branch-freshness.ts` has the same issue.
214
-
215
- **Proposed fix:** extract a `git()` helper into a shared `src/utils/git-helper.ts`, used by all 3 files:
216
- ```ts
217
- // src/utils/git-exec.ts
218
- import { execFileSync } from "node:child_process";
219
- export function gitExec(cwd: string, args: string[]): string {
220
- return execFileSync("git", args, {
221
- cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"],
222
- env: { ...process.env, LANG: "C", LC_ALL: "C" },
223
- }).trim();
224
- }
225
- ```
226
-
227
- ---
228
-
229
- ### D8 — `redaction.PEM_PRIVATE_KEY_PATTERN` has no length limit → low ReDoS potential
230
-
231
- **Severity:** Info | **Effort:** ~5 minutes | **File:** `src/utils/redaction.ts:7`
232
-
233
- **Current state:**
234
- ```ts
235
- const PEM_PRIVATE_KEY_PATTERN = /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g;
236
- ```
237
-
238
- **Problem:**
239
- - The lazy `[\s\S]*?` is ReDoS-safe, but if the input has a BEGIN without an END → backtracks to the end of the string. With a long JSONL transcript (10+ MB), the regex scans the whole thing.
240
- - Not a true ReDoS (linear), but can be slow.
241
-
242
- **Proposed fix:** add a hard 64KB limit for a PEM block (real PEM ~3KB):
243
- ```ts
244
- const PEM_PRIVATE_KEY_PATTERN = /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]{0,65536}?-----END [A-Z ]*PRIVATE KEY-----/g;
245
- ```
246
-
247
- Trade-off: PEM > 64KB won't be fully redacted. Rare in practice.
248
-
249
- ---
250
-
251
- ### D9 — `subagent-manager.persistedSubagentPath` doesn't validate `id` → potential path traversal
252
-
253
- **Severity:** Low | **Effort:** ~5 minutes | **File:** `src/runtime/subagent-manager.ts:58`
254
-
255
- **Current state:**
256
- ```ts
257
- function persistedSubagentPath(cwd: string, id: string): string {
258
- return path.join(projectCrewRoot(cwd), DEFAULT_PATHS.state.subagentsSubdir, `${id}.json`);
259
- }
260
- ```
261
-
262
- **Problem:**
263
- - `id` is currently generated internally (`agent_${Date.now().toString(36)}_${counter.toString(36)}`) → safe.
264
- - But `readPersistedSubagentRecord(cwd, id)` is called with `id` from an external source (e.g. `get_subagent_result` tool param). If tool param validation is missing, `id = "../../../etc/passwd"` could read a file outside the state dir.
265
-
266
- **Proposed fix:** validate `id` matches `^[a-z0-9_]+$`:
267
- ```ts
268
- function isValidSubagentId(id: string): boolean {
269
- return /^[a-z0-9_]+$/i.test(id) && id.length <= 128;
270
- }
271
- function persistedSubagentPath(cwd: string, id: string): string {
272
- if (!isValidSubagentId(id)) throw new Error(`Invalid subagent id: ${id}`);
273
- return path.join(projectCrewRoot(cwd), DEFAULT_PATHS.state.subagentsSubdir, `${id}.json`);
274
- }
275
- ```
276
-
277
- Check the `get_subagent_result` tool schema to see if it sanitizes id already; if so, D9 is just defense-in-depth.
278
-
279
- ---
280
-
281
- ## Implementation priority
282
-
283
- | # | Item | Severity | Effort | Recommendation |
284
- |---|---|---|---|---|
285
- | 1 | D1 (event-log concurrent append) | Medium | 30 minutes | Current sprint — prevent event loss/corruption |
286
- | 2 | D6 (consistent hook env allowList) | Low | 5 minutes | Current sprint — sync with the setup-hook fix |
287
- | 3 | D4 (async lock fail-fast for active) | Low | 10 minutes | Current sprint — cancel/retry UX |
288
- | 4 | D9 (subagent id validate) | Low | 5 minutes | Current sprint — defense-in-depth |
289
- | 5 | D2 (sequenceCache eviction) | Low | 10 minutes | Next sprint |
290
- | 6 | D3 (atomic-write sync/async parity) | Low | 15 minutes | Next sprint |
291
- | 7 | D5 (sleep.ts ESM require) | Low | 5 minutes | Next sprint |
292
- | 8 | D7 (git helper consolidate) | Info | 2 minutes | Anytime |
293
- | 9 | D8 (PEM regex limit) | Info | 5 minutes | Anytime |
294
-
295
- **Total effort priority 1 (must-fix):** ~50 minutes.
296
- **Total effort priority 2 (nice-to-have):** ~37 minutes.
297
-
298
- ---
299
-
300
- ## Proposed commit batches
301
-
302
- - **Batch 1 (correctness/security):** D1 + D9 + D4 → 1 PR "event-log lock + subagent id guard + async lock parity" (~45 minutes).
303
- - **Batch 2 (hardening):** D6 + D7 + D2 → 1 PR "hook env allowList consolidation + git helper extract + cache eviction" (~20 minutes).
304
- - **Batch 3 (polish):** D3 + D5 + D8 → 1 PR "atomic-write parity + ESM cleanup + redaction limit" (~25 minutes).
305
-
306
- ---
307
-
308
- ## Positive notes after round 3
309
-
310
- - All C1–C6 (round 2) fixed correctly per spec.
311
- - 1418 tests pass (vs 1411 the previous round → +7 new tests), 0 fail.
312
- - `npm run check:lazy-imports` now runs on Windows (after removing `sed`).
313
- - `sanitizeEnvSecrets` has both a deny-list (default) and an allow-list mode → good flexibility.
314
- - `resolveShellForScript` correctly handles `.bat/.cmd` to guard against CVE-2024-27980.
315
- - `parent-guard` polling works well cross-platform (POSIX + Windows).
316
- - Multi-layer redaction pipeline (key-name + inline-substring + auth-header + bearer + PEM).
317
- - Atomic-write has O_EXCL + O_NOFOLLOW + post-open `isFile()` verification.
318
- - Subagent records persisted under the redaction filter.
319
- - Background runner has `parent-guard` + tempdir cleanup + final-drain timer.
320
-
321
- ---
322
-
323
- ## Areas with NO serious issues (reviewed)
324
-
325
- - `src/schema/team-tool-schema.ts` — TypeBox schema has the "retry" literal, strict additionalProperties.
326
- - `src/state/artifact-store.ts` — 2-layer path traversal blocking (`resolveInside` + `resolveRealContainedPath`), post-redaction hash.
327
- - `src/state/atomic-write.ts` — symlink-safe, O_EXCL, fd-based stat verification.
328
- - `src/worktree/worktree-manager.ts` — branchExists local+remote, prune stale, env filter, locale-safe error parse.
329
- - `src/runtime/async-runner.ts` — jiti + strip-types fallback, multi-candidate path.
330
- - `src/runtime/child-pi.ts` — env sanitize, redacted transcript, post-exit stdio guard, hard kill timer.
331
- - `src/runtime/parent-guard.ts` — kill(pid,0) cross-platform, unref'd interval.
332
-
333
- ---
334
-
335
- ## Verification
336
-
337
- ```
338
- npm run typecheck → Passed
339
- npm run check:lazy-imports → All dynamic imports have `// LAZY:` marker.
340
- npm run test:unit → 1418 tests, 1415 pass, 0 fail, 3 skip (212s)
341
- HEAD → 5bee878 (fix: address followup-review C1-C6)
342
- ```
@@ -1,107 +0,0 @@
1
- # Follow-up Review Round 4 — 2026-05-13
2
-
3
- Review of commits `c7bd455` through `5f47e92` (7 commits on top of `faa81e4`).
4
-
5
- ## Summary
6
-
7
- These commits harden live-session runtime cleanup, async runner lifecycle, crew-agent persistence, and Windows test flakiness. Overall quality is high and the fixes address real production issues. However, one commit introduces a **regression** that breaks the resume/follow-up capability for completed live-session agents. Two other issues could cause crashes or races in edge cases.
8
-
9
- **All identified bugs have been fixed in commits `a8a43b4` through current working tree.**
10
-
11
- ---
12
-
13
- ## Critical — FIXED
14
-
15
- ### BUG-014: `removeLiveAgentHandle` on normal completion destroys resume capability
16
-
17
- **File:** `src/runtime/live-session-runtime.ts` (finally block, line ~610)
18
- **Commit:** `7a25644` → **Fixed in a8a43b4**
19
-
20
- The finally block calls `removeLiveAgentHandle(agentId)` for non-aborted completions. This **deletes the live-agent handle from the registry entirely**, including its terminal status.
21
-
22
- **Impact:** After a live-session task completes normally, `steerLiveAgent`, `followUpLiveAgent`, and `resumeLiveAgent` all fail with "Live agent '...' is not registered in this process."
23
-
24
- **Fix:** Added `disposeLiveAgentSession()` in `live-agent-manager.ts` — disposes session resources but keeps the handle in the registry for resume/follow-up.
25
-
26
- ---
27
-
28
- ## High — FIXED
29
-
30
- ### BUG-015: `withAgentsLock` crashes on `EISDIR` from corrupted lock path
31
-
32
- **File:** `src/runtime/crew-agent-records.ts`
33
- **Commit:** `c7bd455` → **Fixed in a8a43b4**
34
-
35
- `withAgentsLock` only caught `EEXIST`; if lock path was a directory, `EISDIR` crashed the process.
36
-
37
- **Fix:** Handle `EISDIR` by removing the directory and retrying.
38
-
39
- ---
40
-
41
- ## Medium — FIXED
42
-
43
- ### BUG-016: `markActiveTasksAndAgentsFailed` lacks run-level lock, races with crash recovery
44
-
45
- **File:** `src/extension/async-notifier.ts`
46
- **Commit:** `d6d466d` → **Fixed in current working tree**
47
-
48
- `markActiveTasksAndAgentsFailed` called `saveRunTasks` and `saveCrewAgents` without `withRunLockSync`. Crash recovery (`cancelOrphanedRuns`) uses `withRunLockSync`. Concurrent execution on the same run risks lost updates.
49
-
50
- **Fix:** Wrapped `markDeadAsyncRunIfNeeded` mutations inside `withRunLockSync(run, () => { ... })`. Also reloaded fresh manifest inside the lock to avoid operating on stale data.
51
-
52
- ---
53
-
54
- ## Low — FIXED
55
-
56
- ### BUG-017: `safeDisposeLiveSession` catches all errors silently
57
-
58
- **File:** `src/runtime/live-agent-manager.ts`
59
- **Commit:** `7a25644` → **Fixed in current working tree**
60
-
61
- Any exception from `dispose()` was swallowed without logging.
62
-
63
- **Fix:** Log disposal errors via `logInternalError`.
64
-
65
- ### BUG-018: `effectiveRuntime` in `run.ts` is manually constructed
66
-
67
- **File:** `src/extension/team-tool/run.ts`
68
- **Commit:** `2486051` → **Fixed in current working tree**
69
-
70
- The async fallback runtime was manually built field-by-field. If `CrewRuntimeCapabilities` gains a new required field, this site won't inherit it.
71
-
72
- **Fix:** Use spread of original runtime with overrides: `{ ...runtime, kind: "child-process", steer: false, resume: false, liveToolActivity: false, fallback: "child-process", reason: "..." }`.
73
-
74
- ### NIT-007: `removeStaleAgentsLock` reads unlimited file size
75
-
76
- **File:** `src/runtime/crew-agent-records.ts`
77
- **Commit:** `c7bd455` → **Fixed in current working tree**
78
-
79
- `fs.readFileSync(lockPath, "utf-8")` reads entire file into memory. Corrupted multi-megabyte file causes memory pressure.
80
-
81
- **Fix:** Check `fs.statSync(lockPath).size > 1024` before reading; skip stale removal if oversized.
82
-
83
- ### NIT-008: `maxCollectedJsonEvents` cap is hardcoded at 200
84
-
85
- **File:** `src/runtime/live-session-runtime.ts`
86
- **Commit:** `c7bd455` → **Fixed in current working tree**
87
-
88
- Long-running agents drop older JSON events needed for debugging/yield detection.
89
-
90
- **Fix:** Increased cap from 200 to 1000.
91
-
92
- ---
93
-
94
- ## Verification
95
-
96
- - `npm run typecheck` passes.
97
- - Targeted tests (`async-notifier`, `isolation-policy`, `live-agent-manager`, `live-session-runtime`, `team-tool-dispatch`) pass: **31 pass / 0 fail**.
98
- - Full unit test suite not run due to time constraints; no new failures observed in targeted runs.
99
-
100
- ## Files Changed in Fixes
101
-
102
- - `src/extension/async-notifier.ts` — BUG-016 (run lock)
103
- - `src/runtime/live-agent-manager.ts` — BUG-014 (disposeLiveAgentSession), BUG-017 (log dispose errors)
104
- - `src/runtime/live-session-runtime.ts` — BUG-014 (use disposeLiveAgentSession), NIT-008 (cap 1000)
105
- - `src/runtime/crew-agent-records.ts` — BUG-015 (EISDIR), NIT-007 (size cap)
106
- - `src/extension/team-tool/run.ts` — BUG-018 (spread runtime)
107
- - `test/unit/live-agent-manager.test.ts` — test for disposeLiveAgentSession