pi-crew 0.9.51 → 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 +35 -0
- package/README.md +216 -20
- package/dist/build-meta.json +2090 -1638
- package/dist/index.mjs +18057 -17119
- 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/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/2026-07-26-c6-mascot-visibility-not-wired.md +0 -84
- 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 -293
- package/src/ui/loaders.ts +0 -6
- package/src/ui/mascot.ts +0 -449
- 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 -278
- package/src/ui/run-action-dispatcher.ts +0 -182
- package/src/ui/run-dashboard.ts +0 -904
- 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/shared-overlay-scheduler.ts +0 -96
- 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 -391
- 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,229 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Event reconstructor — rebuilds task state from the append-only event log.
|
|
3
|
-
*
|
|
4
|
-
* Primary use-case: crash recovery when tasks.json is corrupted or missing.
|
|
5
|
-
* The materialized tasks.json view is the primary source of truth; this
|
|
6
|
-
* module provides a fallback reconstruction path from events.jsonl.
|
|
7
|
-
*
|
|
8
|
-
* Distilled from pi-autoresearch's append-only event log pattern.
|
|
9
|
-
*/
|
|
10
|
-
import type { TeamEvent } from "./event-log.ts";
|
|
11
|
-
import { readEvents } from "./event-log.ts";
|
|
12
|
-
|
|
13
|
-
/** Task status values that can be reconstructed from lifecycle events. */
|
|
14
|
-
const RECONSTRUCTABLE_STATUSES = new Set([
|
|
15
|
-
"created",
|
|
16
|
-
"queued",
|
|
17
|
-
"running",
|
|
18
|
-
"completed",
|
|
19
|
-
"failed",
|
|
20
|
-
"cancelled",
|
|
21
|
-
"skipped",
|
|
22
|
-
"waiting",
|
|
23
|
-
"needs_attention",
|
|
24
|
-
]);
|
|
25
|
-
|
|
26
|
-
/** Event types that carry task lifecycle state transitions. */
|
|
27
|
-
const TASK_LIFECYCLE_EVENT_TYPES = new Set([
|
|
28
|
-
"task.created",
|
|
29
|
-
"task.started",
|
|
30
|
-
"task.completed",
|
|
31
|
-
"task.failed",
|
|
32
|
-
"task.skipped",
|
|
33
|
-
"task.cancelled",
|
|
34
|
-
"task.needs_attention",
|
|
35
|
-
"task.waiting",
|
|
36
|
-
"task.resumed",
|
|
37
|
-
"task.retried",
|
|
38
|
-
"task.blocked",
|
|
39
|
-
"task.progress",
|
|
40
|
-
"task.green",
|
|
41
|
-
"task.red",
|
|
42
|
-
]);
|
|
43
|
-
|
|
44
|
-
/** Terminal events that set finishedAt. */
|
|
45
|
-
const TERMINAL_EVENTS = new Set(["task.completed", "task.failed", "task.cancelled", "task.skipped", "task.needs_attention"]);
|
|
46
|
-
|
|
47
|
-
/** Mapping from event type to the reconstructed task status. */
|
|
48
|
-
const EVENT_STATUS_MAP: Readonly<Record<string, string>> = {
|
|
49
|
-
"task.created": "created",
|
|
50
|
-
"task.started": "running",
|
|
51
|
-
"task.completed": "completed",
|
|
52
|
-
"task.failed": "failed",
|
|
53
|
-
"task.skipped": "skipped",
|
|
54
|
-
"task.cancelled": "cancelled",
|
|
55
|
-
"task.needs_attention": "needs_attention",
|
|
56
|
-
"task.waiting": "waiting",
|
|
57
|
-
"task.resumed": "running",
|
|
58
|
-
"task.retried": "queued",
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
/** Task state reconstructed purely from event log entries. */
|
|
62
|
-
export interface ReconstructedTaskState {
|
|
63
|
-
/** Task identifier */
|
|
64
|
-
id: string;
|
|
65
|
-
/** Reconstructed status derived from the last lifecycle event */
|
|
66
|
-
status: string;
|
|
67
|
-
/** Timestamp of the task.started event, if observed */
|
|
68
|
-
startedAt?: string;
|
|
69
|
-
/** Timestamp of the terminal event (completed/failed/cancelled/skipped), if observed */
|
|
70
|
-
finishedAt?: string;
|
|
71
|
-
/** Error message from task.failed events */
|
|
72
|
-
error?: string;
|
|
73
|
-
/** Segment number from event data (for retry isolation) */
|
|
74
|
-
segment?: number;
|
|
75
|
-
/** Structured diagnostics from event data */
|
|
76
|
-
diagnostics?: Record<string, unknown>;
|
|
77
|
-
/** Numeric metrics from event data */
|
|
78
|
-
metrics?: Record<string, number>;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/** Result of reconstructing task state from events. */
|
|
82
|
-
export interface ReconstructionResult {
|
|
83
|
-
/** Map of taskId → reconstructed task state */
|
|
84
|
-
tasks: Map<string, ReconstructedTaskState>;
|
|
85
|
-
/** Total number of events processed */
|
|
86
|
-
eventCount: number;
|
|
87
|
-
/** Number of malformed/unparseable events skipped */
|
|
88
|
-
corruptedCount: number;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/** Input: either a file path to read events from, or an in-memory array. */
|
|
92
|
-
export type EventSource = string | TeamEvent[];
|
|
93
|
-
|
|
94
|
-
function isTaskLifecycleEvent(event: TeamEvent): boolean {
|
|
95
|
-
return TASK_LIFECYCLE_EVENT_TYPES.has(event.type);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function statusFromEventType(eventType: string): string | undefined {
|
|
99
|
-
return EVENT_STATUS_MAP[eventType];
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function safeNumber(value: unknown): number | undefined {
|
|
103
|
-
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function safeRecord(value: unknown): Record<string, unknown> | undefined {
|
|
107
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
108
|
-
return undefined;
|
|
109
|
-
}
|
|
110
|
-
return value as Record<string, unknown>;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function safeNumericRecord(value: unknown): Record<string, number> | undefined {
|
|
114
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
115
|
-
return undefined;
|
|
116
|
-
}
|
|
117
|
-
const record: Record<string, number> = {};
|
|
118
|
-
for (const [key, val] of Object.entries(value as Record<string, unknown>)) {
|
|
119
|
-
if (typeof val === "number" && Number.isFinite(val)) {
|
|
120
|
-
record[key] = val;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (Object.keys(record).length === 0) {
|
|
124
|
-
return undefined;
|
|
125
|
-
}
|
|
126
|
-
return record;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function parseEventLine(line: string): TeamEvent | undefined {
|
|
130
|
-
const trimmed = line.trim();
|
|
131
|
-
if (trimmed.length === 0) return undefined;
|
|
132
|
-
try {
|
|
133
|
-
const parsed = JSON.parse(trimmed);
|
|
134
|
-
if (typeof parsed !== "object" || parsed === null) return undefined;
|
|
135
|
-
if (typeof parsed.type !== "string" || typeof parsed.runId !== "string") return undefined;
|
|
136
|
-
return parsed as TeamEvent;
|
|
137
|
-
} catch {
|
|
138
|
-
return undefined;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Process a stream of validated TeamEvents into reconstructed task states.
|
|
144
|
-
* Shared logic for both file-based and line-based reconstruction.
|
|
145
|
-
*/
|
|
146
|
-
function processEvents(events: Iterable<TeamEvent>, eventCount: number, corruptedCount: number): ReconstructionResult {
|
|
147
|
-
const tasks = new Map<string, ReconstructedTaskState>();
|
|
148
|
-
|
|
149
|
-
for (const event of events) {
|
|
150
|
-
if (typeof event.taskId !== "string" || event.taskId.length === 0) continue;
|
|
151
|
-
if (!isTaskLifecycleEvent(event)) continue;
|
|
152
|
-
|
|
153
|
-
const taskId = event.taskId;
|
|
154
|
-
let task = tasks.get(taskId);
|
|
155
|
-
if (!task) {
|
|
156
|
-
task = { id: taskId, status: "created" };
|
|
157
|
-
tasks.set(taskId, task);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
const newStatus = statusFromEventType(event.type);
|
|
161
|
-
if (newStatus && RECONSTRUCTABLE_STATUSES.has(newStatus)) {
|
|
162
|
-
task.status = newStatus;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
if (event.type === "task.started") {
|
|
166
|
-
task.startedAt = event.time;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
if (TERMINAL_EVENTS.has(event.type)) {
|
|
170
|
-
task.finishedAt = event.time;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
if (event.type === "task.failed" && event.message) {
|
|
174
|
-
task.error = event.message;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
if (event.data) {
|
|
178
|
-
const segment = safeNumber(event.data.segment);
|
|
179
|
-
if (segment !== undefined) task.segment = segment;
|
|
180
|
-
|
|
181
|
-
const diagnostics = safeRecord(event.data.diagnostics);
|
|
182
|
-
if (diagnostics !== undefined) task.diagnostics = diagnostics;
|
|
183
|
-
|
|
184
|
-
const metrics = safeNumericRecord(event.data.metrics);
|
|
185
|
-
if (metrics !== undefined) task.metrics = metrics;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
return { tasks, eventCount, corruptedCount };
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Reconstruct task states from an append-only event log.
|
|
194
|
-
*
|
|
195
|
-
* @param source - Either a file path to events.jsonl, or an array of TeamEvent objects
|
|
196
|
-
* @returns Reconstruction result with task map, counts
|
|
197
|
-
*/
|
|
198
|
-
export function reconstructTasksFromEvents(source: EventSource): ReconstructionResult {
|
|
199
|
-
const events: TeamEvent[] = typeof source === "string" ? readEvents(source) : source;
|
|
200
|
-
return processEvents(events, events.length, 0);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Reconstruct task states from raw JSONL lines (string array).
|
|
205
|
-
* Useful for testing without creating files.
|
|
206
|
-
*
|
|
207
|
-
* @param lines - Array of raw JSONL lines
|
|
208
|
-
* @returns Reconstruction result
|
|
209
|
-
*/
|
|
210
|
-
export function reconstructTasksFromLines(lines: string[]): ReconstructionResult {
|
|
211
|
-
let eventCount = 0;
|
|
212
|
-
let corruptedCount = 0;
|
|
213
|
-
const parsedEvents: TeamEvent[] = [];
|
|
214
|
-
|
|
215
|
-
for (const line of lines) {
|
|
216
|
-
const trimmed = line.trim();
|
|
217
|
-
if (trimmed.length === 0) continue;
|
|
218
|
-
const event = parseEventLine(trimmed);
|
|
219
|
-
if (event === undefined) {
|
|
220
|
-
corruptedCount++;
|
|
221
|
-
eventCount++;
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
parsedEvents.push(event);
|
|
225
|
-
eventCount++;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
return processEvents(parsedEvents, eventCount, corruptedCount);
|
|
229
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manage .gitignore entries for the .crew directory.
|
|
3
|
-
* Only adds entries if not already present; preserves existing content.
|
|
4
|
-
*/
|
|
5
|
-
import * as fs from "node:fs";
|
|
6
|
-
import { atomicWriteFile } from "./atomic-write.ts";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Entries to add to .gitignore for .crew directory management.
|
|
10
|
-
*
|
|
11
|
-
* - `/.crew/` and `/.crew` ignore the core state directory.
|
|
12
|
-
* - Exceptions allow optional commit of artifacts/ and graphs/ (including their .gitkeep).
|
|
13
|
-
*/
|
|
14
|
-
const CREW_GITIGNORE_ENTRIES = [
|
|
15
|
-
"/.crew/",
|
|
16
|
-
"/.crew",
|
|
17
|
-
"!.crew/artifacts/",
|
|
18
|
-
"!.crew/graphs/",
|
|
19
|
-
"!.crew/artifacts/.gitkeep",
|
|
20
|
-
"!.crew/graphs/.gitkeep",
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Update .gitignore with .crew entries. Creates the file if it doesn't exist.
|
|
25
|
-
* Preserves all existing content.
|
|
26
|
-
*/
|
|
27
|
-
export async function updateGitignore(gitignorePath: string): Promise<void> {
|
|
28
|
-
if (!fs.existsSync(gitignorePath)) {
|
|
29
|
-
atomicWriteFile(gitignorePath, CREW_GITIGNORE_ENTRIES.join("\n") + "\n");
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const current = fs.readFileSync(gitignorePath, "utf-8");
|
|
34
|
-
const existingLines = new Set(current.split("\n").map((line) => line.trim()));
|
|
35
|
-
|
|
36
|
-
let appended = "";
|
|
37
|
-
for (const entry of CREW_GITIGNORE_ENTRIES) {
|
|
38
|
-
if (!existingLines.has(entry)) {
|
|
39
|
-
appended += `\n${entry}`;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (appended) {
|
|
44
|
-
fs.writeFileSync(gitignorePath, current + appended, "utf-8");
|
|
45
|
-
}
|
|
46
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
|
-
import * as path from "node:path";
|
|
3
|
-
import type { ManifestSummary } from "../runtime/task-health.ts";
|
|
4
|
-
import { computeRunHealth } from "../runtime/task-health.ts";
|
|
5
|
-
import { atomicWriteFile } from "./atomic-write.ts";
|
|
6
|
-
|
|
7
|
-
// Relative to the crew root (`<cwd>/.crew`). BUG A fix (pts/2 hang
|
|
8
|
-
// investigation 2026-06-16): this was `.crew/state/health`, which double-joined
|
|
9
|
-
// to `<crewRoot>/state/.crew/state/health` because the caller passed the state
|
|
10
|
-
// dir (not the crew root). Now the caller passes the real crew root, so this is
|
|
11
|
-
// a plain `state/health` suffix.
|
|
12
|
-
const HEALTH_DIR = "state/health";
|
|
13
|
-
|
|
14
|
-
export interface HealthSnapshot {
|
|
15
|
-
runId: string;
|
|
16
|
-
timestamp: number;
|
|
17
|
-
gitRef?: string;
|
|
18
|
-
score: number;
|
|
19
|
-
grade: string;
|
|
20
|
-
penalties: { reason: string; deduction: number }[];
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export class HealthStore {
|
|
24
|
-
private readonly crewRoot: string;
|
|
25
|
-
constructor(crewRoot: string) {
|
|
26
|
-
this.crewRoot = crewRoot;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
private healthDir(): string {
|
|
30
|
-
return path.join(this.crewRoot, HEALTH_DIR);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
saveSnapshot(manifest: ManifestSummary): HealthSnapshot {
|
|
34
|
-
const health = computeRunHealth(manifest);
|
|
35
|
-
const snapshot: HealthSnapshot = {
|
|
36
|
-
runId: manifest.runId,
|
|
37
|
-
timestamp: Date.now(),
|
|
38
|
-
score: health.score,
|
|
39
|
-
grade: health.grade,
|
|
40
|
-
penalties: health.penalties,
|
|
41
|
-
};
|
|
42
|
-
const dir = this.healthDir();
|
|
43
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
44
|
-
const file = path.join(dir, `${manifest.runId}.json`);
|
|
45
|
-
// ST-2: atomic (temp + rename + fsync) — a crash mid-writeFileSync would truncate
|
|
46
|
-
// the snapshot and loadAllSnapshots() silently skips unparseable files.
|
|
47
|
-
atomicWriteFile(file, JSON.stringify(snapshot, null, 2) + "\n");
|
|
48
|
-
return snapshot;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
loadLatestSnapshot(): HealthSnapshot | null {
|
|
52
|
-
const dir = this.healthDir();
|
|
53
|
-
if (!fs.existsSync(dir)) return null;
|
|
54
|
-
const snapshots = this.loadAllSnapshots();
|
|
55
|
-
if (snapshots.length === 0) return null;
|
|
56
|
-
// Sort by timestamp descending (most recent first)
|
|
57
|
-
snapshots.sort((a, b) => b.timestamp - a.timestamp);
|
|
58
|
-
return snapshots[0];
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
loadAllSnapshots(): HealthSnapshot[] {
|
|
62
|
-
const dir = this.healthDir();
|
|
63
|
-
if (!fs.existsSync(dir)) return [];
|
|
64
|
-
const snapshots = fs
|
|
65
|
-
.readdirSync(dir)
|
|
66
|
-
.filter((f) => f.endsWith(".json"))
|
|
67
|
-
.map((f) => {
|
|
68
|
-
try {
|
|
69
|
-
return JSON.parse(fs.readFileSync(path.join(dir, f), "utf8"));
|
|
70
|
-
} catch {
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
})
|
|
74
|
-
.filter(Boolean) as HealthSnapshot[];
|
|
75
|
-
// Sort by timestamp ascending (oldest first) for consistent ordering
|
|
76
|
-
snapshots.sort((a, b) => a.timestamp - b.timestamp);
|
|
77
|
-
return snapshots;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hook-to-instinct bridge - connects crewHooks events to instinct formation.
|
|
3
|
-
* Auto-initializes when imported.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { crewHooks } from "../runtime/crew-hooks.ts";
|
|
7
|
-
|
|
8
|
-
// Lazy-initialized store and paths
|
|
9
|
-
let storeInstance: import("./instinct-store.js").InstinctStore | null = null;
|
|
10
|
-
let pathsInstance: typeof import("../utils/paths.js") | null = null;
|
|
11
|
-
|
|
12
|
-
async function getStore() {
|
|
13
|
-
if (!storeInstance) {
|
|
14
|
-
// LAZY: defer dynamic import of ./instinct-store.js to its call site.
|
|
15
|
-
const { InstinctStore } = await import("./instinct-store.js");
|
|
16
|
-
// LAZY: defer dynamic import of ../utils/paths.js to its call site.
|
|
17
|
-
const paths = await import("../utils/paths.js");
|
|
18
|
-
storeInstance = new InstinctStore(paths.projectCrewRoot(process.cwd()));
|
|
19
|
-
}
|
|
20
|
-
return storeInstance;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async function getPaths() {
|
|
24
|
-
if (!pathsInstance) {
|
|
25
|
-
// LAZY: defer dynamic import of ../utils/paths.js to its call site.
|
|
26
|
-
pathsInstance = await import("../utils/paths.js");
|
|
27
|
-
}
|
|
28
|
-
return pathsInstance;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// Subscribe to events
|
|
32
|
-
crewHooks.register("task_completed", async (event) => {
|
|
33
|
-
try {
|
|
34
|
-
const store = await getStore();
|
|
35
|
-
if (event.data?.role) {
|
|
36
|
-
store.saveInstinct({
|
|
37
|
-
trigger: `role:${event.data.role}`,
|
|
38
|
-
action: "prefer",
|
|
39
|
-
confidence: 0.6,
|
|
40
|
-
scope: "global",
|
|
41
|
-
evidence: [`task:${event.taskId} completed`],
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
} catch {
|
|
45
|
-
// Best-effort - don't crash on instinct formation failures
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
crewHooks.register("task_failed", async (event) => {
|
|
50
|
-
try {
|
|
51
|
-
const store = await getStore();
|
|
52
|
-
if (event.data?.role) {
|
|
53
|
-
store.saveInstinct({
|
|
54
|
-
trigger: `role:${event.data.role}`,
|
|
55
|
-
action: "avoid",
|
|
56
|
-
confidence: 0.3,
|
|
57
|
-
scope: "global",
|
|
58
|
-
evidence: [`task:${event.taskId} failed`],
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
} catch {
|
|
62
|
-
// Best-effort
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
crewHooks.register("run_completed", async (event) => {
|
|
67
|
-
try {
|
|
68
|
-
const store = await getStore();
|
|
69
|
-
if (event.data?.taskCount) {
|
|
70
|
-
store.saveInstinct({
|
|
71
|
-
trigger: "run_completed",
|
|
72
|
-
action: `completed:${event.data.taskCount}tasks`,
|
|
73
|
-
confidence: 0.6,
|
|
74
|
-
scope: "global",
|
|
75
|
-
evidence: [`run:${event.runId}`],
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
} catch {
|
|
79
|
-
// Best-effort
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Get instinct-based recommendations.
|
|
85
|
-
*/
|
|
86
|
-
/** @internal */
|
|
87
|
-
async function getInstinctRecommendations() {
|
|
88
|
-
try {
|
|
89
|
-
const store = await getStore();
|
|
90
|
-
return store.getInstincts().filter((i: { confidence: number }) => i.confidence >= 0.6);
|
|
91
|
-
} catch {
|
|
92
|
-
return [];
|
|
93
|
-
}
|
|
94
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hook integrations - subscribes to crewHooks and provides observability.
|
|
3
|
-
* Auto-initializes when imported.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { crewHooks } from "../runtime/crew-hooks.ts";
|
|
7
|
-
|
|
8
|
-
// Statistics
|
|
9
|
-
let tasksCompleted = 0;
|
|
10
|
-
let tasksFailed = 0;
|
|
11
|
-
let runsCompleted = 0;
|
|
12
|
-
let runsFailed = 0;
|
|
13
|
-
|
|
14
|
-
// Subscribe to events (fire-and-forget)
|
|
15
|
-
crewHooks.register("task_completed", () => {
|
|
16
|
-
tasksCompleted++;
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
crewHooks.register("task_failed", () => {
|
|
20
|
-
tasksFailed++;
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
crewHooks.register("run_completed", () => {
|
|
24
|
-
runsCompleted++;
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
crewHooks.register("run_failed", () => {
|
|
28
|
-
runsFailed++;
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Get current hook statistics.
|
|
33
|
-
*/
|
|
34
|
-
export function getHookStats(): {
|
|
35
|
-
tasksCompleted: number;
|
|
36
|
-
tasksFailed: number;
|
|
37
|
-
runsCompleted: number;
|
|
38
|
-
runsFailed: number;
|
|
39
|
-
} {
|
|
40
|
-
return { tasksCompleted, tasksFailed, runsCompleted, runsFailed };
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Reset statistics (useful for testing).
|
|
45
|
-
*/
|
|
46
|
-
export function resetHookStats(): void {
|
|
47
|
-
tasksCompleted = 0;
|
|
48
|
-
tasksFailed = 0;
|
|
49
|
-
runsCompleted = 0;
|
|
50
|
-
runsFailed = 0;
|
|
51
|
-
}
|