daftari 1.29.0 → 1.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +281 -0
- package/README.md +263 -9
- package/dist/access/rbac.d.ts +1 -0
- package/dist/access/rbac.d.ts.map +1 -1
- package/dist/access/rbac.js +7 -0
- package/dist/access/rbac.js.map +1 -1
- package/dist/asof/git-read.d.ts +17 -0
- package/dist/asof/git-read.d.ts.map +1 -0
- package/dist/asof/git-read.js +163 -0
- package/dist/asof/git-read.js.map +1 -0
- package/dist/asof/index.d.ts +2 -0
- package/dist/asof/index.d.ts.map +1 -0
- package/dist/asof/index.js +151 -0
- package/dist/asof/index.js.map +1 -0
- package/dist/asof/report.d.ts +11 -0
- package/dist/asof/report.d.ts.map +1 -0
- package/dist/asof/report.js +119 -0
- package/dist/asof/report.js.map +1 -0
- package/dist/asof/snapshot.d.ts +72 -0
- package/dist/asof/snapshot.d.ts.map +1 -0
- package/dist/asof/snapshot.js +207 -0
- package/dist/asof/snapshot.js.map +1 -0
- package/dist/audit/checks/broken_refs.d.ts +1 -1
- package/dist/audit/checks/broken_refs.d.ts.map +1 -1
- package/dist/audit/checks/broken_refs.js +77 -22
- package/dist/audit/checks/broken_refs.js.map +1 -1
- package/dist/audit/collect.d.ts +1 -0
- package/dist/audit/collect.d.ts.map +1 -1
- package/dist/audit/collect.js +22 -2
- package/dist/audit/collect.js.map +1 -1
- package/dist/audit/index.d.ts.map +1 -1
- package/dist/audit/index.js +9 -3
- package/dist/audit/index.js.map +1 -1
- package/dist/audit/links.d.ts.map +1 -1
- package/dist/audit/links.js +9 -3
- package/dist/audit/links.js.map +1 -1
- package/dist/audit/report.d.ts.map +1 -1
- package/dist/audit/report.js +2 -0
- package/dist/audit/report.js.map +1 -1
- package/dist/audit/types.d.ts +4 -1
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js.map +1 -1
- package/dist/backfill/apply.js +2 -2
- package/dist/backfill/apply.js.map +1 -1
- package/dist/backfill/derive.d.ts.map +1 -1
- package/dist/backfill/derive.js +1 -0
- package/dist/backfill/derive.js.map +1 -1
- package/dist/backfill/plan.js +2 -2
- package/dist/backfill/plan.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -0
- package/dist/cli.js.map +1 -1
- package/dist/consolidate/call-budget.d.ts +3 -0
- package/dist/consolidate/call-budget.d.ts.map +1 -0
- package/dist/consolidate/call-budget.js +37 -0
- package/dist/consolidate/call-budget.js.map +1 -0
- package/dist/consolidate/constants.d.ts +1 -0
- package/dist/consolidate/constants.d.ts.map +1 -1
- package/dist/consolidate/constants.js +5 -0
- package/dist/consolidate/constants.js.map +1 -1
- package/dist/consolidate/index.d.ts.map +1 -1
- package/dist/consolidate/index.js +96 -27
- package/dist/consolidate/index.js.map +1 -1
- package/dist/court/docket.d.ts +39 -0
- package/dist/court/docket.d.ts.map +1 -0
- package/dist/court/docket.js +103 -0
- package/dist/court/docket.js.map +1 -0
- package/dist/court/index.d.ts +2 -0
- package/dist/court/index.d.ts.map +1 -0
- package/dist/court/index.js +169 -0
- package/dist/court/index.js.map +1 -0
- package/dist/court/precedent.d.ts +18 -0
- package/dist/court/precedent.d.ts.map +1 -0
- package/dist/court/precedent.js +89 -0
- package/dist/court/precedent.js.map +1 -0
- package/dist/court/report.d.ts +10 -0
- package/dist/court/report.d.ts.map +1 -0
- package/dist/court/report.js +77 -0
- package/dist/court/report.js.map +1 -0
- package/dist/curation/consumes.d.ts +24 -0
- package/dist/curation/consumes.d.ts.map +1 -0
- package/dist/curation/consumes.js +122 -0
- package/dist/curation/consumes.js.map +1 -0
- package/dist/curation/edge-staleness.d.ts +47 -0
- package/dist/curation/edge-staleness.d.ts.map +1 -0
- package/dist/curation/edge-staleness.js +258 -0
- package/dist/curation/edge-staleness.js.map +1 -0
- package/dist/curation/edges.d.ts.map +1 -1
- package/dist/curation/edges.js +164 -10
- package/dist/curation/edges.js.map +1 -1
- package/dist/curation/lint.d.ts +4 -1
- package/dist/curation/lint.d.ts.map +1 -1
- package/dist/curation/lint.js +61 -6
- package/dist/curation/lint.js.map +1 -1
- package/dist/curation/provenance.d.ts +2 -0
- package/dist/curation/provenance.d.ts.map +1 -1
- package/dist/curation/provenance.js +2 -0
- package/dist/curation/provenance.js.map +1 -1
- package/dist/curation/read-log.d.ts +19 -0
- package/dist/curation/read-log.d.ts.map +1 -0
- package/dist/curation/read-log.js +120 -0
- package/dist/curation/read-log.js.map +1 -0
- package/dist/curation/review-throughput.d.ts +24 -0
- package/dist/curation/review-throughput.d.ts.map +1 -0
- package/dist/curation/review-throughput.js +102 -0
- package/dist/curation/review-throughput.js.map +1 -0
- package/dist/curation/staged-actions.d.ts +11 -1
- package/dist/curation/staged-actions.d.ts.map +1 -1
- package/dist/curation/staged-actions.js +117 -30
- package/dist/curation/staged-actions.js.map +1 -1
- package/dist/curation/staleness.js +1 -1
- package/dist/curation/staleness.js.map +1 -1
- package/dist/curation/structural.d.ts +16 -0
- package/dist/curation/structural.d.ts.map +1 -0
- package/dist/curation/structural.js +64 -0
- package/dist/curation/structural.js.map +1 -0
- package/dist/curation/tension-access.d.ts +7 -0
- package/dist/curation/tension-access.d.ts.map +1 -0
- package/dist/curation/tension-access.js +44 -0
- package/dist/curation/tension-access.js.map +1 -0
- package/dist/curation/tension-blast.d.ts +6 -1
- package/dist/curation/tension-blast.d.ts.map +1 -1
- package/dist/curation/tension-blast.js +11 -2
- package/dist/curation/tension-blast.js.map +1 -1
- package/dist/curation/tension-clusters.d.ts +1 -1
- package/dist/curation/tension-clusters.d.ts.map +1 -1
- package/dist/curation/tension-clusters.js +5 -2
- package/dist/curation/tension-clusters.js.map +1 -1
- package/dist/curation/tension.d.ts +6 -2
- package/dist/curation/tension.d.ts.map +1 -1
- package/dist/curation/tension.js +86 -35
- package/dist/curation/tension.js.map +1 -1
- package/dist/curation/tier0.d.ts +27 -0
- package/dist/curation/tier0.d.ts.map +1 -0
- package/dist/curation/tier0.js +196 -0
- package/dist/curation/tier0.js.map +1 -0
- package/dist/curation/tier1.d.ts +30 -0
- package/dist/curation/tier1.d.ts.map +1 -0
- package/dist/curation/tier1.js +142 -0
- package/dist/curation/tier1.js.map +1 -0
- package/dist/curation/tier2.d.ts +43 -0
- package/dist/curation/tier2.d.ts.map +1 -0
- package/dist/curation/tier2.js +182 -0
- package/dist/curation/tier2.js.map +1 -0
- package/dist/curation/vault-docs.d.ts +5 -1
- package/dist/curation/vault-docs.d.ts.map +1 -1
- package/dist/curation/vault-docs.js +15 -1
- package/dist/curation/vault-docs.js.map +1 -1
- package/dist/eval/generate.js +22 -5
- package/dist/eval/generate.js.map +1 -1
- package/dist/eval/index.d.ts.map +1 -1
- package/dist/eval/index.js +173 -25
- package/dist/eval/index.js.map +1 -1
- package/dist/eval/llm-openrouter.d.ts +9 -0
- package/dist/eval/llm-openrouter.d.ts.map +1 -0
- package/dist/eval/llm-openrouter.js +171 -0
- package/dist/eval/llm-openrouter.js.map +1 -0
- package/dist/eval/llm.js +1 -1
- package/dist/eval/llm.js.map +1 -1
- package/dist/eval/prune.d.ts +24 -0
- package/dist/eval/prune.d.ts.map +1 -0
- package/dist/eval/prune.js +83 -0
- package/dist/eval/prune.js.map +1 -0
- package/dist/eval/storage.d.ts +3 -0
- package/dist/eval/storage.d.ts.map +1 -1
- package/dist/eval/storage.js +14 -0
- package/dist/eval/storage.js.map +1 -1
- package/dist/frontmatter/parser.d.ts +1 -0
- package/dist/frontmatter/parser.d.ts.map +1 -1
- package/dist/frontmatter/parser.js +12 -0
- package/dist/frontmatter/parser.js.map +1 -1
- package/dist/frontmatter/schema.d.ts.map +1 -1
- package/dist/frontmatter/schema.js +38 -3
- package/dist/frontmatter/schema.js.map +1 -1
- package/dist/frontmatter/types.d.ts +4 -1
- package/dist/frontmatter/types.d.ts.map +1 -1
- package/dist/frontmatter/types.js +8 -0
- package/dist/frontmatter/types.js.map +1 -1
- package/dist/import/index.d.ts.map +1 -1
- package/dist/import/index.js +44 -9
- package/dist/import/index.js.map +1 -1
- package/dist/import/langgraph-store.d.ts +53 -0
- package/dist/import/langgraph-store.d.ts.map +1 -0
- package/dist/import/langgraph-store.js +292 -0
- package/dist/import/langgraph-store.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -18
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/lock.d.ts +9 -1
- package/dist/lifecycle/lock.d.ts.map +1 -1
- package/dist/lifecycle/lock.js +34 -9
- package/dist/lifecycle/lock.js.map +1 -1
- package/dist/okf/export.d.ts +12 -0
- package/dist/okf/export.d.ts.map +1 -0
- package/dist/okf/export.js +115 -0
- package/dist/okf/export.js.map +1 -0
- package/dist/okf/import.d.ts +24 -0
- package/dist/okf/import.d.ts.map +1 -0
- package/dist/okf/import.js +107 -0
- package/dist/okf/import.js.map +1 -0
- package/dist/okf/index.d.ts +2 -0
- package/dist/okf/index.d.ts.map +1 -0
- package/dist/okf/index.js +147 -0
- package/dist/okf/index.js.map +1 -0
- package/dist/okf/map.d.ts +16 -0
- package/dist/okf/map.d.ts.map +1 -0
- package/dist/okf/map.js +149 -0
- package/dist/okf/map.js.map +1 -0
- package/dist/okf/types.d.ts +9 -0
- package/dist/okf/types.d.ts.map +1 -0
- package/dist/okf/types.js +48 -0
- package/dist/okf/types.js.map +1 -0
- package/dist/search/contested.d.ts +18 -0
- package/dist/search/contested.d.ts.map +1 -0
- package/dist/search/contested.js +119 -0
- package/dist/search/contested.js.map +1 -0
- package/dist/search/coverage.d.ts.map +1 -1
- package/dist/search/coverage.js +1 -1
- package/dist/search/coverage.js.map +1 -1
- package/dist/search/hybrid.d.ts +23 -0
- package/dist/search/hybrid.d.ts.map +1 -1
- package/dist/search/hybrid.js +75 -15
- package/dist/search/hybrid.js.map +1 -1
- package/dist/search/reindex.d.ts +1 -0
- package/dist/search/reindex.d.ts.map +1 -1
- package/dist/search/reindex.js +57 -24
- package/dist/search/reindex.js.map +1 -1
- package/dist/search/watcher.d.ts +2 -0
- package/dist/search/watcher.d.ts.map +1 -1
- package/dist/search/watcher.js +23 -12
- package/dist/search/watcher.js.map +1 -1
- package/dist/serve/index.d.ts +36 -0
- package/dist/serve/index.d.ts.map +1 -0
- package/dist/serve/index.js +507 -0
- package/dist/serve/index.js.map +1 -0
- package/dist/server.d.ts +10 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +91 -12
- package/dist/server.js.map +1 -1
- package/dist/sleep/cycle.d.ts +59 -0
- package/dist/sleep/cycle.d.ts.map +1 -0
- package/dist/sleep/cycle.js +127 -0
- package/dist/sleep/cycle.js.map +1 -0
- package/dist/sleep/index.d.ts +5 -0
- package/dist/sleep/index.d.ts.map +1 -0
- package/dist/sleep/index.js +320 -0
- package/dist/sleep/index.js.map +1 -0
- package/dist/sleep/report.d.ts +14 -0
- package/dist/sleep/report.d.ts.map +1 -0
- package/dist/sleep/report.js +139 -0
- package/dist/sleep/report.js.map +1 -0
- package/dist/sleep/tension-scan-state.d.ts +19 -0
- package/dist/sleep/tension-scan-state.d.ts.map +1 -0
- package/dist/sleep/tension-scan-state.js +0 -0
- package/dist/sleep/tension-scan-state.js.map +1 -0
- package/dist/sleep/tension-scan.d.ts +44 -0
- package/dist/sleep/tension-scan.d.ts.map +1 -0
- package/dist/sleep/tension-scan.js +0 -0
- package/dist/sleep/tension-scan.js.map +1 -0
- package/dist/storage/backend.d.ts +12 -0
- package/dist/storage/backend.d.ts.map +1 -0
- package/dist/storage/backend.js +231 -0
- package/dist/storage/backend.js.map +1 -0
- package/dist/storage/backends/fs.d.ts +4 -0
- package/dist/storage/backends/fs.d.ts.map +1 -0
- package/dist/storage/backends/fs.js +99 -0
- package/dist/storage/backends/fs.js.map +1 -0
- package/dist/storage/fs-walk.d.ts +5 -0
- package/dist/storage/fs-walk.d.ts.map +1 -0
- package/dist/storage/fs-walk.js +28 -0
- package/dist/storage/fs-walk.js.map +1 -0
- package/dist/storage/index-db.d.ts +18 -0
- package/dist/storage/index-db.d.ts.map +1 -1
- package/dist/storage/index-db.js +159 -22
- package/dist/storage/index-db.js.map +1 -1
- package/dist/storage/local.d.ts +7 -1
- package/dist/storage/local.d.ts.map +1 -1
- package/dist/storage/local.js +42 -4
- package/dist/storage/local.js.map +1 -1
- package/dist/storage/sync.d.ts +25 -0
- package/dist/storage/sync.d.ts.map +1 -0
- package/dist/storage/sync.js +308 -0
- package/dist/storage/sync.js.map +1 -0
- package/dist/sync/index.d.ts +2 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +136 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/themes/clustering.d.ts +6 -11
- package/dist/themes/clustering.d.ts.map +1 -1
- package/dist/themes/clustering.js +76 -84
- package/dist/themes/clustering.js.map +1 -1
- package/dist/tools/consumes.d.ts +14 -0
- package/dist/tools/consumes.d.ts.map +1 -0
- package/dist/tools/consumes.js +99 -0
- package/dist/tools/consumes.js.map +1 -0
- package/dist/tools/curation.d.ts +2 -0
- package/dist/tools/curation.d.ts.map +1 -1
- package/dist/tools/curation.js +102 -7
- package/dist/tools/curation.js.map +1 -1
- package/dist/tools/edge-staleness.d.ts +28 -0
- package/dist/tools/edge-staleness.d.ts.map +1 -0
- package/dist/tools/edge-staleness.js +205 -0
- package/dist/tools/edge-staleness.js.map +1 -0
- package/dist/tools/edges.d.ts.map +1 -1
- package/dist/tools/edges.js +28 -22
- package/dist/tools/edges.js.map +1 -1
- package/dist/tools/read.d.ts +15 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +144 -31
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/receipt.d.ts +65 -0
- package/dist/tools/receipt.d.ts.map +1 -0
- package/dist/tools/receipt.js +257 -0
- package/dist/tools/receipt.js.map +1 -0
- package/dist/tools/search.d.ts +1 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +186 -12
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/staged-actions.d.ts +3 -0
- package/dist/tools/staged-actions.d.ts.map +1 -1
- package/dist/tools/staged-actions.js +228 -23
- package/dist/tools/staged-actions.js.map +1 -1
- package/dist/tools/themes.d.ts +9 -0
- package/dist/tools/themes.d.ts.map +1 -1
- package/dist/tools/themes.js +333 -133
- package/dist/tools/themes.js.map +1 -1
- package/dist/tools/tier1.d.ts +14 -0
- package/dist/tools/tier1.d.ts.map +1 -0
- package/dist/tools/tier1.js +169 -0
- package/dist/tools/tier1.js.map +1 -0
- package/dist/tools/tier2.d.ts +27 -0
- package/dist/tools/tier2.d.ts.map +1 -0
- package/dist/tools/tier2.js +344 -0
- package/dist/tools/tier2.js.map +1 -0
- package/dist/tools/witness.d.ts +9 -0
- package/dist/tools/witness.d.ts.map +1 -0
- package/dist/tools/witness.js +66 -0
- package/dist/tools/witness.js.map +1 -0
- package/dist/tools/write.d.ts +9 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +593 -59
- package/dist/tools/write.js.map +1 -1
- package/dist/utils/config.d.ts +54 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +420 -4
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/paths.d.ts +2 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +15 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/redos.d.ts +2 -0
- package/dist/utils/redos.d.ts.map +1 -0
- package/dist/utils/redos.js +101 -0
- package/dist/utils/redos.js.map +1 -0
- package/dist/utils/run-id.d.ts +3 -0
- package/dist/utils/run-id.d.ts.map +1 -0
- package/dist/utils/run-id.js +19 -0
- package/dist/utils/run-id.js.map +1 -0
- package/dist/utils/vault-gitignore.d.ts +1 -1
- package/dist/utils/vault-gitignore.d.ts.map +1 -1
- package/dist/utils/vault-gitignore.js +6 -1
- package/dist/utils/vault-gitignore.js.map +1 -1
- package/dist/witness/track-record.d.ts +42 -0
- package/dist/witness/track-record.d.ts.map +1 -0
- package/dist/witness/track-record.js +189 -0
- package/dist/witness/track-record.js.map +1 -0
- package/package.json +27 -2
- package/templates/config.yaml +8 -0
package/dist/tools/read.js
CHANGED
|
@@ -5,23 +5,30 @@
|
|
|
5
5
|
// definitions; tests call the logic functions directly.
|
|
6
6
|
import { canRead, filterByReadPermission } from "../access/rbac.js";
|
|
7
7
|
import { computeDecay } from "../curation/decay.js";
|
|
8
|
+
import { compiledUpstreamStaleness, loadCompiledStaleContext, splitUpstreamVisibility, } from "../curation/edge-staleness.js";
|
|
8
9
|
import { readProvenanceLog } from "../curation/provenance.js";
|
|
10
|
+
import { recordRead } from "../curation/read-log.js";
|
|
9
11
|
import { listStaleFiles } from "../curation/staleness.js";
|
|
12
|
+
import { structuralDecay } from "../curation/structural.js";
|
|
10
13
|
import { DEFAULT_TENSION_STATUS, listTensions } from "../curation/tension.js";
|
|
14
|
+
import { sourceReadable, visibleTensions } from "../curation/tension-access.js";
|
|
11
15
|
import { parseDocument } from "../frontmatter/parser.js";
|
|
12
16
|
import { DOMAINS, err, ok, STATUSES, } from "../frontmatter/types.js";
|
|
17
|
+
import { contestedFor } from "../search/contested.js";
|
|
13
18
|
import { getProvider } from "../search/vector.js";
|
|
14
19
|
import { countDimMismatches, openIndexDb } from "../storage/index-db.js";
|
|
15
20
|
import { listFiles, readFile, resolveVaultPath } from "../storage/local.js";
|
|
16
21
|
import { sha256Hex } from "../utils/hash.js";
|
|
17
|
-
|
|
22
|
+
import { readRunId } from "../utils/run-id.js";
|
|
23
|
+
import { openIndexForAccessOrNull } from "./search.js";
|
|
24
|
+
export async function vaultRead(vaultRoot, path, access, runId) {
|
|
18
25
|
if (typeof path !== "string" || path.length === 0) {
|
|
19
26
|
return err(new Error("vault_read requires a non-empty 'path' argument"));
|
|
20
27
|
}
|
|
21
28
|
const resolved = resolveVaultPath(vaultRoot, path);
|
|
22
29
|
if (!resolved.ok)
|
|
23
30
|
return resolved;
|
|
24
|
-
const file = await readFile(resolved.value);
|
|
31
|
+
const file = await readFile(resolved.value.absPath);
|
|
25
32
|
if (!file.ok)
|
|
26
33
|
return file;
|
|
27
34
|
const parsed = parseDocument(file.value);
|
|
@@ -33,6 +40,89 @@ export async function vaultRead(vaultRoot, path, access) {
|
|
|
33
40
|
return err(new Error(`access denied: role '${access.roleName}' cannot read ` + `collection '${collection}'`));
|
|
34
41
|
}
|
|
35
42
|
}
|
|
43
|
+
// #234: classify this document's compiled upstream edges as of the serve.
|
|
44
|
+
// Best-effort — the read never fails on telemetry; on a log-read error the
|
|
45
|
+
// serve is still recorded, just uninstrumented (broken_upstream absent).
|
|
46
|
+
//
|
|
47
|
+
// Cost posture (accepted for v1): classification is derived at query time
|
|
48
|
+
// from the two append-only logs, so an instrumented vault pays two log
|
|
49
|
+
// scans per read — the price of having no verdict store that could itself
|
|
50
|
+
// go stale. An UNinstrumented vault pays almost nothing: no consumes log
|
|
51
|
+
// (or an empty one) short-circuits before the provenance log is touched,
|
|
52
|
+
// since with zero compiled edges every broken count is zero. If vault
|
|
53
|
+
// history ever makes the scans hurt, the escalation is an index.db mirror
|
|
54
|
+
// of the logs (ephemeral, rebuildable — the edges.jsonl materialization
|
|
55
|
+
// precedent), not caching bolted on here.
|
|
56
|
+
const staleCtx = await loadCompiledStaleContext(vaultRoot);
|
|
57
|
+
const rows = staleCtx
|
|
58
|
+
? compiledUpstreamStaleness(resolved.value.relPath, staleCtx.consumes, staleCtx.provenance)
|
|
59
|
+
: null;
|
|
60
|
+
// Every served read is logged — the broken-read rate needs its denominator
|
|
61
|
+
// (#234) — and a run_id additionally joins the run's input set (#233).
|
|
62
|
+
// Recorded only AFTER the RBAC gate (a denied read is never an input and
|
|
63
|
+
// never a serve), under the CANONICAL relPath so the write-time join
|
|
64
|
+
// matches performWrite's keying. broken_upstream is the TRUE count,
|
|
65
|
+
// unfiltered by the caller's role: the log is local operator telemetry,
|
|
66
|
+
// not a caller-facing surface. Best-effort: the read itself never fails
|
|
67
|
+
// on a logging failure.
|
|
68
|
+
await recordRead(vaultRoot, {
|
|
69
|
+
tool: "vault_read",
|
|
70
|
+
file: resolved.value.relPath,
|
|
71
|
+
...(runId ? { run_id: runId } : {}),
|
|
72
|
+
...(access?.user != null ? { principal: access.user } : {}),
|
|
73
|
+
...(rows
|
|
74
|
+
? { broken_upstream: rows.filter((r) => r.staleness === "pending-broken").length }
|
|
75
|
+
: {}),
|
|
76
|
+
});
|
|
77
|
+
// One index handle serves every graph-backed enrichment below: the #234
|
|
78
|
+
// visible/hidden split, structural decay (#8), and the contested join.
|
|
79
|
+
// Open failure degrades every one of them to silence — all advisory.
|
|
80
|
+
const db = openIndexForAccessOrNull(vaultRoot);
|
|
81
|
+
let upstream = null;
|
|
82
|
+
let structural = null;
|
|
83
|
+
let contestedResult = null;
|
|
84
|
+
try {
|
|
85
|
+
// Reader-facing surface: visible edges by omission, hidden pending edges
|
|
86
|
+
// coarsened (#217 — an exact count over unreadable units is a small-cell
|
|
87
|
+
// existence leak). Collapses to null when there is nothing to report,
|
|
88
|
+
// which is byte-identical to a document with no compiled edges at all.
|
|
89
|
+
if (rows && rows.length > 0) {
|
|
90
|
+
const { visible, hiddenPending, } = access
|
|
91
|
+
? splitUpstreamVisibility(rows, (unit) => sourceReadable(db, access, unit))
|
|
92
|
+
: { visible: rows, hiddenPending: "none" };
|
|
93
|
+
if (visible.length > 0 || hiddenPending !== "none") {
|
|
94
|
+
const pendingBroken = visible.filter((r) => r.staleness === "pending-broken").length;
|
|
95
|
+
const notes = [];
|
|
96
|
+
if (pendingBroken > 0) {
|
|
97
|
+
notes.push(`${pendingBroken} compiled upstream input${pendingBroken === 1 ? " has" : "s have"} ` +
|
|
98
|
+
`changed incompatibly since this document was compiled`);
|
|
99
|
+
}
|
|
100
|
+
if (hiddenPending !== "none") {
|
|
101
|
+
notes.push(`${hiddenPending} upstream inputs outside your read scope have pending changes`);
|
|
102
|
+
}
|
|
103
|
+
upstream = {
|
|
104
|
+
edges: visible,
|
|
105
|
+
hidden_pending: hiddenPending,
|
|
106
|
+
pending_broken: pendingBroken,
|
|
107
|
+
banner: notes.length > 0 ? `${notes.join("; ")} — this content may predate them.` : null,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// #8: structural decay from the materialized inbound-link graph (one
|
|
112
|
+
// indexed query, lint's vantage rule), plus unresolved-tension parity
|
|
113
|
+
// with search's contested channel.
|
|
114
|
+
structural = structuralDecay({
|
|
115
|
+
db,
|
|
116
|
+
path: resolved.value.relPath,
|
|
117
|
+
status: parsed.value.frontmatter.status,
|
|
118
|
+
access,
|
|
119
|
+
});
|
|
120
|
+
if (db)
|
|
121
|
+
contestedResult = contestedFor(vaultRoot, db, resolved.value.relPath, access);
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
db?.close();
|
|
125
|
+
}
|
|
36
126
|
return ok({
|
|
37
127
|
path,
|
|
38
128
|
content: parsed.value.content,
|
|
@@ -41,6 +131,11 @@ export async function vaultRead(vaultRoot, path, access) {
|
|
|
41
131
|
validation: parsed.value.validation,
|
|
42
132
|
hasFrontmatter: parsed.value.hasFrontmatter,
|
|
43
133
|
decay: computeDecay(parsed.value.frontmatter),
|
|
134
|
+
upstream_staleness: upstream,
|
|
135
|
+
structural,
|
|
136
|
+
...(contestedResult
|
|
137
|
+
? { contested: contestedResult.contested, contestedCount: contestedResult.contestedCount }
|
|
138
|
+
: {}),
|
|
44
139
|
version: sha256Hex(file.value),
|
|
45
140
|
});
|
|
46
141
|
}
|
|
@@ -61,7 +156,7 @@ export async function vaultIndex(vaultRoot, filters = {}, access) {
|
|
|
61
156
|
const resolved = resolveVaultPath(vaultRoot, relPath);
|
|
62
157
|
if (!resolved.ok)
|
|
63
158
|
continue;
|
|
64
|
-
const file = await readFile(resolved.value);
|
|
159
|
+
const file = await readFile(resolved.value.absPath);
|
|
65
160
|
if (!file.ok)
|
|
66
161
|
continue;
|
|
67
162
|
const parsed = parseDocument(file.value);
|
|
@@ -102,12 +197,6 @@ export async function vaultIndex(vaultRoot, filters = {}, access) {
|
|
|
102
197
|
const visible = access ? filterByReadPermission(access.role, entries) : entries;
|
|
103
198
|
return ok({ count: visible.length, entries: visible });
|
|
104
199
|
}
|
|
105
|
-
// The collection a bare vault-relative path belongs to: its top-level
|
|
106
|
-
// directory. tension/provenance records carry only a path (no frontmatter),
|
|
107
|
-
// so RBAC on those falls back to this path-based collection.
|
|
108
|
-
function topCollection(relPath) {
|
|
109
|
-
return relPath.split("/")[0] ?? "";
|
|
110
|
-
}
|
|
111
200
|
export async function vaultStatus(vaultRoot, access) {
|
|
112
201
|
// vault_status reports only over the documents the role can read.
|
|
113
202
|
const index = await vaultIndex(vaultRoot, {}, access);
|
|
@@ -148,28 +237,34 @@ export async function vaultStatus(vaultRoot, access) {
|
|
|
148
237
|
else
|
|
149
238
|
stalenessDistribution.fresh += 1;
|
|
150
239
|
}
|
|
151
|
-
// Unresolved tensions
|
|
152
|
-
//
|
|
153
|
-
//
|
|
240
|
+
// Unresolved tensions and provenance entries carry only a path (no
|
|
241
|
+
// frontmatter), so RBAC on them goes through the shared source predicates
|
|
242
|
+
// (canonicalized — an alias must not widen visibility). A tension shows
|
|
243
|
+
// only when the role can read BOTH sources; a write entry when it can read
|
|
244
|
+
// the written file. Neither leaks the existence of a doc in a denied
|
|
245
|
+
// collection.
|
|
154
246
|
const tensions = await listTensions(vaultRoot, DEFAULT_TENSION_STATUS);
|
|
155
247
|
if (!tensions.ok)
|
|
156
248
|
return tensions;
|
|
157
|
-
const visibleTensions = access
|
|
158
|
-
? tensions.value.filter((t) => canRead(access.role, topCollection(t.sourceA)) &&
|
|
159
|
-
canRead(access.role, topCollection(t.sourceB)))
|
|
160
|
-
: tensions.value;
|
|
161
|
-
const recentTensions = [...visibleTensions]
|
|
162
|
-
.sort((a, b) => b.date.localeCompare(a.date))
|
|
163
|
-
.slice(0, 5)
|
|
164
|
-
.map((t) => ({ title: t.title, date: t.date }));
|
|
165
|
-
// Recent writes from the provenance log (oldest first in the file). Each
|
|
166
|
-
// entry is gated by the role's read access to the written file's collection.
|
|
167
249
|
const log = await readProvenanceLog(vaultRoot);
|
|
168
250
|
if (!log.ok)
|
|
169
251
|
return log;
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
252
|
+
let tensionEntries = tensions.value;
|
|
253
|
+
let visibleWrites = log.value;
|
|
254
|
+
if (access) {
|
|
255
|
+
const accessDb = openIndexForAccessOrNull(vaultRoot);
|
|
256
|
+
try {
|
|
257
|
+
tensionEntries = visibleTensions(accessDb, tensions.value, access);
|
|
258
|
+
visibleWrites = log.value.filter((e) => sourceReadable(accessDb, access, e.file));
|
|
259
|
+
}
|
|
260
|
+
finally {
|
|
261
|
+
accessDb?.close();
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const recentTensions = [...tensionEntries]
|
|
265
|
+
.sort((a, b) => b.date.localeCompare(a.date))
|
|
266
|
+
.slice(0, 5)
|
|
267
|
+
.map((t) => ({ title: t.title, date: t.date }));
|
|
173
268
|
// Dim-mismatch counter. A non-zero value means some embedding cache rows
|
|
174
269
|
// for the active model have the wrong dim and are being silently skipped
|
|
175
270
|
// by vector ranking. We open the DB defensively — if sqlite-vec isn't
|
|
@@ -193,7 +288,7 @@ export async function vaultStatus(vaultRoot, access) {
|
|
|
193
288
|
generatedAt: new Date().toISOString(),
|
|
194
289
|
stalenessDistribution,
|
|
195
290
|
unresolvedTensions: {
|
|
196
|
-
count:
|
|
291
|
+
count: tensionEntries.length,
|
|
197
292
|
recent: recentTensions,
|
|
198
293
|
},
|
|
199
294
|
recentWrites: {
|
|
@@ -222,10 +317,17 @@ export const readTools = [
|
|
|
222
317
|
annotations: { readOnlyHint: true },
|
|
223
318
|
description: "Read a single vault document. Returns its markdown body, parsed " +
|
|
224
319
|
"frontmatter, a validation report, a decay assessment (null when " +
|
|
225
|
-
"healthy; otherwise level, reasons, and an optional banner),
|
|
226
|
-
"
|
|
227
|
-
"
|
|
228
|
-
"
|
|
320
|
+
"healthy; otherwise level, reasons, and an optional banner), an " +
|
|
321
|
+
"upstream_staleness report (#234 — per compiled input, whether it " +
|
|
322
|
+
"changed since this document was compiled and what tier 1 says about " +
|
|
323
|
+
"the pending change: current / pending-compatible / pending-broken; " +
|
|
324
|
+
"null when there is nothing to report), a structural report (#8 — " +
|
|
325
|
+
"orphan: nothing you can read links here; deprecated_still_linked: " +
|
|
326
|
+
"canonical docs still lean on this deprecated one; null when healthy), " +
|
|
327
|
+
"any unresolved tensions involving the document (contested, same " +
|
|
328
|
+
"shape as search hits), and a 'version' token (SHA-256 of the file) " +
|
|
329
|
+
"that can be passed back to a write tool as 'base_version' for " +
|
|
330
|
+
"optimistic-concurrency checking. Path is relative to the vault root.",
|
|
229
331
|
inputSchema: {
|
|
230
332
|
type: "object",
|
|
231
333
|
properties: {
|
|
@@ -233,11 +335,22 @@ export const readTools = [
|
|
|
233
335
|
type: "string",
|
|
234
336
|
description: "Vault-relative path to the markdown file, e.g. competitive-intel/foo.md",
|
|
235
337
|
},
|
|
338
|
+
run_id: {
|
|
339
|
+
type: "string",
|
|
340
|
+
description: "Optional trace/run identifier of the calling run. Recorded in " +
|
|
341
|
+
"the read log so a later write by the same run compiles this " +
|
|
342
|
+
"document into its consumes edges (#233).",
|
|
343
|
+
},
|
|
236
344
|
},
|
|
237
345
|
required: ["path"],
|
|
238
346
|
additionalProperties: false,
|
|
239
347
|
},
|
|
240
|
-
handler: (vaultRoot, args, access) =>
|
|
348
|
+
handler: (vaultRoot, args, access) => {
|
|
349
|
+
const runId = readRunId(args, "vault_read");
|
|
350
|
+
if (!runId.ok)
|
|
351
|
+
return Promise.resolve(runId);
|
|
352
|
+
return vaultRead(vaultRoot, String(args.path ?? ""), access, runId.value);
|
|
353
|
+
},
|
|
241
354
|
},
|
|
242
355
|
{
|
|
243
356
|
name: "vault_index",
|
package/dist/tools/read.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type AccessContext } from "../access/rbac.js";
|
|
2
|
+
import { type DecayState } from "../curation/decay.js";
|
|
3
|
+
import { type AgingTier, type TensionKind } from "../curation/tension.js";
|
|
4
|
+
import { type Result } from "../frontmatter/types.js";
|
|
5
|
+
import type { ToolDefinition } from "./read.js";
|
|
6
|
+
export declare const MAX_RECEIPT_PATHS = 50;
|
|
7
|
+
export declare const MAX_CLAIM_LENGTH = 2000;
|
|
8
|
+
export type ChainResolution = {
|
|
9
|
+
kind: "resolved";
|
|
10
|
+
path: string;
|
|
11
|
+
title: string;
|
|
12
|
+
hops: number;
|
|
13
|
+
} | {
|
|
14
|
+
kind: "restricted";
|
|
15
|
+
} | {
|
|
16
|
+
kind: "dangling";
|
|
17
|
+
brokenAt: string;
|
|
18
|
+
} | {
|
|
19
|
+
kind: "cycle";
|
|
20
|
+
};
|
|
21
|
+
export interface ReceiptTension {
|
|
22
|
+
id: string | null;
|
|
23
|
+
title: string;
|
|
24
|
+
kind: TensionKind;
|
|
25
|
+
date: string;
|
|
26
|
+
agingTier: AgingTier | null;
|
|
27
|
+
}
|
|
28
|
+
export interface ReceiptSource {
|
|
29
|
+
path: string;
|
|
30
|
+
title: string;
|
|
31
|
+
collection: string;
|
|
32
|
+
status: string;
|
|
33
|
+
confidence: string;
|
|
34
|
+
provenance: string;
|
|
35
|
+
created: string;
|
|
36
|
+
updated: string;
|
|
37
|
+
sources: string[];
|
|
38
|
+
version: string;
|
|
39
|
+
decay: DecayState | null;
|
|
40
|
+
currentSource: ChainResolution | null;
|
|
41
|
+
tensions: ReceiptTension[];
|
|
42
|
+
}
|
|
43
|
+
export interface ReceiptSummary {
|
|
44
|
+
sourceCount: number;
|
|
45
|
+
byStatus: Record<string, number>;
|
|
46
|
+
openTensions: number;
|
|
47
|
+
oldestUpdated: string | null;
|
|
48
|
+
newestUpdated: string | null;
|
|
49
|
+
flags: string[];
|
|
50
|
+
}
|
|
51
|
+
export interface VaultReceiptResult {
|
|
52
|
+
claim: string | null;
|
|
53
|
+
sources: ReceiptSource[];
|
|
54
|
+
summary: ReceiptSummary;
|
|
55
|
+
vaultHead: string | null;
|
|
56
|
+
generatedAt: string;
|
|
57
|
+
receiptHash: string;
|
|
58
|
+
}
|
|
59
|
+
export interface VaultReceiptArgs {
|
|
60
|
+
paths: string[];
|
|
61
|
+
claim?: string;
|
|
62
|
+
}
|
|
63
|
+
export declare function vaultReceipt(vaultRoot: string, args: VaultReceiptArgs, access?: AccessContext): Promise<Result<VaultReceiptResult, Error>>;
|
|
64
|
+
export declare const receiptTools: ToolDefinition[];
|
|
65
|
+
//# sourceMappingURL=receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../src/tools/receipt.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,KAAK,SAAS,EAKd,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAI/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAOrC,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtB,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAGzB,aAAa,EAAE,eAAe,GAAG,IAAI,CAAC;IAEtC,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAG7B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,cAAc,CAAC;IAGxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IAGpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAkDD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,gBAAgB,EACtB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAgJ5C;AAMD,eAAO,MAAM,YAAY,EAAE,cAAc,EAiDxC,CAAC"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
// vault_receipt — compile an epistemic receipt for the documents an answer
|
|
2
|
+
// cites.
|
|
3
|
+
//
|
|
4
|
+
// The receipt is the vault's metadata weaponized into a single attachable
|
|
5
|
+
// artifact: for each cited document its status, confidence, provenance,
|
|
6
|
+
// freshness (decay), exact content version, the resolution of its
|
|
7
|
+
// supersession chain, and every unresolved tension touching it — plus a
|
|
8
|
+
// deterministic summary with machine-readable flags, the vault's git HEAD as
|
|
9
|
+
// an as-of anchor, and a content hash over the whole receipt.
|
|
10
|
+
//
|
|
11
|
+
// Discipline: the receipt only *reads* — frontmatter, the tension log, git.
|
|
12
|
+
// It never grades, never synthesizes prose, never mints a value. Flags are
|
|
13
|
+
// deterministic derivations from facts already in the vault. The optional
|
|
14
|
+
// `claim` is caller-supplied and carried verbatim (labeled as such); it is
|
|
15
|
+
// never interpolated into any Daftari-authored text.
|
|
16
|
+
import { canRead } from "../access/rbac.js";
|
|
17
|
+
import { computeDecay } from "../curation/decay.js";
|
|
18
|
+
import { agingTier, DEFAULT_TENSION_STATUS, listTensions, } from "../curation/tension.js";
|
|
19
|
+
import { visibleTensions } from "../curation/tension-access.js";
|
|
20
|
+
import { parseDocument } from "../frontmatter/parser.js";
|
|
21
|
+
import { err, ok } from "../frontmatter/types.js";
|
|
22
|
+
import { readFile, resolveVaultPath } from "../storage/local.js";
|
|
23
|
+
import { log as gitLog, isGitRepo } from "../utils/git.js";
|
|
24
|
+
import { sha256Hex } from "../utils/hash.js";
|
|
25
|
+
import { openIndexForAccessOrNull } from "./search.js";
|
|
26
|
+
export const MAX_RECEIPT_PATHS = 50;
|
|
27
|
+
export const MAX_CLAIM_LENGTH = 2000;
|
|
28
|
+
// A document's collection: frontmatter `collection`, falling back to the
|
|
29
|
+
// top-level directory. Tension records carry only a path, so RBAC on the
|
|
30
|
+
// counterpart side falls back to the path-based collection.
|
|
31
|
+
function topCollection(relPath) {
|
|
32
|
+
return relPath.split("/")[0] ?? "";
|
|
33
|
+
}
|
|
34
|
+
function tensionIdentity(t) {
|
|
35
|
+
return t.id ?? `${t.date}:${t.title}`;
|
|
36
|
+
}
|
|
37
|
+
async function resolveChain(vaultRoot, startPath, startSupersededBy, access) {
|
|
38
|
+
const visited = new Set([startPath]);
|
|
39
|
+
let hops = 0;
|
|
40
|
+
let nextRel = startSupersededBy;
|
|
41
|
+
let currentPath = startPath;
|
|
42
|
+
let currentTitle = "";
|
|
43
|
+
while (nextRel !== null) {
|
|
44
|
+
hops += 1;
|
|
45
|
+
const resolved = resolveVaultPath(vaultRoot, nextRel);
|
|
46
|
+
if (!resolved.ok)
|
|
47
|
+
return { kind: "dangling", brokenAt: currentPath };
|
|
48
|
+
const rel = resolved.value.relPath;
|
|
49
|
+
if (visited.has(rel))
|
|
50
|
+
return { kind: "cycle" };
|
|
51
|
+
visited.add(rel);
|
|
52
|
+
const file = await readFile(resolved.value.absPath);
|
|
53
|
+
if (!file.ok)
|
|
54
|
+
return { kind: "dangling", brokenAt: currentPath };
|
|
55
|
+
const parsed = parseDocument(file.value);
|
|
56
|
+
if (!parsed.ok)
|
|
57
|
+
return { kind: "dangling", brokenAt: currentPath };
|
|
58
|
+
const fm = parsed.value.frontmatter;
|
|
59
|
+
const collection = fm.collection || topCollection(rel);
|
|
60
|
+
if (access && !canRead(access.role, collection))
|
|
61
|
+
return { kind: "restricted" };
|
|
62
|
+
currentPath = rel;
|
|
63
|
+
currentTitle = fm.title;
|
|
64
|
+
nextRel = fm.superseded_by;
|
|
65
|
+
}
|
|
66
|
+
return { kind: "resolved", path: currentPath, title: currentTitle, hops };
|
|
67
|
+
}
|
|
68
|
+
export async function vaultReceipt(vaultRoot, args, access) {
|
|
69
|
+
if (!Array.isArray(args.paths) || args.paths.length === 0) {
|
|
70
|
+
return err(new Error("vault_receipt requires a non-empty 'paths' array"));
|
|
71
|
+
}
|
|
72
|
+
if (args.paths.some((p) => typeof p !== "string" || p.length === 0)) {
|
|
73
|
+
return err(new Error("vault_receipt 'paths' entries must be non-empty strings"));
|
|
74
|
+
}
|
|
75
|
+
if (args.paths.length > MAX_RECEIPT_PATHS) {
|
|
76
|
+
return err(new Error(`vault_receipt accepts at most ${MAX_RECEIPT_PATHS} paths`));
|
|
77
|
+
}
|
|
78
|
+
if (args.claim !== undefined) {
|
|
79
|
+
if (typeof args.claim !== "string") {
|
|
80
|
+
return err(new Error("vault_receipt 'claim' must be a string"));
|
|
81
|
+
}
|
|
82
|
+
if (args.claim.length > MAX_CLAIM_LENGTH) {
|
|
83
|
+
return err(new Error(`vault_receipt 'claim' exceeds ${MAX_CLAIM_LENGTH} characters`));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Unresolved tensions, read once. With an access context a tension is
|
|
87
|
+
// visible only when the role can read BOTH sources' collections (the
|
|
88
|
+
// vault_status precedent), judged on the canonicalized paths via the shared
|
|
89
|
+
// predicate — the receipt never leaks the existence of a document in a
|
|
90
|
+
// denied collection, and an alias must not widen visibility.
|
|
91
|
+
const tensionScan = await listTensions(vaultRoot, DEFAULT_TENSION_STATUS);
|
|
92
|
+
if (!tensionScan.ok)
|
|
93
|
+
return tensionScan;
|
|
94
|
+
let tensionEntries = tensionScan.value;
|
|
95
|
+
if (access) {
|
|
96
|
+
const accessDb = openIndexForAccessOrNull(vaultRoot);
|
|
97
|
+
try {
|
|
98
|
+
tensionEntries = visibleTensions(accessDb, tensionScan.value, access);
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
accessDb?.close();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Dedupe cited paths, preserving first-seen order.
|
|
105
|
+
const citedPaths = [];
|
|
106
|
+
const seen = new Set();
|
|
107
|
+
for (const p of args.paths) {
|
|
108
|
+
const resolved = resolveVaultPath(vaultRoot, p);
|
|
109
|
+
if (!resolved.ok)
|
|
110
|
+
return resolved;
|
|
111
|
+
const rel = resolved.value.relPath;
|
|
112
|
+
if (seen.has(rel))
|
|
113
|
+
continue;
|
|
114
|
+
seen.add(rel);
|
|
115
|
+
citedPaths.push(rel);
|
|
116
|
+
}
|
|
117
|
+
const sources = [];
|
|
118
|
+
const matchedTensionIds = new Set();
|
|
119
|
+
const flagSet = new Set();
|
|
120
|
+
for (const rel of citedPaths) {
|
|
121
|
+
const resolved = resolveVaultPath(vaultRoot, rel);
|
|
122
|
+
if (!resolved.ok)
|
|
123
|
+
return resolved;
|
|
124
|
+
const file = await readFile(resolved.value.absPath);
|
|
125
|
+
if (!file.ok)
|
|
126
|
+
return file;
|
|
127
|
+
const parsed = parseDocument(file.value);
|
|
128
|
+
if (!parsed.ok)
|
|
129
|
+
return parsed;
|
|
130
|
+
const fm = parsed.value.frontmatter;
|
|
131
|
+
const collection = fm.collection || topCollection(rel);
|
|
132
|
+
if (access && !canRead(access.role, collection)) {
|
|
133
|
+
return err(new Error(`access denied: role '${access.roleName}' cannot read collection '${collection}'`));
|
|
134
|
+
}
|
|
135
|
+
const decay = computeDecay(fm);
|
|
136
|
+
const onChain = fm.superseded_by !== null || fm.status === "superseded";
|
|
137
|
+
const currentSource = onChain
|
|
138
|
+
? await resolveChain(vaultRoot, rel, fm.superseded_by, access)
|
|
139
|
+
: null;
|
|
140
|
+
const matched = tensionEntries.filter((t) => t.sourceA === rel || t.sourceB === rel);
|
|
141
|
+
for (const t of matched)
|
|
142
|
+
matchedTensionIds.add(tensionIdentity(t));
|
|
143
|
+
if (fm.status === "deprecated")
|
|
144
|
+
flagSet.add("cites-deprecated");
|
|
145
|
+
if (fm.status === "archived")
|
|
146
|
+
flagSet.add("cites-archived");
|
|
147
|
+
if (fm.status === "draft")
|
|
148
|
+
flagSet.add("cites-draft");
|
|
149
|
+
if (onChain)
|
|
150
|
+
flagSet.add("cites-superseded");
|
|
151
|
+
if (fm.confidence === "low")
|
|
152
|
+
flagSet.add("cites-low-confidence");
|
|
153
|
+
if (decay?.level === "warn")
|
|
154
|
+
flagSet.add("cites-stale");
|
|
155
|
+
if (decay?.level === "aging")
|
|
156
|
+
flagSet.add("cites-aging");
|
|
157
|
+
if (matched.length > 0)
|
|
158
|
+
flagSet.add("cites-contested");
|
|
159
|
+
if (currentSource !== null && currentSource.kind !== "resolved") {
|
|
160
|
+
flagSet.add("supersession-unresolved");
|
|
161
|
+
}
|
|
162
|
+
sources.push({
|
|
163
|
+
path: rel,
|
|
164
|
+
title: fm.title,
|
|
165
|
+
collection,
|
|
166
|
+
status: fm.status,
|
|
167
|
+
confidence: fm.confidence,
|
|
168
|
+
provenance: fm.provenance,
|
|
169
|
+
created: fm.created,
|
|
170
|
+
updated: fm.updated,
|
|
171
|
+
sources: fm.sources,
|
|
172
|
+
version: sha256Hex(file.value),
|
|
173
|
+
decay,
|
|
174
|
+
currentSource,
|
|
175
|
+
tensions: matched.map((t) => ({
|
|
176
|
+
id: t.id ?? null,
|
|
177
|
+
title: t.title,
|
|
178
|
+
kind: t.kind,
|
|
179
|
+
date: t.date,
|
|
180
|
+
agingTier: agingTier(t),
|
|
181
|
+
})),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
const byStatus = {};
|
|
185
|
+
for (const s of sources) {
|
|
186
|
+
byStatus[s.status] = (byStatus[s.status] ?? 0) + 1;
|
|
187
|
+
}
|
|
188
|
+
const updatedDates = sources.map((s) => s.updated).filter((d) => d.length > 0);
|
|
189
|
+
updatedDates.sort();
|
|
190
|
+
const summary = {
|
|
191
|
+
sourceCount: sources.length,
|
|
192
|
+
byStatus,
|
|
193
|
+
openTensions: matchedTensionIds.size,
|
|
194
|
+
oldestUpdated: updatedDates[0] ?? null,
|
|
195
|
+
newestUpdated: updatedDates[updatedDates.length - 1] ?? null,
|
|
196
|
+
flags: [...flagSet].sort(),
|
|
197
|
+
};
|
|
198
|
+
// The as-of anchor: the vault's HEAD commit. Belief archaeology starts
|
|
199
|
+
// here — a receipt plus this hash reproduces the exact vault state the
|
|
200
|
+
// answer was compiled against.
|
|
201
|
+
let vaultHead = null;
|
|
202
|
+
if (await isGitRepo(vaultRoot)) {
|
|
203
|
+
const head = await gitLog(vaultRoot, { limit: 1 });
|
|
204
|
+
if (head.ok && head.value.length > 0)
|
|
205
|
+
vaultHead = head.value[0].hash;
|
|
206
|
+
}
|
|
207
|
+
const claim = args.claim !== undefined && args.claim.length > 0 ? args.claim : null;
|
|
208
|
+
const generatedAt = new Date().toISOString();
|
|
209
|
+
const payload = { claim, sources, summary, vaultHead, generatedAt };
|
|
210
|
+
return ok({ ...payload, receiptHash: sha256Hex(JSON.stringify(payload)) });
|
|
211
|
+
}
|
|
212
|
+
// ---------------------------------------------------------------------------
|
|
213
|
+
// MCP tool definition
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
export const receiptTools = [
|
|
216
|
+
{
|
|
217
|
+
name: "vault_receipt",
|
|
218
|
+
title: "Compile an epistemic receipt",
|
|
219
|
+
annotations: { readOnlyHint: true },
|
|
220
|
+
description: "Compile an epistemic receipt for the vault documents an answer relies " +
|
|
221
|
+
"on. For each cited path: status, confidence, provenance, freshness " +
|
|
222
|
+
"(decay), an exact content-version hash, the resolution of its " +
|
|
223
|
+
"supersession chain, and any unresolved tensions touching it. Plus a " +
|
|
224
|
+
"summary with deterministic flags (e.g. cites-stale, cites-contested, " +
|
|
225
|
+
"cites-superseded — empty flags mean current, grounded, uncontested), " +
|
|
226
|
+
"the vault's git HEAD as an as-of anchor, and a recomputable SHA-256 " +
|
|
227
|
+
"over the receipt. Attach the receipt to the answer so downstream " +
|
|
228
|
+
"consumers can see what it stands on. Read-only; facts are derived " +
|
|
229
|
+
"from frontmatter, the tension log, and git — never invented.",
|
|
230
|
+
inputSchema: {
|
|
231
|
+
type: "object",
|
|
232
|
+
properties: {
|
|
233
|
+
paths: {
|
|
234
|
+
type: "array",
|
|
235
|
+
items: { type: "string" },
|
|
236
|
+
minItems: 1,
|
|
237
|
+
maxItems: MAX_RECEIPT_PATHS,
|
|
238
|
+
description: "Vault-relative paths of the documents the answer cites, e.g. " +
|
|
239
|
+
"competitive-intel/foo.md",
|
|
240
|
+
},
|
|
241
|
+
claim: {
|
|
242
|
+
type: "string",
|
|
243
|
+
maxLength: MAX_CLAIM_LENGTH,
|
|
244
|
+
description: "Optional one-line statement of the answer the receipt attests. " +
|
|
245
|
+
"Carried verbatim (caller-supplied) and covered by the receipt hash.",
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
required: ["paths"],
|
|
249
|
+
additionalProperties: false,
|
|
250
|
+
},
|
|
251
|
+
handler: (vaultRoot, args, access) => vaultReceipt(vaultRoot, {
|
|
252
|
+
paths: Array.isArray(args.paths) ? args.paths : [],
|
|
253
|
+
claim: typeof args.claim === "string" ? args.claim : undefined,
|
|
254
|
+
}, access),
|
|
255
|
+
},
|
|
256
|
+
];
|
|
257
|
+
//# sourceMappingURL=receipt.js.map
|