daftari 1.30.0 → 1.32.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 (310) hide show
  1. package/CHANGELOG.md +176 -0
  2. package/README.md +188 -4
  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/audit/checks/broken_refs.d.ts +1 -1
  8. package/dist/audit/checks/broken_refs.d.ts.map +1 -1
  9. package/dist/audit/checks/broken_refs.js +77 -22
  10. package/dist/audit/checks/broken_refs.js.map +1 -1
  11. package/dist/audit/collect.d.ts +1 -0
  12. package/dist/audit/collect.d.ts.map +1 -1
  13. package/dist/audit/collect.js +22 -2
  14. package/dist/audit/collect.js.map +1 -1
  15. package/dist/audit/index.d.ts.map +1 -1
  16. package/dist/audit/index.js +9 -3
  17. package/dist/audit/index.js.map +1 -1
  18. package/dist/audit/links.d.ts.map +1 -1
  19. package/dist/audit/links.js +9 -3
  20. package/dist/audit/links.js.map +1 -1
  21. package/dist/audit/report.d.ts.map +1 -1
  22. package/dist/audit/report.js +2 -0
  23. package/dist/audit/report.js.map +1 -1
  24. package/dist/audit/types.d.ts +4 -1
  25. package/dist/audit/types.d.ts.map +1 -1
  26. package/dist/audit/types.js.map +1 -1
  27. package/dist/backfill/derive.d.ts.map +1 -1
  28. package/dist/backfill/derive.js +1 -0
  29. package/dist/backfill/derive.js.map +1 -1
  30. package/dist/cli.d.ts.map +1 -1
  31. package/dist/cli.js +24 -0
  32. package/dist/cli.js.map +1 -1
  33. package/dist/consolidate/index.d.ts.map +1 -1
  34. package/dist/consolidate/index.js +10 -12
  35. package/dist/consolidate/index.js.map +1 -1
  36. package/dist/court/precedent.d.ts.map +1 -1
  37. package/dist/court/precedent.js +6 -1
  38. package/dist/court/precedent.js.map +1 -1
  39. package/dist/curation/consumes.d.ts +24 -0
  40. package/dist/curation/consumes.d.ts.map +1 -0
  41. package/dist/curation/consumes.js +122 -0
  42. package/dist/curation/consumes.js.map +1 -0
  43. package/dist/curation/edge-staleness.d.ts +47 -0
  44. package/dist/curation/edge-staleness.d.ts.map +1 -0
  45. package/dist/curation/edge-staleness.js +258 -0
  46. package/dist/curation/edge-staleness.js.map +1 -0
  47. package/dist/curation/edges.d.ts.map +1 -1
  48. package/dist/curation/edges.js +190 -17
  49. package/dist/curation/edges.js.map +1 -1
  50. package/dist/curation/lint.d.ts +6 -1
  51. package/dist/curation/lint.d.ts.map +1 -1
  52. package/dist/curation/lint.js +87 -24
  53. package/dist/curation/lint.js.map +1 -1
  54. package/dist/curation/provenance.d.ts +2 -0
  55. package/dist/curation/provenance.d.ts.map +1 -1
  56. package/dist/curation/provenance.js +2 -0
  57. package/dist/curation/provenance.js.map +1 -1
  58. package/dist/curation/read-log.d.ts +19 -0
  59. package/dist/curation/read-log.d.ts.map +1 -0
  60. package/dist/curation/read-log.js +120 -0
  61. package/dist/curation/read-log.js.map +1 -0
  62. package/dist/curation/review-throughput.d.ts +24 -0
  63. package/dist/curation/review-throughput.d.ts.map +1 -0
  64. package/dist/curation/review-throughput.js +102 -0
  65. package/dist/curation/review-throughput.js.map +1 -0
  66. package/dist/curation/shadow.d.ts +1 -0
  67. package/dist/curation/shadow.d.ts.map +1 -1
  68. package/dist/curation/shadow.js +17 -11
  69. package/dist/curation/shadow.js.map +1 -1
  70. package/dist/curation/staged-actions.d.ts +12 -1
  71. package/dist/curation/staged-actions.d.ts.map +1 -1
  72. package/dist/curation/staged-actions.js +123 -48
  73. package/dist/curation/staged-actions.js.map +1 -1
  74. package/dist/curation/structural.d.ts +16 -0
  75. package/dist/curation/structural.d.ts.map +1 -0
  76. package/dist/curation/structural.js +64 -0
  77. package/dist/curation/structural.js.map +1 -0
  78. package/dist/curation/tension-blast.d.ts +4 -0
  79. package/dist/curation/tension-blast.d.ts.map +1 -1
  80. package/dist/curation/tension-blast.js +9 -0
  81. package/dist/curation/tension-blast.js.map +1 -1
  82. package/dist/curation/tension.d.ts +5 -2
  83. package/dist/curation/tension.d.ts.map +1 -1
  84. package/dist/curation/tension.js +68 -25
  85. package/dist/curation/tension.js.map +1 -1
  86. package/dist/curation/tier0.d.ts +27 -0
  87. package/dist/curation/tier0.d.ts.map +1 -0
  88. package/dist/curation/tier0.js +196 -0
  89. package/dist/curation/tier0.js.map +1 -0
  90. package/dist/curation/tier1.d.ts +30 -0
  91. package/dist/curation/tier1.d.ts.map +1 -0
  92. package/dist/curation/tier1.js +142 -0
  93. package/dist/curation/tier1.js.map +1 -0
  94. package/dist/curation/tier2.d.ts +43 -0
  95. package/dist/curation/tier2.d.ts.map +1 -0
  96. package/dist/curation/tier2.js +182 -0
  97. package/dist/curation/tier2.js.map +1 -0
  98. package/dist/curation/vault-docs.d.ts +5 -1
  99. package/dist/curation/vault-docs.d.ts.map +1 -1
  100. package/dist/curation/vault-docs.js +14 -0
  101. package/dist/curation/vault-docs.js.map +1 -1
  102. package/dist/eval/generate.d.ts.map +1 -1
  103. package/dist/eval/generate.js +38 -5
  104. package/dist/eval/generate.js.map +1 -1
  105. package/dist/eval/index.d.ts +1 -0
  106. package/dist/eval/index.d.ts.map +1 -1
  107. package/dist/eval/index.js +249 -50
  108. package/dist/eval/index.js.map +1 -1
  109. package/dist/eval/llm-openrouter.d.ts.map +1 -1
  110. package/dist/eval/llm-openrouter.js +158 -65
  111. package/dist/eval/llm-openrouter.js.map +1 -1
  112. package/dist/eval/llm.js +1 -1
  113. package/dist/eval/llm.js.map +1 -1
  114. package/dist/eval/prune.d.ts +24 -0
  115. package/dist/eval/prune.d.ts.map +1 -0
  116. package/dist/eval/prune.js +83 -0
  117. package/dist/eval/prune.js.map +1 -0
  118. package/dist/eval/storage.d.ts +3 -0
  119. package/dist/eval/storage.d.ts.map +1 -1
  120. package/dist/eval/storage.js +14 -0
  121. package/dist/eval/storage.js.map +1 -1
  122. package/dist/frontmatter/schema.d.ts.map +1 -1
  123. package/dist/frontmatter/schema.js +19 -1
  124. package/dist/frontmatter/schema.js.map +1 -1
  125. package/dist/frontmatter/types.d.ts +4 -1
  126. package/dist/frontmatter/types.d.ts.map +1 -1
  127. package/dist/frontmatter/types.js +8 -0
  128. package/dist/frontmatter/types.js.map +1 -1
  129. package/dist/import/index.d.ts.map +1 -1
  130. package/dist/import/index.js +44 -9
  131. package/dist/import/index.js.map +1 -1
  132. package/dist/import/langgraph-store.d.ts +53 -0
  133. package/dist/import/langgraph-store.d.ts.map +1 -0
  134. package/dist/import/langgraph-store.js +292 -0
  135. package/dist/import/langgraph-store.js.map +1 -0
  136. package/dist/index.d.ts +5 -0
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +56 -18
  139. package/dist/index.js.map +1 -1
  140. package/dist/interview/index.d.ts +7 -0
  141. package/dist/interview/index.d.ts.map +1 -0
  142. package/dist/interview/index.js +219 -0
  143. package/dist/interview/index.js.map +1 -0
  144. package/dist/interview/questions.d.ts +18 -0
  145. package/dist/interview/questions.d.ts.map +1 -0
  146. package/dist/interview/questions.js +169 -0
  147. package/dist/interview/questions.js.map +1 -0
  148. package/dist/interview/transcript.d.ts +23 -0
  149. package/dist/interview/transcript.d.ts.map +1 -0
  150. package/dist/interview/transcript.js +155 -0
  151. package/dist/interview/transcript.js.map +1 -0
  152. package/dist/lifecycle/lock.d.ts +9 -1
  153. package/dist/lifecycle/lock.d.ts.map +1 -1
  154. package/dist/lifecycle/lock.js +34 -9
  155. package/dist/lifecycle/lock.js.map +1 -1
  156. package/dist/okf/export.d.ts +12 -0
  157. package/dist/okf/export.d.ts.map +1 -0
  158. package/dist/okf/export.js +117 -0
  159. package/dist/okf/export.js.map +1 -0
  160. package/dist/okf/import.d.ts +24 -0
  161. package/dist/okf/import.d.ts.map +1 -0
  162. package/dist/okf/import.js +115 -0
  163. package/dist/okf/import.js.map +1 -0
  164. package/dist/okf/index.d.ts +2 -0
  165. package/dist/okf/index.d.ts.map +1 -0
  166. package/dist/okf/index.js +159 -0
  167. package/dist/okf/index.js.map +1 -0
  168. package/dist/okf/map.d.ts +27 -0
  169. package/dist/okf/map.d.ts.map +1 -0
  170. package/dist/okf/map.js +327 -0
  171. package/dist/okf/map.js.map +1 -0
  172. package/dist/okf/types.d.ts +13 -0
  173. package/dist/okf/types.d.ts.map +1 -0
  174. package/dist/okf/types.js +82 -0
  175. package/dist/okf/types.js.map +1 -0
  176. package/dist/search/coverage.d.ts.map +1 -1
  177. package/dist/search/coverage.js +1 -1
  178. package/dist/search/coverage.js.map +1 -1
  179. package/dist/search/hybrid.d.ts +19 -0
  180. package/dist/search/hybrid.d.ts.map +1 -1
  181. package/dist/search/hybrid.js +60 -15
  182. package/dist/search/hybrid.js.map +1 -1
  183. package/dist/search/reindex.d.ts +4 -0
  184. package/dist/search/reindex.d.ts.map +1 -1
  185. package/dist/search/reindex.js +64 -14
  186. package/dist/search/reindex.js.map +1 -1
  187. package/dist/search/watcher.d.ts +2 -0
  188. package/dist/search/watcher.d.ts.map +1 -1
  189. package/dist/search/watcher.js +29 -27
  190. package/dist/search/watcher.js.map +1 -1
  191. package/dist/serve/index.d.ts +36 -0
  192. package/dist/serve/index.d.ts.map +1 -0
  193. package/dist/serve/index.js +507 -0
  194. package/dist/serve/index.js.map +1 -0
  195. package/dist/server.d.ts +10 -1
  196. package/dist/server.d.ts.map +1 -1
  197. package/dist/server.js +89 -14
  198. package/dist/server.js.map +1 -1
  199. package/dist/sleep/index.d.ts +2 -0
  200. package/dist/sleep/index.d.ts.map +1 -1
  201. package/dist/sleep/index.js +212 -21
  202. package/dist/sleep/index.js.map +1 -1
  203. package/dist/sleep/report.d.ts +3 -0
  204. package/dist/sleep/report.d.ts.map +1 -1
  205. package/dist/sleep/report.js +52 -0
  206. package/dist/sleep/report.js.map +1 -1
  207. package/dist/sleep/tension-scan-state.d.ts +19 -0
  208. package/dist/sleep/tension-scan-state.d.ts.map +1 -0
  209. package/dist/sleep/tension-scan-state.js +0 -0
  210. package/dist/sleep/tension-scan-state.js.map +1 -0
  211. package/dist/sleep/tension-scan.d.ts +44 -0
  212. package/dist/sleep/tension-scan.d.ts.map +1 -0
  213. package/dist/sleep/tension-scan.js +0 -0
  214. package/dist/sleep/tension-scan.js.map +1 -0
  215. package/dist/storage/backend.d.ts +12 -0
  216. package/dist/storage/backend.d.ts.map +1 -0
  217. package/dist/storage/backend.js +231 -0
  218. package/dist/storage/backend.js.map +1 -0
  219. package/dist/storage/backends/fs.d.ts +4 -0
  220. package/dist/storage/backends/fs.d.ts.map +1 -0
  221. package/dist/storage/backends/fs.js +99 -0
  222. package/dist/storage/backends/fs.js.map +1 -0
  223. package/dist/storage/fs-walk.d.ts +5 -0
  224. package/dist/storage/fs-walk.d.ts.map +1 -0
  225. package/dist/storage/fs-walk.js +28 -0
  226. package/dist/storage/fs-walk.js.map +1 -0
  227. package/dist/storage/index-db.d.ts +16 -0
  228. package/dist/storage/index-db.d.ts.map +1 -1
  229. package/dist/storage/index-db.js +95 -5
  230. package/dist/storage/index-db.js.map +1 -1
  231. package/dist/storage/local.d.ts +1 -0
  232. package/dist/storage/local.d.ts.map +1 -1
  233. package/dist/storage/local.js +12 -0
  234. package/dist/storage/local.js.map +1 -1
  235. package/dist/storage/sync.d.ts +25 -0
  236. package/dist/storage/sync.d.ts.map +1 -0
  237. package/dist/storage/sync.js +308 -0
  238. package/dist/storage/sync.js.map +1 -0
  239. package/dist/sync/index.d.ts +2 -0
  240. package/dist/sync/index.d.ts.map +1 -0
  241. package/dist/sync/index.js +136 -0
  242. package/dist/sync/index.js.map +1 -0
  243. package/dist/themes/clustering.d.ts +6 -11
  244. package/dist/themes/clustering.d.ts.map +1 -1
  245. package/dist/themes/clustering.js +76 -84
  246. package/dist/themes/clustering.js.map +1 -1
  247. package/dist/tools/consumes.d.ts +14 -0
  248. package/dist/tools/consumes.d.ts.map +1 -0
  249. package/dist/tools/consumes.js +99 -0
  250. package/dist/tools/consumes.js.map +1 -0
  251. package/dist/tools/curation.d.ts +2 -0
  252. package/dist/tools/curation.d.ts.map +1 -1
  253. package/dist/tools/curation.js +53 -15
  254. package/dist/tools/curation.js.map +1 -1
  255. package/dist/tools/edge-staleness.d.ts +28 -0
  256. package/dist/tools/edge-staleness.d.ts.map +1 -0
  257. package/dist/tools/edge-staleness.js +205 -0
  258. package/dist/tools/edge-staleness.js.map +1 -0
  259. package/dist/tools/edges.d.ts.map +1 -1
  260. package/dist/tools/edges.js +27 -21
  261. package/dist/tools/edges.js.map +1 -1
  262. package/dist/tools/read.d.ts +15 -1
  263. package/dist/tools/read.d.ts.map +1 -1
  264. package/dist/tools/read.js +211 -76
  265. package/dist/tools/read.js.map +1 -1
  266. package/dist/tools/receipt.d.ts.map +1 -1
  267. package/dist/tools/receipt.js +16 -7
  268. package/dist/tools/receipt.js.map +1 -1
  269. package/dist/tools/search.d.ts +1 -0
  270. package/dist/tools/search.d.ts.map +1 -1
  271. package/dist/tools/search.js +147 -5
  272. package/dist/tools/search.js.map +1 -1
  273. package/dist/tools/staged-actions.d.ts +3 -0
  274. package/dist/tools/staged-actions.d.ts.map +1 -1
  275. package/dist/tools/staged-actions.js +225 -22
  276. package/dist/tools/staged-actions.js.map +1 -1
  277. package/dist/tools/themes.d.ts +8 -0
  278. package/dist/tools/themes.d.ts.map +1 -1
  279. package/dist/tools/themes.js +208 -122
  280. package/dist/tools/themes.js.map +1 -1
  281. package/dist/tools/tier1.d.ts +14 -0
  282. package/dist/tools/tier1.d.ts.map +1 -0
  283. package/dist/tools/tier1.js +169 -0
  284. package/dist/tools/tier1.js.map +1 -0
  285. package/dist/tools/tier2.d.ts +27 -0
  286. package/dist/tools/tier2.d.ts.map +1 -0
  287. package/dist/tools/tier2.js +344 -0
  288. package/dist/tools/tier2.js.map +1 -0
  289. package/dist/tools/write.d.ts +9 -1
  290. package/dist/tools/write.d.ts.map +1 -1
  291. package/dist/tools/write.js +596 -174
  292. package/dist/tools/write.js.map +1 -1
  293. package/dist/utils/config.d.ts +52 -0
  294. package/dist/utils/config.d.ts.map +1 -1
  295. package/dist/utils/config.js +394 -24
  296. package/dist/utils/config.js.map +1 -1
  297. package/dist/utils/dates.d.ts +1 -0
  298. package/dist/utils/dates.d.ts.map +1 -1
  299. package/dist/utils/dates.js +5 -0
  300. package/dist/utils/dates.js.map +1 -1
  301. package/dist/utils/run-id.d.ts +3 -0
  302. package/dist/utils/run-id.d.ts.map +1 -0
  303. package/dist/utils/run-id.js +19 -0
  304. package/dist/utils/run-id.js.map +1 -0
  305. package/dist/utils/vault-gitignore.d.ts +1 -1
  306. package/dist/utils/vault-gitignore.d.ts.map +1 -1
  307. package/dist/utils/vault-gitignore.js +4 -1
  308. package/dist/utils/vault-gitignore.js.map +1 -1
  309. package/package.json +21 -1
  310. package/templates/config.yaml +8 -0
@@ -0,0 +1,169 @@
1
+ // vault_tier1 — "what does this change to unit X affect?", answered
2
+ // deterministically (#232 Tier 1). Gathers the unit's dependents across all
3
+ // three edge provenance classes (compiled consumes, declared sources, earned
4
+ // derives_from), derives the changed-field set from the unit's latest
5
+ // provenance entry (or an explicit changed_fields override), and dispatches
6
+ // per the through-line spec's class-bounded verdict rule. Zero LLM calls —
7
+ // the summary's resolved_at_tier1 says whether any dependent still needs
8
+ // the tier-2 semantic queue.
9
+ //
10
+ // RBAC (#217, same rule as vault_consumes/vault_edges): any-read gate; a
11
+ // verdict names the anchor and one dependent, so it is listed only when the
12
+ // caller can read BOTH — invisible verdicts are omitted from the list, the
13
+ // counts, and the summary, never redacted. An unreadable anchor yields an
14
+ // empty result, indistinguishable from a nonexistent one.
15
+ import { hasAnyRead } from "../access/rbac.js";
16
+ import { listConsumesEdges, reverseConsumes } from "../curation/consumes.js";
17
+ import { listEdges } from "../curation/edges.js";
18
+ import { readProvenanceLog } from "../curation/provenance.js";
19
+ import { sourceReadable } from "../curation/tension-access.js";
20
+ import { buildReverseSourceMap } from "../curation/tension-blast.js";
21
+ import { changedFieldsFromProvenance, contentChangedFields, tier1Dispatch, tier1Summary, } from "../curation/tier1.js";
22
+ import { loadDocuments } from "../curation/vault-docs.js";
23
+ import { err, ok } from "../frontmatter/types.js";
24
+ import { canonicalVaultRelPath } from "../storage/local.js";
25
+ import { openIndexForAccessOrNull } from "./search.js";
26
+ export async function vaultTier1(vaultRoot, args, access) {
27
+ if (access && !hasAnyRead(access.role)) {
28
+ return err(new Error(`access denied: role '${access.roleName}' cannot use vault_tier1`));
29
+ }
30
+ if (typeof args.unit !== "string" || args.unit.trim().length === 0) {
31
+ return err(new Error("vault_tier1 requires a non-empty 'unit' argument"));
32
+ }
33
+ const unit = canonicalVaultRelPath(vaultRoot, args.unit);
34
+ if (!unit.ok)
35
+ return unit;
36
+ // One index handle serves both readability checks below; every return path
37
+ // runs through the finally.
38
+ const db = access ? openIndexForAccessOrNull(vaultRoot) : null;
39
+ try {
40
+ // Anchor readability is decided BEFORE anything is derived from the unit.
41
+ // changed_fields comes from the unit's provenance — metadata about a doc
42
+ // the caller may not read — and the no-provenance error would otherwise
43
+ // confirm whether an unreadable path has write history. An unreadable
44
+ // anchor must behave byte-identically to a nonexistent one on every path.
45
+ const anchorReadable = access ? sourceReadable(db, access, unit.value) : true;
46
+ const noProvenanceError = () => err(new Error(`vault_tier1: no provenance entry for ${unit.value} — pass 'changed_fields' ` +
47
+ `explicitly to describe the change`));
48
+ // The changed-field set: explicit override, else the unit's latest logged
49
+ // write. Explicit lets a caller ask "what WOULD touching these fields
50
+ // affect" before writing anything.
51
+ let changedFields;
52
+ let changeSource;
53
+ if (args.changed_fields !== undefined && args.changed_fields !== null) {
54
+ if (!Array.isArray(args.changed_fields) ||
55
+ !args.changed_fields.every((f) => typeof f === "string")) {
56
+ return err(new Error("vault_tier1 'changed_fields' must be an array of strings"));
57
+ }
58
+ changedFields = contentChangedFields(args.changed_fields);
59
+ changeSource = "explicit";
60
+ }
61
+ else {
62
+ // Unreadable anchor: the exact error a provenance-less path produces —
63
+ // the log is never read, so the response cannot depend on whether the
64
+ // hidden path has history.
65
+ if (!anchorReadable)
66
+ return noProvenanceError();
67
+ const log = await readProvenanceLog(vaultRoot);
68
+ if (!log.ok)
69
+ return log;
70
+ const writes = log.value.filter((e) => e.file === unit.value && e.action !== "rejected_stale");
71
+ const latest = writes[writes.length - 1];
72
+ if (!latest)
73
+ return noProvenanceError();
74
+ changedFields = changedFieldsFromProvenance(latest);
75
+ changeSource = "provenance";
76
+ }
77
+ // Unreadable anchor with caller-supplied changed_fields: the verdict
78
+ // filter below would empty the list regardless, so skip the vault-wide
79
+ // scans and return the same dependent-less result a nonexistent anchor
80
+ // produces.
81
+ if (!anchorReadable) {
82
+ return ok({
83
+ unit: unit.value,
84
+ changed_fields: changedFields,
85
+ change_source: changeSource,
86
+ verdicts: [],
87
+ summary: tier1Summary([]),
88
+ });
89
+ }
90
+ // Dependents per edge class.
91
+ const allConsumes = await listConsumesEdges(vaultRoot);
92
+ if (!allConsumes.ok)
93
+ return allConsumes;
94
+ const compiled = reverseConsumes(allConsumes.value, unit.value);
95
+ const loaded = await loadDocuments(vaultRoot);
96
+ if (!loaded.ok)
97
+ return loaded;
98
+ const declaredDependents = [...(buildReverseSourceMap(loaded.value).get(unit.value) ?? [])];
99
+ // derives_from: `to` is the premise, so the unit's dependents are the
100
+ // from-paths of live (non-revoked) edges pointing at it.
101
+ const earned = await listEdges(vaultRoot, { toPath: unit.value });
102
+ if (!earned.ok)
103
+ return earned;
104
+ const earnedDependents = earned.value
105
+ .filter((e) => e.status !== "revoked")
106
+ .map((e) => e.fromPath);
107
+ let verdicts = tier1Dispatch({
108
+ unit: unit.value,
109
+ changedFields,
110
+ compiled,
111
+ declaredDependents,
112
+ earnedDependents,
113
+ });
114
+ // #217 decision A: both endpoints readable or the verdict is omitted —
115
+ // from the list AND the summary counts. (Only readable anchors reach
116
+ // here — the unreadable case returned above.)
117
+ if (access) {
118
+ verdicts = verdicts.filter((v) => sourceReadable(db, access, v.artifact));
119
+ }
120
+ return ok({
121
+ unit: unit.value,
122
+ changed_fields: changedFields,
123
+ change_source: changeSource,
124
+ verdicts,
125
+ summary: tier1Summary(verdicts),
126
+ });
127
+ }
128
+ finally {
129
+ db?.close();
130
+ }
131
+ }
132
+ export const tier1Tools = [
133
+ {
134
+ name: "vault_tier1",
135
+ title: "Type-directed change dispatch (tier 1)",
136
+ annotations: { readOnlyHint: true },
137
+ description: "Deterministic, LLM-free compatibility dispatch for a changed document " +
138
+ "(#232 tier 1). Walks the unit's dependents across all three edge " +
139
+ "provenance classes and returns a class-bounded verdict per dependent: " +
140
+ "compiled consumes edges give certain 'unaffected'/'affected' (field " +
141
+ "overlap vs. the change), declared sources give 'possibly-affected' (a " +
142
+ "claim), earned derives_from edges give 'semantic-review' (the tier-2 " +
143
+ "queue — an inference never decides). A bookkeeping-only change is " +
144
+ "'unaffected' everywhere. The change is derived from the unit's latest " +
145
+ "provenance entry (frontmatter diff + body_changed), or pass " +
146
+ "changed_fields to ask about a hypothetical change ('body' counts as a " +
147
+ "field). summary.resolved_at_tier1 is true when nothing needs semantic " +
148
+ "review — the change was fully decided without an LLM.",
149
+ inputSchema: {
150
+ type: "object",
151
+ properties: {
152
+ unit: {
153
+ type: "string",
154
+ description: "Vault-relative path of the changed (or about-to-change) document",
155
+ },
156
+ changed_fields: {
157
+ type: "array",
158
+ items: { type: "string" },
159
+ description: "Optional explicit change description: frontmatter keys and/or " +
160
+ "'body'. Omit to derive from the unit's latest provenance entry.",
161
+ },
162
+ },
163
+ required: ["unit"],
164
+ additionalProperties: false,
165
+ },
166
+ handler: (vaultRoot, args, access) => vaultTier1(vaultRoot, args, access),
167
+ },
168
+ ];
169
+ //# sourceMappingURL=tier1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier1.js","sourceRoot":"","sources":["../../src/tools/tier1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type AccessContext } from "../access/rbac.js";
2
+ import type { Tier1EdgeClass } from "../curation/tier1.js";
3
+ import { type FieldChange, type Tier2Verdict } from "../curation/tier2.js";
4
+ import { type Result } from "../frontmatter/types.js";
5
+ import type { ToolDefinition } from "./read.js";
6
+ export interface Tier2WorkItem {
7
+ artifact: string;
8
+ unit: string;
9
+ edge_class: Exclude<Tier1EdgeClass, "compiled">;
10
+ baseline: string | null;
11
+ changed_fields: string[];
12
+ field_changes: Record<string, FieldChange>;
13
+ usage_span: string | null;
14
+ question: string;
15
+ }
16
+ export interface Tier2QueueResult {
17
+ items: Tier2WorkItem[];
18
+ total: number;
19
+ }
20
+ export interface Tier2VerdictResult {
21
+ recorded: Tier2Verdict;
22
+ tension_id: string | null;
23
+ }
24
+ export declare function vaultTier2Queue(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<Tier2QueueResult, Error>>;
25
+ export declare function vaultTier2Verdict(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<Tier2VerdictResult, Error>>;
26
+ export declare const tier2Tools: ToolDefinition[];
27
+ //# sourceMappingURL=tier2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier2.d.ts","sourceRoot":"","sources":["../../src/tools/tier2.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,mBAAmB,CAAC;AAUnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAGL,KAAK,WAAW,EAKhB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAChD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IAIzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAI3C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAgFD,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,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAoC1C;AAED,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,CA8I5C;AAED,eAAO,MAAM,UAAU,EAAE,cAAc,EA+EtC,CAAC"}
@@ -0,0 +1,344 @@
1
+ // vault_tier2_queue / vault_tier2_verdict — the tier-2 protocol surface
2
+ // (#232). The server does NOT run an LLM: the calling agent is the judge.
3
+ // The queue tool prepares the constrained judgments (specific claim against
4
+ // specific usage — never "do these two documents conflict"); the verdict
5
+ // tool records the typed answer and, for a break, logs a real tension
6
+ // through the existing taxonomy. See src/curation/tier2.ts for the model.
7
+ //
8
+ // RBAC (#217): any-read gate on both tools. A queue item names two
9
+ // documents, so it is listed only when the caller can read BOTH — omission,
10
+ // no counts, no coarse remainder (lists omit; only summaries coarsen). A
11
+ // verdict on a pair the caller cannot fully read is refused with the SAME
12
+ // error a pair with nothing pending produces — no existence signal.
13
+ import { hasAnyRead } from "../access/rbac.js";
14
+ import { upstreamStaleness } from "../curation/edge-staleness.js";
15
+ import { listEdges } from "../curation/edges.js";
16
+ import { readProvenanceLog } from "../curation/provenance.js";
17
+ import { addTension, LOGGABLE_TENSION_KINDS, } from "../curation/tension.js";
18
+ import { sourceReadable } from "../curation/tension-access.js";
19
+ import { accumulateFieldChanges, extractUsageSpan, latestUnitChangeTs, NO_CHANGE_TS, readTier2Verdicts, recordTier2Verdict, } from "../curation/tier2.js";
20
+ import { loadDocuments } from "../curation/vault-docs.js";
21
+ import { err, ok } from "../frontmatter/types.js";
22
+ import { canonicalVaultRelPath } from "../storage/local.js";
23
+ import { readRunId } from "../utils/run-id.js";
24
+ import { openIndexForAccessOrNull } from "./search.js";
25
+ async function loadQueueSources(vaultRoot) {
26
+ const provenance = await readProvenanceLog(vaultRoot);
27
+ if (!provenance.ok)
28
+ return provenance;
29
+ const verdicts = await readTier2Verdicts(vaultRoot);
30
+ if (!verdicts.ok)
31
+ return verdicts;
32
+ const docs = await loadDocuments(vaultRoot);
33
+ if (!docs.ok)
34
+ return docs;
35
+ const edges = await listEdges(vaultRoot);
36
+ if (!edges.ok)
37
+ return edges;
38
+ const earnedByFrom = new Map();
39
+ for (const e of edges.value) {
40
+ if (e.status === "revoked")
41
+ continue;
42
+ const list = earnedByFrom.get(e.fromPath) ?? [];
43
+ list.push({ unit: e.toPath, lastRederived: e.lastRederived });
44
+ earnedByFrom.set(e.fromPath, list);
45
+ }
46
+ return ok({
47
+ provenance: provenance.value,
48
+ verdicts: verdicts.value,
49
+ docs: docs.value,
50
+ earnedByFrom,
51
+ });
52
+ }
53
+ // The artifact's pending-unchecked rows — the tier-2 residual. Compiled
54
+ // edges are excluded at the source (consumes: []): tier 1 decides them
55
+ // mechanically and they never queue.
56
+ function residualRows(sources, doc) {
57
+ return upstreamStaleness({
58
+ artifact: doc.path,
59
+ consumes: [],
60
+ provenance: sources.provenance,
61
+ declaredUnits: doc.frontmatter.sources,
62
+ earned: sources.earnedByFrom.get(doc.path) ?? [],
63
+ verdicts: sources.verdicts,
64
+ }).filter((r) => r.staleness === "pending-unchecked");
65
+ }
66
+ function workItem(sources, doc, row) {
67
+ const unitDoc = sources.docs.find((d) => d.path === row.unit);
68
+ const fieldChanges = row.baseline === null
69
+ ? accumulateFieldChanges(sources.provenance, row.unit, NO_CHANGE_TS)
70
+ : accumulateFieldChanges(sources.provenance, row.unit, row.baseline);
71
+ const span = extractUsageSpan(doc.content, {
72
+ path: row.unit,
73
+ title: unitDoc?.frontmatter.title,
74
+ });
75
+ const changeDesc = row.changed_fields.length > 0
76
+ ? `changed [${row.changed_fields.join(", ")}]`
77
+ : "has never been checked against this dependent";
78
+ return {
79
+ artifact: doc.path,
80
+ unit: row.unit,
81
+ edge_class: row.edge_class,
82
+ baseline: row.baseline,
83
+ changed_fields: row.changed_fields,
84
+ field_changes: fieldChanges,
85
+ usage_span: span,
86
+ question: `${row.unit} ${changeDesc}` +
87
+ `${row.baseline ? ` since ${row.baseline}` : ""}. ${doc.path} depends on it via a ` +
88
+ `${row.edge_class} edge. Given field_changes and the dependent's usage ` +
89
+ `(usage_span, or read the documents), does the dependent's claim still hold? ` +
90
+ `Record the judgment with vault_tier2_verdict: 'still-valid', or 'broken' with a ` +
91
+ `tension_kind (${LOGGABLE_TENSION_KINDS.join(" | ")}) and both claims.`,
92
+ };
93
+ }
94
+ export async function vaultTier2Queue(vaultRoot, args, access) {
95
+ if (access && !hasAnyRead(access.role)) {
96
+ return err(new Error(`access denied: role '${access.roleName}' cannot use vault_tier2_queue`));
97
+ }
98
+ let unitFilter = null;
99
+ if (args.unit !== undefined && args.unit !== null) {
100
+ if (typeof args.unit !== "string" || args.unit.trim().length === 0) {
101
+ return err(new Error("vault_tier2_queue 'unit' must be a non-empty string"));
102
+ }
103
+ const canon = canonicalVaultRelPath(vaultRoot, args.unit);
104
+ if (!canon.ok)
105
+ return canon;
106
+ unitFilter = canon.value;
107
+ }
108
+ const sources = await loadQueueSources(vaultRoot);
109
+ if (!sources.ok)
110
+ return sources;
111
+ const db = access ? openIndexForAccessOrNull(vaultRoot) : null;
112
+ try {
113
+ const items = [];
114
+ for (const doc of sources.value.docs) {
115
+ // #217 omission: an item names both endpoints, so both must be
116
+ // readable. An unreadable artifact drops with all its rows; an
117
+ // unreadable unit drops that row. No counts, no remainder.
118
+ if (access && !sourceReadable(db, access, doc.path))
119
+ continue;
120
+ for (const row of residualRows(sources.value, doc)) {
121
+ if (unitFilter !== null && row.unit !== unitFilter)
122
+ continue;
123
+ if (access && !sourceReadable(db, access, row.unit))
124
+ continue;
125
+ items.push(workItem(sources.value, doc, row));
126
+ }
127
+ }
128
+ items.sort((a, b) => a.unit.localeCompare(b.unit) || a.artifact.localeCompare(b.artifact));
129
+ return ok({ items, total: items.length });
130
+ }
131
+ finally {
132
+ db?.close();
133
+ }
134
+ }
135
+ export async function vaultTier2Verdict(vaultRoot, args, access) {
136
+ if (access && !hasAnyRead(access.role)) {
137
+ return err(new Error(`access denied: role '${access.roleName}' cannot use vault_tier2_verdict`));
138
+ }
139
+ const str = (field) => {
140
+ const v = args[field];
141
+ if (typeof v !== "string" || v.trim().length === 0) {
142
+ return err(new Error(`vault_tier2_verdict requires a non-empty '${field}' argument`));
143
+ }
144
+ return ok(v.trim());
145
+ };
146
+ const artifactRaw = str("artifact");
147
+ if (!artifactRaw.ok)
148
+ return artifactRaw;
149
+ const unitRaw = str("unit");
150
+ if (!unitRaw.ok)
151
+ return unitRaw;
152
+ const reasoning = str("reasoning");
153
+ if (!reasoning.ok)
154
+ return reasoning;
155
+ const agent = str("agent");
156
+ if (!agent.ok)
157
+ return agent;
158
+ const verdict = args.verdict;
159
+ if (verdict !== "still-valid" && verdict !== "broken") {
160
+ return err(new Error("vault_tier2_verdict 'verdict' must be 'still-valid' or 'broken'"));
161
+ }
162
+ const runId = readRunId(args, "vault_tier2_verdict");
163
+ if (!runId.ok)
164
+ return runId;
165
+ let tensionKind = null;
166
+ let claimArtifact = null;
167
+ let claimUnit = null;
168
+ if (verdict === "broken") {
169
+ const kind = args.tension_kind;
170
+ if (typeof kind !== "string" || !LOGGABLE_TENSION_KINDS.includes(kind)) {
171
+ return err(new Error(`a 'broken' verdict requires 'tension_kind' — one of: ${LOGGABLE_TENSION_KINDS.join(", ")}`));
172
+ }
173
+ tensionKind = kind;
174
+ const ca = str("claim_artifact");
175
+ if (!ca.ok)
176
+ return ca;
177
+ const cu = str("claim_unit");
178
+ if (!cu.ok)
179
+ return cu;
180
+ claimArtifact = ca.value;
181
+ claimUnit = cu.value;
182
+ }
183
+ else if (args.tension_kind !== undefined) {
184
+ return err(new Error("'tension_kind' applies only to a 'broken' verdict"));
185
+ }
186
+ const artifact = canonicalVaultRelPath(vaultRoot, artifactRaw.value);
187
+ if (!artifact.ok)
188
+ return artifact;
189
+ const unit = canonicalVaultRelPath(vaultRoot, unitRaw.value);
190
+ if (!unit.ok)
191
+ return unit;
192
+ const noPendingError = () => err(new Error(`vault_tier2_verdict: no pending semantic review for ${artifact.value} ← ${unit.value}` +
193
+ ` — see vault_tier2_queue`));
194
+ // Disclosure: a pair the caller cannot fully read is refused with the
195
+ // exact error a pair with nothing pending produces — decided BEFORE any
196
+ // queue state is computed, so the response cannot depend on it.
197
+ if (access) {
198
+ const db = openIndexForAccessOrNull(vaultRoot);
199
+ try {
200
+ if (!sourceReadable(db, access, artifact.value) || !sourceReadable(db, access, unit.value)) {
201
+ return noPendingError();
202
+ }
203
+ }
204
+ finally {
205
+ db?.close();
206
+ }
207
+ }
208
+ const sources = await loadQueueSources(vaultRoot);
209
+ if (!sources.ok)
210
+ return sources;
211
+ const doc = sources.value.docs.find((d) => d.path === artifact.value);
212
+ const candidates = doc
213
+ ? residualRows(sources.value, doc).filter((r) => r.unit === unit.value)
214
+ : [];
215
+ if (candidates.length === 0)
216
+ return noPendingError();
217
+ let row;
218
+ if (args.edge_class !== undefined && args.edge_class !== null) {
219
+ const match = candidates.find((r) => r.edge_class === args.edge_class);
220
+ if (!match)
221
+ return noPendingError();
222
+ row = match;
223
+ }
224
+ else if (candidates.length === 1) {
225
+ row = candidates[0];
226
+ }
227
+ else {
228
+ return err(new Error(`vault_tier2_verdict: ${artifact.value} ← ${unit.value} is pending on several edge ` +
229
+ `classes (${candidates.map((r) => r.edge_class).join(", ")}) — pass 'edge_class'`));
230
+ }
231
+ // A break is a real tension, logged through the existing taxonomy — the
232
+ // durable, caller-visible artifact of the judgment.
233
+ let tensionId = null;
234
+ if (verdict === "broken" && tensionKind && claimArtifact && claimUnit) {
235
+ const tension = await addTension(vaultRoot, {
236
+ title: `tier-2: ${unit.value} change breaks ${artifact.value}`,
237
+ kind: tensionKind,
238
+ sourceA: artifact.value,
239
+ claimA: claimArtifact,
240
+ sourceB: unit.value,
241
+ claimB: claimUnit,
242
+ loggedBy: agent.value,
243
+ });
244
+ if (!tension.ok)
245
+ return tension;
246
+ tensionId = tension.value.id ?? null;
247
+ }
248
+ const recorded = await recordTier2Verdict(vaultRoot, {
249
+ artifact: artifact.value,
250
+ unit: unit.value,
251
+ edge_class: row.edge_class,
252
+ judged_change_ts: latestUnitChangeTs(sources.value.provenance, unit.value) ?? NO_CHANGE_TS,
253
+ verdict,
254
+ ...(tensionKind ? { tension_kind: tensionKind } : {}),
255
+ ...(tensionId ? { tension_id: tensionId } : {}),
256
+ reasoning: reasoning.value,
257
+ agent: agent.value,
258
+ ...(access?.user != null ? { principal: access.user } : {}),
259
+ ...(runId.value ? { run_id: runId.value } : {}),
260
+ });
261
+ if (!recorded.ok) {
262
+ return err(new Error(`${recorded.error.message}${tensionId ? ` (tension ${tensionId} was already logged)` : ""}`));
263
+ }
264
+ return ok({ recorded: recorded.value, tension_id: tensionId });
265
+ }
266
+ export const tier2Tools = [
267
+ {
268
+ name: "vault_tier2_queue",
269
+ title: "Semantic-review queue (tier 2)",
270
+ annotations: { readOnlyHint: true },
271
+ description: "The tier-2 semantic-review queue (#232): every declared/earned " +
272
+ "dependency whose upstream changed but whose compatibility the " +
273
+ "structure could not decide (tier 1's residual — #234's " +
274
+ "pending-unchecked class), minus pairs an existing verdict already " +
275
+ "covers. Each item is a CONSTRAINED judgment: the net per-field " +
276
+ "before/after since the edge's baseline, the dependent's usage span, " +
277
+ "and the specific question to answer — never 'do these documents " +
278
+ "conflict'. YOU are the judge: answer items with vault_tier2_verdict. " +
279
+ "Pass 'unit' to scope the queue to one changed document. Compiled " +
280
+ "edges never appear — tier 1 decides them mechanically.",
281
+ inputSchema: {
282
+ type: "object",
283
+ properties: {
284
+ unit: {
285
+ type: "string",
286
+ description: "Optional vault-relative path: only items judging this changed document",
287
+ },
288
+ },
289
+ additionalProperties: false,
290
+ },
291
+ handler: (vaultRoot, args, access) => vaultTier2Queue(vaultRoot, args, access),
292
+ },
293
+ {
294
+ name: "vault_tier2_verdict",
295
+ title: "Record a tier-2 semantic verdict",
296
+ annotations: { readOnlyHint: false, idempotentHint: false },
297
+ description: "Record the answer to a vault_tier2_queue item (#232 tier 2). " +
298
+ "verdict 'still-valid' certifies the dependent's use of the changed " +
299
+ "unit still holds; 'broken' requires a tension_kind from the tension " +
300
+ "taxonomy plus claim_artifact/claim_unit, and logs a real tension via " +
301
+ "the existing machinery (the tension id is returned). The verdict " +
302
+ "covers the unit's CURRENT change only — a later write to the unit " +
303
+ "re-queues the pair automatically. Refused when the pair has nothing " +
304
+ "pending. Staleness surfaces (vault_staleness) read verdicts: a " +
305
+ "covered pair reports pending-compatible or pending-broken instead " +
306
+ "of pending-unchecked.",
307
+ inputSchema: {
308
+ type: "object",
309
+ properties: {
310
+ artifact: { type: "string", description: "The dependent document being judged" },
311
+ unit: { type: "string", description: "The changed upstream it was judged against" },
312
+ edge_class: {
313
+ type: "string",
314
+ enum: ["declared", "earned"],
315
+ description: "Required only when the pair is pending on both classes",
316
+ },
317
+ verdict: { type: "string", enum: ["still-valid", "broken"] },
318
+ tension_kind: {
319
+ type: "string",
320
+ enum: [...LOGGABLE_TENSION_KINDS],
321
+ description: "Required for 'broken': the tension taxonomy kind",
322
+ },
323
+ claim_artifact: {
324
+ type: "string",
325
+ description: "For 'broken': what the dependent asserts (becomes the tension's claimA)",
326
+ },
327
+ claim_unit: {
328
+ type: "string",
329
+ description: "For 'broken': what the changed unit now says (becomes claimB)",
330
+ },
331
+ reasoning: { type: "string", description: "The judgment's reasoning, recorded verbatim" },
332
+ agent: {
333
+ type: "string",
334
+ description: "Judging agent's identity, e.g. agent:curation-loop",
335
+ },
336
+ run_id: { type: "string", description: "Optional trace/run identifier of the calling run" },
337
+ },
338
+ required: ["artifact", "unit", "verdict", "reasoning", "agent"],
339
+ additionalProperties: false,
340
+ },
341
+ handler: (vaultRoot, args, access) => vaultTier2Verdict(vaultRoot, args, access),
342
+ },
343
+ ];
344
+ //# sourceMappingURL=tier2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier2.js","sourceRoot":"","sources":["../../src/tools/tier2.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export declare function applyExtensionDefaults(raw: Record<string, unknown>, ext
6
6
  export declare function serializeDocument(fm: Frontmatter, body: string, extensions?: SchemaExtension[], raw?: Record<string, unknown>): string;
7
7
  export interface WriteResult {
8
8
  path: string;
9
- action: "create" | "update" | "append" | "promote" | "deprecate" | "supersede" | "merge" | "confidence-set";
9
+ action: "create" | "update" | "append" | "promote" | "deprecate" | "supersede" | "merge" | "confidence-set" | "tier-set" | "staged";
10
10
  commit: string | null;
11
11
  committed: boolean;
12
12
  status: string;
@@ -14,12 +14,20 @@ export interface WriteResult {
14
14
  validation: ValidationReport;
15
15
  indexUpdated: boolean;
16
16
  shadow?: boolean;
17
+ supersede_hint?: string;
18
+ domain_warnings?: string[];
19
+ staged_id?: string;
20
+ expires_at?: string;
21
+ conflicts_with?: string[];
22
+ tension_id?: string | null;
23
+ tension_error?: string;
17
24
  }
18
25
  export declare function vaultWrite(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
19
26
  export declare function vaultAppend(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
20
27
  export declare function vaultPromote(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
21
28
  export declare function vaultDeprecate(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
22
29
  export declare function vaultSetConfidence(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
30
+ export declare function vaultSetTier(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
23
31
  export declare function vaultSupersede(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
24
32
  export declare function vaultMerge(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
25
33
  export declare const writeTools: ToolDefinition[];
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}