agentic-qe 2.3.5 → 2.5.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.
Files changed (326) hide show
  1. package/.claude/agents/qe-a11y-ally.md +751 -0
  2. package/.claude/agents/qx-partner.md +120 -4
  3. package/.claude/skills/testability-scoring/SKILL.md +107 -6
  4. package/CHANGELOG.md +133 -0
  5. package/README.md +7 -6
  6. package/dist/agents/AccessibilityAllyAgent.d.ts +168 -0
  7. package/dist/agents/AccessibilityAllyAgent.d.ts.map +1 -0
  8. package/dist/agents/AccessibilityAllyAgent.js +462 -0
  9. package/dist/agents/AccessibilityAllyAgent.js.map +1 -0
  10. package/dist/agents/BaseAgent.d.ts +56 -49
  11. package/dist/agents/BaseAgent.d.ts.map +1 -1
  12. package/dist/agents/BaseAgent.js +208 -604
  13. package/dist/agents/BaseAgent.js.map +1 -1
  14. package/dist/agents/FlakyTestHunterAgent.d.ts +2 -2
  15. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  16. package/dist/agents/FlakyTestHunterAgent.js +8 -104
  17. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  18. package/dist/agents/SONAIntegration.d.ts +109 -0
  19. package/dist/agents/SONAIntegration.d.ts.map +1 -0
  20. package/dist/agents/SONAIntegration.js +167 -0
  21. package/dist/agents/SONAIntegration.js.map +1 -0
  22. package/dist/agents/TestExecutorAgent.d.ts +1 -1
  23. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  24. package/dist/agents/TestExecutorAgent.js +4 -46
  25. package/dist/agents/TestExecutorAgent.js.map +1 -1
  26. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  27. package/dist/agents/TestGeneratorAgent.js +15 -35
  28. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  29. package/dist/agents/adapters/CoordinatorAdapter.d.ts +47 -0
  30. package/dist/agents/adapters/CoordinatorAdapter.d.ts.map +1 -0
  31. package/dist/agents/adapters/CoordinatorAdapter.js +266 -0
  32. package/dist/agents/adapters/CoordinatorAdapter.js.map +1 -0
  33. package/dist/agents/adapters/LearningEngineAdapter.d.ts +45 -0
  34. package/dist/agents/adapters/LearningEngineAdapter.d.ts.map +1 -0
  35. package/dist/agents/adapters/LearningEngineAdapter.js +279 -0
  36. package/dist/agents/adapters/LearningEngineAdapter.js.map +1 -0
  37. package/dist/agents/adapters/LifecycleManagerAdapter.d.ts +45 -0
  38. package/dist/agents/adapters/LifecycleManagerAdapter.d.ts.map +1 -0
  39. package/dist/agents/adapters/LifecycleManagerAdapter.js +128 -0
  40. package/dist/agents/adapters/LifecycleManagerAdapter.js.map +1 -0
  41. package/dist/agents/adapters/MemoryServiceAdapter.d.ts +96 -0
  42. package/dist/agents/adapters/MemoryServiceAdapter.d.ts.map +1 -0
  43. package/dist/agents/adapters/MemoryServiceAdapter.js +266 -0
  44. package/dist/agents/adapters/MemoryServiceAdapter.js.map +1 -0
  45. package/dist/agents/adapters/index.d.ts +14 -0
  46. package/dist/agents/adapters/index.d.ts.map +1 -0
  47. package/dist/agents/adapters/index.js +25 -0
  48. package/dist/agents/adapters/index.js.map +1 -0
  49. package/dist/agents/index.d.ts +3 -0
  50. package/dist/agents/index.d.ts.map +1 -1
  51. package/dist/agents/index.js +93 -2
  52. package/dist/agents/index.js.map +1 -1
  53. package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
  54. package/dist/agents/lifecycle/AgentLifecycleManager.js +12 -6
  55. package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
  56. package/dist/cli/init/agents.js +1 -1
  57. package/dist/cli/init/claude-config.js +2 -2
  58. package/dist/cli/init/database-init.js +1 -1
  59. package/dist/core/cache/BinaryCacheBuilder.d.ts +84 -0
  60. package/dist/core/cache/BinaryCacheBuilder.d.ts.map +1 -0
  61. package/dist/core/cache/BinaryCacheBuilder.js +225 -0
  62. package/dist/core/cache/BinaryCacheBuilder.js.map +1 -0
  63. package/dist/core/cache/BinaryCacheImpl.d.ts +161 -0
  64. package/dist/core/cache/BinaryCacheImpl.d.ts.map +1 -0
  65. package/dist/core/cache/BinaryCacheImpl.js +685 -0
  66. package/dist/core/cache/BinaryCacheImpl.js.map +1 -0
  67. package/dist/core/cache/BinaryCacheManager.d.ts +142 -0
  68. package/dist/core/cache/BinaryCacheManager.d.ts.map +1 -0
  69. package/dist/core/cache/BinaryCacheManager.js +354 -0
  70. package/dist/core/cache/BinaryCacheManager.js.map +1 -0
  71. package/dist/core/cache/BinaryCacheReader.d.ts +129 -0
  72. package/dist/core/cache/BinaryCacheReader.d.ts.map +1 -0
  73. package/dist/core/cache/BinaryCacheReader.js +243 -0
  74. package/dist/core/cache/BinaryCacheReader.js.map +1 -0
  75. package/dist/core/cache/BinaryMetadataCache.d.ts +777 -0
  76. package/dist/core/cache/BinaryMetadataCache.d.ts.map +1 -0
  77. package/dist/core/cache/BinaryMetadataCache.js +204 -0
  78. package/dist/core/cache/BinaryMetadataCache.js.map +1 -0
  79. package/dist/core/cache/CacheInvalidator.d.ts +103 -0
  80. package/dist/core/cache/CacheInvalidator.d.ts.map +1 -0
  81. package/dist/core/cache/CacheInvalidator.js +152 -0
  82. package/dist/core/cache/CacheInvalidator.js.map +1 -0
  83. package/dist/core/cache/CacheValidator.d.ts +69 -0
  84. package/dist/core/cache/CacheValidator.d.ts.map +1 -0
  85. package/dist/core/cache/CacheValidator.js +189 -0
  86. package/dist/core/cache/CacheValidator.js.map +1 -0
  87. package/dist/core/cache/MessagePackSerializer.d.ts +163 -0
  88. package/dist/core/cache/MessagePackSerializer.d.ts.map +1 -0
  89. package/dist/core/cache/MessagePackSerializer.js +274 -0
  90. package/dist/core/cache/MessagePackSerializer.js.map +1 -0
  91. package/dist/core/cache/index.d.ts +59 -0
  92. package/dist/core/cache/index.d.ts.map +1 -0
  93. package/dist/core/cache/index.js +111 -0
  94. package/dist/core/cache/index.js.map +1 -0
  95. package/dist/core/index.d.ts +2 -0
  96. package/dist/core/index.d.ts.map +1 -1
  97. package/dist/core/index.js +18 -0
  98. package/dist/core/index.js.map +1 -1
  99. package/dist/core/memory/AgentDBService.d.ts +30 -4
  100. package/dist/core/memory/AgentDBService.d.ts.map +1 -1
  101. package/dist/core/memory/AgentDBService.js +122 -12
  102. package/dist/core/memory/AgentDBService.js.map +1 -1
  103. package/dist/core/memory/CachedHNSWVectorMemory.d.ts +153 -0
  104. package/dist/core/memory/CachedHNSWVectorMemory.d.ts.map +1 -0
  105. package/dist/core/memory/CachedHNSWVectorMemory.js +329 -0
  106. package/dist/core/memory/CachedHNSWVectorMemory.js.map +1 -0
  107. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  108. package/dist/core/memory/PatternStoreFactory.d.ts +28 -0
  109. package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -1
  110. package/dist/core/memory/PatternStoreFactory.js +68 -3
  111. package/dist/core/memory/PatternStoreFactory.js.map +1 -1
  112. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -1
  113. package/dist/core/memory/RuVectorPatternStore.js +8 -2
  114. package/dist/core/memory/RuVectorPatternStore.js.map +1 -1
  115. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +50 -0
  116. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -1
  117. package/dist/core/memory/UnifiedMemoryCoordinator.js +206 -0
  118. package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -1
  119. package/dist/core/memory/index.d.ts +2 -0
  120. package/dist/core/memory/index.d.ts.map +1 -1
  121. package/dist/core/memory/index.js +8 -1
  122. package/dist/core/memory/index.js.map +1 -1
  123. package/dist/core/optimization/RecursiveOptimizer.d.ts +233 -0
  124. package/dist/core/optimization/RecursiveOptimizer.d.ts.map +1 -0
  125. package/dist/core/optimization/RecursiveOptimizer.js +509 -0
  126. package/dist/core/optimization/RecursiveOptimizer.js.map +1 -0
  127. package/dist/core/platform/FileOperations.d.ts +124 -0
  128. package/dist/core/platform/FileOperations.d.ts.map +1 -0
  129. package/dist/core/platform/FileOperations.js +371 -0
  130. package/dist/core/platform/FileOperations.js.map +1 -0
  131. package/dist/core/platform/PlatformDetector.d.ts +53 -0
  132. package/dist/core/platform/PlatformDetector.d.ts.map +1 -0
  133. package/dist/core/platform/PlatformDetector.js +251 -0
  134. package/dist/core/platform/PlatformDetector.js.map +1 -0
  135. package/dist/core/platform/index.d.ts +12 -0
  136. package/dist/core/platform/index.d.ts.map +1 -0
  137. package/dist/core/platform/index.js +28 -0
  138. package/dist/core/platform/index.js.map +1 -0
  139. package/dist/core/strategies/AcceleratedLearningStrategy.d.ts +74 -0
  140. package/dist/core/strategies/AcceleratedLearningStrategy.d.ts.map +1 -0
  141. package/dist/core/strategies/AcceleratedLearningStrategy.js +200 -0
  142. package/dist/core/strategies/AcceleratedLearningStrategy.js.map +1 -0
  143. package/dist/core/strategies/AgentCoordinationStrategy.d.ts +157 -0
  144. package/dist/core/strategies/AgentCoordinationStrategy.d.ts.map +1 -0
  145. package/dist/core/strategies/AgentCoordinationStrategy.js +12 -0
  146. package/dist/core/strategies/AgentCoordinationStrategy.js.map +1 -0
  147. package/dist/core/strategies/AgentLearningStrategy.d.ts +200 -0
  148. package/dist/core/strategies/AgentLearningStrategy.d.ts.map +1 -0
  149. package/dist/core/strategies/AgentLearningStrategy.js +13 -0
  150. package/dist/core/strategies/AgentLearningStrategy.js.map +1 -0
  151. package/dist/core/strategies/AgentLifecycleStrategy.d.ts +116 -0
  152. package/dist/core/strategies/AgentLifecycleStrategy.d.ts.map +1 -0
  153. package/dist/core/strategies/AgentLifecycleStrategy.js +12 -0
  154. package/dist/core/strategies/AgentLifecycleStrategy.js.map +1 -0
  155. package/dist/core/strategies/AgentMemoryStrategy.d.ts +154 -0
  156. package/dist/core/strategies/AgentMemoryStrategy.d.ts.map +1 -0
  157. package/dist/core/strategies/AgentMemoryStrategy.js +13 -0
  158. package/dist/core/strategies/AgentMemoryStrategy.js.map +1 -0
  159. package/dist/core/strategies/DefaultCoordinationStrategy.d.ts +105 -0
  160. package/dist/core/strategies/DefaultCoordinationStrategy.d.ts.map +1 -0
  161. package/dist/core/strategies/DefaultCoordinationStrategy.js +332 -0
  162. package/dist/core/strategies/DefaultCoordinationStrategy.js.map +1 -0
  163. package/dist/core/strategies/DefaultLearningStrategy.d.ts +120 -0
  164. package/dist/core/strategies/DefaultLearningStrategy.d.ts.map +1 -0
  165. package/dist/core/strategies/DefaultLearningStrategy.js +365 -0
  166. package/dist/core/strategies/DefaultLearningStrategy.js.map +1 -0
  167. package/dist/core/strategies/DefaultLifecycleStrategy.d.ts +129 -0
  168. package/dist/core/strategies/DefaultLifecycleStrategy.d.ts.map +1 -0
  169. package/dist/core/strategies/DefaultLifecycleStrategy.js +297 -0
  170. package/dist/core/strategies/DefaultLifecycleStrategy.js.map +1 -0
  171. package/dist/core/strategies/DefaultMemoryStrategy.d.ts +91 -0
  172. package/dist/core/strategies/DefaultMemoryStrategy.d.ts.map +1 -0
  173. package/dist/core/strategies/DefaultMemoryStrategy.js +257 -0
  174. package/dist/core/strategies/DefaultMemoryStrategy.js.map +1 -0
  175. package/dist/core/strategies/DistributedMemoryStrategy.d.ts +85 -0
  176. package/dist/core/strategies/DistributedMemoryStrategy.d.ts.map +1 -0
  177. package/dist/core/strategies/DistributedMemoryStrategy.js +126 -0
  178. package/dist/core/strategies/DistributedMemoryStrategy.js.map +1 -0
  179. package/dist/core/strategies/SONALearningStrategy.d.ts +115 -0
  180. package/dist/core/strategies/SONALearningStrategy.d.ts.map +1 -0
  181. package/dist/core/strategies/SONALearningStrategy.js +656 -0
  182. package/dist/core/strategies/SONALearningStrategy.js.map +1 -0
  183. package/dist/core/strategies/TRMLearningStrategy.d.ts +162 -0
  184. package/dist/core/strategies/TRMLearningStrategy.d.ts.map +1 -0
  185. package/dist/core/strategies/TRMLearningStrategy.js +670 -0
  186. package/dist/core/strategies/TRMLearningStrategy.js.map +1 -0
  187. package/dist/core/strategies/index.d.ts +104 -0
  188. package/dist/core/strategies/index.d.ts.map +1 -0
  189. package/dist/core/strategies/index.js +68 -0
  190. package/dist/core/strategies/index.js.map +1 -0
  191. package/dist/learning/PerformanceOptimizer.js +2 -2
  192. package/dist/learning/PerformanceOptimizer.js.map +1 -1
  193. package/dist/learning/SONAFeedbackLoop.d.ts +168 -0
  194. package/dist/learning/SONAFeedbackLoop.d.ts.map +1 -0
  195. package/dist/learning/SONAFeedbackLoop.js +344 -0
  196. package/dist/learning/SONAFeedbackLoop.js.map +1 -0
  197. package/dist/learning/baselines/BaselineCollector.d.ts +1 -1
  198. package/dist/learning/baselines/BaselineCollector.js +1 -1
  199. package/dist/learning/baselines/StandardTaskSuite.d.ts +1 -1
  200. package/dist/learning/baselines/StandardTaskSuite.js +1 -1
  201. package/dist/learning/index.d.ts +2 -0
  202. package/dist/learning/index.d.ts.map +1 -1
  203. package/dist/learning/index.js +6 -1
  204. package/dist/learning/index.js.map +1 -1
  205. package/dist/mcp/handlers/base-handler.d.ts +28 -1
  206. package/dist/mcp/handlers/base-handler.d.ts.map +1 -1
  207. package/dist/mcp/handlers/base-handler.js +41 -0
  208. package/dist/mcp/handlers/base-handler.js.map +1 -1
  209. package/dist/mcp/server-instructions.d.ts +1 -1
  210. package/dist/mcp/server-instructions.js +1 -1
  211. package/dist/mcp/server.d.ts.map +1 -1
  212. package/dist/mcp/server.js +23 -16
  213. package/dist/mcp/server.js.map +1 -1
  214. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  215. package/dist/mcp/services/AgentRegistry.js +6 -1
  216. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  217. package/dist/mcp/tools/qe/accessibility/accname-computation.d.ts +114 -0
  218. package/dist/mcp/tools/qe/accessibility/accname-computation.d.ts.map +1 -0
  219. package/dist/mcp/tools/qe/accessibility/accname-computation.js +566 -0
  220. package/dist/mcp/tools/qe/accessibility/accname-computation.js.map +1 -0
  221. package/dist/mcp/tools/qe/accessibility/apg-patterns.d.ts +103 -0
  222. package/dist/mcp/tools/qe/accessibility/apg-patterns.d.ts.map +1 -0
  223. package/dist/mcp/tools/qe/accessibility/apg-patterns.js +1028 -0
  224. package/dist/mcp/tools/qe/accessibility/apg-patterns.js.map +1 -0
  225. package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.d.ts +48 -0
  226. package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.d.ts.map +1 -0
  227. package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.js +565 -0
  228. package/dist/mcp/tools/qe/accessibility/en-301-549-mapping.js.map +1 -0
  229. package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.d.ts +117 -0
  230. package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.d.ts.map +1 -0
  231. package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.js +571 -0
  232. package/dist/mcp/tools/qe/accessibility/eu-accessibility-act.js.map +1 -0
  233. package/dist/mcp/tools/qe/accessibility/html-report-generator.d.ts +23 -0
  234. package/dist/mcp/tools/qe/accessibility/html-report-generator.d.ts.map +1 -0
  235. package/dist/mcp/tools/qe/accessibility/html-report-generator.js +1152 -0
  236. package/dist/mcp/tools/qe/accessibility/html-report-generator.js.map +1 -0
  237. package/dist/mcp/tools/qe/accessibility/index.d.ts +22 -0
  238. package/dist/mcp/tools/qe/accessibility/index.d.ts.map +1 -0
  239. package/dist/mcp/tools/qe/accessibility/index.js +38 -0
  240. package/dist/mcp/tools/qe/accessibility/index.js.map +1 -0
  241. package/dist/mcp/tools/qe/accessibility/markdown-report-generator.d.ts +18 -0
  242. package/dist/mcp/tools/qe/accessibility/markdown-report-generator.d.ts.map +1 -0
  243. package/dist/mcp/tools/qe/accessibility/markdown-report-generator.js +549 -0
  244. package/dist/mcp/tools/qe/accessibility/markdown-report-generator.js.map +1 -0
  245. package/dist/mcp/tools/qe/accessibility/remediation-code-generator.d.ts +139 -0
  246. package/dist/mcp/tools/qe/accessibility/remediation-code-generator.d.ts.map +1 -0
  247. package/dist/mcp/tools/qe/accessibility/remediation-code-generator.js +1300 -0
  248. package/dist/mcp/tools/qe/accessibility/remediation-code-generator.js.map +1 -0
  249. package/dist/mcp/tools/qe/accessibility/scan-comprehensive.d.ts +138 -0
  250. package/dist/mcp/tools/qe/accessibility/scan-comprehensive.d.ts.map +1 -0
  251. package/dist/mcp/tools/qe/accessibility/scan-comprehensive.js +1326 -0
  252. package/dist/mcp/tools/qe/accessibility/scan-comprehensive.js.map +1 -0
  253. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts +50 -0
  254. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.d.ts.map +1 -0
  255. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js +469 -0
  256. package/dist/mcp/tools/qe/accessibility/video-vision-analyzer.js.map +1 -0
  257. package/dist/mcp/tools/qe/accessibility/webvtt-generator.d.ts +193 -0
  258. package/dist/mcp/tools/qe/accessibility/webvtt-generator.d.ts.map +1 -0
  259. package/dist/mcp/tools/qe/accessibility/webvtt-generator.js +511 -0
  260. package/dist/mcp/tools/qe/accessibility/webvtt-generator.js.map +1 -0
  261. package/dist/mcp/tools.d.ts +1 -0
  262. package/dist/mcp/tools.d.ts.map +1 -1
  263. package/dist/mcp/tools.js +61 -0
  264. package/dist/mcp/tools.js.map +1 -1
  265. package/dist/output/AIActionSuggester.d.ts +98 -0
  266. package/dist/output/AIActionSuggester.d.ts.map +1 -0
  267. package/dist/output/AIActionSuggester.js +499 -0
  268. package/dist/output/AIActionSuggester.js.map +1 -0
  269. package/dist/output/CLIOutputHelper.d.ts +169 -0
  270. package/dist/output/CLIOutputHelper.d.ts.map +1 -0
  271. package/dist/output/CLIOutputHelper.js +320 -0
  272. package/dist/output/CLIOutputHelper.js.map +1 -0
  273. package/dist/output/OutputFormatter.d.ts +764 -0
  274. package/dist/output/OutputFormatter.d.ts.map +1 -0
  275. package/dist/output/OutputFormatter.js +125 -0
  276. package/dist/output/OutputFormatter.js.map +1 -0
  277. package/dist/output/OutputFormatterImpl.d.ts +131 -0
  278. package/dist/output/OutputFormatterImpl.d.ts.map +1 -0
  279. package/dist/output/OutputFormatterImpl.js +556 -0
  280. package/dist/output/OutputFormatterImpl.js.map +1 -0
  281. package/dist/output/examples.d.ts +38 -0
  282. package/dist/output/examples.d.ts.map +1 -0
  283. package/dist/output/examples.js +503 -0
  284. package/dist/output/examples.js.map +1 -0
  285. package/dist/output/index.d.ts +16 -0
  286. package/dist/output/index.d.ts.map +1 -0
  287. package/dist/output/index.js +58 -0
  288. package/dist/output/index.js.map +1 -0
  289. package/dist/providers/HybridRouter.d.ts +34 -3
  290. package/dist/providers/HybridRouter.d.ts.map +1 -1
  291. package/dist/providers/HybridRouter.js +69 -4
  292. package/dist/providers/HybridRouter.js.map +1 -1
  293. package/dist/providers/LLMProviderFactory.d.ts +68 -1
  294. package/dist/providers/LLMProviderFactory.d.ts.map +1 -1
  295. package/dist/providers/LLMProviderFactory.js +173 -6
  296. package/dist/providers/LLMProviderFactory.js.map +1 -1
  297. package/dist/providers/OpenRouterProvider.d.ts +150 -0
  298. package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
  299. package/dist/providers/OpenRouterProvider.js +545 -0
  300. package/dist/providers/OpenRouterProvider.js.map +1 -0
  301. package/dist/providers/RuvllmProvider.d.ts +130 -16
  302. package/dist/providers/RuvllmProvider.d.ts.map +1 -1
  303. package/dist/providers/RuvllmProvider.js +399 -83
  304. package/dist/providers/RuvllmProvider.js.map +1 -1
  305. package/dist/providers/index.d.ts +33 -4
  306. package/dist/providers/index.d.ts.map +1 -1
  307. package/dist/providers/index.js +72 -21
  308. package/dist/providers/index.js.map +1 -1
  309. package/dist/telemetry/instrumentation/agent.d.ts +1 -1
  310. package/dist/telemetry/instrumentation/agent.js +1 -1
  311. package/dist/telemetry/instrumentation/index.d.ts +1 -1
  312. package/dist/telemetry/instrumentation/index.js +1 -1
  313. package/dist/types/index.d.ts +2 -1
  314. package/dist/types/index.d.ts.map +1 -1
  315. package/dist/types/index.js +2 -0
  316. package/dist/types/index.js.map +1 -1
  317. package/dist/types/ruvllm.d.ts +97 -0
  318. package/dist/types/ruvllm.d.ts.map +1 -0
  319. package/dist/types/ruvllm.js +46 -0
  320. package/dist/types/ruvllm.js.map +1 -0
  321. package/dist/utils/ruvllm-loader.d.ts +94 -0
  322. package/dist/utils/ruvllm-loader.d.ts.map +1 -0
  323. package/dist/utils/ruvllm-loader.js +87 -0
  324. package/dist/utils/ruvllm-loader.js.map +1 -0
  325. package/docs/reference/agents.md +36 -1
  326. package/package.json +7 -2
@@ -1,11 +1,10 @@
1
1
  "use strict";
2
2
  /**
3
- * RuvllmProvider - Local LLM Inference via ruvllm
3
+ * RuvllmProvider - Local LLM Inference via @ruvector/ruvllm
4
4
  *
5
- * Provides local LLM inference for cost-effective operations on capable hardware.
6
- * Uses ruvllm for fast local inference with support for various open models.
7
- *
8
- * Features:
5
+ * Provides local LLM inference with advanced features:
6
+ * - TRM (Test-time Reasoning & Metacognition) for iterative refinement
7
+ * - SONA (Self-Organizing Neural Architecture) for continuous learning
9
8
  * - Zero cloud costs for local inference
10
9
  * - Low latency for local operations
11
10
  * - Privacy-preserving (no data leaves the machine)
@@ -13,18 +12,26 @@
13
12
  * - Model hot-swapping
14
13
  *
15
14
  * @module providers/RuvllmProvider
16
- * @version 1.0.0
15
+ * @version 2.0.0
17
16
  */
18
17
  Object.defineProperty(exports, "__esModule", { value: true });
19
18
  exports.RuvllmProvider = void 0;
20
19
  const child_process_1 = require("child_process");
21
20
  const ILLMProvider_1 = require("./ILLMProvider");
22
21
  const Logger_1 = require("../utils/Logger");
22
+ const ruvllm_loader_1 = require("../utils/ruvllm-loader");
23
23
  /**
24
- * RuvllmProvider - Local LLM inference implementation of ILLMProvider
24
+ * RuvllmProvider - Local LLM inference implementation with TRM and SONA
25
25
  *
26
- * This provider enables local LLM inference using ruvllm, providing
27
- * cost-free, low-latency inference for development and privacy-sensitive tasks.
26
+ * This provider enables local LLM inference using @ruvector/ruvllm, providing
27
+ * cost-free, low-latency inference with advanced learning capabilities.
28
+ *
29
+ * Features:
30
+ * - TRM for iterative quality improvement
31
+ * - SONA for continuous learning from trajectories
32
+ * - ReasoningBank for pattern reuse
33
+ * - Memory search for context-aware responses
34
+ * - LoRA adapters for task-specific optimization
28
35
  */
29
36
  class RuvllmProvider {
30
37
  constructor(config = {}) {
@@ -41,14 +48,23 @@ class RuvllmProvider {
41
48
  contextSize: config.contextSize ?? 4096,
42
49
  threads: config.threads ?? 4,
43
50
  defaultTemperature: config.defaultTemperature ?? 0.7,
44
- enableEmbeddings: config.enableEmbeddings ?? false
51
+ enableEmbeddings: config.enableEmbeddings ?? false,
52
+ enableTRM: config.enableTRM ?? true,
53
+ enableSONA: config.enableSONA ?? true,
54
+ maxTRMIterations: config.maxTRMIterations ?? 7,
55
+ convergenceThreshold: config.convergenceThreshold ?? 0.95,
56
+ sonaConfig: {
57
+ loraRank: config.sonaConfig?.loraRank ?? 8,
58
+ loraAlpha: config.sonaConfig?.loraAlpha ?? 16,
59
+ ewcLambda: config.sonaConfig?.ewcLambda ?? 2000
60
+ }
45
61
  };
46
62
  this.isInitialized = false;
47
63
  this.baseUrl = `http://localhost:${this.config.port}`;
48
64
  this.requestCount = 0;
49
65
  }
50
66
  /**
51
- * Initialize the ruvllm provider
67
+ * Initialize the ruvllm provider with TRM and SONA support
52
68
  */
53
69
  async initialize() {
54
70
  if (this.isInitialized) {
@@ -56,20 +72,53 @@ class RuvllmProvider {
56
72
  return;
57
73
  }
58
74
  try {
59
- // Check if server is already running
75
+ // Load ruvLLM via CJS (ESM build is broken)
76
+ const ruvllmModule = (0, ruvllm_loader_1.loadRuvLLM)();
77
+ if (!ruvllmModule) {
78
+ // Check if server is already running (fallback mode)
79
+ const isRunning = await this.checkServerHealth();
80
+ if (isRunning) {
81
+ this.isInitialized = true;
82
+ this.logger.info('Connected to existing ruvllm server (fallback mode, ruvLLM lib unavailable)');
83
+ return;
84
+ }
85
+ throw new Error('RuvLLM library not available and no server running');
86
+ }
87
+ // Initialize RuvLLM core
88
+ this.ruvllm = new ruvllmModule.RuvLLM({
89
+ learningEnabled: this.config.enableSONA ?? true,
90
+ embeddingDim: 768,
91
+ ewcLambda: this.config.sonaConfig?.ewcLambda ?? 2000
92
+ });
93
+ // Initialize SONA components if enabled
94
+ if (this.config.enableSONA) {
95
+ this.sonaCoordinator = new ruvllmModule.SonaCoordinator();
96
+ this.reasoningBank = new ruvllmModule.ReasoningBank(0.85); // 85% similarity threshold
97
+ // Initialize LoRA manager
98
+ this.loraManager = new ruvllmModule.LoraManager();
99
+ this.logger.info('SONA components initialized', {
100
+ loraRank: this.config.sonaConfig?.loraRank,
101
+ loraAlpha: this.config.sonaConfig?.loraAlpha,
102
+ ewcLambda: this.config.sonaConfig?.ewcLambda
103
+ });
104
+ }
105
+ // Check if server is already running (fallback mode)
60
106
  const isRunning = await this.checkServerHealth();
61
107
  if (isRunning) {
62
108
  this.isInitialized = true;
63
- this.logger.info('Connected to existing ruvllm server');
109
+ this.logger.info('Connected to existing ruvllm server (fallback mode)');
64
110
  return;
65
111
  }
66
- // Start ruvllm server
112
+ // Start ruvllm server as fallback
67
113
  await this.startServer();
68
114
  this.isInitialized = true;
69
115
  this.logger.info('RuvllmProvider initialized', {
70
116
  model: this.config.defaultModel,
71
117
  port: this.config.port,
72
- gpuLayers: this.config.gpuLayers
118
+ gpuLayers: this.config.gpuLayers,
119
+ enableTRM: this.config.enableTRM,
120
+ enableSONA: this.config.enableSONA,
121
+ maxTRMIterations: this.config.maxTRMIterations
73
122
  });
74
123
  }
75
124
  catch (error) {
@@ -77,72 +126,307 @@ class RuvllmProvider {
77
126
  }
78
127
  }
79
128
  /**
80
- * Complete a prompt using local inference
129
+ * Complete a prompt using ruvLLM with optional TRM refinement
81
130
  */
82
131
  async complete(options) {
83
132
  this.ensureInitialized();
133
+ // Use TRM if enabled and configured
134
+ if (this.config.enableTRM && options.trmConfig) {
135
+ const trmResponse = await this.completeTRM(options);
136
+ return trmResponse;
137
+ }
138
+ return this.completeBasic(options);
139
+ }
140
+ /**
141
+ * Complete with TRM (Test-time Reasoning & Metacognition)
142
+ */
143
+ async completeTRM(options) {
144
+ const maxIterations = options.trmConfig?.maxIterations ?? this.config.maxTRMIterations ?? 7;
145
+ const convergenceThreshold = options.trmConfig?.convergenceThreshold ?? this.config.convergenceThreshold ?? 0.95;
146
+ const qualityMetric = options.trmConfig?.qualityMetric ?? 'coherence';
84
147
  const startTime = Date.now();
85
- try {
86
- // Build request body
87
- const requestBody = {
88
- model: options.model || this.config.defaultModel,
89
- messages: options.messages.map(m => ({
90
- role: m.role,
91
- content: typeof m.content === 'string' ? m.content : m.content.map(c => c.text || '').join('')
92
- })),
93
- max_tokens: options.maxTokens || 2048,
94
- temperature: options.temperature ?? this.config.defaultTemperature,
95
- stream: false
96
- };
97
- // Add system message if provided
98
- if (options.system && options.system.length > 0) {
99
- const systemContent = options.system.map(s => s.text).join('\n');
100
- requestBody.messages = [
101
- { role: 'system', content: systemContent },
102
- ...requestBody.messages
103
- ];
104
- }
105
- const response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
106
- method: 'POST',
107
- headers: { 'Content-Type': 'application/json' },
108
- body: JSON.stringify(requestBody),
109
- signal: AbortSignal.timeout(this.config.timeout)
148
+ const history = [];
149
+ // Initial completion
150
+ let current = await this.completeBasic(options);
151
+ let quality = this.measureQuality(current, qualityMetric);
152
+ history.push({
153
+ iteration: 0,
154
+ quality,
155
+ improvement: 0,
156
+ reasoning: 'Initial completion'
157
+ });
158
+ this.logger.debug('TRM iteration 0', { quality, metric: qualityMetric });
159
+ // Iterative refinement
160
+ for (let i = 1; i < maxIterations; i++) {
161
+ // Refine using previous output
162
+ const refined = await this.refineTRM(current, options, qualityMetric);
163
+ const newQuality = this.measureQuality(refined, qualityMetric);
164
+ const improvement = newQuality - quality;
165
+ history.push({
166
+ iteration: i,
167
+ quality: newQuality,
168
+ improvement,
169
+ reasoning: `Refinement iteration ${i}`
110
170
  });
111
- if (!response.ok) {
112
- throw new Error(`Server returned ${response.status}: ${await response.text()}`);
171
+ this.logger.debug(`TRM iteration ${i}`, { quality: newQuality, improvement });
172
+ // Check convergence
173
+ if (improvement < (1 - convergenceThreshold)) {
174
+ this.logger.info('TRM converged', { iterations: i + 1, finalQuality: newQuality });
175
+ break;
113
176
  }
114
- const data = await response.json();
115
- this.requestCount++;
116
- // Map to standard response format
117
- const result = {
118
- content: [{
119
- type: 'text',
120
- text: data.choices?.[0]?.message?.content || ''
121
- }],
122
- usage: {
123
- input_tokens: data.usage?.prompt_tokens || 0,
124
- output_tokens: data.usage?.completion_tokens || 0
125
- },
126
- model: data.model || this.config.defaultModel,
127
- stop_reason: this.mapStopReason(data.choices?.[0]?.finish_reason),
128
- id: data.id || `ruvllm-${Date.now()}`,
129
- metadata: {
130
- latency: Date.now() - startTime,
131
- cost: 0 // Local inference is free
132
- }
133
- };
134
- this.logger.debug('Ruvllm completion successful', {
135
- model: result.model,
136
- inputTokens: result.usage.input_tokens,
137
- outputTokens: result.usage.output_tokens,
138
- latency: result.metadata?.latency
139
- });
140
- return result;
177
+ current = refined;
178
+ quality = newQuality;
179
+ }
180
+ // Track trajectory if SONA enabled
181
+ if (this.config.enableSONA && this.sonaCoordinator) {
182
+ await this.trackTrajectory(this.extractInput(options), this.extractOutput(current), quality);
183
+ }
184
+ return {
185
+ ...current,
186
+ trmIterations: history.length,
187
+ finalQuality: quality,
188
+ convergenceHistory: history,
189
+ metadata: {
190
+ ...current.metadata,
191
+ trmLatency: Date.now() - startTime,
192
+ qualityMetric
193
+ }
194
+ };
195
+ }
196
+ /**
197
+ * Basic completion without TRM
198
+ */
199
+ async completeBasic(options) {
200
+ const startTime = Date.now();
201
+ try {
202
+ // Check if ruvLLM instance is available
203
+ if (this.ruvllm) {
204
+ // Use ruvLLM query API
205
+ const input = this.extractInput(options);
206
+ // Search memory for relevant context
207
+ const memoryResults = this.ruvllm.searchMemory(input, 5);
208
+ // Query with routing
209
+ const response = this.ruvllm.query(input, {
210
+ maxTokens: options.maxTokens || 2048,
211
+ temperature: options.temperature ?? this.config.defaultTemperature
212
+ });
213
+ // Build response
214
+ const result = {
215
+ content: [{
216
+ type: 'text',
217
+ text: response.text || ''
218
+ }],
219
+ usage: {
220
+ input_tokens: response.contextSize || 0,
221
+ output_tokens: this.estimateTokens(response.text || '')
222
+ },
223
+ model: response.model || this.config.defaultModel,
224
+ stop_reason: 'end_turn',
225
+ id: response.requestId || `ruvllm-${Date.now()}`,
226
+ metadata: {
227
+ latency: response.latencyMs || (Date.now() - startTime),
228
+ confidence: response.confidence,
229
+ memoryHits: memoryResults.length,
230
+ cost: 0
231
+ }
232
+ };
233
+ // Add to memory
234
+ this.ruvllm.addMemory(response.text, {
235
+ input,
236
+ timestamp: Date.now(),
237
+ model: response.model
238
+ });
239
+ this.requestCount++;
240
+ return result;
241
+ }
242
+ // Fallback to OpenAI-compatible API
243
+ return this.completeViaServer(options, startTime);
141
244
  }
142
245
  catch (error) {
143
246
  throw new ILLMProvider_1.LLMProviderError(`Ruvllm completion failed: ${error.message}`, 'ruvllm', 'INFERENCE_ERROR', true, error);
144
247
  }
145
248
  }
249
+ /**
250
+ * Complete via OpenAI-compatible server (fallback)
251
+ */
252
+ async completeViaServer(options, startTime) {
253
+ const requestBody = {
254
+ model: options.model || this.config.defaultModel,
255
+ messages: options.messages.map(m => ({
256
+ role: m.role,
257
+ content: typeof m.content === 'string' ? m.content : m.content.map(c => c.text || '').join('')
258
+ })),
259
+ max_tokens: options.maxTokens || 2048,
260
+ temperature: options.temperature ?? this.config.defaultTemperature,
261
+ stream: false
262
+ };
263
+ // Add system message if provided
264
+ if (options.system && options.system.length > 0) {
265
+ const systemContent = options.system.map(s => s.text).join('\n');
266
+ requestBody.messages = [
267
+ { role: 'system', content: systemContent },
268
+ ...requestBody.messages
269
+ ];
270
+ }
271
+ const response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
272
+ method: 'POST',
273
+ headers: { 'Content-Type': 'application/json' },
274
+ body: JSON.stringify(requestBody),
275
+ signal: AbortSignal.timeout(this.config.timeout)
276
+ });
277
+ if (!response.ok) {
278
+ throw new Error(`Server returned ${response.status}: ${await response.text()}`);
279
+ }
280
+ const data = await response.json();
281
+ this.requestCount++;
282
+ return {
283
+ content: [{
284
+ type: 'text',
285
+ text: data.choices?.[0]?.message?.content || ''
286
+ }],
287
+ usage: {
288
+ input_tokens: data.usage?.prompt_tokens || 0,
289
+ output_tokens: data.usage?.completion_tokens || 0
290
+ },
291
+ model: data.model || this.config.defaultModel,
292
+ stop_reason: this.mapStopReason(data.choices?.[0]?.finish_reason),
293
+ id: data.id || `ruvllm-${Date.now()}`,
294
+ metadata: {
295
+ latency: Date.now() - startTime,
296
+ cost: 0
297
+ }
298
+ };
299
+ }
300
+ /**
301
+ * Refine output using TRM
302
+ */
303
+ async refineTRM(previous, options, metric) {
304
+ const previousText = previous.content[0].text;
305
+ // Create refinement prompt
306
+ const refinementMessages = [
307
+ ...options.messages,
308
+ {
309
+ role: 'assistant',
310
+ content: previousText
311
+ },
312
+ {
313
+ role: 'user',
314
+ content: `Review and improve the above response to maximize ${metric}. Provide a refined version that addresses any weaknesses.`
315
+ }
316
+ ];
317
+ return this.completeBasic({
318
+ ...options,
319
+ messages: refinementMessages
320
+ });
321
+ }
322
+ /**
323
+ * Measure quality of a completion
324
+ */
325
+ measureQuality(response, metric) {
326
+ const text = response.content[0].text;
327
+ switch (metric) {
328
+ case 'coherence':
329
+ return this.measureCoherence(text);
330
+ case 'coverage':
331
+ return this.measureCoverage(text);
332
+ case 'diversity':
333
+ return this.measureDiversity(text);
334
+ default:
335
+ return this.measureCoherence(text);
336
+ }
337
+ }
338
+ /**
339
+ * Measure coherence (sentence flow, structure)
340
+ */
341
+ measureCoherence(text) {
342
+ const sentences = text.split(/[.!?]+/).filter(s => s.trim().length > 0);
343
+ if (sentences.length === 0)
344
+ return 0;
345
+ // Simple heuristics:
346
+ // - Longer responses are more coherent
347
+ // - More sentences indicate better structure
348
+ // - Normalized by length to avoid bias
349
+ const avgSentenceLength = text.length / sentences.length;
350
+ const normalizedLength = Math.min(avgSentenceLength / 100, 1.0);
351
+ const sentenceCount = Math.min(sentences.length / 10, 1.0);
352
+ return (normalizedLength + sentenceCount) / 2;
353
+ }
354
+ /**
355
+ * Measure coverage (breadth of content)
356
+ */
357
+ measureCoverage(text) {
358
+ // Measure unique words as proxy for coverage
359
+ const words = text.toLowerCase().split(/\s+/);
360
+ const uniqueWords = new Set(words);
361
+ if (words.length === 0)
362
+ return 0;
363
+ return Math.min(uniqueWords.size / words.length, 1.0);
364
+ }
365
+ /**
366
+ * Measure diversity (variety in expression)
367
+ */
368
+ measureDiversity(text) {
369
+ // Measure vocabulary richness
370
+ const words = text.toLowerCase().split(/\s+/).filter(w => w.length > 3);
371
+ const uniqueWords = new Set(words);
372
+ if (words.length === 0)
373
+ return 0;
374
+ // Type-token ratio
375
+ return Math.min(uniqueWords.size / words.length * 2, 1.0);
376
+ }
377
+ /**
378
+ * Track trajectory in SONA
379
+ */
380
+ async trackTrajectory(input, output, confidence) {
381
+ if (!this.sonaCoordinator)
382
+ return;
383
+ try {
384
+ const ruvllmModule = (0, ruvllm_loader_1.loadRuvLLM)();
385
+ if (!ruvllmModule)
386
+ return;
387
+ const trajectory = new ruvllmModule.TrajectoryBuilder()
388
+ .startStep('query', input)
389
+ .endStep(output, confidence)
390
+ .complete('success');
391
+ this.sonaCoordinator.recordTrajectory(trajectory);
392
+ // Store in reasoning bank if high confidence
393
+ // ReasoningBank.store(type, embedding, metadata)
394
+ if (this.reasoningBank && confidence > 0.85 && this.ruvllm) {
395
+ const rawEmbedding = this.ruvllm.embed(input);
396
+ // Convert Float32Array to number[] for ReasoningBank
397
+ const embedding = Array.from(rawEmbedding);
398
+ this.reasoningBank.store('query_response', embedding, {
399
+ input,
400
+ output,
401
+ confidence,
402
+ timestamp: Date.now()
403
+ });
404
+ }
405
+ this.logger.debug('Trajectory tracked', { confidence, hasReasoningBank: !!this.reasoningBank });
406
+ }
407
+ catch (error) {
408
+ this.logger.warn('Failed to track trajectory', { error: error.message });
409
+ }
410
+ }
411
+ /**
412
+ * Extract input text from options
413
+ */
414
+ extractInput(options) {
415
+ const messages = options.messages.map(m => typeof m.content === 'string' ? m.content : m.content.map(c => c.text || '').join(''));
416
+ return messages.join(' ');
417
+ }
418
+ /**
419
+ * Extract output text from response
420
+ */
421
+ extractOutput(response) {
422
+ return response.content.map(c => c.text).join('');
423
+ }
424
+ /**
425
+ * Estimate token count
426
+ */
427
+ estimateTokens(text) {
428
+ return Math.ceil(text.length / 4);
429
+ }
146
430
  /**
147
431
  * Stream a completion
148
432
  */
@@ -219,14 +503,26 @@ class RuvllmProvider {
219
503
  }
220
504
  }
221
505
  /**
222
- * Generate embeddings
506
+ * Generate embeddings using ruvLLM
223
507
  */
224
508
  async embed(options) {
225
509
  this.ensureInitialized();
226
- if (!this.config.enableEmbeddings) {
227
- throw new ILLMProvider_1.LLMProviderError('Embeddings not enabled. Set enableEmbeddings: true in config.', 'ruvllm', 'UNSUPPORTED', false);
228
- }
229
510
  try {
511
+ // Use ruvLLM embedding if available
512
+ if (this.ruvllm) {
513
+ const rawEmbedding = this.ruvllm.embed(options.text);
514
+ // Convert Float32Array to number[] for consistent return type
515
+ const embedding = Array.from(rawEmbedding);
516
+ return {
517
+ embedding,
518
+ model: options.model || 'ruvllm-embedding',
519
+ tokens: this.estimateTokens(options.text)
520
+ };
521
+ }
522
+ // Fallback to server API
523
+ if (!this.config.enableEmbeddings) {
524
+ throw new ILLMProvider_1.LLMProviderError('Embeddings not enabled. Set enableEmbeddings: true in config.', 'ruvllm', 'UNSUPPORTED', false);
525
+ }
230
526
  const response = await fetch(`${this.baseUrl}/v1/embeddings`, {
231
527
  method: 'POST',
232
528
  headers: { 'Content-Type': 'application/json' },
@@ -253,9 +549,7 @@ class RuvllmProvider {
253
549
  * Count tokens in text
254
550
  */
255
551
  async countTokens(options) {
256
- // Approximate token count (ruvllm doesn't have a direct endpoint)
257
- // Most models use ~4 characters per token
258
- return Math.ceil(options.text.length / 4);
552
+ return this.estimateTokens(options.text);
259
553
  }
260
554
  /**
261
555
  * Health check
@@ -263,6 +557,22 @@ class RuvllmProvider {
263
557
  async healthCheck() {
264
558
  const startTime = Date.now();
265
559
  try {
560
+ // Check ruvLLM instance
561
+ if (this.ruvllm) {
562
+ return {
563
+ healthy: true,
564
+ latency: Date.now() - startTime,
565
+ timestamp: new Date(),
566
+ metadata: {
567
+ model: this.config.defaultModel,
568
+ requestCount: this.requestCount,
569
+ sonaEnabled: !!this.sonaCoordinator,
570
+ trmEnabled: this.config.enableTRM,
571
+ mode: 'native'
572
+ }
573
+ };
574
+ }
575
+ // Fallback to server health check
266
576
  const isHealthy = await this.checkServerHealth();
267
577
  return {
268
578
  healthy: isHealthy,
@@ -271,7 +581,8 @@ class RuvllmProvider {
271
581
  metadata: {
272
582
  model: this.config.defaultModel,
273
583
  port: this.config.port,
274
- requestCount: this.requestCount
584
+ requestCount: this.requestCount,
585
+ mode: 'server'
275
586
  }
276
587
  };
277
588
  }
@@ -289,7 +600,7 @@ class RuvllmProvider {
289
600
  getMetadata() {
290
601
  return {
291
602
  name: 'ruvllm',
292
- version: '1.0.0',
603
+ version: '2.0.0',
293
604
  models: [
294
605
  'llama-3.2-3b-instruct',
295
606
  'llama-3.2-1b-instruct',
@@ -305,7 +616,7 @@ class RuvllmProvider {
305
616
  vision: false
306
617
  },
307
618
  costs: {
308
- inputPerMillion: 0, // Free for local inference
619
+ inputPerMillion: 0,
309
620
  outputPerMillion: 0
310
621
  },
311
622
  location: 'local'
@@ -319,6 +630,11 @@ class RuvllmProvider {
319
630
  this.serverProcess.kill();
320
631
  this.serverProcess = undefined;
321
632
  }
633
+ // Clean up ruvLLM resources
634
+ this.ruvllm = undefined;
635
+ this.sonaCoordinator = undefined;
636
+ this.reasoningBank = undefined;
637
+ this.loraManager = undefined;
322
638
  this.isInitialized = false;
323
639
  this.logger.info('RuvllmProvider shutdown', {
324
640
  requestCount: this.requestCount
@@ -328,10 +644,10 @@ class RuvllmProvider {
328
644
  * Track cost (always 0 for local inference)
329
645
  */
330
646
  trackCost(usage) {
331
- return 0; // Local inference is free
647
+ return 0;
332
648
  }
333
649
  /**
334
- * Start the ruvllm server
650
+ * Start the ruvllm server (fallback mode)
335
651
  */
336
652
  async startServer() {
337
653
  return new Promise((resolve, reject) => {
@@ -378,7 +694,7 @@ class RuvllmProvider {
378
694
  });
379
695
  }
380
696
  /**
381
- * Check if server is healthy
697
+ * Check if server is healthy (fallback mode)
382
698
  */
383
699
  async checkServerHealth() {
384
700
  try {