helixmind 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of helixmind might be problematic. Click here for more details.

Files changed (479) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +207 -0
  3. package/dist/cli/agent/autonomous.d.ts +10 -0
  4. package/dist/cli/agent/autonomous.d.ts.map +1 -0
  5. package/dist/cli/agent/autonomous.js +172 -0
  6. package/dist/cli/agent/autonomous.js.map +1 -0
  7. package/dist/cli/agent/loop.d.ts +76 -0
  8. package/dist/cli/agent/loop.d.ts.map +1 -0
  9. package/dist/cli/agent/loop.js +333 -0
  10. package/dist/cli/agent/loop.js.map +1 -0
  11. package/dist/cli/agent/permissions.d.ts +28 -0
  12. package/dist/cli/agent/permissions.d.ts.map +1 -0
  13. package/dist/cli/agent/permissions.js +180 -0
  14. package/dist/cli/agent/permissions.js.map +1 -0
  15. package/dist/cli/agent/sandbox.d.ts +17 -0
  16. package/dist/cli/agent/sandbox.d.ts.map +1 -0
  17. package/dist/cli/agent/sandbox.js +124 -0
  18. package/dist/cli/agent/sandbox.js.map +1 -0
  19. package/dist/cli/agent/tools/edit-file.d.ts +2 -0
  20. package/dist/cli/agent/tools/edit-file.d.ts.map +1 -0
  21. package/dist/cli/agent/tools/edit-file.js +49 -0
  22. package/dist/cli/agent/tools/edit-file.js.map +1 -0
  23. package/dist/cli/agent/tools/find.d.ts +2 -0
  24. package/dist/cli/agent/tools/find.d.ts.map +1 -0
  25. package/dist/cli/agent/tools/find.js +35 -0
  26. package/dist/cli/agent/tools/find.js.map +1 -0
  27. package/dist/cli/agent/tools/git-commit.d.ts +2 -0
  28. package/dist/cli/agent/tools/git-commit.d.ts.map +1 -0
  29. package/dist/cli/agent/tools/git-commit.js +51 -0
  30. package/dist/cli/agent/tools/git-commit.js.map +1 -0
  31. package/dist/cli/agent/tools/git-diff.d.ts +2 -0
  32. package/dist/cli/agent/tools/git-diff.d.ts.map +1 -0
  33. package/dist/cli/agent/tools/git-diff.js +36 -0
  34. package/dist/cli/agent/tools/git-diff.js.map +1 -0
  35. package/dist/cli/agent/tools/git-log.d.ts +2 -0
  36. package/dist/cli/agent/tools/git-log.d.ts.map +1 -0
  37. package/dist/cli/agent/tools/git-log.js +32 -0
  38. package/dist/cli/agent/tools/git-log.js.map +1 -0
  39. package/dist/cli/agent/tools/git-status.d.ts +2 -0
  40. package/dist/cli/agent/tools/git-status.d.ts.map +1 -0
  41. package/dist/cli/agent/tools/git-status.js +38 -0
  42. package/dist/cli/agent/tools/git-status.js.map +1 -0
  43. package/dist/cli/agent/tools/list-dir.d.ts +2 -0
  44. package/dist/cli/agent/tools/list-dir.d.ts.map +1 -0
  45. package/dist/cli/agent/tools/list-dir.js +73 -0
  46. package/dist/cli/agent/tools/list-dir.js.map +1 -0
  47. package/dist/cli/agent/tools/read-file.d.ts +2 -0
  48. package/dist/cli/agent/tools/read-file.d.ts.map +1 -0
  49. package/dist/cli/agent/tools/read-file.js +45 -0
  50. package/dist/cli/agent/tools/read-file.js.map +1 -0
  51. package/dist/cli/agent/tools/registry.d.ts +18 -0
  52. package/dist/cli/agent/tools/registry.d.ts.map +1 -0
  53. package/dist/cli/agent/tools/registry.js +31 -0
  54. package/dist/cli/agent/tools/registry.js.map +1 -0
  55. package/dist/cli/agent/tools/run-command.d.ts +2 -0
  56. package/dist/cli/agent/tools/run-command.d.ts.map +1 -0
  57. package/dist/cli/agent/tools/run-command.js +79 -0
  58. package/dist/cli/agent/tools/run-command.js.map +1 -0
  59. package/dist/cli/agent/tools/search.d.ts +2 -0
  60. package/dist/cli/agent/tools/search.d.ts.map +1 -0
  61. package/dist/cli/agent/tools/search.js +104 -0
  62. package/dist/cli/agent/tools/search.js.map +1 -0
  63. package/dist/cli/agent/tools/spiral-query.d.ts +2 -0
  64. package/dist/cli/agent/tools/spiral-query.d.ts.map +1 -0
  65. package/dist/cli/agent/tools/spiral-query.js +52 -0
  66. package/dist/cli/agent/tools/spiral-query.js.map +1 -0
  67. package/dist/cli/agent/tools/spiral-store.d.ts +2 -0
  68. package/dist/cli/agent/tools/spiral-store.d.ts.map +1 -0
  69. package/dist/cli/agent/tools/spiral-store.js +37 -0
  70. package/dist/cli/agent/tools/spiral-store.js.map +1 -0
  71. package/dist/cli/agent/tools/web-research.d.ts +2 -0
  72. package/dist/cli/agent/tools/web-research.d.ts.map +1 -0
  73. package/dist/cli/agent/tools/web-research.js +96 -0
  74. package/dist/cli/agent/tools/web-research.js.map +1 -0
  75. package/dist/cli/agent/tools/write-file.d.ts +2 -0
  76. package/dist/cli/agent/tools/write-file.d.ts.map +1 -0
  77. package/dist/cli/agent/tools/write-file.js +91 -0
  78. package/dist/cli/agent/tools/write-file.js.map +1 -0
  79. package/dist/cli/agent/undo.d.ts +30 -0
  80. package/dist/cli/agent/undo.d.ts.map +1 -0
  81. package/dist/cli/agent/undo.js +48 -0
  82. package/dist/cli/agent/undo.js.map +1 -0
  83. package/dist/cli/auth/callback-server.d.ts +15 -0
  84. package/dist/cli/auth/callback-server.d.ts.map +1 -0
  85. package/dist/cli/auth/callback-server.js +168 -0
  86. package/dist/cli/auth/callback-server.js.map +1 -0
  87. package/dist/cli/auth/feature-gate.d.ts +19 -0
  88. package/dist/cli/auth/feature-gate.d.ts.map +1 -0
  89. package/dist/cli/auth/feature-gate.js +74 -0
  90. package/dist/cli/auth/feature-gate.js.map +1 -0
  91. package/dist/cli/auth/guard.d.ts +10 -0
  92. package/dist/cli/auth/guard.d.ts.map +1 -0
  93. package/dist/cli/auth/guard.js +46 -0
  94. package/dist/cli/auth/guard.js.map +1 -0
  95. package/dist/cli/auth/login.d.ts +22 -0
  96. package/dist/cli/auth/login.d.ts.map +1 -0
  97. package/dist/cli/auth/login.js +194 -0
  98. package/dist/cli/auth/login.js.map +1 -0
  99. package/dist/cli/auth/logout.d.ts +6 -0
  100. package/dist/cli/auth/logout.d.ts.map +1 -0
  101. package/dist/cli/auth/logout.js +36 -0
  102. package/dist/cli/auth/logout.js.map +1 -0
  103. package/dist/cli/bench/dataset.d.ts +13 -0
  104. package/dist/cli/bench/dataset.d.ts.map +1 -0
  105. package/dist/cli/bench/dataset.js +97 -0
  106. package/dist/cli/bench/dataset.js.map +1 -0
  107. package/dist/cli/bench/harness.d.ts +7 -0
  108. package/dist/cli/bench/harness.d.ts.map +1 -0
  109. package/dist/cli/bench/harness.js +135 -0
  110. package/dist/cli/bench/harness.js.map +1 -0
  111. package/dist/cli/bench/metrics.d.ts +15 -0
  112. package/dist/cli/bench/metrics.d.ts.map +1 -0
  113. package/dist/cli/bench/metrics.js +98 -0
  114. package/dist/cli/bench/metrics.js.map +1 -0
  115. package/dist/cli/bench/output.d.ts +42 -0
  116. package/dist/cli/bench/output.d.ts.map +1 -0
  117. package/dist/cli/bench/output.js +140 -0
  118. package/dist/cli/bench/output.js.map +1 -0
  119. package/dist/cli/bench/prompt.d.ts +13 -0
  120. package/dist/cli/bench/prompt.d.ts.map +1 -0
  121. package/dist/cli/bench/prompt.js +106 -0
  122. package/dist/cli/bench/prompt.js.map +1 -0
  123. package/dist/cli/bench/runner.d.ts +14 -0
  124. package/dist/cli/bench/runner.d.ts.map +1 -0
  125. package/dist/cli/bench/runner.js +334 -0
  126. package/dist/cli/bench/runner.js.map +1 -0
  127. package/dist/cli/bench/types.d.ts +109 -0
  128. package/dist/cli/bench/types.d.ts.map +1 -0
  129. package/dist/cli/bench/types.js +2 -0
  130. package/dist/cli/bench/types.js.map +1 -0
  131. package/dist/cli/bench/ui.d.ts +12 -0
  132. package/dist/cli/bench/ui.d.ts.map +1 -0
  133. package/dist/cli/bench/ui.js +126 -0
  134. package/dist/cli/bench/ui.js.map +1 -0
  135. package/dist/cli/brain/archive.d.ts +33 -0
  136. package/dist/cli/brain/archive.d.ts.map +1 -0
  137. package/dist/cli/brain/archive.js +159 -0
  138. package/dist/cli/brain/archive.js.map +1 -0
  139. package/dist/cli/brain/control-protocol.d.ts +159 -0
  140. package/dist/cli/brain/control-protocol.d.ts.map +1 -0
  141. package/dist/cli/brain/control-protocol.js +41 -0
  142. package/dist/cli/brain/control-protocol.js.map +1 -0
  143. package/dist/cli/brain/exporter.d.ts +34 -0
  144. package/dist/cli/brain/exporter.d.ts.map +1 -0
  145. package/dist/cli/brain/exporter.js +37 -0
  146. package/dist/cli/brain/exporter.js.map +1 -0
  147. package/dist/cli/brain/generator.d.ts +67 -0
  148. package/dist/cli/brain/generator.d.ts.map +1 -0
  149. package/dist/cli/brain/generator.js +239 -0
  150. package/dist/cli/brain/generator.js.map +1 -0
  151. package/dist/cli/brain/relay-client.d.ts +8 -0
  152. package/dist/cli/brain/relay-client.d.ts.map +1 -0
  153. package/dist/cli/brain/relay-client.js +173 -0
  154. package/dist/cli/brain/relay-client.js.map +1 -0
  155. package/dist/cli/brain/server.d.ts +34 -0
  156. package/dist/cli/brain/server.d.ts.map +1 -0
  157. package/dist/cli/brain/server.js +425 -0
  158. package/dist/cli/brain/server.js.map +1 -0
  159. package/dist/cli/brain/template.d.ts +3 -0
  160. package/dist/cli/brain/template.d.ts.map +1 -0
  161. package/dist/cli/brain/template.js +2072 -0
  162. package/dist/cli/brain/template.js.map +1 -0
  163. package/dist/cli/checkpoints/browser.d.ts +27 -0
  164. package/dist/cli/checkpoints/browser.d.ts.map +1 -0
  165. package/dist/cli/checkpoints/browser.js +238 -0
  166. package/dist/cli/checkpoints/browser.js.map +1 -0
  167. package/dist/cli/checkpoints/keybinding.d.ts +22 -0
  168. package/dist/cli/checkpoints/keybinding.d.ts.map +1 -0
  169. package/dist/cli/checkpoints/keybinding.js +43 -0
  170. package/dist/cli/checkpoints/keybinding.js.map +1 -0
  171. package/dist/cli/checkpoints/revert.d.ts +37 -0
  172. package/dist/cli/checkpoints/revert.d.ts.map +1 -0
  173. package/dist/cli/checkpoints/revert.js +144 -0
  174. package/dist/cli/checkpoints/revert.js.map +1 -0
  175. package/dist/cli/checkpoints/store.d.ts +48 -0
  176. package/dist/cli/checkpoints/store.d.ts.map +1 -0
  177. package/dist/cli/checkpoints/store.js +188 -0
  178. package/dist/cli/checkpoints/store.js.map +1 -0
  179. package/dist/cli/commands/archive.d.ts +7 -0
  180. package/dist/cli/commands/archive.d.ts.map +1 -0
  181. package/dist/cli/commands/archive.js +66 -0
  182. package/dist/cli/commands/archive.js.map +1 -0
  183. package/dist/cli/commands/auth.d.ts +10 -0
  184. package/dist/cli/commands/auth.d.ts.map +1 -0
  185. package/dist/cli/commands/auth.js +44 -0
  186. package/dist/cli/commands/auth.js.map +1 -0
  187. package/dist/cli/commands/bench.d.ts +25 -0
  188. package/dist/cli/commands/bench.d.ts.map +1 -0
  189. package/dist/cli/commands/bench.js +114 -0
  190. package/dist/cli/commands/bench.js.map +1 -0
  191. package/dist/cli/commands/chat.d.ts +11 -0
  192. package/dist/cli/commands/chat.d.ts.map +1 -0
  193. package/dist/cli/commands/chat.js +2321 -0
  194. package/dist/cli/commands/chat.js.map +1 -0
  195. package/dist/cli/commands/config.d.ts +4 -0
  196. package/dist/cli/commands/config.d.ts.map +1 -0
  197. package/dist/cli/commands/config.js +41 -0
  198. package/dist/cli/commands/config.js.map +1 -0
  199. package/dist/cli/commands/feed.d.ts +6 -0
  200. package/dist/cli/commands/feed.d.ts.map +1 -0
  201. package/dist/cli/commands/feed.js +95 -0
  202. package/dist/cli/commands/feed.js.map +1 -0
  203. package/dist/cli/commands/helix-menu.d.ts +4 -0
  204. package/dist/cli/commands/helix-menu.d.ts.map +1 -0
  205. package/dist/cli/commands/helix-menu.js +400 -0
  206. package/dist/cli/commands/helix-menu.js.map +1 -0
  207. package/dist/cli/commands/init.d.ts +2 -0
  208. package/dist/cli/commands/init.d.ts.map +1 -0
  209. package/dist/cli/commands/init.js +26 -0
  210. package/dist/cli/commands/init.js.map +1 -0
  211. package/dist/cli/commands/setup.d.ts +20 -0
  212. package/dist/cli/commands/setup.d.ts.map +1 -0
  213. package/dist/cli/commands/setup.js +314 -0
  214. package/dist/cli/commands/setup.js.map +1 -0
  215. package/dist/cli/commands/spiral.d.ts +4 -0
  216. package/dist/cli/commands/spiral.d.ts.map +1 -0
  217. package/dist/cli/commands/spiral.js +81 -0
  218. package/dist/cli/commands/spiral.js.map +1 -0
  219. package/dist/cli/config/store.d.ts +72 -0
  220. package/dist/cli/config/store.d.ts.map +1 -0
  221. package/dist/cli/config/store.js +241 -0
  222. package/dist/cli/config/store.js.map +1 -0
  223. package/dist/cli/context/assembler.d.ts +8 -0
  224. package/dist/cli/context/assembler.d.ts.map +1 -0
  225. package/dist/cli/context/assembler.js +124 -0
  226. package/dist/cli/context/assembler.js.map +1 -0
  227. package/dist/cli/context/project.d.ts +13 -0
  228. package/dist/cli/context/project.d.ts.map +1 -0
  229. package/dist/cli/context/project.js +126 -0
  230. package/dist/cli/context/project.js.map +1 -0
  231. package/dist/cli/context/session-buffer.d.ts +57 -0
  232. package/dist/cli/context/session-buffer.d.ts.map +1 -0
  233. package/dist/cli/context/session-buffer.js +268 -0
  234. package/dist/cli/context/session-buffer.js.map +1 -0
  235. package/dist/cli/context/trimmer.d.ts +26 -0
  236. package/dist/cli/context/trimmer.d.ts.map +1 -0
  237. package/dist/cli/context/trimmer.js +105 -0
  238. package/dist/cli/context/trimmer.js.map +1 -0
  239. package/dist/cli/feed/analyzer.d.ts +17 -0
  240. package/dist/cli/feed/analyzer.d.ts.map +1 -0
  241. package/dist/cli/feed/analyzer.js +220 -0
  242. package/dist/cli/feed/analyzer.js.map +1 -0
  243. package/dist/cli/feed/intent.d.ts +8 -0
  244. package/dist/cli/feed/intent.d.ts.map +1 -0
  245. package/dist/cli/feed/intent.js +70 -0
  246. package/dist/cli/feed/intent.js.map +1 -0
  247. package/dist/cli/feed/parser.d.ts +23 -0
  248. package/dist/cli/feed/parser.d.ts.map +1 -0
  249. package/dist/cli/feed/parser.js +166 -0
  250. package/dist/cli/feed/parser.js.map +1 -0
  251. package/dist/cli/feed/pipeline.d.ts +32 -0
  252. package/dist/cli/feed/pipeline.d.ts.map +1 -0
  253. package/dist/cli/feed/pipeline.js +242 -0
  254. package/dist/cli/feed/pipeline.js.map +1 -0
  255. package/dist/cli/feed/reader.d.ts +10 -0
  256. package/dist/cli/feed/reader.d.ts.map +1 -0
  257. package/dist/cli/feed/reader.js +61 -0
  258. package/dist/cli/feed/reader.js.map +1 -0
  259. package/dist/cli/feed/scanner.d.ts +10 -0
  260. package/dist/cli/feed/scanner.d.ts.map +1 -0
  261. package/dist/cli/feed/scanner.js +124 -0
  262. package/dist/cli/feed/scanner.js.map +1 -0
  263. package/dist/cli/feed/watcher.d.ts +14 -0
  264. package/dist/cli/feed/watcher.d.ts.map +1 -0
  265. package/dist/cli/feed/watcher.js +76 -0
  266. package/dist/cli/feed/watcher.js.map +1 -0
  267. package/dist/cli/index.d.ts +3 -0
  268. package/dist/cli/index.d.ts.map +1 -0
  269. package/dist/cli/index.js +204 -0
  270. package/dist/cli/index.js.map +1 -0
  271. package/dist/cli/providers/anthropic.d.ts +10 -0
  272. package/dist/cli/providers/anthropic.d.ts.map +1 -0
  273. package/dist/cli/providers/anthropic.js +117 -0
  274. package/dist/cli/providers/anthropic.js.map +1 -0
  275. package/dist/cli/providers/ollama.d.ts +37 -0
  276. package/dist/cli/providers/ollama.d.ts.map +1 -0
  277. package/dist/cli/providers/ollama.js +151 -0
  278. package/dist/cli/providers/ollama.js.map +1 -0
  279. package/dist/cli/providers/openai.d.ts +13 -0
  280. package/dist/cli/providers/openai.d.ts.map +1 -0
  281. package/dist/cli/providers/openai.js +283 -0
  282. package/dist/cli/providers/openai.js.map +1 -0
  283. package/dist/cli/providers/rate-limiter.d.ts +51 -0
  284. package/dist/cli/providers/rate-limiter.d.ts.map +1 -0
  285. package/dist/cli/providers/rate-limiter.js +164 -0
  286. package/dist/cli/providers/rate-limiter.js.map +1 -0
  287. package/dist/cli/providers/registry.d.ts +16 -0
  288. package/dist/cli/providers/registry.d.ts.map +1 -0
  289. package/dist/cli/providers/registry.js +99 -0
  290. package/dist/cli/providers/registry.js.map +1 -0
  291. package/dist/cli/providers/types.d.ts +61 -0
  292. package/dist/cli/providers/types.d.ts.map +1 -0
  293. package/dist/cli/providers/types.js +2 -0
  294. package/dist/cli/providers/types.js.map +1 -0
  295. package/dist/cli/sessions/manager.d.ts +69 -0
  296. package/dist/cli/sessions/manager.d.ts.map +1 -0
  297. package/dist/cli/sessions/manager.js +200 -0
  298. package/dist/cli/sessions/manager.js.map +1 -0
  299. package/dist/cli/sessions/session.d.ts +54 -0
  300. package/dist/cli/sessions/session.d.ts.map +1 -0
  301. package/dist/cli/sessions/session.js +70 -0
  302. package/dist/cli/sessions/session.js.map +1 -0
  303. package/dist/cli/sessions/tab-view.d.ts +18 -0
  304. package/dist/cli/sessions/tab-view.d.ts.map +1 -0
  305. package/dist/cli/sessions/tab-view.js +134 -0
  306. package/dist/cli/sessions/tab-view.js.map +1 -0
  307. package/dist/cli/ui/activity.d.ts +82 -0
  308. package/dist/cli/ui/activity.d.ts.map +1 -0
  309. package/dist/cli/ui/activity.js +309 -0
  310. package/dist/cli/ui/activity.js.map +1 -0
  311. package/dist/cli/ui/chat-view.d.ts +10 -0
  312. package/dist/cli/ui/chat-view.d.ts.map +1 -0
  313. package/dist/cli/ui/chat-view.js +165 -0
  314. package/dist/cli/ui/chat-view.js.map +1 -0
  315. package/dist/cli/ui/command-suggest.d.ts +22 -0
  316. package/dist/cli/ui/command-suggest.d.ts.map +1 -0
  317. package/dist/cli/ui/command-suggest.js +115 -0
  318. package/dist/cli/ui/command-suggest.js.map +1 -0
  319. package/dist/cli/ui/logo.d.ts +3 -0
  320. package/dist/cli/ui/logo.d.ts.map +1 -0
  321. package/dist/cli/ui/logo.js +25 -0
  322. package/dist/cli/ui/logo.js.map +1 -0
  323. package/dist/cli/ui/progress.d.ts +21 -0
  324. package/dist/cli/ui/progress.d.ts.map +1 -0
  325. package/dist/cli/ui/progress.js +125 -0
  326. package/dist/cli/ui/progress.js.map +1 -0
  327. package/dist/cli/ui/select-menu.d.ts +22 -0
  328. package/dist/cli/ui/select-menu.d.ts.map +1 -0
  329. package/dist/cli/ui/select-menu.js +152 -0
  330. package/dist/cli/ui/select-menu.js.map +1 -0
  331. package/dist/cli/ui/spinner.d.ts +3 -0
  332. package/dist/cli/ui/spinner.d.ts.map +1 -0
  333. package/dist/cli/ui/spinner.js +14 -0
  334. package/dist/cli/ui/spinner.js.map +1 -0
  335. package/dist/cli/ui/statusbar.d.ts +65 -0
  336. package/dist/cli/ui/statusbar.d.ts.map +1 -0
  337. package/dist/cli/ui/statusbar.js +272 -0
  338. package/dist/cli/ui/statusbar.js.map +1 -0
  339. package/dist/cli/ui/theme.d.ts +20 -0
  340. package/dist/cli/ui/theme.d.ts.map +1 -0
  341. package/dist/cli/ui/theme.js +25 -0
  342. package/dist/cli/ui/theme.js.map +1 -0
  343. package/dist/cli/ui/tool-output.d.ts +25 -0
  344. package/dist/cli/ui/tool-output.d.ts.map +1 -0
  345. package/dist/cli/ui/tool-output.js +171 -0
  346. package/dist/cli/ui/tool-output.js.map +1 -0
  347. package/dist/cli/validation/autofix.d.ts +32 -0
  348. package/dist/cli/validation/autofix.d.ts.map +1 -0
  349. package/dist/cli/validation/autofix.js +148 -0
  350. package/dist/cli/validation/autofix.js.map +1 -0
  351. package/dist/cli/validation/classifier.d.ts +17 -0
  352. package/dist/cli/validation/classifier.d.ts.map +1 -0
  353. package/dist/cli/validation/classifier.js +174 -0
  354. package/dist/cli/validation/classifier.js.map +1 -0
  355. package/dist/cli/validation/criteria.d.ts +22 -0
  356. package/dist/cli/validation/criteria.d.ts.map +1 -0
  357. package/dist/cli/validation/criteria.js +188 -0
  358. package/dist/cli/validation/criteria.js.map +1 -0
  359. package/dist/cli/validation/dynamic-checks.d.ts +16 -0
  360. package/dist/cli/validation/dynamic-checks.d.ts.map +1 -0
  361. package/dist/cli/validation/dynamic-checks.js +109 -0
  362. package/dist/cli/validation/dynamic-checks.js.map +1 -0
  363. package/dist/cli/validation/model.d.ts +16 -0
  364. package/dist/cli/validation/model.d.ts.map +1 -0
  365. package/dist/cli/validation/model.js +59 -0
  366. package/dist/cli/validation/model.js.map +1 -0
  367. package/dist/cli/validation/reporter.d.ts +18 -0
  368. package/dist/cli/validation/reporter.d.ts.map +1 -0
  369. package/dist/cli/validation/reporter.js +167 -0
  370. package/dist/cli/validation/reporter.js.map +1 -0
  371. package/dist/cli/validation/spiral-checks.d.ts +12 -0
  372. package/dist/cli/validation/spiral-checks.d.ts.map +1 -0
  373. package/dist/cli/validation/spiral-checks.js +167 -0
  374. package/dist/cli/validation/spiral-checks.js.map +1 -0
  375. package/dist/cli/validation/static-checks.d.ts +26 -0
  376. package/dist/cli/validation/static-checks.d.ts.map +1 -0
  377. package/dist/cli/validation/static-checks.js +492 -0
  378. package/dist/cli/validation/static-checks.js.map +1 -0
  379. package/dist/cli/validation/stats.d.ts +29 -0
  380. package/dist/cli/validation/stats.d.ts.map +1 -0
  381. package/dist/cli/validation/stats.js +137 -0
  382. package/dist/cli/validation/stats.js.map +1 -0
  383. package/dist/index.d.ts +3 -0
  384. package/dist/index.d.ts.map +1 -0
  385. package/dist/index.js +35 -0
  386. package/dist/index.js.map +1 -0
  387. package/dist/server.d.ts +8 -0
  388. package/dist/server.d.ts.map +1 -0
  389. package/dist/server.js +43 -0
  390. package/dist/server.js.map +1 -0
  391. package/dist/spiral/cloud/content-extractor.d.ts +27 -0
  392. package/dist/spiral/cloud/content-extractor.d.ts.map +1 -0
  393. package/dist/spiral/cloud/content-extractor.js +175 -0
  394. package/dist/spiral/cloud/content-extractor.js.map +1 -0
  395. package/dist/spiral/cloud/search-provider.d.ts +22 -0
  396. package/dist/spiral/cloud/search-provider.d.ts.map +1 -0
  397. package/dist/spiral/cloud/search-provider.js +212 -0
  398. package/dist/spiral/cloud/search-provider.js.map +1 -0
  399. package/dist/spiral/cloud/topic-detector.d.ts +25 -0
  400. package/dist/spiral/cloud/topic-detector.d.ts.map +1 -0
  401. package/dist/spiral/cloud/topic-detector.js +196 -0
  402. package/dist/spiral/cloud/topic-detector.js.map +1 -0
  403. package/dist/spiral/cloud/web-enricher.d.ts +58 -0
  404. package/dist/spiral/cloud/web-enricher.d.ts.map +1 -0
  405. package/dist/spiral/cloud/web-enricher.js +170 -0
  406. package/dist/spiral/cloud/web-enricher.js.map +1 -0
  407. package/dist/spiral/compression.d.ts +54 -0
  408. package/dist/spiral/compression.d.ts.map +1 -0
  409. package/dist/spiral/compression.js +175 -0
  410. package/dist/spiral/compression.js.map +1 -0
  411. package/dist/spiral/embeddings.d.ts +24 -0
  412. package/dist/spiral/embeddings.d.ts.map +1 -0
  413. package/dist/spiral/embeddings.js +69 -0
  414. package/dist/spiral/embeddings.js.map +1 -0
  415. package/dist/spiral/engine.d.ts +95 -0
  416. package/dist/spiral/engine.d.ts.map +1 -0
  417. package/dist/spiral/engine.js +271 -0
  418. package/dist/spiral/engine.js.map +1 -0
  419. package/dist/spiral/injection.d.ts +29 -0
  420. package/dist/spiral/injection.d.ts.map +1 -0
  421. package/dist/spiral/injection.js +164 -0
  422. package/dist/spiral/injection.js.map +1 -0
  423. package/dist/spiral/relevance.d.ts +37 -0
  424. package/dist/spiral/relevance.d.ts.map +1 -0
  425. package/dist/spiral/relevance.js +75 -0
  426. package/dist/spiral/relevance.js.map +1 -0
  427. package/dist/storage/database.d.ts +11 -0
  428. package/dist/storage/database.d.ts.map +1 -0
  429. package/dist/storage/database.js +141 -0
  430. package/dist/storage/database.js.map +1 -0
  431. package/dist/storage/edges.d.ts +25 -0
  432. package/dist/storage/edges.d.ts.map +1 -0
  433. package/dist/storage/edges.js +69 -0
  434. package/dist/storage/edges.js.map +1 -0
  435. package/dist/storage/nodes.d.ts +45 -0
  436. package/dist/storage/nodes.d.ts.map +1 -0
  437. package/dist/storage/nodes.js +124 -0
  438. package/dist/storage/nodes.js.map +1 -0
  439. package/dist/storage/vectors.d.ts +25 -0
  440. package/dist/storage/vectors.d.ts.map +1 -0
  441. package/dist/storage/vectors.js +110 -0
  442. package/dist/storage/vectors.js.map +1 -0
  443. package/dist/tools/spiral-compact.d.ts +14 -0
  444. package/dist/tools/spiral-compact.d.ts.map +1 -0
  445. package/dist/tools/spiral-compact.js +14 -0
  446. package/dist/tools/spiral-compact.js.map +1 -0
  447. package/dist/tools/spiral-query.d.ts +18 -0
  448. package/dist/tools/spiral-query.d.ts.map +1 -0
  449. package/dist/tools/spiral-query.js +16 -0
  450. package/dist/tools/spiral-query.js.map +1 -0
  451. package/dist/tools/spiral-relate.d.ts +21 -0
  452. package/dist/tools/spiral-relate.d.ts.map +1 -0
  453. package/dist/tools/spiral-relate.js +21 -0
  454. package/dist/tools/spiral-relate.js.map +1 -0
  455. package/dist/tools/spiral-status.d.ts +8 -0
  456. package/dist/tools/spiral-status.d.ts.map +1 -0
  457. package/dist/tools/spiral-status.js +10 -0
  458. package/dist/tools/spiral-status.js.map +1 -0
  459. package/dist/tools/spiral-store.d.ts +41 -0
  460. package/dist/tools/spiral-store.d.ts.map +1 -0
  461. package/dist/tools/spiral-store.js +22 -0
  462. package/dist/tools/spiral-store.js.map +1 -0
  463. package/dist/types.d.ts +92 -0
  464. package/dist/types.d.ts.map +1 -0
  465. package/dist/types.js +9 -0
  466. package/dist/types.js.map +1 -0
  467. package/dist/utils/config.d.ts +14 -0
  468. package/dist/utils/config.d.ts.map +1 -0
  469. package/dist/utils/config.js +44 -0
  470. package/dist/utils/config.js.map +1 -0
  471. package/dist/utils/logger.d.ts +10 -0
  472. package/dist/utils/logger.d.ts.map +1 -0
  473. package/dist/utils/logger.js +40 -0
  474. package/dist/utils/logger.js.map +1 -0
  475. package/dist/utils/tokens.d.ts +21 -0
  476. package/dist/utils/tokens.d.ts.map +1 -0
  477. package/dist/utils/tokens.js +33 -0
  478. package/dist/utils/tokens.js.map +1 -0
  479. package/package.json +90 -0
@@ -0,0 +1,141 @@
1
+ import BetterSqlite3 from 'better-sqlite3';
2
+ import { join } from 'node:path';
3
+ import { mkdirSync } from 'node:fs';
4
+ import { logger } from '../utils/logger.js';
5
+ const SCHEMA = `
6
+ CREATE TABLE IF NOT EXISTS nodes (
7
+ id TEXT PRIMARY KEY,
8
+ type TEXT NOT NULL,
9
+ content TEXT NOT NULL,
10
+ summary TEXT,
11
+ level INTEGER NOT NULL DEFAULT 1 CHECK(level IN (1, 2, 3, 4, 5)),
12
+ relevance_score REAL NOT NULL DEFAULT 1.0,
13
+ token_count INTEGER NOT NULL DEFAULT 0,
14
+ metadata TEXT NOT NULL DEFAULT '{}',
15
+ created_at INTEGER NOT NULL,
16
+ updated_at INTEGER NOT NULL,
17
+ accessed_at INTEGER NOT NULL
18
+ );
19
+
20
+ CREATE TABLE IF NOT EXISTS edges (
21
+ id TEXT PRIMARY KEY,
22
+ source_id TEXT NOT NULL REFERENCES nodes(id) ON DELETE CASCADE,
23
+ target_id TEXT NOT NULL REFERENCES nodes(id) ON DELETE CASCADE,
24
+ relation_type TEXT NOT NULL,
25
+ weight REAL NOT NULL DEFAULT 1.0,
26
+ metadata TEXT NOT NULL DEFAULT '{}',
27
+ created_at INTEGER NOT NULL,
28
+ UNIQUE(source_id, target_id, relation_type)
29
+ );
30
+
31
+ CREATE INDEX IF NOT EXISTS idx_nodes_type ON nodes(type);
32
+ CREATE INDEX IF NOT EXISTS idx_nodes_level ON nodes(level);
33
+ CREATE INDEX IF NOT EXISTS idx_nodes_relevance ON nodes(relevance_score);
34
+ CREATE INDEX IF NOT EXISTS idx_nodes_updated ON nodes(updated_at);
35
+ CREATE INDEX IF NOT EXISTS idx_nodes_accessed ON nodes(accessed_at);
36
+ CREATE INDEX IF NOT EXISTS idx_edges_source ON edges(source_id);
37
+ CREATE INDEX IF NOT EXISTS idx_edges_target ON edges(target_id);
38
+ CREATE INDEX IF NOT EXISTS idx_edges_type ON edges(relation_type);
39
+
40
+ CREATE TABLE IF NOT EXISTS schema_version (version INTEGER NOT NULL);
41
+ `;
42
+ export class Database {
43
+ raw;
44
+ hasVecExtension;
45
+ closed = false;
46
+ constructor(dataDir) {
47
+ mkdirSync(dataDir, { recursive: true });
48
+ const dbPath = join(dataDir, 'spiral.db');
49
+ this.raw = new BetterSqlite3(dbPath);
50
+ // Performance pragmas
51
+ this.raw.pragma('journal_mode = WAL');
52
+ this.raw.pragma('foreign_keys = ON');
53
+ this.raw.pragma('synchronous = NORMAL');
54
+ // Try to load sqlite-vec extension
55
+ this.hasVecExtension = this.tryLoadVecExtension();
56
+ // Create schema
57
+ this.raw.exec(SCHEMA);
58
+ // Run migrations for existing databases with old CHECK constraints
59
+ this.migrate();
60
+ logger.debug(`Database opened at ${dbPath} (vec: ${this.hasVecExtension})`);
61
+ }
62
+ tryLoadVecExtension() {
63
+ try {
64
+ // Dynamic import to avoid crash if sqlite-vec is not installed
65
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
66
+ const sqliteVec = require('sqlite-vec');
67
+ sqliteVec.load(this.raw);
68
+ logger.info('sqlite-vec extension loaded');
69
+ return true;
70
+ }
71
+ catch {
72
+ logger.info('sqlite-vec not available, using JS fallback for vector search');
73
+ return false;
74
+ }
75
+ }
76
+ migrate() {
77
+ const versionRow = this.raw.prepare("SELECT version FROM schema_version LIMIT 1").get();
78
+ const currentVersion = versionRow?.version ?? 0;
79
+ if (currentVersion < 3) {
80
+ const nodesSql = this.raw.prepare("SELECT sql FROM sqlite_master WHERE type='table' AND name='nodes'").get()?.sql ?? '';
81
+ // Needs migration if: has old type CHECK, or has 3-level CHECK constraint
82
+ const needsMigration = nodesSql.includes("CHECK(type IN") ||
83
+ (nodesSql.includes("CHECK(level IN") && !nodesSql.includes('4, 5'));
84
+ if (needsMigration) {
85
+ this.raw.exec('PRAGMA foreign_keys = OFF');
86
+ this.raw.exec('BEGIN TRANSACTION');
87
+ try {
88
+ this.raw.exec(`
89
+ ALTER TABLE nodes RENAME TO nodes_old;
90
+ CREATE TABLE nodes (
91
+ id TEXT PRIMARY KEY, type TEXT NOT NULL, content TEXT NOT NULL,
92
+ summary TEXT, level INTEGER NOT NULL DEFAULT 1 CHECK(level IN (1, 2, 3, 4, 5)),
93
+ relevance_score REAL NOT NULL DEFAULT 1.0,
94
+ token_count INTEGER NOT NULL DEFAULT 0, metadata TEXT NOT NULL DEFAULT '{}',
95
+ created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL, accessed_at INTEGER NOT NULL
96
+ );
97
+ INSERT INTO nodes SELECT * FROM nodes_old;
98
+ DROP TABLE nodes_old;
99
+
100
+ ALTER TABLE edges RENAME TO edges_old;
101
+ CREATE TABLE edges (
102
+ id TEXT PRIMARY KEY,
103
+ source_id TEXT NOT NULL REFERENCES nodes(id) ON DELETE CASCADE,
104
+ target_id TEXT NOT NULL REFERENCES nodes(id) ON DELETE CASCADE,
105
+ relation_type TEXT NOT NULL, weight REAL NOT NULL DEFAULT 1.0,
106
+ metadata TEXT NOT NULL DEFAULT '{}', created_at INTEGER NOT NULL,
107
+ UNIQUE(source_id, target_id, relation_type)
108
+ );
109
+ INSERT INTO edges SELECT * FROM edges_old;
110
+ DROP TABLE edges_old;
111
+
112
+ CREATE INDEX IF NOT EXISTS idx_nodes_type ON nodes(type);
113
+ CREATE INDEX IF NOT EXISTS idx_nodes_level ON nodes(level);
114
+ CREATE INDEX IF NOT EXISTS idx_nodes_relevance ON nodes(relevance_score);
115
+ CREATE INDEX IF NOT EXISTS idx_nodes_updated ON nodes(updated_at);
116
+ CREATE INDEX IF NOT EXISTS idx_nodes_accessed ON nodes(accessed_at);
117
+ CREATE INDEX IF NOT EXISTS idx_edges_source ON edges(source_id);
118
+ CREATE INDEX IF NOT EXISTS idx_edges_target ON edges(target_id);
119
+ CREATE INDEX IF NOT EXISTS idx_edges_type ON edges(relation_type);
120
+ `);
121
+ this.raw.exec('COMMIT');
122
+ }
123
+ catch (err) {
124
+ this.raw.exec('ROLLBACK');
125
+ logger.warn(`Migration failed: ${err}`);
126
+ }
127
+ this.raw.exec('PRAGMA foreign_keys = ON');
128
+ }
129
+ // Set version
130
+ this.raw.exec('DELETE FROM schema_version');
131
+ this.raw.prepare('INSERT INTO schema_version (version) VALUES (?)').run(3);
132
+ }
133
+ }
134
+ close() {
135
+ if (!this.closed) {
136
+ this.raw.close();
137
+ this.closed = true;
138
+ }
139
+ }
140
+ }
141
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Database } from './database.js';
2
+ import type { Edge, RelationType } from '../types.js';
3
+ interface CreateEdgeInput {
4
+ source_id: string;
5
+ target_id: string;
6
+ relation_type: RelationType;
7
+ weight?: number;
8
+ metadata?: Record<string, unknown>;
9
+ }
10
+ export declare class EdgeStore {
11
+ private db;
12
+ constructor(db: Database);
13
+ create(input: CreateEdgeInput): Edge;
14
+ getBySource(sourceId: string): Edge[];
15
+ getByTarget(targetId: string): Edge[];
16
+ getConnected(nodeId: string): Edge[];
17
+ /**
18
+ * Get all node IDs connected to a given node (1-hop neighbors).
19
+ */
20
+ getConnectedNodeIds(nodeId: string): string[];
21
+ count(): number;
22
+ delete(id: string): void;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=edges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edges.d.ts","sourceRoot":"","sources":["../../src/storage/edges.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEtD,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAwBD,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAAW;gBAET,EAAE,EAAE,QAAQ;IAIxB,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IA4BpC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE;IAKrC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE;IAKrC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE;IAKpC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAU7C,KAAK,IAAI,MAAM;IAKf,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAGzB"}
@@ -0,0 +1,69 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ function rowToEdge(row) {
3
+ return {
4
+ id: row.id,
5
+ source_id: row.source_id,
6
+ target_id: row.target_id,
7
+ relation_type: row.relation_type,
8
+ weight: row.weight,
9
+ metadata: JSON.parse(row.metadata),
10
+ created_at: row.created_at,
11
+ };
12
+ }
13
+ export class EdgeStore {
14
+ db;
15
+ constructor(db) {
16
+ this.db = db;
17
+ }
18
+ create(input) {
19
+ const id = randomUUID();
20
+ const now = Date.now();
21
+ this.db.raw.prepare(`
22
+ INSERT INTO edges (id, source_id, target_id, relation_type, weight, metadata, created_at)
23
+ VALUES (?, ?, ?, ?, ?, ?, ?)
24
+ `).run(id, input.source_id, input.target_id, input.relation_type, input.weight ?? 1.0, JSON.stringify(input.metadata ?? {}), now);
25
+ return {
26
+ id,
27
+ source_id: input.source_id,
28
+ target_id: input.target_id,
29
+ relation_type: input.relation_type,
30
+ weight: input.weight ?? 1.0,
31
+ metadata: input.metadata ?? {},
32
+ created_at: now,
33
+ };
34
+ }
35
+ getBySource(sourceId) {
36
+ const rows = this.db.raw.prepare('SELECT * FROM edges WHERE source_id = ?').all(sourceId);
37
+ return rows.map(rowToEdge);
38
+ }
39
+ getByTarget(targetId) {
40
+ const rows = this.db.raw.prepare('SELECT * FROM edges WHERE target_id = ?').all(targetId);
41
+ return rows.map(rowToEdge);
42
+ }
43
+ getConnected(nodeId) {
44
+ const rows = this.db.raw.prepare('SELECT * FROM edges WHERE source_id = ? OR target_id = ?').all(nodeId, nodeId);
45
+ return rows.map(rowToEdge);
46
+ }
47
+ /**
48
+ * Get all node IDs connected to a given node (1-hop neighbors).
49
+ */
50
+ getConnectedNodeIds(nodeId) {
51
+ const edges = this.getConnected(nodeId);
52
+ const ids = new Set();
53
+ for (const edge of edges) {
54
+ if (edge.source_id !== nodeId)
55
+ ids.add(edge.source_id);
56
+ if (edge.target_id !== nodeId)
57
+ ids.add(edge.target_id);
58
+ }
59
+ return Array.from(ids);
60
+ }
61
+ count() {
62
+ const row = this.db.raw.prepare('SELECT COUNT(*) as cnt FROM edges').get();
63
+ return row.cnt;
64
+ }
65
+ delete(id) {
66
+ this.db.raw.prepare('DELETE FROM edges WHERE id = ?').run(id);
67
+ }
68
+ }
69
+ //# sourceMappingURL=edges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edges.js","sourceRoot":"","sources":["../../src/storage/edges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { Database } from './database.js';
2
+ import type { ContextNode, ContextType, SpiralLevel, NodeMetadata } from '../types.js';
3
+ interface CreateNodeInput {
4
+ type: ContextType;
5
+ content: string;
6
+ metadata: NodeMetadata;
7
+ summary?: string;
8
+ level?: SpiralLevel;
9
+ relevance_score?: number;
10
+ }
11
+ export declare class NodeStore {
12
+ private db;
13
+ constructor(db: Database);
14
+ create(input: CreateNodeInput): ContextNode;
15
+ getById(id: string): ContextNode | null;
16
+ getByLevel(level: SpiralLevel): ContextNode[];
17
+ getAll(): ContextNode[];
18
+ getByIds(ids: string[]): ContextNode[];
19
+ updateLevel(id: string, level: SpiralLevel): void;
20
+ updateRelevance(id: string, score: number): void;
21
+ updateSummary(id: string, summary: string): void;
22
+ count(): number;
23
+ countByLevel(): Record<SpiralLevel, number>;
24
+ /** Count web knowledge nodes (L2 nodes with [Web Knowledge: prefix) */
25
+ countWebKnowledge(): number;
26
+ getOldestAndNewest(): {
27
+ oldest: number | null;
28
+ newest: number | null;
29
+ };
30
+ delete(id: string): void;
31
+ /**
32
+ * Get nodes that need decay (accessed more than `hours` ago).
33
+ */
34
+ getStaleNodes(hoursThreshold: number): ContextNode[];
35
+ /**
36
+ * Bulk update relevance scores. Used by decay function.
37
+ */
38
+ bulkUpdateRelevance(updates: Array<{
39
+ id: string;
40
+ score: number;
41
+ level: SpiralLevel;
42
+ }>): void;
43
+ }
44
+ export {};
45
+ //# sourceMappingURL=nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/storage/nodes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGvF,UAAU,eAAe;IACvB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAgCD,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAAW;gBAET,EAAE,EAAE,QAAQ;IAIxB,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,WAAW;IAqC3C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAWvC,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,EAAE;IAK7C,MAAM,IAAI,WAAW,EAAE;IAKvB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE;IAOtC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI;IAIjD,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhD,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIhD,KAAK,IAAI,MAAM;IAKf,YAAY,IAAI,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;IAS3C,uEAAuE;IACvE,iBAAiB,IAAI,MAAM;IAK3B,kBAAkB,IAAI;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAKtE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIxB;;OAEG;IACH,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,EAAE;IAMpD;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,CAAC,GAAG,IAAI;CAU7F"}
@@ -0,0 +1,124 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { estimateTokens } from '../utils/tokens.js';
3
+ function rowToNode(row) {
4
+ return {
5
+ id: row.id,
6
+ type: row.type,
7
+ content: row.content,
8
+ summary: row.summary,
9
+ level: row.level,
10
+ relevance_score: row.relevance_score,
11
+ token_count: row.token_count,
12
+ metadata: JSON.parse(row.metadata),
13
+ created_at: row.created_at,
14
+ updated_at: row.updated_at,
15
+ accessed_at: row.accessed_at,
16
+ };
17
+ }
18
+ export class NodeStore {
19
+ db;
20
+ constructor(db) {
21
+ this.db = db;
22
+ }
23
+ create(input) {
24
+ const id = randomUUID();
25
+ const now = Date.now();
26
+ const tokenCount = estimateTokens(input.content);
27
+ this.db.raw.prepare(`
28
+ INSERT INTO nodes (id, type, content, summary, level, relevance_score, token_count, metadata, created_at, updated_at, accessed_at)
29
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
30
+ `).run(id, input.type, input.content, input.summary ?? null, input.level ?? 1, input.relevance_score ?? 1.0, tokenCount, JSON.stringify(input.metadata), now, now, now);
31
+ return {
32
+ id,
33
+ type: input.type,
34
+ content: input.content,
35
+ summary: input.summary ?? null,
36
+ level: (input.level ?? 1),
37
+ relevance_score: input.relevance_score ?? 1.0,
38
+ token_count: tokenCount,
39
+ metadata: input.metadata,
40
+ created_at: now,
41
+ updated_at: now,
42
+ accessed_at: now,
43
+ };
44
+ }
45
+ getById(id) {
46
+ const row = this.db.raw.prepare('SELECT * FROM nodes WHERE id = ?').get(id);
47
+ if (!row)
48
+ return null;
49
+ // Update accessed_at
50
+ const now = Date.now();
51
+ this.db.raw.prepare('UPDATE nodes SET accessed_at = ? WHERE id = ?').run(now, id);
52
+ return rowToNode({ ...row, accessed_at: now });
53
+ }
54
+ getByLevel(level) {
55
+ const rows = this.db.raw.prepare('SELECT * FROM nodes WHERE level = ? ORDER BY relevance_score DESC').all(level);
56
+ return rows.map(rowToNode);
57
+ }
58
+ getAll() {
59
+ const rows = this.db.raw.prepare('SELECT * FROM nodes ORDER BY relevance_score DESC').all();
60
+ return rows.map(rowToNode);
61
+ }
62
+ getByIds(ids) {
63
+ if (ids.length === 0)
64
+ return [];
65
+ const placeholders = ids.map(() => '?').join(',');
66
+ const rows = this.db.raw.prepare(`SELECT * FROM nodes WHERE id IN (${placeholders})`).all(...ids);
67
+ return rows.map(rowToNode);
68
+ }
69
+ updateLevel(id, level) {
70
+ this.db.raw.prepare('UPDATE nodes SET level = ?, updated_at = ? WHERE id = ?').run(level, Date.now(), id);
71
+ }
72
+ updateRelevance(id, score) {
73
+ this.db.raw.prepare('UPDATE nodes SET relevance_score = ?, updated_at = ? WHERE id = ?').run(score, Date.now(), id);
74
+ }
75
+ updateSummary(id, summary) {
76
+ this.db.raw.prepare('UPDATE nodes SET summary = ?, updated_at = ? WHERE id = ?').run(summary, Date.now(), id);
77
+ }
78
+ count() {
79
+ const row = this.db.raw.prepare('SELECT COUNT(*) as cnt FROM nodes').get();
80
+ return row.cnt;
81
+ }
82
+ countByLevel() {
83
+ const rows = this.db.raw.prepare('SELECT level, COUNT(*) as cnt FROM nodes GROUP BY level').all();
84
+ const result = { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0 };
85
+ for (const row of rows) {
86
+ result[row.level] = row.cnt;
87
+ }
88
+ return result;
89
+ }
90
+ /** Count web knowledge nodes (L2 nodes with [Web Knowledge: prefix) */
91
+ countWebKnowledge() {
92
+ const row = this.db.raw.prepare("SELECT COUNT(*) as cnt FROM nodes WHERE content LIKE '[Web Knowledge:%'").get();
93
+ return row.cnt;
94
+ }
95
+ getOldestAndNewest() {
96
+ const row = this.db.raw.prepare('SELECT MIN(created_at) as oldest, MAX(created_at) as newest FROM nodes').get();
97
+ return { oldest: row.oldest, newest: row.newest };
98
+ }
99
+ delete(id) {
100
+ this.db.raw.prepare('DELETE FROM nodes WHERE id = ?').run(id);
101
+ }
102
+ /**
103
+ * Get nodes that need decay (accessed more than `hours` ago).
104
+ */
105
+ getStaleNodes(hoursThreshold) {
106
+ const cutoff = Date.now() - hoursThreshold * 60 * 60 * 1000;
107
+ const rows = this.db.raw.prepare('SELECT * FROM nodes WHERE accessed_at < ? AND level < 5 ORDER BY accessed_at ASC').all(cutoff);
108
+ return rows.map(rowToNode);
109
+ }
110
+ /**
111
+ * Bulk update relevance scores. Used by decay function.
112
+ */
113
+ bulkUpdateRelevance(updates) {
114
+ const stmt = this.db.raw.prepare('UPDATE nodes SET relevance_score = ?, level = ?, updated_at = ? WHERE id = ?');
115
+ const now = Date.now();
116
+ const transaction = this.db.raw.transaction((items) => {
117
+ for (const item of items) {
118
+ stmt.run(item.score, item.level, now, item.id);
119
+ }
120
+ });
121
+ transaction(updates);
122
+ }
123
+ }
124
+ //# sourceMappingURL=nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/storage/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAyBpD,SAAS,SAAS,CAAC,GAAY;IAC7B,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAmB;QAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAoB;QAC/B,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAiB;QAClD,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,SAAS;IACZ,EAAE,CAAW;IAErB,YAAY,EAAY;QACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,CAAC,KAAsB;QAC3B,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEjD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;;;KAGnB,CAAC,CAAC,GAAG,CACJ,EAAE,EACF,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,IAAI,IAAI,EACrB,KAAK,CAAC,KAAK,IAAI,CAAC,EAChB,KAAK,CAAC,eAAe,IAAI,GAAG,EAC5B,UAAU,EACV,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EAC9B,GAAG,EACH,GAAG,EACH,GAAG,CACJ,CAAC;QAEF,OAAO;YACL,EAAE;YACF,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;YAC9B,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAgB;YACxC,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,GAAG;YAC7C,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;YACf,WAAW,EAAE,GAAG;SACjB,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAwB,CAAC;QACnG,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,qBAAqB;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAElF,OAAO,SAAS,CAAC,EAAE,GAAG,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,UAAU,CAAC,KAAkB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,mEAAmE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAc,CAAC;QAC9H,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,EAAe,CAAC;QACzG,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,GAAa;QACpB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,oCAAoC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAc,CAAC;QAC/G,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,EAAU,EAAE,KAAkB;QACxC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED,eAAe,CAAC,EAAU,EAAE,KAAa;QACvC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,mEAAmE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACtH,CAAC;IAED,aAAa,CAAC,EAAU,EAAE,OAAe;QACvC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAChH,CAAC;IAED,KAAK;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,EAAqB,CAAC;QAC9F,OAAO,GAAG,CAAC,GAAG,CAAC;IACjB,CAAC;IAED,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC,GAAG,EAAsC,CAAC;QACtI,MAAM,MAAM,GAAgC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CAAC,KAAoB,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;QAC7C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,uEAAuE;IACvE,iBAAiB;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,yEAAyE,CAAC,CAAC,GAAG,EAAqB,CAAC;QACpI,OAAO,GAAG,CAAC,GAAG,CAAC;IACjB,CAAC;IAED,kBAAkB;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,wEAAwE,CAAC,CAAC,GAAG,EAAsD,CAAC;QACpK,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,EAAU;QACf,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,cAAsB;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,kFAAkF,CAAC,CAAC,GAAG,CAAC,MAAM,CAAc,CAAC;QAC9I,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,OAAiE;QACnF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,8EAA8E,CAAC,CAAC;QACjH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,KAAqB,EAAE,EAAE;YACpE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { Database } from './database.js';
2
+ import type { VectorSearchResult } from '../types.js';
3
+ /**
4
+ * Handles vector storage and similarity search.
5
+ * Uses sqlite-vec extension when available, falls back to JS-based cosine similarity.
6
+ */
7
+ export declare class VectorStore {
8
+ private db;
9
+ private dimensions;
10
+ private useVec;
11
+ constructor(db: Database, dimensions: number);
12
+ private initialize;
13
+ private createFallbackTable;
14
+ store(nodeId: string, embedding: Float32Array): void;
15
+ search(queryEmbedding: Float32Array, limit: number): VectorSearchResult[];
16
+ private searchVec;
17
+ private searchFallback;
18
+ delete(nodeId: string): void;
19
+ /**
20
+ * Computes cosine similarity between two vectors.
21
+ * Returns value in range [-1, 1] where 1 = identical.
22
+ */
23
+ static cosineSimilarity(a: Float32Array, b: Float32Array): number;
24
+ }
25
+ //# sourceMappingURL=vectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectors.d.ts","sourceRoot":"","sources":["../../src/storage/vectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAU;gBAEZ,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM;IAQ5C,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,mBAAmB;IAS3B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAUpD,MAAM,CAAC,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,EAAE;IASzE,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,cAAc;IAmBtB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ5B;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM;CAalE"}
@@ -0,0 +1,110 @@
1
+ import { logger } from '../utils/logger.js';
2
+ /**
3
+ * Handles vector storage and similarity search.
4
+ * Uses sqlite-vec extension when available, falls back to JS-based cosine similarity.
5
+ */
6
+ export class VectorStore {
7
+ db;
8
+ dimensions;
9
+ useVec;
10
+ constructor(db, dimensions) {
11
+ this.db = db;
12
+ this.dimensions = dimensions;
13
+ this.useVec = db.hasVecExtension;
14
+ this.initialize();
15
+ }
16
+ initialize() {
17
+ if (this.useVec) {
18
+ try {
19
+ this.db.raw.exec(`
20
+ CREATE VIRTUAL TABLE IF NOT EXISTS vec_nodes USING vec0(
21
+ node_id TEXT PRIMARY KEY,
22
+ embedding float[${this.dimensions}] distance_metric=cosine
23
+ );
24
+ `);
25
+ logger.debug('vec_nodes virtual table created');
26
+ }
27
+ catch (err) {
28
+ logger.warn(`Failed to create vec0 table, using fallback: ${err}`);
29
+ this.useVec = false;
30
+ this.createFallbackTable();
31
+ }
32
+ }
33
+ else {
34
+ this.createFallbackTable();
35
+ }
36
+ }
37
+ createFallbackTable() {
38
+ this.db.raw.exec(`
39
+ CREATE TABLE IF NOT EXISTS embeddings (
40
+ node_id TEXT PRIMARY KEY,
41
+ embedding BLOB NOT NULL
42
+ );
43
+ `);
44
+ }
45
+ store(nodeId, embedding) {
46
+ const buffer = Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength);
47
+ if (this.useVec) {
48
+ this.db.raw.prepare('INSERT OR REPLACE INTO vec_nodes (node_id, embedding) VALUES (?, ?)').run(nodeId, buffer);
49
+ }
50
+ else {
51
+ this.db.raw.prepare('INSERT OR REPLACE INTO embeddings (node_id, embedding) VALUES (?, ?)').run(nodeId, buffer);
52
+ }
53
+ }
54
+ search(queryEmbedding, limit) {
55
+ const buffer = Buffer.from(queryEmbedding.buffer, queryEmbedding.byteOffset, queryEmbedding.byteLength);
56
+ if (this.useVec) {
57
+ return this.searchVec(buffer, limit);
58
+ }
59
+ return this.searchFallback(queryEmbedding, limit);
60
+ }
61
+ searchVec(queryBuffer, limit) {
62
+ const rows = this.db.raw.prepare(`
63
+ SELECT node_id, distance
64
+ FROM vec_nodes
65
+ WHERE embedding MATCH ?
66
+ AND k = ?
67
+ ORDER BY distance
68
+ `).all(queryBuffer, limit);
69
+ return rows.map(r => ({ node_id: r.node_id, distance: r.distance }));
70
+ }
71
+ searchFallback(queryEmbedding, limit) {
72
+ const rows = this.db.raw.prepare('SELECT node_id, embedding FROM embeddings').all();
73
+ const results = rows.map(row => {
74
+ const stored = new Float32Array(row.embedding.buffer, row.embedding.byteOffset, row.embedding.byteLength / 4);
75
+ const similarity = VectorStore.cosineSimilarity(queryEmbedding, stored);
76
+ // Convert similarity (1=identical) to distance (0=identical) for consistent API
77
+ return { node_id: row.node_id, distance: 1 - similarity };
78
+ });
79
+ return results
80
+ .sort((a, b) => a.distance - b.distance)
81
+ .slice(0, limit);
82
+ }
83
+ delete(nodeId) {
84
+ if (this.useVec) {
85
+ this.db.raw.prepare('DELETE FROM vec_nodes WHERE node_id = ?').run(nodeId);
86
+ }
87
+ else {
88
+ this.db.raw.prepare('DELETE FROM embeddings WHERE node_id = ?').run(nodeId);
89
+ }
90
+ }
91
+ /**
92
+ * Computes cosine similarity between two vectors.
93
+ * Returns value in range [-1, 1] where 1 = identical.
94
+ */
95
+ static cosineSimilarity(a, b) {
96
+ let dot = 0;
97
+ let normA = 0;
98
+ let normB = 0;
99
+ for (let i = 0; i < a.length; i++) {
100
+ dot += a[i] * b[i];
101
+ normA += a[i] * a[i];
102
+ normB += b[i] * b[i];
103
+ }
104
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
105
+ if (denominator === 0)
106
+ return 0;
107
+ return dot / denominator;
108
+ }
109
+ }
110
+ //# sourceMappingURL=vectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectors.js","sourceRoot":"","sources":["../../src/storage/vectors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ import type { SpiralEngine } from '../spiral/engine.js';
3
+ export declare const spiralCompactSchema: {
4
+ aggressive: z.ZodOptional<z.ZodBoolean>;
5
+ };
6
+ export declare function handleSpiralCompact(engine: SpiralEngine, args: {
7
+ aggressive?: boolean;
8
+ }): Promise<{
9
+ content: {
10
+ type: "text";
11
+ text: string;
12
+ }[];
13
+ }>;
14
+ //# sourceMappingURL=spiral-compact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spiral-compact.d.ts","sourceRoot":"","sources":["../../src/tools/spiral-compact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,eAAO,MAAM,mBAAmB;;CAE/B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;GAU/B"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export const spiralCompactSchema = {
3
+ aggressive: z.boolean().optional().describe('If true, more aggressive compaction thresholds'),
4
+ };
5
+ export async function handleSpiralCompact(engine, args) {
6
+ const result = engine.compact(args.aggressive ?? false);
7
+ return {
8
+ content: [{
9
+ type: 'text',
10
+ text: JSON.stringify(result, null, 2),
11
+ }],
12
+ };
13
+ }
14
+ //# sourceMappingURL=spiral-compact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spiral-compact.js","sourceRoot":"","sources":["../../src/tools/spiral-compact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;CAC9F,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAoB,EACpB,IAA8B;IAE9B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC;IAExD,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ import type { SpiralEngine } from '../spiral/engine.js';
3
+ export declare const spiralQuerySchema: {
4
+ query: z.ZodString;
5
+ max_tokens: z.ZodOptional<z.ZodNumber>;
6
+ levels: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
7
+ };
8
+ export declare function handleSpiralQuery(engine: SpiralEngine, args: {
9
+ query: string;
10
+ max_tokens?: number;
11
+ levels?: number[];
12
+ }): Promise<{
13
+ content: {
14
+ type: "text";
15
+ text: string;
16
+ }[];
17
+ }>;
18
+ //# sourceMappingURL=spiral-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spiral-query.d.ts","sourceRoot":"","sources":["../../src/tools/spiral-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,eAAO,MAAM,iBAAiB;;;;CAI7B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;;;;;GAUhE"}