@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
@@ -0,0 +1,103 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
3
+ import { getSessionContext } from "./context.js";
4
+ import { getEntityProfile, listSignalsByEntity } from "./entity.js";
5
+ export function createMcpToolHandlers(stores) {
6
+ return {
7
+ query: ({ query, limit }) => stores.search.query(query, { limit }),
8
+ search: ({ query, limit }) => stores.search.search(query, { limit }),
9
+ get_page: ({ slug }) => stores.pages.getPage(slug),
10
+ put_page: async ({ slug, content }) => {
11
+ const page = await stores.pages.putPage(slug, content);
12
+ await stores.chunks.rechunk(page.id, page.compiled_truth);
13
+ return page;
14
+ },
15
+ list_pages: (opts) => stores.pages.listPages(opts),
16
+ get_chunks: ({ slug }) => stores.chunks.getChunks(slug),
17
+ add_link: async ({ from, to, type, context, }) => {
18
+ await stores.graph.addLink(from, to, type ?? "", context);
19
+ return { ok: true };
20
+ },
21
+ remove_link: async ({ from, to }) => {
22
+ await stores.graph.removeLink(from, to);
23
+ return { ok: true };
24
+ },
25
+ get_links: ({ slug }) => stores.graph.getLinks(slug),
26
+ get_backlinks: ({ slug }) => stores.graph.getBacklinks(slug),
27
+ traverse_graph: ({ slug, depth, direction, }) => stores.graph.traverse(slug, { depth, direction }),
28
+ add_tag: async ({ slug, tag }) => {
29
+ await stores.tags.addTag(slug, tag);
30
+ return { ok: true };
31
+ },
32
+ remove_tag: async ({ slug, tag }) => {
33
+ await stores.tags.removeTag(slug, tag);
34
+ return { ok: true };
35
+ },
36
+ get_tags: ({ slug }) => stores.tags.getTags(slug),
37
+ add_timeline_entry: async (entry) => {
38
+ await stores.timeline.addEntry(entry.slug, entry);
39
+ return { ok: true };
40
+ },
41
+ get_timeline: ({ slug }) => stores.timeline.getTimeline(slug),
42
+ get_health: async () => {
43
+ const pages = await stores.db.pg.query("SELECT COUNT(*) AS c FROM pages");
44
+ const chunks = await stores.db.pg.query("SELECT COUNT(*) AS c FROM content_chunks");
45
+ return {
46
+ status: "ok",
47
+ pages: Number(pages.rows[0].c),
48
+ chunks: Number(chunks.rows[0].c),
49
+ };
50
+ },
51
+ get_session_context: ({ days }) => getSessionContext(stores, days ?? 7),
52
+ list_signals_by_entity: ({ entity_slug, signal_types, limit, }) => listSignalsByEntity(stores, entity_slug, signal_types, limit ?? 20),
53
+ get_entity_profile: ({ entity_slug }) => getEntityProfile(stores, entity_slug),
54
+ };
55
+ }
56
+ export function createMcpServer(stores) {
57
+ const server = new McpServer({ name: "memoark", version: "1.0.0" });
58
+ const tools = createMcpToolHandlers(stores);
59
+ const text = (value) => ({
60
+ content: [{ type: "text", text: JSON.stringify(value, null, 2) }],
61
+ });
62
+ server.tool("query", { query: z.string(), limit: z.number().optional() }, async (args) => text(await tools.query(args)));
63
+ server.tool("search", { query: z.string(), limit: z.number().optional() }, async (args) => text(await tools.search(args)));
64
+ server.tool("get_page", { slug: z.string() }, async (args) => text(await tools.get_page(args)));
65
+ server.tool("put_page", { slug: z.string(), content: z.string() }, async (args) => text(await tools.put_page(args)));
66
+ server.tool("list_pages", { type: z.string().optional(), limit: z.number().optional() }, async (args) => text(await tools.list_pages(args)));
67
+ server.tool("get_chunks", { slug: z.string() }, async (args) => text(await tools.get_chunks(args)));
68
+ server.tool("add_link", {
69
+ from: z.string(),
70
+ to: z.string(),
71
+ type: z.string().optional(),
72
+ context: z.string().optional(),
73
+ }, async (args) => text(await tools.add_link(args)));
74
+ server.tool("remove_link", { from: z.string(), to: z.string() }, async (args) => text(await tools.remove_link(args)));
75
+ server.tool("get_links", { slug: z.string() }, async (args) => text(await tools.get_links(args)));
76
+ server.tool("get_backlinks", { slug: z.string() }, async (args) => text(await tools.get_backlinks(args)));
77
+ server.tool("traverse_graph", {
78
+ slug: z.string(),
79
+ depth: z.number().optional(),
80
+ direction: z.enum(["in", "out", "both"]).optional(),
81
+ }, async (args) => text(await tools.traverse_graph(args)));
82
+ server.tool("add_tag", { slug: z.string(), tag: z.string() }, async (args) => text(await tools.add_tag(args)));
83
+ server.tool("remove_tag", { slug: z.string(), tag: z.string() }, async (args) => text(await tools.remove_tag(args)));
84
+ server.tool("get_tags", { slug: z.string() }, async (args) => text(await tools.get_tags(args)));
85
+ server.tool("add_timeline_entry", {
86
+ slug: z.string(),
87
+ date: z.string(),
88
+ summary: z.string(),
89
+ detail: z.string().optional(),
90
+ source: z.string().optional(),
91
+ }, async (args) => text(await tools.add_timeline_entry(args)));
92
+ server.tool("get_timeline", { slug: z.string() }, async (args) => text(await tools.get_timeline(args)));
93
+ server.tool("get_health", {}, async () => text(await tools.get_health()));
94
+ server.tool("get_session_context", { days: z.number().optional() }, async (args) => text(await tools.get_session_context(args)));
95
+ server.tool("list_signals_by_entity", {
96
+ entity_slug: z.string(),
97
+ signal_types: z.array(z.string()).optional(),
98
+ limit: z.number().optional(),
99
+ }, async (args) => text(await tools.list_signals_by_entity(args)));
100
+ server.tool("get_entity_profile", { entity_slug: z.string() }, async (args) => text(await tools.get_entity_profile(args)));
101
+ return server;
102
+ }
103
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/server/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface SetupServerOpts {
2
+ configPath?: string;
3
+ larkBin?: string;
4
+ open?: boolean;
5
+ }
6
+ export declare function startSetupServer(opts?: SetupServerOpts): Promise<void>;
7
+ //# sourceMappingURL=setup-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-server.d.ts","sourceRoot":"","sources":["../../src/server/setup-server.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwChF"}
@@ -0,0 +1,52 @@
1
+ import { exec } from "node:child_process";
2
+ import { join, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { Hono } from "hono";
5
+ import { createConfigRoutes } from "./config-routes.js";
6
+ const WEB_DIST = join(fileURLToPath(import.meta.url), "../../../web/dist");
7
+ function openBrowser(url) {
8
+ const cmd = process.platform === "darwin"
9
+ ? `open "${url}"`
10
+ : process.platform === "win32"
11
+ ? `start "" "${url}"`
12
+ : `xdg-open "${url}"`;
13
+ exec(cmd);
14
+ }
15
+ export async function startSetupServer(opts = {}) {
16
+ const configPath = opts.configPath ?? resolve(process.cwd(), "memoark.yaml");
17
+ return new Promise((resolvePromise) => {
18
+ const configRoutes = createConfigRoutes({
19
+ configPath,
20
+ larkBin: opts.larkBin,
21
+ onSetupComplete: () => {
22
+ console.log("\n✓ Configuration saved. Run `memoark serve` to start Memoark.");
23
+ server.stop(true);
24
+ resolvePromise();
25
+ },
26
+ });
27
+ const honoApp = new Hono();
28
+ honoApp.route("/", configRoutes);
29
+ const server = Bun.serve({
30
+ port: 0,
31
+ hostname: "127.0.0.1",
32
+ fetch: async (req) => {
33
+ const url = new URL(req.url);
34
+ if (url.pathname.startsWith("/api")) {
35
+ return honoApp.fetch(req);
36
+ }
37
+ const filePath = url.pathname === "/" ? "index.html" : url.pathname.replace(/^\//, "");
38
+ const candidate = Bun.file(join(WEB_DIST, filePath));
39
+ if (await candidate.exists())
40
+ return new Response(candidate);
41
+ return new Response(Bun.file(join(WEB_DIST, "index.html")));
42
+ },
43
+ });
44
+ const setupUrl = `http://localhost:${server.port}/setup`;
45
+ console.log(`Memoark setup UI running at ${setupUrl}`);
46
+ console.log("Press Ctrl+C to cancel.\n");
47
+ if (opts.open !== false) {
48
+ openBrowser(setupUrl);
49
+ }
50
+ });
51
+ }
52
+ //# sourceMappingURL=setup-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-server.js","sourceRoot":"","sources":["../../src/server/setup-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Hardware and data volume assessment for embedding provider recommendation.
3
+ * Detects CPU, GPU, memory, and estimates local data size to recommend
4
+ * whether local Ollama or remote OpenAI embedding is more suitable.
5
+ */
6
+ import type { DetectedSource } from "./detect-sources.js";
7
+ export interface HardwareProfile {
8
+ cpuModel: string;
9
+ cpuCores: number;
10
+ memoryGB: number;
11
+ hasAppleSilicon: boolean;
12
+ hasNvidiaGpu: boolean;
13
+ gpuName?: string;
14
+ arch: string;
15
+ platform: NodeJS.Platform;
16
+ }
17
+ export interface DataVolumeEstimate {
18
+ jsonlFiles: number;
19
+ totalSizeMB: number;
20
+ estimatedChunks: number;
21
+ }
22
+ export type EmbeddingRecommendation = "ollama" | "openai";
23
+ export interface AssessmentResult {
24
+ hardware: HardwareProfile;
25
+ dataVolume: DataVolumeEstimate;
26
+ recommendation: EmbeddingRecommendation;
27
+ reason: string;
28
+ estimatedOllamaMinutes?: number;
29
+ }
30
+ export declare function detectHardware(): HardwareProfile;
31
+ export declare function estimateDataVolume(sources: DetectedSource[]): DataVolumeEstimate;
32
+ export declare function assessEmbedding(hw: HardwareProfile, data: DataVolumeEstimate): AssessmentResult;
33
+ export declare function runEmbeddingAssessment(sources: DetectedSource[]): AssessmentResult;
34
+ //# sourceMappingURL=assess-hardware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assess-hardware.d.ts","sourceRoot":"","sources":["../../src/setup/assess-hardware.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,cAAc,EAAE,uBAAuB,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AA6CD,wBAAgB,cAAc,IAAI,eAAe,CAoBhD;AAyBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,kBAAkB,CAkBhF;AAqBD,wBAAgB,eAAe,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,GAAG,gBAAgB,CAuC/F;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,gBAAgB,CAIlF"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Hardware and data volume assessment for embedding provider recommendation.
3
+ * Detects CPU, GPU, memory, and estimates local data size to recommend
4
+ * whether local Ollama or remote OpenAI embedding is more suitable.
5
+ */
6
+ import { execSync } from "node:child_process";
7
+ import { readdirSync, statSync } from "node:fs";
8
+ import { cpus, totalmem } from "node:os";
9
+ import { join } from "node:path";
10
+ // ── Hardware detection ─────────────────────────────────────────────────────
11
+ function detectGpuMacOS() {
12
+ try {
13
+ const out = execSync("system_profiler SPDisplaysDataType 2>/dev/null", {
14
+ encoding: "utf-8",
15
+ timeout: 5000,
16
+ stdio: ["ignore", "pipe", "ignore"],
17
+ });
18
+ const match = out.match(/Chipset Model:\s*(.+)/);
19
+ return match?.[1]?.trim();
20
+ }
21
+ catch {
22
+ return undefined;
23
+ }
24
+ }
25
+ function detectGpuLinux() {
26
+ try {
27
+ const out = execSync("lspci 2>/dev/null | grep -i 'vga\\|3d\\|display'", {
28
+ encoding: "utf-8",
29
+ timeout: 3000,
30
+ stdio: ["ignore", "pipe", "ignore"],
31
+ });
32
+ return out.split("\n")[0]?.trim() || undefined;
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ }
38
+ function detectGpuWindows() {
39
+ try {
40
+ const out = execSync("wmic path win32_VideoController get name /format:list 2>nul", {
41
+ encoding: "utf-8",
42
+ timeout: 5000,
43
+ stdio: ["ignore", "pipe", "ignore"],
44
+ });
45
+ const match = out.match(/Name=(.+)/);
46
+ return match?.[1]?.trim() || undefined;
47
+ }
48
+ catch {
49
+ return undefined;
50
+ }
51
+ }
52
+ export function detectHardware() {
53
+ const platform = process.platform;
54
+ const arch = process.arch;
55
+ const cpuList = cpus();
56
+ const cpuModel = cpuList[0]?.model ?? "Unknown";
57
+ const cpuCores = cpuList.length;
58
+ const memoryGB = Math.round(totalmem() / 1024 / 1024 / 1024);
59
+ // Apple Silicon: macOS + arm64
60
+ const hasAppleSilicon = platform === "darwin" && arch === "arm64";
61
+ // GPU detection
62
+ let gpuName;
63
+ if (platform === "darwin")
64
+ gpuName = detectGpuMacOS();
65
+ else if (platform === "linux")
66
+ gpuName = detectGpuLinux();
67
+ else if (platform === "win32")
68
+ gpuName = detectGpuWindows();
69
+ const hasNvidiaGpu = Boolean(gpuName && /nvidia/i.test(gpuName));
70
+ return { cpuModel, cpuCores, memoryGB, hasAppleSilicon, hasNvidiaGpu, gpuName, arch, platform };
71
+ }
72
+ // ── Data volume estimation ─────────────────────────────────────────────────
73
+ function getFileSizeMB(filePath) {
74
+ try {
75
+ return statSync(filePath).size / 1024 / 1024;
76
+ }
77
+ catch {
78
+ return 0;
79
+ }
80
+ }
81
+ function walkJsonl(dir, results) {
82
+ try {
83
+ for (const entry of readdirSync(dir)) {
84
+ const full = join(dir, entry);
85
+ try {
86
+ const stat = statSync(full);
87
+ if (stat.isDirectory())
88
+ walkJsonl(full, results);
89
+ else if (entry.endsWith(".jsonl"))
90
+ results.push(full);
91
+ }
92
+ catch { }
93
+ }
94
+ }
95
+ catch { }
96
+ }
97
+ export function estimateDataVolume(sources) {
98
+ const files = [];
99
+ for (const source of sources) {
100
+ if (source.detected && source.path) {
101
+ walkJsonl(source.path, files);
102
+ }
103
+ }
104
+ const totalSizeMB = files.reduce((sum, f) => sum + getFileSizeMB(f), 0);
105
+ // Rough heuristic: 1MB JSONL ≈ 50 messages ≈ 30 chunks after block building
106
+ const estimatedChunks = Math.round((totalSizeMB / 1) * 30);
107
+ return {
108
+ jsonlFiles: files.length,
109
+ totalSizeMB: Math.round(totalSizeMB * 10) / 10,
110
+ estimatedChunks: Math.max(estimatedChunks, 0),
111
+ };
112
+ }
113
+ // ── Assessment & recommendation ────────────────────────────────────────────
114
+ // Benchmarks (seconds per chunk on each hardware type)
115
+ const SECONDS_PER_CHUNK = {
116
+ apple_silicon: 0.05, // M1/M2/M3 Metal GPU — very fast
117
+ nvidia_gpu: 0.08, // NVIDIA CUDA
118
+ intel_cpu: 0.8, // Intel CPU only — slow
119
+ amd_cpu: 0.6, // AMD CPU only
120
+ other: 1.0,
121
+ };
122
+ function getSecondsPerChunk(hw) {
123
+ if (hw.hasAppleSilicon)
124
+ return SECONDS_PER_CHUNK.apple_silicon;
125
+ if (hw.hasNvidiaGpu)
126
+ return SECONDS_PER_CHUNK.nvidia_gpu;
127
+ if (/intel/i.test(hw.cpuModel))
128
+ return SECONDS_PER_CHUNK.intel_cpu;
129
+ if (/amd/i.test(hw.cpuModel))
130
+ return SECONDS_PER_CHUNK.amd_cpu;
131
+ return SECONDS_PER_CHUNK.other;
132
+ }
133
+ export function assessEmbedding(hw, data) {
134
+ const secsPerChunk = getSecondsPerChunk(hw);
135
+ const estimatedSeconds = data.estimatedChunks * secsPerChunk;
136
+ const estimatedMinutes = Math.round(estimatedSeconds / 60);
137
+ // Decision thresholds
138
+ const TOO_SLOW_MINUTES = 30; // > 30 min → recommend OpenAI
139
+ const LOW_MEMORY_GB = 8; // < 8GB RAM → risk of OOM with local model
140
+ let recommendation;
141
+ let reason;
142
+ if (hw.memoryGB < LOW_MEMORY_GB) {
143
+ recommendation = "openai";
144
+ reason = `内存仅 ${hw.memoryGB}GB,本地模型运行可能不稳定,建议使用 OpenAI`;
145
+ }
146
+ else if (hw.hasAppleSilicon) {
147
+ recommendation = "ollama";
148
+ reason = `Apple Silicon(Metal GPU)本地 embedding 速度快,约 ${estimatedMinutes} 分钟处理完 ${data.estimatedChunks} 个 chunk`;
149
+ }
150
+ else if (hw.hasNvidiaGpu) {
151
+ recommendation = "ollama";
152
+ reason = `检测到 NVIDIA GPU(${hw.gpuName}),本地 embedding 速度快,约 ${estimatedMinutes} 分钟`;
153
+ }
154
+ else if (estimatedMinutes > TOO_SLOW_MINUTES) {
155
+ recommendation = "openai";
156
+ reason = `${hw.cpuModel} 处理 ${data.estimatedChunks} 个 chunk 预计需要约 ${estimatedMinutes} 分钟,建议使用 OpenAI(秒级完成)`;
157
+ }
158
+ else if (data.estimatedChunks === 0) {
159
+ recommendation = "ollama";
160
+ reason = "未检测到本地数据,Ollama 适合轻量使用";
161
+ }
162
+ else {
163
+ recommendation = "ollama";
164
+ reason = `预计约 ${estimatedMinutes} 分钟处理完 ${data.estimatedChunks} 个 chunk`;
165
+ }
166
+ return {
167
+ hardware: hw,
168
+ dataVolume: data,
169
+ recommendation,
170
+ reason,
171
+ estimatedOllamaMinutes: estimatedMinutes,
172
+ };
173
+ }
174
+ export function runEmbeddingAssessment(sources) {
175
+ const hw = detectHardware();
176
+ const data = estimateDataVolume(sources);
177
+ return assessEmbedding(hw, data);
178
+ }
179
+ //# sourceMappingURL=assess-hardware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assess-hardware.js","sourceRoot":"","sources":["../../src/setup/assess-hardware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface LLMConnectionConfig {
2
+ provider: string;
3
+ model: string;
4
+ baseUrl?: string;
5
+ apiKey?: string;
6
+ }
7
+ export declare function testLLMConnection(cfg: LLMConnectionConfig): Promise<{
8
+ ok: boolean;
9
+ error?: string;
10
+ }>;
11
+ export declare function testEmbeddingConnection(baseUrl: string, apiKey: string): Promise<{
12
+ ok: boolean;
13
+ error?: string;
14
+ }>;
15
+ export declare function checkOllamaRunning(): Promise<boolean>;
16
+ export declare function checkOllamaModel(model: string): Promise<boolean>;
17
+ //# sourceMappingURL=connection-tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-tests.d.ts","sourceRoot":"","sources":["../../src/setup/connection-tests.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB1C;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB1C;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS3D;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUtE"}
@@ -0,0 +1,67 @@
1
+ import { createLLMProvider } from "../extractors/providers/index.js";
2
+ export async function testLLMConnection(cfg) {
3
+ if (cfg.provider === "mock")
4
+ return { ok: true };
5
+ if (!cfg.apiKey)
6
+ return { ok: false, error: "No API key provided" };
7
+ try {
8
+ const llmProvider = createLLMProvider({
9
+ provider: cfg.provider,
10
+ model: cfg.model,
11
+ base_url: cfg.baseUrl,
12
+ api_key: cfg.apiKey,
13
+ });
14
+ await llmProvider.chat([{ role: "user", content: "hi" }], { maxTokens: 5 });
15
+ return { ok: true };
16
+ }
17
+ catch (err) {
18
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
19
+ }
20
+ }
21
+ export async function testEmbeddingConnection(baseUrl, apiKey) {
22
+ if (!apiKey)
23
+ return { ok: false, error: "No API key provided" };
24
+ try {
25
+ const url = `${baseUrl.replace(/\/$/, "")}/embeddings`;
26
+ const res = await fetch(url, {
27
+ method: "POST",
28
+ headers: {
29
+ "Content-Type": "application/json",
30
+ Authorization: `Bearer ${apiKey}`,
31
+ },
32
+ body: JSON.stringify({ model: "text-embedding-3-large", input: "test" }),
33
+ signal: AbortSignal.timeout(15_000),
34
+ });
35
+ const data = (await res.json());
36
+ if (data.error)
37
+ return { ok: false, error: data.error.message };
38
+ return { ok: true };
39
+ }
40
+ catch (err) {
41
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
42
+ }
43
+ }
44
+ export async function checkOllamaRunning() {
45
+ try {
46
+ const res = await fetch("http://localhost:11434/api/tags", {
47
+ signal: AbortSignal.timeout(3000),
48
+ });
49
+ return res.ok;
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ }
55
+ export async function checkOllamaModel(model) {
56
+ try {
57
+ const res = await fetch("http://localhost:11434/api/tags", {
58
+ signal: AbortSignal.timeout(3000),
59
+ });
60
+ const data = (await res.json());
61
+ return (data.models ?? []).some((m) => m.name.startsWith(model));
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ //# sourceMappingURL=connection-tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-tests.js","sourceRoot":"","sources":["../../src/setup/connection-tests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface DetectedApiKeys {
2
+ openai?: string;
3
+ anthropic?: string;
4
+ source: string;
5
+ }
6
+ interface DetectApiKeysOptions {
7
+ env?: NodeJS.ProcessEnv;
8
+ homeDir?: string;
9
+ platform?: NodeJS.Platform;
10
+ }
11
+ export declare function detectApiKeys(options?: DetectApiKeysOptions): DetectedApiKeys;
12
+ export {};
13
+ //# sourceMappingURL=detect-api-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-api-keys.d.ts","sourceRoot":"","sources":["../../src/setup/detect-api-keys.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,oBAAoB;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC5B;AAOD,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,eAAe,CAoCjF"}
@@ -0,0 +1,41 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ function findExport(content, name) {
5
+ const match = content.match(new RegExp(`(?:export\\s+)?${name}=["']?([^"'\\n]+)["']?`));
6
+ return match?.[1]?.trim();
7
+ }
8
+ export function detectApiKeys(options = {}) {
9
+ const env = options.env ?? process.env;
10
+ const keys = {
11
+ openai: env.OPENAI_API_KEY,
12
+ anthropic: env.ANTHROPIC_API_KEY,
13
+ source: "none",
14
+ };
15
+ if (keys.openai || keys.anthropic) {
16
+ keys.source = "environment";
17
+ return keys;
18
+ }
19
+ const platform = options.platform ?? process.platform;
20
+ if (platform === "win32") {
21
+ return { source: "none" };
22
+ }
23
+ const home = options.homeDir ?? homedir();
24
+ const shellFiles = [".zshrc", ".bashrc", ".bash_profile", ".profile"];
25
+ for (const file of shellFiles) {
26
+ const shellPath = join(home, file);
27
+ if (!existsSync(shellPath))
28
+ continue;
29
+ try {
30
+ const content = readFileSync(shellPath, "utf-8");
31
+ const openai = findExport(content, "OPENAI_API_KEY");
32
+ const anthropic = findExport(content, "ANTHROPIC_API_KEY");
33
+ if (openai || anthropic) {
34
+ return { openai, anthropic, source: file };
35
+ }
36
+ }
37
+ catch { }
38
+ }
39
+ return { source: "none" };
40
+ }
41
+ //# sourceMappingURL=detect-api-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-api-keys.js","sourceRoot":"","sources":["../../src/setup/detect-api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,SAAS,UAAU,CAAC,OAAe,EAAE,IAAY;IAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,kBAAkB,IAAI,wBAAwB,CAAC,CAAC,CAAC;IACxF,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAgC,EAAE;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,IAAI,GAAoB;QAC5B,MAAM,EAAE,GAAG,CAAC,cAAc;QAC1B,SAAS,EAAE,GAAG,CAAC,iBAAiB;QAChC,MAAM,EAAE,MAAM;KACf,CAAC;IAEF,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAEtE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QAErC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YAC3D,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;gBACxB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { execFileSync as nodeExecFileSync } from "node:child_process";
2
+ export interface RuntimeInfo {
3
+ name: "bun" | "node" | "tsx";
4
+ version: string;
5
+ }
6
+ type ExecFileSync = typeof nodeExecFileSync;
7
+ interface RuntimeDetectionOptions {
8
+ execFileSync?: ExecFileSync;
9
+ platform?: NodeJS.Platform;
10
+ }
11
+ export declare function detectCurrentRuntime(): RuntimeInfo;
12
+ export declare function detectAvailableRuntimes(options?: RuntimeDetectionOptions): RuntimeInfo[];
13
+ export {};
14
+ //# sourceMappingURL=detect-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-runtime.d.ts","sourceRoot":"","sources":["../../src/setup/detect-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,YAAY,GAAG,OAAO,gBAAgB,CAAC;AAE5C,UAAU,uBAAuB;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC5B;AAgCD,wBAAgB,oBAAoB,IAAI,WAAW,CAMlD;AAED,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,uBAA4B,GAAG,WAAW,EAAE,CAQ5F"}