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
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// Best-effort static screen for regular expressions prone to catastrophic
|
|
2
|
+
// backtracking (ReDoS). Config-declared `pattern` fields are compiled and run
|
|
3
|
+
// against caller-supplied frontmatter on the write path; JS regex is
|
|
4
|
+
// synchronous, so a single pathological pattern (e.g. `(a+)+$`) can wedge the
|
|
5
|
+
// event loop for seconds-to-hours. We screen such patterns out at config load.
|
|
6
|
+
//
|
|
7
|
+
// ReDoS detection is undecidable in general — this is a conservative heuristic,
|
|
8
|
+
// not a proof. It catches the two footguns that account for virtually all
|
|
9
|
+
// real-world cases:
|
|
10
|
+
// 1. star height >= 2 — an unbounded quantifier applied to a group whose body
|
|
11
|
+
// itself contains an unbounded quantifier: `(a+)+`, `(a*)*`, `([a-z]+)*`.
|
|
12
|
+
// 2. a quantified group over an alternation with overlapping branches:
|
|
13
|
+
// `(a|a)*`, `(a|ab)*` — but NOT a disjoint set like `(cat|dog)+`.
|
|
14
|
+
// It is paired with a length cap on the value the regex runs against
|
|
15
|
+
// (frontmatter/schema.ts) as defense-in-depth against anything it misses.
|
|
16
|
+
// Removes escaped pairs (`\+`, `\.`) and character classes (`[a-z]`) so a
|
|
17
|
+
// literal quantifier char or a `+` inside a class isn't mistaken for a real
|
|
18
|
+
// quantifier. Both replacements are themselves linear-time.
|
|
19
|
+
function stripClassesAndEscapes(src) {
|
|
20
|
+
return src.replace(/\\./g, "").replace(/\[[^\]]*\]/g, "C");
|
|
21
|
+
}
|
|
22
|
+
// Splits an alternation body on top-level `|`, ignoring `|` nested inside groups.
|
|
23
|
+
function splitTopLevelAlternation(body) {
|
|
24
|
+
const branches = [];
|
|
25
|
+
let depth = 0;
|
|
26
|
+
let current = "";
|
|
27
|
+
for (const ch of body) {
|
|
28
|
+
if (ch === "(")
|
|
29
|
+
depth++;
|
|
30
|
+
else if (ch === ")")
|
|
31
|
+
depth = Math.max(0, depth - 1);
|
|
32
|
+
if (ch === "|" && depth === 0) {
|
|
33
|
+
branches.push(current);
|
|
34
|
+
current = "";
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
current += ch;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
branches.push(current);
|
|
41
|
+
return branches;
|
|
42
|
+
}
|
|
43
|
+
// True when a quantified group's body would let the same input be consumed more
|
|
44
|
+
// than one way, the precondition for exponential backtracking.
|
|
45
|
+
function bodyIsRisky(body) {
|
|
46
|
+
const stripped = stripClassesAndEscapes(body);
|
|
47
|
+
// Inner unbounded quantifier → star height >= 2.
|
|
48
|
+
if (/[*+]/.test(stripped))
|
|
49
|
+
return true;
|
|
50
|
+
if (/\{\d+,\}/.test(stripped))
|
|
51
|
+
return true;
|
|
52
|
+
// Overlapping alternation: a duplicate branch, or one branch a prefix of
|
|
53
|
+
// another (a|a, a|ab). Disjoint branches (cat|dog) are linear and allowed.
|
|
54
|
+
if (stripped.includes("|")) {
|
|
55
|
+
const branches = splitTopLevelAlternation(stripped).map((b) => b.trim());
|
|
56
|
+
for (let i = 0; i < branches.length; i++) {
|
|
57
|
+
for (let j = i + 1; j < branches.length; j++) {
|
|
58
|
+
const a = branches[i];
|
|
59
|
+
const b = branches[j];
|
|
60
|
+
if (a.length === 0 || b.length === 0)
|
|
61
|
+
continue;
|
|
62
|
+
if (a === b || a.startsWith(b) || b.startsWith(a))
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
// Returns true if `pattern` applies an unbounded quantifier (`*`, `+`, `{n,}`)
|
|
70
|
+
// to a group whose body is itself risky (see bodyIsRisky). Walks the pattern
|
|
71
|
+
// tracking group spans on a stack so nested groups are checked too.
|
|
72
|
+
export function hasCatastrophicBacktracking(pattern) {
|
|
73
|
+
const openStack = [];
|
|
74
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
75
|
+
const ch = pattern[i];
|
|
76
|
+
if (ch === "\\") {
|
|
77
|
+
i++; // skip the escaped char
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (ch === "(") {
|
|
81
|
+
openStack.push(i);
|
|
82
|
+
}
|
|
83
|
+
else if (ch === ")" && openStack.length > 0) {
|
|
84
|
+
const start = openStack.pop();
|
|
85
|
+
const next = pattern[i + 1];
|
|
86
|
+
let quantified = next === "*" || next === "+";
|
|
87
|
+
if (!quantified && next === "{") {
|
|
88
|
+
// Unbounded upper bound `{n,}` — bounded `{n,m}` is not flagged.
|
|
89
|
+
quantified = /^\{\d+,\}/.test(pattern.slice(i + 1));
|
|
90
|
+
}
|
|
91
|
+
if (quantified) {
|
|
92
|
+
// Strip a leading group prefix like `?:`, `?=`, `?<name>`.
|
|
93
|
+
const body = pattern.slice(start + 1, i).replace(/^\?[:=!]|^\?<[^>]*>/, "");
|
|
94
|
+
if (bodyIsRisky(body))
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=redos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redos.js","sourceRoot":"","sources":["../../src/utils/redos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-id.d.ts","sourceRoot":"","sources":["../../src/utils/run-id.ts"],"names":[],"mappings":"AAQA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE/D,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,CAQnC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Shared parser for the optional `run_id` trace identifier (#235/#233).
|
|
2
|
+
//
|
|
3
|
+
// A run id correlates one agent run's reads and writes: stamped into the
|
|
4
|
+
// provenance log on writes, the read log on reads, and staged-action
|
|
5
|
+
// proposals — the consumes-graph producer (#233) joins on it. Free text,
|
|
6
|
+
// caller-supplied; absent, null, or blank all resolve to `undefined`, and a
|
|
7
|
+
// non-string value is a hard error.
|
|
8
|
+
import { err, ok } from "../frontmatter/types.js";
|
|
9
|
+
export function readRunId(args, tool) {
|
|
10
|
+
const v = args.run_id;
|
|
11
|
+
if (v === undefined || v === null)
|
|
12
|
+
return ok(undefined);
|
|
13
|
+
if (typeof v !== "string") {
|
|
14
|
+
return err(new Error(`${tool}: 'run_id' must be a string`));
|
|
15
|
+
}
|
|
16
|
+
const trimmed = v.trim();
|
|
17
|
+
return ok(trimmed.length === 0 ? undefined : trimmed);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=run-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-id.js","sourceRoot":"","sources":["../../src/utils/run-id.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,yEAAyE;AACzE,qEAAqE;AACrE,yEAAyE;AACzE,4EAA4E;AAC5E,oCAAoC;AAEpC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,yBAAyB,CAAC;AAE/D,MAAM,UAAU,SAAS,CACvB,IAA6B,EAC7B,IAAY;IAEZ,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzB,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const VAULT_GITIGNORE = "# Daftari rebuilds these from the markdown files \u2014 never commit them.\n.daftari/index.db\n.daftari/index.db-journal\n.daftari/index.db-wal\n.daftari/index.db-shm\n.daftari/locks.db\n.daftari/locks.db-journal\n.daftari/locks.db-wal\n.daftari/locks.db-shm\n# Local audit state \u2014 advisory, not vault content. Matters most when a vault\n# runs with auto_commit: false inside a larger repo: keeps the host repo's\n# git status clean of Daftari's per-write log churn.\n.daftari/curation-log.jsonl\n.daftari/staged-actions.jsonl\n.daftari/edges.jsonl\n.daftari/shadow-actions.jsonl\n.daftari/consolidate-state.json\n# Transient backfill staging surface (daftari backfill --plan). The apply\n# commit is the durable audit trail \u2014 the plan itself is never committed.\n.daftari/backfill-plan.jsonl\n";
|
|
1
|
+
export declare const VAULT_GITIGNORE = "# Daftari rebuilds these from the markdown files \u2014 never commit them.\n.daftari/index.db\n.daftari/index.db-journal\n.daftari/index.db-wal\n.daftari/index.db-shm\n.daftari/locks.db\n.daftari/locks.db-journal\n.daftari/locks.db-wal\n.daftari/locks.db-shm\n# Local audit state \u2014 advisory, not vault content. Matters most when a vault\n# runs with auto_commit: false inside a larger repo: keeps the host repo's\n# git status clean of Daftari's per-write log churn.\n.daftari/curation-log.jsonl\n.daftari/staged-actions.jsonl\n.daftari/edges.jsonl\n.daftari/read-log.jsonl\n.daftari/consumes.jsonl\n.daftari/tier2-verdicts.jsonl\n.daftari/shadow-actions.jsonl\n.daftari/consolidate-state.json\n# Transient backfill staging surface (daftari backfill --plan). The apply\n# commit is the durable audit trail \u2014 the plan itself is never committed.\n.daftari/backfill-plan.jsonl\n# Nightly wake-queue snapshot (daftari sleep) \u2014 regenerated each cycle.\n.daftari/wake-queue.jsonl\n";
|
|
2
2
|
export declare function ensureVaultGitignore(vaultRoot: string): Promise<"created" | "appended" | "present">;
|
|
3
3
|
//# sourceMappingURL=vault-gitignore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-gitignore.d.ts","sourceRoot":"","sources":["../../src/utils/vault-gitignore.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"vault-gitignore.d.ts","sourceRoot":"","sources":["../../src/utils/vault-gitignore.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,eAAe,m+BAyB3B,CAAC;AAUF,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,CAqB7C"}
|
|
@@ -22,11 +22,16 @@ export const VAULT_GITIGNORE = `# Daftari rebuilds these from the markdown files
|
|
|
22
22
|
.daftari/curation-log.jsonl
|
|
23
23
|
.daftari/staged-actions.jsonl
|
|
24
24
|
.daftari/edges.jsonl
|
|
25
|
+
.daftari/read-log.jsonl
|
|
26
|
+
.daftari/consumes.jsonl
|
|
27
|
+
.daftari/tier2-verdicts.jsonl
|
|
25
28
|
.daftari/shadow-actions.jsonl
|
|
26
29
|
.daftari/consolidate-state.json
|
|
27
30
|
# Transient backfill staging surface (daftari backfill --plan). The apply
|
|
28
31
|
# commit is the durable audit trail — the plan itself is never committed.
|
|
29
32
|
.daftari/backfill-plan.jsonl
|
|
33
|
+
# Nightly wake-queue snapshot (daftari sleep) — regenerated each cycle.
|
|
34
|
+
.daftari/wake-queue.jsonl
|
|
30
35
|
`;
|
|
31
36
|
// A stable line guaranteed to appear in VAULT_GITIGNORE; used as the marker to
|
|
32
37
|
// detect whether an existing .gitignore already carries the Daftari block.
|
|
@@ -53,7 +58,7 @@ export async function ensureVaultGitignore(vaultRoot) {
|
|
|
53
58
|
// Separate the user's content from our block so it doesn't glue onto their
|
|
54
59
|
// last line. A leading "\n" guarantees a clean break whether or not the file
|
|
55
60
|
// ends in a newline.
|
|
56
|
-
await appendFile(path,
|
|
61
|
+
await appendFile(path, `\n${VAULT_GITIGNORE}`);
|
|
57
62
|
return "appended";
|
|
58
63
|
}
|
|
59
64
|
//# sourceMappingURL=vault-gitignore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault-gitignore.js","sourceRoot":"","sources":["../../src/utils/vault-gitignore.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,yEAAyE;AACzE,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,YAAY;AAEZ,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,eAAe,GAAG
|
|
1
|
+
{"version":3,"file":"vault-gitignore.js","sourceRoot":"","sources":["../../src/utils/vault-gitignore.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,yEAAyE;AACzE,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,YAAY;AAEZ,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyB9B,CAAC;AAEF,+EAA+E;AAC/E,2EAA2E;AAC3E,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEnC,+EAA+E;AAC/E,+DAA+D;AAC/D,sEAAsE;AACtE,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAiB;IAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAE3C,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnD,MAAM,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACvC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAEhD,2EAA2E;IAC3E,6EAA6E;IAC7E,qBAAqB;IACrB,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,eAAe,EAAE,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type AccessContext } from "../access/rbac.js";
|
|
2
|
+
import { type Result } from "../frontmatter/types.js";
|
|
3
|
+
export declare const WAGER_STAKES: Record<string, number>;
|
|
4
|
+
export declare const WAGER_SURVIVAL_CREDIT = 1;
|
|
5
|
+
export declare const WAGER_GONE_STAKE = 1;
|
|
6
|
+
export declare const FLAT_CURVE_SHARE = 0.95;
|
|
7
|
+
export declare function stakeFor(confidence: string): number;
|
|
8
|
+
export interface PrincipalRecord {
|
|
9
|
+
principal: string;
|
|
10
|
+
writes: number;
|
|
11
|
+
firstWriteAt: string | null;
|
|
12
|
+
lastWriteAt: string | null;
|
|
13
|
+
docsAuthored: number;
|
|
14
|
+
liveClaims: number;
|
|
15
|
+
openExposure: number;
|
|
16
|
+
contestedOpen: number;
|
|
17
|
+
stakeAtRisk: number;
|
|
18
|
+
lost: number;
|
|
19
|
+
burnedStake: number;
|
|
20
|
+
survived: number;
|
|
21
|
+
creditEarned: number;
|
|
22
|
+
balance: number;
|
|
23
|
+
proposals: {
|
|
24
|
+
total: number;
|
|
25
|
+
ratified: number;
|
|
26
|
+
rejected: number;
|
|
27
|
+
expired: number;
|
|
28
|
+
pending: number;
|
|
29
|
+
};
|
|
30
|
+
tensionsLogged: number;
|
|
31
|
+
}
|
|
32
|
+
export interface WitnessResult {
|
|
33
|
+
principals: PrincipalRecord[];
|
|
34
|
+
unattributedDocs: number;
|
|
35
|
+
concentration: {
|
|
36
|
+
topPrincipal: string | null;
|
|
37
|
+
topShare: number;
|
|
38
|
+
};
|
|
39
|
+
flatCurveWarning: boolean;
|
|
40
|
+
}
|
|
41
|
+
export declare function buildWitness(vaultRoot: string, now?: Date, access?: AccessContext): Promise<Result<WitnessResult, Error>>;
|
|
42
|
+
//# sourceMappingURL=track-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-record.d.ts","sourceRoot":"","sources":["../../src/witness/track-record.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAMhE,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAK1D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAkC,CAAC;AAEnF,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAGvC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAGlC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAElB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IAErB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IAEpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAEhB,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAMD,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,IAAiB,EACtB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CA+IvC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
// The vault as witness — per-principal track records, priced by the wager
|
|
2
|
+
// schedule. (Positioning ideas 4 + 9, gated on and cleared by the CB7
|
|
3
|
+
// result.)
|
|
4
|
+
//
|
|
5
|
+
// Every write already carries an identity (§11.6), every proposal an
|
|
6
|
+
// outcome, every tension a logger and a resolution. This module aggregates
|
|
7
|
+
// what the ledger already recorded into a reliability curve per principal —
|
|
8
|
+
// and prices it: writing a claim at a confidence level stakes wager points;
|
|
9
|
+
// a claim later corrected or retired by someone else burns the stake; a
|
|
10
|
+
// claim maintained through a full TTL cycle earns credit. Everything is
|
|
11
|
+
// computed at read time from the logs — no new persistent state, no
|
|
12
|
+
// enforcement, nothing minted. The constants are provisional and exported:
|
|
13
|
+
// they are the thing being calibrated, exactly like the §11.5 impact table.
|
|
14
|
+
//
|
|
15
|
+
// Kill-condition instrumentation (stated in the positioning doc):
|
|
16
|
+
// idea 4 — if one principal does ~all the writing, the curves are flat and
|
|
17
|
+
// track records are uninformative: `concentration` reports it, and the
|
|
18
|
+
// caller sees `flatCurveWarning` instead of a false signal.
|
|
19
|
+
// idea 9 — if stake-fear suppresses true claims, write volume drops:
|
|
20
|
+
// `firstWriteAt`/`lastWriteAt`/`writes` give the longitudinal series an
|
|
21
|
+
// external monitor needs.
|
|
22
|
+
import { canRead } from "../access/rbac.js";
|
|
23
|
+
import { readProvenanceLog } from "../curation/provenance.js";
|
|
24
|
+
import { listStagedActions } from "../curation/staged-actions.js";
|
|
25
|
+
import { ageInDays, computeStaleness } from "../curation/staleness.js";
|
|
26
|
+
import { listTensions } from "../curation/tension.js";
|
|
27
|
+
import { loadDocuments } from "../curation/vault-docs.js";
|
|
28
|
+
import { ok } from "../frontmatter/types.js";
|
|
29
|
+
// The wager schedule (provisional; exported for calibration). Confidence is
|
|
30
|
+
// free to claim — the stake makes it cost something. `low` is deliberately
|
|
31
|
+
// free: hedged claims are the honest default and must never be taxed.
|
|
32
|
+
export const WAGER_STAKES = { low: 0, medium: 1, high: 3 };
|
|
33
|
+
// Credit for a claim maintained through at least one full TTL cycle.
|
|
34
|
+
export const WAGER_SURVIVAL_CREDIT = 1;
|
|
35
|
+
// A claim whose document has since been deleted burns at the medium stake —
|
|
36
|
+
// its confidence at write time is no longer recoverable without a ledger.
|
|
37
|
+
export const WAGER_GONE_STAKE = 1;
|
|
38
|
+
// Write-share above which track records are declared uninformative (idea 4's
|
|
39
|
+
// kill condition: one author, flat curves).
|
|
40
|
+
export const FLAT_CURVE_SHARE = 0.95;
|
|
41
|
+
export function stakeFor(confidence) {
|
|
42
|
+
return WAGER_STAKES[confidence] ?? WAGER_GONE_STAKE;
|
|
43
|
+
}
|
|
44
|
+
function topCollection(relPath) {
|
|
45
|
+
return relPath.split("/")[0] ?? "";
|
|
46
|
+
}
|
|
47
|
+
export async function buildWitness(vaultRoot, now = new Date(), access) {
|
|
48
|
+
const log = await readProvenanceLog(vaultRoot);
|
|
49
|
+
if (!log.ok)
|
|
50
|
+
return log;
|
|
51
|
+
const docs = await loadDocuments(vaultRoot);
|
|
52
|
+
if (!docs.ok)
|
|
53
|
+
return docs;
|
|
54
|
+
const tensions = await listTensions(vaultRoot);
|
|
55
|
+
if (!tensions.ok)
|
|
56
|
+
return tensions;
|
|
57
|
+
const actions = await listStagedActions(vaultRoot);
|
|
58
|
+
if (!actions.ok)
|
|
59
|
+
return actions;
|
|
60
|
+
// RBAC: with an access context, everything is scoped to readable
|
|
61
|
+
// collections (the vault_status precedent) — a witness report never leaks
|
|
62
|
+
// activity counts from a denied collection.
|
|
63
|
+
const readable = (path, fmCollection) => !access || canRead(access.role, fmCollection || topCollection(path));
|
|
64
|
+
const visibleLog = log.value.filter((e) => readable(e.file));
|
|
65
|
+
const visibleDocs = docs.value.filter((d) => readable(d.path, d.frontmatter.collection));
|
|
66
|
+
const docByPath = new Map(visibleDocs.map((d) => [d.path, d]));
|
|
67
|
+
const visibleTensions = tensions.value.filter((t) => readable(t.sourceA) && readable(t.sourceB));
|
|
68
|
+
const visibleActions = actions.value.filter((a) => readable(a.targetPath));
|
|
69
|
+
// Authorship: the identity on a file's FIRST provenance entry. The
|
|
70
|
+
// principal (authenticated, §11.6) outranks the free-text agent claim.
|
|
71
|
+
const authorOf = new Map();
|
|
72
|
+
const identityOf = (e) => e.principal ?? e.agent;
|
|
73
|
+
for (const e of visibleLog) {
|
|
74
|
+
if (!authorOf.has(e.file))
|
|
75
|
+
authorOf.set(e.file, identityOf(e));
|
|
76
|
+
}
|
|
77
|
+
// Contested / corrected doc sets from the tension log.
|
|
78
|
+
const contestedDocs = new Set();
|
|
79
|
+
const correctedDocs = new Set();
|
|
80
|
+
for (const t of visibleTensions) {
|
|
81
|
+
if (!t.resolved) {
|
|
82
|
+
contestedDocs.add(t.sourceA);
|
|
83
|
+
contestedDocs.add(t.sourceB);
|
|
84
|
+
}
|
|
85
|
+
else if (t.resolution?.kind === "corrected") {
|
|
86
|
+
correctedDocs.add(t.sourceA);
|
|
87
|
+
correctedDocs.add(t.sourceB);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const records = new Map();
|
|
91
|
+
const recordFor = (principal) => {
|
|
92
|
+
let r = records.get(principal);
|
|
93
|
+
if (!r) {
|
|
94
|
+
r = {
|
|
95
|
+
principal,
|
|
96
|
+
writes: 0,
|
|
97
|
+
firstWriteAt: null,
|
|
98
|
+
lastWriteAt: null,
|
|
99
|
+
docsAuthored: 0,
|
|
100
|
+
liveClaims: 0,
|
|
101
|
+
openExposure: 0,
|
|
102
|
+
contestedOpen: 0,
|
|
103
|
+
stakeAtRisk: 0,
|
|
104
|
+
lost: 0,
|
|
105
|
+
burnedStake: 0,
|
|
106
|
+
survived: 0,
|
|
107
|
+
creditEarned: 0,
|
|
108
|
+
balance: 0,
|
|
109
|
+
proposals: { total: 0, ratified: 0, rejected: 0, expired: 0, pending: 0 },
|
|
110
|
+
tensionsLogged: 0,
|
|
111
|
+
};
|
|
112
|
+
records.set(principal, r);
|
|
113
|
+
}
|
|
114
|
+
return r;
|
|
115
|
+
};
|
|
116
|
+
for (const e of visibleLog) {
|
|
117
|
+
const r = recordFor(identityOf(e));
|
|
118
|
+
r.writes += 1;
|
|
119
|
+
if (r.firstWriteAt === null || e.timestamp < r.firstWriteAt)
|
|
120
|
+
r.firstWriteAt = e.timestamp;
|
|
121
|
+
if (r.lastWriteAt === null || e.timestamp > r.lastWriteAt)
|
|
122
|
+
r.lastWriteAt = e.timestamp;
|
|
123
|
+
}
|
|
124
|
+
for (const [path, author] of authorOf) {
|
|
125
|
+
const r = recordFor(author);
|
|
126
|
+
r.docsAuthored += 1;
|
|
127
|
+
const doc = docByPath.get(path);
|
|
128
|
+
if (!doc) {
|
|
129
|
+
// The claim's document is gone — settled against the author.
|
|
130
|
+
r.lost += 1;
|
|
131
|
+
r.burnedStake += WAGER_GONE_STAKE;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const fm = doc.frontmatter;
|
|
135
|
+
const stake = stakeFor(fm.confidence);
|
|
136
|
+
const retired = fm.status === "deprecated" || fm.status === "superseded";
|
|
137
|
+
if (retired || correctedDocs.has(path)) {
|
|
138
|
+
r.lost += 1;
|
|
139
|
+
r.burnedStake += stake;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (fm.status !== "canonical")
|
|
143
|
+
continue; // drafts/archived: no live claim, no wager
|
|
144
|
+
r.liveClaims += 1;
|
|
145
|
+
r.openExposure += stake;
|
|
146
|
+
if (contestedDocs.has(path)) {
|
|
147
|
+
r.contestedOpen += 1;
|
|
148
|
+
r.stakeAtRisk += stake;
|
|
149
|
+
}
|
|
150
|
+
// Survived: maintained through at least one full TTL cycle — old enough
|
|
151
|
+
// to have needed re-verification, and not currently expired.
|
|
152
|
+
const s = computeStaleness({ updated: fm.updated, ttl_days: fm.ttl_days }, now);
|
|
153
|
+
if (fm.ttl_days !== null && ageInDays(fm.created, now) >= fm.ttl_days && !s.expired) {
|
|
154
|
+
r.survived += 1;
|
|
155
|
+
r.creditEarned += WAGER_SURVIVAL_CREDIT;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
for (const a of visibleActions) {
|
|
159
|
+
const r = recordFor(a.proposedBy);
|
|
160
|
+
r.proposals.total += 1;
|
|
161
|
+
if (a.status === "ratified" || a.status === "ratified-pending-tool")
|
|
162
|
+
r.proposals.ratified += 1;
|
|
163
|
+
else if (a.status === "rejected")
|
|
164
|
+
r.proposals.rejected += 1;
|
|
165
|
+
else if (a.status === "expired")
|
|
166
|
+
r.proposals.expired += 1;
|
|
167
|
+
else
|
|
168
|
+
r.proposals.pending += 1;
|
|
169
|
+
}
|
|
170
|
+
for (const t of visibleTensions) {
|
|
171
|
+
if (t.loggedBy)
|
|
172
|
+
recordFor(t.loggedBy).tensionsLogged += 1;
|
|
173
|
+
}
|
|
174
|
+
const principals = [...records.values()];
|
|
175
|
+
for (const r of principals)
|
|
176
|
+
r.balance = r.creditEarned - r.burnedStake;
|
|
177
|
+
principals.sort((a, b) => b.writes - a.writes || a.principal.localeCompare(b.principal));
|
|
178
|
+
const totalWrites = principals.reduce((n, r) => n + r.writes, 0);
|
|
179
|
+
const top = principals[0];
|
|
180
|
+
const topShare = totalWrites > 0 && top ? top.writes / totalWrites : 0;
|
|
181
|
+
const unattributedDocs = visibleDocs.filter((d) => !authorOf.has(d.path)).length;
|
|
182
|
+
return ok({
|
|
183
|
+
principals,
|
|
184
|
+
unattributedDocs,
|
|
185
|
+
concentration: { topPrincipal: top?.principal ?? null, topShare },
|
|
186
|
+
flatCurveWarning: totalWrites > 0 && topShare >= FLAT_CURVE_SHARE,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=track-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-record.js","sourceRoot":"","sources":["../../src/witness/track-record.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "daftari",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.31.0",
|
|
4
4
|
"description": "An open-source, multi-user knowledge vault exposed to AI agents via an MCP server.",
|
|
5
|
+
"mcpName": "io.github.mavaali/daftari",
|
|
5
6
|
"license": "MIT",
|
|
6
7
|
"author": "Mihir Wagle / mavaali",
|
|
7
8
|
"type": "module",
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
"lint:fix": "biome check --write src test",
|
|
36
37
|
"format": "biome format --write src test",
|
|
37
38
|
"pack:mcpb": "node scripts/pack-mcpb.mjs",
|
|
39
|
+
"regression:update-baseline": "node scripts/regression-update-baseline.mjs",
|
|
38
40
|
"prepublishOnly": "npm run build",
|
|
39
41
|
"prepare": "husky"
|
|
40
42
|
},
|
|
@@ -53,13 +55,14 @@
|
|
|
53
55
|
]
|
|
54
56
|
},
|
|
55
57
|
"dependencies": {
|
|
56
|
-
"@anthropic-ai/sdk": "^0.
|
|
58
|
+
"@anthropic-ai/sdk": "^0.110.0",
|
|
57
59
|
"@huggingface/transformers": "^4.2.0",
|
|
58
60
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
59
61
|
"better-sqlite3": "^12.10.0",
|
|
60
62
|
"chokidar": "^4.0.3",
|
|
61
63
|
"glob": "^13.0.6",
|
|
62
64
|
"gray-matter": "^4.0.3",
|
|
65
|
+
"jose": "^6.2.4",
|
|
63
66
|
"js-yaml": "^4.1.1",
|
|
64
67
|
"sqlite-vec": "^0.1.9"
|
|
65
68
|
},
|
|
@@ -68,10 +71,32 @@
|
|
|
68
71
|
"@types/better-sqlite3": "^7.6.13",
|
|
69
72
|
"@types/js-yaml": "^4.0.9",
|
|
70
73
|
"@types/node": "^25.8.0",
|
|
74
|
+
"@types/pg": "^8.20.0",
|
|
71
75
|
"husky": "^9.1.7",
|
|
72
76
|
"lint-staged": "^16.4.0",
|
|
77
|
+
"pg": "^8.22.0",
|
|
73
78
|
"tsx": "^4.22.1",
|
|
74
79
|
"typescript": "^6.0.3",
|
|
75
80
|
"vitest": "^4.1.6"
|
|
81
|
+
},
|
|
82
|
+
"overrides": {
|
|
83
|
+
"protobufjs": "^7.6.1",
|
|
84
|
+
"hono": "^4.12.25"
|
|
85
|
+
},
|
|
86
|
+
"peerDependencies": {
|
|
87
|
+
"pg": ">=8",
|
|
88
|
+
"@aws-sdk/client-s3": "^3.600.0",
|
|
89
|
+
"@azure/storage-blob": "^12.24.0"
|
|
90
|
+
},
|
|
91
|
+
"peerDependenciesMeta": {
|
|
92
|
+
"pg": {
|
|
93
|
+
"optional": true
|
|
94
|
+
},
|
|
95
|
+
"@aws-sdk/client-s3": {
|
|
96
|
+
"optional": true
|
|
97
|
+
},
|
|
98
|
+
"@azure/storage-blob": {
|
|
99
|
+
"optional": true
|
|
100
|
+
}
|
|
76
101
|
}
|
|
77
102
|
}
|
package/templates/config.yaml
CHANGED
|
@@ -32,3 +32,11 @@ roles:
|
|
|
32
32
|
write: ["*"]
|
|
33
33
|
promote: true
|
|
34
34
|
ratify: true
|
|
35
|
+
# A propose-only role (#235): its vault_write calls land as staged 'write'
|
|
36
|
+
# proposals awaiting vault_ratify, and every other direct write tool is
|
|
37
|
+
# denied. The write list still scopes which collections it may propose into.
|
|
38
|
+
# This is the recommended role shape for autonomous agents.
|
|
39
|
+
agent-proposer:
|
|
40
|
+
read: ["*"]
|
|
41
|
+
write: ["*"]
|
|
42
|
+
propose_only: true
|