daftari 1.30.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 (282) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +139 -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 +18 -0
  32. package/dist/cli.js.map +1 -1
  33. package/dist/court/precedent.d.ts.map +1 -1
  34. package/dist/court/precedent.js +6 -1
  35. package/dist/court/precedent.js.map +1 -1
  36. package/dist/curation/consumes.d.ts +24 -0
  37. package/dist/curation/consumes.d.ts.map +1 -0
  38. package/dist/curation/consumes.js +122 -0
  39. package/dist/curation/consumes.js.map +1 -0
  40. package/dist/curation/edge-staleness.d.ts +47 -0
  41. package/dist/curation/edge-staleness.d.ts.map +1 -0
  42. package/dist/curation/edge-staleness.js +258 -0
  43. package/dist/curation/edge-staleness.js.map +1 -0
  44. package/dist/curation/edges.d.ts.map +1 -1
  45. package/dist/curation/edges.js +164 -10
  46. package/dist/curation/edges.js.map +1 -1
  47. package/dist/curation/lint.d.ts +4 -1
  48. package/dist/curation/lint.d.ts.map +1 -1
  49. package/dist/curation/lint.js +61 -6
  50. package/dist/curation/lint.js.map +1 -1
  51. package/dist/curation/provenance.d.ts +2 -0
  52. package/dist/curation/provenance.d.ts.map +1 -1
  53. package/dist/curation/provenance.js +2 -0
  54. package/dist/curation/provenance.js.map +1 -1
  55. package/dist/curation/read-log.d.ts +19 -0
  56. package/dist/curation/read-log.d.ts.map +1 -0
  57. package/dist/curation/read-log.js +120 -0
  58. package/dist/curation/read-log.js.map +1 -0
  59. package/dist/curation/review-throughput.d.ts +24 -0
  60. package/dist/curation/review-throughput.d.ts.map +1 -0
  61. package/dist/curation/review-throughput.js +102 -0
  62. package/dist/curation/review-throughput.js.map +1 -0
  63. package/dist/curation/staged-actions.d.ts +11 -1
  64. package/dist/curation/staged-actions.d.ts.map +1 -1
  65. package/dist/curation/staged-actions.js +102 -24
  66. package/dist/curation/staged-actions.js.map +1 -1
  67. package/dist/curation/structural.d.ts +16 -0
  68. package/dist/curation/structural.d.ts.map +1 -0
  69. package/dist/curation/structural.js +64 -0
  70. package/dist/curation/structural.js.map +1 -0
  71. package/dist/curation/tension-blast.d.ts +4 -0
  72. package/dist/curation/tension-blast.d.ts.map +1 -1
  73. package/dist/curation/tension-blast.js +9 -0
  74. package/dist/curation/tension-blast.js.map +1 -1
  75. package/dist/curation/tension.d.ts +5 -2
  76. package/dist/curation/tension.d.ts.map +1 -1
  77. package/dist/curation/tension.js +68 -25
  78. package/dist/curation/tension.js.map +1 -1
  79. package/dist/curation/tier0.d.ts +27 -0
  80. package/dist/curation/tier0.d.ts.map +1 -0
  81. package/dist/curation/tier0.js +196 -0
  82. package/dist/curation/tier0.js.map +1 -0
  83. package/dist/curation/tier1.d.ts +30 -0
  84. package/dist/curation/tier1.d.ts.map +1 -0
  85. package/dist/curation/tier1.js +142 -0
  86. package/dist/curation/tier1.js.map +1 -0
  87. package/dist/curation/tier2.d.ts +43 -0
  88. package/dist/curation/tier2.d.ts.map +1 -0
  89. package/dist/curation/tier2.js +182 -0
  90. package/dist/curation/tier2.js.map +1 -0
  91. package/dist/curation/vault-docs.d.ts +5 -1
  92. package/dist/curation/vault-docs.d.ts.map +1 -1
  93. package/dist/curation/vault-docs.js +14 -0
  94. package/dist/curation/vault-docs.js.map +1 -1
  95. package/dist/eval/generate.js +22 -5
  96. package/dist/eval/generate.js.map +1 -1
  97. package/dist/eval/index.d.ts.map +1 -1
  98. package/dist/eval/index.js +173 -25
  99. package/dist/eval/index.js.map +1 -1
  100. package/dist/eval/llm.js +1 -1
  101. package/dist/eval/llm.js.map +1 -1
  102. package/dist/eval/prune.d.ts +24 -0
  103. package/dist/eval/prune.d.ts.map +1 -0
  104. package/dist/eval/prune.js +83 -0
  105. package/dist/eval/prune.js.map +1 -0
  106. package/dist/eval/storage.d.ts +3 -0
  107. package/dist/eval/storage.d.ts.map +1 -1
  108. package/dist/eval/storage.js +14 -0
  109. package/dist/eval/storage.js.map +1 -1
  110. package/dist/frontmatter/schema.d.ts.map +1 -1
  111. package/dist/frontmatter/schema.js +19 -1
  112. package/dist/frontmatter/schema.js.map +1 -1
  113. package/dist/frontmatter/types.d.ts +4 -1
  114. package/dist/frontmatter/types.d.ts.map +1 -1
  115. package/dist/frontmatter/types.js +8 -0
  116. package/dist/frontmatter/types.js.map +1 -1
  117. package/dist/import/index.d.ts.map +1 -1
  118. package/dist/import/index.js +44 -9
  119. package/dist/import/index.js.map +1 -1
  120. package/dist/import/langgraph-store.d.ts +53 -0
  121. package/dist/import/langgraph-store.d.ts.map +1 -0
  122. package/dist/import/langgraph-store.js +292 -0
  123. package/dist/import/langgraph-store.js.map +1 -0
  124. package/dist/index.d.ts +5 -0
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +56 -18
  127. package/dist/index.js.map +1 -1
  128. package/dist/lifecycle/lock.d.ts +9 -1
  129. package/dist/lifecycle/lock.d.ts.map +1 -1
  130. package/dist/lifecycle/lock.js +34 -9
  131. package/dist/lifecycle/lock.js.map +1 -1
  132. package/dist/okf/export.d.ts +12 -0
  133. package/dist/okf/export.d.ts.map +1 -0
  134. package/dist/okf/export.js +115 -0
  135. package/dist/okf/export.js.map +1 -0
  136. package/dist/okf/import.d.ts +24 -0
  137. package/dist/okf/import.d.ts.map +1 -0
  138. package/dist/okf/import.js +107 -0
  139. package/dist/okf/import.js.map +1 -0
  140. package/dist/okf/index.d.ts +2 -0
  141. package/dist/okf/index.d.ts.map +1 -0
  142. package/dist/okf/index.js +147 -0
  143. package/dist/okf/index.js.map +1 -0
  144. package/dist/okf/map.d.ts +16 -0
  145. package/dist/okf/map.d.ts.map +1 -0
  146. package/dist/okf/map.js +149 -0
  147. package/dist/okf/map.js.map +1 -0
  148. package/dist/okf/types.d.ts +9 -0
  149. package/dist/okf/types.d.ts.map +1 -0
  150. package/dist/okf/types.js +48 -0
  151. package/dist/okf/types.js.map +1 -0
  152. package/dist/search/coverage.d.ts.map +1 -1
  153. package/dist/search/coverage.js +1 -1
  154. package/dist/search/coverage.js.map +1 -1
  155. package/dist/search/hybrid.d.ts +19 -0
  156. package/dist/search/hybrid.d.ts.map +1 -1
  157. package/dist/search/hybrid.js +58 -10
  158. package/dist/search/hybrid.js.map +1 -1
  159. package/dist/search/reindex.d.ts +1 -0
  160. package/dist/search/reindex.d.ts.map +1 -1
  161. package/dist/search/reindex.js +41 -11
  162. package/dist/search/reindex.js.map +1 -1
  163. package/dist/search/watcher.d.ts +2 -0
  164. package/dist/search/watcher.d.ts.map +1 -1
  165. package/dist/search/watcher.js +21 -10
  166. package/dist/search/watcher.js.map +1 -1
  167. package/dist/serve/index.d.ts +36 -0
  168. package/dist/serve/index.d.ts.map +1 -0
  169. package/dist/serve/index.js +507 -0
  170. package/dist/serve/index.js.map +1 -0
  171. package/dist/server.d.ts +10 -1
  172. package/dist/server.d.ts.map +1 -1
  173. package/dist/server.js +89 -14
  174. package/dist/server.js.map +1 -1
  175. package/dist/sleep/index.d.ts +2 -0
  176. package/dist/sleep/index.d.ts.map +1 -1
  177. package/dist/sleep/index.js +212 -21
  178. package/dist/sleep/index.js.map +1 -1
  179. package/dist/sleep/report.d.ts +3 -0
  180. package/dist/sleep/report.d.ts.map +1 -1
  181. package/dist/sleep/report.js +52 -0
  182. package/dist/sleep/report.js.map +1 -1
  183. package/dist/sleep/tension-scan-state.d.ts +19 -0
  184. package/dist/sleep/tension-scan-state.d.ts.map +1 -0
  185. package/dist/sleep/tension-scan-state.js +0 -0
  186. package/dist/sleep/tension-scan-state.js.map +1 -0
  187. package/dist/sleep/tension-scan.d.ts +44 -0
  188. package/dist/sleep/tension-scan.d.ts.map +1 -0
  189. package/dist/sleep/tension-scan.js +0 -0
  190. package/dist/sleep/tension-scan.js.map +1 -0
  191. package/dist/storage/backend.d.ts +12 -0
  192. package/dist/storage/backend.d.ts.map +1 -0
  193. package/dist/storage/backend.js +231 -0
  194. package/dist/storage/backend.js.map +1 -0
  195. package/dist/storage/backends/fs.d.ts +4 -0
  196. package/dist/storage/backends/fs.d.ts.map +1 -0
  197. package/dist/storage/backends/fs.js +99 -0
  198. package/dist/storage/backends/fs.js.map +1 -0
  199. package/dist/storage/fs-walk.d.ts +5 -0
  200. package/dist/storage/fs-walk.d.ts.map +1 -0
  201. package/dist/storage/fs-walk.js +28 -0
  202. package/dist/storage/fs-walk.js.map +1 -0
  203. package/dist/storage/index-db.d.ts +16 -0
  204. package/dist/storage/index-db.d.ts.map +1 -1
  205. package/dist/storage/index-db.js +94 -5
  206. package/dist/storage/index-db.js.map +1 -1
  207. package/dist/storage/local.d.ts +1 -0
  208. package/dist/storage/local.d.ts.map +1 -1
  209. package/dist/storage/local.js +12 -0
  210. package/dist/storage/local.js.map +1 -1
  211. package/dist/storage/sync.d.ts +25 -0
  212. package/dist/storage/sync.d.ts.map +1 -0
  213. package/dist/storage/sync.js +308 -0
  214. package/dist/storage/sync.js.map +1 -0
  215. package/dist/sync/index.d.ts +2 -0
  216. package/dist/sync/index.d.ts.map +1 -0
  217. package/dist/sync/index.js +136 -0
  218. package/dist/sync/index.js.map +1 -0
  219. package/dist/themes/clustering.d.ts +6 -11
  220. package/dist/themes/clustering.d.ts.map +1 -1
  221. package/dist/themes/clustering.js +76 -84
  222. package/dist/themes/clustering.js.map +1 -1
  223. package/dist/tools/consumes.d.ts +14 -0
  224. package/dist/tools/consumes.d.ts.map +1 -0
  225. package/dist/tools/consumes.js +99 -0
  226. package/dist/tools/consumes.js.map +1 -0
  227. package/dist/tools/curation.d.ts +2 -0
  228. package/dist/tools/curation.d.ts.map +1 -1
  229. package/dist/tools/curation.js +53 -15
  230. package/dist/tools/curation.js.map +1 -1
  231. package/dist/tools/edge-staleness.d.ts +28 -0
  232. package/dist/tools/edge-staleness.d.ts.map +1 -0
  233. package/dist/tools/edge-staleness.js +205 -0
  234. package/dist/tools/edge-staleness.js.map +1 -0
  235. package/dist/tools/edges.d.ts.map +1 -1
  236. package/dist/tools/edges.js +27 -21
  237. package/dist/tools/edges.js.map +1 -1
  238. package/dist/tools/read.d.ts +15 -1
  239. package/dist/tools/read.d.ts.map +1 -1
  240. package/dist/tools/read.js +142 -29
  241. package/dist/tools/read.js.map +1 -1
  242. package/dist/tools/receipt.d.ts.map +1 -1
  243. package/dist/tools/receipt.js +16 -7
  244. package/dist/tools/receipt.js.map +1 -1
  245. package/dist/tools/search.d.ts +1 -0
  246. package/dist/tools/search.d.ts.map +1 -1
  247. package/dist/tools/search.js +147 -5
  248. package/dist/tools/search.js.map +1 -1
  249. package/dist/tools/staged-actions.d.ts +3 -0
  250. package/dist/tools/staged-actions.d.ts.map +1 -1
  251. package/dist/tools/staged-actions.js +227 -22
  252. package/dist/tools/staged-actions.js.map +1 -1
  253. package/dist/tools/themes.d.ts +8 -0
  254. package/dist/tools/themes.d.ts.map +1 -1
  255. package/dist/tools/themes.js +208 -122
  256. package/dist/tools/themes.js.map +1 -1
  257. package/dist/tools/tier1.d.ts +14 -0
  258. package/dist/tools/tier1.d.ts.map +1 -0
  259. package/dist/tools/tier1.js +169 -0
  260. package/dist/tools/tier1.js.map +1 -0
  261. package/dist/tools/tier2.d.ts +27 -0
  262. package/dist/tools/tier2.d.ts.map +1 -0
  263. package/dist/tools/tier2.js +344 -0
  264. package/dist/tools/tier2.js.map +1 -0
  265. package/dist/tools/write.d.ts +9 -1
  266. package/dist/tools/write.d.ts.map +1 -1
  267. package/dist/tools/write.js +492 -6
  268. package/dist/tools/write.js.map +1 -1
  269. package/dist/utils/config.d.ts +52 -0
  270. package/dist/utils/config.d.ts.map +1 -1
  271. package/dist/utils/config.js +372 -2
  272. package/dist/utils/config.js.map +1 -1
  273. package/dist/utils/run-id.d.ts +3 -0
  274. package/dist/utils/run-id.d.ts.map +1 -0
  275. package/dist/utils/run-id.js +19 -0
  276. package/dist/utils/run-id.js.map +1 -0
  277. package/dist/utils/vault-gitignore.d.ts +1 -1
  278. package/dist/utils/vault-gitignore.d.ts.map +1 -1
  279. package/dist/utils/vault-gitignore.js +4 -1
  280. package/dist/utils/vault-gitignore.js.map +1 -1
  281. package/package.json +21 -1
  282. package/templates/config.yaml +8 -0
@@ -0,0 +1,44 @@
1
+ import { type LoggableTensionKind } from "../curation/tension.js";
2
+ import type { LlmClient } from "../eval/llm.js";
3
+ import { type Result } from "../frontmatter/types.js";
4
+ export declare const TENSION_SCAN_RELATED_LIMIT = 6;
5
+ export interface TensionScanDeps {
6
+ llm: LlmClient;
7
+ searchNeighbors: (path: string, limit: number) => Promise<Result<string[], Error>>;
8
+ sourceVisible?: (path: string) => boolean;
9
+ }
10
+ export interface TensionScanOpts {
11
+ vaultRoot: string;
12
+ agent: string;
13
+ model: string;
14
+ maxLlmCalls: number;
15
+ maxDocs: number;
16
+ relatedLimit?: number;
17
+ now?: Date;
18
+ }
19
+ export interface LoggedTension {
20
+ id: string | null;
21
+ kind: LoggableTensionKind;
22
+ sourceA: string;
23
+ sourceB: string;
24
+ reason: string;
25
+ }
26
+ export interface TensionScanOutcome {
27
+ candidates: number;
28
+ docsScanned: number;
29
+ searchCalls: number;
30
+ pairsConsidered: number;
31
+ pairsJudged: number;
32
+ pairsSkippedJudged: number;
33
+ pairsSkippedExistingTension: number;
34
+ pairsSkippedAccess: number;
35
+ parseFailures: number;
36
+ tensionsLogged: number;
37
+ tensionLogFailures: number;
38
+ budgetExhausted: boolean;
39
+ tensions: LoggedTension[];
40
+ stateWriteError?: string;
41
+ }
42
+ export declare function claimText(body: string): string;
43
+ export declare function runTensionScan(opts: TensionScanOpts, deps: TensionScanDeps): Promise<Result<TensionScanOutcome, Error>>;
44
+ //# sourceMappingURL=tension-scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tension-scan.d.ts","sourceRoot":"","sources":["../../src/sleep/tension-scan.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAc,KAAK,mBAAmB,EAAgB,MAAM,wBAAwB,CAAC;AAE5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAY1D,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAyB5C,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAC;IAIf,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAInF,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3C;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAElB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2BAA2B,EAAE,MAAM,CAAC;IACpC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAWD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9C;AAsCD,wBAAsB,cAAc,CAClC,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CA+L5C"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tension-scan.js","sourceRoot":"","sources":["../../src/sleep/tension-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type Result } from "../frontmatter/types.js";
2
+ import type { StorageConfig } from "../utils/config.js";
3
+ export interface StorageBackend {
4
+ id: string;
5
+ get(key: string): Promise<Result<Buffer | null, Error>>;
6
+ put(key: string, data: Buffer): Promise<Result<void, Error>>;
7
+ list(prefix: string): Promise<Result<string[], Error>>;
8
+ delete(key: string): Promise<Result<void, Error>>;
9
+ }
10
+ export declare function validateEndpoint(endpoint: string): Result<void, Error>;
11
+ export declare function createBackend(config: StorageConfig): Promise<Result<StorageBackend, Error>>;
12
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/storage/backend.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,cAAc;IAE7B,EAAE,EAAE,MAAM,CAAC;IAEX,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAE7D,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAEvD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;CACnD;AASD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAiBtE;AA6MD,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CA6BjG"}
@@ -0,0 +1,231 @@
1
+ // Pluggable storage backends (#6, spec Decision 3 —
2
+ // docs/superpowers/specs/2026-07-20-self-hosted-server-mode-design.md).
3
+ //
4
+ // The local git working copy is CANONICAL. A backend is nothing but a dumb,
5
+ // durable key-value target the sync engine pushes to: get/put/list/delete
6
+ // over opaque keys. No backend understands markdown, frontmatter, git, or
7
+ // locks — provenance stays git, the index stays local and ephemeral, and the
8
+ // single-instance process lock stays local SQLite.
9
+ //
10
+ // Shipped backends:
11
+ // fs — a local/mounted directory (also the test double)
12
+ // s3 — Amazon S3 and every S3-compatible store (GCS interop endpoint,
13
+ // MinIO, Cloudflare R2) via @aws-sdk/client-s3 (optional dep)
14
+ // azure — Azure Blob Storage / ADLS Gen2 via @azure/storage-blob
15
+ // (optional dep)
16
+ //
17
+ // The cloud SDKs are OPTIONAL peer dependencies loaded with a dynamic
18
+ // import at backend creation, so the core install stays light; a missing
19
+ // SDK is a clear startup error naming the install command, never a crash
20
+ // mid-sync. Credentials are never read from vault config — the SDKs use
21
+ // their standard environment/instance chains (AWS_*, AZURE_STORAGE_*).
22
+ import { err, ok } from "../frontmatter/types.js";
23
+ const LOOPBACK_HOSTS = new Set(["127.0.0.1", "::1", "localhost"]);
24
+ // A plaintext-http endpoint off-loopback hands the vault bytes (and, with
25
+ // some providers, signable credentials material) to any network-position
26
+ // attacker — the same posture as serve's OAuth URL gate: https only, with
27
+ // loopback http as the sole escape hatch (a local MinIO test store; Azurite
28
+ // is reached via its connection string, not this setting).
29
+ export function validateEndpoint(endpoint) {
30
+ let parsed;
31
+ try {
32
+ parsed = new URL(endpoint);
33
+ }
34
+ catch {
35
+ return err(new Error(`storage.endpoint: '${endpoint}' is not a valid URL`));
36
+ }
37
+ const bare = parsed.hostname.replace(/^\[|\]$/g, "");
38
+ if (parsed.protocol !== "https:" && !(parsed.protocol === "http:" && LOOPBACK_HOSTS.has(bare))) {
39
+ return err(new Error(`storage.endpoint: '${endpoint}' must use https ` +
40
+ `(plain http is allowed only for loopback test stores)`));
41
+ }
42
+ return ok(undefined);
43
+ }
44
+ // Dynamic import through a variable specifier so tsc does not require the
45
+ // optional SDK to be installed to compile, and bundlers do not force it into
46
+ // the graph. Returns the module or a friendly install instruction.
47
+ async function importOptional(pkg, forBackend) {
48
+ const specifier = pkg;
49
+ try {
50
+ return ok(await import(specifier));
51
+ }
52
+ catch {
53
+ return err(new Error(`storage backend '${forBackend}' requires the optional dependency ` +
54
+ `${pkg} — install it with: npm install ${pkg}`));
55
+ }
56
+ }
57
+ function joinPrefix(prefix, key) {
58
+ if (!prefix)
59
+ return key;
60
+ return `${prefix.replace(/\/+$/, "")}/${key}`;
61
+ }
62
+ async function createS3Backend(config) {
63
+ const imported = await importOptional("@aws-sdk/client-s3", "s3");
64
+ if (!imported.ok)
65
+ return imported;
66
+ const mod = imported.value;
67
+ const bucket = config.bucket;
68
+ const client = new mod.S3Client({
69
+ ...(config.region ? { region: config.region } : {}),
70
+ ...(config.endpoint ? { endpoint: config.endpoint } : {}),
71
+ ...(config.forcePathStyle !== undefined ? { forcePathStyle: config.forcePathStyle } : {}),
72
+ });
73
+ const full = (key) => joinPrefix(config.prefix, key);
74
+ const id = `s3://${bucket}${config.prefix ? `/${config.prefix}` : ""}`;
75
+ return ok({
76
+ id,
77
+ async get(key) {
78
+ try {
79
+ const res = await client.send(new mod.GetObjectCommand({ Bucket: bucket, Key: full(key) }));
80
+ if (!res.Body)
81
+ return ok(null);
82
+ return ok(Buffer.from(await res.Body.transformToByteArray()));
83
+ }
84
+ catch (e) {
85
+ const name = e.name;
86
+ if (name === "NoSuchKey" || name === "NotFound")
87
+ return ok(null);
88
+ return err(new Error(`s3 get ${key}: ${e instanceof Error ? e.message : String(e)}`));
89
+ }
90
+ },
91
+ async put(key, data) {
92
+ try {
93
+ await client.send(new mod.PutObjectCommand({ Bucket: bucket, Key: full(key), Body: data }));
94
+ return ok(undefined);
95
+ }
96
+ catch (e) {
97
+ return err(new Error(`s3 put ${key}: ${e instanceof Error ? e.message : String(e)}`));
98
+ }
99
+ },
100
+ async list(prefix) {
101
+ const keys = [];
102
+ const strip = config.prefix ? `${config.prefix.replace(/\/+$/, "")}/` : "";
103
+ let token;
104
+ try {
105
+ do {
106
+ const res = await client.send(new mod.ListObjectsV2Command({
107
+ Bucket: bucket,
108
+ Prefix: full(prefix),
109
+ ...(token ? { ContinuationToken: token } : {}),
110
+ }));
111
+ for (const obj of res.Contents ?? []) {
112
+ if (obj.Key)
113
+ keys.push(strip && obj.Key.startsWith(strip) ? obj.Key.slice(strip.length) : obj.Key);
114
+ }
115
+ token = res.IsTruncated ? res.NextContinuationToken : undefined;
116
+ } while (token);
117
+ return ok(keys);
118
+ }
119
+ catch (e) {
120
+ return err(new Error(`s3 list ${prefix}: ${e instanceof Error ? e.message : String(e)}`));
121
+ }
122
+ },
123
+ async delete(key) {
124
+ try {
125
+ await client.send(new mod.DeleteObjectCommand({ Bucket: bucket, Key: full(key) }));
126
+ return ok(undefined);
127
+ }
128
+ catch (e) {
129
+ return err(new Error(`s3 delete ${key}: ${e instanceof Error ? e.message : String(e)}`));
130
+ }
131
+ },
132
+ });
133
+ }
134
+ async function createAzureBackend(config) {
135
+ const imported = await importOptional("@azure/storage-blob", "azure");
136
+ if (!imported.ok)
137
+ return imported;
138
+ const mod = imported.value;
139
+ const conn = process.env.AZURE_STORAGE_CONNECTION_STRING;
140
+ if (!conn) {
141
+ return err(new Error("storage backend 'azure' requires the AZURE_STORAGE_CONNECTION_STRING " +
142
+ "environment variable (credentials never live in vault config)"));
143
+ }
144
+ const container = config.container;
145
+ let containerClient;
146
+ try {
147
+ containerClient =
148
+ mod.BlobServiceClient.fromConnectionString(conn).getContainerClient(container);
149
+ }
150
+ catch (e) {
151
+ return err(new Error(`azure: ${e instanceof Error ? e.message : String(e)}`));
152
+ }
153
+ const full = (key) => joinPrefix(config.prefix, key);
154
+ const strip = config.prefix ? `${config.prefix.replace(/\/+$/, "")}/` : "";
155
+ const id = `azure://${container}${config.prefix ? `/${config.prefix}` : ""}`;
156
+ return ok({
157
+ id,
158
+ async get(key) {
159
+ try {
160
+ return ok(await containerClient.getBlockBlobClient(full(key)).downloadToBuffer());
161
+ }
162
+ catch (e) {
163
+ const code = e.statusCode;
164
+ if (code === 404)
165
+ return ok(null);
166
+ return err(new Error(`azure get ${key}: ${e instanceof Error ? e.message : String(e)}`));
167
+ }
168
+ },
169
+ async put(key, data) {
170
+ try {
171
+ await containerClient.getBlockBlobClient(full(key)).uploadData(data);
172
+ return ok(undefined);
173
+ }
174
+ catch (e) {
175
+ return err(new Error(`azure put ${key}: ${e instanceof Error ? e.message : String(e)}`));
176
+ }
177
+ },
178
+ async list(prefix) {
179
+ const keys = [];
180
+ try {
181
+ for await (const blob of containerClient.listBlobsFlat({ prefix: full(prefix) })) {
182
+ keys.push(strip && blob.name.startsWith(strip) ? blob.name.slice(strip.length) : blob.name);
183
+ }
184
+ return ok(keys);
185
+ }
186
+ catch (e) {
187
+ return err(new Error(`azure list ${prefix}: ${e instanceof Error ? e.message : String(e)}`));
188
+ }
189
+ },
190
+ async delete(key) {
191
+ try {
192
+ await containerClient.getBlockBlobClient(full(key)).deleteIfExists();
193
+ return ok(undefined);
194
+ }
195
+ catch (e) {
196
+ return err(new Error(`azure delete ${key}: ${e instanceof Error ? e.message : String(e)}`));
197
+ }
198
+ },
199
+ });
200
+ }
201
+ // ---------------------------------------------------------------------------
202
+ // factory
203
+ // ---------------------------------------------------------------------------
204
+ export async function createBackend(config) {
205
+ if (config.endpoint !== undefined) {
206
+ // `endpoint` is an S3-family concept (MinIO, R2, GCS interop). The azure
207
+ // client's endpoint travels inside AZURE_STORAGE_CONNECTION_STRING, and
208
+ // fs has no endpoint at all — a setting that would be silently ignored
209
+ // refuses instead.
210
+ if (config.backend !== "s3") {
211
+ return err(new Error(`storage.endpoint is only used by the s3 backend — for ${config.backend}, ` +
212
+ (config.backend === "azure"
213
+ ? "the endpoint is part of AZURE_STORAGE_CONNECTION_STRING"
214
+ : "remove it")));
215
+ }
216
+ const gate = validateEndpoint(config.endpoint);
217
+ if (!gate.ok)
218
+ return gate;
219
+ }
220
+ switch (config.backend) {
221
+ case "fs": {
222
+ const { createFsBackend } = await import("./backends/fs.js");
223
+ return createFsBackend(config.path, config.prefix);
224
+ }
225
+ case "s3":
226
+ return createS3Backend(config);
227
+ case "azure":
228
+ return createAzureBackend(config);
229
+ }
230
+ }
231
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/storage/backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type Result } from "../../frontmatter/types.js";
2
+ import type { StorageBackend } from "../backend.js";
3
+ export declare function createFsBackend(path: string, prefix?: string): Result<StorageBackend, Error>;
4
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../src/storage/backends/fs.ts"],"names":[],"mappings":"AAOA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAcpD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAsE5F"}
@@ -0,0 +1,99 @@
1
+ // The fs storage backend (#6): a local or mounted directory as the sync
2
+ // target. The reference implementation of the backend contract — and the
3
+ // test double every sync test drives, so its semantics (null on missing get,
4
+ // idempotent delete, atomic put) define the contract for the cloud backends.
5
+ import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
6
+ import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
7
+ import { err, ok } from "../../frontmatter/types.js";
8
+ import { walkFiles } from "../fs-walk.js";
9
+ // Backend keys are forward-slash relative paths; refuse anything that would
10
+ // escape the target root when mapped onto the filesystem.
11
+ function keyToPath(root, key) {
12
+ const target = resolve(root, key);
13
+ const rel = relative(root, target);
14
+ if (rel === "" || rel.startsWith("..") || isAbsolute(rel)) {
15
+ return err(new Error(`storage key escapes backend root: ${key}`));
16
+ }
17
+ return ok(target);
18
+ }
19
+ export function createFsBackend(path, prefix) {
20
+ if (!path || path.trim().length === 0) {
21
+ return err(new Error("storage backend 'fs' requires a non-empty 'path'"));
22
+ }
23
+ const base = resolve(path);
24
+ // `prefix` is backend-agnostic (sharing one target between vaults); for fs
25
+ // it nests under the target directory — confined, so a prefix cannot walk
26
+ // out of the declared path.
27
+ const root = prefix ? resolve(base, prefix) : base;
28
+ if (prefix) {
29
+ const rel = relative(base, root);
30
+ if (rel === "" || rel.startsWith("..") || isAbsolute(rel)) {
31
+ return err(new Error(`storage.prefix escapes the fs path: ${prefix}`));
32
+ }
33
+ }
34
+ return ok({
35
+ id: `fs:${root}`,
36
+ async get(key) {
37
+ const p = keyToPath(root, key);
38
+ if (!p.ok)
39
+ return p;
40
+ try {
41
+ return ok(await readFile(p.value));
42
+ }
43
+ catch (e) {
44
+ if (e.code === "ENOENT")
45
+ return ok(null);
46
+ return err(new Error(`fs get ${key}: ${e instanceof Error ? e.message : String(e)}`));
47
+ }
48
+ },
49
+ async put(key, data) {
50
+ const p = keyToPath(root, key);
51
+ if (!p.ok)
52
+ return p;
53
+ try {
54
+ await mkdir(dirname(p.value), { recursive: true });
55
+ // Write-then-rename so a crashed sync never leaves a torn object —
56
+ // the same atomicity a real object store gives per put.
57
+ const tmp = `${p.value}.daftari-tmp`;
58
+ await writeFile(tmp, data);
59
+ await rename(tmp, p.value);
60
+ return ok(undefined);
61
+ }
62
+ catch (e) {
63
+ return err(new Error(`fs put ${key}: ${e instanceof Error ? e.message : String(e)}`));
64
+ }
65
+ },
66
+ async list(prefix) {
67
+ try {
68
+ // walkFiles rather than readdir({recursive}): Dirent.parentPath
69
+ // needs Node >=20.12, engines allows >=20.
70
+ const walked = await walkFiles(root);
71
+ const keys = [];
72
+ for (const abs of walked.files) {
73
+ const key = relative(root, abs).split(sep).join("/");
74
+ if (key.startsWith(prefix))
75
+ keys.push(key);
76
+ }
77
+ return ok(keys);
78
+ }
79
+ catch (e) {
80
+ if (e.code === "ENOENT")
81
+ return ok([]);
82
+ return err(new Error(`fs list ${prefix}: ${e instanceof Error ? e.message : String(e)}`));
83
+ }
84
+ },
85
+ async delete(key) {
86
+ const p = keyToPath(root, key);
87
+ if (!p.ok)
88
+ return p;
89
+ try {
90
+ await rm(p.value, { force: true });
91
+ return ok(undefined);
92
+ }
93
+ catch (e) {
94
+ return err(new Error(`fs delete ${key}: ${e instanceof Error ? e.message : String(e)}`));
95
+ }
96
+ },
97
+ });
98
+ }
99
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/storage/backends/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function walkFiles(dir: string): Promise<{
2
+ files: string[];
3
+ symlinks: number;
4
+ }>;
5
+ //# sourceMappingURL=fs-walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-walk.d.ts","sourceRoot":"","sources":["../../src/storage/fs-walk.ts"],"names":[],"mappings":"AASA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB3F"}
@@ -0,0 +1,28 @@
1
+ // Shared recursive file walk for the storage layer. Explicit per-directory
2
+ // readdir rather than readdir({recursive}) + Dirent.parentPath — parentPath
3
+ // only exists from Node 20.12, and engines declares >=20. Symlinks are
4
+ // reported, not followed. Lives in its own leaf module so backends and the
5
+ // sync engine can both use it without a backend depending on its consumer.
6
+ import { readdir } from "node:fs/promises";
7
+ import { join } from "node:path";
8
+ export async function walkFiles(dir) {
9
+ const files = [];
10
+ let symlinks = 0;
11
+ const entries = await readdir(dir, { withFileTypes: true });
12
+ for (const entry of entries) {
13
+ const abs = join(dir, entry.name);
14
+ if (entry.isSymbolicLink()) {
15
+ symlinks++;
16
+ }
17
+ else if (entry.isDirectory()) {
18
+ const sub = await walkFiles(abs);
19
+ files.push(...sub.files);
20
+ symlinks += sub.symlinks;
21
+ }
22
+ else if (entry.isFile()) {
23
+ files.push(abs);
24
+ }
25
+ }
26
+ return { files, symlinks };
27
+ }
28
+ //# sourceMappingURL=fs-walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-walk.js","sourceRoot":"","sources":["../../src/storage/fs-walk.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,uEAAuE;AACvE,2EAA2E;AAC3E,2EAA2E;AAE3E,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,QAAQ,EAAE,CAAC;QACb,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YACzB,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC;QAC3B,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC"}
@@ -29,6 +29,12 @@ export declare function insertEmbeddingVec(db: IndexDb, contentHash: string, mod
29
29
  export declare function openIndexDb(vaultRoot: string, expectedVecDim: number): Result<IndexDb, Error>;
30
30
  export declare function clearIndex(db: IndexDb): void;
31
31
  export declare function deleteDocument(db: IndexDb, path: string): void;
32
+ export declare function replaceDocLinks(db: IndexDb, sourcePath: string, targets: string[]): void;
33
+ export declare function inboundLinkers(db: IndexDb, targetPath: string): {
34
+ path: string;
35
+ status: string;
36
+ }[];
37
+ export declare function allDocumentPaths(db: IndexDb): string[];
32
38
  export declare function embeddingToBlob(vec: Float32Array): Buffer;
33
39
  export declare function blobToEmbedding(blob: Buffer): Float32Array;
34
40
  export declare function insertDocument(db: IndexDb, doc: IndexedDocument): void;
@@ -68,6 +74,7 @@ export interface StagedActionRow {
68
74
  ratified_by: string | null;
69
75
  ratification_reason: string | null;
70
76
  decided_by_principal?: string | null;
77
+ run_id?: string | null;
71
78
  }
72
79
  export declare function upsertStagedAction(db: IndexDb, row: StagedActionRow): void;
73
80
  export declare function clearStagedActions(db: IndexDb): void;
@@ -84,8 +91,17 @@ export interface DerivesFromEdgeRow {
84
91
  last_age_decay: string;
85
92
  status: string;
86
93
  direction_verdict: string;
94
+ observations: number;
95
+ contested_at: string | null;
96
+ contest_reason: string | null;
87
97
  }
88
98
  export declare function upsertDerivesFromEdge(db: IndexDb, row: DerivesFromEdgeRow): void;
99
+ export declare function getDerivesFromEdgePair(db: IndexDb, a: string, b: string): DerivesFromEdgeRow | null;
100
+ export declare function listDerivesFromEdgeRows(db: IndexDb, filter?: {
101
+ fromPath?: string;
102
+ toPath?: string;
103
+ statusIn?: string[];
104
+ }): DerivesFromEdgeRow[];
89
105
  export declare function clearDerivesFromEdges(db: IndexDb): void;
90
106
  export declare function getAllDerivesFromEdges(db: IndexDb): DerivesFromEdgeRow[];
91
107
  //# sourceMappingURL=index-db.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-db.d.ts","sourceRoot":"","sources":["../../src/storage/index-db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index-db.d.ts","sourceRoot":"","sources":["../../src/storage/index-db.ts"],"names":[],"mappings":"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"}