@cluesmith/codev 3.2.4 → 3.3.0
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/dashboard-dist/assets/index-BZRTEMtH.css +32 -0
- package/dashboard-dist/assets/{index-BZ1x7x1X.js → index-JCbkpAcV.js} +33 -33
- package/dashboard-dist/assets/index-JCbkpAcV.js.map +1 -0
- package/dashboard-dist/index.html +2 -2
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +142 -0
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
- package/dist/agent-farm/commands/cleanup.js +16 -0
- package/dist/agent-farm/commands/cleanup.js.map +1 -1
- package/dist/agent-farm/commands/inbox.d.ts +42 -0
- package/dist/agent-farm/commands/inbox.d.ts.map +1 -0
- package/dist/agent-farm/commands/inbox.js +129 -0
- package/dist/agent-farm/commands/inbox.js.map +1 -0
- package/dist/agent-farm/commands/interrupt.d.ts +20 -0
- package/dist/agent-farm/commands/interrupt.d.ts.map +1 -0
- package/dist/agent-farm/commands/interrupt.js +65 -0
- package/dist/agent-farm/commands/interrupt.js.map +1 -0
- package/dist/agent-farm/commands/reset/constants.d.ts +52 -0
- package/dist/agent-farm/commands/reset/constants.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/constants.js +52 -0
- package/dist/agent-farm/commands/reset/constants.js.map +1 -0
- package/dist/agent-farm/commands/reset/context.d.ts +230 -0
- package/dist/agent-farm/commands/reset/context.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/context.js +428 -0
- package/dist/agent-farm/commands/reset/context.js.map +1 -0
- package/dist/agent-farm/commands/reset/index.d.ts +192 -0
- package/dist/agent-farm/commands/reset/index.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/index.js +488 -0
- package/dist/agent-farm/commands/reset/index.js.map +1 -0
- package/dist/agent-farm/commands/reset/receipt.d.ts +97 -0
- package/dist/agent-farm/commands/reset/receipt.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/receipt.js +149 -0
- package/dist/agent-farm/commands/reset/receipt.js.map +1 -0
- package/dist/agent-farm/commands/reset/reorient.d.ts +117 -0
- package/dist/agent-farm/commands/reset/reorient.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset/reorient.js +313 -0
- package/dist/agent-farm/commands/reset/reorient.js.map +1 -0
- package/dist/agent-farm/commands/reset.d.ts +19 -0
- package/dist/agent-farm/commands/reset.d.ts.map +1 -0
- package/dist/agent-farm/commands/reset.js +292 -0
- package/dist/agent-farm/commands/reset.js.map +1 -0
- package/dist/agent-farm/commands/send.d.ts.map +1 -1
- package/dist/agent-farm/commands/send.js +49 -8
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts +105 -6
- package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.js +289 -66
- package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
- package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn.js +13 -1
- package/dist/agent-farm/commands/spawn.js.map +1 -1
- package/dist/agent-farm/commands/status.d.ts.map +1 -1
- package/dist/agent-farm/commands/status.js +80 -8
- package/dist/agent-farm/commands/status.js.map +1 -1
- package/dist/agent-farm/db/index.d.ts +1 -1
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +80 -1
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/mailbox.d.ts +222 -0
- package/dist/agent-farm/db/mailbox.d.ts.map +1 -0
- package/dist/agent-farm/db/mailbox.js +304 -0
- package/dist/agent-farm/db/mailbox.js.map +1 -0
- package/dist/agent-farm/db/schema.d.ts +1 -1
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +35 -0
- package/dist/agent-farm/db/schema.js.map +1 -1
- package/dist/agent-farm/db/types.d.ts +45 -0
- package/dist/agent-farm/db/types.d.ts.map +1 -1
- package/dist/agent-farm/db/types.js.map +1 -1
- package/dist/agent-farm/lib/builder-lookup.d.ts +1 -1
- package/dist/agent-farm/lib/builder-lookup.js +2 -2
- package/dist/agent-farm/lib/builder-lookup.js.map +1 -1
- package/dist/agent-farm/lib/reconnect-backoff.d.ts +54 -0
- package/dist/agent-farm/lib/reconnect-backoff.d.ts.map +1 -0
- package/dist/agent-farm/lib/reconnect-backoff.js +47 -0
- package/dist/agent-farm/lib/reconnect-backoff.js.map +1 -0
- package/dist/agent-farm/lib/tower-client.d.ts +16 -6
- package/dist/agent-farm/lib/tower-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tower-client.js +37 -6
- package/dist/agent-farm/lib/tower-client.js.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.d.ts +69 -1
- package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.js +218 -27
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
- package/dist/agent-farm/servers/cron-delivery.d.ts +72 -0
- package/dist/agent-farm/servers/cron-delivery.d.ts.map +1 -0
- package/dist/agent-farm/servers/cron-delivery.js +80 -0
- package/dist/agent-farm/servers/cron-delivery.js.map +1 -0
- package/dist/agent-farm/servers/delayed-send.d.ts +85 -0
- package/dist/agent-farm/servers/delayed-send.d.ts.map +1 -0
- package/dist/agent-farm/servers/delayed-send.js +165 -0
- package/dist/agent-farm/servers/delayed-send.js.map +1 -0
- package/dist/agent-farm/servers/gate-profiles.d.ts +67 -0
- package/dist/agent-farm/servers/gate-profiles.d.ts.map +1 -0
- package/dist/agent-farm/servers/gate-profiles.js +113 -0
- package/dist/agent-farm/servers/gate-profiles.js.map +1 -0
- package/dist/agent-farm/servers/mailbox-delivery.d.ts +370 -0
- package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -0
- package/dist/agent-farm/servers/mailbox-delivery.js +617 -0
- package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -0
- package/dist/agent-farm/servers/mailbox-wiring.d.ts +125 -0
- package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -0
- package/dist/agent-farm/servers/mailbox-wiring.js +425 -0
- package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -0
- package/dist/agent-farm/servers/message-write.d.ts +53 -1
- package/dist/agent-farm/servers/message-write.d.ts.map +1 -1
- package/dist/agent-farm/servers/message-write.js +63 -0
- package/dist/agent-farm/servers/message-write.js.map +1 -1
- package/dist/agent-farm/servers/overview.d.ts.map +1 -1
- package/dist/agent-farm/servers/overview.js +23 -4
- package/dist/agent-farm/servers/overview.js.map +1 -1
- package/dist/agent-farm/servers/render-gate.d.ts +141 -0
- package/dist/agent-farm/servers/render-gate.d.ts.map +1 -0
- package/dist/agent-farm/servers/render-gate.js +251 -0
- package/dist/agent-farm/servers/render-gate.js.map +1 -0
- package/dist/agent-farm/servers/session-submit.d.ts +90 -0
- package/dist/agent-farm/servers/session-submit.d.ts.map +1 -0
- package/dist/agent-farm/servers/session-submit.js +127 -0
- package/dist/agent-farm/servers/session-submit.js.map +1 -0
- package/dist/agent-farm/servers/tower-cron.d.ts +10 -7
- package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-cron.js +58 -53
- package/dist/agent-farm/servers/tower-cron.js.map +1 -1
- package/dist/agent-farm/servers/tower-instances.d.ts +14 -2
- package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-instances.js +78 -16
- package/dist/agent-farm/servers/tower-instances.js.map +1 -1
- package/dist/agent-farm/servers/tower-messages.d.ts +38 -1
- package/dist/agent-farm/servers/tower-messages.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-messages.js +106 -1
- package/dist/agent-farm/servers/tower-messages.js.map +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts +16 -4
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-routes.js +670 -105
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +163 -31
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.d.ts +17 -2
- package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.js +104 -122
- package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-tunnel.js +63 -4
- package/dist/agent-farm/servers/tower-tunnel.js.map +1 -1
- package/dist/agent-farm/servers/tower-types.d.ts +2 -1
- package/dist/agent-farm/servers/tower-types.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.d.ts +64 -1
- package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.js +168 -1
- package/dist/agent-farm/servers/tower-utils.js.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.js +6 -21
- package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
- package/dist/agent-farm/servers/write-queue.d.ts +35 -0
- package/dist/agent-farm/servers/write-queue.d.ts.map +1 -0
- package/dist/agent-farm/servers/write-queue.js +56 -0
- package/dist/agent-farm/servers/write-queue.js.map +1 -0
- package/dist/agent-farm/types.d.ts +39 -0
- package/dist/agent-farm/types.d.ts.map +1 -1
- package/dist/agent-farm/utils/agent-names.d.ts +2 -2
- package/dist/agent-farm/utils/agent-names.d.ts.map +1 -1
- package/dist/agent-farm/utils/agent-names.js +3 -3
- package/dist/agent-farm/utils/agent-names.js.map +1 -1
- package/dist/agent-farm/utils/architect-name.d.ts +2 -2
- package/dist/agent-farm/utils/architect-name.d.ts.map +1 -1
- package/dist/agent-farm/utils/architect-name.js +3 -3
- package/dist/agent-farm/utils/architect-name.js.map +1 -1
- package/dist/agent-farm/utils/config.d.ts +13 -0
- package/dist/agent-farm/utils/config.d.ts.map +1 -1
- package/dist/agent-farm/utils/config.js +33 -1
- package/dist/agent-farm/utils/config.js.map +1 -1
- package/dist/agent-farm/utils/harness.d.ts +103 -7
- package/dist/agent-farm/utils/harness.d.ts.map +1 -1
- package/dist/agent-farm/utils/harness.js +126 -19
- package/dist/agent-farm/utils/harness.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -32
- package/dist/cli.js.map +1 -1
- package/dist/commands/consult/cli-options.d.ts +34 -0
- package/dist/commands/consult/cli-options.d.ts.map +1 -0
- package/dist/commands/consult/cli-options.js +67 -0
- package/dist/commands/consult/cli-options.js.map +1 -0
- package/dist/commands/consult/index.d.ts +56 -2
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +272 -28
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/consult/metrics.d.ts +42 -0
- package/dist/commands/consult/metrics.d.ts.map +1 -1
- package/dist/commands/consult/metrics.js +129 -9
- package/dist/commands/consult/metrics.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +71 -19
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/porch/checks.d.ts +23 -0
- package/dist/commands/porch/checks.d.ts.map +1 -1
- package/dist/commands/porch/checks.js +60 -0
- package/dist/commands/porch/checks.js.map +1 -1
- package/dist/commands/porch/config.d.ts +20 -0
- package/dist/commands/porch/config.d.ts.map +1 -1
- package/dist/commands/porch/config.js +20 -0
- package/dist/commands/porch/config.js.map +1 -1
- package/dist/commands/porch/index.js +21 -28
- package/dist/commands/porch/index.js.map +1 -1
- package/dist/commands/porch/next.d.ts.map +1 -1
- package/dist/commands/porch/next.js +2 -41
- package/dist/commands/porch/next.js.map +1 -1
- package/dist/lib/config.d.ts +69 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +67 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/consult-lanes.d.ts +149 -0
- package/dist/lib/consult-lanes.d.ts.map +1 -0
- package/dist/lib/consult-lanes.js +360 -0
- package/dist/lib/consult-lanes.js.map +1 -0
- package/dist/lib/github.js +1 -1
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/prompt-behavior-metrics.d.ts +67 -0
- package/dist/lib/prompt-behavior-metrics.d.ts.map +1 -0
- package/dist/lib/prompt-behavior-metrics.js +290 -0
- package/dist/lib/prompt-behavior-metrics.js.map +1 -0
- package/dist/lib/skeleton.d.ts +22 -1
- package/dist/lib/skeleton.d.ts.map +1 -1
- package/dist/lib/skeleton.js +120 -0
- package/dist/lib/skeleton.js.map +1 -1
- package/dist/lib/test-env.d.ts +74 -0
- package/dist/lib/test-env.d.ts.map +1 -0
- package/dist/lib/test-env.js +92 -0
- package/dist/lib/test-env.js.map +1 -0
- package/dist/terminal/pty-manager.d.ts +2 -0
- package/dist/terminal/pty-manager.d.ts.map +1 -1
- package/dist/terminal/pty-manager.js +16 -6
- package/dist/terminal/pty-manager.js.map +1 -1
- package/dist/terminal/pty-session.d.ts +131 -0
- package/dist/terminal/pty-session.d.ts.map +1 -1
- package/dist/terminal/pty-session.js +232 -39
- package/dist/terminal/pty-session.js.map +1 -1
- package/dist/terminal/ring-buffer.d.ts +39 -6
- package/dist/terminal/ring-buffer.d.ts.map +1 -1
- package/dist/terminal/ring-buffer.js +74 -6
- package/dist/terminal/ring-buffer.js.map +1 -1
- package/dist/terminal/session-manager.d.ts +53 -0
- package/dist/terminal/session-manager.d.ts.map +1 -1
- package/dist/terminal/session-manager.js +94 -9
- package/dist/terminal/session-manager.js.map +1 -1
- package/dist/terminal/session-screen.d.ts +91 -0
- package/dist/terminal/session-screen.d.ts.map +1 -0
- package/dist/terminal/session-screen.js +135 -0
- package/dist/terminal/session-screen.js.map +1 -0
- package/dist/terminal/shellper-main.js +2 -1
- package/dist/terminal/shellper-main.js.map +1 -1
- package/dist/terminal/shellper-process.d.ts +1 -1
- package/dist/terminal/shellper-process.d.ts.map +1 -1
- package/dist/terminal/shellper-process.js +17 -8
- package/dist/terminal/shellper-process.js.map +1 -1
- package/dist/terminal/shellper-replay-buffer.d.ts +69 -7
- package/dist/terminal/shellper-replay-buffer.d.ts.map +1 -1
- package/dist/terminal/shellper-replay-buffer.js +167 -31
- package/dist/terminal/shellper-replay-buffer.js.map +1 -1
- package/package.json +8 -6
- package/skeleton/.claude/skills/afx/SKILL.md +14 -1
- package/skeleton/.claude/skills/arch-init/SKILL.md +22 -9
- package/skeleton/.claude/skills/arch-save/SKILL.md +183 -0
- package/skeleton/.claude/skills/codev/SKILL.md +31 -0
- package/skeleton/.claude/skills/runnable-worktrees/SKILL.md +119 -0
- package/skeleton/.codex/skills/afx/SKILL.md +14 -1
- package/skeleton/.codex/skills/arch-init/SKILL.md +22 -9
- package/skeleton/.codex/skills/arch-save/SKILL.md +183 -0
- package/skeleton/.codex/skills/codev/SKILL.md +31 -0
- package/skeleton/.codex/skills/runnable-worktrees/SKILL.md +119 -0
- package/skeleton/protocols/air/builder-prompt.md +28 -47
- package/skeleton/protocols/air/consult-types/impl-review.md +17 -34
- package/skeleton/protocols/air/consult-types/pr-review.md +14 -37
- package/skeleton/protocols/air/prompts/implement.md +20 -73
- package/skeleton/protocols/air/prompts/pr.md +22 -54
- package/skeleton/protocols/air/protocol.md +40 -71
- package/skeleton/protocols/aspir/builder-prompt.md +29 -66
- package/skeleton/protocols/aspir/consult-types/impl-review.md +17 -44
- package/skeleton/protocols/aspir/consult-types/phase-review.md +17 -44
- package/skeleton/protocols/aspir/consult-types/plan-review.md +14 -38
- package/skeleton/protocols/aspir/consult-types/pr-review.md +13 -39
- package/skeleton/protocols/aspir/consult-types/spec-review.md +13 -33
- package/skeleton/protocols/aspir/prompts/implement.md +27 -196
- package/skeleton/protocols/aspir/prompts/plan.md +21 -85
- package/skeleton/protocols/aspir/prompts/review.md +29 -228
- package/skeleton/protocols/aspir/prompts/specify.md +25 -111
- package/skeleton/protocols/aspir/protocol.json +10 -0
- package/skeleton/protocols/aspir/protocol.md +36 -82
- package/skeleton/protocols/bugfix/builder-prompt.md +23 -45
- package/skeleton/protocols/bugfix/consult-types/impl-review.md +21 -45
- package/skeleton/protocols/bugfix/consult-types/pr-review.md +18 -52
- package/skeleton/protocols/bugfix/prompts/fix.md +16 -61
- package/skeleton/protocols/bugfix/prompts/investigate.md +18 -62
- package/skeleton/protocols/bugfix/prompts/pr.md +22 -57
- package/skeleton/protocols/bugfix/protocol.md +44 -50
- package/skeleton/protocols/experiment/builder-prompt.md +25 -58
- package/skeleton/protocols/experiment/protocol.md +22 -188
- package/skeleton/protocols/experiment/templates/notes.md +11 -71
- package/skeleton/protocols/maintain/builder-prompt.md +24 -45
- package/skeleton/protocols/maintain/consult-types/impl-review.md +17 -44
- package/skeleton/protocols/maintain/consult-types/pr-review.md +13 -39
- package/skeleton/protocols/maintain/prompts/maintain.md +1 -1
- package/skeleton/protocols/maintain/protocol.md +32 -266
- package/skeleton/protocols/maintain/templates/maintenance-run.md +11 -0
- package/skeleton/protocols/pir/builder-prompt.md +30 -64
- package/skeleton/protocols/pir/consult-types/impl-review.md +17 -50
- package/skeleton/protocols/pir/consult-types/pr-review.md +11 -40
- package/skeleton/protocols/pir/prompts/implement.md +1 -2
- package/skeleton/protocols/pir/prompts/plan.md +0 -3
- package/skeleton/protocols/pir/prompts/review.md +1 -1
- package/skeleton/protocols/pir/protocol.md +54 -177
- package/skeleton/protocols/research/builder-prompt.md +27 -58
- package/skeleton/protocols/research/protocol.md +28 -153
- package/skeleton/protocols/spike/builder-prompt.md +30 -48
- package/skeleton/protocols/spike/protocol.md +24 -107
- package/skeleton/protocols/spike/templates/findings.md +9 -39
- package/skeleton/protocols/spir/builder-prompt.md +33 -62
- package/skeleton/protocols/spir/consult-types/impl-review.md +17 -44
- package/skeleton/protocols/spir/consult-types/phase-review.md +17 -44
- package/skeleton/protocols/spir/consult-types/plan-review.md +14 -38
- package/skeleton/protocols/spir/consult-types/pr-review.md +13 -39
- package/skeleton/protocols/spir/consult-types/spec-review.md +13 -33
- package/skeleton/protocols/spir/prompts/implement.md +26 -195
- package/skeleton/protocols/spir/prompts/plan.md +20 -84
- package/skeleton/protocols/spir/prompts/review.md +28 -227
- package/skeleton/protocols/spir/prompts/specify.md +24 -110
- package/skeleton/protocols/spir/protocol.json +10 -0
- package/skeleton/protocols/spir/protocol.md +84 -633
- package/skeleton/protocols/spir/templates/plan.md +28 -147
- package/skeleton/protocols/spir/templates/review.md +21 -80
- package/skeleton/protocols/spir/templates/spec.md +24 -118
- package/skeleton/resources/commands/agent-farm.md +259 -0
- package/skeleton/resources/commands/consult.md +236 -8
- package/skeleton/resources/commands/overview.md +1 -0
- package/skeleton/roles/architect.md +67 -317
- package/skeleton/roles/builder.md +77 -191
- package/skeleton/templates/AGENTS.md +2 -0
- package/skeleton/templates/CLAUDE.md +2 -0
- package/templates/tower.html +39 -2
- package/dashboard-dist/assets/index-BZ1x7x1X.js.map +0 -1
- package/dashboard-dist/assets/index-DB1KBSNE.css +0 -32
- package/dist/agent-farm/servers/send-buffer.d.ts +0 -59
- package/dist/agent-farm/servers/send-buffer.d.ts.map +0 -1
- package/dist/agent-farm/servers/send-buffer.js +0 -116
- package/dist/agent-farm/servers/send-buffer.js.map +0 -1
- package/skeleton/porch/prompts/defend.md +0 -108
- package/skeleton/porch/prompts/diagnose.md +0 -70
- package/skeleton/porch/prompts/evaluate.md +0 -132
- package/skeleton/porch/prompts/fix.md +0 -59
- package/skeleton/porch/prompts/implement.md +0 -88
- package/skeleton/porch/prompts/plan.md +0 -74
- package/skeleton/porch/prompts/pr.md +0 -84
- package/skeleton/porch/prompts/review.md +0 -249
- package/skeleton/porch/prompts/specify.md +0 -53
- package/skeleton/porch/prompts/test.md +0 -63
- package/skeleton/protocols/aspir/templates/plan.md +0 -184
- package/skeleton/protocols/aspir/templates/review.md +0 -120
- package/skeleton/protocols/aspir/templates/spec.md +0 -154
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export interface ScarHit {
|
|
2
|
+
rule: string;
|
|
3
|
+
file: string;
|
|
4
|
+
line: number;
|
|
5
|
+
excerpt: string;
|
|
6
|
+
}
|
|
7
|
+
export interface BehaviorMetrics {
|
|
8
|
+
/** B1 — share of all CMAP verdicts that are REQUEST_CHANGES. */
|
|
9
|
+
b1_requestChangesRate: number;
|
|
10
|
+
b1_verdictCounts: Record<string, number>;
|
|
11
|
+
b1_totalVerdicts: number;
|
|
12
|
+
/** B2 — review rounds per plan phase: max(iteration) per plan_phase. */
|
|
13
|
+
b2_roundsPerPhaseMean: number;
|
|
14
|
+
b2_roundsPerPhaseMedian: number;
|
|
15
|
+
b2_roundsPerPhaseMax: number;
|
|
16
|
+
b2_phaseCount: number;
|
|
17
|
+
/** B3 — candidate scar-rule violations (REQUIRES HUMAN ADJUDICATION). */
|
|
18
|
+
b3_candidateHits: ScarHit[];
|
|
19
|
+
b3_filesScanned: number;
|
|
20
|
+
/** B4 — review rounds per project. */
|
|
21
|
+
b4_roundsPerProjectMean: number;
|
|
22
|
+
b4_roundsPerProjectMedian: number;
|
|
23
|
+
b4_projectCount: number;
|
|
24
|
+
/** Sample provenance. */
|
|
25
|
+
sampleProjects: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface MeasureOptions {
|
|
28
|
+
/**
|
|
29
|
+
* Project directory names to exclude from B1/B2/B4.
|
|
30
|
+
*
|
|
31
|
+
* The baseline is defined as the PRE-PROJECT state (spec 1252, M12): the
|
|
32
|
+
* project doing the measuring must not contaminate its own baseline. Its
|
|
33
|
+
* review verdicts accumulate in its status.yaml *while it runs*, so an
|
|
34
|
+
* unexcluded rerun mid-project would drift from the committed artifact —
|
|
35
|
+
* which is exactly how this option came to exist (the Phase-1 reproduction
|
|
36
|
+
* test failed the moment this project's own iter-1 review landed).
|
|
37
|
+
*/
|
|
38
|
+
excludeProjects?: string[];
|
|
39
|
+
/**
|
|
40
|
+
* Project directory names to measure EXCLUSIVELY (an allowlist), applied
|
|
41
|
+
* before `excludeProjects`. Unset means "every project on disk".
|
|
42
|
+
*
|
|
43
|
+
* A frozen baseline needs a frozen sample: the committed baseline artifact
|
|
44
|
+
* was computed over the projects that existed at baseline time, so a
|
|
45
|
+
* reproduction against live history must pin that set — otherwise every
|
|
46
|
+
* subsequent project that runs consultations perturbs the numbers and the
|
|
47
|
+
* reproduction fails for reasons that have nothing to do with the metrics
|
|
48
|
+
* (discovered when project 1286's first review iteration moved B1 160 → 163).
|
|
49
|
+
*/
|
|
50
|
+
includeProjects?: string[];
|
|
51
|
+
/**
|
|
52
|
+
* Basename prefixes excluded from B3's prose scan, for the same reason: this
|
|
53
|
+
* project's own thread/review discuss scar rules at length and grow with
|
|
54
|
+
* every phase, so scanning them makes B3 non-reproducible AND self-inflating.
|
|
55
|
+
*/
|
|
56
|
+
excludeFilePrefixes?: string[];
|
|
57
|
+
}
|
|
58
|
+
/** This project's own artifacts — excluded from its own baseline by default. */
|
|
59
|
+
export declare const SELF_PROJECT_DIR = "1252-prompt-architecture-single-own";
|
|
60
|
+
export declare const SELF_FILE_PREFIXES: string[];
|
|
61
|
+
/** Collect all behavioural metrics for a repo root. Deterministic over B1–B4. */
|
|
62
|
+
export declare function measureBehavior(root: string, opts?: MeasureOptions): BehaviorMetrics;
|
|
63
|
+
/** Render metrics as the committed markdown baseline artifact. */
|
|
64
|
+
export declare function render(m: BehaviorMetrics): string;
|
|
65
|
+
/** CLI entry, invoked by `packages/codev/scripts/measure-prompt-behavior.ts`. */
|
|
66
|
+
export declare function runCli(argv: string[], cwd: string): string;
|
|
67
|
+
//# sourceMappingURL=prompt-behavior-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-behavior-metrics.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-behavior-metrics.ts"],"names":[],"mappings":"AAoEA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,uBAAuB,EAAE,MAAM,CAAC;IAChC,yBAAyB,EAAE,MAAM,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,yBAAyB;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAiKD,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,wCAAwC,CAAC;AACtE,eAAO,MAAM,kBAAkB,UAA0B,CAAC;AAE1D,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,eAAe,CAkBxF;AAMD,kEAAkE;AAClE,wBAAgB,MAAM,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CA2EjD;AAED,iFAAiF;AACjF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAK1D"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prompt-behavior-metrics.ts — behavioural-impact measurement of prompt changes.
|
|
3
|
+
* Spec 1252, criterion M12 / Appendix D / test T14.
|
|
4
|
+
*
|
|
5
|
+
* Lives in `src/lib/` beside `protocol-drift-audit.ts` and
|
|
6
|
+
* `framework-ref-audit.ts` — same module shape (a measurement library, unit
|
|
7
|
+
* tested), and it needs this package's `js-yaml` dependency, which a root-level
|
|
8
|
+
* `scripts/` file cannot resolve in this pnpm workspace. The runnable entry
|
|
9
|
+
* point is `packages/codev/scripts/measure-prompt-behavior.ts`.
|
|
10
|
+
*
|
|
11
|
+
* ## Why this exists
|
|
12
|
+
*
|
|
13
|
+
* M6 counts words. A word reduction that degrades agent compliance is a loss,
|
|
14
|
+
* and word counts cannot see that. This script measures BEHAVIOUR: how often
|
|
15
|
+
* reviewers demand changes, how many rounds phases take, and whether scar rules
|
|
16
|
+
* are being violated.
|
|
17
|
+
*
|
|
18
|
+
* Run at Phase 1 (before any prompt content changes) to produce the baseline,
|
|
19
|
+
* and again in the post-merge verify phase to compare.
|
|
20
|
+
*
|
|
21
|
+
* ## What is deliberately NOT measured, and why
|
|
22
|
+
*
|
|
23
|
+
* Two metrics were requested and cannot be delivered from committed history.
|
|
24
|
+
* They are omitted rather than faked, because a plausible-looking zero is worse
|
|
25
|
+
* than an absent metric:
|
|
26
|
+
*
|
|
27
|
+
* - GATE REJECTION COUNTS. Across all projects, a gate's `status` only ever
|
|
28
|
+
* takes `approved | complete | in_progress | pending` — there is no
|
|
29
|
+
* `rejected` state — and `requested_at` is a scalar that a re-request
|
|
30
|
+
* OVERWRITES rather than appends to. A rejected-then-approved gate is
|
|
31
|
+
* indistinguishable from a clean first-time approval. (Making this minable
|
|
32
|
+
* would need porch to append gate events; out of scope here.)
|
|
33
|
+
*
|
|
34
|
+
* - HISTORICAL CONSULT TOKENS/COST. Raw consult logs (`codev/projects/*/*.txt`)
|
|
35
|
+
* are gitignored, and `consult stats` is a rolling 30-day machine-local DB.
|
|
36
|
+
* There is no historical series to baseline against, so B5 is captured as a
|
|
37
|
+
* FORWARD snapshot only — advisory, non-deterministic, and excluded from
|
|
38
|
+
* T14's determinism assertion and from every rollback trigger.
|
|
39
|
+
*
|
|
40
|
+
* Usage (from packages/codev):
|
|
41
|
+
* npx tsx scripts/measure-prompt-behavior.ts [repo-root]
|
|
42
|
+
* npx tsx scripts/measure-prompt-behavior.ts --json
|
|
43
|
+
*/
|
|
44
|
+
import * as fs from 'node:fs';
|
|
45
|
+
import * as path from 'node:path';
|
|
46
|
+
import * as yaml from 'js-yaml';
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// The eight ratified scar rules (decision D3) and their violation markers.
|
|
49
|
+
//
|
|
50
|
+
// These patterns look for the DANGEROUS COMMAND / ACT, not for the rule text.
|
|
51
|
+
// That is still fuzzy: documentation *about* a rule reads much like a violation
|
|
52
|
+
// of it. Hence excerpts, not just counts — a human adjudicates before the hard
|
|
53
|
+
// rollback trigger fires.
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
const SCAR_PATTERNS = [
|
|
56
|
+
{ rule: 'git-add-all', re: /\bgit\s+add\s+(-A\b|--all\b|\.(?:\s|$))/ },
|
|
57
|
+
{ rule: 'destroy-worktree', re: /\bgit\s+worktree\s+remove\b|\bgit\s+branch\s+-D\b/ },
|
|
58
|
+
{ rule: 'destructive-git', re: /\bgit\s+(reset\s+--hard|checkout\s+--\s+\.|clean\s+-[a-z]*f|stash\b)/ },
|
|
59
|
+
{ rule: 'auto-approve-gate', re: /auto-?approv\w*/i },
|
|
60
|
+
{ rule: 'hand-edit-status', re: /(hand|manual\w*)[- ]edit\w*\s+status\.yaml|edited?\s+status\.yaml\s+(directly|by hand)/i },
|
|
61
|
+
{ rule: 'afx-from-worktree', re: /\bafx\s+spawn\b[^\n]*\bfrom\s+(inside\s+)?(a\s+)?worktree/i },
|
|
62
|
+
{ rule: 'kill-shellper', re: /kill\w*\s+[^\n]{0,40}shellper/i },
|
|
63
|
+
{ rule: 'restart-tower', re: /\b(restart|stop)\w*\s+tower\b/i },
|
|
64
|
+
];
|
|
65
|
+
/** Phrases indicating the surrounding text DESCRIBES a rule rather than reports a breach. */
|
|
66
|
+
const DOCUMENTATION_MARKERS = /\b(never|do not|don'?t|must not|forbidden|prohibited|avoid|rule|policy|reminder|guard|prevent)\b/i;
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// Helpers
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
function mean(xs) {
|
|
71
|
+
return xs.length ? xs.reduce((a, b) => a + b, 0) / xs.length : 0;
|
|
72
|
+
}
|
|
73
|
+
function median(xs) {
|
|
74
|
+
if (!xs.length)
|
|
75
|
+
return 0;
|
|
76
|
+
const s = [...xs].sort((a, b) => a - b);
|
|
77
|
+
const m = Math.floor(s.length / 2);
|
|
78
|
+
return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2;
|
|
79
|
+
}
|
|
80
|
+
function round2(n) {
|
|
81
|
+
return Math.round(n * 100) / 100;
|
|
82
|
+
}
|
|
83
|
+
function walk(dir, pred) {
|
|
84
|
+
if (!fs.existsSync(dir))
|
|
85
|
+
return [];
|
|
86
|
+
const out = [];
|
|
87
|
+
for (const e of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
88
|
+
const p = path.join(dir, e.name);
|
|
89
|
+
if (e.isDirectory())
|
|
90
|
+
out.push(...walk(p, pred));
|
|
91
|
+
else if (pred(p))
|
|
92
|
+
out.push(p);
|
|
93
|
+
}
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// Metric collection
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
/**
|
|
100
|
+
* B1/B2/B4 — CMAP verdicts and review rounds.
|
|
101
|
+
*
|
|
102
|
+
* Sample: projects whose `status.yaml` has a non-empty `history`. In practice
|
|
103
|
+
* this is SPIR (and one legacy `spider`) — porch only persists per-plan-phase
|
|
104
|
+
* review history for protocols that loop that way, so pir/bugfix/air contribute
|
|
105
|
+
* nothing. Sorted for deterministic output.
|
|
106
|
+
*/
|
|
107
|
+
function collectReviewMetrics(root, excludeProjects, includeProjects) {
|
|
108
|
+
const projDir = path.join(root, 'codev', 'projects');
|
|
109
|
+
const files = fs.existsSync(projDir)
|
|
110
|
+
? fs
|
|
111
|
+
.readdirSync(projDir)
|
|
112
|
+
.filter((d) => (includeProjects ? includeProjects.includes(d) : true))
|
|
113
|
+
.filter((d) => !excludeProjects.includes(d))
|
|
114
|
+
.map((d) => path.join(projDir, d, 'status.yaml'))
|
|
115
|
+
.filter((f) => fs.existsSync(f))
|
|
116
|
+
.sort()
|
|
117
|
+
: [];
|
|
118
|
+
const verdictCounts = {};
|
|
119
|
+
const phaseRounds = [];
|
|
120
|
+
const projectRounds = [];
|
|
121
|
+
const sampleProjects = [];
|
|
122
|
+
for (const f of files) {
|
|
123
|
+
let doc;
|
|
124
|
+
try {
|
|
125
|
+
doc = yaml.load(fs.readFileSync(f, 'utf-8'));
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
continue; // a malformed status file must not abort the measurement
|
|
129
|
+
}
|
|
130
|
+
const history = doc?.history ?? [];
|
|
131
|
+
if (!history.length)
|
|
132
|
+
continue;
|
|
133
|
+
sampleProjects.push(path.basename(path.dirname(f)));
|
|
134
|
+
const byPhase = new Map();
|
|
135
|
+
for (const item of history) {
|
|
136
|
+
for (const r of item.reviews ?? []) {
|
|
137
|
+
const v = r.verdict ?? 'UNKNOWN';
|
|
138
|
+
verdictCounts[v] = (verdictCounts[v] ?? 0) + 1;
|
|
139
|
+
}
|
|
140
|
+
const ph = item.plan_phase ?? '__none__';
|
|
141
|
+
byPhase.set(ph, Math.max(byPhase.get(ph) ?? 0, item.iteration ?? 0));
|
|
142
|
+
}
|
|
143
|
+
const rounds = [...byPhase.values()];
|
|
144
|
+
phaseRounds.push(...rounds);
|
|
145
|
+
projectRounds.push(rounds.reduce((a, b) => a + b, 0));
|
|
146
|
+
}
|
|
147
|
+
const total = Object.values(verdictCounts).reduce((a, b) => a + b, 0);
|
|
148
|
+
return {
|
|
149
|
+
verdictCounts,
|
|
150
|
+
total,
|
|
151
|
+
rcRate: total ? (verdictCounts['REQUEST_CHANGES'] ?? 0) / total : 0,
|
|
152
|
+
phaseRounds,
|
|
153
|
+
projectRounds,
|
|
154
|
+
sampleProjects: sampleProjects.sort(),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* B3 — candidate scar-rule violations mined from committed prose.
|
|
159
|
+
*
|
|
160
|
+
* Scans `codev/reviews/*.md` and `codev/state/*_thread.md`. Emits EXCERPTS, not
|
|
161
|
+
* just counts: the mining cannot distinguish "we violated this" from "never do
|
|
162
|
+
* this", so every hit is a candidate requiring human adjudication. Lines that
|
|
163
|
+
* look like rule documentation are filtered out to cut the obvious noise, but
|
|
164
|
+
* the filter is conservative by design — it is better to hand a human a false
|
|
165
|
+
* positive than to silently drop a real breach.
|
|
166
|
+
*/
|
|
167
|
+
function collectScarHits(root, excludeBasenamePrefixes) {
|
|
168
|
+
const excluded = (p) => excludeBasenamePrefixes.some((pre) => path.basename(p).startsWith(pre));
|
|
169
|
+
const targets = [
|
|
170
|
+
...walk(path.join(root, 'codev', 'reviews'), (p) => p.endsWith('.md')),
|
|
171
|
+
...walk(path.join(root, 'codev', 'state'), (p) => p.endsWith('_thread.md')),
|
|
172
|
+
]
|
|
173
|
+
.filter((p) => !excluded(p))
|
|
174
|
+
.sort();
|
|
175
|
+
const hits = [];
|
|
176
|
+
for (const file of targets) {
|
|
177
|
+
const lines = fs.readFileSync(file, 'utf-8').split('\n');
|
|
178
|
+
lines.forEach((line, i) => {
|
|
179
|
+
if (DOCUMENTATION_MARKERS.test(line))
|
|
180
|
+
return; // prescriptive, not a breach report
|
|
181
|
+
for (const { rule, re } of SCAR_PATTERNS) {
|
|
182
|
+
if (re.test(line)) {
|
|
183
|
+
hits.push({
|
|
184
|
+
rule,
|
|
185
|
+
file: path.relative(root, file),
|
|
186
|
+
line: i + 1,
|
|
187
|
+
excerpt: line.trim().slice(0, 200),
|
|
188
|
+
});
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
return { hits, filesScanned: targets.length };
|
|
195
|
+
}
|
|
196
|
+
/** This project's own artifacts — excluded from its own baseline by default. */
|
|
197
|
+
export const SELF_PROJECT_DIR = '1252-prompt-architecture-single-own';
|
|
198
|
+
export const SELF_FILE_PREFIXES = ['spir-1252_', '1252-'];
|
|
199
|
+
/** Collect all behavioural metrics for a repo root. Deterministic over B1–B4. */
|
|
200
|
+
export function measureBehavior(root, opts = {}) {
|
|
201
|
+
const rv = collectReviewMetrics(root, opts.excludeProjects ?? [SELF_PROJECT_DIR], opts.includeProjects);
|
|
202
|
+
const scar = collectScarHits(root, opts.excludeFilePrefixes ?? SELF_FILE_PREFIXES);
|
|
203
|
+
return {
|
|
204
|
+
b1_requestChangesRate: round2(rv.rcRate * 100),
|
|
205
|
+
b1_verdictCounts: rv.verdictCounts,
|
|
206
|
+
b1_totalVerdicts: rv.total,
|
|
207
|
+
b2_roundsPerPhaseMean: round2(mean(rv.phaseRounds)),
|
|
208
|
+
b2_roundsPerPhaseMedian: median(rv.phaseRounds),
|
|
209
|
+
b2_roundsPerPhaseMax: rv.phaseRounds.length ? Math.max(...rv.phaseRounds) : 0,
|
|
210
|
+
b2_phaseCount: rv.phaseRounds.length,
|
|
211
|
+
b3_candidateHits: scar.hits,
|
|
212
|
+
b3_filesScanned: scar.filesScanned,
|
|
213
|
+
b4_roundsPerProjectMean: round2(mean(rv.projectRounds)),
|
|
214
|
+
b4_roundsPerProjectMedian: median(rv.projectRounds),
|
|
215
|
+
b4_projectCount: rv.projectRounds.length,
|
|
216
|
+
sampleProjects: rv.sampleProjects,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
// Rendering
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
/** Render metrics as the committed markdown baseline artifact. */
|
|
223
|
+
export function render(m) {
|
|
224
|
+
const byRule = new Map();
|
|
225
|
+
for (const h of m.b3_candidateHits)
|
|
226
|
+
byRule.set(h.rule, (byRule.get(h.rule) ?? 0) + 1);
|
|
227
|
+
const lines = [
|
|
228
|
+
'# Behavioural metrics (Spec 1252, M12 / Appendix D)',
|
|
229
|
+
'',
|
|
230
|
+
'## B1 — CMAP verdict distribution',
|
|
231
|
+
'',
|
|
232
|
+
`Total verdicts: **${m.b1_totalVerdicts}** across ${m.b4_projectCount} projects with review history.`,
|
|
233
|
+
'',
|
|
234
|
+
'| Verdict | Count | Share |',
|
|
235
|
+
'|---|---:|---:|',
|
|
236
|
+
...Object.entries(m.b1_verdictCounts)
|
|
237
|
+
.sort((a, b) => b[1] - a[1])
|
|
238
|
+
.map(([v, c]) => `| ${v} | ${c} | ${round2((c / Math.max(m.b1_totalVerdicts, 1)) * 100)}% |`),
|
|
239
|
+
'',
|
|
240
|
+
`**B1 REQUEST_CHANGES rate: ${m.b1_requestChangesRate}%** — the load-bearing metric.`,
|
|
241
|
+
'',
|
|
242
|
+
'## B2 — review rounds per plan phase',
|
|
243
|
+
'',
|
|
244
|
+
`mean **${m.b2_roundsPerPhaseMean}**, median ${m.b2_roundsPerPhaseMedian}, max ${m.b2_roundsPerPhaseMax} (n=${m.b2_phaseCount} phases)`,
|
|
245
|
+
'',
|
|
246
|
+
'> Advisory only. The observed range is too narrow to detect a subtle',
|
|
247
|
+
'> regression. Note also that phases advance on builder *rebuttal*, not on',
|
|
248
|
+
'> unanimous approval — 0 terminal phases in this corpus end with 3x APPROVE —',
|
|
249
|
+
'> so a "rounds to unanimity" metric would never resolve.',
|
|
250
|
+
'',
|
|
251
|
+
'## B4 — review rounds per project',
|
|
252
|
+
'',
|
|
253
|
+
`mean **${m.b4_roundsPerProjectMean}**, median ${m.b4_roundsPerProjectMedian} (n=${m.b4_projectCount} projects). Advisory.`,
|
|
254
|
+
'',
|
|
255
|
+
'## B3 — candidate scar-rule violations',
|
|
256
|
+
'',
|
|
257
|
+
`Scanned **${m.b3_filesScanned}** files (codev/reviews + codev/state threads).`,
|
|
258
|
+
`Candidate hits: **${m.b3_candidateHits.length}**`,
|
|
259
|
+
'',
|
|
260
|
+
'> **These are CANDIDATES, not findings.** Keyword mining cannot distinguish',
|
|
261
|
+
'> "we did this" from "never do this". Every hit requires human adjudication',
|
|
262
|
+
'> before the hard rollback trigger fires. B3 is the metric that matters most —',
|
|
263
|
+
'> it is the only one that would catch a compressed scar rule losing its force.',
|
|
264
|
+
'',
|
|
265
|
+
];
|
|
266
|
+
if (byRule.size) {
|
|
267
|
+
lines.push('| Rule | Candidate hits |', '|---|---:|');
|
|
268
|
+
for (const [r, c] of [...byRule.entries()].sort((a, b) => b[1] - a[1])) {
|
|
269
|
+
lines.push(`| ${r} | ${c} |`);
|
|
270
|
+
}
|
|
271
|
+
lines.push('', '### Excerpts for adjudication', '');
|
|
272
|
+
for (const h of m.b3_candidateHits.slice(0, 50)) {
|
|
273
|
+
lines.push(`- \`${h.file}:${h.line}\` **[${h.rule}]** — ${h.excerpt}`);
|
|
274
|
+
}
|
|
275
|
+
if (m.b3_candidateHits.length > 50) {
|
|
276
|
+
lines.push(`- …and ${m.b3_candidateHits.length - 50} more (see --json for the full list)`);
|
|
277
|
+
}
|
|
278
|
+
lines.push('');
|
|
279
|
+
}
|
|
280
|
+
lines.push('## B5 — consult cost/duration', '', '**Not captured here.** `consult stats` is a rolling 30-day machine-local DB,', 'so it is not reproducible from a commit. Capture it separately as advisory', 'context; it is excluded from T14 determinism and drives no rollback trigger.', '', '## Sample provenance', '', ...m.sampleProjects.map((p) => `- ${p}`), '');
|
|
281
|
+
return lines.join('\n');
|
|
282
|
+
}
|
|
283
|
+
/** CLI entry, invoked by `packages/codev/scripts/measure-prompt-behavior.ts`. */
|
|
284
|
+
export function runCli(argv, cwd) {
|
|
285
|
+
const json = argv.includes('--json');
|
|
286
|
+
const root = argv.find((a) => !a.startsWith('--')) ?? cwd;
|
|
287
|
+
const m = measureBehavior(path.resolve(root));
|
|
288
|
+
return json ? JSON.stringify(m, null, 2) : render(m);
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=prompt-behavior-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-behavior-metrics.js","sourceRoot":"","sources":["../../src/lib/prompt-behavior-metrics.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/skeleton.d.ts
CHANGED
|
@@ -57,7 +57,28 @@ export declare function readCodevFile(relativePath: string, workspaceRoot?: stri
|
|
|
57
57
|
*/
|
|
58
58
|
export declare function hasLocalOverride(relativePath: string, workspaceRoot?: string): boolean;
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
60
|
+
* Every protocol name visible at ANY tier, plus any aliases those protocols declare.
|
|
61
|
+
*
|
|
62
|
+
* Union, not precedence: a name present at any tier is a name porch can run, so configuring it is
|
|
63
|
+
* legitimate. Aliases are included because porch resolves by them (`spir`/`spider`,
|
|
64
|
+
* `maintain`/`maint`, `pir`/`plan-implement-review`), so rejecting an alias would reject config the
|
|
65
|
+
* CLI itself accepts.
|
|
66
|
+
*/
|
|
67
|
+
export declare function listProtocolNames(workspaceRoot?: string): Set<string>;
|
|
68
|
+
/**
|
|
69
|
+
* Map a protocol name or alias to its canonical (directory) name.
|
|
70
|
+
*
|
|
71
|
+
* Returns the input unchanged when it is already canonical or cannot be resolved — callers use this
|
|
72
|
+
* for identity comparison, so an unresolvable name simply compares equal only to itself.
|
|
73
|
+
*/
|
|
74
|
+
export declare function canonicalProtocolName(workspaceRoot: string | undefined, nameOrAlias: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* Every review type (`phases[].verify.type`) declared by the protocols available here.
|
|
77
|
+
*
|
|
78
|
+
* Unlike listProtocolNames, this reads the RESOLVED protocol.json per name (tier precedence via
|
|
79
|
+
* resolveCodevFile) rather than unioning across tiers: only the file that will actually execute
|
|
80
|
+
* defines which review types can occur, so a shadowed skeleton copy's types must not leak in.
|
|
61
81
|
*/
|
|
82
|
+
export declare function listReviewTypes(workspaceRoot?: string): Set<string>;
|
|
62
83
|
export declare function listSkeletonFiles(subdir?: string): string[];
|
|
63
84
|
//# sourceMappingURL=skeleton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgC5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,KAAK,SAAI,GACR,MAAM,CAOR;AAaD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAG7D;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAEpD;AA0CD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAItF;AAED
|
|
1
|
+
{"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgC5F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,KAAK,SAAI,GACR,MAAM,CAOR;AAaD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAG7D;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAEpD;AA0CD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAItF;AAgCD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAoBrE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAsBpG;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAcnE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAwB3D"}
|
package/dist/lib/skeleton.js
CHANGED
|
@@ -181,6 +181,126 @@ export function hasLocalOverride(relativePath, workspaceRoot) {
|
|
|
181
181
|
/**
|
|
182
182
|
* List all files in the skeleton directory matching a pattern
|
|
183
183
|
*/
|
|
184
|
+
/**
|
|
185
|
+
* All directories that may contain protocols, in resolution order.
|
|
186
|
+
*
|
|
187
|
+
* NOTE: this includes the framework cache. `porch/protocol.ts`'s alias scan historically checked
|
|
188
|
+
* only three tiers (omitting the cache) — that is a pre-existing inconsistency with
|
|
189
|
+
* resolveCodevFile's four tiers, and is deliberately NOT reproduced here.
|
|
190
|
+
*/
|
|
191
|
+
function protocolDirs(workspaceRoot) {
|
|
192
|
+
const root = workspaceRoot || findWorkspaceRoot();
|
|
193
|
+
const dirs = [
|
|
194
|
+
path.join(root, '.codev', 'protocols'),
|
|
195
|
+
path.join(root, 'codev', 'protocols'),
|
|
196
|
+
];
|
|
197
|
+
const cacheDir = _getFrameworkCacheDir(root);
|
|
198
|
+
if (cacheDir)
|
|
199
|
+
dirs.push(path.join(cacheDir, 'protocols'));
|
|
200
|
+
dirs.push(path.join(getSkeletonDir(), 'protocols'));
|
|
201
|
+
return dirs;
|
|
202
|
+
}
|
|
203
|
+
function readProtocolJson(filePath) {
|
|
204
|
+
try {
|
|
205
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return null; // unreadable or invalid JSON — not this function's error to raise
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Every protocol name visible at ANY tier, plus any aliases those protocols declare.
|
|
213
|
+
*
|
|
214
|
+
* Union, not precedence: a name present at any tier is a name porch can run, so configuring it is
|
|
215
|
+
* legitimate. Aliases are included because porch resolves by them (`spir`/`spider`,
|
|
216
|
+
* `maintain`/`maint`, `pir`/`plan-implement-review`), so rejecting an alias would reject config the
|
|
217
|
+
* CLI itself accepts.
|
|
218
|
+
*/
|
|
219
|
+
export function listProtocolNames(workspaceRoot) {
|
|
220
|
+
const names = new Set();
|
|
221
|
+
for (const dir of protocolDirs(workspaceRoot)) {
|
|
222
|
+
if (!fs.existsSync(dir))
|
|
223
|
+
continue;
|
|
224
|
+
let entries;
|
|
225
|
+
try {
|
|
226
|
+
entries = fs.readdirSync(dir, { withFileTypes: true }).filter(d => d.isDirectory());
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
for (const entry of entries) {
|
|
232
|
+
const jsonPath = path.join(dir, entry.name, 'protocol.json');
|
|
233
|
+
if (!fs.existsSync(jsonPath))
|
|
234
|
+
continue;
|
|
235
|
+
names.add(entry.name);
|
|
236
|
+
const parsed = readProtocolJson(jsonPath);
|
|
237
|
+
const alias = parsed?.alias;
|
|
238
|
+
if (typeof alias === 'string' && alias.length > 0)
|
|
239
|
+
names.add(alias);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return names;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Map a protocol name or alias to its canonical (directory) name.
|
|
246
|
+
*
|
|
247
|
+
* Returns the input unchanged when it is already canonical or cannot be resolved — callers use this
|
|
248
|
+
* for identity comparison, so an unresolvable name simply compares equal only to itself.
|
|
249
|
+
*/
|
|
250
|
+
export function canonicalProtocolName(workspaceRoot, nameOrAlias) {
|
|
251
|
+
for (const dir of protocolDirs(workspaceRoot)) {
|
|
252
|
+
if (!fs.existsSync(dir))
|
|
253
|
+
continue;
|
|
254
|
+
// A directory of this name is already canonical.
|
|
255
|
+
if (fs.existsSync(path.join(dir, nameOrAlias, 'protocol.json')))
|
|
256
|
+
return nameOrAlias;
|
|
257
|
+
}
|
|
258
|
+
for (const dir of protocolDirs(workspaceRoot)) {
|
|
259
|
+
if (!fs.existsSync(dir))
|
|
260
|
+
continue;
|
|
261
|
+
let entries;
|
|
262
|
+
try {
|
|
263
|
+
entries = fs.readdirSync(dir, { withFileTypes: true }).filter(d => d.isDirectory());
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
continue;
|
|
267
|
+
}
|
|
268
|
+
for (const entry of entries) {
|
|
269
|
+
const jsonPath = path.join(dir, entry.name, 'protocol.json');
|
|
270
|
+
if (!fs.existsSync(jsonPath))
|
|
271
|
+
continue;
|
|
272
|
+
const parsed = readProtocolJson(jsonPath);
|
|
273
|
+
if (parsed?.alias === nameOrAlias)
|
|
274
|
+
return entry.name;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return nameOrAlias;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Every review type (`phases[].verify.type`) declared by the protocols available here.
|
|
281
|
+
*
|
|
282
|
+
* Unlike listProtocolNames, this reads the RESOLVED protocol.json per name (tier precedence via
|
|
283
|
+
* resolveCodevFile) rather than unioning across tiers: only the file that will actually execute
|
|
284
|
+
* defines which review types can occur, so a shadowed skeleton copy's types must not leak in.
|
|
285
|
+
*/
|
|
286
|
+
export function listReviewTypes(workspaceRoot) {
|
|
287
|
+
const types = new Set();
|
|
288
|
+
for (const name of listProtocolNames(workspaceRoot)) {
|
|
289
|
+
const resolved = resolveCodevFile(`protocols/${name}/protocol.json`, workspaceRoot);
|
|
290
|
+
if (!resolved)
|
|
291
|
+
continue; // alias entries have no directory of their own
|
|
292
|
+
const parsed = readProtocolJson(resolved);
|
|
293
|
+
const phases = parsed?.phases;
|
|
294
|
+
if (!Array.isArray(phases))
|
|
295
|
+
continue;
|
|
296
|
+
for (const phase of phases) {
|
|
297
|
+
const verifyType = phase?.verify?.type;
|
|
298
|
+
if (typeof verifyType === 'string' && verifyType.length > 0)
|
|
299
|
+
types.add(verifyType);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return types;
|
|
303
|
+
}
|
|
184
304
|
export function listSkeletonFiles(subdir) {
|
|
185
305
|
const skeletonDir = getSkeletonDir();
|
|
186
306
|
const targetDir = subdir ? path.join(skeletonDir, subdir) : skeletonDir;
|
package/dist/lib/skeleton.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../src/lib/skeleton.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test-runner detection and the escape hatches that go with it (#1323).
|
|
3
|
+
*
|
|
4
|
+
* Two consult side effects are *user-global*: spawning the real `agy` binary
|
|
5
|
+
* (which opens a browser login window when agy is unauthenticated) and writing
|
|
6
|
+
* to `~/.codev/metrics.db`. Both used to be reachable from the test suites by
|
|
7
|
+
* simple omission — a test that never pinned `CODEV_AGY_BIN` resolved the
|
|
8
|
+
* developer's real binary, and every in-process test recorded metrics into the
|
|
9
|
+
* developer's real database.
|
|
10
|
+
*
|
|
11
|
+
* The vitest harness (`vitest-setup.ts`) now pins a sandbox for both. These
|
|
12
|
+
* helpers are the belt-and-braces half: production code consults them so that a
|
|
13
|
+
* *future* test which slips past the harness fails loudly instead of silently
|
|
14
|
+
* reaching the real world.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* True when this process is running under a test runner.
|
|
18
|
+
*
|
|
19
|
+
* `VITEST` is set by the runner and covers every suite Codev actually has;
|
|
20
|
+
* CLI-integration and e2e tests spawn `codev` / `consult` children with
|
|
21
|
+
* `{ ...process.env }`, so children inherit it and fall under the same guards.
|
|
22
|
+
*
|
|
23
|
+
* `CODEV_TEST_ISOLATION` is the opt-in for a harness that is not vitest. It is
|
|
24
|
+
* deliberately a name Codev owns: these guards make `consult` *throw*, so a
|
|
25
|
+
* false positive breaks a real consultation. A generic marker like `CODEV_TEST`
|
|
26
|
+
* or `CI` could already be exported in an adopter's environment for unrelated
|
|
27
|
+
* reasons, and inheriting someone else's variable is not worth the blast radius.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isUnderTestRunner(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Explicit opt-in for deliberately exercising the REAL `agy` binary from a test.
|
|
32
|
+
*
|
|
33
|
+
* Unset by default, so no suite can spawn the real CLI by accident. Set it to
|
|
34
|
+
* run the guarded real-agy integration smoke, or a real-AI e2e benchmark:
|
|
35
|
+
*
|
|
36
|
+
* CODEV_ALLOW_REAL_AGY=1 pnpm --filter @cluesmith/codev test:e2e:cli
|
|
37
|
+
*
|
|
38
|
+
* When set, the vitest harness leaves `CODEV_AGY_BIN` alone and the lane guard
|
|
39
|
+
* stands down — you get the real binary, and the real browser tab if agy's
|
|
40
|
+
* login has lapsed.
|
|
41
|
+
*/
|
|
42
|
+
export declare function realAgyOptIn(): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Guard the gemini (agy) lane against reaching the real binary from a test.
|
|
45
|
+
*
|
|
46
|
+
* Throws when running under a test runner with neither an explicit
|
|
47
|
+
* `CODEV_AGY_BIN` pin nor the real-agy opt-in. Deliberately louder than the
|
|
48
|
+
* lane's usual non-blocking skip: a misconfigured test must fail the suite, not
|
|
49
|
+
* quietly degrade to a COMMENT verdict (which would hide the misconfiguration
|
|
50
|
+
* on a machine where agy simply isn't installed).
|
|
51
|
+
*
|
|
52
|
+
* **Where this is called, and why there.** There is exactly one call site:
|
|
53
|
+
* `resolveAgyBin()`, in the branch taken when `CODEV_AGY_BIN` is unset. That is
|
|
54
|
+
* the chokepoint — every route to the real binary passes through it, and there
|
|
55
|
+
* is more than one route:
|
|
56
|
+
*
|
|
57
|
+
* - `runAgyConsultation()` — the consult lane (`consult -m gemini`)
|
|
58
|
+
* - `doctor.ts:verifyAgy()` — `codev doctor`'s OAuth probe, a second spawn
|
|
59
|
+
* site that issue #1323 did not mention
|
|
60
|
+
* - `doctor.ts:checkAgy()` — presence check; does not spawn, but resolution
|
|
61
|
+
* itself is not passive
|
|
62
|
+
*
|
|
63
|
+
* That last point is the reason the guard sits at resolution rather than at the
|
|
64
|
+
* spawn sites: the unpinned lookup runs `agyRespondsToVersion()`, which
|
|
65
|
+
* *executes* the candidate binary with `--version`. Guarding only the spawns
|
|
66
|
+
* would leave a suite executing the developer's real agy — no browser window
|
|
67
|
+
* from a version print, but a violation of the invariant all the same.
|
|
68
|
+
*
|
|
69
|
+
* Guarding here is safe for the resolution tests because they all pin
|
|
70
|
+
* `CODEV_AGY_BIN` before calling (they are testing override handling), and
|
|
71
|
+
* `agy-integration.e2e.test.ts` short-circuits on the opt-in before resolving.
|
|
72
|
+
*/
|
|
73
|
+
export declare function assertAgyLaneAllowedUnderTest(): void;
|
|
74
|
+
//# sourceMappingURL=test-env.d.ts.map
|