@andre.li/memoark 0.3.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 (441) hide show
  1. package/LICENSE +191 -0
  2. package/README.en.md +606 -0
  3. package/README.md +560 -0
  4. package/bin/memoark.mjs +36 -0
  5. package/dist/adapters/file.d.ts +19 -0
  6. package/dist/adapters/file.d.ts.map +1 -0
  7. package/dist/adapters/file.js +61 -0
  8. package/dist/adapters/file.js.map +1 -0
  9. package/dist/adapters/gbrain.d.ts +29 -0
  10. package/dist/adapters/gbrain.d.ts.map +1 -0
  11. package/dist/adapters/gbrain.js +622 -0
  12. package/dist/adapters/gbrain.js.map +1 -0
  13. package/dist/adapters/index.d.ts +6 -0
  14. package/dist/adapters/index.d.ts.map +1 -0
  15. package/dist/adapters/index.js +5 -0
  16. package/dist/adapters/index.js.map +1 -0
  17. package/dist/adapters/registry.d.ts +18 -0
  18. package/dist/adapters/registry.d.ts.map +1 -0
  19. package/dist/adapters/registry.js +18 -0
  20. package/dist/adapters/registry.js.map +1 -0
  21. package/dist/adapters/stdout.d.ts +12 -0
  22. package/dist/adapters/stdout.d.ts.map +1 -0
  23. package/dist/adapters/stdout.js +29 -0
  24. package/dist/adapters/stdout.js.map +1 -0
  25. package/dist/adapters/store.d.ts +47 -0
  26. package/dist/adapters/store.d.ts.map +1 -0
  27. package/dist/adapters/store.js +641 -0
  28. package/dist/adapters/store.js.map +1 -0
  29. package/dist/cli.d.ts +2 -0
  30. package/dist/cli.d.ts.map +1 -0
  31. package/dist/cli.js +694 -0
  32. package/dist/cli.js.map +1 -0
  33. package/dist/collectors/agent/claude-code.d.ts +12 -0
  34. package/dist/collectors/agent/claude-code.d.ts.map +1 -0
  35. package/dist/collectors/agent/claude-code.js +94 -0
  36. package/dist/collectors/agent/claude-code.js.map +1 -0
  37. package/dist/collectors/agent/codex.d.ts +16 -0
  38. package/dist/collectors/agent/codex.d.ts.map +1 -0
  39. package/dist/collectors/agent/codex.js +149 -0
  40. package/dist/collectors/agent/codex.js.map +1 -0
  41. package/dist/collectors/agent/collector.d.ts +20 -0
  42. package/dist/collectors/agent/collector.d.ts.map +1 -0
  43. package/dist/collectors/agent/collector.js +108 -0
  44. package/dist/collectors/agent/collector.js.map +1 -0
  45. package/dist/collectors/agent/hermes.d.ts +13 -0
  46. package/dist/collectors/agent/hermes.d.ts.map +1 -0
  47. package/dist/collectors/agent/hermes.js +90 -0
  48. package/dist/collectors/agent/hermes.js.map +1 -0
  49. package/dist/collectors/agent/index.d.ts +6 -0
  50. package/dist/collectors/agent/index.d.ts.map +1 -0
  51. package/dist/collectors/agent/index.js +5 -0
  52. package/dist/collectors/agent/index.js.map +1 -0
  53. package/dist/collectors/agent/types.d.ts +61 -0
  54. package/dist/collectors/agent/types.d.ts.map +1 -0
  55. package/dist/collectors/agent/types.js +6 -0
  56. package/dist/collectors/agent/types.js.map +1 -0
  57. package/dist/collectors/feishu/auth.d.ts +13 -0
  58. package/dist/collectors/feishu/auth.d.ts.map +1 -0
  59. package/dist/collectors/feishu/auth.js +72 -0
  60. package/dist/collectors/feishu/auth.js.map +1 -0
  61. package/dist/collectors/feishu/collector.d.ts +23 -0
  62. package/dist/collectors/feishu/collector.d.ts.map +1 -0
  63. package/dist/collectors/feishu/collector.js +113 -0
  64. package/dist/collectors/feishu/collector.js.map +1 -0
  65. package/dist/collectors/feishu/cursor-staging.d.ts +11 -0
  66. package/dist/collectors/feishu/cursor-staging.d.ts.map +1 -0
  67. package/dist/collectors/feishu/cursor-staging.js +37 -0
  68. package/dist/collectors/feishu/cursor-staging.js.map +1 -0
  69. package/dist/collectors/feishu/http-client.d.ts +26 -0
  70. package/dist/collectors/feishu/http-client.d.ts.map +1 -0
  71. package/dist/collectors/feishu/http-client.js +94 -0
  72. package/dist/collectors/feishu/http-client.js.map +1 -0
  73. package/dist/collectors/feishu/index.d.ts +3 -0
  74. package/dist/collectors/feishu/index.d.ts.map +1 -0
  75. package/dist/collectors/feishu/index.js +2 -0
  76. package/dist/collectors/feishu/index.js.map +1 -0
  77. package/dist/collectors/feishu/lark-cli-client.d.ts +16 -0
  78. package/dist/collectors/feishu/lark-cli-client.d.ts.map +1 -0
  79. package/dist/collectors/feishu/lark-cli-client.js +69 -0
  80. package/dist/collectors/feishu/lark-cli-client.js.map +1 -0
  81. package/dist/collectors/feishu/rate-limiter.d.ts +10 -0
  82. package/dist/collectors/feishu/rate-limiter.d.ts.map +1 -0
  83. package/dist/collectors/feishu/rate-limiter.js +33 -0
  84. package/dist/collectors/feishu/rate-limiter.js.map +1 -0
  85. package/dist/collectors/feishu/sources/base.d.ts +9 -0
  86. package/dist/collectors/feishu/sources/base.d.ts.map +1 -0
  87. package/dist/collectors/feishu/sources/base.js +2 -0
  88. package/dist/collectors/feishu/sources/base.js.map +1 -0
  89. package/dist/collectors/feishu/sources/calendar.d.ts +16 -0
  90. package/dist/collectors/feishu/sources/calendar.d.ts.map +1 -0
  91. package/dist/collectors/feishu/sources/calendar.js +93 -0
  92. package/dist/collectors/feishu/sources/calendar.js.map +1 -0
  93. package/dist/collectors/feishu/sources/dm.d.ts +28 -0
  94. package/dist/collectors/feishu/sources/dm.d.ts.map +1 -0
  95. package/dist/collectors/feishu/sources/dm.js +152 -0
  96. package/dist/collectors/feishu/sources/dm.js.map +1 -0
  97. package/dist/collectors/feishu/sources/docs.d.ts +23 -0
  98. package/dist/collectors/feishu/sources/docs.d.ts.map +1 -0
  99. package/dist/collectors/feishu/sources/docs.js +154 -0
  100. package/dist/collectors/feishu/sources/docs.js.map +1 -0
  101. package/dist/collectors/feishu/sources/mail.d.ts +27 -0
  102. package/dist/collectors/feishu/sources/mail.d.ts.map +1 -0
  103. package/dist/collectors/feishu/sources/mail.js +136 -0
  104. package/dist/collectors/feishu/sources/mail.js.map +1 -0
  105. package/dist/collectors/feishu/sources/message-search.d.ts +37 -0
  106. package/dist/collectors/feishu/sources/message-search.d.ts.map +1 -0
  107. package/dist/collectors/feishu/sources/message-search.js +140 -0
  108. package/dist/collectors/feishu/sources/message-search.js.map +1 -0
  109. package/dist/collectors/feishu/sources/messages.d.ts +26 -0
  110. package/dist/collectors/feishu/sources/messages.d.ts.map +1 -0
  111. package/dist/collectors/feishu/sources/messages.js +148 -0
  112. package/dist/collectors/feishu/sources/messages.js.map +1 -0
  113. package/dist/collectors/feishu/sources/tasks.d.ts +15 -0
  114. package/dist/collectors/feishu/sources/tasks.d.ts.map +1 -0
  115. package/dist/collectors/feishu/sources/tasks.js +74 -0
  116. package/dist/collectors/feishu/sources/tasks.js.map +1 -0
  117. package/dist/collectors/feishu/types.d.ts +224 -0
  118. package/dist/collectors/feishu/types.d.ts.map +1 -0
  119. package/dist/collectors/feishu/types.js +17 -0
  120. package/dist/collectors/feishu/types.js.map +1 -0
  121. package/dist/collectors/index.d.ts +10 -0
  122. package/dist/collectors/index.d.ts.map +1 -0
  123. package/dist/collectors/index.js +18 -0
  124. package/dist/collectors/index.js.map +1 -0
  125. package/dist/config-center/connection-checks.d.ts +28 -0
  126. package/dist/config-center/connection-checks.d.ts.map +1 -0
  127. package/dist/config-center/connection-checks.js +114 -0
  128. package/dist/config-center/connection-checks.js.map +1 -0
  129. package/dist/config-center/document.d.ts +21 -0
  130. package/dist/config-center/document.d.ts.map +1 -0
  131. package/dist/config-center/document.js +93 -0
  132. package/dist/config-center/document.js.map +1 -0
  133. package/dist/config-center/index.d.ts +9 -0
  134. package/dist/config-center/index.d.ts.map +1 -0
  135. package/dist/config-center/index.js +29 -0
  136. package/dist/config-center/index.js.map +1 -0
  137. package/dist/config-center/recommendations.d.ts +16 -0
  138. package/dist/config-center/recommendations.d.ts.map +1 -0
  139. package/dist/config-center/recommendations.js +50 -0
  140. package/dist/config-center/recommendations.js.map +1 -0
  141. package/dist/config-center/reducer.d.ts +57 -0
  142. package/dist/config-center/reducer.d.ts.map +1 -0
  143. package/dist/config-center/reducer.js +192 -0
  144. package/dist/config-center/reducer.js.map +1 -0
  145. package/dist/config-center/schema.d.ts +31 -0
  146. package/dist/config-center/schema.d.ts.map +1 -0
  147. package/dist/config-center/schema.js +365 -0
  148. package/dist/config-center/schema.js.map +1 -0
  149. package/dist/config-center/secrets.d.ts +4 -0
  150. package/dist/config-center/secrets.d.ts.map +1 -0
  151. package/dist/config-center/secrets.js +27 -0
  152. package/dist/config-center/secrets.js.map +1 -0
  153. package/dist/config-center/source-dirs.d.ts +16 -0
  154. package/dist/config-center/source-dirs.d.ts.map +1 -0
  155. package/dist/config-center/source-dirs.js +81 -0
  156. package/dist/config-center/source-dirs.js.map +1 -0
  157. package/dist/config-center/tui/app.d.ts +22 -0
  158. package/dist/config-center/tui/app.d.ts.map +1 -0
  159. package/dist/config-center/tui/app.js +142 -0
  160. package/dist/config-center/tui/app.js.map +1 -0
  161. package/dist/config-center/tui/render.d.ts +20 -0
  162. package/dist/config-center/tui/render.d.ts.map +1 -0
  163. package/dist/config-center/tui/render.js +166 -0
  164. package/dist/config-center/tui/render.js.map +1 -0
  165. package/dist/config-center/validation.d.ts +9 -0
  166. package/dist/config-center/validation.d.ts.map +1 -0
  167. package/dist/config-center/validation.js +59 -0
  168. package/dist/config-center/validation.js.map +1 -0
  169. package/dist/consolidator/consolidator.d.ts +31 -0
  170. package/dist/consolidator/consolidator.d.ts.map +1 -0
  171. package/dist/consolidator/consolidator.js +57 -0
  172. package/dist/consolidator/consolidator.js.map +1 -0
  173. package/dist/consolidator/dead-link.d.ts +7 -0
  174. package/dist/consolidator/dead-link.d.ts.map +1 -0
  175. package/dist/consolidator/dead-link.js +57 -0
  176. package/dist/consolidator/dead-link.js.map +1 -0
  177. package/dist/consolidator/hot-warm.d.ts +9 -0
  178. package/dist/consolidator/hot-warm.d.ts.map +1 -0
  179. package/dist/consolidator/hot-warm.js +88 -0
  180. package/dist/consolidator/hot-warm.js.map +1 -0
  181. package/dist/consolidator/infer-preferences.d.ts +14 -0
  182. package/dist/consolidator/infer-preferences.d.ts.map +1 -0
  183. package/dist/consolidator/infer-preferences.js +73 -0
  184. package/dist/consolidator/infer-preferences.js.map +1 -0
  185. package/dist/consolidator/rules.d.ts +5 -0
  186. package/dist/consolidator/rules.d.ts.map +1 -0
  187. package/dist/consolidator/rules.js +53 -0
  188. package/dist/consolidator/rules.js.map +1 -0
  189. package/dist/consolidator/warm-cold.d.ts +13 -0
  190. package/dist/consolidator/warm-cold.d.ts.map +1 -0
  191. package/dist/consolidator/warm-cold.js +91 -0
  192. package/dist/consolidator/warm-cold.js.map +1 -0
  193. package/dist/core/block-builder.d.ts +15 -0
  194. package/dist/core/block-builder.d.ts.map +1 -0
  195. package/dist/core/block-builder.js +185 -0
  196. package/dist/core/block-builder.js.map +1 -0
  197. package/dist/core/canonicalize.d.ts +3 -0
  198. package/dist/core/canonicalize.d.ts.map +1 -0
  199. package/dist/core/canonicalize.js +137 -0
  200. package/dist/core/canonicalize.js.map +1 -0
  201. package/dist/core/concurrency.d.ts +2 -0
  202. package/dist/core/concurrency.d.ts.map +1 -0
  203. package/dist/core/concurrency.js +14 -0
  204. package/dist/core/concurrency.js.map +1 -0
  205. package/dist/core/config.d.ts +184 -0
  206. package/dist/core/config.d.ts.map +1 -0
  207. package/dist/core/config.js +136 -0
  208. package/dist/core/config.js.map +1 -0
  209. package/dist/core/cursors.d.ts +36 -0
  210. package/dist/core/cursors.d.ts.map +1 -0
  211. package/dist/core/cursors.js +90 -0
  212. package/dist/core/cursors.js.map +1 -0
  213. package/dist/core/dedup.d.ts +45 -0
  214. package/dist/core/dedup.d.ts.map +1 -0
  215. package/dist/core/dedup.js +111 -0
  216. package/dist/core/dedup.js.map +1 -0
  217. package/dist/core/entity-extract.d.ts +3 -0
  218. package/dist/core/entity-extract.d.ts.map +1 -0
  219. package/dist/core/entity-extract.js +54 -0
  220. package/dist/core/entity-extract.js.map +1 -0
  221. package/dist/core/helpers.d.ts +3 -0
  222. package/dist/core/helpers.d.ts.map +1 -0
  223. package/dist/core/helpers.js +10 -0
  224. package/dist/core/helpers.js.map +1 -0
  225. package/dist/core/identity-resolver.d.ts +21 -0
  226. package/dist/core/identity-resolver.d.ts.map +1 -0
  227. package/dist/core/identity-resolver.js +62 -0
  228. package/dist/core/identity-resolver.js.map +1 -0
  229. package/dist/core/pipeline-factory.d.ts +13 -0
  230. package/dist/core/pipeline-factory.d.ts.map +1 -0
  231. package/dist/core/pipeline-factory.js +32 -0
  232. package/dist/core/pipeline-factory.js.map +1 -0
  233. package/dist/core/pipeline.d.ts +61 -0
  234. package/dist/core/pipeline.d.ts.map +1 -0
  235. package/dist/core/pipeline.js +261 -0
  236. package/dist/core/pipeline.js.map +1 -0
  237. package/dist/core/schemas.d.ts +2470 -0
  238. package/dist/core/schemas.d.ts.map +1 -0
  239. package/dist/core/schemas.js +229 -0
  240. package/dist/core/schemas.js.map +1 -0
  241. package/dist/core/signal-scoring.d.ts +3 -0
  242. package/dist/core/signal-scoring.d.ts.map +1 -0
  243. package/dist/core/signal-scoring.js +124 -0
  244. package/dist/core/signal-scoring.js.map +1 -0
  245. package/dist/core/state.d.ts +22 -0
  246. package/dist/core/state.d.ts.map +1 -0
  247. package/dist/core/state.js +32 -0
  248. package/dist/core/state.js.map +1 -0
  249. package/dist/core/types.d.ts +231 -0
  250. package/dist/core/types.d.ts.map +1 -0
  251. package/dist/core/types.js +6 -0
  252. package/dist/core/types.js.map +1 -0
  253. package/dist/daemon/alerts.d.ts +12 -0
  254. package/dist/daemon/alerts.d.ts.map +1 -0
  255. package/dist/daemon/alerts.js +34 -0
  256. package/dist/daemon/alerts.js.map +1 -0
  257. package/dist/daemon/index.d.ts +6 -0
  258. package/dist/daemon/index.d.ts.map +1 -0
  259. package/dist/daemon/index.js +6 -0
  260. package/dist/daemon/index.js.map +1 -0
  261. package/dist/daemon/logger.d.ts +8 -0
  262. package/dist/daemon/logger.d.ts.map +1 -0
  263. package/dist/daemon/logger.js +35 -0
  264. package/dist/daemon/logger.js.map +1 -0
  265. package/dist/daemon/run-history.d.ts +29 -0
  266. package/dist/daemon/run-history.d.ts.map +1 -0
  267. package/dist/daemon/run-history.js +54 -0
  268. package/dist/daemon/run-history.js.map +1 -0
  269. package/dist/daemon/scheduler.d.ts +37 -0
  270. package/dist/daemon/scheduler.d.ts.map +1 -0
  271. package/dist/daemon/scheduler.js +142 -0
  272. package/dist/daemon/scheduler.js.map +1 -0
  273. package/dist/daemon/source-schedule.d.ts +25 -0
  274. package/dist/daemon/source-schedule.d.ts.map +1 -0
  275. package/dist/daemon/source-schedule.js +87 -0
  276. package/dist/daemon/source-schedule.js.map +1 -0
  277. package/dist/embedded-assets.generated.d.ts +4 -0
  278. package/dist/embedded-assets.generated.d.ts.map +1 -0
  279. package/dist/embedded-assets.generated.js +12 -0
  280. package/dist/embedded-assets.generated.js.map +1 -0
  281. package/dist/extractors/noise-filter.d.ts +30 -0
  282. package/dist/extractors/noise-filter.d.ts.map +1 -0
  283. package/dist/extractors/noise-filter.js +185 -0
  284. package/dist/extractors/noise-filter.js.map +1 -0
  285. package/dist/extractors/providers/anthropic.d.ts +13 -0
  286. package/dist/extractors/providers/anthropic.d.ts.map +1 -0
  287. package/dist/extractors/providers/anthropic.js +67 -0
  288. package/dist/extractors/providers/anthropic.js.map +1 -0
  289. package/dist/extractors/providers/index.d.ts +12 -0
  290. package/dist/extractors/providers/index.d.ts.map +1 -0
  291. package/dist/extractors/providers/index.js +41 -0
  292. package/dist/extractors/providers/index.js.map +1 -0
  293. package/dist/extractors/providers/mock.d.ts +14 -0
  294. package/dist/extractors/providers/mock.d.ts.map +1 -0
  295. package/dist/extractors/providers/mock.js +37 -0
  296. package/dist/extractors/providers/mock.js.map +1 -0
  297. package/dist/extractors/providers/openai.d.ts +15 -0
  298. package/dist/extractors/providers/openai.d.ts.map +1 -0
  299. package/dist/extractors/providers/openai.js +109 -0
  300. package/dist/extractors/providers/openai.js.map +1 -0
  301. package/dist/extractors/providers/types.d.ts +27 -0
  302. package/dist/extractors/providers/types.d.ts.map +1 -0
  303. package/dist/extractors/providers/types.js +6 -0
  304. package/dist/extractors/providers/types.js.map +1 -0
  305. package/dist/extractors/signal-extractor.d.ts +29 -0
  306. package/dist/extractors/signal-extractor.d.ts.map +1 -0
  307. package/dist/extractors/signal-extractor.js +279 -0
  308. package/dist/extractors/signal-extractor.js.map +1 -0
  309. package/dist/formatters/index.d.ts +3 -0
  310. package/dist/formatters/index.d.ts.map +1 -0
  311. package/dist/formatters/index.js +3 -0
  312. package/dist/formatters/index.js.map +1 -0
  313. package/dist/formatters/json.d.ts +6 -0
  314. package/dist/formatters/json.d.ts.map +1 -0
  315. package/dist/formatters/json.js +16 -0
  316. package/dist/formatters/json.js.map +1 -0
  317. package/dist/formatters/markdown.d.ts +6 -0
  318. package/dist/formatters/markdown.d.ts.map +1 -0
  319. package/dist/formatters/markdown.js +198 -0
  320. package/dist/formatters/markdown.js.map +1 -0
  321. package/dist/processors/privacy.d.ts +98 -0
  322. package/dist/processors/privacy.d.ts.map +1 -0
  323. package/dist/processors/privacy.js +271 -0
  324. package/dist/processors/privacy.js.map +1 -0
  325. package/dist/server/api.d.ts +35 -0
  326. package/dist/server/api.d.ts.map +1 -0
  327. package/dist/server/api.js +453 -0
  328. package/dist/server/api.js.map +1 -0
  329. package/dist/server/backfill-job.d.ts +36 -0
  330. package/dist/server/backfill-job.d.ts.map +1 -0
  331. package/dist/server/backfill-job.js +88 -0
  332. package/dist/server/backfill-job.js.map +1 -0
  333. package/dist/server/backfill-routes.d.ts +7 -0
  334. package/dist/server/backfill-routes.d.ts.map +1 -0
  335. package/dist/server/backfill-routes.js +123 -0
  336. package/dist/server/backfill-routes.js.map +1 -0
  337. package/dist/server/config-routes.d.ts +8 -0
  338. package/dist/server/config-routes.d.ts.map +1 -0
  339. package/dist/server/config-routes.js +114 -0
  340. package/dist/server/config-routes.js.map +1 -0
  341. package/dist/server/context.d.ts +13 -0
  342. package/dist/server/context.d.ts.map +1 -0
  343. package/dist/server/context.js +47 -0
  344. package/dist/server/context.js.map +1 -0
  345. package/dist/server/entity.d.ts +25 -0
  346. package/dist/server/entity.d.ts.map +1 -0
  347. package/dist/server/entity.js +34 -0
  348. package/dist/server/entity.js.map +1 -0
  349. package/dist/server/event-bus.d.ts +35 -0
  350. package/dist/server/event-bus.d.ts.map +1 -0
  351. package/dist/server/event-bus.js +4 -0
  352. package/dist/server/event-bus.js.map +1 -0
  353. package/dist/server/mcp.d.ts +126 -0
  354. package/dist/server/mcp.d.ts.map +1 -0
  355. package/dist/server/mcp.js +103 -0
  356. package/dist/server/mcp.js.map +1 -0
  357. package/dist/server/setup-server.d.ts +7 -0
  358. package/dist/server/setup-server.d.ts.map +1 -0
  359. package/dist/server/setup-server.js +52 -0
  360. package/dist/server/setup-server.js.map +1 -0
  361. package/dist/setup/assess-hardware.d.ts +34 -0
  362. package/dist/setup/assess-hardware.d.ts.map +1 -0
  363. package/dist/setup/assess-hardware.js +179 -0
  364. package/dist/setup/assess-hardware.js.map +1 -0
  365. package/dist/setup/connection-tests.d.ts +17 -0
  366. package/dist/setup/connection-tests.d.ts.map +1 -0
  367. package/dist/setup/connection-tests.js +67 -0
  368. package/dist/setup/connection-tests.js.map +1 -0
  369. package/dist/setup/detect-api-keys.d.ts +13 -0
  370. package/dist/setup/detect-api-keys.d.ts.map +1 -0
  371. package/dist/setup/detect-api-keys.js +41 -0
  372. package/dist/setup/detect-api-keys.js.map +1 -0
  373. package/dist/setup/detect-runtime.d.ts +14 -0
  374. package/dist/setup/detect-runtime.d.ts.map +1 -0
  375. package/dist/setup/detect-runtime.js +43 -0
  376. package/dist/setup/detect-runtime.js.map +1 -0
  377. package/dist/setup/detect-sources.d.ts +14 -0
  378. package/dist/setup/detect-sources.d.ts.map +1 -0
  379. package/dist/setup/detect-sources.js +75 -0
  380. package/dist/setup/detect-sources.js.map +1 -0
  381. package/dist/setup/generate-config.d.ts +5 -0
  382. package/dist/setup/generate-config.d.ts.map +1 -0
  383. package/dist/setup/generate-config.js +103 -0
  384. package/dist/setup/generate-config.js.map +1 -0
  385. package/dist/setup/index.d.ts +9 -0
  386. package/dist/setup/index.d.ts.map +1 -0
  387. package/dist/setup/index.js +9 -0
  388. package/dist/setup/index.js.map +1 -0
  389. package/dist/setup/init-wizard.d.ts +19 -0
  390. package/dist/setup/init-wizard.d.ts.map +1 -0
  391. package/dist/setup/init-wizard.js +501 -0
  392. package/dist/setup/init-wizard.js.map +1 -0
  393. package/dist/setup/terminal.d.ts +28 -0
  394. package/dist/setup/terminal.d.ts.map +1 -0
  395. package/dist/setup/terminal.js +258 -0
  396. package/dist/setup/terminal.js.map +1 -0
  397. package/dist/setup/validate-config.d.ts +26 -0
  398. package/dist/setup/validate-config.d.ts.map +1 -0
  399. package/dist/setup/validate-config.js +27 -0
  400. package/dist/setup/validate-config.js.map +1 -0
  401. package/dist/store/chunks.d.ts +19 -0
  402. package/dist/store/chunks.d.ts.map +1 -0
  403. package/dist/store/chunks.js +70 -0
  404. package/dist/store/chunks.js.map +1 -0
  405. package/dist/store/database.d.ts +24 -0
  406. package/dist/store/database.d.ts.map +1 -0
  407. package/dist/store/database.js +62 -0
  408. package/dist/store/database.js.map +1 -0
  409. package/dist/store/embedding.d.ts +23 -0
  410. package/dist/store/embedding.d.ts.map +1 -0
  411. package/dist/store/embedding.js +62 -0
  412. package/dist/store/embedding.js.map +1 -0
  413. package/dist/store/graph.d.ts +53 -0
  414. package/dist/store/graph.d.ts.map +1 -0
  415. package/dist/store/graph.js +186 -0
  416. package/dist/store/graph.js.map +1 -0
  417. package/dist/store/migrations/index.d.ts +9 -0
  418. package/dist/store/migrations/index.d.ts.map +1 -0
  419. package/dist/store/migrations/index.js +68 -0
  420. package/dist/store/migrations/index.js.map +1 -0
  421. package/dist/store/pages.d.ts +39 -0
  422. package/dist/store/pages.d.ts.map +1 -0
  423. package/dist/store/pages.js +150 -0
  424. package/dist/store/pages.js.map +1 -0
  425. package/dist/store/search.d.ts +37 -0
  426. package/dist/store/search.d.ts.map +1 -0
  427. package/dist/store/search.js +200 -0
  428. package/dist/store/search.js.map +1 -0
  429. package/dist/store/tags.d.ts +10 -0
  430. package/dist/store/tags.d.ts.map +1 -0
  431. package/dist/store/tags.js +31 -0
  432. package/dist/store/tags.js.map +1 -0
  433. package/dist/store/timeline.d.ts +26 -0
  434. package/dist/store/timeline.d.ts.map +1 -0
  435. package/dist/store/timeline.js +43 -0
  436. package/dist/store/timeline.js.map +1 -0
  437. package/dist/sync/obsidian.d.ts +136 -0
  438. package/dist/sync/obsidian.d.ts.map +1 -0
  439. package/dist/sync/obsidian.js +539 -0
  440. package/dist/sync/obsidian.js.map +1 -0
  441. package/package.json +84 -0
package/README.en.md ADDED
@@ -0,0 +1,606 @@
1
+ <p align="center">
2
+ <h1 align="center">Memoark</h1>
3
+ <p align="center"><strong>Turn your Feishu work and AI-agent sessions into one private memory your agents can actually use. Local-first, you own it.</strong></p>
4
+ </p>
5
+
6
+ <p align="center">
7
+ <a href="README.md">简体中文</a> | English
8
+ </p>
9
+
10
+ <p align="center">
11
+ <a href="LICENSE"><img alt="License: Apache 2.0" src="https://img.shields.io/badge/License-Apache_2.0-blue.svg"></a>
12
+ <img alt="Runtime: Bun" src="https://img.shields.io/badge/runtime-Bun-black">
13
+ <img alt="Language: TypeScript" src="https://img.shields.io/badge/lang-TypeScript-3178c6">
14
+ <img alt="Tests: 800+" src="https://img.shields.io/badge/tests-800%2B-success">
15
+ </p>
16
+
17
+ <p align="center">
18
+ <a href="#quick-start">Quick Start</a> •
19
+ <a href="#features">Features</a> •
20
+ <a href="#use-cases">Use Cases</a> •
21
+ <a href="#architecture">Architecture</a> •
22
+ <a href="#cli-reference">CLI Reference</a> •
23
+ <a href="#roadmap">Roadmap</a>
24
+ </p>
25
+
26
+ <p align="center">
27
+ <img src="docs/assets/web-ui-graph.jpeg" alt="Memoark knowledge graph — entities, decisions, tasks, and knowledge connected across your work" width="850">
28
+ <br>
29
+ <em>Your work, as a living knowledge graph — people, decisions, tasks, and knowledge, connected.</em>
30
+ </p>
31
+
32
+ ---
33
+
34
+ ## The Problem
35
+
36
+ Your work memory has two homes, and your AI agents can't reach either.
37
+
38
+ - **Feishu (Lark)** holds your working relationships — DMs, group chats, emails, meetings, tasks. This is *what* you work on and *who* you work with.
39
+ - **AI agents** (Claude Code, Codex, OpenClaw) hold your building process — the decisions, discoveries, and dead-ends from every coding session.
40
+
41
+ But every time you open a new agent session, it knows nothing. You re-explain who you are, what the project is, what was decided last week, and why. The context is *somewhere* — buried in chat logs and session transcripts you'll never scroll through again.
42
+
43
+ **You don't have a memory problem. You have a fragmentation problem — and your agents pay for it every day.**
44
+
45
+ ## The Solution
46
+
47
+ Memoark is a **local-first personal memory system** built on two equal input streams — your **Feishu work** and your **AI-agent sessions**. It extracts structured signals (entities, decisions, tasks, discoveries, knowledge, relationships) into one searchable knowledge graph on your own machine, then serves that memory back to any agent over **MCP**.
48
+
49
+ The result: your agents both **write to** and **read from** the same memory — so Claude Code, Codex, and any MCP client finally *know you and your work*.
50
+
51
+ ```
52
+ Feishu work AI-agent sessions
53
+ (DMs / groups / email (Claude Code / Codex
54
+ meetings / tasks) / OpenClaw)
55
+ │ │
56
+ └───────────────┬───────────────┘
57
+ ▼ collect + extract (local)
58
+ ┌──────────────────┐
59
+ │ Your core memory │ entities · decisions · tasks
60
+ │ (PGLite, local) │ knowledge · timeline · graph
61
+ └────────┬─────────┘
62
+ ▼ MCP
63
+ Your agents know you
64
+
65
+ └──── the more agents work, the better it knows you ───┘
66
+ ```
67
+
68
+ > "I discussed a proposal with a colleague on Feishu yesterday, implemented part of it in Claude Code today, and have a review meeting next week."
69
+ >
70
+ > Memoark connects these three events automatically — across platforms, across time — and hands the whole thread to your agent on demand.
71
+
72
+ ## Features
73
+
74
+ **🛰️ Full Feishu (Lark) Capture**
75
+ Your work lives in Feishu. Memoark collects across **7 sources** — DMs, group chats, email, calendar, docs, tasks, and message search — turning your working relationships into structured memory.
76
+
77
+ **🤖 Agents That Know You (MCP)**
78
+ Use Memoark as the memory layer for any MCP agent — Claude Code, Cursor, Windsurf. **17 built-in tools** let your agent query your history, read entity pages, and write new knowledge back. Agents are both producers and consumers of your memory.
79
+
80
+ **🔒 Private & Local-First**
81
+ Your data never leaves your machine. PGLite embedded database, optional local embeddings via Ollama, no cloud dependency. You own your memory.
82
+
83
+ **🧠 AI-Powered Signal Extraction**
84
+ An LLM pipeline extracts 7 types of structured signals from raw conversations: entities, timeline events, decisions, tasks, discoveries, knowledge, and relationships.
85
+
86
+ **🔍 Hybrid Semantic Search**
87
+ Full-text search + vector retrieval fused with Reciprocal Rank Fusion (RRF). Ask in natural language — powered by PGLite FTS + pgvector.
88
+
89
+ **🕸️ Knowledge Graph + Web UI**
90
+ See the connections between people, projects, and decisions. Browse a built-in web UI with dashboard, timeline, force-directed graph, and search.
91
+
92
+ **🔌 REST API**
93
+ Full Hono-powered HTTP API for all store operations. Integrate with any client.
94
+
95
+ ## Use Cases
96
+
97
+ **Onboard your agent to a project in seconds**
98
+ Start a Claude Code session and ask *"what's the current state of the memoark project?"* — your agent pulls the aggregated decisions, open tasks, and recent timeline straight from your memory, no re-explaining.
99
+
100
+ **Recall a person or a thread**
101
+ *"What did I discuss with my colleague last week?"* — Memoark stitches together the Feishu DMs, the meeting, and the follow-up task into one answer.
102
+
103
+ **Auto-written work log**
104
+ Browse your timeline like a diary that writes itself — what you decided, what you shipped, and across which platforms.
105
+
106
+ ## Why Memoark
107
+
108
+ | | Memoark | Pure RAG / vector search | Note apps (Obsidian / Notion) | GBrain | OpenHuman |
109
+ |---|:---:|:---:|:---:|:---:|:---:|
110
+ | Local-first & private | ✅ | depends | depends | ✅ | ✅ |
111
+ | Open source | ✅ | varies | partial | partial | ✅ |
112
+ | Feishu work capture (DM/group/email/meeting/task) | ✅ | ❌ | manual | ❌ | ❌ |
113
+ | AI-agent sessions as a source | ✅ | ❌ | ❌ | ✅ | ✅ |
114
+ | Agent-native: read **and** write over MCP | ✅ | ❌ | ❌ | ✅ | partial |
115
+ | Entity + relationship knowledge graph | ✅ | ❌ | manual | ✅ | partial |
116
+ | Structured signal extraction (not just chunks) | ✅ | ❌ | ❌ | ✅ | ✅ |
117
+ | Focused MCP surface (17 tools, not 40+) | ✅ | n/a | n/a | ❌ (40+) | varies |
118
+
119
+ > Pure RAG gives you vectors but no entities or relationships, so answers lack context. Note apps are powerful but rely on manual upkeep. GBrain is capable but heavy, with a sprawling MCP surface. Memoark keeps it local, focused, and agent-native — with Feishu work as a first-class source.
120
+
121
+ ## Quick Start
122
+
123
+ ### Prerequisites
124
+
125
+ - [Node.js](https://nodejs.org) >= 18 (for the `npx` / `npm` install)
126
+ - (Optional) [Ollama](https://ollama.ai) for local embeddings
127
+
128
+ ### Install (recommended: npm)
129
+
130
+ ```bash
131
+ # Run without installing
132
+ npx @andre.li/memoark --help
133
+
134
+ # Or install globally to get the `memoark` command
135
+ npm install -g @andre.li/memoark
136
+ ```
137
+
138
+ > The npm package is `@andre.li/memoark` (scoped), but the command is still `memoark`.
139
+
140
+ ### Install from source (development)
141
+
142
+ ```bash
143
+ git clone https://github.com/AndreLYL/memoark.git
144
+ cd memoark
145
+ bun install
146
+ npm link # registers the `memoark` command globally
147
+ ```
148
+
149
+ ### Initialize Configuration
150
+
151
+ `memoark init` launches an **interactive configuration center** — a full-screen TUI (built with React + ink) that lets you generate and edit `memoark.yaml` without hand-writing YAML:
152
+
153
+ ```bash
154
+ memoark init
155
+ ```
156
+
157
+ **Config center features:**
158
+ - 📋 **Sectioned editing**: Overview, LLM, Embedding, Sources, Privacy, Block Builder, and more
159
+ - ⌨️ **Keyboard-driven**: ↑/↓ or Tab to move between fields, Enter to edit, Ctrl+S to save, q / Esc to quit (auto-saves if dirty)
160
+ - 🔌 **Live connection checks**: validates your LLM / embedding API key and connectivity as you edit
161
+ - 💡 **Smart recommendations**: suggests local (Ollama) vs remote (OpenAI) embedding based on your hardware
162
+ - 🔒 **Secret masking**: API keys are always shown masked
163
+ - 🧭 **Auto-detection**: finds existing data sources (Claude Code, Codex, Hermes) and registers the `memoark` command
164
+
165
+ **Run modes:**
166
+
167
+ | Command / environment | Behavior |
168
+ |---|---|
169
+ | `memoark init` (in a TTY) | Full-screen TUI config center |
170
+ | `memoark init --no-tui` | Linear question-and-answer wizard (fallback) |
171
+ | `memoark init --auto` | Fully automatic, no prompts, uses detected defaults |
172
+ | `memoark init --force` | Overwrite an existing configuration |
173
+ | `MEMOARK_NO_TUI=1` | Force-disable the TUI (also auto-falls back in non-TTY environments) |
174
+
175
+ > `memoark config init` is equivalent to `memoark init`. A few advanced settings (e.g. Feishu) currently need to be edited directly in `memoark.yaml` (see [Configuration](#configuration)).
176
+
177
+ ### Check Environment
178
+
179
+ ```bash
180
+ memoark doctor
181
+ ```
182
+
183
+ ### Run Your First Extraction
184
+
185
+ ```bash
186
+ # Extract from Feishu (your work source)
187
+ memoark extract --source feishu --since 3d
188
+
189
+ # Extract from Claude Code
190
+ memoark extract --source claude-code
191
+
192
+ # Extract from all enabled sources
193
+ memoark extract --source all
194
+
195
+ # Dry run (no LLM calls, just scan data volume)
196
+ memoark extract --source claude-code --dry-run
197
+ ```
198
+
199
+ > Feishu requires a one-time `lark-cli` user login and a `feishu` block in `memoark.yaml`. See [Configuration](#configuration) for the full Feishu setup, including DM vs. group capture paths.
200
+
201
+ ### Search Your Memory
202
+
203
+ ```bash
204
+ # Hybrid search (FTS + vector)
205
+ memoark search "auth middleware decision"
206
+
207
+ # FTS-only search
208
+ memoark search "JWT token" --mode fts
209
+ ```
210
+
211
+ ### Start the Server
212
+
213
+ ```bash
214
+ # HTTP API (default port 3927)
215
+ memoark serve
216
+
217
+ # MCP stdio (for AI agent integration — Claude Code, Cursor, etc.)
218
+ memoark serve --mcp
219
+ ```
220
+
221
+ ### Connect Your Agent (MCP)
222
+
223
+ Point any MCP client at Memoark so it can read and write your memory. For Claude Code:
224
+
225
+ ```json
226
+ {
227
+ "mcpServers": {
228
+ "memoark": {
229
+ "command": "memoark",
230
+ "args": ["serve", "--mcp"]
231
+ }
232
+ }
233
+ }
234
+ ```
235
+
236
+ Then ask your agent things like *"search my memory for the auth refactor decision"* or *"what tasks are still open on project X?"* — it answers from your local memory.
237
+
238
+ ### Browse the Web UI
239
+
240
+ ```bash
241
+ cd web
242
+ bun install
243
+ bun run dev # dashboard, timeline, knowledge graph, search
244
+ ```
245
+
246
+ ## Architecture
247
+
248
+ ```
249
+ ┌─────────────────────────────────────────────────────────────────┐
250
+ │ Data Sources │
251
+ │ Feishu (DMs · groups · email · calendar · docs · tasks) │
252
+ │ AI Agents (Claude Code · Codex · Hermes) │
253
+ └───────────────────────────────┬─────────────────────────────────┘
254
+
255
+ ┌─────────▼──────────┐
256
+ │ Signal Extraction │
257
+ │ Pipeline │
258
+ │ │
259
+ │ Collector │
260
+ │ → Dedup │
261
+ │ → Block Builder │
262
+ │ → Noise Filter │
263
+ │ → Signal Extractor │
264
+ │ → Privacy │
265
+ └─────────┬──────────┘
266
+
267
+ ┌─────────▼──────────┐
268
+ │ Storage Layer │
269
+ │ PGLite + pgvector │
270
+ │ (Embedded PG) │
271
+ └─────────┬──────────┘
272
+
273
+ ┌───────────────────┼───────────────────┐
274
+ │ │ │ │
275
+ ┌────────▼─────┐ ┌───▼────┐ ┌────────▼───┐ ┌─────▼──────┐
276
+ │ CLI │ │ MCP │ │ REST API │ │ Web UI │
277
+ │ Management │ │ Server │ │ (Hono) │ │ (React) │
278
+ │ & Extraction │ │(stdio) │ │ │ │ │
279
+ └───────────────┘ └────────┘ └────────────┘ └────────────┘
280
+ ```
281
+
282
+ ### Signal Extraction Pipeline
283
+
284
+ | Stage | Description |
285
+ |-------|-------------|
286
+ | **Collector** | Fetches raw messages from configured data sources |
287
+ | **Dedup** | Eliminates duplicates via content hashing |
288
+ | **Block Builder** | Groups messages into conversation blocks by time and topic |
289
+ | **Noise Filter** | Scores block significance using rules (L1) + LLM (L2) |
290
+ | **Signal Extractor** | LLM-powered extraction of entities, decisions, tasks, discoveries, knowledge, timeline, links |
291
+ | **Privacy Processor** | Dual-track redaction — reversible or irreversible |
292
+
293
+ ### Extracted Signal Types
294
+
295
+ | Signal | Description | Example |
296
+ |--------|-------------|---------|
297
+ | **Entities** | People, projects, tools, concepts | `project/memoark`, `tool/claude-code` |
298
+ | **Timeline** | Key events with timestamps | "2026-05-19: Completed multi-platform collector refactoring" |
299
+ | **Decisions** | Technical choices with reasoning | "Chose PGLite for embedded PostgreSQL with vector support" |
300
+ | **Tasks** | Action items with status | `[open] Implement token auto-refresh` |
301
+ | **Discoveries** | Insights, root causes, edge cases | "UUID v4 is not lexicographically sortable" |
302
+ | **Knowledge** | Reusable facts with provenance | "PGLite runs full Postgres in-process via WASM" |
303
+ | **Links** | Relationships between entities | `project/memoark --[depends_on]--> tool/pglite` |
304
+
305
+ ### Storage Layer
306
+
307
+ | Component | Description |
308
+ |-----------|-------------|
309
+ | **PageStore** | CRUD for wiki-style pages with YAML frontmatter |
310
+ | **ChunkStore** | Recursive text chunking (300 words, 50-word overlap) with embedding reuse |
311
+ | **SearchEngine** | FTS via `tsvector` + vector cosine via `pgvector`, fused with RRF scoring |
312
+ | **GraphStore** | Directed link graph with BFS traversal, link types, backlinks |
313
+ | **TagStore** | Page tagging with conflict-safe upserts |
314
+ | **TimelineStore** | Chronological entries per page with dedup |
315
+ | **EmbeddingService** | Batch embedding via OpenAI or Ollama, stale-chunk detection |
316
+
317
+ ## CLI Reference
318
+
319
+ ### `memoark extract`
320
+
321
+ Extract signals from data sources.
322
+
323
+ ```bash
324
+ memoark extract \
325
+ --source <name> # feishu, claude-code, codex, hermes, all
326
+ --format json|markdown # Output format (default: json)
327
+ --adapter store|file|gbrain|stdout # Output target (default: store)
328
+ --output <dir> # Output directory for file adapter
329
+ --since <date> # Process messages after this date (ISO 8601 or relative: 1d, 2h)
330
+ --limit <n> # Max messages to process
331
+ --dry-run # Test without LLM calls or writes
332
+ ```
333
+
334
+ ### `memoark serve`
335
+
336
+ Start the Memoark server.
337
+
338
+ ```bash
339
+ # HTTP API (default port from config)
340
+ memoark serve
341
+
342
+ # MCP stdio transport (for AI agent integration)
343
+ memoark serve --mcp
344
+ ```
345
+
346
+ ### `memoark search <query>`
347
+
348
+ Search your stored memory.
349
+
350
+ ```bash
351
+ # Hybrid search (FTS + vector, default)
352
+ memoark search "authentication middleware"
353
+
354
+ # FTS-only search
355
+ memoark search "JWT token" --mode fts
356
+
357
+ # Limit results
358
+ memoark search "deployment" --limit 5
359
+ ```
360
+
361
+ ### `memoark embed`
362
+
363
+ Generate embeddings for unembedded chunks.
364
+
365
+ ```bash
366
+ # Embed all stale chunks
367
+ memoark embed
368
+
369
+ # Limit batch size
370
+ memoark embed --limit 100
371
+ ```
372
+
373
+ ### `memoark doctor`
374
+
375
+ Diagnose configuration and environment.
376
+
377
+ ```bash
378
+ memoark doctor
379
+ ```
380
+
381
+ ### `memoark config init`
382
+
383
+ Equivalent to `memoark init` — launches the interactive configuration center to generate / edit `memoark.yaml` (supports `--auto` / `--no-tui` / `--force`).
384
+
385
+ ```bash
386
+ memoark config init
387
+ ```
388
+
389
+ ### `memoark sources list`
390
+
391
+ List available data sources.
392
+
393
+ ```bash
394
+ memoark sources list
395
+ ```
396
+
397
+ ### `memoark sources test <name>`
398
+
399
+ Test data source connectivity.
400
+
401
+ ```bash
402
+ memoark sources test claude-code
403
+ ```
404
+
405
+ ## Configuration
406
+
407
+ ### `memoark.yaml`
408
+
409
+ ```yaml
410
+ # Privacy
411
+ privacy:
412
+ enabled: true
413
+ mode: reversible # reversible | irreversible
414
+ redact_phone: true
415
+ redact_id_card: true
416
+ redact_bank_card: true
417
+ replacement: "[REDACTED]"
418
+
419
+ # LLM (for signal extraction)
420
+ llm:
421
+ provider: openai
422
+ model: gpt-4o-mini
423
+ api_key: ${OPENAI_API_KEY}
424
+
425
+ # Block Builder
426
+ block_builder:
427
+ block_gap_minutes: 30
428
+ max_block_tokens: 4000
429
+ max_block_messages: 100
430
+
431
+ # Data Sources
432
+ sources:
433
+ # Feishu (Lark) — your primary work source
434
+ feishu:
435
+ enabled: true
436
+ auth_mode: user # user mode enables DM + message search
437
+ app_id: ${FEISHU_APP_ID}
438
+ app_secret: ${FEISHU_APP_SECRET}
439
+ sources:
440
+ messages: # group chats via OpenAPI
441
+ enabled: true
442
+ chat_ids: []
443
+ lookback_days: 3
444
+ message_search: # DMs + recent chats via lark-cli
445
+ enabled: true
446
+ chat_types: [p2p] # add `group` to include groups
447
+ lookback_days: 3
448
+ calendar: { enabled: true }
449
+ docs: { enabled: true }
450
+ tasks: { enabled: true }
451
+ # AI agent sessions
452
+ claude-code:
453
+ enabled: true
454
+ codex:
455
+ enabled: true
456
+ hermes:
457
+ enabled: true
458
+
459
+ # Store (PGLite)
460
+ store:
461
+ data_dir: ~/.memoark/data
462
+
463
+ # Embeddings
464
+ embedding:
465
+ provider: openai # openai | ollama
466
+ model: text-embedding-3-large
467
+ dimensions: 1536
468
+ api_key: ${OPENAI_API_KEY}
469
+
470
+ # Server
471
+ server:
472
+ http_port: 3927
473
+ ```
474
+
475
+ > **Feishu DM vs. group capture:** `messages` uses the OpenAPI chat/message endpoints (best for known group `chat_id`s), while `message_search` uses `lark-cli im messages-search` in user mode (required for recent DMs and 1:1 bot chats). Enable both for full coverage, and complete the `lark-cli` user login first.
476
+
477
+ ## Supported Sources
478
+
479
+ ### Feishu (Lark)
480
+
481
+ Your primary work source — group messages, DMs, email, calendar events, docs, and tasks.
482
+
483
+ - **Auth**: `lark-cli` user-mode login (for DMs / message search) + app credentials
484
+ - **Data**: 7 sources — group chats, DMs, email, calendar, docs, tasks, message search
485
+ - **Why first**: Feishu carries the work itself — requirements, technical proposals, team decisions
486
+
487
+ ### Claude Code
488
+
489
+ Extracts conversation transcripts from Claude Code agent sessions.
490
+
491
+ - **Location**: `~/.claude/projects/`
492
+ - **Data**: Agent conversations, decisions, discoveries, session logs
493
+
494
+ ### Codex
495
+
496
+ Extracts session data from OpenAI Codex CLI.
497
+
498
+ - **Location**: `~/.codex/`
499
+ - **Data**: User/assistant messages with system-injection filtering
500
+
501
+ ### Hermes
502
+
503
+ Extracts session data from OpenClaw Hermes agents.
504
+
505
+ - **Location**: `~/.openclaw/agents/`
506
+ - **Data**: Multi-agent sessions with automatic sub-agent discovery
507
+
508
+ ## Roadmap
509
+
510
+ ### Phase 1 — Signal Extraction (Complete)
511
+
512
+ - [x] Multi-platform collectors (Claude Code, Codex, Hermes, Feishu)
513
+ - [x] LLM-powered noise filtering and signal extraction
514
+ - [x] 7 signal types: entities, timeline, decisions, tasks, discoveries, knowledge, links
515
+ - [x] Dual-track privacy redaction (reversible + irreversible)
516
+ - [x] JSON and Markdown output formatters
517
+ - [x] File, GBrain, and Stdout adapters
518
+ - [x] CLI with extract, doctor, config, sources commands
519
+
520
+ ### Phase 2 — Storage & Server (Complete)
521
+
522
+ - [x] PGLite embedded PostgreSQL with pgvector
523
+ - [x] PageStore, ChunkStore, TagStore, TimelineStore, GraphStore
524
+ - [x] Full-text search with `tsvector` (simple tokenizer for multilingual)
525
+ - [x] Vector search with `pgvector` cosine similarity
526
+ - [x] Hybrid RRF search fusing FTS + vector results
527
+ - [x] EmbeddingService (OpenAI / Ollama)
528
+ - [x] StoreAdapter — pipeline writes directly to PGLite
529
+ - [x] Hono REST API
530
+ - [x] MCP Server with 17 stdio tools
531
+ - [x] CLI serve, search, embed commands
532
+
533
+ ### Phase 3 — Web UI (Complete)
534
+
535
+ - [x] Dashboard
536
+ - [x] Timeline view
537
+ - [x] Knowledge graph visualization (force-directed)
538
+ - [x] Search interface
539
+ - [x] Entity / page detail views
540
+
541
+ ### Phase 4 — Context-Aware Extraction (Planned)
542
+
543
+ - [ ] ContextBuffer — share context across conversation blocks
544
+ - [ ] Weighted admission scoring (replaces binary noise filter)
545
+ - [ ] Narrative assembler — aggregate signals into per-entity narratives
546
+
547
+ ### Phase 5 — Consolidation & Daemon (Planned)
548
+
549
+ - [ ] Memory consolidation ("dream cycle"): entity merge, link repair, pattern discovery
550
+ - [ ] Resident background service with scheduled extraction
551
+ - [ ] Natural language Q&A over stored memories
552
+
553
+ ### Phase 6 — Sync & New Sources (Planned)
554
+
555
+ - [ ] Obsidian bidirectional sync
556
+ - [ ] WeChat chat history
557
+ - [ ] More platforms based on community demand
558
+
559
+ ## Tech Stack
560
+
561
+ | Layer | Technology |
562
+ |-------|-----------|
563
+ | Language | TypeScript |
564
+ | Runtime | Bun |
565
+ | Database | PGLite (embedded PostgreSQL) |
566
+ | Vector Search | pgvector |
567
+ | Embeddings | OpenAI / Ollama |
568
+ | Web Framework | Hono |
569
+ | Web UI | React + Vite |
570
+ | MCP | @modelcontextprotocol/sdk |
571
+ | Linter | Biome |
572
+ | Tests | Vitest (800+ tests) |
573
+
574
+ ## Development
575
+
576
+ ```bash
577
+ # Run tests
578
+ bun run test
579
+
580
+ # Watch mode
581
+ bun run test:watch
582
+
583
+ # Type-check
584
+ bun run typecheck
585
+
586
+ # Lint
587
+ bun run lint
588
+
589
+ # Auto-fix lint issues
590
+ bun run lint:fix
591
+ ```
592
+
593
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development workflow and guidelines.
594
+
595
+ ## Contributing
596
+
597
+ Contributions welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) before submitting a PR.
598
+
599
+ ## Community & Support
600
+
601
+ - 🐛 Found a bug or have a feature request? [Open an issue](https://github.com/AndreLYL/memoark/issues).
602
+ - 💡 Questions and ideas are welcome in the issue tracker.
603
+
604
+ ## License
605
+
606
+ Licensed under the [Apache License, Version 2.0](LICENSE).