@isaacriehm/cairn-core 0.2.0 → 0.3.1
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/claude/runner.d.ts +1 -1
- package/dist/claude/runner.js +62 -1
- package/dist/claude/runner.js.map +1 -1
- package/dist/claude/types.d.ts +14 -7
- package/dist/claude/types.js +5 -7
- package/dist/claude/types.js.map +1 -1
- package/dist/context/index.d.ts +4 -4
- package/dist/context/index.js +3 -4
- package/dist/context/index.js.map +1 -1
- package/dist/context/spec-delta.js +2 -3
- package/dist/context/spec-delta.js.map +1 -1
- package/dist/context/task-summary.d.ts +18 -0
- package/dist/context/task-summary.js +89 -0
- package/dist/context/task-summary.js.map +1 -0
- package/dist/decision-capture/id.d.ts +21 -4
- package/dist/decision-capture/id.js +56 -5
- package/dist/decision-capture/id.js.map +1 -1
- package/dist/decision-capture/index.d.ts +7 -22
- package/dist/decision-capture/index.js +7 -17
- package/dist/decision-capture/index.js.map +1 -1
- package/dist/doctor/index.d.ts +1 -1
- package/dist/doctor/index.js +1 -1
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.js +1 -1
- package/dist/events/writer.d.ts +1 -1
- package/dist/events/writer.js +1 -1
- package/dist/gc/canary.d.ts +13 -23
- package/dist/gc/canary.js +36 -92
- package/dist/gc/canary.js.map +1 -1
- package/dist/gc/citation-integrity.d.ts +6 -6
- package/dist/gc/citation-integrity.js +64 -20
- package/dist/gc/citation-integrity.js.map +1 -1
- package/dist/gc/frontmatter.js +1 -1
- package/dist/gc/generator-drift.js +1 -1
- package/dist/gc/generator-drift.js.map +1 -1
- package/dist/gc/index.d.ts +2 -2
- package/dist/gc/index.js +1 -1
- package/dist/gc/index.js.map +1 -1
- package/dist/gc/quality-update.js +1 -1
- package/dist/gc/quality-update.js.map +1 -1
- package/dist/gc/types.d.ts +1 -30
- package/dist/ground/index.d.ts +2 -2
- package/dist/ground/index.js +1 -1
- package/dist/ground/index.js.map +1 -1
- package/dist/ground/ledgers.d.ts +0 -4
- package/dist/ground/ledgers.js +10 -8
- package/dist/ground/ledgers.js.map +1 -1
- package/dist/ground/manifest.js +0 -2
- package/dist/ground/manifest.js.map +1 -1
- package/dist/ground/quality-grades.js +3 -1
- package/dist/ground/quality-grades.js.map +1 -1
- package/dist/ground/schemas.d.ts +2 -7
- package/dist/ground/schemas.js +7 -2
- package/dist/ground/schemas.js.map +1 -1
- package/dist/ground/scope-index.d.ts +59 -12
- package/dist/ground/scope-index.js +212 -43
- package/dist/ground/scope-index.js.map +1 -1
- package/dist/hooks/bypass-detection.js +4 -2
- package/dist/hooks/bypass-detection.js.map +1 -1
- package/dist/hooks/post-tool-use/citation-scanner.d.ts +7 -5
- package/dist/hooks/post-tool-use/citation-scanner.js +15 -9
- package/dist/hooks/post-tool-use/citation-scanner.js.map +1 -1
- package/dist/hooks/post-tool-use/copy-scanner.js +1 -1
- package/dist/hooks/post-tool-use/copy-scanner.js.map +1 -1
- package/dist/hooks/post-tool-use/ledger-cache.d.ts +8 -0
- package/dist/hooks/post-tool-use/ledger-cache.js +53 -0
- package/dist/hooks/post-tool-use/ledger-cache.js.map +1 -1
- package/dist/hooks/post-tool-use/legend-builder.d.ts +3 -3
- package/dist/hooks/post-tool-use/legend-builder.js +30 -8
- package/dist/hooks/post-tool-use/legend-builder.js.map +1 -1
- package/dist/hooks/post-tool-use/read-enricher.d.ts +1 -1
- package/dist/hooks/post-tool-use/read-enricher.js +68 -21
- package/dist/hooks/post-tool-use/read-enricher.js.map +1 -1
- package/dist/hooks/post-tool-use/write-guardian.js +148 -18
- package/dist/hooks/post-tool-use/write-guardian.js.map +1 -1
- package/dist/hooks/runners/index.d.ts +1 -0
- package/dist/hooks/runners/index.js +1 -0
- package/dist/hooks/runners/index.js.map +1 -1
- package/dist/hooks/runners/payload.d.ts +1 -1
- package/dist/hooks/runners/payload.js +27 -12
- package/dist/hooks/runners/payload.js.map +1 -1
- package/dist/hooks/runners/session-start.js +212 -66
- package/dist/hooks/runners/session-start.js.map +1 -1
- package/dist/hooks/runners/stop.d.ts +9 -12
- package/dist/hooks/runners/stop.js +67 -36
- package/dist/hooks/runners/stop.js.map +1 -1
- package/dist/hooks/runners/user-prompt-submit.d.ts +15 -0
- package/dist/hooks/runners/user-prompt-submit.js +149 -0
- package/dist/hooks/runners/user-prompt-submit.js.map +1 -0
- package/dist/hooks/user-prompt-submit.d.ts +7 -0
- package/dist/hooks/user-prompt-submit.js +12 -0
- package/dist/hooks/user-prompt-submit.js.map +1 -0
- package/dist/index.d.ts +1 -6
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/init/baseline-audit.d.ts +5 -1
- package/dist/init/baseline-audit.js +25 -2
- package/dist/init/baseline-audit.js.map +1 -1
- package/dist/init/glob-inference.d.ts +16 -0
- package/dist/init/glob-inference.js +108 -0
- package/dist/init/glob-inference.js.map +1 -0
- package/dist/init/index.d.ts +2 -0
- package/dist/init/index.js +1 -0
- package/dist/init/index.js.map +1 -1
- package/dist/init/ingest-docs.d.ts +1 -1
- package/dist/init/ingest-docs.js +19 -6
- package/dist/init/ingest-docs.js.map +1 -1
- package/dist/init/init.js +12 -7
- package/dist/init/init.js.map +1 -1
- package/dist/init/mapper-merge.d.ts +8 -2
- package/dist/init/mapper-merge.js +50 -32
- package/dist/init/mapper-merge.js.map +1 -1
- package/dist/init/mapper-parallel.d.ts +2 -3
- package/dist/init/mapper-parallel.js +9 -38
- package/dist/init/mapper-parallel.js.map +1 -1
- package/dist/init/mapper-prompts.js +1 -1
- package/dist/init/mapper-prompts.js.map +1 -1
- package/dist/init/mapper.d.ts +6 -127
- package/dist/init/mapper.js +30 -7
- package/dist/init/mapper.js.map +1 -1
- package/dist/init/module-slicer.d.ts +1 -1
- package/dist/init/module-slicer.js +1 -1
- package/dist/init/multi-dev/install.d.ts +5 -11
- package/dist/init/multi-dev/install.js +4 -6
- package/dist/init/multi-dev/install.js.map +1 -1
- package/dist/init/overlay.d.ts +2 -2
- package/dist/init/overlay.js +1 -1
- package/dist/init/overlay.js.map +1 -1
- package/dist/init/phases/10-strip.js +1 -2
- package/dist/init/phases/10-strip.js.map +1 -1
- package/dist/init/phases/12-multidev.d.ts +1 -6
- package/dist/init/phases/12-multidev.js +1 -6
- package/dist/init/phases/12-multidev.js.map +1 -1
- package/dist/init/phases/3b-seed.d.ts +1 -10
- package/dist/init/phases/3b-seed.js +1 -10
- package/dist/init/phases/3b-seed.js.map +1 -1
- package/dist/init/phases/4-pilot.js +53 -15
- package/dist/init/phases/4-pilot.js.map +1 -1
- package/dist/init/phases/5-brand.js +10 -10
- package/dist/init/phases/5-brand.js.map +1 -1
- package/dist/init/prompts.d.ts +6 -8
- package/dist/init/prompts.js +3 -6
- package/dist/init/prompts.js.map +1 -1
- package/dist/init/rules-merge/ingest.js +1 -1
- package/dist/init/source-comments/classify.d.ts +1 -41
- package/dist/init/source-comments/classify.js +68 -37
- package/dist/init/source-comments/classify.js.map +1 -1
- package/dist/init/source-comments/index.d.ts +2 -2
- package/dist/init/source-comments/index.js +2 -2
- package/dist/init/source-comments/index.js.map +1 -1
- package/dist/init/source-comments/ingest.d.ts +38 -2
- package/dist/init/source-comments/ingest.js +237 -4
- package/dist/init/source-comments/ingest.js.map +1 -1
- package/dist/init/source-comments/strip-replace.d.ts +10 -19
- package/dist/init/source-comments/strip-replace.js +26 -2
- package/dist/init/source-comments/strip-replace.js.map +1 -1
- package/dist/init/source-comments/walker.d.ts +9 -2
- package/dist/init/source-comments/walker.js +38 -19
- package/dist/init/source-comments/walker.js.map +1 -1
- package/dist/init/submodules.d.ts +3 -2
- package/dist/init/types.d.ts +3 -5
- package/dist/init/types.js +3 -5
- package/dist/init/types.js.map +1 -1
- package/dist/init/visual.d.ts +4 -9
- package/dist/init/visual.js +1 -16
- package/dist/init/visual.js.map +1 -1
- package/dist/logger.d.ts +0 -1
- package/dist/logger.js +0 -1
- package/dist/logger.js.map +1 -1
- package/dist/mcp/context.d.ts +2 -3
- package/dist/mcp/context.js.map +1 -1
- package/dist/mcp/errors.d.ts +1 -1
- package/dist/mcp/errors.js.map +1 -1
- package/dist/mcp/history/prompt.d.ts +2 -1
- package/dist/mcp/history/walker.js +1 -1
- package/dist/mcp/history/walker.js.map +1 -1
- package/dist/mcp/path-allowlist.d.ts +0 -6
- package/dist/mcp/path-allowlist.js +0 -10
- package/dist/mcp/path-allowlist.js.map +1 -1
- package/dist/mcp/schemas.d.ts +15 -72
- package/dist/mcp/schemas.js +21 -70
- package/dist/mcp/schemas.js.map +1 -1
- package/dist/mcp/serve.d.ts +1 -1
- package/dist/mcp/serve.js +2 -5
- package/dist/mcp/serve.js.map +1 -1
- package/dist/mcp/server.js +10 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/telemetry.d.ts +8 -1
- package/dist/mcp/telemetry.js +16 -0
- package/dist/mcp/telemetry.js.map +1 -1
- package/dist/mcp/tools/decision-get.js +37 -29
- package/dist/mcp/tools/decision-get.js.map +1 -1
- package/dist/mcp/tools/decisions-in-scope.js +22 -3
- package/dist/mcp/tools/decisions-in-scope.js.map +1 -1
- package/dist/mcp/tools/index.js +2 -2
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/invariant-get.js +1 -1
- package/dist/mcp/tools/invariant-get.js.map +1 -1
- package/dist/mcp/tools/invariants-in-scope.js +26 -7
- package/dist/mcp/tools/invariants-in-scope.js.map +1 -1
- package/dist/mcp/tools/query-history.js +3 -3
- package/dist/mcp/tools/query-history.js.map +1 -1
- package/dist/mcp/tools/resolve-attention.d.ts +3 -3
- package/dist/mcp/tools/resolve-attention.js +40 -28
- package/dist/mcp/tools/resolve-attention.js.map +1 -1
- package/dist/mcp/tools/search.js +3 -4
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/mcp/tools/task-create.d.ts +15 -0
- package/dist/mcp/tools/task-create.js +96 -0
- package/dist/mcp/tools/task-create.js.map +1 -0
- package/dist/mcp/tools/timeline.js +3 -7
- package/dist/mcp/tools/timeline.js.map +1 -1
- package/dist/profiles/types.d.ts +1 -1
- package/dist/profiles/types.js +1 -1
- package/dist/session/id.d.ts +1 -3
- package/dist/session/id.js +1 -1
- package/dist/session/id.js.map +1 -1
- package/dist/session-start/build.d.ts +12 -14
- package/dist/session-start/build.js +68 -38
- package/dist/session-start/build.js.map +1 -1
- package/dist/session-start/index.d.ts +2 -2
- package/dist/session-start/index.js +2 -2
- package/dist/session-start/index.js.map +1 -1
- package/dist/session-start/templates.d.ts +20 -4
- package/dist/session-start/templates.js +45 -35
- package/dist/session-start/templates.js.map +1 -1
- package/dist/status-line/format.d.ts +19 -11
- package/dist/status-line/format.js +44 -36
- package/dist/status-line/format.js.map +1 -1
- package/dist/status-line/index.d.ts +3 -1
- package/dist/status-line/index.js +1 -1
- package/dist/status-line/index.js.map +1 -1
- package/dist/status-line/reader.d.ts +9 -6
- package/dist/status-line/reader.js +50 -15
- package/dist/status-line/reader.js.map +1 -1
- package/dist/status-line/writer.d.ts +5 -0
- package/dist/status-line/writer.js +9 -0
- package/dist/status-line/writer.js.map +1 -1
- package/dist/trace/index.d.ts +44 -0
- package/dist/trace/index.js +51 -0
- package/dist/trace/index.js.map +1 -0
- package/package.json +2 -3
- package/templates/.archive/README.md +3 -3
- package/templates/.cairn/config/sensors.yaml +16 -19
- package/templates/.cairn/config/stub-patterns.yaml +4 -4
- package/templates/.cairn/config/trust-policy.yaml +3 -35
- package/templates/.cairn/config/workflow.md +13 -194
- package/templates/.cairn/git-hooks/commit-msg +1 -1
- package/templates/.cairn/ground/canonical-map/topics.yaml +3 -26
- package/templates/.cairn/ground/capabilities/snippets.yaml +0 -1
- package/templates/.cairn/ground/manifest.yaml +5 -8
- package/templates/.cairn/ground/product/personas.yaml +0 -1
- package/templates/.github/workflows/cairn-check.yml +3 -5
- package/dist/context/checkpoint.d.ts +0 -11
- package/dist/context/checkpoint.js +0 -30
- package/dist/context/checkpoint.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/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-types.d.ts +0 -243
- package/dist/frontend-types.js +0 -15
- package/dist/frontend-types.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -14
- package/dist/hooks/index.js +0 -14
- package/dist/hooks/index.js.map +0 -1
- package/dist/inbox.d.ts +0 -17
- package/dist/inbox.js +0 -30
- package/dist/inbox.js.map +0 -1
- package/dist/mcp/tools/append-run-note.d.ts +0 -18
- package/dist/mcp/tools/append-run-note.js +0 -54
- package/dist/mcp/tools/append-run-note.js.map +0 -1
- package/dist/mcp/tools/append.d.ts +0 -8
- package/dist/mcp/tools/append.js +0 -37
- package/dist/mcp/tools/append.js.map +0 -1
- package/dist/mcp/tools/ask-operator.d.ts +0 -34
- package/dist/mcp/tools/ask-operator.js +0 -97
- package/dist/mcp/tools/ask-operator.js.map +0 -1
- package/dist/mcp/tools/drop-task.d.ts +0 -12
- package/dist/mcp/tools/drop-task.js +0 -68
- package/dist/mcp/tools/drop-task.js.map +0 -1
- package/dist/mcp/tools/record-run-event.d.ts +0 -10
- package/dist/mcp/tools/record-run-event.js +0 -32
- package/dist/mcp/tools/record-run-event.js.map +0 -1
- package/dist/prompt.d.ts +0 -19
- package/dist/prompt.js +0 -50
- package/dist/prompt.js.map +0 -1
- package/dist/tier0/classify.d.ts +0 -10
- package/dist/tier0/classify.js +0 -110
- package/dist/tier0/classify.js.map +0 -1
- package/dist/tier0/index.d.ts +0 -2
- package/dist/tier0/index.js +0 -2
- package/dist/tier0/index.js.map +0 -1
- package/dist/tier0/types.d.ts +0 -24
- package/dist/tier0/types.js +0 -9
- 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/templates/.claude/settings.json +0 -57
- package/templates/.mcp.json +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-index.js","sourceRoot":"","sources":["../../src/ground/scope-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"scope-index.js","sourceRoot":"","sources":["../../src/ground/scope-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,13 +41,15 @@ export function scanBypassedCommits(repoRoot) {
|
|
|
41
41
|
export function renderBypassHint(bypassed) {
|
|
42
42
|
const lines = [];
|
|
43
43
|
const noun = bypassed.length === 1 ? "commit" : "commits";
|
|
44
|
-
lines.push(
|
|
44
|
+
lines.push(`## Cairn — ${bypassed.length} ${noun} not attested`);
|
|
45
|
+
lines.push("");
|
|
46
|
+
lines.push("Likely a `--no-verify` commit or a missing per-clone bootstrap.");
|
|
45
47
|
lines.push("");
|
|
46
48
|
for (const c of bypassed) {
|
|
47
49
|
lines.push(`- \`${c.shortSha}\` — ${c.subject}`);
|
|
48
50
|
}
|
|
49
51
|
lines.push("");
|
|
50
|
-
lines.push("`
|
|
52
|
+
lines.push("Invoke the `cairn-attention` skill on the next turn so the operator can pick record bypass / acknowledge / defer through `AskUserQuestion`.");
|
|
51
53
|
return lines.join("\n");
|
|
52
54
|
}
|
|
53
55
|
/* -------------------------------------------------------------------------- */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bypass-detection.js","sourceRoot":"","sources":["../../src/hooks/bypass-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAgBjC,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,GAAG,GAAG,MAAM,CAAC;AAEnB,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IACnE,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IACnE,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,OAAO;QACL,QAAQ;QACR,SAAS,EAAE,MAAM,CAAC,MAAM;QACxB,kBAAkB,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAA0B;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,KAAK,CAAC,IAAI,CACR,
|
|
1
|
+
{"version":3,"file":"bypass-detection.js","sourceRoot":"","sources":["../../src/hooks/bypass-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAgBjC,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,GAAG,GAAG,MAAM,CAAC;AAEnB,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IACnE,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IACnE,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,OAAO;QACL,QAAQ;QACR,SAAS,EAAE,MAAM,CAAC,MAAM;QACxB,kBAAkB,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAA0B;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,KAAK,CAAC,IAAI,CACR,cAAc,QAAQ,CAAC,MAAM,IAAI,IAAI,eAAe,CACrD,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,iEAAiE,CAClE,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,6IAA6I,CAC9I,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAEhF,SAAS,cAAc,CAAC,QAAgB;IACtC,IAAI,CAAC;QACH,8DAA8D;QAC9D,kEAAkE;QAClE,mEAAmE;QACnE,uDAAuD;QACvD,MAAM,GAAG,GAAG,YAAY,CACtB,KAAK,EACL,CAAC,KAAK,EAAE,KAAK,aAAa,EAAE,EAAE,mBAAmB,CAAC,EAClD,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CACzE,CAAC;QACF,MAAM,MAAM,GAAqB,EAAE,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,KAAK,CAAC,CAAC;gBAAE,SAAS;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Scans the visible body of a Read tool's content for cairn citation
|
|
3
|
-
* patterns: §
|
|
4
|
-
* DEC-
|
|
3
|
+
* patterns: §INV invariants, §DEC decisions, and TODO(TSK-...) linked
|
|
4
|
+
* todos. Both `§INV-NNNN` and `§DEC-NNNN` are the canonical bare-symbol
|
|
5
|
+
* citation forms produced by the strip-replace phase and resolved by
|
|
6
|
+
* the read-enricher into the legend.
|
|
5
7
|
*
|
|
6
8
|
* Per READ_ENRICHER_SPEC §3 — line numbers in the legend should reflect
|
|
7
9
|
* the original source line, so when content is `cat -n`-prefixed
|
|
@@ -9,7 +11,7 @@
|
|
|
9
11
|
* number as the reported line. The body text itself is NEVER mutated.
|
|
10
12
|
*/
|
|
11
13
|
export interface CitationMatch {
|
|
12
|
-
/** Citation id, e.g. "
|
|
14
|
+
/** Citation id, e.g. "INV-0023" or "TSK-auth-refactor" or "DEC-0042". */
|
|
13
15
|
id: string;
|
|
14
16
|
/** 1-indexed line number from cat -n prefix, or iteration index. */
|
|
15
17
|
line: number;
|
|
@@ -17,7 +19,7 @@ export interface CitationMatch {
|
|
|
17
19
|
export interface ScannedCitations {
|
|
18
20
|
invariants: CitationMatch[];
|
|
19
21
|
todos: CitationMatch[];
|
|
20
|
-
/**
|
|
21
|
-
|
|
22
|
+
/** §DEC-NNNN citations resolved against the decisions ledger. */
|
|
23
|
+
decisions: CitationMatch[];
|
|
22
24
|
}
|
|
23
25
|
export declare function scanCitations(content: string): ScannedCitations;
|
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Scans the visible body of a Read tool's content for cairn citation
|
|
3
|
-
* patterns: §
|
|
4
|
-
* DEC-
|
|
3
|
+
* patterns: §INV invariants, §DEC decisions, and TODO(TSK-...) linked
|
|
4
|
+
* todos. Both `§INV-NNNN` and `§DEC-NNNN` are the canonical bare-symbol
|
|
5
|
+
* citation forms produced by the strip-replace phase and resolved by
|
|
6
|
+
* the read-enricher into the legend.
|
|
5
7
|
*
|
|
6
8
|
* Per READ_ENRICHER_SPEC §3 — line numbers in the legend should reflect
|
|
7
9
|
* the original source line, so when content is `cat -n`-prefixed
|
|
8
10
|
* (`<num>\t<line>`), strip the prefix for matching but use the prefix
|
|
9
11
|
* number as the reported line. The body text itself is NEVER mutated.
|
|
10
12
|
*/
|
|
11
|
-
const INVARIANT_RE = /§
|
|
13
|
+
const INVARIANT_RE = /§INV-(\d+)/g;
|
|
12
14
|
const TODO_RE = /TODO\(TSK-([^)]+)\)/g;
|
|
13
|
-
|
|
15
|
+
// Require `§` prefix so plain `DEC-NNNN` strings (URL fragments, prose
|
|
16
|
+
// citations in markdown bodies, GitHub-style refs) don't false-match.
|
|
17
|
+
// The strip-replace phase ALWAYS emits the `§` prefix on accepted
|
|
18
|
+
// decision tokens (per LENS_SPEC + CLAUDE.md "bare symbols only").
|
|
19
|
+
const DEC_RE = /§DEC-(\d+)/g;
|
|
14
20
|
const CAT_N_PREFIX_RE = /^(\d+)\t/;
|
|
15
21
|
export function scanCitations(content) {
|
|
16
22
|
const invariants = [];
|
|
17
23
|
const todos = [];
|
|
18
|
-
const
|
|
24
|
+
const decisions = [];
|
|
19
25
|
if (content.length === 0) {
|
|
20
|
-
return { invariants, todos,
|
|
26
|
+
return { invariants, todos, decisions };
|
|
21
27
|
}
|
|
22
28
|
const lines = content.split(/\r?\n/);
|
|
23
29
|
for (let i = 0; i < lines.length; i++) {
|
|
@@ -39,7 +45,7 @@ export function scanCitations(content) {
|
|
|
39
45
|
const digits = m[1];
|
|
40
46
|
if (digits === undefined)
|
|
41
47
|
continue;
|
|
42
|
-
invariants.push({ id: `
|
|
48
|
+
invariants.push({ id: `INV-${digits}`, line: lineNumber });
|
|
43
49
|
}
|
|
44
50
|
for (const m of lineText.matchAll(TODO_RE)) {
|
|
45
51
|
const tail = m[1];
|
|
@@ -51,9 +57,9 @@ export function scanCitations(content) {
|
|
|
51
57
|
const digits = m[1];
|
|
52
58
|
if (digits === undefined)
|
|
53
59
|
continue;
|
|
54
|
-
|
|
60
|
+
decisions.push({ id: `DEC-${digits}`, line: lineNumber });
|
|
55
61
|
}
|
|
56
62
|
}
|
|
57
|
-
return { invariants, todos,
|
|
63
|
+
return { invariants, todos, decisions };
|
|
58
64
|
}
|
|
59
65
|
//# sourceMappingURL=citation-scanner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"citation-scanner.js","sourceRoot":"","sources":["../../../src/hooks/post-tool-use/citation-scanner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"citation-scanner.js","sourceRoot":"","sources":["../../../src/hooks/post-tool-use/citation-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgBH,MAAM,YAAY,GAAG,aAAa,CAAC;AACnC,MAAM,OAAO,GAAG,sBAAsB,CAAC;AACvC,uEAAuE;AACvE,sEAAsE;AACtE,kEAAkE;AAClE,mEAAmE;AACnE,MAAM,MAAM,GAAG,aAAa,CAAC;AAC7B,MAAM,eAAe,GAAG,UAAU,CAAC;AAEnC,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,SAAS,GAAoB,EAAE,CAAC;IAEtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/C,IAAI,QAAgB,CAAC;QACrB,IAAI,UAAkB,CAAC;QACvB,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACtD,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3D,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,QAAQ,GAAG,GAAG,CAAC;QACjB,CAAC;QAED,uDAAuD;QACvD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAS;YACnC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS;YACjC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAS;YACnC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
const PATTERNS = [
|
|
18
18
|
{ regex: /\b(TODO|FIXME|HACK|XXX|TEMP|WIP)\b/g, label: "comment-marker" },
|
|
19
|
-
{ regex: /§
|
|
19
|
+
{ regex: /§INV-\d+/g, label: "cairn-citation-§INV" },
|
|
20
20
|
{ regex: /\bTSK-[a-z0-9-]+\b/g, label: "cairn-citation-TSK" },
|
|
21
21
|
{ regex: /\[(PLACEHOLDER|TODO|DRAFT)\]/g, label: "draft-marker" },
|
|
22
22
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-scanner.js","sourceRoot":"","sources":["../../../src/hooks/post-tool-use/copy-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,QAAQ,GAAoD;IAChE,EAAE,KAAK,EAAE,qCAAqC,EAAE,KAAK,EAAE,gBAAgB,EAAE;IACzE,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"copy-scanner.js","sourceRoot":"","sources":["../../../src/hooks/post-tool-use/copy-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,11 +13,19 @@ export interface LedgerSnapshot {
|
|
|
13
13
|
superseded_by?: string;
|
|
14
14
|
}>;
|
|
15
15
|
}
|
|
16
|
+
export interface DecisionsLedgerSnapshot {
|
|
17
|
+
decisionsByid: Map<string, {
|
|
18
|
+
title: string;
|
|
19
|
+
status: string;
|
|
20
|
+
superseded_by?: string;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
16
23
|
export interface TaskLookupResult {
|
|
17
24
|
found: "active" | "done" | "not_found";
|
|
18
25
|
title?: string;
|
|
19
26
|
}
|
|
20
27
|
export declare function getInvariantsLedger(repoRoot: string): LedgerSnapshot | null;
|
|
28
|
+
export declare function getDecisionsLedger(repoRoot: string): DecisionsLedgerSnapshot | null;
|
|
21
29
|
export declare function lookupTask(repoRoot: string, taskId: string): TaskLookupResult;
|
|
22
30
|
/**
|
|
23
31
|
* Cached scope-index reader. Content-keyed (sha256 of first 512 bytes) so
|
|
@@ -44,6 +44,7 @@ function hashFilePrefix(path, bytes) {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
let invariantsCache = null;
|
|
47
|
+
let decisionsCache = null;
|
|
47
48
|
let activeTasksCache = null;
|
|
48
49
|
let doneTasksCache = null;
|
|
49
50
|
let scopeIndexCache = null;
|
|
@@ -99,6 +100,58 @@ export function getInvariantsLedger(repoRoot) {
|
|
|
99
100
|
invariantsCache = { repoRoot, mtimeMs, snapshot };
|
|
100
101
|
return snapshot;
|
|
101
102
|
}
|
|
103
|
+
function decisionsLedgerFile(repoRoot) {
|
|
104
|
+
return join(repoRoot, ".cairn", "ground", "decisions", "decisions.ledger.yaml");
|
|
105
|
+
}
|
|
106
|
+
export function getDecisionsLedger(repoRoot) {
|
|
107
|
+
const path = decisionsLedgerFile(repoRoot);
|
|
108
|
+
if (!existsSync(path))
|
|
109
|
+
return null;
|
|
110
|
+
let mtimeMs;
|
|
111
|
+
try {
|
|
112
|
+
mtimeMs = statSync(path).mtimeMs;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
if (decisionsCache !== null &&
|
|
118
|
+
decisionsCache.repoRoot === repoRoot &&
|
|
119
|
+
decisionsCache.mtimeMs === mtimeMs) {
|
|
120
|
+
return decisionsCache.snapshot;
|
|
121
|
+
}
|
|
122
|
+
let parsed;
|
|
123
|
+
try {
|
|
124
|
+
parsed = parseYaml(readFileSync(path, "utf8"));
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
if (!Array.isArray(parsed))
|
|
130
|
+
return null;
|
|
131
|
+
const map = new Map();
|
|
132
|
+
for (const raw of parsed) {
|
|
133
|
+
if (typeof raw !== "object" || raw === null)
|
|
134
|
+
continue;
|
|
135
|
+
const r = raw;
|
|
136
|
+
const id = typeof r["id"] === "string" ? r["id"] : null;
|
|
137
|
+
const title = typeof r["title"] === "string" ? r["title"] : "";
|
|
138
|
+
const status = typeof r["status"] === "string" ? r["status"] : "accepted";
|
|
139
|
+
const supersededByRaw = r["superseded_by"];
|
|
140
|
+
const supersededBy = typeof supersededByRaw === "string" && supersededByRaw.length > 0
|
|
141
|
+
? supersededByRaw
|
|
142
|
+
: undefined;
|
|
143
|
+
if (id === null)
|
|
144
|
+
continue;
|
|
145
|
+
map.set(id, {
|
|
146
|
+
title,
|
|
147
|
+
status,
|
|
148
|
+
...(supersededBy !== undefined ? { superseded_by: supersededBy } : {}),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
const snapshot = { decisionsByid: map };
|
|
152
|
+
decisionsCache = { repoRoot, mtimeMs, snapshot };
|
|
153
|
+
return snapshot;
|
|
154
|
+
}
|
|
102
155
|
function tasksScopeDir(repoRoot, scope) {
|
|
103
156
|
return join(repoRoot, ".cairn", "tasks", scope);
|
|
104
157
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger-cache.js","sourceRoot":"","sources":["../../../src/hooks/post-tool-use/ledger-cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EACL,WAAW,EACX,cAAc,EACd,cAAc,GAGf,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"ledger-cache.js","sourceRoot":"","sources":["../../../src/hooks/post-tool-use/ledger-cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EACL,WAAW,EACX,cAAc,EACd,cAAc,GAGf,MAAM,6BAA6B,CAAC;AAkDrC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC;;;;;GAKG;AACH,SAAS,cAAc,CAAC,IAAY,EAAE,KAAa;IACjD,IAAI,EAAU,CAAC;IACf,IAAI,CAAC;QACH,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC,QAAQ,CAAC;aACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;aAC7B,MAAM,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,SAAS,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,eAAe,GAAgC,IAAI,CAAC;AACxD,IAAI,cAAc,GAA+B,IAAI,CAAC;AACtD,IAAI,gBAAgB,GAA8B,IAAI,CAAC;AACvD,IAAI,cAAc,GAA8B,IAAI,CAAC;AACrD,IAAI,eAAe,GAAgC,IAAI,CAAC;AAExD,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,OAAO,IAAI,CACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,wBAAwB,CACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,IAAI,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IACE,eAAe,KAAK,IAAI;QACxB,eAAe,CAAC,QAAQ,KAAK,QAAQ;QACrC,eAAe,CAAC,OAAO,KAAK,OAAO,EACnC,CAAC;QACD,OAAO,eAAe,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,GAAG,GAAG,IAAI,GAAG,EAGhB,CAAC;IACJ,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,SAAS;QACtD,MAAM,CAAC,GAAG,GAA8B,CAAC;QACzC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,IAAI,CAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,OAAO,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,MAAM,GACV,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,QAAQ,CAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;QACvE,MAAM,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,YAAY,GAChB,OAAO,eAAe,KAAK,QAAQ,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAC/D,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,EAAE,KAAK,IAAI;YAAE,SAAS;QAC1B,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;YACV,KAAK;YACL,MAAM;YACN,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAmB,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;IACzD,eAAe,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAClD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,OAAO,IAAI,CACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,uBAAuB,CACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAgB;IAEhB,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IACE,cAAc,KAAK,IAAI;QACvB,cAAc,CAAC,QAAQ,KAAK,QAAQ;QACpC,cAAc,CAAC,OAAO,KAAK,OAAO,EAClC,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,GAAG,GAAG,IAAI,GAAG,EAGhB,CAAC;IACJ,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;YAAE,SAAS;QACtD,MAAM,CAAC,GAAG,GAA8B,CAAC;QACzC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,IAAI,CAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,OAAO,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,MAAM,GACV,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,QAAQ,CAAY,CAAC,CAAC,CAAC,UAAU,CAAC;QACzE,MAAM,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,YAAY,GAChB,OAAO,eAAe,KAAK,QAAQ,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAC/D,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,EAAE,KAAK,IAAI;YAAE,SAAS;QAC1B,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;YACV,KAAK;YACL,MAAM;YACN,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAA4B,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;IACjE,cAAc,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACjD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,KAAwB;IAC/D,OAAO,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;KACzB,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,oBAAoB,CAC3B,QAAgB,EAChB,KAAwB;IAExB,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC;IACrE,IACE,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,QAAQ,KAAK,QAAQ;QAC3B,KAAK,CAAC,KAAK,KAAK,KAAK;QACrB,KAAK,CAAC,OAAO,KAAK,OAAO,EACzB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,qEAAqE;IACrE,iEAAiE;IACjE,MAAM,KAAK,GAAuB;QAChC,QAAQ;QACR,KAAK;QACL,OAAO;QACP,MAAM,EAAE,IAAI,GAAG,EAAkB;KAClC,CAAC;IACF,IAAI,KAAK,KAAK,QAAQ;QAAE,gBAAgB,GAAG,KAAK,CAAC;;QAC5C,cAAc,GAAG,KAAK,CAAC;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,QAAgB,EAChB,MAAc;IAEd,gBAAgB;IAChB,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;gBACpC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;gBACrB,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAC5B,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC1B,CAAC;QACD,0CAA0C;QAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC7E,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;gBAClC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACzE,CAAC;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACzE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,gBAAwB;IAExB,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;IACjE,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,KAAiB,CAAC;IACtB,IACE,eAAe,KAAK,IAAI;QACxB,eAAe,CAAC,QAAQ,KAAK,QAAQ;QACrC,eAAe,CAAC,WAAW,KAAK,WAAW,EAC3C,CAAC;QACD,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAChC,eAAe,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1D,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACnD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/E,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
* (decisions/invariants in scope) when one was found for the file.
|
|
6
6
|
*/
|
|
7
7
|
import type { ScannedCitations } from "./citation-scanner.js";
|
|
8
|
-
import type { LedgerSnapshot, TaskLookupResult } from "./ledger-cache.js";
|
|
8
|
+
import type { DecisionsLedgerSnapshot, LedgerSnapshot, TaskLookupResult } from "./ledger-cache.js";
|
|
9
9
|
export interface ScopeIndexHint {
|
|
10
10
|
/** DEC-IDs in scope for the file. */
|
|
11
11
|
decisions: string[];
|
|
12
|
-
/** Invariant IDs in scope (e.g. "
|
|
12
|
+
/** Invariant IDs in scope (e.g. "INV-0041"). */
|
|
13
13
|
invariants: string[];
|
|
14
14
|
}
|
|
15
|
-
export declare function buildLegend(matches: ScannedCitations,
|
|
15
|
+
export declare function buildLegend(matches: ScannedCitations, invariantsLedger: LedgerSnapshot | null, decisionsLedger: DecisionsLedgerSnapshot | null, scopeHint: ScopeIndexHint | null, resolveTask: (taskId: string) => TaskLookupResult): string | null;
|
|
@@ -10,12 +10,12 @@ const SIDE = "│";
|
|
|
10
10
|
function row(content) {
|
|
11
11
|
return `${SIDE} ${content}`;
|
|
12
12
|
}
|
|
13
|
-
export function buildLegend(matches,
|
|
13
|
+
export function buildLegend(matches, invariantsLedger, decisionsLedger, scopeHint, resolveTask) {
|
|
14
14
|
const hasScopeHint = scopeHint !== null &&
|
|
15
15
|
(scopeHint.decisions.length > 0 || scopeHint.invariants.length > 0);
|
|
16
16
|
const hasCitations = matches.invariants.length > 0 ||
|
|
17
17
|
matches.todos.length > 0 ||
|
|
18
|
-
matches.
|
|
18
|
+
matches.decisions.length > 0;
|
|
19
19
|
if (!hasScopeHint && !hasCitations)
|
|
20
20
|
return null;
|
|
21
21
|
const lines = [];
|
|
@@ -33,20 +33,42 @@ export function buildLegend(matches, ledger, scopeHint, resolveTask) {
|
|
|
33
33
|
.join(", ");
|
|
34
34
|
lines.push(row(`Invariants in scope: ${formatted}`));
|
|
35
35
|
}
|
|
36
|
+
for (const dec of matches.decisions) {
|
|
37
|
+
lines.push(row(renderDecision(dec.id, decisionsLedger)));
|
|
38
|
+
}
|
|
36
39
|
for (const inv of matches.invariants) {
|
|
37
|
-
lines.push(row(renderInvariant(inv.id,
|
|
40
|
+
lines.push(row(renderInvariant(inv.id, invariantsLedger)));
|
|
38
41
|
}
|
|
39
42
|
for (const todo of matches.todos) {
|
|
40
43
|
lines.push(row(renderTodo(todo.id, resolveTask(todo.id))));
|
|
41
44
|
}
|
|
42
|
-
for (const dec of matches.decIds) {
|
|
43
|
-
lines.push(row(`${dec.id} → [POLICY VIOLATION — DEC-id comments banned]`));
|
|
44
|
-
}
|
|
45
45
|
lines.push(BOTTOM_BORDER);
|
|
46
46
|
return lines.join("\n");
|
|
47
47
|
}
|
|
48
|
+
function renderDecision(id, ledger) {
|
|
49
|
+
// id arrives as "DEC-0042" — display with the §-prefix.
|
|
50
|
+
const label = `§${id}`;
|
|
51
|
+
if (ledger === null) {
|
|
52
|
+
return `${label} → [NOT FOUND — orphaned citation, GC will flag]`;
|
|
53
|
+
}
|
|
54
|
+
const entry = ledger.decisionsByid.get(id);
|
|
55
|
+
if (!entry) {
|
|
56
|
+
return `${label} → [NOT FOUND — orphaned citation, GC will flag]`;
|
|
57
|
+
}
|
|
58
|
+
if (entry.superseded_by !== undefined && entry.superseded_by.length > 0) {
|
|
59
|
+
const sup = entry.superseded_by.startsWith("DEC-")
|
|
60
|
+
? `§${entry.superseded_by}`
|
|
61
|
+
: entry.superseded_by;
|
|
62
|
+
return `${label} → [SUPERSEDED by ${sup} — update this citation]`;
|
|
63
|
+
}
|
|
64
|
+
if (entry.status === "superseded" || entry.status === "archived") {
|
|
65
|
+
return `${label} → [${entry.status.toUpperCase()} — update this citation]`;
|
|
66
|
+
}
|
|
67
|
+
const title = entry.title.length > 0 ? entry.title : "(no title)";
|
|
68
|
+
return `${label} → ${title} [${entry.status}]`;
|
|
69
|
+
}
|
|
48
70
|
function renderInvariant(id, ledger) {
|
|
49
|
-
// id arrives as "
|
|
71
|
+
// id arrives as "INV-0023" — display with the §-prefix.
|
|
50
72
|
const label = `§${id}`;
|
|
51
73
|
if (ledger === null) {
|
|
52
74
|
return `${label} → [NOT FOUND — orphaned citation, GC will flag]`;
|
|
@@ -56,7 +78,7 @@ function renderInvariant(id, ledger) {
|
|
|
56
78
|
return `${label} → [NOT FOUND — orphaned citation, GC will flag]`;
|
|
57
79
|
}
|
|
58
80
|
if (entry.superseded_by !== undefined && entry.superseded_by.length > 0) {
|
|
59
|
-
const sup = entry.superseded_by.startsWith("
|
|
81
|
+
const sup = entry.superseded_by.startsWith("INV-")
|
|
60
82
|
? `§${entry.superseded_by}`
|
|
61
83
|
: entry.superseded_by;
|
|
62
84
|
return `${label} → [SUPERSEDED by ${sup} — update this citation]`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legend-builder.js","sourceRoot":"","sources":["../../../src/hooks/post-tool-use/legend-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"legend-builder.js","sourceRoot":"","sources":["../../../src/hooks/post-tool-use/legend-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* `cairn hook read-enrich` — PostToolUse hook on the Read tool.
|
|
3
3
|
*
|
|
4
4
|
* Scans the file content the agent just read for cairn citation
|
|
5
|
-
* patterns (`§
|
|
5
|
+
* patterns (`§INV-NNNN`, `TODO(TSK-<id>)`, banned `DEC-<N>`) and prepends a
|
|
6
6
|
* legend block via Claude Code's documented Shape-B `additionalContext`
|
|
7
7
|
* field so the agent sees authoritative resolutions inline with the
|
|
8
8
|
* file content. No MCP round-trip; all sources read directly from
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* `cairn hook read-enrich` — PostToolUse hook on the Read tool.
|
|
3
3
|
*
|
|
4
4
|
* Scans the file content the agent just read for cairn citation
|
|
5
|
-
* patterns (`§
|
|
5
|
+
* patterns (`§INV-NNNN`, `TODO(TSK-<id>)`, banned `DEC-<N>`) and prepends a
|
|
6
6
|
* legend block via Claude Code's documented Shape-B `additionalContext`
|
|
7
7
|
* field so the agent sees authoritative resolutions inline with the
|
|
8
8
|
* file content. No MCP round-trip; all sources read directly from
|
|
@@ -11,28 +11,15 @@
|
|
|
11
11
|
* Spec: docs/READ_ENRICHER_SPEC.md
|
|
12
12
|
*/
|
|
13
13
|
import { relative } from "node:path";
|
|
14
|
+
import { readHookStdin } from "../runners/payload.js";
|
|
14
15
|
import { resolveRepoRoot } from "../../session-start/index.js";
|
|
16
|
+
import { appendTrace } from "../../trace/index.js";
|
|
15
17
|
import { scanCitations } from "./citation-scanner.js";
|
|
16
|
-
import { getInvariantsLedger, getScopeIndexEntry, lookupTask, } from "./ledger-cache.js";
|
|
18
|
+
import { getDecisionsLedger, getInvariantsLedger, getScopeIndexEntry, lookupTask, } from "./ledger-cache.js";
|
|
17
19
|
import { buildLegend } from "./legend-builder.js";
|
|
18
20
|
const MAX_CONTENT_BYTES = 512_000;
|
|
19
21
|
const BINARY_SAMPLE_BYTES = 1024;
|
|
20
22
|
const BINARY_THRESHOLD = 0.05;
|
|
21
|
-
function readStdin() {
|
|
22
|
-
return new Promise((resolveP) => {
|
|
23
|
-
const chunks = [];
|
|
24
|
-
process.stdin.on("data", (chunk) => chunks.push(chunk));
|
|
25
|
-
process.stdin.on("end", () => {
|
|
26
|
-
resolveP(Buffer.concat(chunks).toString("utf8"));
|
|
27
|
-
});
|
|
28
|
-
process.stdin.on("error", () => {
|
|
29
|
-
resolveP("");
|
|
30
|
-
});
|
|
31
|
-
if (process.stdin.isTTY) {
|
|
32
|
-
resolveP("");
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
23
|
function parsePayload(text) {
|
|
37
24
|
if (text.trim().length === 0)
|
|
38
25
|
return {};
|
|
@@ -47,6 +34,16 @@ function parsePayload(text) {
|
|
|
47
34
|
function pickContent(resp) {
|
|
48
35
|
if (!resp || typeof resp !== "object")
|
|
49
36
|
return undefined;
|
|
37
|
+
// Claude Code's Read tool wraps the body as `tool_response.file.content`.
|
|
38
|
+
// Check the nested file shape FIRST so it wins over any same-named key
|
|
39
|
+
// at the top level.
|
|
40
|
+
if (resp.file !== undefined && typeof resp.file === "object" && resp.file !== null) {
|
|
41
|
+
const f = resp.file;
|
|
42
|
+
if (typeof f.content === "string" && f.content.length > 0)
|
|
43
|
+
return f.content;
|
|
44
|
+
if (typeof f.text === "string" && f.text.length > 0)
|
|
45
|
+
return f.text;
|
|
46
|
+
}
|
|
50
47
|
const candidates = ["content", "text", "output"];
|
|
51
48
|
for (const k of candidates) {
|
|
52
49
|
const v = resp[k];
|
|
@@ -94,10 +91,16 @@ function emitShapeB(additionalContext) {
|
|
|
94
91
|
process.stdout.write("\n");
|
|
95
92
|
}
|
|
96
93
|
export async function runReadEnricher() {
|
|
94
|
+
const ts = new Date().toISOString();
|
|
95
|
+
let outcome = { skip: "unknown" };
|
|
96
|
+
let repoRootForTrace = null;
|
|
97
|
+
let sessionForTrace = null;
|
|
97
98
|
try {
|
|
98
|
-
const raw = await
|
|
99
|
+
const raw = await readHookStdin();
|
|
99
100
|
const payload = parsePayload(raw);
|
|
101
|
+
sessionForTrace = typeof payload.session_id === "string" ? payload.session_id : null;
|
|
100
102
|
if (payload.tool_name !== "Read") {
|
|
103
|
+
outcome = { skip: "non-read-tool", tool_name: payload.tool_name };
|
|
101
104
|
emitShapeB("");
|
|
102
105
|
return;
|
|
103
106
|
}
|
|
@@ -106,29 +109,41 @@ export async function runReadEnricher() {
|
|
|
106
109
|
: undefined;
|
|
107
110
|
const content = pickContent(payload.tool_response);
|
|
108
111
|
if (filePath === undefined || content === undefined || content.length === 0) {
|
|
112
|
+
outcome = {
|
|
113
|
+
skip: "no-content",
|
|
114
|
+
file_path: filePath ?? null,
|
|
115
|
+
content_present: content !== undefined,
|
|
116
|
+
content_chars: content?.length ?? 0,
|
|
117
|
+
};
|
|
109
118
|
emitShapeB("");
|
|
110
119
|
return;
|
|
111
120
|
}
|
|
112
121
|
if (content.length > MAX_CONTENT_BYTES) {
|
|
122
|
+
outcome = { skip: "content-too-large", content_chars: content.length };
|
|
113
123
|
emitShapeB("");
|
|
114
124
|
return;
|
|
115
125
|
}
|
|
116
126
|
const repoRoot = resolveRepoRoot(filePath);
|
|
127
|
+
repoRootForTrace = repoRoot;
|
|
117
128
|
if (repoRoot === null) {
|
|
129
|
+
outcome = { skip: "no-cairn-ancestor", file_path: filePath };
|
|
118
130
|
emitShapeB("");
|
|
119
131
|
return;
|
|
120
132
|
}
|
|
121
133
|
const relPath = computeRelPath(repoRoot, filePath);
|
|
122
134
|
if (isExcludedPath(relPath)) {
|
|
135
|
+
outcome = { skip: "excluded-path", rel_path: relPath };
|
|
123
136
|
emitShapeB("");
|
|
124
137
|
return;
|
|
125
138
|
}
|
|
126
139
|
if (isBinary(content)) {
|
|
140
|
+
outcome = { skip: "binary-content", rel_path: relPath };
|
|
127
141
|
emitShapeB("");
|
|
128
142
|
return;
|
|
129
143
|
}
|
|
130
144
|
const matches = scanCitations(content);
|
|
131
|
-
const
|
|
145
|
+
const invariantsLedger = getInvariantsLedger(repoRoot);
|
|
146
|
+
const decisionsLedger = getDecisionsLedger(repoRoot);
|
|
132
147
|
const cachedEntry = getScopeIndexEntry(repoRoot, relPath);
|
|
133
148
|
const scopeHint = cachedEntry !== null
|
|
134
149
|
? {
|
|
@@ -137,14 +152,30 @@ export async function runReadEnricher() {
|
|
|
137
152
|
}
|
|
138
153
|
: null;
|
|
139
154
|
const resolveTaskFn = (taskId) => lookupTask(repoRoot, taskId);
|
|
140
|
-
const legend = buildLegend(matches,
|
|
155
|
+
const legend = buildLegend(matches, invariantsLedger, decisionsLedger, scopeHint, resolveTaskFn);
|
|
141
156
|
if (legend === null) {
|
|
157
|
+
outcome = {
|
|
158
|
+
skip: "no-citations-no-scope",
|
|
159
|
+
rel_path: relPath,
|
|
160
|
+
decisions_matched: matches.decisions.length,
|
|
161
|
+
invariants_matched: matches.invariants.length,
|
|
162
|
+
todos_matched: matches.todos.length,
|
|
163
|
+
};
|
|
142
164
|
emitShapeB("");
|
|
143
165
|
return;
|
|
144
166
|
}
|
|
167
|
+
outcome = {
|
|
168
|
+
emitted: true,
|
|
169
|
+
rel_path: relPath,
|
|
170
|
+
legend_chars: legend.length,
|
|
171
|
+
decisions_matched: matches.decisions.length,
|
|
172
|
+
invariants_matched: matches.invariants.length,
|
|
173
|
+
todos_matched: matches.todos.length,
|
|
174
|
+
};
|
|
145
175
|
emitShapeB(legend);
|
|
146
176
|
}
|
|
147
|
-
catch {
|
|
177
|
+
catch (err) {
|
|
178
|
+
outcome = { error: err instanceof Error ? err.message : String(err) };
|
|
148
179
|
// Defer-fail gracefully — the hook is a no-op enrichment, NOT a gate.
|
|
149
180
|
try {
|
|
150
181
|
emitShapeB("");
|
|
@@ -153,5 +184,21 @@ export async function runReadEnricher() {
|
|
|
153
184
|
// Last-resort: nothing we can do.
|
|
154
185
|
}
|
|
155
186
|
}
|
|
187
|
+
finally {
|
|
188
|
+
// Skip trace writes for non-cairn projects — keeps
|
|
189
|
+
// ~/.local/cairn/trace/ quiet outside cairn-adopted repos so the
|
|
190
|
+
// hook leaves no footprint when there's nothing to enrich.
|
|
191
|
+
if (outcome["skip"] !== "no-cairn-ancestor") {
|
|
192
|
+
appendTrace({
|
|
193
|
+
ts,
|
|
194
|
+
source: "hook",
|
|
195
|
+
kind: "read-enrich",
|
|
196
|
+
repo_root: repoRootForTrace,
|
|
197
|
+
session_id: sessionForTrace,
|
|
198
|
+
ok: outcome["error"] === undefined,
|
|
199
|
+
payload: outcome,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
156
203
|
}
|
|
157
204
|
//# sourceMappingURL=read-enricher.js.map
|