pi-crew 0.2.3 → 0.2.5

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 (348) hide show
  1. package/AGENTS.md +57 -32
  2. package/CHANGELOG.md +466 -448
  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 -592
  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-review-round4-2026-05-13.md +107 -0
  25. package/docs/implementation-plan-top3.md +333 -0
  26. package/docs/live-mailbox-runtime.md +36 -36
  27. package/docs/next-upgrade-roadmap.md +808 -808
  28. package/docs/oh-my-pi-research.md +509 -0
  29. package/docs/perf/baseline-2026-05.md +113 -0
  30. package/docs/perf/final-report-2026-05.md +206 -0
  31. package/docs/perf/sprint-1-report.md +71 -0
  32. package/docs/perf/sprint-2-report.md +81 -0
  33. package/docs/perf/sprint-2.5-report.md +53 -0
  34. package/docs/perf/sprint-3-report.md +36 -0
  35. package/docs/perf/sprint-4-report.md +47 -0
  36. package/docs/perf/sprint-5-report.md +51 -0
  37. package/docs/perf/sprint-6-report.md +94 -0
  38. package/docs/perf/sprint-7-report.md +74 -0
  39. package/docs/perf/upgrade-plan-2026-05.md +147 -0
  40. package/docs/pi-subagents3-deep-analysis.md +508 -0
  41. package/docs/product/README.md +31 -0
  42. package/docs/product/platform.md +27 -0
  43. package/docs/product/runtime-safety.md +37 -0
  44. package/docs/product/team-run.md +39 -0
  45. package/docs/product/team-tool.md +37 -0
  46. package/docs/publishing.md +65 -65
  47. package/docs/resource-formats.md +134 -134
  48. package/docs/runtime-analysis-child-vs-live.md +171 -0
  49. package/docs/runtime-flow.md +148 -148
  50. package/docs/runtime-migration-in-process-analysis.md +250 -0
  51. package/docs/stories/README.md +30 -0
  52. package/docs/stories/backlog.md +36 -0
  53. package/docs/templates/decision.md +27 -0
  54. package/docs/templates/story.md +44 -0
  55. package/docs/templates/validation-report.md +32 -0
  56. package/docs/usage.md +238 -238
  57. package/index.ts +7 -6
  58. package/install.mjs +65 -65
  59. package/package.json +107 -100
  60. package/schema.json +222 -222
  61. package/skills/child-pi-spawning/SKILL.md +213 -0
  62. package/skills/context-artifact-hygiene/SKILL.md +32 -0
  63. package/skills/event-log-tracing/SKILL.md +299 -0
  64. package/skills/git-master/SKILL.md +225 -24
  65. package/skills/live-agent-lifecycle/SKILL.md +192 -0
  66. package/skills/mailbox-interactive/SKILL.md +300 -19
  67. package/skills/model-routing-context/SKILL.md +94 -0
  68. package/skills/multi-perspective-review/SKILL.md +88 -0
  69. package/skills/read-only-explorer/SKILL.md +250 -26
  70. package/skills/safe-bash/SKILL.md +307 -21
  71. package/skills/verification-before-done/SKILL.md +11 -2
  72. package/skills/widget-rendering/SKILL.md +258 -0
  73. package/skills/workspace-isolation/SKILL.md +202 -0
  74. package/skills/worktree-isolation/SKILL.md +202 -18
  75. package/src/adapters/claude-adapter.ts +25 -25
  76. package/src/adapters/codex-adapter.ts +21 -21
  77. package/src/adapters/cursor-adapter.ts +17 -17
  78. package/src/adapters/export-util.ts +137 -137
  79. package/src/adapters/index.ts +15 -15
  80. package/src/adapters/registry.ts +18 -18
  81. package/src/adapters/types.ts +23 -23
  82. package/src/agents/agent-config.ts +38 -38
  83. package/src/agents/agent-serializer.ts +38 -38
  84. package/src/agents/discover-agents.ts +121 -118
  85. package/src/config/config.ts +740 -858
  86. package/src/config/defaults.ts +96 -96
  87. package/src/config/drift-detector.ts +211 -211
  88. package/src/config/markers.ts +327 -327
  89. package/src/config/resilient-parser.ts +109 -108
  90. package/src/config/suggestions.ts +74 -74
  91. package/src/config/types.ts +199 -0
  92. package/src/extension/async-notifier.ts +123 -89
  93. package/src/extension/autonomous-policy.ts +169 -169
  94. package/src/extension/cross-extension-rpc.ts +104 -104
  95. package/src/extension/help.ts +47 -47
  96. package/src/extension/import-index.ts +69 -69
  97. package/src/extension/management.ts +395 -382
  98. package/src/extension/notification-router.ts +116 -116
  99. package/src/extension/notification-sink.ts +51 -51
  100. package/src/extension/project-init.ts +168 -168
  101. package/src/extension/register.ts +859 -668
  102. package/src/extension/registration/artifact-cleanup.ts +15 -15
  103. package/src/extension/registration/command-utils.ts +54 -54
  104. package/src/extension/registration/commands.ts +559 -452
  105. package/src/extension/registration/compaction-guard.ts +125 -125
  106. package/src/extension/registration/subagent-helpers.ts +102 -102
  107. package/src/extension/registration/subagent-tools.ts +220 -159
  108. package/src/extension/registration/team-tool.ts +159 -99
  109. package/src/extension/registration/viewers.ts +29 -0
  110. package/src/extension/result-watcher.ts +128 -128
  111. package/src/extension/run-bundle-schema.ts +89 -89
  112. package/src/extension/run-export.ts +73 -73
  113. package/src/extension/run-import.ts +84 -84
  114. package/src/extension/run-index.ts +94 -94
  115. package/src/extension/run-maintenance.ts +142 -142
  116. package/src/extension/session-summary.ts +8 -8
  117. package/src/extension/team-manager-command.ts +96 -96
  118. package/src/extension/team-recommendation.ts +188 -188
  119. package/src/extension/team-tool/api.ts +5 -2
  120. package/src/extension/team-tool/cancel.ts +224 -209
  121. package/src/extension/team-tool/config-patch.ts +36 -36
  122. package/src/extension/team-tool/context.ts +60 -60
  123. package/src/extension/team-tool/doctor.ts +242 -242
  124. package/src/extension/team-tool/handle-settings.ts +421 -195
  125. package/src/extension/team-tool/inspect.ts +41 -41
  126. package/src/extension/team-tool/lifecycle-actions.ts +139 -139
  127. package/src/extension/team-tool/parallel-dispatch.ts +156 -156
  128. package/src/extension/team-tool/plan.ts +19 -19
  129. package/src/extension/team-tool/respond.ts +112 -111
  130. package/src/extension/team-tool/run.ts +246 -229
  131. package/src/extension/team-tool/status.ts +110 -110
  132. package/src/extension/team-tool-types.ts +13 -13
  133. package/src/extension/team-tool.ts +344 -344
  134. package/src/extension/tool-result.ts +16 -16
  135. package/src/extension/validate-resources.ts +77 -77
  136. package/src/hooks/registry.ts +61 -61
  137. package/src/hooks/types.ts +40 -40
  138. package/src/i18n.ts +184 -184
  139. package/src/observability/correlation.ts +35 -35
  140. package/src/observability/event-to-metric.ts +68 -68
  141. package/src/observability/exporters/adapter.ts +30 -30
  142. package/src/observability/exporters/otlp-exporter.ts +106 -92
  143. package/src/observability/exporters/prometheus-exporter.ts +54 -54
  144. package/src/observability/metric-registry.ts +87 -87
  145. package/src/observability/metric-retention.ts +54 -54
  146. package/src/observability/metric-sink.ts +81 -56
  147. package/src/observability/metrics-primitives.ts +167 -167
  148. package/src/prompt/prompt-runtime.ts +72 -72
  149. package/src/runtime/adaptive-plan.ts +338 -0
  150. package/src/runtime/agent-control.ts +169 -169
  151. package/src/runtime/agent-memory.ts +72 -72
  152. package/src/runtime/agent-observability.ts +114 -114
  153. package/src/runtime/async-marker.ts +26 -26
  154. package/src/runtime/async-runner.ts +153 -153
  155. package/src/runtime/attention-events.ts +28 -28
  156. package/src/runtime/auto-resume.ts +100 -100
  157. package/src/runtime/background-runner.ts +122 -89
  158. package/src/runtime/cancellation.ts +61 -61
  159. package/src/runtime/capability-inventory.ts +116 -116
  160. package/src/runtime/child-pi-pool.ts +68 -0
  161. package/src/runtime/child-pi.ts +541 -461
  162. package/src/runtime/code-summary.ts +247 -247
  163. package/src/runtime/compaction-summary.ts +271 -271
  164. package/src/runtime/concurrency.ts +58 -58
  165. package/src/runtime/crash-recovery.ts +317 -301
  166. package/src/runtime/crew-agent-records.ts +379 -281
  167. package/src/runtime/crew-agent-runtime.ts +60 -60
  168. package/src/runtime/cross-extension-rpc.ts +72 -0
  169. package/src/runtime/custom-tools/irc-tool.ts +201 -201
  170. package/src/runtime/custom-tools/submit-result-tool.ts +90 -90
  171. package/src/runtime/deadletter.ts +47 -47
  172. package/src/runtime/delivery-coordinator.ts +176 -176
  173. package/src/runtime/delta-conflict.ts +360 -360
  174. package/src/runtime/diagnostic-export.ts +102 -102
  175. package/src/runtime/direct-run.ts +35 -35
  176. package/src/runtime/effectiveness.ts +82 -81
  177. package/src/runtime/errors/crew-errors.ts +166 -0
  178. package/src/runtime/event-stream-bridge.ts +92 -92
  179. package/src/runtime/foreground-control.ts +82 -82
  180. package/src/runtime/green-contract.ts +46 -46
  181. package/src/runtime/group-join.ts +234 -106
  182. package/src/runtime/heartbeat-watcher.ts +145 -124
  183. package/src/runtime/iteration-hooks.ts +267 -267
  184. package/src/runtime/live-agent-control.ts +88 -88
  185. package/src/runtime/live-agent-manager.ts +377 -179
  186. package/src/runtime/live-control-realtime.ts +36 -36
  187. package/src/runtime/live-session-runtime.ts +676 -600
  188. package/src/runtime/loop-gates.ts +129 -129
  189. package/src/runtime/manifest-cache.ts +263 -263
  190. package/src/runtime/mcp-proxy.ts +113 -113
  191. package/src/runtime/metric-parser.ts +40 -40
  192. package/src/runtime/model-fallback.ts +282 -274
  193. package/src/runtime/model-resolver.ts +118 -0
  194. package/src/runtime/output-validator.ts +187 -187
  195. package/src/runtime/overflow-recovery.ts +175 -175
  196. package/src/runtime/parallel-research.ts +44 -44
  197. package/src/runtime/parallel-utils.ts +156 -156
  198. package/src/runtime/parent-guard.ts +80 -80
  199. package/src/runtime/phase-progress.ts +217 -217
  200. package/src/runtime/pi-args.ts +165 -165
  201. package/src/runtime/pi-json-output.ts +111 -111
  202. package/src/runtime/pi-spawn.ts +167 -167
  203. package/src/runtime/policy-engine.ts +79 -79
  204. package/src/runtime/post-checks.ts +125 -125
  205. package/src/runtime/post-exit-stdio-guard.ts +86 -86
  206. package/src/runtime/process-status.ts +97 -73
  207. package/src/runtime/progress-event-coalescer.ts +43 -43
  208. package/src/runtime/recovery-recipes.ts +74 -74
  209. package/src/runtime/retry-executor.ts +81 -81
  210. package/src/runtime/role-permission.ts +39 -39
  211. package/src/runtime/run-tracker.ts +99 -0
  212. package/src/runtime/runtime-policy.ts +21 -0
  213. package/src/runtime/runtime-resolver.ts +94 -91
  214. package/src/runtime/scheduler.ts +294 -0
  215. package/src/runtime/semaphore.ts +131 -131
  216. package/src/runtime/sensitive-paths.ts +92 -92
  217. package/src/runtime/session-usage.ts +79 -79
  218. package/src/runtime/settings-store.ts +103 -0
  219. package/src/runtime/sidechain-output.ts +29 -29
  220. package/src/runtime/skill-instructions.ts +222 -222
  221. package/src/runtime/stale-reconciler.ts +198 -189
  222. package/src/runtime/streaming-output.ts +47 -0
  223. package/src/runtime/subagent-manager.ts +404 -400
  224. package/src/runtime/subprocess-tool-registry.ts +67 -67
  225. package/src/runtime/task-display.ts +38 -38
  226. package/src/runtime/task-graph-scheduler.ts +122 -122
  227. package/src/runtime/task-graph.ts +207 -207
  228. package/src/runtime/task-output-context.ts +177 -177
  229. package/src/runtime/task-packet.ts +93 -93
  230. package/src/runtime/task-quality.ts +207 -207
  231. package/src/runtime/task-runner/capabilities.ts +78 -78
  232. package/src/runtime/task-runner/live-executor.ts +131 -113
  233. package/src/runtime/task-runner/progress.ts +119 -119
  234. package/src/runtime/task-runner/prompt-builder.ts +139 -139
  235. package/src/runtime/task-runner/prompt-pipeline.ts +64 -64
  236. package/src/runtime/task-runner/result-utils.ts +14 -14
  237. package/src/runtime/task-runner/run-projection.ts +103 -103
  238. package/src/runtime/task-runner/state-helpers.ts +22 -22
  239. package/src/runtime/task-runner.ts +469 -459
  240. package/src/runtime/team-runner.ts +693 -945
  241. package/src/runtime/usage-tracker.ts +71 -0
  242. package/src/runtime/worker-heartbeat.ts +21 -21
  243. package/src/runtime/worker-startup.ts +57 -57
  244. package/src/runtime/workflow-state.ts +187 -187
  245. package/src/runtime/yield-handler.ts +190 -190
  246. package/src/schema/config-schema.ts +172 -168
  247. package/src/schema/team-tool-schema.ts +126 -126
  248. package/src/schema/validation-types.ts +151 -148
  249. package/src/skills/discover-skills.ts +67 -67
  250. package/src/skills/skill-templates.ts +374 -374
  251. package/src/state/active-run-registry.ts +227 -191
  252. package/src/state/artifact-store.ts +130 -129
  253. package/src/state/atomic-write.ts +262 -195
  254. package/src/state/blob-store.ts +116 -116
  255. package/src/state/contracts.ts +111 -111
  256. package/src/state/event-log-rotation.ts +161 -158
  257. package/src/state/event-log.ts +383 -303
  258. package/src/state/event-reconstructor.ts +217 -217
  259. package/src/state/jsonl-writer.ts +82 -82
  260. package/src/state/locks.ts +146 -146
  261. package/src/state/mailbox.ts +446 -405
  262. package/src/state/state-store.ts +364 -351
  263. package/src/state/task-claims.ts +44 -44
  264. package/src/state/types.ts +285 -285
  265. package/src/state/usage.ts +29 -29
  266. package/src/subagents/async-entry.ts +1 -1
  267. package/src/subagents/index.ts +3 -3
  268. package/src/subagents/live/control.ts +1 -1
  269. package/src/subagents/live/manager.ts +1 -1
  270. package/src/subagents/live/realtime.ts +1 -1
  271. package/src/subagents/live/session-runtime.ts +1 -1
  272. package/src/subagents/manager.ts +1 -1
  273. package/src/subagents/spawn.ts +1 -1
  274. package/src/teams/discover-teams.ts +116 -116
  275. package/src/teams/team-config.ts +27 -27
  276. package/src/teams/team-serializer.ts +38 -38
  277. package/src/types/diff.d.ts +18 -18
  278. package/src/ui/agent-management-overlay.ts +144 -144
  279. package/src/ui/crew-widget.ts +487 -370
  280. package/src/ui/dashboard-panes/agents-pane.ts +109 -28
  281. package/src/ui/dashboard-panes/cancellation-pane.ts +42 -42
  282. package/src/ui/dashboard-panes/capability-pane.ts +59 -59
  283. package/src/ui/dashboard-panes/health-pane.ts +30 -30
  284. package/src/ui/dashboard-panes/mailbox-pane.ts +35 -35
  285. package/src/ui/dashboard-panes/progress-pane.ts +30 -30
  286. package/src/ui/dashboard-panes/transcript-pane.ts +10 -10
  287. package/src/ui/heartbeat-aggregator.ts +63 -63
  288. package/src/ui/keybinding-map.ts +97 -94
  289. package/src/ui/live-conversation-overlay.ts +152 -0
  290. package/src/ui/live-run-sidebar.ts +180 -180
  291. package/src/ui/mascot.ts +442 -442
  292. package/src/ui/overlays/agent-picker-overlay.ts +57 -57
  293. package/src/ui/overlays/confirm-overlay.ts +58 -58
  294. package/src/ui/overlays/mailbox-compose-overlay.ts +144 -144
  295. package/src/ui/overlays/mailbox-compose-preview.ts +63 -63
  296. package/src/ui/overlays/mailbox-detail-overlay.ts +122 -122
  297. package/src/ui/pi-ui-compat.ts +57 -57
  298. package/src/ui/powerbar-publisher.ts +221 -197
  299. package/src/ui/render-scheduler.ts +216 -143
  300. package/src/ui/run-action-dispatcher.ts +118 -118
  301. package/src/ui/run-dashboard.ts +526 -464
  302. package/src/ui/run-event-bus.ts +208 -208
  303. package/src/ui/run-snapshot-cache.ts +826 -777
  304. package/src/ui/settings-overlay.ts +721 -0
  305. package/src/ui/snapshot-types.ts +86 -70
  306. package/src/ui/theme-adapter.ts +190 -190
  307. package/src/ui/tool-progress-formatter.ts +89 -0
  308. package/src/ui/transcript-cache.ts +94 -94
  309. package/src/ui/transcript-viewer.ts +335 -335
  310. package/src/utils/conflict-detect.ts +662 -0
  311. package/src/utils/file-coalescer.ts +86 -86
  312. package/src/utils/frontmatter.ts +68 -68
  313. package/src/utils/fs-watch.ts +88 -31
  314. package/src/utils/gh-protocol.ts +479 -0
  315. package/src/utils/ids.ts +17 -17
  316. package/src/utils/incremental-reader.ts +104 -104
  317. package/src/utils/internal-error.ts +6 -6
  318. package/src/utils/names.ts +27 -27
  319. package/src/utils/paths.ts +102 -63
  320. package/src/utils/redaction.ts +44 -44
  321. package/src/utils/safe-paths.ts +47 -47
  322. package/src/utils/scan-cache.ts +136 -136
  323. package/src/utils/sse-parser.ts +134 -134
  324. package/src/utils/task-name-generator.ts +337 -337
  325. package/src/utils/timings.ts +33 -33
  326. package/src/utils/visual.ts +243 -198
  327. package/src/workflows/discover-workflows.ts +139 -139
  328. package/src/workflows/validate-workflow.ts +40 -40
  329. package/src/workflows/workflow-config.ts +26 -26
  330. package/src/workflows/workflow-serializer.ts +32 -32
  331. package/src/worktree/branch-freshness.ts +45 -45
  332. package/src/worktree/cleanup.ts +75 -75
  333. package/src/worktree/worktree-manager.ts +188 -188
  334. package/teams/default.team.md +12 -12
  335. package/teams/fast-fix.team.md +11 -11
  336. package/teams/implementation.team.md +18 -18
  337. package/teams/parallel-research.team.md +14 -14
  338. package/teams/research.team.md +11 -11
  339. package/teams/review.team.md +12 -12
  340. package/tsconfig.json +19 -19
  341. package/workflows/default.workflow.md +30 -30
  342. package/workflows/fast-fix.workflow.md +23 -23
  343. package/workflows/implementation.workflow.md +43 -43
  344. package/workflows/parallel-research.workflow.md +46 -46
  345. package/workflows/research.workflow.md +22 -22
  346. package/workflows/review.workflow.md +30 -30
  347. package/skills/task-packet/SKILL.md +0 -28
  348. 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
+ ```