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,24 +1,225 @@
1
- ---
2
- name: git-master
3
- description: Commit and release hygiene for safe version-control work. Use when preparing commits, releases, version bumps, publishing, or validating package installation.
4
- ---
5
-
6
- # git-master
7
-
8
- Use this skill for commit/release hygiene.
9
-
10
- ## Commit rules
11
-
12
- - Check `git status --short` before staging.
13
- - Stage only files related to the current task.
14
- - Keep commits independently revertible.
15
- - Use concise imperative commit messages.
16
- - Do not push or publish unless explicitly requested.
17
- - Do not include secrets, OTPs, local temp files, or generated tarballs.
18
-
19
- ## Release rules
20
-
21
- - Run the required verification gate before version bumps.
22
- - Bump version only after tests pass and user confirms publish intent.
23
- - Verify registry after publish with `npm view`.
24
- - Install through `pi install npm:pi-crew` when validating Pi package loading.
1
+ ---
2
+ name: git-master
3
+ description: Commit and release hygiene for safe version-control work. Use when preparing commits, releases, version bumps, publishing, or validating package installation.
4
+ ---
5
+
6
+ # git-master
7
+
8
+ Use this skill for commit/release hygiene. This skill covers git workflow from local changes to published releases.
9
+
10
+ ## Pre-commit Checklist
11
+
12
+ Before every commit:
13
+
14
+ 1. Run `git status --short` — understand what changed
15
+ 2. Stage only files related to the current task
16
+ 3. Review staged diff with `git diff --staged`
17
+ 4. Check for unintended changes (generated files, temp files, secrets)
18
+ 5. Ensure tests pass locally before committing
19
+
20
+ ## Commit Rules
21
+
22
+ - **Independent commits**: Each commit should be self-contained and revertible. Don't mix unrelated changes.
23
+ - **Concise messages**: Use imperative mood, 50 chars or less for subject. Add body for context.
24
+ - **Format**: `type(scope): subject` where type is `fix`, `feat`, `chore`, `docs`, `test`, `refactor`
25
+ - **Do not include**: secrets, OTPs, local temp files, `node_modules`, `dist/`, `*.log`, `*.tmp`
26
+ - **Do not push/publish** unless explicitly requested
27
+ - **Verify** before staging large generated files (tarballs, build outputs)
28
+
29
+ ## Commit Message Format
30
+
31
+ ```
32
+ type(scope): short description (50 chars max)
33
+
34
+ Longer description if needed. Explain WHY the change was made,
35
+ not just what changed. Reference issues/PRs if applicable.
36
+
37
+ Refs: #123
38
+ ```
39
+
40
+ **Examples:**
41
+ ```
42
+ fix(live-agent): prevent cross-workspace agent access
43
+ feat(widget): add snapshot cache with 500ms TTL
44
+ docs(skills): add event-log-tracing skill
45
+ chore(tests): add integration test for reconcileAllStaleRuns
46
+ ```
47
+
48
+ ## Branch Naming
49
+
50
+ | Pattern | Use case | Example |
51
+ |---|---|---|
52
+ | `fix/<description>` | Bug fixes | `fix/ghost-run-display` |
53
+ | `feat/<description>` | New features | `feat/skill-templates` |
54
+ | `docs/<description>` | Documentation | `docs/skills-deep-research` |
55
+ | `chore/<description>` | Tooling, CI | `chore/update-ci-node22` |
56
+ | `hotfix/<description>` | Urgent production fixes | `hotfix/secret-leak` |
57
+
58
+ ## Rollback Procedures
59
+
60
+ ### Revert last commit (safe, keeps history)
61
+ ```bash
62
+ git revert HEAD
63
+ git push
64
+ ```
65
+
66
+ ### Reset to known-good state (rewrites history)
67
+ ```bash
68
+ # Soft: keep changes staged
69
+ git reset --soft HEAD~1
70
+
71
+ # Mixed: keep changes unstaged
72
+ git reset HEAD~1
73
+
74
+ # Hard: discard all changes (DESTRUCTIVE)
75
+ git reset --hard <commit-hash>
76
+ ```
77
+
78
+ ### Checkout single file from a past commit
79
+ ```bash
80
+ git checkout <commit-hash> -- path/to/file
81
+ ```
82
+
83
+ ### Recover from a bad reset
84
+ ```bash
85
+ git reflog # find the commit before reset
86
+ git reset --hard <reflog-entry>
87
+ ```
88
+
89
+ ## Regression Hunting with git bisect
90
+
91
+ When a regression is found and the culprit commit is unknown:
92
+
93
+ ```bash
94
+ git bisect start
95
+ git bisect bad # current commit is bad
96
+ git bisect good <known-good> # a commit that worked
97
+
98
+ # git checks out a middle commit
99
+ # test it: if bad, mark it; if good, mark it
100
+ # repeat until culprit found
101
+ git bisect bad # or: git bisect good
102
+
103
+ # after bisect completes:
104
+ git bisect reset # return to original branch
105
+
106
+ # culprit is the first bad commit in the range
107
+ ```
108
+
109
+ ## Amend and Force-Push
110
+
111
+ ### Amend last commit (before push)
112
+ ```bash
113
+ # Make additional changes
114
+ git add .
115
+ git commit --amend --no-edit # amend without changing message
116
+ git commit --amend -m "new message" # or with new message
117
+ ```
118
+
119
+ ### Force-push (DESTRUCTIVE — only when necessary)
120
+ ```bash
121
+ # Only force-push to feature branches, never main/master
122
+ git push --force-with-lease origin <branch>
123
+
124
+ # --force-with-lease is safer: fails if someone else pushed
125
+ # Regular --force can overwrite others' work
126
+ ```
127
+
128
+ **When safe to force-push:**
129
+ - Your feature branch that only you use
130
+ - After `git rebase` (rebase rewrites commit history)
131
+ - After amending commits not yet pushed
132
+
133
+ **When to NEVER force-push:**
134
+ - Shared branches (main, master, develop)
135
+ - Branch with active PR
136
+ - Branch others may have based work on
137
+
138
+ ## Tag and Release
139
+
140
+ ### Create a version tag
141
+ ```bash
142
+ git tag -a v1.2.3 -m "Release 1.2.3: Add skill templates"
143
+ git push origin v1.2.3
144
+ ```
145
+
146
+ ### Tag after version bump
147
+ ```bash
148
+ git add CHANGELOG.md package.json
149
+ git commit -m "chore: bump version to 1.2.3"
150
+ git tag -a 1.2.3 -m "Version 1.2.3"
151
+ git push && git push --tags
152
+ ```
153
+
154
+ ### List and verify tags
155
+ ```bash
156
+ git tag -l
157
+ git show <tag-name>
158
+ ```
159
+
160
+ ## Version Bump Sequence
161
+
162
+ 1. Verify: `npx tsc --noEmit` passes
163
+ 2. Verify: `npm test` passes
164
+ 3. Update `CHANGELOG.md` with changes for this version
165
+ 4. Update `package.json` version field
166
+ 5. Commit: `chore: bump version to X.Y.Z`
167
+ 6. Tag: `git tag -a X.Y.Z -m "Release X.Y.Z"`
168
+ 7. Publish: `npm publish --access public`
169
+ 8. Verify: `npm view pi-crew` shows new version
170
+
171
+ ## Stash Patterns
172
+
173
+ ### Stash work-in-progress
174
+ ```bash
175
+ git stash -u # include untracked files
176
+ git stash push -m "WIP: feature X" # with message
177
+ ```
178
+
179
+ ### Apply and manage stashes
180
+ ```bash
181
+ git stash list # show all stashes
182
+ git stash pop # apply latest and remove
183
+ git stash apply # apply latest, keep in stash
184
+ git stash apply stash@{2} # apply specific stash
185
+ git stash drop # remove latest stash
186
+ git stash clear # remove all stashes
187
+ ```
188
+
189
+ ## Anti-patterns
190
+
191
+ - **Committing generated files**: Don't commit `dist/`, `build/`, `*.min.js` unless intentional
192
+ - **Large commits**: If >500 lines changed, consider splitting
193
+ - **Committing with unverified tests**: Run tests before commit
194
+ - **Force-pushing main/master**: Never
195
+ - **Committing secrets**: Check for `API_KEY`, `TOKEN`, `PASSWORD`, `SECRET` before staging
196
+ - **Unclear messages**: "fix stuff" is not a valid commit message
197
+
198
+ ---
199
+
200
+ ## Source patterns
201
+
202
+ - `src/state/atomic-write.ts` — atomic git-safe file writes
203
+ - `src/worktree/worktree-manager.ts` — worktree git operations
204
+ - `src/utils/conflict-detect.ts` — git conflict detection
205
+ - `package.json` — version field, publish scripts
206
+
207
+ ---
208
+
209
+ ## Verification
210
+
211
+ ```bash
212
+ cd pi-crew
213
+ git status --short
214
+ git log --oneline -5
215
+ git diff --staged --stat
216
+
217
+ # TypeScript
218
+ npx tsc --noEmit
219
+
220
+ # Tests
221
+ npm test
222
+
223
+ # Package dry-run before publish
224
+ npm pack --dry-run
225
+ ```
@@ -0,0 +1,192 @@
1
+ ---
2
+ name: live-agent-lifecycle
3
+ description: Live agent registration, workspace isolation, termination, and eviction workflow. Use when tracking live agents, debugging ghost agents, or understanding workspace boundaries.
4
+ ---
5
+
6
+ # live-agent-lifecycle
7
+
8
+ Live agents are real-time, in-memory worker sessions managed by `LiveAgentManager` (`src/runtime/live-agent-manager.ts`). They are distinct from `CrewAgentRecord` files on disk — live agents provide real-time activity (tool names, response text, turn count) while agent records are durable snapshots.
9
+
10
+ ## Architecture
11
+
12
+ **LiveAgentHandle** is the core data structure:
13
+
14
+ ```typescript
15
+ interface LiveAgentHandle {
16
+ agentId: string; // unique per run
17
+ taskId: string; // maps to task
18
+ runId: string; // run this agent belongs to
19
+ workspaceId: string; // manifest.cwd — workspace boundary
20
+ role?: string;
21
+ agent?: string;
22
+ modelName?: string;
23
+ session: LiveSessionHandle; // steer/prompt/abort/dispose
24
+ status: CrewAgentRecord["status"];
25
+ pendingSteers: string[];
26
+ pendingFollowUps: string[];
27
+ pendingMessages: IrcMessage[];
28
+ activity: LiveAgentActivity; // real-time tracking
29
+ createdAt: string;
30
+ updatedAt: string;
31
+ }
32
+ ```
33
+
34
+ The in-memory `liveAgents` Map stores all active handles. It is never persisted — on Pi restart, the Map is empty and agents are re-created from agent records.
35
+
36
+ ---
37
+
38
+ ## Registration
39
+
40
+ `registerLiveAgent(input, eventLogFn?, eventsPath?)` is called when a live session worker starts. It:
41
+
42
+ 1. Creates or reuses the handle in `liveAgents` Map
43
+ 2. Preserves pending steers/followups from previous sessions
44
+ 3. Emits `live_agent.registered` event to events.jsonl
45
+ 4. Flushes any pending steers/followups immediately if the session already has the methods
46
+
47
+ Key caller sites:
48
+ - `live-session-runtime.ts` — when a live session agent starts
49
+ - `live-executor.ts` — when spawning a live task
50
+ - (workspaceId is passed through the entire call chain)
51
+
52
+ ---
53
+
54
+ ## Workspace Isolation
55
+
56
+ **`workspaceId: string`** field is the workspace boundary. Set to `manifest.cwd` at registration time.
57
+
58
+ **Why it matters:** When Pi has multiple workspace folders open, agents from workspace A must not be visible or controllable from workspace B. Every handle carries its origin workspace.
59
+
60
+ **Enforcement in api.ts:**
61
+ - `listActiveLiveAgentsByWorkspace(workspaceId)` — filters by workspace
62
+ - Steering/follow-up operations check `live.workspaceId !== manifest.cwd` → reject with error
63
+ - Widget queries use `listLiveAgentsByWorkspace(manifest.cwd)` so each workspace only sees its own agents
64
+
65
+ **Enforcement in live-session-runtime.ts:**
66
+ - Config carries `workspaceId` from `TeamContext.workspaceId`
67
+ - Session creation passes workspaceId through
68
+
69
+ ---
70
+
71
+ ## Activity Tracking
72
+
73
+ `LiveAgentActivity` provides real-time data without reading disk:
74
+
75
+ ```typescript
76
+ interface LiveAgentActivity {
77
+ activeTools: Map<string, string>; // toolName → description
78
+ toolUses: number; // total invocations
79
+ turnCount: number;
80
+ maxTurns?: number;
81
+ responseText: string; // last 200 chars
82
+ compactionCount: number;
83
+ startedAtMs: number;
84
+ completedAtMs: number; // 0 = still running
85
+ modelName?: string;
86
+ }
87
+ ```
88
+
89
+ Tracking functions (called from live-executor):
90
+ - `trackLiveAgentToolStart(agentId, toolName)` — adds tool to activeTools
91
+ - `trackLiveAgentToolEnd(agentId, toolName)` — removes tool from activeTools
92
+ - `trackLiveAgentTurnEnd(agentId, compaction?)` — increments turn, clears tools
93
+ - `trackLiveAgentResponseText(agentId, text)` — stores last 200 chars
94
+ - `markLiveAgentCompleted(agentId)` — sets completedAtMs
95
+
96
+ ---
97
+
98
+ ## Termination
99
+
100
+ `terminateLiveAgent(agentIdOrTaskId, status?, eventLogFn?, eventsPath?)` is the canonical termination path:
101
+
102
+ 1. Sets handle status (default: "stopped")
103
+ 2. Emits `live_agent.terminated` event to events.jsonl
104
+ 3. Calls `session.abort()` to stop the child
105
+ 4. Calls `session.dispose()` to clean up
106
+ 5. Removes from `liveAgents` Map
107
+
108
+ **Termination call sites (4 total):**
109
+
110
+ | Location | When |
111
+ |---|---|
112
+ | `team-runner.ts` (run complete) | All agents terminated when run succeeds or fails |
113
+ | `team-runner.ts` (task complete) | Per-task termination when `terminateOnTaskComplete=true` |
114
+ | `background-runner.ts` (catch) | Termination in finally block after background run |
115
+ | `cancel.ts` | Termination when user cancels a run |
116
+ | `respond.ts` | Termination when responding to waiting tasks |
117
+ | `crash-recovery.ts` (purgeStale) | Termination when cleaning up orphaned runs |
118
+ | `crash-recovery.ts` (reconcile) | Termination when reconciling stale runs |
119
+
120
+ `terminateLiveAgentsForRun(runId, status?, eventLogFn?, eventsPath?)` terminates all agents for a run in parallel.
121
+
122
+ ---
123
+
124
+ ## Eviction
125
+
126
+ **Stale handles** are handles whose status is terminal (not running/queued/waiting) and older than 10 minutes. `evictStaleLiveAgentHandles(now?)` removes them:
127
+
128
+ ```typescript
129
+ const STALE_HANDLE_MS = 10 * 60 * 1000;
130
+ // Only evict terminal-status handles
131
+ if (handle.status !== "running" && handle.status !== "queued" && handle.status !== "waiting") {
132
+ const age = now - new Date(handle.updatedAt).getTime();
133
+ if (age > STALE_HANDLE_MS) {
134
+ liveAgents.delete(agentId);
135
+ safeDisposeLiveSession(handle);
136
+ }
137
+ }
138
+ ```
139
+
140
+ **Triggered on every widget refresh** in `crew-widget.ts`:
141
+ ```typescript
142
+ evictStaleLiveAgentHandles(); // called at start of activeWidgetRuns()
143
+ ```
144
+
145
+ This prevents the Map from growing indefinitely with completed agents.
146
+
147
+ ---
148
+
149
+ ## Live Agent → Agent Record Sync
150
+
151
+ On task completion, `upsertCrewAgent(manifest, recordFromTask(manifest, task, "live-session"))` is called to persist the final status to disk (`agents.json`, `agents/<id>/status.json`). This ensures the widget sees the correct status even after the live agent handle is evicted.
152
+
153
+ The sync chain:
154
+ ```
155
+ task.completed → upsertCrewAgent → agents.json updated
156
+ → live_agent.terminated event logged
157
+ → (later) evictStaleLiveAgentHandles → handle removed from Map
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Anti-patterns
163
+
164
+ - **Missing termination on error path**: If a live agent crashes and `terminateLiveAgent` is not called, the handle stays in the Map forever with status "running". Use `finally` blocks or crash-recovery to ensure termination.
165
+ - **Stale handle accumulation**: Without `evictStaleLiveAgentHandles`, completed agents accumulate in the Map. This is mitigated by calling eviction on every widget refresh.
166
+ - **Cross-workspace access**: Never call steer/follow-up/stop/resume on a handle whose `workspaceId` differs from the current workspace. Always check `live.workspaceId === manifest.cwd`.
167
+ - **Losing activity on session switch**: Live agents are in-memory only. On Pi session switch/restart, all activity tracking is lost. Agent records on disk persist.
168
+
169
+ ---
170
+
171
+ ## Source patterns
172
+
173
+ - `src/runtime/live-agent-manager.ts` — register, terminate, evict, workspaceId
174
+ - `src/runtime/live-session-runtime.ts` — 4 lifecycle gaps fixed
175
+ - `src/runtime/team-runner.ts` — terminate on success/fail
176
+ - `src/runtime/background-runner.ts` — terminate on catch
177
+ - `src/runtime/crash-recovery.ts` — terminate in purge+reconcile
178
+ - `src/extension/team-tool/api.ts` — workspaceId filter
179
+ - `src/extension/team-tool/cancel.ts` — terminate on cancel
180
+ - `src/extension/team-tool/respond.ts` — terminate on respond
181
+ - `src/ui/crew-widget.ts` — evictStaleLiveAgentHandles on refresh
182
+
183
+ ---
184
+
185
+ ## Verification
186
+
187
+ ```bash
188
+ cd pi-crew
189
+ npx tsc --noEmit
190
+ node --experimental-strip-types --test test/unit/live-agent-manager.test.ts test/unit/live-session-runtime.test.ts test/unit/live-agent-control.test.ts
191
+ npm test
192
+ ```