pi-crew 0.9.50 → 0.9.52
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/CHANGELOG.md +150 -0
- package/README.md +216 -20
- package/dist/build-meta.json +2222 -1761
- package/dist/index.mjs +18636 -17603
- package/docs/actions-reference.md +431 -1
- package/package.json +19 -9
- package/schema.json +41 -0
- package/scripts/check-bundle-size.mjs +38 -0
- package/scripts/test-runner.mjs +11 -1
- package/skills/distill-software/SKILL.md +24 -1
- package/dist/index.mjs.map +0 -7
- package/docs/FEATURE_INTAKE.md +0 -126
- package/docs/HARNESS.md +0 -87
- package/docs/HARNESS_BACKLOG.md +0 -89
- package/docs/PROJECT_REVIEW.md +0 -270
- package/docs/PROJECT_REVIEW_FIXES.md +0 -342
- package/docs/PROJECT_REVIEW_ROUND4.md +0 -156
- package/docs/PROJECT_REVIEW_ROUND5.md +0 -86
- package/docs/REVIEW-FINDINGS-2026-06 +0 -357
- package/docs/REVIEW-FINDINGS-2026-07-CORE.md +0 -139
- package/docs/REVIEW-FINDINGS-2026-07.md +0 -125
- package/docs/TEST_MATRIX.md +0 -51
- package/docs/archive/README.md +0 -91
- package/docs/archive/followup-review-round3-2026-05-12.md +0 -342
- package/docs/archive/followup-review-round4-2026-05-13.md +0 -107
- package/docs/archive/pi-crew-bugs.md +0 -961
- package/docs/archive/pi-crew-test-final.md +0 -120
- package/docs/archive/pi-crew-test-results.md +0 -260
- package/docs/archive/pi-crew-test-round2.md +0 -136
- package/docs/archive/pi-crew-test-round4.md +0 -100
- package/docs/archive/pi-crew-test-round5.md +0 -70
- package/docs/archive/pi-crew-test-round6.md +0 -110
- package/docs/archive/pi-crew-v0.5.10-audit-fix-plan.md +0 -60
- package/docs/archive/pi-crew-v0.5.11-audit-fix-plan.md +0 -92
- package/docs/archive/pi-crew-v0.5.12-audit-fix-plan.md +0 -76
- package/docs/archive/pi-crew-v0.5.13-audit-fix-plan.md +0 -75
- package/docs/archive/pi-crew-v0.5.14-audit-fix-plan.md +0 -75
- package/docs/archive/pi-crew-v0.5.16-audit-fix-plan.md +0 -35
- package/docs/archive/pi-crew-v0.5.17-audit-fix-plan.md +0 -80
- package/docs/archive/pi-crew-v0.5.5-audit-fix-plan.md +0 -133
- package/docs/archive/pi-crew-v0.5.9-audit-fix-plan.md +0 -88
- package/docs/archive/pi-mono-opportunities.md +0 -969
- package/docs/archive/pi-mono-review.md +0 -291
- package/docs/archive/pi-subagent4-comparison.md +0 -261
- package/docs/archive/pi-subagents3-deep-analysis.md +0 -508
- package/docs/bugs/bug-021-notification-badge-counter-misleading.md +0 -293
- package/docs/bugs/bug-023-chain-windows-path-resolution.md +0 -106
- package/docs/bugs/bug-quota-display-truncation.md +0 -223
- package/docs/bugs/cross-session-notification-leakage.md +0 -82
- package/docs/code-review-2026-05-11.md +0 -592
- package/docs/coding-agent-optimization.md +0 -268
- package/docs/comparison-pi-subagents-vs-pi-crew.md +0 -303
- package/docs/decisions/0001-durable-state.md +0 -41
- package/docs/decisions/0002-child-process-for-async.md +0 -42
- package/docs/decisions/0003-depth-guard.md +0 -36
- package/docs/decisions/0004-execfile-over-exec.md +0 -34
- package/docs/decisions/0005-no-parameter-properties.md +0 -49
- package/docs/decisions/0006-publish-bundled-esm.md +0 -63
- package/docs/decisions/0007-active-run-binary-index.md +0 -54
- package/docs/decisions/0008-child-pi-warm-pool.md +0 -61
- package/docs/decisions/2026-07-21-broker-phase4-default-on.md +0 -77
- package/docs/decisions/2026-07-21-broker-windows-perms.md +0 -91
- package/docs/decisions/2026-07-22-broker-phase4-gated-on.md +0 -99
- package/docs/decisions/2026-07-24-oidc-trusted-publishing.md +0 -112
- package/docs/decisions/README.md +0 -26
- package/docs/deep-review-report.md +0 -384
- package/docs/distillation/cybersecurity-patterns.md +0 -294
- package/docs/feature-analysis-subagent4.md +0 -305
- package/docs/fix-plan-disabletools-exit-null.md +0 -219
- package/docs/fixes/BATCH_A_H1_H2.md +0 -86
- package/docs/fixes/bug-006-foreground-cancel-concurrent.md +0 -78
- package/docs/fixes/bug-007-async-notifier-stale-ctx.md +0 -112
- package/docs/fixes/bug-008-child-process-silent-timeout.md +0 -100
- package/docs/fixes/bug-009-executor-yield-limit-needs-attention.md +0 -75
- package/docs/fixes/bug-010-child-process-api-key-filtered.md +0 -109
- package/docs/fixes/bug-011-spawn-pi-enoent.md +0 -92
- package/docs/fixes/bug-012-essential-env-stripped.md +0 -89
- package/docs/fixes/bug-013-background-runner-death.md +0 -84
- package/docs/fixes/bug-014-infinite-retry-loop-needs-attention.md +0 -82
- package/docs/fixes/bug-015-background-runner-sigterm.md +0 -65
- package/docs/fixes/bug-017-background-runner-session-shutdown.md +0 -66
- package/docs/fixes/bug-017-background-runner-sigkill-double-fork.md +0 -28
- package/docs/fixes/bug-018-child-pi-worker-stdin-hang.md +0 -61
- package/docs/fixes/bug-019-phantom-runs-temp-workspace.md +0 -52
- package/docs/fixes/bug-020-infinite-retry-loop-needs-attention.md +0 -47
- package/docs/fixes/v0.9.10/locks-fix-verify.md +0 -3
- package/docs/fixes/v0.9.10/smoke-test.md +0 -12
- package/docs/followup-plan-2026-05-12.md +0 -463
- package/docs/followup-review-2026-05-12.md +0 -297
- package/docs/goals.md +0 -59
- package/docs/implementation-plan-top3.md +0 -333
- package/docs/issue-29-analysis.md +0 -189
- package/docs/live-mailbox-runtime.md +0 -36
- package/docs/migration/atomic-write-v2-migration.md +0 -299
- package/docs/next-upgrade-roadmap.md +0 -808
- package/docs/oh-my-pi-research.md +0 -509
- package/docs/optimization-plan-2026-07.md +0 -366
- package/docs/optimization-plan.md +0 -644
- package/docs/patterns/command-agent-skill.md +0 -71
- package/docs/perf/baseline-2026-05.md +0 -113
- package/docs/perf/final-report-2026-05.md +0 -206
- package/docs/perf/optimization-plan-2026-07-verified.md +0 -396
- package/docs/perf/performance-audit-report-2026-07.md +0 -948
- package/docs/perf/performance-review-2026-07.md +0 -287
- package/docs/perf/sprint-1-report.md +0 -71
- package/docs/perf/sprint-2-report.md +0 -81
- package/docs/perf/sprint-2.5-report.md +0 -53
- package/docs/perf/sprint-3-report.md +0 -36
- package/docs/perf/sprint-4-report.md +0 -47
- package/docs/perf/sprint-5-report.md +0 -51
- package/docs/perf/sprint-6-report.md +0 -94
- package/docs/perf/sprint-7-report.md +0 -74
- package/docs/perf/upgrade-plan-2026-05.md +0 -147
- package/docs/performance-optimization-execution-plan.md +0 -520
- package/docs/phase4-triage.md +0 -58
- package/docs/pi-crew-investigation-report.md +0 -411
- package/docs/product/README.md +0 -31
- package/docs/product/platform.md +0 -27
- package/docs/product/runtime-safety.md +0 -37
- package/docs/product/team-run.md +0 -39
- package/docs/product/team-tool.md +0 -37
- package/docs/runtime-analysis-child-vs-live.md +0 -171
- package/docs/runtime-migration-in-process-analysis.md +0 -250
- package/docs/skills/REFERENCE.md +0 -138
- package/docs/stories/README.md +0 -32
- package/docs/stories/US-DEPS-major-upgrade.md +0 -62
- package/docs/stories/backlog.md +0 -36
- package/docs/superpowers/plans/2026-06-09-fallow-patterns-adoption.md +0 -1270
- package/docs/templates/decision.md +0 -27
- package/docs/templates/story.md +0 -44
- package/docs/templates/validation-report.md +0 -32
- package/docs/ui-optimization-plan.md +0 -447
- package/src/adapters/claude-adapter.ts +0 -23
- package/src/adapters/codex-adapter.ts +0 -21
- package/src/adapters/cursor-adapter.ts +0 -17
- package/src/adapters/export-util.ts +0 -143
- package/src/adapters/index.ts +0 -15
- package/src/adapters/registry.ts +0 -18
- package/src/adapters/types.ts +0 -23
- package/src/agents/agent-config.ts +0 -194
- package/src/agents/agent-search.ts +0 -98
- package/src/agents/agent-serializer.ts +0 -38
- package/src/agents/discover-agents.ts +0 -623
- package/src/benchmark/benchmark-runner.ts +0 -313
- package/src/benchmark/feedback-loop.ts +0 -73
- package/src/config/config.ts +0 -1269
- package/src/config/defaults.ts +0 -193
- package/src/config/drift-detector.ts +0 -290
- package/src/config/markers.ts +0 -330
- package/src/config/resilient-parser.ts +0 -117
- package/src/config/role-tools.ts +0 -118
- package/src/config/suggestions.ts +0 -75
- package/src/config/types.ts +0 -278
- package/src/errors.ts +0 -194
- package/src/extension/action-suggestions.ts +0 -117
- package/src/extension/async-notifier.ts +0 -179
- package/src/extension/autonomous-policy.ts +0 -209
- package/src/extension/command-completions.ts +0 -120
- package/src/extension/context-status-injection.ts +0 -185
- package/src/extension/crew-autocomplete.ts +0 -131
- package/src/extension/crew-cleanup.ts +0 -168
- package/src/extension/crew-input-router.ts +0 -93
- package/src/extension/crew-shortcuts.ts +0 -87
- package/src/extension/crew-vibes/cat-frames.ts +0 -18
- package/src/extension/crew-vibes/config.ts +0 -195
- package/src/extension/crew-vibes/figures.ts +0 -101
- package/src/extension/crew-vibes/font-detect.ts +0 -71
- package/src/extension/crew-vibes/footer.ts +0 -292
- package/src/extension/crew-vibes/index.ts +0 -432
- package/src/extension/crew-vibes/provider-usage.ts +0 -396
- package/src/extension/crew-vibes/render.ts +0 -206
- package/src/extension/crew-vibes/speed.ts +0 -286
- package/src/extension/cross-extension-rpc.ts +0 -350
- package/src/extension/help.ts +0 -62
- package/src/extension/import-index.ts +0 -74
- package/src/extension/knowledge-injection.ts +0 -402
- package/src/extension/management.ts +0 -571
- package/src/extension/message-renderers.ts +0 -108
- package/src/extension/notification-router.ts +0 -152
- package/src/extension/notification-sink.ts +0 -54
- package/src/extension/pi-api.ts +0 -56
- package/src/extension/plan-orchestrate.ts +0 -302
- package/src/extension/project-init.ts +0 -170
- package/src/extension/register.ts +0 -113
- package/src/extension/registration/artifact-cleanup.ts +0 -20
- package/src/extension/registration/command-registration.ts +0 -58
- package/src/extension/registration/command-utils.ts +0 -58
- package/src/extension/registration/commands.ts +0 -1228
- package/src/extension/registration/compaction-guard.ts +0 -333
- package/src/extension/registration/context-builder.ts +0 -135
- package/src/extension/registration/crash-recovery-cache.ts +0 -54
- package/src/extension/registration/foreground-run-controller.ts +0 -238
- package/src/extension/registration/hook-registration.ts +0 -119
- package/src/extension/registration/lazy-configurers.ts +0 -124
- package/src/extension/registration/lifecycle-handlers.ts +0 -923
- package/src/extension/registration/lifecycle.ts +0 -259
- package/src/extension/registration/observability.ts +0 -322
- package/src/extension/registration/registration-types.ts +0 -158
- package/src/extension/registration/runtime-cleanup.ts +0 -230
- package/src/extension/registration/subagent-helpers.ts +0 -125
- package/src/extension/registration/subagent-manager-setup.ts +0 -330
- package/src/extension/registration/subagent-tools.ts +0 -456
- package/src/extension/registration/team-tool.ts +0 -220
- package/src/extension/registration/tool-registration.ts +0 -50
- package/src/extension/registration/ui.ts +0 -172
- package/src/extension/registration/viewers.ts +0 -121
- package/src/extension/registration/wire-cross-extension.ts +0 -37
- package/src/extension/result-watcher.ts +0 -139
- package/src/extension/rpc-hmac.ts +0 -256
- package/src/extension/run-bundle-schema.ts +0 -104
- package/src/extension/run-export.ts +0 -97
- package/src/extension/run-import.ts +0 -168
- package/src/extension/run-index.ts +0 -131
- package/src/extension/run-maintenance.ts +0 -190
- package/src/extension/session-summary.ts +0 -18
- package/src/extension/team-manager-command.ts +0 -153
- package/src/extension/team-onboard.ts +0 -177
- package/src/extension/team-recommendation.ts +0 -288
- package/src/extension/team-tool/anchor.ts +0 -172
- package/src/extension/team-tool/api.ts +0 -1244
- package/src/extension/team-tool/auto-summarize.ts +0 -142
- package/src/extension/team-tool/cache-control.ts +0 -19
- package/src/extension/team-tool/cancel.ts +0 -337
- package/src/extension/team-tool/chain-dispatch.ts +0 -95
- package/src/extension/team-tool/chain-executor.ts +0 -379
- package/src/extension/team-tool/config-patch.ts +0 -50
- package/src/extension/team-tool/context.ts +0 -149
- package/src/extension/team-tool/destructive-gate.ts +0 -52
- package/src/extension/team-tool/doctor.ts +0 -431
- package/src/extension/team-tool/explain.ts +0 -282
- package/src/extension/team-tool/failure-patterns.ts +0 -118
- package/src/extension/team-tool/goal-wrap.ts +0 -330
- package/src/extension/team-tool/goal.ts +0 -556
- package/src/extension/team-tool/handle-schedule.ts +0 -332
- package/src/extension/team-tool/handle-settings.ts +0 -520
- package/src/extension/team-tool/health-monitor.ts +0 -481
- package/src/extension/team-tool/inspect.ts +0 -88
- package/src/extension/team-tool/intent-policy.ts +0 -45
- package/src/extension/team-tool/lifecycle-actions.ts +0 -615
- package/src/extension/team-tool/orchestrate.ts +0 -98
- package/src/extension/team-tool/parallel-dispatch.ts +0 -183
- package/src/extension/team-tool/plan.ts +0 -50
- package/src/extension/team-tool/respond.ts +0 -150
- package/src/extension/team-tool/run-not-found.ts +0 -49
- package/src/extension/team-tool/run.ts +0 -1035
- package/src/extension/team-tool/status.ts +0 -260
- package/src/extension/team-tool/workflow-manage.ts +0 -261
- package/src/extension/team-tool-types.ts +0 -26
- package/src/extension/team-tool.ts +0 -1116
- package/src/extension/tool-result.ts +0 -16
- package/src/extension/validate-resources.ts +0 -108
- package/src/hooks/registry.ts +0 -200
- package/src/hooks/types.ts +0 -69
- package/src/i18n.ts +0 -212
- package/src/observability/correlation.ts +0 -50
- package/src/observability/event-bus.ts +0 -86
- package/src/observability/event-to-metric.ts +0 -170
- package/src/observability/exporters/adapter.ts +0 -27
- package/src/observability/exporters/otlp-exporter.ts +0 -356
- package/src/observability/exporters/prometheus-exporter.ts +0 -54
- package/src/observability/metric-registry.ts +0 -100
- package/src/observability/metric-retention.ts +0 -64
- package/src/observability/metric-sink.ts +0 -99
- package/src/observability/metrics-primitives.ts +0 -219
- package/src/plugins/plugin-define.ts +0 -6
- package/src/plugins/plugin-registry.ts +0 -32
- package/src/plugins/plugins/index.ts +0 -3
- package/src/plugins/plugins/nextjs.ts +0 -19
- package/src/plugins/plugins/vite.ts +0 -10
- package/src/plugins/plugins/vitest.ts +0 -9
- package/src/prompt/prompt-runtime.ts +0 -380
- package/src/runtime/adaptive-plan.ts +0 -563
- package/src/runtime/agent-control.ts +0 -215
- package/src/runtime/agent-memory.ts +0 -81
- package/src/runtime/agent-observability.ts +0 -122
- package/src/runtime/anchor-manager.ts +0 -475
- package/src/runtime/async-marker.ts +0 -32
- package/src/runtime/async-runner.ts +0 -381
- package/src/runtime/attention-events.ts +0 -28
- package/src/runtime/auto-summarize.ts +0 -344
- package/src/runtime/background-runner.ts +0 -837
- package/src/runtime/batch-barrier.ts +0 -147
- package/src/runtime/broker-issuer.ts +0 -37
- package/src/runtime/cancellation-token.ts +0 -99
- package/src/runtime/cancellation.ts +0 -99
- package/src/runtime/capability-inventory.ts +0 -137
- package/src/runtime/chain-parser.ts +0 -237
- package/src/runtime/chain-runner.ts +0 -606
- package/src/runtime/checkpoint.ts +0 -291
- package/src/runtime/child-pi-constants.ts +0 -42
- package/src/runtime/child-pi-kill.ts +0 -180
- package/src/runtime/child-pi-pool.ts +0 -68
- package/src/runtime/child-pi-spawn.ts +0 -287
- package/src/runtime/child-pi-steering.ts +0 -128
- package/src/runtime/child-pi-streams.ts +0 -296
- package/src/runtime/child-pi-transcript.ts +0 -169
- package/src/runtime/child-pi.ts +0 -1105
- package/src/runtime/coalesce-tasks.ts +0 -268
- package/src/runtime/code-summary.ts +0 -292
- package/src/runtime/command-trace.ts +0 -105
- package/src/runtime/compact-pipeline.ts +0 -56
- package/src/runtime/compact-stages/ansi-strip-stage.ts +0 -25
- package/src/runtime/compact-stages/blank-collapse-stage.ts +0 -31
- package/src/runtime/compact-stages/deduplicate-stage.ts +0 -34
- package/src/runtime/compact-stages/head-snap-stage.ts +0 -57
- package/src/runtime/compact-stages/index.ts +0 -23
- package/src/runtime/compact-stages/tail-capture-stage.ts +0 -77
- package/src/runtime/compact-stages/truncation-stage.ts +0 -74
- package/src/runtime/compaction-summary.ts +0 -278
- package/src/runtime/completion-guard.ts +0 -207
- package/src/runtime/concurrency.ts +0 -58
- package/src/runtime/crash-classification.ts +0 -229
- package/src/runtime/crash-recovery.ts +0 -577
- package/src/runtime/crew-agent-records.ts +0 -593
- package/src/runtime/crew-agent-runtime.ts +0 -62
- package/src/runtime/crew-broker-child.ts +0 -88
- package/src/runtime/crew-broker-client.ts +0 -673
- package/src/runtime/crew-broker-tokens.ts +0 -84
- package/src/runtime/crew-broker.ts +0 -1276
- package/src/runtime/crew-hooks.ts +0 -227
- package/src/runtime/cross-extension-rpc.ts +0 -143
- package/src/runtime/custom-tools/irc-tool.ts +0 -282
- package/src/runtime/custom-tools/submit-result-tool.ts +0 -102
- package/src/runtime/deadletter.ts +0 -47
- package/src/runtime/delivery-coordinator.ts +0 -211
- package/src/runtime/delta-conflict.ts +0 -348
- package/src/runtime/deterministic-ast.ts +0 -161
- package/src/runtime/diagnostic-export.ts +0 -171
- package/src/runtime/direct-run.ts +0 -45
- package/src/runtime/dwf-state-store.ts +0 -102
- package/src/runtime/dynamic-workflow-context.ts +0 -1016
- package/src/runtime/dynamic-workflow-runner.ts +0 -310
- package/src/runtime/effectiveness.ts +0 -90
- package/src/runtime/errors/crew-errors.ts +0 -162
- package/src/runtime/event-stream-bridge.ts +0 -98
- package/src/runtime/foreground-control.ts +0 -193
- package/src/runtime/foreground-watchdog.ts +0 -132
- package/src/runtime/global-worker-cap.ts +0 -96
- package/src/runtime/goal-achievement.ts +0 -148
- package/src/runtime/goal-evaluator.ts +0 -361
- package/src/runtime/goal-loop-runner.ts +0 -828
- package/src/runtime/goal-state-store.ts +0 -219
- package/src/runtime/green-contract.ts +0 -55
- package/src/runtime/group-join.ts +0 -267
- package/src/runtime/handoff-manager.ts +0 -598
- package/src/runtime/heartbeat-gradient.ts +0 -36
- package/src/runtime/heartbeat-watcher.ts +0 -239
- package/src/runtime/hidden-handoff.ts +0 -407
- package/src/runtime/important-line-classifier.ts +0 -140
- package/src/runtime/intercom-bridge.ts +0 -187
- package/src/runtime/iteration-hooks.ts +0 -305
- package/src/runtime/live-agent-control.ts +0 -136
- package/src/runtime/live-agent-manager.ts +0 -704
- package/src/runtime/live-control-realtime.ts +0 -56
- package/src/runtime/live-extension-bridge.ts +0 -148
- package/src/runtime/live-irc.ts +0 -97
- package/src/runtime/live-session-health.ts +0 -108
- package/src/runtime/live-session-runtime.ts +0 -1139
- package/src/runtime/loop-gates.ts +0 -128
- package/src/runtime/manifest-cache.ts +0 -375
- package/src/runtime/mcp-proxy.ts +0 -105
- package/src/runtime/metric-parser.ts +0 -36
- package/src/runtime/model-fallback.ts +0 -409
- package/src/runtime/model-resolver.ts +0 -126
- package/src/runtime/model-scope.ts +0 -158
- package/src/runtime/orphan-worker-registry.ts +0 -465
- package/src/runtime/output-validator.ts +0 -202
- package/src/runtime/overflow-recovery.ts +0 -206
- package/src/runtime/parallel-research.ts +0 -68
- package/src/runtime/parallel-utils.ts +0 -160
- package/src/runtime/parent-guard.ts +0 -134
- package/src/runtime/path-overlap.ts +0 -150
- package/src/runtime/peer-dep.ts +0 -292
- package/src/runtime/per-write-validator.ts +0 -181
- package/src/runtime/phase-progress.ts +0 -217
- package/src/runtime/phase-tracker.ts +0 -385
- package/src/runtime/pi-args.ts +0 -655
- package/src/runtime/pi-json-output.ts +0 -170
- package/src/runtime/pi-spawn.ts +0 -273
- package/src/runtime/pipeline-runner.ts +0 -523
- package/src/runtime/plan-templates.ts +0 -201
- package/src/runtime/policy-engine.ts +0 -115
- package/src/runtime/post-checks.ts +0 -142
- package/src/runtime/post-exit-stdio-guard.ts +0 -104
- package/src/runtime/process-lifecycle.ts +0 -491
- package/src/runtime/process-status.ts +0 -154
- package/src/runtime/progress-event-coalescer.ts +0 -44
- package/src/runtime/progress-tracker.ts +0 -124
- package/src/runtime/prose-compressor.ts +0 -162
- package/src/runtime/recovery-recipes.ts +0 -203
- package/src/runtime/replace.ts +0 -570
- package/src/runtime/resilient-edit.ts +0 -153
- package/src/runtime/result-extractor.ts +0 -213
- package/src/runtime/retry-executor.ts +0 -100
- package/src/runtime/retry-runner.ts +0 -336
- package/src/runtime/role-permission.ts +0 -59
- package/src/runtime/run-coalesced-task-group.ts +0 -308
- package/src/runtime/run-drift.ts +0 -219
- package/src/runtime/run-tracker.ts +0 -116
- package/src/runtime/runtime-policy.ts +0 -29
- package/src/runtime/runtime-resolver.ts +0 -172
- package/src/runtime/runtime-warmup.ts +0 -160
- package/src/runtime/scheduler.ts +0 -353
- package/src/runtime/semaphore.ts +0 -141
- package/src/runtime/sensitive-paths.ts +0 -93
- package/src/runtime/session-resources.ts +0 -25
- package/src/runtime/session-snapshot.ts +0 -59
- package/src/runtime/session-usage.ts +0 -79
- package/src/runtime/settings-store.ts +0 -155
- package/src/runtime/sidechain-output.ts +0 -35
- package/src/runtime/single-agent-compose.ts +0 -84
- package/src/runtime/skill-effectiveness.ts +0 -524
- package/src/runtime/skill-instructions.ts +0 -391
- package/src/runtime/stale-reconciler.ts +0 -680
- package/src/runtime/stream-preview.ts +0 -184
- package/src/runtime/streaming-output.ts +0 -50
- package/src/runtime/subagent-manager.ts +0 -561
- package/src/runtime/subprocess-tool-registry.ts +0 -70
- package/src/runtime/supervisor-contact.ts +0 -64
- package/src/runtime/task-display.ts +0 -52
- package/src/runtime/task-graph-scheduler.ts +0 -227
- package/src/runtime/task-graph.ts +0 -290
- package/src/runtime/task-health.ts +0 -83
- package/src/runtime/task-id.ts +0 -161
- package/src/runtime/task-output-context.ts +0 -602
- package/src/runtime/task-packet.ts +0 -268
- package/src/runtime/task-quality.ts +0 -199
- package/src/runtime/task-runner/capabilities.ts +0 -78
- package/src/runtime/task-runner/context-retrieval.ts +0 -163
- package/src/runtime/task-runner/live-executor.ts +0 -227
- package/src/runtime/task-runner/output-splitter.ts +0 -152
- package/src/runtime/task-runner/progress.ts +0 -157
- package/src/runtime/task-runner/prompt-builder.ts +0 -278
- package/src/runtime/task-runner/prompt-pipeline.ts +0 -88
- package/src/runtime/task-runner/result-utils.ts +0 -16
- package/src/runtime/task-runner/retrieval-orchestrator.ts +0 -310
- package/src/runtime/task-runner/run-projection.ts +0 -125
- package/src/runtime/task-runner/state-helpers.ts +0 -176
- package/src/runtime/task-runner/tail-read.ts +0 -34
- package/src/runtime/task-runner.ts +0 -1420
- package/src/runtime/team-runner-artifacts.ts +0 -13
- package/src/runtime/team-runner.ts +0 -1993
- package/src/runtime/tool-output-pruner.ts +0 -333
- package/src/runtime/tool-progress.ts +0 -278
- package/src/runtime/usage-tracker.ts +0 -73
- package/src/runtime/verification-gates.ts +0 -571
- package/src/runtime/verification-integrity.ts +0 -105
- package/src/runtime/verification-worktree.ts +0 -186
- package/src/runtime/worker-heartbeat.ts +0 -25
- package/src/runtime/worker-startup.ts +0 -83
- package/src/runtime/workflow-state.ts +0 -195
- package/src/runtime/workspace-lock.ts +0 -443
- package/src/runtime/workspace-tree.ts +0 -312
- package/src/runtime/yield-handler.ts +0 -224
- package/src/runtime/zombie-scanner.ts +0 -298
- package/src/schema/config-schema.ts +0 -327
- package/src/schema/team-tool-schema.ts +0 -415
- package/src/schema/validation-types.ts +0 -159
- package/src/skills/discover-skills.ts +0 -197
- package/src/skills/skill-templates.ts +0 -456
- package/src/skills/validate.ts +0 -285
- package/src/state/active-run-registry.ts +0 -439
- package/src/state/artifact-store.ts +0 -176
- package/src/state/atomic-write.ts +0 -903
- package/src/state/blob-store.ts +0 -308
- package/src/state/contracts.ts +0 -158
- package/src/state/crew-init.ts +0 -269
- package/src/state/decision-ledger.ts +0 -345
- package/src/state/event-log-rotation.ts +0 -342
- package/src/state/event-log.ts +0 -1311
- package/src/state/event-reconstructor.ts +0 -229
- package/src/state/gitignore-manager.ts +0 -46
- package/src/state/health-store.ts +0 -79
- package/src/state/hook-instinct-bridge.ts +0 -94
- package/src/state/hook-integrations.ts +0 -51
- package/src/state/instinct-store.ts +0 -275
- package/src/state/jsonl-writer.ts +0 -107
- package/src/state/locks.ts +0 -562
- package/src/state/mailbox.ts +0 -916
- package/src/state/observation-store.ts +0 -176
- package/src/state/run-cache.ts +0 -193
- package/src/state/run-graph.ts +0 -183
- package/src/state/run-metrics.ts +0 -165
- package/src/state/schedule.ts +0 -166
- package/src/state/session-state-map.ts +0 -51
- package/src/state/state-store.ts +0 -958
- package/src/state/task-claims.ts +0 -61
- package/src/state/tiered-eval.ts +0 -480
- package/src/state/types-eval.ts +0 -58
- package/src/state/types.ts +0 -440
- package/src/state/usage.ts +0 -138
- package/src/state/worker-atomic-writer.ts +0 -194
- package/src/subagents/async-entry.ts +0 -1
- package/src/subagents/index.ts +0 -3
- package/src/subagents/live/control.ts +0 -1
- package/src/subagents/live/manager.ts +0 -1
- package/src/subagents/live/realtime.ts +0 -1
- package/src/subagents/live/session-runtime.ts +0 -1
- package/src/subagents/manager.ts +0 -1
- package/src/subagents/spawn.ts +0 -1
- package/src/teams/discover-teams.ts +0 -187
- package/src/teams/team-config.ts +0 -27
- package/src/teams/team-serializer.ts +0 -38
- package/src/tools/safe-bash-extension.ts +0 -54
- package/src/tools/safe-bash.ts +0 -505
- package/src/types/diff.d.ts +0 -18
- package/src/types/new-api-types.ts +0 -35
- package/src/ui/agent-management-overlay.ts +0 -160
- package/src/ui/card-colors.ts +0 -139
- package/src/ui/crew-footer.ts +0 -102
- package/src/ui/crew-select-list.ts +0 -111
- package/src/ui/dashboard-panes/agents-pane.ts +0 -164
- package/src/ui/dashboard-panes/cancellation-pane.ts +0 -66
- package/src/ui/dashboard-panes/capability-pane.ts +0 -77
- package/src/ui/dashboard-panes/health-pane.ts +0 -31
- package/src/ui/dashboard-panes/mailbox-pane.ts +0 -35
- package/src/ui/dashboard-panes/metrics-pane.ts +0 -37
- package/src/ui/dashboard-panes/progress-pane.ts +0 -38
- package/src/ui/dashboard-panes/transcript-pane.ts +0 -10
- package/src/ui/deploy-bundled-themes.ts +0 -71
- package/src/ui/dwf-phase-display.ts +0 -151
- package/src/ui/dynamic-border.ts +0 -35
- package/src/ui/heartbeat-aggregator.ts +0 -74
- package/src/ui/key-utils.ts +0 -42
- package/src/ui/keybinding-map.ts +0 -248
- package/src/ui/layout-primitives.ts +0 -106
- package/src/ui/live-conversation-overlay.ts +0 -183
- package/src/ui/live-duration.ts +0 -55
- package/src/ui/live-run-sidebar.ts +0 -301
- package/src/ui/loaders.ts +0 -176
- package/src/ui/mascot.ts +0 -436
- package/src/ui/overlays/agent-picker-overlay.ts +0 -65
- package/src/ui/overlays/confirm-overlay.ts +0 -60
- package/src/ui/overlays/help-overlay.ts +0 -177
- package/src/ui/overlays/mailbox-compose-overlay.ts +0 -181
- package/src/ui/overlays/mailbox-compose-preview.ts +0 -78
- package/src/ui/overlays/mailbox-detail-overlay.ts +0 -154
- package/src/ui/pi-ui-compat.ts +0 -68
- package/src/ui/powerbar-publisher.ts +0 -459
- package/src/ui/render-coalescer.ts +0 -101
- package/src/ui/render-diff.ts +0 -160
- package/src/ui/render-scheduler.ts +0 -224
- package/src/ui/run-action-dispatcher.ts +0 -182
- package/src/ui/run-dashboard.ts +0 -913
- package/src/ui/run-event-bus.ts +0 -381
- package/src/ui/run-snapshot-cache.ts +0 -1057
- package/src/ui/settings-overlay.ts +0 -1067
- package/src/ui/snapshot-types.ts +0 -90
- package/src/ui/spinner.ts +0 -17
- package/src/ui/status-colors.ts +0 -143
- package/src/ui/syntax-highlight.ts +0 -136
- package/src/ui/terminal-status.ts +0 -269
- package/src/ui/theme-adapter.ts +0 -271
- package/src/ui/theme-discovery.ts +0 -199
- package/src/ui/tool-progress-formatter.ts +0 -93
- package/src/ui/tool-render.ts +0 -453
- package/src/ui/tool-renderers/brief-mode.ts +0 -225
- package/src/ui/tool-renderers/index.ts +0 -726
- package/src/ui/transcript-cache.ts +0 -128
- package/src/ui/transcript-entries.ts +0 -256
- package/src/ui/transcript-viewer.ts +0 -424
- package/src/ui/widget/index.ts +0 -357
- package/src/ui/widget/widget-formatters.ts +0 -182
- package/src/ui/widget/widget-model.ts +0 -110
- package/src/ui/widget/widget-renderer.ts +0 -182
- package/src/ui/widget/widget-types.ts +0 -36
- package/src/utils/bm25-search.ts +0 -235
- package/src/utils/completion-dedupe.ts +0 -63
- package/src/utils/conflict-detect.ts +0 -668
- package/src/utils/env-allowlist.ts +0 -30
- package/src/utils/env-filter.ts +0 -155
- package/src/utils/file-coalescer.ts +0 -98
- package/src/utils/fingerprint.ts +0 -180
- package/src/utils/frontmatter.ts +0 -70
- package/src/utils/fs-watch.ts +0 -37
- package/src/utils/gh-protocol.ts +0 -556
- package/src/utils/git.ts +0 -260
- package/src/utils/guards.ts +0 -107
- package/src/utils/ids.ts +0 -24
- package/src/utils/incremental-reader.ts +0 -220
- package/src/utils/internal-error.ts +0 -10
- package/src/utils/names.ts +0 -36
- package/src/utils/ndjson.ts +0 -115
- package/src/utils/paths.ts +0 -227
- package/src/utils/project-detector.ts +0 -160
- package/src/utils/redaction.ts +0 -347
- package/src/utils/resolve-shell.ts +0 -36
- package/src/utils/run-watcher-registry.ts +0 -152
- package/src/utils/safe-paths.ts +0 -383
- package/src/utils/scan-cache.ts +0 -144
- package/src/utils/session-utils.ts +0 -110
- package/src/utils/sleep.ts +0 -54
- package/src/utils/socket-path.ts +0 -127
- package/src/utils/sse-parser.ts +0 -129
- package/src/utils/task-name-generator.ts +0 -337
- package/src/utils/timings.ts +0 -33
- package/src/utils/token-counter.ts +0 -200
- package/src/utils/visual.ts +0 -207
- package/src/workflows/cost-estimator.ts +0 -34
- package/src/workflows/discover-workflows.ts +0 -290
- package/src/workflows/intermediate-store.ts +0 -166
- package/src/workflows/preflight-validator.ts +0 -168
- package/src/workflows/topology-analyzer.ts +0 -203
- package/src/workflows/validate-workflow.ts +0 -50
- package/src/workflows/workflow-config.ts +0 -70
- package/src/workflows/workflow-serializer.ts +0 -32
- package/src/worktree/branch-freshness.ts +0 -112
- package/src/worktree/cleanup.ts +0 -341
- package/src/worktree/worktree-manager.ts +0 -1200
package/docs/TEST_MATRIX.md
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# Test Matrix
|
|
2
|
-
|
|
3
|
-
Maps pi-crew behavior to proof. Every row must have real validation evidence.
|
|
4
|
-
|
|
5
|
-
## Status Values
|
|
6
|
-
|
|
7
|
-
| Status | Meaning |
|
|
8
|
-
|--------|---------|
|
|
9
|
-
| planned | Accepted behavior, not implemented |
|
|
10
|
-
| in_progress | Actively being built |
|
|
11
|
-
| implemented | Implemented and proof exists |
|
|
12
|
-
| changed | Contract changed after implementation |
|
|
13
|
-
| retired | No longer part of product |
|
|
14
|
-
|
|
15
|
-
## Matrix
|
|
16
|
-
|
|
17
|
-
| Story | Contract | Unit | Integration | CI | Status | Evidence |
|
|
18
|
-
|-------|----------|------|-------------|-----|--------|----------|
|
|
19
|
-
| Core team run | `docs/product/team-run.md` | yes | yes | yes 3/3 | implemented | 2703 tests pass (133 suites) |
|
|
20
|
-
| Child process runner | `docs/product/child-process.md` | yes | yes | yes 3/3 | implemented | child-pi-pool.test.ts, child-pi-timeout.test.ts, mock-child-run.test.ts |
|
|
21
|
-
| Async runner | `docs/product/async-runner.md` | yes | yes | yes 3/3 | implemented | async-runner.test.ts, async-restart-recovery.test.ts |
|
|
22
|
-
| Live session | `docs/product/live-session.md` | yes | no | yes 3/3 | implemented | live-session-context.test.ts, live-session-runtime.test.ts |
|
|
23
|
-
| State durability | `docs/product/state.md` | yes | yes | yes 3/3 | implemented | state-store.test.ts, state-contracts.test.ts, phase3-runtime.test.ts |
|
|
24
|
-
| Worktree isolation | `docs/product/worktree.md` | yes | yes | yes 3/3 | implemented | worktree-manager.test.ts, worktree-run.test.ts |
|
|
25
|
-
| Team tool API | `docs/product/team-tool.md` | yes | yes | yes 3/3 | implemented | team-tool-dispatch.test.ts, extension-api-surface.test.ts, operator-experience.test.ts |
|
|
26
|
-
| Group join | `docs/product/group-join.md` | yes | yes | yes 3/3 | implemented | phase6-runtime-hardening.test.ts |
|
|
27
|
-
| Model fallback | `docs/product/model-fallback.md` | yes | no | yes 3/3 | implemented | model-fallback.test.ts |
|
|
28
|
-
| Conflict detection | `docs/product/conflict-detect.md` | yes | no | yes 3/3 | implemented | conflict-detect.test.ts, delta-conflict.test.ts |
|
|
29
|
-
| Crash recovery | `docs/product/crash-recovery.md` | yes | yes | yes 3/3 | implemented | recovery-recipes.test.ts, async-restart-recovery.test.ts |
|
|
30
|
-
| Effectiveness guard | `docs/product/effectiveness.md` | yes | no | yes 3/3 | implemented | effectiveness-guard.test.ts |
|
|
31
|
-
| Windows EBUSY | `docs/product/platform.md` | yes | yes | yes 3/3 | implemented | phase6-runtime-hardening.test.ts |
|
|
32
|
-
| Depth guard | `docs/product/runtime-safety.md` | yes | no | yes 3/3 | implemented | subagent-depth.test.ts, completion-guard.test.ts |
|
|
33
|
-
|
|
34
|
-
## Evidence Rules
|
|
35
|
-
|
|
36
|
-
- **Unit proof**: Pure logic, state transitions, config parsing
|
|
37
|
-
- **Integration proof**: Multi-module interaction (team runner → state → child process)
|
|
38
|
-
- **CI proof**: Cross-platform (ubuntu, windows, macos) green on GitHub Actions
|
|
39
|
-
- A story can be implemented without every proof column if the story explains why
|
|
40
|
-
- Agents must run `npm test` and `npm run typecheck` before claiming done
|
|
41
|
-
|
|
42
|
-
## Validation Commands
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
npm test # Run all unit tests (1655 tests across 268 unit files + 14 integration files)
|
|
46
|
-
npm run typecheck # TypeScript check + strip-types import
|
|
47
|
-
npm run check # Biome lint + format
|
|
48
|
-
npm run test:unit # Unit tests only (fast, parallel)
|
|
49
|
-
npm run test:integration # Integration tests only (sequential)
|
|
50
|
-
gh run list --limit 1 # Check latest CI status
|
|
51
|
-
```
|
package/docs/archive/README.md
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
# Archived Documents
|
|
2
|
-
|
|
3
|
-
This directory contains historical one-off reports and reviews that were
|
|
4
|
-
moved out of the main `docs/` directory as part of the **L3 (docs sprawl
|
|
5
|
-
cleanup)** in the v0.9.17 cleanup plan.
|
|
6
|
-
|
|
7
|
-
**Criterion (per plan §11 L3 circle-back):** "exclude any file referenced by
|
|
8
|
-
AGENTS.md or README." Each file here has been verified to have NO source-of-
|
|
9
|
-
truth reference in the project — these are point-in-time audits, reviews,
|
|
10
|
-
test-round logs, and followup reports that were used once and superseded.
|
|
11
|
-
|
|
12
|
-
## What is archived (22 files)
|
|
13
|
-
|
|
14
|
-
### v0.5.x audit-fix plans (9 files)
|
|
15
|
-
Spans the v0.5.5 → v0.5.17 release cycle of bug audits. Each was a point-in-time
|
|
16
|
-
list of fixes for that release; all fixes were shipped and the audit is now
|
|
17
|
-
historical.
|
|
18
|
-
|
|
19
|
-
- `pi-crew-v0.5.5-audit-fix-plan.md`
|
|
20
|
-
- `pi-crew-v0.5.9-audit-fix-plan.md`
|
|
21
|
-
- `pi-crew-v0.5.10-audit-fix-plan.md`
|
|
22
|
-
- `pi-crew-v0.5.11-audit-fix-plan.md`
|
|
23
|
-
- `pi-crew-v0.5.12-audit-fix-plan.md`
|
|
24
|
-
- `pi-crew-v0.5.13-audit-fix-plan.md`
|
|
25
|
-
- `pi-crew-v0.5.14-audit-fix-plan.md`
|
|
26
|
-
- `pi-crew-v0.5.16-audit-fix-plan.md`
|
|
27
|
-
- `pi-crew-v0.5.17-audit-fix-plan.md`
|
|
28
|
-
|
|
29
|
-
### Round-series test logs (6 files)
|
|
30
|
-
The iterative test result logs from `pi-crew-test-roundN` rounds. v0.9.17 has
|
|
31
|
-
a new test matrix (`docs/TEST_MATRIX.md`) which supersedes these.
|
|
32
|
-
|
|
33
|
-
- `pi-crew-test-final.md`
|
|
34
|
-
- `pi-crew-test-results.md`
|
|
35
|
-
- `pi-crew-test-round2.md`
|
|
36
|
-
- `pi-crew-test-round4.md`
|
|
37
|
-
- `pi-crew-test-round5.md`
|
|
38
|
-
- `pi-crew-test-round6.md`
|
|
39
|
-
|
|
40
|
-
### Review-round followups (2 files)
|
|
41
|
-
Sequential review rounds from May 2026.
|
|
42
|
-
|
|
43
|
-
- `followup-review-round3-2026-05-12.md`
|
|
44
|
-
- `followup-review-round4-2026-05-13.md`
|
|
45
|
-
|
|
46
|
-
### Single-investigation reports (5 files)
|
|
47
|
-
One-off reports retained for historical reference only.
|
|
48
|
-
|
|
49
|
-
- `pi-crew-bugs.md` — early-stage bug inventory (May 2026)
|
|
50
|
-
- `pi-mono-opportunities.md` — cross-project opportunity scan
|
|
51
|
-
- `pi-mono-review.md` — cross-project review
|
|
52
|
-
- `pi-subagent4-comparison.md` — subagent-4 comparison
|
|
53
|
-
- `pi-subagents3-deep-analysis.md` — subagents-3 deep analysis
|
|
54
|
-
|
|
55
|
-
## How to recover a file
|
|
56
|
-
|
|
57
|
-
Files in this directory are still tracked by git (history preserved). To
|
|
58
|
-
restore:
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
git mv docs/archive/FILE.md docs/
|
|
62
|
-
# edit docs/README.md or other references if needed
|
|
63
|
-
git commit -m "docs: restore FILE.md from archive"
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## Why these were archived
|
|
67
|
-
|
|
68
|
-
`docs/` had grown to ~77 markdown files. Many were one-off reports created
|
|
69
|
-
during specific development cycles that:
|
|
70
|
-
|
|
71
|
-
- had no source-of-truth reference (not linked from README, AGENTS.md, or
|
|
72
|
-
any code file's header comment),
|
|
73
|
-
- were superseded by current docs (e.g. `TEST_MATRIX.md`),
|
|
74
|
-
- were point-in-time audits that produced code changes already shipped.
|
|
75
|
-
|
|
76
|
-
This directory keeps them available for git-history archaeology without
|
|
77
|
-
cluttering the active docs surface.
|
|
78
|
-
|
|
79
|
-
## What is NOT archived (still in `docs/`)
|
|
80
|
-
|
|
81
|
-
- `architecture.md`, `actions-reference.md`, `commands-reference.md`,
|
|
82
|
-
`dynamic-workflows.md` — referenced from `README.md`
|
|
83
|
-
- `decisions/` (ADR-style 0001-0008) — referenced from `AGENTS.md`
|
|
84
|
-
- `FEATURE_INTAKE.md`, `HARNESS.md`, `HARNESS_BACKLOG.md`, `TEST_MATRIX.md`,
|
|
85
|
-
`troubleshooting.md`, `usage.md`, `goals.md`, `live-mailbox-runtime.md`,
|
|
86
|
-
`runtime-flow.md`, `resource-formats.md`, `publishing.md`,
|
|
87
|
-
`migration-v0.4-v0.5.md` — active project docs
|
|
88
|
-
- `bugs/`, `fixes/`, `distillation/`, `product/`, `stories/`, `skills/`,
|
|
89
|
-
`templates/`, `superpowers/`, `perf/`, `patterns/` — themed subdirs
|
|
90
|
-
- `next-upgrade-roadmap.md` — referenced from `README.md`
|
|
91
|
-
- `REVIEW-FINDINGS-2026-06` (file) — current cleanup plan reference
|
|
@@ -1,342 +0,0 @@
|
|
|
1
|
-
# Follow-up Review — pi-crew (2026-05-12, round 3)
|
|
2
|
-
|
|
3
|
-
Author: Droid (Factory) | Related: `docs/code-review-2026-05-11.md`, `docs/followup-plan-2026-05-12.md`, `docs/followup-review-2026-05-12.md`. HEAD: `5bee878`.
|
|
4
|
-
|
|
5
|
-
This is the review round after commit `5bee878` resolved C1–C6. Goal: scrutinize the modules not yet examined closely (event-log, atomic-write, child-pi, redaction, sleep, hooks, cleanup) to find remaining risks.
|
|
6
|
-
|
|
7
|
-
## Result summary
|
|
8
|
-
|
|
9
|
-
- `npm run typecheck` → Passed
|
|
10
|
-
- `npm run check:lazy-imports` → Passed
|
|
11
|
-
- `npm run test:unit` → **1418 tests / 1415 pass / 0 fail / 3 skip** (212s)
|
|
12
|
-
|
|
13
|
-
The codebase is in a stable state. The findings below are **low risk** or **defense-in-depth**, not urgent bugs.
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Part A — New findings
|
|
18
|
-
|
|
19
|
-
### D1 — `event-log.appendEvent` has no lock, JSONL may interleave on Windows
|
|
20
|
-
|
|
21
|
-
**Severity:** Medium | **Effort:** ~30 minutes | **File:** `src/state/event-log.ts:148`
|
|
22
|
-
|
|
23
|
-
**Current state:**
|
|
24
|
-
```ts
|
|
25
|
-
fs.appendFileSync(eventsPath, `${JSON.stringify(redactSecrets(fullEvent))}\n`, "utf-8");
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
**Problem:**
|
|
29
|
-
- `fs.appendFileSync` on POSIX is only atomic for writes smaller than `PIPE_BUF` (~4 KiB). A full event JSON (with data, metadata, transcripts) can exceed that → interleaved lines between 2 processes (parent + background-runner).
|
|
30
|
-
- On Windows, append is NOT atomic at any size; 2 processes appending to the same eventsPath can produce interleaved JSON lines → `JSON.parse(line)` in `readEvents`/`scanSequence` throws and skips the line.
|
|
31
|
-
- Consequence: lost events, sequence numbers jumping, "appended: false" is returned in a different path (size-limit) but the normal path gives no hint.
|
|
32
|
-
|
|
33
|
-
**Trigger:** running `background-runner` in parallel with the parent writing events to the same `eventsPath` (e.g. cancel + retry in succession).
|
|
34
|
-
|
|
35
|
-
**Proposed fix:**
|
|
36
|
-
1. Wrap `appendEvent` in `withRunLockSync(manifest, () => { ... })` — ensures exclusive access.
|
|
37
|
-
2. Or use `fs.openSync(..., O_APPEND | O_WRONLY)` + retry with an advisory lock (`flock` POSIX, `LockFileEx` Windows — via the npm package `proper-lockfile`).
|
|
38
|
-
3. Lightest option: switch to `appendEventAsync` via a queue/serialize.
|
|
39
|
-
|
|
40
|
-
**Tests to add:** stress test in `test/integration/`: 2 processes each appending 100 events concurrently → assert total parseable line count = 200.
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
### D2 — `event-log.sequenceCache` Map leaks by number of runs
|
|
45
|
-
|
|
46
|
-
**Severity:** Low | **Effort:** ~10 minutes | **File:** `src/state/event-log.ts:60`
|
|
47
|
-
|
|
48
|
-
**Current state:**
|
|
49
|
-
```ts
|
|
50
|
-
const sequenceCache = new Map<string, { size: number; mtimeMs: number; seq: number }>();
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
**Problem:**
|
|
54
|
-
- Module-level map, never evicts. Each `eventsPath` (1 per run) takes 1 entry. A long-running parent process (e.g. live-session-runtime) running for many days → the cache could reach thousands of entries.
|
|
55
|
-
- Memory isn't large (~100 bytes/entry) but is unbounded.
|
|
56
|
-
|
|
57
|
-
**Proposed fix:** use a simple LRU (Map with a max size, evict oldest when exceeding the threshold), or clear after the run ends:
|
|
58
|
-
```ts
|
|
59
|
-
export function evictSequenceCache(eventsPath: string): void {
|
|
60
|
-
sequenceCache.delete(eventsPath);
|
|
61
|
-
}
|
|
62
|
-
// Call from updateRunStatus(..., "completed"/"failed"/"cancelled").
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
### D3 — `atomicWriteFileAsync` has a "matches" fallback → sync path doesn't (parity)
|
|
68
|
-
|
|
69
|
-
**Severity:** Low | **Effort:** ~15 minutes | **File:** `src/state/atomic-write.ts:122-138`
|
|
70
|
-
|
|
71
|
-
**Current state:**
|
|
72
|
-
```ts
|
|
73
|
-
// async path:
|
|
74
|
-
try { await renameWithRetryAsync(...); }
|
|
75
|
-
catch (renameError) {
|
|
76
|
-
const existing = await fs.promises.readFile(filePath, "utf-8");
|
|
77
|
-
const matches = existing === content;
|
|
78
|
-
if (matches) { /* cleanup temp, return success */ }
|
|
79
|
-
throw renameError;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// sync path: just throws, no "matches" fallback.
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
**Problem:**
|
|
86
|
-
- The async path "forgives" the race condition (the file was already written with the correct content by another process). The sync path throws hard.
|
|
87
|
-
- Different semantics → hard to debug when someone uses sync with a race.
|
|
88
|
-
- This case is rare (identical content), but the asymmetry is a code smell.
|
|
89
|
-
|
|
90
|
-
**Proposed fix:** add the same fallback to sync, or remove the fallback from async (pick one consistent convention):
|
|
91
|
-
```ts
|
|
92
|
-
} catch (renameError) {
|
|
93
|
-
try {
|
|
94
|
-
const existing = fs.readFileSync(filePath, "utf-8");
|
|
95
|
-
if (existing === content) {
|
|
96
|
-
try { fs.rmSync(tempPath, { force: true }); } catch { /* best-effort */ }
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
} catch { /* fall through */ }
|
|
100
|
-
throw renameError;
|
|
101
|
-
}
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
### D4 — `withRunLock` (async) waits until the deadline for an active lock, `withRunLockSync` throws immediately
|
|
107
|
-
|
|
108
|
-
**Severity:** Low | **Effort:** ~10 minutes | **File:** `src/state/locks.ts:91-110`
|
|
109
|
-
|
|
110
|
-
**Current state:**
|
|
111
|
-
- Sync: `if (!isLockStale(...)) throw ...` → fail fast for an active lock.
|
|
112
|
-
- Async: only checks staleness in `readLockStateAsync`, doesn't throw for active → loops waiting until the deadline (`staleMs * 2`, usually 60s).
|
|
113
|
-
|
|
114
|
-
**Problem:**
|
|
115
|
-
- The test `withRunLockSync throws immediately on active (non-stale) lock` proves sync throws immediately.
|
|
116
|
-
- Async will hang ~60s then throw → slow cancel/retry experience.
|
|
117
|
-
- BUG-004 (round 1) aimed to unify sync ↔ async, but this semantic asymmetry remains.
|
|
118
|
-
|
|
119
|
-
**Proposed fix:** unify by one of:
|
|
120
|
-
- Sync: add a short wait + retry like async (wait up to 1-2s then throw).
|
|
121
|
-
- Async: throw immediately when the lock isn't stale (like sync) — usually better since the caller can retry with higher context.
|
|
122
|
-
|
|
123
|
-
```ts
|
|
124
|
-
async function acquireLockWithRetryAsync(filePath: string, staleMs: number): Promise<void> {
|
|
125
|
-
let attempt = 0;
|
|
126
|
-
const deadline = Date.now() + staleMs * 2;
|
|
127
|
-
while (true) {
|
|
128
|
-
try { writeLockFile(filePath); return; }
|
|
129
|
-
catch (error) {
|
|
130
|
-
const code = (error as NodeJS.ErrnoException).code;
|
|
131
|
-
if (code !== "EEXIST") throw error;
|
|
132
|
-
if (Date.now() > deadline) throw new Error(`Run '${path.basename(filePath)}' is locked.`);
|
|
133
|
-
if (!isLockStale(filePath, staleMs)) {
|
|
134
|
-
throw new Error(`Run '${path.basename(filePath)}' is locked by another operation.`);
|
|
135
|
-
}
|
|
136
|
-
try { fs.rmSync(filePath, { force: true }); } catch { /* race */ }
|
|
137
|
-
await sleep(Math.min(250, 25 * 2 ** attempt));
|
|
138
|
-
attempt++;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
**Tests to add:** mirror the sync test — `withRunLock async throws immediately on active (non-stale) lock`.
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
### D5 — `sleep.ts` uses `require()` in an ES module
|
|
149
|
-
|
|
150
|
-
**Severity:** Low (style) | **Effort:** ~5 minutes | **File:** `src/utils/sleep.ts:18`
|
|
151
|
-
|
|
152
|
-
**Current state:**
|
|
153
|
-
```ts
|
|
154
|
-
const { execFileSync } = require("node:child_process") as typeof import("node:child_process");
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
**Problem:**
|
|
158
|
-
- The project is ESM (`"type": "module"`). `require` only works via strip-types backward-compat — not clean.
|
|
159
|
-
- AGENTS.md: "Avoid dynamic inline imports, EXCEPT at documented lazy-load boundaries to defer heavy runtime cost (mark with `// LAZY: <reason>`)". This `require` has no marker.
|
|
160
|
-
- `child_process` isn't heavy — top-level import is fine.
|
|
161
|
-
|
|
162
|
-
**Proposed fix:**
|
|
163
|
-
```ts
|
|
164
|
-
import { execFileSync } from "node:child_process";
|
|
165
|
-
// ...
|
|
166
|
-
execFileSync("sleep", [(ms / 1000).toFixed(3)], { timeout: ms + 1000, stdio: "pipe" });
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
### D6 — `iteration-hooks.runIterationHook` doesn't filter env like post-checks
|
|
172
|
-
|
|
173
|
-
**Severity:** Low | **Effort:** ~5 minutes | **File:** `src/runtime/iteration-hooks.ts:140`
|
|
174
|
-
|
|
175
|
-
**Current state:**
|
|
176
|
-
```ts
|
|
177
|
-
env: { PATH: process.env.PATH ?? "/usr/bin:/bin", HOME: process.env.HOME ?? "/tmp", USER: process.env.USER, LANG: process.env.LANG, PI_CREW_HOOK: "1" },
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
**Problem:**
|
|
181
|
-
- Already restricted manually, OK for Linux. But on Windows it lacks `USERPROFILE`, `TEMP`, `TMP`, `ComSpec`, `SystemRoot` → `.cmd/.ps1` scripts may fail.
|
|
182
|
-
- post-checks.ts has the same pattern (line 82) — inconsistent with worktree-manager.runSetupHook which moved to `sanitizeEnvSecrets(..., { allowList: [...] })`.
|
|
183
|
-
|
|
184
|
-
**Proposed fix:** apply `sanitizeEnvSecrets` with an allowList, unifying all 3 sites (post-checks, iteration-hooks, setup-hook):
|
|
185
|
-
```ts
|
|
186
|
-
import { sanitizeEnvSecrets } from "../utils/env-filter.ts";
|
|
187
|
-
const HOOK_ENV_ALLOW = ["PATH", "HOME", "USER", "USERPROFILE", "TEMP", "TMP", "TMPDIR", "LANG", "LC_ALL", "ComSpec", "SystemRoot", "PI_*"];
|
|
188
|
-
// ...
|
|
189
|
-
env: { ...sanitizeEnvSecrets(process.env, { allowList: HOOK_ENV_ALLOW }), PI_CREW_HOOK: "1" },
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
**Benefits:**
|
|
193
|
-
- 1 source of truth for the hook env whitelist.
|
|
194
|
-
- Supports Windows .cmd/.ps1 (USERPROFILE/TEMP needed).
|
|
195
|
-
- Avoids code duplication.
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
### D7 — `cleanup.ts` git helper doesn't force locale (consistency with worktree-manager)
|
|
200
|
-
|
|
201
|
-
**Severity:** Info | **Effort:** ~2 minutes | **File:** `src/worktree/cleanup.ts:15`
|
|
202
|
-
|
|
203
|
-
**Current state:**
|
|
204
|
-
```ts
|
|
205
|
-
function git(cwd: string, args: string[]): string {
|
|
206
|
-
return execFileSync("git", args, { cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"] }).trim();
|
|
207
|
-
}
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
**Problem:**
|
|
211
|
-
- `worktree-manager.ts` already forces `LANG: "C", LC_ALL: "C"` (C5 round 2). `cleanup.ts` doesn't yet.
|
|
212
|
-
- Doesn't cause a current bug because cleanup doesn't parse error strings; but if error parsing is added later, this gets missed again.
|
|
213
|
-
- `branch-freshness.ts` has the same issue.
|
|
214
|
-
|
|
215
|
-
**Proposed fix:** extract a `git()` helper into a shared `src/utils/git-helper.ts`, used by all 3 files:
|
|
216
|
-
```ts
|
|
217
|
-
// src/utils/git-exec.ts
|
|
218
|
-
import { execFileSync } from "node:child_process";
|
|
219
|
-
export function gitExec(cwd: string, args: string[]): string {
|
|
220
|
-
return execFileSync("git", args, {
|
|
221
|
-
cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"],
|
|
222
|
-
env: { ...process.env, LANG: "C", LC_ALL: "C" },
|
|
223
|
-
}).trim();
|
|
224
|
-
}
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
---
|
|
228
|
-
|
|
229
|
-
### D8 — `redaction.PEM_PRIVATE_KEY_PATTERN` has no length limit → low ReDoS potential
|
|
230
|
-
|
|
231
|
-
**Severity:** Info | **Effort:** ~5 minutes | **File:** `src/utils/redaction.ts:7`
|
|
232
|
-
|
|
233
|
-
**Current state:**
|
|
234
|
-
```ts
|
|
235
|
-
const PEM_PRIVATE_KEY_PATTERN = /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g;
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
**Problem:**
|
|
239
|
-
- The lazy `[\s\S]*?` is ReDoS-safe, but if the input has a BEGIN without an END → backtracks to the end of the string. With a long JSONL transcript (10+ MB), the regex scans the whole thing.
|
|
240
|
-
- Not a true ReDoS (linear), but can be slow.
|
|
241
|
-
|
|
242
|
-
**Proposed fix:** add a hard 64KB limit for a PEM block (real PEM ~3KB):
|
|
243
|
-
```ts
|
|
244
|
-
const PEM_PRIVATE_KEY_PATTERN = /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]{0,65536}?-----END [A-Z ]*PRIVATE KEY-----/g;
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
Trade-off: PEM > 64KB won't be fully redacted. Rare in practice.
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
|
|
251
|
-
### D9 — `subagent-manager.persistedSubagentPath` doesn't validate `id` → potential path traversal
|
|
252
|
-
|
|
253
|
-
**Severity:** Low | **Effort:** ~5 minutes | **File:** `src/runtime/subagent-manager.ts:58`
|
|
254
|
-
|
|
255
|
-
**Current state:**
|
|
256
|
-
```ts
|
|
257
|
-
function persistedSubagentPath(cwd: string, id: string): string {
|
|
258
|
-
return path.join(projectCrewRoot(cwd), DEFAULT_PATHS.state.subagentsSubdir, `${id}.json`);
|
|
259
|
-
}
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
**Problem:**
|
|
263
|
-
- `id` is currently generated internally (`agent_${Date.now().toString(36)}_${counter.toString(36)}`) → safe.
|
|
264
|
-
- But `readPersistedSubagentRecord(cwd, id)` is called with `id` from an external source (e.g. `get_subagent_result` tool param). If tool param validation is missing, `id = "../../../etc/passwd"` could read a file outside the state dir.
|
|
265
|
-
|
|
266
|
-
**Proposed fix:** validate `id` matches `^[a-z0-9_]+$`:
|
|
267
|
-
```ts
|
|
268
|
-
function isValidSubagentId(id: string): boolean {
|
|
269
|
-
return /^[a-z0-9_]+$/i.test(id) && id.length <= 128;
|
|
270
|
-
}
|
|
271
|
-
function persistedSubagentPath(cwd: string, id: string): string {
|
|
272
|
-
if (!isValidSubagentId(id)) throw new Error(`Invalid subagent id: ${id}`);
|
|
273
|
-
return path.join(projectCrewRoot(cwd), DEFAULT_PATHS.state.subagentsSubdir, `${id}.json`);
|
|
274
|
-
}
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
Check the `get_subagent_result` tool schema to see if it sanitizes id already; if so, D9 is just defense-in-depth.
|
|
278
|
-
|
|
279
|
-
---
|
|
280
|
-
|
|
281
|
-
## Implementation priority
|
|
282
|
-
|
|
283
|
-
| # | Item | Severity | Effort | Recommendation |
|
|
284
|
-
|---|---|---|---|---|
|
|
285
|
-
| 1 | D1 (event-log concurrent append) | Medium | 30 minutes | Current sprint — prevent event loss/corruption |
|
|
286
|
-
| 2 | D6 (consistent hook env allowList) | Low | 5 minutes | Current sprint — sync with the setup-hook fix |
|
|
287
|
-
| 3 | D4 (async lock fail-fast for active) | Low | 10 minutes | Current sprint — cancel/retry UX |
|
|
288
|
-
| 4 | D9 (subagent id validate) | Low | 5 minutes | Current sprint — defense-in-depth |
|
|
289
|
-
| 5 | D2 (sequenceCache eviction) | Low | 10 minutes | Next sprint |
|
|
290
|
-
| 6 | D3 (atomic-write sync/async parity) | Low | 15 minutes | Next sprint |
|
|
291
|
-
| 7 | D5 (sleep.ts ESM require) | Low | 5 minutes | Next sprint |
|
|
292
|
-
| 8 | D7 (git helper consolidate) | Info | 2 minutes | Anytime |
|
|
293
|
-
| 9 | D8 (PEM regex limit) | Info | 5 minutes | Anytime |
|
|
294
|
-
|
|
295
|
-
**Total effort priority 1 (must-fix):** ~50 minutes.
|
|
296
|
-
**Total effort priority 2 (nice-to-have):** ~37 minutes.
|
|
297
|
-
|
|
298
|
-
---
|
|
299
|
-
|
|
300
|
-
## Proposed commit batches
|
|
301
|
-
|
|
302
|
-
- **Batch 1 (correctness/security):** D1 + D9 + D4 → 1 PR "event-log lock + subagent id guard + async lock parity" (~45 minutes).
|
|
303
|
-
- **Batch 2 (hardening):** D6 + D7 + D2 → 1 PR "hook env allowList consolidation + git helper extract + cache eviction" (~20 minutes).
|
|
304
|
-
- **Batch 3 (polish):** D3 + D5 + D8 → 1 PR "atomic-write parity + ESM cleanup + redaction limit" (~25 minutes).
|
|
305
|
-
|
|
306
|
-
---
|
|
307
|
-
|
|
308
|
-
## Positive notes after round 3
|
|
309
|
-
|
|
310
|
-
- All C1–C6 (round 2) fixed correctly per spec.
|
|
311
|
-
- 1418 tests pass (vs 1411 the previous round → +7 new tests), 0 fail.
|
|
312
|
-
- `npm run check:lazy-imports` now runs on Windows (after removing `sed`).
|
|
313
|
-
- `sanitizeEnvSecrets` has both a deny-list (default) and an allow-list mode → good flexibility.
|
|
314
|
-
- `resolveShellForScript` correctly handles `.bat/.cmd` to guard against CVE-2024-27980.
|
|
315
|
-
- `parent-guard` polling works well cross-platform (POSIX + Windows).
|
|
316
|
-
- Multi-layer redaction pipeline (key-name + inline-substring + auth-header + bearer + PEM).
|
|
317
|
-
- Atomic-write has O_EXCL + O_NOFOLLOW + post-open `isFile()` verification.
|
|
318
|
-
- Subagent records persisted under the redaction filter.
|
|
319
|
-
- Background runner has `parent-guard` + tempdir cleanup + final-drain timer.
|
|
320
|
-
|
|
321
|
-
---
|
|
322
|
-
|
|
323
|
-
## Areas with NO serious issues (reviewed)
|
|
324
|
-
|
|
325
|
-
- `src/schema/team-tool-schema.ts` — TypeBox schema has the "retry" literal, strict additionalProperties.
|
|
326
|
-
- `src/state/artifact-store.ts` — 2-layer path traversal blocking (`resolveInside` + `resolveRealContainedPath`), post-redaction hash.
|
|
327
|
-
- `src/state/atomic-write.ts` — symlink-safe, O_EXCL, fd-based stat verification.
|
|
328
|
-
- `src/worktree/worktree-manager.ts` — branchExists local+remote, prune stale, env filter, locale-safe error parse.
|
|
329
|
-
- `src/runtime/async-runner.ts` — jiti + strip-types fallback, multi-candidate path.
|
|
330
|
-
- `src/runtime/child-pi.ts` — env sanitize, redacted transcript, post-exit stdio guard, hard kill timer.
|
|
331
|
-
- `src/runtime/parent-guard.ts` — kill(pid,0) cross-platform, unref'd interval.
|
|
332
|
-
|
|
333
|
-
---
|
|
334
|
-
|
|
335
|
-
## Verification
|
|
336
|
-
|
|
337
|
-
```
|
|
338
|
-
npm run typecheck → Passed
|
|
339
|
-
npm run check:lazy-imports → All dynamic imports have `// LAZY:` marker.
|
|
340
|
-
npm run test:unit → 1418 tests, 1415 pass, 0 fail, 3 skip (212s)
|
|
341
|
-
HEAD → 5bee878 (fix: address followup-review C1-C6)
|
|
342
|
-
```
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
# Follow-up Review Round 4 — 2026-05-13
|
|
2
|
-
|
|
3
|
-
Review of commits `c7bd455` through `5f47e92` (7 commits on top of `faa81e4`).
|
|
4
|
-
|
|
5
|
-
## Summary
|
|
6
|
-
|
|
7
|
-
These commits harden live-session runtime cleanup, async runner lifecycle, crew-agent persistence, and Windows test flakiness. Overall quality is high and the fixes address real production issues. However, one commit introduces a **regression** that breaks the resume/follow-up capability for completed live-session agents. Two other issues could cause crashes or races in edge cases.
|
|
8
|
-
|
|
9
|
-
**All identified bugs have been fixed in commits `a8a43b4` through current working tree.**
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## Critical — FIXED
|
|
14
|
-
|
|
15
|
-
### BUG-014: `removeLiveAgentHandle` on normal completion destroys resume capability
|
|
16
|
-
|
|
17
|
-
**File:** `src/runtime/live-session-runtime.ts` (finally block, line ~610)
|
|
18
|
-
**Commit:** `7a25644` → **Fixed in a8a43b4**
|
|
19
|
-
|
|
20
|
-
The finally block calls `removeLiveAgentHandle(agentId)` for non-aborted completions. This **deletes the live-agent handle from the registry entirely**, including its terminal status.
|
|
21
|
-
|
|
22
|
-
**Impact:** After a live-session task completes normally, `steerLiveAgent`, `followUpLiveAgent`, and `resumeLiveAgent` all fail with "Live agent '...' is not registered in this process."
|
|
23
|
-
|
|
24
|
-
**Fix:** Added `disposeLiveAgentSession()` in `live-agent-manager.ts` — disposes session resources but keeps the handle in the registry for resume/follow-up.
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## High — FIXED
|
|
29
|
-
|
|
30
|
-
### BUG-015: `withAgentsLock` crashes on `EISDIR` from corrupted lock path
|
|
31
|
-
|
|
32
|
-
**File:** `src/runtime/crew-agent-records.ts`
|
|
33
|
-
**Commit:** `c7bd455` → **Fixed in a8a43b4**
|
|
34
|
-
|
|
35
|
-
`withAgentsLock` only caught `EEXIST`; if lock path was a directory, `EISDIR` crashed the process.
|
|
36
|
-
|
|
37
|
-
**Fix:** Handle `EISDIR` by removing the directory and retrying.
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Medium — FIXED
|
|
42
|
-
|
|
43
|
-
### BUG-016: `markActiveTasksAndAgentsFailed` lacks run-level lock, races with crash recovery
|
|
44
|
-
|
|
45
|
-
**File:** `src/extension/async-notifier.ts`
|
|
46
|
-
**Commit:** `d6d466d` → **Fixed in current working tree**
|
|
47
|
-
|
|
48
|
-
`markActiveTasksAndAgentsFailed` called `saveRunTasks` and `saveCrewAgents` without `withRunLockSync`. Crash recovery (`cancelOrphanedRuns`) uses `withRunLockSync`. Concurrent execution on the same run risks lost updates.
|
|
49
|
-
|
|
50
|
-
**Fix:** Wrapped `markDeadAsyncRunIfNeeded` mutations inside `withRunLockSync(run, () => { ... })`. Also reloaded fresh manifest inside the lock to avoid operating on stale data.
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## Low — FIXED
|
|
55
|
-
|
|
56
|
-
### BUG-017: `safeDisposeLiveSession` catches all errors silently
|
|
57
|
-
|
|
58
|
-
**File:** `src/runtime/live-agent-manager.ts`
|
|
59
|
-
**Commit:** `7a25644` → **Fixed in current working tree**
|
|
60
|
-
|
|
61
|
-
Any exception from `dispose()` was swallowed without logging.
|
|
62
|
-
|
|
63
|
-
**Fix:** Log disposal errors via `logInternalError`.
|
|
64
|
-
|
|
65
|
-
### BUG-018: `effectiveRuntime` in `run.ts` is manually constructed
|
|
66
|
-
|
|
67
|
-
**File:** `src/extension/team-tool/run.ts`
|
|
68
|
-
**Commit:** `2486051` → **Fixed in current working tree**
|
|
69
|
-
|
|
70
|
-
The async fallback runtime was manually built field-by-field. If `CrewRuntimeCapabilities` gains a new required field, this site won't inherit it.
|
|
71
|
-
|
|
72
|
-
**Fix:** Use spread of original runtime with overrides: `{ ...runtime, kind: "child-process", steer: false, resume: false, liveToolActivity: false, fallback: "child-process", reason: "..." }`.
|
|
73
|
-
|
|
74
|
-
### NIT-007: `removeStaleAgentsLock` reads unlimited file size
|
|
75
|
-
|
|
76
|
-
**File:** `src/runtime/crew-agent-records.ts`
|
|
77
|
-
**Commit:** `c7bd455` → **Fixed in current working tree**
|
|
78
|
-
|
|
79
|
-
`fs.readFileSync(lockPath, "utf-8")` reads entire file into memory. Corrupted multi-megabyte file causes memory pressure.
|
|
80
|
-
|
|
81
|
-
**Fix:** Check `fs.statSync(lockPath).size > 1024` before reading; skip stale removal if oversized.
|
|
82
|
-
|
|
83
|
-
### NIT-008: `maxCollectedJsonEvents` cap is hardcoded at 200
|
|
84
|
-
|
|
85
|
-
**File:** `src/runtime/live-session-runtime.ts`
|
|
86
|
-
**Commit:** `c7bd455` → **Fixed in current working tree**
|
|
87
|
-
|
|
88
|
-
Long-running agents drop older JSON events needed for debugging/yield detection.
|
|
89
|
-
|
|
90
|
-
**Fix:** Increased cap from 200 to 1000.
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## Verification
|
|
95
|
-
|
|
96
|
-
- `npm run typecheck` passes.
|
|
97
|
-
- Targeted tests (`async-notifier`, `isolation-policy`, `live-agent-manager`, `live-session-runtime`, `team-tool-dispatch`) pass: **31 pass / 0 fail**.
|
|
98
|
-
- Full unit test suite not run due to time constraints; no new failures observed in targeted runs.
|
|
99
|
-
|
|
100
|
-
## Files Changed in Fixes
|
|
101
|
-
|
|
102
|
-
- `src/extension/async-notifier.ts` — BUG-016 (run lock)
|
|
103
|
-
- `src/runtime/live-agent-manager.ts` — BUG-014 (disposeLiveAgentSession), BUG-017 (log dispose errors)
|
|
104
|
-
- `src/runtime/live-session-runtime.ts` — BUG-014 (use disposeLiveAgentSession), NIT-008 (cap 1000)
|
|
105
|
-
- `src/runtime/crew-agent-records.ts` — BUG-015 (EISDIR), NIT-007 (size cap)
|
|
106
|
-
- `src/extension/team-tool/run.ts` — BUG-018 (spread runtime)
|
|
107
|
-
- `test/unit/live-agent-manager.test.ts` — test for disposeLiveAgentSession
|