@isaacriehm/cairn 0.1.0 → 0.1.4
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/dist/.tsbuildinfo +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/backprop/id.d.ts +0 -14
- package/dist/backprop/id.js +0 -40
- package/dist/backprop/id.js.map +0 -1
- package/dist/backprop/index.d.ts +0 -23
- package/dist/backprop/index.js +0 -21
- package/dist/backprop/index.js.map +0 -1
- package/dist/backprop/prompt.d.ts +0 -16
- package/dist/backprop/prompt.js +0 -101
- package/dist/backprop/prompt.js.map +0 -1
- package/dist/backprop/runner.d.ts +0 -18
- package/dist/backprop/runner.js +0 -95
- package/dist/backprop/runner.js.map +0 -1
- package/dist/backprop/schema.d.ts +0 -61
- package/dist/backprop/schema.js +0 -55
- package/dist/backprop/schema.js.map +0 -1
- package/dist/backprop/types.d.ts +0 -101
- package/dist/backprop/types.js +0 -24
- package/dist/backprop/types.js.map +0 -1
- package/dist/backprop/writer.d.ts +0 -27
- package/dist/backprop/writer.js +0 -301
- package/dist/backprop/writer.js.map +0 -1
- package/dist/claude/error.d.ts +0 -33
- package/dist/claude/error.js +0 -58
- package/dist/claude/error.js.map +0 -1
- package/dist/claude/index.d.ts +0 -3
- package/dist/claude/index.js +0 -3
- package/dist/claude/index.js.map +0 -1
- package/dist/claude/runner.d.ts +0 -11
- package/dist/claude/runner.js +0 -132
- package/dist/claude/runner.js.map +0 -1
- package/dist/claude/types.d.ts +0 -52
- package/dist/claude/types.js +0 -14
- package/dist/claude/types.js.map +0 -1
- package/dist/cli/daemon.d.ts +0 -54
- package/dist/cli/daemon.js +0 -351
- package/dist/cli/daemon.js.map +0 -1
- package/dist/cli/install.d.ts +0 -52
- package/dist/cli/install.js +0 -308
- package/dist/cli/install.js.map +0 -1
- package/dist/cli/mirror.d.ts +0 -1
- package/dist/cli/mirror.js +0 -97
- package/dist/cli/mirror.js.map +0 -1
- package/dist/cli/run.d.ts +0 -1
- package/dist/cli/run.js +0 -174
- package/dist/cli/run.js.map +0 -1
- package/dist/cli/task.d.ts +0 -18
- package/dist/cli/task.js +0 -137
- package/dist/cli/task.js.map +0 -1
- package/dist/cli/watch.d.ts +0 -1
- package/dist/cli/watch.js +0 -73
- package/dist/cli/watch.js.map +0 -1
- package/dist/decision-capture/capture.d.ts +0 -57
- package/dist/decision-capture/capture.js +0 -186
- package/dist/decision-capture/capture.js.map +0 -1
- package/dist/decision-capture/extractor.d.ts +0 -20
- package/dist/decision-capture/extractor.js +0 -103
- package/dist/decision-capture/extractor.js.map +0 -1
- package/dist/decision-capture/id.d.ts +0 -14
- package/dist/decision-capture/id.js +0 -44
- package/dist/decision-capture/id.js.map +0 -1
- package/dist/decision-capture/index.d.ts +0 -25
- package/dist/decision-capture/index.js +0 -21
- package/dist/decision-capture/index.js.map +0 -1
- package/dist/decision-capture/prompt.d.ts +0 -15
- package/dist/decision-capture/prompt.js +0 -68
- package/dist/decision-capture/prompt.js.map +0 -1
- package/dist/decision-capture/refinement-prompt.d.ts +0 -25
- package/dist/decision-capture/refinement-prompt.js +0 -146
- package/dist/decision-capture/refinement-prompt.js.map +0 -1
- package/dist/decision-capture/refinement-schema.d.ts +0 -52
- package/dist/decision-capture/refinement-schema.js +0 -61
- package/dist/decision-capture/refinement-schema.js.map +0 -1
- package/dist/decision-capture/refinement.d.ts +0 -60
- package/dist/decision-capture/refinement.js +0 -439
- package/dist/decision-capture/refinement.js.map +0 -1
- package/dist/decision-capture/schema.d.ts +0 -70
- package/dist/decision-capture/schema.js +0 -71
- package/dist/decision-capture/schema.js.map +0 -1
- package/dist/decision-capture/types.d.ts +0 -201
- package/dist/decision-capture/types.js +0 -20
- package/dist/decision-capture/types.js.map +0 -1
- package/dist/decision-capture/writer.d.ts +0 -90
- package/dist/decision-capture/writer.js +0 -267
- package/dist/decision-capture/writer.js.map +0 -1
- package/dist/frontend/discord/acl.d.ts +0 -6
- package/dist/frontend/discord/acl.js +0 -19
- package/dist/frontend/discord/acl.js.map +0 -1
- package/dist/frontend/discord/channels.d.ts +0 -29
- package/dist/frontend/discord/channels.js +0 -58
- package/dist/frontend/discord/channels.js.map +0 -1
- package/dist/frontend/discord/classifier.d.ts +0 -16
- package/dist/frontend/discord/classifier.js +0 -29
- package/dist/frontend/discord/classifier.js.map +0 -1
- package/dist/frontend/discord/index.d.ts +0 -118
- package/dist/frontend/discord/index.js +0 -1104
- package/dist/frontend/discord/index.js.map +0 -1
- package/dist/frontend/discord/slash.d.ts +0 -18
- package/dist/frontend/discord/slash.js +0 -90
- package/dist/frontend/discord/slash.js.map +0 -1
- package/dist/frontend/inbox.d.ts +0 -17
- package/dist/frontend/inbox.js +0 -30
- package/dist/frontend/inbox.js.map +0 -1
- package/dist/frontend/index.d.ts +0 -8
- package/dist/frontend/index.js +0 -6
- package/dist/frontend/index.js.map +0 -1
- package/dist/frontend/stub/index.d.ts +0 -58
- package/dist/frontend/stub/index.js +0 -144
- package/dist/frontend/stub/index.js.map +0 -1
- package/dist/frontend/types.d.ts +0 -247
- package/dist/frontend/types.js +0 -15
- package/dist/frontend/types.js.map +0 -1
- package/dist/gc/apply.d.ts +0 -26
- package/dist/gc/apply.js +0 -48
- package/dist/gc/apply.js.map +0 -1
- package/dist/gc/canary.d.ts +0 -42
- package/dist/gc/canary.js +0 -134
- package/dist/gc/canary.js.map +0 -1
- package/dist/gc/classify.d.ts +0 -25
- package/dist/gc/classify.js +0 -89
- package/dist/gc/classify.js.map +0 -1
- package/dist/gc/doc-gardening.d.ts +0 -29
- package/dist/gc/doc-gardening.js +0 -146
- package/dist/gc/doc-gardening.js.map +0 -1
- package/dist/gc/frontmatter.d.ts +0 -35
- package/dist/gc/frontmatter.js +0 -111
- package/dist/gc/frontmatter.js.map +0 -1
- package/dist/gc/generator-drift.d.ts +0 -28
- package/dist/gc/generator-drift.js +0 -53
- package/dist/gc/generator-drift.js.map +0 -1
- package/dist/gc/index.d.ts +0 -35
- package/dist/gc/index.js +0 -26
- package/dist/gc/index.js.map +0 -1
- package/dist/gc/quality-update.d.ts +0 -23
- package/dist/gc/quality-update.js +0 -69
- package/dist/gc/quality-update.js.map +0 -1
- package/dist/gc/stub-hits.d.ts +0 -31
- package/dist/gc/stub-hits.js +0 -125
- package/dist/gc/stub-hits.js.map +0 -1
- package/dist/gc/sweep.d.ts +0 -56
- package/dist/gc/sweep.js +0 -178
- package/dist/gc/sweep.js.map +0 -1
- package/dist/gc/types.d.ts +0 -129
- package/dist/gc/types.js +0 -26
- package/dist/gc/types.js.map +0 -1
- package/dist/ground/drift.d.ts +0 -8
- package/dist/ground/drift.js +0 -23
- package/dist/ground/drift.js.map +0 -1
- package/dist/ground/frontmatter.d.ts +0 -20
- package/dist/ground/frontmatter.js +0 -49
- package/dist/ground/frontmatter.js.map +0 -1
- package/dist/ground/glob.d.ts +0 -10
- package/dist/ground/glob.js +0 -46
- package/dist/ground/glob.js.map +0 -1
- package/dist/ground/index.d.ts +0 -14
- package/dist/ground/index.js +0 -10
- package/dist/ground/index.js.map +0 -1
- package/dist/ground/ledgers.d.ts +0 -18
- package/dist/ground/ledgers.js +0 -103
- package/dist/ground/ledgers.js.map +0 -1
- package/dist/ground/manifest.d.ts +0 -10
- package/dist/ground/manifest.js +0 -88
- package/dist/ground/manifest.js.map +0 -1
- package/dist/ground/paths.d.ts +0 -20
- package/dist/ground/paths.js +0 -61
- package/dist/ground/paths.js.map +0 -1
- package/dist/ground/quality-grades.d.ts +0 -11
- package/dist/ground/quality-grades.js +0 -98
- package/dist/ground/quality-grades.js.map +0 -1
- package/dist/ground/schemas.d.ts +0 -306
- package/dist/ground/schemas.js +0 -188
- package/dist/ground/schemas.js.map +0 -1
- package/dist/ground/walk.d.ts +0 -7
- package/dist/ground/walk.js +0 -53
- package/dist/ground/walk.js.map +0 -1
- package/dist/init/detect.d.ts +0 -25
- package/dist/init/detect.js +0 -336
- package/dist/init/detect.js.map +0 -1
- package/dist/init/index.d.ts +0 -14
- package/dist/init/index.js +0 -9
- package/dist/init/index.js.map +0 -1
- package/dist/init/init.d.ts +0 -68
- package/dist/init/init.js +0 -673
- package/dist/init/init.js.map +0 -1
- package/dist/init/mapper.d.ts +0 -160
- package/dist/init/mapper.js +0 -248
- package/dist/init/mapper.js.map +0 -1
- package/dist/init/prompts.d.ts +0 -70
- package/dist/init/prompts.js +0 -80
- package/dist/init/prompts.js.map +0 -1
- package/dist/init/secrets.d.ts +0 -18
- package/dist/init/secrets.js +0 -76
- package/dist/init/secrets.js.map +0 -1
- package/dist/init/seed.d.ts +0 -21
- package/dist/init/seed.js +0 -75
- package/dist/init/seed.js.map +0 -1
- package/dist/init/setup-runners.d.ts +0 -17
- package/dist/init/setup-runners.js +0 -70
- package/dist/init/setup-runners.js.map +0 -1
- package/dist/init/types.d.ts +0 -59
- package/dist/init/types.js +0 -10
- package/dist/init/types.js.map +0 -1
- package/dist/init/walker.d.ts +0 -53
- package/dist/init/walker.js +0 -460
- package/dist/init/walker.js.map +0 -1
- package/dist/init/workflow-block.d.ts +0 -34
- package/dist/init/workflow-block.js +0 -110
- package/dist/init/workflow-block.js.map +0 -1
- package/dist/logger.d.ts +0 -3
- package/dist/logger.js +0 -23
- package/dist/logger.js.map +0 -1
- package/dist/mcp/context.d.ts +0 -16
- package/dist/mcp/context.js +0 -8
- package/dist/mcp/context.js.map +0 -1
- package/dist/mcp/errors.d.ts +0 -17
- package/dist/mcp/errors.js +0 -23
- package/dist/mcp/errors.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -10
- package/dist/mcp/index.js +0 -7
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/path-allowlist.d.ts +0 -25
- package/dist/mcp/path-allowlist.js +0 -66
- package/dist/mcp/path-allowlist.js.map +0 -1
- package/dist/mcp/result.d.ts +0 -8
- package/dist/mcp/result.js +0 -18
- package/dist/mcp/result.js.map +0 -1
- package/dist/mcp/schemas.d.ts +0 -153
- package/dist/mcp/schemas.js +0 -135
- package/dist/mcp/schemas.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -11
- package/dist/mcp/server.js +0 -58
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/telemetry.d.ts +0 -15
- package/dist/mcp/telemetry.js +0 -13
- package/dist/mcp/telemetry.js.map +0 -1
- package/dist/mcp/tools/append.d.ts +0 -8
- package/dist/mcp/tools/append.js +0 -33
- package/dist/mcp/tools/append.js.map +0 -1
- package/dist/mcp/tools/archive.d.ts +0 -8
- package/dist/mcp/tools/archive.js +0 -49
- package/dist/mcp/tools/archive.js.map +0 -1
- package/dist/mcp/tools/ask-operator.d.ts +0 -34
- package/dist/mcp/tools/ask-operator.js +0 -93
- package/dist/mcp/tools/ask-operator.js.map +0 -1
- package/dist/mcp/tools/canonical-for-topic.d.ts +0 -6
- package/dist/mcp/tools/canonical-for-topic.js +0 -40
- package/dist/mcp/tools/canonical-for-topic.js.map +0 -1
- package/dist/mcp/tools/decision-get.d.ts +0 -6
- package/dist/mcp/tools/decision-get.js +0 -49
- package/dist/mcp/tools/decision-get.js.map +0 -1
- package/dist/mcp/tools/decisions-for-symbol.d.ts +0 -7
- package/dist/mcp/tools/decisions-for-symbol.js +0 -42
- package/dist/mcp/tools/decisions-for-symbol.js.map +0 -1
- package/dist/mcp/tools/decisions-in-scope.d.ts +0 -7
- package/dist/mcp/tools/decisions-in-scope.js +0 -47
- package/dist/mcp/tools/decisions-in-scope.js.map +0 -1
- package/dist/mcp/tools/drop-task.d.ts +0 -12
- package/dist/mcp/tools/drop-task.js +0 -47
- package/dist/mcp/tools/drop-task.js.map +0 -1
- package/dist/mcp/tools/get-full.d.ts +0 -7
- package/dist/mcp/tools/get-full.js +0 -46
- package/dist/mcp/tools/get-full.js.map +0 -1
- package/dist/mcp/tools/ground-get.d.ts +0 -7
- package/dist/mcp/tools/ground-get.js +0 -80
- package/dist/mcp/tools/ground-get.js.map +0 -1
- package/dist/mcp/tools/index.d.ts +0 -3
- package/dist/mcp/tools/index.js +0 -44
- package/dist/mcp/tools/index.js.map +0 -1
- package/dist/mcp/tools/invariant-get.d.ts +0 -6
- package/dist/mcp/tools/invariant-get.js +0 -49
- package/dist/mcp/tools/invariant-get.js.map +0 -1
- package/dist/mcp/tools/invariants-in-scope.d.ts +0 -7
- package/dist/mcp/tools/invariants-in-scope.js +0 -65
- package/dist/mcp/tools/invariants-in-scope.js.map +0 -1
- package/dist/mcp/tools/query-history.d.ts +0 -9
- package/dist/mcp/tools/query-history.js +0 -33
- package/dist/mcp/tools/query-history.js.map +0 -1
- package/dist/mcp/tools/record-decision.d.ts +0 -14
- package/dist/mcp/tools/record-decision.js +0 -101
- package/dist/mcp/tools/record-decision.js.map +0 -1
- package/dist/mcp/tools/record-run-event.d.ts +0 -10
- package/dist/mcp/tools/record-run-event.js +0 -28
- package/dist/mcp/tools/record-run-event.js.map +0 -1
- package/dist/mcp/tools/search.d.ts +0 -9
- package/dist/mcp/tools/search.js +0 -165
- package/dist/mcp/tools/search.js.map +0 -1
- package/dist/mcp/tools/supersedes-chain.d.ts +0 -6
- package/dist/mcp/tools/supersedes-chain.js +0 -66
- package/dist/mcp/tools/supersedes-chain.js.map +0 -1
- package/dist/mcp/tools/timeline.d.ts +0 -9
- package/dist/mcp/tools/timeline.js +0 -65
- package/dist/mcp/tools/timeline.js.map +0 -1
- package/dist/mcp/tools/types.d.ts +0 -9
- package/dist/mcp/tools/types.js +0 -2
- package/dist/mcp/tools/types.js.map +0 -1
- package/dist/mirror/clone.d.ts +0 -6
- package/dist/mirror/clone.js +0 -48
- package/dist/mirror/clone.js.map +0 -1
- package/dist/mirror/dirty-overlap.d.ts +0 -13
- package/dist/mirror/dirty-overlap.js +0 -77
- package/dist/mirror/dirty-overlap.js.map +0 -1
- package/dist/mirror/index.d.ts +0 -7
- package/dist/mirror/index.js +0 -7
- package/dist/mirror/index.js.map +0 -1
- package/dist/mirror/paths.d.ts +0 -18
- package/dist/mirror/paths.js +0 -45
- package/dist/mirror/paths.js.map +0 -1
- package/dist/mirror/push.d.ts +0 -9
- package/dist/mirror/push.js +0 -27
- package/dist/mirror/push.js.map +0 -1
- package/dist/mirror/state.d.ts +0 -4
- package/dist/mirror/state.js +0 -36
- package/dist/mirror/state.js.map +0 -1
- package/dist/mirror/sync.d.ts +0 -9
- package/dist/mirror/sync.js +0 -33
- package/dist/mirror/sync.js.map +0 -1
- package/dist/mirror/types.d.ts +0 -77
- package/dist/mirror/types.js +0 -2
- package/dist/mirror/types.js.map +0 -1
- package/dist/orchestrator/activity-summarizer.d.ts +0 -33
- package/dist/orchestrator/activity-summarizer.js +0 -120
- package/dist/orchestrator/activity-summarizer.js.map +0 -1
- package/dist/orchestrator/inbox.d.ts +0 -78
- package/dist/orchestrator/inbox.js +0 -115
- package/dist/orchestrator/inbox.js.map +0 -1
- package/dist/orchestrator/index.d.ts +0 -9
- package/dist/orchestrator/index.js +0 -7
- package/dist/orchestrator/index.js.map +0 -1
- package/dist/orchestrator/orchestrator.d.ts +0 -154
- package/dist/orchestrator/orchestrator.js +0 -2437
- package/dist/orchestrator/orchestrator.js.map +0 -1
- package/dist/orchestrator/prompt.d.ts +0 -19
- package/dist/orchestrator/prompt.js +0 -50
- package/dist/orchestrator/prompt.js.map +0 -1
- package/dist/orchestrator/queue.d.ts +0 -21
- package/dist/orchestrator/queue.js +0 -80
- package/dist/orchestrator/queue.js.map +0 -1
- package/dist/orchestrator/run-log.d.ts +0 -53
- package/dist/orchestrator/run-log.js +0 -92
- package/dist/orchestrator/run-log.js.map +0 -1
- package/dist/orchestrator/runner.d.ts +0 -56
- package/dist/orchestrator/runner.js +0 -172
- package/dist/orchestrator/runner.js.map +0 -1
- package/dist/orchestrator/tool-digest.d.ts +0 -35
- package/dist/orchestrator/tool-digest.js +0 -116
- package/dist/orchestrator/tool-digest.js.map +0 -1
- package/dist/orchestrator/types.d.ts +0 -263
- package/dist/orchestrator/types.js +0 -2
- package/dist/orchestrator/types.js.map +0 -1
- package/dist/orchestrator/workspace.d.ts +0 -21
- package/dist/orchestrator/workspace.js +0 -31
- package/dist/orchestrator/workspace.js.map +0 -1
- package/dist/profiles/index.d.ts +0 -3
- package/dist/profiles/index.js +0 -3
- package/dist/profiles/index.js.map +0 -1
- package/dist/profiles/registry.d.ts +0 -5
- package/dist/profiles/registry.js +0 -31
- package/dist/profiles/registry.js.map +0 -1
- package/dist/profiles/types.d.ts +0 -48
- package/dist/profiles/types.js +0 -11
- package/dist/profiles/types.js.map +0 -1
- package/dist/profiles/unknown.d.ts +0 -9
- package/dist/profiles/unknown.js +0 -17
- package/dist/profiles/unknown.js.map +0 -1
- package/dist/reviewer/index.d.ts +0 -6
- package/dist/reviewer/index.js +0 -5
- package/dist/reviewer/index.js.map +0 -1
- package/dist/reviewer/prompt.d.ts +0 -11
- package/dist/reviewer/prompt.js +0 -132
- package/dist/reviewer/prompt.js.map +0 -1
- package/dist/reviewer/remediation.d.ts +0 -15
- package/dist/reviewer/remediation.js +0 -61
- package/dist/reviewer/remediation.js.map +0 -1
- package/dist/reviewer/reviewer.d.ts +0 -9
- package/dist/reviewer/reviewer.js +0 -89
- package/dist/reviewer/reviewer.js.map +0 -1
- package/dist/reviewer/schema.d.ts +0 -45
- package/dist/reviewer/schema.js +0 -43
- package/dist/reviewer/schema.js.map +0 -1
- package/dist/reviewer/types.d.ts +0 -74
- package/dist/reviewer/types.js +0 -14
- package/dist/reviewer/types.js.map +0 -1
- package/dist/sensors/attestation.d.ts +0 -44
- package/dist/sensors/attestation.js +0 -262
- package/dist/sensors/attestation.js.map +0 -1
- package/dist/sensors/catalog.d.ts +0 -41
- package/dist/sensors/catalog.js +0 -123
- package/dist/sensors/catalog.js.map +0 -1
- package/dist/sensors/decisions.d.ts +0 -30
- package/dist/sensors/decisions.js +0 -393
- package/dist/sensors/decisions.js.map +0 -1
- package/dist/sensors/diff.d.ts +0 -27
- package/dist/sensors/diff.js +0 -148
- package/dist/sensors/diff.js.map +0 -1
- package/dist/sensors/index.d.ts +0 -13
- package/dist/sensors/index.js +0 -9
- package/dist/sensors/index.js.map +0 -1
- package/dist/sensors/remediation.d.ts +0 -20
- package/dist/sensors/remediation.js +0 -65
- package/dist/sensors/remediation.js.map +0 -1
- package/dist/sensors/runner.d.ts +0 -44
- package/dist/sensors/runner.js +0 -95
- package/dist/sensors/runner.js.map +0 -1
- package/dist/sensors/structural.d.ts +0 -30
- package/dist/sensors/structural.js +0 -204
- package/dist/sensors/structural.js.map +0 -1
- package/dist/sensors/stub-catalog.d.ts +0 -39
- package/dist/sensors/stub-catalog.js +0 -115
- package/dist/sensors/stub-catalog.js.map +0 -1
- package/dist/sensors/types.d.ts +0 -135
- package/dist/sensors/types.js +0 -14
- package/dist/sensors/types.js.map +0 -1
- package/dist/tier0/classify.d.ts +0 -5
- package/dist/tier0/classify.js +0 -91
- package/dist/tier0/classify.js.map +0 -1
- package/dist/tier0/index.d.ts +0 -3
- package/dist/tier0/index.js +0 -3
- package/dist/tier0/index.js.map +0 -1
- package/dist/tier0/ollama.d.ts +0 -22
- package/dist/tier0/ollama.js +0 -63
- package/dist/tier0/ollama.js.map +0 -1
- package/dist/tier0/types.d.ts +0 -24
- package/dist/tier0/types.js +0 -7
- package/dist/tier0/types.js.map +0 -1
- package/dist/tightener/index.d.ts +0 -4
- package/dist/tightener/index.js +0 -4
- package/dist/tightener/index.js.map +0 -1
- package/dist/tightener/prompt.d.ts +0 -3
- package/dist/tightener/prompt.js +0 -67
- package/dist/tightener/prompt.js.map +0 -1
- package/dist/tightener/schema.d.ts +0 -68
- package/dist/tightener/schema.js +0 -44
- package/dist/tightener/schema.js.map +0 -1
- package/dist/tightener/tighten.d.ts +0 -2
- package/dist/tightener/tighten.js +0 -66
- package/dist/tightener/tighten.js.map +0 -1
- package/dist/tightener/types.d.ts +0 -74
- package/dist/tightener/types.js +0 -6
- package/dist/tightener/types.js.map +0 -1
- package/dist/uat/bundle.d.ts +0 -68
- package/dist/uat/bundle.js +0 -168
- package/dist/uat/bundle.js.map +0 -1
- package/dist/uat/index.d.ts +0 -15
- package/dist/uat/index.js +0 -10
- package/dist/uat/index.js.map +0 -1
- package/dist/uat/persistent.d.ts +0 -64
- package/dist/uat/persistent.js +0 -206
- package/dist/uat/persistent.js.map +0 -1
- package/dist/uat/probes/cli.d.ts +0 -11
- package/dist/uat/probes/cli.js +0 -107
- package/dist/uat/probes/cli.js.map +0 -1
- package/dist/uat/probes/http.d.ts +0 -12
- package/dist/uat/probes/http.js +0 -139
- package/dist/uat/probes/http.js.map +0 -1
- package/dist/uat/probes/index.d.ts +0 -21
- package/dist/uat/probes/index.js +0 -30
- package/dist/uat/probes/index.js.map +0 -1
- package/dist/uat/probes/integration.d.ts +0 -18
- package/dist/uat/probes/integration.js +0 -188
- package/dist/uat/probes/integration.js.map +0 -1
- package/dist/uat/probes/sql/config.d.ts +0 -14
- package/dist/uat/probes/sql/config.js +0 -57
- package/dist/uat/probes/sql/config.js.map +0 -1
- package/dist/uat/probes/sql/index.d.ts +0 -29
- package/dist/uat/probes/sql/index.js +0 -43
- package/dist/uat/probes/sql/index.js.map +0 -1
- package/dist/uat/probes/sql/mysql.d.ts +0 -12
- package/dist/uat/probes/sql/mysql.js +0 -96
- package/dist/uat/probes/sql/mysql.js.map +0 -1
- package/dist/uat/probes/sql/pg.d.ts +0 -20
- package/dist/uat/probes/sql/pg.js +0 -102
- package/dist/uat/probes/sql/pg.js.map +0 -1
- package/dist/uat/probes/sql/sqlite.d.ts +0 -9
- package/dist/uat/probes/sql/sqlite.js +0 -58
- package/dist/uat/probes/sql/sqlite.js.map +0 -1
- package/dist/uat/probes/sql/types.d.ts +0 -46
- package/dist/uat/probes/sql/types.js +0 -10
- package/dist/uat/probes/sql/types.js.map +0 -1
- package/dist/uat/probes/sql.d.ts +0 -9
- package/dist/uat/probes/sql.js +0 -119
- package/dist/uat/probes/sql.js.map +0 -1
- package/dist/uat/probes/ui.d.ts +0 -19
- package/dist/uat/probes/ui.js +0 -244
- package/dist/uat/probes/ui.js.map +0 -1
- package/dist/uat/prompt.d.ts +0 -10
- package/dist/uat/prompt.js +0 -85
- package/dist/uat/prompt.js.map +0 -1
- package/dist/uat/question.d.ts +0 -50
- package/dist/uat/question.js +0 -139
- package/dist/uat/question.js.map +0 -1
- package/dist/uat/rejection.d.ts +0 -58
- package/dist/uat/rejection.js +0 -163
- package/dist/uat/rejection.js.map +0 -1
- package/dist/uat/runner.d.ts +0 -6
- package/dist/uat/runner.js +0 -96
- package/dist/uat/runner.js.map +0 -1
- package/dist/uat/schema.d.ts +0 -322
- package/dist/uat/schema.js +0 -189
- package/dist/uat/schema.js.map +0 -1
- package/dist/uat/types.d.ts +0 -268
- package/dist/uat/types.js +0 -18
- package/dist/uat/types.js.map +0 -1
- package/dist/uat/uat.d.ts +0 -89
- package/dist/uat/uat.js +0 -256
- package/dist/uat/uat.js.map +0 -1
- package/dist/voice/index.d.ts +0 -4
- package/dist/voice/index.js +0 -4
- package/dist/voice/index.js.map +0 -1
- package/dist/voice/model.d.ts +0 -23
- package/dist/voice/model.js +0 -46
- package/dist/voice/model.js.map +0 -1
- package/dist/voice/pipe.d.ts +0 -9
- package/dist/voice/pipe.js +0 -47
- package/dist/voice/pipe.js.map +0 -1
- package/dist/voice/transcribe.d.ts +0 -3
- package/dist/voice/transcribe.js +0 -43
- package/dist/voice/transcribe.js.map +0 -1
- package/dist/voice/types.d.ts +0 -26
- package/dist/voice/types.js +0 -9
- package/dist/voice/types.js.map +0 -1
- package/dist/watch/daemon.d.ts +0 -21
- package/dist/watch/daemon.js +0 -143
- package/dist/watch/daemon.js.map +0 -1
- package/dist/watch/index.d.ts +0 -4
- package/dist/watch/index.js +0 -3
- package/dist/watch/index.js.map +0 -1
- package/dist/watch/regenerate.d.ts +0 -25
- package/dist/watch/regenerate.js +0 -51
- package/dist/watch/regenerate.js.map +0 -1
package/dist/profiles/index.d.ts
DELETED
package/dist/profiles/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/profiles/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { Profile } from "./types.js";
|
|
2
|
-
export declare function registerProfile(profile: Profile): void;
|
|
3
|
-
export declare function selectProfile(repoRoot: string): Profile;
|
|
4
|
-
export declare function getProfile(id: string): Profile | null;
|
|
5
|
-
export declare function listProfiles(): readonly Profile[];
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { unknownProfile } from "./unknown.js";
|
|
2
|
-
/**
|
|
3
|
-
* Profile registry. Order matters — earlier profiles win.
|
|
4
|
-
*
|
|
5
|
-
* `unknown` is always last; it detects unconditionally as the fallback.
|
|
6
|
-
* Future profiles (typescript-next-nest, python-fastapi, rails, go, rust)
|
|
7
|
-
* are added before `unknown`, in priority order.
|
|
8
|
-
*/
|
|
9
|
-
const profiles = [unknownProfile];
|
|
10
|
-
export function registerProfile(profile) {
|
|
11
|
-
if (profile.id === "unknown") {
|
|
12
|
-
throw new Error("Cannot re-register the unknown profile");
|
|
13
|
-
}
|
|
14
|
-
// Insert before unknown.
|
|
15
|
-
const insertAt = profiles.findIndex((p) => p.id === "unknown");
|
|
16
|
-
profiles.splice(insertAt, 0, profile);
|
|
17
|
-
}
|
|
18
|
-
export function selectProfile(repoRoot) {
|
|
19
|
-
for (const profile of profiles) {
|
|
20
|
-
if (profile.detect(repoRoot))
|
|
21
|
-
return profile;
|
|
22
|
-
}
|
|
23
|
-
return unknownProfile;
|
|
24
|
-
}
|
|
25
|
-
export function getProfile(id) {
|
|
26
|
-
return profiles.find((p) => p.id === id) ?? null;
|
|
27
|
-
}
|
|
28
|
-
export function listProfiles() {
|
|
29
|
-
return profiles;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/profiles/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,QAAQ,GAAc,CAAC,cAAc,CAAC,CAAC;AAE7C,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,yBAAyB;IACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;IAC/D,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,OAAO,OAAO,CAAC;IAC/C,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/profiles/types.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stack profile — extension surface for project-specific generators, sensors,
|
|
3
|
-
* and adoption-time defaults. Per L47 (Codex audit Q8).
|
|
4
|
-
*
|
|
5
|
-
* The harness package code is project-agnostic. All references to specific
|
|
6
|
-
* stacks (NestJS, Drizzle, Rails, etc.) live inside profile implementations,
|
|
7
|
-
* NEVER in core code paths. The profile registry is consulted at adoption
|
|
8
|
-
* time and at runtime via id-based lookup.
|
|
9
|
-
*/
|
|
10
|
-
export interface ProfileSensorRef {
|
|
11
|
-
/** Stable id used in sensor results. */
|
|
12
|
-
id: string;
|
|
13
|
-
/** What the sensor checks. */
|
|
14
|
-
description: string;
|
|
15
|
-
/** Globs that trigger this sensor. */
|
|
16
|
-
watch?: string[];
|
|
17
|
-
/** Severity if this sensor fails. */
|
|
18
|
-
severity?: "hard" | "soft";
|
|
19
|
-
}
|
|
20
|
-
export interface ProfileExtractorContext {
|
|
21
|
-
/** The repo root the daemon is operating against (mirror path). */
|
|
22
|
-
repoRoot: string;
|
|
23
|
-
}
|
|
24
|
-
export interface ProfileExtractor {
|
|
25
|
-
/** Stable id used in logs + manifest entries. */
|
|
26
|
-
id: string;
|
|
27
|
-
/** Output path relative to repoRoot — usually under .harness/ground/. */
|
|
28
|
-
outputRelPath: string;
|
|
29
|
-
/** Watch globs that trigger this extractor (relative to repoRoot). */
|
|
30
|
-
watch: string[];
|
|
31
|
-
/** Run extractor; returns content to write, or null to skip writing. */
|
|
32
|
-
run(ctx: ProfileExtractorContext): Promise<string | null>;
|
|
33
|
-
}
|
|
34
|
-
export interface Profile {
|
|
35
|
-
/** Stable id — typescript-next-nest, python-fastapi, rails, go, rust, unknown. */
|
|
36
|
-
id: string;
|
|
37
|
-
name: string;
|
|
38
|
-
/** Returns true if this profile applies to the given repo. */
|
|
39
|
-
detect(repoRoot: string): boolean;
|
|
40
|
-
sensors: ProfileSensorRef[];
|
|
41
|
-
extractors: ProfileExtractor[];
|
|
42
|
-
/** Suggested off-limits paths on adoption. */
|
|
43
|
-
offLimitsDefaults: string[];
|
|
44
|
-
/** Suggested high-stakes globs on adoption. */
|
|
45
|
-
highStakesDefaults: string[];
|
|
46
|
-
/** Suggested start command for the project (e.g., `pnpm dev`). */
|
|
47
|
-
startCommand?: string;
|
|
48
|
-
}
|
package/dist/profiles/types.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stack profile — extension surface for project-specific generators, sensors,
|
|
3
|
-
* and adoption-time defaults. Per L47 (Codex audit Q8).
|
|
4
|
-
*
|
|
5
|
-
* The harness package code is project-agnostic. All references to specific
|
|
6
|
-
* stacks (NestJS, Drizzle, Rails, etc.) live inside profile implementations,
|
|
7
|
-
* NEVER in core code paths. The profile registry is consulted at adoption
|
|
8
|
-
* time and at runtime via id-based lookup.
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/profiles/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Profile } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Fallback profile — applies when no other profile detects.
|
|
4
|
-
*
|
|
5
|
-
* Carries no extractors and no stack-specific sensors. The harness still
|
|
6
|
-
* runs every generic sensor (Layer A/B/C/D/E/U + decision-assertions +
|
|
7
|
-
* invariant-suite) defined in templates/.harness/config/sensors.yaml.
|
|
8
|
-
*/
|
|
9
|
-
export declare const unknownProfile: Profile;
|
package/dist/profiles/unknown.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fallback profile — applies when no other profile detects.
|
|
3
|
-
*
|
|
4
|
-
* Carries no extractors and no stack-specific sensors. The harness still
|
|
5
|
-
* runs every generic sensor (Layer A/B/C/D/E/U + decision-assertions +
|
|
6
|
-
* invariant-suite) defined in templates/.harness/config/sensors.yaml.
|
|
7
|
-
*/
|
|
8
|
-
export const unknownProfile = {
|
|
9
|
-
id: "unknown",
|
|
10
|
-
name: "Unknown / generic",
|
|
11
|
-
detect: () => true,
|
|
12
|
-
sensors: [],
|
|
13
|
-
extractors: [],
|
|
14
|
-
offLimitsDefaults: [".git/**", ".archive/**", "node_modules/**", ".env", ".env.local"],
|
|
15
|
-
highStakesDefaults: [],
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=unknown.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unknown.js","sourceRoot":"","sources":["../../src/profiles/unknown.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAY;IACrC,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI;IAClB,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;IACd,iBAAiB,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,CAAC;IACtF,kBAAkB,EAAE,EAAE;CACvB,CAAC"}
|
package/dist/reviewer/index.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export type { ReviewVerdict, ReviewGapCategory, ReviewGap, ReviewerOutput, ReviewerInput, ReviewerResult, } from "./types.js";
|
|
2
|
-
export { REVIEWER_OUTPUT_SCHEMA } from "./schema.js";
|
|
3
|
-
export { REVIEWER_SYSTEM_PROMPT, buildReviewerUserPrompt } from "./prompt.js";
|
|
4
|
-
export { runReviewer } from "./reviewer.js";
|
|
5
|
-
export { formatReviewerRemediation } from "./remediation.js";
|
|
6
|
-
export type { ReviewerRemediationOptions } from "./remediation.js";
|
package/dist/reviewer/index.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export { REVIEWER_OUTPUT_SCHEMA } from "./schema.js";
|
|
2
|
-
export { REVIEWER_SYSTEM_PROMPT, buildReviewerUserPrompt } from "./prompt.js";
|
|
3
|
-
export { runReviewer } from "./reviewer.js";
|
|
4
|
-
export { formatReviewerRemediation } from "./remediation.js";
|
|
5
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reviewer/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reviewer prompts (Layer C).
|
|
3
|
-
*
|
|
4
|
-
* Anti-completionist framing — the implementer is biased toward shipping;
|
|
5
|
-
* the reviewer is biased toward catching omission. Same model on both
|
|
6
|
-
* sides; what protects against blindspots is the absence of shared context,
|
|
7
|
-
* not the presence of a different weight set (L15).
|
|
8
|
-
*/
|
|
9
|
-
import type { ReviewerInput } from "./types.js";
|
|
10
|
-
export declare const REVIEWER_SYSTEM_PROMPT: string;
|
|
11
|
-
export declare function buildReviewerUserPrompt(input: ReviewerInput): string;
|
package/dist/reviewer/prompt.js
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reviewer prompts (Layer C).
|
|
3
|
-
*
|
|
4
|
-
* Anti-completionist framing — the implementer is biased toward shipping;
|
|
5
|
-
* the reviewer is biased toward catching omission. Same model on both
|
|
6
|
-
* sides; what protects against blindspots is the absence of shared context,
|
|
7
|
-
* not the presence of a different weight set (L15).
|
|
8
|
-
*/
|
|
9
|
-
export const REVIEWER_SYSTEM_PROMPT = [
|
|
10
|
-
"You are the REVIEWER subagent in a developer harness.",
|
|
11
|
-
"",
|
|
12
|
-
"Your default verdict is **fail**. The implementer was rewarded for finishing; you are rewarded for catching omission. Behave accordingly: prove the implementer wrong before you let the diff ship.",
|
|
13
|
-
"",
|
|
14
|
-
"You see ONLY:",
|
|
15
|
-
" • the tightened spec the implementer was given",
|
|
16
|
-
" • the acceptance criteria",
|
|
17
|
-
" • the diff (full post-change content of each changed file)",
|
|
18
|
-
" • accepted decisions whose scope overlaps the diff",
|
|
19
|
-
" • soft sensor findings from earlier mechanical checks",
|
|
20
|
-
"",
|
|
21
|
-
"You do NOT see:",
|
|
22
|
-
" • the implementer's reasoning, tool-use trace, prior turns",
|
|
23
|
-
" • test fixtures, console output, runtime logs",
|
|
24
|
-
"",
|
|
25
|
-
"**Categories of gap to look for** (set `category` to the matching slug):",
|
|
26
|
-
" - `deferred_but_claimed_done` — function/method body looks complete but a critical branch is missing, returns hard-coded data, or hands off to a non-existent helper.",
|
|
27
|
-
" - `missing_acceptance_criterion` — an acceptance bullet is not satisfied by the diff.",
|
|
28
|
-
" - `scope_leak` — diff touches paths the spec didn't ask for.",
|
|
29
|
-
" - `query_scope_omission` — a query/filter/route/auth predicate is missing a scoping field the spec or decisions demand (e.g. user_id, organization_id, deleted_at IS NULL).",
|
|
30
|
-
" - `decision_contradiction` — diff violates an accepted decision in scope, beyond what the assertion sensor already caught.",
|
|
31
|
-
" - `unhandled_error` — error path silently swallowed, returns wrong type, or rethrows generic.",
|
|
32
|
-
" - `fake_thoroughness` — code looks load-bearing but does nothing meaningful (empty interfaces, decorators with no effect, redundant guards).",
|
|
33
|
-
" - `documentation_drift` — code change requires a doc/contract update that didn't happen.",
|
|
34
|
-
" - `security_concern` — input not validated, secret in code, auth omitted, etc.",
|
|
35
|
-
" - `other` — use sparingly; prefer naming a more specific category.",
|
|
36
|
-
"",
|
|
37
|
-
"For each gap, set `severity`:",
|
|
38
|
-
" - `hard` — must be fixed before this diff can ship. Choose hard for any acceptance miss, scope leak, decision contradiction, or query-scope omission.",
|
|
39
|
-
" - `soft` — should be flagged for the operator at UAT but does not gate the commit. Choose soft for stylistic concerns, naming inconsistencies, or doc-drift that isn't load-bearing.",
|
|
40
|
-
"",
|
|
41
|
-
"**Verdict rules** — set `verdict = pass` ONLY when ALL three are true:",
|
|
42
|
-
" 1. zero `hard` gaps",
|
|
43
|
-
" 2. you would yourself ship this commit to production",
|
|
44
|
-
" 3. every acceptance criterion is observably satisfied by the diff",
|
|
45
|
-
"Otherwise set `verdict = fail`.",
|
|
46
|
-
"",
|
|
47
|
-
"**Confidence signal** —",
|
|
48
|
-
" - `high` — you've inspected every changed file and every acceptance criterion is mechanically verifiable from the diff content.",
|
|
49
|
-
" - `medium` — diff is large or mostly comprehensible, but some acceptance criteria need runtime verification (UAT) you can't perform from text alone.",
|
|
50
|
-
" - `low` — diff is sparse, ambiguous, or appears to elide structural changes you can't see from the changed files.",
|
|
51
|
-
"",
|
|
52
|
-
"Return ONLY the JSON object. No preamble, no apology, no markdown wrapper.",
|
|
53
|
-
].join("\n");
|
|
54
|
-
export function buildReviewerUserPrompt(input) {
|
|
55
|
-
const parts = [];
|
|
56
|
-
parts.push("# Tightened spec");
|
|
57
|
-
parts.push("");
|
|
58
|
-
parts.push(input.tightened_spec.trim());
|
|
59
|
-
if (input.acceptance_criteria.length > 0) {
|
|
60
|
-
parts.push("");
|
|
61
|
-
parts.push("# Acceptance criteria");
|
|
62
|
-
parts.push("");
|
|
63
|
-
for (const a of input.acceptance_criteria)
|
|
64
|
-
parts.push(`- ${a}`);
|
|
65
|
-
}
|
|
66
|
-
if (input.decisions_in_scope.length > 0) {
|
|
67
|
-
parts.push("");
|
|
68
|
-
parts.push("# Decisions in scope");
|
|
69
|
-
parts.push("");
|
|
70
|
-
parts.push("Each accepted decision binds the implementer. Treat any contradiction as a hard `decision_contradiction` gap.");
|
|
71
|
-
parts.push("");
|
|
72
|
-
for (const d of input.decisions_in_scope) {
|
|
73
|
-
parts.push(`## ${d.id} — ${d.title}`);
|
|
74
|
-
const scope = (d.scope_globs ?? []).join(", ");
|
|
75
|
-
if (scope.length > 0)
|
|
76
|
-
parts.push(`Scope: ${scope}`);
|
|
77
|
-
const assertions = d.assertions ?? [];
|
|
78
|
-
if (assertions.length > 0) {
|
|
79
|
-
parts.push("Assertions:");
|
|
80
|
-
for (const a of assertions) {
|
|
81
|
-
parts.push(` - ${a.id} (${a.kind})`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
parts.push("");
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
if (input.soft_findings.length > 0) {
|
|
88
|
-
parts.push("# Soft sensor findings");
|
|
89
|
-
parts.push("");
|
|
90
|
-
parts.push("These were flagged by mechanical sensors but did not gate the run. Treat them as hints; don't double-count them as gaps unless you find independent evidence.");
|
|
91
|
-
parts.push("");
|
|
92
|
-
for (const f of input.soft_findings.slice(0, 50)) {
|
|
93
|
-
const where = f.path ? ` [${f.path}${f.line ? `:${f.line}` : ""}]` : "";
|
|
94
|
-
parts.push(`- ${f.sensor_id}${where} — ${f.message}`);
|
|
95
|
-
}
|
|
96
|
-
parts.push("");
|
|
97
|
-
}
|
|
98
|
-
parts.push("# Diff");
|
|
99
|
-
parts.push("");
|
|
100
|
-
parts.push("Each section below is one changed file. Read every byte. Trace the spec's acceptance criteria through the code. If you see something that doesn't add up — empty body, hard-coded value, missing branch — name it.");
|
|
101
|
-
parts.push("");
|
|
102
|
-
for (const entry of input.diff) {
|
|
103
|
-
if (entry.status === "deleted") {
|
|
104
|
-
parts.push(`## ${entry.path} — DELETED`);
|
|
105
|
-
parts.push("");
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
108
|
-
parts.push(`## ${entry.path} — ${entry.status}`);
|
|
109
|
-
if (entry.fromPath !== undefined)
|
|
110
|
-
parts.push(`(renamed from ${entry.fromPath})`);
|
|
111
|
-
parts.push("");
|
|
112
|
-
parts.push("```");
|
|
113
|
-
parts.push((entry.afterContent ?? "").slice(0, 32_000));
|
|
114
|
-
parts.push("```");
|
|
115
|
-
parts.push("");
|
|
116
|
-
}
|
|
117
|
-
if (input.is_high_stakes) {
|
|
118
|
-
parts.push("# High-stakes augmentation (per Codex audit Q1)");
|
|
119
|
-
parts.push("");
|
|
120
|
-
parts.push("This diff touches paths classified as high-stakes. Beyond the standard review, perform an EXPLICIT query-scope completeness check:");
|
|
121
|
-
parts.push("");
|
|
122
|
-
parts.push(" • For every `WHERE`, ORM filter, route handler, and authorization predicate in the diff, list the scoping fields the spec or decisions demand (e.g. `organizationId AND userId AND deleted_at IS NULL`).");
|
|
123
|
-
parts.push(" • Match each call site against that demand. Any call site that omits a required scoping field is a hard `query_scope_omission` gap.");
|
|
124
|
-
parts.push(" • A request from user/org B against a resource owned by user/org A must return the spec's denial response — verify the filter chain enforces this.");
|
|
125
|
-
parts.push("");
|
|
126
|
-
}
|
|
127
|
-
parts.push("---");
|
|
128
|
-
parts.push("");
|
|
129
|
-
parts.push("Now return the JSON object per the schema. Default verdict = fail. Pass only if the diff is something you would ship yourself.");
|
|
130
|
-
return parts.join("\n");
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=prompt.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/reviewer/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Format reviewer findings as an agent-prompt-shaped retry context.
|
|
3
|
-
*
|
|
4
|
-
* Reviewer remediation is structurally similar to sensor remediation
|
|
5
|
-
* (Phase 9) — we surface concrete gaps with path/symbol/category and the
|
|
6
|
-
* implementer turns that into a fix on the next attempt. Different file
|
|
7
|
-
* because the framing is different: sensors point at mechanical patterns,
|
|
8
|
-
* the reviewer points at semantic gaps.
|
|
9
|
-
*/
|
|
10
|
-
import type { ReviewerOutput } from "./types.js";
|
|
11
|
-
export interface ReviewerRemediationOptions {
|
|
12
|
-
attempt: number;
|
|
13
|
-
maxAttempts: number;
|
|
14
|
-
}
|
|
15
|
-
export declare function formatReviewerRemediation(output: ReviewerOutput, opts: ReviewerRemediationOptions): string;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Format reviewer findings as an agent-prompt-shaped retry context.
|
|
3
|
-
*
|
|
4
|
-
* Reviewer remediation is structurally similar to sensor remediation
|
|
5
|
-
* (Phase 9) — we surface concrete gaps with path/symbol/category and the
|
|
6
|
-
* implementer turns that into a fix on the next attempt. Different file
|
|
7
|
-
* because the framing is different: sensors point at mechanical patterns,
|
|
8
|
-
* the reviewer points at semantic gaps.
|
|
9
|
-
*/
|
|
10
|
-
export function formatReviewerRemediation(output, opts) {
|
|
11
|
-
if (output.verdict === "pass" && output.gaps.every((g) => g.severity !== "hard")) {
|
|
12
|
-
return "";
|
|
13
|
-
}
|
|
14
|
-
const lines = [];
|
|
15
|
-
const hard = output.gaps.filter((g) => g.severity === "hard");
|
|
16
|
-
const soft = output.gaps.filter((g) => g.severity === "soft");
|
|
17
|
-
lines.push("## Reviewer subagent rejected the diff");
|
|
18
|
-
lines.push("");
|
|
19
|
-
lines.push(`A fresh reviewer reviewed your diff against the tightened spec and decisions in scope, with no visibility into your reasoning. It returned **verdict: ${output.verdict}** with ${hard.length} hard gap(s) and ${soft.length} soft gap(s). This is retry attempt ${opts.attempt} of ${opts.maxAttempts}.`);
|
|
20
|
-
lines.push("");
|
|
21
|
-
lines.push(`> Reviewer summary: ${output.summary}`);
|
|
22
|
-
lines.push("");
|
|
23
|
-
if (hard.length > 0) {
|
|
24
|
-
lines.push("### Hard gaps (must fix)");
|
|
25
|
-
lines.push("");
|
|
26
|
-
for (const g of hard) {
|
|
27
|
-
const where = [];
|
|
28
|
-
if (g.path)
|
|
29
|
-
where.push(g.path);
|
|
30
|
-
if (g.symbol)
|
|
31
|
-
where.push(`symbol=${g.symbol}`);
|
|
32
|
-
const head = where.length > 0 ? `[${where.join(" • ")}] ` : "";
|
|
33
|
-
lines.push(`- **${g.category}** ${head}— ${g.description}`);
|
|
34
|
-
}
|
|
35
|
-
lines.push("");
|
|
36
|
-
}
|
|
37
|
-
if (soft.length > 0) {
|
|
38
|
-
lines.push("### Soft gaps (advisory)");
|
|
39
|
-
lines.push("");
|
|
40
|
-
lines.push("These do not gate the commit but the reviewer flagged them for your awareness:");
|
|
41
|
-
lines.push("");
|
|
42
|
-
for (const g of soft) {
|
|
43
|
-
const where = [];
|
|
44
|
-
if (g.path)
|
|
45
|
-
where.push(g.path);
|
|
46
|
-
if (g.symbol)
|
|
47
|
-
where.push(`symbol=${g.symbol}`);
|
|
48
|
-
const head = where.length > 0 ? `[${where.join(" • ")}] ` : "";
|
|
49
|
-
lines.push(`- ${g.category} ${head}— ${g.description}`);
|
|
50
|
-
}
|
|
51
|
-
lines.push("");
|
|
52
|
-
}
|
|
53
|
-
lines.push("## What to do");
|
|
54
|
-
lines.push("");
|
|
55
|
-
lines.push("1. Address each hard gap concretely. Do not paper over them with comments — fix the underlying issue.");
|
|
56
|
-
lines.push("2. Re-emit your `attestation:` YAML block at the END of your reply with corrected counts.");
|
|
57
|
-
lines.push("3. If a gap is genuinely impossible to satisfy (e.g. it would contradict an accepted decision), emit a `blocked_by:` block instead of a partial diff.");
|
|
58
|
-
lines.push("");
|
|
59
|
-
return lines.join("\n");
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=remediation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remediation.js","sourceRoot":"","sources":["../../src/reviewer/remediation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reviewer subagent runner — Phase 10.
|
|
3
|
-
*
|
|
4
|
-
* Single Tier-N call (matching the implementer's tier per L15) via the
|
|
5
|
-
* `claude` subprocess. Output is gated by `--json-schema`; we read it
|
|
6
|
-
* from `structured_output` in the envelope.
|
|
7
|
-
*/
|
|
8
|
-
import type { ReviewerInput, ReviewerResult } from "./types.js";
|
|
9
|
-
export declare function runReviewer(input: ReviewerInput): Promise<ReviewerResult>;
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reviewer subagent runner — Phase 10.
|
|
3
|
-
*
|
|
4
|
-
* Single Tier-N call (matching the implementer's tier per L15) via the
|
|
5
|
-
* `claude` subprocess. Output is gated by `--json-schema`; we read it
|
|
6
|
-
* from `structured_output` in the envelope.
|
|
7
|
-
*/
|
|
8
|
-
import { runClaude } from "../claude/index.js";
|
|
9
|
-
import { logger } from "../logger.js";
|
|
10
|
-
import { buildReviewerUserPrompt, REVIEWER_SYSTEM_PROMPT } from "./prompt.js";
|
|
11
|
-
import { REVIEWER_OUTPUT_SCHEMA } from "./schema.js";
|
|
12
|
-
const log = logger("reviewer");
|
|
13
|
-
function isOutput(value) {
|
|
14
|
-
if (typeof value !== "object" || value === null)
|
|
15
|
-
return false;
|
|
16
|
-
const v = value;
|
|
17
|
-
if (v["verdict"] !== "pass" && v["verdict"] !== "fail")
|
|
18
|
-
return false;
|
|
19
|
-
if (!Array.isArray(v["gaps"]))
|
|
20
|
-
return false;
|
|
21
|
-
for (const g of v["gaps"]) {
|
|
22
|
-
if (typeof g !== "object" || g === null)
|
|
23
|
-
return false;
|
|
24
|
-
const gg = g;
|
|
25
|
-
if (typeof gg["category"] !== "string")
|
|
26
|
-
return false;
|
|
27
|
-
if (typeof gg["description"] !== "string")
|
|
28
|
-
return false;
|
|
29
|
-
if (gg["severity"] !== "hard" && gg["severity"] !== "soft")
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
if (v["confidence_signal"] !== "high" &&
|
|
33
|
-
v["confidence_signal"] !== "medium" &&
|
|
34
|
-
v["confidence_signal"] !== "low") {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
if (typeof v["summary"] !== "string")
|
|
38
|
-
return false;
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
export async function runReviewer(input) {
|
|
42
|
-
const userPrompt = buildReviewerUserPrompt(input);
|
|
43
|
-
log.info({
|
|
44
|
-
tier: input.tier,
|
|
45
|
-
diff_files: input.diff.length,
|
|
46
|
-
decisions: input.decisions_in_scope.length,
|
|
47
|
-
soft_findings: input.soft_findings.length,
|
|
48
|
-
high_stakes: input.is_high_stakes,
|
|
49
|
-
}, "reviewer dispatch");
|
|
50
|
-
const result = await runClaude({
|
|
51
|
-
tier: input.tier,
|
|
52
|
-
prompt: userPrompt,
|
|
53
|
-
system: REVIEWER_SYSTEM_PROMPT,
|
|
54
|
-
jsonSchema: REVIEWER_OUTPUT_SCHEMA,
|
|
55
|
-
timeoutMs: input.timeout_ms ?? 300_000,
|
|
56
|
-
});
|
|
57
|
-
if (!isOutput(result.parsed)) {
|
|
58
|
-
throw new Error(`reviewer returned malformed output. preview: ${result.text.slice(0, 200)}`);
|
|
59
|
-
}
|
|
60
|
-
const output = result.parsed;
|
|
61
|
-
const hardGaps = output.gaps.filter((g) => g.severity === "hard");
|
|
62
|
-
const ok = output.verdict === "pass" && hardGaps.length === 0;
|
|
63
|
-
log.info({
|
|
64
|
-
verdict: output.verdict,
|
|
65
|
-
gap_count: output.gaps.length,
|
|
66
|
-
hard_gaps: hardGaps.length,
|
|
67
|
-
confidence: output.confidence_signal,
|
|
68
|
-
duration_ms: result.durationMs,
|
|
69
|
-
}, "reviewer complete");
|
|
70
|
-
return {
|
|
71
|
-
output,
|
|
72
|
-
tier: input.tier,
|
|
73
|
-
ok,
|
|
74
|
-
duration_ms: result.durationMs,
|
|
75
|
-
...(result.usage !== undefined
|
|
76
|
-
? {
|
|
77
|
-
usage: {
|
|
78
|
-
...(result.usage["input_tokens"] !== undefined
|
|
79
|
-
? { input_tokens: result.usage["input_tokens"] }
|
|
80
|
-
: {}),
|
|
81
|
-
...(result.usage["output_tokens"] !== undefined
|
|
82
|
-
? { output_tokens: result.usage["output_tokens"] }
|
|
83
|
-
: {}),
|
|
84
|
-
},
|
|
85
|
-
}
|
|
86
|
-
: {}),
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=reviewer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../../src/reviewer/reviewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JSON Schema enforced by `claude --json-schema` for the reviewer output.
|
|
3
|
-
* Mirrors `ReviewerOutput` exactly. Keep in sync with types.ts.
|
|
4
|
-
*/
|
|
5
|
-
export declare const REVIEWER_OUTPUT_SCHEMA: {
|
|
6
|
-
readonly type: "object";
|
|
7
|
-
readonly additionalProperties: false;
|
|
8
|
-
readonly properties: {
|
|
9
|
-
readonly verdict: {
|
|
10
|
-
readonly enum: readonly ["pass", "fail"];
|
|
11
|
-
};
|
|
12
|
-
readonly gaps: {
|
|
13
|
-
readonly type: "array";
|
|
14
|
-
readonly items: {
|
|
15
|
-
readonly type: "object";
|
|
16
|
-
readonly additionalProperties: false;
|
|
17
|
-
readonly properties: {
|
|
18
|
-
readonly category: {
|
|
19
|
-
readonly enum: readonly ["deferred_but_claimed_done", "missing_acceptance_criterion", "scope_leak", "query_scope_omission", "decision_contradiction", "unhandled_error", "fake_thoroughness", "documentation_drift", "security_concern", "other"];
|
|
20
|
-
};
|
|
21
|
-
readonly description: {
|
|
22
|
-
readonly type: "string";
|
|
23
|
-
};
|
|
24
|
-
readonly path: {
|
|
25
|
-
readonly type: "string";
|
|
26
|
-
};
|
|
27
|
-
readonly symbol: {
|
|
28
|
-
readonly type: "string";
|
|
29
|
-
};
|
|
30
|
-
readonly severity: {
|
|
31
|
-
readonly enum: readonly ["hard", "soft"];
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
readonly required: readonly ["category", "description", "severity"];
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
readonly confidence_signal: {
|
|
38
|
-
readonly enum: readonly ["high", "medium", "low"];
|
|
39
|
-
};
|
|
40
|
-
readonly summary: {
|
|
41
|
-
readonly type: "string";
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
readonly required: readonly ["verdict", "gaps", "confidence_signal", "summary"];
|
|
45
|
-
};
|
package/dist/reviewer/schema.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JSON Schema enforced by `claude --json-schema` for the reviewer output.
|
|
3
|
-
* Mirrors `ReviewerOutput` exactly. Keep in sync with types.ts.
|
|
4
|
-
*/
|
|
5
|
-
export const REVIEWER_OUTPUT_SCHEMA = {
|
|
6
|
-
type: "object",
|
|
7
|
-
additionalProperties: false,
|
|
8
|
-
properties: {
|
|
9
|
-
verdict: { enum: ["pass", "fail"] },
|
|
10
|
-
gaps: {
|
|
11
|
-
type: "array",
|
|
12
|
-
items: {
|
|
13
|
-
type: "object",
|
|
14
|
-
additionalProperties: false,
|
|
15
|
-
properties: {
|
|
16
|
-
category: {
|
|
17
|
-
enum: [
|
|
18
|
-
"deferred_but_claimed_done",
|
|
19
|
-
"missing_acceptance_criterion",
|
|
20
|
-
"scope_leak",
|
|
21
|
-
"query_scope_omission",
|
|
22
|
-
"decision_contradiction",
|
|
23
|
-
"unhandled_error",
|
|
24
|
-
"fake_thoroughness",
|
|
25
|
-
"documentation_drift",
|
|
26
|
-
"security_concern",
|
|
27
|
-
"other",
|
|
28
|
-
],
|
|
29
|
-
},
|
|
30
|
-
description: { type: "string" },
|
|
31
|
-
path: { type: "string" },
|
|
32
|
-
symbol: { type: "string" },
|
|
33
|
-
severity: { enum: ["hard", "soft"] },
|
|
34
|
-
},
|
|
35
|
-
required: ["category", "description", "severity"],
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
confidence_signal: { enum: ["high", "medium", "low"] },
|
|
39
|
-
summary: { type: "string" },
|
|
40
|
-
},
|
|
41
|
-
required: ["verdict", "gaps", "confidence_signal", "summary"],
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/reviewer/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;QACnC,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACV,QAAQ,EAAE;wBACR,IAAI,EAAE;4BACJ,2BAA2B;4BAC3B,8BAA8B;4BAC9B,YAAY;4BACZ,sBAAsB;4BACtB,wBAAwB;4BACxB,iBAAiB;4BACjB,mBAAmB;4BACnB,qBAAqB;4BACrB,kBAAkB;4BAClB,OAAO;yBACR;qBACF;oBACD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;iBACrC;gBACD,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC;aAClD;SACF;QACD,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;QACtD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC5B;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,SAAS,CAAC;CACrD,CAAC"}
|