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.
- package/AGENTS.md +57 -32
- package/CHANGELOG.md +466 -448
- 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 -592
- 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-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 -100
- 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 -104
- 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 -159
- package/src/extension/registration/team-tool.ts +159 -99
- 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 -96
- 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 -229
- package/src/extension/team-tool/status.ts +110 -110
- package/src/extension/team-tool-types.ts +13 -13
- package/src/extension/team-tool.ts +344 -344
- 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 -153
- package/src/runtime/attention-events.ts +28 -28
- package/src/runtime/auto-resume.ts +100 -100
- package/src/runtime/background-runner.ts +122 -89
- 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 -461
- 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 -267
- 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 -600
- 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 -125
- 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 -91
- 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 -400
- 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 -459
- 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 -190
- package/src/schema/config-schema.ts +172 -168
- package/src/schema/team-tool-schema.ts +126 -126
- 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 -195
- 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 -303
- package/src/state/event-reconstructor.ts +217 -217
- package/src/state/jsonl-writer.ts +82 -82
- package/src/state/locks.ts +146 -146
- 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 -118
- 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/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/safe-paths.ts +47 -47
- package/src/utils/scan-cache.ts +136 -136
- 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 -75
- package/src/worktree/worktree-manager.ts +188 -188
- 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
package/docs/runtime-flow.md
CHANGED
|
@@ -1,148 +1,148 @@
|
|
|
1
|
-
# pi-crew Runtime Flow
|
|
2
|
-
|
|
3
|
-
This document is a compact map of the runtime paths used by `pi-crew`.
|
|
4
|
-
|
|
5
|
-
## Main sequence
|
|
6
|
-
|
|
7
|
-
```text
|
|
8
|
-
User / model
|
|
9
|
-
│ calls team({ action: "run", ... }) or /team-run
|
|
10
|
-
▼
|
|
11
|
-
handleTeamTool()
|
|
12
|
-
│ validates schema and routes action
|
|
13
|
-
▼
|
|
14
|
-
handleRun()
|
|
15
|
-
├─ discoverTeams/discoverWorkflows/discoverAgents
|
|
16
|
-
├─ validateWorkflowForTeam
|
|
17
|
-
├─ expandParallelResearchWorkflow when applicable
|
|
18
|
-
├─ createRunManifest + tasks.json + goal artifact
|
|
19
|
-
├─ if async=true ─────────────────────────────────────────────┐
|
|
20
|
-
│ spawnBackgroundTeamRun() │
|
|
21
|
-
│ ├─ resolve jiti-register.mjs │
|
|
22
|
-
│ ├─ fail-fast if jiti missing │
|
|
23
|
-
│ ├─ node --import jiti-register.mjs background-runner.ts │
|
|
24
|
-
│ └─ parent schedules early-exit guard │
|
|
25
|
-
│ ▼
|
|
26
|
-
│ background-runner.ts
|
|
27
|
-
│ ├─ append async.started
|
|
28
|
-
│ ├─ write async.pid startup marker
|
|
29
|
-
│ ├─ rediscover team/workflow/agents
|
|
30
|
-
│ └─ executeTeamRun()
|
|
31
|
-
│
|
|
32
|
-
└─ if foreground/default
|
|
33
|
-
├─ startForegroundRun schedules session-bound run, or
|
|
34
|
-
└─ executeTeamRun inline for scaffold/non-scheduled paths
|
|
35
|
-
|
|
36
|
-
executeTeamRun()
|
|
37
|
-
├─ write run.running
|
|
38
|
-
├─ materialize queued/running agent records lazily
|
|
39
|
-
├─ build task graph index
|
|
40
|
-
├─ while queued tasks exist
|
|
41
|
-
│ ├─ taskGraphSnapshot
|
|
42
|
-
│ ├─ resolveBatchConcurrency
|
|
43
|
-
│ ├─ getReadyTasks
|
|
44
|
-
│ ├─ append task.progress batch event
|
|
45
|
-
│ ├─ mapConcurrent ready batch
|
|
46
|
-
│ │ └─ runTeamTask()
|
|
47
|
-
│ │ ├─ prepare workspace/worktree
|
|
48
|
-
│ │ ├─ build task packet
|
|
49
|
-
│ │ ├─ render prompt + dependency context
|
|
50
|
-
│ │ ├─ choose model candidates from Pi config
|
|
51
|
-
│ │ ├─ spawn child Pi process
|
|
52
|
-
│ │ ├─ ChildPiLineObserver parses stdout/stderr
|
|
53
|
-
│ │ ├─ append per-agent events/output
|
|
54
|
-
│ │ ├─ update agent progress/task state
|
|
55
|
-
│ │ ├─ parse final JSONL/session usage
|
|
56
|
-
│ │ └─ write result/log/transcript/metadata artifacts
|
|
57
|
-
│ ├─ merge task updates monotonically
|
|
58
|
-
│ ├─ optional adaptive plan injection
|
|
59
|
-
│ ├─ save tasks/agents/progress
|
|
60
|
-
│ └─ write batch artifact
|
|
61
|
-
├─ policy closeout
|
|
62
|
-
└─ run.completed / run.failed / run.blocked / run.cancelled
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## Action router
|
|
66
|
-
|
|
67
|
-
| Action | Handler | Purpose |
|
|
68
|
-
|---|---|---|
|
|
69
|
-
| `run` | `team-tool/run.ts` | Create and execute a run, foreground or async. |
|
|
70
|
-
| `status` | `team-tool.ts` | Show manifest/tasks/agents/events and mark stale async runs failed. |
|
|
71
|
-
| `summary` | `session-summary.ts`/summary handler | Write/read run summary artifact. |
|
|
72
|
-
| `events` | `team-tool.ts` | Tail durable run events. |
|
|
73
|
-
| `artifacts` | `team-tool.ts` | List run artifacts. |
|
|
74
|
-
| `resume` | `team-tool.ts` | Requeue failed/cancelled/skipped/running tasks. |
|
|
75
|
-
| `cancel` | `team-tool.ts` | Mark queued/running tasks cancelled and request foreground interrupt. |
|
|
76
|
-
| `forget` | `run-maintenance.ts` | Delete run state/artifacts with confirmation. |
|
|
77
|
-
| `prune` | `run-maintenance.ts` | Remove old finished runs with confirmation. |
|
|
78
|
-
| `export` | `run-export.ts` | Create portable run bundle. |
|
|
79
|
-
| `import` / `imports` | `run-import.ts` / `import-index.ts` | Store/list imported bundles. |
|
|
80
|
-
| `config` | `config.ts` + config action | Show/update user/project config. |
|
|
81
|
-
| `doctor` | `team-tool/doctor.ts` | Platform/resource/runtime diagnostics. |
|
|
82
|
-
| `validate` | `validate-resources.ts` | Validate agents/teams/workflows. |
|
|
83
|
-
| `recommend` | `team-recommendation.ts` | Suggest team/workflow/action for a goal. |
|
|
84
|
-
| management | `management.ts` | Create/update/delete/rename teams, agents, workflows. |
|
|
85
|
-
| API | `team-tool/api.ts` | File-backed observability/control/mailbox API. |
|
|
86
|
-
|
|
87
|
-
## Worker modes
|
|
88
|
-
|
|
89
|
-
| Mode | Behavior |
|
|
90
|
-
|---|---|
|
|
91
|
-
| `child-process` | Default. Launches real child `pi` processes per task. |
|
|
92
|
-
| `scaffold` | Explicit dry-run. No child Pi worker execution. |
|
|
93
|
-
| `live-session` | Experimental/gated in-process/live agent path. |
|
|
94
|
-
| `auto` | Resolves to child-process unless config/env requests otherwise. |
|
|
95
|
-
|
|
96
|
-
## Important files
|
|
97
|
-
|
|
98
|
-
```text
|
|
99
|
-
src/extension/register.ts Pi extension entry/wiring
|
|
100
|
-
src/extension/team-tool/run.ts run creation and foreground/async split
|
|
101
|
-
src/runtime/background-runner.ts detached async entrypoint
|
|
102
|
-
src/runtime/async-runner.ts background spawn command/options
|
|
103
|
-
src/runtime/team-runner.ts workflow/task graph scheduler
|
|
104
|
-
src/runtime/task-runner.ts single task execution
|
|
105
|
-
src/runtime/child-pi.ts child Pi process and output observer
|
|
106
|
-
src/runtime/model-fallback.ts configured model candidates/routing
|
|
107
|
-
src/runtime/concurrency.ts batch concurrency decisions
|
|
108
|
-
src/runtime/process-status.ts pid/liveness/stale detection
|
|
109
|
-
src/state/state-store.ts manifest/tasks persistence
|
|
110
|
-
src/state/event-log.ts JSONL run events
|
|
111
|
-
src/runtime/crew-agent-records.ts aggregate + per-agent status files
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Environment variables
|
|
115
|
-
|
|
116
|
-
| Env | Effect |
|
|
117
|
-
|---|---|
|
|
118
|
-
| `PI_CREW_EXECUTE_WORKERS=0` | Disable real workers, use scaffold behavior. |
|
|
119
|
-
| `PI_TEAMS_EXECUTE_WORKERS=0` | Legacy alias for worker disable. |
|
|
120
|
-
| `PI_CREW_ENABLE_EXPERIMENTAL_LIVE_SESSION=1` | Allow experimental live-session runtime. |
|
|
121
|
-
| `PI_CREW_MOCK_LIVE_SESSION=success` | Test hook for live-session mock. |
|
|
122
|
-
| `PI_TEAMS_MOCK_CHILD_PI` | Test hook for mocked child Pi execution. |
|
|
123
|
-
| `PI_CREW_DEPTH`, `PI_CREW_MAX_DEPTH` | Canonical subagent recursion guard. |
|
|
124
|
-
| `PI_TEAMS_DEPTH`, `PI_TEAMS_MAX_DEPTH` | Legacy recursion guard aliases. |
|
|
125
|
-
| `PI_TEAMS_HOME` | Override user config/state home in tests. |
|
|
126
|
-
| `PI_TEAMS_PI_BIN` | Override child `pi` executable. |
|
|
127
|
-
| `PI_CODING_AGENT_DIR` | Override Pi settings/models directory for model discovery. |
|
|
128
|
-
| `PI_CREW_ASYNC_EARLY_EXIT_GUARD=0` | Disable 3s background early-exit guard. |
|
|
129
|
-
|
|
130
|
-
## State transition summary
|
|
131
|
-
|
|
132
|
-
```text
|
|
133
|
-
queued/planning/running ── completed
|
|
134
|
-
├─ failed
|
|
135
|
-
├─ blocked
|
|
136
|
-
└─ cancelled
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
Task states follow the same durable contract plus `skipped`. Terminal states are monotonic during parallel merge.
|
|
140
|
-
|
|
141
|
-
## Observability tips
|
|
142
|
-
|
|
143
|
-
- Use `/team-dashboard` for a UI overview.
|
|
144
|
-
- Use `team status runId=...` for canonical state and stale async detection.
|
|
145
|
-
- Read `background.log` for early import/spawn errors.
|
|
146
|
-
- Read `events.jsonl` for event chronology.
|
|
147
|
-
- Read `agents/{taskId}/status.json` for per-agent model/progress/tool status.
|
|
148
|
-
- Read `artifacts/{runId}/transcripts/{taskId}.jsonl` for raw child Pi transcript.
|
|
1
|
+
# pi-crew Runtime Flow
|
|
2
|
+
|
|
3
|
+
This document is a compact map of the runtime paths used by `pi-crew`.
|
|
4
|
+
|
|
5
|
+
## Main sequence
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
User / model
|
|
9
|
+
│ calls team({ action: "run", ... }) or /team-run
|
|
10
|
+
▼
|
|
11
|
+
handleTeamTool()
|
|
12
|
+
│ validates schema and routes action
|
|
13
|
+
▼
|
|
14
|
+
handleRun()
|
|
15
|
+
├─ discoverTeams/discoverWorkflows/discoverAgents
|
|
16
|
+
├─ validateWorkflowForTeam
|
|
17
|
+
├─ expandParallelResearchWorkflow when applicable
|
|
18
|
+
├─ createRunManifest + tasks.json + goal artifact
|
|
19
|
+
├─ if async=true ─────────────────────────────────────────────┐
|
|
20
|
+
│ spawnBackgroundTeamRun() │
|
|
21
|
+
│ ├─ resolve jiti-register.mjs │
|
|
22
|
+
│ ├─ fail-fast if jiti missing │
|
|
23
|
+
│ ├─ node --import jiti-register.mjs background-runner.ts │
|
|
24
|
+
│ └─ parent schedules early-exit guard │
|
|
25
|
+
│ ▼
|
|
26
|
+
│ background-runner.ts
|
|
27
|
+
│ ├─ append async.started
|
|
28
|
+
│ ├─ write async.pid startup marker
|
|
29
|
+
│ ├─ rediscover team/workflow/agents
|
|
30
|
+
│ └─ executeTeamRun()
|
|
31
|
+
│
|
|
32
|
+
└─ if foreground/default
|
|
33
|
+
├─ startForegroundRun schedules session-bound run, or
|
|
34
|
+
└─ executeTeamRun inline for scaffold/non-scheduled paths
|
|
35
|
+
|
|
36
|
+
executeTeamRun()
|
|
37
|
+
├─ write run.running
|
|
38
|
+
├─ materialize queued/running agent records lazily
|
|
39
|
+
├─ build task graph index
|
|
40
|
+
├─ while queued tasks exist
|
|
41
|
+
│ ├─ taskGraphSnapshot
|
|
42
|
+
│ ├─ resolveBatchConcurrency
|
|
43
|
+
│ ├─ getReadyTasks
|
|
44
|
+
│ ├─ append task.progress batch event
|
|
45
|
+
│ ├─ mapConcurrent ready batch
|
|
46
|
+
│ │ └─ runTeamTask()
|
|
47
|
+
│ │ ├─ prepare workspace/worktree
|
|
48
|
+
│ │ ├─ build task packet
|
|
49
|
+
│ │ ├─ render prompt + dependency context
|
|
50
|
+
│ │ ├─ choose model candidates from Pi config
|
|
51
|
+
│ │ ├─ spawn child Pi process
|
|
52
|
+
│ │ ├─ ChildPiLineObserver parses stdout/stderr
|
|
53
|
+
│ │ ├─ append per-agent events/output
|
|
54
|
+
│ │ ├─ update agent progress/task state
|
|
55
|
+
│ │ ├─ parse final JSONL/session usage
|
|
56
|
+
│ │ └─ write result/log/transcript/metadata artifacts
|
|
57
|
+
│ ├─ merge task updates monotonically
|
|
58
|
+
│ ├─ optional adaptive plan injection
|
|
59
|
+
│ ├─ save tasks/agents/progress
|
|
60
|
+
│ └─ write batch artifact
|
|
61
|
+
├─ policy closeout
|
|
62
|
+
└─ run.completed / run.failed / run.blocked / run.cancelled
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Action router
|
|
66
|
+
|
|
67
|
+
| Action | Handler | Purpose |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| `run` | `team-tool/run.ts` | Create and execute a run, foreground or async. |
|
|
70
|
+
| `status` | `team-tool.ts` | Show manifest/tasks/agents/events and mark stale async runs failed. |
|
|
71
|
+
| `summary` | `session-summary.ts`/summary handler | Write/read run summary artifact. |
|
|
72
|
+
| `events` | `team-tool.ts` | Tail durable run events. |
|
|
73
|
+
| `artifacts` | `team-tool.ts` | List run artifacts. |
|
|
74
|
+
| `resume` | `team-tool.ts` | Requeue failed/cancelled/skipped/running tasks. |
|
|
75
|
+
| `cancel` | `team-tool.ts` | Mark queued/running tasks cancelled and request foreground interrupt. |
|
|
76
|
+
| `forget` | `run-maintenance.ts` | Delete run state/artifacts with confirmation. |
|
|
77
|
+
| `prune` | `run-maintenance.ts` | Remove old finished runs with confirmation. |
|
|
78
|
+
| `export` | `run-export.ts` | Create portable run bundle. |
|
|
79
|
+
| `import` / `imports` | `run-import.ts` / `import-index.ts` | Store/list imported bundles. |
|
|
80
|
+
| `config` | `config.ts` + config action | Show/update user/project config. |
|
|
81
|
+
| `doctor` | `team-tool/doctor.ts` | Platform/resource/runtime diagnostics. |
|
|
82
|
+
| `validate` | `validate-resources.ts` | Validate agents/teams/workflows. |
|
|
83
|
+
| `recommend` | `team-recommendation.ts` | Suggest team/workflow/action for a goal. |
|
|
84
|
+
| management | `management.ts` | Create/update/delete/rename teams, agents, workflows. |
|
|
85
|
+
| API | `team-tool/api.ts` | File-backed observability/control/mailbox API. |
|
|
86
|
+
|
|
87
|
+
## Worker modes
|
|
88
|
+
|
|
89
|
+
| Mode | Behavior |
|
|
90
|
+
|---|---|
|
|
91
|
+
| `child-process` | Default. Launches real child `pi` processes per task. |
|
|
92
|
+
| `scaffold` | Explicit dry-run. No child Pi worker execution. |
|
|
93
|
+
| `live-session` | Experimental/gated in-process/live agent path. |
|
|
94
|
+
| `auto` | Resolves to child-process unless config/env requests otherwise. |
|
|
95
|
+
|
|
96
|
+
## Important files
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
src/extension/register.ts Pi extension entry/wiring
|
|
100
|
+
src/extension/team-tool/run.ts run creation and foreground/async split
|
|
101
|
+
src/runtime/background-runner.ts detached async entrypoint
|
|
102
|
+
src/runtime/async-runner.ts background spawn command/options
|
|
103
|
+
src/runtime/team-runner.ts workflow/task graph scheduler
|
|
104
|
+
src/runtime/task-runner.ts single task execution
|
|
105
|
+
src/runtime/child-pi.ts child Pi process and output observer
|
|
106
|
+
src/runtime/model-fallback.ts configured model candidates/routing
|
|
107
|
+
src/runtime/concurrency.ts batch concurrency decisions
|
|
108
|
+
src/runtime/process-status.ts pid/liveness/stale detection
|
|
109
|
+
src/state/state-store.ts manifest/tasks persistence
|
|
110
|
+
src/state/event-log.ts JSONL run events
|
|
111
|
+
src/runtime/crew-agent-records.ts aggregate + per-agent status files
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Environment variables
|
|
115
|
+
|
|
116
|
+
| Env | Effect |
|
|
117
|
+
|---|---|
|
|
118
|
+
| `PI_CREW_EXECUTE_WORKERS=0` | Disable real workers, use scaffold behavior. |
|
|
119
|
+
| `PI_TEAMS_EXECUTE_WORKERS=0` | Legacy alias for worker disable. |
|
|
120
|
+
| `PI_CREW_ENABLE_EXPERIMENTAL_LIVE_SESSION=1` | Allow experimental live-session runtime. |
|
|
121
|
+
| `PI_CREW_MOCK_LIVE_SESSION=success` | Test hook for live-session mock. |
|
|
122
|
+
| `PI_TEAMS_MOCK_CHILD_PI` | Test hook for mocked child Pi execution. |
|
|
123
|
+
| `PI_CREW_DEPTH`, `PI_CREW_MAX_DEPTH` | Canonical subagent recursion guard. |
|
|
124
|
+
| `PI_TEAMS_DEPTH`, `PI_TEAMS_MAX_DEPTH` | Legacy recursion guard aliases. |
|
|
125
|
+
| `PI_TEAMS_HOME` | Override user config/state home in tests. |
|
|
126
|
+
| `PI_TEAMS_PI_BIN` | Override child `pi` executable. |
|
|
127
|
+
| `PI_CODING_AGENT_DIR` | Override Pi settings/models directory for model discovery. |
|
|
128
|
+
| `PI_CREW_ASYNC_EARLY_EXIT_GUARD=0` | Disable 3s background early-exit guard. |
|
|
129
|
+
|
|
130
|
+
## State transition summary
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
queued/planning/running ── completed
|
|
134
|
+
├─ failed
|
|
135
|
+
├─ blocked
|
|
136
|
+
└─ cancelled
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Task states follow the same durable contract plus `skipped`. Terminal states are monotonic during parallel merge.
|
|
140
|
+
|
|
141
|
+
## Observability tips
|
|
142
|
+
|
|
143
|
+
- Use `/team-dashboard` for a UI overview.
|
|
144
|
+
- Use `team status runId=...` for canonical state and stale async detection.
|
|
145
|
+
- Read `background.log` for early import/spawn errors.
|
|
146
|
+
- Read `events.jsonl` for event chronology.
|
|
147
|
+
- Read `agents/{taskId}/status.json` for per-agent model/progress/tool status.
|
|
148
|
+
- Read `artifacts/{runId}/transcripts/{taskId}.jsonl` for raw child Pi transcript.
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# Phân tích: Chuyển pi-crew hoàn toàn sang in-process execution
|
|
2
|
+
|
|
3
|
+
> Ngày: 2026-05-12
|
|
4
|
+
> Câu hỏi: Nếu chuyển hẳn sang in-process giống pi-subagents3 thì sao?
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. Hiện trạng
|
|
9
|
+
|
|
10
|
+
pi-crew có **3 runtime modes**, child-process là default:
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
scaffold → không chạy workers (dry-run)
|
|
14
|
+
child-process → spawn `pi` CLI subprocess per worker (DEFAULT)
|
|
15
|
+
live-session → createAgentSession() in-process per worker
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Code liên quan child-process
|
|
19
|
+
|
|
20
|
+
| File | LOC | Vai trò |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `child-pi.ts` | 461 | Subprocess lifecycle, stdout parsing, kill process tree |
|
|
23
|
+
| `pi-args.ts` | 165 | Build CLI args cho child `pi` process |
|
|
24
|
+
| `pi-spawn.ts` | 167 | Detect `pi` binary path (local/global) |
|
|
25
|
+
| `post-exit-stdio-guard.ts` | 86 | Drain child stdout sau exit, hard kill timer |
|
|
26
|
+
| `async-runner.ts` | 153 | Spawn background team runs ( detached process) |
|
|
27
|
+
| **Tổng** | **1.032** | **Code chỉ dùng cho child-process** |
|
|
28
|
+
|
|
29
|
+
### Code liên quan live-session (đã có sẵn)
|
|
30
|
+
|
|
31
|
+
| File | LOC | Vai trò |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `live-session-runtime.ts` | 600 | In-process execution, soft turn limit, yield, custom tools |
|
|
34
|
+
| `runtime-resolver.ts` | 92 | Auto-detect available runtime |
|
|
35
|
+
| `task-runner/live-executor.ts` | 95 | Adapter: live-session → task-runner interface |
|
|
36
|
+
|
|
37
|
+
### Files sử dụng child-process path
|
|
38
|
+
|
|
39
|
+
- `task-runner.ts` — 8 references, ~120 dòng logic riêng child-process (heartbeat, progress, model retry)
|
|
40
|
+
- `register.ts` — `terminateActiveChildPiProcesses()` cleanup
|
|
41
|
+
- `doctor.ts` — diagnose child-process issues
|
|
42
|
+
- `async-runner.ts` — spawn background team runs
|
|
43
|
+
|
|
44
|
+
### Tests liên quan
|
|
45
|
+
|
|
46
|
+
- ~37 test files reference child-process / mock child
|
|
47
|
+
- ~3 test files reference live-session mock
|
|
48
|
+
- Tất cả integration tests dùng `PI_TEAMS_MOCK_CHILD_PI` — **cần rewrite** nếu bỏ child-process
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 2. Nếu chuyển hẳn sang in-process
|
|
53
|
+
|
|
54
|
+
### 2.1 Những gì ĐƯỢC
|
|
55
|
+
|
|
56
|
+
#### Lợi tức tức thì
|
|
57
|
+
|
|
58
|
+
| Metric | child-process | in-process | Cải thiện |
|
|
59
|
+
|---|---|---|---|
|
|
60
|
+
| Memory / worker | ~150 MB | ~15 MB | **10× nhẹ hơn** |
|
|
61
|
+
| 4 workers peak | ~600 MB thêm | ~60 MB thêm | **540 MB tiết kiệm** |
|
|
62
|
+
| Startup / worker | 2-4s | 200-500ms | **8× nhanh hơn** |
|
|
63
|
+
| Team startup (3 phases) | 6-12s overhead | ~1s overhead | **6-12× nhanh hơn** |
|
|
64
|
+
| Steering | ❌ | ✅ | **Tính năng mới** |
|
|
65
|
+
| Resume | ❌ | ✅ | **Tính năng mới** |
|
|
66
|
+
| Context inheritance | ❌ | ✅ (parentContext) | **Tính năng mới** |
|
|
67
|
+
| Live tool activity | ❌ | ✅ | **Tính năng mới** |
|
|
68
|
+
| Yield/submit_result | ✅ (JSON event) | ✅ (custom tool) | Parity |
|
|
69
|
+
| Worktree isolation | ✅ | ✅ | Parity |
|
|
70
|
+
|
|
71
|
+
#### Lợi tức kiến trúc
|
|
72
|
+
|
|
73
|
+
- **Xóa ~1.000 LOC** subprocess management code
|
|
74
|
+
- Đơn giản hóa `task-runner.ts` (bỏ 120 dòng child-process logic)
|
|
75
|
+
- Bỏ `post-exit-stdio-guard.ts`, `pi-spawn.ts`, `pi-args.ts` subprocess overhead
|
|
76
|
+
- Bỏ `responseTimeoutMs`, `hardKillMs`, `postExitStdioGuardMs` — không cần kill process tree
|
|
77
|
+
- **Zero npm dependencies cho execution** (hiện cần `jiti` cho async-runner TypeScript loading)
|
|
78
|
+
|
|
79
|
+
### 2.2 Những gì MẤT
|
|
80
|
+
|
|
81
|
+
#### ❌ Process isolation — biggest loss
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
child-process: worker crash → worker dies → parent continues
|
|
85
|
+
in-process: worker crash → có thể crash parent → toàn bộ team mất
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Pi SDK `createAgentSession()` đã handle phần lớn errors, nhưng:
|
|
89
|
+
- **Unhandled promise rejection** trong session
|
|
90
|
+
- **Infinite loop** trong custom tool
|
|
91
|
+
- **OOM** — một session ăn hết memory ảnh hưởng tất cả
|
|
92
|
+
- **Node.js segfault** — rare nhưng khi xảy ra = chết hết
|
|
93
|
+
|
|
94
|
+
#### ❌ Async background team runs
|
|
95
|
+
|
|
96
|
+
`async-runner.ts` spawn một **detached process** chạy team khi user close terminal. In-process không thể — process chết khi terminal close.
|
|
97
|
+
|
|
98
|
+
**Giải pháp:** Giữ `async-runner.ts` riêng cho background runs — nó spawn cả team runner, không phải individual workers.
|
|
99
|
+
|
|
100
|
+
#### ❌ Depth guard đơn giản
|
|
101
|
+
|
|
102
|
+
`checkCrewDepth()` đếm `PI_CREW_PARENT_PID` env var. In-process không có process boundary → đếm depth khó hơn. Cần dùng global counter hoặc thread-local.
|
|
103
|
+
|
|
104
|
+
#### ❌ 37+ test files cần update
|
|
105
|
+
|
|
106
|
+
Tất cả integration tests dùng `PI_TEAMS_MOCK_CHILD_PI`. Cần chuyển sang `PI_CREW_MOCK_LIVE_SESSION` hoặc viết mock mới.
|
|
107
|
+
|
|
108
|
+
#### ❌ `_CrewRuntimeKind` type union
|
|
109
|
+
|
|
110
|
+
`"scaffold" | "child-process" | "live-session"` → nếu bỏ child-process thì chỉ còn `"scaffold" | "in-process"`. Breaking change cho config.
|
|
111
|
+
|
|
112
|
+
### 2.3 Rủi ro cụ thể
|
|
113
|
+
|
|
114
|
+
| Rủi ro | Mức độ | Chi tiết |
|
|
115
|
+
|---|---|---|
|
|
116
|
+
| Parent crash | **Medium** | Unhandled error in agent session → parent dies. Pi SDK wraps大部分 nhưng không phải 100%. |
|
|
117
|
+
| Memory pressure | **Medium** | 4 in-process sessions + context windows có thể chiếm >500MB trong cùng heap. V8 GC pause. |
|
|
118
|
+
| Extension conflicts | **Low** | In-process extensions có thể conflict (global state, tool registry). Đã có filter nhưng edge cases. |
|
|
119
|
+
| Recursive team calls | **Low** | `team` tool trong agent session → infinite recursion. Đã filter nhưng cần guarantee. |
|
|
120
|
+
| Background runs | **Solved** | Giữ `async-runner.ts` riêng, chỉ spawn 1 detached process cho full team. |
|
|
121
|
+
| Breaking config | **Low** | User đang set `mode: "child-process"` → cần migration path. |
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 3. Hai hướng đi
|
|
126
|
+
|
|
127
|
+
### Hướng A: Bỏ hoàn toàn child-process (giống pi-subagents3)
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
┌─────────────────────────┐
|
|
131
|
+
│ task-runner.ts │
|
|
132
|
+
│ runtime = "in-process" │
|
|
133
|
+
├─────────────────────────┤
|
|
134
|
+
│ live-session-runtime.ts │
|
|
135
|
+
│ createAgentSession() │
|
|
136
|
+
│ session.prompt() │
|
|
137
|
+
│ session.steer() │
|
|
138
|
+
├─────────────────────────┤
|
|
139
|
+
│ Pi SDK (shared) │
|
|
140
|
+
└─────────────────────────┘
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Xóa:** `child-pi.ts`, `pi-args.ts`, `pi-spawn.ts`, `post-exit-stdio-guard.ts` (~879 LOC)
|
|
144
|
+
**Giữ:** `async-runner.ts` (cho background team runs — spawn 1 process cho cả team, không phải per-worker)
|
|
145
|
+
**Đổi:** `task-runner.ts` → bỏ child-process branch, chỉ dùng live-session
|
|
146
|
+
**Đổi:** Tất cả 37+ test files
|
|
147
|
+
|
|
148
|
+
**Pros:** Clean architecture, đơn giản nhất, maintenance thấp nhất
|
|
149
|
+
**Cons:** Mất crash isolation cho per-worker, nhiều test cần rewrite
|
|
150
|
+
|
|
151
|
+
### Hướng B: Live-session default + child-process opt-in (khuyến nghị)
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
┌─────────────────────────────────┐
|
|
155
|
+
│ task-runner.ts │
|
|
156
|
+
│ default: live-session │
|
|
157
|
+
│ opt-in: child-process │
|
|
158
|
+
│ background: async-runner │
|
|
159
|
+
├──────────┬───────────────────────┤
|
|
160
|
+
│ in-proc │ child-process │
|
|
161
|
+
│ (fast) │ (isolated, fallback) │
|
|
162
|
+
└──────────┴───────────────────────┘
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Đổi:** `runtime-resolver.ts` → `"auto"` prefer live-session
|
|
166
|
+
**Giữ:** Tất cả child-process code (fallback)
|
|
167
|
+
**Giữ:** Tất cả tests
|
|
168
|
+
**Thêm:** Config `"riskyIsolation": true"` cho executor role auto-use child-process
|
|
169
|
+
|
|
170
|
+
**Pros:** Best of both worlds, zero breaking change
|
|
171
|
+
**Cons:** Vẫn maintain 2 code paths
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 4. Khuyến nghị: Hướng B
|
|
176
|
+
|
|
177
|
+
**Không nên bỏ child-process hoàn toàn** — quá rủi ro cho production. Thay vào đó:
|
|
178
|
+
|
|
179
|
+
### Bước 1: Đổi default runtime (nhanh, ít rủi ro)
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
// runtime-resolver.ts
|
|
183
|
+
// Trước: "auto" → luôn child-process
|
|
184
|
+
// Sau: "auto" → thử live-session, fallback child-process
|
|
185
|
+
|
|
186
|
+
export async function resolveCrewRuntime(config, env) {
|
|
187
|
+
const requestedMode = config.runtime?.mode ?? "auto";
|
|
188
|
+
if (requestedMode === "auto") {
|
|
189
|
+
const live = await isLiveSessionRuntimeAvailable(1500, env);
|
|
190
|
+
if (live.available) return liveCaps(requestedMode);
|
|
191
|
+
return { ...childCaps(requestedMode), fallback: "child-process", reason: live.reason };
|
|
192
|
+
}
|
|
193
|
+
// Explicit modes still work
|
|
194
|
+
if (requestedMode === "child-process") return childCaps(requestedMode);
|
|
195
|
+
if (requestedMode === "live-session") { /* ... */ }
|
|
196
|
+
// ...
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Bước 2: Thêm per-role isolation policy
|
|
201
|
+
|
|
202
|
+
```json
|
|
203
|
+
// crew-config.json
|
|
204
|
+
{
|
|
205
|
+
"runtime": {
|
|
206
|
+
"mode": "auto",
|
|
207
|
+
"isolationPolicy": {
|
|
208
|
+
"executor": "child-process", // risky code changes → isolated
|
|
209
|
+
"test-engineer": "child-process", // test runs → isolated
|
|
210
|
+
"default": "in-process" // everything else → fast
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Bước 3: Observability cho in-process errors
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// Wrap session.prompt() với global error handler
|
|
220
|
+
process.on('unhandledRejection', (err) => {
|
|
221
|
+
logInternalError('live-session.unhandled', err);
|
|
222
|
+
// Don't crash — attempt recovery
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Lợi tức dự kiến Hướng B
|
|
227
|
+
|
|
228
|
+
| | Hiện tại | Sau Bước 1 | Sau Bước 2 |
|
|
229
|
+
|---|---|---|---|
|
|
230
|
+
| **Default runtime** | child-process | live-session (auto) | live-session + per-role |
|
|
231
|
+
| **Memory (4 workers)** | ~910 MB | ~370 MB | ~450 MB (mix) |
|
|
232
|
+
| **Startup** | 2-4s/worker | 200-500ms/worker | Mix |
|
|
233
|
+
| **Crash isolation** | ✅ all | ✅ fallback | ✅ risky roles |
|
|
234
|
+
| **Steering** | ❌ | ✅ | ✅ |
|
|
235
|
+
| **Breaking changes** | — | None | None |
|
|
236
|
+
| **Code xóa** | — | 0 | 0 (giữ fallback) |
|
|
237
|
+
| **Tests cần đổi** | — | 0 | 0 |
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 5. Kết luận
|
|
242
|
+
|
|
243
|
+
**Không nên chuyển hẳn 100% in-process.** Lý do:
|
|
244
|
+
|
|
245
|
+
1. **Crash isolation quá quan trọng** cho executor/test-engineer roles — những agent này chạy code, write files, có thể infinite loop
|
|
246
|
+
2. **Background runs cần detached process** — không thể in-process
|
|
247
|
+
3. **37+ test files cần rewrite** — chi phí migration cao
|
|
248
|
+
4. **Breaking change** cho users đang dùng `mode: "child-process"`
|
|
249
|
+
|
|
250
|
+
**Thay vào đó: Đổi default sang live-session + giữ child-process làm fallback/opt-in.** Đây chính là thiết kế sẵn của `resolveCrewRuntime()` — chỉ cần flip default trong `"auto"` mode. Zero code xóa, zero breaking change, users tự chọn khi cần isolation.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Stories
|
|
2
|
+
|
|
3
|
+
Story-sized work packets for pi-crew development.
|
|
4
|
+
|
|
5
|
+
## Status Values
|
|
6
|
+
|
|
7
|
+
| Status | Meaning |
|
|
8
|
+
|--------|---------|
|
|
9
|
+
| planned | Accepted, not started |
|
|
10
|
+
| in_progress | Actively being worked |
|
|
11
|
+
| completed | Done with evidence |
|
|
12
|
+
| blocked | Waiting on external input |
|
|
13
|
+
|
|
14
|
+
## Active Stories
|
|
15
|
+
|
|
16
|
+
No active stories. Pick from backlog or create new ones via feature intake.
|
|
17
|
+
|
|
18
|
+
## Completed Stories (from review rounds)
|
|
19
|
+
|
|
20
|
+
| ID | Title | Lane | Result |
|
|
21
|
+
|----|-------|------|--------|
|
|
22
|
+
| RR-001 | Depth guard for nested live-session | normal | commit 2640d5e |
|
|
23
|
+
| RR-002 | Windows EBUSY retry | normal | commit ceb8c60 |
|
|
24
|
+
| RR-003 | Harden live-session resource management | normal | commit c7bd455 |
|
|
25
|
+
| RR-004 | Stale task/agent repair | normal | commit d6d466d |
|
|
26
|
+
| RR-005 | Async runner child-process enforcement | high-risk | commit 2486051 |
|
|
27
|
+
| RR-006 | Live-session resource leak fix | normal | commit 7a25644 |
|
|
28
|
+
| RR-007 | Double cleanupTempDir guard | tiny | commit 5f47e92 |
|
|
29
|
+
| RR-008 | Review round 8 (8 issues) | normal | commit 4e75ba8 |
|
|
30
|
+
| RR-009 | Review round 9 (5 issues) | normal | commit f3d29cc |
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Story Backlog
|
|
2
|
+
|
|
3
|
+
Candidate stories for future pi-crew development.
|
|
4
|
+
|
|
5
|
+
## Epic: Reliability
|
|
6
|
+
|
|
7
|
+
| ID | Title | Lane | Priority | Status |
|
|
8
|
+
|----|-------|------|----------|--------|
|
|
9
|
+
| US-001 | Lock-free event log rotation | normal | P2 | planned |
|
|
10
|
+
| US-002 | Structured run-level lock cleanup | normal | P2 | planned |
|
|
11
|
+
| US-003 | Dead letter queue for permanently failed tasks | normal | P3 | planned |
|
|
12
|
+
|
|
13
|
+
## Epic: Performance
|
|
14
|
+
|
|
15
|
+
| ID | Title | Lane | Priority | Status |
|
|
16
|
+
|----|-------|------|----------|--------|
|
|
17
|
+
| US-010 | Replace sleepSync busy-wait with proper async | normal | P3 | planned |
|
|
18
|
+
| US-011 | Stream-based event log for large runs | normal | P3 | planned |
|
|
19
|
+
| US-012 | Cache available models across runs | tiny | P3 | planned |
|
|
20
|
+
|
|
21
|
+
## Epic: DX (Developer Experience)
|
|
22
|
+
|
|
23
|
+
| ID | Title | Lane | Priority | Status |
|
|
24
|
+
|----|-------|------|----------|--------|
|
|
25
|
+
| US-020 | Interactive run dashboard in TUI | normal | P2 | planned |
|
|
26
|
+
| US-021 | Run comparison (before/after) | normal | P3 | planned |
|
|
27
|
+
| US-022 | Export run report as markdown | tiny | P3 | planned |
|
|
28
|
+
|
|
29
|
+
## Epic: Integration
|
|
30
|
+
|
|
31
|
+
| ID | Title | Lane | Priority | Status |
|
|
32
|
+
|----|-------|------|----------|--------|
|
|
33
|
+
| US-030 | Webhook notifications on run completion | normal | P3 | planned |
|
|
34
|
+
| US-031 | GitHub Actions integration (report results as PR comment) | normal | P3 | planned |
|
|
35
|
+
|
|
36
|
+
Create story packets from `docs/templates/story.md` when work is selected.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# NNNN Decision Title
|
|
2
|
+
|
|
3
|
+
Date: YYYY-MM-DD
|
|
4
|
+
|
|
5
|
+
## Status
|
|
6
|
+
|
|
7
|
+
Proposed | Accepted | Superseded | Rejected
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
What problem, constraint, or ambiguity forced this decision?
|
|
12
|
+
|
|
13
|
+
## Decision
|
|
14
|
+
|
|
15
|
+
What did we decide?
|
|
16
|
+
|
|
17
|
+
## Alternatives Considered
|
|
18
|
+
|
|
19
|
+
1. Alternative.
|
|
20
|
+
|
|
21
|
+
## Consequences
|
|
22
|
+
|
|
23
|
+
Positive:
|
|
24
|
+
- Item.
|
|
25
|
+
|
|
26
|
+
Tradeoffs:
|
|
27
|
+
- Item.
|