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,292 @@
1
+ // src/import/langgraph-store.ts
2
+ //
3
+ // `daftari import langgraph-store <vault> --dsn <postgres> [flags]` — read a
4
+ // LangGraph BaseStore (the `store` table langgraph-checkpoint-postgres
5
+ // creates) and derive vault claim notes from its memories. Read-only by
6
+ // construction: the adapter issues a single SELECT and forces the session
7
+ // into read-only mode; there is no write path to the foreign store. The vault
8
+ // side mirrors backfill's two-step UX: --plan previews, --apply writes one
9
+ // commit.
10
+ //
11
+ // Derivation (spec: PLAN-langgraph-adapter Phase 2):
12
+ // semantic memories -> claim notes (one file per store row)
13
+ // episodic memories -> skipped in v1, counted (provenance-only)
14
+ // procedural -> skipped in v1, counted
15
+ // LangMem's default schema stores everything as kind "Memory" with
16
+ // { content: string } — treated as semantic. Unknown shapes are skipped and
17
+ // counted, never guessed at.
18
+ import { mkdirSync } from "node:fs";
19
+ import { writeFile } from "node:fs/promises";
20
+ import { dirname, join } from "node:path";
21
+ import { dump } from "js-yaml";
22
+ import { commit, ensureGitRepo } from "../utils/git.js";
23
+ const ok = (value) => ({ ok: true, value });
24
+ const err = (error) => ({ ok: false, error });
25
+ // ---------------------------------------------------------------- derivation
26
+ // Keep only characters that make stable, portable filenames.
27
+ export function slugifyKey(text) {
28
+ return (text
29
+ .toLowerCase()
30
+ .replace(/[^a-z0-9]+/g, "-")
31
+ .replace(/^-+|-+$/g, "")
32
+ .slice(0, 60) || "memory");
33
+ }
34
+ function isoDate(ts) {
35
+ const d = new Date(ts);
36
+ return Number.isNaN(d.getTime())
37
+ ? new Date().toISOString().slice(0, 10)
38
+ : d.toISOString().slice(0, 10);
39
+ }
40
+ // LangMem store values look like { kind: "Memory", content: { content: "..." } }.
41
+ // Returns the memory text for semantic rows, or the kind to count as skipped.
42
+ function classify(value) {
43
+ if (typeof value !== "object" || value === null)
44
+ return { kind: "unknown", text: null };
45
+ const v = value;
46
+ const kind = typeof v.kind === "string" ? v.kind : "unknown";
47
+ const lower = kind.toLowerCase();
48
+ if (lower.includes("episod") || lower.includes("procedur"))
49
+ return { kind, text: null };
50
+ const content = v.content;
51
+ if (typeof content === "string")
52
+ return { kind, text: content };
53
+ if (typeof content === "object" && content !== null) {
54
+ const inner = content.content;
55
+ if (typeof inner === "string")
56
+ return { kind, text: inner };
57
+ }
58
+ return { kind, text: null };
59
+ }
60
+ export function deriveNotes(rows, opts) {
61
+ const notes = [];
62
+ const skippedCounts = new Map();
63
+ const byPrefix = {};
64
+ for (const row of rows) {
65
+ const { kind, text } = classify(row.value);
66
+ if (text === null) {
67
+ skippedCounts.set(kind, (skippedCounts.get(kind) ?? 0) + 1);
68
+ continue;
69
+ }
70
+ byPrefix[row.prefix] = (byPrefix[row.prefix] ?? 0) + 1;
71
+ const session = row.prefix.split(".").pop() ?? row.prefix;
72
+ const title = text.split(/\s+/).slice(0, 10).join(" ");
73
+ const sourceRef = `langgraph-store:${row.prefix}/${row.key}`;
74
+ const relPath = join(opts.collection, session, `${slugifyKey(title)}--${row.key.slice(0, 8)}.md`);
75
+ const frontmatter = {
76
+ title,
77
+ domain: "accumulation",
78
+ collection: opts.collection,
79
+ status: "draft",
80
+ confidence: "medium",
81
+ created: isoDate(row.created_at),
82
+ updated: isoDate(row.updated_at),
83
+ updated_by: opts.agent,
84
+ provenance: "direct",
85
+ sources: [sourceRef],
86
+ superseded_by: null,
87
+ ttl_days: null,
88
+ tags: ["langgraph-import", `session:${session}`],
89
+ };
90
+ const body = [
91
+ "---",
92
+ dump(frontmatter).trimEnd(),
93
+ "---",
94
+ "",
95
+ text.trim(),
96
+ "",
97
+ "## Provenance",
98
+ "",
99
+ `- **Store:** langgraph \`store\` table (read-only import)`,
100
+ `- **Namespace:** \`${row.prefix}\``,
101
+ `- **Memory id:** \`${row.key}\``,
102
+ `- **Memory kind:** ${kind}`,
103
+ `- **Store created_at:** ${row.created_at}`,
104
+ `- **Store updated_at:** ${row.updated_at}`,
105
+ "",
106
+ ].join("\n");
107
+ notes.push({ relPath, title, body, sourceRef, session });
108
+ }
109
+ const skipped = [...skippedCounts.entries()].map(([kind, count]) => ({ kind, count }));
110
+ return { notes, skipped, byPrefix };
111
+ }
112
+ // -------------------------------------------------------------------- store
113
+ // Single parameterized SELECT. The namespace filter matches the prefix itself
114
+ // or any descendant namespace (dot-joined encoding, case-sensitive exact
115
+ // match — mirrors langgraph's own prefix semantics).
116
+ export async function readStoreRows(query, namespace) {
117
+ try {
118
+ const rows = namespace
119
+ ? await query("SELECT prefix, key, value, created_at::text, updated_at::text FROM store WHERE prefix = $1 OR prefix LIKE $2 ORDER BY prefix, key", [namespace, `${namespace}.%`])
120
+ : await query("SELECT prefix, key, value, created_at::text, updated_at::text FROM store ORDER BY prefix, key", []);
121
+ return ok(rows);
122
+ }
123
+ catch (e) {
124
+ return err(e instanceof Error ? e : new Error(String(e)));
125
+ }
126
+ }
127
+ // Connects via pg (dynamic import — pg is only needed for this adapter) and
128
+ // hardens the session read-only *in addition to* whatever role the DSN uses.
129
+ // Returns a QueryRunner plus a close function.
130
+ export async function connectReadOnly(dsn) {
131
+ let pg;
132
+ try {
133
+ pg = await import("pg");
134
+ }
135
+ catch {
136
+ return err(new Error("the 'pg' package is required for langgraph-store imports — install it with: npm install pg"));
137
+ }
138
+ const client = new pg.default.Client({ connectionString: dsn });
139
+ try {
140
+ await client.connect();
141
+ // Belt and suspenders: even a read-write DSN cannot write through this
142
+ // session. The boundary posture is enforceable, not advisory.
143
+ await client.query("SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY");
144
+ await client.query("SET default_transaction_read_only = on");
145
+ }
146
+ catch (e) {
147
+ await client.end().catch(() => { });
148
+ return err(e instanceof Error ? e : new Error(String(e)));
149
+ }
150
+ const query = async (sql, params) => {
151
+ const res = await client.query(sql, params);
152
+ return res.rows;
153
+ };
154
+ return ok({ query, close: () => client.end() });
155
+ }
156
+ // -------------------------------------------------------------------- runner
157
+ export function renderPlan(plan, opts) {
158
+ const lines = [];
159
+ lines.push(`langgraph-store import plan (dry-run — nothing written)`);
160
+ lines.push(``);
161
+ lines.push(` claim notes to create: ${plan.notes.length}`);
162
+ for (const [prefix, n] of Object.entries(plan.byPrefix)) {
163
+ lines.push(` ${prefix}: ${n}`);
164
+ }
165
+ for (const s of plan.skipped) {
166
+ lines.push(` skipped (${s.kind}): ${s.count} — not compiled in v1, logged only`);
167
+ }
168
+ if (plan.notes.length > 0) {
169
+ lines.push(``);
170
+ lines.push(` sample:`);
171
+ for (const note of plan.notes.slice(0, 5)) {
172
+ lines.push(` ${note.relPath}`);
173
+ }
174
+ lines.push(``);
175
+ lines.push(` apply with:`);
176
+ lines.push(` daftari import langgraph-store <vault> --dsn <dsn> --apply${opts.namespace ? ` --namespace ${opts.namespace}` : ""} --yes`);
177
+ }
178
+ return `${lines.join("\n")}\n`;
179
+ }
180
+ // CLI entry: parses langgraph-store-specific flags and orchestrates
181
+ // plan/apply. `vault` has already been resolved and existence-checked by
182
+ // runImport. Returns a process exit code.
183
+ export async function runLanggraphImport(vaultRoot, argv) {
184
+ let dsn;
185
+ let namespace;
186
+ let collection = "langgraph";
187
+ let agent = `human:${process.env.USER ?? "unknown"}`;
188
+ let apply = false;
189
+ let plan = false;
190
+ let yes = false;
191
+ for (let i = 0; i < argv.length; i++) {
192
+ const a = argv[i];
193
+ if (a === "--dsn")
194
+ dsn = argv[++i];
195
+ else if (a.startsWith("--dsn="))
196
+ dsn = a.slice(6);
197
+ else if (a === "--namespace")
198
+ namespace = argv[++i];
199
+ else if (a.startsWith("--namespace="))
200
+ namespace = a.slice(12);
201
+ else if (a === "--collection")
202
+ collection = argv[++i] ?? collection;
203
+ else if (a.startsWith("--collection="))
204
+ collection = a.slice(13);
205
+ else if (a === "--agent")
206
+ agent = argv[++i] ?? agent;
207
+ else if (a.startsWith("--agent="))
208
+ agent = a.slice(8);
209
+ else if (a === "--apply")
210
+ apply = true;
211
+ else if (a === "--plan")
212
+ plan = true;
213
+ else if (a === "--yes")
214
+ yes = true;
215
+ else {
216
+ process.stderr.write(`daftari import langgraph-store: unknown flag '${a}'\n`);
217
+ return 1;
218
+ }
219
+ }
220
+ if (!dsn) {
221
+ process.stderr.write("daftari import langgraph-store: --dsn <postgres-url> is required\n");
222
+ return 1;
223
+ }
224
+ if (plan === apply) {
225
+ process.stderr.write("daftari import langgraph-store: pass exactly one of --plan or --apply\n");
226
+ return 1;
227
+ }
228
+ if (apply && !yes) {
229
+ process.stderr.write("daftari import langgraph-store: --apply writes notes and commits — confirm with --yes\n");
230
+ return 1;
231
+ }
232
+ const conn = await connectReadOnly(dsn);
233
+ if (!conn.ok) {
234
+ process.stderr.write(`daftari import langgraph-store: ${conn.error.message}\n`);
235
+ return 1;
236
+ }
237
+ try {
238
+ const rows = await readStoreRows(conn.value.query, namespace);
239
+ if (!rows.ok) {
240
+ process.stderr.write(`daftari import langgraph-store: ${rows.error.message}\n`);
241
+ return 1;
242
+ }
243
+ const opts = {
244
+ vaultRoot,
245
+ dsn,
246
+ namespace,
247
+ collection,
248
+ agent,
249
+ apply,
250
+ yes,
251
+ };
252
+ const derived = deriveNotes(rows.value, opts);
253
+ if (!apply) {
254
+ process.stdout.write(renderPlan(derived, opts));
255
+ return 0;
256
+ }
257
+ const result = await applyPlan(derived, opts);
258
+ if (!result.ok) {
259
+ process.stderr.write(`daftari import langgraph-store: ${result.error.message}\n`);
260
+ return 1;
261
+ }
262
+ process.stdout.write(`langgraph-store import: wrote ${result.value.written} claim notes` +
263
+ (result.value.commit ? ` (commit ${result.value.commit})` : "") +
264
+ "\n");
265
+ for (const s of derived.skipped) {
266
+ process.stdout.write(` skipped (${s.kind}): ${s.count} — not compiled in v1\n`);
267
+ }
268
+ return 0;
269
+ }
270
+ finally {
271
+ await conn.value.close();
272
+ }
273
+ }
274
+ export async function applyPlan(plan, opts) {
275
+ const ensured = await ensureGitRepo(opts.vaultRoot);
276
+ if (!ensured.ok)
277
+ return err(ensured.error);
278
+ const relPaths = [];
279
+ for (const note of plan.notes) {
280
+ const abs = join(opts.vaultRoot, note.relPath);
281
+ mkdirSync(dirname(abs), { recursive: true });
282
+ await writeFile(abs, note.body, "utf-8");
283
+ relPaths.push(note.relPath);
284
+ }
285
+ if (relPaths.length === 0)
286
+ return ok({ written: 0, commit: null });
287
+ const committed = await commit(opts.vaultRoot, relPaths, `import(langgraph-store): ${relPaths.length} memories${opts.namespace ? ` from ${opts.namespace}` : ""}`, opts.agent);
288
+ if (!committed.ok)
289
+ return err(committed.error);
290
+ return ok({ written: relPaths.length, commit: committed.value.hash });
291
+ }
292
+ //# sourceMappingURL=langgraph-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"langgraph-store.js","sourceRoot":"","sources":["../../src/import/langgraph-store.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,9 @@
1
1
  export declare function parseFlag(argv: string[], name: string): string | null;
2
2
  export declare function parseVaultArg(argv: string[]): string | null;
3
3
  export declare function main(argv?: string[]): Promise<void>;
4
+ export declare function startVaultServices(vaultRoot: string, opts: {
5
+ warmEmbeddings: boolean;
6
+ watch: boolean;
7
+ }): Promise<void>;
8
+ export declare function installShutdownHandlers(vaultRoot: string, extra?: () => void): void;
4
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA8CA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASrE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAE3D;AAED,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAgJhF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA+CA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASrE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAE3D;AAED,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAiIhF;AAOD,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAChD,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAiBD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAanF"}
package/dist/index.js CHANGED
@@ -24,12 +24,13 @@ import { markIndexError, markIndexing, markIndexReady, setIndexProgress, } from
24
24
  import { isIndexFresh, reindexVault, reindexWarnings, } from "./search/reindex.js";
25
25
  import { setProvider, warmModel } from "./search/vector.js";
26
26
  import { startWatcher } from "./search/watcher.js";
27
- import { createServer } from "./server.js";
27
+ import { createServer, resolveToolExposure, SERVER_VERSION } from "./server.js";
28
28
  import { directoryExists } from "./storage/local.js";
29
- import { loadConfig } from "./utils/config.js";
30
- // Kept in sync with package.json. Surfaced in the process lockfile for
31
- // operator diagnostics. Bump both together on a release.
32
- const DAFTARI_VERSION = "1.29.0";
29
+ import { loadConfig, TOOL_TIERS } from "./utils/config.js";
30
+ // Read from package.json (via server.ts) so it can never drift from the
31
+ // published version. Surfaced in the process lockfile for operator
32
+ // diagnostics.
33
+ const DAFTARI_VERSION = SERVER_VERSION;
33
34
  // Reads `--name value` or `--name=value` from argv; null if absent.
34
35
  export function parseFlag(argv, name) {
35
36
  const flag = `--${name}`;
@@ -59,9 +60,10 @@ export async function main(argv = process.argv.slice(2)) {
59
60
  return;
60
61
  }
61
62
  // Acquire the per-vault process lock BEFORE any heavy work. If another
62
- // daftari is holding this vault, SIGTERM it and wait briefly for it to
63
- // exit. See docs/superpowers/plans/2026-05-20-process-lockfile.md (#52).
64
- const lockResult = await acquireLock(vaultRoot, DAFTARI_VERSION);
63
+ // stdio daftari is holding this vault, SIGTERM it and wait briefly for it
64
+ // to exit; a live `daftari serve` holder REFUSES the takeover (#5 spec
65
+ // Decision 4). See docs/superpowers/plans/2026-05-20-process-lockfile.md.
66
+ const lockResult = await acquireLock(vaultRoot, DAFTARI_VERSION, { mode: "stdio" });
65
67
  if (!lockResult.ok) {
66
68
  process.stderr.write(`daftari: failed to acquire vault lock: ${lockResult.error.message}\n`);
67
69
  process.exitCode = 1;
@@ -100,6 +102,23 @@ export async function main(argv = process.argv.slice(2)) {
100
102
  if (access.role === null && roleName !== GUEST_ROLE) {
101
103
  process.stderr.write(`daftari: warning: role '${roleName}' not found in config — running as deny-all guest\n`);
102
104
  }
105
+ // Tool exposure (#103/#104): config `tools` block, with --tools overriding
106
+ // the TIER for this invocation only (include/exclude still apply). An
107
+ // unknown --tools value fails loud like any malformed config; unknown tool
108
+ // NAMES in include/exclude only warn — they may name a future tool.
109
+ const tierFlag = parseFlag(argv, "tools");
110
+ let toolsConfig = config.value.tools;
111
+ if (tierFlag !== null) {
112
+ if (!TOOL_TIERS.includes(tierFlag)) {
113
+ process.stderr.write(`daftari: invalid --tools value '${tierFlag}' (expected one of ${TOOL_TIERS.join(", ")})\n`);
114
+ process.exitCode = 1;
115
+ return;
116
+ }
117
+ toolsConfig = { ...toolsConfig, tier: tierFlag };
118
+ }
119
+ for (const name of resolveToolExposure(toolsConfig).unknown) {
120
+ process.stderr.write(`daftari: warning: tools.include/exclude names unknown tool '${name}' — ignored\n`);
121
+ }
103
122
  // The persisted index is a derived cache: if every file on disk matches the
104
123
  // manifest written by the last reindex, the on-disk index already reflects
105
124
  // the vault and we can skip the embedding pass entirely (~25 min on a
@@ -130,11 +149,22 @@ export async function main(argv = process.argv.slice(2)) {
130
149
  // `tools/list` immediately. Indexing — if needed — runs as a background
131
150
  // task; tools that depend on the index will respond "still indexing" until
132
151
  // it completes.
133
- const server = createServer(vaultRoot, access);
152
+ const server = createServer(vaultRoot, access, toolsConfig);
134
153
  const transport = new StdioServerTransport();
135
154
  await server.connect(transport);
136
155
  process.stderr.write(`daftari: serving vault at ${vaultRoot} (stdio) — ` +
137
156
  `user=${access.user} role=${access.roleName}\n`);
157
+ await startVaultServices(vaultRoot, {
158
+ warmEmbeddings: config.value.warmEmbeddings,
159
+ watch: config.value.watch,
160
+ });
161
+ }
162
+ // The index/watcher bootstrap shared by stdio main() and `daftari serve`
163
+ // (#5): freshness check, cheap jsonl re-materialization on the fresh path,
164
+ // background reindex otherwise, watcher start either way. Returns once the
165
+ // FOREGROUND work is done — the reindex itself runs on unawaited in the
166
+ // background, alongside the live transport.
167
+ export async function startVaultServices(vaultRoot, opts) {
138
168
  const fresh = await isIndexFresh(vaultRoot);
139
169
  if (fresh) {
140
170
  process.stderr.write(`daftari: index is up to date — skipping reindex\n`);
@@ -158,19 +188,19 @@ export async function main(argv = process.argv.slice(2)) {
158
188
  // the model is still cold. Warm it in the background (if config allows)
159
189
  // so the first user search does not pay the ~500ms cold start. Then
160
190
  // start the watcher to catch out-of-band edits going forward.
161
- if (config.value.warmEmbeddings) {
191
+ if (opts.warmEmbeddings) {
162
192
  void runBackgroundWarm();
163
193
  }
164
- maybeStartWatcher(vaultRoot, config.value.watch);
194
+ maybeStartWatcher(vaultRoot, opts.watch);
165
195
  return;
166
196
  }
167
- // Background reindex. The promise is intentionally not awaited — main()
168
- // returns once the transport is up, and the indexing pass runs to
197
+ // Background reindex. The promise is intentionally not awaited — the
198
+ // caller returns once the transport is up, and the indexing pass runs to
169
199
  // completion alongside the live server.
170
200
  markIndexing();
171
201
  process.stderr.write(`daftari: starting background reindex…\n`);
172
- void runBackgroundReindex(vaultRoot, config.value.warmEmbeddings, () => {
173
- maybeStartWatcher(vaultRoot, config.value.watch);
202
+ void runBackgroundReindex(vaultRoot, opts.warmEmbeddings, () => {
203
+ maybeStartWatcher(vaultRoot, opts.watch);
174
204
  });
175
205
  }
176
206
  // Reference held so a SIGTERM / SIGINT can close the watcher cleanly. One
@@ -184,13 +214,17 @@ let activeWatcher = null;
184
214
  // drains, Node emits 'exit', the registered listener releases.
185
215
  // The 'exit' listener is sync-only (Node guarantees the loop is closed by
186
216
  // then), which is why releaseLock is sync.
187
- function installShutdownHandlers(vaultRoot) {
217
+ //
218
+ // `extra` (#5): serve registers its own teardown (close the HTTP listener
219
+ // and every live session) to run before the lock releases.
220
+ export function installShutdownHandlers(vaultRoot, extra) {
188
221
  const onShutdown = () => {
189
222
  if (activeWatcher) {
190
223
  const w = activeWatcher;
191
224
  activeWatcher = null;
192
225
  void w.close();
193
226
  }
227
+ extra?.();
194
228
  releaseLock(vaultRoot);
195
229
  };
196
230
  process.once("SIGTERM", onShutdown);
@@ -237,8 +271,12 @@ async function runBackgroundReindex(vaultRoot, warmEmbeddings, onDone) {
237
271
  // If the reindex was fully cache-hit (no chunks needed embedding) the
238
272
  // model was never loaded — warm it now so the first user search isn't
239
273
  // a cold start. A reindex that did embed already loaded the model; no
240
- // extra warm is necessary in that path.
241
- if (warmEmbeddings && r.embeddedCount === 0) {
274
+ // extra warm is necessary in that path. embeddedCount is the COMMITTED
275
+ // count (#54), so 0 alone no longer proves the model was never invoked:
276
+ // a first-batch embed failure also banks nothing. That failure path
277
+ // drops vectorEnabled, so gate on it — warming a provider that just
278
+ // failed would fail the same way.
279
+ if (warmEmbeddings && r.vectorEnabled && r.embeddedCount === 0) {
242
280
  void runBackgroundWarm();
243
281
  }
244
282
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,23 @@
1
1
  import { type Result } from "../frontmatter/types.js";
2
+ export type LockMode = "stdio" | "serve";
2
3
  export type LockData = {
3
4
  daftari: true;
4
5
  pid: number;
5
6
  vaultRoot: string;
6
7
  startedAt: string;
7
8
  version: string;
9
+ mode?: LockMode;
10
+ bind?: string;
8
11
  };
9
12
  export declare function readLockfile(vaultRoot: string): Result<LockData | null, Error>;
10
13
  export declare function writeLockfile(vaultRoot: string, data: LockData): Result<void, Error>;
11
14
  export declare function isProcessAlive(pid: number): boolean;
12
15
  export declare function isDaftariProcess(pid: number, vaultRoot: string): boolean;
13
- export declare function acquireLock(vaultRoot: string, version: string): Promise<Result<void, Error>>;
16
+ export interface AcquireLockOptions {
17
+ mode?: LockMode;
18
+ bind?: string;
19
+ takeover?: boolean;
20
+ }
21
+ export declare function acquireLock(vaultRoot: string, version: string, options?: AcquireLockOptions): Promise<Result<void, Error>>;
14
22
  export declare function releaseLock(vaultRoot: string): void;
15
23
  //# sourceMappingURL=lock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/lifecycle/lock.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,IAAI,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAMF,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC,CAmB9E;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAQpF;AAKD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQnD;AAaD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAYxE;AA8CD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CA2C9B;AAMD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CASnD"}
1
+ {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/lifecycle/lock.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAI/D,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAEzC,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,IAAI,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAGhB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAMF,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC,CAmB9E;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAQpF;AAKD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQnD;AAaD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAYxE;AAoCD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAqBD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAsE9B;AAMD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CASnD"}
@@ -115,23 +115,35 @@ function tryCreateExclusive(vaultRoot, data) {
115
115
  return err(errno);
116
116
  }
117
117
  }
118
- // Acquire the per-vault process lock. Behavior:
118
+ // Acquire the per-vault process lock. Behavior (#52, amended by #5 spec
119
+ // 2026-07-20 Decision 4):
119
120
  // - No existing lock → atomic O_EXCL create, return ok.
120
- // - Existing lock with dead PID → stale, overwrite.
121
+ // - Existing lock with dead PID → stale, overwrite (every mode).
121
122
  // - Existing lock with live PID that does not look like a daftari for this
122
- // vault (PID recycled) → stale, overwrite.
123
- // - Existing lock with live daftari for this vault SIGTERM it, wait up to
124
- // 3s for exit, then overwrite. If it does not exit, log a warning and
125
- // overwrite anyway.
123
+ // vault (PID recycled) → stale, overwrite (every mode).
124
+ // - LIVE daftari holder precedence favors the durable tenant:
125
+ // stdio finding stdio → SIGTERM-and-wait takeover (the
126
+ // single-user convenience, unchanged).
127
+ // stdio finding serve → REFUSE, naming the server and the
128
+ // remedy. Never SIGTERMs a serve holder.
129
+ // serve finding stdio or serve → REFUSE unless --takeover: a server
130
+ // deployment must not silently kill a
131
+ // live desktop session, and a
132
+ // double-start must not bounce every
133
+ // session. With takeover, SIGTERM-and-
134
+ // wait against either holder mode.
126
135
  //
127
136
  // Logs go to stderr (MCP convention; stdout is reserved for JSON-RPC).
128
- export async function acquireLock(vaultRoot, version) {
137
+ export async function acquireLock(vaultRoot, version, options = {}) {
138
+ const mode = options.mode ?? "stdio";
129
139
  const our = {
130
140
  daftari: true,
131
141
  pid: process.pid,
132
142
  vaultRoot,
133
143
  startedAt: new Date().toISOString(),
134
144
  version,
145
+ mode,
146
+ ...(options.bind ? { bind: options.bind } : {}),
135
147
  };
136
148
  const created = tryCreateExclusive(vaultRoot, our);
137
149
  if (!created.ok)
@@ -144,8 +156,21 @@ export async function acquireLock(vaultRoot, version) {
144
156
  if (existing.value !== null) {
145
157
  const prior = existing.value;
146
158
  if (isDaftariProcess(prior.pid, vaultRoot)) {
147
- process.stderr.write(`daftari: another instance is holding this vault (pid=${prior.pid}, ` +
148
- `started=${prior.startedAt}); sending SIGTERM and taking over\n`);
159
+ const priorMode = prior.mode ?? "stdio";
160
+ const holder = `pid=${prior.pid}, mode=${priorMode}, started=${prior.startedAt}` +
161
+ (prior.bind ? `, bind=${prior.bind}` : "");
162
+ if (mode === "stdio" && priorMode === "serve") {
163
+ return err(new Error(`this vault is held by a live daftari serve (${holder}). ` +
164
+ `Connect to it over HTTP instead, or stop the server ` +
165
+ `deliberately (or replace it with 'daftari serve --takeover').`));
166
+ }
167
+ if (mode === "serve" && !options.takeover) {
168
+ return err(new Error(`this vault is held by a live daftari instance (${holder}). ` +
169
+ `A server start never silently replaces a live holder; ` +
170
+ `re-run with --takeover to replace it deliberately.`));
171
+ }
172
+ process.stderr.write(`daftari: another instance is holding this vault (${holder}); ` +
173
+ `sending SIGTERM and taking over\n`);
149
174
  try {
150
175
  process.kill(prior.pid, "SIGTERM");
151
176
  }