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
|
@@ -48,39 +48,6 @@ export function l2Normalize(vec) {
|
|
|
48
48
|
}
|
|
49
49
|
return out;
|
|
50
50
|
}
|
|
51
|
-
// Mean-pool a document's chunk vectors into one vector, then L2-normalise so
|
|
52
|
-
// the result lives on the unit sphere (cosine semantics).
|
|
53
|
-
// Returns null when there is nothing to pool or the pooled vector is zero.
|
|
54
|
-
export function meanPoolL2(vectors) {
|
|
55
|
-
if (vectors.length === 0)
|
|
56
|
-
return null;
|
|
57
|
-
const dim = vectors[0]?.length ?? 0;
|
|
58
|
-
if (dim === 0)
|
|
59
|
-
return null;
|
|
60
|
-
const sum = new Float32Array(dim);
|
|
61
|
-
let kept = 0;
|
|
62
|
-
for (const v of vectors) {
|
|
63
|
-
if (v.length !== dim)
|
|
64
|
-
continue;
|
|
65
|
-
kept += 1;
|
|
66
|
-
for (let i = 0; i < dim; i++)
|
|
67
|
-
sum[i] = sum[i] + v[i];
|
|
68
|
-
}
|
|
69
|
-
if (kept === 0)
|
|
70
|
-
return null;
|
|
71
|
-
for (let i = 0; i < dim; i++)
|
|
72
|
-
sum[i] = sum[i] / kept;
|
|
73
|
-
// If the mean is the zero vector, l2Normalize returns zeros — surface that
|
|
74
|
-
// as null so downstream callers skip the document.
|
|
75
|
-
let norm = 0;
|
|
76
|
-
for (let i = 0; i < dim; i++) {
|
|
77
|
-
const x = sum[i];
|
|
78
|
-
norm += x * x;
|
|
79
|
-
}
|
|
80
|
-
if (norm === 0)
|
|
81
|
-
return null;
|
|
82
|
-
return l2Normalize(sum);
|
|
83
|
-
}
|
|
84
51
|
function squaredEuclidean(a, b) {
|
|
85
52
|
let acc = 0;
|
|
86
53
|
const n = Math.min(a.length, b.length);
|
|
@@ -350,12 +317,33 @@ export function clusterCoherence(vectors) {
|
|
|
350
317
|
return 0;
|
|
351
318
|
return total / pairs;
|
|
352
319
|
}
|
|
320
|
+
// Deterministic stride sample of `cap` indices out of [0, n). Evenly spaced
|
|
321
|
+
// rather than random so the same input always yields the same sample — the
|
|
322
|
+
// silhouette k-picker must stay reproducible (#58 moves it from ~3.5k doc
|
|
323
|
+
// vectors to ~44k chunk vectors, where the O(n²) full score is ~2B pairs).
|
|
324
|
+
export function strideSample(n, cap) {
|
|
325
|
+
if (cap <= 0 || n <= 0)
|
|
326
|
+
return [];
|
|
327
|
+
if (n <= cap)
|
|
328
|
+
return Array.from({ length: n }, (_, i) => i);
|
|
329
|
+
const out = [];
|
|
330
|
+
const step = n / cap;
|
|
331
|
+
for (let i = 0; i < cap; i++)
|
|
332
|
+
out.push(Math.floor(i * step));
|
|
333
|
+
return out;
|
|
334
|
+
}
|
|
353
335
|
// Runs k-means for each k in `candidates`, computes silhouette, and returns
|
|
354
336
|
// the run with the highest score. Candidates are clamped to data.length and
|
|
355
337
|
// deduped; this is what handles the "tiny vault" edge case — if the user
|
|
356
338
|
// requested k ∈ {10, 15, 20, 25} but only has 8 documents, we end up running
|
|
357
339
|
// k-means at k=8 and stop.
|
|
358
|
-
|
|
340
|
+
//
|
|
341
|
+
// `silhouetteCap` bounds the silhouette computation (not the clustering) to a
|
|
342
|
+
// stride sample of that many points; 0/undefined scores the full set. The
|
|
343
|
+
// k-means itself always runs on all of `data` — only the k-quality metric is
|
|
344
|
+
// sampled, because silhouette is O(n²) and the sweep would otherwise dominate
|
|
345
|
+
// the tool's latency on chunk-scale inputs (#58).
|
|
346
|
+
export function pickK(data, candidates, rng, maxIter, silhouetteCap) {
|
|
359
347
|
const n = data.length;
|
|
360
348
|
const seen = new Set();
|
|
361
349
|
const ks = [];
|
|
@@ -368,10 +356,13 @@ export function pickK(data, candidates, rng, maxIter) {
|
|
|
368
356
|
}
|
|
369
357
|
if (ks.length === 0)
|
|
370
358
|
ks.push(Math.min(1, n));
|
|
359
|
+
const sampleIdx = silhouetteCap && n > silhouetteCap ? strideSample(n, silhouetteCap) : null;
|
|
371
360
|
let best = null;
|
|
372
361
|
for (const k of ks) {
|
|
373
362
|
const { assignments, centroids } = kmeans(data, k, rng, maxIter);
|
|
374
|
-
const score =
|
|
363
|
+
const score = sampleIdx
|
|
364
|
+
? silhouetteScore(sampleIdx.map((i) => data[i]), sampleIdx.map((i) => assignments[i]))
|
|
365
|
+
: silhouetteScore(data, assignments);
|
|
375
366
|
if (!best || score > best.silhouette) {
|
|
376
367
|
best = { k, silhouette: score, assignments, centroids };
|
|
377
368
|
}
|
|
@@ -379,60 +370,61 @@ export function pickK(data, candidates, rng, maxIter) {
|
|
|
379
370
|
// `best` is non-null because ks has at least one entry.
|
|
380
371
|
return best;
|
|
381
372
|
}
|
|
382
|
-
//
|
|
383
|
-
//
|
|
384
|
-
//
|
|
373
|
+
// Aggregates CHUNK-level cluster assignments into per-document theme
|
|
374
|
+
// distributions. This is the representation fix #58 asks for: a long
|
|
375
|
+
// synthesis doc whose halves live in two regions of the embedding space has
|
|
376
|
+
// its chunks split across two clusters, so it gets weight in both — where
|
|
377
|
+
// mean-pooling collapsed it to a single point that landed in neither.
|
|
385
378
|
//
|
|
386
|
-
//
|
|
387
|
-
//
|
|
388
|
-
//
|
|
389
|
-
//
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
const
|
|
399
|
-
if (
|
|
379
|
+
// `chunkDoc[i]` maps chunk i to its document index. A cluster keeps a doc's
|
|
380
|
+
// membership when its weight is at least `minFraction` — the guard against
|
|
381
|
+
// chunk-level granularity (#58's "phantom theme" concern: a one-chunk aside
|
|
382
|
+
// about pricing inside a ten-chunk moonshot doc is 0.1 of the doc and is
|
|
383
|
+
// dropped, not reported as membership). The argmax cluster is ALWAYS kept
|
|
384
|
+
// (ties break to the lower cluster index), so every doc has at least one
|
|
385
|
+
// membership regardless of how thinly its chunks spread. Each doc's
|
|
386
|
+
// memberships are ordered weight-desc (ties: lower cluster index).
|
|
387
|
+
export function membershipDistributions(chunkAssignments, chunkDoc, docCount, minFraction) {
|
|
388
|
+
const chunkTotals = new Array(docCount).fill(0);
|
|
389
|
+
const weights = new Map(); // doc → cluster → chunks
|
|
390
|
+
for (let i = 0; i < chunkAssignments.length; i++) {
|
|
391
|
+
const doc = chunkDoc[i];
|
|
392
|
+
if (doc < 0 || doc >= docCount)
|
|
400
393
|
continue;
|
|
401
|
-
const
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
const cv = centroids[c];
|
|
408
|
-
if (!cv)
|
|
409
|
-
continue;
|
|
410
|
-
const sim = cosineSimilarityNormalized(vec, cv);
|
|
411
|
-
if (sim < minSimilarity)
|
|
412
|
-
continue;
|
|
413
|
-
if (sim < primarySim - delta)
|
|
414
|
-
continue;
|
|
415
|
-
candidates.push({ cluster: c, sim });
|
|
394
|
+
const cluster = chunkAssignments[i];
|
|
395
|
+
chunkTotals[doc] = chunkTotals[doc] + 1;
|
|
396
|
+
let byCluster = weights.get(doc);
|
|
397
|
+
if (!byCluster) {
|
|
398
|
+
byCluster = new Map();
|
|
399
|
+
weights.set(doc, byCluster);
|
|
416
400
|
}
|
|
417
|
-
|
|
401
|
+
byCluster.set(cluster, (byCluster.get(cluster) ?? 0) + 1);
|
|
402
|
+
}
|
|
403
|
+
const out = [];
|
|
404
|
+
for (let doc = 0; doc < docCount; doc++) {
|
|
405
|
+
const total = chunkTotals[doc];
|
|
406
|
+
const byCluster = weights.get(doc);
|
|
407
|
+
if (!byCluster || total === 0) {
|
|
408
|
+
out.push([]);
|
|
418
409
|
continue;
|
|
419
|
-
// Take the doc's top `maxPerDoc` secondaries (highest-sim wins ties
|
|
420
|
-
// first; stable cluster index for a deterministic ordering otherwise).
|
|
421
|
-
candidates.sort((a, b) => b.sim - a.sim || a.cluster - b.cluster);
|
|
422
|
-
const top = candidates.slice(0, maxPerDoc);
|
|
423
|
-
for (const { cluster, sim } of top) {
|
|
424
|
-
const list = out.get(cluster);
|
|
425
|
-
const entry = { docIndex: i, sim };
|
|
426
|
-
if (list)
|
|
427
|
-
list.push(entry);
|
|
428
|
-
else
|
|
429
|
-
out.set(cluster, [entry]);
|
|
430
410
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
411
|
+
let primary = -1;
|
|
412
|
+
let primaryCount = -1;
|
|
413
|
+
for (const [cluster, count] of byCluster) {
|
|
414
|
+
if (count > primaryCount || (count === primaryCount && cluster < primary)) {
|
|
415
|
+
primary = cluster;
|
|
416
|
+
primaryCount = count;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
const memberships = [];
|
|
420
|
+
for (const [cluster, count] of byCluster) {
|
|
421
|
+
const weight = count / total;
|
|
422
|
+
if (cluster === primary || weight >= minFraction) {
|
|
423
|
+
memberships.push({ cluster, weight });
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
memberships.sort((a, b) => b.weight - a.weight || a.cluster - b.cluster);
|
|
427
|
+
out.push(memberships);
|
|
436
428
|
}
|
|
437
429
|
return out;
|
|
438
430
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clustering.js","sourceRoot":"","sources":["../../src/themes/clustering.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"clustering.js","sourceRoot":"","sources":["../../src/themes/clustering.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,wEAAwE;AACxE,wEAAwE;AACxE,wCAAwC;AACxC,EAAE;AACF,0EAA0E;AAC1E,uEAAuE;AACvE,0EAA0E;AAC1E,+CAA+C;AAC/C,EAAE;AACF,kEAAkE;AAClE,sEAAsE;AACtE,0EAA0E;AAC1E,uEAAuE;AACvE,0EAA0E;AAC1E,4EAA4E;AAE5E,8EAA8E;AAE9E,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,0BAA0B;AAC1B,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IACjB,OAAO,GAAG,EAAE;QACV,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E,wEAAwE;AACxE,kCAAkC;AAClC,MAAM,UAAU,WAAW,CAAC,GAAiB;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,GAAG,CAAC;IACpC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAe,EAAE,CAAe;IACxD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAI,CAAC,CAAC,CAAC,CAAY,GAAI,CAAC,CAAC,CAAC,CAAY,CAAC;QAC9C,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,0BAA0B,CAAC,CAAe,EAAE,CAAe;IAClE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,GAAG,IAAK,CAAC,CAAC,CAAC,CAAY,GAAI,CAAC,CAAC,CAAC,CAAY,CAAC;IACvE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2EAA2E;AAC3E,4EAA4E;AAC5E,6BAA6B;AAC7B,SAAS,iBAAiB,CAAC,CAAe,EAAE,CAAe;IACzD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,6EAA6E;AAE7E,yEAAyE;AACzE,4EAA4E;AAC5E,8EAA8E;AAC9E,iDAAiD;AACjD,EAAE;AACF,yEAAyE;AACzE,wEAAwE;AACxE,mBAAmB;AACnB,MAAM,UAAU,kBAAkB,CAAC,IAAoB,EAAE,CAAS,EAAE,GAAiB;IACnF,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,kCAAkC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEjB,sEAAsE;IACtE,wEAAwE;IACxE,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,QAAQ,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,IAAI,CAAC,KAAK,CAAiB,CAAC,CAAC;IACvF,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACrC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAW,CAAC;QACpD,CAAC;QACD,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;QAChB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,sEAAsE;YACtE,kEAAkE;YAClE,2BAA2B;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClB,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,SAAS;gBAC3B,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAW,CAAC;gBAChC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;oBAChB,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClB,kEAAkE;gBAClE,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBAClB,MAAM,GAAG,CAAC,CAAC;wBACX,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,MAAM,KAAK,CAAC,CAAC;YAAE,MAAM;QACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAElB,2EAA2E;QAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAiB,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,SAAS,CAAC,CAAC;YAC/D,IAAI,CAAC,GAAI,QAAQ,CAAC,CAAC,CAAY;gBAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAUD,0EAA0E;AAC1E,uEAAuE;AACvE,4EAA4E;AAC5E,MAAM,UAAU,MAAM,CACpB,IAAoB,EACpB,CAAS,EACT,GAAiB,EACjB,OAAe;IAEf,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAI,IAAI,CAAC,CAAC,CAAkB,CAAC,MAAM,CAAC;IAE7C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC3D,IAAI,SAAS,GAAmB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAiB,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QAC1C,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC;QACtB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,eAAe;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAiB,CAAC;YACtC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAiB,CAAC,CAAC;gBAChE,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;oBACd,KAAK,GAAG,CAAC,CAAC;oBACV,KAAK,GAAG,CAAC,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC7B,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;gBACvB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QACD,eAAe;QACf,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAW,CAAC;YACnC,MAAM,CAAC,CAAC,CAAC,GAAI,MAAM,CAAC,CAAC,CAAY,GAAG,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAiB,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAiB,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAI,KAAK,CAAC,CAAC,CAAY,CAAC;QACnF,CAAC;QACD,MAAM,YAAY,GAAmB,EAAE,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAW,CAAC;YAClC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,iEAAiE;gBACjE,2DAA2D;gBAC3D,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAiB,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAiB,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;gBAAE,IAAI,CAAC,CAAC,CAAC,GAAI,GAAG,CAAC,CAAC,CAAY,GAAG,KAAK,CAAC;YACnE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,SAAS,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,OAAO;YAAE,MAAM;IACtB,CAAC;IAED,wEAAwE;IACxE,8DAA8D;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAiB,CAAC;QACtC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAiB,CAAC,CAAC;YAChE,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;gBACd,KAAK,GAAG,CAAC,CAAC;gBACV,KAAK,GAAG,CAAC,CAAC;YACZ,CAAC;QACH,CAAC;QACD,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAChD,CAAC;AAED,6EAA6E;AAE7E,qDAAqD;AACrD,oEAAoE;AACpE,8EAA8E;AAC9E,+BAA+B;AAC/B,wEAAwE;AACxE,iBAAiB;AACjB,MAAM,UAAU,eAAe,CAAC,IAAoB,EAAE,WAAqB;IACzE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAW,CAAC;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YAClB,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAEhC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAW,CAAC;QACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC5B,sCAAsC;YACtC,SAAS;QACX,CAAC;QACD,oDAAoD;QACpD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC;gBAAE,SAAS;YACtB,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,IAAI,CAAC,CAAC,CAAiB,CAAC,CAAC;YAC5E,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC;QACxB,kDAAkD;QAClD,IAAI,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACjC,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;YACrC,IAAI,EAAE,KAAK,EAAE;gBAAE,SAAS;YACxB,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,IAAI,CAAC,CAAC,CAAiB,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YAChC,IAAI,IAAI,GAAG,CAAC;gBAAE,CAAC,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAI,KAAK,KAAK,CAAC;YAAE,SAAS;QAC1B,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,6EAA6E;AAE7E,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,2BAA2B;AAC3B,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,KAAK,IAAI,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAiB,EAAE,OAAO,CAAC,CAAC,CAAiB,CAAC,CAAC;YAC5F,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,KAAK,GAAG,KAAK,CAAC;AACvB,CAAC;AAWD,4EAA4E;AAC5E,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,MAAM,UAAU,YAAY,CAAC,CAAS,EAAE,GAAW;IACjD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,CAAC,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC7D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,6EAA6E;AAC7E,2BAA2B;AAC3B,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,kDAAkD;AAClD,MAAM,UAAU,KAAK,CACnB,IAAoB,EACpB,UAAoB,EACpB,GAAiB,EACjB,OAAe,EACf,aAAsB;IAEtB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,EAAE,GAAa,EAAE,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7C,MAAM,SAAS,GAAG,aAAa,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7F,IAAI,IAAI,GAAuB,IAAI,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,SAAS;YACrB,CAAC,CAAC,eAAe,CACb,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAiB,CAAC,EAC7C,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAW,CAAC,CAC/C;YACH,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,wDAAwD;IACxD,OAAO,IAAmB,CAAC;AAC7B,CAAC;AAYD,qEAAqE;AACrE,qEAAqE;AACrE,4EAA4E;AAC5E,0EAA0E;AAC1E,sEAAsE;AACtE,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,4EAA4E;AAC5E,yEAAyE;AACzE,0EAA0E;AAC1E,yEAAyE;AACzE,oEAAoE;AACpE,mEAAmE;AACnE,MAAM,UAAU,uBAAuB,CACrC,gBAA0B,EAC1B,QAAkB,EAClB,QAAgB,EAChB,WAAmB;IAEnB,MAAM,WAAW,GAAG,IAAI,KAAK,CAAS,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA+B,CAAC,CAAC,yBAAyB;IACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAW,CAAC;QAClC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,QAAQ;YAAE,SAAS;QACzC,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAW,CAAC;QAC9C,WAAW,CAAC,GAAG,CAAC,GAAI,WAAW,CAAC,GAAG,CAAY,GAAG,CAAC,CAAC;QACpD,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC9B,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAW,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;QACjB,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;QACtB,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;YACzC,IAAI,KAAK,GAAG,YAAY,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC;gBAC1E,OAAO,GAAG,OAAO,CAAC;gBAClB,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAAoB,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;YAC7B,IAAI,OAAO,KAAK,OAAO,IAAI,MAAM,IAAI,WAAW,EAAE,CAAC;gBACjD,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type AccessContext } from "../access/rbac.js";
|
|
2
|
+
import { type ConsumesEdge } from "../curation/consumes.js";
|
|
3
|
+
import { type Result } from "../frontmatter/types.js";
|
|
4
|
+
import type { ToolDefinition } from "./read.js";
|
|
5
|
+
export interface ConsumesResult {
|
|
6
|
+
direction: "forward" | "reverse";
|
|
7
|
+
anchor: string;
|
|
8
|
+
edges: ConsumesEdge[];
|
|
9
|
+
total: number;
|
|
10
|
+
include_history: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function vaultConsumes(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<ConsumesResult, Error>>;
|
|
13
|
+
export declare const consumesTools: ToolDefinition[];
|
|
14
|
+
//# sourceMappingURL=consumes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumes.d.ts","sourceRoot":"","sources":["../../src/tools/consumes.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAwDxC;AAED,eAAO,MAAM,aAAa,EAAE,cAAc,EAoCzC,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// vault_consumes — the query surface over the compiled dependency graph
|
|
2
|
+
// (#233). Forward: the units an artifact's current compile consumed.
|
|
3
|
+
// Reverse: the artifacts whose current compile consumed a unit. History:
|
|
4
|
+
// every compile group ever minted for the anchor, superseded ones included.
|
|
5
|
+
//
|
|
6
|
+
// RBAC (#217, same rule as vault_edges): the tool gates on any-read; an edge
|
|
7
|
+
// names two documents, so it is listed only when the caller can read BOTH
|
|
8
|
+
// endpoints' collections — invisible edges are omitted entirely from the
|
|
9
|
+
// list and the total, never redacted and never counted. A query anchored on
|
|
10
|
+
// an unreadable path returns an empty listing, identical to a nonexistent
|
|
11
|
+
// one — no existence confirmation either way.
|
|
12
|
+
import { hasAnyRead } from "../access/rbac.js";
|
|
13
|
+
import { currentConsumesEdges, listConsumesEdges, } from "../curation/consumes.js";
|
|
14
|
+
import { sourceReadable } from "../curation/tension-access.js";
|
|
15
|
+
import { err, ok } from "../frontmatter/types.js";
|
|
16
|
+
import { canonicalVaultRelPath } from "../storage/local.js";
|
|
17
|
+
import { openIndexForAccessOrNull } from "./search.js";
|
|
18
|
+
export async function vaultConsumes(vaultRoot, args, access) {
|
|
19
|
+
if (access && !hasAnyRead(access.role)) {
|
|
20
|
+
return err(new Error(`access denied: role '${access.roleName}' cannot use vault_consumes`));
|
|
21
|
+
}
|
|
22
|
+
const artifact = args.artifact;
|
|
23
|
+
const unit = args.unit;
|
|
24
|
+
const anchorRaw = typeof artifact === "string" ? artifact : typeof unit === "string" ? unit : "";
|
|
25
|
+
if ((artifact === undefined) === (unit === undefined) || anchorRaw.trim().length === 0) {
|
|
26
|
+
return err(new Error("vault_consumes takes exactly one of 'artifact' (forward: what did it " +
|
|
27
|
+
"consume) or 'unit' (reverse: who consumed it), as a non-empty string"));
|
|
28
|
+
}
|
|
29
|
+
const direction = typeof artifact === "string" ? "forward" : "reverse";
|
|
30
|
+
const anchor = canonicalVaultRelPath(vaultRoot, anchorRaw);
|
|
31
|
+
if (!anchor.ok)
|
|
32
|
+
return anchor;
|
|
33
|
+
let includeHistory = false;
|
|
34
|
+
if (args.include_history !== undefined && args.include_history !== null) {
|
|
35
|
+
if (typeof args.include_history !== "boolean") {
|
|
36
|
+
return err(new Error("vault_consumes 'include_history' must be a boolean"));
|
|
37
|
+
}
|
|
38
|
+
includeHistory = args.include_history;
|
|
39
|
+
}
|
|
40
|
+
const all = await listConsumesEdges(vaultRoot);
|
|
41
|
+
if (!all.ok)
|
|
42
|
+
return all;
|
|
43
|
+
const pool = includeHistory ? all.value : currentConsumesEdges(all.value);
|
|
44
|
+
let edges = pool.filter((e) => direction === "forward" ? e.artifact === anchor.value : e.unit === anchor.value);
|
|
45
|
+
// #217 decision A: plain omission, both endpoints must be readable.
|
|
46
|
+
if (access) {
|
|
47
|
+
const db = openIndexForAccessOrNull(vaultRoot);
|
|
48
|
+
try {
|
|
49
|
+
edges = edges.filter((e) => sourceReadable(db, access, e.artifact) && sourceReadable(db, access, e.unit));
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
db?.close();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return ok({
|
|
56
|
+
direction,
|
|
57
|
+
anchor: anchor.value,
|
|
58
|
+
edges,
|
|
59
|
+
total: edges.length,
|
|
60
|
+
include_history: includeHistory,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
export const consumesTools = [
|
|
64
|
+
{
|
|
65
|
+
name: "vault_consumes",
|
|
66
|
+
title: "Query the compiled dependency graph",
|
|
67
|
+
annotations: { readOnlyHint: true },
|
|
68
|
+
description: "Query the compiled consumes graph (#233): edges minted mechanically " +
|
|
69
|
+
"from run correlation — a write carrying a run_id consumes every " +
|
|
70
|
+
"document the same run read beforehand. Pass 'artifact' for the " +
|
|
71
|
+
"forward query (what did this document's current compile consume) or " +
|
|
72
|
+
"'unit' for the reverse query (which artifacts' current compiles " +
|
|
73
|
+
"consumed this document — the dependents a change may break). " +
|
|
74
|
+
"include_history: true returns every compile group ever minted for " +
|
|
75
|
+
"the anchor, not just the current one. Compiled edges are certain " +
|
|
76
|
+
"provenance (the run demonstrably read the unit), unlike declared " +
|
|
77
|
+
"sources or earned derives_from edges.",
|
|
78
|
+
inputSchema: {
|
|
79
|
+
type: "object",
|
|
80
|
+
properties: {
|
|
81
|
+
artifact: {
|
|
82
|
+
type: "string",
|
|
83
|
+
description: "Vault-relative path — forward query: inputs of this document",
|
|
84
|
+
},
|
|
85
|
+
unit: {
|
|
86
|
+
type: "string",
|
|
87
|
+
description: "Vault-relative path — reverse query: dependents of this document",
|
|
88
|
+
},
|
|
89
|
+
include_history: {
|
|
90
|
+
type: "boolean",
|
|
91
|
+
description: "Include superseded compile groups (default false: current only)",
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
additionalProperties: false,
|
|
95
|
+
},
|
|
96
|
+
handler: (vaultRoot, args, access) => vaultConsumes(vaultRoot, args, access),
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
//# sourceMappingURL=consumes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumes.js","sourceRoot":"","sources":["../../src/tools/consumes.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/curation.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { type AccessContext } from "../access/rbac.js";
|
|
|
2
2
|
import type { CoverageEquitySummary } from "../curation/coverage.js";
|
|
3
3
|
import { type LintCheckName, type LintFinding, type StagedActionLintItem, type TensionHealth } from "../curation/lint.js";
|
|
4
4
|
import { type ProvenanceEntry } from "../curation/provenance.js";
|
|
5
|
+
import type { ReviewThroughputSummary } from "../curation/review-throughput.js";
|
|
5
6
|
import type { ShadowLintSummary } from "../curation/shadow.js";
|
|
6
7
|
import { type TensionEntry } from "../curation/tension.js";
|
|
7
8
|
import { type TensionBlastResult } from "../curation/tension-blast.js";
|
|
@@ -21,6 +22,7 @@ export interface VaultLintResult {
|
|
|
21
22
|
stagedActions: StagedActionLintItem[];
|
|
22
23
|
shadowActions: ShadowLintSummary;
|
|
23
24
|
coverageEquity: CoverageEquitySummary;
|
|
25
|
+
reviewThroughput: ReviewThroughputSummary;
|
|
24
26
|
}
|
|
25
27
|
export declare function vaultLint(vaultRoot: string, args?: Record<string, unknown>, access?: AccessContext): Promise<Result<VaultLintResult, Error>>;
|
|
26
28
|
export interface VaultProvenanceResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curation.d.ts","sourceRoot":"","sources":["../../src/tools/curation.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,aAAa,EAAkC,MAAM,mBAAmB,CAAC;AAEvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,WAAW,EAEhB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,2BAA2B,CAAC;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAOL,KAAK,YAAY,EAElB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"curation.d.ts","sourceRoot":"","sources":["../../src/tools/curation.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,aAAa,EAAkC,MAAM,mBAAmB,CAAC;AAEvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,WAAW,EAEhB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,2BAA2B,CAAC;AACpF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAOL,KAAK,YAAY,EAElB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAuB,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAElG,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAmBhD,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAoEtC;AAUD,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAsFtC;AASD,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACnC,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC,CAY/C;AAWD,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CA8D5C;AAMD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,aAAa,EAAE,iBAAiB,CAAC;IACjC,cAAc,EAAE,qBAAqB,CAAC;IACtC,gBAAgB,EAAE,uBAAuB,CAAC;CAC3C;AAED,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAmEzC;AAMD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAID,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC,CA4C/C;AAMD,eAAO,MAAM,aAAa,EAAE,cAAc,EAmNzC,CAAC"}
|
package/dist/tools/curation.js
CHANGED
|
@@ -14,11 +14,13 @@ import { LINT_CHECKS, runLint, } from "../curation/lint.js";
|
|
|
14
14
|
import { readProvenanceLog } from "../curation/provenance.js";
|
|
15
15
|
import { sweepExpiredActions } from "../curation/staged-actions.js";
|
|
16
16
|
import { addTension, LOGGABLE_TENSION_KINDS, listTensions, RESOLUTION_KINDS, resolveTension, } from "../curation/tension.js";
|
|
17
|
-
import {
|
|
17
|
+
import { canSeeTension, sourceReadable, visibleTensions } from "../curation/tension-access.js";
|
|
18
|
+
import { bucketHiddenDownstream, computeTensionBlast, } from "../curation/tension-blast.js";
|
|
18
19
|
import { loadTensionClusters } from "../curation/tension-clusters.js";
|
|
19
20
|
import { parseDocument } from "../frontmatter/parser.js";
|
|
20
21
|
import { err, ok } from "../frontmatter/types.js";
|
|
21
22
|
import { readFile, resolveVaultPath } from "../storage/local.js";
|
|
23
|
+
import { openIndexForAccessOrNull } from "./search.js";
|
|
22
24
|
// Curation tools are open to any role with at least one read grant. A guest
|
|
23
25
|
// (or any role with no read access) is denied.
|
|
24
26
|
function requireReadAccess(tool, access) {
|
|
@@ -72,6 +74,23 @@ export async function vaultTensionLog(vaultRoot, args, access) {
|
|
|
72
74
|
return err(new Error(`vault_tension_log 'kind' must be one of: ${LOGGABLE_TENSION_KINDS.join(", ")} ` +
|
|
73
75
|
`(unspecified is for legacy entries only and is never loggable)`));
|
|
74
76
|
}
|
|
77
|
+
// #212: you cannot quote what you cannot read. The check resolves each
|
|
78
|
+
// side's collection, but the denial names the caller-supplied path, never
|
|
79
|
+
// the resolved collection — naming the collection would leak a
|
|
80
|
+
// frontmatter-declared collection for existing docs.
|
|
81
|
+
if (access) {
|
|
82
|
+
const db = openIndexForAccessOrNull(vaultRoot);
|
|
83
|
+
try {
|
|
84
|
+
for (const side of [sourceA.value, sourceB.value]) {
|
|
85
|
+
if (!sourceReadable(db, access, side)) {
|
|
86
|
+
return err(new Error(`access denied: role '${access.roleName}' cannot log a tension naming '${side}'`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
db?.close();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
75
94
|
return addTension(vaultRoot, {
|
|
76
95
|
title: title.value,
|
|
77
96
|
sourceA: sourceA.value,
|
|
@@ -138,6 +157,20 @@ export async function vaultTensionResolve(vaultRoot, args, access) {
|
|
|
138
157
|
if (!all.ok)
|
|
139
158
|
return all;
|
|
140
159
|
const target = all.value.find((t) => t.id === id.trim());
|
|
160
|
+
// #212: an invisible tension must be indistinguishable from a nonexistent
|
|
161
|
+
// one — checked BEFORE the ratify rule, whose error would otherwise
|
|
162
|
+
// confirm existence to a caller who cannot see the entry.
|
|
163
|
+
if (target && access) {
|
|
164
|
+
const db = openIndexForAccessOrNull(vaultRoot);
|
|
165
|
+
try {
|
|
166
|
+
if (!canSeeTension(db, access, target.sourceA, target.sourceB)) {
|
|
167
|
+
return err(new Error(`tension not found: ${id.trim()}`));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
db?.close();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
141
174
|
if (target && target.loggedBy === CONSOLIDATE_AGENT && access && !canRatify(access.role)) {
|
|
142
175
|
return err(new Error(`access denied: role '${access.roleName}' cannot resolve a loop-authored tension`));
|
|
143
176
|
}
|
|
@@ -166,7 +199,13 @@ export async function vaultTensionClusters(vaultRoot, _args = {}, access) {
|
|
|
166
199
|
const allowed = requireReadAccess("vault_tension_clusters", access);
|
|
167
200
|
if (!allowed.ok)
|
|
168
201
|
return allowed;
|
|
169
|
-
|
|
202
|
+
const db = access ? openIndexForAccessOrNull(vaultRoot) : null;
|
|
203
|
+
try {
|
|
204
|
+
return await loadTensionClusters(vaultRoot, new Date(), (entries) => visibleTensions(db, entries, access));
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
db?.close();
|
|
208
|
+
}
|
|
170
209
|
}
|
|
171
210
|
// ---------------------------------------------------------------------------
|
|
172
211
|
// vault_tension_blast
|
|
@@ -201,7 +240,43 @@ export async function vaultTensionBlast(vaultRoot, args, access) {
|
|
|
201
240
|
if (trimmed.length > 0)
|
|
202
241
|
cluster_id = trimmed;
|
|
203
242
|
}
|
|
204
|
-
|
|
243
|
+
const db = access ? openIndexForAccessOrNull(vaultRoot) : null;
|
|
244
|
+
try {
|
|
245
|
+
if (document !== undefined && access && !sourceReadable(db, access, document)) {
|
|
246
|
+
return err(new Error(`access denied: role '${access.roleName}' cannot blast from '${document}'`));
|
|
247
|
+
}
|
|
248
|
+
const result = await computeTensionBlast(vaultRoot, { document, cluster_id }, (entries) => visibleTensions(db, entries, access));
|
|
249
|
+
if (!result.ok || !access)
|
|
250
|
+
return result;
|
|
251
|
+
// #217 (B′): the downstream list omits docs the role cannot read; the
|
|
252
|
+
// visible counts and depth are recomputed over what remains, and the
|
|
253
|
+
// hidden remainder surfaces only as a coarsened bucket — an exact delta
|
|
254
|
+
// would disclose linked existence (small-cell class).
|
|
255
|
+
const kept = result.value.downstream.filter((e) => sourceReadable(db, access, e.path));
|
|
256
|
+
const hidden = result.value.downstream.length - kept.length;
|
|
257
|
+
let primary_blast = 0;
|
|
258
|
+
let advisory_blast = 0;
|
|
259
|
+
let max_depth = 0;
|
|
260
|
+
for (const e of kept) {
|
|
261
|
+
if (e.dependency_type === "source")
|
|
262
|
+
primary_blast += 1;
|
|
263
|
+
else
|
|
264
|
+
advisory_blast += 1;
|
|
265
|
+
if (e.distance > max_depth)
|
|
266
|
+
max_depth = e.distance;
|
|
267
|
+
}
|
|
268
|
+
return ok({
|
|
269
|
+
...result.value,
|
|
270
|
+
downstream: kept,
|
|
271
|
+
primary_blast,
|
|
272
|
+
advisory_blast,
|
|
273
|
+
max_depth,
|
|
274
|
+
hidden_downstream: bucketHiddenDownstream(hidden),
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
finally {
|
|
278
|
+
db?.close();
|
|
279
|
+
}
|
|
205
280
|
}
|
|
206
281
|
export async function vaultLint(vaultRoot, args = {}, access) {
|
|
207
282
|
const allowed = requireReadAccess("vault_lint", access);
|
|
@@ -226,7 +301,17 @@ export async function vaultLint(vaultRoot, args = {}, access) {
|
|
|
226
301
|
const swept = await sweepExpiredActions(vaultRoot);
|
|
227
302
|
if (!swept.ok)
|
|
228
303
|
return swept;
|
|
229
|
-
|
|
304
|
+
// #217: findings compute from the caller's vantage — runLint drops
|
|
305
|
+
// invisible docs before any check runs (see LintOptions.pathVisible).
|
|
306
|
+
// tensionHealth stays vault-global by design.
|
|
307
|
+
const db = access ? openIndexForAccessOrNull(vaultRoot) : null;
|
|
308
|
+
let report;
|
|
309
|
+
try {
|
|
310
|
+
report = await runLint(vaultRoot, access ? { pathVisible: (p) => sourceReadable(db, access, p) } : {});
|
|
311
|
+
}
|
|
312
|
+
finally {
|
|
313
|
+
db?.close();
|
|
314
|
+
}
|
|
230
315
|
if (!report.ok)
|
|
231
316
|
return report;
|
|
232
317
|
if (filter) {
|
|
@@ -240,6 +325,7 @@ export async function vaultLint(vaultRoot, args = {}, access) {
|
|
|
240
325
|
stagedActions: report.value.stagedActions,
|
|
241
326
|
shadowActions: report.value.shadowActions,
|
|
242
327
|
coverageEquity: report.value.coverageEquity,
|
|
328
|
+
reviewThroughput: report.value.reviewThroughput,
|
|
243
329
|
});
|
|
244
330
|
}
|
|
245
331
|
return ok({
|
|
@@ -251,6 +337,7 @@ export async function vaultLint(vaultRoot, args = {}, access) {
|
|
|
251
337
|
stagedActions: report.value.stagedActions,
|
|
252
338
|
shadowActions: report.value.shadowActions,
|
|
253
339
|
coverageEquity: report.value.coverageEquity,
|
|
340
|
+
reviewThroughput: report.value.reviewThroughput,
|
|
254
341
|
});
|
|
255
342
|
}
|
|
256
343
|
// Returns the write history of a single document, oldest entry first, read
|
|
@@ -276,7 +363,7 @@ export async function vaultProvenance(vaultRoot, args, access) {
|
|
|
276
363
|
let collection = filePath.split("/")[0] ?? "";
|
|
277
364
|
const resolved = resolveVaultPath(vaultRoot, filePath);
|
|
278
365
|
if (resolved.ok) {
|
|
279
|
-
const content = await readFile(resolved.value);
|
|
366
|
+
const content = await readFile(resolved.value.absPath);
|
|
280
367
|
if (content.ok) {
|
|
281
368
|
const parsed = parseDocument(content.value);
|
|
282
369
|
if (parsed.ok && parsed.value.frontmatter.collection) {
|
|
@@ -422,7 +509,11 @@ export const curationTools = [
|
|
|
422
509
|
"counts as primary. 'superseded_by' is not a blast edge: the doc that " +
|
|
423
510
|
"supersedes a contested doc is the replacement, not an inheritor. The " +
|
|
424
511
|
"response identifies the containing cluster (if any) so the agent sees " +
|
|
425
|
-
"the broader region without a second call.
|
|
512
|
+
"the broader region without a second call. Under RBAC the downstream " +
|
|
513
|
+
"list and counts cover only documents the role can read; " +
|
|
514
|
+
"'hidden_downstream' (none | some | many) coarsely signals unreadable " +
|
|
515
|
+
"downstream docs — treat 'some' or 'many' as 'the real blast exceeds " +
|
|
516
|
+
"what you can see' when weighing a resolution. Read-only.",
|
|
426
517
|
inputSchema: {
|
|
427
518
|
type: "object",
|
|
428
519
|
properties: {
|
|
@@ -450,9 +541,13 @@ export const curationTools = [
|
|
|
450
541
|
"TTL, orphan files with no inbound links, old drafts, stagnant " +
|
|
451
542
|
"low-confidence files, deprecated files still linked from canonical " +
|
|
452
543
|
"ones, and questions raised but unanswered anywhere in the vault. " +
|
|
544
|
+
"Under RBAC, findings compute from the caller's vantage: documents in " +
|
|
545
|
+
"unreadable collections are neither named nor counted as linkers. " +
|
|
453
546
|
"Also reports tension health (counts by kind and resolution kind, " +
|
|
454
547
|
"stable acknowledged persistent disagreements, and legacy unspecified " +
|
|
455
|
-
"entries)
|
|
548
|
+
"entries) — tension-health counts are deliberately VAULT-GLOBAL, not " +
|
|
549
|
+
"RBAC-filtered: counts only, no paths, so vault health reads the same " +
|
|
550
|
+
"for every role. Lists pending staged actions awaiting ratification, and — " +
|
|
456
551
|
"when the vault has run shadow_mode — summarizes shadow-logged writes " +
|
|
457
552
|
"with the ones the trust budget would have gated. " +
|
|
458
553
|
"Never auto-fixes vault content; it does, as housekeeping, expire " +
|