pi-crew 0.9.16 → 0.9.18

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 (435) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/README.md +19 -0
  3. package/dist/build-meta.json +21784 -0
  4. package/dist/index.mjs +83169 -0
  5. package/dist/index.mjs.map +7 -0
  6. package/docs/A +358 -0
  7. package/docs/M-A +357 -0
  8. package/docs/REVIEW-FINDINGS-2026-06 +357 -0
  9. package/docs/Y +357 -0
  10. package/docs/a +357 -0
  11. package/docs/aA +358 -0
  12. package/docs/archive/README.md +91 -0
  13. package/docs/migration/atomic-write-v2-migration.md +297 -0
  14. package/docs/patterns/command-agent-skill.md +1 -1
  15. package/docs/perf/performance-review-2026-07.md +287 -0
  16. package/docs/skills/REFERENCE.md +0 -17
  17. package/docs//303/242mmaAAA/303/242 +357 -0
  18. package/index.bundle.ts +25 -0
  19. package/index.ts +95 -4
  20. package/package.json +15 -4
  21. package/skills/iterative-audit/SKILL.md +0 -1
  22. package/skills/widget-rendering/SKILL.md +17 -0
  23. package/src/adapters/claude-adapter.ts +1 -3
  24. package/src/adapters/export-util.ts +16 -16
  25. package/src/adapters/index.ts +5 -5
  26. package/src/agents/agent-config.ts +20 -14
  27. package/src/agents/agent-serializer.ts +1 -1
  28. package/src/agents/discover-agents.ts +83 -39
  29. package/src/benchmark/benchmark-runner.ts +51 -51
  30. package/src/benchmark/feedback-loop.ts +1 -1
  31. package/src/config/config.ts +303 -591
  32. package/src/config/defaults.ts +28 -2
  33. package/src/config/drift-detector.ts +11 -14
  34. package/src/config/markers.ts +201 -203
  35. package/src/config/resilient-parser.ts +14 -6
  36. package/src/config/role-tools.ts +3 -3
  37. package/src/config/suggestions.ts +5 -12
  38. package/src/config/types.ts +9 -25
  39. package/src/errors.ts +151 -157
  40. package/src/extension/action-suggestions.ts +54 -9
  41. package/src/extension/async-notifier.ts +43 -13
  42. package/src/extension/autonomous-policy.ts +77 -37
  43. package/src/extension/command-completions.ts +9 -8
  44. package/src/extension/context-status-injection.ts +14 -12
  45. package/src/extension/crew-autocomplete.ts +8 -16
  46. package/src/extension/crew-cleanup.ts +2 -1
  47. package/src/extension/crew-shortcuts.ts +9 -6
  48. package/src/extension/cross-extension-rpc.ts +136 -42
  49. package/src/extension/help.ts +1 -1
  50. package/src/extension/import-index.ts +10 -5
  51. package/src/extension/knowledge-injection.ts +88 -15
  52. package/src/extension/management.ts +89 -349
  53. package/src/extension/message-renderers.ts +3 -4
  54. package/src/extension/notification-router.ts +22 -5
  55. package/src/extension/notification-sink.ts +6 -3
  56. package/src/extension/pi-api.ts +17 -8
  57. package/src/extension/plan-orchestrate.ts +8 -27
  58. package/src/extension/project-init.ts +21 -6
  59. package/src/extension/register.ts +329 -975
  60. package/src/extension/registration/artifact-cleanup.ts +9 -4
  61. package/src/extension/registration/command-utils.ts +5 -1
  62. package/src/extension/registration/commands.ts +806 -314
  63. package/src/extension/registration/compaction-guard.ts +15 -15
  64. package/src/extension/registration/lifecycle.ts +259 -0
  65. package/src/extension/registration/observability.ts +293 -0
  66. package/src/extension/registration/subagent-helpers.ts +29 -7
  67. package/src/extension/registration/subagent-tools.ts +253 -44
  68. package/src/extension/registration/team-tool.ts +19 -84
  69. package/src/extension/registration/ui.ts +168 -0
  70. package/src/extension/registration/viewers.ts +64 -24
  71. package/src/extension/result-watcher.ts +18 -7
  72. package/src/extension/run-bundle-schema.ts +21 -6
  73. package/src/extension/run-export.ts +15 -6
  74. package/src/extension/run-import.ts +64 -29
  75. package/src/extension/run-index.ts +28 -9
  76. package/src/extension/run-maintenance.ts +32 -12
  77. package/src/extension/session-summary.ts +1 -1
  78. package/src/extension/team-manager-command.ts +64 -7
  79. package/src/extension/team-onboard.ts +149 -150
  80. package/src/extension/team-recommendation.ts +121 -21
  81. package/src/extension/team-tool/anchor.ts +31 -64
  82. package/src/extension/team-tool/api.ts +929 -141
  83. package/src/extension/team-tool/auto-summarize.ts +14 -26
  84. package/src/extension/team-tool/cache-control.ts +1 -5
  85. package/src/extension/team-tool/cancel.ts +138 -38
  86. package/src/extension/team-tool/chain-dispatch.ts +5 -13
  87. package/src/extension/team-tool/chain-executor.ts +29 -51
  88. package/src/extension/team-tool/config-patch.ts +1 -1
  89. package/src/extension/team-tool/context.ts +40 -20
  90. package/src/extension/team-tool/destructive-gate.ts +10 -5
  91. package/src/extension/team-tool/doctor.ts +170 -51
  92. package/src/extension/team-tool/explain.ts +228 -214
  93. package/src/extension/team-tool/failure-patterns.ts +3 -9
  94. package/src/extension/team-tool/goal-wrap.ts +71 -29
  95. package/src/extension/team-tool/goal.ts +185 -35
  96. package/src/extension/team-tool/handle-schedule.ts +34 -15
  97. package/src/extension/team-tool/handle-settings.ts +94 -56
  98. package/src/extension/team-tool/health-monitor.ts +27 -108
  99. package/src/extension/team-tool/inspect.ts +42 -9
  100. package/src/extension/team-tool/intent-policy.ts +4 -1
  101. package/src/extension/team-tool/lifecycle-actions.ts +244 -48
  102. package/src/extension/team-tool/orchestrate.ts +7 -18
  103. package/src/extension/team-tool/parallel-dispatch.ts +51 -29
  104. package/src/extension/team-tool/plan.ts +29 -5
  105. package/src/extension/team-tool/respond.ts +49 -16
  106. package/src/extension/team-tool/run-not-found.ts +3 -8
  107. package/src/extension/team-tool/run.ts +80 -317
  108. package/src/extension/team-tool/status.ts +135 -43
  109. package/src/extension/team-tool/workflow-manage.ts +92 -25
  110. package/src/extension/team-tool-types.ts +8 -1
  111. package/src/extension/team-tool.ts +142 -551
  112. package/src/extension/validate-resources.ts +39 -8
  113. package/src/hooks/registry.ts +66 -17
  114. package/src/hooks/types.ts +1 -1
  115. package/src/i18n.ts +25 -11
  116. package/src/observability/correlation.ts +17 -3
  117. package/src/observability/event-bus.ts +51 -56
  118. package/src/observability/event-to-metric.ts +117 -15
  119. package/src/observability/exporters/otlp-exporter.ts +56 -17
  120. package/src/observability/exporters/prometheus-exporter.ts +1 -1
  121. package/src/observability/metric-registry.ts +16 -4
  122. package/src/observability/metric-retention.ts +8 -2
  123. package/src/observability/metric-sink.ts +11 -3
  124. package/src/observability/metrics-primitives.ts +42 -9
  125. package/src/plugins/plugin-define.ts +2 -2
  126. package/src/plugins/plugin-registry.ts +25 -25
  127. package/src/plugins/plugins/index.ts +1 -1
  128. package/src/plugins/plugins/nextjs.ts +16 -16
  129. package/src/plugins/plugins/vite.ts +7 -11
  130. package/src/plugins/plugins/vitest.ts +6 -11
  131. package/src/runtime/adaptive-plan.ts +225 -40
  132. package/src/runtime/agent-control.ts +58 -15
  133. package/src/runtime/agent-memory.ts +15 -9
  134. package/src/runtime/agent-observability.ts +10 -2
  135. package/src/runtime/anchor-manager.ts +27 -25
  136. package/src/runtime/async-marker.ts +7 -1
  137. package/src/runtime/async-runner.ts +39 -24
  138. package/src/runtime/auto-summarize.ts +7 -13
  139. package/src/runtime/background-runner.ts +189 -251
  140. package/src/runtime/batch-barrier.ts +18 -16
  141. package/src/runtime/cancellation-token.ts +16 -6
  142. package/src/runtime/cancellation.ts +46 -8
  143. package/src/runtime/capability-inventory.ts +6 -4
  144. package/src/runtime/chain-parser.ts +44 -11
  145. package/src/runtime/chain-runner.ts +63 -69
  146. package/src/runtime/checkpoint.ts +12 -56
  147. package/src/runtime/child-pi.ts +344 -79
  148. package/src/runtime/coalesce-tasks.ts +268 -0
  149. package/src/runtime/code-summary.ts +71 -26
  150. package/src/runtime/compact-stages/index.ts +15 -5
  151. package/src/runtime/compact-stages/tail-capture-stage.ts +7 -2
  152. package/src/runtime/compact-stages/truncation-stage.ts +4 -1
  153. package/src/runtime/compaction-summary.ts +17 -10
  154. package/src/runtime/completion-guard.ts +33 -16
  155. package/src/runtime/crash-classification.ts +28 -7
  156. package/src/runtime/crash-recovery.ts +177 -37
  157. package/src/runtime/crew-agent-records.ts +145 -47
  158. package/src/runtime/crew-hooks.ts +9 -24
  159. package/src/runtime/cross-extension-rpc.ts +25 -23
  160. package/src/runtime/custom-tools/irc-tool.ts +43 -15
  161. package/src/runtime/custom-tools/submit-result-tool.ts +16 -5
  162. package/src/runtime/delivery-coordinator.ts +34 -7
  163. package/src/runtime/delta-conflict.ts +9 -21
  164. package/src/runtime/deterministic-ast.ts +1 -1
  165. package/src/runtime/diagnostic-export.ts +53 -20
  166. package/src/runtime/direct-run.ts +12 -2
  167. package/src/runtime/dwf-state-store.ts +1 -1
  168. package/src/runtime/dynamic-workflow-context.ts +187 -59
  169. package/src/runtime/dynamic-workflow-runner.ts +42 -20
  170. package/src/runtime/effectiveness.ts +16 -8
  171. package/src/runtime/errors/crew-errors.ts +7 -11
  172. package/src/runtime/event-stream-bridge.ts +9 -3
  173. package/src/runtime/foreground-control.ts +54 -14
  174. package/src/runtime/foreground-watchdog.ts +9 -6
  175. package/src/runtime/goal-achievement.ts +27 -10
  176. package/src/runtime/goal-evaluator.ts +54 -19
  177. package/src/runtime/goal-loop-runner.ts +280 -99
  178. package/src/runtime/goal-state-store.ts +27 -17
  179. package/src/runtime/green-contract.ts +11 -2
  180. package/src/runtime/group-join.ts +64 -31
  181. package/src/runtime/handoff-manager.ts +37 -42
  182. package/src/runtime/heartbeat-gradient.ts +10 -2
  183. package/src/runtime/heartbeat-watcher.ts +32 -6
  184. package/src/runtime/hidden-handoff.ts +13 -31
  185. package/src/runtime/important-line-classifier.ts +12 -2
  186. package/src/runtime/iteration-hooks.ts +25 -15
  187. package/src/runtime/live-agent-control.ts +55 -7
  188. package/src/runtime/live-agent-manager.ts +130 -27
  189. package/src/runtime/live-control-realtime.ts +23 -3
  190. package/src/runtime/live-irc.ts +4 -1
  191. package/src/runtime/live-session-health.ts +12 -4
  192. package/src/runtime/live-session-runtime.ts +379 -117
  193. package/src/runtime/manifest-cache.ts +28 -12
  194. package/src/runtime/mcp-proxy.ts +10 -18
  195. package/src/runtime/metric-parser.ts +1 -5
  196. package/src/runtime/model-fallback.ts +55 -18
  197. package/src/runtime/model-resolver.ts +2 -6
  198. package/src/runtime/model-scope.ts +19 -3
  199. package/src/runtime/notebook-helpers.ts +60 -62
  200. package/src/runtime/orphan-worker-registry.ts +37 -26
  201. package/src/runtime/output-validator.ts +18 -3
  202. package/src/runtime/overflow-recovery.ts +5 -4
  203. package/src/runtime/parallel-research.ts +29 -5
  204. package/src/runtime/parallel-utils.ts +9 -11
  205. package/src/runtime/path-overlap.ts +150 -0
  206. package/src/runtime/peer-dep.ts +12 -17
  207. package/src/runtime/per-write-validator.ts +1 -3
  208. package/src/runtime/phase-tracker.ts +342 -330
  209. package/src/runtime/pi-args.ts +26 -8
  210. package/src/runtime/pi-json-output.ts +1 -1
  211. package/src/runtime/pi-spawn.ts +30 -19
  212. package/src/runtime/pipeline-runner.ts +56 -55
  213. package/src/runtime/plan-templates.ts +5 -6
  214. package/src/runtime/policy-engine.ts +43 -7
  215. package/src/runtime/post-checks.ts +12 -4
  216. package/src/runtime/post-exit-stdio-guard.ts +2 -2
  217. package/src/runtime/process-lifecycle.ts +20 -10
  218. package/src/runtime/process-status.ts +16 -5
  219. package/src/runtime/progress-event-coalescer.ts +2 -1
  220. package/src/runtime/progress-tracker.ts +103 -103
  221. package/src/runtime/prose-compressor.ts +9 -11
  222. package/src/runtime/recovery-recipes.ts +118 -24
  223. package/src/runtime/replace.ts +25 -10
  224. package/src/runtime/resilient-edit.ts +10 -25
  225. package/src/runtime/result-extractor.ts +2 -6
  226. package/src/runtime/retry-executor.ts +20 -4
  227. package/src/runtime/retry-runner.ts +27 -51
  228. package/src/runtime/role-permission.ts +6 -1
  229. package/src/runtime/run-coalesced-task-group.ts +256 -0
  230. package/src/runtime/run-drift.ts +14 -15
  231. package/src/runtime/run-tracker.ts +6 -28
  232. package/src/runtime/runtime-policy.ts +1 -6
  233. package/src/runtime/runtime-resolver.ts +80 -15
  234. package/src/runtime/scheduler.ts +47 -18
  235. package/src/runtime/semaphore.ts +5 -7
  236. package/src/runtime/sensitive-paths.ts +2 -1
  237. package/src/runtime/session-usage.ts +1 -1
  238. package/src/runtime/settings-store.ts +16 -12
  239. package/src/runtime/sidechain-output.ts +6 -2
  240. package/src/runtime/single-agent-compose.ts +1 -4
  241. package/src/runtime/skill-effectiveness.ts +29 -97
  242. package/src/runtime/skill-instructions.ts +40 -83
  243. package/src/runtime/stale-reconciler.ts +73 -197
  244. package/src/runtime/stream-preview.ts +1 -1
  245. package/src/runtime/streaming-output.ts +1 -1
  246. package/src/runtime/subagent-manager.ts +44 -169
  247. package/src/runtime/subprocess-tool-registry.ts +4 -1
  248. package/src/runtime/supervisor-contact.ts +10 -5
  249. package/src/runtime/task-display.ts +19 -5
  250. package/src/runtime/task-graph-scheduler.ts +95 -21
  251. package/src/runtime/task-graph.ts +5 -11
  252. package/src/runtime/task-health.ts +54 -47
  253. package/src/runtime/task-id.ts +12 -19
  254. package/src/runtime/task-output-context.ts +265 -81
  255. package/src/runtime/task-packet.ts +12 -20
  256. package/src/runtime/task-quality.ts +6 -14
  257. package/src/runtime/task-runner/context-retrieval.ts +4 -13
  258. package/src/runtime/task-runner/live-executor.ts +114 -36
  259. package/src/runtime/task-runner/output-splitter.ts +152 -0
  260. package/src/runtime/task-runner/progress.ts +50 -12
  261. package/src/runtime/task-runner/prompt-builder.ts +31 -7
  262. package/src/runtime/task-runner/prompt-pipeline.ts +31 -7
  263. package/src/runtime/task-runner/result-utils.ts +3 -1
  264. package/src/runtime/task-runner/retrieval-orchestrator.ts +310 -0
  265. package/src/runtime/task-runner/run-projection.ts +27 -8
  266. package/src/runtime/task-runner/state-helpers.ts +50 -14
  267. package/src/runtime/task-runner/tail-read.ts +2 -6
  268. package/src/runtime/task-runner.ts +180 -326
  269. package/src/runtime/team-runner-artifacts.ts +13 -0
  270. package/src/runtime/team-runner.ts +456 -974
  271. package/src/runtime/tool-output-pruner.ts +6 -9
  272. package/src/runtime/tool-progress.ts +11 -21
  273. package/src/runtime/verification-gates.ts +33 -24
  274. package/src/runtime/verification-integrity.ts +2 -7
  275. package/src/runtime/verification-worktree.ts +62 -12
  276. package/src/runtime/worker-heartbeat.ts +5 -1
  277. package/src/runtime/worker-startup.ts +29 -5
  278. package/src/runtime/workflow-state.ts +17 -9
  279. package/src/runtime/workspace-lock.ts +30 -35
  280. package/src/runtime/workspace-tree.ts +20 -32
  281. package/src/runtime/yield-handler.ts +43 -9
  282. package/src/runtime/zombie-scanner.ts +5 -4
  283. package/src/schema/config-schema.ts +266 -172
  284. package/src/schema/team-tool-schema.ts +29 -74
  285. package/src/schema/validation-types.ts +25 -17
  286. package/src/skills/discover-skills.ts +35 -10
  287. package/src/skills/skill-templates.ts +109 -27
  288. package/src/skills/validate.ts +26 -8
  289. package/src/state/active-run-registry.ts +87 -28
  290. package/src/state/artifact-store.ts +9 -5
  291. package/src/state/atomic-write-v2.ts +85 -63
  292. package/src/state/atomic-write.ts +106 -27
  293. package/src/state/blob-store.ts +47 -20
  294. package/src/state/contracts.ts +20 -5
  295. package/src/state/crew-init.ts +5 -22
  296. package/src/state/decision-ledger.ts +19 -73
  297. package/src/state/event-log-rotation.ts +41 -15
  298. package/src/state/event-log.ts +168 -53
  299. package/src/state/event-reconstructor.ts +11 -1
  300. package/src/state/gitignore-manager.ts +2 -8
  301. package/src/state/health-store.ts +57 -57
  302. package/src/state/hook-instinct-bridge.ts +1 -1
  303. package/src/state/hook-integrations.ts +1 -1
  304. package/src/state/instinct-store.ts +17 -5
  305. package/src/state/jsonl-writer.ts +1 -1
  306. package/src/state/locks.ts +23 -9
  307. package/src/state/mailbox.ts +151 -28
  308. package/src/state/observation-store.ts +20 -14
  309. package/src/state/run-cache.ts +142 -135
  310. package/src/state/run-graph.ts +6 -15
  311. package/src/state/run-metrics.ts +5 -18
  312. package/src/state/schedule.ts +15 -9
  313. package/src/state/state-store.ts +137 -47
  314. package/src/state/task-claims.ts +12 -2
  315. package/src/state/tiered-eval.ts +52 -43
  316. package/src/state/types-eval.ts +2 -2
  317. package/src/state/types.ts +24 -20
  318. package/src/state/usage.ts +20 -4
  319. package/src/state/worker-atomic-writer.ts +6 -3
  320. package/src/subagents/index.ts +2 -2
  321. package/src/teams/discover-teams.ts +21 -6
  322. package/src/tools/safe-bash-extension.ts +5 -6
  323. package/src/tools/safe-bash.ts +10 -11
  324. package/src/types/new-api-types.ts +6 -10
  325. package/src/ui/agent-management-overlay.ts +52 -40
  326. package/src/ui/card-colors.ts +13 -4
  327. package/src/ui/crew-footer.ts +8 -7
  328. package/src/ui/crew-select-list.ts +1 -1
  329. package/src/ui/dashboard-panes/agents-pane.ts +41 -25
  330. package/src/ui/dashboard-panes/cancellation-pane.ts +1 -1
  331. package/src/ui/dashboard-panes/capability-pane.ts +32 -15
  332. package/src/ui/dashboard-panes/health-pane.ts +2 -1
  333. package/src/ui/dashboard-panes/metrics-pane.ts +4 -1
  334. package/src/ui/dashboard-panes/progress-pane.ts +12 -9
  335. package/src/ui/heartbeat-aggregator.ts +15 -4
  336. package/src/ui/keybinding-map.ts +40 -7
  337. package/src/ui/live-conversation-overlay.ts +36 -20
  338. package/src/ui/live-duration.ts +1 -4
  339. package/src/ui/live-run-sidebar.ts +88 -25
  340. package/src/ui/loaders.ts +2 -8
  341. package/src/ui/mascot.ts +20 -36
  342. package/src/ui/overlays/agent-picker-overlay.ts +11 -3
  343. package/src/ui/overlays/confirm-overlay.ts +4 -2
  344. package/src/ui/overlays/help-overlay.ts +25 -14
  345. package/src/ui/overlays/mailbox-compose-overlay.ts +48 -11
  346. package/src/ui/overlays/mailbox-compose-preview.ts +20 -5
  347. package/src/ui/overlays/mailbox-detail-overlay.ts +27 -6
  348. package/src/ui/pi-ui-compat.ts +7 -7
  349. package/src/ui/powerbar-publisher.ts +120 -42
  350. package/src/ui/render-diff.ts +10 -3
  351. package/src/ui/render-scheduler.ts +12 -4
  352. package/src/ui/run-action-dispatcher.ts +81 -18
  353. package/src/ui/run-dashboard.ts +172 -76
  354. package/src/ui/run-event-bus.ts +59 -37
  355. package/src/ui/run-snapshot-cache.ts +276 -86
  356. package/src/ui/settings-overlay.ts +361 -74
  357. package/src/ui/status-colors.ts +12 -1
  358. package/src/ui/syntax-highlight.ts +1 -1
  359. package/src/ui/terminal-status.ts +1 -3
  360. package/src/ui/theme-adapter.ts +16 -14
  361. package/src/ui/theme-discovery.ts +13 -2
  362. package/src/ui/tool-progress-formatter.ts +7 -7
  363. package/src/ui/tool-render.ts +128 -56
  364. package/src/ui/tool-renderers/brief-mode.ts +45 -27
  365. package/src/ui/tool-renderers/index.ts +109 -43
  366. package/src/ui/transcript-cache.ts +32 -6
  367. package/src/ui/transcript-entries.ts +25 -23
  368. package/src/ui/transcript-viewer.ts +78 -29
  369. package/src/ui/widget/index.ts +99 -40
  370. package/src/ui/widget/widget-formatters.ts +13 -6
  371. package/src/ui/widget/widget-model.ts +19 -8
  372. package/src/ui/widget/widget-renderer.ts +23 -13
  373. package/src/ui/widget/widget-types.ts +1 -1
  374. package/src/utils/bm25-search.ts +199 -199
  375. package/src/utils/conflict-detect.ts +22 -21
  376. package/src/utils/env-filter.ts +14 -7
  377. package/src/utils/file-coalescer.ts +5 -1
  378. package/src/utils/fingerprint.ts +3 -6
  379. package/src/utils/frontmatter.ts +3 -1
  380. package/src/utils/fs-watch.ts +2 -6
  381. package/src/utils/gh-protocol.ts +119 -44
  382. package/src/utils/git.ts +13 -15
  383. package/src/utils/guards.ts +2 -5
  384. package/src/utils/ids.ts +9 -2
  385. package/src/utils/incremental-reader.ts +14 -3
  386. package/src/utils/internal-error.ts +2 -1
  387. package/src/utils/names.ts +12 -3
  388. package/src/utils/paths.ts +49 -5
  389. package/src/utils/project-detector.ts +2 -2
  390. package/src/utils/redaction.ts +29 -19
  391. package/src/utils/resolve-shell.ts +9 -7
  392. package/src/utils/run-watcher-registry.ts +19 -31
  393. package/src/utils/safe-paths.ts +46 -29
  394. package/src/utils/scan-cache.ts +9 -2
  395. package/src/utils/session-utils.ts +2 -4
  396. package/src/utils/sleep.ts +12 -5
  397. package/src/utils/sse-parser.ts +5 -17
  398. package/src/utils/visual.ts +52 -32
  399. package/src/workflows/discover-workflows.ts +41 -109
  400. package/src/workflows/intermediate-store.ts +5 -21
  401. package/src/workflows/preflight-validator.ts +6 -33
  402. package/src/workflows/topology-analyzer.ts +5 -21
  403. package/src/workflows/workflow-config.ts +7 -6
  404. package/src/worktree/branch-freshness.ts +66 -8
  405. package/src/worktree/cleanup.ts +130 -20
  406. package/src/worktree/worktree-manager.ts +212 -69
  407. package/skills/artifact-analysis-loop/SKILL.md +0 -303
  408. package/skills/detection-pipeline-design/SKILL.md +0 -286
  409. package/skills/hunting-investigation-loop/SKILL.md +0 -402
  410. package/skills/incident-playbook-construction/SKILL.md +0 -384
  411. package/skills/security-review/SKILL.md +0 -561
  412. package/skills/threat-hypothesis-framework/SKILL.md +0 -176
  413. package/skills/ui-render-performance/SKILL.md +0 -58
  414. /package/docs/{followup-review-round3-2026-05-12.md → archive/followup-review-round3-2026-05-12.md} +0 -0
  415. /package/docs/{followup-review-round4-2026-05-13.md → archive/followup-review-round4-2026-05-13.md} +0 -0
  416. /package/docs/{pi-crew-bugs.md → archive/pi-crew-bugs.md} +0 -0
  417. /package/docs/{pi-crew-test-final.md → archive/pi-crew-test-final.md} +0 -0
  418. /package/docs/{pi-crew-test-results.md → archive/pi-crew-test-results.md} +0 -0
  419. /package/docs/{pi-crew-test-round2.md → archive/pi-crew-test-round2.md} +0 -0
  420. /package/docs/{pi-crew-test-round4.md → archive/pi-crew-test-round4.md} +0 -0
  421. /package/docs/{pi-crew-test-round5.md → archive/pi-crew-test-round5.md} +0 -0
  422. /package/docs/{pi-crew-test-round6.md → archive/pi-crew-test-round6.md} +0 -0
  423. /package/docs/{pi-crew-v0.5.10-audit-fix-plan.md → archive/pi-crew-v0.5.10-audit-fix-plan.md} +0 -0
  424. /package/docs/{pi-crew-v0.5.11-audit-fix-plan.md → archive/pi-crew-v0.5.11-audit-fix-plan.md} +0 -0
  425. /package/docs/{pi-crew-v0.5.12-audit-fix-plan.md → archive/pi-crew-v0.5.12-audit-fix-plan.md} +0 -0
  426. /package/docs/{pi-crew-v0.5.13-audit-fix-plan.md → archive/pi-crew-v0.5.13-audit-fix-plan.md} +0 -0
  427. /package/docs/{pi-crew-v0.5.14-audit-fix-plan.md → archive/pi-crew-v0.5.14-audit-fix-plan.md} +0 -0
  428. /package/docs/{pi-crew-v0.5.16-audit-fix-plan.md → archive/pi-crew-v0.5.16-audit-fix-plan.md} +0 -0
  429. /package/docs/{pi-crew-v0.5.17-audit-fix-plan.md → archive/pi-crew-v0.5.17-audit-fix-plan.md} +0 -0
  430. /package/docs/{pi-crew-v0.5.5-audit-fix-plan.md → archive/pi-crew-v0.5.5-audit-fix-plan.md} +0 -0
  431. /package/docs/{pi-crew-v0.5.9-audit-fix-plan.md → archive/pi-crew-v0.5.9-audit-fix-plan.md} +0 -0
  432. /package/docs/{pi-mono-opportunities.md → archive/pi-mono-opportunities.md} +0 -0
  433. /package/docs/{pi-mono-review.md → archive/pi-mono-review.md} +0 -0
  434. /package/docs/{pi-subagent4-comparison.md → archive/pi-subagent4-comparison.md} +0 -0
  435. /package/docs/{pi-subagents3-deep-analysis.md → archive/pi-subagents3-deep-analysis.md} +0 -0
@@ -63,7 +63,13 @@ export class DeliveryCoordinator {
63
63
  logInternalError("delivery-coordinator.deliverResult", error, `runId=${runId}`);
64
64
  }
65
65
  }
66
- if (!this.flushing) this.enqueue({ runId, payload: result, timestamp: Date.now(), type: "result" });
66
+ if (!this.flushing)
67
+ this.enqueue({
68
+ runId,
69
+ payload: result,
70
+ timestamp: Date.now(),
71
+ type: "result",
72
+ });
67
73
  }
68
74
 
69
75
  deliverNotification(notification: NotificationDescriptor): void {
@@ -80,11 +86,19 @@ export class DeliveryCoordinator {
80
86
  if (this.deps.emit) {
81
87
  try {
82
88
  this.deps.emit("pi-crew:notification", notification);
83
- } catch { /* secondary delivery, ignore errors */ }
89
+ } catch {
90
+ /* secondary delivery, ignore errors */
91
+ }
84
92
  }
85
93
  return;
86
94
  }
87
- if (!this.flushing) this.enqueue({ runId: notification.runId ?? "", payload: notification, timestamp: Date.now(), type: "notification" });
95
+ if (!this.flushing)
96
+ this.enqueue({
97
+ runId: notification.runId ?? "",
98
+ payload: notification,
99
+ timestamp: Date.now(),
100
+ type: "notification",
101
+ });
88
102
  }
89
103
 
90
104
  deliverSteer(runId: string, message: string): void {
@@ -96,7 +110,13 @@ export class DeliveryCoordinator {
96
110
  logInternalError("delivery-coordinator.deliverSteer", error, `runId=${runId}`);
97
111
  }
98
112
  }
99
- if (!this.flushing) this.enqueue({ runId, payload: message, timestamp: Date.now(), type: "steer" });
113
+ if (!this.flushing)
114
+ this.enqueue({
115
+ runId,
116
+ payload: message,
117
+ timestamp: Date.now(),
118
+ type: "steer",
119
+ });
100
120
  }
101
121
 
102
122
  flushQueuedResults(): void {
@@ -115,10 +135,17 @@ export class DeliveryCoordinator {
115
135
  continue;
116
136
  }
117
137
  try {
118
- if (!this.deliverQueued(delivery)) retryLater.push({ ...delivery, generation: this.generation });
138
+ if (!this.deliverQueued(delivery))
139
+ retryLater.push({
140
+ ...delivery,
141
+ generation: this.generation,
142
+ });
119
143
  } catch (error) {
120
144
  logInternalError("delivery-coordinator.flush", error, `runId=${delivery.runId} type=${delivery.type}`);
121
- retryLater.push({ ...delivery, generation: this.generation });
145
+ retryLater.push({
146
+ ...delivery,
147
+ generation: this.generation,
148
+ });
122
149
  }
123
150
  }
124
151
  this.pending.unshift(...retryLater);
@@ -181,4 +208,4 @@ export class DeliveryCoordinator {
181
208
  logInternalError("delivery-coordinator.evict", undefined, `evicted=${evicted} remaining=${this.pending.length}`);
182
209
  }
183
210
  }
184
- }
211
+ }
@@ -98,10 +98,7 @@ export interface ExistingState {
98
98
  * - **resource_deleted**: referenced agent/team/workflow in import does not exist
99
99
  * in the current state.
100
100
  */
101
- export function detectImportConflicts(
102
- importBundle: ImportBundle,
103
- existingState: ExistingState,
104
- ): ConflictReport {
101
+ export function detectImportConflicts(importBundle: ImportBundle, existingState: ExistingState): ConflictReport {
105
102
  const conflicts: Conflict[] = [];
106
103
  const { manifest: incoming, tasks: incomingTasks } = importBundle;
107
104
  const { manifest: current, tasks: currentTasks } = existingState;
@@ -110,11 +107,7 @@ export function detectImportConflicts(
110
107
  if (current) {
111
108
  const incomingVersion = incoming.schemaVersion;
112
109
  const currentVersion = current.schemaVersion;
113
- if (
114
- typeof incomingVersion !== "undefined" &&
115
- typeof currentVersion !== "undefined" &&
116
- incomingVersion !== currentVersion
117
- ) {
110
+ if (typeof incomingVersion !== "undefined" && typeof currentVersion !== "undefined" && incomingVersion !== currentVersion) {
118
111
  conflicts.push({
119
112
  kind: "schema_drift",
120
113
  path: "manifest.schemaVersion",
@@ -156,9 +149,7 @@ export function detectImportConflicts(
156
149
 
157
150
  // ── State mismatch (task status differences) ─────────────────────
158
151
  if (currentTasks && currentTasks.length > 0) {
159
- const currentTaskMap = new Map(
160
- extractTaskLikes(currentTasks).map((t) => [t.id, t]),
161
- );
152
+ const currentTaskMap = new Map(extractTaskLikes(currentTasks).map((t) => [t.id, t]));
162
153
  const incomingTaskList = extractTaskLikes(incomingTasks);
163
154
 
164
155
  for (const inTask of incomingTaskList) {
@@ -257,10 +248,7 @@ export interface CurrentState {
257
248
  * - **file_overwrite**: files changed since suspension.
258
249
  * - **state_mismatch**: task statuses changed externally.
259
250
  */
260
- export function detectResumeConflicts(
261
- suspendedState: SuspendedState,
262
- currentState: CurrentState,
263
- ): ConflictReport {
251
+ export function detectResumeConflicts(suspendedState: SuspendedState, currentState: CurrentState): ConflictReport {
264
252
  const conflicts: Conflict[] = [];
265
253
  const { tasks: suspendedTasks, artifacts: suspendedArtifacts } = suspendedState;
266
254
  const { changedFiles, taskStatuses } = currentState;
@@ -310,17 +298,17 @@ export function detectResumeConflicts(
310
298
  * - **merge**: attempt merge — resolves `state_mismatch` with merged status;
311
299
  * resolves others conditionally.
312
300
  */
313
- export function resolveConflict(
314
- conflict: Conflict,
315
- strategy: ConflictStrategy,
316
- ): ConflictResolution {
301
+ export function resolveConflict(conflict: Conflict, strategy: ConflictStrategy): ConflictResolution {
317
302
  switch (strategy) {
318
303
  case "skip":
319
304
  return { resolved: true, action: `Skipped ${conflict.path}` };
320
305
 
321
306
  case "overwrite":
322
307
  if (conflict.kind === "file_overwrite" || conflict.kind === "schema_drift") {
323
- return { resolved: true, action: `Overwritten ${conflict.path} with incoming value` };
308
+ return {
309
+ resolved: true,
310
+ action: `Overwritten ${conflict.path} with incoming value`,
311
+ };
324
312
  }
325
313
  return {
326
314
  resolved: false,
@@ -158,4 +158,4 @@ function staticStringOf(node: AstNode | undefined): string | undefined {
158
158
  if (left !== undefined && right !== undefined) return left + right;
159
159
  }
160
160
  return undefined;
161
- }
161
+ }
@@ -1,17 +1,18 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
1
3
  import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
2
4
  import type { MetricRegistry } from "../observability/metric-registry.ts";
3
5
  import type { MetricSnapshot } from "../observability/metrics-primitives.ts";
4
- import * as fs from "node:fs";
5
- import * as path from "node:path";
6
- import { readCrewAgents } from "./crew-agent-records.ts";
7
6
  import { readEvents, type TeamEvent } from "../state/event-log.ts";
8
7
  import { loadRunManifestById } from "../state/state-store.ts";
9
8
  import type { TeamRunManifest, TeamTaskState } from "../state/types.ts";
10
- import { summarizeHeartbeats, type HeartbeatSummary } from "../ui/heartbeat-aggregator.ts";
9
+ import { type HeartbeatSummary, summarizeHeartbeats } from "../ui/heartbeat-aggregator.ts";
11
10
  import type { RunUiSnapshot } from "../ui/snapshot-types.ts";
12
- import { redactSecrets, isSecretKey } from "../utils/redaction.ts";
11
+ import { isSecretKey, redactSecrets } from "../utils/redaction.ts";
12
+ import { readCrewAgents } from "./crew-agent-records.ts";
13
13
  import { buildRecoveryLedger, type RecoveryLedgerEntry } from "./recovery-recipes.ts";
14
- export { redactSecrets, isSecretKey } from "../utils/redaction.ts";
14
+
15
+ export { isSecretKey, redactSecrets } from "../utils/redaction.ts";
15
16
 
16
17
  export interface DiagnosticReport {
17
18
  schemaVersion?: number;
@@ -29,15 +30,23 @@ export interface DiagnosticReport {
29
30
  // Layer 9: terminal evidence
30
31
  terminalEvidence: Record<string, TeamTaskState["terminalEvidence"]>;
31
32
  // Layer 10: model attempts and routing
32
- modelAttempts: { taskId: string; attempts: TeamTaskState["modelAttempts"]; routing: TeamTaskState["modelRouting"] }[];
33
+ modelAttempts: {
34
+ taskId: string;
35
+ attempts: TeamTaskState["modelAttempts"];
36
+ routing: TeamTaskState["modelRouting"];
37
+ }[];
33
38
  // Layer 11: pending mailbox
34
- pendingMailbox: { taskId: string; pendingSteers: TeamTaskState["pendingSteers"] }[];
39
+ pendingMailbox: {
40
+ taskId: string;
41
+ pendingSteers: TeamTaskState["pendingSteers"];
42
+ }[];
35
43
  runMailboxUnread: RunUiSnapshot["mailbox"];
36
44
  // Layer 12: recovery ledger
37
45
  recoveryLedger: RecoveryLedgerEntry[];
38
46
  }
39
47
 
40
- const ENV_DEBUG_ALLOWLIST = /^(PI_CREW_|PI_TEAMS_|PI_.*HOME|NODE_ENV|NODE_VERSION|OS|PROCESSOR|TERM|LANG|HOME|USERPROFILE|APPDATA|PLATFORM|ARCH|WIN32|DOCKER|CI|VERBOSE|DEBUG|NO_COLOR|FORCE_COLOR|NPM_CONFIG|npm_)/i;
48
+ const ENV_DEBUG_ALLOWLIST =
49
+ /^(PI_CREW_|PI_TEAMS_|PI_.*HOME|NODE_ENV|NODE_VERSION|OS|PROCESSOR|TERM|LANG|HOME|USERPROFILE|APPDATA|PLATFORM|ARCH|WIN32|DOCKER|CI|VERBOSE|DEBUG|NO_COLOR|FORCE_COLOR|NPM_CONFIG|npm_)/i;
41
50
 
42
51
  function envRedacted(): Record<string, string> {
43
52
  const output: Record<string, string> = {};
@@ -73,7 +82,11 @@ function buildSnapshot(manifest: TeamRunManifest, tasks: TeamTaskState[]): RunUi
73
82
  };
74
83
  }
75
84
 
76
- export async function exportDiagnostic(ctx: Pick<ExtensionContext, "cwd">, runId: string, options: { registry?: MetricRegistry } = {}): Promise<{ path: string; report: DiagnosticReport }> {
85
+ export async function exportDiagnostic(
86
+ ctx: Pick<ExtensionContext, "cwd">,
87
+ runId: string,
88
+ options: { registry?: MetricRegistry } = {},
89
+ ): Promise<{ path: string; report: DiagnosticReport }> {
77
90
  const loaded = loadRunManifestById(ctx.cwd, runId); // NOTE: no withRunLock - best-effort only; concurrent writes may cause inconsistency;
78
91
  if (!loaded) throw new Error(`Run '${runId}' not found.`);
79
92
  const exportedAt = new Date().toISOString();
@@ -82,21 +95,33 @@ export async function exportDiagnostic(ctx: Pick<ExtensionContext, "cwd">, runId
82
95
  const metricsSnapshot = options.registry?.snapshot();
83
96
  const taskDiagnostics: Record<string, Record<string, unknown>> = {};
84
97
  const terminalEvidence: Record<string, TeamTaskState["terminalEvidence"]> = {};
85
- const modelAttempts: { taskId: string; attempts: TeamTaskState["modelAttempts"]; routing: TeamTaskState["modelRouting"] }[] = [];
86
- const pendingMailbox: { taskId: string; pendingSteers: TeamTaskState["pendingSteers"] }[] = [];
98
+ const modelAttempts: {
99
+ taskId: string;
100
+ attempts: TeamTaskState["modelAttempts"];
101
+ routing: TeamTaskState["modelRouting"];
102
+ }[] = [];
103
+ const pendingMailbox: {
104
+ taskId: string;
105
+ pendingSteers: TeamTaskState["pendingSteers"];
106
+ }[] = [];
87
107
  for (const task of loaded.tasks) {
88
108
  if (task.diagnostics) taskDiagnostics[task.id] = task.diagnostics;
89
109
  if (task.terminalEvidence) terminalEvidence[task.id] = task.terminalEvidence;
90
110
  if (task.modelAttempts || task.modelRouting) {
91
- modelAttempts.push({ taskId: task.id, attempts: task.modelAttempts, routing: task.modelRouting });
111
+ modelAttempts.push({
112
+ taskId: task.id,
113
+ attempts: task.modelAttempts,
114
+ routing: task.modelRouting,
115
+ });
92
116
  }
93
117
  if (task.pendingSteers) {
94
- pendingMailbox.push({ taskId: task.id, pendingSteers: task.pendingSteers });
118
+ pendingMailbox.push({
119
+ taskId: task.id,
120
+ pendingSteers: task.pendingSteers,
121
+ });
95
122
  }
96
123
  }
97
- const recoveryLedger = loaded.manifest.policyDecisions
98
- ? buildRecoveryLedger(loaded.manifest.policyDecisions).entries
99
- : [];
124
+ const recoveryLedger = loaded.manifest.policyDecisions ? buildRecoveryLedger(loaded.manifest.policyDecisions).entries : [];
100
125
  const snapshot = buildSnapshot(loaded.manifest, loaded.tasks);
101
126
  const report: DiagnosticReport = {
102
127
  ...(metricsSnapshot ? { schemaVersion: 2 } : {}),
@@ -108,7 +133,11 @@ export async function exportDiagnostic(ctx: Pick<ExtensionContext, "cwd">, runId
108
133
  heartbeat: summarizeHeartbeats(snapshot),
109
134
  agents: redactSecrets(readCrewAgents(loaded.manifest)) as unknown[],
110
135
  envRedacted: envRedacted(),
111
- ...(metricsSnapshot ? { metricsSnapshot: redactSecrets(metricsSnapshot) as MetricSnapshot[] } : {}),
136
+ ...(metricsSnapshot
137
+ ? {
138
+ metricsSnapshot: redactSecrets(metricsSnapshot) as MetricSnapshot[],
139
+ }
140
+ : {}),
112
141
  taskDiagnostics,
113
142
  terminalEvidence,
114
143
  modelAttempts,
@@ -126,9 +155,13 @@ export async function exportDiagnostic(ctx: Pick<ExtensionContext, "cwd">, runId
126
155
  export function listRecentDiagnostic(dir: string, windowMs: number, now = Date.now()): string | undefined {
127
156
  try {
128
157
  if (!fs.existsSync(dir)) return undefined;
129
- return fs.readdirSync(dir)
158
+ return fs
159
+ .readdirSync(dir)
130
160
  .filter((file) => file.startsWith("diagnostic-") && file.endsWith(".json"))
131
- .map((file) => ({ file, mtimeMs: fs.statSync(path.join(dir, file)).mtimeMs }))
161
+ .map((file) => ({
162
+ file,
163
+ mtimeMs: fs.statSync(path.join(dir, file)).mtimeMs,
164
+ }))
132
165
  .filter((entry) => now - entry.mtimeMs < windowMs)
133
166
  .sort((a, b) => b.mtimeMs - a.mtimeMs)[0]?.file;
134
167
  } catch {
@@ -7,7 +7,11 @@ export function isDirectRun(manifest: Pick<TeamRunManifest, "team" | "workflow">
7
7
  return manifest.workflow === "direct-agent";
8
8
  }
9
9
 
10
- export function directTeamAndWorkflowFromRun(manifest: TeamRunManifest, tasks: TeamTaskState[], agents: AgentConfig[]): { team: TeamConfig; workflow: WorkflowConfig } | undefined {
10
+ export function directTeamAndWorkflowFromRun(
11
+ manifest: TeamRunManifest,
12
+ tasks: TeamTaskState[],
13
+ agents: AgentConfig[],
14
+ ): { team: TeamConfig; workflow: WorkflowConfig } | undefined {
11
15
  if (!isDirectRun(manifest)) return undefined;
12
16
  const firstTask = tasks[0];
13
17
  const agentName = firstTask?.agent ?? (manifest.team.replace(/^direct-/, "") || "executor");
@@ -20,7 +24,13 @@ export function directTeamAndWorkflowFromRun(manifest: TeamRunManifest, tasks: T
20
24
  description: `Direct subagent run for ${agentName}`,
21
25
  source: "builtin",
22
26
  filePath: "<generated>",
23
- roles: [{ name: role, agent: agentName, description: agent?.description }],
27
+ roles: [
28
+ {
29
+ name: role,
30
+ agent: agentName,
31
+ description: agent?.description,
32
+ },
33
+ ],
24
34
  defaultWorkflow: "direct-agent",
25
35
  workspaceMode: manifest.workspaceMode,
26
36
  },
@@ -15,7 +15,7 @@
15
15
  * are expected to be idempotent-ish.
16
16
  */
17
17
 
18
- import { mkdirSync, existsSync, readFileSync, unlinkSync } from "node:fs";
18
+ import { existsSync, mkdirSync, readFileSync, unlinkSync } from "node:fs";
19
19
  import { dirname } from "node:path";
20
20
  import { atomicWriteJson } from "../state/atomic-write.ts";
21
21
  import { logInternalError } from "../utils/internal-error.ts";