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.
Files changed (369) hide show
  1. package/CHANGELOG.md +281 -0
  2. package/README.md +263 -9
  3. package/dist/access/rbac.d.ts +1 -0
  4. package/dist/access/rbac.d.ts.map +1 -1
  5. package/dist/access/rbac.js +7 -0
  6. package/dist/access/rbac.js.map +1 -1
  7. package/dist/asof/git-read.d.ts +17 -0
  8. package/dist/asof/git-read.d.ts.map +1 -0
  9. package/dist/asof/git-read.js +163 -0
  10. package/dist/asof/git-read.js.map +1 -0
  11. package/dist/asof/index.d.ts +2 -0
  12. package/dist/asof/index.d.ts.map +1 -0
  13. package/dist/asof/index.js +151 -0
  14. package/dist/asof/index.js.map +1 -0
  15. package/dist/asof/report.d.ts +11 -0
  16. package/dist/asof/report.d.ts.map +1 -0
  17. package/dist/asof/report.js +119 -0
  18. package/dist/asof/report.js.map +1 -0
  19. package/dist/asof/snapshot.d.ts +72 -0
  20. package/dist/asof/snapshot.d.ts.map +1 -0
  21. package/dist/asof/snapshot.js +207 -0
  22. package/dist/asof/snapshot.js.map +1 -0
  23. package/dist/audit/checks/broken_refs.d.ts +1 -1
  24. package/dist/audit/checks/broken_refs.d.ts.map +1 -1
  25. package/dist/audit/checks/broken_refs.js +77 -22
  26. package/dist/audit/checks/broken_refs.js.map +1 -1
  27. package/dist/audit/collect.d.ts +1 -0
  28. package/dist/audit/collect.d.ts.map +1 -1
  29. package/dist/audit/collect.js +22 -2
  30. package/dist/audit/collect.js.map +1 -1
  31. package/dist/audit/index.d.ts.map +1 -1
  32. package/dist/audit/index.js +9 -3
  33. package/dist/audit/index.js.map +1 -1
  34. package/dist/audit/links.d.ts.map +1 -1
  35. package/dist/audit/links.js +9 -3
  36. package/dist/audit/links.js.map +1 -1
  37. package/dist/audit/report.d.ts.map +1 -1
  38. package/dist/audit/report.js +2 -0
  39. package/dist/audit/report.js.map +1 -1
  40. package/dist/audit/types.d.ts +4 -1
  41. package/dist/audit/types.d.ts.map +1 -1
  42. package/dist/audit/types.js.map +1 -1
  43. package/dist/backfill/apply.js +2 -2
  44. package/dist/backfill/apply.js.map +1 -1
  45. package/dist/backfill/derive.d.ts.map +1 -1
  46. package/dist/backfill/derive.js +1 -0
  47. package/dist/backfill/derive.js.map +1 -1
  48. package/dist/backfill/plan.js +2 -2
  49. package/dist/backfill/plan.js.map +1 -1
  50. package/dist/cli.d.ts.map +1 -1
  51. package/dist/cli.js +36 -0
  52. package/dist/cli.js.map +1 -1
  53. package/dist/consolidate/call-budget.d.ts +3 -0
  54. package/dist/consolidate/call-budget.d.ts.map +1 -0
  55. package/dist/consolidate/call-budget.js +37 -0
  56. package/dist/consolidate/call-budget.js.map +1 -0
  57. package/dist/consolidate/constants.d.ts +1 -0
  58. package/dist/consolidate/constants.d.ts.map +1 -1
  59. package/dist/consolidate/constants.js +5 -0
  60. package/dist/consolidate/constants.js.map +1 -1
  61. package/dist/consolidate/index.d.ts.map +1 -1
  62. package/dist/consolidate/index.js +96 -27
  63. package/dist/consolidate/index.js.map +1 -1
  64. package/dist/court/docket.d.ts +39 -0
  65. package/dist/court/docket.d.ts.map +1 -0
  66. package/dist/court/docket.js +103 -0
  67. package/dist/court/docket.js.map +1 -0
  68. package/dist/court/index.d.ts +2 -0
  69. package/dist/court/index.d.ts.map +1 -0
  70. package/dist/court/index.js +169 -0
  71. package/dist/court/index.js.map +1 -0
  72. package/dist/court/precedent.d.ts +18 -0
  73. package/dist/court/precedent.d.ts.map +1 -0
  74. package/dist/court/precedent.js +89 -0
  75. package/dist/court/precedent.js.map +1 -0
  76. package/dist/court/report.d.ts +10 -0
  77. package/dist/court/report.d.ts.map +1 -0
  78. package/dist/court/report.js +77 -0
  79. package/dist/court/report.js.map +1 -0
  80. package/dist/curation/consumes.d.ts +24 -0
  81. package/dist/curation/consumes.d.ts.map +1 -0
  82. package/dist/curation/consumes.js +122 -0
  83. package/dist/curation/consumes.js.map +1 -0
  84. package/dist/curation/edge-staleness.d.ts +47 -0
  85. package/dist/curation/edge-staleness.d.ts.map +1 -0
  86. package/dist/curation/edge-staleness.js +258 -0
  87. package/dist/curation/edge-staleness.js.map +1 -0
  88. package/dist/curation/edges.d.ts.map +1 -1
  89. package/dist/curation/edges.js +164 -10
  90. package/dist/curation/edges.js.map +1 -1
  91. package/dist/curation/lint.d.ts +4 -1
  92. package/dist/curation/lint.d.ts.map +1 -1
  93. package/dist/curation/lint.js +61 -6
  94. package/dist/curation/lint.js.map +1 -1
  95. package/dist/curation/provenance.d.ts +2 -0
  96. package/dist/curation/provenance.d.ts.map +1 -1
  97. package/dist/curation/provenance.js +2 -0
  98. package/dist/curation/provenance.js.map +1 -1
  99. package/dist/curation/read-log.d.ts +19 -0
  100. package/dist/curation/read-log.d.ts.map +1 -0
  101. package/dist/curation/read-log.js +120 -0
  102. package/dist/curation/read-log.js.map +1 -0
  103. package/dist/curation/review-throughput.d.ts +24 -0
  104. package/dist/curation/review-throughput.d.ts.map +1 -0
  105. package/dist/curation/review-throughput.js +102 -0
  106. package/dist/curation/review-throughput.js.map +1 -0
  107. package/dist/curation/staged-actions.d.ts +11 -1
  108. package/dist/curation/staged-actions.d.ts.map +1 -1
  109. package/dist/curation/staged-actions.js +117 -30
  110. package/dist/curation/staged-actions.js.map +1 -1
  111. package/dist/curation/staleness.js +1 -1
  112. package/dist/curation/staleness.js.map +1 -1
  113. package/dist/curation/structural.d.ts +16 -0
  114. package/dist/curation/structural.d.ts.map +1 -0
  115. package/dist/curation/structural.js +64 -0
  116. package/dist/curation/structural.js.map +1 -0
  117. package/dist/curation/tension-access.d.ts +7 -0
  118. package/dist/curation/tension-access.d.ts.map +1 -0
  119. package/dist/curation/tension-access.js +44 -0
  120. package/dist/curation/tension-access.js.map +1 -0
  121. package/dist/curation/tension-blast.d.ts +6 -1
  122. package/dist/curation/tension-blast.d.ts.map +1 -1
  123. package/dist/curation/tension-blast.js +11 -2
  124. package/dist/curation/tension-blast.js.map +1 -1
  125. package/dist/curation/tension-clusters.d.ts +1 -1
  126. package/dist/curation/tension-clusters.d.ts.map +1 -1
  127. package/dist/curation/tension-clusters.js +5 -2
  128. package/dist/curation/tension-clusters.js.map +1 -1
  129. package/dist/curation/tension.d.ts +6 -2
  130. package/dist/curation/tension.d.ts.map +1 -1
  131. package/dist/curation/tension.js +86 -35
  132. package/dist/curation/tension.js.map +1 -1
  133. package/dist/curation/tier0.d.ts +27 -0
  134. package/dist/curation/tier0.d.ts.map +1 -0
  135. package/dist/curation/tier0.js +196 -0
  136. package/dist/curation/tier0.js.map +1 -0
  137. package/dist/curation/tier1.d.ts +30 -0
  138. package/dist/curation/tier1.d.ts.map +1 -0
  139. package/dist/curation/tier1.js +142 -0
  140. package/dist/curation/tier1.js.map +1 -0
  141. package/dist/curation/tier2.d.ts +43 -0
  142. package/dist/curation/tier2.d.ts.map +1 -0
  143. package/dist/curation/tier2.js +182 -0
  144. package/dist/curation/tier2.js.map +1 -0
  145. package/dist/curation/vault-docs.d.ts +5 -1
  146. package/dist/curation/vault-docs.d.ts.map +1 -1
  147. package/dist/curation/vault-docs.js +15 -1
  148. package/dist/curation/vault-docs.js.map +1 -1
  149. package/dist/eval/generate.js +22 -5
  150. package/dist/eval/generate.js.map +1 -1
  151. package/dist/eval/index.d.ts.map +1 -1
  152. package/dist/eval/index.js +173 -25
  153. package/dist/eval/index.js.map +1 -1
  154. package/dist/eval/llm-openrouter.d.ts +9 -0
  155. package/dist/eval/llm-openrouter.d.ts.map +1 -0
  156. package/dist/eval/llm-openrouter.js +171 -0
  157. package/dist/eval/llm-openrouter.js.map +1 -0
  158. package/dist/eval/llm.js +1 -1
  159. package/dist/eval/llm.js.map +1 -1
  160. package/dist/eval/prune.d.ts +24 -0
  161. package/dist/eval/prune.d.ts.map +1 -0
  162. package/dist/eval/prune.js +83 -0
  163. package/dist/eval/prune.js.map +1 -0
  164. package/dist/eval/storage.d.ts +3 -0
  165. package/dist/eval/storage.d.ts.map +1 -1
  166. package/dist/eval/storage.js +14 -0
  167. package/dist/eval/storage.js.map +1 -1
  168. package/dist/frontmatter/parser.d.ts +1 -0
  169. package/dist/frontmatter/parser.d.ts.map +1 -1
  170. package/dist/frontmatter/parser.js +12 -0
  171. package/dist/frontmatter/parser.js.map +1 -1
  172. package/dist/frontmatter/schema.d.ts.map +1 -1
  173. package/dist/frontmatter/schema.js +38 -3
  174. package/dist/frontmatter/schema.js.map +1 -1
  175. package/dist/frontmatter/types.d.ts +4 -1
  176. package/dist/frontmatter/types.d.ts.map +1 -1
  177. package/dist/frontmatter/types.js +8 -0
  178. package/dist/frontmatter/types.js.map +1 -1
  179. package/dist/import/index.d.ts.map +1 -1
  180. package/dist/import/index.js +44 -9
  181. package/dist/import/index.js.map +1 -1
  182. package/dist/import/langgraph-store.d.ts +53 -0
  183. package/dist/import/langgraph-store.d.ts.map +1 -0
  184. package/dist/import/langgraph-store.js +292 -0
  185. package/dist/import/langgraph-store.js.map +1 -0
  186. package/dist/index.d.ts +5 -0
  187. package/dist/index.d.ts.map +1 -1
  188. package/dist/index.js +56 -18
  189. package/dist/index.js.map +1 -1
  190. package/dist/lifecycle/lock.d.ts +9 -1
  191. package/dist/lifecycle/lock.d.ts.map +1 -1
  192. package/dist/lifecycle/lock.js +34 -9
  193. package/dist/lifecycle/lock.js.map +1 -1
  194. package/dist/okf/export.d.ts +12 -0
  195. package/dist/okf/export.d.ts.map +1 -0
  196. package/dist/okf/export.js +115 -0
  197. package/dist/okf/export.js.map +1 -0
  198. package/dist/okf/import.d.ts +24 -0
  199. package/dist/okf/import.d.ts.map +1 -0
  200. package/dist/okf/import.js +107 -0
  201. package/dist/okf/import.js.map +1 -0
  202. package/dist/okf/index.d.ts +2 -0
  203. package/dist/okf/index.d.ts.map +1 -0
  204. package/dist/okf/index.js +147 -0
  205. package/dist/okf/index.js.map +1 -0
  206. package/dist/okf/map.d.ts +16 -0
  207. package/dist/okf/map.d.ts.map +1 -0
  208. package/dist/okf/map.js +149 -0
  209. package/dist/okf/map.js.map +1 -0
  210. package/dist/okf/types.d.ts +9 -0
  211. package/dist/okf/types.d.ts.map +1 -0
  212. package/dist/okf/types.js +48 -0
  213. package/dist/okf/types.js.map +1 -0
  214. package/dist/search/contested.d.ts +18 -0
  215. package/dist/search/contested.d.ts.map +1 -0
  216. package/dist/search/contested.js +119 -0
  217. package/dist/search/contested.js.map +1 -0
  218. package/dist/search/coverage.d.ts.map +1 -1
  219. package/dist/search/coverage.js +1 -1
  220. package/dist/search/coverage.js.map +1 -1
  221. package/dist/search/hybrid.d.ts +23 -0
  222. package/dist/search/hybrid.d.ts.map +1 -1
  223. package/dist/search/hybrid.js +75 -15
  224. package/dist/search/hybrid.js.map +1 -1
  225. package/dist/search/reindex.d.ts +1 -0
  226. package/dist/search/reindex.d.ts.map +1 -1
  227. package/dist/search/reindex.js +57 -24
  228. package/dist/search/reindex.js.map +1 -1
  229. package/dist/search/watcher.d.ts +2 -0
  230. package/dist/search/watcher.d.ts.map +1 -1
  231. package/dist/search/watcher.js +23 -12
  232. package/dist/search/watcher.js.map +1 -1
  233. package/dist/serve/index.d.ts +36 -0
  234. package/dist/serve/index.d.ts.map +1 -0
  235. package/dist/serve/index.js +507 -0
  236. package/dist/serve/index.js.map +1 -0
  237. package/dist/server.d.ts +10 -1
  238. package/dist/server.d.ts.map +1 -1
  239. package/dist/server.js +91 -12
  240. package/dist/server.js.map +1 -1
  241. package/dist/sleep/cycle.d.ts +59 -0
  242. package/dist/sleep/cycle.d.ts.map +1 -0
  243. package/dist/sleep/cycle.js +127 -0
  244. package/dist/sleep/cycle.js.map +1 -0
  245. package/dist/sleep/index.d.ts +5 -0
  246. package/dist/sleep/index.d.ts.map +1 -0
  247. package/dist/sleep/index.js +320 -0
  248. package/dist/sleep/index.js.map +1 -0
  249. package/dist/sleep/report.d.ts +14 -0
  250. package/dist/sleep/report.d.ts.map +1 -0
  251. package/dist/sleep/report.js +139 -0
  252. package/dist/sleep/report.js.map +1 -0
  253. package/dist/sleep/tension-scan-state.d.ts +19 -0
  254. package/dist/sleep/tension-scan-state.d.ts.map +1 -0
  255. package/dist/sleep/tension-scan-state.js +0 -0
  256. package/dist/sleep/tension-scan-state.js.map +1 -0
  257. package/dist/sleep/tension-scan.d.ts +44 -0
  258. package/dist/sleep/tension-scan.d.ts.map +1 -0
  259. package/dist/sleep/tension-scan.js +0 -0
  260. package/dist/sleep/tension-scan.js.map +1 -0
  261. package/dist/storage/backend.d.ts +12 -0
  262. package/dist/storage/backend.d.ts.map +1 -0
  263. package/dist/storage/backend.js +231 -0
  264. package/dist/storage/backend.js.map +1 -0
  265. package/dist/storage/backends/fs.d.ts +4 -0
  266. package/dist/storage/backends/fs.d.ts.map +1 -0
  267. package/dist/storage/backends/fs.js +99 -0
  268. package/dist/storage/backends/fs.js.map +1 -0
  269. package/dist/storage/fs-walk.d.ts +5 -0
  270. package/dist/storage/fs-walk.d.ts.map +1 -0
  271. package/dist/storage/fs-walk.js +28 -0
  272. package/dist/storage/fs-walk.js.map +1 -0
  273. package/dist/storage/index-db.d.ts +18 -0
  274. package/dist/storage/index-db.d.ts.map +1 -1
  275. package/dist/storage/index-db.js +159 -22
  276. package/dist/storage/index-db.js.map +1 -1
  277. package/dist/storage/local.d.ts +7 -1
  278. package/dist/storage/local.d.ts.map +1 -1
  279. package/dist/storage/local.js +42 -4
  280. package/dist/storage/local.js.map +1 -1
  281. package/dist/storage/sync.d.ts +25 -0
  282. package/dist/storage/sync.d.ts.map +1 -0
  283. package/dist/storage/sync.js +308 -0
  284. package/dist/storage/sync.js.map +1 -0
  285. package/dist/sync/index.d.ts +2 -0
  286. package/dist/sync/index.d.ts.map +1 -0
  287. package/dist/sync/index.js +136 -0
  288. package/dist/sync/index.js.map +1 -0
  289. package/dist/themes/clustering.d.ts +6 -11
  290. package/dist/themes/clustering.d.ts.map +1 -1
  291. package/dist/themes/clustering.js +76 -84
  292. package/dist/themes/clustering.js.map +1 -1
  293. package/dist/tools/consumes.d.ts +14 -0
  294. package/dist/tools/consumes.d.ts.map +1 -0
  295. package/dist/tools/consumes.js +99 -0
  296. package/dist/tools/consumes.js.map +1 -0
  297. package/dist/tools/curation.d.ts +2 -0
  298. package/dist/tools/curation.d.ts.map +1 -1
  299. package/dist/tools/curation.js +102 -7
  300. package/dist/tools/curation.js.map +1 -1
  301. package/dist/tools/edge-staleness.d.ts +28 -0
  302. package/dist/tools/edge-staleness.d.ts.map +1 -0
  303. package/dist/tools/edge-staleness.js +205 -0
  304. package/dist/tools/edge-staleness.js.map +1 -0
  305. package/dist/tools/edges.d.ts.map +1 -1
  306. package/dist/tools/edges.js +28 -22
  307. package/dist/tools/edges.js.map +1 -1
  308. package/dist/tools/read.d.ts +15 -1
  309. package/dist/tools/read.d.ts.map +1 -1
  310. package/dist/tools/read.js +144 -31
  311. package/dist/tools/read.js.map +1 -1
  312. package/dist/tools/receipt.d.ts +65 -0
  313. package/dist/tools/receipt.d.ts.map +1 -0
  314. package/dist/tools/receipt.js +257 -0
  315. package/dist/tools/receipt.js.map +1 -0
  316. package/dist/tools/search.d.ts +1 -0
  317. package/dist/tools/search.d.ts.map +1 -1
  318. package/dist/tools/search.js +186 -12
  319. package/dist/tools/search.js.map +1 -1
  320. package/dist/tools/staged-actions.d.ts +3 -0
  321. package/dist/tools/staged-actions.d.ts.map +1 -1
  322. package/dist/tools/staged-actions.js +228 -23
  323. package/dist/tools/staged-actions.js.map +1 -1
  324. package/dist/tools/themes.d.ts +9 -0
  325. package/dist/tools/themes.d.ts.map +1 -1
  326. package/dist/tools/themes.js +333 -133
  327. package/dist/tools/themes.js.map +1 -1
  328. package/dist/tools/tier1.d.ts +14 -0
  329. package/dist/tools/tier1.d.ts.map +1 -0
  330. package/dist/tools/tier1.js +169 -0
  331. package/dist/tools/tier1.js.map +1 -0
  332. package/dist/tools/tier2.d.ts +27 -0
  333. package/dist/tools/tier2.d.ts.map +1 -0
  334. package/dist/tools/tier2.js +344 -0
  335. package/dist/tools/tier2.js.map +1 -0
  336. package/dist/tools/witness.d.ts +9 -0
  337. package/dist/tools/witness.d.ts.map +1 -0
  338. package/dist/tools/witness.js +66 -0
  339. package/dist/tools/witness.js.map +1 -0
  340. package/dist/tools/write.d.ts +9 -1
  341. package/dist/tools/write.d.ts.map +1 -1
  342. package/dist/tools/write.js +593 -59
  343. package/dist/tools/write.js.map +1 -1
  344. package/dist/utils/config.d.ts +54 -0
  345. package/dist/utils/config.d.ts.map +1 -1
  346. package/dist/utils/config.js +420 -4
  347. package/dist/utils/config.js.map +1 -1
  348. package/dist/utils/paths.d.ts +2 -0
  349. package/dist/utils/paths.d.ts.map +1 -0
  350. package/dist/utils/paths.js +15 -0
  351. package/dist/utils/paths.js.map +1 -0
  352. package/dist/utils/redos.d.ts +2 -0
  353. package/dist/utils/redos.d.ts.map +1 -0
  354. package/dist/utils/redos.js +101 -0
  355. package/dist/utils/redos.js.map +1 -0
  356. package/dist/utils/run-id.d.ts +3 -0
  357. package/dist/utils/run-id.d.ts.map +1 -0
  358. package/dist/utils/run-id.js +19 -0
  359. package/dist/utils/run-id.js.map +1 -0
  360. package/dist/utils/vault-gitignore.d.ts +1 -1
  361. package/dist/utils/vault-gitignore.d.ts.map +1 -1
  362. package/dist/utils/vault-gitignore.js +6 -1
  363. package/dist/utils/vault-gitignore.js.map +1 -1
  364. package/dist/witness/track-record.d.ts +42 -0
  365. package/dist/witness/track-record.d.ts.map +1 -0
  366. package/dist/witness/track-record.js +189 -0
  367. package/dist/witness/track-record.js.map +1 -0
  368. package/package.json +27 -2
  369. 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":"AAAA,0EAA0E;AAC1E,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAC9E,+EAA+E;AAC/E,EAAE;AACF,gFAAgF;AAChF,0EAA0E;AAC1E,oBAAoB;AACpB,gFAAgF;AAChF,+EAA+E;AAC/E,yEAAyE;AACzE,uEAAuE;AACvE,qEAAqE;AACrE,0EAA0E;AAE1E,0EAA0E;AAC1E,4EAA4E;AAC5E,4DAA4D;AAC5D,SAAS,sBAAsB,CAAC,GAAW;IACzC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,kFAAkF;AAClF,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,EAAE,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aACnB,IAAI,EAAE,KAAK,GAAG;YAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACpD,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gFAAgF;AAChF,+DAA+D;AAC/D,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC9C,iDAAiD;IACjD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,yEAAyE;IACzE,2EAA2E;IAC3E,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,6EAA6E;AAC7E,oEAAoE;AACpE,MAAM,UAAU,2BAA2B,CAAC,OAAe;IACzD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,CAAC,EAAE,CAAC,CAAC,wBAAwB;YAC7B,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAY,CAAC;YACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,UAAU,GAAG,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;YAC9C,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBAChC,iEAAiE;gBACjE,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,2DAA2D;gBAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;gBAC5E,IAAI,WAAW,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Result } from "../frontmatter/types.js";
2
+ export declare function readRunId(args: Record<string, unknown>, tool: string): Result<string | undefined, Error>;
3
+ //# sourceMappingURL=run-id.d.ts.map
@@ -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,yyBAoB3B,CAAC;AAUF,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,CAqB7C"}
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, "\n" + VAULT_GITIGNORE);
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;;;;;;;;;;;;;;;;;;;;CAoB9B,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,IAAI,GAAG,eAAe,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC;AACpB,CAAC"}
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.29.0",
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.100.1",
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
  }
@@ -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