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,524 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill Effectiveness — ECC INSTINCT/CONFIDENCE Pattern Implementation
|
|
3
|
-
*
|
|
4
|
-
* Implements confidence-weighted skill activation based on ECC's instinct system.
|
|
5
|
-
* Tracks skill activation success and adjusts confidence scores.
|
|
6
|
-
*
|
|
7
|
-
* Based on: docs/distillation/ECC-hooks-instincts.md §2-3 (instinct system, confidence thresholds)
|
|
8
|
-
* Based on: docs/distillation/ECC-10-skills.md §8 (continuous-learning-v2)
|
|
9
|
-
*
|
|
10
|
-
* @module skill-effectiveness
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
14
|
-
import { dirname, join } from "node:path";
|
|
15
|
-
import { projectCrewRoot } from "../utils/paths.ts";
|
|
16
|
-
import { crewHooks } from "./crew-hooks.ts";
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Confidence thresholds per ECC instinct system.
|
|
20
|
-
* Skills below 0.3 threshold are considered tentative and not enforced.
|
|
21
|
-
*/
|
|
22
|
-
export const CONFIDENCE_THRESHOLDS = {
|
|
23
|
-
TENTATIVE: 0.3, // Suggested but not enforced
|
|
24
|
-
MODERATE: 0.5, // Applied when relevant
|
|
25
|
-
STRONG: 0.7, // Auto-approved for application
|
|
26
|
-
NEAR_CERTAIN: 0.9, // Core behavior
|
|
27
|
-
} as const;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Initial confidence by observation frequency.
|
|
31
|
-
* From ECC instinct system: 1-2 observations → 0.3, 3-5 → 0.5, etc.
|
|
32
|
-
*/
|
|
33
|
-
export const INITIAL_CONFIDENCE_BY_FREQUENCY: Record<string, number> = {
|
|
34
|
-
"1": 0.3, // 1 observation → tentative
|
|
35
|
-
"2": 0.3, // 2 observations → tentative
|
|
36
|
-
"3": 0.5, // 3 observations → moderate
|
|
37
|
-
"4": 0.5,
|
|
38
|
-
"5": 0.5,
|
|
39
|
-
"6": 0.7, // 6-10 observations → strong
|
|
40
|
-
"7": 0.7,
|
|
41
|
-
"8": 0.7,
|
|
42
|
-
"9": 0.7,
|
|
43
|
-
"10": 0.7,
|
|
44
|
-
"11+": 0.85, // 11+ observations → very strong
|
|
45
|
-
} as const;
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Confidence adjustments per ECC instinct system.
|
|
49
|
-
*/
|
|
50
|
-
export const CONFIDENCE_ADJUSTMENTS = {
|
|
51
|
-
CONFIRMING: 0.05, // Each confirming observation
|
|
52
|
-
CONTRADICTING: -0.1, // Each contradicting observation
|
|
53
|
-
DECAY_PER_WEEK: -0.02, // Per week without observation
|
|
54
|
-
} as const;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Promotion gate criteria for skills.
|
|
58
|
-
* Skill can be promoted to "strong enforcement" when these are met.
|
|
59
|
-
*/
|
|
60
|
-
export const PROMOTION_GATE_CRITERIA = {
|
|
61
|
-
MIN_CORRECTNESS: 0.8, // 80% pass rate
|
|
62
|
-
MIN_ACTIVATIONS: 5, // Minimum observations before filtering
|
|
63
|
-
MIN_AVG_CONFIDENCE: 0.7, // Average confidence threshold
|
|
64
|
-
} as const;
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Skill activation record - captures each time a skill is used.
|
|
68
|
-
*/
|
|
69
|
-
export interface SkillActivation {
|
|
70
|
-
id: string; // Unique activation ID
|
|
71
|
-
skillId: string; // Skill identifier (e.g., "verification-before-done")
|
|
72
|
-
role: string; // Role that activated the skill
|
|
73
|
-
runId: string; // Run ID
|
|
74
|
-
taskId: string; // Task ID
|
|
75
|
-
timestamp: string; // ISO timestamp
|
|
76
|
-
passed: boolean; // Whether the skill was successfully applied
|
|
77
|
-
outcome?: string; // Optional outcome description
|
|
78
|
-
confidence: number; // Confidence at time of activation
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Skill metrics - aggregated statistics for a skill.
|
|
83
|
-
*/
|
|
84
|
-
export interface SkillMetrics {
|
|
85
|
-
skillId: string;
|
|
86
|
-
totalActivations: number;
|
|
87
|
-
passedActivations: number;
|
|
88
|
-
failedActivations: number;
|
|
89
|
-
passRate: number; // passed / total
|
|
90
|
-
avgConfidence: number; // Rolling average confidence
|
|
91
|
-
currentConfidence: number; // Current confidence score
|
|
92
|
-
trend: "improving" | "stable" | "declining";
|
|
93
|
-
lastActivation?: string; // ISO timestamp
|
|
94
|
-
firstActivation?: string; // ISO timestamp
|
|
95
|
-
roleBreakdown: Record<string, number>; // Activations per role
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Confidence-weighted skill entry for activation decisions.
|
|
100
|
-
*/
|
|
101
|
-
export interface WeightedSkill {
|
|
102
|
-
skillId: string;
|
|
103
|
-
confidence: number;
|
|
104
|
-
threshold: keyof typeof CONFIDENCE_THRESHOLDS;
|
|
105
|
-
behavior: "suggest" | "apply_if_asked" | "apply_auto" | "act_autonomous";
|
|
106
|
-
evidence: string; // Evidence for confidence score
|
|
107
|
-
metrics: SkillMetrics;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Get skill effectiveness storage path.
|
|
112
|
-
* Uses projectCrewRoot() so the path honours the `.pi/teams/` fallback
|
|
113
|
-
* for `.pi`-based projects (see issue #29).
|
|
114
|
-
*/
|
|
115
|
-
function getSkillMetricsPath(cwd: string, runId: string): string {
|
|
116
|
-
return join(projectCrewRoot(cwd), `state/runs/${runId}/skill-metrics.jsonl`);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Get skill activations path.
|
|
121
|
-
* Uses projectCrewRoot() so the path honours the `.pi/teams/` fallback
|
|
122
|
-
* for `.pi`-based projects (see issue #29).
|
|
123
|
-
*/
|
|
124
|
-
function getSkillActivationsPath(cwd: string, runId: string): string {
|
|
125
|
-
return join(projectCrewRoot(cwd), `state/runs/${runId}/skill-activations.jsonl`);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Ensure directory exists for skill metrics.
|
|
130
|
-
*/
|
|
131
|
-
function ensureSkillMetricsDir(cwd: string, runId: string): void {
|
|
132
|
-
const dir = dirname(getSkillMetricsPath(cwd, runId));
|
|
133
|
-
if (!existsSync(dir)) {
|
|
134
|
-
mkdirSync(dir, { recursive: true });
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Compute initial confidence from observation count.
|
|
140
|
-
*/
|
|
141
|
-
export function computeInitialConfidence(observationCount: number): number {
|
|
142
|
-
if (observationCount <= 2) return INITIAL_CONFIDENCE_BY_FREQUENCY["1"];
|
|
143
|
-
if (observationCount <= 5) return INITIAL_CONFIDENCE_BY_FREQUENCY["3"];
|
|
144
|
-
if (observationCount <= 10) return INITIAL_CONFIDENCE_BY_FREQUENCY["6"];
|
|
145
|
-
return INITIAL_CONFIDENCE_BY_FREQUENCY["11+"];
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Adjust confidence based on outcome.
|
|
150
|
-
* Per ECC instinct system: +0.05 for success, -0.1 for failure.
|
|
151
|
-
*/
|
|
152
|
-
export function adjustConfidence(current: number, passed: boolean): number {
|
|
153
|
-
const delta = passed ? CONFIDENCE_ADJUSTMENTS.CONFIRMING : CONFIDENCE_ADJUSTMENTS.CONTRADICTING;
|
|
154
|
-
return Math.max(0.1, Math.min(0.95, current + delta)); // Clamp to [0.1, 0.95]
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Compute the rolling confidence to RECORD for a new activation of `skillId`,
|
|
159
|
-
* given the existing activations for that skill in the run.
|
|
160
|
-
*
|
|
161
|
-
* Bug fixed (T7, v0.8.2): the `task_completed`/`task_failed` hooks used to
|
|
162
|
-
* hardcode `confidence: computeInitialConfidence(1)` (= 0.3) on every write,
|
|
163
|
-
* which made `adjustConfidence` dead code — every skill stayed stuck at ~0.3
|
|
164
|
-
* regardless of how often it succeeded or failed. The whole confidence
|
|
165
|
-
* system was effectively inert.
|
|
166
|
-
*
|
|
167
|
-
* Now the recorded confidence is the PRIOR rolling confidence for that skill
|
|
168
|
-
* adjusted by this outcome (+0.05 success / -0.1 failure), so the stored
|
|
169
|
-
* value evolves over the run. First activation seeds from the observation
|
|
170
|
-
* count (which is 0 prior + this one = 1 observation -> initial 0.3). This
|
|
171
|
-
* preserves the existing `adjustConfidence` clamp range [0.1, 0.95] and the
|
|
172
|
-
* existing tests (which assert on the stored numeric values).
|
|
173
|
-
*/
|
|
174
|
-
export function computeNextActivationConfidence(skillId: string, activations: SkillActivation[], passed: boolean): number {
|
|
175
|
-
const prior = activations.filter((a) => a.skillId === skillId);
|
|
176
|
-
if (prior.length === 0) {
|
|
177
|
-
// First activation of this skill in the run: seed by observation count.
|
|
178
|
-
// (computeInitialConfidence(1) = 0.3 — the tentative floor.)
|
|
179
|
-
return computeInitialConfidence(1);
|
|
180
|
-
}
|
|
181
|
-
// Rolling confidence = last recorded confidence for this skill, adjusted.
|
|
182
|
-
const lastConfidence = prior[prior.length - 1]?.confidence ?? computeInitialConfidence(prior.length);
|
|
183
|
-
return adjustConfidence(lastConfidence, passed);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* Apply decay to confidence for skills not observed recently.
|
|
188
|
-
*/
|
|
189
|
-
export function applyDecay(current: number, lastActivation?: string): number {
|
|
190
|
-
if (!lastActivation) return current;
|
|
191
|
-
|
|
192
|
-
const daysSince = (Date.now() - new Date(lastActivation).getTime()) / (1000 * 60 * 60 * 24);
|
|
193
|
-
const decayWeeks = Math.floor(daysSince / 7);
|
|
194
|
-
const decay = decayWeeks * CONFIDENCE_ADJUSTMENTS.DECAY_PER_WEEK;
|
|
195
|
-
|
|
196
|
-
return Math.max(0.1, current + decay);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Determine behavior based on confidence threshold.
|
|
201
|
-
*/
|
|
202
|
-
export function confidenceToBehavior(confidence: number): WeightedSkill["behavior"] {
|
|
203
|
-
if (confidence >= CONFIDENCE_THRESHOLDS.NEAR_CERTAIN) return "act_autonomous";
|
|
204
|
-
if (confidence >= CONFIDENCE_THRESHOLDS.STRONG) return "apply_auto";
|
|
205
|
-
if (confidence >= CONFIDENCE_THRESHOLDS.MODERATE) return "apply_if_asked";
|
|
206
|
-
return "suggest";
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* Determine threshold name from confidence.
|
|
211
|
-
*/
|
|
212
|
-
export function confidenceToThreshold(confidence: number): keyof typeof CONFIDENCE_THRESHOLDS {
|
|
213
|
-
if (confidence >= CONFIDENCE_THRESHOLDS.NEAR_CERTAIN) return "NEAR_CERTAIN";
|
|
214
|
-
if (confidence >= CONFIDENCE_THRESHOLDS.STRONG) return "STRONG";
|
|
215
|
-
if (confidence >= CONFIDENCE_THRESHOLDS.TENTATIVE) return "MODERATE";
|
|
216
|
-
return "TENTATIVE";
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Record a skill activation.
|
|
221
|
-
* Appends to the run's skill-activations.jsonl for learning.
|
|
222
|
-
*/
|
|
223
|
-
export function recordSkillActivation(cwd: string, activation: SkillActivation): SkillActivation {
|
|
224
|
-
ensureSkillMetricsDir(cwd, activation.runId);
|
|
225
|
-
|
|
226
|
-
const path = getSkillActivationsPath(cwd, activation.runId);
|
|
227
|
-
const line = JSON.stringify(activation) + "\n";
|
|
228
|
-
writeFileSync(path, line, { flag: "a", encoding: "utf-8" });
|
|
229
|
-
|
|
230
|
-
return activation;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Get all skill activations for a run.
|
|
235
|
-
*/
|
|
236
|
-
export function getSkillActivations(cwd: string, runId: string): SkillActivation[] {
|
|
237
|
-
const path = getSkillActivationsPath(cwd, runId);
|
|
238
|
-
|
|
239
|
-
if (!existsSync(path)) {
|
|
240
|
-
return [];
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
const content = readFileSync(path, "utf-8");
|
|
244
|
-
if (!content.trim()) {
|
|
245
|
-
return [];
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
return content
|
|
249
|
-
.split("\n")
|
|
250
|
-
.filter((line) => line.trim())
|
|
251
|
-
.map((line) => JSON.parse(line) as SkillActivation);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Compute metrics for a skill across all activations.
|
|
256
|
-
*/
|
|
257
|
-
export function computeSkillMetrics(skillId: string, activations: SkillActivation[]): SkillMetrics {
|
|
258
|
-
const skillActivations = activations.filter((a) => a.skillId === skillId);
|
|
259
|
-
|
|
260
|
-
if (skillActivations.length === 0) {
|
|
261
|
-
return {
|
|
262
|
-
skillId,
|
|
263
|
-
totalActivations: 0,
|
|
264
|
-
passedActivations: 0,
|
|
265
|
-
failedActivations: 0,
|
|
266
|
-
passRate: 0,
|
|
267
|
-
avgConfidence: 0,
|
|
268
|
-
currentConfidence: computeInitialConfidence(0),
|
|
269
|
-
trend: "stable",
|
|
270
|
-
roleBreakdown: {},
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
const passed = skillActivations.filter((a) => a.passed).length;
|
|
275
|
-
const failed = skillActivations.filter((a) => !a.passed).length;
|
|
276
|
-
const avgConfidence = skillActivations.reduce((sum, a) => sum + a.confidence, 0) / skillActivations.length;
|
|
277
|
-
const currentConfidence = skillActivations[skillActivations.length - 1]?.confidence ?? avgConfidence;
|
|
278
|
-
|
|
279
|
-
// Compute trend from last 5 activations
|
|
280
|
-
const recent = skillActivations.slice(-5);
|
|
281
|
-
const recentPassRate = recent.filter((a) => a.passed).length / recent.length;
|
|
282
|
-
const earlier = skillActivations.slice(0, -5);
|
|
283
|
-
const earlierPassRate = earlier.length > 0 ? earlier.filter((a) => a.passed).length / earlier.length : recentPassRate;
|
|
284
|
-
|
|
285
|
-
let trend: SkillMetrics["trend"] = "stable";
|
|
286
|
-
if (recentPassRate > earlierPassRate + 0.1) {
|
|
287
|
-
trend = "improving";
|
|
288
|
-
} else if (recentPassRate < earlierPassRate - 0.1) {
|
|
289
|
-
trend = "declining";
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// Role breakdown
|
|
293
|
-
const roleBreakdown: Record<string, number> = {};
|
|
294
|
-
for (const activation of skillActivations) {
|
|
295
|
-
roleBreakdown[activation.role] = (roleBreakdown[activation.role] ?? 0) + 1;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
// Apply decay if not observed recently
|
|
299
|
-
const lastActivation = skillActivations[skillActivations.length - 1]?.timestamp;
|
|
300
|
-
const decayedConfidence = applyDecay(currentConfidence, lastActivation);
|
|
301
|
-
|
|
302
|
-
return {
|
|
303
|
-
skillId,
|
|
304
|
-
totalActivations: skillActivations.length,
|
|
305
|
-
passedActivations: passed,
|
|
306
|
-
failedActivations: failed,
|
|
307
|
-
passRate: passed / skillActivations.length,
|
|
308
|
-
avgConfidence,
|
|
309
|
-
currentConfidence: decayedConfidence,
|
|
310
|
-
trend,
|
|
311
|
-
lastActivation,
|
|
312
|
-
firstActivation: skillActivations[0]?.timestamp,
|
|
313
|
-
roleBreakdown,
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* Evaluate if a skill passes the promotion gate.
|
|
319
|
-
* Skill can be promoted to "strong enforcement" when criteria are met.
|
|
320
|
-
*/
|
|
321
|
-
export function evaluatePromotionGate(metrics: SkillMetrics): {
|
|
322
|
-
passed: boolean;
|
|
323
|
-
criteria: {
|
|
324
|
-
correctness: boolean;
|
|
325
|
-
evidence: boolean;
|
|
326
|
-
rollback: boolean;
|
|
327
|
-
encoding: boolean;
|
|
328
|
-
};
|
|
329
|
-
reason: string;
|
|
330
|
-
} {
|
|
331
|
-
const criteria = {
|
|
332
|
-
correctness: metrics.passRate >= PROMOTION_GATE_CRITERIA.MIN_CORRECTNESS,
|
|
333
|
-
evidence: metrics.totalActivations >= PROMOTION_GATE_CRITERIA.MIN_ACTIVATIONS,
|
|
334
|
-
rollback: metrics.trend !== "declining",
|
|
335
|
-
encoding: metrics.avgConfidence >= PROMOTION_GATE_CRITERIA.MIN_AVG_CONFIDENCE,
|
|
336
|
-
};
|
|
337
|
-
|
|
338
|
-
const allPassed = Object.values(criteria).every(Boolean);
|
|
339
|
-
|
|
340
|
-
let reason: string;
|
|
341
|
-
if (allPassed) {
|
|
342
|
-
reason = `All promotion gate criteria met: ${metrics.passRate.toFixed(1)} pass rate, ${metrics.totalActivations} activations, ${metrics.trend} trend`;
|
|
343
|
-
} else {
|
|
344
|
-
const failedCriteria = Object.entries(criteria)
|
|
345
|
-
.filter(([, passed]) => !passed)
|
|
346
|
-
.map(([name]) => name);
|
|
347
|
-
reason = `Promotion gate not passed. Failed: ${failedCriteria.join(", ")}`;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
return { passed: allPassed, criteria, reason };
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
/**
|
|
354
|
-
* Get weighted skills for a role based on activation history.
|
|
355
|
-
* Filters by minimum confidence threshold.
|
|
356
|
-
*/
|
|
357
|
-
export function getWeightedSkillsForRole(
|
|
358
|
-
cwd: string,
|
|
359
|
-
role: string,
|
|
360
|
-
skillIds: string[],
|
|
361
|
-
runId: string,
|
|
362
|
-
minConfidence: number = CONFIDENCE_THRESHOLDS.TENTATIVE,
|
|
363
|
-
): WeightedSkill[] {
|
|
364
|
-
const activations = getSkillActivations(cwd, runId);
|
|
365
|
-
|
|
366
|
-
return skillIds
|
|
367
|
-
.map((skillId) => {
|
|
368
|
-
const metrics = computeSkillMetrics(skillId, activations);
|
|
369
|
-
const confidence = metrics.currentConfidence;
|
|
370
|
-
|
|
371
|
-
if (confidence < minConfidence) {
|
|
372
|
-
return null;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
return {
|
|
376
|
-
skillId,
|
|
377
|
-
confidence,
|
|
378
|
-
threshold: confidenceToThreshold(confidence),
|
|
379
|
-
behavior: confidenceToBehavior(confidence),
|
|
380
|
-
evidence: `${metrics.totalActivations} activations, ${(metrics.passRate * 100).toFixed(0)}% pass rate`,
|
|
381
|
-
metrics,
|
|
382
|
-
};
|
|
383
|
-
})
|
|
384
|
-
.filter((s): s is WeightedSkill => s !== null)
|
|
385
|
-
.sort((a, b) => b.confidence - a.confidence);
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
/**
|
|
389
|
-
* Filter skills by confidence threshold.
|
|
390
|
-
* Skills below threshold are marked as "suggest" only.
|
|
391
|
-
*/
|
|
392
|
-
/** @internal */
|
|
393
|
-
function filterSkillsByConfidence(
|
|
394
|
-
cwd: string,
|
|
395
|
-
skillIds: string[],
|
|
396
|
-
runId: string,
|
|
397
|
-
threshold: keyof typeof CONFIDENCE_THRESHOLDS = "MODERATE",
|
|
398
|
-
): WeightedSkill[] {
|
|
399
|
-
const minConfidence = CONFIDENCE_THRESHOLDS[threshold];
|
|
400
|
-
return getWeightedSkillsForRole(cwd, "global", skillIds, runId, minConfidence);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
/**
|
|
404
|
-
* Register crew hooks for automatic skill activation tracking.
|
|
405
|
-
* Hooks are registered once per process lifetime.
|
|
406
|
-
*/
|
|
407
|
-
let hooksRegistered = false;
|
|
408
|
-
|
|
409
|
-
export function registerSkillEffectivenessHooks(): void {
|
|
410
|
-
if (hooksRegistered) return;
|
|
411
|
-
hooksRegistered = true;
|
|
412
|
-
|
|
413
|
-
// Track task completion for skill effectiveness.
|
|
414
|
-
// T7 (v0.8.2): record the ROLLING adjusted confidence, not a hardcoded
|
|
415
|
-
// 0.3. computeNextActivationConfidence seeds the first activation and
|
|
416
|
-
// applies adjustConfidence (+0.05 success / -0.1 failure) on subsequent
|
|
417
|
-
// ones, so the stored confidence evolves across the run. Before this fix
|
|
418
|
-
// every activation was written with confidence 0.3, which made
|
|
419
|
-
// adjustConfidence dead code and left every skill stuck at ~0.3.
|
|
420
|
-
crewHooks.register("task_completed", (event) => {
|
|
421
|
-
const { taskId, runId, data } = event;
|
|
422
|
-
if (!taskId || !runId) return;
|
|
423
|
-
|
|
424
|
-
// Extract skills that were activated from task data
|
|
425
|
-
const skillNames = (data?.skills as string[]) ?? [];
|
|
426
|
-
const success = (data?.status as string) === "completed";
|
|
427
|
-
|
|
428
|
-
// cwd comes from the event payload (set by callers) so that the
|
|
429
|
-
// activation lands in the correct .pi/teams/ or .crew/state/runs/
|
|
430
|
-
// (see issue #29).
|
|
431
|
-
const eventCwd = (data?.cwd as string) ?? process.cwd();
|
|
432
|
-
const existingActivations = getSkillActivations(eventCwd, runId);
|
|
433
|
-
|
|
434
|
-
// Record each skill activation with its rolling confidence
|
|
435
|
-
for (const skillId of skillNames) {
|
|
436
|
-
const confidence = computeNextActivationConfidence(skillId, existingActivations, success);
|
|
437
|
-
const activation: SkillActivation = {
|
|
438
|
-
id: `act-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
439
|
-
skillId,
|
|
440
|
-
role: (data?.role as string) ?? "unknown",
|
|
441
|
-
runId,
|
|
442
|
-
taskId,
|
|
443
|
-
timestamp: new Date().toISOString(),
|
|
444
|
-
passed: success,
|
|
445
|
-
confidence,
|
|
446
|
-
};
|
|
447
|
-
recordSkillActivation(eventCwd, activation);
|
|
448
|
-
}
|
|
449
|
-
});
|
|
450
|
-
|
|
451
|
-
// Track task failures.
|
|
452
|
-
// T7 (v0.8.2): this used to be a no-op ("handled by computeSkillMetrics"),
|
|
453
|
-
// but computeSkillMetrics derives passRate from recorded activations —
|
|
454
|
-
// and since failed tasks recorded NOTHING, the failure never fed back
|
|
455
|
-
// into the confidence/decay loop. Now we record a `passed:false`
|
|
456
|
-
// activation for each skill tied to the failed task, which both lowers
|
|
457
|
-
// passRate AND triggers the -0.1 contradicting delta via
|
|
458
|
-
// computeNextActivationConfidence on the next recorded activation.
|
|
459
|
-
crewHooks.register("task_failed", (event) => {
|
|
460
|
-
const { taskId, runId, data } = event;
|
|
461
|
-
if (!taskId || !runId) return;
|
|
462
|
-
|
|
463
|
-
const skillNames = (data?.skills as string[]) ?? [];
|
|
464
|
-
const eventCwd = (data?.cwd as string) ?? process.cwd();
|
|
465
|
-
const existingActivations = getSkillActivations(eventCwd, runId);
|
|
466
|
-
|
|
467
|
-
for (const skillId of skillNames) {
|
|
468
|
-
const confidence = computeNextActivationConfidence(skillId, existingActivations, false);
|
|
469
|
-
const activation: SkillActivation = {
|
|
470
|
-
id: `act-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
471
|
-
skillId,
|
|
472
|
-
role: (data?.role as string) ?? "unknown",
|
|
473
|
-
runId,
|
|
474
|
-
taskId,
|
|
475
|
-
timestamp: new Date().toISOString(),
|
|
476
|
-
passed: false,
|
|
477
|
-
confidence,
|
|
478
|
-
};
|
|
479
|
-
recordSkillActivation(eventCwd, activation);
|
|
480
|
-
}
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
/**
|
|
485
|
-
* Generate a skill effectiveness report for a run.
|
|
486
|
-
*/
|
|
487
|
-
/** @internal */
|
|
488
|
-
function generateSkillEffectivenessReport(cwd: string, runId: string, skillIds: string[]): string {
|
|
489
|
-
const activations = getSkillActivations(cwd, runId);
|
|
490
|
-
const lines: string[] = [
|
|
491
|
-
`# Skill Effectiveness Report: ${runId}`,
|
|
492
|
-
"",
|
|
493
|
-
`Generated: ${new Date().toISOString()}`,
|
|
494
|
-
`Total Activations: ${activations.length}`,
|
|
495
|
-
"",
|
|
496
|
-
];
|
|
497
|
-
|
|
498
|
-
if (activations.length === 0) {
|
|
499
|
-
lines.push("*No skill activations recorded yet.*");
|
|
500
|
-
return lines.join("\n");
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
lines.push("## Skill Metrics");
|
|
504
|
-
lines.push("");
|
|
505
|
-
|
|
506
|
-
for (const skillId of skillIds) {
|
|
507
|
-
const metrics = computeSkillMetrics(skillId, activations);
|
|
508
|
-
const gate = evaluatePromotionGate(metrics);
|
|
509
|
-
|
|
510
|
-
lines.push(`### ${skillId}`);
|
|
511
|
-
lines.push(`- **Confidence**: ${metrics.currentConfidence.toFixed(2)} (${metrics.trend})`);
|
|
512
|
-
lines.push(`- **Pass Rate**: ${(metrics.passRate * 100).toFixed(1)}% (${metrics.passedActivations}/${metrics.totalActivations})`);
|
|
513
|
-
lines.push(`- **Avg Confidence**: ${metrics.avgConfidence.toFixed(2)}`);
|
|
514
|
-
lines.push(`- **Promotion Gate**: ${gate.passed ? "PASSED ✅" : "NOT MET"}`);
|
|
515
|
-
|
|
516
|
-
if (Object.keys(metrics.roleBreakdown).length > 0) {
|
|
517
|
-
lines.push(`- **By Role**: ${JSON.stringify(metrics.roleBreakdown)}`);
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
lines.push("");
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
return lines.join("\n");
|
|
524
|
-
}
|