agentic-flow 2.0.6 → 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/.claude/settings.json +133 -9
  2. package/.claude/skills/agentic-flow-quickstart/skill.md +69 -0
  3. package/.claude/skills/hooks-automation/skill.md +155 -0
  4. package/.claude/skills/memory-patterns/skill.md +110 -0
  5. package/.claude/skills/sparc-methodology/skill.md +137 -0
  6. package/.claude/skills/swarm-coordination/skill.md +94 -0
  7. package/.claude/skills/worker-benchmarks/skill.md +135 -0
  8. package/.claude/skills/worker-integration/skill.md +154 -0
  9. package/.claude/statusline.mjs +109 -0
  10. package/.claude/statusline.sh +71 -0
  11. package/README.md +1797 -624
  12. package/dist/.tsbuildinfo +1 -1
  13. package/dist/agentdb/index.d.ts +2 -0
  14. package/dist/agentdb/index.d.ts.map +1 -1
  15. package/dist/agentdb/index.js +5 -0
  16. package/dist/agentdb/index.js.map +1 -1
  17. package/dist/agentdb/prerequisites.d.ts +25 -0
  18. package/dist/agentdb/prerequisites.d.ts.map +1 -0
  19. package/dist/agentdb/prerequisites.js +180 -0
  20. package/dist/agentdb/prerequisites.js.map +1 -0
  21. package/dist/benchmarks/embeddings-benchmark.d.ts +38 -0
  22. package/dist/benchmarks/embeddings-benchmark.d.ts.map +1 -0
  23. package/dist/benchmarks/embeddings-benchmark.js +282 -0
  24. package/dist/benchmarks/embeddings-benchmark.js.map +1 -0
  25. package/dist/billing/mcp/tools.js +1 -0
  26. package/dist/billing/mcp/tools.js.map +1 -1
  27. package/dist/cli/commands/embeddings.d.ts +12 -0
  28. package/dist/cli/commands/embeddings.d.ts.map +1 -0
  29. package/dist/cli/commands/embeddings.js +386 -0
  30. package/dist/cli/commands/embeddings.js.map +1 -0
  31. package/dist/cli/commands/hooks.d.ts.map +1 -1
  32. package/dist/cli/commands/hooks.js +79 -4
  33. package/dist/cli/commands/hooks.js.map +1 -1
  34. package/dist/cli/commands/init.d.ts +8 -0
  35. package/dist/cli/commands/init.d.ts.map +1 -0
  36. package/dist/cli/commands/init.js +514 -0
  37. package/dist/cli/commands/init.js.map +1 -0
  38. package/dist/cli/commands/workers.d.ts +9 -0
  39. package/dist/cli/commands/workers.d.ts.map +1 -0
  40. package/dist/cli/commands/workers.js +991 -0
  41. package/dist/cli/commands/workers.js.map +1 -0
  42. package/dist/cli/config-wizard.d.ts.map +1 -1
  43. package/dist/cli/config-wizard.js +47 -25
  44. package/dist/cli/config-wizard.js.map +1 -1
  45. package/dist/cli-proxy.js +89 -1
  46. package/dist/cli-proxy.js.map +1 -1
  47. package/dist/core/agentdb-fast.js +3 -3
  48. package/dist/core/agentdb-fast.js.map +1 -1
  49. package/dist/core/agentdb-wrapper-enhanced.d.ts.map +1 -1
  50. package/dist/core/agentdb-wrapper-enhanced.js +37 -11
  51. package/dist/core/agentdb-wrapper-enhanced.js.map +1 -1
  52. package/dist/core/agentdb-wrapper.d.ts +3 -2
  53. package/dist/core/agentdb-wrapper.d.ts.map +1 -1
  54. package/dist/core/agentdb-wrapper.js +15 -1
  55. package/dist/core/agentdb-wrapper.js.map +1 -1
  56. package/dist/core/attention-native.d.ts +4 -0
  57. package/dist/core/attention-native.d.ts.map +1 -1
  58. package/dist/core/attention-native.js +14 -2
  59. package/dist/core/attention-native.js.map +1 -1
  60. package/dist/core/gnn-wrapper.d.ts.map +1 -1
  61. package/dist/core/gnn-wrapper.js +14 -0
  62. package/dist/core/gnn-wrapper.js.map +1 -1
  63. package/dist/embeddings/index.d.ts +17 -0
  64. package/dist/embeddings/index.d.ts.map +1 -0
  65. package/dist/embeddings/index.js +17 -0
  66. package/dist/embeddings/index.js.map +1 -0
  67. package/dist/embeddings/neural-substrate.d.ts +206 -0
  68. package/dist/embeddings/neural-substrate.d.ts.map +1 -0
  69. package/dist/embeddings/neural-substrate.js +629 -0
  70. package/dist/embeddings/neural-substrate.js.map +1 -0
  71. package/dist/embeddings/optimized-embedder.d.ts +103 -0
  72. package/dist/embeddings/optimized-embedder.d.ts.map +1 -0
  73. package/dist/embeddings/optimized-embedder.js +730 -0
  74. package/dist/embeddings/optimized-embedder.js.map +1 -0
  75. package/dist/examples/embedding-geometry.d.ts +105 -0
  76. package/dist/examples/embedding-geometry.d.ts.map +1 -0
  77. package/dist/examples/embedding-geometry.js +528 -0
  78. package/dist/examples/embedding-geometry.js.map +1 -0
  79. package/dist/federation/SecurityManager.d.ts +11 -2
  80. package/dist/federation/SecurityManager.d.ts.map +1 -1
  81. package/dist/federation/SecurityManager.js +50 -17
  82. package/dist/federation/SecurityManager.js.map +1 -1
  83. package/dist/federation/integrations/supabase-adapter-debug.js +3 -3
  84. package/dist/federation/integrations/supabase-adapter-debug.js.map +1 -1
  85. package/dist/hooks/swarm-learning-optimizer.js +5 -5
  86. package/dist/hooks/swarm-learning-optimizer.js.map +1 -1
  87. package/dist/index.d.ts +5 -3
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +89 -51
  90. package/dist/index.js.map +1 -1
  91. package/dist/intelligence/IntelligenceStore.d.ts +35 -26
  92. package/dist/intelligence/IntelligenceStore.d.ts.map +1 -1
  93. package/dist/intelligence/IntelligenceStore.js +308 -123
  94. package/dist/intelligence/IntelligenceStore.js.map +1 -1
  95. package/dist/intelligence/RuVectorIntelligence.d.ts +26 -1
  96. package/dist/intelligence/RuVectorIntelligence.d.ts.map +1 -1
  97. package/dist/intelligence/RuVectorIntelligence.js +49 -10
  98. package/dist/intelligence/RuVectorIntelligence.js.map +1 -1
  99. package/dist/intelligence/agent-booster-enhanced.d.ts +1 -0
  100. package/dist/intelligence/agent-booster-enhanced.d.ts.map +1 -1
  101. package/dist/intelligence/agent-booster-enhanced.js +24 -3
  102. package/dist/intelligence/agent-booster-enhanced.js.map +1 -1
  103. package/dist/intelligence/index.d.ts +29 -3
  104. package/dist/intelligence/index.d.ts.map +1 -1
  105. package/dist/intelligence/index.js +13 -3
  106. package/dist/intelligence/index.js.map +1 -1
  107. package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
  108. package/dist/mcp/claudeFlowSdkServer.js +162 -115
  109. package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
  110. package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js +5 -5
  111. package/dist/mcp/fastmcp/tools/hooks/intelligence-bridge.js.map +1 -1
  112. package/dist/mcp/fastmcp/tools/swarm/init.d.ts.map +1 -1
  113. package/dist/mcp/fastmcp/tools/swarm/init.js +36 -7
  114. package/dist/mcp/fastmcp/tools/swarm/init.js.map +1 -1
  115. package/dist/mcp/fastmcp/tools/swarm/spawn.d.ts.map +1 -1
  116. package/dist/mcp/fastmcp/tools/swarm/spawn.js +47 -8
  117. package/dist/mcp/fastmcp/tools/swarm/spawn.js.map +1 -1
  118. package/dist/mcp/tools/agent-booster-tools.d.ts +15 -1
  119. package/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -1
  120. package/dist/mcp/tools/agent-booster-tools.js +79 -63
  121. package/dist/mcp/tools/agent-booster-tools.js.map +1 -1
  122. package/dist/mcp/tools/sona-tools.d.ts.map +1 -1
  123. package/dist/mcp/tools/sona-tools.js +6 -0
  124. package/dist/mcp/tools/sona-tools.js.map +1 -1
  125. package/dist/memory/SharedMemoryPool.d.ts +103 -0
  126. package/dist/memory/SharedMemoryPool.d.ts.map +1 -0
  127. package/dist/memory/SharedMemoryPool.js +263 -0
  128. package/dist/memory/SharedMemoryPool.js.map +1 -0
  129. package/dist/optimizations/agent-booster-migration.d.ts +2 -1
  130. package/dist/optimizations/agent-booster-migration.d.ts.map +1 -1
  131. package/dist/optimizations/agent-booster-migration.js +69 -45
  132. package/dist/optimizations/agent-booster-migration.js.map +1 -1
  133. package/dist/orchestration/index.d.ts +11 -0
  134. package/dist/orchestration/index.d.ts.map +1 -0
  135. package/dist/orchestration/index.js +10 -0
  136. package/dist/orchestration/index.js.map +1 -0
  137. package/dist/orchestration/memory-plane-types.d.ts +23 -0
  138. package/dist/orchestration/memory-plane-types.d.ts.map +1 -0
  139. package/dist/orchestration/memory-plane-types.js +5 -0
  140. package/dist/orchestration/memory-plane-types.js.map +1 -0
  141. package/dist/orchestration/memory-plane.d.ts +41 -0
  142. package/dist/orchestration/memory-plane.d.ts.map +1 -0
  143. package/dist/orchestration/memory-plane.js +84 -0
  144. package/dist/orchestration/memory-plane.js.map +1 -0
  145. package/dist/orchestration/orchestration-client.d.ts +104 -0
  146. package/dist/orchestration/orchestration-client.d.ts.map +1 -0
  147. package/dist/orchestration/orchestration-client.js +94 -0
  148. package/dist/orchestration/orchestration-client.js.map +1 -0
  149. package/dist/orchestration/orchestration-runtime.d.ts +26 -0
  150. package/dist/orchestration/orchestration-runtime.d.ts.map +1 -0
  151. package/dist/orchestration/orchestration-runtime.js +78 -0
  152. package/dist/orchestration/orchestration-runtime.js.map +1 -0
  153. package/dist/orchestration/orchestration-types.d.ts +124 -0
  154. package/dist/orchestration/orchestration-types.d.ts.map +1 -0
  155. package/dist/orchestration/orchestration-types.js +7 -0
  156. package/dist/orchestration/orchestration-types.js.map +1 -0
  157. package/dist/proxy/anthropic-to-openrouter.js.map +1 -1
  158. package/dist/proxy/anthropic-to-requesty.js.map +1 -1
  159. package/dist/proxy/quic-proxy.d.ts +0 -1
  160. package/dist/proxy/quic-proxy.d.ts.map +1 -1
  161. package/dist/proxy/quic-proxy.js +2 -2
  162. package/dist/proxy/quic-proxy.js.map +1 -1
  163. package/dist/reasoningbank/AdvancedMemory.js +1 -1
  164. package/dist/reasoningbank/AdvancedMemory.js.map +1 -1
  165. package/dist/reasoningbank/HybridBackend.d.ts.map +1 -1
  166. package/dist/reasoningbank/HybridBackend.js +2 -5
  167. package/dist/reasoningbank/HybridBackend.js.map +1 -1
  168. package/dist/reasoningbank/backend-selector.d.ts +10 -0
  169. package/dist/reasoningbank/backend-selector.d.ts.map +1 -1
  170. package/dist/reasoningbank/backend-selector.js +45 -5
  171. package/dist/reasoningbank/backend-selector.js.map +1 -1
  172. package/dist/reasoningbank/core/consolidate.d.ts.map +1 -1
  173. package/dist/reasoningbank/core/consolidate.js +113 -45
  174. package/dist/reasoningbank/core/consolidate.js.map +1 -1
  175. package/dist/reasoningbank/index-new.d.ts +1 -6
  176. package/dist/reasoningbank/index-new.d.ts.map +1 -1
  177. package/dist/reasoningbank/index-new.js +1 -6
  178. package/dist/reasoningbank/index-new.js.map +1 -1
  179. package/dist/reasoningbank/index.d.ts +6 -0
  180. package/dist/reasoningbank/index.d.ts.map +1 -1
  181. package/dist/reasoningbank/index.js +6 -13
  182. package/dist/reasoningbank/index.js.map +1 -1
  183. package/dist/reasoningbank/utils/embeddings.d.ts +1 -0
  184. package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -1
  185. package/dist/reasoningbank/utils/embeddings.js +53 -26
  186. package/dist/reasoningbank/utils/embeddings.js.map +1 -1
  187. package/dist/router/index.d.ts +2 -1
  188. package/dist/router/index.d.ts.map +1 -1
  189. package/dist/router/index.js +1 -0
  190. package/dist/router/index.js.map +1 -1
  191. package/dist/router/providers/ollama.d.ts +20 -0
  192. package/dist/router/providers/ollama.d.ts.map +1 -0
  193. package/dist/router/providers/ollama.js +242 -0
  194. package/dist/router/providers/ollama.js.map +1 -0
  195. package/dist/router/providers/onnx-local-optimized.d.ts +2 -0
  196. package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
  197. package/dist/router/providers/onnx-local-optimized.js +10 -0
  198. package/dist/router/providers/onnx-local-optimized.js.map +1 -1
  199. package/dist/router/providers/onnx-local.d.ts +1 -0
  200. package/dist/router/providers/onnx-local.d.ts.map +1 -1
  201. package/dist/router/providers/onnx-local.js +22 -5
  202. package/dist/router/providers/onnx-local.js.map +1 -1
  203. package/dist/router/router.d.ts.map +1 -1
  204. package/dist/router/router.js +39 -23
  205. package/dist/router/router.js.map +1 -1
  206. package/dist/sdk/index.d.ts +2 -1
  207. package/dist/sdk/index.d.ts.map +1 -1
  208. package/dist/sdk/index.js +3 -1
  209. package/dist/sdk/index.js.map +1 -1
  210. package/dist/services/embedding-service.js.map +1 -1
  211. package/dist/services/sona-agent-training.d.ts +1 -0
  212. package/dist/services/sona-agent-training.d.ts.map +1 -1
  213. package/dist/services/sona-agent-training.js.map +1 -1
  214. package/dist/services/sona-agentdb-integration.d.ts.map +1 -1
  215. package/dist/services/sona-agentdb-integration.js +9 -6
  216. package/dist/services/sona-agentdb-integration.js.map +1 -1
  217. package/dist/services/sona-service.d.ts.map +1 -1
  218. package/dist/services/sona-service.js +6 -5
  219. package/dist/services/sona-service.js.map +1 -1
  220. package/dist/utils/cli.d.ts +1 -1
  221. package/dist/utils/cli.d.ts.map +1 -1
  222. package/dist/utils/cli.js +21 -0
  223. package/dist/utils/cli.js.map +1 -1
  224. package/dist/utils/index.d.ts +6 -0
  225. package/dist/utils/index.d.ts.map +1 -0
  226. package/dist/utils/index.js +6 -0
  227. package/dist/utils/index.js.map +1 -0
  228. package/dist/utils/model-cache.d.ts +61 -0
  229. package/dist/utils/model-cache.d.ts.map +1 -0
  230. package/dist/utils/model-cache.js +176 -0
  231. package/dist/utils/model-cache.js.map +1 -0
  232. package/dist/utils/suppress-warnings.d.ts +19 -0
  233. package/dist/utils/suppress-warnings.d.ts.map +1 -0
  234. package/dist/utils/suppress-warnings.js +59 -0
  235. package/dist/utils/suppress-warnings.js.map +1 -0
  236. package/dist/workers/consolidated-phases.d.ts +40 -0
  237. package/dist/workers/consolidated-phases.d.ts.map +1 -0
  238. package/dist/workers/consolidated-phases.js +497 -0
  239. package/dist/workers/consolidated-phases.js.map +1 -0
  240. package/dist/workers/custom-worker-config.d.ts +133 -0
  241. package/dist/workers/custom-worker-config.d.ts.map +1 -0
  242. package/dist/workers/custom-worker-config.js +215 -0
  243. package/dist/workers/custom-worker-config.js.map +1 -0
  244. package/dist/workers/custom-worker-factory.d.ts +89 -0
  245. package/dist/workers/custom-worker-factory.d.ts.map +1 -0
  246. package/dist/workers/custom-worker-factory.js +404 -0
  247. package/dist/workers/custom-worker-factory.js.map +1 -0
  248. package/dist/workers/dispatch-service.d.ts +123 -0
  249. package/dist/workers/dispatch-service.d.ts.map +1 -0
  250. package/dist/workers/dispatch-service.js +1024 -0
  251. package/dist/workers/dispatch-service.js.map +1 -0
  252. package/dist/workers/hooks-integration.d.ts +79 -0
  253. package/dist/workers/hooks-integration.d.ts.map +1 -0
  254. package/dist/workers/hooks-integration.js +286 -0
  255. package/dist/workers/hooks-integration.js.map +1 -0
  256. package/dist/workers/index.d.ts +42 -0
  257. package/dist/workers/index.d.ts.map +1 -0
  258. package/dist/workers/index.js +52 -0
  259. package/dist/workers/index.js.map +1 -0
  260. package/dist/workers/mcp-tools.d.ts +56 -0
  261. package/dist/workers/mcp-tools.d.ts.map +1 -0
  262. package/dist/workers/mcp-tools.js +359 -0
  263. package/dist/workers/mcp-tools.js.map +1 -0
  264. package/dist/workers/phase-executors.d.ts +22 -0
  265. package/dist/workers/phase-executors.d.ts.map +1 -0
  266. package/dist/workers/phase-executors.js +445 -0
  267. package/dist/workers/phase-executors.js.map +1 -0
  268. package/dist/workers/resource-governor.d.ts +75 -0
  269. package/dist/workers/resource-governor.d.ts.map +1 -0
  270. package/dist/workers/resource-governor.js +187 -0
  271. package/dist/workers/resource-governor.js.map +1 -0
  272. package/dist/workers/ruvector-integration.d.ts +163 -0
  273. package/dist/workers/ruvector-integration.d.ts.map +1 -0
  274. package/dist/workers/ruvector-integration.js +543 -0
  275. package/dist/workers/ruvector-integration.js.map +1 -0
  276. package/dist/workers/ruvector-native-integration.d.ts +91 -0
  277. package/dist/workers/ruvector-native-integration.d.ts.map +1 -0
  278. package/dist/workers/ruvector-native-integration.js +254 -0
  279. package/dist/workers/ruvector-native-integration.js.map +1 -0
  280. package/dist/workers/trigger-detector.d.ts +68 -0
  281. package/dist/workers/trigger-detector.d.ts.map +1 -0
  282. package/dist/workers/trigger-detector.js +281 -0
  283. package/dist/workers/trigger-detector.js.map +1 -0
  284. package/dist/workers/types.d.ts +145 -0
  285. package/dist/workers/types.d.ts.map +1 -0
  286. package/dist/workers/types.js +6 -0
  287. package/dist/workers/types.js.map +1 -0
  288. package/dist/workers/worker-agent-integration.d.ts +140 -0
  289. package/dist/workers/worker-agent-integration.d.ts.map +1 -0
  290. package/dist/workers/worker-agent-integration.js +471 -0
  291. package/dist/workers/worker-agent-integration.js.map +1 -0
  292. package/dist/workers/worker-benchmarks.d.ts +88 -0
  293. package/dist/workers/worker-benchmarks.d.ts.map +1 -0
  294. package/dist/workers/worker-benchmarks.js +452 -0
  295. package/dist/workers/worker-benchmarks.js.map +1 -0
  296. package/dist/workers/worker-registry.d.ts +85 -0
  297. package/dist/workers/worker-registry.d.ts.map +1 -0
  298. package/dist/workers/worker-registry.js +547 -0
  299. package/dist/workers/worker-registry.js.map +1 -0
  300. package/docs/embeddings/EMBEDDING_GEOMETRY.md +935 -0
  301. package/package.json +26 -8
  302. package/scripts/postinstall.js +45 -4
  303. package/wasm/reasoningbank/reasoningbank_wasm.js +1 -1
  304. package/wasm/reasoningbank/reasoningbank_wasm_bg.js +54 -54
  305. package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm +0 -0
  306. package/wasm/reasoningbank/reasoningbank_wasm_bg.wasm.d.ts +4 -3
  307. package/.claude/agents/test-neural.md +0 -14
  308. /package/.claude/agents/analysis/{code-review/analyze-code-quality.md → analyze-code-quality.md} +0 -0
  309. /package/.claude/agents/architecture/{system-design/arch-system-design.md → arch-system-design.md} +0 -0
  310. /package/.claude/agents/data/{ml/data-ml-model.md → data-ml-model.md} +0 -0
  311. /package/.claude/agents/development/{backend/dev-backend-api.md → dev-backend-api.md} +0 -0
  312. /package/.claude/agents/devops/{ci-cd/ops-cicd-github.md → ops-cicd-github.md} +0 -0
  313. /package/.claude/agents/documentation/{api-docs/docs-api-openapi.md → docs-api-openapi.md} +0 -0
  314. /package/.claude/agents/specialized/{mobile/spec-mobile-react-native.md → spec-mobile-react-native.md} +0 -0
  315. /package/.claude/agents/testing/{validation/production-validator.md → production-validator.md} +0 -0
  316. /package/.claude/agents/testing/{unit/tdd-london-swarm.md → tdd-london-swarm.md} +0 -0
@@ -0,0 +1,404 @@
1
+ /**
2
+ * Custom Worker Factory
3
+ *
4
+ * Creates worker implementations from CustomWorkerDefinition configs.
5
+ * Handles loading config files, validating definitions, and registering
6
+ * custom workers with the dispatch service.
7
+ */
8
+ import * as fs from 'fs/promises';
9
+ import * as path from 'path';
10
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
11
+ import { validateWorkerDefinition, WORKER_PRESETS, DEFAULT_CAPABILITIES, DEFAULT_FILE_FILTER, DEFAULT_OUTPUT } from './custom-worker-config.js';
12
+ import { executePhasePipeline } from './phase-executors.js';
13
+ // ============================================================================
14
+ // Factory Functions
15
+ // ============================================================================
16
+ /**
17
+ * Create a worker instance from a definition
18
+ */
19
+ export function createCustomWorker(definition, globalSettings) {
20
+ // Validate definition
21
+ const validation = validateWorkerDefinition(definition);
22
+ if (!validation.valid) {
23
+ throw new Error(`Invalid worker definition: ${validation.errors.join(', ')}`);
24
+ }
25
+ // Merge capabilities
26
+ const capabilities = {
27
+ ...DEFAULT_CAPABILITIES,
28
+ ...globalSettings?.defaultCapabilities,
29
+ ...definition.capabilities
30
+ };
31
+ // Merge file filter
32
+ const fileFilter = {
33
+ ...DEFAULT_FILE_FILTER,
34
+ ...globalSettings?.defaultFileFilter,
35
+ ...definition.fileFilter
36
+ };
37
+ // Merge output config
38
+ const output = {
39
+ ...DEFAULT_OUTPUT,
40
+ ...globalSettings?.defaultOutput,
41
+ ...definition.output
42
+ };
43
+ // Create executor
44
+ const execute = async (context) => {
45
+ const startTime = Date.now();
46
+ try {
47
+ // Execute phase pipeline
48
+ const result = await executePhasePipeline(context, definition.phases, (phase, progress) => {
49
+ // Progress callback for real-time updates
50
+ if (capabilities.progressEvents) {
51
+ console.log(`[${definition.name}] Phase: ${phase} (${progress}%)`);
52
+ }
53
+ });
54
+ // Build results
55
+ const completedCount = Array.from(result.results.values()).filter(r => r?.success).length;
56
+ const results = {
57
+ status: result.success ? 'complete' : 'failed',
58
+ success: result.success,
59
+ completedPhases: completedCount,
60
+ totalPhases: definition.phases.length,
61
+ memoryKeys: [],
62
+ duration: Date.now() - startTime,
63
+ data: buildResultsData(result.phaseContext, result.results, output)
64
+ };
65
+ // Handle learning capabilities
66
+ if (capabilities.sonaLearning && result.phaseContext.patterns.length > 0) {
67
+ results.data.sonaTrainingTriggered = true;
68
+ }
69
+ if (capabilities.vectorDb && result.phaseContext.patterns.length > 0) {
70
+ results.data.vectorDbUpdated = true;
71
+ }
72
+ // Add timing
73
+ results.data.executionTimeMs = Date.now() - startTime;
74
+ results.data.phasesExecuted = definition.phases.length;
75
+ // Add errors if any
76
+ if (result.errors.length > 0) {
77
+ results.data.errors = result.errors;
78
+ }
79
+ return results;
80
+ }
81
+ catch (error) {
82
+ return {
83
+ status: 'failed',
84
+ success: false,
85
+ completedPhases: 0,
86
+ totalPhases: definition.phases.length,
87
+ memoryKeys: [],
88
+ duration: Date.now() - startTime,
89
+ error: error instanceof Error ? error.message : 'Worker execution failed',
90
+ data: {
91
+ error: error instanceof Error ? error.message : 'Worker execution failed',
92
+ executionTimeMs: Date.now() - startTime
93
+ }
94
+ };
95
+ }
96
+ };
97
+ return {
98
+ definition,
99
+ capabilities,
100
+ fileFilter,
101
+ output,
102
+ execute
103
+ };
104
+ }
105
+ /**
106
+ * Build results data from phase context
107
+ */
108
+ function buildResultsData(phaseContext, phaseResults, outputConfig) {
109
+ const data = {
110
+ files_analyzed: phaseContext.files.length,
111
+ patterns_found: phaseContext.patterns.length,
112
+ bytes_processed: phaseContext.bytes
113
+ };
114
+ // Add samples if configured
115
+ if (outputConfig.includeSamples) {
116
+ const maxSamples = outputConfig.maxSamples || 10;
117
+ data.sample_patterns = phaseContext.patterns.slice(0, maxSamples);
118
+ }
119
+ // Add file list if configured
120
+ if (outputConfig.includeFileList) {
121
+ data.files = phaseContext.files;
122
+ }
123
+ // Add metrics if configured
124
+ if (outputConfig.includeMetrics) {
125
+ data.metrics = phaseContext.metrics;
126
+ }
127
+ // Add phase-specific data
128
+ const phaseData = {};
129
+ for (const [phase, result] of phaseResults) {
130
+ if (result?.data) {
131
+ phaseData[phase] = result.data;
132
+ }
133
+ }
134
+ data.phaseResults = phaseData;
135
+ return data;
136
+ }
137
+ // ============================================================================
138
+ // Create from Preset
139
+ // ============================================================================
140
+ /**
141
+ * Create a worker from a preset
142
+ */
143
+ export function createFromPreset(presetName, overrides) {
144
+ const preset = WORKER_PRESETS[presetName];
145
+ if (!preset) {
146
+ throw new Error(`Unknown preset: ${presetName}. Available: ${Object.keys(WORKER_PRESETS).join(', ')}`);
147
+ }
148
+ const definition = {
149
+ name: overrides?.name || presetName,
150
+ description: preset.description || `Worker from ${presetName} preset`,
151
+ triggers: overrides?.triggers || [presetName],
152
+ priority: preset.priority || 'medium',
153
+ timeout: preset.timeout || 120000,
154
+ phases: overrides?.phases || preset.phases || [],
155
+ capabilities: { ...preset.capabilities, ...overrides?.capabilities },
156
+ fileFilter: { ...preset.fileFilter, ...overrides?.fileFilter },
157
+ output: { ...preset.output, ...overrides?.output },
158
+ ...overrides
159
+ };
160
+ return createCustomWorker(definition);
161
+ }
162
+ // ============================================================================
163
+ // Config File Loading
164
+ // ============================================================================
165
+ const CONFIG_FILENAMES = [
166
+ 'workers.yaml',
167
+ 'workers.yml',
168
+ 'workers.json',
169
+ '.agentic-flow/workers.yaml',
170
+ '.agentic-flow/workers.yml',
171
+ '.agentic-flow/workers.json'
172
+ ];
173
+ /**
174
+ * Load workers from a config file
175
+ */
176
+ export async function loadWorkersFromConfig(configPath) {
177
+ let content;
178
+ let actualPath;
179
+ if (configPath) {
180
+ actualPath = path.isAbsolute(configPath) ? configPath : path.join(process.cwd(), configPath);
181
+ try {
182
+ content = await fs.readFile(actualPath, 'utf-8');
183
+ }
184
+ catch (error) {
185
+ throw new Error(`Failed to read config file: ${actualPath}`);
186
+ }
187
+ }
188
+ else {
189
+ // Search for config file
190
+ for (const filename of CONFIG_FILENAMES) {
191
+ const tryPath = path.join(process.cwd(), filename);
192
+ try {
193
+ content = await fs.readFile(tryPath, 'utf-8');
194
+ actualPath = tryPath;
195
+ break;
196
+ }
197
+ catch {
198
+ continue;
199
+ }
200
+ }
201
+ if (!content) {
202
+ return [];
203
+ }
204
+ }
205
+ // Parse config
206
+ let config;
207
+ if (actualPath.endsWith('.json')) {
208
+ config = JSON.parse(content);
209
+ }
210
+ else {
211
+ config = parseYaml(content);
212
+ }
213
+ // Validate version
214
+ if (config.version !== '1.0') {
215
+ console.warn(`Unknown config version: ${config.version}. Expected 1.0`);
216
+ }
217
+ // Create workers
218
+ const workers = [];
219
+ for (const def of config.workers) {
220
+ try {
221
+ const worker = createCustomWorker(def, config.settings);
222
+ workers.push(worker);
223
+ }
224
+ catch (error) {
225
+ console.error(`Failed to create worker "${def.name}": ${error}`);
226
+ }
227
+ }
228
+ return workers;
229
+ }
230
+ // ============================================================================
231
+ // Worker Registry Integration
232
+ // ============================================================================
233
+ export class CustomWorkerManager {
234
+ workers = new Map();
235
+ triggerMap = new Map(); // trigger -> worker name
236
+ /**
237
+ * Register a custom worker
238
+ */
239
+ register(worker) {
240
+ const name = worker.definition.name;
241
+ this.workers.set(name, worker);
242
+ // Register triggers
243
+ this.triggerMap.set(name, name);
244
+ for (const trigger of worker.definition.triggers || []) {
245
+ this.triggerMap.set(trigger.toLowerCase(), name);
246
+ }
247
+ }
248
+ /**
249
+ * Create and register from preset
250
+ */
251
+ registerPreset(presetName, overrides) {
252
+ const worker = createFromPreset(presetName, overrides);
253
+ this.register(worker);
254
+ return worker;
255
+ }
256
+ /**
257
+ * Create and register from definition
258
+ */
259
+ registerDefinition(definition) {
260
+ const worker = createCustomWorker(definition);
261
+ this.register(worker);
262
+ return worker;
263
+ }
264
+ /**
265
+ * Load and register from config file
266
+ */
267
+ async loadFromConfig(configPath) {
268
+ const workers = await loadWorkersFromConfig(configPath);
269
+ workers.forEach(w => this.register(w));
270
+ return workers.length;
271
+ }
272
+ /**
273
+ * Get worker by name or trigger
274
+ */
275
+ get(nameOrTrigger) {
276
+ const key = nameOrTrigger.toLowerCase();
277
+ const name = this.triggerMap.get(key);
278
+ return name ? this.workers.get(name) : undefined;
279
+ }
280
+ /**
281
+ * Check if a trigger matches a custom worker
282
+ */
283
+ matchesTrigger(input) {
284
+ const lower = input.toLowerCase();
285
+ for (const [trigger, name] of this.triggerMap) {
286
+ if (lower.includes(trigger)) {
287
+ return name;
288
+ }
289
+ }
290
+ return undefined;
291
+ }
292
+ /**
293
+ * List all registered workers
294
+ */
295
+ list() {
296
+ return Array.from(this.workers.values());
297
+ }
298
+ /**
299
+ * List available presets
300
+ */
301
+ listPresets() {
302
+ return Object.keys(WORKER_PRESETS);
303
+ }
304
+ /**
305
+ * Get preset definition
306
+ */
307
+ getPreset(name) {
308
+ return WORKER_PRESETS[name];
309
+ }
310
+ /**
311
+ * Execute a custom worker
312
+ */
313
+ async execute(nameOrTrigger, context) {
314
+ const worker = this.get(nameOrTrigger);
315
+ if (!worker) {
316
+ return {
317
+ status: 'failed',
318
+ success: false,
319
+ completedPhases: 0,
320
+ totalPhases: 0,
321
+ memoryKeys: [],
322
+ duration: 0,
323
+ error: `Custom worker not found: ${nameOrTrigger}`,
324
+ data: { error: `Custom worker not found: ${nameOrTrigger}` }
325
+ };
326
+ }
327
+ return worker.execute(context);
328
+ }
329
+ /**
330
+ * Generate example config file
331
+ */
332
+ generateExampleConfig() {
333
+ const example = {
334
+ version: '1.0',
335
+ workers: [
336
+ {
337
+ name: 'my-scanner',
338
+ description: 'Custom code scanner',
339
+ triggers: ['scan-my'],
340
+ priority: 'medium',
341
+ timeout: 120000,
342
+ phases: [
343
+ { type: 'file-discovery' },
344
+ { type: 'pattern-extraction' },
345
+ { type: 'security-analysis' },
346
+ { type: 'summarization' }
347
+ ],
348
+ capabilities: {
349
+ onnxEmbeddings: true,
350
+ vectorDb: true
351
+ },
352
+ output: {
353
+ format: 'detailed',
354
+ includeSamples: true
355
+ }
356
+ }
357
+ ],
358
+ settings: {
359
+ defaultCapabilities: {
360
+ progressEvents: true
361
+ },
362
+ maxConcurrent: 3,
363
+ debug: false
364
+ }
365
+ };
366
+ return `# Custom Workers Configuration
367
+ # Save as workers.yaml or .agentic-flow/workers.yaml
368
+
369
+ ${stringifyYaml(example)}`;
370
+ }
371
+ }
372
+ // Singleton instance
373
+ export const customWorkerManager = new CustomWorkerManager();
374
+ // ============================================================================
375
+ // CLI Helper Functions
376
+ // ============================================================================
377
+ export function formatWorkerInfo(worker) {
378
+ const def = worker.definition;
379
+ const lines = [
380
+ `Name: ${def.name}`,
381
+ `Description: ${def.description}`,
382
+ `Triggers: ${[def.name, ...(def.triggers || [])].join(', ')}`,
383
+ `Priority: ${def.priority || 'medium'}`,
384
+ `Timeout: ${(def.timeout || 120000) / 1000}s`,
385
+ `Phases: ${def.phases.map(p => p.type).join(' → ')}`,
386
+ '',
387
+ 'Capabilities:',
388
+ ...Object.entries(worker.capabilities)
389
+ .filter(([_, v]) => v)
390
+ .map(([k]) => ` ✓ ${k}`)
391
+ ];
392
+ return lines.join('\n');
393
+ }
394
+ export function formatPresetList() {
395
+ const lines = ['Available Presets:', ''];
396
+ for (const [name, preset] of Object.entries(WORKER_PRESETS)) {
397
+ lines.push(` ${name}`);
398
+ lines.push(` ${preset.description}`);
399
+ lines.push(` Phases: ${preset.phases?.map(p => p.type).join(' → ') || 'none'}`);
400
+ lines.push('');
401
+ }
402
+ return lines.join('\n');
403
+ }
404
+ //# sourceMappingURL=custom-worker-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-worker-factory.js","sourceRoot":"","sources":["../../src/workers/custom-worker-factory.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Custom Worker Factory\n *\n * Creates worker implementations from CustomWorkerDefinition configs.\n * Handles loading config files, validating definitions, and registering\n * custom workers with the dispatch service.\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml';\nimport {\n CustomWorkerDefinition,\n WorkerConfigFile,\n validateWorkerDefinition,\n WORKER_PRESETS,\n DEFAULT_CAPABILITIES,\n DEFAULT_FILE_FILTER,\n DEFAULT_OUTPUT,\n CapabilityConfig,\n FileFilterConfig,\n OutputConfig\n} from './custom-worker-config.js';\nimport { WorkerContext, WorkerResults } from './types.js';\nimport { executePhasePipeline, PhaseContext } from './phase-executors.js';\n\n// ============================================================================\n// Custom Worker Instance\n// ============================================================================\n\nexport interface CustomWorkerInstance {\n /** Worker definition */\n definition: CustomWorkerDefinition;\n /** Merged capabilities */\n capabilities: CapabilityConfig;\n /** Merged file filter */\n fileFilter: FileFilterConfig;\n /** Merged output config */\n output: OutputConfig;\n /** Execute the worker */\n execute: (context: WorkerContext) => Promise<WorkerResults>;\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create a worker instance from a definition\n */\nexport function createCustomWorker(\n definition: CustomWorkerDefinition,\n globalSettings?: {\n defaultCapabilities?: Partial<CapabilityConfig>;\n defaultFileFilter?: Partial<FileFilterConfig>;\n defaultOutput?: Partial<OutputConfig>;\n }\n): CustomWorkerInstance {\n // Validate definition\n const validation = validateWorkerDefinition(definition);\n if (!validation.valid) {\n throw new Error(`Invalid worker definition: ${validation.errors.join(', ')}`);\n }\n\n // Merge capabilities\n const capabilities: CapabilityConfig = {\n ...DEFAULT_CAPABILITIES,\n ...globalSettings?.defaultCapabilities,\n ...definition.capabilities\n };\n\n // Merge file filter\n const fileFilter: FileFilterConfig = {\n ...DEFAULT_FILE_FILTER,\n ...globalSettings?.defaultFileFilter,\n ...definition.fileFilter\n };\n\n // Merge output config\n const output: OutputConfig = {\n ...DEFAULT_OUTPUT,\n ...globalSettings?.defaultOutput,\n ...definition.output\n };\n\n // Create executor\n const execute = async (context: WorkerContext): Promise<WorkerResults> => {\n const startTime = Date.now();\n\n try {\n // Execute phase pipeline\n const result = await executePhasePipeline(\n context,\n definition.phases,\n (phase, progress) => {\n // Progress callback for real-time updates\n if (capabilities.progressEvents) {\n console.log(`[${definition.name}] Phase: ${phase} (${progress}%)`);\n }\n }\n );\n\n // Build results\n const completedCount = Array.from(result.results.values()).filter(r => r?.success).length;\n const results: WorkerResults = {\n status: result.success ? 'complete' : 'failed',\n success: result.success,\n completedPhases: completedCount,\n totalPhases: definition.phases.length,\n memoryKeys: [],\n duration: Date.now() - startTime,\n data: buildResultsData(result.phaseContext, result.results, output)\n };\n\n // Handle learning capabilities\n if (capabilities.sonaLearning && result.phaseContext.patterns.length > 0) {\n results.data.sonaTrainingTriggered = true;\n }\n\n if (capabilities.vectorDb && result.phaseContext.patterns.length > 0) {\n results.data.vectorDbUpdated = true;\n }\n\n // Add timing\n results.data.executionTimeMs = Date.now() - startTime;\n results.data.phasesExecuted = definition.phases.length;\n\n // Add errors if any\n if (result.errors.length > 0) {\n results.data.errors = result.errors;\n }\n\n return results;\n } catch (error) {\n return {\n status: 'failed' as const,\n success: false,\n completedPhases: 0,\n totalPhases: definition.phases.length,\n memoryKeys: [],\n duration: Date.now() - startTime,\n error: error instanceof Error ? error.message : 'Worker execution failed',\n data: {\n error: error instanceof Error ? error.message : 'Worker execution failed',\n executionTimeMs: Date.now() - startTime\n }\n };\n }\n };\n\n return {\n definition,\n capabilities,\n fileFilter,\n output,\n execute\n };\n}\n\n/**\n * Build results data from phase context\n */\nfunction buildResultsData(\n phaseContext: PhaseContext,\n phaseResults: Map<string, any>,\n outputConfig: OutputConfig\n): Record<string, unknown> {\n const data: Record<string, unknown> = {\n files_analyzed: phaseContext.files.length,\n patterns_found: phaseContext.patterns.length,\n bytes_processed: phaseContext.bytes\n };\n\n // Add samples if configured\n if (outputConfig.includeSamples) {\n const maxSamples = outputConfig.maxSamples || 10;\n data.sample_patterns = phaseContext.patterns.slice(0, maxSamples);\n }\n\n // Add file list if configured\n if (outputConfig.includeFileList) {\n data.files = phaseContext.files;\n }\n\n // Add metrics if configured\n if (outputConfig.includeMetrics) {\n data.metrics = phaseContext.metrics;\n }\n\n // Add phase-specific data\n const phaseData: Record<string, unknown> = {};\n for (const [phase, result] of phaseResults) {\n if (result?.data) {\n phaseData[phase] = result.data;\n }\n }\n data.phaseResults = phaseData;\n\n return data;\n}\n\n// ============================================================================\n// Create from Preset\n// ============================================================================\n\n/**\n * Create a worker from a preset\n */\nexport function createFromPreset(\n presetName: string,\n overrides?: Partial<CustomWorkerDefinition>\n): CustomWorkerInstance {\n const preset = WORKER_PRESETS[presetName];\n if (!preset) {\n throw new Error(`Unknown preset: ${presetName}. Available: ${Object.keys(WORKER_PRESETS).join(', ')}`);\n }\n\n const definition: CustomWorkerDefinition = {\n name: overrides?.name || presetName,\n description: preset.description || `Worker from ${presetName} preset`,\n triggers: overrides?.triggers || [presetName],\n priority: preset.priority || 'medium',\n timeout: preset.timeout || 120000,\n phases: overrides?.phases || preset.phases || [],\n capabilities: { ...preset.capabilities, ...overrides?.capabilities },\n fileFilter: { ...preset.fileFilter, ...overrides?.fileFilter },\n output: { ...preset.output, ...overrides?.output },\n ...overrides\n };\n\n return createCustomWorker(definition);\n}\n\n// ============================================================================\n// Config File Loading\n// ============================================================================\n\nconst CONFIG_FILENAMES = [\n 'workers.yaml',\n 'workers.yml',\n 'workers.json',\n '.agentic-flow/workers.yaml',\n '.agentic-flow/workers.yml',\n '.agentic-flow/workers.json'\n];\n\n/**\n * Load workers from a config file\n */\nexport async function loadWorkersFromConfig(\n configPath?: string\n): Promise<CustomWorkerInstance[]> {\n let content: string;\n let actualPath: string;\n\n if (configPath) {\n actualPath = path.isAbsolute(configPath) ? configPath : path.join(process.cwd(), configPath);\n try {\n content = await fs.readFile(actualPath, 'utf-8');\n } catch (error) {\n throw new Error(`Failed to read config file: ${actualPath}`);\n }\n } else {\n // Search for config file\n for (const filename of CONFIG_FILENAMES) {\n const tryPath = path.join(process.cwd(), filename);\n try {\n content = await fs.readFile(tryPath, 'utf-8');\n actualPath = tryPath;\n break;\n } catch {\n continue;\n }\n }\n if (!content!) {\n return [];\n }\n }\n\n // Parse config\n let config: WorkerConfigFile;\n if (actualPath!.endsWith('.json')) {\n config = JSON.parse(content);\n } else {\n config = parseYaml(content) as WorkerConfigFile;\n }\n\n // Validate version\n if (config.version !== '1.0') {\n console.warn(`Unknown config version: ${config.version}. Expected 1.0`);\n }\n\n // Create workers\n const workers: CustomWorkerInstance[] = [];\n for (const def of config.workers) {\n try {\n const worker = createCustomWorker(def, config.settings);\n workers.push(worker);\n } catch (error) {\n console.error(`Failed to create worker \"${def.name}\": ${error}`);\n }\n }\n\n return workers;\n}\n\n// ============================================================================\n// Worker Registry Integration\n// ============================================================================\n\nexport class CustomWorkerManager {\n private workers = new Map<string, CustomWorkerInstance>();\n private triggerMap = new Map<string, string>(); // trigger -> worker name\n\n /**\n * Register a custom worker\n */\n register(worker: CustomWorkerInstance): void {\n const name = worker.definition.name;\n this.workers.set(name, worker);\n\n // Register triggers\n this.triggerMap.set(name, name);\n for (const trigger of worker.definition.triggers || []) {\n this.triggerMap.set(trigger.toLowerCase(), name);\n }\n }\n\n /**\n * Create and register from preset\n */\n registerPreset(presetName: string, overrides?: Partial<CustomWorkerDefinition>): CustomWorkerInstance {\n const worker = createFromPreset(presetName, overrides);\n this.register(worker);\n return worker;\n }\n\n /**\n * Create and register from definition\n */\n registerDefinition(definition: CustomWorkerDefinition): CustomWorkerInstance {\n const worker = createCustomWorker(definition);\n this.register(worker);\n return worker;\n }\n\n /**\n * Load and register from config file\n */\n async loadFromConfig(configPath?: string): Promise<number> {\n const workers = await loadWorkersFromConfig(configPath);\n workers.forEach(w => this.register(w));\n return workers.length;\n }\n\n /**\n * Get worker by name or trigger\n */\n get(nameOrTrigger: string): CustomWorkerInstance | undefined {\n const key = nameOrTrigger.toLowerCase();\n const name = this.triggerMap.get(key);\n return name ? this.workers.get(name) : undefined;\n }\n\n /**\n * Check if a trigger matches a custom worker\n */\n matchesTrigger(input: string): string | undefined {\n const lower = input.toLowerCase();\n for (const [trigger, name] of this.triggerMap) {\n if (lower.includes(trigger)) {\n return name;\n }\n }\n return undefined;\n }\n\n /**\n * List all registered workers\n */\n list(): CustomWorkerInstance[] {\n return Array.from(this.workers.values());\n }\n\n /**\n * List available presets\n */\n listPresets(): string[] {\n return Object.keys(WORKER_PRESETS);\n }\n\n /**\n * Get preset definition\n */\n getPreset(name: string): Partial<CustomWorkerDefinition> | undefined {\n return WORKER_PRESETS[name];\n }\n\n /**\n * Execute a custom worker\n */\n async execute(nameOrTrigger: string, context: WorkerContext): Promise<WorkerResults> {\n const worker = this.get(nameOrTrigger);\n if (!worker) {\n return {\n status: 'failed' as const,\n success: false,\n completedPhases: 0,\n totalPhases: 0,\n memoryKeys: [],\n duration: 0,\n error: `Custom worker not found: ${nameOrTrigger}`,\n data: { error: `Custom worker not found: ${nameOrTrigger}` }\n };\n }\n\n return worker.execute(context);\n }\n\n /**\n * Generate example config file\n */\n generateExampleConfig(): string {\n const example: WorkerConfigFile = {\n version: '1.0',\n workers: [\n {\n name: 'my-scanner',\n description: 'Custom code scanner',\n triggers: ['scan-my'],\n priority: 'medium',\n timeout: 120000,\n phases: [\n { type: 'file-discovery' },\n { type: 'pattern-extraction' },\n { type: 'security-analysis' },\n { type: 'summarization' }\n ],\n capabilities: {\n onnxEmbeddings: true,\n vectorDb: true\n },\n output: {\n format: 'detailed',\n includeSamples: true\n }\n }\n ],\n settings: {\n defaultCapabilities: {\n progressEvents: true\n },\n maxConcurrent: 3,\n debug: false\n }\n };\n\n return `# Custom Workers Configuration\n# Save as workers.yaml or .agentic-flow/workers.yaml\n\n${stringifyYaml(example)}`;\n }\n}\n\n// Singleton instance\nexport const customWorkerManager = new CustomWorkerManager();\n\n// ============================================================================\n// CLI Helper Functions\n// ============================================================================\n\nexport function formatWorkerInfo(worker: CustomWorkerInstance): string {\n const def = worker.definition;\n const lines = [\n `Name: ${def.name}`,\n `Description: ${def.description}`,\n `Triggers: ${[def.name, ...(def.triggers || [])].join(', ')}`,\n `Priority: ${def.priority || 'medium'}`,\n `Timeout: ${(def.timeout || 120000) / 1000}s`,\n `Phases: ${def.phases.map(p => p.type).join(' → ')}`,\n '',\n 'Capabilities:',\n ...Object.entries(worker.capabilities)\n .filter(([_, v]) => v)\n .map(([k]) => ` ✓ ${k}`)\n ];\n\n return lines.join('\\n');\n}\n\nexport function formatPresetList(): string {\n const lines = ['Available Presets:', ''];\n\n for (const [name, preset] of Object.entries(WORKER_PRESETS)) {\n lines.push(` ${name}`);\n lines.push(` ${preset.description}`);\n lines.push(` Phases: ${preset.phases?.map(p => p.type).join(' → ') || 'none'}`);\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n"]}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * WorkerDispatchService - Dispatches and manages background workers
3
+ *
4
+ * Integrates with RuVector ecosystem:
5
+ * - SONA: Self-learning trajectory tracking
6
+ * - ReasoningBank: Pattern storage and memory retrieval
7
+ * - HNSW: Vector indexing for semantic search
8
+ */
9
+ import { EventEmitter } from 'events';
10
+ import { WorkerId, WorkerTrigger, WorkerInfo, WorkerResults, DetectedTrigger, WorkerContext } from './types.js';
11
+ import { ResourceGovernor } from './resource-governor.js';
12
+ import { RuVectorWorkerIntegration } from './ruvector-integration.js';
13
+ import { CustomWorkerInstance } from './custom-worker-factory.js';
14
+ type WorkerImplementation = (context: WorkerContext) => Promise<WorkerResults>;
15
+ export declare class WorkerDispatchService extends EventEmitter {
16
+ private registry;
17
+ private governor;
18
+ private detector;
19
+ private ruvector;
20
+ private runningWorkers;
21
+ private workerImplementations;
22
+ constructor();
23
+ /**
24
+ * Dispatch a worker based on trigger
25
+ */
26
+ dispatch(trigger: WorkerTrigger, topic: string | null, sessionId: string): Promise<WorkerId>;
27
+ /**
28
+ * Detect triggers in prompt and dispatch workers
29
+ * @param parallel - Enable parallel dispatch for better batch performance (default: true)
30
+ */
31
+ dispatchFromPrompt(prompt: string, sessionId: string, options?: {
32
+ parallel?: boolean;
33
+ }): Promise<{
34
+ triggers: DetectedTrigger[];
35
+ workerIds: WorkerId[];
36
+ }>;
37
+ /**
38
+ * Execute worker in background with RuVector integration
39
+ */
40
+ private executeWorker;
41
+ /**
42
+ * Get worker status
43
+ */
44
+ getStatus(workerId: WorkerId): WorkerInfo | null;
45
+ /**
46
+ * Get all workers
47
+ */
48
+ getAllWorkers(sessionId?: string): WorkerInfo[];
49
+ /**
50
+ * Get active workers
51
+ */
52
+ getActiveWorkers(sessionId?: string): WorkerInfo[];
53
+ /**
54
+ * Cancel a running worker
55
+ */
56
+ cancel(workerId: WorkerId): boolean;
57
+ /**
58
+ * Wait for worker completion
59
+ */
60
+ awaitCompletion(workerId: WorkerId, timeout?: number): Promise<WorkerInfo | null>;
61
+ /**
62
+ * Register a worker implementation
63
+ */
64
+ registerWorker(trigger: string, implementation: WorkerImplementation): void;
65
+ /**
66
+ * Register a custom worker from definition
67
+ */
68
+ registerCustomWorker(worker: CustomWorkerInstance): void;
69
+ /**
70
+ * Load and register custom workers from config file
71
+ */
72
+ loadCustomWorkers(configPath?: string): Promise<number>;
73
+ /**
74
+ * Check if a trigger has a custom worker
75
+ */
76
+ hasCustomWorker(trigger: string): boolean;
77
+ /**
78
+ * Get available custom worker presets
79
+ */
80
+ getCustomWorkerPresets(): string[];
81
+ /**
82
+ * Register default worker implementations
83
+ */
84
+ private registerDefaultWorkers;
85
+ private createUltralearnWorker;
86
+ private createOptimizeWorker;
87
+ private createConsolidateWorker;
88
+ private createPredictWorker;
89
+ private createAuditWorker;
90
+ private createMapWorker;
91
+ private createPreloadWorker;
92
+ private createDeepdiveWorker;
93
+ private createDocumentWorker;
94
+ private createRefactorWorker;
95
+ private createBenchmarkWorker;
96
+ private createTestgapsWorker;
97
+ private phaseResults;
98
+ /**
99
+ * Execute a worker phase with REAL file analysis (pure JS, no native bindings)
100
+ */
101
+ private executePhase;
102
+ /**
103
+ * Extract code patterns related to a topic
104
+ */
105
+ private extractPatterns;
106
+ /**
107
+ * Get dashboard statistics including RuVector integration
108
+ */
109
+ getStats(): {
110
+ active: number;
111
+ byStatus: Record<string, number>;
112
+ byTrigger: Record<string, number>;
113
+ availability: ReturnType<ResourceGovernor['getAvailability']>;
114
+ ruvector: ReturnType<RuVectorWorkerIntegration['getStats']>;
115
+ };
116
+ /**
117
+ * Get RuVector integration instance for advanced operations
118
+ */
119
+ getRuVectorIntegration(): RuVectorWorkerIntegration;
120
+ }
121
+ export declare function getWorkerDispatchService(): WorkerDispatchService;
122
+ export {};
123
+ //# sourceMappingURL=dispatch-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-service.d.ts","sourceRoot":"","sources":["../../src/workers/dispatch-service.ts"],"names":[],"mappings":"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"}