pi-obsidian-memory 0.0.1 → 0.1.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 (572) hide show
  1. package/README.md +173 -7
  2. package/package.json +41 -11
  3. package/skills/obsidian-memory/SKILL.md +101 -0
  4. package/src/domain/capture/constants.ts +5 -0
  5. package/src/domain/capture/index.ts +6 -0
  6. package/src/domain/capture/input-problems.ts +9 -0
  7. package/src/domain/capture/schemas.ts +92 -0
  8. package/src/domain/capture/tally.ts +26 -0
  9. package/src/domain/capture/types.ts +49 -0
  10. package/src/domain/capture/validate.ts +75 -0
  11. package/src/domain/command-flags/constants.ts +141 -0
  12. package/src/domain/command-flags/index.ts +1 -0
  13. package/src/domain/config/change.ts +105 -0
  14. package/src/domain/config/constants.ts +25 -0
  15. package/src/domain/config/diagnostics.ts +35 -0
  16. package/src/domain/config/disclosures.ts +8 -0
  17. package/src/domain/config/fields.ts +7 -0
  18. package/src/domain/config/index.ts +11 -0
  19. package/src/domain/config/inspection.ts +43 -0
  20. package/src/domain/config/invariants.ts +68 -0
  21. package/src/domain/config/legacy-capture.ts +17 -0
  22. package/src/domain/config/observations.ts +109 -0
  23. package/src/domain/config/parse.ts +25 -0
  24. package/src/domain/config/paths.ts +61 -0
  25. package/src/domain/config/registration.ts +34 -0
  26. package/src/domain/config/repair.ts +36 -0
  27. package/src/domain/config/resources.ts +65 -0
  28. package/src/domain/config/rules.ts +49 -0
  29. package/src/domain/config/schemas.ts +155 -0
  30. package/src/domain/config/settings.ts +23 -0
  31. package/src/domain/config/types.ts +239 -0
  32. package/src/domain/decision-model/constants.ts +7 -0
  33. package/src/domain/decision-model/cutoffs.ts +8 -0
  34. package/src/domain/decision-model/endpoint.ts +11 -0
  35. package/src/domain/decision-model/failure-detail.ts +8 -0
  36. package/src/domain/decision-model/index.ts +6 -0
  37. package/src/domain/decision-model/rank.ts +36 -0
  38. package/src/domain/decision-model/types.ts +77 -0
  39. package/src/domain/embeddings/constants.ts +55 -0
  40. package/src/domain/embeddings/identity.ts +30 -0
  41. package/src/domain/embeddings/index.ts +5 -0
  42. package/src/domain/embeddings/schemas.ts +25 -0
  43. package/src/domain/embeddings/types.ts +52 -0
  44. package/src/domain/embeddings/vectors.ts +53 -0
  45. package/src/domain/folder-index/constants.ts +9 -0
  46. package/src/domain/folder-index/display.ts +22 -0
  47. package/src/domain/folder-index/index.ts +5 -0
  48. package/src/domain/folder-index/listing.ts +58 -0
  49. package/src/domain/folder-index/render.ts +114 -0
  50. package/src/domain/folder-index/types.ts +41 -0
  51. package/src/domain/index.ts +22 -0
  52. package/src/domain/lifecycle/index.ts +2 -0
  53. package/src/domain/lifecycle/lifecycle.ts +39 -0
  54. package/src/domain/lifecycle/types.ts +17 -0
  55. package/src/domain/loaded-memory/budget.ts +14 -0
  56. package/src/domain/loaded-memory/constants.ts +9 -0
  57. package/src/domain/loaded-memory/index.ts +4 -0
  58. package/src/domain/loaded-memory/render.ts +30 -0
  59. package/src/domain/loaded-memory/types.ts +19 -0
  60. package/src/domain/memory/draft.ts +12 -0
  61. package/src/domain/memory/index.ts +4 -0
  62. package/src/domain/memory/schemas.ts +15 -0
  63. package/src/domain/memory/target.ts +27 -0
  64. package/src/domain/memory/types.ts +20 -0
  65. package/src/domain/memory-agent/index.ts +5 -0
  66. package/src/domain/memory-agent/input-problems.ts +9 -0
  67. package/src/domain/memory-agent/refusal.ts +6 -0
  68. package/src/domain/memory-agent/schemas.ts +112 -0
  69. package/src/domain/memory-agent/types.ts +25 -0
  70. package/src/domain/memory-agent/validate.ts +67 -0
  71. package/src/domain/names/constants.ts +32 -0
  72. package/src/domain/names/index.ts +2 -0
  73. package/src/domain/names/names.ts +83 -0
  74. package/src/domain/note/check.ts +68 -0
  75. package/src/domain/note/constants.ts +15 -0
  76. package/src/domain/note/frontmatter-fields.ts +175 -0
  77. package/src/domain/note/frontmatter.ts +138 -0
  78. package/src/domain/note/index.ts +9 -0
  79. package/src/domain/note/parse.ts +41 -0
  80. package/src/domain/note/render.ts +27 -0
  81. package/src/domain/note/schema-errors.ts +41 -0
  82. package/src/domain/note/schemas.ts +38 -0
  83. package/src/domain/note/types.ts +53 -0
  84. package/src/domain/note/validate.ts +19 -0
  85. package/src/domain/path-platform/index.ts +2 -0
  86. package/src/domain/path-platform/path-module.ts +11 -0
  87. package/src/domain/path-platform/types.ts +1 -0
  88. package/src/domain/search-catalog/constants.ts +1 -0
  89. package/src/domain/search-catalog/coverage.ts +35 -0
  90. package/src/domain/search-catalog/dont-forget.ts +10 -0
  91. package/src/domain/search-catalog/fingerprint.ts +9 -0
  92. package/src/domain/search-catalog/index.ts +10 -0
  93. package/src/domain/search-catalog/inspection.ts +47 -0
  94. package/src/domain/search-catalog/plan.ts +68 -0
  95. package/src/domain/search-catalog/ranking.ts +27 -0
  96. package/src/domain/search-catalog/schemas.ts +49 -0
  97. package/src/domain/search-catalog/types.ts +103 -0
  98. package/src/domain/search-catalog/vector-refresh.ts +22 -0
  99. package/src/domain/shell-edit/command-segments.ts +28 -0
  100. package/src/domain/shell-edit/command-words.ts +22 -0
  101. package/src/domain/shell-edit/constants.ts +125 -0
  102. package/src/domain/shell-edit/executed-files.ts +154 -0
  103. package/src/domain/shell-edit/index.ts +6 -0
  104. package/src/domain/shell-edit/powershell-files.ts +38 -0
  105. package/src/domain/shell-edit/rules.ts +19 -0
  106. package/src/domain/shell-edit/types.ts +75 -0
  107. package/src/domain/tool-flags/constants.ts +178 -0
  108. package/src/domain/tool-flags/index.ts +2 -0
  109. package/src/domain/tool-flags/types.ts +7 -0
  110. package/src/domain/validation/constants.ts +1 -0
  111. package/src/domain/validation/describe.ts +137 -0
  112. package/src/domain/validation/index.ts +3 -0
  113. package/src/domain/validation/types.ts +3 -0
  114. package/src/domain/vault-access/absolute-candidate.ts +81 -0
  115. package/src/domain/vault-access/argument-tokens.ts +22 -0
  116. package/src/domain/vault-access/command-mentions-vault.ts +115 -0
  117. package/src/domain/vault-access/constants.ts +54 -0
  118. package/src/domain/vault-access/index.ts +7 -0
  119. package/src/domain/vault-access/types.ts +18 -0
  120. package/src/domain/vault-access/vault-access-refusal.ts +36 -0
  121. package/src/domain/vault-access/vault-location.ts +22 -0
  122. package/src/domain/vault-assets/index.ts +2 -0
  123. package/src/domain/vault-assets/render.ts +51 -0
  124. package/src/domain/vault-assets/types.ts +36 -0
  125. package/src/domain/vault-catalog/analyze.ts +37 -0
  126. package/src/domain/vault-catalog/classify.ts +37 -0
  127. package/src/domain/vault-catalog/dont-forget.ts +6 -0
  128. package/src/domain/vault-catalog/export-entries.ts +10 -0
  129. package/src/domain/vault-catalog/index.ts +5 -0
  130. package/src/domain/vault-catalog/types.ts +114 -0
  131. package/src/domain/vault-diagnosis/diagnose.ts +79 -0
  132. package/src/domain/vault-diagnosis/index.ts +2 -0
  133. package/src/domain/vault-diagnosis/types.ts +31 -0
  134. package/src/domain/vault-path/constants.ts +13 -0
  135. package/src/domain/vault-path/index.ts +2 -0
  136. package/src/domain/vault-path/vault-path.ts +65 -0
  137. package/src/pi/capture/cadence.ts +49 -0
  138. package/src/pi/capture/completion.ts +26 -0
  139. package/src/pi/capture/constants.ts +5 -0
  140. package/src/pi/capture/handlers.ts +30 -0
  141. package/src/pi/capture/index.ts +8 -0
  142. package/src/pi/capture/runtime.ts +83 -0
  143. package/src/pi/capture/schemas.ts +8 -0
  144. package/src/pi/capture/tool-calls.ts +6 -0
  145. package/src/pi/capture/transcript.ts +55 -0
  146. package/src/pi/capture/types.ts +46 -0
  147. package/src/pi/change-report/constants.ts +15 -0
  148. package/src/pi/change-report/index.ts +3 -0
  149. package/src/pi/change-report/report.ts +54 -0
  150. package/src/pi/change-report/types.ts +8 -0
  151. package/src/pi/context/constants.ts +5 -0
  152. package/src/pi/context/index.ts +3 -0
  153. package/src/pi/context/status.ts +15 -0
  154. package/src/pi/context/types.ts +98 -0
  155. package/src/pi/extension.ts +100 -0
  156. package/src/pi/index.ts +26 -0
  157. package/src/pi/memory-add/constants.ts +13 -0
  158. package/src/pi/memory-add/index.ts +5 -0
  159. package/src/pi/memory-add/memory-add.ts +31 -0
  160. package/src/pi/memory-add/respond.ts +55 -0
  161. package/src/pi/memory-add/schemas.ts +29 -0
  162. package/src/pi/memory-add/types.ts +15 -0
  163. package/src/pi/memory-archive/constants.ts +8 -0
  164. package/src/pi/memory-archive/index.ts +4 -0
  165. package/src/pi/memory-archive/memory-archive.ts +29 -0
  166. package/src/pi/memory-archive/schemas.ts +15 -0
  167. package/src/pi/memory-archive/types.ts +8 -0
  168. package/src/pi/memory-block/block.ts +75 -0
  169. package/src/pi/memory-block/constants.ts +24 -0
  170. package/src/pi/memory-block/index.ts +4 -0
  171. package/src/pi/memory-block/render.ts +54 -0
  172. package/src/pi/memory-block/types.ts +24 -0
  173. package/src/pi/memory-doctor/constants.ts +43 -0
  174. package/src/pi/memory-doctor/index.ts +4 -0
  175. package/src/pi/memory-doctor/memory-doctor.ts +135 -0
  176. package/src/pi/memory-doctor/report.ts +101 -0
  177. package/src/pi/memory-doctor/types.ts +13 -0
  178. package/src/pi/memory-export/constants.ts +15 -0
  179. package/src/pi/memory-export/index.ts +4 -0
  180. package/src/pi/memory-export/memory-export.ts +57 -0
  181. package/src/pi/memory-export/name.ts +9 -0
  182. package/src/pi/memory-export/types.ts +4 -0
  183. package/src/pi/memory-get/constants.ts +12 -0
  184. package/src/pi/memory-get/index.ts +5 -0
  185. package/src/pi/memory-get/memory-get.ts +23 -0
  186. package/src/pi/memory-get/respond.ts +38 -0
  187. package/src/pi/memory-get/schemas.ts +13 -0
  188. package/src/pi/memory-get/types.ts +10 -0
  189. package/src/pi/memory-init/constants.ts +17 -0
  190. package/src/pi/memory-init/index.ts +2 -0
  191. package/src/pi/memory-init/memory-init.ts +63 -0
  192. package/src/pi/memory-search/constants.ts +16 -0
  193. package/src/pi/memory-search/index.ts +5 -0
  194. package/src/pi/memory-search/memory-search.ts +22 -0
  195. package/src/pi/memory-search/respond.ts +62 -0
  196. package/src/pi/memory-search/schemas.ts +11 -0
  197. package/src/pi/memory-search/types.ts +10 -0
  198. package/src/pi/memory-session/constants.ts +7 -0
  199. package/src/pi/memory-session/index.ts +4 -0
  200. package/src/pi/memory-session/keeper.ts +101 -0
  201. package/src/pi/memory-session/respond.ts +6 -0
  202. package/src/pi/memory-session/types.ts +23 -0
  203. package/src/pi/memory-settings/constants.ts +69 -0
  204. package/src/pi/memory-settings/edits.ts +46 -0
  205. package/src/pi/memory-settings/index.ts +9 -0
  206. package/src/pi/memory-settings/lines.ts +119 -0
  207. package/src/pi/memory-settings/models.ts +81 -0
  208. package/src/pi/memory-settings/projects.ts +46 -0
  209. package/src/pi/memory-settings/providers.ts +77 -0
  210. package/src/pi/memory-settings/save.ts +16 -0
  211. package/src/pi/memory-settings/screen.ts +27 -0
  212. package/src/pi/memory-settings/types.ts +87 -0
  213. package/src/pi/memory-setup/constants.ts +33 -0
  214. package/src/pi/memory-setup/disclosure.ts +22 -0
  215. package/src/pi/memory-setup/index.ts +4 -0
  216. package/src/pi/memory-setup/memory-setup.ts +153 -0
  217. package/src/pi/memory-setup/types.ts +6 -0
  218. package/src/pi/memory-succeed/constants.ts +10 -0
  219. package/src/pi/memory-succeed/index.ts +4 -0
  220. package/src/pi/memory-succeed/memory-succeed.ts +34 -0
  221. package/src/pi/memory-succeed/schemas.ts +30 -0
  222. package/src/pi/memory-succeed/types.ts +8 -0
  223. package/src/pi/memory-update/constants.ts +8 -0
  224. package/src/pi/memory-update/index.ts +4 -0
  225. package/src/pi/memory-update/memory-update.ts +29 -0
  226. package/src/pi/memory-update/schemas.ts +24 -0
  227. package/src/pi/memory-update/types.ts +8 -0
  228. package/src/pi/paths/constants.ts +7 -0
  229. package/src/pi/paths/index.ts +2 -0
  230. package/src/pi/paths/paths.ts +15 -0
  231. package/src/pi/paths/platform.ts +7 -0
  232. package/src/pi/registrar.ts +25 -0
  233. package/src/pi/registration-report/constants.ts +13 -0
  234. package/src/pi/registration-report/index.ts +2 -0
  235. package/src/pi/registration-report/report.ts +26 -0
  236. package/src/pi/relevant-memory/constants.ts +3 -0
  237. package/src/pi/relevant-memory/index.ts +4 -0
  238. package/src/pi/relevant-memory/prompt.ts +23 -0
  239. package/src/pi/relevant-memory/runtime.ts +88 -0
  240. package/src/pi/relevant-memory/types.ts +14 -0
  241. package/src/pi/semantic/constants.ts +3 -0
  242. package/src/pi/semantic/index.ts +2 -0
  243. package/src/pi/semantic/runtime.ts +59 -0
  244. package/src/pi/session-start/constants.ts +7 -0
  245. package/src/pi/session-start/index.ts +3 -0
  246. package/src/pi/session-start/session-start.ts +48 -0
  247. package/src/pi/session-start/types.ts +5 -0
  248. package/src/pi/shell-edit-guard/guard.ts +41 -0
  249. package/src/pi/shell-edit-guard/index.ts +3 -0
  250. package/src/pi/shell-edit-guard/prompt.ts +30 -0
  251. package/src/pi/shell-edit-guard/types.ts +13 -0
  252. package/src/pi/types.ts +44 -0
  253. package/src/pi/vault-guard/constants.ts +1 -0
  254. package/src/pi/vault-guard/index.ts +4 -0
  255. package/src/pi/vault-guard/request.ts +39 -0
  256. package/src/pi/vault-guard/types.ts +5 -0
  257. package/src/pi/vault-guard/vault-guard.ts +21 -0
  258. package/src/services/capture-cadence/domain-rules.ts +8 -0
  259. package/src/services/capture-cadence/index.ts +1 -0
  260. package/src/services/clock/clock.ts +7 -0
  261. package/src/services/clock/index.ts +1 -0
  262. package/src/services/config/canonicalize.ts +163 -0
  263. package/src/services/config/constants.ts +1 -0
  264. package/src/services/config/fully-qualified-path.ts +14 -0
  265. package/src/services/config/index.ts +12 -0
  266. package/src/services/config/path-identity.ts +65 -0
  267. package/src/services/config/publication.ts +75 -0
  268. package/src/services/config/read.ts +47 -0
  269. package/src/services/config/registration.ts +26 -0
  270. package/src/services/config/resolve-input.ts +27 -0
  271. package/src/services/config/snapshot.ts +26 -0
  272. package/src/services/config/target.ts +2 -0
  273. package/src/services/config/types.ts +97 -0
  274. package/src/services/config/vault-access.ts +2 -0
  275. package/src/services/config/volume-namespace.ts +5 -0
  276. package/src/services/config/write.ts +63 -0
  277. package/src/services/decision-model/constants.ts +16 -0
  278. package/src/services/decision-model/decide.ts +42 -0
  279. package/src/services/decision-model/diagnostics.ts +6 -0
  280. package/src/services/decision-model/endpoint.ts +1 -0
  281. package/src/services/decision-model/failure-detail.ts +1 -0
  282. package/src/services/decision-model/index.ts +7 -0
  283. package/src/services/decision-model/interruption.ts +29 -0
  284. package/src/services/decision-model/jev.ts +61 -0
  285. package/src/services/decision-model/laya-batch.ts +64 -0
  286. package/src/services/decision-model/laya-http-failure.ts +41 -0
  287. package/src/services/decision-model/laya-response.ts +95 -0
  288. package/src/services/decision-model/laya.ts +35 -0
  289. package/src/services/decision-model/preflight.ts +24 -0
  290. package/src/services/decision-model/prompts.ts +36 -0
  291. package/src/services/decision-model/schemas.ts +43 -0
  292. package/src/services/decision-model/score-candidates.ts +41 -0
  293. package/src/services/decision-model/types.ts +182 -0
  294. package/src/services/embeddings/asset-download.ts +45 -0
  295. package/src/services/embeddings/asset-fetch.ts +39 -0
  296. package/src/services/embeddings/asset-inspection.ts +36 -0
  297. package/src/services/embeddings/batch.ts +32 -0
  298. package/src/services/embeddings/chunks.ts +80 -0
  299. package/src/services/embeddings/configuration.ts +8 -0
  300. package/src/services/embeddings/constants.ts +24 -0
  301. package/src/services/embeddings/errors.ts +11 -0
  302. package/src/services/embeddings/google.ts +90 -0
  303. package/src/services/embeddings/http.ts +64 -0
  304. package/src/services/embeddings/index.ts +17 -0
  305. package/src/services/embeddings/inference.ts +35 -0
  306. package/src/services/embeddings/local.ts +138 -0
  307. package/src/services/embeddings/model-asset.ts +68 -0
  308. package/src/services/embeddings/model-cache.ts +30 -0
  309. package/src/services/embeddings/openai.ts +64 -0
  310. package/src/services/embeddings/operation.ts +31 -0
  311. package/src/services/embeddings/responses.ts +41 -0
  312. package/src/services/embeddings/runtime.ts +13 -0
  313. package/src/services/embeddings/schemas.ts +53 -0
  314. package/src/services/embeddings/types.ts +116 -0
  315. package/src/services/id/id.ts +5 -0
  316. package/src/services/id/index.ts +1 -0
  317. package/src/services/index.ts +11 -0
  318. package/src/services/llm/capture.ts +19 -0
  319. package/src/services/llm/check-chat-models.ts +38 -0
  320. package/src/services/llm/complete.ts +57 -0
  321. package/src/services/llm/constants.ts +32 -0
  322. package/src/services/llm/domain-rules.ts +2 -0
  323. package/src/services/llm/index.ts +6 -0
  324. package/src/services/llm/lifetime.ts +16 -0
  325. package/src/services/llm/retrieve.ts +19 -0
  326. package/src/services/llm/schemas.ts +9 -0
  327. package/src/services/llm/types.ts +94 -0
  328. package/src/services/search-index/catalog-query.ts +34 -0
  329. package/src/services/search-index/catalog-statements.ts +33 -0
  330. package/src/services/search-index/catalog.ts +19 -0
  331. package/src/services/search-index/cleanup.ts +13 -0
  332. package/src/services/search-index/close.ts +5 -0
  333. package/src/services/search-index/constants.ts +102 -0
  334. package/src/services/search-index/dont-forget.ts +1 -0
  335. package/src/services/search-index/fingerprint.ts +17 -0
  336. package/src/services/search-index/folder-index-statements.ts +17 -0
  337. package/src/services/search-index/folder-index-storage.ts +54 -0
  338. package/src/services/search-index/folder-indexes.ts +13 -0
  339. package/src/services/search-index/index.ts +14 -0
  340. package/src/services/search-index/inspection.ts +1 -0
  341. package/src/services/search-index/inventory.ts +67 -0
  342. package/src/services/search-index/legacy.ts +64 -0
  343. package/src/services/search-index/location.ts +12 -0
  344. package/src/services/search-index/open.ts +46 -0
  345. package/src/services/search-index/query.ts +39 -0
  346. package/src/services/search-index/ranking.ts +12 -0
  347. package/src/services/search-index/reconcile.ts +93 -0
  348. package/src/services/search-index/recovery.ts +56 -0
  349. package/src/services/search-index/refusals.ts +21 -0
  350. package/src/services/search-index/schema.ts +42 -0
  351. package/src/services/search-index/schemas.ts +181 -0
  352. package/src/services/search-index/search.ts +5 -0
  353. package/src/services/search-index/statements.ts +18 -0
  354. package/src/services/search-index/storage.ts +207 -0
  355. package/src/services/search-index/types.ts +113 -0
  356. package/src/services/search-index/vector-statements.ts +18 -0
  357. package/src/services/search-index/vector-storage.ts +169 -0
  358. package/src/services/search-index/vectors.ts +18 -0
  359. package/src/services/search-index/write.ts +9 -0
  360. package/src/services/shell-edit/ask.ts +53 -0
  361. package/src/services/shell-edit/domain-rules.ts +2 -0
  362. package/src/services/shell-edit/index.ts +4 -0
  363. package/src/services/shell-edit/schemas.ts +23 -0
  364. package/src/services/shell-edit/types.ts +61 -0
  365. package/src/services/shell-scripts/constants.ts +1 -0
  366. package/src/services/shell-scripts/files.ts +16 -0
  367. package/src/services/shell-scripts/index.ts +5 -0
  368. package/src/services/shell-scripts/package-scripts.ts +74 -0
  369. package/src/services/shell-scripts/schemas.ts +3 -0
  370. package/src/services/shell-scripts/scripts.ts +27 -0
  371. package/src/services/shell-scripts/types.ts +11 -0
  372. package/src/services/vault/archive.ts +31 -0
  373. package/src/services/vault/bootstrap/ensure.ts +50 -0
  374. package/src/services/vault/bootstrap/index.ts +2 -0
  375. package/src/services/vault/bootstrap/paths.ts +57 -0
  376. package/src/services/vault/bootstrap/types.ts +17 -0
  377. package/src/services/vault/bootstrap/write.ts +47 -0
  378. package/src/services/vault/catalog/bytes.ts +51 -0
  379. package/src/services/vault/catalog/dont-forget.ts +1 -0
  380. package/src/services/vault/catalog/enumerate.ts +69 -0
  381. package/src/services/vault/catalog/export.ts +21 -0
  382. package/src/services/vault/catalog/failures.ts +16 -0
  383. package/src/services/vault/catalog/index.ts +10 -0
  384. package/src/services/vault/catalog/inspect.ts +41 -0
  385. package/src/services/vault/catalog/observe.ts +35 -0
  386. package/src/services/vault/catalog/resolve.ts +94 -0
  387. package/src/services/vault/catalog/stat.ts +23 -0
  388. package/src/services/vault/catalog/types.ts +69 -0
  389. package/src/services/vault/catalog/visit.ts +58 -0
  390. package/src/services/vault/complete-blank.ts +66 -0
  391. package/src/services/vault/constants.ts +3 -0
  392. package/src/services/vault/context/index.ts +1 -0
  393. package/src/services/vault/context/types.ts +10 -0
  394. package/src/services/vault/create.ts +19 -0
  395. package/src/services/vault/display.ts +6 -0
  396. package/src/services/vault/domain-rules.ts +10 -0
  397. package/src/services/vault/draft.ts +2 -0
  398. package/src/services/vault/filesystem/failures.ts +53 -0
  399. package/src/services/vault/filesystem/hash.ts +5 -0
  400. package/src/services/vault/filesystem/index.ts +5 -0
  401. package/src/services/vault/filesystem/read.ts +61 -0
  402. package/src/services/vault/filesystem/types.ts +36 -0
  403. package/src/services/vault/filesystem/write.ts +80 -0
  404. package/src/services/vault/find.ts +27 -0
  405. package/src/services/vault/folder-contents.ts +31 -0
  406. package/src/services/vault/folder-index/index.ts +2 -0
  407. package/src/services/vault/folder-index/read.ts +87 -0
  408. package/src/services/vault/folder-index/types.ts +19 -0
  409. package/src/services/vault/folder-listing.ts +1 -0
  410. package/src/services/vault/index.ts +21 -0
  411. package/src/services/vault/inspect-folder.ts +13 -0
  412. package/src/services/vault/list.ts +121 -0
  413. package/src/services/vault/memory-folder.ts +24 -0
  414. package/src/services/vault/paths.ts +11 -0
  415. package/src/services/vault/publish.ts +52 -0
  416. package/src/services/vault/read.ts +46 -0
  417. package/src/services/vault/refresh-folders.ts +197 -0
  418. package/src/services/vault/refresh-plan.ts +79 -0
  419. package/src/services/vault/refresh.ts +8 -0
  420. package/src/services/vault/refusals.ts +23 -0
  421. package/src/services/vault/relocate.ts +131 -0
  422. package/src/services/vault/relocation-checks.ts +89 -0
  423. package/src/services/vault/resolve-stored-file.ts +43 -0
  424. package/src/services/vault/resolve.ts +109 -0
  425. package/src/services/vault/succeed.ts +45 -0
  426. package/src/services/vault/types.ts +199 -0
  427. package/src/services/vault/update-file.ts +58 -0
  428. package/src/services/vault/update.ts +22 -0
  429. package/src/services/vault/write-new-file.ts +37 -0
  430. package/src/shared/index.ts +1 -0
  431. package/src/shared/result/index.ts +1 -0
  432. package/src/shared/result/types.ts +17 -0
  433. package/src/usecases/add-memory/add-memory.ts +83 -0
  434. package/src/usecases/add-memory/index.ts +4 -0
  435. package/src/usecases/add-memory/maintenance.ts +23 -0
  436. package/src/usecases/add-memory/schemas.ts +12 -0
  437. package/src/usecases/add-memory/types.ts +47 -0
  438. package/src/usecases/archive-memory/archive-memory.ts +27 -0
  439. package/src/usecases/archive-memory/index.ts +3 -0
  440. package/src/usecases/archive-memory/schemas.ts +11 -0
  441. package/src/usecases/archive-memory/types.ts +17 -0
  442. package/src/usecases/capture-memory/apply.ts +73 -0
  443. package/src/usecases/capture-memory/capture-memory.ts +117 -0
  444. package/src/usecases/capture-memory/constants.ts +15 -0
  445. package/src/usecases/capture-memory/index.ts +5 -0
  446. package/src/usecases/capture-memory/observe.ts +122 -0
  447. package/src/usecases/capture-memory/settings.ts +20 -0
  448. package/src/usecases/capture-memory/types.ts +103 -0
  449. package/src/usecases/check-shell-edit/check-shell-edit.ts +28 -0
  450. package/src/usecases/check-shell-edit/index.ts +2 -0
  451. package/src/usecases/check-shell-edit/types.ts +30 -0
  452. package/src/usecases/check-vault-access/check-vault-access.ts +23 -0
  453. package/src/usecases/check-vault-access/constants.ts +7 -0
  454. package/src/usecases/check-vault-access/index.ts +4 -0
  455. package/src/usecases/check-vault-access/raw-device.ts +10 -0
  456. package/src/usecases/check-vault-access/targets.ts +49 -0
  457. package/src/usecases/check-vault-access/types.ts +33 -0
  458. package/src/usecases/complete-blank-memory/complete-blank-memory.ts +48 -0
  459. package/src/usecases/complete-blank-memory/constants.ts +3 -0
  460. package/src/usecases/complete-blank-memory/index.ts +4 -0
  461. package/src/usecases/complete-blank-memory/schemas.ts +14 -0
  462. package/src/usecases/complete-blank-memory/types.ts +28 -0
  463. package/src/usecases/diagnose-memory/constants.ts +3 -0
  464. package/src/usecases/diagnose-memory/decision.ts +36 -0
  465. package/src/usecases/diagnose-memory/diagnose-memory.ts +52 -0
  466. package/src/usecases/diagnose-memory/embeddings.ts +39 -0
  467. package/src/usecases/diagnose-memory/index.ts +5 -0
  468. package/src/usecases/diagnose-memory/types.ts +86 -0
  469. package/src/usecases/diagnose-memory/vault.ts +33 -0
  470. package/src/usecases/export-memory/collect.ts +20 -0
  471. package/src/usecases/export-memory/constants.ts +3 -0
  472. package/src/usecases/export-memory/export-memory.ts +84 -0
  473. package/src/usecases/export-memory/index.ts +3 -0
  474. package/src/usecases/export-memory/types.ts +28 -0
  475. package/src/usecases/get-memory/get-memory.ts +97 -0
  476. package/src/usecases/get-memory/index.ts +2 -0
  477. package/src/usecases/get-memory/types.ts +25 -0
  478. package/src/usecases/index.ts +25 -0
  479. package/src/usecases/list-memory/index.ts +2 -0
  480. package/src/usecases/list-memory/leased/index.ts +2 -0
  481. package/src/usecases/list-memory/leased/read.ts +16 -0
  482. package/src/usecases/list-memory/leased/types.ts +21 -0
  483. package/src/usecases/list-memory/list-memory.ts +33 -0
  484. package/src/usecases/list-memory/types.ts +8 -0
  485. package/src/usecases/load-dont-forget/index.ts +2 -0
  486. package/src/usecases/load-dont-forget/load-dont-forget.ts +111 -0
  487. package/src/usecases/load-dont-forget/types.ts +26 -0
  488. package/src/usecases/memory-change/change.ts +42 -0
  489. package/src/usecases/memory-change/index.ts +5 -0
  490. package/src/usecases/memory-change/maintenance.ts +11 -0
  491. package/src/usecases/memory-change/partial.ts +18 -0
  492. package/src/usecases/memory-change/receipt.ts +40 -0
  493. package/src/usecases/memory-change/types.ts +44 -0
  494. package/src/usecases/operation-context/context.ts +37 -0
  495. package/src/usecases/operation-context/index.ts +2 -0
  496. package/src/usecases/operation-context/types.ts +19 -0
  497. package/src/usecases/registration/check.ts +6 -0
  498. package/src/usecases/registration/entry.ts +33 -0
  499. package/src/usecases/registration/index.ts +8 -0
  500. package/src/usecases/registration/init.ts +94 -0
  501. package/src/usecases/registration/prepare-init.ts +43 -0
  502. package/src/usecases/registration/prepare.ts +35 -0
  503. package/src/usecases/registration/propose.ts +34 -0
  504. package/src/usecases/registration/publication.ts +90 -0
  505. package/src/usecases/registration/setup.ts +41 -0
  506. package/src/usecases/registration/types.ts +107 -0
  507. package/src/usecases/relevant-memory/agent.ts +55 -0
  508. package/src/usecases/relevant-memory/constants.ts +28 -0
  509. package/src/usecases/relevant-memory/cutoffs.ts +29 -0
  510. package/src/usecases/relevant-memory/decision.ts +102 -0
  511. package/src/usecases/relevant-memory/index.ts +11 -0
  512. package/src/usecases/relevant-memory/loaded.ts +31 -0
  513. package/src/usecases/relevant-memory/refresh.ts +30 -0
  514. package/src/usecases/relevant-memory/retrieve-memory.ts +62 -0
  515. package/src/usecases/relevant-memory/schemas.ts +20 -0
  516. package/src/usecases/relevant-memory/session-memory.ts +53 -0
  517. package/src/usecases/relevant-memory/track-dont-forget.ts +13 -0
  518. package/src/usecases/relevant-memory/types.ts +106 -0
  519. package/src/usecases/resolve-memory/index.ts +2 -0
  520. package/src/usecases/resolve-memory/leased/index.ts +2 -0
  521. package/src/usecases/resolve-memory/leased/resolve.ts +109 -0
  522. package/src/usecases/resolve-memory/leased/types.ts +35 -0
  523. package/src/usecases/resolve-memory/resolve-memory.ts +23 -0
  524. package/src/usecases/resolve-memory/types.ts +7 -0
  525. package/src/usecases/search-memory/constants.ts +1 -0
  526. package/src/usecases/search-memory/index.ts +3 -0
  527. package/src/usecases/search-memory/search-memory.ts +132 -0
  528. package/src/usecases/search-memory/types.ts +39 -0
  529. package/src/usecases/semantic/constants.ts +7 -0
  530. package/src/usecases/semantic/index.ts +5 -0
  531. package/src/usecases/semantic/prepare.ts +30 -0
  532. package/src/usecases/semantic/rank.ts +83 -0
  533. package/src/usecases/semantic/refresh-vectors.ts +95 -0
  534. package/src/usecases/semantic/types.ts +17 -0
  535. package/src/usecases/semantic-port/index.ts +1 -0
  536. package/src/usecases/semantic-port/types.ts +20 -0
  537. package/src/usecases/semantic-provider/constants.ts +6 -0
  538. package/src/usecases/semantic-provider/index.ts +5 -0
  539. package/src/usecases/semantic-provider/local.ts +33 -0
  540. package/src/usecases/semantic-provider/remote.ts +10 -0
  541. package/src/usecases/semantic-provider/size.ts +10 -0
  542. package/src/usecases/semantic-provider/types.ts +19 -0
  543. package/src/usecases/session/index.ts +2 -0
  544. package/src/usecases/session/lease.ts +70 -0
  545. package/src/usecases/session/receipts.ts +46 -0
  546. package/src/usecases/session/state.ts +106 -0
  547. package/src/usecases/session/types.ts +45 -0
  548. package/src/usecases/settings/change.ts +142 -0
  549. package/src/usecases/settings/index.ts +3 -0
  550. package/src/usecases/settings/prepare.ts +24 -0
  551. package/src/usecases/settings/types.ts +32 -0
  552. package/src/usecases/succeed-memory/index.ts +3 -0
  553. package/src/usecases/succeed-memory/schemas.ts +13 -0
  554. package/src/usecases/succeed-memory/succeed-memory.ts +34 -0
  555. package/src/usecases/succeed-memory/types.ts +18 -0
  556. package/src/usecases/synchronize-memory/index.ts +2 -0
  557. package/src/usecases/synchronize-memory/leased/aliases.ts +55 -0
  558. package/src/usecases/synchronize-memory/leased/folder-states.ts +58 -0
  559. package/src/usecases/synchronize-memory/leased/index.ts +2 -0
  560. package/src/usecases/synchronize-memory/leased/inspection.ts +32 -0
  561. package/src/usecases/synchronize-memory/leased/maintenance.ts +41 -0
  562. package/src/usecases/synchronize-memory/leased/publication.ts +55 -0
  563. package/src/usecases/synchronize-memory/leased/scan.ts +37 -0
  564. package/src/usecases/synchronize-memory/leased/synchronize.ts +102 -0
  565. package/src/usecases/synchronize-memory/leased/types.ts +60 -0
  566. package/src/usecases/synchronize-memory/synchronize-memory.ts +26 -0
  567. package/src/usecases/synchronize-memory/types.ts +5 -0
  568. package/src/usecases/update-memory/index.ts +3 -0
  569. package/src/usecases/update-memory/schemas.ts +14 -0
  570. package/src/usecases/update-memory/types.ts +16 -0
  571. package/src/usecases/update-memory/update-memory.ts +31 -0
  572. package/CHANGELOG.md +0 -21
@@ -0,0 +1,97 @@
1
+ import { inspectVaultFile, observeVaultPath } from "#src/services"
2
+ import { readLeasedFolder } from "#src/usecases/list-memory/leased"
3
+ import {
4
+ captureMemoryOperationContext,
5
+ type MemoryOperationContext,
6
+ memoryAdmissionRefusal,
7
+ memoryOperationInterruption,
8
+ staleMemorySession,
9
+ } from "#src/usecases/operation-context"
10
+ import type { ResolvedVault } from "#src/usecases/resolve-memory"
11
+ import { resolveLeasedMemory, selectMemoryVault } from "#src/usecases/resolve-memory/leased"
12
+ import type { GetMemoryRequest, GetMemoryResult } from "./types.ts"
13
+
14
+ export async function getMemory(
15
+ input: GetMemoryRequest,
16
+ callerContext: MemoryOperationContext,
17
+ ): Promise<GetMemoryResult> {
18
+ const context = captureMemoryOperationContext(callerContext)
19
+ const request = { vault: input.vault, path: input.path, sourceCallId: input.sourceCallId }
20
+ const lease = await context.session.acquire(context.stamp, context.signal)
21
+ if (!lease) return memoryAdmissionRefusal(context)
22
+ try {
23
+ const interrupted = memoryOperationInterruption(context)
24
+ if (interrupted) return interrupted
25
+ context.session.consumeReceipt(context.stamp, request)
26
+ const memory = await resolveLeasedMemory(context)
27
+ const stale = memoryOperationInterruption(context)
28
+ if (!memory.succeeded) return memory
29
+ if (stale) return stale
30
+ const target = selectMemoryVault(memory.output, request.vault)
31
+ if (!target.succeeded) return target
32
+ const result = await getLeasedMemory(request, target.output, context)
33
+ return deliverMemory(result, request, target.output, context)
34
+ } finally {
35
+ lease.release()
36
+ }
37
+ }
38
+
39
+ async function getLeasedMemory(
40
+ request: GetMemoryRequest,
41
+ target: ResolvedVault,
42
+ context: MemoryOperationContext,
43
+ ): Promise<GetMemoryResult> {
44
+ const entry = await observeVaultPath(target.vault, { path: request.path })
45
+ const interrupted = memoryOperationInterruption(context)
46
+ if (interrupted) return interrupted
47
+ if (!entry.succeeded) return entry
48
+ if (entry.output.kind === "directory") return readLeasedFolder(target, request.path, context)
49
+ return getLeasedNote(request, target, context)
50
+ }
51
+
52
+ async function getLeasedNote(
53
+ request: GetMemoryRequest,
54
+ target: ResolvedVault,
55
+ context: MemoryOperationContext,
56
+ ): Promise<GetMemoryResult> {
57
+ const inspected = await inspectVaultFile(target.vault, { path: request.path })
58
+ const interrupted = memoryOperationInterruption(context)
59
+ if (interrupted) return interrupted
60
+ if (!inspected.succeeded) return inspected
61
+ const file = inspected.output
62
+ const analysis = file.analysis
63
+ if (analysis.status === "unclosed") {
64
+ return {
65
+ succeeded: false,
66
+ reason: "unclosed-frontmatter",
67
+ file,
68
+ problems: [...analysis.frontmatterProblems, ...analysis.nameProblems, ...analysis.bodyProblems],
69
+ }
70
+ }
71
+ return { succeeded: true, output: { kind: "note", vault: request.vault, file: { ...file, analysis } } }
72
+ }
73
+
74
+ function deliverMemory(
75
+ result: GetMemoryResult,
76
+ request: GetMemoryRequest,
77
+ target: ResolvedVault,
78
+ context: MemoryOperationContext,
79
+ ): GetMemoryResult {
80
+ const interrupted = memoryOperationInterruption(context)
81
+ if (interrupted) return interrupted
82
+ if (!result.succeeded || result.output.kind !== "note") return result
83
+ const file = result.output.file
84
+ const analysis = file.analysis
85
+ let id: string | null = null
86
+ if (analysis.frontmatter) id = analysis.frontmatter.id
87
+ const remembered = context.session.rememberGet(context.stamp, {
88
+ ...file,
89
+ analysis,
90
+ id,
91
+ vault: request.vault,
92
+ canonicalVault: target.vault.path,
93
+ sourceCallId: request.sourceCallId,
94
+ })
95
+ if (!remembered) return staleMemorySession()
96
+ return result
97
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./get-memory.ts"
2
+ export * from "./types.ts"
@@ -0,0 +1,25 @@
1
+ import type { InspectedVaultFile, MemoryScope, ParsedVaultNote } from "#src/services"
2
+ import type { Failed, Succeeded } from "#src/shared"
3
+ import type { ListMemoryResult } from "#src/usecases/list-memory"
4
+ import type { MemoryAddress } from "#src/usecases/session"
5
+
6
+ export interface GetMemoryRequest extends MemoryAddress {
7
+ sourceCallId: string
8
+ }
9
+
10
+ export interface CompleteMemoryFile extends InspectedVaultFile {
11
+ analysis: ParsedVaultNote
12
+ }
13
+
14
+ export interface NoteRead {
15
+ kind: "note"
16
+ vault: MemoryScope
17
+ file: CompleteMemoryFile
18
+ }
19
+
20
+ export interface UnclosedMemoryRefusal extends Failed {
21
+ reason: "unclosed-frontmatter"
22
+ file: InspectedVaultFile
23
+ }
24
+
25
+ export type GetMemoryResult = Succeeded<NoteRead> | ListMemoryResult | UnclosedMemoryRefusal
@@ -0,0 +1,25 @@
1
+ export * from "./add-memory/index.ts"
2
+ export * from "./archive-memory/index.ts"
3
+ export * from "./capture-memory/index.ts"
4
+ export * from "./check-shell-edit/index.ts"
5
+ export * from "./check-vault-access/index.ts"
6
+ export * from "./complete-blank-memory/index.ts"
7
+ export * from "./diagnose-memory/index.ts"
8
+ export * from "./export-memory/index.ts"
9
+ export * from "./get-memory/index.ts"
10
+ export * from "./list-memory/index.ts"
11
+ export * from "./load-dont-forget/index.ts"
12
+ export * from "./memory-change/index.ts"
13
+ export * from "./operation-context/index.ts"
14
+ export * from "./registration/index.ts"
15
+ export * from "./relevant-memory/index.ts"
16
+ export * from "./resolve-memory/index.ts"
17
+ export * from "./search-memory/index.ts"
18
+ export * from "./semantic/index.ts"
19
+ export * from "./semantic-port/index.ts"
20
+ export * from "./semantic-provider/index.ts"
21
+ export * from "./session/index.ts"
22
+ export * from "./settings/index.ts"
23
+ export * from "./succeed-memory/index.ts"
24
+ export * from "./synchronize-memory/index.ts"
25
+ export * from "./update-memory/index.ts"
@@ -0,0 +1,2 @@
1
+ export * from "./list-memory.ts"
2
+ export * from "./types.ts"
@@ -0,0 +1,2 @@
1
+ export * from "./read.ts"
2
+ export * from "./types.ts"
@@ -0,0 +1,16 @@
1
+ import { readFolderIndex } from "#src/services"
2
+ import { type MemoryOperationContext, memoryOperationInterruption } from "#src/usecases/operation-context"
3
+ import type { ResolvedVault } from "#src/usecases/resolve-memory"
4
+ import type { ListMemoryResult } from "./types.ts"
5
+
6
+ export async function readLeasedFolder(
7
+ target: ResolvedVault,
8
+ folder: string,
9
+ context: MemoryOperationContext,
10
+ ): Promise<ListMemoryResult> {
11
+ const result = await readFolderIndex(target.vault, { folder })
12
+ const interrupted = memoryOperationInterruption(context)
13
+ if (interrupted) return interrupted
14
+ if (!result.succeeded) return result
15
+ return { succeeded: true, output: { kind: "folder", vault: target.scope, ...result.output } }
16
+ }
@@ -0,0 +1,21 @@
1
+ import type {
2
+ AmbiguousFolderIndex,
3
+ FolderIndex,
4
+ MemoryScope,
5
+ NoProjectRefusal,
6
+ VaultCatalogFailure,
7
+ } from "#src/services"
8
+ import type { Succeeded } from "#src/shared"
9
+ import type { MemoryResolutionRefusal } from "#src/usecases/resolve-memory"
10
+
11
+ export interface FolderRead extends FolderIndex {
12
+ kind: "folder"
13
+ vault: MemoryScope
14
+ }
15
+
16
+ export type ListMemoryResult =
17
+ | Succeeded<FolderRead>
18
+ | MemoryResolutionRefusal
19
+ | NoProjectRefusal
20
+ | VaultCatalogFailure
21
+ | AmbiguousFolderIndex
@@ -0,0 +1,33 @@
1
+ import { readLeasedFolder } from "#src/usecases/list-memory/leased"
2
+ import {
3
+ captureMemoryOperationContext,
4
+ type MemoryOperationContext,
5
+ memoryAdmissionRefusal,
6
+ memoryOperationInterruption,
7
+ } from "#src/usecases/operation-context"
8
+ import { resolveLeasedMemory, selectMemoryVault } from "#src/usecases/resolve-memory/leased"
9
+ import type { ListMemoryRequest, ListMemoryResult } from "./types.ts"
10
+
11
+ export async function listMemory(
12
+ input: ListMemoryRequest,
13
+ callerContext: MemoryOperationContext,
14
+ ): Promise<ListMemoryResult> {
15
+ const context = captureMemoryOperationContext(callerContext)
16
+ const request = { vault: input.vault, folder: input.folder }
17
+ const lease = await context.session.acquire(context.stamp, context.signal)
18
+ if (!lease) return memoryAdmissionRefusal(context)
19
+ try {
20
+ const memory = await resolveLeasedMemory(context)
21
+ const interrupted = memoryOperationInterruption(context)
22
+ if (!memory.succeeded) return memory
23
+ if (interrupted) return interrupted
24
+ const target = selectMemoryVault(memory.output, request.vault)
25
+ if (!target.succeeded) return target
26
+ const result = await readLeasedFolder(target.output, request.folder, context)
27
+ const stale = memoryOperationInterruption(context)
28
+ if (stale) return stale
29
+ return result
30
+ } finally {
31
+ lease.release()
32
+ }
33
+ }
@@ -0,0 +1,8 @@
1
+ import type { MemoryScope } from "#src/services"
2
+
3
+ export type { FolderRead, ListMemoryResult } from "#src/usecases/list-memory/leased"
4
+
5
+ export interface ListMemoryRequest {
6
+ vault: MemoryScope
7
+ folder: string
8
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./load-dont-forget.ts"
2
+ export * from "./types.ts"
@@ -0,0 +1,111 @@
1
+ import {
2
+ closeIndex,
3
+ dontForgetCandidates,
4
+ inspectVaultFile,
5
+ isLoadedDontForget,
6
+ type OpenedIndex,
7
+ readIndexInventory,
8
+ type VaultNoteAnalysis,
9
+ } from "#src/services"
10
+ import {
11
+ type MemoryOperationContext,
12
+ memoryAdmissionRefusal,
13
+ memoryOperationInterruption,
14
+ } from "#src/usecases/operation-context"
15
+ import { type ResolvedMemory, type ResolvedVault, resolveLeasedMemory } from "#src/usecases/resolve-memory/leased"
16
+ import { openVaultIndex, synchronizeOpenedMemory } from "#src/usecases/synchronize-memory/leased"
17
+ import type { DontForgetVault, LoadDontForgetResult, LoadedDontForgetNote } from "./types.ts"
18
+
19
+ export async function loadDontForget(context: MemoryOperationContext): Promise<LoadDontForgetResult> {
20
+ const lease = await context.session.acquire(context.stamp, context.signal)
21
+ if (!lease) return memoryAdmissionRefusal(context)
22
+ try {
23
+ const memory = await resolveLeasedMemory(context)
24
+ if (!memory.succeeded) return memory
25
+ return await loadResolvedVaults(memory.output, context)
26
+ } finally {
27
+ lease.release()
28
+ }
29
+ }
30
+
31
+ async function loadResolvedVaults(
32
+ memory: ResolvedMemory,
33
+ context: MemoryOperationContext,
34
+ ): Promise<LoadDontForgetResult> {
35
+ const targets = [memory.global]
36
+ if (memory.project) targets.push(memory.project)
37
+ const vaults: DontForgetVault[] = []
38
+ for (const target of targets) {
39
+ const interrupted = memoryOperationInterruption(context)
40
+ if (interrupted) return interrupted
41
+ vaults.push(await loadLeasedVault(memory, target, context))
42
+ }
43
+ const stale = memoryOperationInterruption(context)
44
+ if (stale) return stale
45
+ return { succeeded: true, output: { vaults } }
46
+ }
47
+
48
+ async function loadLeasedVault(
49
+ memory: ResolvedMemory,
50
+ target: ResolvedVault,
51
+ context: MemoryOperationContext,
52
+ ): Promise<DontForgetVault> {
53
+ const opened = openVaultIndex(memory, target)
54
+ if (!opened.succeeded) return { vault: target.scope, notes: [], problems: opened.problems }
55
+ const result: DontForgetVault = { vault: target.scope, notes: [], problems: [] }
56
+ try {
57
+ await loadSynchronizedVault(result, opened, memory, target, context)
58
+ } finally {
59
+ const closed = closeIndex(opened.output)
60
+ if (!closed.succeeded) result.problems.push(...closed.problems)
61
+ }
62
+ return result
63
+ }
64
+
65
+ async function loadSynchronizedVault(
66
+ result: DontForgetVault,
67
+ opened: OpenedIndex,
68
+ memory: ResolvedMemory,
69
+ target: ResolvedVault,
70
+ context: MemoryOperationContext,
71
+ ): Promise<void> {
72
+ const synchronized = await synchronizeOpenedMemory(opened, memory, target, context, null)
73
+ if (!synchronized.succeeded) {
74
+ result.problems.push(...synchronized.problems)
75
+ return
76
+ }
77
+ const inventory = readIndexInventory(opened.output)
78
+ if (!inventory.succeeded) {
79
+ result.problems.push(...inventory.problems)
80
+ return
81
+ }
82
+ for (const path of dontForgetCandidates(inventory.output).sort()) {
83
+ if (memoryOperationInterruption(context)) return
84
+ const inspected = await inspectVaultFile(target.vault, { path })
85
+ if (!inspected.succeeded) {
86
+ result.problems.push(...inspected.problems)
87
+ continue
88
+ }
89
+ const note = loadedNote(target, path, inspected.output.analysis, inspected.output.rawHash)
90
+ if (note) result.notes.push(note)
91
+ }
92
+ }
93
+
94
+ function loadedNote(
95
+ target: ResolvedVault,
96
+ path: string,
97
+ analysis: VaultNoteAnalysis,
98
+ hash: string,
99
+ ): LoadedDontForgetNote | null {
100
+ if (!isLoadedDontForget(analysis) || analysis.status !== "parsed" || !analysis.frontmatter) return null
101
+ return {
102
+ vault: target.scope,
103
+ path,
104
+ type: analysis.frontmatter.type,
105
+ id: analysis.frontmatter.id,
106
+ hash,
107
+ statement: analysis.parsed.statement,
108
+ body: analysis.parsed.body,
109
+ problems: [...analysis.frontmatterProblems, ...analysis.nameProblems, ...analysis.bodyProblems],
110
+ }
111
+ }
@@ -0,0 +1,26 @@
1
+ import type { CatalogHit, MemoryScope } from "#src/services"
2
+ import type { Succeeded } from "#src/shared"
3
+ import type { MemoryResolutionRefusal } from "#src/usecases/resolve-memory"
4
+
5
+ export interface LoadedDontForgetNote {
6
+ vault: MemoryScope
7
+ path: string
8
+ type: CatalogHit["type"]
9
+ id: string
10
+ hash: string
11
+ statement: string
12
+ body: string
13
+ problems: string[]
14
+ }
15
+
16
+ export interface DontForgetVault {
17
+ vault: MemoryScope
18
+ notes: LoadedDontForgetNote[]
19
+ problems: string[]
20
+ }
21
+
22
+ export interface LoadedDontForget {
23
+ vaults: DontForgetVault[]
24
+ }
25
+
26
+ export type LoadDontForgetResult = Succeeded<LoadedDontForget> | MemoryResolutionRefusal
@@ -0,0 +1,42 @@
1
+ import {
2
+ captureMemoryOperationContext,
3
+ type MemoryOperationContext,
4
+ memoryAdmissionRefusal,
5
+ memoryOperationInterruption,
6
+ } from "#src/usecases/operation-context"
7
+ import { resolveLeasedMemory, selectMemoryVault } from "#src/usecases/resolve-memory/leased"
8
+ import type { MemoryAddress } from "#src/usecases/session"
9
+ import { receiptedNote } from "./receipt.ts"
10
+ import type { ApplyChange, ChangeOutcome, ChangeRefusal } from "./types.ts"
11
+
12
+ export async function changeLeasedMemory<Result extends ChangeOutcome>(
13
+ address: MemoryAddress,
14
+ callerContext: MemoryOperationContext,
15
+ apply: ApplyChange<Result>,
16
+ ): Promise<Result | ChangeRefusal> {
17
+ const context = captureMemoryOperationContext(callerContext)
18
+ const lease = await context.session.acquire(context.stamp, context.signal)
19
+ if (!lease) return memoryAdmissionRefusal(context)
20
+ try {
21
+ const interrupted = memoryOperationInterruption(context)
22
+ if (interrupted) return interrupted
23
+ const memory = await resolveLeasedMemory(context)
24
+ if (!memory.succeeded) return memory
25
+ const stale = memoryOperationInterruption(context)
26
+ if (stale) return stale
27
+ const target = selectMemoryVault(memory.output, address.vault)
28
+ if (!target.succeeded) return target
29
+ const receipted = receiptedNote(context, address, target.output.vault.path)
30
+ if (!receipted.succeeded) return receipted
31
+ const result = await apply({ target: target.output, context, receipted: receipted.output })
32
+ if (consumesReceipt(result)) context.session.consumeReceipt(context.stamp, address)
33
+ return result
34
+ } finally {
35
+ lease.release()
36
+ }
37
+ }
38
+
39
+ function consumesReceipt(result: ChangeOutcome): boolean {
40
+ if (result.succeeded) return true
41
+ return result.reason === "conflict" || result.reason === "partial"
42
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./change.ts"
2
+ export * from "./maintenance.ts"
3
+ export * from "./partial.ts"
4
+ export * from "./receipt.ts"
5
+ export * from "./types.ts"
@@ -0,0 +1,11 @@
1
+ import type { MaintenanceWarnings, RefreshResult } from "#src/services"
2
+
3
+ export function refreshWarnings(refreshed: RefreshResult): string[] {
4
+ if (!refreshed.succeeded) return refreshed.problems.map((problem) => `${refreshed.reason}: ${problem}`)
5
+ return warningsOf(refreshed)
6
+ }
7
+
8
+ export function warningsOf(result: MaintenanceWarnings): string[] {
9
+ if (result.maintenanceProblems) return [...result.maintenanceProblems]
10
+ return []
11
+ }
@@ -0,0 +1,18 @@
1
+ import { displayNotePath, type PartialRelocation } from "#src/services"
2
+ import type { Failed } from "#src/shared"
3
+ import type { PartialMemoryChange } from "./types.ts"
4
+
5
+ export function reportPartial<Other extends Failed>(result: Other | PartialRelocation): Other | PartialMemoryChange {
6
+ if (!("written" in result)) return result
7
+ return describePartial(result)
8
+ }
9
+
10
+ function describePartial(partial: PartialRelocation): PartialMemoryChange {
11
+ return {
12
+ succeeded: false,
13
+ reason: "partial",
14
+ problems: partial.problems,
15
+ published: partial.written.map((placed) => displayNotePath(placed.folder, placed.note.statement)),
16
+ originalState: partial.originalState,
17
+ }
18
+ }
@@ -0,0 +1,40 @@
1
+ import type { Note } from "#src/services"
2
+ import type { MemoryOperationContext } from "#src/usecases/operation-context"
3
+ import type { DeliveredRead, MemoryAddress } from "#src/usecases/session"
4
+ import type { ReceiptRefusal, ReceiptResult } from "./types.ts"
5
+
6
+ export function receiptedNote(
7
+ context: MemoryOperationContext,
8
+ address: MemoryAddress,
9
+ canonicalVault: string,
10
+ ): ReceiptResult {
11
+ const read = context.session.getReceipt(context.stamp, address)
12
+ if (!read) {
13
+ return refuse("not-read", `${address.path} was not read with memory_get in this session`)
14
+ }
15
+ if (read.canonicalVault !== canonicalVault) {
16
+ return refuse("stale-vault", `the vault registered for ${address.vault} changed since ${address.path} was read`)
17
+ }
18
+ if (read.archived) {
19
+ return refuse("archived", `${address.path} is archived and archived notes are not changed`)
20
+ }
21
+ const note = noteOf(read)
22
+ if (!note) {
23
+ return refuse("needs-fixing", `${address.path} has no valid frontmatter`)
24
+ }
25
+ return { succeeded: true, output: { read, note, folder: folderOf(read.path) } }
26
+ }
27
+
28
+ function noteOf(read: DeliveredRead): Note | null {
29
+ const { analysis } = read
30
+ if (!analysis.frontmatter) return null
31
+ return { statement: analysis.parsed.statement, frontmatter: analysis.frontmatter, body: analysis.parsed.body }
32
+ }
33
+
34
+ function folderOf(path: string): string {
35
+ return path.slice(0, Math.max(0, path.lastIndexOf("/")))
36
+ }
37
+
38
+ function refuse(reason: ReceiptRefusal["reason"], problem: string): ReceiptRefusal {
39
+ return { succeeded: false, reason, problems: [problem] }
40
+ }
@@ -0,0 +1,44 @@
1
+ import type { NoProjectRefusal, Note, PartialRelocation } from "#src/services"
2
+ import type { Failed, Succeeded } from "#src/shared"
3
+ import type { MemoryOperationContext } from "#src/usecases/operation-context"
4
+ import type { MemoryResolutionRefusal, ResolvedVault } from "#src/usecases/resolve-memory"
5
+ import type { DeliveredRead } from "#src/usecases/session"
6
+
7
+ export interface ReceiptedNote {
8
+ read: DeliveredRead
9
+ note: Note
10
+ folder: string
11
+ }
12
+
13
+ export interface ReceiptRefusal extends Failed {
14
+ reason: "not-read" | "stale-vault" | "needs-fixing" | "archived"
15
+ }
16
+
17
+ export type ReceiptResult = Succeeded<ReceiptedNote> | ReceiptRefusal
18
+
19
+ export interface PartialMemoryChange extends Failed {
20
+ reason: "partial"
21
+ published: string[]
22
+ originalState: PartialRelocation["originalState"]
23
+ }
24
+
25
+ export interface LeasedChange {
26
+ target: ResolvedVault
27
+ context: MemoryOperationContext
28
+ receipted: ReceiptedNote
29
+ }
30
+
31
+ export interface ChangeOutcomeFailure {
32
+ succeeded: false
33
+ reason: string
34
+ }
35
+
36
+ export interface ChangeOutcomeSuccess {
37
+ succeeded: true
38
+ }
39
+
40
+ export type ChangeOutcome = ChangeOutcomeSuccess | ChangeOutcomeFailure
41
+
42
+ export type ApplyChange<Result extends ChangeOutcome> = (change: LeasedChange) => Promise<Result>
43
+
44
+ export type ChangeRefusal = MemoryResolutionRefusal | NoProjectRefusal | ReceiptRefusal
@@ -0,0 +1,37 @@
1
+ import type { MemoryOperationContext, MemoryOperationRefusal } from "./types.ts"
2
+
3
+ export function captureMemoryOperationContext(context: MemoryOperationContext): MemoryOperationContext {
4
+ const captured: MemoryOperationContext = {
5
+ configPath: context.configPath,
6
+ workingFolder: context.workingFolder,
7
+ indexPath: context.indexPath,
8
+ platform: context.platform,
9
+ session: context.session,
10
+ stamp: context.stamp,
11
+ signal: context.signal,
12
+ }
13
+ if (context.semantic) captured.semantic = context.semantic
14
+ return captured
15
+ }
16
+
17
+ export function memoryOperationInterruption(context: MemoryOperationContext): MemoryOperationRefusal | null {
18
+ if (!context.session.isCurrent(context.stamp)) return staleMemorySession()
19
+ if (context.signal.aborted) {
20
+ return { succeeded: false, reason: "cancelled", problems: ["Memory read cancelled; retry with a live signal"] }
21
+ }
22
+ return null
23
+ }
24
+
25
+ export function staleMemorySession(): MemoryOperationRefusal {
26
+ return {
27
+ succeeded: false,
28
+ reason: "stale-session",
29
+ problems: ["Memory session or configuration changed; retry with a fresh session stamp"],
30
+ }
31
+ }
32
+
33
+ export function memoryAdmissionRefusal(context: MemoryOperationContext): MemoryOperationRefusal {
34
+ const interrupted = memoryOperationInterruption(context)
35
+ if (interrupted) return interrupted
36
+ return { succeeded: false, reason: "admission-refused", problems: ["Memory session is not accepting operations"] }
37
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./context.ts"
2
+ export * from "./types.ts"
@@ -0,0 +1,19 @@
1
+ import type { PathPlatform } from "#src/services"
2
+ import type { Failed } from "#src/shared"
3
+ import type { SemanticSource } from "#src/usecases/semantic-port"
4
+ import type { MemorySession, OperationStamp } from "#src/usecases/session"
5
+
6
+ export interface MemoryOperationContext {
7
+ configPath: string
8
+ workingFolder: string
9
+ indexPath: string
10
+ platform: PathPlatform
11
+ session: MemorySession
12
+ stamp: OperationStamp
13
+ signal: AbortSignal
14
+ semantic?: SemanticSource
15
+ }
16
+
17
+ export interface MemoryOperationRefusal extends Failed {
18
+ reason: "cancelled" | "stale-session" | "admission-refused"
19
+ }
@@ -0,0 +1,6 @@
1
+ import { type ReadConfigResult, readConfig } from "#src/services"
2
+ import type { MemoryContext } from "#src/usecases/add-memory"
3
+
4
+ export function checkMemoryConfig(context: MemoryContext): Promise<ReadConfigResult> {
5
+ return readConfig(context.configPath, context.platform)
6
+ }
@@ -0,0 +1,33 @@
1
+ import type { ChatModelReference, RegistrationContext, SetupCommitCaptureResult, SetupCommitRequest } from "./types.ts"
2
+
3
+ export function captureRegistrationContext(context: RegistrationContext): RegistrationContext {
4
+ return {
5
+ configPath: context.configPath,
6
+ workingFolder: context.workingFolder,
7
+ indexPath: context.indexPath,
8
+ platform: context.platform,
9
+ session: context.session,
10
+ stamp: context.stamp,
11
+ signal: context.signal,
12
+ }
13
+ }
14
+
15
+ export function captureSelectedModel(model: ChatModelReference | null): ChatModelReference | null {
16
+ if (!model) return null
17
+ return { ...model }
18
+ }
19
+
20
+ export function captureSetupCommit(request: SetupCommitRequest): SetupCommitCaptureResult {
21
+ try {
22
+ return {
23
+ succeeded: true,
24
+ output: {
25
+ config: structuredClone(request.config),
26
+ expectedHash: request.expectedHash,
27
+ replacementConfirmed: request.replacementConfirmed,
28
+ },
29
+ }
30
+ } catch (error) {
31
+ return { succeeded: false, problems: [`setup config could not be captured: ${String(error)}`] }
32
+ }
33
+ }
@@ -0,0 +1,8 @@
1
+ export * from "./check.ts"
2
+ export * from "./entry.ts"
3
+ export * from "./init.ts"
4
+ export * from "./prepare.ts"
5
+ export * from "./prepare-init.ts"
6
+ export * from "./propose.ts"
7
+ export * from "./setup.ts"
8
+ export * from "./types.ts"