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.
- package/AGENTS.md +57 -32
- package/CHANGELOG.md +466 -413
- package/LICENSE +21 -21
- package/NOTICE.md +16 -16
- package/README.md +323 -323
- package/docs/FEATURE_INTAKE.md +126 -0
- package/docs/HARNESS.md +86 -0
- package/docs/HARNESS_BACKLOG.md +41 -0
- package/docs/TEST_MATRIX.md +49 -0
- package/docs/actions-reference.md +595 -595
- package/docs/architecture.md +180 -180
- package/docs/code-review-2026-05-11.md +592 -0
- package/docs/commands-reference.md +347 -347
- package/docs/comparison-pi-subagents-vs-pi-crew.md +303 -0
- package/docs/decisions/0001-durable-state.md +41 -0
- package/docs/decisions/0002-child-process-for-async.md +42 -0
- package/docs/decisions/0003-depth-guard.md +36 -0
- package/docs/decisions/0004-execfile-over-exec.md +34 -0
- package/docs/decisions/0005-no-parameter-properties.md +49 -0
- package/docs/decisions/0006-publish-bundled-esm.md +63 -0
- package/docs/decisions/0007-active-run-binary-index.md +54 -0
- package/docs/decisions/0008-child-pi-warm-pool.md +61 -0
- package/docs/decisions/README.md +23 -0
- package/docs/followup-plan-2026-05-12.md +463 -0
- package/docs/followup-review-2026-05-12.md +297 -0
- package/docs/followup-review-round3-2026-05-12.md +342 -0
- package/docs/followup-review-round4-2026-05-13.md +107 -0
- package/docs/implementation-plan-top3.md +333 -0
- package/docs/live-mailbox-runtime.md +36 -36
- package/docs/next-upgrade-roadmap.md +808 -808
- package/docs/oh-my-pi-research.md +509 -0
- package/docs/perf/baseline-2026-05.md +113 -0
- package/docs/perf/final-report-2026-05.md +206 -0
- package/docs/perf/sprint-1-report.md +71 -0
- package/docs/perf/sprint-2-report.md +81 -0
- package/docs/perf/sprint-2.5-report.md +53 -0
- package/docs/perf/sprint-3-report.md +36 -0
- package/docs/perf/sprint-4-report.md +47 -0
- package/docs/perf/sprint-5-report.md +51 -0
- package/docs/perf/sprint-6-report.md +94 -0
- package/docs/perf/sprint-7-report.md +74 -0
- package/docs/perf/upgrade-plan-2026-05.md +147 -0
- package/docs/pi-subagents3-deep-analysis.md +508 -0
- package/docs/product/README.md +31 -0
- package/docs/product/platform.md +27 -0
- package/docs/product/runtime-safety.md +37 -0
- package/docs/product/team-run.md +39 -0
- package/docs/product/team-tool.md +37 -0
- package/docs/publishing.md +65 -65
- package/docs/resource-formats.md +134 -134
- package/docs/runtime-analysis-child-vs-live.md +171 -0
- package/docs/runtime-flow.md +148 -148
- package/docs/runtime-migration-in-process-analysis.md +250 -0
- package/docs/stories/README.md +30 -0
- package/docs/stories/backlog.md +36 -0
- package/docs/templates/decision.md +27 -0
- package/docs/templates/story.md +44 -0
- package/docs/templates/validation-report.md +32 -0
- package/docs/usage.md +238 -238
- package/index.ts +7 -6
- package/install.mjs +65 -65
- package/package.json +107 -99
- package/schema.json +222 -222
- package/skills/child-pi-spawning/SKILL.md +213 -0
- package/skills/context-artifact-hygiene/SKILL.md +32 -0
- package/skills/event-log-tracing/SKILL.md +299 -0
- package/skills/git-master/SKILL.md +225 -24
- package/skills/live-agent-lifecycle/SKILL.md +192 -0
- package/skills/mailbox-interactive/SKILL.md +300 -19
- package/skills/model-routing-context/SKILL.md +94 -0
- package/skills/multi-perspective-review/SKILL.md +88 -0
- package/skills/read-only-explorer/SKILL.md +250 -26
- package/skills/safe-bash/SKILL.md +307 -21
- package/skills/verification-before-done/SKILL.md +11 -2
- package/skills/widget-rendering/SKILL.md +258 -0
- package/skills/workspace-isolation/SKILL.md +202 -0
- package/skills/worktree-isolation/SKILL.md +202 -18
- package/src/adapters/claude-adapter.ts +25 -25
- package/src/adapters/codex-adapter.ts +21 -21
- package/src/adapters/cursor-adapter.ts +17 -17
- package/src/adapters/export-util.ts +137 -137
- package/src/adapters/index.ts +15 -15
- package/src/adapters/registry.ts +18 -18
- package/src/adapters/types.ts +23 -23
- package/src/agents/agent-config.ts +38 -38
- package/src/agents/agent-serializer.ts +38 -38
- package/src/agents/discover-agents.ts +121 -118
- package/src/config/config.ts +740 -858
- package/src/config/defaults.ts +96 -96
- package/src/config/drift-detector.ts +211 -211
- package/src/config/markers.ts +327 -327
- package/src/config/resilient-parser.ts +109 -108
- package/src/config/suggestions.ts +74 -74
- package/src/config/types.ts +199 -0
- package/src/extension/async-notifier.ts +123 -89
- package/src/extension/autonomous-policy.ts +169 -169
- package/src/extension/cross-extension-rpc.ts +104 -103
- package/src/extension/help.ts +47 -47
- package/src/extension/import-index.ts +69 -69
- package/src/extension/management.ts +395 -382
- package/src/extension/notification-router.ts +116 -116
- package/src/extension/notification-sink.ts +51 -51
- package/src/extension/project-init.ts +168 -168
- package/src/extension/register.ts +859 -668
- package/src/extension/registration/artifact-cleanup.ts +15 -15
- package/src/extension/registration/command-utils.ts +54 -54
- package/src/extension/registration/commands.ts +559 -452
- package/src/extension/registration/compaction-guard.ts +125 -125
- package/src/extension/registration/subagent-helpers.ts +102 -102
- package/src/extension/registration/subagent-tools.ts +220 -158
- package/src/extension/registration/team-tool.ts +159 -98
- package/src/extension/registration/viewers.ts +29 -0
- package/src/extension/result-watcher.ts +128 -128
- package/src/extension/run-bundle-schema.ts +89 -89
- package/src/extension/run-export.ts +73 -73
- package/src/extension/run-import.ts +84 -84
- package/src/extension/run-index.ts +94 -94
- package/src/extension/run-maintenance.ts +142 -142
- package/src/extension/session-summary.ts +8 -8
- package/src/extension/team-manager-command.ts +96 -95
- package/src/extension/team-recommendation.ts +188 -188
- package/src/extension/team-tool/api.ts +5 -2
- package/src/extension/team-tool/cancel.ts +224 -209
- package/src/extension/team-tool/config-patch.ts +36 -36
- package/src/extension/team-tool/context.ts +60 -60
- package/src/extension/team-tool/doctor.ts +242 -242
- package/src/extension/team-tool/handle-settings.ts +421 -195
- package/src/extension/team-tool/inspect.ts +41 -41
- package/src/extension/team-tool/lifecycle-actions.ts +139 -139
- package/src/extension/team-tool/parallel-dispatch.ts +156 -156
- package/src/extension/team-tool/plan.ts +19 -19
- package/src/extension/team-tool/respond.ts +112 -111
- package/src/extension/team-tool/run.ts +246 -228
- package/src/extension/team-tool/status.ts +110 -110
- package/src/extension/team-tool-types.ts +13 -13
- package/src/extension/team-tool.ts +16 -4
- package/src/extension/tool-result.ts +16 -16
- package/src/extension/validate-resources.ts +77 -77
- package/src/hooks/registry.ts +61 -61
- package/src/hooks/types.ts +40 -40
- package/src/i18n.ts +184 -184
- package/src/observability/correlation.ts +35 -35
- package/src/observability/event-to-metric.ts +68 -68
- package/src/observability/exporters/adapter.ts +30 -30
- package/src/observability/exporters/otlp-exporter.ts +106 -92
- package/src/observability/exporters/prometheus-exporter.ts +54 -54
- package/src/observability/metric-registry.ts +87 -87
- package/src/observability/metric-retention.ts +54 -54
- package/src/observability/metric-sink.ts +81 -56
- package/src/observability/metrics-primitives.ts +167 -167
- package/src/prompt/prompt-runtime.ts +72 -72
- package/src/runtime/adaptive-plan.ts +338 -0
- package/src/runtime/agent-control.ts +169 -169
- package/src/runtime/agent-memory.ts +72 -72
- package/src/runtime/agent-observability.ts +114 -114
- package/src/runtime/async-marker.ts +26 -26
- package/src/runtime/async-runner.ts +153 -79
- package/src/runtime/attention-events.ts +28 -28
- package/src/runtime/auto-resume.ts +100 -100
- package/src/runtime/background-runner.ts +122 -88
- package/src/runtime/cancellation.ts +61 -61
- package/src/runtime/capability-inventory.ts +116 -116
- package/src/runtime/child-pi-pool.ts +68 -0
- package/src/runtime/child-pi.ts +541 -463
- package/src/runtime/code-summary.ts +247 -247
- package/src/runtime/compaction-summary.ts +271 -271
- package/src/runtime/concurrency.ts +58 -58
- package/src/runtime/crash-recovery.ts +317 -301
- package/src/runtime/crew-agent-records.ts +379 -281
- package/src/runtime/crew-agent-runtime.ts +60 -60
- package/src/runtime/cross-extension-rpc.ts +72 -0
- package/src/runtime/custom-tools/irc-tool.ts +201 -201
- package/src/runtime/custom-tools/submit-result-tool.ts +90 -90
- package/src/runtime/deadletter.ts +47 -47
- package/src/runtime/delivery-coordinator.ts +176 -176
- package/src/runtime/delta-conflict.ts +360 -360
- package/src/runtime/diagnostic-export.ts +102 -102
- package/src/runtime/direct-run.ts +35 -35
- package/src/runtime/effectiveness.ts +82 -81
- package/src/runtime/errors/crew-errors.ts +166 -0
- package/src/runtime/event-stream-bridge.ts +92 -92
- package/src/runtime/foreground-control.ts +82 -82
- package/src/runtime/green-contract.ts +46 -46
- package/src/runtime/group-join.ts +234 -106
- package/src/runtime/heartbeat-watcher.ts +145 -124
- package/src/runtime/iteration-hooks.ts +267 -264
- package/src/runtime/live-agent-control.ts +88 -88
- package/src/runtime/live-agent-manager.ts +377 -179
- package/src/runtime/live-control-realtime.ts +36 -36
- package/src/runtime/live-session-runtime.ts +676 -599
- package/src/runtime/loop-gates.ts +129 -129
- package/src/runtime/manifest-cache.ts +263 -263
- package/src/runtime/mcp-proxy.ts +113 -113
- package/src/runtime/metric-parser.ts +40 -40
- package/src/runtime/model-fallback.ts +282 -274
- package/src/runtime/model-resolver.ts +118 -0
- package/src/runtime/output-validator.ts +187 -187
- package/src/runtime/overflow-recovery.ts +175 -175
- package/src/runtime/parallel-research.ts +44 -44
- package/src/runtime/parallel-utils.ts +156 -156
- package/src/runtime/parent-guard.ts +80 -80
- package/src/runtime/phase-progress.ts +217 -217
- package/src/runtime/pi-args.ts +165 -165
- package/src/runtime/pi-json-output.ts +111 -111
- package/src/runtime/pi-spawn.ts +167 -167
- package/src/runtime/policy-engine.ts +79 -79
- package/src/runtime/post-checks.ts +125 -122
- package/src/runtime/post-exit-stdio-guard.ts +86 -86
- package/src/runtime/process-status.ts +97 -73
- package/src/runtime/progress-event-coalescer.ts +43 -43
- package/src/runtime/recovery-recipes.ts +74 -74
- package/src/runtime/retry-executor.ts +81 -81
- package/src/runtime/role-permission.ts +39 -39
- package/src/runtime/run-tracker.ts +99 -0
- package/src/runtime/runtime-policy.ts +21 -0
- package/src/runtime/runtime-resolver.ts +94 -90
- package/src/runtime/scheduler.ts +294 -0
- package/src/runtime/semaphore.ts +131 -131
- package/src/runtime/sensitive-paths.ts +92 -92
- package/src/runtime/session-usage.ts +79 -79
- package/src/runtime/settings-store.ts +103 -0
- package/src/runtime/sidechain-output.ts +29 -29
- package/src/runtime/skill-instructions.ts +222 -222
- package/src/runtime/stale-reconciler.ts +198 -189
- package/src/runtime/streaming-output.ts +47 -0
- package/src/runtime/subagent-manager.ts +404 -395
- package/src/runtime/subprocess-tool-registry.ts +67 -67
- package/src/runtime/task-display.ts +38 -38
- package/src/runtime/task-graph-scheduler.ts +122 -122
- package/src/runtime/task-graph.ts +207 -207
- package/src/runtime/task-output-context.ts +177 -177
- package/src/runtime/task-packet.ts +93 -93
- package/src/runtime/task-quality.ts +207 -207
- package/src/runtime/task-runner/capabilities.ts +78 -78
- package/src/runtime/task-runner/live-executor.ts +131 -113
- package/src/runtime/task-runner/progress.ts +119 -119
- package/src/runtime/task-runner/prompt-builder.ts +139 -139
- package/src/runtime/task-runner/prompt-pipeline.ts +64 -64
- package/src/runtime/task-runner/result-utils.ts +14 -14
- package/src/runtime/task-runner/run-projection.ts +103 -103
- package/src/runtime/task-runner/state-helpers.ts +22 -22
- package/src/runtime/task-runner.ts +469 -458
- package/src/runtime/team-runner.ts +693 -945
- package/src/runtime/usage-tracker.ts +71 -0
- package/src/runtime/worker-heartbeat.ts +21 -21
- package/src/runtime/worker-startup.ts +57 -57
- package/src/runtime/workflow-state.ts +187 -187
- package/src/runtime/yield-handler.ts +190 -189
- package/src/schema/config-schema.ts +172 -168
- package/src/schema/team-tool-schema.ts +126 -125
- package/src/schema/validation-types.ts +151 -148
- package/src/skills/discover-skills.ts +67 -67
- package/src/skills/skill-templates.ts +374 -374
- package/src/state/active-run-registry.ts +227 -191
- package/src/state/artifact-store.ts +130 -129
- package/src/state/atomic-write.ts +262 -178
- package/src/state/blob-store.ts +116 -116
- package/src/state/contracts.ts +111 -111
- package/src/state/event-log-rotation.ts +161 -158
- package/src/state/event-log.ts +383 -240
- package/src/state/event-reconstructor.ts +217 -217
- package/src/state/jsonl-writer.ts +82 -82
- package/src/state/locks.ts +146 -148
- package/src/state/mailbox.ts +446 -405
- package/src/state/state-store.ts +364 -351
- package/src/state/task-claims.ts +44 -44
- package/src/state/types.ts +285 -285
- package/src/state/usage.ts +29 -29
- package/src/subagents/async-entry.ts +1 -1
- package/src/subagents/index.ts +3 -3
- package/src/subagents/live/control.ts +1 -1
- package/src/subagents/live/manager.ts +1 -1
- package/src/subagents/live/realtime.ts +1 -1
- package/src/subagents/live/session-runtime.ts +1 -1
- package/src/subagents/manager.ts +1 -1
- package/src/subagents/spawn.ts +1 -1
- package/src/teams/discover-teams.ts +116 -116
- package/src/teams/team-config.ts +27 -27
- package/src/teams/team-serializer.ts +38 -38
- package/src/types/diff.d.ts +18 -18
- package/src/ui/agent-management-overlay.ts +144 -144
- package/src/ui/crew-widget.ts +487 -370
- package/src/ui/dashboard-panes/agents-pane.ts +109 -28
- package/src/ui/dashboard-panes/cancellation-pane.ts +42 -42
- package/src/ui/dashboard-panes/capability-pane.ts +59 -59
- package/src/ui/dashboard-panes/health-pane.ts +30 -30
- package/src/ui/dashboard-panes/mailbox-pane.ts +35 -35
- package/src/ui/dashboard-panes/progress-pane.ts +30 -30
- package/src/ui/dashboard-panes/transcript-pane.ts +10 -10
- package/src/ui/heartbeat-aggregator.ts +63 -63
- package/src/ui/keybinding-map.ts +97 -94
- package/src/ui/live-conversation-overlay.ts +152 -0
- package/src/ui/live-run-sidebar.ts +180 -180
- package/src/ui/mascot.ts +442 -442
- package/src/ui/overlays/agent-picker-overlay.ts +57 -57
- package/src/ui/overlays/confirm-overlay.ts +58 -58
- package/src/ui/overlays/mailbox-compose-overlay.ts +144 -144
- package/src/ui/overlays/mailbox-compose-preview.ts +63 -63
- package/src/ui/overlays/mailbox-detail-overlay.ts +122 -122
- package/src/ui/pi-ui-compat.ts +57 -57
- package/src/ui/powerbar-publisher.ts +221 -197
- package/src/ui/render-scheduler.ts +216 -143
- package/src/ui/run-action-dispatcher.ts +118 -117
- package/src/ui/run-dashboard.ts +526 -464
- package/src/ui/run-event-bus.ts +208 -208
- package/src/ui/run-snapshot-cache.ts +826 -777
- package/src/ui/settings-overlay.ts +721 -0
- package/src/ui/snapshot-types.ts +86 -70
- package/src/ui/theme-adapter.ts +190 -190
- package/src/ui/tool-progress-formatter.ts +89 -0
- package/src/ui/transcript-cache.ts +94 -94
- package/src/ui/transcript-viewer.ts +335 -335
- package/src/utils/conflict-detect.ts +662 -0
- package/src/utils/env-filter.ts +30 -0
- package/src/utils/file-coalescer.ts +86 -86
- package/src/utils/frontmatter.ts +68 -68
- package/src/utils/fs-watch.ts +88 -31
- package/src/utils/gh-protocol.ts +479 -0
- package/src/utils/ids.ts +17 -17
- package/src/utils/incremental-reader.ts +104 -104
- package/src/utils/internal-error.ts +6 -6
- package/src/utils/names.ts +27 -27
- package/src/utils/paths.ts +102 -63
- package/src/utils/redaction.ts +44 -44
- package/src/utils/resolve-shell.ts +34 -0
- package/src/utils/safe-paths.ts +47 -47
- package/src/utils/scan-cache.ts +136 -136
- package/src/utils/sleep.ts +2 -1
- package/src/utils/sse-parser.ts +134 -134
- package/src/utils/task-name-generator.ts +337 -337
- package/src/utils/timings.ts +33 -33
- package/src/utils/visual.ts +243 -198
- package/src/workflows/discover-workflows.ts +139 -139
- package/src/workflows/validate-workflow.ts +40 -40
- package/src/workflows/workflow-config.ts +26 -26
- package/src/workflows/workflow-serializer.ts +32 -32
- package/src/worktree/branch-freshness.ts +45 -45
- package/src/worktree/cleanup.ts +75 -72
- package/src/worktree/worktree-manager.ts +188 -146
- package/teams/default.team.md +12 -12
- package/teams/fast-fix.team.md +11 -11
- package/teams/implementation.team.md +18 -18
- package/teams/parallel-research.team.md +14 -14
- package/teams/research.team.md +11 -11
- package/teams/review.team.md +12 -12
- package/tsconfig.json +19 -19
- package/workflows/default.workflow.md +30 -30
- package/workflows/fast-fix.workflow.md +23 -23
- package/workflows/implementation.workflow.md +43 -43
- package/workflows/parallel-research.workflow.md +46 -46
- package/workflows/research.workflow.md +22 -22
- package/workflows/review.workflow.md +30 -30
- package/skills/task-packet/SKILL.md +0 -28
- 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
|
-
##
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
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
|
+
```
|