pi-crew 0.1.46 → 0.1.49

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 (253) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/agents/analyst.md +11 -11
  3. package/agents/critic.md +11 -11
  4. package/agents/executor.md +11 -11
  5. package/agents/explorer.md +11 -11
  6. package/agents/planner.md +11 -11
  7. package/agents/reviewer.md +11 -11
  8. package/agents/security-reviewer.md +11 -11
  9. package/agents/test-engineer.md +11 -11
  10. package/agents/verifier.md +11 -11
  11. package/agents/writer.md +11 -11
  12. package/docs/next-upgrade-roadmap.md +117 -42
  13. package/docs/refactor-tasks-phase3.md +394 -394
  14. package/docs/refactor-tasks-phase4.md +564 -564
  15. package/docs/refactor-tasks-phase5.md +402 -402
  16. package/docs/refactor-tasks-phase6.md +662 -662
  17. package/docs/research/AGENT-EXECUTION-ARCHITECTURE.md +261 -0
  18. package/docs/research/AGENT-LIFECYCLE-COMPARISON.md +111 -0
  19. package/docs/research/AUDIT_OH_MY_PI.md +261 -0
  20. package/docs/research/AUDIT_PI_CREW.md +457 -0
  21. package/docs/research/CAVEMAN-DEEP-RESEARCH.md +281 -0
  22. package/docs/research/COMPARISON_OH_MY_PI_VS_PI_CREW.md +264 -0
  23. package/docs/research/DEEP-RESEARCH-PI-POWERBAR.md +343 -0
  24. package/docs/research/DEEP_RESEARCH_SUBAGENT_ARCHITECTURE.md +480 -0
  25. package/docs/research/GAP_CLOSURE_IMPLEMENTATION_PLAN.md +354 -0
  26. package/docs/research/IMPLEMENTATION_PLAN.md +385 -0
  27. package/docs/research/LIVE-SESSION-PRODUCTION-READY-PLAN.md +502 -0
  28. package/docs/research/OH-MY-PI-DEEP-RESEARCH-v14.7.6.md +266 -0
  29. package/docs/research/REMAINING-GAPS-PLAN.md +363 -0
  30. package/docs/research/SESSION-SUMMARY-2026-05-08.md +146 -0
  31. package/docs/research/UI-RESPONSIVENESS-AUDIT.md +173 -0
  32. package/docs/research-awesome-agent-skills-distillation.md +100 -100
  33. package/docs/research-extension-examples.md +297 -297
  34. package/docs/research-extension-system.md +324 -324
  35. package/docs/research-oh-my-pi-distillation.md +56 -9
  36. package/docs/research-optimization-plan.md +548 -548
  37. package/docs/research-phase10-distillation.md +198 -198
  38. package/docs/research-phase11-distillation.md +201 -201
  39. package/docs/research-pi-coding-agent.md +357 -357
  40. package/docs/research-source-pi-crew-reference.md +174 -174
  41. package/docs/runtime-flow.md +148 -148
  42. package/docs/source-runtime-refactor-map.md +107 -107
  43. package/index.ts +6 -6
  44. package/package.json +99 -98
  45. package/schema.json +8 -0
  46. package/skills/async-worker-recovery/SKILL.md +42 -42
  47. package/skills/context-artifact-hygiene/SKILL.md +52 -52
  48. package/skills/delegation-patterns/SKILL.md +54 -54
  49. package/skills/mailbox-interactive/SKILL.md +40 -40
  50. package/skills/model-routing-context/SKILL.md +39 -39
  51. package/skills/multi-perspective-review/SKILL.md +58 -58
  52. package/skills/observability-reliability/SKILL.md +41 -41
  53. package/skills/orchestration/SKILL.md +157 -0
  54. package/skills/ownership-session-security/SKILL.md +41 -41
  55. package/skills/pi-extension-lifecycle/SKILL.md +39 -39
  56. package/skills/requirements-to-task-packet/SKILL.md +63 -63
  57. package/skills/resource-discovery-config/SKILL.md +41 -41
  58. package/skills/runtime-state-reader/SKILL.md +44 -44
  59. package/skills/secure-agent-orchestration-review/SKILL.md +45 -45
  60. package/skills/state-mutation-locking/SKILL.md +42 -42
  61. package/skills/systematic-debugging/SKILL.md +67 -67
  62. package/skills/ui-render-performance/SKILL.md +39 -39
  63. package/skills/verification-before-done/SKILL.md +57 -57
  64. package/skills/worktree-isolation/SKILL.md +39 -39
  65. package/src/agents/agent-config.ts +6 -0
  66. package/src/agents/agent-search.ts +98 -0
  67. package/src/agents/agent-serializer.ts +4 -0
  68. package/src/agents/discover-agents.ts +17 -4
  69. package/src/config/config.ts +24 -0
  70. package/src/config/defaults.ts +11 -0
  71. package/src/extension/autonomous-policy.ts +26 -33
  72. package/src/extension/cross-extension-rpc.ts +82 -82
  73. package/src/extension/help.ts +1 -0
  74. package/src/extension/management.ts +5 -0
  75. package/src/extension/register.ts +58 -13
  76. package/src/extension/registration/commands.ts +33 -1
  77. package/src/extension/registration/compaction-guard.ts +125 -125
  78. package/src/extension/registration/team-tool.ts +6 -4
  79. package/src/extension/run-bundle-schema.ts +89 -89
  80. package/src/extension/run-index.ts +24 -18
  81. package/src/extension/run-maintenance.ts +68 -62
  82. package/src/extension/team-tool/api.ts +23 -2
  83. package/src/extension/team-tool/cancel.ts +86 -11
  84. package/src/extension/team-tool/context.ts +3 -0
  85. package/src/extension/team-tool/handle-settings.ts +188 -188
  86. package/src/extension/team-tool/inspect.ts +41 -41
  87. package/src/extension/team-tool/intent-policy.ts +42 -0
  88. package/src/extension/team-tool/lifecycle-actions.ts +47 -18
  89. package/src/extension/team-tool/parallel-dispatch.ts +156 -0
  90. package/src/extension/team-tool/plan.ts +19 -19
  91. package/src/extension/team-tool/respond.ts +10 -2
  92. package/src/extension/team-tool/run.ts +3 -2
  93. package/src/extension/team-tool/status.ts +1 -1
  94. package/src/extension/team-tool-types.ts +1 -0
  95. package/src/extension/team-tool.ts +13 -3
  96. package/src/hooks/registry.ts +61 -0
  97. package/src/hooks/types.ts +41 -0
  98. package/src/i18n.ts +184 -184
  99. package/src/observability/exporters/otlp-exporter.ts +77 -77
  100. package/src/prompt/prompt-runtime.ts +72 -72
  101. package/src/runtime/agent-control.ts +108 -2
  102. package/src/runtime/agent-memory.ts +72 -72
  103. package/src/runtime/agent-observability.ts +114 -114
  104. package/src/runtime/async-marker.ts +26 -26
  105. package/src/runtime/async-runner.ts +3 -1
  106. package/src/runtime/attention-events.ts +28 -28
  107. package/src/runtime/background-runner.ts +19 -0
  108. package/src/runtime/cancellation-token.ts +89 -0
  109. package/src/runtime/cancellation.ts +61 -51
  110. package/src/runtime/capability-inventory.ts +116 -0
  111. package/src/runtime/child-pi.ts +2 -1
  112. package/src/runtime/code-summary.ts +247 -0
  113. package/src/runtime/completion-guard.ts +190 -190
  114. package/src/runtime/crash-recovery.ts +181 -0
  115. package/src/runtime/crew-agent-records.ts +35 -7
  116. package/src/runtime/crew-agent-runtime.ts +1 -0
  117. package/src/runtime/custom-tools/irc-tool.ts +201 -0
  118. package/src/runtime/custom-tools/submit-result-tool.ts +90 -0
  119. package/src/runtime/delivery-coordinator.ts +3 -1
  120. package/src/runtime/direct-run.ts +35 -35
  121. package/src/runtime/effectiveness.ts +81 -76
  122. package/src/runtime/event-stream-bridge.ts +90 -0
  123. package/src/runtime/foreground-control.ts +82 -82
  124. package/src/runtime/green-contract.ts +46 -46
  125. package/src/runtime/group-join.ts +106 -106
  126. package/src/runtime/heartbeat-gradient.ts +28 -28
  127. package/src/runtime/heartbeat-watcher.ts +124 -124
  128. package/src/runtime/live-agent-control.ts +88 -88
  129. package/src/runtime/live-agent-manager.ts +78 -2
  130. package/src/runtime/live-control-realtime.ts +36 -36
  131. package/src/runtime/live-extension-bridge.ts +150 -0
  132. package/src/runtime/live-irc.ts +92 -0
  133. package/src/runtime/live-session-health.ts +100 -0
  134. package/src/runtime/live-session-runtime.ts +297 -7
  135. package/src/runtime/mcp-proxy.ts +113 -0
  136. package/src/runtime/notebook-helpers.ts +90 -0
  137. package/src/runtime/orphan-sentinel.ts +7 -0
  138. package/src/runtime/output-validator.ts +187 -0
  139. package/src/runtime/parallel-research.ts +44 -44
  140. package/src/runtime/parallel-utils.ts +57 -0
  141. package/src/runtime/parent-guard.ts +80 -0
  142. package/src/runtime/pi-json-output.ts +111 -111
  143. package/src/runtime/policy-engine.ts +79 -79
  144. package/src/runtime/progress-event-coalescer.ts +43 -43
  145. package/src/runtime/prose-compressor.ts +164 -0
  146. package/src/runtime/recovery-recipes.ts +74 -74
  147. package/src/runtime/result-extractor.ts +121 -0
  148. package/src/runtime/role-permission.ts +39 -39
  149. package/src/runtime/runtime-resolver.ts +1 -4
  150. package/src/runtime/semaphore.ts +131 -0
  151. package/src/runtime/sensitive-paths.ts +92 -0
  152. package/src/runtime/session-resources.ts +25 -25
  153. package/src/runtime/session-snapshot.ts +59 -59
  154. package/src/runtime/session-usage.ts +79 -79
  155. package/src/runtime/sidechain-output.ts +29 -29
  156. package/src/runtime/stream-preview.ts +177 -0
  157. package/src/runtime/subagent-manager.ts +3 -2
  158. package/src/runtime/subprocess-tool-registry.ts +67 -0
  159. package/src/runtime/supervisor-contact.ts +59 -59
  160. package/src/runtime/task-display.ts +38 -38
  161. package/src/runtime/task-output-context.ts +59 -9
  162. package/src/runtime/task-runner/capabilities.ts +78 -78
  163. package/src/runtime/task-runner/live-executor.ts +2 -0
  164. package/src/runtime/task-runner/progress.ts +119 -119
  165. package/src/runtime/task-runner/prompt-builder.ts +70 -8
  166. package/src/runtime/task-runner/prompt-pipeline.ts +64 -64
  167. package/src/runtime/task-runner/result-utils.ts +14 -14
  168. package/src/runtime/task-runner/run-projection.ts +104 -0
  169. package/src/runtime/task-runner/state-helpers.ts +22 -22
  170. package/src/runtime/task-runner.ts +75 -4
  171. package/src/runtime/team-runner.ts +60 -8
  172. package/src/runtime/worker-heartbeat.ts +21 -21
  173. package/src/runtime/worker-startup.ts +57 -57
  174. package/src/runtime/workspace-tree.ts +298 -0
  175. package/src/runtime/yield-handler.ts +189 -0
  176. package/src/schema/config-schema.ts +6 -0
  177. package/src/schema/team-tool-schema.ts +11 -1
  178. package/src/skills/discover-skills.ts +67 -0
  179. package/src/state/active-run-registry.ts +4 -2
  180. package/src/state/artifact-store.ts +4 -1
  181. package/src/state/atomic-write.ts +50 -1
  182. package/src/state/blob-store.ts +117 -0
  183. package/src/state/contracts.ts +1 -0
  184. package/src/state/event-log-rotation.ts +158 -0
  185. package/src/state/event-log.ts +52 -2
  186. package/src/state/mailbox.ts +87 -7
  187. package/src/state/state-store.ts +24 -4
  188. package/src/state/task-claims.ts +44 -44
  189. package/src/state/types.ts +20 -0
  190. package/src/state/usage.ts +29 -29
  191. package/src/subagents/async-entry.ts +1 -1
  192. package/src/subagents/index.ts +3 -3
  193. package/src/subagents/live/control.ts +1 -1
  194. package/src/subagents/live/manager.ts +1 -1
  195. package/src/subagents/live/realtime.ts +1 -1
  196. package/src/subagents/live/session-runtime.ts +1 -1
  197. package/src/subagents/manager.ts +1 -1
  198. package/src/subagents/spawn.ts +1 -1
  199. package/src/teams/team-serializer.ts +38 -38
  200. package/src/types/diff.d.ts +18 -18
  201. package/src/ui/agent-management-overlay.ts +144 -0
  202. package/src/ui/crew-footer.ts +101 -101
  203. package/src/ui/crew-select-list.ts +111 -111
  204. package/src/ui/crew-widget.ts +11 -2
  205. package/src/ui/dashboard-panes/cancellation-pane.ts +43 -0
  206. package/src/ui/dashboard-panes/capability-pane.ts +60 -0
  207. package/src/ui/dashboard-panes/mailbox-pane.ts +35 -11
  208. package/src/ui/dashboard-panes/metrics-pane.ts +34 -34
  209. package/src/ui/dynamic-border.ts +25 -25
  210. package/src/ui/layout-primitives.ts +106 -106
  211. package/src/ui/live-run-sidebar.ts +4 -0
  212. package/src/ui/loaders.ts +158 -158
  213. package/src/ui/powerbar-publisher.ts +77 -15
  214. package/src/ui/render-coalescer.ts +51 -0
  215. package/src/ui/render-diff.ts +119 -119
  216. package/src/ui/render-scheduler.ts +143 -143
  217. package/src/ui/run-dashboard.ts +4 -0
  218. package/src/ui/run-event-bus.ts +209 -0
  219. package/src/ui/run-snapshot-cache.ts +68 -16
  220. package/src/ui/snapshot-types.ts +8 -0
  221. package/src/ui/spinner.ts +17 -17
  222. package/src/ui/status-colors.ts +58 -58
  223. package/src/ui/syntax-highlight.ts +116 -116
  224. package/src/ui/transcript-entries.ts +258 -0
  225. package/src/utils/atomic-write.ts +33 -33
  226. package/src/utils/completion-dedupe.ts +63 -63
  227. package/src/utils/frontmatter.ts +68 -68
  228. package/src/utils/git.ts +262 -262
  229. package/src/utils/ids.ts +17 -12
  230. package/src/utils/incremental-reader.ts +104 -0
  231. package/src/utils/names.ts +27 -27
  232. package/src/utils/redaction.ts +44 -44
  233. package/src/utils/safe-paths.ts +47 -47
  234. package/src/utils/scan-cache.ts +137 -0
  235. package/src/utils/sleep.ts +32 -32
  236. package/src/utils/sse-parser.ts +134 -0
  237. package/src/utils/task-name-generator.ts +337 -0
  238. package/src/utils/visual.ts +33 -2
  239. package/src/workflows/validate-workflow.ts +40 -40
  240. package/src/worktree/branch-freshness.ts +45 -45
  241. package/src/worktree/cleanup.ts +2 -1
  242. package/teams/default.team.md +12 -12
  243. package/teams/fast-fix.team.md +11 -11
  244. package/teams/implementation.team.md +18 -18
  245. package/teams/parallel-research.team.md +14 -14
  246. package/teams/research.team.md +11 -11
  247. package/teams/review.team.md +12 -12
  248. package/workflows/default.workflow.md +29 -29
  249. package/workflows/fast-fix.workflow.md +22 -22
  250. package/workflows/implementation.workflow.md +38 -38
  251. package/workflows/parallel-research.workflow.md +46 -46
  252. package/workflows/research.workflow.md +22 -22
  253. package/workflows/review.workflow.md +30 -30
@@ -1,201 +1,201 @@
1
- # Phase 10+ Deep Distillation — Round 2
2
-
3
- **Date**: 2026-05-04
4
- **Sources**: `pi-mono` v0.72.1 (`324aa1d`), `pi-subagents` v0.24.0 (`3ee17de`), `pi-crew` ref v1.0.14 (`c0631a3`)
5
-
6
- ## Executive Summary
7
-
8
- Sau khi deep-read lần 2 vào runtime internals của cả 3 repos, phát hiện **15 insights mới** chưa được implement trong pi-crew. Phân thành 4 axes: Runtime Architecture, Extension API Adoption, Observability/Reliability, và Developer Experience.
9
-
10
- ---
11
-
12
- ## Axis F: Runtime Architecture Alignment
13
-
14
- ### F1. Process-Level Singleton for CrewRuntime ⭐⭐⭐
15
- **Source**: pi-crew ref `crew-runtime.ts`
16
- **Finding**: Module-level singleton (`export const crewRuntime = new CrewRuntime()`) sống xuyên suốt process lifetime. Khi Pi thay extension instance (session switch), singleton vẫn tồn tại vì Node.js module cache. New extension instance chỉ cần gọi `crewRuntime.activateSession(binding)`.
17
- **Current pi-crew**: Mỗi session tạo mới state. Chưa có survive-across-session mechanism.
18
- **Action**: Refactor `SubagentManager` thành process-level singleton với `activateSession()` pattern. In-flight child processes survive session switches.
19
-
20
- ### F2. Fire-and-Forget Spawn với Immediate ID Return ⭐⭐⭐
21
- **Source**: pi-crew ref `crew-runtime.ts`
22
- **Finding**: `spawn()` tạo state → return ID ngay lập tức → chạy `spawnSession()` async (fire-and-forget). Caller không block.
23
- **Current pi-crew**: `runChildPi` là async block. Task runner phải await.
24
- **Action**: Tách spawn thành sync ID allocation + async execution. Task runner fire-and-forget, poll status qua event log.
25
-
26
- ### F3. Final Drain Window Pattern ⭐⭐
27
- **Source**: pi-subagents `execution.ts`
28
- **Finding**: Khi `message_end` với `stopReason === "stop"` và không có tool calls → start 1s grace timer → SIGTERM → 3s → SIGKILL. Giúp child process flush output cuối cùng.
29
- **Current pi-crew**: Child Pi timeout đơn giản, không có grace period sau completion signal.
30
- **Action**: Implement `FINAL_STOP_GRACE_MS` drain window trong `child-pi.ts`.
31
-
32
- ### F4. Atomic JSON Writes cho Status Persistence ⭐⭐
33
- **Source**: pi-subagents `async-execution.ts`
34
- **Finding**: `writeAtomicJson()` ghi file temp → rename. Tránh torn writes khi process crash giữa chừng.
35
- **Current pi-crew**: `JSON.stringify` + `writeFileSync` trực tiếp — rủi ro torn write.
36
- **Action**: Implement `writeAtomicJson()` utility. Apply cho status.json, manifest writes.
37
-
38
- ### F5. Two-Level Process Hierarchy cho Async ⭐
39
- **Source**: pi-subagents `subagent-runner.ts`
40
- **Finding**: Orchestrator spawn runner (detached) → runner spawn Pi children. Runner track PIDs, write status.json. Orchestrator poll status.json.
41
- **Current pi-crew**: Async run chỉ fire background, không có intermediate runner process.
42
- **Action**: (Low priority) Xem xét thêm intermediate runner cho reliable async tracking.
43
-
44
- ### F6. Stale Run Reconciler — Three-Phase Pattern ⭐⭐
45
- **Source**: pi-subagents `stale-run-reconciler.ts`
46
- **Finding**: 3-phase: (1) check result file exists → use it, (2) check PID liveness, (3) for dead PIDs → repair immediately, for alive PIDs → fail only if stale > 24h.
47
- **Current pi-crew**: Có `crash-recovery.ts` nhưng chưa có full 3-phase reconciliation.
48
- **Action**: Nâng cấp crash recovery với 3-phase pattern: result-check → PID-check → stale-threshold.
49
-
50
- ---
51
-
52
- ## Axis G: Extension API Adoption
53
-
54
- ### G1. `session_before_compact` Hook — Custom Compaction ⭐⭐⭐
55
- **Source**: pi-mono `extensions/types.ts`
56
- **Finding**: Hook `session_before_compact` returns `{ cancel?, compaction?: CompactionResult }`. Extensions có thể **thay thế hoàn toàn** compaction logic — bao gồm structured details (artifact indices, version markers). Đây là extensibility point mạnh nhất.
57
- **Current pi-crew**: `compaction-guard.ts` chỉ phát hiện compaction events, không can thiệp.
58
- **Action**: Implement `session_before_compact` handler để cung cấp structured compaction thay vì raw text summarization. Preserve team run state across compaction.
59
-
60
- ### G2. `session_before_switch` Hook — Pre-Switch State Save ⭐⭐
61
- **Source**: pi-mono `extensions/types.ts`
62
- **Finding**: `session_before_switch` fires trước khi Pi switches session (new/resume). Return `{ cancel? }`. Pi-crew có thể save in-memory state → file trước khi switch.
63
- **Current pi-crew**: Không hook vào session switch. State mất khi switch.
64
- **Action**: Hook `session_before_switch` để flush pending deliveries và save subagent state snapshot.
65
-
66
- ### G3. `resources_discover` Hook — Dynamic Agent/Team Discovery ⭐⭐⭐
67
- **Source**: pi-mono `extensions/types.ts`
68
- **Finding**: `resources_discover` event returns `{ additionalSkillPaths?, additionalPromptPaths?, additionalThemePaths? }`. Extensions có thể dynamically inject resources.
69
- **Current pi-crew**: Discovery chỉ đọc từ filesystem. Không dynamic.
70
- **Action**: Hook `resources_discover` để inject team-specific skills/prompts dựa trên config. VD: auto-inject `safe-bash` skill cho projects có `package.json`.
71
-
72
- ### G4. `before_agent_start` — System Prompt Override ⭐⭐
73
- **Source**: pi-mono `extensions/types.ts`
74
- **Finding**: Can inject `message` and/or override `systemPrompt` before agent loop begins. Powerful for child agents.
75
- **Current pi-crew**: Child Pi system prompt built từ task packet, không override qua hook.
76
- **Action**: (Low priority — already handled via task packet prompt builder)
77
-
78
- ### G5. `tool_result` Event — Post-Execution Output Modification ⭐
79
- **Source**: pi-mono `extensions/types.ts`
80
- **Finding**: Can modify tool output `content`, `details`, `isError` after execution. Useful for enrichment/filtering.
81
- **Current pi-crew**: Không hook vào tool results.
82
- **Action**: Hook `tool_result` cho `team` tool để enrich output với structured metadata (run URL, artifact count, duration).
83
-
84
- ### G6. `input` Event — User Input Interception ⭐
85
- **Source**: pi-mono `extensions/types.ts`
86
- **Finding**: Can transform user input text/images or fully handle it (`action: "continue" | "transform" | "handled"`).
87
- **Current pi-crew**: Không intercept user input.
88
- **Action**: Hook `input` để detect `@team-name` mentions → auto-route to team run.
89
-
90
- ---
91
-
92
- ## Axis H: Observability & Reliability Gaps
93
-
94
- ### H1. Completion Mutation Guard ⭐⭐
95
- **Source**: pi-subagents `completion-guard.ts`
96
- **Finding**: Sau khi subagent trả về "success", check xem nếu task là "implementation" nhưng **không có file edits** → mutate completion thành warning. Tránh false-positive completions.
97
- **Current pi-crew**: Task complete khi child Pi exits 0. Không verify actual work done.
98
- **Action**: Implement completion guard: verify artifacts exist, files changed, hoặc output non-trivial.
99
-
100
- ### H2. Snapshot-Before-Emit Pattern ⭐
101
- **Source**: pi-subagents `execution.ts`
102
- **Finding**: Progress object snapshotted (spread) trước mỗi `onUpdate` callback. Tránh mutation during callback.
103
- **Current pi-crew**: Task state mutated directly, events emit references.
104
- **Action**: Snapshot task state trước khi emit events để avoid race conditions.
105
-
106
- ### H3. Intercom Bridge với Delivery Confirmation ⭐⭐
107
- **Source**: pi-subagents `intercom-bridge.ts`
108
- **Finding**: Bidirectional intercom: `deliverSubagentResultIntercomEvent()` emit event → wait for confirmation với 500ms timeout. Agent injection pattern: mutate config để add `contact_supervisor` tool + instructions.
109
- **Current pi-crew**: Có `supervisor-contact.ts` parse từ stdout, nhưng không có bidirectional confirmation.
110
- **Action**: Nếu Pi expose intercom API, upgrade supervisor contact thành bidirectional với delivery confirmation.
111
-
112
- ### H4. writeAtomicJson Utility ⭐⭐
113
- **Source**: pi-subagents (pervasive)
114
- **Finding**: Atomic file writes used everywhere: status, manifest, results. Pattern: `writeFileSync(path + ".tmp", data) → renameSync(path + ".tmp", path)`.
115
- **Action**: Shared utility trong `src/utils/atomic-write.ts`.
116
-
117
- ---
118
-
119
- ## Axis I: Developer Experience
120
-
121
- ### I1. Tool Presentation — Emoji + Grouping ⭐
122
- **Source**: pi-crew ref `tool-presentation.ts`
123
- **Finding**: `crew_spawn` renders "🚀 Spawning {agent}...", `crew_respond` renders "💬 Sending response...". Grouped tool calls have custom collapse UI.
124
- **Current pi-crew**: Tool output plain text.
125
- **Action**: Add emoji prefixes và structured formatting cho tool output.
126
-
127
- ### I2. renderCall/renderResult cho Team Tool ⭐⭐
128
- **Source**: pi-mono `tools/index.ts`
129
- **Finding**: `ToolDefinition` supports `renderCall` và `renderResult` callbacks returning TUI Components. Allows rich rendering in Pi terminal UI.
130
- **Current pi-crew**: Không có custom renderers.
131
- **Action**: Implement `renderCall` cho `team` tool để show spinner/agent-list thay vì raw JSON. Implement `renderResult` để show summary dashboard.
132
-
133
- ### I3. Prompt Snippet + Guidelines trong Tool Definition ⭐
134
- **Source**: pi-mono `tools/index.ts`
135
- **Finding**: `promptSnippet` — one-liner in system prompt. `promptGuidelines` — bullets appended to system prompt. Tools without `promptSnippet` are excluded from LLM awareness.
136
- **Current pi-crew**: Tool description chỉ trong JSON schema description.
137
- **Action**: Khi Pi hỗ trợ `promptSnippet`/`promptGuidelines` trong custom tools, adopt để improve LLM tool usage.
138
-
139
- ---
140
-
141
- ## Priority Matrix
142
-
143
- | ID | Feature | Impact | Effort | Priority |
144
- |---|---|---|---|---|
145
- | F1 | Process-level singleton | High | High | P1 |
146
- | F2 | Fire-and-forget spawn | Medium | Medium | P2 |
147
- | F3 | Final drain window | Medium | Low | P2 |
148
- | F4 | Atomic JSON writes | High | Low | P1 |
149
- | F5 | Two-level async hierarchy | Low | High | P3 |
150
- | F6 | 3-phase stale reconciliation | Medium | Medium | P2 |
151
- | G1 | Custom compaction hook | High | Medium | P1 |
152
- | G2 | Pre-switch state save | Medium | Low | P2 |
153
- | G3 | Dynamic resource discovery | High | Medium | P1 |
154
- | G4 | System prompt override | Low | Low | P3 |
155
- | G5 | Post-execution output mod | Low | Low | P3 |
156
- | G6 | User input interception | Medium | Medium | P3 |
157
- | H1 | Completion mutation guard | High | Low | P1 |
158
- | H2 | Snapshot-before-emit | Medium | Low | P2 |
159
- | H3 | Bidirectional intercom | Medium | High | P3 |
160
- | H4 | writeAtomicJson utility | High | Low | P1 |
161
- | I1 | Tool presentation emojis | Low | Low | P3 |
162
- | I2 | Custom TUI renderers | High | High | P2 (when API available) |
163
- | I3 | Prompt snippet/guidelines | Medium | Low | P3 (when API available) |
164
-
165
- ---
166
-
167
- ## Recommended Implementation Order
168
-
169
- ### Phase 11a: Reliability Foundations (F4 + H4 + H1 + H2)
170
- - `src/utils/atomic-write.ts` — writeAtomicJson utility
171
- - Apply atomic writes to all manifest/state writes
172
- - Completion mutation guard for task results
173
- - Snapshot-before-emit for task state events
174
-
175
- ### Phase 11b: Extension API Hooks (G1 + G2 + G3)
176
- - `session_before_compact` handler — structured compaction
177
- - `session_before_switch` handler — pre-switch state flush
178
- - `resources_discover` handler — dynamic skill/prompt injection
179
-
180
- ### Phase 11c: Runtime Architecture (F1 + F2 + F3)
181
- - Refactor SubagentManager → process-level singleton
182
- - Fire-and-forget spawn pattern
183
- - Final drain window for child process cleanup
184
-
185
- ### Phase 11d: Reconciliation & Recovery (F6 + H3)
186
- - 3-phase stale run reconciliation
187
- - Upgrade supervisor contact toward bidirectional (if API available)
188
-
189
- ---
190
-
191
- ## Already Implemented (Phase 10a-10d) ✅
192
- - DeliveryCoordinator (session-aware routing with queue/flush)
193
- - OverflowRecoveryTracker (compaction → retry state machine)
194
- - Foreign-aware cancel (ownership detection)
195
- - Session resource cleanup adapter
196
- - Interactive subagent waiting state + respond action
197
- - Supervisor contact parsing from child stdout
198
- - Parent model inheritance
199
- - Session-scoped run listing
200
- - Observability metrics for overflow/waiting/supervisor
201
- - Skills override + .pi/pi-crew.json config path
1
+ # Phase 10+ Deep Distillation — Round 2
2
+
3
+ **Date**: 2026-05-04
4
+ **Sources**: `pi-mono` v0.72.1 (`324aa1d`), `pi-subagents` v0.24.0 (`3ee17de`), `pi-crew` ref v1.0.14 (`c0631a3`)
5
+
6
+ ## Executive Summary
7
+
8
+ Sau khi deep-read lần 2 vào runtime internals của cả 3 repos, phát hiện **15 insights mới** chưa được implement trong pi-crew. Phân thành 4 axes: Runtime Architecture, Extension API Adoption, Observability/Reliability, và Developer Experience.
9
+
10
+ ---
11
+
12
+ ## Axis F: Runtime Architecture Alignment
13
+
14
+ ### F1. Process-Level Singleton for CrewRuntime ⭐⭐⭐
15
+ **Source**: pi-crew ref `crew-runtime.ts`
16
+ **Finding**: Module-level singleton (`export const crewRuntime = new CrewRuntime()`) sống xuyên suốt process lifetime. Khi Pi thay extension instance (session switch), singleton vẫn tồn tại vì Node.js module cache. New extension instance chỉ cần gọi `crewRuntime.activateSession(binding)`.
17
+ **Current pi-crew**: Mỗi session tạo mới state. Chưa có survive-across-session mechanism.
18
+ **Action**: Refactor `SubagentManager` thành process-level singleton với `activateSession()` pattern. In-flight child processes survive session switches.
19
+
20
+ ### F2. Fire-and-Forget Spawn với Immediate ID Return ⭐⭐⭐
21
+ **Source**: pi-crew ref `crew-runtime.ts`
22
+ **Finding**: `spawn()` tạo state → return ID ngay lập tức → chạy `spawnSession()` async (fire-and-forget). Caller không block.
23
+ **Current pi-crew**: `runChildPi` là async block. Task runner phải await.
24
+ **Action**: Tách spawn thành sync ID allocation + async execution. Task runner fire-and-forget, poll status qua event log.
25
+
26
+ ### F3. Final Drain Window Pattern ⭐⭐
27
+ **Source**: pi-subagents `execution.ts`
28
+ **Finding**: Khi `message_end` với `stopReason === "stop"` và không có tool calls → start 1s grace timer → SIGTERM → 3s → SIGKILL. Giúp child process flush output cuối cùng.
29
+ **Current pi-crew**: Child Pi timeout đơn giản, không có grace period sau completion signal.
30
+ **Action**: Implement `FINAL_STOP_GRACE_MS` drain window trong `child-pi.ts`.
31
+
32
+ ### F4. Atomic JSON Writes cho Status Persistence ⭐⭐
33
+ **Source**: pi-subagents `async-execution.ts`
34
+ **Finding**: `writeAtomicJson()` ghi file temp → rename. Tránh torn writes khi process crash giữa chừng.
35
+ **Current pi-crew**: `JSON.stringify` + `writeFileSync` trực tiếp — rủi ro torn write.
36
+ **Action**: Implement `writeAtomicJson()` utility. Apply cho status.json, manifest writes.
37
+
38
+ ### F5. Two-Level Process Hierarchy cho Async ⭐
39
+ **Source**: pi-subagents `subagent-runner.ts`
40
+ **Finding**: Orchestrator spawn runner (detached) → runner spawn Pi children. Runner track PIDs, write status.json. Orchestrator poll status.json.
41
+ **Current pi-crew**: Async run chỉ fire background, không có intermediate runner process.
42
+ **Action**: (Low priority) Xem xét thêm intermediate runner cho reliable async tracking.
43
+
44
+ ### F6. Stale Run Reconciler — Three-Phase Pattern ⭐⭐
45
+ **Source**: pi-subagents `stale-run-reconciler.ts`
46
+ **Finding**: 3-phase: (1) check result file exists → use it, (2) check PID liveness, (3) for dead PIDs → repair immediately, for alive PIDs → fail only if stale > 24h.
47
+ **Current pi-crew**: Có `crash-recovery.ts` nhưng chưa có full 3-phase reconciliation.
48
+ **Action**: Nâng cấp crash recovery với 3-phase pattern: result-check → PID-check → stale-threshold.
49
+
50
+ ---
51
+
52
+ ## Axis G: Extension API Adoption
53
+
54
+ ### G1. `session_before_compact` Hook — Custom Compaction ⭐⭐⭐
55
+ **Source**: pi-mono `extensions/types.ts`
56
+ **Finding**: Hook `session_before_compact` returns `{ cancel?, compaction?: CompactionResult }`. Extensions có thể **thay thế hoàn toàn** compaction logic — bao gồm structured details (artifact indices, version markers). Đây là extensibility point mạnh nhất.
57
+ **Current pi-crew**: `compaction-guard.ts` chỉ phát hiện compaction events, không can thiệp.
58
+ **Action**: Implement `session_before_compact` handler để cung cấp structured compaction thay vì raw text summarization. Preserve team run state across compaction.
59
+
60
+ ### G2. `session_before_switch` Hook — Pre-Switch State Save ⭐⭐
61
+ **Source**: pi-mono `extensions/types.ts`
62
+ **Finding**: `session_before_switch` fires trước khi Pi switches session (new/resume). Return `{ cancel? }`. Pi-crew có thể save in-memory state → file trước khi switch.
63
+ **Current pi-crew**: Không hook vào session switch. State mất khi switch.
64
+ **Action**: Hook `session_before_switch` để flush pending deliveries và save subagent state snapshot.
65
+
66
+ ### G3. `resources_discover` Hook — Dynamic Agent/Team Discovery ⭐⭐⭐
67
+ **Source**: pi-mono `extensions/types.ts`
68
+ **Finding**: `resources_discover` event returns `{ additionalSkillPaths?, additionalPromptPaths?, additionalThemePaths? }`. Extensions có thể dynamically inject resources.
69
+ **Current pi-crew**: Discovery chỉ đọc từ filesystem. Không dynamic.
70
+ **Action**: Hook `resources_discover` để inject team-specific skills/prompts dựa trên config. VD: auto-inject `safe-bash` skill cho projects có `package.json`.
71
+
72
+ ### G4. `before_agent_start` — System Prompt Override ⭐⭐
73
+ **Source**: pi-mono `extensions/types.ts`
74
+ **Finding**: Can inject `message` and/or override `systemPrompt` before agent loop begins. Powerful for child agents.
75
+ **Current pi-crew**: Child Pi system prompt built từ task packet, không override qua hook.
76
+ **Action**: (Low priority — already handled via task packet prompt builder)
77
+
78
+ ### G5. `tool_result` Event — Post-Execution Output Modification ⭐
79
+ **Source**: pi-mono `extensions/types.ts`
80
+ **Finding**: Can modify tool output `content`, `details`, `isError` after execution. Useful for enrichment/filtering.
81
+ **Current pi-crew**: Không hook vào tool results.
82
+ **Action**: Hook `tool_result` cho `team` tool để enrich output với structured metadata (run URL, artifact count, duration).
83
+
84
+ ### G6. `input` Event — User Input Interception ⭐
85
+ **Source**: pi-mono `extensions/types.ts`
86
+ **Finding**: Can transform user input text/images or fully handle it (`action: "continue" | "transform" | "handled"`).
87
+ **Current pi-crew**: Không intercept user input.
88
+ **Action**: Hook `input` để detect `@team-name` mentions → auto-route to team run.
89
+
90
+ ---
91
+
92
+ ## Axis H: Observability & Reliability Gaps
93
+
94
+ ### H1. Completion Mutation Guard ⭐⭐
95
+ **Source**: pi-subagents `completion-guard.ts`
96
+ **Finding**: Sau khi subagent trả về "success", check xem nếu task là "implementation" nhưng **không có file edits** → mutate completion thành warning. Tránh false-positive completions.
97
+ **Current pi-crew**: Task complete khi child Pi exits 0. Không verify actual work done.
98
+ **Action**: Implement completion guard: verify artifacts exist, files changed, hoặc output non-trivial.
99
+
100
+ ### H2. Snapshot-Before-Emit Pattern ⭐
101
+ **Source**: pi-subagents `execution.ts`
102
+ **Finding**: Progress object snapshotted (spread) trước mỗi `onUpdate` callback. Tránh mutation during callback.
103
+ **Current pi-crew**: Task state mutated directly, events emit references.
104
+ **Action**: Snapshot task state trước khi emit events để avoid race conditions.
105
+
106
+ ### H3. Intercom Bridge với Delivery Confirmation ⭐⭐
107
+ **Source**: pi-subagents `intercom-bridge.ts`
108
+ **Finding**: Bidirectional intercom: `deliverSubagentResultIntercomEvent()` emit event → wait for confirmation với 500ms timeout. Agent injection pattern: mutate config để add `contact_supervisor` tool + instructions.
109
+ **Current pi-crew**: Có `supervisor-contact.ts` parse từ stdout, nhưng không có bidirectional confirmation.
110
+ **Action**: Nếu Pi expose intercom API, upgrade supervisor contact thành bidirectional với delivery confirmation.
111
+
112
+ ### H4. writeAtomicJson Utility ⭐⭐
113
+ **Source**: pi-subagents (pervasive)
114
+ **Finding**: Atomic file writes used everywhere: status, manifest, results. Pattern: `writeFileSync(path + ".tmp", data) → renameSync(path + ".tmp", path)`.
115
+ **Action**: Shared utility trong `src/utils/atomic-write.ts`.
116
+
117
+ ---
118
+
119
+ ## Axis I: Developer Experience
120
+
121
+ ### I1. Tool Presentation — Emoji + Grouping ⭐
122
+ **Source**: pi-crew ref `tool-presentation.ts`
123
+ **Finding**: `crew_spawn` renders "🚀 Spawning {agent}...", `crew_respond` renders "💬 Sending response...". Grouped tool calls have custom collapse UI.
124
+ **Current pi-crew**: Tool output plain text.
125
+ **Action**: Add emoji prefixes và structured formatting cho tool output.
126
+
127
+ ### I2. renderCall/renderResult cho Team Tool ⭐⭐
128
+ **Source**: pi-mono `tools/index.ts`
129
+ **Finding**: `ToolDefinition` supports `renderCall` và `renderResult` callbacks returning TUI Components. Allows rich rendering in Pi terminal UI.
130
+ **Current pi-crew**: Không có custom renderers.
131
+ **Action**: Implement `renderCall` cho `team` tool để show spinner/agent-list thay vì raw JSON. Implement `renderResult` để show summary dashboard.
132
+
133
+ ### I3. Prompt Snippet + Guidelines trong Tool Definition ⭐
134
+ **Source**: pi-mono `tools/index.ts`
135
+ **Finding**: `promptSnippet` — one-liner in system prompt. `promptGuidelines` — bullets appended to system prompt. Tools without `promptSnippet` are excluded from LLM awareness.
136
+ **Current pi-crew**: Tool description chỉ trong JSON schema description.
137
+ **Action**: Khi Pi hỗ trợ `promptSnippet`/`promptGuidelines` trong custom tools, adopt để improve LLM tool usage.
138
+
139
+ ---
140
+
141
+ ## Priority Matrix
142
+
143
+ | ID | Feature | Impact | Effort | Priority |
144
+ |---|---|---|---|---|
145
+ | F1 | Process-level singleton | High | High | P1 |
146
+ | F2 | Fire-and-forget spawn | Medium | Medium | P2 |
147
+ | F3 | Final drain window | Medium | Low | P2 |
148
+ | F4 | Atomic JSON writes | High | Low | P1 |
149
+ | F5 | Two-level async hierarchy | Low | High | P3 |
150
+ | F6 | 3-phase stale reconciliation | Medium | Medium | P2 |
151
+ | G1 | Custom compaction hook | High | Medium | P1 |
152
+ | G2 | Pre-switch state save | Medium | Low | P2 |
153
+ | G3 | Dynamic resource discovery | High | Medium | P1 |
154
+ | G4 | System prompt override | Low | Low | P3 |
155
+ | G5 | Post-execution output mod | Low | Low | P3 |
156
+ | G6 | User input interception | Medium | Medium | P3 |
157
+ | H1 | Completion mutation guard | High | Low | P1 |
158
+ | H2 | Snapshot-before-emit | Medium | Low | P2 |
159
+ | H3 | Bidirectional intercom | Medium | High | P3 |
160
+ | H4 | writeAtomicJson utility | High | Low | P1 |
161
+ | I1 | Tool presentation emojis | Low | Low | P3 |
162
+ | I2 | Custom TUI renderers | High | High | P2 (when API available) |
163
+ | I3 | Prompt snippet/guidelines | Medium | Low | P3 (when API available) |
164
+
165
+ ---
166
+
167
+ ## Recommended Implementation Order
168
+
169
+ ### Phase 11a: Reliability Foundations (F4 + H4 + H1 + H2)
170
+ - `src/utils/atomic-write.ts` — writeAtomicJson utility
171
+ - Apply atomic writes to all manifest/state writes
172
+ - Completion mutation guard for task results
173
+ - Snapshot-before-emit for task state events
174
+
175
+ ### Phase 11b: Extension API Hooks (G1 + G2 + G3)
176
+ - `session_before_compact` handler — structured compaction
177
+ - `session_before_switch` handler — pre-switch state flush
178
+ - `resources_discover` handler — dynamic skill/prompt injection
179
+
180
+ ### Phase 11c: Runtime Architecture (F1 + F2 + F3)
181
+ - Refactor SubagentManager → process-level singleton
182
+ - Fire-and-forget spawn pattern
183
+ - Final drain window for child process cleanup
184
+
185
+ ### Phase 11d: Reconciliation & Recovery (F6 + H3)
186
+ - 3-phase stale run reconciliation
187
+ - Upgrade supervisor contact toward bidirectional (if API available)
188
+
189
+ ---
190
+
191
+ ## Already Implemented (Phase 10a-10d) ✅
192
+ - DeliveryCoordinator (session-aware routing with queue/flush)
193
+ - OverflowRecoveryTracker (compaction → retry state machine)
194
+ - Foreign-aware cancel (ownership detection)
195
+ - Session resource cleanup adapter
196
+ - Interactive subagent waiting state + respond action
197
+ - Supervisor contact parsing from child stdout
198
+ - Parent model inheritance
199
+ - Session-scoped run listing
200
+ - Observability metrics for overflow/waiting/supervisor
201
+ - Skills override + .pi/pi-crew.json config path