agentic-flow 2.0.7 → 2.0.9

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 +11 -1
  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 +27 -9
  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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers.js","sourceRoot":"","sources":["../../../src/cli/commands/workers.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI Commands for Background Workers\n * Provides CLI interface for worker management\n */\n\nimport { Command } from 'commander';\nimport {\n getWorkerDispatchService,\n getTriggerDetector,\n getWorkerRegistry,\n getResourceGovernor,\n WorkerInfo,\n WorkerStatus,\n customWorkerManager,\n formatWorkerInfo,\n formatPresetList,\n WORKER_PRESETS,\n listPhaseExecutors\n} from '../../workers/index.js';\n\nexport function createWorkersCommand(): Command {\n const workers = new Command('workers')\n .description('Background worker management - non-blocking tasks that run silently')\n .addHelpCommand(true) // Enable 'workers help <subcommand>'\n .action(() => {\n // Default action when no subcommand provided - show help\n workers.outputHelp();\n });\n\n // Dispatch command\n workers\n .command('dispatch <prompt>')\n .description('Detect triggers in prompt and dispatch background workers')\n .option('-s, --session <id>', 'Session ID', `session-${Date.now()}`)\n .option('-j, --json', 'Output as JSON')\n .action(async (prompt: string, options: { session: string; json?: boolean }) => {\n try {\n const dispatcher = getWorkerDispatchService();\n const { triggers, workerIds } = await dispatcher.dispatchFromPrompt(prompt, options.session);\n\n if (options.json) {\n console.log(JSON.stringify({ triggers, workerIds }, null, 2));\n } else {\n if (triggers.length === 0) {\n console.log('No triggers detected in prompt');\n return;\n }\n\n console.log('\\n\\u26A1 Background Workers Spawned:\\n');\n for (let i = 0; i < triggers.length; i++) {\n const trigger = triggers[i];\n const workerId = workerIds[i];\n console.log(` \\u2022 ${trigger.keyword}: ${workerId}`);\n if (trigger.topic) {\n console.log(` Topic: \"${trigger.topic}\"`);\n }\n }\n console.log(`\\nUse 'workers status' to monitor progress\\n`);\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Dispatch-prompt command (hook-optimized, silent background dispatch)\n workers\n .command('dispatch-prompt <prompt>')\n .description('Dispatch workers from prompt (hook-optimized, silent)')\n .option('-s, --session <id>', 'Session ID', `session-${Date.now()}`)\n .option('-j, --json', 'Output as JSON')\n .action(async (prompt: string, options: { session: string; json?: boolean }) => {\n try {\n const detector = getTriggerDetector();\n\n // Fast check if any triggers present\n if (!detector.hasTriggers(prompt)) {\n if (options.json) {\n console.log(JSON.stringify({ dispatched: false, triggers: [], workerIds: [] }));\n }\n return;\n }\n\n const dispatcher = getWorkerDispatchService();\n const { triggers, workerIds } = await dispatcher.dispatchFromPrompt(prompt, options.session);\n\n if (options.json) {\n console.log(JSON.stringify({\n dispatched: workerIds.length > 0,\n triggers: triggers.map(t => t.keyword),\n workerIds\n }));\n } else if (workerIds.length > 0) {\n // Minimal output for hook context\n console.log(`\\u26A1 ${triggers.map(t => t.keyword).join(', ')}`);\n }\n } catch {\n // Silent failure for hooks - never block conversation\n if (options.json) {\n console.log(JSON.stringify({ dispatched: false, triggers: [], workerIds: [], error: true }));\n }\n }\n });\n\n // Status command\n workers\n .command('status [workerId]')\n .description('Get worker status')\n .option('-s, --session <id>', 'Filter by session')\n .option('-a, --active', 'Show only active workers')\n .option('-j, --json', 'Output as JSON')\n .action(async (workerId: string | undefined, options: {\n session?: string;\n active?: boolean;\n json?: boolean\n }) => {\n try {\n const registry = getWorkerRegistry();\n const governor = getResourceGovernor();\n\n if (workerId) {\n // Single worker status\n const worker = registry.get(workerId);\n if (!worker) {\n console.error(`Worker not found: ${workerId}`);\n process.exit(1);\n }\n\n if (options.json) {\n console.log(JSON.stringify(worker, null, 2));\n } else {\n displayWorkerDetails(worker);\n }\n } else {\n // All workers status\n const workers = options.active\n ? registry.getActive(options.session)\n : registry.getAll({ sessionId: options.session, limit: 20 });\n\n if (options.json) {\n console.log(JSON.stringify(workers, null, 2));\n } else {\n displayWorkerDashboard(workers, governor.getStats());\n }\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Cancel command\n workers\n .command('cancel <workerId>')\n .description('Cancel a running worker')\n .action(async (workerId: string) => {\n try {\n const dispatcher = getWorkerDispatchService();\n const cancelled = dispatcher.cancel(workerId);\n\n if (cancelled) {\n console.log(`\\u2705 Worker ${workerId} cancelled`);\n } else {\n console.log(`\\u274C Could not cancel ${workerId} - may not be running`);\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // List triggers command\n workers\n .command('triggers')\n .description('List all available trigger keywords')\n .option('-j, --json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n try {\n const detector = getTriggerDetector();\n const configs = detector.getAllConfigs();\n const stats = detector.getStats();\n\n if (options.json) {\n const triggers = Array.from(configs.entries()).map(([keyword, config]) => ({\n keyword,\n ...config,\n topicExtractor: config.topicExtractor?.source\n }));\n console.log(JSON.stringify({ triggers, cooldowns: stats.cooldowns }, null, 2));\n } else {\n console.log('\\n\\u26A1 Available Background Worker Triggers:\\n');\n console.log('\\u250C\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u252C\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u252C\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2510');\n console.log('\\u2502 Trigger \\u2502 Priority \\u2502 Description \\u2502');\n console.log('\\u251C\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u253C\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u253C\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2524');\n\n Array.from(configs.entries()).forEach(([keyword, config]) => {\n const cooldown = stats.cooldowns[keyword];\n const cooldownStr = cooldown ? ` (${Math.ceil(cooldown/1000)}s)` : '';\n console.log(\n `\\u2502 ${keyword.padEnd(12)} \\u2502 ${config.priority.padEnd(8)} \\u2502 ${config.description.slice(0, 38).padEnd(38)} \\u2502`\n );\n });\n\n console.log('\\u2514\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2534\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2534\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2518\\n');\n console.log('Usage: Include trigger word in your prompt');\n console.log('Example: \"ultralearn how authentication works\"\\n');\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Stats command\n workers\n .command('stats')\n .description('Get worker statistics')\n .option('-t, --timeframe <period>', 'Timeframe: 1h, 24h, 7d', '24h')\n .option('-j, --json', 'Output as JSON')\n .action(async (options: { timeframe: '1h' | '24h' | '7d'; json?: boolean }) => {\n try {\n const registry = getWorkerRegistry();\n const governor = getResourceGovernor();\n\n // Get stats with fallbacks for when db isn't available\n let registryStats: any = { total: 0, byStatus: {}, byTrigger: {}, avgDuration: 0 };\n try {\n registryStats = registry.getStats(options.timeframe) || registryStats;\n } catch {\n // Database not available - use defaults\n }\n\n let resourceStats: any = { activeWorkers: 0, memoryUsage: { heapUsed: 0 } };\n try {\n resourceStats = governor.getStats() || resourceStats;\n } catch {\n // Resource governor not available\n }\n\n let availability: any = { usedSlots: 0, totalSlots: 10 };\n try {\n availability = governor.getAvailability() || availability;\n } catch {\n // Availability not available\n }\n\n const stats = {\n ...registryStats,\n resources: resourceStats,\n availability\n };\n\n if (options.json) {\n console.log(JSON.stringify(stats, null, 2));\n } else {\n displayStats(stats, options.timeframe);\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Results command - view actual analysis data\n workers\n .command('results [workerId]')\n .description('View worker analysis results (files analyzed, patterns found, etc.)')\n .option('-s, --session <id>', 'Filter by session')\n .option('-t, --trigger <type>', 'Filter by trigger type')\n .option('-j, --json', 'Output as JSON')\n .action(async (workerId: string | undefined, options: {\n session?: string;\n trigger?: string;\n json?: boolean\n }) => {\n try {\n const registry = getWorkerRegistry();\n\n if (workerId) {\n // Single worker results\n const worker = registry.get(workerId);\n if (!worker) {\n console.error(`Worker not found: ${workerId}`);\n process.exit(1);\n }\n\n if (options.json) {\n console.log(JSON.stringify({\n workerId: worker.id,\n trigger: worker.trigger,\n topic: worker.topic,\n status: worker.status,\n results: worker.results || {}\n }, null, 2));\n } else {\n displayWorkerResults(worker);\n }\n } else {\n // All completed workers with results\n const workers = registry.getAll({\n sessionId: options.session,\n status: 'complete',\n limit: 20\n }).filter(w => w.results && Object.keys(w.results).length > 0);\n\n if (options.trigger) {\n const filtered = workers.filter(w => w.trigger === options.trigger);\n workers.length = 0;\n workers.push(...filtered);\n }\n\n if (options.json) {\n console.log(JSON.stringify(workers.map(w => ({\n workerId: w.id,\n trigger: w.trigger,\n topic: w.topic,\n results: w.results\n })), null, 2));\n } else {\n displayResultsSummary(workers);\n }\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Cleanup command\n workers\n .command('cleanup')\n .description('Cleanup old worker records')\n .option('-a, --age <hours>', 'Max age in hours', '24')\n .action(async (options: { age: string }) => {\n try {\n const registry = getWorkerRegistry();\n const maxAge = parseInt(options.age) * 60 * 60 * 1000;\n const cleaned = registry.cleanup(maxAge);\n console.log(`\\u2705 Cleaned up ${cleaned} old worker records`);\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // ============================================================================\n // Custom Worker Commands\n // ============================================================================\n\n // List presets command\n workers\n .command('presets')\n .description('List available custom worker presets')\n .option('-j, --json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n try {\n if (options.json) {\n console.log(JSON.stringify(WORKER_PRESETS, null, 2));\n } else {\n console.log(formatPresetList());\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // List phases command\n workers\n .command('phases')\n .description('List available phase executors for custom workers')\n .option('-j, --json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n try {\n const phases = listPhaseExecutors();\n\n if (options.json) {\n console.log(JSON.stringify({ phases }, null, 2));\n } else {\n console.log('\\n\\u26A1 Available Phase Executors:\\n');\n\n const categories: Record<string, string[]> = {\n 'Discovery': phases.filter(p => p.includes('discovery')),\n 'Analysis': phases.filter(p => p.includes('analysis')),\n 'Pattern': phases.filter(p => p.includes('extraction') || p.includes('detection')),\n 'Build': phases.filter(p => p.includes('graph')),\n 'Learning': phases.filter(p =>\n ['vectorization', 'embedding-generation', 'pattern-storage', 'sona-training'].includes(p)),\n 'Output': phases.filter(p =>\n ['summarization', 'report-generation', 'indexing'].includes(p))\n };\n\n for (const [category, categoryPhases] of Object.entries(categories)) {\n if (categoryPhases.length > 0) {\n console.log(` ${category}:`);\n categoryPhases.forEach(p => console.log(` \\u2022 ${p}`));\n }\n }\n console.log('\\nUse these phases in custom worker definitions.\\n');\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Create custom worker from preset\n workers\n .command('create <name>')\n .description('Create a custom worker from a preset')\n .option('-p, --preset <preset>', 'Preset to use', 'quick-scan')\n .option('-t, --triggers <triggers>', 'Comma-separated trigger keywords')\n .option('-d, --description <desc>', 'Worker description')\n .option('-j, --json', 'Output as JSON')\n .action(async (name: string, options: {\n preset: string;\n triggers?: string;\n description?: string;\n json?: boolean\n }) => {\n try {\n const triggers = options.triggers?.split(',').map(t => t.trim()) || [name];\n\n const worker = customWorkerManager.registerPreset(options.preset, {\n name,\n triggers,\n description: options.description\n });\n\n if (options.json) {\n console.log(JSON.stringify({\n created: true,\n name: worker.definition.name,\n preset: options.preset,\n triggers: [name, ...triggers]\n }, null, 2));\n } else {\n console.log(`\\n\\u2705 Created custom worker: ${name}\\n`);\n console.log(formatWorkerInfo(worker));\n console.log(`\\nUse trigger \"${name}\" or any of: ${triggers.join(', ')}\\n`);\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Run custom worker\n workers\n .command('run <nameOrTrigger>')\n .description('Run a custom worker by name or trigger')\n .option('-t, --topic <topic>', 'Topic to analyze')\n .option('-s, --session <id>', 'Session ID', `session-${Date.now()}`)\n .option('-j, --json', 'Output as JSON')\n .action(async (nameOrTrigger: string, options: {\n topic?: string;\n session: string;\n json?: boolean\n }) => {\n try {\n const worker = customWorkerManager.get(nameOrTrigger);\n if (!worker) {\n // Check if it's a preset\n if (WORKER_PRESETS[nameOrTrigger]) {\n console.log(`\"${nameOrTrigger}\" is a preset. Create a worker first:`);\n console.log(` workers create my-worker --preset ${nameOrTrigger}`);\n process.exit(1);\n }\n console.error(`Custom worker not found: ${nameOrTrigger}`);\n console.log('Available workers:', customWorkerManager.list().map(w => w.definition.name).join(', ') || 'none');\n console.log('Available presets:', customWorkerManager.listPresets().join(', '));\n process.exit(1);\n }\n\n console.log(`\\n\\u26A1 Running custom worker: ${worker.definition.name}\\n`);\n\n const context: import('../../workers/types.js').WorkerContext = {\n workerId: `custom-${Date.now()}`,\n sessionId: options.session || `session-${Date.now()}`,\n trigger: nameOrTrigger as import('../../workers/types.js').WorkerTrigger,\n topic: options.topic || null,\n startTime: Date.now(),\n signal: new AbortController().signal,\n onProgress: () => {},\n onMemoryDeposit: () => {}\n };\n\n const results = await worker.execute(context);\n\n if (options.json) {\n console.log(JSON.stringify(results, null, 2));\n } else {\n console.log(`Status: ${results.success ? '\\u2705 Success' : '\\u274C Failed'}`);\n console.log(`Files Analyzed: ${results.data.files_analyzed || 0}`);\n console.log(`Patterns Found: ${results.data.patterns_found || 0}`);\n console.log(`Bytes Processed: ${((results.data.bytes_processed as number) / 1024).toFixed(1)} KB`);\n console.log(`Execution Time: ${results.data.executionTimeMs}ms`);\n\n if (results.data.sample_patterns && Array.isArray(results.data.sample_patterns)) {\n console.log('\\nSample Patterns:');\n results.data.sample_patterns.slice(0, 5).forEach((p: string) => {\n console.log(` \\u2022 ${p.slice(0, 80)}`);\n });\n }\n\n if (results.data.errors && Array.isArray(results.data.errors)) {\n console.log('\\nErrors:');\n results.data.errors.forEach((e: string) => console.log(` \\u26A0 ${e}`));\n }\n console.log();\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // List custom workers\n workers\n .command('custom')\n .description('List registered custom workers')\n .option('-j, --json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n try {\n const workers = customWorkerManager.list();\n\n if (options.json) {\n console.log(JSON.stringify(workers.map(w => ({\n name: w.definition.name,\n description: w.definition.description,\n triggers: [w.definition.name, ...(w.definition.triggers || [])],\n phases: w.definition.phases.map(p => p.type)\n })), null, 2));\n } else {\n if (workers.length === 0) {\n console.log('\\nNo custom workers registered.\\n');\n console.log('Create one: workers create my-worker --preset quick-scan');\n console.log('Load from config: workers load-config ./workers.yaml\\n');\n return;\n }\n\n console.log(`\\n\\u26A1 Custom Workers (${workers.length}):\\n`);\n for (const worker of workers) {\n console.log(` ${worker.definition.name}`);\n console.log(` ${worker.definition.description}`);\n console.log(` Triggers: ${[worker.definition.name, ...(worker.definition.triggers || [])].join(', ')}`);\n console.log(` Phases: ${worker.definition.phases.map(p => p.type).join(' \\u2192 ')}`);\n console.log();\n }\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Load custom workers from config file\n workers\n .command('load-config [path]')\n .description('Load custom workers from a YAML/JSON config file')\n .option('-j, --json', 'Output as JSON')\n .action(async (configPath: string | undefined, options: { json?: boolean }) => {\n try {\n const count = await customWorkerManager.loadFromConfig(configPath);\n\n if (options.json) {\n console.log(JSON.stringify({\n loaded: count,\n workers: customWorkerManager.list().map(w => w.definition.name)\n }, null, 2));\n } else {\n if (count === 0) {\n console.log('\\nNo config file found.');\n console.log('Expected: workers.yaml, workers.yml, or workers.json');\n console.log('Or specify path: workers load-config ./my-workers.yaml\\n');\n return;\n }\n console.log(`\\n\\u2705 Loaded ${count} custom worker(s)\\n`);\n customWorkerManager.list().forEach(w => {\n console.log(` \\u2022 ${w.definition.name}: ${w.definition.description}`);\n });\n console.log();\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Generate example config\n workers\n .command('init-config')\n .description('Generate an example workers.yaml config file')\n .option('-o, --output <path>', 'Output path', 'workers.yaml')\n .action(async (options: { output: string }) => {\n try {\n const fs = await import('fs/promises');\n const config = customWorkerManager.generateExampleConfig();\n await fs.writeFile(options.output, config);\n console.log(`\\n\\u2705 Created ${options.output}\\n`);\n console.log('Edit the file to customize your workers, then run:');\n console.log(` workers load-config ${options.output}\\n`);\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Inject context command (for hook usage)\n workers\n .command('inject-context <prompt>')\n .description('Search for relevant background worker results to inject as context')\n .option('-s, --session <id>', 'Session ID')\n .option('-j, --json', 'Output as JSON')\n .action(async (prompt: string, options: { session?: string; json?: boolean }) => {\n try {\n // Search completed workers for relevant results\n const registry = getWorkerRegistry();\n const completed = registry.getAll({\n sessionId: options.session,\n status: 'complete',\n limit: 50\n });\n\n // Simple keyword matching for now\n const keywords = prompt.toLowerCase().split(/\\s+/).filter(w => w.length > 3);\n const relevant = completed.filter(w => {\n const workerText = `${w.trigger} ${w.topic || ''}`.toLowerCase();\n return keywords.some(kw => workerText.includes(kw));\n });\n\n if (relevant.length === 0) {\n // No context to inject\n return;\n }\n\n const context = relevant.slice(0, 3).map(w => ({\n source: 'background-worker',\n type: w.trigger,\n topic: w.topic,\n memoryKeys: w.resultKeys,\n completedAt: w.completedAt\n }));\n\n if (options.json) {\n console.log(JSON.stringify({ context }, null, 2));\n } else {\n console.log('<background-context>');\n console.log(JSON.stringify(context, null, 2));\n console.log('</background-context>');\n }\n } catch (error) {\n // Silent failure for hook usage\n if (options.json) {\n console.log(JSON.stringify({ context: [] }));\n }\n }\n });\n\n // ============================================================================\n // Native RuVector Worker Commands\n // ============================================================================\n\n // Native worker run command\n workers\n .command('native <type>')\n .description('Run native ruvector worker (security, analysis, learning)')\n .option('-p, --path <dir>', 'Working directory', process.cwd())\n .option('-j, --json', 'Output as JSON')\n .action(async (type: string, options: { path: string; json?: boolean }) => {\n try {\n const { nativeRunner, listNativePhases } = await import('../../workers/ruvector-native-integration.js');\n\n let result;\n switch (type) {\n case 'security':\n result = await nativeRunner.runSecurityScan(options.path);\n break;\n case 'analysis':\n result = await nativeRunner.runFullAnalysis(options.path);\n break;\n case 'learning':\n result = await nativeRunner.runLearning(options.path);\n break;\n case 'phases':\n const phases = listNativePhases();\n if (options.json) {\n console.log(JSON.stringify({ phases }, null, 2));\n } else {\n console.log('\\n\\u26A1 Native RuVector Phases:\\n');\n phases.forEach(p => console.log(` \\u2022 ${p}`));\n console.log();\n }\n return;\n default:\n console.error(`Unknown native worker type: ${type}`);\n console.log('Available: security, analysis, learning, phases');\n process.exit(1);\n }\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(`\\n\\u26A1 Native Worker: ${type}\\n`);\n console.log('\\u2550'.repeat(50));\n console.log(`Status: ${result.success ? '\\u2705 Success' : '\\u274C Failed'}`);\n console.log(`Phases: ${result.phases.join(' \\u2192 ')}`);\n console.log(`\\n\\uD83D\\uDCCA Metrics:`);\n console.log(` Files Analyzed: ${result.metrics.filesAnalyzed}`);\n console.log(` Patterns Found: ${result.metrics.patternsFound}`);\n console.log(` Embeddings: ${result.metrics.embeddingsGenerated}`);\n console.log(` Vectors Stored: ${result.metrics.vectorsStored}`);\n console.log(` Duration: ${result.metrics.durationMs}ms`);\n if (result.metrics.onnxLatencyMs) {\n console.log(` ONNX Latency: ${result.metrics.onnxLatencyMs}ms`);\n }\n if (result.metrics.throughputOpsPerSec) {\n console.log(` Throughput: ${result.metrics.throughputOpsPerSec.toFixed(1)} ops/s`);\n }\n\n // Show security findings if present\n if (result.data['security-scan']?.data?.vulnerabilities) {\n const vulns = result.data['security-scan'].data.vulnerabilities as any[];\n const summary = result.data['security-scan'].data.summary as any;\n console.log(`\\n\\uD83D\\uDD12 Security Findings:`);\n console.log(` High: ${summary?.high || 0} | Medium: ${summary?.medium || 0} | Low: ${summary?.low || 0}`);\n if (vulns.length > 0) {\n console.log('\\n Top Issues:');\n vulns.slice(0, 5).forEach((v: any) => {\n console.log(` \\u2022 [${v.severity}] ${v.type} in ${v.file.split('/').pop()}:${v.line}`);\n });\n }\n }\n\n // Show complexity if present\n if (result.data['complexity-analysis']?.data?.topFiles) {\n const complexity = result.data['complexity-analysis'].data as any;\n console.log(`\\n\\uD83D\\uDCC8 Complexity Analysis:`);\n console.log(` Avg Complexity: ${complexity.avgComplexity}`);\n console.log(` Total Lines: ${complexity.totalLines}`);\n }\n\n console.log('\\n' + '\\u2550'.repeat(50) + '\\n');\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // ============================================================================\n // Benchmark and Integration Commands\n // ============================================================================\n\n // Benchmark command\n workers\n .command('benchmark')\n .description('Run worker system performance benchmarks')\n .option('-t, --type <type>', 'Benchmark type: all, trigger-detection, registry, agent-selection, cache, concurrent, memory-keys', 'all')\n .option('-i, --iterations <count>', 'Number of iterations', '1000')\n .option('-j, --json', 'Output as JSON')\n .action(async (options: { type: string; iterations: string; json?: boolean }) => {\n try {\n const { workerBenchmarks } = await import('../../workers/worker-benchmarks.js');\n const iterations = parseInt(options.iterations);\n\n if (options.type === 'all') {\n const suite = await workerBenchmarks.runFullSuite();\n if (options.json) {\n console.log(JSON.stringify(suite, null, 2));\n }\n } else {\n let result;\n switch (options.type) {\n case 'trigger-detection':\n result = await workerBenchmarks.benchmarkTriggerDetection(iterations);\n break;\n case 'registry':\n result = await workerBenchmarks.benchmarkRegistryOperations(Math.min(500, iterations));\n break;\n case 'agent-selection':\n result = await workerBenchmarks.benchmarkAgentSelection(iterations);\n break;\n case 'cache':\n result = await workerBenchmarks.benchmarkModelCache(Math.min(100, iterations));\n break;\n case 'concurrent':\n result = await workerBenchmarks.benchmarkConcurrentWorkers(10);\n break;\n case 'memory-keys':\n result = await workerBenchmarks.benchmarkMemoryKeyGeneration(iterations * 5);\n break;\n default:\n console.error(`Unknown benchmark type: ${options.type}`);\n process.exit(1);\n }\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n const status = result.passed ? '\\u2705' : '\\u274C';\n console.log(`\\n${status} ${result.name}`);\n console.log(` Operation: ${result.operation}`);\n console.log(` Count: ${result.count.toLocaleString()}`);\n console.log(` Avg: ${result.avgTimeMs.toFixed(3)}ms | p95: ${result.p95Ms.toFixed(3)}ms`);\n console.log(` Throughput: ${result.throughput.toFixed(0)} ops/s`);\n console.log(` Memory \\u0394: ${result.memoryDeltaMB.toFixed(2)}MB\\n`);\n }\n }\n } catch (error) {\n console.error('Benchmark error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Integration stats command\n workers\n .command('integration')\n .description('View worker-agent integration statistics')\n .option('-j, --json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n try {\n const { workerAgentIntegration, getIntegrationStats } = await import('../../workers/worker-agent-integration.js');\n const stats = getIntegrationStats();\n const metrics = workerAgentIntegration.getAgentMetrics();\n\n if (options.json) {\n console.log(JSON.stringify({ stats, agentMetrics: metrics }, null, 2));\n } else {\n console.log('\\n\\u26A1 Worker-Agent Integration Stats\\n');\n console.log('\\u2550'.repeat(40));\n console.log(`Total Agents: ${stats.totalAgents}`);\n console.log(`Tracked Agents: ${stats.trackedAgents}`);\n console.log(`Total Feedback: ${stats.totalFeedback}`);\n console.log(`Avg Quality Score: ${stats.avgQualityScore.toFixed(2)}`);\n console.log(`\\nModel Cache Stats`);\n console.log('\\u2500'.repeat(20));\n console.log(`Hits: ${stats.modelCacheStats.hits.toLocaleString()}`);\n console.log(`Misses: ${stats.modelCacheStats.misses.toLocaleString()}`);\n console.log(`Hit Rate: ${stats.modelCacheStats.hitRate}`);\n\n if (metrics.length > 0) {\n console.log(`\\n\\uD83D\\uDCCA Agent Performance\\n`);\n for (const m of metrics) {\n console.log(` ${m.agentName}:`);\n console.log(` Latency: ${m.avgLatencyMs.toFixed(0)}ms (p95: ${m.p95LatencyMs.toFixed(0)}ms)`);\n console.log(` Success: ${(m.successRate * 100).toFixed(1)}%`);\n console.log(` Quality: ${m.qualityScore.toFixed(2)}`);\n console.log(` Count: ${m.executionCount}`);\n }\n }\n console.log();\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Agent recommendation command\n workers\n .command('agents <trigger>')\n .description('Get recommended agents for a worker trigger')\n .option('-j, --json', 'Output as JSON')\n .action(async (trigger: string, options: { json?: boolean }) => {\n try {\n const { workerAgentIntegration } = await import('../../workers/worker-agent-integration.js');\n const recommendations = workerAgentIntegration.getRecommendedAgents(trigger as any);\n const selection = workerAgentIntegration.selectBestAgent(trigger as any);\n\n if (options.json) {\n console.log(JSON.stringify({ trigger, recommendations, selection }, null, 2));\n } else {\n console.log(`\\n\\u26A1 Agent Recommendations for \"${trigger}\"\\n`);\n console.log(`Primary Agents: ${recommendations.primary.join(', ') || 'none'}`);\n console.log(`Fallback Agents: ${recommendations.fallback.join(', ') || 'none'}`);\n console.log(`Pipeline: ${recommendations.phases.join(' \\u2192 ')}`);\n console.log(`Memory Pattern: ${recommendations.memoryPattern}`);\n console.log(`\\n\\uD83C\\uDFAF Best Selection:`);\n console.log(` Agent: ${selection.agent}`);\n console.log(` Confidence: ${(selection.confidence * 100).toFixed(0)}%`);\n console.log(` Reason: ${selection.reasoning}\\n`);\n }\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n return workers;\n}\n\nfunction displayWorkerDetails(worker: WorkerInfo): void {\n const statusIcon = getStatusIcon(worker.status);\n const duration = worker.completedAt\n ? ((worker.completedAt - worker.startedAt) / 1000).toFixed(1)\n : worker.startedAt\n ? ((Date.now() - worker.startedAt) / 1000).toFixed(1)\n : '0';\n\n console.log('\\n\\u2554\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2557');\n console.log(`\\u2551 ${statusIcon} Worker: ${worker.id.padEnd(30)} \\u2551`);\n console.log('\\u2560\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2563');\n console.log(`\\u2551 Trigger: ${worker.trigger.padEnd(31)} \\u2551`);\n if (worker.topic) {\n console.log(`\\u2551 Topic: ${worker.topic.slice(0, 33).padEnd(33)} \\u2551`);\n }\n console.log(`\\u2551 Status: ${worker.status.padEnd(32)} \\u2551`);\n console.log(`\\u2551 Progress: ${worker.progress}%`.padEnd(42) + ' \\u2551');\n if (worker.currentPhase) {\n console.log(`\\u2551 Phase: ${worker.currentPhase.padEnd(33)} \\u2551`);\n }\n console.log(`\\u2551 Duration: ${duration}s`.padEnd(42) + ' \\u2551');\n console.log(`\\u2551 Memory Deposits: ${worker.memoryDeposits}`.padEnd(42) + ' \\u2551');\n if (worker.error) {\n console.log(`\\u2551 Error: ${worker.error.slice(0, 33).padEnd(33)} \\u2551`);\n }\n console.log('\\u255A\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255D\\n');\n}\n\nfunction displayWorkerDashboard(workers: WorkerInfo[], resourceStats: any): void {\n console.log('\\n\\u250C\\u2500 Background Workers Dashboard \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2510');\n\n if (workers.length === 0) {\n console.log('\\u2502 No workers found \\u2502');\n console.log('\\u2502 \\u2502');\n console.log('\\u2502 Use trigger words in prompts: \\u2502');\n console.log('\\u2502 \\u2022 ultralearn <topic> \\u2502');\n console.log('\\u2502 \\u2022 optimize \\u2502');\n console.log('\\u2502 \\u2022 audit <scope> \\u2502');\n console.log('\\u2514\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2518\\n');\n return;\n }\n\n for (const worker of workers) {\n const icon = getStatusIcon(worker.status);\n const progress = worker.status === 'running' ? ` (${worker.progress}%)` : '';\n const line = `\\u2502 ${icon} ${worker.trigger.padEnd(12)}: ${worker.status}${progress}`;\n console.log(line.padEnd(42) + '\\u2502');\n\n if (worker.currentPhase) {\n console.log(`\\u2502 \\u2514\\u2500 ${worker.currentPhase}`.padEnd(42) + '\\u2502');\n }\n }\n\n console.log('\\u251C\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2524');\n console.log(`\\u2502 Active: ${resourceStats.activeWorkers}/${10}`.padEnd(42) + '\\u2502');\n console.log(`\\u2502 Memory: ${(resourceStats.memoryUsage.heapUsed / 1024 / 1024).toFixed(0)}MB`.padEnd(42) + '\\u2502');\n console.log('\\u2514\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2518\\n');\n}\n\nfunction displayStats(stats: any, timeframe: string): void {\n console.log(`\\n\\u26A1 Worker Statistics (${timeframe})\\n`);\n console.log(`Total Workers: ${stats.total ?? 0}`);\n console.log(`Average Duration: ${((stats.avgDuration ?? 0) / 1000).toFixed(1)}s`);\n\n if (stats.byStatus && Object.keys(stats.byStatus).length > 0) {\n console.log('\\nBy Status:');\n for (const [status, count] of Object.entries(stats.byStatus)) {\n if ((count as number) > 0) {\n console.log(` ${getStatusIcon(status as WorkerStatus)} ${status}: ${count}`);\n }\n }\n }\n\n if (stats.byTrigger && Object.keys(stats.byTrigger).length > 0) {\n console.log('\\nBy Trigger:');\n for (const [trigger, count] of Object.entries(stats.byTrigger)) {\n console.log(` \\u2022 ${trigger}: ${count}`);\n }\n }\n\n console.log('\\nResource Availability:');\n const usedSlots = stats.availability?.usedSlots ?? 0;\n const totalSlots = stats.availability?.totalSlots ?? 10;\n const heapUsed = stats.resources?.memoryUsage?.heapUsed ?? 0;\n console.log(` Slots: ${usedSlots}/${totalSlots}`);\n console.log(` Memory: ${(heapUsed / 1024 / 1024).toFixed(0)}MB`);\n console.log();\n}\n\nfunction displayWorkerResults(worker: WorkerInfo): void {\n console.log('\\n\\u2554\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2557');\n console.log(`\\u2551 \\uD83D\\uDCCA Worker Results: ${worker.trigger.padEnd(27)} \\u2551`);\n console.log('\\u2560\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2563');\n\n if (worker.topic) {\n console.log(`\\u2551 Topic: ${worker.topic.slice(0, 40).padEnd(40)} \\u2551`);\n }\n\n const results = worker.results || {};\n\n if (results.files_analyzed !== undefined) {\n console.log(`\\u2551 Files Analyzed: ${String(results.files_analyzed).padEnd(31)} \\u2551`);\n }\n if (results.patterns_found !== undefined) {\n console.log(`\\u2551 Patterns Found: ${String(results.patterns_found).padEnd(31)} \\u2551`);\n }\n if (results.bytes_processed !== undefined) {\n const kb = ((results.bytes_processed as number) / 1024).toFixed(1);\n console.log(`\\u2551 Bytes Processed: ${(kb + ' KB').padEnd(30)} \\u2551`);\n }\n\n // Show sample patterns if available\n if (results.sample_patterns && Array.isArray(results.sample_patterns) && results.sample_patterns.length > 0) {\n console.log('\\u2560\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2563');\n console.log('\\u2551 Sample Patterns:'.padEnd(49) + ' \\u2551');\n for (const pattern of results.sample_patterns.slice(0, 3)) {\n const truncated = String(pattern).slice(0, 45);\n console.log(`\\u2551 \\u2022 ${truncated.padEnd(42)} \\u2551`);\n }\n }\n\n // Show other results\n const otherKeys = Object.keys(results).filter(k =>\n !['files_analyzed', 'patterns_found', 'bytes_processed', 'sample_patterns', 'topic', 'phases'].includes(k)\n );\n if (otherKeys.length > 0) {\n console.log('\\u2560\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2563');\n for (const key of otherKeys.slice(0, 5)) {\n const val = JSON.stringify(results[key]).slice(0, 35);\n console.log(`\\u2551 ${key}: ${val.padEnd(45 - key.length)} \\u2551`);\n }\n }\n\n console.log('\\u255A\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255D\\n');\n}\n\nfunction displayResultsSummary(workers: WorkerInfo[]): void {\n if (workers.length === 0) {\n console.log('\\nNo workers with results found.');\n console.log('Run workers first: agentic-flow workers dispatch \"ultralearn authentication\"\\n');\n return;\n }\n\n console.log('\\n\\uD83D\\uDCCA Worker Analysis Results\\n');\n\n let totalFiles = 0;\n let totalPatterns = 0;\n let totalBytes = 0;\n\n for (const worker of workers) {\n const results = worker.results || {};\n const files = results.files_analyzed as number || 0;\n const patterns = results.patterns_found as number || 0;\n const bytes = results.bytes_processed as number || 0;\n\n totalFiles += files;\n totalPatterns += patterns;\n totalBytes += bytes;\n\n const topic = worker.topic ? ` \"${worker.topic.slice(0, 20)}\"` : '';\n console.log(` \\u2022 ${worker.trigger}${topic}:`);\n console.log(` ${files} files, ${patterns} patterns, ${(bytes/1024).toFixed(1)} KB`);\n }\n\n console.log('\\n \\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500');\n console.log(` Total: ${totalFiles} files, ${totalPatterns} patterns, ${(totalBytes/1024).toFixed(1)} KB\\n`);\n}\n\nfunction getStatusIcon(status: WorkerStatus): string {\n switch (status) {\n case 'complete': return '\\u2705';\n case 'running': return '\\uD83D\\uDD04';\n case 'queued': return '\\uD83D\\uDCA4';\n case 'failed': return '\\u274C';\n case 'cancelled': return '\\u23F9\\uFE0F';\n case 'timeout': return '\\u23F1\\uFE0F';\n default: return '\\u2022';\n }\n}\n\nexport default createWorkersCommand;\n\n// CLI entry point when run directly\nconst isDirectRun = import.meta.url === `file://${process.argv[1]}`;\nif (isDirectRun) {\n const workers = createWorkersCommand();\n workers.parse(process.argv);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"config-wizard.d.ts","sourceRoot":"","sources":["../../src/cli/config-wizard.ts"],"names":[],"mappings":";AACA;;;GAGG;AA6EH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAkC;gBAE3C,OAAO,CAAC,EAAE,MAAM;IAK5B,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,UAAU;IA4BZ,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAuErC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAqBrC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAetB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAWzB,IAAI,IAAI,IAAI;IAgBZ,WAAW,IAAI,IAAI;IA8BnB,KAAK,IAAI,IAAI;CAWd;AAGD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDvE"}
1
+ {"version":3,"file":"config-wizard.d.ts","sourceRoot":"","sources":["../../src/cli/config-wizard.ts"],"names":[],"mappings":";AACA;;;GAGG;AA4FH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAkC;gBAE3C,OAAO,CAAC,EAAE,MAAM;IAK5B,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,UAAU;IA4BZ,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAwErC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAuBrC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAetB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAWzB,IAAI,IAAI,IAAI;IAkBZ,WAAW,IAAI,IAAI;IAiCnB,KAAK,IAAI,IAAI;CAWd;AAGD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDvE"}
@@ -12,61 +12,75 @@ const CONFIG_DEFINITIONS = [
12
12
  value: '',
13
13
  description: 'Anthropic API key for Claude models (sk-ant-...)',
14
14
  required: false,
15
- validation: (val) => val.startsWith('sk-ant-') || 'Must start with sk-ant-'
15
+ validation: (val) => val.startsWith('sk-ant-') || 'Must start with sk-ant-',
16
16
  },
17
17
  {
18
18
  key: 'OPENROUTER_API_KEY',
19
19
  value: '',
20
20
  description: 'OpenRouter API key for alternative models (sk-or-v1-...)',
21
21
  required: false,
22
- validation: (val) => val.startsWith('sk-or-') || 'Must start with sk-or-'
22
+ validation: (val) => val.startsWith('sk-or-') || 'Must start with sk-or-',
23
23
  },
24
24
  {
25
25
  key: 'GOOGLE_GEMINI_API_KEY',
26
26
  value: '',
27
27
  description: 'Google Gemini API key for Gemini models',
28
- required: false
28
+ required: false,
29
+ },
30
+ {
31
+ key: 'OLLAMA_API_KEY',
32
+ value: '',
33
+ description: 'Ollama Cloud API key (optional for self-hosted; required for ollama.com Cloud)',
34
+ required: false,
35
+ },
36
+ {
37
+ key: 'OLLAMA_BASE_URL',
38
+ value: 'http://localhost:11434',
39
+ description: 'Ollama base URL (e.g. https://ollama.com or http://localhost:11434)',
40
+ required: false,
41
+ validation: (val) => /^https?:\/\/.+/.test(val) || 'Must be a valid http(s) URL',
29
42
  },
30
43
  {
31
44
  key: 'COMPLETION_MODEL',
32
45
  value: 'claude-sonnet-4-5-20250929',
33
46
  description: 'Default model for completions',
34
- required: false
47
+ required: false,
35
48
  },
36
49
  {
37
50
  key: 'PROVIDER',
38
51
  value: 'anthropic',
39
- description: 'Default provider (anthropic, openrouter, gemini, onnx)',
52
+ description: 'Default provider (anthropic, openrouter, gemini, onnx, ollama)',
40
53
  required: false,
41
- validation: (val) => ['anthropic', 'openrouter', 'gemini', 'onnx'].includes(val) || 'Must be anthropic, openrouter, gemini, or onnx'
54
+ validation: (val) => ['anthropic', 'openrouter', 'gemini', 'onnx', 'ollama'].includes(val) ||
55
+ 'Must be anthropic, openrouter, gemini, onnx, or ollama',
42
56
  },
43
57
  {
44
58
  key: 'AGENTS_DIR',
45
59
  value: '',
46
60
  description: 'Custom agents directory path (optional)',
47
- required: false
61
+ required: false,
48
62
  },
49
63
  {
50
64
  key: 'PROXY_PORT',
51
65
  value: '3000',
52
66
  description: 'Proxy server port for OpenRouter',
53
67
  required: false,
54
- validation: (val) => !isNaN(parseInt(val)) || 'Must be a number'
68
+ validation: (val) => !isNaN(parseInt(val)) || 'Must be a number',
55
69
  },
56
70
  {
57
71
  key: 'USE_OPENROUTER',
58
72
  value: 'false',
59
73
  description: 'Force OpenRouter usage (true/false)',
60
74
  required: false,
61
- validation: (val) => ['true', 'false'].includes(val) || 'Must be true or false'
75
+ validation: (val) => ['true', 'false'].includes(val) || 'Must be true or false',
62
76
  },
63
77
  {
64
78
  key: 'USE_ONNX',
65
79
  value: 'false',
66
80
  description: 'Use ONNX local inference (true/false)',
67
81
  required: false,
68
- validation: (val) => ['true', 'false'].includes(val) || 'Must be true or false'
69
- }
82
+ validation: (val) => ['true', 'false'].includes(val) || 'Must be true or false',
83
+ },
70
84
  ];
71
85
  export class ConfigWizard {
72
86
  envPath;
@@ -78,7 +92,7 @@ export class ConfigWizard {
78
92
  loadExistingConfig() {
79
93
  if (existsSync(this.envPath)) {
80
94
  const content = readFileSync(this.envPath, 'utf-8');
81
- content.split('\n').forEach(line => {
95
+ content.split('\n').forEach((line) => {
82
96
  const trimmed = line.trim();
83
97
  if (trimmed && !trimmed.startsWith('#')) {
84
98
  const [key, ...valueParts] = trimmed.split('=');
@@ -95,9 +109,9 @@ export class ConfigWizard {
95
109
  '# Agentic Flow Configuration',
96
110
  '# Generated by agentic-flow config wizard',
97
111
  `# Created: ${new Date().toISOString()}`,
98
- ''
112
+ '',
99
113
  ];
100
- CONFIG_DEFINITIONS.forEach(def => {
114
+ CONFIG_DEFINITIONS.forEach((def) => {
101
115
  const value = this.currentConfig.get(def.key) || def.value;
102
116
  if (value) {
103
117
  lines.push(`# ${def.description}`);
@@ -107,7 +121,7 @@ export class ConfigWizard {
107
121
  });
108
122
  // Preserve other env vars not in CONFIG_DEFINITIONS
109
123
  this.currentConfig.forEach((value, key) => {
110
- if (!CONFIG_DEFINITIONS.find(d => d.key === key)) {
124
+ if (!CONFIG_DEFINITIONS.find((d) => d.key === key)) {
111
125
  lines.push(`${key}=${value}`);
112
126
  }
113
127
  });
@@ -120,7 +134,7 @@ export class ConfigWizard {
120
134
  console.log('Press Enter to keep current value, or type new value.\n');
121
135
  const rl = createInterface({
122
136
  input: process.stdin,
123
- output: process.stdout
137
+ output: process.stdout,
124
138
  });
125
139
  const question = (prompt) => {
126
140
  return new Promise((resolve) => {
@@ -131,7 +145,9 @@ export class ConfigWizard {
131
145
  for (const def of CONFIG_DEFINITIONS) {
132
146
  const currentValue = this.currentConfig.get(def.key) || def.value;
133
147
  const displayValue = currentValue
134
- ? (def.key.includes('KEY') ? `${currentValue.substring(0, 15)}...` : currentValue)
148
+ ? def.key.includes('KEY')
149
+ ? `${currentValue.substring(0, 15)}...`
150
+ : currentValue
135
151
  : '(not set)';
136
152
  console.log(`\nšŸ“ ${def.key}`);
137
153
  console.log(` ${def.description}`);
@@ -177,9 +193,9 @@ export class ConfigWizard {
177
193
  }
178
194
  // Direct CLI mode - set single value
179
195
  set(key, value) {
180
- const def = CONFIG_DEFINITIONS.find(d => d.key === key);
196
+ const def = CONFIG_DEFINITIONS.find((d) => d.key === key);
181
197
  if (!def) {
182
- throw new Error(`Unknown configuration key: ${key}\nAvailable keys: ${CONFIG_DEFINITIONS.map(d => d.key).join(', ')}`);
198
+ throw new Error(`Unknown configuration key: ${key}\nAvailable keys: ${CONFIG_DEFINITIONS.map((d) => d.key).join(', ')}`);
183
199
  }
184
200
  // Validate
185
201
  if (def.validation) {
@@ -222,10 +238,12 @@ export class ConfigWizard {
222
238
  // List all values
223
239
  list() {
224
240
  console.log('\nšŸ“‹ Current Configuration:\n');
225
- CONFIG_DEFINITIONS.forEach(def => {
241
+ CONFIG_DEFINITIONS.forEach((def) => {
226
242
  const value = this.currentConfig.get(def.key);
227
243
  const displayValue = value
228
- ? (def.key.includes('KEY') ? `${value.substring(0, 15)}...` : value)
244
+ ? def.key.includes('KEY')
245
+ ? `${value.substring(0, 15)}...`
246
+ : value
229
247
  : '(not set)';
230
248
  console.log(`${def.key.padEnd(25)} = ${displayValue}`);
231
249
  console.log(` ${def.description}`);
@@ -238,16 +256,18 @@ export class ConfigWizard {
238
256
  const hasAnthropic = this.currentConfig.has('ANTHROPIC_API_KEY');
239
257
  const hasOpenRouter = this.currentConfig.has('OPENROUTER_API_KEY');
240
258
  const hasGemini = this.currentConfig.has('GOOGLE_GEMINI_API_KEY');
259
+ const hasOllama = this.currentConfig.has('OLLAMA_API_KEY') || this.currentConfig.has('OLLAMA_BASE_URL');
241
260
  const provider = this.currentConfig.get('PROVIDER') || 'anthropic';
242
261
  console.log('Providers configured:');
243
262
  console.log(` ${hasAnthropic ? 'āœ…' : 'āŒ'} Anthropic (Claude)`);
244
263
  console.log(` ${hasOpenRouter ? 'āœ…' : 'āŒ'} OpenRouter (Alternative models)`);
245
264
  console.log(` ${hasGemini ? 'āœ…' : 'āŒ'} Gemini (Google AI)`);
265
+ console.log(` ${hasOllama ? 'āœ…' : 'āŒ'} Ollama (Cloud or self-hosted, OpenAI-compat)`);
246
266
  console.log(` āš™ļø ONNX (Local inference) - always available`);
247
267
  console.log('');
248
268
  console.log(`Default provider: ${provider}`);
249
269
  console.log('');
250
- if (!hasAnthropic && !hasOpenRouter && !hasGemini) {
270
+ if (!hasAnthropic && !hasOpenRouter && !hasGemini && !hasOllama) {
251
271
  console.log('āš ļø Warning: No API keys configured!');
252
272
  console.log(' You can use ONNX local inference, but quality may be limited.');
253
273
  console.log(' Run with --provider onnx to use local inference.\n');
@@ -261,7 +281,7 @@ export class ConfigWizard {
261
281
  reset() {
262
282
  console.log('āš ļø Resetting configuration to defaults...');
263
283
  this.currentConfig.clear();
264
- CONFIG_DEFINITIONS.forEach(def => {
284
+ CONFIG_DEFINITIONS.forEach((def) => {
265
285
  if (def.value) {
266
286
  this.currentConfig.set(def.key, def.value);
267
287
  }
@@ -348,8 +368,10 @@ AVAILABLE CONFIGURATION KEYS:
348
368
  ANTHROPIC_API_KEY - Anthropic API key (sk-ant-...)
349
369
  OPENROUTER_API_KEY - OpenRouter API key (sk-or-v1-...)
350
370
  GOOGLE_GEMINI_API_KEY - Google Gemini API key
371
+ OLLAMA_API_KEY - Ollama Cloud API key (optional for self-hosted)
372
+ OLLAMA_BASE_URL - Ollama base URL (default: http://localhost:11434)
351
373
  COMPLETION_MODEL - Default model name
352
- PROVIDER - Default provider (anthropic, openrouter, gemini, onnx)
374
+ PROVIDER - Default provider (anthropic, openrouter, gemini, onnx, ollama)
353
375
  AGENTS_DIR - Custom agents directory
354
376
  PROXY_PORT - Proxy server port (default: 3000)
355
377
  USE_OPENROUTER - Force OpenRouter (true/false)
@@ -361,7 +383,7 @@ For more information: https://github.com/ruvnet/agentic-flow
361
383
  // If run directly
362
384
  if (import.meta.url === `file://${process.argv[1]}`) {
363
385
  const args = process.argv.slice(2);
364
- handleConfigCommand(args).catch(err => {
386
+ handleConfigCommand(args).catch((err) => {
365
387
  console.error(err.message);
366
388
  process.exit(1);
367
389
  });
@@ -1 +1 @@
1
- {"version":3,"file":"config-wizard.js","sourceRoot":"","sources":["../../src/cli/config-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * Interactive CLI wizard for agentic-flow configuration\n * Supports both interactive mode and direct CLI arguments\n */\n\nimport { readFileSync, writeFileSync, existsSync } from 'fs';\nimport { resolve, dirname } from 'path';\nimport { createInterface } from 'readline';\n\ninterface ConfigValue {\n key: string;\n value: string;\n description: string;\n required?: boolean;\n validation?: (value: string) => boolean | string;\n}\n\nconst CONFIG_DEFINITIONS: ConfigValue[] = [\n {\n key: 'ANTHROPIC_API_KEY',\n value: '',\n description: 'Anthropic API key for Claude models (sk-ant-...)',\n required: false,\n validation: (val) => val.startsWith('sk-ant-') || 'Must start with sk-ant-'\n },\n {\n key: 'OPENROUTER_API_KEY',\n value: '',\n description: 'OpenRouter API key for alternative models (sk-or-v1-...)',\n required: false,\n validation: (val) => val.startsWith('sk-or-') || 'Must start with sk-or-'\n },\n {\n key: 'GOOGLE_GEMINI_API_KEY',\n value: '',\n description: 'Google Gemini API key for Gemini models',\n required: false\n },\n {\n key: 'COMPLETION_MODEL',\n value: 'claude-sonnet-4-5-20250929',\n description: 'Default model for completions',\n required: false\n },\n {\n key: 'PROVIDER',\n value: 'anthropic',\n description: 'Default provider (anthropic, openrouter, gemini, onnx)',\n required: false,\n validation: (val) => ['anthropic', 'openrouter', 'gemini', 'onnx'].includes(val) || 'Must be anthropic, openrouter, gemini, or onnx'\n },\n {\n key: 'AGENTS_DIR',\n value: '',\n description: 'Custom agents directory path (optional)',\n required: false\n },\n {\n key: 'PROXY_PORT',\n value: '3000',\n description: 'Proxy server port for OpenRouter',\n required: false,\n validation: (val) => !isNaN(parseInt(val)) || 'Must be a number'\n },\n {\n key: 'USE_OPENROUTER',\n value: 'false',\n description: 'Force OpenRouter usage (true/false)',\n required: false,\n validation: (val) => ['true', 'false'].includes(val) || 'Must be true or false'\n },\n {\n key: 'USE_ONNX',\n value: 'false',\n description: 'Use ONNX local inference (true/false)',\n required: false,\n validation: (val) => ['true', 'false'].includes(val) || 'Must be true or false'\n }\n];\n\nexport class ConfigWizard {\n private envPath: string;\n private currentConfig: Map<string, string> = new Map();\n\n constructor(envPath?: string) {\n this.envPath = envPath || resolve(process.cwd(), '.env');\n this.loadExistingConfig();\n }\n\n private loadExistingConfig(): void {\n if (existsSync(this.envPath)) {\n const content = readFileSync(this.envPath, 'utf-8');\n content.split('\\n').forEach(line => {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n const [key, ...valueParts] = trimmed.split('=');\n const value = valueParts.join('=');\n if (key && value) {\n this.currentConfig.set(key, value);\n }\n }\n });\n }\n }\n\n private saveConfig(): void {\n const lines: string[] = [\n '# Agentic Flow Configuration',\n '# Generated by agentic-flow config wizard',\n `# Created: ${new Date().toISOString()}`,\n ''\n ];\n\n CONFIG_DEFINITIONS.forEach(def => {\n const value = this.currentConfig.get(def.key) || def.value;\n if (value) {\n lines.push(`# ${def.description}`);\n lines.push(`${def.key}=${value}`);\n lines.push('');\n }\n });\n\n // Preserve other env vars not in CONFIG_DEFINITIONS\n this.currentConfig.forEach((value, key) => {\n if (!CONFIG_DEFINITIONS.find(d => d.key === key)) {\n lines.push(`${key}=${value}`);\n }\n });\n\n writeFileSync(this.envPath, lines.join('\\n'), 'utf-8');\n }\n\n // Interactive wizard mode\n async runInteractive(): Promise<void> {\n console.log('\\nšŸ¤– Agentic Flow Configuration Wizard\\n');\n console.log('Configure your environment variables for agentic-flow.');\n console.log('Press Enter to keep current value, or type new value.\\n');\n\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout\n });\n\n const question = (prompt: string): Promise<string> => {\n return new Promise((resolve) => {\n rl.question(prompt, resolve);\n });\n };\n\n try {\n for (const def of CONFIG_DEFINITIONS) {\n const currentValue = this.currentConfig.get(def.key) || def.value;\n const displayValue = currentValue\n ? (def.key.includes('KEY') ? `${currentValue.substring(0, 15)}...` : currentValue)\n : '(not set)';\n\n console.log(`\\nšŸ“ ${def.key}`);\n console.log(` ${def.description}`);\n\n let input: string;\n let isValid = false;\n\n while (!isValid) {\n input = await question(` Current: ${displayValue}\\n New value: `);\n\n // Keep current if empty\n if (!input.trim()) {\n input = currentValue;\n }\n\n // Validate if validator exists\n if (input && def.validation) {\n const validationResult = def.validation(input);\n if (validationResult === true) {\n isValid = true;\n } else {\n console.log(` āŒ Invalid: ${validationResult}`);\n }\n } else {\n isValid = true;\n }\n\n if (isValid && input) {\n this.currentConfig.set(def.key, input);\n } else if (isValid && !input) {\n // Remove if empty\n this.currentConfig.delete(def.key);\n }\n }\n }\n\n console.log('\\nšŸ’¾ Saving configuration...');\n this.saveConfig();\n console.log(`āœ… Configuration saved to: ${this.envPath}\\n`);\n\n // Show summary\n this.showSummary();\n\n } finally {\n rl.close();\n }\n }\n\n // Direct CLI mode - set single value\n set(key: string, value: string): void {\n const def = CONFIG_DEFINITIONS.find(d => d.key === key);\n\n if (!def) {\n throw new Error(`Unknown configuration key: ${key}\\nAvailable keys: ${CONFIG_DEFINITIONS.map(d => d.key).join(', ')}`);\n }\n\n // Validate\n if (def.validation) {\n const result = def.validation(value);\n if (result !== true) {\n throw new Error(`Invalid value for ${key}: ${result}`);\n }\n }\n\n this.currentConfig.set(key, value);\n this.saveConfig();\n console.log(`āœ… Set ${key}=${value.substring(0, 20)}${value.length > 20 ? '...' : ''}`);\n }\n\n // Get single value\n get(key: string): void {\n const value = this.currentConfig.get(key);\n if (value) {\n // Mask API keys\n if (key.includes('KEY')) {\n console.log(`${key}=${value.substring(0, 15)}...`);\n } else {\n console.log(`${key}=${value}`);\n }\n } else {\n console.log(`${key} is not set`);\n }\n }\n\n // Delete value\n delete(key: string): void {\n if (this.currentConfig.has(key)) {\n this.currentConfig.delete(key);\n this.saveConfig();\n console.log(`āœ… Deleted ${key}`);\n } else {\n console.log(`āŒ ${key} is not set`);\n }\n }\n\n // List all values\n list(): void {\n console.log('\\nšŸ“‹ Current Configuration:\\n');\n\n CONFIG_DEFINITIONS.forEach(def => {\n const value = this.currentConfig.get(def.key);\n const displayValue = value\n ? (def.key.includes('KEY') ? `${value.substring(0, 15)}...` : value)\n : '(not set)';\n\n console.log(`${def.key.padEnd(25)} = ${displayValue}`);\n console.log(` ${def.description}`);\n console.log('');\n });\n }\n\n // Show configuration summary\n showSummary(): void {\n console.log('šŸ“Š Configuration Summary:\\n');\n\n const hasAnthropic = this.currentConfig.has('ANTHROPIC_API_KEY');\n const hasOpenRouter = this.currentConfig.has('OPENROUTER_API_KEY');\n const hasGemini = this.currentConfig.has('GOOGLE_GEMINI_API_KEY');\n const provider = this.currentConfig.get('PROVIDER') || 'anthropic';\n\n console.log('Providers configured:');\n console.log(` ${hasAnthropic ? 'āœ…' : 'āŒ'} Anthropic (Claude)`);\n console.log(` ${hasOpenRouter ? 'āœ…' : 'āŒ'} OpenRouter (Alternative models)`);\n console.log(` ${hasGemini ? 'āœ…' : 'āŒ'} Gemini (Google AI)`);\n console.log(` āš™ļø ONNX (Local inference) - always available`);\n console.log('');\n console.log(`Default provider: ${provider}`);\n console.log('');\n\n if (!hasAnthropic && !hasOpenRouter && !hasGemini) {\n console.log('āš ļø Warning: No API keys configured!');\n console.log(' You can use ONNX local inference, but quality may be limited.');\n console.log(' Run with --provider onnx to use local inference.\\n');\n }\n\n console.log('Next steps:');\n console.log(' npx agentic-flow --list # List available agents');\n console.log(' npx agentic-flow --agent coder --task \"Your task\" # Run agent');\n console.log('');\n }\n\n // Reset to defaults\n reset(): void {\n console.log('āš ļø Resetting configuration to defaults...');\n this.currentConfig.clear();\n CONFIG_DEFINITIONS.forEach(def => {\n if (def.value) {\n this.currentConfig.set(def.key, def.value);\n }\n });\n this.saveConfig();\n console.log('āœ… Configuration reset to defaults');\n }\n}\n\n// CLI handler\nexport async function handleConfigCommand(args: string[]): Promise<void> {\n const command = args[0];\n const wizard = new ConfigWizard();\n\n switch (command) {\n case undefined:\n case 'wizard':\n case 'interactive':\n await wizard.runInteractive();\n break;\n\n case 'set':\n if (args.length < 3) {\n console.error('Usage: config set <KEY> <VALUE>');\n process.exit(1);\n }\n wizard.set(args[1], args[2]);\n break;\n\n case 'get':\n if (args.length < 2) {\n console.error('Usage: config get <KEY>');\n process.exit(1);\n }\n wizard.get(args[1]);\n break;\n\n case 'delete':\n case 'remove':\n if (args.length < 2) {\n console.error('Usage: config delete <KEY>');\n process.exit(1);\n }\n wizard.delete(args[1]);\n break;\n\n case 'list':\n wizard.list();\n break;\n\n case 'reset':\n wizard.reset();\n break;\n\n case 'help':\n printConfigHelp();\n break;\n\n default:\n console.error(`Unknown config command: ${command}`);\n printConfigHelp();\n process.exit(1);\n }\n}\n\nfunction printConfigHelp(): void {\n console.log(`\nšŸ¤– Agentic Flow Configuration Manager\n\nUSAGE:\n npx agentic-flow config [COMMAND] [OPTIONS]\n\nCOMMANDS:\n (none), wizard, interactive Launch interactive configuration wizard\n set <KEY> <VALUE> Set a configuration value\n get <KEY> Get a configuration value\n delete <KEY> Delete a configuration value\n list List all configuration values\n reset Reset to default configuration\n help Show this help message\n\nEXAMPLES:\n # Interactive wizard\n npx agentic-flow config\n\n # Direct commands\n npx agentic-flow config set ANTHROPIC_API_KEY sk-ant-xxxxx\n npx agentic-flow config set PROVIDER openrouter\n npx agentic-flow config get PROVIDER\n npx agentic-flow config list\n npx agentic-flow config delete OPENROUTER_API_KEY\n\nAVAILABLE CONFIGURATION KEYS:\n ANTHROPIC_API_KEY - Anthropic API key (sk-ant-...)\n OPENROUTER_API_KEY - OpenRouter API key (sk-or-v1-...)\n GOOGLE_GEMINI_API_KEY - Google Gemini API key\n COMPLETION_MODEL - Default model name\n PROVIDER - Default provider (anthropic, openrouter, gemini, onnx)\n AGENTS_DIR - Custom agents directory\n PROXY_PORT - Proxy server port (default: 3000)\n USE_OPENROUTER - Force OpenRouter (true/false)\n USE_ONNX - Use ONNX local inference (true/false)\n\nFor more information: https://github.com/ruvnet/agentic-flow\n `);\n}\n\n// If run directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n const args = process.argv.slice(2);\n handleConfigCommand(args).catch(err => {\n console.error(err.message);\n process.exit(1);\n });\n}\n"]}
1
+ {"version":3,"file":"config-wizard.js","sourceRoot":"","sources":["../../src/cli/config-wizard.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n/**\n * Interactive CLI wizard for agentic-flow configuration\n * Supports both interactive mode and direct CLI arguments\n */\n\nimport { readFileSync, writeFileSync, existsSync } from 'fs';\nimport { resolve, dirname } from 'path';\nimport { createInterface } from 'readline';\n\ninterface ConfigValue {\n key: string;\n value: string;\n description: string;\n required?: boolean;\n validation?: (value: string) => boolean | string;\n}\n\nconst CONFIG_DEFINITIONS: ConfigValue[] = [\n {\n key: 'ANTHROPIC_API_KEY',\n value: '',\n description: 'Anthropic API key for Claude models (sk-ant-...)',\n required: false,\n validation: (val) => val.startsWith('sk-ant-') || 'Must start with sk-ant-',\n },\n {\n key: 'OPENROUTER_API_KEY',\n value: '',\n description: 'OpenRouter API key for alternative models (sk-or-v1-...)',\n required: false,\n validation: (val) => val.startsWith('sk-or-') || 'Must start with sk-or-',\n },\n {\n key: 'GOOGLE_GEMINI_API_KEY',\n value: '',\n description: 'Google Gemini API key for Gemini models',\n required: false,\n },\n {\n key: 'OLLAMA_API_KEY',\n value: '',\n description: 'Ollama Cloud API key (optional for self-hosted; required for ollama.com Cloud)',\n required: false,\n },\n {\n key: 'OLLAMA_BASE_URL',\n value: 'http://localhost:11434',\n description: 'Ollama base URL (e.g. https://ollama.com or http://localhost:11434)',\n required: false,\n validation: (val) => /^https?:\\/\\/.+/.test(val) || 'Must be a valid http(s) URL',\n },\n {\n key: 'COMPLETION_MODEL',\n value: 'claude-sonnet-4-5-20250929',\n description: 'Default model for completions',\n required: false,\n },\n {\n key: 'PROVIDER',\n value: 'anthropic',\n description: 'Default provider (anthropic, openrouter, gemini, onnx, ollama)',\n required: false,\n validation: (val) =>\n ['anthropic', 'openrouter', 'gemini', 'onnx', 'ollama'].includes(val) ||\n 'Must be anthropic, openrouter, gemini, onnx, or ollama',\n },\n {\n key: 'AGENTS_DIR',\n value: '',\n description: 'Custom agents directory path (optional)',\n required: false,\n },\n {\n key: 'PROXY_PORT',\n value: '3000',\n description: 'Proxy server port for OpenRouter',\n required: false,\n validation: (val) => !isNaN(parseInt(val)) || 'Must be a number',\n },\n {\n key: 'USE_OPENROUTER',\n value: 'false',\n description: 'Force OpenRouter usage (true/false)',\n required: false,\n validation: (val) => ['true', 'false'].includes(val) || 'Must be true or false',\n },\n {\n key: 'USE_ONNX',\n value: 'false',\n description: 'Use ONNX local inference (true/false)',\n required: false,\n validation: (val) => ['true', 'false'].includes(val) || 'Must be true or false',\n },\n];\n\nexport class ConfigWizard {\n private envPath: string;\n private currentConfig: Map<string, string> = new Map();\n\n constructor(envPath?: string) {\n this.envPath = envPath || resolve(process.cwd(), '.env');\n this.loadExistingConfig();\n }\n\n private loadExistingConfig(): void {\n if (existsSync(this.envPath)) {\n const content = readFileSync(this.envPath, 'utf-8');\n content.split('\\n').forEach((line) => {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n const [key, ...valueParts] = trimmed.split('=');\n const value = valueParts.join('=');\n if (key && value) {\n this.currentConfig.set(key, value);\n }\n }\n });\n }\n }\n\n private saveConfig(): void {\n const lines: string[] = [\n '# Agentic Flow Configuration',\n '# Generated by agentic-flow config wizard',\n `# Created: ${new Date().toISOString()}`,\n '',\n ];\n\n CONFIG_DEFINITIONS.forEach((def) => {\n const value = this.currentConfig.get(def.key) || def.value;\n if (value) {\n lines.push(`# ${def.description}`);\n lines.push(`${def.key}=${value}`);\n lines.push('');\n }\n });\n\n // Preserve other env vars not in CONFIG_DEFINITIONS\n this.currentConfig.forEach((value, key) => {\n if (!CONFIG_DEFINITIONS.find((d) => d.key === key)) {\n lines.push(`${key}=${value}`);\n }\n });\n\n writeFileSync(this.envPath, lines.join('\\n'), 'utf-8');\n }\n\n // Interactive wizard mode\n async runInteractive(): Promise<void> {\n console.log('\\nšŸ¤– Agentic Flow Configuration Wizard\\n');\n console.log('Configure your environment variables for agentic-flow.');\n console.log('Press Enter to keep current value, or type new value.\\n');\n\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const question = (prompt: string): Promise<string> => {\n return new Promise((resolve) => {\n rl.question(prompt, resolve);\n });\n };\n\n try {\n for (const def of CONFIG_DEFINITIONS) {\n const currentValue = this.currentConfig.get(def.key) || def.value;\n const displayValue = currentValue\n ? def.key.includes('KEY')\n ? `${currentValue.substring(0, 15)}...`\n : currentValue\n : '(not set)';\n\n console.log(`\\nšŸ“ ${def.key}`);\n console.log(` ${def.description}`);\n\n let input: string;\n let isValid = false;\n\n while (!isValid) {\n input = await question(` Current: ${displayValue}\\n New value: `);\n\n // Keep current if empty\n if (!input.trim()) {\n input = currentValue;\n }\n\n // Validate if validator exists\n if (input && def.validation) {\n const validationResult = def.validation(input);\n if (validationResult === true) {\n isValid = true;\n } else {\n console.log(` āŒ Invalid: ${validationResult}`);\n }\n } else {\n isValid = true;\n }\n\n if (isValid && input) {\n this.currentConfig.set(def.key, input);\n } else if (isValid && !input) {\n // Remove if empty\n this.currentConfig.delete(def.key);\n }\n }\n }\n\n console.log('\\nšŸ’¾ Saving configuration...');\n this.saveConfig();\n console.log(`āœ… Configuration saved to: ${this.envPath}\\n`);\n\n // Show summary\n this.showSummary();\n } finally {\n rl.close();\n }\n }\n\n // Direct CLI mode - set single value\n set(key: string, value: string): void {\n const def = CONFIG_DEFINITIONS.find((d) => d.key === key);\n\n if (!def) {\n throw new Error(\n `Unknown configuration key: ${key}\\nAvailable keys: ${CONFIG_DEFINITIONS.map((d) => d.key).join(', ')}`\n );\n }\n\n // Validate\n if (def.validation) {\n const result = def.validation(value);\n if (result !== true) {\n throw new Error(`Invalid value for ${key}: ${result}`);\n }\n }\n\n this.currentConfig.set(key, value);\n this.saveConfig();\n console.log(`āœ… Set ${key}=${value.substring(0, 20)}${value.length > 20 ? '...' : ''}`);\n }\n\n // Get single value\n get(key: string): void {\n const value = this.currentConfig.get(key);\n if (value) {\n // Mask API keys\n if (key.includes('KEY')) {\n console.log(`${key}=${value.substring(0, 15)}...`);\n } else {\n console.log(`${key}=${value}`);\n }\n } else {\n console.log(`${key} is not set`);\n }\n }\n\n // Delete value\n delete(key: string): void {\n if (this.currentConfig.has(key)) {\n this.currentConfig.delete(key);\n this.saveConfig();\n console.log(`āœ… Deleted ${key}`);\n } else {\n console.log(`āŒ ${key} is not set`);\n }\n }\n\n // List all values\n list(): void {\n console.log('\\nšŸ“‹ Current Configuration:\\n');\n\n CONFIG_DEFINITIONS.forEach((def) => {\n const value = this.currentConfig.get(def.key);\n const displayValue = value\n ? def.key.includes('KEY')\n ? `${value.substring(0, 15)}...`\n : value\n : '(not set)';\n\n console.log(`${def.key.padEnd(25)} = ${displayValue}`);\n console.log(` ${def.description}`);\n console.log('');\n });\n }\n\n // Show configuration summary\n showSummary(): void {\n console.log('šŸ“Š Configuration Summary:\\n');\n\n const hasAnthropic = this.currentConfig.has('ANTHROPIC_API_KEY');\n const hasOpenRouter = this.currentConfig.has('OPENROUTER_API_KEY');\n const hasGemini = this.currentConfig.has('GOOGLE_GEMINI_API_KEY');\n const hasOllama =\n this.currentConfig.has('OLLAMA_API_KEY') || this.currentConfig.has('OLLAMA_BASE_URL');\n const provider = this.currentConfig.get('PROVIDER') || 'anthropic';\n\n console.log('Providers configured:');\n console.log(` ${hasAnthropic ? 'āœ…' : 'āŒ'} Anthropic (Claude)`);\n console.log(` ${hasOpenRouter ? 'āœ…' : 'āŒ'} OpenRouter (Alternative models)`);\n console.log(` ${hasGemini ? 'āœ…' : 'āŒ'} Gemini (Google AI)`);\n console.log(` ${hasOllama ? 'āœ…' : 'āŒ'} Ollama (Cloud or self-hosted, OpenAI-compat)`);\n console.log(` āš™ļø ONNX (Local inference) - always available`);\n console.log('');\n console.log(`Default provider: ${provider}`);\n console.log('');\n\n if (!hasAnthropic && !hasOpenRouter && !hasGemini && !hasOllama) {\n console.log('āš ļø Warning: No API keys configured!');\n console.log(' You can use ONNX local inference, but quality may be limited.');\n console.log(' Run with --provider onnx to use local inference.\\n');\n }\n\n console.log('Next steps:');\n console.log(' npx agentic-flow --list # List available agents');\n console.log(' npx agentic-flow --agent coder --task \"Your task\" # Run agent');\n console.log('');\n }\n\n // Reset to defaults\n reset(): void {\n console.log('āš ļø Resetting configuration to defaults...');\n this.currentConfig.clear();\n CONFIG_DEFINITIONS.forEach((def) => {\n if (def.value) {\n this.currentConfig.set(def.key, def.value);\n }\n });\n this.saveConfig();\n console.log('āœ… Configuration reset to defaults');\n }\n}\n\n// CLI handler\nexport async function handleConfigCommand(args: string[]): Promise<void> {\n const command = args[0];\n const wizard = new ConfigWizard();\n\n switch (command) {\n case undefined:\n case 'wizard':\n case 'interactive':\n await wizard.runInteractive();\n break;\n\n case 'set':\n if (args.length < 3) {\n console.error('Usage: config set <KEY> <VALUE>');\n process.exit(1);\n }\n wizard.set(args[1], args[2]);\n break;\n\n case 'get':\n if (args.length < 2) {\n console.error('Usage: config get <KEY>');\n process.exit(1);\n }\n wizard.get(args[1]);\n break;\n\n case 'delete':\n case 'remove':\n if (args.length < 2) {\n console.error('Usage: config delete <KEY>');\n process.exit(1);\n }\n wizard.delete(args[1]);\n break;\n\n case 'list':\n wizard.list();\n break;\n\n case 'reset':\n wizard.reset();\n break;\n\n case 'help':\n printConfigHelp();\n break;\n\n default:\n console.error(`Unknown config command: ${command}`);\n printConfigHelp();\n process.exit(1);\n }\n}\n\nfunction printConfigHelp(): void {\n console.log(`\nšŸ¤– Agentic Flow Configuration Manager\n\nUSAGE:\n npx agentic-flow config [COMMAND] [OPTIONS]\n\nCOMMANDS:\n (none), wizard, interactive Launch interactive configuration wizard\n set <KEY> <VALUE> Set a configuration value\n get <KEY> Get a configuration value\n delete <KEY> Delete a configuration value\n list List all configuration values\n reset Reset to default configuration\n help Show this help message\n\nEXAMPLES:\n # Interactive wizard\n npx agentic-flow config\n\n # Direct commands\n npx agentic-flow config set ANTHROPIC_API_KEY sk-ant-xxxxx\n npx agentic-flow config set PROVIDER openrouter\n npx agentic-flow config get PROVIDER\n npx agentic-flow config list\n npx agentic-flow config delete OPENROUTER_API_KEY\n\nAVAILABLE CONFIGURATION KEYS:\n ANTHROPIC_API_KEY - Anthropic API key (sk-ant-...)\n OPENROUTER_API_KEY - OpenRouter API key (sk-or-v1-...)\n GOOGLE_GEMINI_API_KEY - Google Gemini API key\n OLLAMA_API_KEY - Ollama Cloud API key (optional for self-hosted)\n OLLAMA_BASE_URL - Ollama base URL (default: http://localhost:11434)\n COMPLETION_MODEL - Default model name\n PROVIDER - Default provider (anthropic, openrouter, gemini, onnx, ollama)\n AGENTS_DIR - Custom agents directory\n PROXY_PORT - Proxy server port (default: 3000)\n USE_OPENROUTER - Force OpenRouter (true/false)\n USE_ONNX - Use ONNX local inference (true/false)\n\nFor more information: https://github.com/ruvnet/agentic-flow\n `);\n}\n\n// If run directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n const args = process.argv.slice(2);\n handleConfigCommand(args).catch((err) => {\n console.error(err.message);\n process.exit(1);\n });\n}\n"]}