memkin 0.4.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 (914) hide show
  1. package/LICENSE +191 -0
  2. package/README.en.md +934 -0
  3. package/README.md +934 -0
  4. package/README.zh-CN.md +825 -0
  5. package/bin/memkin.mjs +41 -0
  6. package/dist/adapters/file.d.ts +19 -0
  7. package/dist/adapters/file.d.ts.map +1 -0
  8. package/dist/adapters/file.js +61 -0
  9. package/dist/adapters/file.js.map +1 -0
  10. package/dist/adapters/gbrain.d.ts +29 -0
  11. package/dist/adapters/gbrain.d.ts.map +1 -0
  12. package/dist/adapters/gbrain.js +622 -0
  13. package/dist/adapters/gbrain.js.map +1 -0
  14. package/dist/adapters/index.d.ts +6 -0
  15. package/dist/adapters/index.d.ts.map +1 -0
  16. package/dist/adapters/index.js +5 -0
  17. package/dist/adapters/index.js.map +1 -0
  18. package/dist/adapters/registry.d.ts +18 -0
  19. package/dist/adapters/registry.d.ts.map +1 -0
  20. package/dist/adapters/registry.js +18 -0
  21. package/dist/adapters/registry.js.map +1 -0
  22. package/dist/adapters/stdout.d.ts +12 -0
  23. package/dist/adapters/stdout.d.ts.map +1 -0
  24. package/dist/adapters/stdout.js +29 -0
  25. package/dist/adapters/stdout.js.map +1 -0
  26. package/dist/adapters/store.d.ts +47 -0
  27. package/dist/adapters/store.d.ts.map +1 -0
  28. package/dist/adapters/store.js +642 -0
  29. package/dist/adapters/store.js.map +1 -0
  30. package/dist/cli-helpers.d.ts +12 -0
  31. package/dist/cli-helpers.d.ts.map +1 -0
  32. package/dist/cli-helpers.js +11 -0
  33. package/dist/cli-helpers.js.map +1 -0
  34. package/dist/cli-stores.d.ts +61 -0
  35. package/dist/cli-stores.d.ts.map +1 -0
  36. package/dist/cli-stores.js +130 -0
  37. package/dist/cli-stores.js.map +1 -0
  38. package/dist/cli.d.ts +2 -0
  39. package/dist/cli.d.ts.map +1 -0
  40. package/dist/cli.js +1579 -0
  41. package/dist/cli.js.map +1 -0
  42. package/dist/collectors/agent/claude-code.d.ts +12 -0
  43. package/dist/collectors/agent/claude-code.d.ts.map +1 -0
  44. package/dist/collectors/agent/claude-code.js +94 -0
  45. package/dist/collectors/agent/claude-code.js.map +1 -0
  46. package/dist/collectors/agent/codex.d.ts +16 -0
  47. package/dist/collectors/agent/codex.d.ts.map +1 -0
  48. package/dist/collectors/agent/codex.js +149 -0
  49. package/dist/collectors/agent/codex.js.map +1 -0
  50. package/dist/collectors/agent/collector.d.ts +20 -0
  51. package/dist/collectors/agent/collector.d.ts.map +1 -0
  52. package/dist/collectors/agent/collector.js +108 -0
  53. package/dist/collectors/agent/collector.js.map +1 -0
  54. package/dist/collectors/agent/hermes.d.ts +13 -0
  55. package/dist/collectors/agent/hermes.d.ts.map +1 -0
  56. package/dist/collectors/agent/hermes.js +90 -0
  57. package/dist/collectors/agent/hermes.js.map +1 -0
  58. package/dist/collectors/agent/index.d.ts +6 -0
  59. package/dist/collectors/agent/index.d.ts.map +1 -0
  60. package/dist/collectors/agent/index.js +5 -0
  61. package/dist/collectors/agent/index.js.map +1 -0
  62. package/dist/collectors/agent/types.d.ts +61 -0
  63. package/dist/collectors/agent/types.d.ts.map +1 -0
  64. package/dist/collectors/agent/types.js +6 -0
  65. package/dist/collectors/agent/types.js.map +1 -0
  66. package/dist/collectors/feishu/auth.d.ts +13 -0
  67. package/dist/collectors/feishu/auth.d.ts.map +1 -0
  68. package/dist/collectors/feishu/auth.js +72 -0
  69. package/dist/collectors/feishu/auth.js.map +1 -0
  70. package/dist/collectors/feishu/chat-name-resolver.d.ts +33 -0
  71. package/dist/collectors/feishu/chat-name-resolver.d.ts.map +1 -0
  72. package/dist/collectors/feishu/chat-name-resolver.js +63 -0
  73. package/dist/collectors/feishu/chat-name-resolver.js.map +1 -0
  74. package/dist/collectors/feishu/collector.d.ts +27 -0
  75. package/dist/collectors/feishu/collector.d.ts.map +1 -0
  76. package/dist/collectors/feishu/collector.js +136 -0
  77. package/dist/collectors/feishu/collector.js.map +1 -0
  78. package/dist/collectors/feishu/cursor-staging.d.ts +11 -0
  79. package/dist/collectors/feishu/cursor-staging.d.ts.map +1 -0
  80. package/dist/collectors/feishu/cursor-staging.js +37 -0
  81. package/dist/collectors/feishu/cursor-staging.js.map +1 -0
  82. package/dist/collectors/feishu/docs/blocks.d.ts +25 -0
  83. package/dist/collectors/feishu/docs/blocks.d.ts.map +1 -0
  84. package/dist/collectors/feishu/docs/blocks.js +34 -0
  85. package/dist/collectors/feishu/docs/blocks.js.map +1 -0
  86. package/dist/collectors/feishu/docs/candidate.d.ts +17 -0
  87. package/dist/collectors/feishu/docs/candidate.d.ts.map +1 -0
  88. package/dist/collectors/feishu/docs/candidate.js +36 -0
  89. package/dist/collectors/feishu/docs/candidate.js.map +1 -0
  90. package/dist/collectors/feishu/docs/config.d.ts +41 -0
  91. package/dist/collectors/feishu/docs/config.d.ts.map +1 -0
  92. package/dist/collectors/feishu/docs/config.js +30 -0
  93. package/dist/collectors/feishu/docs/config.js.map +1 -0
  94. package/dist/collectors/feishu/docs/decision.d.ts +14 -0
  95. package/dist/collectors/feishu/docs/decision.d.ts.map +1 -0
  96. package/dist/collectors/feishu/docs/decision.js +43 -0
  97. package/dist/collectors/feishu/docs/decision.js.map +1 -0
  98. package/dist/collectors/feishu/docs/full-builder.d.ts +17 -0
  99. package/dist/collectors/feishu/docs/full-builder.d.ts.map +1 -0
  100. package/dist/collectors/feishu/docs/full-builder.js +136 -0
  101. package/dist/collectors/feishu/docs/full-builder.js.map +1 -0
  102. package/dist/collectors/feishu/docs/hash.d.ts +8 -0
  103. package/dist/collectors/feishu/docs/hash.d.ts.map +1 -0
  104. package/dist/collectors/feishu/docs/hash.js +15 -0
  105. package/dist/collectors/feishu/docs/hash.js.map +1 -0
  106. package/dist/collectors/feishu/docs/ingest.d.ts +54 -0
  107. package/dist/collectors/feishu/docs/ingest.d.ts.map +1 -0
  108. package/dist/collectors/feishu/docs/ingest.js +120 -0
  109. package/dist/collectors/feishu/docs/ingest.js.map +1 -0
  110. package/dist/collectors/feishu/docs/llm-json.d.ts +13 -0
  111. package/dist/collectors/feishu/docs/llm-json.d.ts.map +1 -0
  112. package/dist/collectors/feishu/docs/llm-json.js +40 -0
  113. package/dist/collectors/feishu/docs/llm-json.js.map +1 -0
  114. package/dist/collectors/feishu/docs/pointer-builder.d.ts +7 -0
  115. package/dist/collectors/feishu/docs/pointer-builder.d.ts.map +1 -0
  116. package/dist/collectors/feishu/docs/pointer-builder.js +11 -0
  117. package/dist/collectors/feishu/docs/pointer-builder.js.map +1 -0
  118. package/dist/collectors/feishu/docs/render.d.ts +8 -0
  119. package/dist/collectors/feishu/docs/render.d.ts.map +1 -0
  120. package/dist/collectors/feishu/docs/render.js +105 -0
  121. package/dist/collectors/feishu/docs/render.js.map +1 -0
  122. package/dist/collectors/feishu/docs/run.d.ts +37 -0
  123. package/dist/collectors/feishu/docs/run.d.ts.map +1 -0
  124. package/dist/collectors/feishu/docs/run.js +143 -0
  125. package/dist/collectors/feishu/docs/run.js.map +1 -0
  126. package/dist/collectors/feishu/docs/status.d.ts +16 -0
  127. package/dist/collectors/feishu/docs/status.d.ts.map +1 -0
  128. package/dist/collectors/feishu/docs/status.js +24 -0
  129. package/dist/collectors/feishu/docs/status.js.map +1 -0
  130. package/dist/collectors/feishu/docs/store-writer.d.ts +32 -0
  131. package/dist/collectors/feishu/docs/store-writer.d.ts.map +1 -0
  132. package/dist/collectors/feishu/docs/store-writer.js +71 -0
  133. package/dist/collectors/feishu/docs/store-writer.js.map +1 -0
  134. package/dist/collectors/feishu/docs/toc.d.ts +3 -0
  135. package/dist/collectors/feishu/docs/toc.d.ts.map +1 -0
  136. package/dist/collectors/feishu/docs/toc.js +19 -0
  137. package/dist/collectors/feishu/docs/toc.js.map +1 -0
  138. package/dist/collectors/feishu/docs/triggers.d.ts +7 -0
  139. package/dist/collectors/feishu/docs/triggers.d.ts.map +1 -0
  140. package/dist/collectors/feishu/docs/triggers.js +31 -0
  141. package/dist/collectors/feishu/docs/triggers.js.map +1 -0
  142. package/dist/collectors/feishu/docs/types.d.ts +109 -0
  143. package/dist/collectors/feishu/docs/types.d.ts.map +1 -0
  144. package/dist/collectors/feishu/docs/types.js +2 -0
  145. package/dist/collectors/feishu/docs/types.js.map +1 -0
  146. package/dist/collectors/feishu/docs/upgrade-queue.d.ts +19 -0
  147. package/dist/collectors/feishu/docs/upgrade-queue.d.ts.map +1 -0
  148. package/dist/collectors/feishu/docs/upgrade-queue.js +36 -0
  149. package/dist/collectors/feishu/docs/upgrade-queue.js.map +1 -0
  150. package/dist/collectors/feishu/docs/url-parser.d.ts +3 -0
  151. package/dist/collectors/feishu/docs/url-parser.d.ts.map +1 -0
  152. package/dist/collectors/feishu/docs/url-parser.js +39 -0
  153. package/dist/collectors/feishu/docs/url-parser.js.map +1 -0
  154. package/dist/collectors/feishu/docs/walkers.d.ts +24 -0
  155. package/dist/collectors/feishu/docs/walkers.d.ts.map +1 -0
  156. package/dist/collectors/feishu/docs/walkers.js +90 -0
  157. package/dist/collectors/feishu/docs/walkers.js.map +1 -0
  158. package/dist/collectors/feishu/docs/wiki-resolver.d.ts +15 -0
  159. package/dist/collectors/feishu/docs/wiki-resolver.d.ts.map +1 -0
  160. package/dist/collectors/feishu/docs/wiki-resolver.js +24 -0
  161. package/dist/collectors/feishu/docs/wiki-resolver.js.map +1 -0
  162. package/dist/collectors/feishu/http-client.d.ts +26 -0
  163. package/dist/collectors/feishu/http-client.d.ts.map +1 -0
  164. package/dist/collectors/feishu/http-client.js +94 -0
  165. package/dist/collectors/feishu/http-client.js.map +1 -0
  166. package/dist/collectors/feishu/index.d.ts +3 -0
  167. package/dist/collectors/feishu/index.d.ts.map +1 -0
  168. package/dist/collectors/feishu/index.js +2 -0
  169. package/dist/collectors/feishu/index.js.map +1 -0
  170. package/dist/collectors/feishu/lark-cli-client.d.ts +28 -0
  171. package/dist/collectors/feishu/lark-cli-client.d.ts.map +1 -0
  172. package/dist/collectors/feishu/lark-cli-client.js +104 -0
  173. package/dist/collectors/feishu/lark-cli-client.js.map +1 -0
  174. package/dist/collectors/feishu/lark-cli-identity-backend.d.ts +28 -0
  175. package/dist/collectors/feishu/lark-cli-identity-backend.d.ts.map +1 -0
  176. package/dist/collectors/feishu/lark-cli-identity-backend.js +110 -0
  177. package/dist/collectors/feishu/lark-cli-identity-backend.js.map +1 -0
  178. package/dist/collectors/feishu/rate-limiter.d.ts +10 -0
  179. package/dist/collectors/feishu/rate-limiter.d.ts.map +1 -0
  180. package/dist/collectors/feishu/rate-limiter.js +33 -0
  181. package/dist/collectors/feishu/rate-limiter.js.map +1 -0
  182. package/dist/collectors/feishu/self-open-id.d.ts +20 -0
  183. package/dist/collectors/feishu/self-open-id.d.ts.map +1 -0
  184. package/dist/collectors/feishu/self-open-id.js +31 -0
  185. package/dist/collectors/feishu/self-open-id.js.map +1 -0
  186. package/dist/collectors/feishu/sources/base.d.ts +9 -0
  187. package/dist/collectors/feishu/sources/base.d.ts.map +1 -0
  188. package/dist/collectors/feishu/sources/base.js +2 -0
  189. package/dist/collectors/feishu/sources/base.js.map +1 -0
  190. package/dist/collectors/feishu/sources/calendar.d.ts +16 -0
  191. package/dist/collectors/feishu/sources/calendar.d.ts.map +1 -0
  192. package/dist/collectors/feishu/sources/calendar.js +98 -0
  193. package/dist/collectors/feishu/sources/calendar.js.map +1 -0
  194. package/dist/collectors/feishu/sources/dm.d.ts +28 -0
  195. package/dist/collectors/feishu/sources/dm.d.ts.map +1 -0
  196. package/dist/collectors/feishu/sources/dm.js +156 -0
  197. package/dist/collectors/feishu/sources/dm.js.map +1 -0
  198. package/dist/collectors/feishu/sources/mail.d.ts +27 -0
  199. package/dist/collectors/feishu/sources/mail.d.ts.map +1 -0
  200. package/dist/collectors/feishu/sources/mail.js +149 -0
  201. package/dist/collectors/feishu/sources/mail.js.map +1 -0
  202. package/dist/collectors/feishu/sources/message-search.d.ts +37 -0
  203. package/dist/collectors/feishu/sources/message-search.d.ts.map +1 -0
  204. package/dist/collectors/feishu/sources/message-search.js +140 -0
  205. package/dist/collectors/feishu/sources/message-search.js.map +1 -0
  206. package/dist/collectors/feishu/sources/messages.d.ts +28 -0
  207. package/dist/collectors/feishu/sources/messages.d.ts.map +1 -0
  208. package/dist/collectors/feishu/sources/messages.js +175 -0
  209. package/dist/collectors/feishu/sources/messages.js.map +1 -0
  210. package/dist/collectors/feishu/sources/tasks.d.ts +15 -0
  211. package/dist/collectors/feishu/sources/tasks.d.ts.map +1 -0
  212. package/dist/collectors/feishu/sources/tasks.js +74 -0
  213. package/dist/collectors/feishu/sources/tasks.js.map +1 -0
  214. package/dist/collectors/feishu/types.d.ts +258 -0
  215. package/dist/collectors/feishu/types.d.ts.map +1 -0
  216. package/dist/collectors/feishu/types.js +17 -0
  217. package/dist/collectors/feishu/types.js.map +1 -0
  218. package/dist/collectors/index.d.ts +10 -0
  219. package/dist/collectors/index.d.ts.map +1 -0
  220. package/dist/collectors/index.js +18 -0
  221. package/dist/collectors/index.js.map +1 -0
  222. package/dist/config-center/connection-checks.d.ts +28 -0
  223. package/dist/config-center/connection-checks.d.ts.map +1 -0
  224. package/dist/config-center/connection-checks.js +114 -0
  225. package/dist/config-center/connection-checks.js.map +1 -0
  226. package/dist/config-center/document.d.ts +21 -0
  227. package/dist/config-center/document.d.ts.map +1 -0
  228. package/dist/config-center/document.js +93 -0
  229. package/dist/config-center/document.js.map +1 -0
  230. package/dist/config-center/index.d.ts +9 -0
  231. package/dist/config-center/index.d.ts.map +1 -0
  232. package/dist/config-center/index.js +29 -0
  233. package/dist/config-center/index.js.map +1 -0
  234. package/dist/config-center/recommendations.d.ts +16 -0
  235. package/dist/config-center/recommendations.d.ts.map +1 -0
  236. package/dist/config-center/recommendations.js +50 -0
  237. package/dist/config-center/recommendations.js.map +1 -0
  238. package/dist/config-center/reducer.d.ts +57 -0
  239. package/dist/config-center/reducer.d.ts.map +1 -0
  240. package/dist/config-center/reducer.js +192 -0
  241. package/dist/config-center/reducer.js.map +1 -0
  242. package/dist/config-center/schema.d.ts +31 -0
  243. package/dist/config-center/schema.d.ts.map +1 -0
  244. package/dist/config-center/schema.js +442 -0
  245. package/dist/config-center/schema.js.map +1 -0
  246. package/dist/config-center/secrets.d.ts +9 -0
  247. package/dist/config-center/secrets.d.ts.map +1 -0
  248. package/dist/config-center/secrets.js +51 -0
  249. package/dist/config-center/secrets.js.map +1 -0
  250. package/dist/config-center/source-dirs.d.ts +16 -0
  251. package/dist/config-center/source-dirs.d.ts.map +1 -0
  252. package/dist/config-center/source-dirs.js +81 -0
  253. package/dist/config-center/source-dirs.js.map +1 -0
  254. package/dist/config-center/tui/app.d.ts +22 -0
  255. package/dist/config-center/tui/app.d.ts.map +1 -0
  256. package/dist/config-center/tui/app.js +142 -0
  257. package/dist/config-center/tui/app.js.map +1 -0
  258. package/dist/config-center/tui/render.d.ts +20 -0
  259. package/dist/config-center/tui/render.d.ts.map +1 -0
  260. package/dist/config-center/tui/render.js +166 -0
  261. package/dist/config-center/tui/render.js.map +1 -0
  262. package/dist/config-center/validation.d.ts +9 -0
  263. package/dist/config-center/validation.d.ts.map +1 -0
  264. package/dist/config-center/validation.js +59 -0
  265. package/dist/config-center/validation.js.map +1 -0
  266. package/dist/consolidator/consolidator.d.ts +43 -0
  267. package/dist/consolidator/consolidator.d.ts.map +1 -0
  268. package/dist/consolidator/consolidator.js +67 -0
  269. package/dist/consolidator/consolidator.js.map +1 -0
  270. package/dist/consolidator/dead-link.d.ts +7 -0
  271. package/dist/consolidator/dead-link.d.ts.map +1 -0
  272. package/dist/consolidator/dead-link.js +57 -0
  273. package/dist/consolidator/dead-link.js.map +1 -0
  274. package/dist/consolidator/hot-warm.d.ts +9 -0
  275. package/dist/consolidator/hot-warm.d.ts.map +1 -0
  276. package/dist/consolidator/hot-warm.js +88 -0
  277. package/dist/consolidator/hot-warm.js.map +1 -0
  278. package/dist/consolidator/infer-preferences.d.ts +14 -0
  279. package/dist/consolidator/infer-preferences.d.ts.map +1 -0
  280. package/dist/consolidator/infer-preferences.js +73 -0
  281. package/dist/consolidator/infer-preferences.js.map +1 -0
  282. package/dist/consolidator/rules.d.ts +5 -0
  283. package/dist/consolidator/rules.d.ts.map +1 -0
  284. package/dist/consolidator/rules.js +53 -0
  285. package/dist/consolidator/rules.js.map +1 -0
  286. package/dist/consolidator/warm-cold.d.ts +13 -0
  287. package/dist/consolidator/warm-cold.d.ts.map +1 -0
  288. package/dist/consolidator/warm-cold.js +91 -0
  289. package/dist/consolidator/warm-cold.js.map +1 -0
  290. package/dist/core/block-builder.d.ts +15 -0
  291. package/dist/core/block-builder.d.ts.map +1 -0
  292. package/dist/core/block-builder.js +185 -0
  293. package/dist/core/block-builder.js.map +1 -0
  294. package/dist/core/canonicalize.d.ts +3 -0
  295. package/dist/core/canonicalize.d.ts.map +1 -0
  296. package/dist/core/canonicalize.js +141 -0
  297. package/dist/core/canonicalize.js.map +1 -0
  298. package/dist/core/concurrency.d.ts +2 -0
  299. package/dist/core/concurrency.d.ts.map +1 -0
  300. package/dist/core/concurrency.js +14 -0
  301. package/dist/core/concurrency.js.map +1 -0
  302. package/dist/core/config.d.ts +257 -0
  303. package/dist/core/config.d.ts.map +1 -0
  304. package/dist/core/config.js +247 -0
  305. package/dist/core/config.js.map +1 -0
  306. package/dist/core/cursors.d.ts +36 -0
  307. package/dist/core/cursors.d.ts.map +1 -0
  308. package/dist/core/cursors.js +90 -0
  309. package/dist/core/cursors.js.map +1 -0
  310. package/dist/core/dedup.d.ts +45 -0
  311. package/dist/core/dedup.d.ts.map +1 -0
  312. package/dist/core/dedup.js +111 -0
  313. package/dist/core/dedup.js.map +1 -0
  314. package/dist/core/entity-extract.d.ts +3 -0
  315. package/dist/core/entity-extract.d.ts.map +1 -0
  316. package/dist/core/entity-extract.js +54 -0
  317. package/dist/core/entity-extract.js.map +1 -0
  318. package/dist/core/env-validation.d.ts +9 -0
  319. package/dist/core/env-validation.d.ts.map +1 -0
  320. package/dist/core/env-validation.js +94 -0
  321. package/dist/core/env-validation.js.map +1 -0
  322. package/dist/core/helpers.d.ts +3 -0
  323. package/dist/core/helpers.d.ts.map +1 -0
  324. package/dist/core/helpers.js +10 -0
  325. package/dist/core/helpers.js.map +1 -0
  326. package/dist/core/identity-resolver.d.ts +42 -0
  327. package/dist/core/identity-resolver.d.ts.map +1 -0
  328. package/dist/core/identity-resolver.js +207 -0
  329. package/dist/core/identity-resolver.js.map +1 -0
  330. package/dist/core/person-identity.d.ts +140 -0
  331. package/dist/core/person-identity.d.ts.map +1 -0
  332. package/dist/core/person-identity.js +428 -0
  333. package/dist/core/person-identity.js.map +1 -0
  334. package/dist/core/person-slug.d.ts +21 -0
  335. package/dist/core/person-slug.d.ts.map +1 -0
  336. package/dist/core/person-slug.js +93 -0
  337. package/dist/core/person-slug.js.map +1 -0
  338. package/dist/core/pipeline-factory.d.ts +13 -0
  339. package/dist/core/pipeline-factory.d.ts.map +1 -0
  340. package/dist/core/pipeline-factory.js +37 -0
  341. package/dist/core/pipeline-factory.js.map +1 -0
  342. package/dist/core/pipeline.d.ts +77 -0
  343. package/dist/core/pipeline.d.ts.map +1 -0
  344. package/dist/core/pipeline.js +332 -0
  345. package/dist/core/pipeline.js.map +1 -0
  346. package/dist/core/resource-loader.d.ts +2 -0
  347. package/dist/core/resource-loader.d.ts.map +1 -0
  348. package/dist/core/resource-loader.js +12 -0
  349. package/dist/core/resource-loader.js.map +1 -0
  350. package/dist/core/schemas.d.ts +5142 -0
  351. package/dist/core/schemas.d.ts.map +1 -0
  352. package/dist/core/schemas.js +256 -0
  353. package/dist/core/schemas.js.map +1 -0
  354. package/dist/core/signal-scoring.d.ts +3 -0
  355. package/dist/core/signal-scoring.d.ts.map +1 -0
  356. package/dist/core/signal-scoring.js +128 -0
  357. package/dist/core/signal-scoring.js.map +1 -0
  358. package/dist/core/source-ref.d.ts +4 -0
  359. package/dist/core/source-ref.d.ts.map +1 -0
  360. package/dist/core/source-ref.js +24 -0
  361. package/dist/core/source-ref.js.map +1 -0
  362. package/dist/core/state.d.ts +22 -0
  363. package/dist/core/state.d.ts.map +1 -0
  364. package/dist/core/state.js +33 -0
  365. package/dist/core/state.js.map +1 -0
  366. package/dist/core/types.d.ts +266 -0
  367. package/dist/core/types.d.ts.map +1 -0
  368. package/dist/core/types.js +6 -0
  369. package/dist/core/types.js.map +1 -0
  370. package/dist/daemon/alerts.d.ts +12 -0
  371. package/dist/daemon/alerts.d.ts.map +1 -0
  372. package/dist/daemon/alerts.js +34 -0
  373. package/dist/daemon/alerts.js.map +1 -0
  374. package/dist/daemon/autostart/argv.d.ts +21 -0
  375. package/dist/daemon/autostart/argv.d.ts.map +1 -0
  376. package/dist/daemon/autostart/argv.js +37 -0
  377. package/dist/daemon/autostart/argv.js.map +1 -0
  378. package/dist/daemon/autostart/daemon-state.d.ts +19 -0
  379. package/dist/daemon/autostart/daemon-state.d.ts.map +1 -0
  380. package/dist/daemon/autostart/daemon-state.js +34 -0
  381. package/dist/daemon/autostart/daemon-state.js.map +1 -0
  382. package/dist/daemon/autostart/index.d.ts +40 -0
  383. package/dist/daemon/autostart/index.d.ts.map +1 -0
  384. package/dist/daemon/autostart/index.js +146 -0
  385. package/dist/daemon/autostart/index.js.map +1 -0
  386. package/dist/daemon/autostart/launchd.d.ts +13 -0
  387. package/dist/daemon/autostart/launchd.d.ts.map +1 -0
  388. package/dist/daemon/autostart/launchd.js +51 -0
  389. package/dist/daemon/autostart/launchd.js.map +1 -0
  390. package/dist/daemon/autostart/runner.d.ts +14 -0
  391. package/dist/daemon/autostart/runner.d.ts.map +1 -0
  392. package/dist/daemon/autostart/runner.js +30 -0
  393. package/dist/daemon/autostart/runner.js.map +1 -0
  394. package/dist/daemon/autostart/systemd.d.ts +11 -0
  395. package/dist/daemon/autostart/systemd.d.ts.map +1 -0
  396. package/dist/daemon/autostart/systemd.js +40 -0
  397. package/dist/daemon/autostart/systemd.js.map +1 -0
  398. package/dist/daemon/index.d.ts +6 -0
  399. package/dist/daemon/index.d.ts.map +1 -0
  400. package/dist/daemon/index.js +6 -0
  401. package/dist/daemon/index.js.map +1 -0
  402. package/dist/daemon/logger.d.ts +8 -0
  403. package/dist/daemon/logger.d.ts.map +1 -0
  404. package/dist/daemon/logger.js +35 -0
  405. package/dist/daemon/logger.js.map +1 -0
  406. package/dist/daemon/reload-manager.d.ts +41 -0
  407. package/dist/daemon/reload-manager.d.ts.map +1 -0
  408. package/dist/daemon/reload-manager.js +89 -0
  409. package/dist/daemon/reload-manager.js.map +1 -0
  410. package/dist/daemon/run-history.d.ts +29 -0
  411. package/dist/daemon/run-history.d.ts.map +1 -0
  412. package/dist/daemon/run-history.js +54 -0
  413. package/dist/daemon/run-history.js.map +1 -0
  414. package/dist/daemon/scheduler.d.ts +45 -0
  415. package/dist/daemon/scheduler.d.ts.map +1 -0
  416. package/dist/daemon/scheduler.js +217 -0
  417. package/dist/daemon/scheduler.js.map +1 -0
  418. package/dist/daemon/serve-runtime.d.ts +31 -0
  419. package/dist/daemon/serve-runtime.d.ts.map +1 -0
  420. package/dist/daemon/serve-runtime.js +230 -0
  421. package/dist/daemon/serve-runtime.js.map +1 -0
  422. package/dist/daemon/source-schedule.d.ts +25 -0
  423. package/dist/daemon/source-schedule.d.ts.map +1 -0
  424. package/dist/daemon/source-schedule.js +87 -0
  425. package/dist/daemon/source-schedule.js.map +1 -0
  426. package/dist/embedded-assets.generated.d.ts +4 -0
  427. package/dist/embedded-assets.generated.d.ts.map +1 -0
  428. package/dist/embedded-assets.generated.js +12 -0
  429. package/dist/embedded-assets.generated.js.map +1 -0
  430. package/dist/extractors/noise-filter.d.ts +30 -0
  431. package/dist/extractors/noise-filter.d.ts.map +1 -0
  432. package/dist/extractors/noise-filter.js +185 -0
  433. package/dist/extractors/noise-filter.js.map +1 -0
  434. package/dist/extractors/playbook-extractor.d.ts +35 -0
  435. package/dist/extractors/playbook-extractor.d.ts.map +1 -0
  436. package/dist/extractors/playbook-extractor.js +98 -0
  437. package/dist/extractors/playbook-extractor.js.map +1 -0
  438. package/dist/extractors/providers/anthropic.d.ts +13 -0
  439. package/dist/extractors/providers/anthropic.d.ts.map +1 -0
  440. package/dist/extractors/providers/anthropic.js +67 -0
  441. package/dist/extractors/providers/anthropic.js.map +1 -0
  442. package/dist/extractors/providers/index.d.ts +12 -0
  443. package/dist/extractors/providers/index.d.ts.map +1 -0
  444. package/dist/extractors/providers/index.js +41 -0
  445. package/dist/extractors/providers/index.js.map +1 -0
  446. package/dist/extractors/providers/mock.d.ts +14 -0
  447. package/dist/extractors/providers/mock.d.ts.map +1 -0
  448. package/dist/extractors/providers/mock.js +37 -0
  449. package/dist/extractors/providers/mock.js.map +1 -0
  450. package/dist/extractors/providers/openai.d.ts +15 -0
  451. package/dist/extractors/providers/openai.d.ts.map +1 -0
  452. package/dist/extractors/providers/openai.js +109 -0
  453. package/dist/extractors/providers/openai.js.map +1 -0
  454. package/dist/extractors/providers/types.d.ts +27 -0
  455. package/dist/extractors/providers/types.d.ts.map +1 -0
  456. package/dist/extractors/providers/types.js +6 -0
  457. package/dist/extractors/providers/types.js.map +1 -0
  458. package/dist/extractors/signal-extractor.d.ts +30 -0
  459. package/dist/extractors/signal-extractor.d.ts.map +1 -0
  460. package/dist/extractors/signal-extractor.js +371 -0
  461. package/dist/extractors/signal-extractor.js.map +1 -0
  462. package/dist/formatters/index.d.ts +3 -0
  463. package/dist/formatters/index.d.ts.map +1 -0
  464. package/dist/formatters/index.js +3 -0
  465. package/dist/formatters/index.js.map +1 -0
  466. package/dist/formatters/json.d.ts +6 -0
  467. package/dist/formatters/json.d.ts.map +1 -0
  468. package/dist/formatters/json.js +16 -0
  469. package/dist/formatters/json.js.map +1 -0
  470. package/dist/formatters/markdown.d.ts +6 -0
  471. package/dist/formatters/markdown.d.ts.map +1 -0
  472. package/dist/formatters/markdown.js +198 -0
  473. package/dist/formatters/markdown.js.map +1 -0
  474. package/dist/hooks/handlers.d.ts +21 -0
  475. package/dist/hooks/handlers.d.ts.map +1 -0
  476. package/dist/hooks/handlers.js +22 -0
  477. package/dist/hooks/handlers.js.map +1 -0
  478. package/dist/hooks/inject.d.ts +7 -0
  479. package/dist/hooks/inject.d.ts.map +1 -0
  480. package/dist/hooks/inject.js +18 -0
  481. package/dist/hooks/inject.js.map +1 -0
  482. package/dist/hooks/install.d.ts +14 -0
  483. package/dist/hooks/install.d.ts.map +1 -0
  484. package/dist/hooks/install.js +34 -0
  485. package/dist/hooks/install.js.map +1 -0
  486. package/dist/hooks/output.d.ts +19 -0
  487. package/dist/hooks/output.d.ts.map +1 -0
  488. package/dist/hooks/output.js +13 -0
  489. package/dist/hooks/output.js.map +1 -0
  490. package/dist/hooks/recall-client.d.ts +25 -0
  491. package/dist/hooks/recall-client.d.ts.map +1 -0
  492. package/dist/hooks/recall-client.js +56 -0
  493. package/dist/hooks/recall-client.js.map +1 -0
  494. package/dist/hooks/run-event.d.ts +13 -0
  495. package/dist/hooks/run-event.d.ts.map +1 -0
  496. package/dist/hooks/run-event.js +20 -0
  497. package/dist/hooks/run-event.js.map +1 -0
  498. package/dist/hooks/settings-edit.d.ts +10 -0
  499. package/dist/hooks/settings-edit.d.ts.map +1 -0
  500. package/dist/hooks/settings-edit.js +44 -0
  501. package/dist/hooks/settings-edit.js.map +1 -0
  502. package/dist/hooks/writeback.d.ts +12 -0
  503. package/dist/hooks/writeback.d.ts.map +1 -0
  504. package/dist/hooks/writeback.js +48 -0
  505. package/dist/hooks/writeback.js.map +1 -0
  506. package/dist/install/clients/claude-code.d.ts +3 -0
  507. package/dist/install/clients/claude-code.d.ts.map +1 -0
  508. package/dist/install/clients/claude-code.js +31 -0
  509. package/dist/install/clients/claude-code.js.map +1 -0
  510. package/dist/install/clients/claude-desktop.d.ts +3 -0
  511. package/dist/install/clients/claude-desktop.d.ts.map +1 -0
  512. package/dist/install/clients/claude-desktop.js +33 -0
  513. package/dist/install/clients/claude-desktop.js.map +1 -0
  514. package/dist/install/clients/codex.d.ts +3 -0
  515. package/dist/install/clients/codex.d.ts.map +1 -0
  516. package/dist/install/clients/codex.js +33 -0
  517. package/dist/install/clients/codex.js.map +1 -0
  518. package/dist/install/clients/cursor.d.ts +3 -0
  519. package/dist/install/clients/cursor.d.ts.map +1 -0
  520. package/dist/install/clients/cursor.js +37 -0
  521. package/dist/install/clients/cursor.js.map +1 -0
  522. package/dist/install/clients/hermes.d.ts +3 -0
  523. package/dist/install/clients/hermes.d.ts.map +1 -0
  524. package/dist/install/clients/hermes.js +37 -0
  525. package/dist/install/clients/hermes.js.map +1 -0
  526. package/dist/install/clients/index.d.ts +4 -0
  527. package/dist/install/clients/index.d.ts.map +1 -0
  528. package/dist/install/clients/index.js +18 -0
  529. package/dist/install/clients/index.js.map +1 -0
  530. package/dist/install/clients/windsurf.d.ts +3 -0
  531. package/dist/install/clients/windsurf.d.ts.map +1 -0
  532. package/dist/install/clients/windsurf.js +34 -0
  533. package/dist/install/clients/windsurf.js.map +1 -0
  534. package/dist/install/command.d.ts +14 -0
  535. package/dist/install/command.d.ts.map +1 -0
  536. package/dist/install/command.js +34 -0
  537. package/dist/install/command.js.map +1 -0
  538. package/dist/install/directive.d.ts +7 -0
  539. package/dist/install/directive.d.ts.map +1 -0
  540. package/dist/install/directive.js +31 -0
  541. package/dist/install/directive.js.map +1 -0
  542. package/dist/install/index.d.ts +28 -0
  543. package/dist/install/index.d.ts.map +1 -0
  544. package/dist/install/index.js +122 -0
  545. package/dist/install/index.js.map +1 -0
  546. package/dist/install/json-config.d.ts +8 -0
  547. package/dist/install/json-config.d.ts.map +1 -0
  548. package/dist/install/json-config.js +44 -0
  549. package/dist/install/json-config.js.map +1 -0
  550. package/dist/install/marked-block.d.ts +11 -0
  551. package/dist/install/marked-block.d.ts.map +1 -0
  552. package/dist/install/marked-block.js +34 -0
  553. package/dist/install/marked-block.js.map +1 -0
  554. package/dist/install/mcp-entry.d.ts +11 -0
  555. package/dist/install/mcp-entry.d.ts.map +1 -0
  556. package/dist/install/mcp-entry.js +7 -0
  557. package/dist/install/mcp-entry.js.map +1 -0
  558. package/dist/install/skill.d.ts +4 -0
  559. package/dist/install/skill.d.ts.map +1 -0
  560. package/dist/install/skill.js +61 -0
  561. package/dist/install/skill.js.map +1 -0
  562. package/dist/install/toml-config.d.ts +4 -0
  563. package/dist/install/toml-config.d.ts.map +1 -0
  564. package/dist/install/toml-config.js +54 -0
  565. package/dist/install/toml-config.js.map +1 -0
  566. package/dist/install/types.d.ts +40 -0
  567. package/dist/install/types.d.ts.map +1 -0
  568. package/dist/install/types.js +10 -0
  569. package/dist/install/types.js.map +1 -0
  570. package/dist/install/yaml-config.d.ts +4 -0
  571. package/dist/install/yaml-config.d.ts.map +1 -0
  572. package/dist/install/yaml-config.js +19 -0
  573. package/dist/install/yaml-config.js.map +1 -0
  574. package/dist/lifecycle/down.d.ts +19 -0
  575. package/dist/lifecycle/down.d.ts.map +1 -0
  576. package/dist/lifecycle/down.js +24 -0
  577. package/dist/lifecycle/down.js.map +1 -0
  578. package/dist/lifecycle/health-poll.d.ts +19 -0
  579. package/dist/lifecycle/health-poll.d.ts.map +1 -0
  580. package/dist/lifecycle/health-poll.js +39 -0
  581. package/dist/lifecycle/health-poll.js.map +1 -0
  582. package/dist/lifecycle/install-state.d.ts +34 -0
  583. package/dist/lifecycle/install-state.d.ts.map +1 -0
  584. package/dist/lifecycle/install-state.js +70 -0
  585. package/dist/lifecycle/install-state.js.map +1 -0
  586. package/dist/lifecycle/legacy-migration.d.ts +58 -0
  587. package/dist/lifecycle/legacy-migration.d.ts.map +1 -0
  588. package/dist/lifecycle/legacy-migration.js +212 -0
  589. package/dist/lifecycle/legacy-migration.js.map +1 -0
  590. package/dist/lifecycle/lifecycle-lock.d.ts +20 -0
  591. package/dist/lifecycle/lifecycle-lock.d.ts.map +1 -0
  592. package/dist/lifecycle/lifecycle-lock.js +98 -0
  593. package/dist/lifecycle/lifecycle-lock.js.map +1 -0
  594. package/dist/lifecycle/run-up.d.ts +38 -0
  595. package/dist/lifecycle/run-up.d.ts.map +1 -0
  596. package/dist/lifecycle/run-up.js +307 -0
  597. package/dist/lifecycle/run-up.js.map +1 -0
  598. package/dist/lifecycle/status.d.ts +38 -0
  599. package/dist/lifecycle/status.d.ts.map +1 -0
  600. package/dist/lifecycle/status.js +41 -0
  601. package/dist/lifecycle/status.js.map +1 -0
  602. package/dist/lifecycle/up.d.ts +35 -0
  603. package/dist/lifecycle/up.d.ts.map +1 -0
  604. package/dist/lifecycle/up.js +45 -0
  605. package/dist/lifecycle/up.js.map +1 -0
  606. package/dist/processors/privacy.d.ts +101 -0
  607. package/dist/processors/privacy.d.ts.map +1 -0
  608. package/dist/processors/privacy.js +273 -0
  609. package/dist/processors/privacy.js.map +1 -0
  610. package/dist/profile/accumulate.d.ts +28 -0
  611. package/dist/profile/accumulate.d.ts.map +1 -0
  612. package/dist/profile/accumulate.js +48 -0
  613. package/dist/profile/accumulate.js.map +1 -0
  614. package/dist/profile/behavior.d.ts +32 -0
  615. package/dist/profile/behavior.d.ts.map +1 -0
  616. package/dist/profile/behavior.js +122 -0
  617. package/dist/profile/behavior.js.map +1 -0
  618. package/dist/profile/four-color.d.ts +12 -0
  619. package/dist/profile/four-color.d.ts.map +1 -0
  620. package/dist/profile/four-color.js +39 -0
  621. package/dist/profile/four-color.js.map +1 -0
  622. package/dist/profile/profile-synth.d.ts +27 -0
  623. package/dist/profile/profile-synth.d.ts.map +1 -0
  624. package/dist/profile/profile-synth.js +174 -0
  625. package/dist/profile/profile-synth.js.map +1 -0
  626. package/dist/profile/types.d.ts +84 -0
  627. package/dist/profile/types.d.ts.map +1 -0
  628. package/dist/profile/types.js +11 -0
  629. package/dist/profile/types.js.map +1 -0
  630. package/dist/server/api.d.ts +49 -0
  631. package/dist/server/api.d.ts.map +1 -0
  632. package/dist/server/api.js +502 -0
  633. package/dist/server/api.js.map +1 -0
  634. package/dist/server/backfill-job.d.ts +36 -0
  635. package/dist/server/backfill-job.d.ts.map +1 -0
  636. package/dist/server/backfill-job.js +88 -0
  637. package/dist/server/backfill-job.js.map +1 -0
  638. package/dist/server/backfill-routes.d.ts +7 -0
  639. package/dist/server/backfill-routes.d.ts.map +1 -0
  640. package/dist/server/backfill-routes.js +146 -0
  641. package/dist/server/backfill-routes.js.map +1 -0
  642. package/dist/server/chat-name-refresh-job.d.ts +33 -0
  643. package/dist/server/chat-name-refresh-job.d.ts.map +1 -0
  644. package/dist/server/chat-name-refresh-job.js +120 -0
  645. package/dist/server/chat-name-refresh-job.js.map +1 -0
  646. package/dist/server/chat-name-routes.d.ts +13 -0
  647. package/dist/server/chat-name-routes.d.ts.map +1 -0
  648. package/dist/server/chat-name-routes.js +81 -0
  649. package/dist/server/chat-name-routes.js.map +1 -0
  650. package/dist/server/config-routes.d.ts +10 -0
  651. package/dist/server/config-routes.d.ts.map +1 -0
  652. package/dist/server/config-routes.js +122 -0
  653. package/dist/server/config-routes.js.map +1 -0
  654. package/dist/server/context.d.ts +13 -0
  655. package/dist/server/context.d.ts.map +1 -0
  656. package/dist/server/context.js +47 -0
  657. package/dist/server/context.js.map +1 -0
  658. package/dist/server/entity.d.ts +25 -0
  659. package/dist/server/entity.d.ts.map +1 -0
  660. package/dist/server/entity.js +34 -0
  661. package/dist/server/entity.js.map +1 -0
  662. package/dist/server/event-bus.d.ts +35 -0
  663. package/dist/server/event-bus.d.ts.map +1 -0
  664. package/dist/server/event-bus.js +4 -0
  665. package/dist/server/event-bus.js.map +1 -0
  666. package/dist/server/mcp-http-runtime.d.ts +28 -0
  667. package/dist/server/mcp-http-runtime.d.ts.map +1 -0
  668. package/dist/server/mcp-http-runtime.js +24 -0
  669. package/dist/server/mcp-http-runtime.js.map +1 -0
  670. package/dist/server/mcp-http.d.ts +41 -0
  671. package/dist/server/mcp-http.d.ts.map +1 -0
  672. package/dist/server/mcp-http.js +139 -0
  673. package/dist/server/mcp-http.js.map +1 -0
  674. package/dist/server/mcp.d.ts +292 -0
  675. package/dist/server/mcp.d.ts.map +1 -0
  676. package/dist/server/mcp.js +1146 -0
  677. package/dist/server/mcp.js.map +1 -0
  678. package/dist/server/open-browser.d.ts +3 -0
  679. package/dist/server/open-browser.d.ts.map +1 -0
  680. package/dist/server/open-browser.js +12 -0
  681. package/dist/server/open-browser.js.map +1 -0
  682. package/dist/server/runtime.d.ts +13 -0
  683. package/dist/server/runtime.d.ts.map +1 -0
  684. package/dist/server/runtime.js +27 -0
  685. package/dist/server/runtime.js.map +1 -0
  686. package/dist/server/server-security.d.ts +51 -0
  687. package/dist/server/server-security.d.ts.map +1 -0
  688. package/dist/server/server-security.js +76 -0
  689. package/dist/server/server-security.js.map +1 -0
  690. package/dist/server/setup-server.d.ts +7 -0
  691. package/dist/server/setup-server.d.ts.map +1 -0
  692. package/dist/server/setup-server.js +49 -0
  693. package/dist/server/setup-server.js.map +1 -0
  694. package/dist/setup/assess-hardware.d.ts +34 -0
  695. package/dist/setup/assess-hardware.d.ts.map +1 -0
  696. package/dist/setup/assess-hardware.js +179 -0
  697. package/dist/setup/assess-hardware.js.map +1 -0
  698. package/dist/setup/connection-tests.d.ts +17 -0
  699. package/dist/setup/connection-tests.d.ts.map +1 -0
  700. package/dist/setup/connection-tests.js +69 -0
  701. package/dist/setup/connection-tests.js.map +1 -0
  702. package/dist/setup/detect-api-keys.d.ts +13 -0
  703. package/dist/setup/detect-api-keys.d.ts.map +1 -0
  704. package/dist/setup/detect-api-keys.js +41 -0
  705. package/dist/setup/detect-api-keys.js.map +1 -0
  706. package/dist/setup/detect-runtime.d.ts +14 -0
  707. package/dist/setup/detect-runtime.d.ts.map +1 -0
  708. package/dist/setup/detect-runtime.js +43 -0
  709. package/dist/setup/detect-runtime.js.map +1 -0
  710. package/dist/setup/detect-sources.d.ts +14 -0
  711. package/dist/setup/detect-sources.d.ts.map +1 -0
  712. package/dist/setup/detect-sources.js +75 -0
  713. package/dist/setup/detect-sources.js.map +1 -0
  714. package/dist/setup/doctor.d.ts +48 -0
  715. package/dist/setup/doctor.d.ts.map +1 -0
  716. package/dist/setup/doctor.js +157 -0
  717. package/dist/setup/doctor.js.map +1 -0
  718. package/dist/setup/generate-config.d.ts +13 -0
  719. package/dist/setup/generate-config.d.ts.map +1 -0
  720. package/dist/setup/generate-config.js +163 -0
  721. package/dist/setup/generate-config.js.map +1 -0
  722. package/dist/setup/index.d.ts +9 -0
  723. package/dist/setup/index.d.ts.map +1 -0
  724. package/dist/setup/index.js +9 -0
  725. package/dist/setup/index.js.map +1 -0
  726. package/dist/setup/init-wizard.d.ts +20 -0
  727. package/dist/setup/init-wizard.d.ts.map +1 -0
  728. package/dist/setup/init-wizard.js +531 -0
  729. package/dist/setup/init-wizard.js.map +1 -0
  730. package/dist/setup/terminal.d.ts +28 -0
  731. package/dist/setup/terminal.d.ts.map +1 -0
  732. package/dist/setup/terminal.js +258 -0
  733. package/dist/setup/terminal.js.map +1 -0
  734. package/dist/setup/validate-config.d.ts +30 -0
  735. package/dist/setup/validate-config.d.ts.map +1 -0
  736. package/dist/setup/validate-config.js +45 -0
  737. package/dist/setup/validate-config.js.map +1 -0
  738. package/dist/store/chunks.d.ts +25 -0
  739. package/dist/store/chunks.d.ts.map +1 -0
  740. package/dist/store/chunks.js +78 -0
  741. package/dist/store/chunks.js.map +1 -0
  742. package/dist/store/data-dir-lock.d.ts +15 -0
  743. package/dist/store/data-dir-lock.d.ts.map +1 -0
  744. package/dist/store/data-dir-lock.js +96 -0
  745. package/dist/store/data-dir-lock.js.map +1 -0
  746. package/dist/store/database.d.ts +31 -0
  747. package/dist/store/database.d.ts.map +1 -0
  748. package/dist/store/database.js +113 -0
  749. package/dist/store/database.js.map +1 -0
  750. package/dist/store/embedding.d.ts +23 -0
  751. package/dist/store/embedding.d.ts.map +1 -0
  752. package/dist/store/embedding.js +62 -0
  753. package/dist/store/embedding.js.map +1 -0
  754. package/dist/store/engine-factory.d.ts +4 -0
  755. package/dist/store/engine-factory.d.ts.map +1 -0
  756. package/dist/store/engine-factory.js +18 -0
  757. package/dist/store/engine-factory.js.map +1 -0
  758. package/dist/store/graph.d.ts +75 -0
  759. package/dist/store/graph.d.ts.map +1 -0
  760. package/dist/store/graph.js +276 -0
  761. package/dist/store/graph.js.map +1 -0
  762. package/dist/store/managed/managed-engine.d.ts +35 -0
  763. package/dist/store/managed/managed-engine.d.ts.map +1 -0
  764. package/dist/store/managed/managed-engine.js +40 -0
  765. package/dist/store/managed/managed-engine.js.map +1 -0
  766. package/dist/store/managed/managed-lock.d.ts +2 -0
  767. package/dist/store/managed/managed-lock.d.ts.map +1 -0
  768. package/dist/store/managed/managed-lock.js +68 -0
  769. package/dist/store/managed/managed-lock.js.map +1 -0
  770. package/dist/store/managed/new-install.d.ts +12 -0
  771. package/dist/store/managed/new-install.d.ts.map +1 -0
  772. package/dist/store/managed/new-install.js +23 -0
  773. package/dist/store/managed/new-install.js.map +1 -0
  774. package/dist/store/managed/pg-paths.d.ts +28 -0
  775. package/dist/store/managed/pg-paths.d.ts.map +1 -0
  776. package/dist/store/managed/pg-paths.js +41 -0
  777. package/dist/store/managed/pg-paths.js.map +1 -0
  778. package/dist/store/managed/pg-runtime-provider.d.ts +47 -0
  779. package/dist/store/managed/pg-runtime-provider.d.ts.map +1 -0
  780. package/dist/store/managed/pg-runtime-provider.js +249 -0
  781. package/dist/store/managed/pg-runtime-provider.js.map +1 -0
  782. package/dist/store/managed/pg-supervisor.d.ts +30 -0
  783. package/dist/store/managed/pg-supervisor.d.ts.map +1 -0
  784. package/dist/store/managed/pg-supervisor.js +308 -0
  785. package/dist/store/managed/pg-supervisor.js.map +1 -0
  786. package/dist/store/managed/recovery-loop.d.ts +41 -0
  787. package/dist/store/managed/recovery-loop.d.ts.map +1 -0
  788. package/dist/store/managed/recovery-loop.js +87 -0
  789. package/dist/store/managed/recovery-loop.js.map +1 -0
  790. package/dist/store/managed/stop-from-state.d.ts +11 -0
  791. package/dist/store/managed/stop-from-state.d.ts.map +1 -0
  792. package/dist/store/managed/stop-from-state.js +26 -0
  793. package/dist/store/managed/stop-from-state.js.map +1 -0
  794. package/dist/store/migrations/index.d.ts +9 -0
  795. package/dist/store/migrations/index.d.ts.map +1 -0
  796. package/dist/store/migrations/index.js +121 -0
  797. package/dist/store/migrations/index.js.map +1 -0
  798. package/dist/store/pages.d.ts +81 -0
  799. package/dist/store/pages.d.ts.map +1 -0
  800. package/dist/store/pages.js +286 -0
  801. package/dist/store/pages.js.map +1 -0
  802. package/dist/store/person-behavior.d.ts +37 -0
  803. package/dist/store/person-behavior.d.ts.map +1 -0
  804. package/dist/store/person-behavior.js +134 -0
  805. package/dist/store/person-behavior.js.map +1 -0
  806. package/dist/store/pglite-assets.d.ts +15 -0
  807. package/dist/store/pglite-assets.d.ts.map +1 -0
  808. package/dist/store/pglite-assets.js +47 -0
  809. package/dist/store/pglite-assets.js.map +1 -0
  810. package/dist/store/pglite-executor.d.ts +21 -0
  811. package/dist/store/pglite-executor.d.ts.map +1 -0
  812. package/dist/store/pglite-executor.js +61 -0
  813. package/dist/store/pglite-executor.js.map +1 -0
  814. package/dist/store/postgres-executor.d.ts +16 -0
  815. package/dist/store/postgres-executor.d.ts.map +1 -0
  816. package/dist/store/postgres-executor.js +77 -0
  817. package/dist/store/postgres-executor.js.map +1 -0
  818. package/dist/store/query-rewrite.d.ts +28 -0
  819. package/dist/store/query-rewrite.d.ts.map +1 -0
  820. package/dist/store/query-rewrite.js +97 -0
  821. package/dist/store/query-rewrite.js.map +1 -0
  822. package/dist/store/search.d.ts +65 -0
  823. package/dist/store/search.d.ts.map +1 -0
  824. package/dist/store/search.js +312 -0
  825. package/dist/store/search.js.map +1 -0
  826. package/dist/store/sequence-sync.d.ts +22 -0
  827. package/dist/store/sequence-sync.d.ts.map +1 -0
  828. package/dist/store/sequence-sync.js +46 -0
  829. package/dist/store/sequence-sync.js.map +1 -0
  830. package/dist/store/sql-executor.d.ts +17 -0
  831. package/dist/store/sql-executor.d.ts.map +1 -0
  832. package/dist/store/sql-executor.js +3 -0
  833. package/dist/store/sql-executor.js.map +1 -0
  834. package/dist/store/store-meta.d.ts +10 -0
  835. package/dist/store/store-meta.d.ts.map +1 -0
  836. package/dist/store/store-meta.js +13 -0
  837. package/dist/store/store-meta.js.map +1 -0
  838. package/dist/store/tags.d.ts +10 -0
  839. package/dist/store/tags.d.ts.map +1 -0
  840. package/dist/store/tags.js +35 -0
  841. package/dist/store/tags.js.map +1 -0
  842. package/dist/store/timeline.d.ts +38 -0
  843. package/dist/store/timeline.d.ts.map +1 -0
  844. package/dist/store/timeline.js +173 -0
  845. package/dist/store/timeline.js.map +1 -0
  846. package/dist/store/trgm-search.d.ts +13 -0
  847. package/dist/store/trgm-search.d.ts.map +1 -0
  848. package/dist/store/trgm-search.js +53 -0
  849. package/dist/store/trgm-search.js.map +1 -0
  850. package/dist/store/wikilink.d.ts +17 -0
  851. package/dist/store/wikilink.d.ts.map +1 -0
  852. package/dist/store/wikilink.js +58 -0
  853. package/dist/store/wikilink.js.map +1 -0
  854. package/dist/sync/obsidian.d.ts +136 -0
  855. package/dist/sync/obsidian.d.ts.map +1 -0
  856. package/dist/sync/obsidian.js +543 -0
  857. package/dist/sync/obsidian.js.map +1 -0
  858. package/dist/synth/cache.d.ts +17 -0
  859. package/dist/synth/cache.d.ts.map +1 -0
  860. package/dist/synth/cache.js +67 -0
  861. package/dist/synth/cache.js.map +1 -0
  862. package/dist/synth/citations.d.ts +12 -0
  863. package/dist/synth/citations.d.ts.map +1 -0
  864. package/dist/synth/citations.js +28 -0
  865. package/dist/synth/citations.js.map +1 -0
  866. package/dist/synth/context.d.ts +10 -0
  867. package/dist/synth/context.d.ts.map +1 -0
  868. package/dist/synth/context.js +67 -0
  869. package/dist/synth/context.js.map +1 -0
  870. package/dist/synth/engine.d.ts +16 -0
  871. package/dist/synth/engine.d.ts.map +1 -0
  872. package/dist/synth/engine.js +111 -0
  873. package/dist/synth/engine.js.map +1 -0
  874. package/dist/synth/gaps.d.ts +17 -0
  875. package/dist/synth/gaps.d.ts.map +1 -0
  876. package/dist/synth/gaps.js +57 -0
  877. package/dist/synth/gaps.js.map +1 -0
  878. package/dist/synth/index.d.ts +6 -0
  879. package/dist/synth/index.d.ts.map +1 -0
  880. package/dist/synth/index.js +6 -0
  881. package/dist/synth/index.js.map +1 -0
  882. package/dist/synth/intent.d.ts +6 -0
  883. package/dist/synth/intent.d.ts.map +1 -0
  884. package/dist/synth/intent.js +13 -0
  885. package/dist/synth/intent.js.map +1 -0
  886. package/dist/synth/intents/daily-report.d.ts +7 -0
  887. package/dist/synth/intents/daily-report.d.ts.map +1 -0
  888. package/dist/synth/intents/daily-report.js +37 -0
  889. package/dist/synth/intents/daily-report.js.map +1 -0
  890. package/dist/synth/intents/index.d.ts +2 -0
  891. package/dist/synth/intents/index.d.ts.map +1 -0
  892. package/dist/synth/intents/index.js +12 -0
  893. package/dist/synth/intents/index.js.map +1 -0
  894. package/dist/synth/intents/person-strategy.d.ts +40 -0
  895. package/dist/synth/intents/person-strategy.d.ts.map +1 -0
  896. package/dist/synth/intents/person-strategy.js +66 -0
  897. package/dist/synth/intents/person-strategy.js.map +1 -0
  898. package/dist/synth/intents/recall.d.ts +8 -0
  899. package/dist/synth/intents/recall.d.ts.map +1 -0
  900. package/dist/synth/intents/recall.js +26 -0
  901. package/dist/synth/intents/recall.js.map +1 -0
  902. package/dist/synth/intents/troubleshoot.d.ts +11 -0
  903. package/dist/synth/intents/troubleshoot.d.ts.map +1 -0
  904. package/dist/synth/intents/troubleshoot.js +66 -0
  905. package/dist/synth/intents/troubleshoot.js.map +1 -0
  906. package/dist/synth/scope.d.ts +13 -0
  907. package/dist/synth/scope.d.ts.map +1 -0
  908. package/dist/synth/scope.js +139 -0
  909. package/dist/synth/scope.js.map +1 -0
  910. package/dist/synth/types.d.ts +117 -0
  911. package/dist/synth/types.d.ts.map +1 -0
  912. package/dist/synth/types.js +2 -0
  913. package/dist/synth/types.js.map +1 -0
  914. package/package.json +98 -0
@@ -0,0 +1,543 @@
1
+ /**
2
+ * Obsidian vault bidirectional sync.
3
+ *
4
+ * Implements `memkin export --vault <path>` and `memkin import --vault <path>`.
5
+ * See spec: docs/specs/memkin-2026-06-04-obsidian-sync.md (v7).
6
+ */
7
+ import { createHash } from "node:crypto";
8
+ import { access, lstat, mkdir, open, readdir, readFile, rename, unlink, writeFile, } from "node:fs/promises";
9
+ import { dirname, join, relative, resolve, sep } from "node:path";
10
+ import { parse as yamlParse, stringify as yamlStringify } from "yaml";
11
+ // ============================================================================
12
+ // Constants
13
+ // ============================================================================
14
+ const RELATED_MARKER = "<!-- memkin:related -->";
15
+ const TIMELINE_MARKER = "<!-- memkin:timeline -->";
16
+ /** Unicode-safe slug regex (H3). */
17
+ const SLUG_REGEX = /^[\p{L}\p{N}_-]+(\/[\p{L}\p{N}_-]+)*$/u;
18
+ /** Windows reserved names (L6) — rejected on all platforms for portability. */
19
+ const WINDOWS_RESERVED = new Set([
20
+ "con",
21
+ "prn",
22
+ "aux",
23
+ "nul",
24
+ "com1",
25
+ "com2",
26
+ "com3",
27
+ "com4",
28
+ "com5",
29
+ "com6",
30
+ "com7",
31
+ "com8",
32
+ "com9",
33
+ "lpt1",
34
+ "lpt2",
35
+ "lpt3",
36
+ "lpt4",
37
+ "lpt5",
38
+ "lpt6",
39
+ "lpt7",
40
+ "lpt8",
41
+ "lpt9",
42
+ ]);
43
+ const MAX_SLUG_LENGTH = 200;
44
+ /** Wikilink pattern: matches [[slug]] or [[slug|display]] with Unicode support. */
45
+ const WIKILINK_REGEX = /\[\[([^\]|]+?)(?:\|[^\]]+?)?\]\]/gu;
46
+ // ============================================================================
47
+ // Section 1: serializePage (Spec §4.4)
48
+ // ============================================================================
49
+ /**
50
+ * Serialize a Page into Obsidian-compatible markdown.
51
+ *
52
+ * Fixes applied:
53
+ * H1: explicit fields written AFTER `...page.frontmatter` so they cannot be
54
+ * clobbered by user-supplied frontmatter that happens to share a key.
55
+ * M1: `updated_at` is NOT written to frontmatter — it would change every export
56
+ * even when content is identical, defeating incremental sync.
57
+ * N3: rebuild `## Aliases` body section from `frontmatter.aliases` each time
58
+ * (frontmatter is the single source of truth; the body section is derived).
59
+ */
60
+ export function serializePage(page, tags, links, timeline, userEdited) {
61
+ const fm = {
62
+ // 1. spread page.frontmatter FIRST (low precedence — H1)
63
+ ...page.frontmatter,
64
+ // 2. explicit fields LAST (high precedence — H1)
65
+ title: page.title,
66
+ type: page.type,
67
+ slug: page.slug,
68
+ tags,
69
+ links: links.map((l) => ({ target: l.to_slug, type: l.link_type })),
70
+ content_hash: page.content_hash,
71
+ user_edited: userEdited,
72
+ // NOTE: updated_at intentionally omitted (M1)
73
+ };
74
+ // N3: rebuild Aliases section from frontmatter, not from body
75
+ const aliases = page.frontmatter.aliases ?? [];
76
+ const compiledWithoutAliases = stripAliasesSection(page.compiled_truth);
77
+ const bodyParts = [];
78
+ if (aliases.length > 0) {
79
+ bodyParts.push("## Aliases", "");
80
+ for (const alias of aliases) {
81
+ bodyParts.push(`- ${alias}`);
82
+ }
83
+ bodyParts.push("");
84
+ }
85
+ bodyParts.push(compiledWithoutAliases.trim());
86
+ if (links.length > 0) {
87
+ bodyParts.push("", "<!-- memkin:related -->", "");
88
+ for (const link of links) {
89
+ bodyParts.push(`- [[${link.to_slug}]]`);
90
+ }
91
+ }
92
+ if (timeline.length > 0) {
93
+ bodyParts.push("", "<!-- memkin:timeline -->", "");
94
+ bodyParts.push("> ⚠️ Timeline 为只读派生数据,编辑此处不会同步回 DB", "");
95
+ for (const entry of timeline) {
96
+ bodyParts.push(`- **${entry.date}**: ${entry.summary}`);
97
+ }
98
+ }
99
+ const body = bodyParts.join("\n");
100
+ const fmYaml = yamlStringify(fm).trimEnd();
101
+ return `---\n${fmYaml}\n---\n\n${body}\n`;
102
+ }
103
+ /**
104
+ * Strip `## Aliases\n\n- ...` section if it appears at the start of body.
105
+ *
106
+ * Only matches at body start so that mid-body Aliases-like headings stay intact.
107
+ */
108
+ export function stripAliasesSection(body) {
109
+ const pattern = /^##\s+Aliases\s*\n+(?:- .+\n?)+\n*/;
110
+ return body.replace(pattern, "").trimStart();
111
+ }
112
+ /**
113
+ * Split body into three sections by HTML comment markers.
114
+ *
115
+ * Fixes:
116
+ * M3: detect marker order reversal (timeline before related) and signal error.
117
+ */
118
+ export function splitBody(body) {
119
+ const rIdx = body.indexOf(RELATED_MARKER);
120
+ const tIdx = body.indexOf(TIMELINE_MARKER);
121
+ // M3: timeline marker must come after related marker if both exist
122
+ if (rIdx >= 0 && tIdx >= 0 && tIdx < rIdx) {
123
+ return { mainBody: "", related: "", timeline: "", orderError: true };
124
+ }
125
+ let main = body;
126
+ let related = "";
127
+ let timeline = "";
128
+ // Split timeline first (later marker), then related
129
+ if (tIdx >= 0) {
130
+ timeline = main.slice(tIdx + TIMELINE_MARKER.length).trim();
131
+ main = main.slice(0, tIdx);
132
+ }
133
+ if (rIdx >= 0) {
134
+ related = main.slice(rIdx + RELATED_MARKER.length).trim();
135
+ main = main.slice(0, rIdx);
136
+ }
137
+ return { mainBody: main.trim(), related, timeline, orderError: false };
138
+ }
139
+ /** Validate slug: Unicode-safe + Windows reserved + length (H3 + L6). */
140
+ export function isValidSlug(slug) {
141
+ if (!slug || slug.length === 0)
142
+ return false;
143
+ if (slug.length > MAX_SLUG_LENGTH)
144
+ return false;
145
+ if (!SLUG_REGEX.test(slug))
146
+ return false;
147
+ for (const segment of slug.split("/")) {
148
+ if (WINDOWS_RESERVED.has(segment.toLowerCase()))
149
+ return false;
150
+ }
151
+ return true;
152
+ }
153
+ /** Convert a file path (relative to vault root) to slug. */
154
+ export function slugifyPath(relativePath) {
155
+ return relativePath.replace(/^\.\//, "").replace(/^\//, "").replace(/\.md$/i, "");
156
+ }
157
+ /** Extract all wikilink targets from text, stripping display suffix. */
158
+ export function extractWikilinks(text) {
159
+ const results = [];
160
+ const re = new RegExp(WIKILINK_REGEX.source, WIKILINK_REGEX.flags);
161
+ for (const match of text.matchAll(re)) {
162
+ results.push(match[1].trim());
163
+ }
164
+ return results;
165
+ }
166
+ function parseFrontmatterAndBody(content) {
167
+ const match = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
168
+ if (!match) {
169
+ return { fm: {}, body: content };
170
+ }
171
+ const fm = (yamlParse(match[1]) ?? {});
172
+ return { fm, body: match[2] };
173
+ }
174
+ /**
175
+ * Parse a vault markdown file into the pieces needed for putPage / addTag / addLink.
176
+ *
177
+ * Fixes:
178
+ * H2-incomplete: filter links by type — only obsidian and bare strings are
179
+ * taken as user-editable; pipeline-managed types (works_on,
180
+ * collaborates, etc.) are ignored here so they cannot be
181
+ * duplicated as obsidian-type edges on round-trip.
182
+ * H4: inject user_edited=true into cleanMarkdown so putPage persists the lock.
183
+ * M3: throw if body marker order is reversed.
184
+ * M7: timeline section is NOT parsed (export-only).
185
+ * L4: body `## Aliases` section is not interpreted — only frontmatter is.
186
+ */
187
+ export function parseVaultFile(content, relativePath) {
188
+ const { fm, body } = parseFrontmatterAndBody(content);
189
+ const slugRaw = fm.slug ?? slugifyPath(relativePath);
190
+ if (!isValidSlug(slugRaw)) {
191
+ throw new Error(`invalid slug: ${slugRaw}`);
192
+ }
193
+ const slug = slugRaw;
194
+ const split = splitBody(body);
195
+ if (split.orderError) {
196
+ throw new Error("marker order incorrect: timeline appears before related");
197
+ }
198
+ // H2-incomplete: filter frontmatter links to obsidian-type only
199
+ const rawFmLinks = Array.isArray(fm.links) ? fm.links : [];
200
+ const fmLinks = [];
201
+ for (const item of rawFmLinks) {
202
+ if (typeof item === "string") {
203
+ fmLinks.push(item);
204
+ }
205
+ else if (item && typeof item === "object") {
206
+ const obj = item;
207
+ if (typeof obj.target === "string") {
208
+ const type = obj.type;
209
+ if (type === undefined || type === null || type === "obsidian") {
210
+ fmLinks.push(obj.target);
211
+ }
212
+ }
213
+ }
214
+ }
215
+ // Wikilinks from main body (always treated as obsidian)
216
+ const bodyLinks = extractWikilinks(split.mainBody);
217
+ const links = Array.from(new Set([...fmLinks, ...bodyLinks]));
218
+ const tags = Array.isArray(fm.tags) ? fm.tags : [];
219
+ // Build clean frontmatter for putPage (strip sync-layer metadata)
220
+ const cleanFm = { ...fm };
221
+ delete cleanFm.slug;
222
+ delete cleanFm.tags;
223
+ delete cleanFm.links;
224
+ delete cleanFm.content_hash;
225
+ delete cleanFm.user_edited;
226
+ // H4: stamp user_edited=true
227
+ cleanFm.user_edited = true;
228
+ const cleanFmYaml = yamlStringify(cleanFm).trimEnd();
229
+ // M7: drop timeline section from main body; keep mainBody only
230
+ const cleanMarkdown = `---\n${cleanFmYaml}\n---\n\n${split.mainBody}\n`;
231
+ return { slug, cleanMarkdown, tags, links };
232
+ }
233
+ // ============================================================================
234
+ // Section 3: Manifest I/O (Spec §4.7 + §7.8)
235
+ // ============================================================================
236
+ const MANIFEST_FILENAME = ".memkin-sync.json";
237
+ const MANIFEST_VERSION = 2;
238
+ /** Load the sync manifest from a vault. Returns null if missing or invalid. */
239
+ export async function loadManifest(vaultPath) {
240
+ const path = join(vaultPath, MANIFEST_FILENAME);
241
+ try {
242
+ const raw = await readFile(path, "utf-8");
243
+ const parsed = JSON.parse(raw);
244
+ if (parsed.version !== MANIFEST_VERSION)
245
+ return null;
246
+ if (!parsed.pages || typeof parsed.pages !== "object")
247
+ return null;
248
+ return parsed;
249
+ }
250
+ catch {
251
+ // Missing, unreadable, or malformed — treat as no manifest
252
+ return null;
253
+ }
254
+ }
255
+ /**
256
+ * Atomically write the sync manifest (M8 + N2).
257
+ *
258
+ * Procedure:
259
+ * 1. open(tmpPath, "w") → write JSON → handle.sync() → handle.close()
260
+ * 2. rename(tmpPath, targetPath) — POSIX atomic
261
+ * 3. On error: close handle if open, unlink tmp
262
+ *
263
+ * Note: Node `fs.fsync()` takes a file descriptor, not a path. We use
264
+ * `FileHandle.sync()` which is the FileHandle API's wrapper around fsync(fd).
265
+ */
266
+ export async function saveManifest(vaultPath, manifest) {
267
+ const targetPath = join(vaultPath, MANIFEST_FILENAME);
268
+ const tmpPath = `${targetPath}.tmp`;
269
+ let handle = null;
270
+ try {
271
+ handle = await open(tmpPath, "w");
272
+ await handle.writeFile(JSON.stringify(manifest, null, 2), "utf-8");
273
+ await handle.sync();
274
+ await handle.close();
275
+ handle = null;
276
+ await rename(tmpPath, targetPath);
277
+ }
278
+ catch (e) {
279
+ if (handle)
280
+ await handle.close().catch(() => { });
281
+ await unlink(tmpPath).catch(() => { });
282
+ throw e;
283
+ }
284
+ }
285
+ function sha256(content) {
286
+ return createHash("sha256").update(content).digest("hex");
287
+ }
288
+ function nowIso() {
289
+ return new Date().toISOString();
290
+ }
291
+ // ============================================================================
292
+ // Section 5: exportToVault (Spec §5)
293
+ // ============================================================================
294
+ export async function exportToVault(stores, vaultPath, opts = {}) {
295
+ const result = { written: 0, skipped: 0, errors: [] };
296
+ // 1. Ensure vault directory exists
297
+ await mkdir(vaultPath, { recursive: true });
298
+ // 2. Load old manifest
299
+ const oldManifest = await loadManifest(vaultPath);
300
+ // 3. List all pages
301
+ const pages = await stores.pages.listPages({ limit: 100000 });
302
+ // 4. M6: batch pre-query tags / links / timeline
303
+ const [tagsBySlug, linksBySlug, timelineBySlug] = await Promise.all([
304
+ stores.tags.getAllTagsGrouped(),
305
+ stores.graph.getAllLinksGrouped(),
306
+ stores.timeline.getAllTimelineGrouped(),
307
+ ]);
308
+ // 5. Build new manifest as we go
309
+ const newManifest = {
310
+ version: 2,
311
+ last_sync_at: nowIso(),
312
+ last_sync_op: "export",
313
+ pages: {},
314
+ };
315
+ // 6. Per-page serialization
316
+ for (const page of pages) {
317
+ try {
318
+ const tags = tagsBySlug.get(page.slug) ?? [];
319
+ const links = linksBySlug.get(page.slug) ?? [];
320
+ const timeline = timelineBySlug.get(page.slug) ?? [];
321
+ const userEdited = oldManifest?.pages[page.slug]?.user_edited ?? false;
322
+ const content = serializePage(page, tags, links, timeline, userEdited);
323
+ const fileHash = sha256(content);
324
+ const previousFileHash = oldManifest?.pages[page.slug]?.file_hash;
325
+ const unchanged = !opts.force && previousFileHash === fileHash;
326
+ if (!unchanged && !opts.dryRun) {
327
+ const filePath = join(vaultPath, `${page.slug}.md`);
328
+ await mkdir(dirname(filePath), { recursive: true });
329
+ await writeFile(filePath, content, "utf-8");
330
+ }
331
+ newManifest.pages[page.slug] = {
332
+ file_hash: fileHash,
333
+ db_content_hash_at_last_sync: page.content_hash,
334
+ last_synced_at: newManifest.last_sync_at,
335
+ last_synced_op: "export",
336
+ user_edited: userEdited,
337
+ };
338
+ if (unchanged) {
339
+ result.skipped += 1;
340
+ }
341
+ else {
342
+ result.written += 1;
343
+ }
344
+ }
345
+ catch (e) {
346
+ result.errors.push({
347
+ slug: page.slug,
348
+ reason: e instanceof Error ? e.message : String(e),
349
+ });
350
+ }
351
+ }
352
+ // 7. Persist manifest
353
+ if (!opts.dryRun) {
354
+ await saveManifest(vaultPath, newManifest);
355
+ }
356
+ return result;
357
+ }
358
+ // ============================================================================
359
+ // Section 6: importFromVault (Spec §6)
360
+ // ============================================================================
361
+ /**
362
+ * Recursively scan markdown files in vault. Defensive against symlinks (L8).
363
+ */
364
+ async function scanMarkdownFiles(dir, vaultRoot, results = []) {
365
+ const entries = await readdir(dir, { withFileTypes: true });
366
+ for (const entry of entries) {
367
+ const fullPath = join(dir, entry.name);
368
+ // L8: refuse to follow symlinks
369
+ const stat = await lstat(fullPath);
370
+ if (stat.isSymbolicLink())
371
+ continue;
372
+ // Defensive: stay within vault boundary
373
+ const resolved = resolve(fullPath);
374
+ if (!resolved.startsWith(resolve(vaultRoot) + sep) && resolved !== resolve(vaultRoot)) {
375
+ continue;
376
+ }
377
+ if (entry.isDirectory()) {
378
+ if (entry.name.startsWith("."))
379
+ continue;
380
+ if (entry.name === "node_modules")
381
+ continue;
382
+ await scanMarkdownFiles(fullPath, vaultRoot, results);
383
+ }
384
+ else if (entry.isFile()) {
385
+ if (!entry.name.endsWith(".md"))
386
+ continue;
387
+ results.push(fullPath);
388
+ }
389
+ }
390
+ return results;
391
+ }
392
+ /**
393
+ * Read vault file content, returning null when the file is an iCloud
394
+ * placeholder or empty (L7 + N1).
395
+ */
396
+ async function readVaultFile(filePath) {
397
+ // L7: check for iCloud placeholder sibling .filename.icloud
398
+ const dir = dirname(filePath);
399
+ const base = filePath.slice(dir.length + 1);
400
+ const placeholderPath = join(dir, `.${base}.icloud`);
401
+ try {
402
+ await access(placeholderPath);
403
+ return null;
404
+ }
405
+ catch {
406
+ // No placeholder — proceed
407
+ }
408
+ const content = await readFile(filePath, "utf-8");
409
+ // N1: only flag genuinely empty content (the v4 regex /^[ -]+/ was nonsense)
410
+ if (content.length === 0 || content.trim().length === 0) {
411
+ return null;
412
+ }
413
+ return content;
414
+ }
415
+ export async function importFromVault(stores, vaultPath, opts = {}) {
416
+ const result = {
417
+ imported: 0,
418
+ skipped: 0,
419
+ errors: [],
420
+ warnings: [],
421
+ };
422
+ // 1. Verify vault exists
423
+ await access(vaultPath);
424
+ // 2. Load existing manifest (may be null on first import)
425
+ const manifest = (await loadManifest(vaultPath)) ??
426
+ {
427
+ version: 2,
428
+ last_sync_at: nowIso(),
429
+ last_sync_op: "import",
430
+ pages: {},
431
+ };
432
+ // 3. Scan vault for markdown files
433
+ const files = await scanMarkdownFiles(vaultPath, vaultPath);
434
+ for (const filePath of files) {
435
+ const relPath = relative(vaultPath, filePath);
436
+ try {
437
+ const content = await readVaultFile(filePath);
438
+ if (content === null) {
439
+ result.warnings.push({
440
+ slug: relPath,
441
+ reason: "iCloud placeholder or empty file — skipping",
442
+ });
443
+ result.skipped += 1;
444
+ continue;
445
+ }
446
+ const fileHash = sha256(content);
447
+ // 4. Parse to extract slug (needed for hash comparison)
448
+ const parsed = parseVaultFile(content, relPath);
449
+ const slug = parsed.slug;
450
+ const previousFileHash = manifest.pages[slug]?.file_hash;
451
+ if (!opts.force && previousFileHash === fileHash) {
452
+ result.skipped += 1;
453
+ continue;
454
+ }
455
+ // 5. H5: detect DB-side changes between syncs
456
+ const existingPage = await stores.pages.getPage(slug);
457
+ const recordedDbHash = manifest.pages[slug]?.db_content_hash_at_last_sync;
458
+ if (!opts.force &&
459
+ existingPage &&
460
+ recordedDbHash &&
461
+ existingPage.content_hash !== recordedDbHash) {
462
+ result.warnings.push({
463
+ slug,
464
+ reason: "DB content changed since last sync — your vault edits will overwrite DB changes",
465
+ });
466
+ if (opts.strictConflict) {
467
+ result.skipped += 1;
468
+ continue;
469
+ }
470
+ }
471
+ if (opts.dryRun) {
472
+ result.imported += 1;
473
+ continue;
474
+ }
475
+ // 6. Per-file write sequence (M2 deferred — see Spec §7.9 note)
476
+ //
477
+ // NOTE: We do NOT wrap in pg.transaction() — PGlite's transaction uses
478
+ // a mutex on the single connection, and store methods using `this.pg.query`
479
+ // (instead of tx.query) would deadlock waiting for the mutex to release.
480
+ // Refactoring all store methods to accept tx is out of scope.
481
+ //
482
+ // Atomicity guarantee: NONE. We rely on idempotent upserts:
483
+ // - putPage: INSERT ... ON CONFLICT UPDATE (idempotent)
484
+ // - addTag: INSERT ... ON CONFLICT DO NOTHING (idempotent)
485
+ // - addLink: INSERT ... ON CONFLICT UPDATE (idempotent)
486
+ // - rechunk: DELETE + INSERT (eventual consistency; retry-safe)
487
+ //
488
+ // If the process crashes mid-write, the next `memkin import` run will
489
+ // re-process the file (file_hash will still differ) and reach a
490
+ // consistent state. Worst case: chunks briefly out of date.
491
+ // autoWikilink:false — Obsidian sync owns [[...]] semantics (creates "obsidian"-typed
492
+ // links below); disable Spec 10 generic auto-wiring so it doesn't shadow them with "mentions".
493
+ const newPage = await stores.pages.putPage(slug, parsed.cleanMarkdown, {
494
+ autoWikilink: false,
495
+ });
496
+ for (const tag of parsed.tags) {
497
+ await stores.tags.addTag(slug, tag);
498
+ }
499
+ // H2-incomplete: only add obsidian-typed links; do not touch
500
+ // pipeline-typed links (works_on, collaborates, mentions, etc.)
501
+ const existingLinks = await stores.graph.getLinks(slug);
502
+ const existingObsidian = new Set(existingLinks.filter((l) => l.link_type === "obsidian").map((l) => l.to_slug));
503
+ for (const target of parsed.links) {
504
+ if (existingObsidian.has(target))
505
+ continue;
506
+ try {
507
+ await stores.graph.addLink(slug, target, "obsidian", "from obsidian vault");
508
+ }
509
+ catch (linkErr) {
510
+ // Target may not exist — warn, do not fail
511
+ result.warnings.push({
512
+ slug,
513
+ reason: `addLink ${slug} → ${target}: ${linkErr instanceof Error ? linkErr.message : String(linkErr)}`,
514
+ });
515
+ }
516
+ }
517
+ // M7: NOT processing timeline (export-only)
518
+ await stores.chunks.rechunk(newPage.id, newPage.compiled_truth);
519
+ manifest.pages[slug] = {
520
+ file_hash: fileHash,
521
+ db_content_hash_at_last_sync: newPage.content_hash,
522
+ last_synced_at: nowIso(),
523
+ last_synced_op: "import",
524
+ user_edited: true,
525
+ };
526
+ result.imported += 1;
527
+ }
528
+ catch (e) {
529
+ result.errors.push({
530
+ file: relPath,
531
+ reason: e instanceof Error ? e.message : String(e),
532
+ });
533
+ }
534
+ }
535
+ // 7. Persist manifest
536
+ if (!opts.dryRun) {
537
+ manifest.last_sync_at = nowIso();
538
+ manifest.last_sync_op = "import";
539
+ await saveManifest(vaultPath, manifest);
540
+ }
541
+ return result;
542
+ }
543
+ //# sourceMappingURL=obsidian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian.js","sourceRoot":"","sources":["../../src/sync/obsidian.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { StoreContext } from "../server/api.js";
2
+ import type { AssembledCandidate, SynthesisResult, SynthScope } from "./types.js";
3
+ /** input_hash = stable hash of the candidate (slug, date) set (Spec 7 §九 freshness). */
4
+ export declare function computeInputHash(candidates: AssembledCandidate[]): string;
5
+ /**
6
+ * Read a cached synthesis result for a scope, returning it only when fresh
7
+ * (stored input_hash matches the current one). Returns null on miss/staleness/query-scope.
8
+ */
9
+ export declare function read(intent: string, scope: SynthScope, inputHash: string, stores: StoreContext): Promise<SynthesisResult | null>;
10
+ /**
11
+ * Write a synthesis result into its scope's cache carrier page.
12
+ * - entity scope → entity page frontmatter.synth[intent]
13
+ * - time scope → reports/<intent>/<from..to> knowledge page (frontmatter.is_report=true)
14
+ * - query scope → no-op (not cached)
15
+ */
16
+ export declare function write(intent: string, scope: SynthScope, result: SynthesisResult, inputHash: string, stores: StoreContext): Promise<void>;
17
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/synth/cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AASlF,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAMzE;AAgBD;;;GAGG;AACH,wBAAsB,IAAI,CACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAYjC;AAED;;;;;GAKG;AACH,wBAAsB,KAAK,CACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAwBf"}
@@ -0,0 +1,67 @@
1
+ import { createHash } from "node:crypto";
2
+ /** input_hash = stable hash of the candidate (slug, date) set (Spec 7 §九 freshness). */
3
+ export function computeInputHash(candidates) {
4
+ const key = candidates
5
+ .map((c) => `${c.slug}:${c.date ?? ""}`)
6
+ .sort()
7
+ .join("|");
8
+ return createHash("sha256").update(key).digest("hex");
9
+ }
10
+ /** Page slug carrying the cache for a given scope, or null for non-cacheable (query) scopes. */
11
+ function cacheCarrierSlug(intent, scope) {
12
+ if (scope.entity)
13
+ return scope.entity;
14
+ if (scope.time) {
15
+ // Spec 9 §5.2: a daily report keyed by a single day caches to reports/daily/<date>.
16
+ if (intent === "daily_report") {
17
+ const date = scope.time.from.slice(0, 10);
18
+ return `reports/daily/${date}`;
19
+ }
20
+ return `reports/${intent}/${scope.time.from}..${scope.time.to}`;
21
+ }
22
+ return null; // query scope → not cached (Spec 7 §九)
23
+ }
24
+ /**
25
+ * Read a cached synthesis result for a scope, returning it only when fresh
26
+ * (stored input_hash matches the current one). Returns null on miss/staleness/query-scope.
27
+ */
28
+ export async function read(intent, scope, inputHash, stores) {
29
+ const slug = cacheCarrierSlug(intent, scope);
30
+ if (!slug)
31
+ return null;
32
+ const page = await stores.pages.getPage(slug);
33
+ if (!page)
34
+ return null;
35
+ const synth = page.frontmatter.synth;
36
+ const entry = synth?.[intent];
37
+ if (!entry || entry.input_hash !== inputHash)
38
+ return null;
39
+ return { ...entry.result, meta: { ...entry.result.meta, cached: true } };
40
+ }
41
+ /**
42
+ * Write a synthesis result into its scope's cache carrier page.
43
+ * - entity scope → entity page frontmatter.synth[intent]
44
+ * - time scope → reports/<intent>/<from..to> knowledge page (frontmatter.is_report=true)
45
+ * - query scope → no-op (not cached)
46
+ */
47
+ export async function write(intent, scope, result, inputHash, stores) {
48
+ const slug = cacheCarrierSlug(intent, scope);
49
+ if (!slug)
50
+ return;
51
+ const entry = {
52
+ input_hash: inputHash,
53
+ generated_at: result.meta.generated_at,
54
+ result,
55
+ };
56
+ const isReport = Boolean(scope.time);
57
+ const existing = await stores.pages.getPage(slug);
58
+ if (!existing) {
59
+ // Entity scope: never create a phantom entity page just to cache a synthesis.
60
+ if (!isReport)
61
+ return;
62
+ // Report (time) scope: create the dedicated report page once.
63
+ await stores.pages.putPage(slug, `---\ntitle: ${intent} report ${slug}\ntype: knowledge\nis_report: true\n---\n`);
64
+ }
65
+ await stores.pages.setSynthCache(slug, intent, entry);
66
+ }
67
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/synth/cache.ts"],"names":[],"mappings":"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"}