kynjal-cli 4.0.0 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/dist/src/appliance/gguf-engine.d.ts +91 -0
  2. package/dist/src/appliance/gguf-engine.d.ts.map +1 -0
  3. package/dist/src/appliance/gguf-engine.js +286 -525
  4. package/dist/src/appliance/gguf-engine.js.map +1 -1
  5. package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
  6. package/dist/src/appliance/ruvllm-bridge.d.ts.map +1 -0
  7. package/dist/src/appliance/ruvllm-bridge.js +203 -403
  8. package/dist/src/appliance/ruvllm-bridge.js.map +1 -1
  9. package/dist/src/appliance/rvfa-builder.d.ts +44 -0
  10. package/dist/src/appliance/rvfa-builder.d.ts.map +1 -0
  11. package/dist/src/appliance/rvfa-builder.js +154 -208
  12. package/dist/src/appliance/rvfa-builder.js.map +1 -1
  13. package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
  14. package/dist/src/appliance/rvfa-distribution.d.ts.map +1 -0
  15. package/dist/src/appliance/rvfa-distribution.js +260 -423
  16. package/dist/src/appliance/rvfa-distribution.js.map +1 -1
  17. package/dist/src/appliance/rvfa-format.d.ts +111 -0
  18. package/dist/src/appliance/rvfa-format.d.ts.map +1 -0
  19. package/dist/src/appliance/rvfa-format.js +128 -200
  20. package/dist/src/appliance/rvfa-format.js.map +1 -1
  21. package/dist/src/appliance/rvfa-runner.d.ts +69 -0
  22. package/dist/src/appliance/rvfa-runner.d.ts.map +1 -0
  23. package/dist/src/appliance/rvfa-runner.js +168 -304
  24. package/dist/src/appliance/rvfa-runner.js.map +1 -1
  25. package/dist/src/appliance/rvfa-signing.d.ts +123 -0
  26. package/dist/src/appliance/rvfa-signing.d.ts.map +1 -0
  27. package/dist/src/appliance/rvfa-signing.js +173 -295
  28. package/dist/src/appliance/rvfa-signing.js.map +1 -1
  29. package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
  30. package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -0
  31. package/dist/src/benchmarks/pretrain/index.js +331 -542
  32. package/dist/src/benchmarks/pretrain/index.js.map +1 -1
  33. package/dist/src/commands/agent.js +574 -697
  34. package/dist/src/commands/agent.js.map +1 -1
  35. package/dist/src/commands/analyze.js +1218 -1548
  36. package/dist/src/commands/analyze.js.map +1 -1
  37. package/dist/src/commands/appliance-advanced.js +158 -267
  38. package/dist/src/commands/appliance-advanced.js.map +1 -1
  39. package/dist/src/commands/appliance.js +318 -493
  40. package/dist/src/commands/appliance.js.map +1 -1
  41. package/dist/src/commands/benchmark.js +372 -523
  42. package/dist/src/commands/benchmark.js.map +1 -1
  43. package/dist/src/commands/claims.js +274 -364
  44. package/dist/src/commands/claims.js.map +1 -1
  45. package/dist/src/commands/cleanup.js +113 -157
  46. package/dist/src/commands/cleanup.js.map +1 -1
  47. package/dist/src/commands/completions.js +477 -118
  48. package/dist/src/commands/completions.js.map +1 -1
  49. package/dist/src/commands/config.js +237 -303
  50. package/dist/src/commands/config.js.map +1 -1
  51. package/dist/src/commands/daemon.js +487 -596
  52. package/dist/src/commands/daemon.js.map +1 -1
  53. package/dist/src/commands/deployment.js +194 -275
  54. package/dist/src/commands/deployment.js.map +1 -1
  55. package/dist/src/commands/doctor.js +504 -686
  56. package/dist/src/commands/doctor.js.map +1 -1
  57. package/dist/src/commands/embeddings.js +1293 -1543
  58. package/dist/src/commands/embeddings.js.map +1 -1
  59. package/dist/src/commands/guidance.js +449 -596
  60. package/dist/src/commands/guidance.js.map +1 -1
  61. package/dist/src/commands/hive-mind.js +854 -938
  62. package/dist/src/commands/hive-mind.js.map +1 -1
  63. package/dist/src/commands/hooks.js +3112 -3519
  64. package/dist/src/commands/hooks.js.map +1 -1
  65. package/dist/src/commands/index.d.ts +115 -0
  66. package/dist/src/commands/index.d.ts.map +1 -0
  67. package/dist/src/commands/index.js +126 -308
  68. package/dist/src/commands/index.js.map +1 -1
  69. package/dist/src/commands/init.js +788 -940
  70. package/dist/src/commands/init.js.map +1 -1
  71. package/dist/src/commands/issues.js +383 -558
  72. package/dist/src/commands/issues.js.map +1 -1
  73. package/dist/src/commands/mcp.js +493 -605
  74. package/dist/src/commands/mcp.js.map +1 -1
  75. package/dist/src/commands/memory.js +833 -1026
  76. package/dist/src/commands/memory.js.map +1 -1
  77. package/dist/src/commands/migrate.js +282 -347
  78. package/dist/src/commands/migrate.js.map +1 -1
  79. package/dist/src/commands/neural.js +1289 -1563
  80. package/dist/src/commands/neural.js.map +1 -1
  81. package/dist/src/commands/performance.js +497 -643
  82. package/dist/src/commands/performance.js.map +1 -1
  83. package/dist/src/commands/plugins.js +668 -841
  84. package/dist/src/commands/plugins.js.map +1 -1
  85. package/dist/src/commands/process.js +392 -447
  86. package/dist/src/commands/process.js.map +1 -1
  87. package/dist/src/commands/progress.js +162 -256
  88. package/dist/src/commands/progress.js.map +1 -1
  89. package/dist/src/commands/providers.js +150 -220
  90. package/dist/src/commands/providers.js.map +1 -1
  91. package/dist/src/commands/route.js +520 -665
  92. package/dist/src/commands/route.js.map +1 -1
  93. package/dist/src/commands/ruvector/backup.js +505 -651
  94. package/dist/src/commands/ruvector/backup.js.map +1 -1
  95. package/dist/src/commands/ruvector/benchmark.js +349 -401
  96. package/dist/src/commands/ruvector/benchmark.js.map +1 -1
  97. package/dist/src/commands/ruvector/import.js +224 -266
  98. package/dist/src/commands/ruvector/import.js.map +1 -1
  99. package/dist/src/commands/ruvector/index.js +37 -75
  100. package/dist/src/commands/ruvector/index.js.map +1 -1
  101. package/dist/src/commands/ruvector/init.js +336 -359
  102. package/dist/src/commands/ruvector/init.js.map +1 -1
  103. package/dist/src/commands/ruvector/migrate.js +335 -322
  104. package/dist/src/commands/ruvector/migrate.js.map +1 -1
  105. package/dist/src/commands/ruvector/optimize.js +375 -431
  106. package/dist/src/commands/ruvector/optimize.js.map +1 -1
  107. package/dist/src/commands/ruvector/setup.js +703 -117
  108. package/dist/src/commands/ruvector/setup.js.map +1 -1
  109. package/dist/src/commands/ruvector/status.js +364 -419
  110. package/dist/src/commands/ruvector/status.js.map +1 -1
  111. package/dist/src/commands/security.js +485 -608
  112. package/dist/src/commands/security.js.map +1 -1
  113. package/dist/src/commands/session.js +504 -626
  114. package/dist/src/commands/session.js.map +1 -1
  115. package/dist/src/commands/start.js +267 -364
  116. package/dist/src/commands/start.js.map +1 -1
  117. package/dist/src/commands/status.js +380 -486
  118. package/dist/src/commands/status.js.map +1 -1
  119. package/dist/src/commands/swarm.js +408 -488
  120. package/dist/src/commands/swarm.js.map +1 -1
  121. package/dist/src/commands/task.js +423 -538
  122. package/dist/src/commands/task.js.map +1 -1
  123. package/dist/src/commands/transfer-store.js +322 -412
  124. package/dist/src/commands/transfer-store.js.map +1 -1
  125. package/dist/src/commands/update.js +196 -291
  126. package/dist/src/commands/update.js.map +1 -1
  127. package/dist/src/commands/workflow.js +386 -486
  128. package/dist/src/commands/workflow.js.map +1 -1
  129. package/dist/src/config-adapter.d.ts +15 -0
  130. package/dist/src/config-adapter.d.ts.map +1 -0
  131. package/dist/src/config-adapter.js +38 -39
  132. package/dist/src/config-adapter.js.map +1 -1
  133. package/dist/src/index.d.ts +77 -0
  134. package/dist/src/index.d.ts.map +1 -0
  135. package/dist/src/index.js +309 -411
  136. package/dist/src/index.js.map +1 -1
  137. package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
  138. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
  139. package/dist/src/infrastructure/in-memory-repositories.js +246 -507
  140. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
  141. package/dist/src/init/claudemd-generator.d.ts +25 -0
  142. package/dist/src/init/claudemd-generator.d.ts.map +1 -0
  143. package/dist/src/init/claudemd-generator.js +368 -78
  144. package/dist/src/init/claudemd-generator.js.map +1 -1
  145. package/dist/src/init/executor.d.ts +41 -0
  146. package/dist/src/init/executor.d.ts.map +1 -0
  147. package/dist/src/init/executor.js +1307 -996
  148. package/dist/src/init/executor.js.map +1 -1
  149. package/dist/src/init/helpers-generator.d.ts +60 -0
  150. package/dist/src/init/helpers-generator.d.ts.map +1 -0
  151. package/dist/src/init/helpers-generator.js +657 -12
  152. package/dist/src/init/helpers-generator.js.map +1 -1
  153. package/dist/src/init/index.d.ts +1 -1
  154. package/dist/src/init/index.d.ts.map +1 -1
  155. package/dist/src/init/index.js +1 -1
  156. package/dist/src/init/index.js.map +1 -1
  157. package/dist/src/init/mcp-generator.js +33 -37
  158. package/dist/src/init/mcp-generator.js.map +1 -1
  159. package/dist/src/init/settings-generator.js +76 -77
  160. package/dist/src/init/settings-generator.js.map +1 -1
  161. package/dist/src/init/statusline-generator.js +801 -3
  162. package/dist/src/init/statusline-generator.js.map +1 -1
  163. package/dist/src/init/types.d.ts +1 -1
  164. package/dist/src/init/types.d.ts.map +1 -1
  165. package/dist/src/init/types.js +76 -59
  166. package/dist/src/init/types.js.map +1 -1
  167. package/dist/src/mcp-client.d.ts +92 -0
  168. package/dist/src/mcp-client.d.ts.map +1 -0
  169. package/dist/src/mcp-client.js +81 -125
  170. package/dist/src/mcp-client.js.map +1 -1
  171. package/dist/src/mcp-server.d.ts +161 -0
  172. package/dist/src/mcp-server.d.ts.map +1 -0
  173. package/dist/src/mcp-server.js +470 -757
  174. package/dist/src/mcp-server.js.map +1 -1
  175. package/dist/src/mcp-tools/agent-tools.js +391 -492
  176. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  177. package/dist/src/mcp-tools/agentdb-tools.js +332 -533
  178. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
  179. package/dist/src/mcp-tools/analyze-tools.js +172 -236
  180. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  181. package/dist/src/mcp-tools/auto-install.d.ts +83 -0
  182. package/dist/src/mcp-tools/auto-install.d.ts.map +1 -0
  183. package/dist/src/mcp-tools/auto-install.js +80 -142
  184. package/dist/src/mcp-tools/auto-install.js.map +1 -1
  185. package/dist/src/mcp-tools/browser-tools.js +252 -375
  186. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  187. package/dist/src/mcp-tools/claims-tools.js +473 -565
  188. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  189. package/dist/src/mcp-tools/config-tools.js +197 -272
  190. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  191. package/dist/src/mcp-tools/coordination-tools.js +500 -572
  192. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  193. package/dist/src/mcp-tools/daa-tools.js +286 -364
  194. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  195. package/dist/src/mcp-tools/embeddings-tools.js +582 -693
  196. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  197. package/dist/src/mcp-tools/github-tools.js +260 -311
  198. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  199. package/dist/src/mcp-tools/hive-mind-tools.js +573 -640
  200. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  201. package/dist/src/mcp-tools/hooks-tools.js +2215 -2648
  202. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  203. package/dist/src/mcp-tools/memory-tools.js +350 -505
  204. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  205. package/dist/src/mcp-tools/neural-tools.js +315 -412
  206. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  207. package/dist/src/mcp-tools/performance-tools.js +420 -480
  208. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  209. package/dist/src/mcp-tools/progress-tools.js +204 -278
  210. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  211. package/dist/src/mcp-tools/ruvllm-tools.js +163 -279
  212. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
  213. package/dist/src/mcp-tools/security-tools.js +297 -429
  214. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  215. package/dist/src/mcp-tools/session-tools.js +185 -234
  216. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  217. package/dist/src/mcp-tools/swarm-tools.js +207 -260
  218. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  219. package/dist/src/mcp-tools/system-tools.js +276 -325
  220. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  221. package/dist/src/mcp-tools/task-tools.js +270 -336
  222. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  223. package/dist/src/mcp-tools/terminal-tools.js +148 -196
  224. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  225. package/dist/src/mcp-tools/transfer-tools.js +186 -333
  226. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  227. package/dist/src/mcp-tools/types.d.ts +31 -0
  228. package/dist/src/mcp-tools/types.d.ts.map +1 -0
  229. package/dist/src/mcp-tools/wasm-agent-tools.js +133 -280
  230. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
  231. package/dist/src/mcp-tools/workflow-tools.js +405 -450
  232. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  233. package/dist/src/memory/ewc-consolidation.d.ts +295 -0
  234. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
  235. package/dist/src/memory/ewc-consolidation.js +190 -303
  236. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  237. package/dist/src/memory/intelligence.d.ts +338 -0
  238. package/dist/src/memory/intelligence.d.ts.map +1 -0
  239. package/dist/src/memory/intelligence.js +569 -794
  240. package/dist/src/memory/intelligence.js.map +1 -1
  241. package/dist/src/memory/memory-bridge.d.ts +407 -0
  242. package/dist/src/memory/memory-bridge.d.ts.map +1 -0
  243. package/dist/src/memory/memory-bridge.js +1170 -1640
  244. package/dist/src/memory/memory-bridge.js.map +1 -1
  245. package/dist/src/memory/memory-initializer.d.ts +412 -0
  246. package/dist/src/memory/memory-initializer.d.ts.map +1 -0
  247. package/dist/src/memory/memory-initializer.js +1836 -1851
  248. package/dist/src/memory/memory-initializer.js.map +1 -1
  249. package/dist/src/memory/sona-optimizer.d.ts +227 -0
  250. package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
  251. package/dist/src/memory/sona-optimizer.js +199 -329
  252. package/dist/src/memory/sona-optimizer.js.map +1 -1
  253. package/dist/src/output.d.ts +2 -2
  254. package/dist/src/output.d.ts.map +1 -1
  255. package/dist/src/output.js +242 -272
  256. package/dist/src/output.js.map +1 -1
  257. package/dist/src/parser.d.ts +51 -0
  258. package/dist/src/parser.d.ts.map +1 -0
  259. package/dist/src/parser.js +140 -187
  260. package/dist/src/parser.js.map +1 -1
  261. package/dist/src/plugins/manager.d.ts +133 -0
  262. package/dist/src/plugins/manager.d.ts.map +1 -0
  263. package/dist/src/plugins/manager.js +285 -521
  264. package/dist/src/plugins/manager.js.map +1 -1
  265. package/dist/src/plugins/store/discovery.d.ts +88 -0
  266. package/dist/src/plugins/store/discovery.d.ts.map +1 -0
  267. package/dist/src/plugins/store/discovery.js +271 -358
  268. package/dist/src/plugins/store/discovery.js.map +1 -1
  269. package/dist/src/plugins/store/index.d.ts +76 -0
  270. package/dist/src/plugins/store/index.d.ts.map +1 -0
  271. package/dist/src/plugins/store/index.js +48 -105
  272. package/dist/src/plugins/store/index.js.map +1 -1
  273. package/dist/src/plugins/store/search.d.ts +46 -0
  274. package/dist/src/plugins/store/search.d.ts.map +1 -0
  275. package/dist/src/plugins/store/search.js +69 -107
  276. package/dist/src/plugins/store/search.js.map +1 -1
  277. package/dist/src/plugins/store/types.d.ts +274 -0
  278. package/dist/src/plugins/store/types.d.ts.map +1 -0
  279. package/dist/src/plugins/tests/demo-plugin-store.js +113 -160
  280. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
  281. package/dist/src/plugins/tests/standalone-test.js +172 -223
  282. package/dist/src/plugins/tests/standalone-test.js.map +1 -1
  283. package/dist/src/plugins/tests/test-plugin-store.js +190 -228
  284. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
  285. package/dist/src/production/circuit-breaker.d.ts +101 -0
  286. package/dist/src/production/circuit-breaker.d.ts.map +1 -0
  287. package/dist/src/production/circuit-breaker.js +62 -126
  288. package/dist/src/production/circuit-breaker.js.map +1 -1
  289. package/dist/src/production/error-handler.d.ts +92 -0
  290. package/dist/src/production/error-handler.d.ts.map +1 -0
  291. package/dist/src/production/error-handler.js +86 -156
  292. package/dist/src/production/error-handler.js.map +1 -1
  293. package/dist/src/production/monitoring.d.ts +161 -0
  294. package/dist/src/production/monitoring.d.ts.map +1 -0
  295. package/dist/src/production/monitoring.js +139 -220
  296. package/dist/src/production/monitoring.js.map +1 -1
  297. package/dist/src/production/rate-limiter.d.ts +80 -0
  298. package/dist/src/production/rate-limiter.d.ts.map +1 -0
  299. package/dist/src/production/rate-limiter.js +74 -93
  300. package/dist/src/production/rate-limiter.js.map +1 -1
  301. package/dist/src/production/retry.d.ts +48 -0
  302. package/dist/src/production/retry.d.ts.map +1 -0
  303. package/dist/src/production/retry.js +75 -167
  304. package/dist/src/production/retry.js.map +1 -1
  305. package/dist/src/prompt.d.ts +44 -0
  306. package/dist/src/prompt.d.ts.map +1 -0
  307. package/dist/src/prompt.js +436 -560
  308. package/dist/src/prompt.js.map +1 -1
  309. package/dist/src/runtime/headless.d.ts +60 -0
  310. package/dist/src/runtime/headless.d.ts.map +1 -0
  311. package/dist/src/runtime/headless.js +197 -286
  312. package/dist/src/runtime/headless.js.map +1 -1
  313. package/dist/src/ruvector/agent-wasm.d.ts +182 -0
  314. package/dist/src/ruvector/agent-wasm.d.ts.map +1 -0
  315. package/dist/src/ruvector/agent-wasm.js +156 -351
  316. package/dist/src/ruvector/agent-wasm.js.map +1 -1
  317. package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
  318. package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
  319. package/dist/src/ruvector/ast-analyzer.js +145 -232
  320. package/dist/src/ruvector/ast-analyzer.js.map +1 -1
  321. package/dist/src/ruvector/coverage-router.d.ts +160 -0
  322. package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
  323. package/dist/src/ruvector/coverage-router.js +287 -419
  324. package/dist/src/ruvector/coverage-router.js.map +1 -1
  325. package/dist/src/ruvector/coverage-tools.js +56 -101
  326. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  327. package/dist/src/ruvector/diff-classifier.d.ts +175 -0
  328. package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
  329. package/dist/src/ruvector/diff-classifier.js +324 -451
  330. package/dist/src/ruvector/diff-classifier.js.map +1 -1
  331. package/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
  332. package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -0
  333. package/dist/src/ruvector/enhanced-model-router.js +260 -336
  334. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  335. package/dist/src/ruvector/flash-attention.d.ts +195 -0
  336. package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
  337. package/dist/src/ruvector/flash-attention.js +223 -254
  338. package/dist/src/ruvector/flash-attention.js.map +1 -1
  339. package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
  340. package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
  341. package/dist/src/ruvector/graph-analyzer.js +486 -680
  342. package/dist/src/ruvector/graph-analyzer.js.map +1 -1
  343. package/dist/src/ruvector/index.d.ts +40 -0
  344. package/dist/src/ruvector/index.d.ts.map +1 -0
  345. package/dist/src/ruvector/index.js +36 -106
  346. package/dist/src/ruvector/index.js.map +1 -1
  347. package/dist/src/ruvector/lora-adapter.d.ts +218 -0
  348. package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
  349. package/dist/src/ruvector/lora-adapter.js +155 -248
  350. package/dist/src/ruvector/lora-adapter.js.map +1 -1
  351. package/dist/src/ruvector/model-router.d.ts +220 -0
  352. package/dist/src/ruvector/model-router.d.ts.map +1 -0
  353. package/dist/src/ruvector/model-router.js +175 -248
  354. package/dist/src/ruvector/model-router.js.map +1 -1
  355. package/dist/src/ruvector/moe-router.d.ts +206 -0
  356. package/dist/src/ruvector/moe-router.d.ts.map +1 -0
  357. package/dist/src/ruvector/moe-router.js +228 -286
  358. package/dist/src/ruvector/moe-router.js.map +1 -1
  359. package/dist/src/ruvector/q-learning-router.d.ts +211 -0
  360. package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
  361. package/dist/src/ruvector/q-learning-router.js +257 -338
  362. package/dist/src/ruvector/q-learning-router.js.map +1 -1
  363. package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
  364. package/dist/src/ruvector/ruvllm-wasm.d.ts.map +1 -0
  365. package/dist/src/ruvector/ruvllm-wasm.js +270 -434
  366. package/dist/src/ruvector/ruvllm-wasm.js.map +1 -1
  367. package/dist/src/ruvector/semantic-router.d.ts +77 -0
  368. package/dist/src/ruvector/semantic-router.d.ts.map +1 -0
  369. package/dist/src/ruvector/semantic-router.js +60 -67
  370. package/dist/src/ruvector/semantic-router.js.map +1 -1
  371. package/dist/src/ruvector/vector-db.d.ts +69 -0
  372. package/dist/src/ruvector/vector-db.d.ts.map +1 -0
  373. package/dist/src/ruvector/vector-db.js +119 -205
  374. package/dist/src/ruvector/vector-db.js.map +1 -1
  375. package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
  376. package/dist/src/services/agentic-flow-bridge.d.ts.map +1 -0
  377. package/dist/src/services/agentic-flow-bridge.js +32 -105
  378. package/dist/src/services/agentic-flow-bridge.js.map +1 -1
  379. package/dist/src/services/claim-service.d.ts +204 -0
  380. package/dist/src/services/claim-service.d.ts.map +1 -0
  381. package/dist/src/services/claim-service.js +615 -940
  382. package/dist/src/services/claim-service.js.map +1 -1
  383. package/dist/src/services/container-worker-pool.d.ts +197 -0
  384. package/dist/src/services/container-worker-pool.d.ts.map +1 -0
  385. package/dist/src/services/container-worker-pool.js +398 -666
  386. package/dist/src/services/container-worker-pool.js.map +1 -1
  387. package/dist/src/services/headless-worker-executor.d.ts +304 -0
  388. package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
  389. package/dist/src/services/headless-worker-executor.js +441 -467
  390. package/dist/src/services/headless-worker-executor.js.map +1 -1
  391. package/dist/src/services/index.d.ts +4 -4
  392. package/dist/src/services/index.d.ts.map +1 -1
  393. package/dist/src/services/index.js +4 -4
  394. package/dist/src/services/index.js.map +1 -1
  395. package/dist/src/services/registry-api.d.ts +58 -0
  396. package/dist/src/services/registry-api.d.ts.map +1 -0
  397. package/dist/src/services/registry-api.js +92 -200
  398. package/dist/src/services/registry-api.js.map +1 -1
  399. package/dist/src/services/ruvector-training.d.ts +222 -0
  400. package/dist/src/services/ruvector-training.d.ts.map +1 -0
  401. package/dist/src/services/ruvector-training.js +257 -337
  402. package/dist/src/services/ruvector-training.js.map +1 -1
  403. package/dist/src/services/worker-daemon.d.ts +228 -0
  404. package/dist/src/services/worker-daemon.d.ts.map +1 -0
  405. package/dist/src/services/worker-daemon.js +591 -849
  406. package/dist/src/services/worker-daemon.js.map +1 -1
  407. package/dist/src/services/worker-queue.d.ts +194 -0
  408. package/dist/src/services/worker-queue.d.ts.map +1 -0
  409. package/dist/src/services/worker-queue.js +331 -548
  410. package/dist/src/services/worker-queue.js.map +1 -1
  411. package/dist/src/suggest.d.ts +53 -0
  412. package/dist/src/suggest.d.ts.map +1 -0
  413. package/dist/src/suggest.js +45 -55
  414. package/dist/src/suggest.js.map +1 -1
  415. package/dist/src/transfer/anonymization/index.js +29 -37
  416. package/dist/src/transfer/anonymization/index.js.map +1 -1
  417. package/dist/src/transfer/deploy-seraphine.js +128 -155
  418. package/dist/src/transfer/deploy-seraphine.js.map +1 -1
  419. package/dist/src/transfer/export.d.ts +25 -0
  420. package/dist/src/transfer/export.d.ts.map +1 -0
  421. package/dist/src/transfer/export.js +84 -142
  422. package/dist/src/transfer/export.js.map +1 -1
  423. package/dist/src/transfer/index.d.ts +1 -1
  424. package/dist/src/transfer/index.d.ts.map +1 -1
  425. package/dist/src/transfer/index.js +0 -2
  426. package/dist/src/transfer/index.js.map +1 -1
  427. package/dist/src/transfer/ipfs/client.d.ts +109 -0
  428. package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
  429. package/dist/src/transfer/ipfs/client.js +187 -337
  430. package/dist/src/transfer/ipfs/client.js.map +1 -1
  431. package/dist/src/transfer/ipfs/upload.d.ts +95 -0
  432. package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
  433. package/dist/src/transfer/ipfs/upload.js +288 -434
  434. package/dist/src/transfer/ipfs/upload.js.map +1 -1
  435. package/dist/src/transfer/models/seraphine.d.ts +72 -0
  436. package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
  437. package/dist/src/transfer/models/seraphine.js +55 -55
  438. package/dist/src/transfer/models/seraphine.js.map +1 -1
  439. package/dist/src/transfer/serialization/cfp.d.ts +49 -0
  440. package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
  441. package/dist/src/transfer/serialization/cfp.js +30 -31
  442. package/dist/src/transfer/serialization/cfp.js.map +1 -1
  443. package/dist/src/transfer/storage/gcs.d.ts +82 -0
  444. package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
  445. package/dist/src/transfer/storage/gcs.js +165 -232
  446. package/dist/src/transfer/storage/gcs.js.map +1 -1
  447. package/dist/src/transfer/store/discovery.d.ts +84 -0
  448. package/dist/src/transfer/store/discovery.d.ts.map +1 -0
  449. package/dist/src/transfer/store/discovery.js +239 -349
  450. package/dist/src/transfer/store/discovery.js.map +1 -1
  451. package/dist/src/transfer/store/download.d.ts +70 -0
  452. package/dist/src/transfer/store/download.d.ts.map +1 -0
  453. package/dist/src/transfer/store/download.js +243 -365
  454. package/dist/src/transfer/store/download.js.map +1 -1
  455. package/dist/src/transfer/store/index.d.ts +84 -0
  456. package/dist/src/transfer/store/index.d.ts.map +1 -0
  457. package/dist/src/transfer/store/index.js +63 -130
  458. package/dist/src/transfer/store/index.js.map +1 -1
  459. package/dist/src/transfer/store/publish.d.ts +76 -0
  460. package/dist/src/transfer/store/publish.d.ts.map +1 -0
  461. package/dist/src/transfer/store/publish.js +184 -258
  462. package/dist/src/transfer/store/publish.js.map +1 -1
  463. package/dist/src/transfer/store/registry.js +50 -72
  464. package/dist/src/transfer/store/registry.js.map +1 -1
  465. package/dist/src/transfer/store/search.d.ts +54 -0
  466. package/dist/src/transfer/store/search.d.ts.map +1 -0
  467. package/dist/src/transfer/store/search.js +64 -96
  468. package/dist/src/transfer/store/search.js.map +1 -1
  469. package/dist/src/transfer/store/tests/standalone-test.js +174 -231
  470. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
  471. package/dist/src/transfer/test-seraphine.js +95 -130
  472. package/dist/src/transfer/test-seraphine.js.map +1 -1
  473. package/dist/src/transfer/tests/test-store.js +194 -239
  474. package/dist/src/transfer/tests/test-store.js.map +1 -1
  475. package/dist/src/transfer/types.d.ts +245 -0
  476. package/dist/src/transfer/types.d.ts.map +1 -0
  477. package/dist/src/types.d.ts +198 -0
  478. package/dist/src/types.d.ts.map +1 -0
  479. package/dist/src/types.js +26 -55
  480. package/dist/src/types.js.map +1 -1
  481. package/dist/src/update/checker.d.ts +34 -0
  482. package/dist/src/update/checker.d.ts.map +1 -0
  483. package/dist/src/update/checker.js +106 -183
  484. package/dist/src/update/checker.js.map +1 -1
  485. package/dist/src/update/executor.d.ts +32 -0
  486. package/dist/src/update/executor.d.ts.map +1 -0
  487. package/dist/src/update/executor.js +135 -198
  488. package/dist/src/update/executor.js.map +1 -1
  489. package/dist/src/update/index.d.ts +33 -0
  490. package/dist/src/update/index.d.ts.map +1 -0
  491. package/dist/src/update/index.js +38 -85
  492. package/dist/src/update/index.js.map +1 -1
  493. package/dist/src/update/rate-limiter.d.ts +20 -0
  494. package/dist/src/update/rate-limiter.d.ts.map +1 -0
  495. package/dist/src/update/rate-limiter.js +19 -31
  496. package/dist/src/update/rate-limiter.js.map +1 -1
  497. package/dist/src/update/validator.d.ts +17 -0
  498. package/dist/src/update/validator.d.ts.map +1 -0
  499. package/dist/src/update/validator.js +38 -64
  500. package/dist/src/update/validator.js.map +1 -1
  501. package/dist/tsconfig.tsbuildinfo +1 -1
  502. package/package.json +1 -1
@@ -11,61 +11,6 @@
11
11
  *
12
12
  * @module @claude-flow/cli/appliance/gguf-engine
13
13
  */
14
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
- return new (P || (P = Promise))(function (resolve, reject) {
17
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
- step((generator = generator.apply(thisArg, _arguments || [])).next());
21
- });
22
- };
23
- var __generator = (this && this.__generator) || function (thisArg, body) {
24
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
25
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
26
- function verb(n) { return function (v) { return step([n, v]); }; }
27
- function step(op) {
28
- if (f) throw new TypeError("Generator is already executing.");
29
- while (_) try {
30
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
31
- if (y = 0, t) op = [op[0] & 2, t.value];
32
- switch (op[0]) {
33
- case 0: case 1: t = op; break;
34
- case 4: _.label++; return { value: op[1], done: false };
35
- case 5: _.label++; y = op[1]; op = [0]; continue;
36
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
37
- default:
38
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
39
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
40
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
41
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
42
- if (t[2]) _.ops.pop();
43
- _.trys.pop(); continue;
44
- }
45
- op = body.call(thisArg, _);
46
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
47
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
48
- }
49
- };
50
- var __asyncValues = (this && this.__asyncValues) || function (o) {
51
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
52
- var m = o[Symbol.asyncIterator], i;
53
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
54
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
55
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
56
- };
57
- var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
58
- var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
59
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
60
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
61
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
62
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
63
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
64
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
65
- function fulfill(value) { resume("next", value); }
66
- function reject(value) { resume("throw", value); }
67
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
68
- };
69
14
  import { open, readFile, writeFile, stat as fsStat } from 'node:fs/promises';
70
15
  import { createHash } from 'node:crypto';
71
16
  import { basename } from 'node:path';
@@ -86,47 +31,43 @@ var GgufValueType;
86
31
  GgufValueType[GgufValueType["INT64"] = 11] = "INT64";
87
32
  GgufValueType[GgufValueType["FLOAT64"] = 12] = "FLOAT64";
88
33
  })(GgufValueType || (GgufValueType = {}));
89
- var GGUF_MAGIC = 0x46554747; // "GGUF" in little-endian
90
- var RVKV_MAGIC = 0x564B5652; // "RVKV" in little-endian
91
- var RVKV_VERSION = 1;
34
+ const GGUF_MAGIC = 0x46554747; // "GGUF" in little-endian
35
+ const RVKV_MAGIC = 0x564B5652; // "RVKV" in little-endian
36
+ const RVKV_VERSION = 1;
92
37
  // ── Internal Buffer Reader ──────────────────────────────────
93
38
  /** Stateful cursor over a Buffer for sequential binary reads. */
94
- var BufferReader = /** @class */ (function () {
95
- function BufferReader(buf) {
39
+ class BufferReader {
40
+ buf;
41
+ offset = 0;
42
+ constructor(buf) {
96
43
  this.buf = buf;
97
- this.offset = 0;
98
44
  }
99
- Object.defineProperty(BufferReader.prototype, "remaining", {
100
- get: function () { return this.buf.length - this.offset; },
101
- enumerable: false,
102
- configurable: true
103
- });
104
- BufferReader.prototype.readU8 = function () { var v = this.buf.readUInt8(this.offset); this.offset += 1; return v; };
105
- BufferReader.prototype.readI8 = function () { var v = this.buf.readInt8(this.offset); this.offset += 1; return v; };
106
- BufferReader.prototype.readU16 = function () { var v = this.buf.readUInt16LE(this.offset); this.offset += 2; return v; };
107
- BufferReader.prototype.readI16 = function () { var v = this.buf.readInt16LE(this.offset); this.offset += 2; return v; };
108
- BufferReader.prototype.readU32 = function () { var v = this.buf.readUInt32LE(this.offset); this.offset += 4; return v; };
109
- BufferReader.prototype.readI32 = function () { var v = this.buf.readInt32LE(this.offset); this.offset += 4; return v; };
110
- BufferReader.prototype.readF32 = function () { var v = this.buf.readFloatLE(this.offset); this.offset += 4; return v; };
111
- BufferReader.prototype.readF64 = function () { var v = this.buf.readDoubleLE(this.offset); this.offset += 8; return v; };
112
- BufferReader.prototype.readU64 = function () { var v = this.buf.readBigUInt64LE(this.offset); this.offset += 8; return v; };
113
- BufferReader.prototype.readI64 = function () { var v = this.buf.readBigInt64LE(this.offset); this.offset += 8; return v; };
45
+ get remaining() { return this.buf.length - this.offset; }
46
+ readU8() { const v = this.buf.readUInt8(this.offset); this.offset += 1; return v; }
47
+ readI8() { const v = this.buf.readInt8(this.offset); this.offset += 1; return v; }
48
+ readU16() { const v = this.buf.readUInt16LE(this.offset); this.offset += 2; return v; }
49
+ readI16() { const v = this.buf.readInt16LE(this.offset); this.offset += 2; return v; }
50
+ readU32() { const v = this.buf.readUInt32LE(this.offset); this.offset += 4; return v; }
51
+ readI32() { const v = this.buf.readInt32LE(this.offset); this.offset += 4; return v; }
52
+ readF32() { const v = this.buf.readFloatLE(this.offset); this.offset += 4; return v; }
53
+ readF64() { const v = this.buf.readDoubleLE(this.offset); this.offset += 8; return v; }
54
+ readU64() { const v = this.buf.readBigUInt64LE(this.offset); this.offset += 8; return v; }
55
+ readI64() { const v = this.buf.readBigInt64LE(this.offset); this.offset += 8; return v; }
114
56
  /** Safe for values up to 2^53. Real GGUF files never exceed this for tensor/kv counts. */
115
- BufferReader.prototype.readU64AsNumber = function () { return Number(this.readU64()); };
116
- BufferReader.prototype.readBool = function () { return this.readU8() !== 0; };
57
+ readU64AsNumber() { return Number(this.readU64()); }
58
+ readBool() { return this.readU8() !== 0; }
117
59
  /** GGUF string: [length u64 LE][utf-8 bytes]. */
118
- BufferReader.prototype.readString = function () {
119
- var len = this.readU64AsNumber();
60
+ readString() {
61
+ const len = this.readU64AsNumber();
120
62
  if (len === 0)
121
63
  return '';
122
64
  if (len > this.remaining)
123
- throw new Error("String length " + len + " exceeds remaining buffer");
124
- var s = this.buf.toString('utf-8', this.offset, this.offset + len);
65
+ throw new Error(`String length ${len} exceeds remaining buffer`);
66
+ const s = this.buf.toString('utf-8', this.offset, this.offset + len);
125
67
  this.offset += len;
126
68
  return s;
127
- };
128
- return BufferReader;
129
- }());
69
+ }
70
+ }
130
71
  // ── GGUF Value Reading ──────────────────────────────────────
131
72
  /** Read a typed scalar from the buffer (shared by value and array-element readers). */
132
73
  function readScalar(reader, t) {
@@ -148,22 +89,22 @@ function readScalar(reader, t) {
148
89
  }
149
90
  /** Read a single GGUF typed value (scalar or array) from the buffer. */
150
91
  function readGgufValue(reader) {
151
- var valueType = reader.readU32();
92
+ const valueType = reader.readU32();
152
93
  if (valueType === GgufValueType.ARRAY) {
153
- var elemType = reader.readU32();
154
- var len = reader.readU64AsNumber();
155
- var arr = [];
156
- for (var i = 0; i < len; i++) {
157
- var v_1 = readScalar(reader, elemType);
158
- if (v_1 === undefined)
159
- throw new Error("Unknown GGUF array element type: " + elemType);
160
- arr.push(v_1);
94
+ const elemType = reader.readU32();
95
+ const len = reader.readU64AsNumber();
96
+ const arr = [];
97
+ for (let i = 0; i < len; i++) {
98
+ const v = readScalar(reader, elemType);
99
+ if (v === undefined)
100
+ throw new Error(`Unknown GGUF array element type: ${elemType}`);
101
+ arr.push(v);
161
102
  }
162
103
  return arr;
163
104
  }
164
- var v = readScalar(reader, valueType);
105
+ const v = readScalar(reader, valueType);
165
106
  if (v === undefined)
166
- throw new Error("Unknown GGUF value type: " + valueType);
107
+ throw new Error(`Unknown GGUF value type: ${valueType}`);
167
108
  return v;
168
109
  }
169
110
  // ── GGUF Header Parsing ─────────────────────────────────────
@@ -171,494 +112,314 @@ function readGgufValue(reader) {
171
112
  * Parse the header and metadata from a GGUF file without loading tensors.
172
113
  * Reads only the first 256 KB of the file.
173
114
  */
174
- export function parseGgufHeader(path) {
175
- return __awaiter(this, void 0, Promise, function () {
176
- var fileInfo, readSize, fh, buf;
177
- return __generator(this, function (_a) {
178
- switch (_a.label) {
179
- case 0: return [4 /*yield*/, fsStat(path)];
180
- case 1:
181
- fileInfo = _a.sent();
182
- readSize = Math.min(fileInfo.size, 256 * 1024);
183
- return [4 /*yield*/, open(path, 'r')];
184
- case 2:
185
- fh = _a.sent();
186
- _a.label = 3;
187
- case 3:
188
- _a.trys.push([3, , 5, 7]);
189
- buf = Buffer.alloc(readSize);
190
- return [4 /*yield*/, fh.read(buf, 0, readSize, 0)];
191
- case 4:
192
- _a.sent();
193
- return [2 /*return*/, parseGgufBuffer(buf, fileInfo.size, path)];
194
- case 5: return [4 /*yield*/, fh.close()];
195
- case 6:
196
- _a.sent();
197
- return [7 /*endfinally*/];
198
- case 7: return [2 /*return*/];
199
- }
200
- });
201
- });
115
+ export async function parseGgufHeader(path) {
116
+ const fileInfo = await fsStat(path);
117
+ const readSize = Math.min(fileInfo.size, 256 * 1024);
118
+ const fh = await open(path, 'r');
119
+ try {
120
+ const buf = Buffer.alloc(readSize);
121
+ await fh.read(buf, 0, readSize, 0);
122
+ return parseGgufBuffer(buf, fileInfo.size, path);
123
+ }
124
+ finally {
125
+ await fh.close();
126
+ }
202
127
  }
203
128
  function parseGgufBuffer(buf, fileSize, filePath) {
204
- var reader = new BufferReader(buf);
205
- var magic = reader.readU32();
129
+ const reader = new BufferReader(buf);
130
+ const magic = reader.readU32();
206
131
  if (magic !== GGUF_MAGIC) {
207
- throw new Error("Invalid GGUF magic: 0x" + magic.toString(16) + " (expected 0x" + GGUF_MAGIC.toString(16) + ")");
132
+ throw new Error(`Invalid GGUF magic: 0x${magic.toString(16)} (expected 0x${GGUF_MAGIC.toString(16)})`);
208
133
  }
209
- var version = reader.readU32();
134
+ const version = reader.readU32();
210
135
  if (version < 2 || version > 3) {
211
- throw new Error("Unsupported GGUF version: " + version + " (expected 2 or 3)");
136
+ throw new Error(`Unsupported GGUF version: ${version} (expected 2 or 3)`);
212
137
  }
213
- var tensorCount = reader.readU64AsNumber();
214
- var kvCount = reader.readU64AsNumber();
215
- var metadata = {};
216
- for (var i = 0; i < kvCount; i++) {
138
+ const tensorCount = reader.readU64AsNumber();
139
+ const kvCount = reader.readU64AsNumber();
140
+ const metadata = {};
141
+ for (let i = 0; i < kvCount; i++) {
217
142
  if (reader.remaining < 12)
218
143
  break;
219
144
  try {
220
- var key = reader.readString();
145
+ const key = reader.readString();
221
146
  metadata[key] = readGgufValue(reader);
222
147
  }
223
- catch (_a) {
148
+ catch {
224
149
  break; // reached end of read window
225
150
  }
226
151
  }
227
- var arch = asString(metadata['general.architecture']);
228
- var pfx = arch || 'llama'; // fallback prefix for well-known keys
152
+ const arch = asString(metadata['general.architecture']);
153
+ const pfx = arch || 'llama'; // fallback prefix for well-known keys
229
154
  return {
230
- magic: 'GGUF',
231
- version: version,
232
- tensorCount: tensorCount,
233
- kvCount: kvCount,
155
+ magic: 'GGUF', version, tensorCount, kvCount,
234
156
  architecture: arch,
235
157
  name: asString(metadata['general.name']),
236
- contextLength: asNumber(metadata[pfx + ".context_length"]),
237
- embeddingLength: asNumber(metadata[pfx + ".embedding_length"]),
238
- blockCount: asNumber(metadata[pfx + ".block_count"]),
158
+ contextLength: asNumber(metadata[`${pfx}.context_length`]),
159
+ embeddingLength: asNumber(metadata[`${pfx}.embedding_length`]),
160
+ blockCount: asNumber(metadata[`${pfx}.block_count`]),
239
161
  vocabSize: inferVocabSize(metadata),
240
162
  quantization: inferQuantFromMetadata(metadata, filePath),
241
- fileSize: fileSize,
242
- metadata: metadata
163
+ fileSize, metadata,
243
164
  };
244
165
  }
245
166
  // ── Metadata Helpers ────────────────────────────────────────
246
167
  function asString(v) { return typeof v === 'string' ? v : undefined; }
247
168
  function asNumber(v) { return typeof v === 'number' ? v : undefined; }
248
- var QUANT_RE = [
169
+ const QUANT_RE = [
249
170
  [/q2_k/i, 'Q2_K'], [/q3_k_s/i, 'Q3_K_S'], [/q3_k_m/i, 'Q3_K_M'], [/q3_k_l/i, 'Q3_K_L'],
250
171
  [/q4_k_s/i, 'Q4_K_S'], [/q4_k_m/i, 'Q4_K_M'], [/q4_0/i, 'Q4_0'], [/q4_1/i, 'Q4_1'],
251
172
  [/q5_k_s/i, 'Q5_K_S'], [/q5_k_m/i, 'Q5_K_M'], [/q5_0/i, 'Q5_0'], [/q5_1/i, 'Q5_1'],
252
173
  [/q6_k/i, 'Q6_K'], [/q8_0/i, 'Q8_0'], [/f16/i, 'F16'], [/f32/i, 'F32'],
253
174
  ];
254
175
  function inferQuantFromMetadata(meta, filePath) {
255
- var ft = meta['general.file_type'];
176
+ const ft = meta['general.file_type'];
256
177
  if (typeof ft === 'number')
257
- return "file_type_" + ft;
258
- var name = basename(filePath);
259
- for (var _i = 0, QUANT_RE_1 = QUANT_RE; _i < QUANT_RE_1.length; _i++) {
260
- var _a = QUANT_RE_1[_i], re = _a[0], label = _a[1];
178
+ return `file_type_${ft}`;
179
+ const name = basename(filePath);
180
+ for (const [re, label] of QUANT_RE)
261
181
  if (re.test(name))
262
182
  return label;
263
- }
264
183
  return 'unknown';
265
184
  }
266
185
  function inferVocabSize(meta) {
267
- var tokens = meta['tokenizer.ggml.tokens'];
186
+ const tokens = meta['tokenizer.ggml.tokens'];
268
187
  if (Array.isArray(tokens))
269
188
  return tokens.length;
270
189
  return asNumber(meta['tokenizer.ggml.vocab_size']);
271
190
  }
272
191
  // ── GGUF Engine ─────────────────────────────────────────────
273
- var GgufEngine = /** @class */ (function () {
274
- function GgufEngine(config) {
275
- var _a, _b, _c, _d, _e;
276
- this.llamaCpp = null;
277
- this.llamaModel = null;
278
- this.llamaContext = null;
279
- this.loadedModels = new Map();
280
- this.activeModelPath = null;
281
- this.kvCache = new Map();
192
+ export class GgufEngine {
193
+ config;
194
+ llamaCpp = null;
195
+ llamaModel = null;
196
+ llamaContext = null;
197
+ loadedModels = new Map();
198
+ activeModelPath = null;
199
+ kvCache = new Map();
200
+ constructor(config) {
282
201
  this.config = {
283
- contextSize: (_a = config.contextSize) !== null && _a !== void 0 ? _a : 4096,
284
- maxTokens: (_b = config.maxTokens) !== null && _b !== void 0 ? _b : 512,
285
- temperature: (_c = config.temperature) !== null && _c !== void 0 ? _c : 0.7,
286
- kvCachePath: (_d = config.kvCachePath) !== null && _d !== void 0 ? _d : '',
287
- verbose: (_e = config.verbose) !== null && _e !== void 0 ? _e : false
202
+ contextSize: config.contextSize ?? 4096,
203
+ maxTokens: config.maxTokens ?? 512,
204
+ temperature: config.temperature ?? 0.7,
205
+ kvCachePath: config.kvCachePath ?? '',
206
+ verbose: config.verbose ?? false,
288
207
  };
289
208
  }
290
209
  /** Probe for node-llama-cpp availability. */
291
- GgufEngine.prototype.initialize = function () {
292
- return __awaiter(this, void 0, Promise, function () {
293
- var _a;
294
- return __generator(this, function (_b) {
295
- switch (_b.label) {
296
- case 0:
297
- _a = this;
298
- return [4 /*yield*/, this.tryLoadLlamaCpp()];
299
- case 1:
300
- _a.llamaCpp = _b.sent();
301
- if (this.config.verbose) {
302
- console.log("[gguf-engine] node-llama-cpp: " + (this.llamaCpp ? 'available' : 'not found (metadata-only mode)'));
303
- }
304
- return [2 /*return*/];
305
- }
306
- });
307
- });
308
- };
210
+ async initialize() {
211
+ this.llamaCpp = await this.tryLoadLlamaCpp();
212
+ if (this.config.verbose) {
213
+ console.log(`[gguf-engine] node-llama-cpp: ${this.llamaCpp ? 'available' : 'not found (metadata-only mode)'}`);
214
+ }
215
+ }
309
216
  /** Parse GGUF header and optionally load the model for inference. */
310
- GgufEngine.prototype.loadModel = function (path) {
311
- return __awaiter(this, void 0, Promise, function () {
312
- var meta, getLlama, llama, _a, _b, err_1;
313
- return __generator(this, function (_c) {
314
- switch (_c.label) {
315
- case 0: return [4 /*yield*/, parseGgufHeader(path)];
316
- case 1:
317
- meta = _c.sent();
318
- this.loadedModels.set(path, meta);
319
- this.activeModelPath = path;
320
- if (!this.llamaCpp) return [3 /*break*/, 7];
321
- _c.label = 2;
322
- case 2:
323
- _c.trys.push([2, 6, , 7]);
324
- getLlama = this.llamaCpp.getLlama;
325
- return [4 /*yield*/, getLlama()];
326
- case 3:
327
- llama = _c.sent();
328
- _a = this;
329
- return [4 /*yield*/, llama.loadModel({ modelPath: path })];
330
- case 4:
331
- _a.llamaModel = _c.sent();
332
- _b = this;
333
- return [4 /*yield*/, this.llamaModel.createContext({ contextSize: this.config.contextSize })];
334
- case 5:
335
- _b.llamaContext = _c.sent();
336
- if (this.config.verbose)
337
- console.log("[gguf-engine] Model loaded: " + basename(path));
338
- return [3 /*break*/, 7];
339
- case 6:
340
- err_1 = _c.sent();
341
- if (this.config.verbose)
342
- console.warn('[gguf-engine] node-llama-cpp load failed:', err_1);
343
- this.llamaModel = null;
344
- this.llamaContext = null;
345
- return [3 /*break*/, 7];
346
- case 7: return [2 /*return*/, meta];
347
- }
348
- });
349
- });
350
- };
217
+ async loadModel(path) {
218
+ const meta = await parseGgufHeader(path);
219
+ this.loadedModels.set(path, meta);
220
+ this.activeModelPath = path;
221
+ if (this.llamaCpp) {
222
+ try {
223
+ const { getLlama } = this.llamaCpp;
224
+ const llama = await getLlama();
225
+ this.llamaModel = await llama.loadModel({ modelPath: path });
226
+ this.llamaContext = await this.llamaModel.createContext({ contextSize: this.config.contextSize });
227
+ if (this.config.verbose)
228
+ console.log(`[gguf-engine] Model loaded: ${basename(path)}`);
229
+ }
230
+ catch (err) {
231
+ if (this.config.verbose)
232
+ console.warn('[gguf-engine] node-llama-cpp load failed:', err);
233
+ this.llamaModel = null;
234
+ this.llamaContext = null;
235
+ }
236
+ }
237
+ return meta;
238
+ }
351
239
  /** Generate text. Delegates to node-llama-cpp or returns a metadata-only stub. */
352
- GgufEngine.prototype.generate = function (request) {
353
- var _a, _b, _c, _d, _e, _f, _g;
354
- return __awaiter(this, void 0, Promise, function () {
355
- var start, modelPath, modelName, session, text, tokensUsed, seq, err_2, meta;
356
- var _this = this;
357
- return __generator(this, function (_h) {
358
- switch (_h.label) {
359
- case 0:
360
- start = performance.now();
361
- modelPath = (_a = request.model) !== null && _a !== void 0 ? _a : this.activeModelPath;
362
- modelName = modelPath ? basename(modelPath) : 'none';
363
- if (!(this.llamaContext && this.llamaModel)) return [3 /*break*/, 4];
364
- _h.label = 1;
365
- case 1:
366
- _h.trys.push([1, 3, , 4]);
367
- session = new this.llamaCpp.LlamaChatSession({
368
- contextSequence: this.llamaContext.getSequence()
369
- });
370
- return [4 /*yield*/, session.prompt(request.prompt, {
371
- maxTokens: (_b = request.maxTokens) !== null && _b !== void 0 ? _b : this.config.maxTokens,
372
- temperature: (_c = request.temperature) !== null && _c !== void 0 ? _c : this.config.temperature,
373
- stopGenerationTrigger: request.stopSequences
374
- ? request.stopSequences.map(function (s) { return new _this.llamaCpp.LlamaText([s]); })
375
- : undefined
376
- })];
377
- case 2:
378
- text = _h.sent();
379
- tokensUsed = void 0;
380
- try {
381
- seq = this.llamaContext.getSequence();
382
- tokensUsed = (_d = seq.tokenCount) !== null && _d !== void 0 ? _d : Math.ceil(text.length / 4);
383
- }
384
- catch (_j) {
385
- tokensUsed = Math.ceil(text.length / 4); // ~4 chars per token heuristic
386
- }
387
- return [2 /*return*/, {
388
- text: text,
389
- model: modelName,
390
- tokensUsed: tokensUsed,
391
- latencyMs: performance.now() - start, metadataOnly: false
392
- }];
393
- case 3:
394
- err_2 = _h.sent();
395
- if (this.config.verbose)
396
- console.warn('[gguf-engine] Generation failed:', err_2);
397
- return [3 /*break*/, 4];
398
- case 4:
399
- meta = modelPath ? this.loadedModels.get(modelPath) : undefined;
400
- return [2 /*return*/, {
401
- text: meta
402
- ? "[metadata-only] Model: " + ((_e = meta.name) !== null && _e !== void 0 ? _e : modelName) + ", arch: " + ((_f = meta.architecture) !== null && _f !== void 0 ? _f : 'unknown') + ", ctx: " + ((_g = meta.contextLength) !== null && _g !== void 0 ? _g : 'unknown')
403
- : '[metadata-only] No model loaded',
404
- model: modelName, tokensUsed: 0,
405
- latencyMs: performance.now() - start, metadataOnly: true
406
- }];
240
+ async generate(request) {
241
+ const start = performance.now();
242
+ const modelPath = request.model ?? this.activeModelPath;
243
+ const modelName = modelPath ? basename(modelPath) : 'none';
244
+ if (this.llamaContext && this.llamaModel) {
245
+ try {
246
+ const session = new this.llamaCpp.LlamaChatSession({
247
+ contextSequence: this.llamaContext.getSequence(),
248
+ });
249
+ const text = await session.prompt(request.prompt, {
250
+ maxTokens: request.maxTokens ?? this.config.maxTokens,
251
+ temperature: request.temperature ?? this.config.temperature,
252
+ stopGenerationTrigger: request.stopSequences
253
+ ? request.stopSequences.map((s) => new this.llamaCpp.LlamaText([s]))
254
+ : undefined,
255
+ });
256
+ // Use llama.cpp tokenizer for accurate count when available, else estimate
257
+ let tokensUsed;
258
+ try {
259
+ const seq = this.llamaContext.getSequence();
260
+ tokensUsed = seq.tokenCount ?? Math.ceil(text.length / 4);
407
261
  }
408
- });
409
- });
410
- };
262
+ catch {
263
+ tokensUsed = Math.ceil(text.length / 4); // ~4 chars per token heuristic
264
+ }
265
+ return {
266
+ text, model: modelName, tokensUsed,
267
+ latencyMs: performance.now() - start, metadataOnly: false,
268
+ };
269
+ }
270
+ catch (err) {
271
+ if (this.config.verbose)
272
+ console.warn('[gguf-engine] Generation failed:', err);
273
+ }
274
+ }
275
+ // Metadata-only fallback
276
+ const meta = modelPath ? this.loadedModels.get(modelPath) : undefined;
277
+ return {
278
+ text: meta
279
+ ? `[metadata-only] Model: ${meta.name ?? modelName}, arch: ${meta.architecture ?? 'unknown'}, ctx: ${meta.contextLength ?? 'unknown'}`
280
+ : '[metadata-only] No model loaded',
281
+ model: modelName, tokensUsed: 0,
282
+ latencyMs: performance.now() - start, metadataOnly: true,
283
+ };
284
+ }
411
285
  /** Stream tokens via async iterator. Falls back to yielding full response. */
412
- GgufEngine.prototype.stream = function (request) {
413
- var _a, _b;
414
- return __asyncGenerator(this, arguments, function stream_1() {
415
- var session, it, it_1, it_1_1, chunk, e_1_1, _c, response;
416
- var e_1, _d;
417
- return __generator(this, function (_e) {
418
- switch (_e.label) {
419
- case 0:
420
- if (!(this.llamaContext && this.llamaModel)) return [3 /*break*/, 22];
421
- _e.label = 1;
422
- case 1:
423
- _e.trys.push([1, 21, , 22]);
424
- session = new this.llamaCpp.LlamaChatSession({
425
- contextSequence: this.llamaContext.getSequence()
426
- });
427
- it = session.promptWithMeta(request.prompt, {
428
- maxTokens: (_a = request.maxTokens) !== null && _a !== void 0 ? _a : this.config.maxTokens,
429
- temperature: (_b = request.temperature) !== null && _b !== void 0 ? _b : this.config.temperature
430
- });
431
- if (!(it && typeof it[Symbol.asyncIterator] === 'function')) return [3 /*break*/, 20];
432
- _e.label = 2;
433
- case 2:
434
- _e.trys.push([2, 12, 13, 18]);
435
- it_1 = __asyncValues(it);
436
- _e.label = 3;
437
- case 3: return [4 /*yield*/, __await(it_1.next())];
438
- case 4:
439
- if (!(it_1_1 = _e.sent(), !it_1_1.done)) return [3 /*break*/, 11];
440
- chunk = it_1_1.value;
441
- if (!(typeof chunk === 'string')) return [3 /*break*/, 7];
442
- return [4 /*yield*/, __await(chunk)];
443
- case 5: return [4 /*yield*/, _e.sent()];
444
- case 6:
445
- _e.sent();
446
- return [3 /*break*/, 10];
447
- case 7:
448
- if (!(chunk === null || chunk === void 0 ? void 0 : chunk.text)) return [3 /*break*/, 10];
449
- return [4 /*yield*/, __await(chunk.text)];
450
- case 8: return [4 /*yield*/, _e.sent()];
451
- case 9:
452
- _e.sent();
453
- _e.label = 10;
454
- case 10: return [3 /*break*/, 3];
455
- case 11: return [3 /*break*/, 18];
456
- case 12:
457
- e_1_1 = _e.sent();
458
- e_1 = { error: e_1_1 };
459
- return [3 /*break*/, 18];
460
- case 13:
461
- _e.trys.push([13, , 16, 17]);
462
- if (!(it_1_1 && !it_1_1.done && (_d = it_1["return"]))) return [3 /*break*/, 15];
463
- return [4 /*yield*/, __await(_d.call(it_1))];
464
- case 14:
465
- _e.sent();
466
- _e.label = 15;
467
- case 15: return [3 /*break*/, 17];
468
- case 16:
469
- if (e_1) throw e_1.error;
470
- return [7 /*endfinally*/];
471
- case 17: return [7 /*endfinally*/];
472
- case 18: return [4 /*yield*/, __await(void 0)];
473
- case 19: return [2 /*return*/, _e.sent()];
474
- case 20: return [3 /*break*/, 22];
475
- case 21:
476
- _c = _e.sent();
477
- return [3 /*break*/, 22];
478
- case 22: return [4 /*yield*/, __await(this.generate(request))];
479
- case 23:
480
- response = _e.sent();
481
- return [4 /*yield*/, __await(response.text)];
482
- case 24: return [4 /*yield*/, _e.sent()];
483
- case 25:
484
- _e.sent();
485
- return [2 /*return*/];
286
+ async *stream(request) {
287
+ if (this.llamaContext && this.llamaModel) {
288
+ try {
289
+ const session = new this.llamaCpp.LlamaChatSession({
290
+ contextSequence: this.llamaContext.getSequence(),
291
+ });
292
+ const it = session.promptWithMeta(request.prompt, {
293
+ maxTokens: request.maxTokens ?? this.config.maxTokens,
294
+ temperature: request.temperature ?? this.config.temperature,
295
+ });
296
+ if (it && typeof it[Symbol.asyncIterator] === 'function') {
297
+ for await (const chunk of it) {
298
+ if (typeof chunk === 'string')
299
+ yield chunk;
300
+ else if (chunk?.text)
301
+ yield chunk.text;
302
+ }
303
+ return;
486
304
  }
487
- });
488
- });
489
- };
305
+ }
306
+ catch { /* fall through to single-chunk fallback */ }
307
+ }
308
+ const response = await this.generate(request);
309
+ yield response.text;
310
+ }
490
311
  /**
491
312
  * Persist the KV cache to an RVF-compatible binary file.
492
313
  * Format: RVKV magic | version u32 | model SHA-256 (32B) | entry count u32
493
314
  * entries: [key_len u32, key, val_len u32, val] | footer SHA-256 (32B)
494
315
  */
495
- GgufEngine.prototype.persistKvCache = function (outputPath) {
496
- var _a;
497
- return __awaiter(this, void 0, Promise, function () {
498
- var path, modelHash, entryBufs, _i, _b, _c, key, value, keyBuf, hdr, entryData, footer, header;
499
- return __generator(this, function (_d) {
500
- switch (_d.label) {
501
- case 0:
502
- path = outputPath || this.config.kvCachePath;
503
- if (!path)
504
- throw new Error('No KV cache output path specified');
505
- modelHash = createHash('sha256').update((_a = this.activeModelPath) !== null && _a !== void 0 ? _a : 'no-model').digest();
506
- entryBufs = [];
507
- for (_i = 0, _b = this.kvCache; _i < _b.length; _i++) {
508
- _c = _b[_i], key = _c[0], value = _c[1];
509
- keyBuf = Buffer.from(key, 'utf-8');
510
- hdr = Buffer.alloc(8);
511
- hdr.writeUInt32LE(keyBuf.length, 0);
512
- hdr.writeUInt32LE(value.length, 4);
513
- entryBufs.push(hdr, keyBuf, value);
514
- }
515
- entryData = Buffer.concat(entryBufs);
516
- footer = createHash('sha256').update(entryData).digest();
517
- header = Buffer.alloc(44);
518
- header.writeUInt32LE(RVKV_MAGIC, 0);
519
- header.writeUInt32LE(RVKV_VERSION, 4);
520
- modelHash.copy(header, 8);
521
- header.writeUInt32LE(this.kvCache.size, 40);
522
- return [4 /*yield*/, writeFile(path, Buffer.concat([header, entryData, footer]))];
523
- case 1:
524
- _d.sent();
525
- if (this.config.verbose)
526
- console.log("[gguf-engine] KV cache persisted: " + this.kvCache.size + " entries");
527
- return [2 /*return*/];
528
- }
529
- });
530
- });
531
- };
316
+ async persistKvCache(outputPath) {
317
+ const path = outputPath || this.config.kvCachePath;
318
+ if (!path)
319
+ throw new Error('No KV cache output path specified');
320
+ const modelHash = createHash('sha256').update(this.activeModelPath ?? 'no-model').digest();
321
+ const entryBufs = [];
322
+ for (const [key, value] of this.kvCache) {
323
+ const keyBuf = Buffer.from(key, 'utf-8');
324
+ const hdr = Buffer.alloc(8);
325
+ hdr.writeUInt32LE(keyBuf.length, 0);
326
+ hdr.writeUInt32LE(value.length, 4);
327
+ entryBufs.push(hdr, keyBuf, value);
328
+ }
329
+ const entryData = Buffer.concat(entryBufs);
330
+ const footer = createHash('sha256').update(entryData).digest();
331
+ const header = Buffer.alloc(44);
332
+ header.writeUInt32LE(RVKV_MAGIC, 0);
333
+ header.writeUInt32LE(RVKV_VERSION, 4);
334
+ modelHash.copy(header, 8);
335
+ header.writeUInt32LE(this.kvCache.size, 40);
336
+ await writeFile(path, Buffer.concat([header, entryData, footer]));
337
+ if (this.config.verbose)
338
+ console.log(`[gguf-engine] KV cache persisted: ${this.kvCache.size} entries`);
339
+ }
532
340
  /** Restore KV cache from an RVF-compatible binary file. */
533
- GgufEngine.prototype.loadKvCache = function (inputPath) {
534
- return __awaiter(this, void 0, Promise, function () {
535
- var data, magic, version, entryCount, offset, entries, i, keyLen, valLen, stored, computed;
536
- return __generator(this, function (_a) {
537
- switch (_a.label) {
538
- case 0: return [4 /*yield*/, readFile(inputPath)];
539
- case 1:
540
- data = _a.sent();
541
- if (data.length < 44)
542
- throw new Error('KV cache file too small');
543
- magic = data.readUInt32LE(0);
544
- if (magic !== RVKV_MAGIC)
545
- throw new Error("Invalid KV cache magic: 0x" + magic.toString(16));
546
- version = data.readUInt32LE(4);
547
- if (version !== RVKV_VERSION)
548
- throw new Error("Unsupported KV cache version: " + version);
549
- entryCount = data.readUInt32LE(40);
550
- offset = 44;
551
- entries = new Map();
552
- for (i = 0; i < entryCount; i++) {
553
- if (offset + 8 > data.length)
554
- throw new Error('KV cache file truncated');
555
- keyLen = data.readUInt32LE(offset);
556
- valLen = data.readUInt32LE(offset + 4);
557
- offset += 8;
558
- if (offset + keyLen + valLen > data.length)
559
- throw new Error('KV cache file truncated');
560
- entries.set(data.toString('utf-8', offset, offset + keyLen), Buffer.from(data.subarray(offset + keyLen, offset + keyLen + valLen)));
561
- offset += keyLen + valLen;
562
- }
563
- // Verify footer hash (mandatory)
564
- if (offset + 32 > data.length) {
565
- throw new Error('KV cache file missing SHA256 footer');
566
- }
567
- stored = data.subarray(offset, offset + 32);
568
- computed = createHash('sha256').update(data.subarray(44, offset)).digest();
569
- if (!stored.equals(computed))
570
- throw new Error('KV cache integrity check failed: hash mismatch');
571
- this.kvCache = entries;
572
- if (this.config.verbose)
573
- console.log("[gguf-engine] KV cache loaded: " + entries.size + " entries");
574
- return [2 /*return*/];
575
- }
576
- });
577
- });
578
- };
341
+ async loadKvCache(inputPath) {
342
+ const data = await readFile(inputPath);
343
+ if (data.length < 44)
344
+ throw new Error('KV cache file too small');
345
+ const magic = data.readUInt32LE(0);
346
+ if (magic !== RVKV_MAGIC)
347
+ throw new Error(`Invalid KV cache magic: 0x${magic.toString(16)}`);
348
+ const version = data.readUInt32LE(4);
349
+ if (version !== RVKV_VERSION)
350
+ throw new Error(`Unsupported KV cache version: ${version}`);
351
+ const entryCount = data.readUInt32LE(40);
352
+ let offset = 44;
353
+ const entries = new Map();
354
+ for (let i = 0; i < entryCount; i++) {
355
+ if (offset + 8 > data.length)
356
+ throw new Error('KV cache file truncated');
357
+ const keyLen = data.readUInt32LE(offset);
358
+ const valLen = data.readUInt32LE(offset + 4);
359
+ offset += 8;
360
+ if (offset + keyLen + valLen > data.length)
361
+ throw new Error('KV cache file truncated');
362
+ entries.set(data.toString('utf-8', offset, offset + keyLen), Buffer.from(data.subarray(offset + keyLen, offset + keyLen + valLen)));
363
+ offset += keyLen + valLen;
364
+ }
365
+ // Verify footer hash (mandatory)
366
+ if (offset + 32 > data.length) {
367
+ throw new Error('KV cache file missing SHA256 footer');
368
+ }
369
+ const stored = data.subarray(offset, offset + 32);
370
+ const computed = createHash('sha256').update(data.subarray(44, offset)).digest();
371
+ if (!stored.equals(computed))
372
+ throw new Error('KV cache integrity check failed: hash mismatch');
373
+ this.kvCache = entries;
374
+ if (this.config.verbose)
375
+ console.log(`[gguf-engine] KV cache loaded: ${entries.size} entries`);
376
+ }
579
377
  /** Return metadata for all loaded models. */
580
- GgufEngine.prototype.getLoadedModels = function () { return Array.from(this.loadedModels.values()); };
378
+ getLoadedModels() { return Array.from(this.loadedModels.values()); }
581
379
  /** Store a key-value pair in the in-memory KV cache. */
582
- GgufEngine.prototype.setKvEntry = function (key, value) { this.kvCache.set(key, value); };
380
+ setKvEntry(key, value) { this.kvCache.set(key, value); }
583
381
  /** Retrieve a key-value pair from the in-memory KV cache. */
584
- GgufEngine.prototype.getKvEntry = function (key) { return this.kvCache.get(key); };
382
+ getKvEntry(key) { return this.kvCache.get(key); }
585
383
  /** Release resources, unload models, and optionally persist the KV cache. */
586
- GgufEngine.prototype.shutdown = function () {
587
- var _a, _b;
588
- return __awaiter(this, void 0, Promise, function () {
589
- var err_3, _c, _d;
590
- return __generator(this, function (_e) {
591
- switch (_e.label) {
592
- case 0:
593
- if (!(this.config.kvCachePath && this.kvCache.size > 0)) return [3 /*break*/, 4];
594
- _e.label = 1;
595
- case 1:
596
- _e.trys.push([1, 3, , 4]);
597
- return [4 /*yield*/, this.persistKvCache(this.config.kvCachePath)];
598
- case 2:
599
- _e.sent();
600
- return [3 /*break*/, 4];
601
- case 3:
602
- err_3 = _e.sent();
603
- if (this.config.verbose)
604
- console.warn('[gguf-engine] KV persist failed:', err_3);
605
- return [3 /*break*/, 4];
606
- case 4:
607
- if (!((_a = this.llamaContext) === null || _a === void 0 ? void 0 : _a.dispose)) return [3 /*break*/, 8];
608
- _e.label = 5;
609
- case 5:
610
- _e.trys.push([5, 7, , 8]);
611
- return [4 /*yield*/, this.llamaContext.dispose()];
612
- case 6:
613
- _e.sent();
614
- return [3 /*break*/, 8];
615
- case 7:
616
- _c = _e.sent();
617
- return [3 /*break*/, 8];
618
- case 8:
619
- if (!((_b = this.llamaModel) === null || _b === void 0 ? void 0 : _b.dispose)) return [3 /*break*/, 12];
620
- _e.label = 9;
621
- case 9:
622
- _e.trys.push([9, 11, , 12]);
623
- return [4 /*yield*/, this.llamaModel.dispose()];
624
- case 10:
625
- _e.sent();
626
- return [3 /*break*/, 12];
627
- case 11:
628
- _d = _e.sent();
629
- return [3 /*break*/, 12];
630
- case 12:
631
- this.llamaContext = null;
632
- this.llamaModel = null;
633
- this.activeModelPath = null;
634
- this.loadedModels.clear();
635
- this.kvCache.clear();
636
- if (this.config.verbose)
637
- console.log('[gguf-engine] Shutdown complete');
638
- return [2 /*return*/];
639
- }
640
- });
641
- });
642
- };
384
+ async shutdown() {
385
+ if (this.config.kvCachePath && this.kvCache.size > 0) {
386
+ try {
387
+ await this.persistKvCache(this.config.kvCachePath);
388
+ }
389
+ catch (err) {
390
+ if (this.config.verbose)
391
+ console.warn('[gguf-engine] KV persist failed:', err);
392
+ }
393
+ }
394
+ if (this.llamaContext?.dispose) {
395
+ try {
396
+ await this.llamaContext.dispose();
397
+ }
398
+ catch { /* ignore */ }
399
+ }
400
+ if (this.llamaModel?.dispose) {
401
+ try {
402
+ await this.llamaModel.dispose();
403
+ }
404
+ catch { /* ignore */ }
405
+ }
406
+ this.llamaContext = null;
407
+ this.llamaModel = null;
408
+ this.activeModelPath = null;
409
+ this.loadedModels.clear();
410
+ this.kvCache.clear();
411
+ if (this.config.verbose)
412
+ console.log('[gguf-engine] Shutdown complete');
413
+ }
643
414
  // ── Private ───────────────────────────────────────────────
644
- GgufEngine.prototype.tryLoadLlamaCpp = function () {
645
- return __awaiter(this, void 0, Promise, function () {
646
- var _a;
647
- return __generator(this, function (_b) {
648
- switch (_b.label) {
649
- case 0:
650
- _b.trys.push([0, 2, , 3]);
651
- return [4 /*yield*/, import('node-llama-cpp')];
652
- case 1: return [2 /*return*/, _b.sent()];
653
- case 2:
654
- _a = _b.sent();
655
- return [2 /*return*/, null];
656
- case 3: return [2 /*return*/];
657
- }
658
- });
659
- });
660
- };
661
- return GgufEngine;
662
- }());
663
- export { GgufEngine };
415
+ async tryLoadLlamaCpp() {
416
+ // @ts-ignore -- optional peer dependency, may not be installed
417
+ try {
418
+ return await import('node-llama-cpp');
419
+ }
420
+ catch {
421
+ return null;
422
+ }
423
+ }
424
+ }
664
425
  //# sourceMappingURL=gguf-engine.js.map