pi-crew 0.2.2 → 0.2.4

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 (354) hide show
  1. package/AGENTS.md +57 -32
  2. package/CHANGELOG.md +466 -413
  3. package/LICENSE +21 -21
  4. package/NOTICE.md +16 -16
  5. package/README.md +323 -323
  6. package/docs/FEATURE_INTAKE.md +126 -0
  7. package/docs/HARNESS.md +86 -0
  8. package/docs/HARNESS_BACKLOG.md +41 -0
  9. package/docs/TEST_MATRIX.md +49 -0
  10. package/docs/actions-reference.md +595 -595
  11. package/docs/architecture.md +180 -180
  12. package/docs/code-review-2026-05-11.md +592 -0
  13. package/docs/commands-reference.md +347 -347
  14. package/docs/comparison-pi-subagents-vs-pi-crew.md +303 -0
  15. package/docs/decisions/0001-durable-state.md +41 -0
  16. package/docs/decisions/0002-child-process-for-async.md +42 -0
  17. package/docs/decisions/0003-depth-guard.md +36 -0
  18. package/docs/decisions/0004-execfile-over-exec.md +34 -0
  19. package/docs/decisions/0005-no-parameter-properties.md +49 -0
  20. package/docs/decisions/0006-publish-bundled-esm.md +63 -0
  21. package/docs/decisions/0007-active-run-binary-index.md +54 -0
  22. package/docs/decisions/0008-child-pi-warm-pool.md +61 -0
  23. package/docs/decisions/README.md +23 -0
  24. package/docs/followup-plan-2026-05-12.md +463 -0
  25. package/docs/followup-review-2026-05-12.md +297 -0
  26. package/docs/followup-review-round3-2026-05-12.md +342 -0
  27. package/docs/followup-review-round4-2026-05-13.md +107 -0
  28. package/docs/implementation-plan-top3.md +333 -0
  29. package/docs/live-mailbox-runtime.md +36 -36
  30. package/docs/next-upgrade-roadmap.md +808 -808
  31. package/docs/oh-my-pi-research.md +509 -0
  32. package/docs/perf/baseline-2026-05.md +113 -0
  33. package/docs/perf/final-report-2026-05.md +206 -0
  34. package/docs/perf/sprint-1-report.md +71 -0
  35. package/docs/perf/sprint-2-report.md +81 -0
  36. package/docs/perf/sprint-2.5-report.md +53 -0
  37. package/docs/perf/sprint-3-report.md +36 -0
  38. package/docs/perf/sprint-4-report.md +47 -0
  39. package/docs/perf/sprint-5-report.md +51 -0
  40. package/docs/perf/sprint-6-report.md +94 -0
  41. package/docs/perf/sprint-7-report.md +74 -0
  42. package/docs/perf/upgrade-plan-2026-05.md +147 -0
  43. package/docs/pi-subagents3-deep-analysis.md +508 -0
  44. package/docs/product/README.md +31 -0
  45. package/docs/product/platform.md +27 -0
  46. package/docs/product/runtime-safety.md +37 -0
  47. package/docs/product/team-run.md +39 -0
  48. package/docs/product/team-tool.md +37 -0
  49. package/docs/publishing.md +65 -65
  50. package/docs/resource-formats.md +134 -134
  51. package/docs/runtime-analysis-child-vs-live.md +171 -0
  52. package/docs/runtime-flow.md +148 -148
  53. package/docs/runtime-migration-in-process-analysis.md +250 -0
  54. package/docs/stories/README.md +30 -0
  55. package/docs/stories/backlog.md +36 -0
  56. package/docs/templates/decision.md +27 -0
  57. package/docs/templates/story.md +44 -0
  58. package/docs/templates/validation-report.md +32 -0
  59. package/docs/usage.md +238 -238
  60. package/index.ts +7 -6
  61. package/install.mjs +65 -65
  62. package/package.json +107 -99
  63. package/schema.json +222 -222
  64. package/skills/child-pi-spawning/SKILL.md +213 -0
  65. package/skills/context-artifact-hygiene/SKILL.md +32 -0
  66. package/skills/event-log-tracing/SKILL.md +299 -0
  67. package/skills/git-master/SKILL.md +225 -24
  68. package/skills/live-agent-lifecycle/SKILL.md +192 -0
  69. package/skills/mailbox-interactive/SKILL.md +300 -19
  70. package/skills/model-routing-context/SKILL.md +94 -0
  71. package/skills/multi-perspective-review/SKILL.md +88 -0
  72. package/skills/read-only-explorer/SKILL.md +250 -26
  73. package/skills/safe-bash/SKILL.md +307 -21
  74. package/skills/verification-before-done/SKILL.md +11 -2
  75. package/skills/widget-rendering/SKILL.md +258 -0
  76. package/skills/workspace-isolation/SKILL.md +202 -0
  77. package/skills/worktree-isolation/SKILL.md +202 -18
  78. package/src/adapters/claude-adapter.ts +25 -25
  79. package/src/adapters/codex-adapter.ts +21 -21
  80. package/src/adapters/cursor-adapter.ts +17 -17
  81. package/src/adapters/export-util.ts +137 -137
  82. package/src/adapters/index.ts +15 -15
  83. package/src/adapters/registry.ts +18 -18
  84. package/src/adapters/types.ts +23 -23
  85. package/src/agents/agent-config.ts +38 -38
  86. package/src/agents/agent-serializer.ts +38 -38
  87. package/src/agents/discover-agents.ts +121 -118
  88. package/src/config/config.ts +740 -858
  89. package/src/config/defaults.ts +96 -96
  90. package/src/config/drift-detector.ts +211 -211
  91. package/src/config/markers.ts +327 -327
  92. package/src/config/resilient-parser.ts +109 -108
  93. package/src/config/suggestions.ts +74 -74
  94. package/src/config/types.ts +199 -0
  95. package/src/extension/async-notifier.ts +123 -89
  96. package/src/extension/autonomous-policy.ts +169 -169
  97. package/src/extension/cross-extension-rpc.ts +104 -103
  98. package/src/extension/help.ts +47 -47
  99. package/src/extension/import-index.ts +69 -69
  100. package/src/extension/management.ts +395 -382
  101. package/src/extension/notification-router.ts +116 -116
  102. package/src/extension/notification-sink.ts +51 -51
  103. package/src/extension/project-init.ts +168 -168
  104. package/src/extension/register.ts +859 -668
  105. package/src/extension/registration/artifact-cleanup.ts +15 -15
  106. package/src/extension/registration/command-utils.ts +54 -54
  107. package/src/extension/registration/commands.ts +559 -452
  108. package/src/extension/registration/compaction-guard.ts +125 -125
  109. package/src/extension/registration/subagent-helpers.ts +102 -102
  110. package/src/extension/registration/subagent-tools.ts +220 -158
  111. package/src/extension/registration/team-tool.ts +159 -98
  112. package/src/extension/registration/viewers.ts +29 -0
  113. package/src/extension/result-watcher.ts +128 -128
  114. package/src/extension/run-bundle-schema.ts +89 -89
  115. package/src/extension/run-export.ts +73 -73
  116. package/src/extension/run-import.ts +84 -84
  117. package/src/extension/run-index.ts +94 -94
  118. package/src/extension/run-maintenance.ts +142 -142
  119. package/src/extension/session-summary.ts +8 -8
  120. package/src/extension/team-manager-command.ts +96 -95
  121. package/src/extension/team-recommendation.ts +188 -188
  122. package/src/extension/team-tool/api.ts +5 -2
  123. package/src/extension/team-tool/cancel.ts +224 -209
  124. package/src/extension/team-tool/config-patch.ts +36 -36
  125. package/src/extension/team-tool/context.ts +60 -60
  126. package/src/extension/team-tool/doctor.ts +242 -242
  127. package/src/extension/team-tool/handle-settings.ts +421 -195
  128. package/src/extension/team-tool/inspect.ts +41 -41
  129. package/src/extension/team-tool/lifecycle-actions.ts +139 -139
  130. package/src/extension/team-tool/parallel-dispatch.ts +156 -156
  131. package/src/extension/team-tool/plan.ts +19 -19
  132. package/src/extension/team-tool/respond.ts +112 -111
  133. package/src/extension/team-tool/run.ts +246 -228
  134. package/src/extension/team-tool/status.ts +110 -110
  135. package/src/extension/team-tool-types.ts +13 -13
  136. package/src/extension/team-tool.ts +16 -4
  137. package/src/extension/tool-result.ts +16 -16
  138. package/src/extension/validate-resources.ts +77 -77
  139. package/src/hooks/registry.ts +61 -61
  140. package/src/hooks/types.ts +40 -40
  141. package/src/i18n.ts +184 -184
  142. package/src/observability/correlation.ts +35 -35
  143. package/src/observability/event-to-metric.ts +68 -68
  144. package/src/observability/exporters/adapter.ts +30 -30
  145. package/src/observability/exporters/otlp-exporter.ts +106 -92
  146. package/src/observability/exporters/prometheus-exporter.ts +54 -54
  147. package/src/observability/metric-registry.ts +87 -87
  148. package/src/observability/metric-retention.ts +54 -54
  149. package/src/observability/metric-sink.ts +81 -56
  150. package/src/observability/metrics-primitives.ts +167 -167
  151. package/src/prompt/prompt-runtime.ts +72 -72
  152. package/src/runtime/adaptive-plan.ts +338 -0
  153. package/src/runtime/agent-control.ts +169 -169
  154. package/src/runtime/agent-memory.ts +72 -72
  155. package/src/runtime/agent-observability.ts +114 -114
  156. package/src/runtime/async-marker.ts +26 -26
  157. package/src/runtime/async-runner.ts +153 -79
  158. package/src/runtime/attention-events.ts +28 -28
  159. package/src/runtime/auto-resume.ts +100 -100
  160. package/src/runtime/background-runner.ts +122 -88
  161. package/src/runtime/cancellation.ts +61 -61
  162. package/src/runtime/capability-inventory.ts +116 -116
  163. package/src/runtime/child-pi-pool.ts +68 -0
  164. package/src/runtime/child-pi.ts +541 -463
  165. package/src/runtime/code-summary.ts +247 -247
  166. package/src/runtime/compaction-summary.ts +271 -271
  167. package/src/runtime/concurrency.ts +58 -58
  168. package/src/runtime/crash-recovery.ts +317 -301
  169. package/src/runtime/crew-agent-records.ts +379 -281
  170. package/src/runtime/crew-agent-runtime.ts +60 -60
  171. package/src/runtime/cross-extension-rpc.ts +72 -0
  172. package/src/runtime/custom-tools/irc-tool.ts +201 -201
  173. package/src/runtime/custom-tools/submit-result-tool.ts +90 -90
  174. package/src/runtime/deadletter.ts +47 -47
  175. package/src/runtime/delivery-coordinator.ts +176 -176
  176. package/src/runtime/delta-conflict.ts +360 -360
  177. package/src/runtime/diagnostic-export.ts +102 -102
  178. package/src/runtime/direct-run.ts +35 -35
  179. package/src/runtime/effectiveness.ts +82 -81
  180. package/src/runtime/errors/crew-errors.ts +166 -0
  181. package/src/runtime/event-stream-bridge.ts +92 -92
  182. package/src/runtime/foreground-control.ts +82 -82
  183. package/src/runtime/green-contract.ts +46 -46
  184. package/src/runtime/group-join.ts +234 -106
  185. package/src/runtime/heartbeat-watcher.ts +145 -124
  186. package/src/runtime/iteration-hooks.ts +267 -264
  187. package/src/runtime/live-agent-control.ts +88 -88
  188. package/src/runtime/live-agent-manager.ts +377 -179
  189. package/src/runtime/live-control-realtime.ts +36 -36
  190. package/src/runtime/live-session-runtime.ts +676 -599
  191. package/src/runtime/loop-gates.ts +129 -129
  192. package/src/runtime/manifest-cache.ts +263 -263
  193. package/src/runtime/mcp-proxy.ts +113 -113
  194. package/src/runtime/metric-parser.ts +40 -40
  195. package/src/runtime/model-fallback.ts +282 -274
  196. package/src/runtime/model-resolver.ts +118 -0
  197. package/src/runtime/output-validator.ts +187 -187
  198. package/src/runtime/overflow-recovery.ts +175 -175
  199. package/src/runtime/parallel-research.ts +44 -44
  200. package/src/runtime/parallel-utils.ts +156 -156
  201. package/src/runtime/parent-guard.ts +80 -80
  202. package/src/runtime/phase-progress.ts +217 -217
  203. package/src/runtime/pi-args.ts +165 -165
  204. package/src/runtime/pi-json-output.ts +111 -111
  205. package/src/runtime/pi-spawn.ts +167 -167
  206. package/src/runtime/policy-engine.ts +79 -79
  207. package/src/runtime/post-checks.ts +125 -122
  208. package/src/runtime/post-exit-stdio-guard.ts +86 -86
  209. package/src/runtime/process-status.ts +97 -73
  210. package/src/runtime/progress-event-coalescer.ts +43 -43
  211. package/src/runtime/recovery-recipes.ts +74 -74
  212. package/src/runtime/retry-executor.ts +81 -81
  213. package/src/runtime/role-permission.ts +39 -39
  214. package/src/runtime/run-tracker.ts +99 -0
  215. package/src/runtime/runtime-policy.ts +21 -0
  216. package/src/runtime/runtime-resolver.ts +94 -90
  217. package/src/runtime/scheduler.ts +294 -0
  218. package/src/runtime/semaphore.ts +131 -131
  219. package/src/runtime/sensitive-paths.ts +92 -92
  220. package/src/runtime/session-usage.ts +79 -79
  221. package/src/runtime/settings-store.ts +103 -0
  222. package/src/runtime/sidechain-output.ts +29 -29
  223. package/src/runtime/skill-instructions.ts +222 -222
  224. package/src/runtime/stale-reconciler.ts +198 -189
  225. package/src/runtime/streaming-output.ts +47 -0
  226. package/src/runtime/subagent-manager.ts +404 -395
  227. package/src/runtime/subprocess-tool-registry.ts +67 -67
  228. package/src/runtime/task-display.ts +38 -38
  229. package/src/runtime/task-graph-scheduler.ts +122 -122
  230. package/src/runtime/task-graph.ts +207 -207
  231. package/src/runtime/task-output-context.ts +177 -177
  232. package/src/runtime/task-packet.ts +93 -93
  233. package/src/runtime/task-quality.ts +207 -207
  234. package/src/runtime/task-runner/capabilities.ts +78 -78
  235. package/src/runtime/task-runner/live-executor.ts +131 -113
  236. package/src/runtime/task-runner/progress.ts +119 -119
  237. package/src/runtime/task-runner/prompt-builder.ts +139 -139
  238. package/src/runtime/task-runner/prompt-pipeline.ts +64 -64
  239. package/src/runtime/task-runner/result-utils.ts +14 -14
  240. package/src/runtime/task-runner/run-projection.ts +103 -103
  241. package/src/runtime/task-runner/state-helpers.ts +22 -22
  242. package/src/runtime/task-runner.ts +469 -458
  243. package/src/runtime/team-runner.ts +693 -945
  244. package/src/runtime/usage-tracker.ts +71 -0
  245. package/src/runtime/worker-heartbeat.ts +21 -21
  246. package/src/runtime/worker-startup.ts +57 -57
  247. package/src/runtime/workflow-state.ts +187 -187
  248. package/src/runtime/yield-handler.ts +190 -189
  249. package/src/schema/config-schema.ts +172 -168
  250. package/src/schema/team-tool-schema.ts +126 -125
  251. package/src/schema/validation-types.ts +151 -148
  252. package/src/skills/discover-skills.ts +67 -67
  253. package/src/skills/skill-templates.ts +374 -374
  254. package/src/state/active-run-registry.ts +227 -191
  255. package/src/state/artifact-store.ts +130 -129
  256. package/src/state/atomic-write.ts +262 -178
  257. package/src/state/blob-store.ts +116 -116
  258. package/src/state/contracts.ts +111 -111
  259. package/src/state/event-log-rotation.ts +161 -158
  260. package/src/state/event-log.ts +383 -240
  261. package/src/state/event-reconstructor.ts +217 -217
  262. package/src/state/jsonl-writer.ts +82 -82
  263. package/src/state/locks.ts +146 -148
  264. package/src/state/mailbox.ts +446 -405
  265. package/src/state/state-store.ts +364 -351
  266. package/src/state/task-claims.ts +44 -44
  267. package/src/state/types.ts +285 -285
  268. package/src/state/usage.ts +29 -29
  269. package/src/subagents/async-entry.ts +1 -1
  270. package/src/subagents/index.ts +3 -3
  271. package/src/subagents/live/control.ts +1 -1
  272. package/src/subagents/live/manager.ts +1 -1
  273. package/src/subagents/live/realtime.ts +1 -1
  274. package/src/subagents/live/session-runtime.ts +1 -1
  275. package/src/subagents/manager.ts +1 -1
  276. package/src/subagents/spawn.ts +1 -1
  277. package/src/teams/discover-teams.ts +116 -116
  278. package/src/teams/team-config.ts +27 -27
  279. package/src/teams/team-serializer.ts +38 -38
  280. package/src/types/diff.d.ts +18 -18
  281. package/src/ui/agent-management-overlay.ts +144 -144
  282. package/src/ui/crew-widget.ts +487 -370
  283. package/src/ui/dashboard-panes/agents-pane.ts +109 -28
  284. package/src/ui/dashboard-panes/cancellation-pane.ts +42 -42
  285. package/src/ui/dashboard-panes/capability-pane.ts +59 -59
  286. package/src/ui/dashboard-panes/health-pane.ts +30 -30
  287. package/src/ui/dashboard-panes/mailbox-pane.ts +35 -35
  288. package/src/ui/dashboard-panes/progress-pane.ts +30 -30
  289. package/src/ui/dashboard-panes/transcript-pane.ts +10 -10
  290. package/src/ui/heartbeat-aggregator.ts +63 -63
  291. package/src/ui/keybinding-map.ts +97 -94
  292. package/src/ui/live-conversation-overlay.ts +152 -0
  293. package/src/ui/live-run-sidebar.ts +180 -180
  294. package/src/ui/mascot.ts +442 -442
  295. package/src/ui/overlays/agent-picker-overlay.ts +57 -57
  296. package/src/ui/overlays/confirm-overlay.ts +58 -58
  297. package/src/ui/overlays/mailbox-compose-overlay.ts +144 -144
  298. package/src/ui/overlays/mailbox-compose-preview.ts +63 -63
  299. package/src/ui/overlays/mailbox-detail-overlay.ts +122 -122
  300. package/src/ui/pi-ui-compat.ts +57 -57
  301. package/src/ui/powerbar-publisher.ts +221 -197
  302. package/src/ui/render-scheduler.ts +216 -143
  303. package/src/ui/run-action-dispatcher.ts +118 -117
  304. package/src/ui/run-dashboard.ts +526 -464
  305. package/src/ui/run-event-bus.ts +208 -208
  306. package/src/ui/run-snapshot-cache.ts +826 -777
  307. package/src/ui/settings-overlay.ts +721 -0
  308. package/src/ui/snapshot-types.ts +86 -70
  309. package/src/ui/theme-adapter.ts +190 -190
  310. package/src/ui/tool-progress-formatter.ts +89 -0
  311. package/src/ui/transcript-cache.ts +94 -94
  312. package/src/ui/transcript-viewer.ts +335 -335
  313. package/src/utils/conflict-detect.ts +662 -0
  314. package/src/utils/env-filter.ts +30 -0
  315. package/src/utils/file-coalescer.ts +86 -86
  316. package/src/utils/frontmatter.ts +68 -68
  317. package/src/utils/fs-watch.ts +88 -31
  318. package/src/utils/gh-protocol.ts +479 -0
  319. package/src/utils/ids.ts +17 -17
  320. package/src/utils/incremental-reader.ts +104 -104
  321. package/src/utils/internal-error.ts +6 -6
  322. package/src/utils/names.ts +27 -27
  323. package/src/utils/paths.ts +102 -63
  324. package/src/utils/redaction.ts +44 -44
  325. package/src/utils/resolve-shell.ts +34 -0
  326. package/src/utils/safe-paths.ts +47 -47
  327. package/src/utils/scan-cache.ts +136 -136
  328. package/src/utils/sleep.ts +2 -1
  329. package/src/utils/sse-parser.ts +134 -134
  330. package/src/utils/task-name-generator.ts +337 -337
  331. package/src/utils/timings.ts +33 -33
  332. package/src/utils/visual.ts +243 -198
  333. package/src/workflows/discover-workflows.ts +139 -139
  334. package/src/workflows/validate-workflow.ts +40 -40
  335. package/src/workflows/workflow-config.ts +26 -26
  336. package/src/workflows/workflow-serializer.ts +32 -32
  337. package/src/worktree/branch-freshness.ts +45 -45
  338. package/src/worktree/cleanup.ts +75 -72
  339. package/src/worktree/worktree-manager.ts +188 -146
  340. package/teams/default.team.md +12 -12
  341. package/teams/fast-fix.team.md +11 -11
  342. package/teams/implementation.team.md +18 -18
  343. package/teams/parallel-research.team.md +14 -14
  344. package/teams/research.team.md +11 -11
  345. package/teams/review.team.md +12 -12
  346. package/tsconfig.json +19 -19
  347. package/workflows/default.workflow.md +30 -30
  348. package/workflows/fast-fix.workflow.md +23 -23
  349. package/workflows/implementation.workflow.md +43 -43
  350. package/workflows/parallel-research.workflow.md +46 -46
  351. package/workflows/research.workflow.md +22 -22
  352. package/workflows/review.workflow.md +30 -30
  353. package/skills/task-packet/SKILL.md +0 -28
  354. package/skills/verify-evidence/SKILL.md +0 -27
@@ -1,148 +1,148 @@
1
- # pi-crew Runtime Flow
2
-
3
- This document is a compact map of the runtime paths used by `pi-crew`.
4
-
5
- ## Main sequence
6
-
7
- ```text
8
- User / model
9
- │ calls team({ action: "run", ... }) or /team-run
10
-
11
- handleTeamTool()
12
- │ validates schema and routes action
13
-
14
- handleRun()
15
- ├─ discoverTeams/discoverWorkflows/discoverAgents
16
- ├─ validateWorkflowForTeam
17
- ├─ expandParallelResearchWorkflow when applicable
18
- ├─ createRunManifest + tasks.json + goal artifact
19
- ├─ if async=true ─────────────────────────────────────────────┐
20
- │ spawnBackgroundTeamRun() │
21
- │ ├─ resolve jiti-register.mjs │
22
- │ ├─ fail-fast if jiti missing │
23
- │ ├─ node --import jiti-register.mjs background-runner.ts │
24
- │ └─ parent schedules early-exit guard │
25
- │ ▼
26
- │ background-runner.ts
27
- │ ├─ append async.started
28
- │ ├─ write async.pid startup marker
29
- │ ├─ rediscover team/workflow/agents
30
- │ └─ executeTeamRun()
31
-
32
- └─ if foreground/default
33
- ├─ startForegroundRun schedules session-bound run, or
34
- └─ executeTeamRun inline for scaffold/non-scheduled paths
35
-
36
- executeTeamRun()
37
- ├─ write run.running
38
- ├─ materialize queued/running agent records lazily
39
- ├─ build task graph index
40
- ├─ while queued tasks exist
41
- │ ├─ taskGraphSnapshot
42
- │ ├─ resolveBatchConcurrency
43
- │ ├─ getReadyTasks
44
- │ ├─ append task.progress batch event
45
- │ ├─ mapConcurrent ready batch
46
- │ │ └─ runTeamTask()
47
- │ │ ├─ prepare workspace/worktree
48
- │ │ ├─ build task packet
49
- │ │ ├─ render prompt + dependency context
50
- │ │ ├─ choose model candidates from Pi config
51
- │ │ ├─ spawn child Pi process
52
- │ │ ├─ ChildPiLineObserver parses stdout/stderr
53
- │ │ ├─ append per-agent events/output
54
- │ │ ├─ update agent progress/task state
55
- │ │ ├─ parse final JSONL/session usage
56
- │ │ └─ write result/log/transcript/metadata artifacts
57
- │ ├─ merge task updates monotonically
58
- │ ├─ optional adaptive plan injection
59
- │ ├─ save tasks/agents/progress
60
- │ └─ write batch artifact
61
- ├─ policy closeout
62
- └─ run.completed / run.failed / run.blocked / run.cancelled
63
- ```
64
-
65
- ## Action router
66
-
67
- | Action | Handler | Purpose |
68
- |---|---|---|
69
- | `run` | `team-tool/run.ts` | Create and execute a run, foreground or async. |
70
- | `status` | `team-tool.ts` | Show manifest/tasks/agents/events and mark stale async runs failed. |
71
- | `summary` | `session-summary.ts`/summary handler | Write/read run summary artifact. |
72
- | `events` | `team-tool.ts` | Tail durable run events. |
73
- | `artifacts` | `team-tool.ts` | List run artifacts. |
74
- | `resume` | `team-tool.ts` | Requeue failed/cancelled/skipped/running tasks. |
75
- | `cancel` | `team-tool.ts` | Mark queued/running tasks cancelled and request foreground interrupt. |
76
- | `forget` | `run-maintenance.ts` | Delete run state/artifacts with confirmation. |
77
- | `prune` | `run-maintenance.ts` | Remove old finished runs with confirmation. |
78
- | `export` | `run-export.ts` | Create portable run bundle. |
79
- | `import` / `imports` | `run-import.ts` / `import-index.ts` | Store/list imported bundles. |
80
- | `config` | `config.ts` + config action | Show/update user/project config. |
81
- | `doctor` | `team-tool/doctor.ts` | Platform/resource/runtime diagnostics. |
82
- | `validate` | `validate-resources.ts` | Validate agents/teams/workflows. |
83
- | `recommend` | `team-recommendation.ts` | Suggest team/workflow/action for a goal. |
84
- | management | `management.ts` | Create/update/delete/rename teams, agents, workflows. |
85
- | API | `team-tool/api.ts` | File-backed observability/control/mailbox API. |
86
-
87
- ## Worker modes
88
-
89
- | Mode | Behavior |
90
- |---|---|
91
- | `child-process` | Default. Launches real child `pi` processes per task. |
92
- | `scaffold` | Explicit dry-run. No child Pi worker execution. |
93
- | `live-session` | Experimental/gated in-process/live agent path. |
94
- | `auto` | Resolves to child-process unless config/env requests otherwise. |
95
-
96
- ## Important files
97
-
98
- ```text
99
- src/extension/register.ts Pi extension entry/wiring
100
- src/extension/team-tool/run.ts run creation and foreground/async split
101
- src/runtime/background-runner.ts detached async entrypoint
102
- src/runtime/async-runner.ts background spawn command/options
103
- src/runtime/team-runner.ts workflow/task graph scheduler
104
- src/runtime/task-runner.ts single task execution
105
- src/runtime/child-pi.ts child Pi process and output observer
106
- src/runtime/model-fallback.ts configured model candidates/routing
107
- src/runtime/concurrency.ts batch concurrency decisions
108
- src/runtime/process-status.ts pid/liveness/stale detection
109
- src/state/state-store.ts manifest/tasks persistence
110
- src/state/event-log.ts JSONL run events
111
- src/runtime/crew-agent-records.ts aggregate + per-agent status files
112
- ```
113
-
114
- ## Environment variables
115
-
116
- | Env | Effect |
117
- |---|---|
118
- | `PI_CREW_EXECUTE_WORKERS=0` | Disable real workers, use scaffold behavior. |
119
- | `PI_TEAMS_EXECUTE_WORKERS=0` | Legacy alias for worker disable. |
120
- | `PI_CREW_ENABLE_EXPERIMENTAL_LIVE_SESSION=1` | Allow experimental live-session runtime. |
121
- | `PI_CREW_MOCK_LIVE_SESSION=success` | Test hook for live-session mock. |
122
- | `PI_TEAMS_MOCK_CHILD_PI` | Test hook for mocked child Pi execution. |
123
- | `PI_CREW_DEPTH`, `PI_CREW_MAX_DEPTH` | Canonical subagent recursion guard. |
124
- | `PI_TEAMS_DEPTH`, `PI_TEAMS_MAX_DEPTH` | Legacy recursion guard aliases. |
125
- | `PI_TEAMS_HOME` | Override user config/state home in tests. |
126
- | `PI_TEAMS_PI_BIN` | Override child `pi` executable. |
127
- | `PI_CODING_AGENT_DIR` | Override Pi settings/models directory for model discovery. |
128
- | `PI_CREW_ASYNC_EARLY_EXIT_GUARD=0` | Disable 3s background early-exit guard. |
129
-
130
- ## State transition summary
131
-
132
- ```text
133
- queued/planning/running ── completed
134
- ├─ failed
135
- ├─ blocked
136
- └─ cancelled
137
- ```
138
-
139
- Task states follow the same durable contract plus `skipped`. Terminal states are monotonic during parallel merge.
140
-
141
- ## Observability tips
142
-
143
- - Use `/team-dashboard` for a UI overview.
144
- - Use `team status runId=...` for canonical state and stale async detection.
145
- - Read `background.log` for early import/spawn errors.
146
- - Read `events.jsonl` for event chronology.
147
- - Read `agents/{taskId}/status.json` for per-agent model/progress/tool status.
148
- - Read `artifacts/{runId}/transcripts/{taskId}.jsonl` for raw child Pi transcript.
1
+ # pi-crew Runtime Flow
2
+
3
+ This document is a compact map of the runtime paths used by `pi-crew`.
4
+
5
+ ## Main sequence
6
+
7
+ ```text
8
+ User / model
9
+ │ calls team({ action: "run", ... }) or /team-run
10
+
11
+ handleTeamTool()
12
+ │ validates schema and routes action
13
+
14
+ handleRun()
15
+ ├─ discoverTeams/discoverWorkflows/discoverAgents
16
+ ├─ validateWorkflowForTeam
17
+ ├─ expandParallelResearchWorkflow when applicable
18
+ ├─ createRunManifest + tasks.json + goal artifact
19
+ ├─ if async=true ─────────────────────────────────────────────┐
20
+ │ spawnBackgroundTeamRun() │
21
+ │ ├─ resolve jiti-register.mjs │
22
+ │ ├─ fail-fast if jiti missing │
23
+ │ ├─ node --import jiti-register.mjs background-runner.ts │
24
+ │ └─ parent schedules early-exit guard │
25
+ │ ▼
26
+ │ background-runner.ts
27
+ │ ├─ append async.started
28
+ │ ├─ write async.pid startup marker
29
+ │ ├─ rediscover team/workflow/agents
30
+ │ └─ executeTeamRun()
31
+
32
+ └─ if foreground/default
33
+ ├─ startForegroundRun schedules session-bound run, or
34
+ └─ executeTeamRun inline for scaffold/non-scheduled paths
35
+
36
+ executeTeamRun()
37
+ ├─ write run.running
38
+ ├─ materialize queued/running agent records lazily
39
+ ├─ build task graph index
40
+ ├─ while queued tasks exist
41
+ │ ├─ taskGraphSnapshot
42
+ │ ├─ resolveBatchConcurrency
43
+ │ ├─ getReadyTasks
44
+ │ ├─ append task.progress batch event
45
+ │ ├─ mapConcurrent ready batch
46
+ │ │ └─ runTeamTask()
47
+ │ │ ├─ prepare workspace/worktree
48
+ │ │ ├─ build task packet
49
+ │ │ ├─ render prompt + dependency context
50
+ │ │ ├─ choose model candidates from Pi config
51
+ │ │ ├─ spawn child Pi process
52
+ │ │ ├─ ChildPiLineObserver parses stdout/stderr
53
+ │ │ ├─ append per-agent events/output
54
+ │ │ ├─ update agent progress/task state
55
+ │ │ ├─ parse final JSONL/session usage
56
+ │ │ └─ write result/log/transcript/metadata artifacts
57
+ │ ├─ merge task updates monotonically
58
+ │ ├─ optional adaptive plan injection
59
+ │ ├─ save tasks/agents/progress
60
+ │ └─ write batch artifact
61
+ ├─ policy closeout
62
+ └─ run.completed / run.failed / run.blocked / run.cancelled
63
+ ```
64
+
65
+ ## Action router
66
+
67
+ | Action | Handler | Purpose |
68
+ |---|---|---|
69
+ | `run` | `team-tool/run.ts` | Create and execute a run, foreground or async. |
70
+ | `status` | `team-tool.ts` | Show manifest/tasks/agents/events and mark stale async runs failed. |
71
+ | `summary` | `session-summary.ts`/summary handler | Write/read run summary artifact. |
72
+ | `events` | `team-tool.ts` | Tail durable run events. |
73
+ | `artifacts` | `team-tool.ts` | List run artifacts. |
74
+ | `resume` | `team-tool.ts` | Requeue failed/cancelled/skipped/running tasks. |
75
+ | `cancel` | `team-tool.ts` | Mark queued/running tasks cancelled and request foreground interrupt. |
76
+ | `forget` | `run-maintenance.ts` | Delete run state/artifacts with confirmation. |
77
+ | `prune` | `run-maintenance.ts` | Remove old finished runs with confirmation. |
78
+ | `export` | `run-export.ts` | Create portable run bundle. |
79
+ | `import` / `imports` | `run-import.ts` / `import-index.ts` | Store/list imported bundles. |
80
+ | `config` | `config.ts` + config action | Show/update user/project config. |
81
+ | `doctor` | `team-tool/doctor.ts` | Platform/resource/runtime diagnostics. |
82
+ | `validate` | `validate-resources.ts` | Validate agents/teams/workflows. |
83
+ | `recommend` | `team-recommendation.ts` | Suggest team/workflow/action for a goal. |
84
+ | management | `management.ts` | Create/update/delete/rename teams, agents, workflows. |
85
+ | API | `team-tool/api.ts` | File-backed observability/control/mailbox API. |
86
+
87
+ ## Worker modes
88
+
89
+ | Mode | Behavior |
90
+ |---|---|
91
+ | `child-process` | Default. Launches real child `pi` processes per task. |
92
+ | `scaffold` | Explicit dry-run. No child Pi worker execution. |
93
+ | `live-session` | Experimental/gated in-process/live agent path. |
94
+ | `auto` | Resolves to child-process unless config/env requests otherwise. |
95
+
96
+ ## Important files
97
+
98
+ ```text
99
+ src/extension/register.ts Pi extension entry/wiring
100
+ src/extension/team-tool/run.ts run creation and foreground/async split
101
+ src/runtime/background-runner.ts detached async entrypoint
102
+ src/runtime/async-runner.ts background spawn command/options
103
+ src/runtime/team-runner.ts workflow/task graph scheduler
104
+ src/runtime/task-runner.ts single task execution
105
+ src/runtime/child-pi.ts child Pi process and output observer
106
+ src/runtime/model-fallback.ts configured model candidates/routing
107
+ src/runtime/concurrency.ts batch concurrency decisions
108
+ src/runtime/process-status.ts pid/liveness/stale detection
109
+ src/state/state-store.ts manifest/tasks persistence
110
+ src/state/event-log.ts JSONL run events
111
+ src/runtime/crew-agent-records.ts aggregate + per-agent status files
112
+ ```
113
+
114
+ ## Environment variables
115
+
116
+ | Env | Effect |
117
+ |---|---|
118
+ | `PI_CREW_EXECUTE_WORKERS=0` | Disable real workers, use scaffold behavior. |
119
+ | `PI_TEAMS_EXECUTE_WORKERS=0` | Legacy alias for worker disable. |
120
+ | `PI_CREW_ENABLE_EXPERIMENTAL_LIVE_SESSION=1` | Allow experimental live-session runtime. |
121
+ | `PI_CREW_MOCK_LIVE_SESSION=success` | Test hook for live-session mock. |
122
+ | `PI_TEAMS_MOCK_CHILD_PI` | Test hook for mocked child Pi execution. |
123
+ | `PI_CREW_DEPTH`, `PI_CREW_MAX_DEPTH` | Canonical subagent recursion guard. |
124
+ | `PI_TEAMS_DEPTH`, `PI_TEAMS_MAX_DEPTH` | Legacy recursion guard aliases. |
125
+ | `PI_TEAMS_HOME` | Override user config/state home in tests. |
126
+ | `PI_TEAMS_PI_BIN` | Override child `pi` executable. |
127
+ | `PI_CODING_AGENT_DIR` | Override Pi settings/models directory for model discovery. |
128
+ | `PI_CREW_ASYNC_EARLY_EXIT_GUARD=0` | Disable 3s background early-exit guard. |
129
+
130
+ ## State transition summary
131
+
132
+ ```text
133
+ queued/planning/running ── completed
134
+ ├─ failed
135
+ ├─ blocked
136
+ └─ cancelled
137
+ ```
138
+
139
+ Task states follow the same durable contract plus `skipped`. Terminal states are monotonic during parallel merge.
140
+
141
+ ## Observability tips
142
+
143
+ - Use `/team-dashboard` for a UI overview.
144
+ - Use `team status runId=...` for canonical state and stale async detection.
145
+ - Read `background.log` for early import/spawn errors.
146
+ - Read `events.jsonl` for event chronology.
147
+ - Read `agents/{taskId}/status.json` for per-agent model/progress/tool status.
148
+ - Read `artifacts/{runId}/transcripts/{taskId}.jsonl` for raw child Pi transcript.
@@ -0,0 +1,250 @@
1
+ # Phân tích: Chuyển pi-crew hoàn toàn sang in-process execution
2
+
3
+ > Ngày: 2026-05-12
4
+ > Câu hỏi: Nếu chuyển hẳn sang in-process giống pi-subagents3 thì sao?
5
+
6
+ ---
7
+
8
+ ## 1. Hiện trạng
9
+
10
+ pi-crew có **3 runtime modes**, child-process là default:
11
+
12
+ ```
13
+ scaffold → không chạy workers (dry-run)
14
+ child-process → spawn `pi` CLI subprocess per worker (DEFAULT)
15
+ live-session → createAgentSession() in-process per worker
16
+ ```
17
+
18
+ ### Code liên quan child-process
19
+
20
+ | File | LOC | Vai trò |
21
+ |---|---|---|
22
+ | `child-pi.ts` | 461 | Subprocess lifecycle, stdout parsing, kill process tree |
23
+ | `pi-args.ts` | 165 | Build CLI args cho child `pi` process |
24
+ | `pi-spawn.ts` | 167 | Detect `pi` binary path (local/global) |
25
+ | `post-exit-stdio-guard.ts` | 86 | Drain child stdout sau exit, hard kill timer |
26
+ | `async-runner.ts` | 153 | Spawn background team runs ( detached process) |
27
+ | **Tổng** | **1.032** | **Code chỉ dùng cho child-process** |
28
+
29
+ ### Code liên quan live-session (đã có sẵn)
30
+
31
+ | File | LOC | Vai trò |
32
+ |---|---|---|
33
+ | `live-session-runtime.ts` | 600 | In-process execution, soft turn limit, yield, custom tools |
34
+ | `runtime-resolver.ts` | 92 | Auto-detect available runtime |
35
+ | `task-runner/live-executor.ts` | 95 | Adapter: live-session → task-runner interface |
36
+
37
+ ### Files sử dụng child-process path
38
+
39
+ - `task-runner.ts` — 8 references, ~120 dòng logic riêng child-process (heartbeat, progress, model retry)
40
+ - `register.ts` — `terminateActiveChildPiProcesses()` cleanup
41
+ - `doctor.ts` — diagnose child-process issues
42
+ - `async-runner.ts` — spawn background team runs
43
+
44
+ ### Tests liên quan
45
+
46
+ - ~37 test files reference child-process / mock child
47
+ - ~3 test files reference live-session mock
48
+ - Tất cả integration tests dùng `PI_TEAMS_MOCK_CHILD_PI` — **cần rewrite** nếu bỏ child-process
49
+
50
+ ---
51
+
52
+ ## 2. Nếu chuyển hẳn sang in-process
53
+
54
+ ### 2.1 Những gì ĐƯỢC
55
+
56
+ #### Lợi tức tức thì
57
+
58
+ | Metric | child-process | in-process | Cải thiện |
59
+ |---|---|---|---|
60
+ | Memory / worker | ~150 MB | ~15 MB | **10× nhẹ hơn** |
61
+ | 4 workers peak | ~600 MB thêm | ~60 MB thêm | **540 MB tiết kiệm** |
62
+ | Startup / worker | 2-4s | 200-500ms | **8× nhanh hơn** |
63
+ | Team startup (3 phases) | 6-12s overhead | ~1s overhead | **6-12× nhanh hơn** |
64
+ | Steering | ❌ | ✅ | **Tính năng mới** |
65
+ | Resume | ❌ | ✅ | **Tính năng mới** |
66
+ | Context inheritance | ❌ | ✅ (parentContext) | **Tính năng mới** |
67
+ | Live tool activity | ❌ | ✅ | **Tính năng mới** |
68
+ | Yield/submit_result | ✅ (JSON event) | ✅ (custom tool) | Parity |
69
+ | Worktree isolation | ✅ | ✅ | Parity |
70
+
71
+ #### Lợi tức kiến trúc
72
+
73
+ - **Xóa ~1.000 LOC** subprocess management code
74
+ - Đơn giản hóa `task-runner.ts` (bỏ 120 dòng child-process logic)
75
+ - Bỏ `post-exit-stdio-guard.ts`, `pi-spawn.ts`, `pi-args.ts` subprocess overhead
76
+ - Bỏ `responseTimeoutMs`, `hardKillMs`, `postExitStdioGuardMs` — không cần kill process tree
77
+ - **Zero npm dependencies cho execution** (hiện cần `jiti` cho async-runner TypeScript loading)
78
+
79
+ ### 2.2 Những gì MẤT
80
+
81
+ #### ❌ Process isolation — biggest loss
82
+
83
+ ```
84
+ child-process: worker crash → worker dies → parent continues
85
+ in-process: worker crash → có thể crash parent → toàn bộ team mất
86
+ ```
87
+
88
+ Pi SDK `createAgentSession()` đã handle phần lớn errors, nhưng:
89
+ - **Unhandled promise rejection** trong session
90
+ - **Infinite loop** trong custom tool
91
+ - **OOM** — một session ăn hết memory ảnh hưởng tất cả
92
+ - **Node.js segfault** — rare nhưng khi xảy ra = chết hết
93
+
94
+ #### ❌ Async background team runs
95
+
96
+ `async-runner.ts` spawn một **detached process** chạy team khi user close terminal. In-process không thể — process chết khi terminal close.
97
+
98
+ **Giải pháp:** Giữ `async-runner.ts` riêng cho background runs — nó spawn cả team runner, không phải individual workers.
99
+
100
+ #### ❌ Depth guard đơn giản
101
+
102
+ `checkCrewDepth()` đếm `PI_CREW_PARENT_PID` env var. In-process không có process boundary → đếm depth khó hơn. Cần dùng global counter hoặc thread-local.
103
+
104
+ #### ❌ 37+ test files cần update
105
+
106
+ Tất cả integration tests dùng `PI_TEAMS_MOCK_CHILD_PI`. Cần chuyển sang `PI_CREW_MOCK_LIVE_SESSION` hoặc viết mock mới.
107
+
108
+ #### ❌ `_CrewRuntimeKind` type union
109
+
110
+ `"scaffold" | "child-process" | "live-session"` → nếu bỏ child-process thì chỉ còn `"scaffold" | "in-process"`. Breaking change cho config.
111
+
112
+ ### 2.3 Rủi ro cụ thể
113
+
114
+ | Rủi ro | Mức độ | Chi tiết |
115
+ |---|---|---|
116
+ | Parent crash | **Medium** | Unhandled error in agent session → parent dies. Pi SDK wraps大部分 nhưng không phải 100%. |
117
+ | Memory pressure | **Medium** | 4 in-process sessions + context windows có thể chiếm >500MB trong cùng heap. V8 GC pause. |
118
+ | Extension conflicts | **Low** | In-process extensions có thể conflict (global state, tool registry). Đã có filter nhưng edge cases. |
119
+ | Recursive team calls | **Low** | `team` tool trong agent session → infinite recursion. Đã filter nhưng cần guarantee. |
120
+ | Background runs | **Solved** | Giữ `async-runner.ts` riêng, chỉ spawn 1 detached process cho full team. |
121
+ | Breaking config | **Low** | User đang set `mode: "child-process"` → cần migration path. |
122
+
123
+ ---
124
+
125
+ ## 3. Hai hướng đi
126
+
127
+ ### Hướng A: Bỏ hoàn toàn child-process (giống pi-subagents3)
128
+
129
+ ```
130
+ ┌─────────────────────────┐
131
+ │ task-runner.ts │
132
+ │ runtime = "in-process" │
133
+ ├─────────────────────────┤
134
+ │ live-session-runtime.ts │
135
+ │ createAgentSession() │
136
+ │ session.prompt() │
137
+ │ session.steer() │
138
+ ├─────────────────────────┤
139
+ │ Pi SDK (shared) │
140
+ └─────────────────────────┘
141
+ ```
142
+
143
+ **Xóa:** `child-pi.ts`, `pi-args.ts`, `pi-spawn.ts`, `post-exit-stdio-guard.ts` (~879 LOC)
144
+ **Giữ:** `async-runner.ts` (cho background team runs — spawn 1 process cho cả team, không phải per-worker)
145
+ **Đổi:** `task-runner.ts` → bỏ child-process branch, chỉ dùng live-session
146
+ **Đổi:** Tất cả 37+ test files
147
+
148
+ **Pros:** Clean architecture, đơn giản nhất, maintenance thấp nhất
149
+ **Cons:** Mất crash isolation cho per-worker, nhiều test cần rewrite
150
+
151
+ ### Hướng B: Live-session default + child-process opt-in (khuyến nghị)
152
+
153
+ ```
154
+ ┌─────────────────────────────────┐
155
+ │ task-runner.ts │
156
+ │ default: live-session │
157
+ │ opt-in: child-process │
158
+ │ background: async-runner │
159
+ ├──────────┬───────────────────────┤
160
+ │ in-proc │ child-process │
161
+ │ (fast) │ (isolated, fallback) │
162
+ └──────────┴───────────────────────┘
163
+ ```
164
+
165
+ **Đổi:** `runtime-resolver.ts` → `"auto"` prefer live-session
166
+ **Giữ:** Tất cả child-process code (fallback)
167
+ **Giữ:** Tất cả tests
168
+ **Thêm:** Config `"riskyIsolation": true"` cho executor role auto-use child-process
169
+
170
+ **Pros:** Best of both worlds, zero breaking change
171
+ **Cons:** Vẫn maintain 2 code paths
172
+
173
+ ---
174
+
175
+ ## 4. Khuyến nghị: Hướng B
176
+
177
+ **Không nên bỏ child-process hoàn toàn** — quá rủi ro cho production. Thay vào đó:
178
+
179
+ ### Bước 1: Đổi default runtime (nhanh, ít rủi ro)
180
+
181
+ ```typescript
182
+ // runtime-resolver.ts
183
+ // Trước: "auto" → luôn child-process
184
+ // Sau: "auto" → thử live-session, fallback child-process
185
+
186
+ export async function resolveCrewRuntime(config, env) {
187
+ const requestedMode = config.runtime?.mode ?? "auto";
188
+ if (requestedMode === "auto") {
189
+ const live = await isLiveSessionRuntimeAvailable(1500, env);
190
+ if (live.available) return liveCaps(requestedMode);
191
+ return { ...childCaps(requestedMode), fallback: "child-process", reason: live.reason };
192
+ }
193
+ // Explicit modes still work
194
+ if (requestedMode === "child-process") return childCaps(requestedMode);
195
+ if (requestedMode === "live-session") { /* ... */ }
196
+ // ...
197
+ }
198
+ ```
199
+
200
+ ### Bước 2: Thêm per-role isolation policy
201
+
202
+ ```json
203
+ // crew-config.json
204
+ {
205
+ "runtime": {
206
+ "mode": "auto",
207
+ "isolationPolicy": {
208
+ "executor": "child-process", // risky code changes → isolated
209
+ "test-engineer": "child-process", // test runs → isolated
210
+ "default": "in-process" // everything else → fast
211
+ }
212
+ }
213
+ }
214
+ ```
215
+
216
+ ### Bước 3: Observability cho in-process errors
217
+
218
+ ```typescript
219
+ // Wrap session.prompt() với global error handler
220
+ process.on('unhandledRejection', (err) => {
221
+ logInternalError('live-session.unhandled', err);
222
+ // Don't crash — attempt recovery
223
+ });
224
+ ```
225
+
226
+ ### Lợi tức dự kiến Hướng B
227
+
228
+ | | Hiện tại | Sau Bước 1 | Sau Bước 2 |
229
+ |---|---|---|---|
230
+ | **Default runtime** | child-process | live-session (auto) | live-session + per-role |
231
+ | **Memory (4 workers)** | ~910 MB | ~370 MB | ~450 MB (mix) |
232
+ | **Startup** | 2-4s/worker | 200-500ms/worker | Mix |
233
+ | **Crash isolation** | ✅ all | ✅ fallback | ✅ risky roles |
234
+ | **Steering** | ❌ | ✅ | ✅ |
235
+ | **Breaking changes** | — | None | None |
236
+ | **Code xóa** | — | 0 | 0 (giữ fallback) |
237
+ | **Tests cần đổi** | — | 0 | 0 |
238
+
239
+ ---
240
+
241
+ ## 5. Kết luận
242
+
243
+ **Không nên chuyển hẳn 100% in-process.** Lý do:
244
+
245
+ 1. **Crash isolation quá quan trọng** cho executor/test-engineer roles — những agent này chạy code, write files, có thể infinite loop
246
+ 2. **Background runs cần detached process** — không thể in-process
247
+ 3. **37+ test files cần rewrite** — chi phí migration cao
248
+ 4. **Breaking change** cho users đang dùng `mode: "child-process"`
249
+
250
+ **Thay vào đó: Đổi default sang live-session + giữ child-process làm fallback/opt-in.** Đây chính là thiết kế sẵn của `resolveCrewRuntime()` — chỉ cần flip default trong `"auto"` mode. Zero code xóa, zero breaking change, users tự chọn khi cần isolation.
@@ -0,0 +1,30 @@
1
+ # Stories
2
+
3
+ Story-sized work packets for pi-crew development.
4
+
5
+ ## Status Values
6
+
7
+ | Status | Meaning |
8
+ |--------|---------|
9
+ | planned | Accepted, not started |
10
+ | in_progress | Actively being worked |
11
+ | completed | Done with evidence |
12
+ | blocked | Waiting on external input |
13
+
14
+ ## Active Stories
15
+
16
+ No active stories. Pick from backlog or create new ones via feature intake.
17
+
18
+ ## Completed Stories (from review rounds)
19
+
20
+ | ID | Title | Lane | Result |
21
+ |----|-------|------|--------|
22
+ | RR-001 | Depth guard for nested live-session | normal | commit 2640d5e |
23
+ | RR-002 | Windows EBUSY retry | normal | commit ceb8c60 |
24
+ | RR-003 | Harden live-session resource management | normal | commit c7bd455 |
25
+ | RR-004 | Stale task/agent repair | normal | commit d6d466d |
26
+ | RR-005 | Async runner child-process enforcement | high-risk | commit 2486051 |
27
+ | RR-006 | Live-session resource leak fix | normal | commit 7a25644 |
28
+ | RR-007 | Double cleanupTempDir guard | tiny | commit 5f47e92 |
29
+ | RR-008 | Review round 8 (8 issues) | normal | commit 4e75ba8 |
30
+ | RR-009 | Review round 9 (5 issues) | normal | commit f3d29cc |
@@ -0,0 +1,36 @@
1
+ # Story Backlog
2
+
3
+ Candidate stories for future pi-crew development.
4
+
5
+ ## Epic: Reliability
6
+
7
+ | ID | Title | Lane | Priority | Status |
8
+ |----|-------|------|----------|--------|
9
+ | US-001 | Lock-free event log rotation | normal | P2 | planned |
10
+ | US-002 | Structured run-level lock cleanup | normal | P2 | planned |
11
+ | US-003 | Dead letter queue for permanently failed tasks | normal | P3 | planned |
12
+
13
+ ## Epic: Performance
14
+
15
+ | ID | Title | Lane | Priority | Status |
16
+ |----|-------|------|----------|--------|
17
+ | US-010 | Replace sleepSync busy-wait with proper async | normal | P3 | planned |
18
+ | US-011 | Stream-based event log for large runs | normal | P3 | planned |
19
+ | US-012 | Cache available models across runs | tiny | P3 | planned |
20
+
21
+ ## Epic: DX (Developer Experience)
22
+
23
+ | ID | Title | Lane | Priority | Status |
24
+ |----|-------|------|----------|--------|
25
+ | US-020 | Interactive run dashboard in TUI | normal | P2 | planned |
26
+ | US-021 | Run comparison (before/after) | normal | P3 | planned |
27
+ | US-022 | Export run report as markdown | tiny | P3 | planned |
28
+
29
+ ## Epic: Integration
30
+
31
+ | ID | Title | Lane | Priority | Status |
32
+ |----|-------|------|----------|--------|
33
+ | US-030 | Webhook notifications on run completion | normal | P3 | planned |
34
+ | US-031 | GitHub Actions integration (report results as PR comment) | normal | P3 | planned |
35
+
36
+ Create story packets from `docs/templates/story.md` when work is selected.
@@ -0,0 +1,27 @@
1
+ # NNNN Decision Title
2
+
3
+ Date: YYYY-MM-DD
4
+
5
+ ## Status
6
+
7
+ Proposed | Accepted | Superseded | Rejected
8
+
9
+ ## Context
10
+
11
+ What problem, constraint, or ambiguity forced this decision?
12
+
13
+ ## Decision
14
+
15
+ What did we decide?
16
+
17
+ ## Alternatives Considered
18
+
19
+ 1. Alternative.
20
+
21
+ ## Consequences
22
+
23
+ Positive:
24
+ - Item.
25
+
26
+ Tradeoffs:
27
+ - Item.