pi-crew 0.9.50 → 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 (609) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/README.md +216 -20
  3. package/dist/build-meta.json +2222 -1761
  4. package/dist/index.mjs +18636 -17603
  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/skills/distill-software/SKILL.md +24 -1
  11. package/dist/index.mjs.map +0 -7
  12. package/docs/FEATURE_INTAKE.md +0 -126
  13. package/docs/HARNESS.md +0 -87
  14. package/docs/HARNESS_BACKLOG.md +0 -89
  15. package/docs/PROJECT_REVIEW.md +0 -270
  16. package/docs/PROJECT_REVIEW_FIXES.md +0 -342
  17. package/docs/PROJECT_REVIEW_ROUND4.md +0 -156
  18. package/docs/PROJECT_REVIEW_ROUND5.md +0 -86
  19. package/docs/REVIEW-FINDINGS-2026-06 +0 -357
  20. package/docs/REVIEW-FINDINGS-2026-07-CORE.md +0 -139
  21. package/docs/REVIEW-FINDINGS-2026-07.md +0 -125
  22. package/docs/TEST_MATRIX.md +0 -51
  23. package/docs/archive/README.md +0 -91
  24. package/docs/archive/followup-review-round3-2026-05-12.md +0 -342
  25. package/docs/archive/followup-review-round4-2026-05-13.md +0 -107
  26. package/docs/archive/pi-crew-bugs.md +0 -961
  27. package/docs/archive/pi-crew-test-final.md +0 -120
  28. package/docs/archive/pi-crew-test-results.md +0 -260
  29. package/docs/archive/pi-crew-test-round2.md +0 -136
  30. package/docs/archive/pi-crew-test-round4.md +0 -100
  31. package/docs/archive/pi-crew-test-round5.md +0 -70
  32. package/docs/archive/pi-crew-test-round6.md +0 -110
  33. package/docs/archive/pi-crew-v0.5.10-audit-fix-plan.md +0 -60
  34. package/docs/archive/pi-crew-v0.5.11-audit-fix-plan.md +0 -92
  35. package/docs/archive/pi-crew-v0.5.12-audit-fix-plan.md +0 -76
  36. package/docs/archive/pi-crew-v0.5.13-audit-fix-plan.md +0 -75
  37. package/docs/archive/pi-crew-v0.5.14-audit-fix-plan.md +0 -75
  38. package/docs/archive/pi-crew-v0.5.16-audit-fix-plan.md +0 -35
  39. package/docs/archive/pi-crew-v0.5.17-audit-fix-plan.md +0 -80
  40. package/docs/archive/pi-crew-v0.5.5-audit-fix-plan.md +0 -133
  41. package/docs/archive/pi-crew-v0.5.9-audit-fix-plan.md +0 -88
  42. package/docs/archive/pi-mono-opportunities.md +0 -969
  43. package/docs/archive/pi-mono-review.md +0 -291
  44. package/docs/archive/pi-subagent4-comparison.md +0 -261
  45. package/docs/archive/pi-subagents3-deep-analysis.md +0 -508
  46. package/docs/bugs/bug-021-notification-badge-counter-misleading.md +0 -293
  47. package/docs/bugs/bug-023-chain-windows-path-resolution.md +0 -106
  48. package/docs/bugs/bug-quota-display-truncation.md +0 -223
  49. package/docs/bugs/cross-session-notification-leakage.md +0 -82
  50. package/docs/code-review-2026-05-11.md +0 -592
  51. package/docs/coding-agent-optimization.md +0 -268
  52. package/docs/comparison-pi-subagents-vs-pi-crew.md +0 -303
  53. package/docs/decisions/0001-durable-state.md +0 -41
  54. package/docs/decisions/0002-child-process-for-async.md +0 -42
  55. package/docs/decisions/0003-depth-guard.md +0 -36
  56. package/docs/decisions/0004-execfile-over-exec.md +0 -34
  57. package/docs/decisions/0005-no-parameter-properties.md +0 -49
  58. package/docs/decisions/0006-publish-bundled-esm.md +0 -63
  59. package/docs/decisions/0007-active-run-binary-index.md +0 -54
  60. package/docs/decisions/0008-child-pi-warm-pool.md +0 -61
  61. package/docs/decisions/2026-07-21-broker-phase4-default-on.md +0 -77
  62. package/docs/decisions/2026-07-21-broker-windows-perms.md +0 -91
  63. package/docs/decisions/2026-07-22-broker-phase4-gated-on.md +0 -99
  64. package/docs/decisions/2026-07-24-oidc-trusted-publishing.md +0 -112
  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 -301
  530. package/src/ui/loaders.ts +0 -176
  531. package/src/ui/mascot.ts +0 -436
  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 -224
  543. package/src/ui/run-action-dispatcher.ts +0 -182
  544. package/src/ui/run-dashboard.ts +0 -913
  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/snapshot-types.ts +0 -90
  549. package/src/ui/spinner.ts +0 -17
  550. package/src/ui/status-colors.ts +0 -143
  551. package/src/ui/syntax-highlight.ts +0 -136
  552. package/src/ui/terminal-status.ts +0 -269
  553. package/src/ui/theme-adapter.ts +0 -271
  554. package/src/ui/theme-discovery.ts +0 -199
  555. package/src/ui/tool-progress-formatter.ts +0 -93
  556. package/src/ui/tool-render.ts +0 -453
  557. package/src/ui/tool-renderers/brief-mode.ts +0 -225
  558. package/src/ui/tool-renderers/index.ts +0 -726
  559. package/src/ui/transcript-cache.ts +0 -128
  560. package/src/ui/transcript-entries.ts +0 -256
  561. package/src/ui/transcript-viewer.ts +0 -424
  562. package/src/ui/widget/index.ts +0 -357
  563. package/src/ui/widget/widget-formatters.ts +0 -182
  564. package/src/ui/widget/widget-model.ts +0 -110
  565. package/src/ui/widget/widget-renderer.ts +0 -182
  566. package/src/ui/widget/widget-types.ts +0 -36
  567. package/src/utils/bm25-search.ts +0 -235
  568. package/src/utils/completion-dedupe.ts +0 -63
  569. package/src/utils/conflict-detect.ts +0 -668
  570. package/src/utils/env-allowlist.ts +0 -30
  571. package/src/utils/env-filter.ts +0 -155
  572. package/src/utils/file-coalescer.ts +0 -98
  573. package/src/utils/fingerprint.ts +0 -180
  574. package/src/utils/frontmatter.ts +0 -70
  575. package/src/utils/fs-watch.ts +0 -37
  576. package/src/utils/gh-protocol.ts +0 -556
  577. package/src/utils/git.ts +0 -260
  578. package/src/utils/guards.ts +0 -107
  579. package/src/utils/ids.ts +0 -24
  580. package/src/utils/incremental-reader.ts +0 -220
  581. package/src/utils/internal-error.ts +0 -10
  582. package/src/utils/names.ts +0 -36
  583. package/src/utils/ndjson.ts +0 -115
  584. package/src/utils/paths.ts +0 -227
  585. package/src/utils/project-detector.ts +0 -160
  586. package/src/utils/redaction.ts +0 -347
  587. package/src/utils/resolve-shell.ts +0 -36
  588. package/src/utils/run-watcher-registry.ts +0 -152
  589. package/src/utils/safe-paths.ts +0 -383
  590. package/src/utils/scan-cache.ts +0 -144
  591. package/src/utils/session-utils.ts +0 -110
  592. package/src/utils/sleep.ts +0 -54
  593. package/src/utils/socket-path.ts +0 -127
  594. package/src/utils/sse-parser.ts +0 -129
  595. package/src/utils/task-name-generator.ts +0 -337
  596. package/src/utils/timings.ts +0 -33
  597. package/src/utils/token-counter.ts +0 -200
  598. package/src/utils/visual.ts +0 -207
  599. package/src/workflows/cost-estimator.ts +0 -34
  600. package/src/workflows/discover-workflows.ts +0 -290
  601. package/src/workflows/intermediate-store.ts +0 -166
  602. package/src/workflows/preflight-validator.ts +0 -168
  603. package/src/workflows/topology-analyzer.ts +0 -203
  604. package/src/workflows/validate-workflow.ts +0 -50
  605. package/src/workflows/workflow-config.ts +0 -70
  606. package/src/workflows/workflow-serializer.ts +0 -32
  607. package/src/worktree/branch-freshness.ts +0 -112
  608. package/src/worktree/cleanup.ts +0 -341
  609. package/src/worktree/worktree-manager.ts +0 -1200
@@ -1,297 +0,0 @@
1
- # Follow-up Review — pi-crew (2026-05-12, round 2)
2
-
3
- Author: Droid (Factory) | Related: `docs/followup-plan-2026-05-12.md`, commit `926e6ee`.
4
-
5
- Review after commit `926e6ee` applied the B1–B9 + A1–A2 fixes from `followup-plan-2026-05-12.md`.
6
-
7
- ## Result summary
8
-
9
- - `npm run typecheck` → Passed
10
- - `npm run test:unit` → **1411 tests / 1408 pass / 0 fail / 3 skip** (previously: 1389/1400 with 8 bash-on-Windows failures)
11
- - `npm run check:lazy-imports` → **FAILS on Windows** (details below)
12
-
13
- ## Per-item status
14
-
15
- | # | Item | Status | Notes |
16
- |---|---|---|---|
17
- | B1 | bash portability | ✅ Done | `resolveShellForScript` + `resolveBashCmd` in `src/utils/resolve-shell.ts`. Applied to `post-checks.ts` + `iteration-hooks.ts`. The 8 previously failing tests pass. |
18
- | B2 | `worktree-manager.test.ts` | ⚠️ Partial | Has 3 tests (branch recovery, reuse, clean leader). Missing the `linkNodeModulesIfPresent` reject-file test. |
19
- | B3 | `artifact-store.test.ts` | ✅ Done | Hash integrity + path traversal + nested dirs. |
20
- | B4 | lock parity test | ✅ Done | 2 new tests: stale recovery sync+async, active lock throws. |
21
- | B5 | setup-hook env filter | ⚠️ Partial | `sanitizeEnvSecrets` applied. Uses a deny-list `SECRET_KEY_PATTERN` instead of the allow-list proposed in the plan. |
22
- | B6 | worktree checked-out hint | ✅ Done | try/catch + actionable error message. |
23
- | B7 | LAZY marker | ✅ Done | Marker at `team-tool.ts:58`. |
24
- | B8 | redaction roundtrip | ✅ Done | 3 tests (api_key, bearer, on-disk). |
25
- | B9 | CI grep-check | ❌ Broken on Windows | Script uses `sed`, fails on Windows. |
26
- | A1 | branchExists remote-tracking | ✅ Done | Returns `{ local, remoteOnly }`. |
27
- | A2 | jiti fallback robust | ✅ Done | 3 candidates: `lib/jiti-register.mjs`, `register.mjs`, `dist/register.mjs`. |
28
- | A3 | test alias cleanup | ⏭️ Skipped | Plan noted "not urgent". |
29
-
30
- ---
31
-
32
- ## Issues to address next
33
-
34
- ### C1 — (Medium, ~10 minutes) `scripts/check-lazy-imports.mjs` doesn't run on Windows
35
-
36
- **File:** `scripts/check-lazy-imports.mjs`
37
-
38
- **Problem:**
39
- - The script uses `execSync("sed -n '...' ...")` to read the preceding line → `sed` isn't available on Windows by default.
40
- - When sed fails, every line falls into the `catch` block → `bad.push(line)` → 13 false positives.
41
- - `npm run ci` will always fail on a Windows dev machine.
42
-
43
- **Proposed fix:** use plain Node instead of sed.
44
-
45
- ```js
46
- import { execSync } from "node:child_process";
47
- import { readFileSync } from "node:fs";
48
-
49
- const out = execSync(`git grep -nE "await import\\(" -- "src/**/*.ts"`, { encoding: "utf-8" });
50
- const bad = [];
51
- const fileCache = new Map();
52
-
53
- for (const line of out.split("\n").filter(Boolean)) {
54
- if (line.includes("// LAZY:")) continue;
55
- const m = line.match(/^([^:]+):(\d+):/);
56
- if (!m) continue;
57
- const [, file, lineNum] = m;
58
- if (!fileCache.has(file)) fileCache.set(file, readFileSync(file, "utf-8").split(/\r?\n/));
59
- const lines = fileCache.get(file);
60
- const prevLine = lines[Number(lineNum) - 2] ?? "";
61
- if (!prevLine.includes("// LAZY:")) bad.push(line);
62
- }
63
-
64
- if (bad.length) {
65
- console.error("Dynamic imports without `// LAZY:` marker:\n" + bad.join("\n"));
66
- process.exit(1);
67
- }
68
- console.log("All dynamic imports have `// LAZY:` marker.");
69
- ```
70
-
71
- **Test:** run `npm run check:lazy-imports` on both Linux and Windows → both should print "All dynamic imports have `// LAZY:` marker."
72
-
73
- ---
74
-
75
- ### C2 — (Medium, ~20 minutes) `sanitizeEnvSecrets` uses a deny-list, not meeting the defense-in-depth goal of plan B5
76
-
77
- **File:** `src/utils/env-filter.ts`
78
-
79
- **Current state:**
80
- ```ts
81
- export function sanitizeEnvSecrets(env: NodeJS.ProcessEnv): Record<string, string> {
82
- const filtered: Record<string, string> = {};
83
- for (const [key, value] of Object.entries(env)) {
84
- if (value !== undefined && !SECRET_KEY_PATTERN.test(key)) filtered[key] = value;
85
- }
86
- return filtered;
87
- }
88
- ```
89
-
90
- **Problem:**
91
- - The deny-list only blocks keys matching `SECRET_KEY_PATTERN`. Variables whose names don't match (e.g. `DB_PASS`, `MY_KEY_FOO`, `INTERNAL_TOKEN_LEGACY`) will leak into the setup hook.
92
- - The original plan B5 proposed an allow-list `["PATH", "HOME", "USERPROFILE", "TEMP", "TMP", "LANG", "PI_*"]` → much safer for user-provided hooks.
93
-
94
- **Proposed fix:** add an overload with an allow-list, keeping the deny-list as the default for `buildChildPiSpawnOptions` (backward-compat).
95
-
96
- ```ts
97
- export interface SanitizeOptions {
98
- allowList?: string[]; // glob-like, supports trailing * (e.g. "PI_*")
99
- }
100
-
101
- export function sanitizeEnvSecrets(env: NodeJS.ProcessEnv, options?: SanitizeOptions): Record<string, string> {
102
- const filtered: Record<string, string> = {};
103
- if (options?.allowList && options.allowList.length > 0) {
104
- const matchers = options.allowList.map((p) => {
105
- if (p.endsWith("*")) return (k: string) => k.startsWith(p.slice(0, -1));
106
- return (k: string) => k === p;
107
- });
108
- for (const [key, value] of Object.entries(env)) {
109
- if (value !== undefined && matchers.some((fn) => fn(key))) filtered[key] = value;
110
- }
111
- return filtered;
112
- }
113
- for (const [key, value] of Object.entries(env)) {
114
- if (value !== undefined && !SECRET_KEY_PATTERN.test(key)) filtered[key] = value;
115
- }
116
- return filtered;
117
- }
118
- ```
119
-
120
- **Apply at `worktree-manager.ts:runSetupHook`:**
121
-
122
- ```ts
123
- env: sanitizeEnvSecrets(process.env, {
124
- allowList: ["PATH", "HOME", "USERPROFILE", "TEMP", "TMP", "TMPDIR", "LANG", "LC_ALL", "PI_*"],
125
- }),
126
- ```
127
-
128
- **Tests to add:** `test/unit/env-filter.test.ts`:
129
- - Allow-list pass-through for matching keys + reject the rest.
130
- - Glob `PI_*` matches `PI_HOME`, `PI_CREW_X` but not `PIPELINE`.
131
- - Default deny-list keeps old behavior.
132
-
133
- ---
134
-
135
- ### C3 — (Low, ~10 minutes) `resolveShellForScript` doesn't handle `.cmd/.bat` correctly on Windows
136
-
137
- **File:** `src/utils/resolve-shell.ts`
138
-
139
- **Current state:**
140
- ```ts
141
- if (scriptPath.endsWith(".cmd") || scriptPath.endsWith(".bat")) {
142
- return { command: scriptPath, args: [] };
143
- }
144
- ```
145
-
146
- **Problem:**
147
- - Node ≥ 20 blocks spawning `.bat/.cmd` directly without `shell: true` (CVE-2024-27980). The `execFileSync/spawn` code path will throw `EINVAL` or `ENOENT`.
148
- - Consequence: post-check / iteration-hook written as `.cmd/.bat` will fail silently on Node 20+.
149
-
150
- **Proposed fix:**
151
- ```ts
152
- if (scriptPath.endsWith(".cmd") || scriptPath.endsWith(".bat")) {
153
- return { command: process.env.ComSpec ?? "cmd.exe", args: ["/d", "/s", "/c", scriptPath] };
154
- }
155
- ```
156
-
157
- **Tests to add:** in `test/unit/resolve-shell.test.ts` (create new):
158
- - Linux: `.sh` → `{ bash, [path] }`.
159
- - Windows + `.ps1` → `{ powershell, ["-File", path] }`.
160
- - Windows + `.cmd` → `{ cmd.exe, ["/d", "/s", "/c", path] }`.
161
-
162
- ---
163
-
164
- ### C4 — (Low, ~15 minutes) Missing test for `linkNodeModulesIfPresent` rejecting a file source (BUG-006 regression guard)
165
-
166
- **File:** `test/unit/worktree-manager.test.ts`
167
-
168
- **Problem:**
169
- - Plan B2 required this test but the commit didn't add it. If someone modifies `linkNodeModulesIfPresent` and removes the `isDirectory()` check, BUG-006 will regress without a test catching it.
170
-
171
- **Proposed fix:** add one test (assuming `linkNodeModulesIfPresent` is exported or tested indirectly via `prepareTaskWorkspace` with `worktree.linkNodeModules=true`):
172
-
173
- ```ts
174
- test("prepareTaskWorkspace skips linkNodeModules when source is a file", () => {
175
- const repo = fs.mkdtempSync(path.join(os.tmpdir(), "pi-crew-wt-fn-"));
176
- initGitRepo(repo);
177
- // Place a FILE at node_modules instead of a directory
178
- fs.writeFileSync(path.join(repo, "node_modules"), "not a dir", "utf-8");
179
- // Write project config to enable linkNodeModules
180
- const cfgDir = path.join(repo, ".crew");
181
- fs.mkdirSync(cfgDir, { recursive: true });
182
- fs.writeFileSync(path.join(cfgDir, "config.json"), JSON.stringify({
183
- worktree: { linkNodeModules: true },
184
- }), "utf-8");
185
- const manifest = minimalManifest(repo, "run-fn");
186
- const task = minimalTask("task-fn", repo);
187
- const result = prepareTaskWorkspace(manifest, task);
188
- assert.equal(result.nodeModulesLinked, false);
189
- fs.rmSync(repo, { recursive: true, force: true });
190
- });
191
- ```
192
-
193
- ---
194
-
195
- ### C5 — (Low, ~5 minutes) `prepareTaskWorkspace` error message affected by locale
196
-
197
- **File:** `src/worktree/worktree-manager.ts:127-140` (try/catch around `worktree add`)
198
-
199
- **Problem:**
200
- - The regex `/already checked out/` only matches when git runs with an English locale. On a user machine with `LANG=vi_VN` or Git for Windows with a different locale, the original message differs → falls back to throwing the raw error.
201
-
202
- **Proposed fix:** force an English locale for the internal git command, or broaden the regex.
203
-
204
- Option A (simpler): broaden the regex
205
- ```ts
206
- if (/already checked out|is already used by worktree/i.test(msg)) { ... }
207
- ```
208
-
209
- Option B (recommended): force `LANG=C` in the `git()` helper:
210
- ```ts
211
- function git(cwd: string, args: string[]): string {
212
- return execFileSync("git", args, {
213
- cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"],
214
- env: { ...process.env, LANG: "C", LC_ALL: "C" },
215
- }).trim();
216
- }
217
- ```
218
-
219
- Option B standardizes all git output → also improves debugging.
220
-
221
- ---
222
-
223
- ### C6 — (Info, ~5 minutes) `branchExists` remote-only creates local from HEAD, may "lose" the remote's commits
224
-
225
- **File:** `src/worktree/worktree-manager.ts:prepareTaskWorkspace`
226
-
227
- **Current state:**
228
- ```ts
229
- if (exists.local) {
230
- git(repoRoot, ["worktree", "add", worktreePath, branch]);
231
- } else {
232
- git(repoRoot, ["worktree", "add", "-b", branch, worktreePath, "HEAD"]); // ← both remoteOnly and "doesn't exist" fall here
233
- }
234
- ```
235
-
236
- **Problem:**
237
- - When `remoteOnly === true`, plan A1 proposed creating local from HEAD to avoid divergent tracking. The current code does exactly that, but:
238
- - The user pushed the branch from another machine → expects the worktree to contain that code.
239
- - There's no log/warning → silent drop.
240
-
241
- **Proposed fix:** emit an info event/log when hitting the remoteOnly branch:
242
- ```ts
243
- } else {
244
- if (exists.remoteOnly) {
245
- logInternalError("worktree.branchRemoteOnly", new Error(`Branch '${branch}' exists only on remote; creating local from HEAD instead of tracking remote.`), `branch=${branch}`);
246
- }
247
- git(repoRoot, ["worktree", "add", "-b", branch, worktreePath, "HEAD"]);
248
- }
249
- ```
250
-
251
- (Or push it out via a run event if there's a convenient event bus.)
252
-
253
- ---
254
-
255
- ## Implementation priority
256
-
257
- | # | Item | Severity | Effort | Recommendation |
258
- |---|---|---|---|---|
259
- | 1 | C1 (lazy-imports cross-platform) | Medium | 10 minutes | Current sprint — block CI failure on Windows |
260
- | 2 | C2 (allow-list env filter) | Medium | 20 minutes | Current sprint — defense-in-depth |
261
- | 3 | C3 (.cmd/.bat on Node 20+) | Low | 10 minutes | Current sprint — ensure B1 is truly portable |
262
- | 4 | C4 (test linkNodeModules file source) | Low | 15 minutes | Current sprint — close B2's regression gap |
263
- | 5 | C5 (git locale-safe error parsing) | Low | 5 minutes | Next sprint |
264
- | 6 | C6 (warn on remote-only branch) | Info | 5 minutes | Next sprint |
265
-
266
- **Total effort:** ~65 minutes for the hardening batch.
267
-
268
- ---
269
-
270
- ## Proposed commit batches
271
-
272
- - **Batch 1 (must-fix CI):** C1 + C3 → 1 PR "scripts/cmd portability fix" (~20 minutes).
273
- - **Batch 2 (security/test):** C2 + C4 → 1 PR "env allow-list + worktree regression test" (~35 minutes).
274
- - **Batch 3 (polish):** C5 + C6 → 1 PR "git locale + remote-only branch hint" (~10 minutes).
275
-
276
- ---
277
-
278
- ## Positive notes after round 3 review
279
-
280
- - The 8 previously failing bash-on-Windows tests now pass 100%.
281
- - The DRY refactor of `sanitizeEnvSecrets` (extracted from `child-pi.ts`) is good.
282
- - The `worktree-manager` resume logic + actionable error is very helpful for UX.
283
- - The lock parity test covers both sync/async paths (exactly the BUG-004 goal).
284
- - The artifact hash test correctly verifies the invariant `sha256(file) == contentHash`.
285
- - `resolveJitiRegisterPath` now tolerates various jiti packaging layouts.
286
- - The `branchExists` upgrade to `{local, remoteOnly}` is accurate per plan A1.
287
-
288
- ---
289
-
290
- ## Verification
291
-
292
- ```
293
- npm run typecheck → Passed
294
- npm run check:lazy-imports → Fails on Windows (sed not found)
295
- npm run test:unit → 1411 tests, 1408 pass, 0 fail, 3 skip (227s)
296
- git show 926e6ee --stat → 16 files changed, 797(+) 22(-)
297
- ```
package/docs/goals.md DELETED
@@ -1,59 +0,0 @@
1
- # Goal Loops (`team action='goal')
2
-
3
- pi-crew v0.9.0 introduces an autonomous goal loop, modeled on Claude Code's `/goal`.
4
-
5
- ## What it does
6
-
7
- A goal loop turns a single objective into a long-running, self-directed multi-turn
8
- process:
9
-
10
- 1. A **worker** agent does one turn of work (`executeTeamRun`).
11
- 2. A separate **evaluator** model (the "goal-judge") reads the turn's transcript +
12
- tool calls + verification results and returns a verdict:
13
- `{ achieved: bool, reason: string, evidenceRefs?: string[] }`.
14
- 3. If **not achieved**, the `reason` is prepended to the next turn's prompt and the
15
- loop continues.
16
- 4. Stops on: `achieved` / `maxTurns` reached / `budgetAbort` exceeded / `BLOCKED:` /
17
- user `stop`.
18
-
19
- ## Usage
20
-
21
- ```
22
- team action='goal', config.subAction='start',
23
- config.objective='Migrate src/auth from JS to TS. Done when tsc --noEmit=0 and test/auth passes.',
24
- config.evaluatorModel='haiku',
25
- config.maxTurns=20,
26
- budgetTotal=500000
27
- ```
28
-
29
- Sub-actions: `start | status | pause | resume | stop | step | clear`.
30
-
31
- Slash command: `/team-goal start --objective='...' --evaluatorModel='...'`
32
-
33
- ## Design notes (see `research-findings/goal-workflow/`)
34
-
35
- - **One manifest per turn** — `TEAM_RUN_STATUS_TRANSITIONS` + `shouldMergeTaskUpdate`
36
- block re-driving a terminal manifest, so each turn is a fresh `createRunManifest`.
37
- The goal loop owns OUTER state in `GoalLoopState` at
38
- `<crewRoot>/state/goals/<goalId>.json`.
39
- - **Feedback via `manifest.goal`** — the verdict's `reason` is composed into the next
40
- turn's `manifest.goal` (re-read lazily each render). `session.steer` is NOT used
41
- (it's a no-op for child-process runs).
42
- - **Budget via `collectRunMetrics`** — `budgetUsed = Σ over turns of collectRunMetrics(cwd, turnRunId).totalTokens`.
43
- (`loadRunMetrics`/`saveRunMetrics` have 0 callers — do not use.)
44
- - **Judge lockdown** — the synthesized `goal-judge` AgentConfig sets `disableTools:true`
45
- (Pi `--no-tools`), `excludeTools:[bash,read,write,edit]`, `inheritContext:false`,
46
- `excludeContextBash:true`, `parentContext:undefined`, `maxTurns:1`. An empty
47
- `tools:[]` is INSUFFICIENT because `pi-args.ts` skips empty arrays.
48
- - **Trust boundary** — the judge is capability-locked (no agency, only emits a verdict).
49
-
50
- ## Background spawn
51
-
52
- The loop runs in the background via `runKind:'goal-loop'` (background-runner.ts
53
- dispatch). The handler `handleGoal('start')` writes the `GoalLoopState`; the
54
- background process calls `runGoalLoop` which loops `executeTeamRun` per turn.
55
-
56
- ## Hooks
57
-
58
- - `before_goal_step` — fires before each turn.
59
- - `before_goal_abort` — fires before a budget/maxTurns abort.
@@ -1,333 +0,0 @@
1
- # Implementation Plan: Top 3 Features from oh-my-pi v15
2
-
3
- > Date: 2026-05-13
4
- > Based on: `D:/my/my_project/source/oh-my-pi` research
5
- > Target: pi-crew v0.2.x
6
-
7
- ---
8
-
9
- ## Priority Order
10
-
11
- 1. **Typed Crew Errors** — Quick win, no dependencies
12
- 2. **Conflict Detection** — High value, standalone module
13
- 3. **Issue-PR Protocol** — Medium complexity, GitHub integration
14
-
15
- ---
16
-
17
- ## 1. Typed Crew Errors
18
-
19
- ### Why
20
- Current pi-crew uses generic `Error` types with string matching:
21
- ```typescript
22
- catch (e) {
23
- if (e instanceof Error && e.message.includes("deadletter")) { ... }
24
- }
25
- ```
26
-
27
- Pattern from oh-my-pi: use typed sentinel errors with `instanceof` discrimination.
28
-
29
- ### Files to create/modify
30
-
31
- **Create:** `src/runtime/errors/crew-errors.ts`
32
-
33
- ```typescript
34
- /**
35
- * Typed error sentinels for pi-crew operations.
36
- * Follows oh-my-pi pattern from compaction/errors.ts.
37
- */
38
-
39
- export class CrewCancelledError extends Error {
40
- readonly name = "CrewCancelledError" as const;
41
- constructor(message = "Crew run cancelled") { super(message); }
42
- }
43
-
44
- export class CrewTimeoutError extends Error {
45
- readonly name = "CrewTimeoutError" as const;
46
- constructor(public readonly maxDurationMs: number) {
47
- super(`Crew run exceeded timeout of ${maxDurationMs}ms`);
48
- }
49
- }
50
-
51
- export class CrewDeadletterError extends Error {
52
- readonly name = "CrewDeadletterError" as const;
53
- constructor(
54
- public readonly agentId: string,
55
- public readonly reason: string,
56
- ) {
57
- super(`Agent ${agentId} deadlettered: ${reason}`);
58
- }
59
- }
60
-
61
- export class CrewAbortError extends Error {
62
- readonly name = "CrewAbortError" as const;
63
- constructor(message = "Crew run aborted") { super(message); }
64
- }
65
-
66
- export class CrewManifestError extends Error {
67
- readonly name = "CrewManifestError" as const;
68
- constructor(message: string, public readonly runId?: string) { super(message); }
69
- }
70
-
71
- export class CrewLockError extends Error {
72
- readonly name = "CrewLockError" as const;
73
- constructor(message: string, public readonly lockPath?: string) { super(message); }
74
- }
75
-
76
- /**
77
- * Outcome of a crew run attempt.
78
- * Used by RunTracker and HealthWatcher.
79
- */
80
- export type CrewRunOutcome = "ok" | "cancelled" | "deadletter" | "failed" | "timeout" | "aborted";
81
- ```
82
-
83
- **Update:** `src/runtime/task-runner.ts`, `src/runtime/team-runner.ts`, `src/runtime/crash-recovery.ts`
84
-
85
- Replace string matching with `instanceof` checks.
86
-
87
- ### Implementation
88
-
89
- ```bash
90
- # 1. Create file
91
- cat > src/runtime/errors/crew-errors.ts << 'EOF'
92
- // (content above)
93
- EOF
94
-
95
- # 2. Update imports in affected files
96
- # From: catch (e) { if (e instanceof Error && e.message.includes("deadletter")) ... }
97
- # To: catch (e) { if (e instanceof CrewDeadletterError) ... }
98
- ```
99
-
100
- ### Effort: LOW (1-2 hours)
101
-
102
- ---
103
-
104
- ## 2. Conflict Detection
105
-
106
- ### Why
107
- When multiple pi-crew agents edit the same file in a worktree, git merge conflicts can occur. Current pi-crew has no conflict detection — agents see garbled `<<<<<<< HEAD` markers with no structured way to resolve them.
108
-
109
- ### Architecture
110
-
111
- ```
112
- pi-crew worktree agents edit files
113
- ↓
114
- WorktreeManager detects file change
115
- ↓
116
- ConflictDetector.scanFileForConflicts(path)
117
- ↓
118
- Returns ConflictBlock[] + registers in ConflictHistory
119
- ↓
120
- Read tool appends conflict warning footer
121
- ↓
122
- Agent calls write({ path: "conflict://<id>", content })
123
- ↓
124
- ConflictResolver.spliceConflict() → clean file
125
- ```
126
-
127
- ### Files to create
128
-
129
- **Create:** `src/utils/conflict-detect.ts` (fork from oh-my-pi, ~400 lines)
130
-
131
- Key exports:
132
- - `scanConflictLines(lines, firstLineNumber)` → `ConflictBlock[]`
133
- - `scanFileForConflicts(path)` → `{ blocks, scanTruncated }`
134
- - `ConflictHistory` class
135
- - `ConflictEntry` interface
136
- - `parseConflictUri(raw)` → `ParsedConflictUri | null`
137
- - `spliceConflict(text, entry, replacement)` → `string`
138
- - `expandContentTokens(content, entry)` → `string` (handles @ours/@theirs/@base/@both)
139
- - `renderConflictRegion(entry, scope)` → `{ lines, startLine }`
140
- - `formatConflictWarning(entries)` → `string`
141
-
142
- **Create:** `src/runtime/conflict-registry.ts`
143
-
144
- ```typescript
145
- /**
146
- * Global conflict registry for pi-crew.
147
- * Attaches ConflictHistory to each live session.
148
- */
149
- import { ConflictHistory, getConflictHistory } from "../utils/conflict-detect.ts";
150
- import type { LiveAgentHandle } from "./live-agent-manager.ts";
151
-
152
- export function getAgentConflicts(handle: LiveAgentHandle): ConflictHistory {
153
- if (!handle.conflictHistory) {
154
- handle.conflictHistory = new ConflictHistory();
155
- }
156
- return handle.conflictHistory;
157
- }
158
- ```
159
-
160
- **Modify:** `src/extension/registration/tools/read-tool.ts`
161
-
162
- After reading file content:
163
- 1. Call `scanConflictLines(lines, 1)`
164
- 2. For each block, call `conflictHistory.register(...)`
165
- 3. Append `formatConflictWarning(entries)` to output
166
-
167
- **Modify:** `src/extension/registration/tools/write-tool.ts`
168
-
169
- Add `conflict://<N>` handling:
170
- 1. Parse URI with `parseConflictUri(path)`
171
- 2. Look up `ConflictEntry` from `ConflictHistory`
172
- 3. Call `expandContentTokens(content, entry)`
173
- 4. Call `spliceConflict(originalText, entry, expandedContent)`
174
- 5. Write result to `entry.absolutePath`
175
-
176
- ### Integration points
177
-
178
- | File | Change |
179
- |------|--------|
180
- | `src/extension/registration/tools/read-tool.ts` | Append conflict warning to file content |
181
- | `src/extension/registration/tools/write-tool.ts` | Handle `conflict://` protocol |
182
- | `src/runtime/live-agent-manager.ts` | Add `conflictHistory?: ConflictHistory` to handle |
183
- | `src/utils/conflict-detect.ts` | New file (fork from oh-my-pi) |
184
- | `src/runtime/conflict-registry.ts` | New file (global registry) |
185
-
186
- ### Edge cases to handle
187
-
188
- 1. **Nested conflicts** — oh-my-pi handles by requiring strict marker shape
189
- 2. **Multi-file conflicts** — `ConflictHistory.invalidatePath()` when file is resolved
190
- 3. **Retry after partial resolution** — `ConflictEntry` id stays stable
191
- 4. **Large files** — `scanFileForConflicts` caps at 10MB
192
- 5. **Diff3 conflicts** — Support `|||||||` base section
193
-
194
- ### Test plan
195
-
196
- ```typescript
197
- // test/unit/conflict-detect.test.ts
198
- test("scanConflictLines detects single 2-way block", () => {
199
- const lines = ["<<<<<<< HEAD", "our changes", "=======", "their changes", ">>>>>>> feature"];
200
- const blocks = scanConflictLines(lines, 1);
201
- assert(blocks.length === 1);
202
- assert(blocks[0].oursLines[0] === "our changes");
203
- });
204
-
205
- test("scanConflictLines ignores non-column-0 markers", () => {
206
- const lines = [" <<<<<<< indented", "=======", ">>>>>>>"];
207
- const blocks = scanConflictLines(lines, 1);
208
- assert(blocks.length === 0);
209
- });
210
-
211
- test("scanConflictLines detects diff3 3-way block", () => {
212
- // ...with ||||||| base marker
213
- });
214
- ```
215
-
216
- ### Effort: MEDIUM (4-8 hours)
217
-
218
- ---
219
-
220
- ## 3. Issue-PR Protocol
221
-
222
- ### Why
223
- pi-crew workflow agents can benefit from issue/PR integration:
224
- - Create issue from failed task
225
- - Link workflow tasks to GitHub issues
226
- - PR review workflow (`pr://` protocol)
227
-
228
- ### URL shapes to support
229
-
230
- ```
231
- issue:// — list recent issues (default repo from cwd)
232
- issue://owner/repo — list issues for repo
233
- issue://123 — single issue (repo from cwd)
234
- issue://owner/repo/123 — fully qualified
235
- issue://owner/repo/123?comments=0 — suppress comments
236
-
237
- pr:// — list recent PRs
238
- pr://owner/repo — list PRs for repo
239
- pr://owner/repo/456 — single PR
240
- pr://owner/repo/456/diff — PR diff
241
- ```
242
-
243
- ### Files to create/modify
244
-
245
- **Create:** `src/internal-urls/issue-pr-protocol.ts` (port from oh-my-pi, ~577 lines)
246
-
247
- Key exports:
248
- - `IssuePrProtocol` class implementing `ProtocolHandler`
249
- - `parseIssueUrl(url)` → `ParsedIssue`
250
- - `parsePrUrl(url)` → `ParsedPr`
251
- - `fetchIssue(parsed)` → `string` (markdown)
252
- - `fetchPr(parsed)` → `string` (markdown)
253
- - `fetchPrDiff(parsed)` → `string` (unified diff)
254
-
255
- **Modify:** `src/internal-urls/router.ts`
256
-
257
- Register `issue://` and `pr://` handlers.
258
-
259
- **Create:** `src/tools/gh-cache.ts` (fork from oh-my-pi `tools/github-cache.ts`)
260
-
261
- SQLite-backed cache for GitHub API responses. Shared across sessions.
262
-
263
- ### Dependencies
264
-
265
- 1. **GitHub CLI (`gh`)** — oh-my-pi uses `gh issue list`, `gh pr list`, `gh api`
266
- 2. **SQLite** — via `better-sqlite3` or similar
267
- 3. **Git config** — Need to resolve default repo from `git remote get-url origin`
268
-
269
- ### Implementation details
270
-
271
- ```typescript
272
- interface ParsedIssue {
273
- kind: "single" | "list";
274
- repo?: string; // undefined = derive from cwd
275
- number?: number;
276
- state?: "open" | "closed" | "all";
277
- limit?: number;
278
- comments?: boolean;
279
- }
280
-
281
- interface ParsedPr {
282
- kind: "single" | "list" | "diff";
283
- repo?: string;
284
- number?: number;
285
- state?: "open" | "closed" | "merged" | "all";
286
- limit?: number;
287
- diffMode?: "list" | "all";
288
- }
289
- ```
290
-
291
- **Fetching:**
292
- - List: `gh issue list --repo owner/repo --state open --limit 30`
293
- - Single: `gh issue view 123 --repo owner/repo --comments`
294
- - PR: `gh pr view 456 --repo owner/repo --comments`
295
- - Diff: `gh pr diff 456 --repo owner/repo`
296
-
297
- **Caching:**
298
- - Cache key: `{repo, number, type}` hash
299
- - TTL: 5 minutes for list, 1 hour for single items
300
- - Invalidate on write operations (create/close/reopen)
301
-
302
- ### Integration with pi-crew
303
-
304
- **New tool:** `read-issue` / `read-pr`
305
- ```typescript
306
- // agents can call:
307
- // read({ path: "issue://123" }) → markdown of the issue
308
- // read({ path: "pr://456" }) → markdown of the PR
309
- ```
310
-
311
- **New slash command:** `/issue` or use the existing `/crew`:
312
- ```
313
- /crew create-issue "Task failed: fix memory leak in cache" --labels=bug --assignee=me
314
- /crew link-issue TICKET-123 --task=explorer-1
315
- ```
316
-
317
- ### Effort: MEDIUM-HIGH (8-12 hours)
318
-
319
- ---
320
-
321
- ## Summary
322
-
323
- | Feature | Effort | Risk | Priority |
324
- |---------|--------|------|----------|
325
- | Typed Crew Errors | LOW | None | 1 |
326
- | Conflict Detection | MEDIUM | Git operations, large file handling | 2 |
327
- | Issue-PR Protocol | MEDIUM-HIGH | GitHub auth, gh CLI dependency | 3 |
328
-
329
- ## Recommended execution order
330
-
331
- 1. **Day 1:** Typed Crew Errors (quick win)
332
- 2. **Day 2-3:** Conflict Detection
333
- 3. **Day 4-5:** Issue-PR Protocol (if time permits)