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
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import type { MailboxMessage } from "../../state/mailbox.ts";
|
|
2
|
-
import type { ArtifactDescriptor, TeamRunManifest, TeamTaskState } from "../../state/types.ts";
|
|
3
|
-
import { sanitizeTaskText } from "../task-packet.ts";
|
|
4
|
-
|
|
5
|
-
export interface RunProjectionSource {
|
|
6
|
-
kind: "events" | "mailbox" | "artifacts" | "ui_metadata" | "runtime_metadata";
|
|
7
|
-
bounded: boolean;
|
|
8
|
-
reference?: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface RunProjectionResult {
|
|
12
|
-
sources: RunProjectionSource[];
|
|
13
|
-
summary: string;
|
|
14
|
-
injectedAsContext: boolean;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Transform run context before a worker starts.
|
|
19
|
-
* Builds a bounded projection of durable history that will be available
|
|
20
|
-
* to the worker as reference context, not as instructions.
|
|
21
|
-
*
|
|
22
|
-
* Rules:
|
|
23
|
-
* - Durable history retains events, mailbox, artifacts, UI/runtime metadata.
|
|
24
|
-
* - Worker prompt gets a bounded projection (truncated/summarized).
|
|
25
|
-
* - UI/runtime events are not prompt text unless explicitly selected.
|
|
26
|
-
*/
|
|
27
|
-
export function transformRunContextBeforeWorkerStart(input: {
|
|
28
|
-
manifest: TeamRunManifest;
|
|
29
|
-
tasks: TeamTaskState[];
|
|
30
|
-
pendingMailbox: MailboxMessage[];
|
|
31
|
-
artifacts: ArtifactDescriptor[];
|
|
32
|
-
maxEvents?: number;
|
|
33
|
-
maxMailboxMessages?: number;
|
|
34
|
-
maxArtifactRefs?: number;
|
|
35
|
-
}): RunProjectionResult {
|
|
36
|
-
const maxEvents = input.maxEvents ?? 20;
|
|
37
|
-
const maxMailbox = input.maxMailboxMessages ?? 10;
|
|
38
|
-
const maxArtifacts = input.maxArtifactRefs ?? 15;
|
|
39
|
-
|
|
40
|
-
const sources: RunProjectionSource[] = [];
|
|
41
|
-
const lines: string[] = [];
|
|
42
|
-
|
|
43
|
-
// Project a bounded slice of task history
|
|
44
|
-
const completedTasks = input.tasks.filter((t) => t.status === "completed" || t.status === "failed");
|
|
45
|
-
if (completedTasks.length > 0) {
|
|
46
|
-
const tasks = completedTasks.slice(0, maxEvents);
|
|
47
|
-
sources.push({
|
|
48
|
-
kind: "events",
|
|
49
|
-
bounded: true,
|
|
50
|
-
reference: `tasks:${tasks.length}/${completedTasks.length}`,
|
|
51
|
-
});
|
|
52
|
-
lines.push(`Previous tasks (${tasks.length}/${completedTasks.length}):`);
|
|
53
|
-
for (const task of tasks) {
|
|
54
|
-
lines.push(`- ${task.id}: ${task.status}${task.error ? ` (${task.error})` : ""}`);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Project pending mailbox that is relevant to this worker
|
|
59
|
-
if (input.pendingMailbox.length > 0) {
|
|
60
|
-
const messages = input.pendingMailbox.slice(0, maxMailbox);
|
|
61
|
-
sources.push({
|
|
62
|
-
kind: "mailbox",
|
|
63
|
-
bounded: true,
|
|
64
|
-
reference: `mailbox:${messages.length}/${input.pendingMailbox.length}`,
|
|
65
|
-
});
|
|
66
|
-
lines.push(`Pending messages (${messages.length}/${input.pendingMailbox.length}):`);
|
|
67
|
-
for (const msg of messages) {
|
|
68
|
-
const safeBody = sanitizeTaskText(msg.body.slice(0, 100));
|
|
69
|
-
lines.push(`- ${msg.kind ?? "message"}: ${safeBody}`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Project artifact references (not content)
|
|
74
|
-
if (input.artifacts.length > 0) {
|
|
75
|
-
const artifacts = input.artifacts.slice(0, maxArtifacts);
|
|
76
|
-
sources.push({
|
|
77
|
-
kind: "artifacts",
|
|
78
|
-
bounded: true,
|
|
79
|
-
reference: `artifacts:${artifacts.length}/${input.artifacts.length}`,
|
|
80
|
-
});
|
|
81
|
-
lines.push(`Available artifacts (${artifacts.length}/${input.artifacts.length}):`);
|
|
82
|
-
for (const art of artifacts) {
|
|
83
|
-
lines.push(`- ${art.kind} (${art.producer})`);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Metadata markers — not injected as prompt instructions
|
|
88
|
-
sources.push({
|
|
89
|
-
kind: "ui_metadata",
|
|
90
|
-
bounded: false,
|
|
91
|
-
reference: "excluded_from_prompt",
|
|
92
|
-
});
|
|
93
|
-
sources.push({
|
|
94
|
-
kind: "runtime_metadata",
|
|
95
|
-
bounded: false,
|
|
96
|
-
reference: "excluded_from_prompt",
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
return {
|
|
100
|
-
sources,
|
|
101
|
-
summary: lines.join("\n"),
|
|
102
|
-
injectedAsContext: true,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Convert run history to a bounded worker prompt section.
|
|
108
|
-
* Same logic as transformRunContextBeforeWorkerStart but returns
|
|
109
|
-
* the prompt text directly for embedding in the worker prompt.
|
|
110
|
-
*/
|
|
111
|
-
export function convertRunHistoryToWorkerPrompt(input: {
|
|
112
|
-
manifest: TeamRunManifest;
|
|
113
|
-
tasks: TeamTaskState[];
|
|
114
|
-
pendingMailbox: MailboxMessage[];
|
|
115
|
-
artifacts: ArtifactDescriptor[];
|
|
116
|
-
}): string {
|
|
117
|
-
const projection = transformRunContextBeforeWorkerStart(input);
|
|
118
|
-
if (!projection.summary) return "";
|
|
119
|
-
return [
|
|
120
|
-
"## Run Context (bounded projection)",
|
|
121
|
-
projection.summary,
|
|
122
|
-
"",
|
|
123
|
-
`Projection sources: ${projection.sources.map((s) => s.kind).join(", ")}`,
|
|
124
|
-
].join("\n");
|
|
125
|
-
}
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
|
-
import { flushPendingAtomicWrites } from "../../state/atomic-write.ts";
|
|
3
|
-
import { withRunLockSync } from "../../state/locks.ts";
|
|
4
|
-
import { loadRunManifestById, saveRunTasksCoalesced } from "../../state/state-store.ts";
|
|
5
|
-
import type { TaskCheckpointState, TeamRunManifest, TeamTaskState } from "../../state/types.ts";
|
|
6
|
-
import { logInternalError } from "../../utils/internal-error.ts";
|
|
7
|
-
import { recordFromTask, upsertCrewAgent } from "../crew-agent-records.ts";
|
|
8
|
-
|
|
9
|
-
export function updateTask(tasks: TeamTaskState[], updated: TeamTaskState): TeamTaskState[] {
|
|
10
|
-
return tasks.map((task) => (task.id === updated.id ? updated : task));
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Persist a single task update using compare-and-swap under the run lock.
|
|
15
|
-
*
|
|
16
|
-
* Problem: The naive read-merge-write pattern is vulnerable to a read-modify-write
|
|
17
|
-
* race. When two parallel task completions race:
|
|
18
|
-
* 1. Task A loads tasks [A(running), B(running)], writes [A(completed), B(running)]
|
|
19
|
-
* 2. Task B loads [A(running), B(running)] (stale, before A's write), writes [A(running), B(completed)]
|
|
20
|
-
* Result: Task A's completed status is clobbered.
|
|
21
|
-
*
|
|
22
|
-
* Solution: Use mtime-based CAS under the run lock. Before writing, stat the tasks file
|
|
23
|
-
* to record its mtime. After merging, re-stat — if mtime changed, another writer
|
|
24
|
-
* committed first; retry with the fresh state. This is O(retry) under contention but
|
|
25
|
-
* converges in the normal single-writer case.
|
|
26
|
-
*
|
|
27
|
-
* ST-7: pass `skipCoalesce: true` when persisting a TERMINAL task status
|
|
28
|
-
* (completed/failed/cancelled/needs_attention/skipped). Without this the
|
|
29
|
-
* underlying `saveRunTasksCoalesced` would buffer the write for 50ms; a
|
|
30
|
-
* SIGKILL in that window loses the terminal update and crash recovery
|
|
31
|
-
* would see "running" in tasks.json while events.jsonl already shows
|
|
32
|
-
* "completed". For non-terminal transitions (heartbeat, progress) the
|
|
33
|
-
* default buffered write is fine and matches prior behavior.
|
|
34
|
-
*
|
|
35
|
-
* @param checkpointPhase - Optional checkpoint phase to include in the task state alongside the update.
|
|
36
|
-
*/
|
|
37
|
-
export function persistSingleTaskUpdate(
|
|
38
|
-
manifest: TeamRunManifest,
|
|
39
|
-
fallbackTasks: TeamTaskState[],
|
|
40
|
-
updated: TeamTaskState,
|
|
41
|
-
checkpointPhase?: TaskCheckpointState["phase"],
|
|
42
|
-
skipCoalesce: boolean = false,
|
|
43
|
-
): TeamTaskState[] {
|
|
44
|
-
const MAX_CAS_ATTEMPTS = 100;
|
|
45
|
-
let baseMtime = 0;
|
|
46
|
-
try {
|
|
47
|
-
baseMtime = fs.statSync(manifest.tasksPath).mtimeMs;
|
|
48
|
-
} catch {
|
|
49
|
-
// File doesn't exist yet — baseMtime=0 means "anything is fine"
|
|
50
|
-
baseMtime = 0;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
let merged: TeamTaskState[] | undefined;
|
|
54
|
-
|
|
55
|
-
// Build the task with optional checkpoint phase
|
|
56
|
-
const taskWithCheckpoint = checkpointPhase
|
|
57
|
-
? {
|
|
58
|
-
...updated,
|
|
59
|
-
checkpoint: {
|
|
60
|
-
phase: checkpointPhase,
|
|
61
|
-
updatedAt: new Date().toISOString(),
|
|
62
|
-
},
|
|
63
|
-
}
|
|
64
|
-
: updated;
|
|
65
|
-
|
|
66
|
-
try {
|
|
67
|
-
return withRunLockSync(manifest, () => {
|
|
68
|
-
for (let attempt = 0; attempt < MAX_CAS_ATTEMPTS; attempt++) {
|
|
69
|
-
// F4: persistSingleTaskUpdate now uses saveRunTasksCoalesced below
|
|
70
|
-
// (50ms debounce window). Read-modify-write loops are unsafe under
|
|
71
|
-
// coalescing — a parallel writer's buffered write is invisible to
|
|
72
|
-
// loadRunManifestById until it actually lands. Force any pending
|
|
73
|
-
// coalesced writes to flush first so this read sees the latest
|
|
74
|
-
// durable state. Without this guard, a parallel writer could
|
|
75
|
-
// overwrite our buffered write between our load and our (async)
|
|
76
|
-
// fsync, silently losing the intermediate update.
|
|
77
|
-
flushPendingAtomicWrites();
|
|
78
|
-
// FIX (perf): on the first attempt, reuse the caller-supplied
|
|
79
|
-
// fallbackTasks directly instead of calling loadRunManifestById.
|
|
80
|
-
// The caller already obtained the latest tasks via
|
|
81
|
-
// loadRunManifestById and handed them in as fallbackTasks, so a
|
|
82
|
-
// second load here is pure waste — it's another statSync pair
|
|
83
|
-
// (manifest + tasks) plus a possible JSON.parse. The CAS check
|
|
84
|
-
// below (currentMtime !== baseMtime) catches any concurrent
|
|
85
|
-
// writer that committed between fallbackTasks capture and now;
|
|
86
|
-
// when that fires we fall into the retry path which DOES call
|
|
87
|
-
// loadRunManifestById to pull the fresh state from disk. So we
|
|
88
|
-
// only pay the disk-read cost on actual contention, not on the
|
|
89
|
-
// common single-writer happy path.
|
|
90
|
-
let latest: TeamTaskState[];
|
|
91
|
-
if (attempt === 0) {
|
|
92
|
-
latest = fallbackTasks;
|
|
93
|
-
} else {
|
|
94
|
-
latest = loadRunManifestById(manifest.cwd, manifest.runId)?.tasks ?? fallbackTasks;
|
|
95
|
-
}
|
|
96
|
-
merged = updateTask(latest, taskWithCheckpoint);
|
|
97
|
-
|
|
98
|
-
// F2: collapsed from 3 redundant statSync calls into 1. The previous
|
|
99
|
-
// implementation re-checked mtime twice more after load and before
|
|
100
|
-
// write, but since the code is synchronous and `loadRunManifestById`
|
|
101
|
-
// holds no I/O-yield between the load and this stat, those re-checks
|
|
102
|
-
// always returned the same mtime and added nothing. The one CAS below
|
|
103
|
-
// remains necessary for best-effort writers (async-notifier,
|
|
104
|
-
// crash-recovery) that don't acquire the run lock.
|
|
105
|
-
let currentMtime: number;
|
|
106
|
-
try {
|
|
107
|
-
currentMtime = fs.statSync(manifest.tasksPath).mtimeMs;
|
|
108
|
-
} catch {
|
|
109
|
-
// Run state deleted (prune/forget) — nothing to persist.
|
|
110
|
-
return fallbackTasks;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
if (currentMtime !== baseMtime) {
|
|
114
|
-
// Another writer committed — their update is in latest, re-merge on top
|
|
115
|
-
baseMtime = currentMtime;
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
break;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (merged === undefined) {
|
|
123
|
-
logInternalError(
|
|
124
|
-
"persistSingleTaskUpdate",
|
|
125
|
-
new Error(`failed to converge after ${MAX_CAS_ATTEMPTS} attempts`),
|
|
126
|
-
undefined,
|
|
127
|
-
"error",
|
|
128
|
-
);
|
|
129
|
-
throw new Error(`persistSingleTaskUpdate: failed to converge after ${MAX_CAS_ATTEMPTS} attempts`);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
try {
|
|
133
|
-
// F4: coalesced write inside the withRunLockSync critical section.
|
|
134
|
-
// The mtime CAS retry loop above still guards against concurrent
|
|
135
|
-
// non-coalesced writers; the flushPendingAtomicWrites() guard at
|
|
136
|
-
// the top of the retry loop ensures reads see any other coalesced
|
|
137
|
-
// writer's flushed-before-this-call state.
|
|
138
|
-
// ST-7: terminal transitions (skipCoalesce=true) bypass the 50ms
|
|
139
|
-
// coalesce window so a SIGKILL after the persist completes cannot
|
|
140
|
-
// leave tasks.json stale with a non-terminal status.
|
|
141
|
-
saveRunTasksCoalesced(manifest, merged, skipCoalesce);
|
|
142
|
-
} catch (err) {
|
|
143
|
-
logInternalError("persistSingleTaskUpdate", err, undefined, "error");
|
|
144
|
-
throw err;
|
|
145
|
-
}
|
|
146
|
-
return merged;
|
|
147
|
-
});
|
|
148
|
-
} catch (err) {
|
|
149
|
-
if (merged === undefined) {
|
|
150
|
-
logInternalError("persistSingleTaskUpdate", err, undefined, "error");
|
|
151
|
-
}
|
|
152
|
-
throw err;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
export function checkpointTask(
|
|
157
|
-
manifest: TeamRunManifest,
|
|
158
|
-
tasks: TeamTaskState[],
|
|
159
|
-
task: TeamTaskState,
|
|
160
|
-
phase: TaskCheckpointState["phase"],
|
|
161
|
-
childPid?: number,
|
|
162
|
-
): { task: TeamTaskState; tasks: TeamTaskState[] } {
|
|
163
|
-
const checkpoint: TaskCheckpointState = {
|
|
164
|
-
phase,
|
|
165
|
-
updatedAt: new Date().toISOString(),
|
|
166
|
-
...(childPid ? { childPid } : task.checkpoint?.childPid ? { childPid: task.checkpoint.childPid } : {}),
|
|
167
|
-
};
|
|
168
|
-
const nextTask = { ...task, checkpoint };
|
|
169
|
-
const nextTasks = persistSingleTaskUpdate(manifest, updateTask(tasks, nextTask), nextTask);
|
|
170
|
-
try {
|
|
171
|
-
upsertCrewAgent(manifest, recordFromTask(manifest, nextTask, "child-process"));
|
|
172
|
-
} catch (err) {
|
|
173
|
-
logInternalError("checkpointTask", err);
|
|
174
|
-
}
|
|
175
|
-
return { task: nextTask, tasks: nextTasks };
|
|
176
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Read the tail of a file, capped at maxBytes.
|
|
5
|
-
* If the file exceeds maxBytes, reads only the last maxBytes and snaps
|
|
6
|
-
* to the nearest newline boundary to avoid partial JSONL lines.
|
|
7
|
-
*
|
|
8
|
-
* Falls back to `fallbackContent` when the file is missing OR empty. The
|
|
9
|
-
* empty-file case matters because `appendTranscript` is fire-and-forget
|
|
10
|
-
* async in the mock path (commit e316a36) — the file is created on disk
|
|
11
|
-
* (existsSync returns true) before the actual write completes, so a
|
|
12
|
-
* subsequent tail-read can observe size=0. Returning "" in that case would
|
|
13
|
-
* silently drop the mock's stdout, breaking downstream parsers that depend
|
|
14
|
-
* on a non-empty transcript (e.g. adaptive-plan JSON extraction in
|
|
15
|
-
* implementation-fanout.test.ts). Falling back to `fallbackContent` keeps
|
|
16
|
-
* the existing fallback semantics: "if the file isn't usable, use what
|
|
17
|
-
* the caller already has."
|
|
18
|
-
*/
|
|
19
|
-
export function tailReadWithLineSnap(filePath: string, maxBytes: number, fallbackContent: string): string {
|
|
20
|
-
if (!fs.existsSync(filePath)) return fallbackContent;
|
|
21
|
-
const stat = fs.statSync(filePath);
|
|
22
|
-
if (stat.size === 0) return fallbackContent;
|
|
23
|
-
if (stat.size <= maxBytes) return fs.readFileSync(filePath, "utf-8");
|
|
24
|
-
const fd = fs.openSync(filePath, "r");
|
|
25
|
-
try {
|
|
26
|
-
const buf = Buffer.alloc(maxBytes);
|
|
27
|
-
const bytesRead = fs.readSync(fd, buf, 0, maxBytes, stat.size - maxBytes);
|
|
28
|
-
const raw = buf.slice(0, bytesRead).toString("utf-8");
|
|
29
|
-
const firstNewline = raw.indexOf("\n");
|
|
30
|
-
return firstNewline >= 0 ? raw.slice(firstNewline + 1) : raw;
|
|
31
|
-
} finally {
|
|
32
|
-
fs.closeSync(fd);
|
|
33
|
-
}
|
|
34
|
-
}
|