agentic-flow 2.0.6 → 2.0.8

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 (316) hide show
  1. package/.claude/settings.json +133 -9
  2. package/.claude/skills/agentic-flow-quickstart/skill.md +69 -0
  3. package/.claude/skills/hooks-automation/skill.md +155 -0
  4. package/.claude/skills/memory-patterns/skill.md +110 -0
  5. package/.claude/skills/sparc-methodology/skill.md +137 -0
  6. package/.claude/skills/swarm-coordination/skill.md +94 -0
  7. package/.claude/skills/worker-benchmarks/skill.md +135 -0
  8. package/.claude/skills/worker-integration/skill.md +154 -0
  9. package/.claude/statusline.mjs +109 -0
  10. package/.claude/statusline.sh +71 -0
  11. package/README.md +1797 -624
  12. package/dist/.tsbuildinfo +1 -1
  13. package/dist/agentdb/index.d.ts +2 -0
  14. package/dist/agentdb/index.d.ts.map +1 -1
  15. package/dist/agentdb/index.js +5 -0
  16. package/dist/agentdb/index.js.map +1 -1
  17. package/dist/agentdb/prerequisites.d.ts +25 -0
  18. package/dist/agentdb/prerequisites.d.ts.map +1 -0
  19. package/dist/agentdb/prerequisites.js +180 -0
  20. package/dist/agentdb/prerequisites.js.map +1 -0
  21. package/dist/benchmarks/embeddings-benchmark.d.ts +38 -0
  22. package/dist/benchmarks/embeddings-benchmark.d.ts.map +1 -0
  23. package/dist/benchmarks/embeddings-benchmark.js +282 -0
  24. package/dist/benchmarks/embeddings-benchmark.js.map +1 -0
  25. package/dist/billing/mcp/tools.js +1 -0
  26. package/dist/billing/mcp/tools.js.map +1 -1
  27. package/dist/cli/commands/embeddings.d.ts +12 -0
  28. package/dist/cli/commands/embeddings.d.ts.map +1 -0
  29. package/dist/cli/commands/embeddings.js +386 -0
  30. package/dist/cli/commands/embeddings.js.map +1 -0
  31. package/dist/cli/commands/hooks.d.ts.map +1 -1
  32. package/dist/cli/commands/hooks.js +79 -4
  33. package/dist/cli/commands/hooks.js.map +1 -1
  34. package/dist/cli/commands/init.d.ts +8 -0
  35. package/dist/cli/commands/init.d.ts.map +1 -0
  36. package/dist/cli/commands/init.js +514 -0
  37. package/dist/cli/commands/init.js.map +1 -0
  38. package/dist/cli/commands/workers.d.ts +9 -0
  39. package/dist/cli/commands/workers.d.ts.map +1 -0
  40. package/dist/cli/commands/workers.js +991 -0
  41. package/dist/cli/commands/workers.js.map +1 -0
  42. package/dist/cli/config-wizard.d.ts.map +1 -1
  43. package/dist/cli/config-wizard.js +47 -25
  44. package/dist/cli/config-wizard.js.map +1 -1
  45. package/dist/cli-proxy.js +89 -1
  46. package/dist/cli-proxy.js.map +1 -1
  47. package/dist/core/agentdb-fast.js +3 -3
  48. package/dist/core/agentdb-fast.js.map +1 -1
  49. package/dist/core/agentdb-wrapper-enhanced.d.ts.map +1 -1
  50. package/dist/core/agentdb-wrapper-enhanced.js +37 -11
  51. package/dist/core/agentdb-wrapper-enhanced.js.map +1 -1
  52. package/dist/core/agentdb-wrapper.d.ts +3 -2
  53. package/dist/core/agentdb-wrapper.d.ts.map +1 -1
  54. package/dist/core/agentdb-wrapper.js +15 -1
  55. package/dist/core/agentdb-wrapper.js.map +1 -1
  56. package/dist/core/attention-native.d.ts +4 -0
  57. package/dist/core/attention-native.d.ts.map +1 -1
  58. package/dist/core/attention-native.js +14 -2
  59. package/dist/core/attention-native.js.map +1 -1
  60. package/dist/core/gnn-wrapper.d.ts.map +1 -1
  61. package/dist/core/gnn-wrapper.js +14 -0
  62. package/dist/core/gnn-wrapper.js.map +1 -1
  63. package/dist/embeddings/index.d.ts +17 -0
  64. package/dist/embeddings/index.d.ts.map +1 -0
  65. package/dist/embeddings/index.js +17 -0
  66. package/dist/embeddings/index.js.map +1 -0
  67. package/dist/embeddings/neural-substrate.d.ts +206 -0
  68. package/dist/embeddings/neural-substrate.d.ts.map +1 -0
  69. package/dist/embeddings/neural-substrate.js +629 -0
  70. package/dist/embeddings/neural-substrate.js.map +1 -0
  71. package/dist/embeddings/optimized-embedder.d.ts +103 -0
  72. package/dist/embeddings/optimized-embedder.d.ts.map +1 -0
  73. package/dist/embeddings/optimized-embedder.js +730 -0
  74. package/dist/embeddings/optimized-embedder.js.map +1 -0
  75. package/dist/examples/embedding-geometry.d.ts +105 -0
  76. package/dist/examples/embedding-geometry.d.ts.map +1 -0
  77. package/dist/examples/embedding-geometry.js +528 -0
  78. package/dist/examples/embedding-geometry.js.map +1 -0
  79. package/dist/federation/SecurityManager.d.ts +11 -2
  80. package/dist/federation/SecurityManager.d.ts.map +1 -1
  81. package/dist/federation/SecurityManager.js +50 -17
  82. package/dist/federation/SecurityManager.js.map +1 -1
  83. package/dist/federation/integrations/supabase-adapter-debug.js +3 -3
  84. package/dist/federation/integrations/supabase-adapter-debug.js.map +1 -1
  85. package/dist/hooks/swarm-learning-optimizer.js +5 -5
  86. package/dist/hooks/swarm-learning-optimizer.js.map +1 -1
  87. package/dist/index.d.ts +5 -3
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +89 -51
  90. package/dist/index.js.map +1 -1
  91. package/dist/intelligence/IntelligenceStore.d.ts +35 -26
  92. package/dist/intelligence/IntelligenceStore.d.ts.map +1 -1
  93. package/dist/intelligence/IntelligenceStore.js +308 -123
  94. package/dist/intelligence/IntelligenceStore.js.map +1 -1
  95. package/dist/intelligence/RuVectorIntelligence.d.ts +26 -1
  96. package/dist/intelligence/RuVectorIntelligence.d.ts.map +1 -1
  97. package/dist/intelligence/RuVectorIntelligence.js +49 -10
  98. package/dist/intelligence/RuVectorIntelligence.js.map +1 -1
  99. package/dist/intelligence/agent-booster-enhanced.d.ts +1 -0
  100. package/dist/intelligence/agent-booster-enhanced.d.ts.map +1 -1
  101. package/dist/intelligence/agent-booster-enhanced.js +24 -3
  102. package/dist/intelligence/agent-booster-enhanced.js.map +1 -1
  103. package/dist/intelligence/index.d.ts +29 -3
  104. package/dist/intelligence/index.d.ts.map +1 -1
  105. package/dist/intelligence/index.js +13 -3
  106. package/dist/intelligence/index.js.map +1 -1
  107. package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
  108. package/dist/mcp/claudeFlowSdkServer.js +162 -115
  109. package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
  110. package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js +5 -5
  111. package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js.map +1 -1
  112. package/dist/mcp/fastmcp/tools/swarm/init.d.ts.map +1 -1
  113. package/dist/mcp/fastmcp/tools/swarm/init.js +36 -7
  114. package/dist/mcp/fastmcp/tools/swarm/init.js.map +1 -1
  115. package/dist/mcp/fastmcp/tools/swarm/spawn.d.ts.map +1 -1
  116. package/dist/mcp/fastmcp/tools/swarm/spawn.js +47 -8
  117. package/dist/mcp/fastmcp/tools/swarm/spawn.js.map +1 -1
  118. package/dist/mcp/tools/agent-booster-tools.d.ts +15 -1
  119. package/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -1
  120. package/dist/mcp/tools/agent-booster-tools.js +79 -63
  121. package/dist/mcp/tools/agent-booster-tools.js.map +1 -1
  122. package/dist/mcp/tools/sona-tools.d.ts.map +1 -1
  123. package/dist/mcp/tools/sona-tools.js +6 -0
  124. package/dist/mcp/tools/sona-tools.js.map +1 -1
  125. package/dist/memory/SharedMemoryPool.d.ts +103 -0
  126. package/dist/memory/SharedMemoryPool.d.ts.map +1 -0
  127. package/dist/memory/SharedMemoryPool.js +263 -0
  128. package/dist/memory/SharedMemoryPool.js.map +1 -0
  129. package/dist/optimizations/agent-booster-migration.d.ts +2 -1
  130. package/dist/optimizations/agent-booster-migration.d.ts.map +1 -1
  131. package/dist/optimizations/agent-booster-migration.js +69 -45
  132. package/dist/optimizations/agent-booster-migration.js.map +1 -1
  133. package/dist/orchestration/index.d.ts +11 -0
  134. package/dist/orchestration/index.d.ts.map +1 -0
  135. package/dist/orchestration/index.js +10 -0
  136. package/dist/orchestration/index.js.map +1 -0
  137. package/dist/orchestration/memory-plane-types.d.ts +23 -0
  138. package/dist/orchestration/memory-plane-types.d.ts.map +1 -0
  139. package/dist/orchestration/memory-plane-types.js +5 -0
  140. package/dist/orchestration/memory-plane-types.js.map +1 -0
  141. package/dist/orchestration/memory-plane.d.ts +41 -0
  142. package/dist/orchestration/memory-plane.d.ts.map +1 -0
  143. package/dist/orchestration/memory-plane.js +84 -0
  144. package/dist/orchestration/memory-plane.js.map +1 -0
  145. package/dist/orchestration/orchestration-client.d.ts +104 -0
  146. package/dist/orchestration/orchestration-client.d.ts.map +1 -0
  147. package/dist/orchestration/orchestration-client.js +94 -0
  148. package/dist/orchestration/orchestration-client.js.map +1 -0
  149. package/dist/orchestration/orchestration-runtime.d.ts +26 -0
  150. package/dist/orchestration/orchestration-runtime.d.ts.map +1 -0
  151. package/dist/orchestration/orchestration-runtime.js +78 -0
  152. package/dist/orchestration/orchestration-runtime.js.map +1 -0
  153. package/dist/orchestration/orchestration-types.d.ts +124 -0
  154. package/dist/orchestration/orchestration-types.d.ts.map +1 -0
  155. package/dist/orchestration/orchestration-types.js +7 -0
  156. package/dist/orchestration/orchestration-types.js.map +1 -0
  157. package/dist/proxy/anthropic-to-openrouter.js.map +1 -1
  158. package/dist/proxy/anthropic-to-requesty.js.map +1 -1
  159. package/dist/proxy/quic-proxy.d.ts +0 -1
  160. package/dist/proxy/quic-proxy.d.ts.map +1 -1
  161. package/dist/proxy/quic-proxy.js +2 -2
  162. package/dist/proxy/quic-proxy.js.map +1 -1
  163. package/dist/reasoningbank/AdvancedMemory.js +1 -1
  164. package/dist/reasoningbank/AdvancedMemory.js.map +1 -1
  165. package/dist/reasoningbank/HybridBackend.d.ts.map +1 -1
  166. package/dist/reasoningbank/HybridBackend.js +2 -5
  167. package/dist/reasoningbank/HybridBackend.js.map +1 -1
  168. package/dist/reasoningbank/backend-selector.d.ts +10 -0
  169. package/dist/reasoningbank/backend-selector.d.ts.map +1 -1
  170. package/dist/reasoningbank/backend-selector.js +45 -5
  171. package/dist/reasoningbank/backend-selector.js.map +1 -1
  172. package/dist/reasoningbank/core/consolidate.d.ts.map +1 -1
  173. package/dist/reasoningbank/core/consolidate.js +113 -45
  174. package/dist/reasoningbank/core/consolidate.js.map +1 -1
  175. package/dist/reasoningbank/index-new.d.ts +1 -6
  176. package/dist/reasoningbank/index-new.d.ts.map +1 -1
  177. package/dist/reasoningbank/index-new.js +1 -6
  178. package/dist/reasoningbank/index-new.js.map +1 -1
  179. package/dist/reasoningbank/index.d.ts +6 -0
  180. package/dist/reasoningbank/index.d.ts.map +1 -1
  181. package/dist/reasoningbank/index.js +6 -13
  182. package/dist/reasoningbank/index.js.map +1 -1
  183. package/dist/reasoningbank/utils/embeddings.d.ts +1 -0
  184. package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -1
  185. package/dist/reasoningbank/utils/embeddings.js +53 -26
  186. package/dist/reasoningbank/utils/embeddings.js.map +1 -1
  187. package/dist/router/index.d.ts +2 -1
  188. package/dist/router/index.d.ts.map +1 -1
  189. package/dist/router/index.js +1 -0
  190. package/dist/router/index.js.map +1 -1
  191. package/dist/router/providers/ollama.d.ts +20 -0
  192. package/dist/router/providers/ollama.d.ts.map +1 -0
  193. package/dist/router/providers/ollama.js +242 -0
  194. package/dist/router/providers/ollama.js.map +1 -0
  195. package/dist/router/providers/onnx-local-optimized.d.ts +2 -0
  196. package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
  197. package/dist/router/providers/onnx-local-optimized.js +10 -0
  198. package/dist/router/providers/onnx-local-optimized.js.map +1 -1
  199. package/dist/router/providers/onnx-local.d.ts +1 -0
  200. package/dist/router/providers/onnx-local.d.ts.map +1 -1
  201. package/dist/router/providers/onnx-local.js +22 -5
  202. package/dist/router/providers/onnx-local.js.map +1 -1
  203. package/dist/router/router.d.ts.map +1 -1
  204. package/dist/router/router.js +39 -23
  205. package/dist/router/router.js.map +1 -1
  206. package/dist/sdk/index.d.ts +2 -1
  207. package/dist/sdk/index.d.ts.map +1 -1
  208. package/dist/sdk/index.js +3 -1
  209. package/dist/sdk/index.js.map +1 -1
  210. package/dist/services/embedding-service.js.map +1 -1
  211. package/dist/services/sona-agent-training.d.ts +1 -0
  212. package/dist/services/sona-agent-training.d.ts.map +1 -1
  213. package/dist/services/sona-agent-training.js.map +1 -1
  214. package/dist/services/sona-agentdb-integration.d.ts.map +1 -1
  215. package/dist/services/sona-agentdb-integration.js +9 -6
  216. package/dist/services/sona-agentdb-integration.js.map +1 -1
  217. package/dist/services/sona-service.d.ts.map +1 -1
  218. package/dist/services/sona-service.js +6 -5
  219. package/dist/services/sona-service.js.map +1 -1
  220. package/dist/utils/cli.d.ts +1 -1
  221. package/dist/utils/cli.d.ts.map +1 -1
  222. package/dist/utils/cli.js +21 -0
  223. package/dist/utils/cli.js.map +1 -1
  224. package/dist/utils/index.d.ts +6 -0
  225. package/dist/utils/index.d.ts.map +1 -0
  226. package/dist/utils/index.js +6 -0
  227. package/dist/utils/index.js.map +1 -0
  228. package/dist/utils/model-cache.d.ts +61 -0
  229. package/dist/utils/model-cache.d.ts.map +1 -0
  230. package/dist/utils/model-cache.js +176 -0
  231. package/dist/utils/model-cache.js.map +1 -0
  232. package/dist/utils/suppress-warnings.d.ts +19 -0
  233. package/dist/utils/suppress-warnings.d.ts.map +1 -0
  234. package/dist/utils/suppress-warnings.js +59 -0
  235. package/dist/utils/suppress-warnings.js.map +1 -0
  236. package/dist/workers/consolidated-phases.d.ts +40 -0
  237. package/dist/workers/consolidated-phases.d.ts.map +1 -0
  238. package/dist/workers/consolidated-phases.js +497 -0
  239. package/dist/workers/consolidated-phases.js.map +1 -0
  240. package/dist/workers/custom-worker-config.d.ts +133 -0
  241. package/dist/workers/custom-worker-config.d.ts.map +1 -0
  242. package/dist/workers/custom-worker-config.js +215 -0
  243. package/dist/workers/custom-worker-config.js.map +1 -0
  244. package/dist/workers/custom-worker-factory.d.ts +89 -0
  245. package/dist/workers/custom-worker-factory.d.ts.map +1 -0
  246. package/dist/workers/custom-worker-factory.js +404 -0
  247. package/dist/workers/custom-worker-factory.js.map +1 -0
  248. package/dist/workers/dispatch-service.d.ts +123 -0
  249. package/dist/workers/dispatch-service.d.ts.map +1 -0
  250. package/dist/workers/dispatch-service.js +1024 -0
  251. package/dist/workers/dispatch-service.js.map +1 -0
  252. package/dist/workers/hooks-integration.d.ts +79 -0
  253. package/dist/workers/hooks-integration.d.ts.map +1 -0
  254. package/dist/workers/hooks-integration.js +286 -0
  255. package/dist/workers/hooks-integration.js.map +1 -0
  256. package/dist/workers/index.d.ts +42 -0
  257. package/dist/workers/index.d.ts.map +1 -0
  258. package/dist/workers/index.js +52 -0
  259. package/dist/workers/index.js.map +1 -0
  260. package/dist/workers/mcp-tools.d.ts +56 -0
  261. package/dist/workers/mcp-tools.d.ts.map +1 -0
  262. package/dist/workers/mcp-tools.js +359 -0
  263. package/dist/workers/mcp-tools.js.map +1 -0
  264. package/dist/workers/phase-executors.d.ts +22 -0
  265. package/dist/workers/phase-executors.d.ts.map +1 -0
  266. package/dist/workers/phase-executors.js +445 -0
  267. package/dist/workers/phase-executors.js.map +1 -0
  268. package/dist/workers/resource-governor.d.ts +75 -0
  269. package/dist/workers/resource-governor.d.ts.map +1 -0
  270. package/dist/workers/resource-governor.js +187 -0
  271. package/dist/workers/resource-governor.js.map +1 -0
  272. package/dist/workers/ruvector-integration.d.ts +163 -0
  273. package/dist/workers/ruvector-integration.d.ts.map +1 -0
  274. package/dist/workers/ruvector-integration.js +543 -0
  275. package/dist/workers/ruvector-integration.js.map +1 -0
  276. package/dist/workers/ruvector-native-integration.d.ts +91 -0
  277. package/dist/workers/ruvector-native-integration.d.ts.map +1 -0
  278. package/dist/workers/ruvector-native-integration.js +254 -0
  279. package/dist/workers/ruvector-native-integration.js.map +1 -0
  280. package/dist/workers/trigger-detector.d.ts +68 -0
  281. package/dist/workers/trigger-detector.d.ts.map +1 -0
  282. package/dist/workers/trigger-detector.js +281 -0
  283. package/dist/workers/trigger-detector.js.map +1 -0
  284. package/dist/workers/types.d.ts +145 -0
  285. package/dist/workers/types.d.ts.map +1 -0
  286. package/dist/workers/types.js +6 -0
  287. package/dist/workers/types.js.map +1 -0
  288. package/dist/workers/worker-agent-integration.d.ts +140 -0
  289. package/dist/workers/worker-agent-integration.d.ts.map +1 -0
  290. package/dist/workers/worker-agent-integration.js +471 -0
  291. package/dist/workers/worker-agent-integration.js.map +1 -0
  292. package/dist/workers/worker-benchmarks.d.ts +88 -0
  293. package/dist/workers/worker-benchmarks.d.ts.map +1 -0
  294. package/dist/workers/worker-benchmarks.js +452 -0
  295. package/dist/workers/worker-benchmarks.js.map +1 -0
  296. package/dist/workers/worker-registry.d.ts +85 -0
  297. package/dist/workers/worker-registry.d.ts.map +1 -0
  298. package/dist/workers/worker-registry.js +547 -0
  299. package/dist/workers/worker-registry.js.map +1 -0
  300. package/docs/embeddings/EMBEDDING_GEOMETRY.md +935 -0
  301. package/package.json +26 -8
  302. package/scripts/postinstall.js +45 -4
  303. package/wasm/reasoningbank/reasoningbank_wasm.js +1 -1
  304. package/wasm/reasoningbank/reasoningbank_wasm_bg.js +54 -54
  305. package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm +0 -0
  306. package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm.d.ts +4 -3
  307. package/.claude/agents/test-neural.md +0 -14
  308. /package/.claude/agents/analysis/{code-review/analyze-code-quality.md → analyze-code-quality.md} +0 -0
  309. /package/.claude/agents/architecture/{system-design/arch-system-design.md → arch-system-design.md} +0 -0
  310. /package/.claude/agents/data/{ml/data-ml-model.md → data-ml-model.md} +0 -0
  311. /package/.claude/agents/development/{backend/dev-backend-api.md → dev-backend-api.md} +0 -0
  312. /package/.claude/agents/devops/{ci-cd/ops-cicd-github.md → ops-cicd-github.md} +0 -0
  313. /package/.claude/agents/documentation/{api-docs/docs-api-openapi.md → docs-api-openapi.md} +0 -0
  314. /package/.claude/agents/specialized/{mobile/spec-mobile-react-native.md → spec-mobile-react-native.md} +0 -0
  315. /package/.claude/agents/testing/{validation/production-validator.md → production-validator.md} +0 -0
  316. /package/.claude/agents/testing/{unit/tdd-london-swarm.md → tdd-london-swarm.md} +0 -0
@@ -1,29 +1,208 @@
1
1
  /**
2
2
  * IntelligenceStore - SQLite persistence for RuVector intelligence layer
3
3
  *
4
- * Cross-platform (Linux, macOS, Windows) persistent storage for:
5
- * - Learning trajectories
6
- * - Routing patterns
7
- * - SONA adaptations
8
- * - HNSW vectors
4
+ * Uses sql.js (pure JS SQLite) as primary backend for cross-platform compatibility
5
+ * Falls back to better-sqlite3 only if sql.js fails
9
6
  */
10
- import Database from 'better-sqlite3';
11
- import { existsSync, mkdirSync } from 'fs';
7
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
12
8
  import { dirname, join } from 'path';
13
9
  import { homedir } from 'os';
14
- export class IntelligenceStore {
10
+ // sql.js wrapper
11
+ class SqlJsWrapper {
15
12
  db;
13
+ dbPath;
14
+ saveTimeout = null;
15
+ constructor(db, dbPath) {
16
+ this.db = db;
17
+ this.dbPath = dbPath;
18
+ }
19
+ scheduleSave() {
20
+ if (this.saveTimeout) {
21
+ clearTimeout(this.saveTimeout);
22
+ }
23
+ this.saveTimeout = setTimeout(() => {
24
+ this.saveNow();
25
+ }, 100); // Debounce saves
26
+ }
27
+ saveNow() {
28
+ try {
29
+ const data = this.db.export();
30
+ const buffer = Buffer.from(data);
31
+ writeFileSync(this.dbPath, buffer);
32
+ }
33
+ catch {
34
+ // Ignore save errors
35
+ }
36
+ }
37
+ run(sql, params) {
38
+ this.db.run(sql, params || []);
39
+ const lastId = this.db.exec('SELECT last_insert_rowid() as id')[0]?.values[0]?.[0] || 0;
40
+ const changes = this.db.getRowsModified();
41
+ this.scheduleSave();
42
+ return { lastInsertRowid: lastId, changes };
43
+ }
44
+ get(sql, params) {
45
+ const stmt = this.db.prepare(sql);
46
+ if (params)
47
+ stmt.bind(params);
48
+ if (stmt.step()) {
49
+ const columns = stmt.getColumnNames();
50
+ const values = stmt.get();
51
+ stmt.free();
52
+ const result = {};
53
+ columns.forEach((col, i) => {
54
+ result[col] = values[i];
55
+ });
56
+ return result;
57
+ }
58
+ stmt.free();
59
+ return undefined;
60
+ }
61
+ all(sql, params) {
62
+ const results = [];
63
+ const stmt = this.db.prepare(sql);
64
+ if (params)
65
+ stmt.bind(params);
66
+ while (stmt.step()) {
67
+ const columns = stmt.getColumnNames();
68
+ const values = stmt.get();
69
+ const row = {};
70
+ columns.forEach((col, i) => {
71
+ row[col] = values[i];
72
+ });
73
+ results.push(row);
74
+ }
75
+ stmt.free();
76
+ return results;
77
+ }
78
+ exec(sql) {
79
+ this.db.exec(sql);
80
+ this.scheduleSave();
81
+ }
82
+ close() {
83
+ if (this.saveTimeout) {
84
+ clearTimeout(this.saveTimeout);
85
+ }
86
+ this.saveNow();
87
+ this.db.close();
88
+ }
89
+ }
90
+ // better-sqlite3 wrapper
91
+ class BetterSqliteWrapper {
92
+ db;
93
+ constructor(db) {
94
+ this.db = db;
95
+ }
96
+ run(sql, params) {
97
+ const stmt = this.db.prepare(sql);
98
+ const result = params ? stmt.run(...params) : stmt.run();
99
+ return { lastInsertRowid: result.lastInsertRowid, changes: result.changes };
100
+ }
101
+ get(sql, params) {
102
+ const stmt = this.db.prepare(sql);
103
+ return params ? stmt.get(...params) : stmt.get();
104
+ }
105
+ all(sql, params) {
106
+ const stmt = this.db.prepare(sql);
107
+ return params ? stmt.all(...params) : stmt.all();
108
+ }
109
+ exec(sql) {
110
+ this.db.exec(sql);
111
+ }
112
+ close() {
113
+ this.db.close();
114
+ }
115
+ }
116
+ export class IntelligenceStore {
117
+ db = null;
118
+ dbPath;
119
+ initialized = false;
120
+ initPromise = null;
16
121
  static instance = null;
17
122
  constructor(dbPath) {
123
+ this.dbPath = dbPath;
124
+ }
125
+ /**
126
+ * Initialize the database (async to support sql.js)
127
+ */
128
+ async initialize() {
129
+ if (this.initialized)
130
+ return;
131
+ if (this.initPromise)
132
+ return this.initPromise;
133
+ this.initPromise = this.doInitialize();
134
+ await this.initPromise;
135
+ }
136
+ async doInitialize() {
18
137
  // Ensure directory exists
19
- const dir = dirname(dbPath);
138
+ const dir = dirname(this.dbPath);
20
139
  if (!existsSync(dir)) {
21
140
  mkdirSync(dir, { recursive: true });
22
141
  }
23
- this.db = new Database(dbPath);
24
- this.db.pragma('journal_mode = WAL'); // Better concurrent access
25
- this.db.pragma('synchronous = NORMAL'); // Good balance of speed/safety
26
- this.initSchema();
142
+ // Try sql.js first (pure JS, no native modules)
143
+ try {
144
+ const initSqlJs = (await import('sql.js')).default;
145
+ const SQL = await initSqlJs();
146
+ let db;
147
+ if (existsSync(this.dbPath)) {
148
+ const fileBuffer = readFileSync(this.dbPath);
149
+ db = new SQL.Database(fileBuffer);
150
+ }
151
+ else {
152
+ db = new SQL.Database();
153
+ }
154
+ this.db = new SqlJsWrapper(db, this.dbPath);
155
+ this.initialized = true;
156
+ this.initSchema();
157
+ return;
158
+ }
159
+ catch (e) {
160
+ // sql.js failed, try better-sqlite3
161
+ }
162
+ // Try better-sqlite3 as fallback
163
+ try {
164
+ const Database = (await import('better-sqlite3')).default;
165
+ const db = new Database(this.dbPath);
166
+ db.pragma('journal_mode = WAL');
167
+ db.pragma('synchronous = NORMAL');
168
+ this.db = new BetterSqliteWrapper(db);
169
+ this.initialized = true;
170
+ this.initSchema();
171
+ return;
172
+ }
173
+ catch (e) {
174
+ // Both failed, use in-memory fallback
175
+ }
176
+ // Last resort: in-memory sql.js (won't persist but won't crash)
177
+ try {
178
+ const initSqlJs = (await import('sql.js')).default;
179
+ const SQL = await initSqlJs();
180
+ const db = new SQL.Database();
181
+ this.db = new SqlJsWrapper(db, this.dbPath);
182
+ this.initialized = true;
183
+ this.initSchema();
184
+ console.error('[IntelligenceStore] Warning: Using in-memory database (persistence disabled)');
185
+ }
186
+ catch {
187
+ // Complete failure - create a no-op stub
188
+ this.db = {
189
+ run: () => ({ lastInsertRowid: 0, changes: 0 }),
190
+ get: () => undefined,
191
+ all: () => [],
192
+ exec: () => { },
193
+ close: () => { },
194
+ };
195
+ this.initialized = true;
196
+ console.error('[IntelligenceStore] Warning: Database unavailable, intelligence features disabled');
197
+ }
198
+ }
199
+ /**
200
+ * Ensure database is initialized before operations
201
+ */
202
+ async ensureInitialized() {
203
+ if (!this.initialized) {
204
+ await this.initialize();
205
+ }
27
206
  }
28
207
  /**
29
208
  * Get singleton instance
@@ -53,6 +232,8 @@ export class IntelligenceStore {
53
232
  * Initialize database schema
54
233
  */
55
234
  initSchema() {
235
+ if (!this.db)
236
+ return;
56
237
  this.db.exec(`
57
238
  -- Trajectories table
58
239
  CREATE TABLE IF NOT EXISTS trajectories (
@@ -106,158 +287,158 @@ export class IntelligenceStore {
106
287
 
107
288
  -- Initialize stats row if not exists
108
289
  INSERT OR IGNORE INTO stats (id) VALUES (1);
109
-
110
- -- Indexes for faster queries
111
- CREATE INDEX IF NOT EXISTS idx_trajectories_agent ON trajectories(agent);
112
- CREATE INDEX IF NOT EXISTS idx_trajectories_outcome ON trajectories(outcome);
113
- CREATE INDEX IF NOT EXISTS idx_patterns_task_type ON patterns(task_type);
114
- CREATE INDEX IF NOT EXISTS idx_routings_agent ON routings(recommended_agent);
115
- CREATE INDEX IF NOT EXISTS idx_routings_timestamp ON routings(timestamp);
116
290
  `);
291
+ // Create indexes separately (sql.js doesn't support CREATE INDEX IF NOT EXISTS in exec)
292
+ try {
293
+ this.db.exec(`CREATE INDEX IF NOT EXISTS idx_trajectories_agent ON trajectories(agent);`);
294
+ this.db.exec(`CREATE INDEX IF NOT EXISTS idx_trajectories_outcome ON trajectories(outcome);`);
295
+ this.db.exec(`CREATE INDEX IF NOT EXISTS idx_patterns_task_type ON patterns(task_type);`);
296
+ this.db.exec(`CREATE INDEX IF NOT EXISTS idx_routings_agent ON routings(recommended_agent);`);
297
+ this.db.exec(`CREATE INDEX IF NOT EXISTS idx_routings_timestamp ON routings(timestamp);`);
298
+ }
299
+ catch {
300
+ // Indexes may already exist
301
+ }
117
302
  }
118
303
  // ============ Trajectory Methods ============
119
304
  /**
120
305
  * Start a new trajectory
121
306
  */
122
- startTrajectory(taskDescription, agent) {
123
- const stmt = this.db.prepare(`
124
- INSERT INTO trajectories (task_description, agent, start_time)
125
- VALUES (?, ?, ?)
126
- `);
127
- const result = stmt.run(taskDescription, agent, Date.now());
128
- this.incrementStat('total_trajectories');
307
+ async startTrajectory(taskDescription, agent) {
308
+ await this.ensureInitialized();
309
+ if (!this.db)
310
+ return 0;
311
+ const result = this.db.run(`INSERT INTO trajectories (task_description, agent, start_time) VALUES (?, ?, ?)`, [taskDescription, agent, Date.now()]);
312
+ await this.incrementStat('total_trajectories');
129
313
  return result.lastInsertRowid;
130
314
  }
131
315
  /**
132
316
  * Add step to trajectory
133
317
  */
134
- addTrajectoryStep(trajectoryId) {
135
- const stmt = this.db.prepare(`
136
- UPDATE trajectories SET steps = steps + 1 WHERE id = ?
137
- `);
138
- stmt.run(trajectoryId);
318
+ async addTrajectoryStep(trajectoryId) {
319
+ await this.ensureInitialized();
320
+ if (!this.db)
321
+ return;
322
+ this.db.run(`UPDATE trajectories SET steps = steps + 1 WHERE id = ?`, [trajectoryId]);
139
323
  }
140
324
  /**
141
325
  * End trajectory with outcome
142
326
  */
143
- endTrajectory(trajectoryId, outcome, metadata) {
144
- const stmt = this.db.prepare(`
145
- UPDATE trajectories
146
- SET outcome = ?, end_time = ?, metadata = ?
147
- WHERE id = ?
148
- `);
149
- stmt.run(outcome, Date.now(), metadata ? JSON.stringify(metadata) : null, trajectoryId);
327
+ async endTrajectory(trajectoryId, outcome, metadata) {
328
+ await this.ensureInitialized();
329
+ if (!this.db)
330
+ return;
331
+ this.db.run(`UPDATE trajectories SET outcome = ?, end_time = ?, metadata = ? WHERE id = ?`, [outcome, Date.now(), metadata ? JSON.stringify(metadata) : null, trajectoryId]);
150
332
  if (outcome === 'success') {
151
- this.incrementStat('successful_trajectories');
333
+ await this.incrementStat('successful_trajectories');
152
334
  }
153
335
  }
154
336
  /**
155
337
  * Get active trajectories (no end_time)
156
338
  */
157
- getActiveTrajectories() {
158
- const stmt = this.db.prepare(`
159
- SELECT * FROM trajectories WHERE end_time IS NULL
160
- `);
161
- return stmt.all();
339
+ async getActiveTrajectories() {
340
+ await this.ensureInitialized();
341
+ if (!this.db)
342
+ return [];
343
+ return this.db.all(`SELECT * FROM trajectories WHERE end_time IS NULL`);
162
344
  }
163
345
  /**
164
346
  * Get recent trajectories
165
347
  */
166
- getRecentTrajectories(limit = 10) {
167
- const stmt = this.db.prepare(`
168
- SELECT * FROM trajectories ORDER BY start_time DESC LIMIT ?
169
- `);
170
- return stmt.all(limit);
348
+ async getRecentTrajectories(limit = 10) {
349
+ await this.ensureInitialized();
350
+ if (!this.db)
351
+ return [];
352
+ return this.db.all(`SELECT * FROM trajectories ORDER BY start_time DESC LIMIT ?`, [limit]);
171
353
  }
172
354
  // ============ Pattern Methods ============
173
355
  /**
174
356
  * Store a pattern
175
357
  */
176
- storePattern(taskType, approach, embedding) {
177
- const stmt = this.db.prepare(`
178
- INSERT INTO patterns (task_type, approach, embedding)
179
- VALUES (?, ?, ?)
180
- `);
358
+ async storePattern(taskType, approach, embedding) {
359
+ await this.ensureInitialized();
360
+ if (!this.db)
361
+ return 0;
181
362
  const embeddingBuffer = embedding ? Buffer.from(embedding.buffer) : null;
182
- const result = stmt.run(taskType, approach, embeddingBuffer);
183
- this.incrementStat('total_patterns');
363
+ const result = this.db.run(`INSERT INTO patterns (task_type, approach, embedding) VALUES (?, ?, ?)`, [taskType, approach, embeddingBuffer]);
364
+ await this.incrementStat('total_patterns');
184
365
  return result.lastInsertRowid;
185
366
  }
186
367
  /**
187
368
  * Update pattern usage
188
369
  */
189
- updatePatternUsage(patternId, wasSuccessful) {
190
- const stmt = this.db.prepare(`
191
- UPDATE patterns
192
- SET usage_count = usage_count + 1,
193
- success_rate = (success_rate * usage_count + ?) / (usage_count + 1),
194
- updated_at = strftime('%s', 'now')
195
- WHERE id = ?
196
- `);
197
- stmt.run(wasSuccessful ? 1 : 0, patternId);
370
+ async updatePatternUsage(patternId, wasSuccessful) {
371
+ await this.ensureInitialized();
372
+ if (!this.db)
373
+ return;
374
+ this.db.run(`UPDATE patterns SET usage_count = usage_count + 1, success_rate = (success_rate * usage_count + ?) / (usage_count + 1), updated_at = strftime('%s', 'now') WHERE id = ?`, [wasSuccessful ? 1 : 0, patternId]);
198
375
  }
199
376
  /**
200
377
  * Find patterns by task type
201
378
  */
202
- findPatterns(taskType, limit = 5) {
203
- const stmt = this.db.prepare(`
204
- SELECT * FROM patterns
205
- WHERE task_type LIKE ?
206
- ORDER BY success_rate DESC, usage_count DESC
207
- LIMIT ?
208
- `);
209
- return stmt.all(`%${taskType}%`, limit);
379
+ async findPatterns(taskType, limit = 5) {
380
+ await this.ensureInitialized();
381
+ if (!this.db)
382
+ return [];
383
+ return this.db.all(`SELECT * FROM patterns WHERE task_type LIKE ? ORDER BY success_rate DESC, usage_count DESC LIMIT ?`, [`%${taskType}%`, limit]);
210
384
  }
211
385
  // ============ Routing Methods ============
212
386
  /**
213
387
  * Record a routing decision
214
388
  */
215
- recordRouting(task, recommendedAgent, confidence, latencyMs) {
216
- const stmt = this.db.prepare(`
217
- INSERT INTO routings (task, recommended_agent, confidence, latency_ms)
218
- VALUES (?, ?, ?, ?)
219
- `);
220
- const result = stmt.run(task, recommendedAgent, confidence, latencyMs);
221
- this.incrementStat('total_routings');
389
+ async recordRouting(task, recommendedAgent, confidence, latencyMs) {
390
+ await this.ensureInitialized();
391
+ if (!this.db)
392
+ return 0;
393
+ const result = this.db.run(`INSERT INTO routings (task, recommended_agent, confidence, latency_ms) VALUES (?, ?, ?, ?)`, [task, recommendedAgent, confidence, latencyMs]);
394
+ await this.incrementStat('total_routings');
222
395
  return result.lastInsertRowid;
223
396
  }
224
397
  /**
225
398
  * Update routing outcome
226
399
  */
227
- updateRoutingOutcome(routingId, wasSuccessful) {
228
- const stmt = this.db.prepare(`
229
- UPDATE routings SET was_successful = ? WHERE id = ?
230
- `);
231
- stmt.run(wasSuccessful ? 1 : 0, routingId);
400
+ async updateRoutingOutcome(routingId, wasSuccessful) {
401
+ await this.ensureInitialized();
402
+ if (!this.db)
403
+ return;
404
+ this.db.run(`UPDATE routings SET was_successful = ? WHERE id = ?`, [wasSuccessful ? 1 : 0, routingId]);
232
405
  if (wasSuccessful) {
233
- this.incrementStat('successful_routings');
406
+ await this.incrementStat('successful_routings');
234
407
  }
235
408
  }
236
409
  /**
237
410
  * Get routing accuracy for an agent
238
411
  */
239
- getAgentAccuracy(agent) {
240
- const stmt = this.db.prepare(`
241
- SELECT
242
- COUNT(*) as total,
243
- SUM(was_successful) as successful
244
- FROM routings
245
- WHERE recommended_agent = ?
246
- `);
247
- const result = stmt.get(agent);
412
+ async getAgentAccuracy(agent) {
413
+ await this.ensureInitialized();
414
+ if (!this.db)
415
+ return { total: 0, successful: 0, accuracy: 0 };
416
+ const result = this.db.get(`SELECT COUNT(*) as total, SUM(was_successful) as successful FROM routings WHERE recommended_agent = ?`, [agent]);
248
417
  return {
249
- total: result.total || 0,
250
- successful: result.successful || 0,
251
- accuracy: result.total > 0 ? (result.successful || 0) / result.total : 0,
418
+ total: result?.total || 0,
419
+ successful: result?.successful || 0,
420
+ accuracy: result?.total ? (result.successful || 0) / result.total : 0,
252
421
  };
253
422
  }
254
423
  // ============ Stats Methods ============
255
424
  /**
256
425
  * Get all stats
257
426
  */
258
- getStats() {
259
- const stmt = this.db.prepare(`SELECT * FROM stats WHERE id = 1`);
260
- const row = stmt.get();
427
+ async getStats() {
428
+ await this.ensureInitialized();
429
+ if (!this.db) {
430
+ return {
431
+ totalTrajectories: 0,
432
+ successfulTrajectories: 0,
433
+ totalRoutings: 0,
434
+ successfulRoutings: 0,
435
+ totalPatterns: 0,
436
+ sonaAdaptations: 0,
437
+ hnswQueries: 0,
438
+ lastUpdated: Date.now(),
439
+ };
440
+ }
441
+ const row = this.db.get(`SELECT * FROM stats WHERE id = 1`);
261
442
  return {
262
443
  totalTrajectories: row?.total_trajectories || 0,
263
444
  successfulTrajectories: row?.successful_trajectories || 0,
@@ -272,31 +453,30 @@ export class IntelligenceStore {
272
453
  /**
273
454
  * Increment a stat counter
274
455
  */
275
- incrementStat(statName, amount = 1) {
276
- const stmt = this.db.prepare(`
277
- UPDATE stats SET ${statName} = ${statName} + ?, last_updated = strftime('%s', 'now')
278
- WHERE id = 1
279
- `);
280
- stmt.run(amount);
456
+ async incrementStat(statName, amount = 1) {
457
+ await this.ensureInitialized();
458
+ if (!this.db)
459
+ return;
460
+ this.db.run(`UPDATE stats SET ${statName} = ${statName} + ?, last_updated = strftime('%s', 'now') WHERE id = 1`, [amount]);
281
461
  }
282
462
  /**
283
463
  * Record SONA adaptation
284
464
  */
285
- recordSonaAdaptation() {
286
- this.incrementStat('sona_adaptations');
465
+ async recordSonaAdaptation() {
466
+ await this.incrementStat('sona_adaptations');
287
467
  }
288
468
  /**
289
469
  * Record HNSW query
290
470
  */
291
- recordHnswQuery() {
292
- this.incrementStat('hnsw_queries');
471
+ async recordHnswQuery() {
472
+ await this.incrementStat('hnsw_queries');
293
473
  }
294
474
  // ============ Utility Methods ============
295
475
  /**
296
476
  * Get summary for display (simplified for UI)
297
477
  */
298
- getSummary() {
299
- const stats = this.getStats();
478
+ async getSummary() {
479
+ const stats = await this.getStats();
300
480
  return {
301
481
  trajectories: stats.totalTrajectories,
302
482
  routings: stats.totalRoutings,
@@ -307,20 +487,18 @@ export class IntelligenceStore {
307
487
  /**
308
488
  * Get detailed summary for reports
309
489
  */
310
- getDetailedSummary() {
311
- const stats = this.getStats();
312
- const activeCount = this.getActiveTrajectories().length;
490
+ async getDetailedSummary() {
491
+ const stats = await this.getStats();
492
+ const active = await this.getActiveTrajectories();
313
493
  return {
314
494
  trajectories: {
315
495
  total: stats.totalTrajectories,
316
- active: activeCount,
496
+ active: active.length,
317
497
  successful: stats.successfulTrajectories,
318
498
  },
319
499
  routings: {
320
500
  total: stats.totalRoutings,
321
- accuracy: stats.totalRoutings > 0
322
- ? stats.successfulRoutings / stats.totalRoutings
323
- : 0,
501
+ accuracy: stats.totalRoutings > 0 ? stats.successfulRoutings / stats.totalRoutings : 0,
324
502
  },
325
503
  patterns: stats.totalPatterns,
326
504
  operations: {
@@ -333,13 +511,20 @@ export class IntelligenceStore {
333
511
  * Close database connection
334
512
  */
335
513
  close() {
336
- this.db.close();
514
+ if (this.db) {
515
+ this.db.close();
516
+ this.db = null;
517
+ }
518
+ this.initialized = false;
337
519
  IntelligenceStore.instance = null;
338
520
  }
339
521
  /**
340
522
  * Reset all data (for testing)
341
523
  */
342
- reset() {
524
+ async reset() {
525
+ await this.ensureInitialized();
526
+ if (!this.db)
527
+ return;
343
528
  this.db.exec(`
344
529
  DELETE FROM trajectories;
345
530
  DELETE FROM patterns;