pi-obsidian-memory 0.0.1 → 0.1.1

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 +237 -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,239 @@
1
+ import type { Static, TSchema } from "typebox"
2
+
3
+ import type { CaptureCadenceSettings } from "#src/domain/capture"
4
+ import type { Absent, Failed, Succeeded } from "#src/shared"
5
+ import type {
6
+ CaptureWhenSchema,
7
+ ChatModelReferenceSchema,
8
+ ConfigFieldObservationSchema,
9
+ MemoryConfigSchema,
10
+ ProjectEntrySchema,
11
+ } from "./schemas.ts"
12
+
13
+ export type MemoryConfig = Static<typeof MemoryConfigSchema>
14
+
15
+ export type ProjectEntry = Static<typeof ProjectEntrySchema>
16
+
17
+ export type LegacyCaptureWhen = Static<typeof CaptureWhenSchema>
18
+
19
+ export type ParseConfigResult = Succeeded<MemoryConfig> | Failed
20
+
21
+ export type ConfigFieldObservation = Static<typeof ConfigFieldObservationSchema>
22
+
23
+ export interface ConfigObservationRule {
24
+ field: ConfigFieldObservation["field"]
25
+ index: number
26
+ path: string
27
+ }
28
+
29
+ export interface ConfigDocumentInspection {
30
+ config: Succeeded<MemoryConfig> | Absent
31
+ observations: ConfigFieldObservation[]
32
+ projectCount: number
33
+ shapeProblems: string[]
34
+ invalidTokenOrder: boolean
35
+ }
36
+
37
+ export interface ConfigJsonInspection extends ConfigDocumentInspection {
38
+ validJson: true
39
+ }
40
+
41
+ export interface ConfigSyntaxFailure {
42
+ validJson: false
43
+ message: string
44
+ }
45
+
46
+ export type ConfigInspection = ConfigJsonInspection | ConfigSyntaxFailure
47
+
48
+ export interface ConfigAssessment {
49
+ lexicalParse: ParseConfigResult
50
+ repair: ConfigRepairDraft
51
+ }
52
+
53
+ export type ResolveProjectResult = Succeeded<ProjectEntry> | Absent
54
+
55
+ export type ChatModelReference = Static<typeof ChatModelReferenceSchema>
56
+
57
+ export interface ConfigObjectRule {
58
+ kind: "object"
59
+ path: string
60
+ keys: string[]
61
+ required: string[]
62
+ }
63
+
64
+ export interface ConfigValueRule {
65
+ kind: "value"
66
+ path: string
67
+ schema: TSchema
68
+ }
69
+
70
+ export type ConfigFieldRule = ConfigObjectRule | ConfigValueRule
71
+
72
+ export interface ConfigRuleSelection {
73
+ projectCount: number
74
+ embeddings: string | null
75
+ decisionModel: string | null
76
+ }
77
+
78
+ export interface ConfigRegistrations {
79
+ global: Partial<MemoryConfig["global"]>
80
+ projects: Partial<ProjectEntry>[]
81
+ }
82
+
83
+ export interface CaptureFields extends Partial<CaptureCadenceSettings> {
84
+ model: Partial<ChatModelReference>
85
+ }
86
+
87
+ export interface MemoryAgentFields {
88
+ model: Partial<ChatModelReference>
89
+ }
90
+
91
+ export interface EmbeddingFields {
92
+ provider?: MemoryConfig["embeddings"]["provider"]
93
+ model?: MemoryConfig["embeddings"]["model"]
94
+ }
95
+
96
+ export interface DecisionFields {
97
+ provider?: MemoryConfig["decisionModel"]["provider"]
98
+ model?: MemoryConfig["decisionModel"]["model"]
99
+ endpoint?: string
100
+ maxTokens?: number
101
+ headMaxTokens?: number
102
+ gateThreshold?: number
103
+ relevanceThreshold?: number
104
+ }
105
+
106
+ export interface ConfigFields extends ConfigRegistrations {
107
+ limits: Partial<MemoryConfig["limits"]>
108
+ capture: CaptureFields
109
+ memoryAgent: MemoryAgentFields
110
+ context: Partial<MemoryConfig["context"]>
111
+ embeddings: EmbeddingFields
112
+ decisionModel: DecisionFields
113
+ }
114
+
115
+ export interface ConfigRepairDraft extends ConfigFields {
116
+ limits: MemoryConfig["limits"]
117
+ replacementRequired: boolean
118
+ problems: string[]
119
+ }
120
+
121
+ export interface SetupProposal {
122
+ config: ConfigFields
123
+ vault: string
124
+ }
125
+
126
+ export interface InitProposal {
127
+ config: MemoryConfig
128
+ folder: string
129
+ name: string
130
+ vault: string
131
+ }
132
+
133
+ export interface ConfigLocationPaths {
134
+ config: ConfigRegistrations
135
+ configPath: string
136
+ }
137
+
138
+ export interface ConfigInfrastructure extends ConfigLocationPaths {
139
+ indexPath: string
140
+ }
141
+
142
+ export interface VaultRegistration {
143
+ field: string
144
+ path: string
145
+ }
146
+
147
+ export type SetupDisclosure = "chat-models" | "jev" | "remote-embeddings"
148
+
149
+ export interface CaptureModelChange {
150
+ kind: "captureModel"
151
+ model: ChatModelReference
152
+ }
153
+
154
+ export interface AgentModelChange {
155
+ kind: "agentModel"
156
+ model: ChatModelReference
157
+ }
158
+
159
+ export interface CaptureCountChange {
160
+ kind: "captureCount"
161
+ name: "nudgeInterval" | "nudgeToolCalls" | "flushMinTurns"
162
+ value: number
163
+ }
164
+
165
+ export interface CaptureSwitchChange {
166
+ kind: "captureSwitch"
167
+ name: "reviewEnabled" | "flushOnCompact" | "flushOnShutdown"
168
+ value: boolean
169
+ }
170
+
171
+ export interface EmbeddingsChange {
172
+ kind: "embeddings"
173
+ embeddings: MemoryConfig["embeddings"]
174
+ }
175
+
176
+ export interface JevDecisionChange {
177
+ kind: "decision"
178
+ provider: "typesafe"
179
+ }
180
+
181
+ export interface LayaDecisionChange {
182
+ kind: "decision"
183
+ provider: "laya"
184
+ endpoint: string
185
+ }
186
+
187
+ export interface ThresholdChange {
188
+ kind: "gateThreshold" | "relevanceThreshold"
189
+ value: number | null
190
+ }
191
+
192
+ export interface BudgetChange {
193
+ kind: "budgetChars"
194
+ value: number
195
+ }
196
+
197
+ export interface LimitChange {
198
+ kind: "limit"
199
+ name: keyof MemoryConfig["limits"]
200
+ value: number
201
+ }
202
+
203
+ export interface ProjectVaultChange {
204
+ kind: "projectVault"
205
+ name: string
206
+ vault: string
207
+ }
208
+
209
+ export interface RemoveProjectChange {
210
+ kind: "removeProject"
211
+ name: string
212
+ }
213
+
214
+ export type DecisionChange = JevDecisionChange | LayaDecisionChange
215
+
216
+ export type SettingChange =
217
+ | CaptureModelChange
218
+ | AgentModelChange
219
+ | CaptureCountChange
220
+ | CaptureSwitchChange
221
+ | EmbeddingsChange
222
+ | DecisionChange
223
+ | ThresholdChange
224
+ | BudgetChange
225
+ | LimitChange
226
+ | ProjectVaultChange
227
+ | RemoveProjectChange
228
+
229
+ export type SettingNumberKind = "threshold" | "count"
230
+
231
+ export interface ConfigCandidate extends Omit<MemoryConfig, "decisionModel"> {
232
+ decisionModel: DecisionFields
233
+ }
234
+
235
+ export type NextConfig = Succeeded<ConfigCandidate> | Failed
236
+
237
+ export type SettingNumberResult = Succeeded<number> | Failed
238
+
239
+ export type ProjectReplacement = (project: ProjectEntry) => ProjectEntry | null
@@ -0,0 +1,7 @@
1
+ import type { DecisionCutoffs, DecisionProvider } from "./types.ts"
2
+
3
+ export const DEFAULT_CUTOFFS = new Map<DecisionProvider, Partial<DecisionCutoffs>>([
4
+ ["typesafe", { gate: 0.5, relevance: 0.5 }],
5
+ ])
6
+
7
+ export const MAX_FAILURE_DETAIL_CHARS = 500
@@ -0,0 +1,8 @@
1
+ import { DEFAULT_CUTOFFS } from "./constants.ts"
2
+ import type { DecisionCutoffs, DecisionProvider } from "./types.ts"
3
+
4
+ export function defaultCutoffs(provider: DecisionProvider): Partial<DecisionCutoffs> {
5
+ const cutoffs = DEFAULT_CUTOFFS.get(provider)
6
+ if (cutoffs) return cutoffs
7
+ return {}
8
+ }
@@ -0,0 +1,11 @@
1
+ export function isLoopbackEndpoint(endpoint: string): boolean {
2
+ try {
3
+ const url = new URL(endpoint)
4
+ if (url.protocol !== "http:" && url.protocol !== "https:") return false
5
+ if (url.username || url.password || url.search || url.hash) return false
6
+ if (url.pathname !== "/v1/systemone") return false
7
+ return url.hostname === "127.0.0.1" || url.hostname === "[::1]"
8
+ } catch {
9
+ return false
10
+ }
11
+ }
@@ -0,0 +1,8 @@
1
+ import { MAX_FAILURE_DETAIL_CHARS } from "./constants.ts"
2
+
3
+ export function boundedFailureDetail(detail: string): string {
4
+ if (detail.length <= MAX_FAILURE_DETAIL_CHARS) return detail
5
+ const last = detail.charCodeAt(MAX_FAILURE_DETAIL_CHARS - 1)
6
+ if (last >= 0xd800 && last <= 0xdbff) return detail.slice(0, MAX_FAILURE_DETAIL_CHARS - 1)
7
+ return detail.slice(0, MAX_FAILURE_DETAIL_CHARS)
8
+ }
@@ -0,0 +1,6 @@
1
+ export * from "./constants.ts"
2
+ export * from "./cutoffs.ts"
3
+ export * from "./endpoint.ts"
4
+ export * from "./failure-detail.ts"
5
+ export * from "./rank.ts"
6
+ export * from "./types.ts"
@@ -0,0 +1,36 @@
1
+ import type { CandidateScore } from "./types.ts"
2
+
3
+ function validateProbability(probability: number): void {
4
+ if (!Number.isFinite(probability) || probability < 0 || probability > 1) {
5
+ throw new RangeError("Decision probability must be finite and between 0 and 1")
6
+ }
7
+ }
8
+
9
+ function validateCutoff(cutoff: number): void {
10
+ if (!Number.isFinite(cutoff) || cutoff < 0 || cutoff > 1) {
11
+ throw new RangeError("Decision cutoff must be finite and between 0 and 1")
12
+ }
13
+ }
14
+
15
+ export function shouldRetrieveMemory(probability: number, cutoff: number): boolean {
16
+ validateProbability(probability)
17
+ validateCutoff(cutoff)
18
+ return probability > cutoff
19
+ }
20
+
21
+ function compareScores(left: CandidateScore, right: CandidateScore): number {
22
+ const probabilityOrder = right.probability - left.probability
23
+ if (probabilityOrder !== 0) return probabilityOrder
24
+
25
+ for (const field of ["vault", "id", "revision"] as const) {
26
+ if (left.identity[field] < right.identity[field]) return -1
27
+ if (left.identity[field] > right.identity[field]) return 1
28
+ }
29
+ return 0
30
+ }
31
+
32
+ export function rankCandidates(scores: readonly CandidateScore[], cutoff: number): CandidateScore[] {
33
+ validateCutoff(cutoff)
34
+ for (const score of scores) validateProbability(score.probability)
35
+ return scores.filter((score) => score.probability >= cutoff).sort(compareScores)
36
+ }
@@ -0,0 +1,77 @@
1
+ export interface CandidateIdentity {
2
+ vault: "global" | "project"
3
+ id: string
4
+ revision: string
5
+ }
6
+
7
+ export interface DecisionRequest {
8
+ message: string
9
+ project: string | null
10
+ folder: string
11
+ }
12
+
13
+ export interface CandidateContent {
14
+ statement: string
15
+ body: string
16
+ }
17
+
18
+ export interface CandidateDecisionRequest {
19
+ message: string
20
+ identity: CandidateIdentity
21
+ candidate: CandidateContent
22
+ }
23
+
24
+ export interface CandidateScore {
25
+ identity: CandidateIdentity
26
+ probability: number
27
+ }
28
+
29
+ export interface DecisionUsage {
30
+ inputTokens: number
31
+ outputTokens: number
32
+ }
33
+
34
+ export interface DecisionDiagnostics {
35
+ provider: "laya" | "typesafe"
36
+ requestedModel: string
37
+ reportedModel: string | null
38
+ usage: DecisionUsage | null
39
+ }
40
+
41
+ export interface RelevanceDecision {
42
+ probability: number
43
+ diagnostics: DecisionDiagnostics
44
+ }
45
+
46
+ export type DecisionFailureCode =
47
+ | "unsafe-endpoint"
48
+ | "invalid-settings"
49
+ | "unavailable"
50
+ | "http-error"
51
+ | "invalid-response"
52
+ | "routing-missing"
53
+ | "truncated"
54
+ | "collapsed-options"
55
+ | "aborted"
56
+
57
+ export interface DecisionFailure {
58
+ succeeded: false
59
+ code: DecisionFailureCode
60
+ diagnostics: DecisionDiagnostics
61
+ httpStatus?: number
62
+ detail?: string
63
+ }
64
+
65
+ export interface DecisionSuccess {
66
+ succeeded: true
67
+ output: RelevanceDecision
68
+ }
69
+
70
+ export type DecisionResult = DecisionSuccess | DecisionFailure
71
+
72
+ export type DecisionProvider = DecisionDiagnostics["provider"]
73
+
74
+ export interface DecisionCutoffs {
75
+ gate: number
76
+ relevance: number
77
+ }
@@ -0,0 +1,55 @@
1
+ import type { EmbeddingConfiguration, EmbeddingPolicy, MinimumSimilarities } from "./types.ts"
2
+
3
+ export const localEmbeddingConfiguration = {
4
+ provider: "local",
5
+ model: "Xenova/multilingual-e5-small",
6
+ } as const satisfies EmbeddingConfiguration
7
+
8
+ export const openAIEmbeddingConfiguration = {
9
+ provider: "openai",
10
+ model: "text-embedding-3-small",
11
+ } as const satisfies EmbeddingConfiguration
12
+
13
+ export const googleEmbeddingConfiguration = {
14
+ provider: "google",
15
+ model: "gemini-embedding-001",
16
+ } as const satisfies EmbeddingConfiguration
17
+
18
+ export const localEmbeddingPolicy = {
19
+ revision: "761b726dd34fb83930e26aab4e9ac3899aa1fa78",
20
+ dimensions: 384,
21
+ dtype: "cpu-q8-transformers-4.3.1",
22
+ pooling: "mean",
23
+ normalization: "l2",
24
+ queryPrefix: "query: ",
25
+ documentPrefix: "passage: ",
26
+ chunking: "v1-token-aware-512-special-prefix-inclusive-overlap32-mean-chunks-query-refuse",
27
+ } as const satisfies EmbeddingPolicy
28
+
29
+ export const openAIEmbeddingPolicy = {
30
+ revision: "provider-managed",
31
+ dimensions: 1536,
32
+ dtype: "float",
33
+ pooling: "provider",
34
+ normalization: "l2",
35
+ queryPrefix: "",
36
+ documentPrefix: "",
37
+ chunking: "v1-utf8-bytes4096-overlap128-mean-chunks-query-refuse",
38
+ } as const satisfies EmbeddingPolicy
39
+
40
+ export const googleEmbeddingPolicy = {
41
+ revision: "provider-managed",
42
+ dimensions: 768,
43
+ dtype: "float",
44
+ pooling: "provider",
45
+ normalization: "l2",
46
+ queryPrefix: "RETRIEVAL_QUERY",
47
+ documentPrefix: "RETRIEVAL_DOCUMENT",
48
+ chunking: "v1-utf8-bytes1024-overlap128-mean-chunks-query-refuse-autoTruncate-false",
49
+ } as const satisfies EmbeddingPolicy
50
+
51
+ export const MINIMUM_SIMILARITY = {
52
+ local: 0.8,
53
+ openai: null,
54
+ google: null,
55
+ } as const satisfies MinimumSimilarities
@@ -0,0 +1,30 @@
1
+ import { googleEmbeddingPolicy, localEmbeddingPolicy, openAIEmbeddingPolicy } from "./constants.ts"
2
+ import type { EmbeddingConfiguration, EmbeddingPolicy } from "./types.ts"
3
+
4
+ export function embeddingPolicy(configuration: EmbeddingConfiguration): EmbeddingPolicy {
5
+ switch (configuration.provider) {
6
+ case "local":
7
+ return localEmbeddingPolicy
8
+ case "openai":
9
+ return openAIEmbeddingPolicy
10
+ case "google":
11
+ return googleEmbeddingPolicy
12
+ }
13
+ }
14
+
15
+ export function embeddingFingerprint(configuration: EmbeddingConfiguration): string {
16
+ const policy = embeddingPolicy(configuration)
17
+ return JSON.stringify([
18
+ "embeddings-v1",
19
+ configuration.provider,
20
+ configuration.model,
21
+ policy.revision,
22
+ policy.dimensions,
23
+ policy.dtype,
24
+ policy.pooling,
25
+ policy.normalization,
26
+ policy.queryPrefix,
27
+ policy.documentPrefix,
28
+ policy.chunking,
29
+ ])
30
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./constants.ts"
2
+ export * from "./identity.ts"
3
+ export * from "./schemas.ts"
4
+ export * from "./types.ts"
5
+ export * from "./vectors.ts"
@@ -0,0 +1,25 @@
1
+ import Type from "typebox"
2
+
3
+ export const EmbeddingConfigurationSchema = Type.Union([
4
+ Type.Object(
5
+ {
6
+ provider: Type.Literal("local"),
7
+ model: Type.Literal("Xenova/multilingual-e5-small"),
8
+ },
9
+ { additionalProperties: false },
10
+ ),
11
+ Type.Object(
12
+ {
13
+ provider: Type.Literal("openai"),
14
+ model: Type.Literal("text-embedding-3-small"),
15
+ },
16
+ { additionalProperties: false },
17
+ ),
18
+ Type.Object(
19
+ {
20
+ provider: Type.Literal("google"),
21
+ model: Type.Literal("gemini-embedding-001"),
22
+ },
23
+ { additionalProperties: false },
24
+ ),
25
+ ])
@@ -0,0 +1,52 @@
1
+ import type { Static } from "typebox"
2
+
3
+ import type { Succeeded } from "#src/shared"
4
+ import type { EmbeddingConfigurationSchema } from "./schemas.ts"
5
+
6
+ export type EmbeddingConfiguration = Static<typeof EmbeddingConfigurationSchema>
7
+
8
+ export interface EmbeddingInput {
9
+ key: string
10
+ text: string
11
+ }
12
+
13
+ export interface EmbeddingBatchRequest {
14
+ purpose: "query" | "document"
15
+ inputs: readonly EmbeddingInput[]
16
+ }
17
+
18
+ export interface EmbeddedInput {
19
+ key: string
20
+ vector: readonly number[]
21
+ }
22
+
23
+ export interface EmbeddingBatch {
24
+ fingerprint: string
25
+ dimensions: number
26
+ items: readonly EmbeddedInput[]
27
+ }
28
+
29
+ export type EmbeddingFailureStatus = "unavailable" | "input-too-long" | "invalid-input" | "invalid-response" | "aborted"
30
+
31
+ export interface EmbeddingFailure {
32
+ succeeded: false
33
+ status: EmbeddingFailureStatus
34
+ cleanupFailed?: true
35
+ }
36
+
37
+ export type EmbeddingResult = Succeeded<EmbeddingBatch> | EmbeddingFailure
38
+
39
+ export interface EmbeddingPolicy {
40
+ revision: string
41
+ dimensions: number
42
+ dtype: string
43
+ pooling: string
44
+ normalization: "l2"
45
+ queryPrefix: string
46
+ documentPrefix: string
47
+ chunking: string
48
+ }
49
+
50
+ export type EmbeddingProvider = EmbeddingConfiguration["provider"]
51
+
52
+ export type MinimumSimilarities = Record<EmbeddingProvider, number | null>
@@ -0,0 +1,53 @@
1
+ export function normalizeVector(values: readonly number[], dimensions: number): number[] | null {
2
+ if (values.length !== dimensions || dimensions < 1 || values.some((value) => !Number.isFinite(value))) {
3
+ return null
4
+ }
5
+
6
+ const scale = values.reduce((largest, value) => Math.max(largest, Math.abs(value)), 0)
7
+ if (scale === 0) {
8
+ return null
9
+ }
10
+
11
+ const scaled = values.map((value) => value / scale)
12
+ const norm = Math.sqrt(scaled.reduce((sum, value) => sum + value * value, 0))
13
+ return scaled.map((value) => value / norm)
14
+ }
15
+
16
+ export function aggregateVectors(vectors: readonly (readonly number[])[], dimensions: number): number[] | null {
17
+ if (vectors.length === 0) {
18
+ return null
19
+ }
20
+
21
+ const sum = Array<number>(dimensions).fill(0)
22
+ for (const values of vectors) {
23
+ const vector = normalizeVector(values, dimensions)
24
+ if (!vector) {
25
+ return null
26
+ }
27
+ for (const [index, value] of vector.entries()) {
28
+ const previous = sum[index]
29
+ if (typeof previous !== "number") {
30
+ return null
31
+ }
32
+ sum[index] = previous + value / vectors.length
33
+ }
34
+ }
35
+ return normalizeVector(sum, dimensions)
36
+ }
37
+
38
+ export function cosine(left: readonly number[], right: readonly number[]): number {
39
+ if (left.length !== right.length) throw new RangeError("Vectors must have the same dimensions")
40
+
41
+ let dot = 0
42
+ let leftNorm = 0
43
+ let rightNorm = 0
44
+ for (const [index, value] of left.entries()) {
45
+ const other = right[index]
46
+ if (typeof other !== "number") throw new RangeError("Vectors must have the same dimensions")
47
+ dot += value * other
48
+ leftNorm += value * value
49
+ rightNorm += other * other
50
+ }
51
+ if (leftNorm === 0 || rightNorm === 0) throw new RangeError("Vectors must be nonzero")
52
+ return dot / Math.sqrt(leftNorm * rightNorm)
53
+ }
@@ -0,0 +1,9 @@
1
+ export const NOTE_LINE_SEPARATOR = " · "
2
+
3
+ export const PROBLEM_SEPARATOR = "; "
4
+
5
+ export const DONT_FORGET_LABEL = "don't forget"
6
+
7
+ export const INDEX_TEXT_COLLATOR = new Intl.Collator("en", { sensitivity: "base" })
8
+
9
+ export const FOLDER_INDEX_FORMAT = 1
@@ -0,0 +1,22 @@
1
+ export function displayIndexText(text: string): string {
2
+ if (/[<>[\]`]/.test(text)) {
3
+ return displayIndexName(text)
4
+ }
5
+
6
+ return text
7
+ }
8
+
9
+ export function displayIndexName(name: string): string {
10
+ if (name.length === 0) {
11
+ return "<code></code>"
12
+ }
13
+
14
+ const runs = [...name.matchAll(/`+/g)].map((match) => match[0].length)
15
+ const fence = "`".repeat(Math.max(0, ...runs) + 1)
16
+ const mixedEdgeSpaces = name.startsWith(" ") && name.endsWith(" ") && /[^ ]/.test(name)
17
+ if (name.startsWith("`") || name.endsWith("`") || mixedEdgeSpaces) {
18
+ return `${fence} ${name} ${fence}`
19
+ }
20
+
21
+ return `${fence}${name}${fence}`
22
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./constants.ts"
2
+ export * from "./display.ts"
3
+ export * from "./listing.ts"
4
+ export * from "./render.ts"
5
+ export * from "./types.ts"