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,170 @@
1
+ /**
2
+ * Web Knowledge Enricher — The Internet Layer.
3
+ *
4
+ * When the agent works on a topic, this module automatically:
5
+ * 1. Detects what topics need fresh knowledge
6
+ * 2. Searches the web for relevant docs, best practices, examples
7
+ * 3. Extracts and compresses the useful parts
8
+ * 4. Stores them in the spiral brain (as L2 Active nodes)
9
+ *
10
+ * The brain visualization shows new web knowledge arriving in real-time.
11
+ */
12
+ import { detectTopics, needsEnrichment } from './topic-detector.js';
13
+ import { webSearch, fetchPageContent } from './search-provider.js';
14
+ import { extractKnowledge, formatForSpiral } from './content-extractor.js';
15
+ import { logger } from '../../utils/logger.js';
16
+ // Track recently searched topics to avoid redundant searches within a session
17
+ const recentSearches = new Map();
18
+ const SEARCH_COOLDOWN_MS = 10 * 60 * 1000; // 10 minutes
19
+ /**
20
+ * Enrich the spiral brain with web knowledge about the current topic.
21
+ * Runs in the background (non-blocking).
22
+ *
23
+ * @param userMessage - The user's message to analyze
24
+ * @param spiralEngine - The spiral engine to store knowledge in
25
+ * @param options - Configuration options
26
+ */
27
+ export async function enrichFromWeb(userMessage, spiralEngine, options = {}) {
28
+ const startTime = Date.now();
29
+ const { maxTopics = 2, maxPagesPerTopic = 2, minQuality = 0.4, signal, onKnowledgeFound, } = options;
30
+ const result = {
31
+ topics: [],
32
+ nodesStored: 0,
33
+ sourcesSearched: 0,
34
+ pagesFetched: 0,
35
+ duration_ms: 0,
36
+ newKnowledge: [],
37
+ };
38
+ // Check if enrichment is needed
39
+ if (!needsEnrichment(userMessage)) {
40
+ result.duration_ms = Date.now() - startTime;
41
+ return result;
42
+ }
43
+ // Detect topics
44
+ const allTopics = detectTopics(userMessage);
45
+ const topics = filterRecentTopics(allTopics).slice(0, maxTopics);
46
+ if (topics.length === 0) {
47
+ result.duration_ms = Date.now() - startTime;
48
+ return result;
49
+ }
50
+ result.topics = topics.map(t => t.query);
51
+ logger.debug(`Web enricher: researching ${topics.length} topics: ${result.topics.join(', ')}`);
52
+ // Check if spiral already has knowledge about these topics
53
+ const filteredTopics = await filterKnownTopics(topics, spiralEngine);
54
+ // Research each topic
55
+ for (const topic of filteredTopics) {
56
+ if (signal?.aborted)
57
+ break;
58
+ try {
59
+ // Mark as recently searched
60
+ recentSearches.set(normalizeQuery(topic.query), Date.now());
61
+ // Search the web
62
+ const searchResults = await webSearch(topic.query, maxPagesPerTopic + 2, signal);
63
+ result.sourcesSearched += searchResults.length;
64
+ if (searchResults.length === 0)
65
+ continue;
66
+ // Fetch and process top results
67
+ const pagesToFetch = searchResults.slice(0, maxPagesPerTopic);
68
+ for (const searchResult of pagesToFetch) {
69
+ if (signal?.aborted)
70
+ break;
71
+ const pageContent = await fetchPageContent(searchResult.url, 8000, signal);
72
+ if (!pageContent)
73
+ continue;
74
+ result.pagesFetched++;
75
+ // Extract knowledge
76
+ const knowledge = extractKnowledge(pageContent, searchResult.url, topic.query);
77
+ // Skip low quality
78
+ if (knowledge.quality < minQuality)
79
+ continue;
80
+ // Format for spiral storage
81
+ const spiralContent = formatForSpiral(knowledge, topic.query);
82
+ // Store in spiral brain as L2 (Active) node
83
+ try {
84
+ await spiralEngine.store(spiralContent, 'pattern', {
85
+ tags: ['web_knowledge', topic.category, ...topic.query.split(/\s+/).slice(0, 3)],
86
+ source: searchResult.url,
87
+ web_topic: topic.query,
88
+ quality: knowledge.quality,
89
+ });
90
+ result.nodesStored++;
91
+ const knowledgeItem = {
92
+ topic: topic.query,
93
+ summary: knowledge.summary.slice(0, 150),
94
+ source: searchResult.url,
95
+ quality: knowledge.quality,
96
+ };
97
+ result.newKnowledge.push(knowledgeItem);
98
+ // Notify for live brain visualization
99
+ onKnowledgeFound?.(topic.query, knowledge.summary.slice(0, 150), searchResult.url);
100
+ logger.debug(`Stored web knowledge: ${topic.query} from ${searchResult.url} (quality: ${knowledge.quality.toFixed(2)})`);
101
+ }
102
+ catch {
103
+ // Storage error, skip
104
+ }
105
+ }
106
+ }
107
+ catch (err) {
108
+ logger.debug(`Web enricher error for "${topic.query}": ${err}`);
109
+ }
110
+ }
111
+ result.duration_ms = Date.now() - startTime;
112
+ logger.debug(`Web enricher complete: ${result.nodesStored} nodes stored in ${result.duration_ms}ms`);
113
+ return result;
114
+ }
115
+ /**
116
+ * Filter out topics that were recently searched.
117
+ */
118
+ function filterRecentTopics(topics) {
119
+ const now = Date.now();
120
+ return topics.filter(t => {
121
+ const normalized = normalizeQuery(t.query);
122
+ const lastSearch = recentSearches.get(normalized);
123
+ if (lastSearch && now - lastSearch < SEARCH_COOLDOWN_MS) {
124
+ return false;
125
+ }
126
+ return true;
127
+ });
128
+ }
129
+ /**
130
+ * Filter out topics the spiral already has good knowledge about.
131
+ */
132
+ async function filterKnownTopics(topics, spiralEngine) {
133
+ const filtered = [];
134
+ for (const topic of topics) {
135
+ try {
136
+ const existing = await spiralEngine.query(topic.query, undefined, [1, 2]);
137
+ // If we already have 3+ relevant nodes in L1/L2, skip this topic
138
+ const totalExisting = existing.level_1.length + existing.level_2.length;
139
+ // Check if any existing nodes are web knowledge
140
+ const hasWebKnowledge = [...existing.level_1, ...existing.level_2].some((n) => n.content?.includes('[Web Knowledge:'));
141
+ if (totalExisting < 3 || !hasWebKnowledge) {
142
+ filtered.push(topic);
143
+ }
144
+ }
145
+ catch {
146
+ // If query fails, include the topic
147
+ filtered.push(topic);
148
+ }
149
+ }
150
+ return filtered;
151
+ }
152
+ function normalizeQuery(query) {
153
+ return query.toLowerCase().trim().replace(/\s+/g, ' ');
154
+ }
155
+ /**
156
+ * Clear the recent searches cache (for testing or session reset).
157
+ */
158
+ export function clearSearchCache() {
159
+ recentSearches.clear();
160
+ }
161
+ /**
162
+ * Get current cache stats.
163
+ */
164
+ export function getSearchCacheStats() {
165
+ return {
166
+ size: recentSearches.size,
167
+ topics: Array.from(recentSearches.keys()),
168
+ };
169
+ }
170
+ //# sourceMappingURL=web-enricher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-enricher.js","sourceRoot":"","sources":["../../../src/spiral/cloud/web-enricher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAsB,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAqB,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AA8B/C,8EAA8E;AAC9E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;AACjD,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAExD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAmB,EACnB,YAAiB,EACjB,UAA6B,EAAE;IAE/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,EACJ,SAAS,GAAG,CAAC,EACb,gBAAgB,GAAG,CAAC,EACpB,UAAU,GAAG,GAAG,EAChB,MAAM,EACN,gBAAgB,GACjB,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAqB;QAC/B,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,EAAE;KACjB,CAAC;IAEF,gCAAgC;IAChC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,gBAAgB;IAChB,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAEjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,6BAA6B,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE/F,2DAA2D;IAC3D,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAErE,sBAAsB;IACtB,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM;QAE3B,IAAI,CAAC;YACH,4BAA4B;YAC5B,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAE5D,iBAAiB;YACjB,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YACjF,MAAM,CAAC,eAAe,IAAI,aAAa,CAAC,MAAM,CAAC;YAE/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEzC,gCAAgC;YAChC,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAE9D,KAAK,MAAM,YAAY,IAAI,YAAY,EAAE,CAAC;gBACxC,IAAI,MAAM,EAAE,OAAO;oBAAE,MAAM;gBAE3B,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC3E,IAAI,CAAC,WAAW;oBAAE,SAAS;gBAE3B,MAAM,CAAC,YAAY,EAAE,CAAC;gBAEtB,oBAAoB;gBACpB,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAE/E,mBAAmB;gBACnB,IAAI,SAAS,CAAC,OAAO,GAAG,UAAU;oBAAE,SAAS;gBAE7C,4BAA4B;gBAC5B,MAAM,aAAa,GAAG,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAE9D,4CAA4C;gBAC5C,IAAI,CAAC;oBACH,MAAM,YAAY,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE;wBACjD,IAAI,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBAChF,MAAM,EAAE,YAAY,CAAC,GAAG;wBACxB,SAAS,EAAE,KAAK,CAAC,KAAK;wBACtB,OAAO,EAAE,SAAS,CAAC,OAAO;qBAC3B,CAAC,CAAC;oBAEH,MAAM,CAAC,WAAW,EAAE,CAAC;oBAErB,MAAM,aAAa,GAAG;wBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBACxC,MAAM,EAAE,YAAY,CAAC,GAAG;wBACxB,OAAO,EAAE,SAAS,CAAC,OAAO;qBAC3B,CAAC;oBACF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAExC,sCAAsC;oBACtC,gBAAgB,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;oBAEnF,MAAM,CAAC,KAAK,CAAC,yBAAyB,KAAK,CAAC,KAAK,SAAS,YAAY,CAAC,GAAG,cAAc,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3H,CAAC;gBAAC,MAAM,CAAC;oBACP,sBAAsB;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,2BAA2B,KAAK,CAAC,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,WAAW,oBAAoB,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAErG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,MAAuB;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACvB,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,UAAU,IAAI,GAAG,GAAG,UAAU,GAAG,kBAAkB,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,MAAuB,EACvB,YAAiB;IAEjB,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1E,iEAAiE;YACjE,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;YAExE,gDAAgD;YAChD,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CACrE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CACnD,CAAC;YAEF,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;YACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,cAAc,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,IAAI,EAAE,cAAc,CAAC,IAAI;QACzB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;KAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { NodeStore } from '../storage/nodes.js';
2
+ import { VectorStore } from '../storage/vectors.js';
3
+ interface CompactionResult {
4
+ compacted_nodes: number;
5
+ freed_tokens: number;
6
+ nodes_deleted: number;
7
+ }
8
+ export interface EvolutionResult {
9
+ promoted: number;
10
+ demoted: number;
11
+ archived: number;
12
+ summarized: number;
13
+ }
14
+ /**
15
+ * Handles context evolution as nodes move through 5 spiral levels.
16
+ * L1 Focus → L2 Active: relevance demotion, no content change
17
+ * L2 Active → L3 Reference: content summarized
18
+ * L3 Reference → L4 Archive: content heavily compressed
19
+ * L4 Archive → L5 Deep Archive: only metadata + short summary kept
20
+ * Archived nodes are NEVER deleted — they remain retrievable.
21
+ */
22
+ export declare class CompressionService {
23
+ private nodes;
24
+ private vectors;
25
+ private l1Min;
26
+ private l2Min;
27
+ private l3Min;
28
+ private l4Min;
29
+ constructor(nodes: NodeStore, vectors: VectorStore, l1Min?: number, l2Min?: number, l3Min?: number, l4Min?: number);
30
+ /**
31
+ * Apply time-based decay to all nodes and re-level them.
32
+ */
33
+ applyDecay(decayRate: number): number;
34
+ /**
35
+ * Evolution: promote or demote nodes based on current relevance scores.
36
+ * Unlike compaction, evolution preserves ALL nodes — nothing is deleted.
37
+ */
38
+ evolve(): EvolutionResult;
39
+ /**
40
+ * Manual compaction: compress and demote old nodes.
41
+ * In 5-level system, aggressive mode pushes to L4/L5 instead of deleting.
42
+ */
43
+ compact(aggressive: boolean): CompactionResult;
44
+ /**
45
+ * Simple content summarization: truncate to ~200 chars.
46
+ */
47
+ summarizeContent(content: string): string;
48
+ /**
49
+ * Deep compression for archive levels: truncate to ~100 chars.
50
+ */
51
+ deepCompress(content: string): string;
52
+ }
53
+ export {};
54
+ //# sourceMappingURL=compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/spiral/compression.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD,UAAU,gBAAgB;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;gBAEV,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,SAAM,EAAE,KAAK,SAAM,EAAE,KAAK,SAAM,EAAE,KAAK,SAAM;IAStG;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAoCrC;;;OAGG;IACH,MAAM,IAAI,eAAe;IA8CzB;;;OAGG;IACH,OAAO,CAAC,UAAU,EAAE,OAAO,GAAG,gBAAgB;IAgE9C;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAKzC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAItC"}
@@ -0,0 +1,175 @@
1
+ import { logger } from '../utils/logger.js';
2
+ import { estimateTokens } from '../utils/tokens.js';
3
+ import { determineLevel } from './relevance.js';
4
+ /**
5
+ * Handles context evolution as nodes move through 5 spiral levels.
6
+ * L1 Focus → L2 Active: relevance demotion, no content change
7
+ * L2 Active → L3 Reference: content summarized
8
+ * L3 Reference → L4 Archive: content heavily compressed
9
+ * L4 Archive → L5 Deep Archive: only metadata + short summary kept
10
+ * Archived nodes are NEVER deleted — they remain retrievable.
11
+ */
12
+ export class CompressionService {
13
+ nodes;
14
+ vectors;
15
+ l1Min;
16
+ l2Min;
17
+ l3Min;
18
+ l4Min;
19
+ constructor(nodes, vectors, l1Min = 0.7, l2Min = 0.5, l3Min = 0.3, l4Min = 0.1) {
20
+ this.nodes = nodes;
21
+ this.vectors = vectors;
22
+ this.l1Min = l1Min;
23
+ this.l2Min = l2Min;
24
+ this.l3Min = l3Min;
25
+ this.l4Min = l4Min;
26
+ }
27
+ /**
28
+ * Apply time-based decay to all nodes and re-level them.
29
+ */
30
+ applyDecay(decayRate) {
31
+ const now = Date.now();
32
+ const allNodes = this.nodes.getAll();
33
+ const updates = [];
34
+ for (const node of allNodes) {
35
+ const hoursSinceAccess = (now - node.accessed_at) / (1000 * 60 * 60);
36
+ const decayFactor = Math.exp(-decayRate * hoursSinceAccess);
37
+ const newScore = Math.max(0.01, node.relevance_score * decayFactor);
38
+ const newLevel = determineLevel(newScore, this.l1Min, this.l2Min, this.l3Min, this.l4Min);
39
+ if (newScore !== node.relevance_score || newLevel !== node.level) {
40
+ updates.push({ id: node.id, score: newScore, level: newLevel });
41
+ // Summarize when demoting to L3+
42
+ if (newLevel >= 3 && node.level < 3 && !node.summary) {
43
+ const summary = this.summarizeContent(node.content);
44
+ this.nodes.updateSummary(node.id, summary);
45
+ }
46
+ // Deep compress when demoting to L4+
47
+ if (newLevel >= 4 && node.level < 4 && node.summary) {
48
+ const deepSummary = this.deepCompress(node.summary);
49
+ this.nodes.updateSummary(node.id, deepSummary);
50
+ }
51
+ }
52
+ }
53
+ if (updates.length > 0) {
54
+ this.nodes.bulkUpdateRelevance(updates);
55
+ logger.debug(`Decay applied to ${updates.length} nodes`);
56
+ }
57
+ return updates.length;
58
+ }
59
+ /**
60
+ * Evolution: promote or demote nodes based on current relevance scores.
61
+ * Unlike compaction, evolution preserves ALL nodes — nothing is deleted.
62
+ */
63
+ evolve() {
64
+ let promoted = 0;
65
+ let demoted = 0;
66
+ let archived = 0;
67
+ let summarized = 0;
68
+ const allNodes = this.nodes.getAll();
69
+ for (const node of allNodes) {
70
+ const targetLevel = determineLevel(node.relevance_score, this.l1Min, this.l2Min, this.l3Min, this.l4Min);
71
+ if (targetLevel === node.level)
72
+ continue;
73
+ // Promotion (moving to a higher-priority level)
74
+ if (targetLevel < node.level) {
75
+ this.nodes.updateLevel(node.id, targetLevel);
76
+ promoted++;
77
+ continue;
78
+ }
79
+ // Demotion (moving to a lower-priority level)
80
+ this.nodes.updateLevel(node.id, targetLevel);
81
+ demoted++;
82
+ // Summarize when entering L3 for the first time
83
+ if (targetLevel >= 3 && node.level < 3 && !node.summary) {
84
+ const summary = this.summarizeContent(node.content);
85
+ this.nodes.updateSummary(node.id, summary);
86
+ summarized++;
87
+ }
88
+ // Deep compress when entering L4/L5
89
+ if (targetLevel >= 4 && node.level < 4) {
90
+ const text = node.summary ?? node.content;
91
+ const deepSummary = this.deepCompress(text);
92
+ this.nodes.updateSummary(node.id, deepSummary);
93
+ archived++;
94
+ }
95
+ }
96
+ logger.info(`Evolution: ${promoted} promoted, ${demoted} demoted, ${archived} archived, ${summarized} summarized`);
97
+ return { promoted, demoted, archived, summarized };
98
+ }
99
+ /**
100
+ * Manual compaction: compress and demote old nodes.
101
+ * In 5-level system, aggressive mode pushes to L4/L5 instead of deleting.
102
+ */
103
+ compact(aggressive) {
104
+ let compacted = 0;
105
+ let freed = 0;
106
+ let deleted = 0;
107
+ const allNodes = this.nodes.getAll();
108
+ for (const node of allNodes) {
109
+ // Compress L2 Active nodes that are old
110
+ if (node.level === 2 && !node.summary) {
111
+ const hoursSince = (Date.now() - node.accessed_at) / (1000 * 60 * 60);
112
+ if (hoursSince > 24 || aggressive) {
113
+ const summary = this.summarizeContent(node.content);
114
+ const oldTokens = node.token_count;
115
+ const newTokens = estimateTokens(summary);
116
+ freed += oldTokens - newTokens;
117
+ this.nodes.updateSummary(node.id, summary);
118
+ this.nodes.updateLevel(node.id, 3);
119
+ compacted++;
120
+ }
121
+ }
122
+ // Compress L3 Reference nodes to L4 Archive
123
+ if (node.level === 3) {
124
+ const hoursSince = (Date.now() - node.accessed_at) / (1000 * 60 * 60);
125
+ if (hoursSince > 72 || aggressive) {
126
+ const text = node.summary ?? node.content;
127
+ const deepSummary = this.deepCompress(text);
128
+ const oldTokens = estimateTokens(text);
129
+ const newTokens = estimateTokens(deepSummary);
130
+ freed += oldTokens - newTokens;
131
+ this.nodes.updateSummary(node.id, deepSummary);
132
+ this.nodes.updateLevel(node.id, 4);
133
+ compacted++;
134
+ }
135
+ }
136
+ // In aggressive mode, push L4 to L5 (deep archive) — but NEVER delete
137
+ if (aggressive && node.level === 4) {
138
+ const hoursSince = (Date.now() - node.accessed_at) / (1000 * 60 * 60);
139
+ if (hoursSince > 168) { // 7 days
140
+ this.nodes.updateLevel(node.id, 5);
141
+ compacted++;
142
+ }
143
+ }
144
+ // Only delete L5 nodes in aggressive mode after 30 days
145
+ if (aggressive && node.level === 5) {
146
+ const hoursSince = (Date.now() - node.accessed_at) / (1000 * 60 * 60);
147
+ if (hoursSince > 720) { // 30 days
148
+ freed += node.token_count;
149
+ this.vectors.delete(node.id);
150
+ this.nodes.delete(node.id);
151
+ deleted++;
152
+ }
153
+ }
154
+ }
155
+ logger.info(`Compaction: ${compacted} compressed, ${deleted} deleted, ${freed} tokens freed`);
156
+ return { compacted_nodes: compacted, freed_tokens: freed, nodes_deleted: deleted };
157
+ }
158
+ /**
159
+ * Simple content summarization: truncate to ~200 chars.
160
+ */
161
+ summarizeContent(content) {
162
+ if (content.length <= 200)
163
+ return content;
164
+ return content.slice(0, 197) + '...';
165
+ }
166
+ /**
167
+ * Deep compression for archive levels: truncate to ~100 chars.
168
+ */
169
+ deepCompress(content) {
170
+ if (content.length <= 100)
171
+ return content;
172
+ return content.slice(0, 97) + '...';
173
+ }
174
+ }
175
+ //# sourceMappingURL=compression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compression.js","sourceRoot":"","sources":["../../src/spiral/compression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { EmbeddingStatus } from '../types.js';
2
+ /**
3
+ * Manages local embedding generation using HuggingFace Transformers.js.
4
+ * Falls back gracefully if the model can't be loaded.
5
+ */
6
+ export declare class EmbeddingService {
7
+ private pipeline;
8
+ private loading;
9
+ private _status;
10
+ private model;
11
+ constructor(model: string);
12
+ get status(): EmbeddingStatus;
13
+ /**
14
+ * Start loading the model eagerly. Call this at server startup.
15
+ */
16
+ initialize(): Promise<void>;
17
+ private loadModel;
18
+ /**
19
+ * Generate embedding for a text string.
20
+ * Returns null if embeddings are not available.
21
+ */
22
+ embed(text: string): Promise<Float32Array | null>;
23
+ }
24
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/spiral/embeddings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,KAAK,CAAS;gBAEV,KAAK,EAAE,MAAM;IAIzB,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAOnB,SAAS;IAsBvB;;;OAGG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CAoBxD"}
@@ -0,0 +1,69 @@
1
+ import { logger } from '../utils/logger.js';
2
+ /**
3
+ * Manages local embedding generation using HuggingFace Transformers.js.
4
+ * Falls back gracefully if the model can't be loaded.
5
+ */
6
+ export class EmbeddingService {
7
+ pipeline = null;
8
+ loading = null;
9
+ _status = 'loading';
10
+ model;
11
+ constructor(model) {
12
+ this.model = model;
13
+ }
14
+ get status() {
15
+ return this._status;
16
+ }
17
+ /**
18
+ * Start loading the model eagerly. Call this at server startup.
19
+ */
20
+ async initialize() {
21
+ if (this.loading)
22
+ return this.loading;
23
+ this.loading = this.loadModel();
24
+ return this.loading;
25
+ }
26
+ async loadModel() {
27
+ try {
28
+ logger.info(`Loading embedding model: ${this.model}`);
29
+ const startTime = Date.now();
30
+ const { pipeline } = await import('@huggingface/transformers');
31
+ const extractor = await pipeline('feature-extraction', this.model, {
32
+ dtype: 'q8',
33
+ });
34
+ this.pipeline = extractor;
35
+ this._status = 'loaded';
36
+ const elapsed = Date.now() - startTime;
37
+ logger.info(`Embedding model loaded in ${elapsed}ms`);
38
+ }
39
+ catch (err) {
40
+ logger.warn(`Failed to load embedding model: ${err}. Using keyword fallback.`);
41
+ this._status = 'fallback';
42
+ this.pipeline = null;
43
+ }
44
+ }
45
+ /**
46
+ * Generate embedding for a text string.
47
+ * Returns null if embeddings are not available.
48
+ */
49
+ async embed(text) {
50
+ if (this._status === 'loading') {
51
+ await this.loading;
52
+ }
53
+ if (!this.pipeline) {
54
+ return null;
55
+ }
56
+ try {
57
+ const result = await this.pipeline(text, {
58
+ pooling: 'mean',
59
+ normalize: true,
60
+ });
61
+ return new Float32Array(result.data);
62
+ }
63
+ catch (err) {
64
+ logger.error(`Embedding generation failed: ${err}`);
65
+ return null;
66
+ }
67
+ }
68
+ }
69
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/spiral/embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAK5C;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACnB,QAAQ,GAAoB,IAAI,CAAC;IACjC,OAAO,GAAyB,IAAI,CAAC;IACrC,OAAO,GAAoB,SAAS,CAAC;IACrC,KAAK,CAAS;IAEtB,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QAEtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,EAAE;gBACjE,KAAK,EAAE,IAAW;aACnB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,GAAG,SAAgC,CAAC;YACjD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;YAExB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,6BAA6B,OAAO,IAAI,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,mCAAmC,GAAG,2BAA2B,CAAC,CAAC;YAC/E,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,OAAO,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;gBACvC,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,95 @@
1
+ import type { ContextType, NodeMetadata, RelationType, SpiralLevel, SpiralConfig, SpiralQueryResult, SpiralStoreResult, SpiralStatusResult, SpiralCompactResult, Edge } from '../types.js';
2
+ import { type EvolutionResult } from './compression.js';
3
+ /**
4
+ * Core engine that orchestrates all spiral operations.
5
+ */
6
+ export declare class SpiralEngine {
7
+ private db;
8
+ private nodes;
9
+ private edges;
10
+ private vectors;
11
+ private embeddings;
12
+ private injection;
13
+ private compression;
14
+ private config;
15
+ constructor(config: SpiralConfig);
16
+ /**
17
+ * Start the engine. Loads embedding model eagerly.
18
+ */
19
+ initialize(): Promise<void>;
20
+ /**
21
+ * Query context across spiral levels.
22
+ */
23
+ query(queryText: string, maxTokens?: number, levels?: number[]): Promise<SpiralQueryResult>;
24
+ /**
25
+ * Store new context in the spiral.
26
+ */
27
+ store(content: string, type: ContextType, metadata?: NodeMetadata, relations?: string[]): Promise<SpiralStoreResult>;
28
+ /**
29
+ * Get spiral status metrics.
30
+ */
31
+ status(): SpiralStatusResult;
32
+ /** Count web knowledge nodes (virtual L6) */
33
+ webKnowledgeCount(): number;
34
+ /**
35
+ * Run compaction.
36
+ */
37
+ compact(aggressive: boolean): SpiralCompactResult;
38
+ /**
39
+ * Create a manual relation between two nodes.
40
+ */
41
+ relate(sourceId: string, targetId: string, type: RelationType, weight?: number): Edge;
42
+ /**
43
+ * Export all data for visualization.
44
+ */
45
+ exportForVisualization(): {
46
+ nodes: Array<{
47
+ id: string;
48
+ label: string;
49
+ content: string;
50
+ type: string;
51
+ level: SpiralLevel;
52
+ relevanceScore: number;
53
+ createdAt: string;
54
+ lastAccessed: string;
55
+ }>;
56
+ edges: Array<{
57
+ source: string;
58
+ target: string;
59
+ type: string;
60
+ weight: number;
61
+ }>;
62
+ };
63
+ /**
64
+ * Run evolution: promote/demote nodes based on relevance scores.
65
+ * Preserves all nodes — nothing is deleted.
66
+ */
67
+ evolve(): EvolutionResult;
68
+ /**
69
+ * Save state: persist conversation context and trigger evolution if needed.
70
+ * Called on graceful shutdown.
71
+ */
72
+ saveState(conversationMessages?: Array<{
73
+ role: string;
74
+ content: string;
75
+ }>): Promise<void>;
76
+ /**
77
+ * Import a node directly (for ZIP import). Returns store result.
78
+ */
79
+ importNode(input: {
80
+ type: ContextType;
81
+ content: string;
82
+ level?: SpiralLevel;
83
+ relevanceScore?: number;
84
+ metadata?: NodeMetadata;
85
+ }): SpiralStoreResult;
86
+ /**
87
+ * Clear all nodes and edges (for ZIP replace import).
88
+ */
89
+ clearAll(): void;
90
+ /**
91
+ * Shutdown: close database.
92
+ */
93
+ close(): void;
94
+ }
95
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/spiral/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,IAAI,EACL,MAAM,aAAa,CAAC;AAOrB,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAK5E;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAsBhC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,iBAAiB,CAAC;IAW7B;;OAEG;IACG,KAAK,CACT,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,WAAW,EACjB,QAAQ,CAAC,EAAE,YAAY,EACvB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,iBAAiB,CAAC;IA6D7B;;OAEG;IACH,MAAM,IAAI,kBAAkB;IAyB5B,6CAA6C;IAC7C,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,OAAO,CAAC,UAAU,EAAE,OAAO,GAAG,mBAAmB;IAIjD;;OAEG;IACH,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,YAAY,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IASP;;OAEG;IACH,sBAAsB,IAAI;QACxB,KAAK,EAAE,KAAK,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;YACX,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,WAAW,CAAC;YACnB,cAAc,EAAE,MAAM,CAAC;YACvB,SAAS,EAAE,MAAM,CAAC;YAClB,YAAY,EAAE,MAAM,CAAC;SACtB,CAAC,CAAC;QACH,KAAK,EAAE,KAAK,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,MAAM,CAAC;YACf,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC,CAAC;KACJ;IAoCD;;;OAGG;IACH,MAAM,IAAI,eAAe;IAIzB;;;OAGG;IACG,SAAS,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/F;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE;QAChB,IAAI,EAAE,WAAW,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;KACzB,GAAG,iBAAiB;IAiBrB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAMhB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}