network-ai 5.10.2 → 5.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/INTEGRATION_GUIDE.md +2 -2
  2. package/QUICKSTART.md +10 -0
  3. package/README.md +32 -3
  4. package/SKILL.md +3 -3
  5. package/dist/esm/adapters/a2a-adapter.js +235 -0
  6. package/dist/esm/adapters/a2a-adapter.js.map +1 -0
  7. package/dist/esm/adapters/adapter-registry.js +613 -0
  8. package/dist/esm/adapters/adapter-registry.js.map +1 -0
  9. package/dist/esm/adapters/agno-adapter.js +140 -0
  10. package/dist/esm/adapters/agno-adapter.js.map +1 -0
  11. package/dist/esm/adapters/anthropic-computer-use-adapter.js +180 -0
  12. package/dist/esm/adapters/anthropic-computer-use-adapter.js.map +1 -0
  13. package/dist/esm/adapters/aps-adapter.js +289 -0
  14. package/dist/esm/adapters/aps-adapter.js.map +1 -0
  15. package/dist/esm/adapters/autogen-adapter.js +141 -0
  16. package/dist/esm/adapters/autogen-adapter.js.map +1 -0
  17. package/dist/esm/adapters/base-adapter.js +104 -0
  18. package/dist/esm/adapters/base-adapter.js.map +1 -0
  19. package/dist/esm/adapters/browser-agent-adapter.js +219 -0
  20. package/dist/esm/adapters/browser-agent-adapter.js.map +1 -0
  21. package/dist/esm/adapters/codex-adapter.js +318 -0
  22. package/dist/esm/adapters/codex-adapter.js.map +1 -0
  23. package/dist/esm/adapters/copilot-adapter.js +132 -0
  24. package/dist/esm/adapters/copilot-adapter.js.map +1 -0
  25. package/dist/esm/adapters/crewai-adapter.js +148 -0
  26. package/dist/esm/adapters/crewai-adapter.js.map +1 -0
  27. package/dist/esm/adapters/custom-adapter.js +142 -0
  28. package/dist/esm/adapters/custom-adapter.js.map +1 -0
  29. package/dist/esm/adapters/custom-streaming-adapter.js +181 -0
  30. package/dist/esm/adapters/custom-streaming-adapter.js.map +1 -0
  31. package/dist/esm/adapters/dspy-adapter.js +127 -0
  32. package/dist/esm/adapters/dspy-adapter.js.map +1 -0
  33. package/dist/esm/adapters/haystack-adapter.js +149 -0
  34. package/dist/esm/adapters/haystack-adapter.js.map +1 -0
  35. package/dist/esm/adapters/hermes-adapter.js +217 -0
  36. package/dist/esm/adapters/hermes-adapter.js.map +1 -0
  37. package/dist/esm/adapters/index.js +109 -0
  38. package/dist/esm/adapters/index.js.map +1 -0
  39. package/dist/esm/adapters/langchain-adapter.js +134 -0
  40. package/dist/esm/adapters/langchain-adapter.js.map +1 -0
  41. package/dist/esm/adapters/langchain-streaming-adapter.js +161 -0
  42. package/dist/esm/adapters/langchain-streaming-adapter.js.map +1 -0
  43. package/dist/esm/adapters/langgraph-adapter.js +119 -0
  44. package/dist/esm/adapters/langgraph-adapter.js.map +1 -0
  45. package/dist/esm/adapters/llamaindex-adapter.js +135 -0
  46. package/dist/esm/adapters/llamaindex-adapter.js.map +1 -0
  47. package/dist/esm/adapters/mcp-adapter.js +200 -0
  48. package/dist/esm/adapters/mcp-adapter.js.map +1 -0
  49. package/dist/esm/adapters/minimax-adapter.js +233 -0
  50. package/dist/esm/adapters/minimax-adapter.js.map +1 -0
  51. package/dist/esm/adapters/nemoclaw-adapter.js +465 -0
  52. package/dist/esm/adapters/nemoclaw-adapter.js.map +1 -0
  53. package/dist/esm/adapters/openai-agents-adapter.js +118 -0
  54. package/dist/esm/adapters/openai-agents-adapter.js.map +1 -0
  55. package/dist/esm/adapters/openai-assistants-adapter.js +130 -0
  56. package/dist/esm/adapters/openai-assistants-adapter.js.map +1 -0
  57. package/dist/esm/adapters/openclaw-adapter.js +107 -0
  58. package/dist/esm/adapters/openclaw-adapter.js.map +1 -0
  59. package/dist/esm/adapters/orchestrator-adapter.js +218 -0
  60. package/dist/esm/adapters/orchestrator-adapter.js.map +1 -0
  61. package/dist/esm/adapters/pydantic-ai-adapter.js +163 -0
  62. package/dist/esm/adapters/pydantic-ai-adapter.js.map +1 -0
  63. package/dist/esm/adapters/rlm-adapter.js +167 -0
  64. package/dist/esm/adapters/rlm-adapter.js.map +1 -0
  65. package/dist/esm/adapters/semantic-kernel-adapter.js +123 -0
  66. package/dist/esm/adapters/semantic-kernel-adapter.js.map +1 -0
  67. package/dist/esm/adapters/streaming-base-adapter.js +74 -0
  68. package/dist/esm/adapters/streaming-base-adapter.js.map +1 -0
  69. package/dist/esm/adapters/vertex-ai-adapter.js +166 -0
  70. package/dist/esm/adapters/vertex-ai-adapter.js.map +1 -0
  71. package/dist/esm/demo-control-plane.js +147 -0
  72. package/dist/esm/demo-control-plane.js.map +1 -0
  73. package/dist/esm/demo-worktree-dashboard.js +131 -0
  74. package/dist/esm/demo-worktree-dashboard.js.map +1 -0
  75. package/dist/esm/examples/01-hello-swarm.js +165 -0
  76. package/dist/esm/examples/01-hello-swarm.js.map +1 -0
  77. package/dist/esm/examples/02-fsm-pipeline.js +189 -0
  78. package/dist/esm/examples/02-fsm-pipeline.js.map +1 -0
  79. package/dist/esm/examples/03-parallel-agents.js +192 -0
  80. package/dist/esm/examples/03-parallel-agents.js.map +1 -0
  81. package/dist/esm/examples/05-code-review-swarm.js +1177 -0
  82. package/dist/esm/examples/05-code-review-swarm.js.map +1 -0
  83. package/dist/esm/examples/06-ai-pipeline-demo.js +263 -0
  84. package/dist/esm/examples/06-ai-pipeline-demo.js.map +1 -0
  85. package/dist/esm/examples/07-full-showcase.js +946 -0
  86. package/dist/esm/examples/07-full-showcase.js.map +1 -0
  87. package/dist/esm/examples/08-control-plane-stress-demo.js +186 -0
  88. package/dist/esm/examples/08-control-plane-stress-demo.js.map +1 -0
  89. package/dist/esm/examples/09-real-langchain.js +231 -0
  90. package/dist/esm/examples/09-real-langchain.js.map +1 -0
  91. package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js +270 -0
  92. package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
  93. package/dist/esm/examples/demo-runner.js +119 -0
  94. package/dist/esm/examples/demo-runner.js.map +1 -0
  95. package/dist/esm/index.js +1352 -0
  96. package/dist/esm/index.js.map +1 -0
  97. package/dist/esm/lib/adapter-hooks.js +216 -0
  98. package/dist/esm/lib/adapter-hooks.js.map +1 -0
  99. package/dist/esm/lib/adapter-test-harness.js +118 -0
  100. package/dist/esm/lib/adapter-test-harness.js.map +1 -0
  101. package/dist/esm/lib/agent-conversation.js +155 -0
  102. package/dist/esm/lib/agent-conversation.js.map +1 -0
  103. package/dist/esm/lib/agent-debate.js +146 -0
  104. package/dist/esm/lib/agent-debate.js.map +1 -0
  105. package/dist/esm/lib/agent-memory.js +336 -0
  106. package/dist/esm/lib/agent-memory.js.map +1 -0
  107. package/dist/esm/lib/agent-runtime.js +818 -0
  108. package/dist/esm/lib/agent-runtime.js.map +1 -0
  109. package/dist/esm/lib/agent-vcr.js +218 -0
  110. package/dist/esm/lib/agent-vcr.js.map +1 -0
  111. package/dist/esm/lib/anomaly-detector.js +178 -0
  112. package/dist/esm/lib/anomaly-detector.js.map +1 -0
  113. package/dist/esm/lib/approval-inbox.js +385 -0
  114. package/dist/esm/lib/approval-inbox.js.map +1 -0
  115. package/dist/esm/lib/auth-guardian.js +692 -0
  116. package/dist/esm/lib/auth-guardian.js.map +1 -0
  117. package/dist/esm/lib/auth-validator.js +32 -0
  118. package/dist/esm/lib/auth-validator.js.map +1 -0
  119. package/dist/esm/lib/blackboard-backend-crdt.js +251 -0
  120. package/dist/esm/lib/blackboard-backend-crdt.js.map +1 -0
  121. package/dist/esm/lib/blackboard-backend-redis.js +244 -0
  122. package/dist/esm/lib/blackboard-backend-redis.js.map +1 -0
  123. package/dist/esm/lib/blackboard-backend.js +141 -0
  124. package/dist/esm/lib/blackboard-backend.js.map +1 -0
  125. package/dist/esm/lib/blackboard-validator.js +985 -0
  126. package/dist/esm/lib/blackboard-validator.js.map +1 -0
  127. package/dist/esm/lib/circuit-breaker.js +164 -0
  128. package/dist/esm/lib/circuit-breaker.js.map +1 -0
  129. package/dist/esm/lib/claim-verifier.js +173 -0
  130. package/dist/esm/lib/claim-verifier.js.map +1 -0
  131. package/dist/esm/lib/comparison-runner.js +138 -0
  132. package/dist/esm/lib/comparison-runner.js.map +1 -0
  133. package/dist/esm/lib/compliance-monitor.js +261 -0
  134. package/dist/esm/lib/compliance-monitor.js.map +1 -0
  135. package/dist/esm/lib/confidence-filter.js +210 -0
  136. package/dist/esm/lib/confidence-filter.js.map +1 -0
  137. package/dist/esm/lib/config-watcher.js +215 -0
  138. package/dist/esm/lib/config-watcher.js.map +1 -0
  139. package/dist/esm/lib/consistency.js +274 -0
  140. package/dist/esm/lib/consistency.js.map +1 -0
  141. package/dist/esm/lib/console-ui.js +276 -0
  142. package/dist/esm/lib/console-ui.js.map +1 -0
  143. package/dist/esm/lib/context-throttler.js +171 -0
  144. package/dist/esm/lib/context-throttler.js.map +1 -0
  145. package/dist/esm/lib/control-plane.js +527 -0
  146. package/dist/esm/lib/control-plane.js.map +1 -0
  147. package/dist/esm/lib/cost-governor.js +128 -0
  148. package/dist/esm/lib/cost-governor.js.map +1 -0
  149. package/dist/esm/lib/cost-heatmap.js +161 -0
  150. package/dist/esm/lib/cost-heatmap.js.map +1 -0
  151. package/dist/esm/lib/coverage-gate.js +213 -0
  152. package/dist/esm/lib/coverage-gate.js.map +1 -0
  153. package/dist/esm/lib/coverage-reporter.js +177 -0
  154. package/dist/esm/lib/coverage-reporter.js.map +1 -0
  155. package/dist/esm/lib/crdt.js +141 -0
  156. package/dist/esm/lib/crdt.js.map +1 -0
  157. package/dist/esm/lib/dashboard-server.js +403 -0
  158. package/dist/esm/lib/dashboard-server.js.map +1 -0
  159. package/dist/esm/lib/dry-run.js +130 -0
  160. package/dist/esm/lib/dry-run.js.map +1 -0
  161. package/dist/esm/lib/env-manager.js +518 -0
  162. package/dist/esm/lib/env-manager.js.map +1 -0
  163. package/dist/esm/lib/errors.js +201 -0
  164. package/dist/esm/lib/errors.js.map +1 -0
  165. package/dist/esm/lib/event-bus.js +229 -0
  166. package/dist/esm/lib/event-bus.js.map +1 -0
  167. package/dist/esm/lib/explainability.js +102 -0
  168. package/dist/esm/lib/explainability.js.map +1 -0
  169. package/dist/esm/lib/fan-out.js +237 -0
  170. package/dist/esm/lib/fan-out.js.map +1 -0
  171. package/dist/esm/lib/federated-budget.js +322 -0
  172. package/dist/esm/lib/federated-budget.js.map +1 -0
  173. package/dist/esm/lib/fsm-journey.js +478 -0
  174. package/dist/esm/lib/fsm-journey.js.map +1 -0
  175. package/dist/esm/lib/goal-decomposer.js +698 -0
  176. package/dist/esm/lib/goal-decomposer.js.map +1 -0
  177. package/dist/esm/lib/goal-dsl.js +391 -0
  178. package/dist/esm/lib/goal-dsl.js.map +1 -0
  179. package/dist/esm/lib/job-queue.js +310 -0
  180. package/dist/esm/lib/job-queue.js.map +1 -0
  181. package/dist/esm/lib/landscape-agent.js +134 -0
  182. package/dist/esm/lib/landscape-agent.js.map +1 -0
  183. package/dist/esm/lib/learning-loop.js +181 -0
  184. package/dist/esm/lib/learning-loop.js.map +1 -0
  185. package/dist/esm/lib/lifecycle-hooks.js +148 -0
  186. package/dist/esm/lib/lifecycle-hooks.js.map +1 -0
  187. package/dist/esm/lib/locked-blackboard.js +1295 -0
  188. package/dist/esm/lib/locked-blackboard.js.map +1 -0
  189. package/dist/esm/lib/logger.js +150 -0
  190. package/dist/esm/lib/logger.js.map +1 -0
  191. package/dist/esm/lib/mcp-blackboard-tools.js +298 -0
  192. package/dist/esm/lib/mcp-blackboard-tools.js.map +1 -0
  193. package/dist/esm/lib/mcp-bridge.js +357 -0
  194. package/dist/esm/lib/mcp-bridge.js.map +1 -0
  195. package/dist/esm/lib/mcp-tool-consumer.js +287 -0
  196. package/dist/esm/lib/mcp-tool-consumer.js.map +1 -0
  197. package/dist/esm/lib/mcp-tools-control.js +392 -0
  198. package/dist/esm/lib/mcp-tools-control.js.map +1 -0
  199. package/dist/esm/lib/mcp-tools-extended.js +371 -0
  200. package/dist/esm/lib/mcp-tools-extended.js.map +1 -0
  201. package/dist/esm/lib/mcp-transport-http.js +528 -0
  202. package/dist/esm/lib/mcp-transport-http.js.map +1 -0
  203. package/dist/esm/lib/mcp-transport-sse.js +503 -0
  204. package/dist/esm/lib/mcp-transport-sse.js.map +1 -0
  205. package/dist/esm/lib/metrics.js +284 -0
  206. package/dist/esm/lib/metrics.js.map +1 -0
  207. package/dist/esm/lib/orchestrator-types.js +66 -0
  208. package/dist/esm/lib/orchestrator-types.js.map +1 -0
  209. package/dist/esm/lib/otel-bridge.js +167 -0
  210. package/dist/esm/lib/otel-bridge.js.map +1 -0
  211. package/dist/esm/lib/partition-planner.js +246 -0
  212. package/dist/esm/lib/partition-planner.js.map +1 -0
  213. package/dist/esm/lib/phase-pipeline.js +367 -0
  214. package/dist/esm/lib/phase-pipeline.js.map +1 -0
  215. package/dist/esm/lib/playground.js +224 -0
  216. package/dist/esm/lib/playground.js.map +1 -0
  217. package/dist/esm/lib/qa-orchestrator.js +296 -0
  218. package/dist/esm/lib/qa-orchestrator.js.map +1 -0
  219. package/dist/esm/lib/quadtree.js +259 -0
  220. package/dist/esm/lib/quadtree.js.map +1 -0
  221. package/dist/esm/lib/route-classifier.js +217 -0
  222. package/dist/esm/lib/route-classifier.js.map +1 -0
  223. package/dist/esm/lib/semantic-search.js +235 -0
  224. package/dist/esm/lib/semantic-search.js.map +1 -0
  225. package/dist/esm/lib/shared-blackboard.js +249 -0
  226. package/dist/esm/lib/shared-blackboard.js.map +1 -0
  227. package/dist/esm/lib/skill-composer.js +190 -0
  228. package/dist/esm/lib/skill-composer.js.map +1 -0
  229. package/dist/esm/lib/speculative-executor.js +107 -0
  230. package/dist/esm/lib/speculative-executor.js.map +1 -0
  231. package/dist/esm/lib/strategy-agent.js +626 -0
  232. package/dist/esm/lib/strategy-agent.js.map +1 -0
  233. package/dist/esm/lib/swarm-transport.js +307 -0
  234. package/dist/esm/lib/swarm-transport.js.map +1 -0
  235. package/dist/esm/lib/swarm-utils.js +510 -0
  236. package/dist/esm/lib/swarm-utils.js.map +1 -0
  237. package/dist/esm/lib/task-decomposer.js +272 -0
  238. package/dist/esm/lib/task-decomposer.js.map +1 -0
  239. package/dist/esm/lib/telemetry-provider.js +207 -0
  240. package/dist/esm/lib/telemetry-provider.js.map +1 -0
  241. package/dist/esm/lib/timeline-scrubber.js +173 -0
  242. package/dist/esm/lib/timeline-scrubber.js.map +1 -0
  243. package/dist/esm/lib/topology.js +591 -0
  244. package/dist/esm/lib/topology.js.map +1 -0
  245. package/dist/esm/lib/transport-agent.js +366 -0
  246. package/dist/esm/lib/transport-agent.js.map +1 -0
  247. package/dist/esm/lib/work-tree-dashboard.js +583 -0
  248. package/dist/esm/lib/work-tree-dashboard.js.map +1 -0
  249. package/dist/esm/lib/work-tree-ui.js +333 -0
  250. package/dist/esm/lib/work-tree-ui.js.map +1 -0
  251. package/dist/esm/lib/work-tree.js +480 -0
  252. package/dist/esm/lib/work-tree.js.map +1 -0
  253. package/dist/esm/run.js +144 -0
  254. package/dist/esm/run.js.map +1 -0
  255. package/dist/esm/security.js +1122 -0
  256. package/dist/esm/security.js.map +1 -0
  257. package/dist/index.d.ts +2 -0
  258. package/dist/index.d.ts.map +1 -1
  259. package/dist/index.js +6 -1
  260. package/dist/index.js.map +1 -1
  261. package/dist/lib/mcp-transport-http.d.ts +203 -0
  262. package/dist/lib/mcp-transport-http.d.ts.map +1 -0
  263. package/dist/lib/mcp-transport-http.js +528 -0
  264. package/dist/lib/mcp-transport-http.js.map +1 -0
  265. package/dist/lib/phase-pipeline.d.ts +31 -0
  266. package/dist/lib/phase-pipeline.d.ts.map +1 -1
  267. package/dist/lib/phase-pipeline.js +93 -1
  268. package/dist/lib/phase-pipeline.js.map +1 -1
  269. package/dist/lib/semantic-search.d.ts +42 -6
  270. package/dist/lib/semantic-search.d.ts.map +1 -1
  271. package/dist/lib/semantic-search.js +87 -6
  272. package/dist/lib/semantic-search.js.map +1 -1
  273. package/package.json +24 -4
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ /**
3
+ * Custom Agent Adapter — The simplest way to plug in any agent
4
+ *
5
+ * For agent systems that don't have a dedicated adapter, or for
6
+ * quick prototyping, this adapter lets you register plain async functions
7
+ * as agents. No framework dependency needed.
8
+ *
9
+ * Usage:
10
+ * const adapter = new CustomAdapter();
11
+ *
12
+ * // Register any async function as an agent
13
+ * adapter.registerHandler("my-agent", async (payload, context) => {
14
+ * // Your agent logic here
15
+ * return { analysis: "result data" };
16
+ * });
17
+ *
18
+ * // Register an HTTP-based agent
19
+ * adapter.registerHttpAgent("remote-agent", "https://api.example.com/agent");
20
+ *
21
+ * await registry.addAdapter(adapter);
22
+ *
23
+ * Then in the orchestrator:
24
+ * delegateTask({ targetAgent: "custom:my-agent", ... })
25
+ *
26
+ * @module CustomAdapter
27
+ * @version 1.0.0
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.CustomAdapter = void 0;
31
+ const base_adapter_1 = require("./base-adapter");
32
+ class CustomAdapter extends base_adapter_1.BaseAdapter {
33
+ name = 'custom';
34
+ version = '1.0.0';
35
+ handlers = new Map();
36
+ httpAgents = new Map();
37
+ get capabilities() {
38
+ return {
39
+ streaming: false,
40
+ parallel: true,
41
+ bidirectional: false,
42
+ discovery: true,
43
+ authentication: false,
44
+ statefulSessions: false,
45
+ };
46
+ }
47
+ /**
48
+ * Register a plain async function as an agent.
49
+ * This is the simplest way to add custom agent logic.
50
+ */
51
+ registerHandler(agentId, handler, metadata) {
52
+ this.handlers.set(agentId, handler);
53
+ this.registerLocalAgent({
54
+ id: agentId,
55
+ name: agentId,
56
+ description: metadata?.description ?? `Custom agent: ${agentId}`,
57
+ capabilities: metadata?.capabilities,
58
+ status: 'available',
59
+ });
60
+ }
61
+ /**
62
+ * Register an HTTP endpoint as an agent.
63
+ * The orchestrator will POST task payloads to the URL.
64
+ */
65
+ registerHttpAgent(agentId, urlOrConfig, metadata) {
66
+ const config = typeof urlOrConfig === 'string'
67
+ ? { url: urlOrConfig }
68
+ : urlOrConfig;
69
+ this.httpAgents.set(agentId, config);
70
+ this.registerLocalAgent({
71
+ id: agentId,
72
+ name: agentId,
73
+ description: metadata?.description ?? `HTTP agent at ${config.url}`,
74
+ capabilities: metadata?.capabilities,
75
+ status: 'available',
76
+ metadata: { url: config.url },
77
+ });
78
+ }
79
+ async executeAgent(agentId, payload, context) {
80
+ this.ensureReady();
81
+ const startTime = Date.now();
82
+ // Check local handlers first
83
+ const handler = this.handlers.get(agentId);
84
+ if (handler) {
85
+ return this.executeHandler(handler, payload, context, startTime);
86
+ }
87
+ // Check HTTP agents
88
+ const httpConfig = this.httpAgents.get(agentId);
89
+ if (httpConfig) {
90
+ return this.executeHttpAgent(httpConfig, payload, context, startTime);
91
+ }
92
+ return this.errorResult('AGENT_NOT_FOUND', `Custom agent "${agentId}" is not registered. Use registerHandler() or registerHttpAgent().`, false);
93
+ }
94
+ async executeHandler(handler, payload, context, startTime) {
95
+ try {
96
+ const result = await handler(payload, context);
97
+ return this.successResult(result, Date.now() - startTime);
98
+ }
99
+ catch (error) {
100
+ return this.errorResult('HANDLER_ERROR', error instanceof Error ? error.message : 'Custom handler failed', true, error);
101
+ }
102
+ }
103
+ async executeHttpAgent(config, payload, context, startTime) {
104
+ try {
105
+ const body = config.transformRequest
106
+ ? config.transformRequest(payload, context)
107
+ : { payload, context };
108
+ const controller = new AbortController();
109
+ const timeoutId = config.timeout
110
+ ? setTimeout(() => controller.abort(), config.timeout)
111
+ : null;
112
+ const response = await fetch(config.url, {
113
+ method: config.method ?? 'POST',
114
+ headers: {
115
+ 'Content-Type': 'application/json',
116
+ ...config.headers,
117
+ },
118
+ body: JSON.stringify(body),
119
+ signal: controller.signal,
120
+ });
121
+ if (timeoutId)
122
+ clearTimeout(timeoutId);
123
+ if (!response.ok) {
124
+ return this.errorResult('HTTP_ERROR', `HTTP ${response.status}: ${response.statusText}`, response.status >= 500 // Server errors are recoverable
125
+ );
126
+ }
127
+ let result = await response.json();
128
+ if (config.transformResponse) {
129
+ result = config.transformResponse(result);
130
+ }
131
+ return this.successResult(result, Date.now() - startTime);
132
+ }
133
+ catch (error) {
134
+ if (error instanceof Error && error.name === 'AbortError') {
135
+ return this.errorResult('TIMEOUT', `HTTP agent timed out after ${config.timeout}ms`, true);
136
+ }
137
+ return this.errorResult('HTTP_ERROR', error instanceof Error ? error.message : 'HTTP agent call failed', true, error);
138
+ }
139
+ }
140
+ }
141
+ exports.CustomAdapter = CustomAdapter;
142
+ //# sourceMappingURL=custom-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-adapter.js","sourceRoot":"","sources":["../../../adapters/custom-adapter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;AAEH,iDAA6C;AAgC7C,MAAa,aAAc,SAAQ,0BAAW;IACnC,IAAI,GAAG,QAAQ,CAAC;IAChB,OAAO,GAAG,OAAO,CAAC;IACnB,QAAQ,GAA8B,IAAI,GAAG,EAAE,CAAC;IAChD,UAAU,GAAiC,IAAI,GAAG,EAAE,CAAC;IAE7D,IAAI,YAAY;QACd,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,IAAI;YACd,aAAa,EAAE,KAAK;YACpB,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,KAAK;SACxB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,eAAe,CACb,OAAe,EACf,OAAqB,EACrB,QAA4D;QAE5D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,kBAAkB,CAAC;YACtB,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,iBAAiB,OAAO,EAAE;YAChE,YAAY,EAAE,QAAQ,EAAE,YAAY;YACpC,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,iBAAiB,CACf,OAAe,EACf,WAAqC,EACrC,QAA4D;QAE5D,MAAM,MAAM,GAAoB,OAAO,WAAW,KAAK,QAAQ;YAC7D,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;YACtB,CAAC,CAAC,WAAW,CAAC;QAEhB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,kBAAkB,CAAC;YACtB,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,iBAAiB,MAAM,CAAC,GAAG,EAAE;YACnE,YAAY,EAAE,QAAQ,EAAE,YAAY;YACpC,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,OAAe,EACf,OAAqB,EACrB,OAAqB;QAErB,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,6BAA6B;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACnE,CAAC;QAED,oBAAoB;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CACrB,iBAAiB,EACjB,iBAAiB,OAAO,oEAAoE,EAC5F,KAAK,CACN,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,OAAqB,EACrB,OAAqB,EACrB,OAAqB,EACrB,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,WAAW,CACrB,eAAe,EACf,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,EAChE,IAAI,EACJ,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,MAAuB,EACvB,OAAqB,EACrB,OAAqB,EACrB,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB;gBAClC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;gBAC3C,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAEzB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO;gBAC9B,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC;gBACtD,CAAC,CAAC,IAAI,CAAC;YAET,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;gBACvC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM;gBAC/B,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,MAAM,CAAC,OAAO;iBAClB;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YAEvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC,WAAW,CACrB,YAAY,EACZ,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,EACjD,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,gCAAgC;iBACxD,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAC7B,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1D,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,8BAA8B,MAAM,CAAC,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7F,CAAC;YACD,OAAO,IAAI,CAAC,WAAW,CACrB,YAAY,EACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,EACjE,IAAI,EACJ,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAlKD,sCAkKC"}
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ /**
3
+ * CustomStreamingAdapter — CustomAdapter with streaming support.
4
+ *
5
+ * Extends {@link CustomAdapter} so that handlers can yield incremental text
6
+ * by returning an `AsyncIterable<string>` or `AsyncIterable<StreamingChunk>`.
7
+ * Plain `Promise<unknown>` handlers work unchanged (single-chunk fallback).
8
+ *
9
+ * Usage:
10
+ *
11
+ * const adapter = new CustomStreamingAdapter();
12
+ *
13
+ * // Streaming handler — yields tokens incrementally
14
+ * adapter.registerHandler('writer', async function*(payload) {
15
+ * yield 'Once ';
16
+ * yield 'upon ';
17
+ * yield 'a time…';
18
+ * });
19
+ *
20
+ * // Non-streaming handler — works exactly as before
21
+ * adapter.registerHandler('analyze', async (payload) => ({ result: 'done' }));
22
+ *
23
+ * // Consume the stream
24
+ * for await (const chunk of adapter.executeAgentStream('writer', payload, ctx)) {
25
+ * process.stdout.write(chunk.text);
26
+ * }
27
+ *
28
+ * @module CustomStreamingAdapter
29
+ * @version 1.0.0
30
+ */
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.CustomStreamingAdapter = void 0;
33
+ const custom_adapter_1 = require("./custom-adapter");
34
+ /** Type guard — checks whether the return value of a handler is async-iterable. */
35
+ function isAsyncIterable(val) {
36
+ return (val != null &&
37
+ typeof val === 'object' &&
38
+ Symbol.asyncIterator in val);
39
+ }
40
+ /** Type guard — checks whether a `StreamingChunk`-shaped object was yielded. */
41
+ function isStreamingChunk(val) {
42
+ return (val !== null &&
43
+ typeof val === 'object' &&
44
+ typeof val.text === 'string' &&
45
+ typeof val.done === 'boolean');
46
+ }
47
+ class CustomStreamingAdapter extends custom_adapter_1.CustomAdapter {
48
+ streamingHandlers = new Set();
49
+ get capabilities() {
50
+ return {
51
+ ...super.capabilities,
52
+ streaming: true,
53
+ };
54
+ }
55
+ /**
56
+ * Register a handler. Streaming handlers (functions returning `AsyncIterable`)
57
+ * are detected automatically and exposed through `executeAgentStream()`.
58
+ */
59
+ registerHandler(agentId, handler, metadata) {
60
+ // Probe: call the handler with synthetic inputs and check if the return
61
+ // is async-iterable. We do this via a duck-typed try, falling back safely.
62
+ // Instead, infer from the handler's prototype / generator signature:
63
+ const isGenerator = handler.constructor?.name === 'AsyncGeneratorFunction' ||
64
+ (Object.prototype.toString.call(handler) === '[object AsyncGeneratorFunction]');
65
+ if (isGenerator) {
66
+ this.streamingHandlers.add(agentId);
67
+ }
68
+ // Cast to base AgentHandler — the broader type is compatible at runtime
69
+ super.registerHandler(agentId, handler, metadata);
70
+ }
71
+ /**
72
+ * Mark an already-registered handler as streaming.
73
+ * Useful when the handler function is not an async generator but returns
74
+ * an `AsyncIterable` (e.g. a closure around a separate generator).
75
+ */
76
+ markStreaming(agentId) {
77
+ this.streamingHandlers.add(agentId);
78
+ }
79
+ supportsStreaming(agentId) {
80
+ return this.streamingHandlers.has(agentId);
81
+ }
82
+ /**
83
+ * Execute a handler with streaming support.
84
+ *
85
+ * - If the handler is registered as streaming (yields tokens), pipes the
86
+ * async iterable to `StreamingChunk` values.
87
+ * - Otherwise falls back to `executeAgent()` and wraps the result as a
88
+ * single chunk (same behaviour as the non-streaming `CustomAdapter`).
89
+ */
90
+ async *executeAgentStream(agentId, payload, context) {
91
+ this.ensureReady();
92
+ // Access the internal handlers map stored in the parent class
93
+ const handlers = this.handlers;
94
+ const handler = handlers?.get(agentId);
95
+ if (!handler) {
96
+ // No handler — delegate to base executeAgent (which returns AGENT_NOT_FOUND)
97
+ const result = await this.executeAgent(agentId, payload, context);
98
+ yield {
99
+ text: result.error?.message ?? 'Agent not found',
100
+ done: true,
101
+ metadata: { error: true },
102
+ };
103
+ return;
104
+ }
105
+ // Invoke the handler — may return a Promise or an AsyncIterable
106
+ let returnValue;
107
+ try {
108
+ returnValue = handler(payload, context);
109
+ }
110
+ catch (err) {
111
+ yield {
112
+ text: err instanceof Error ? err.message : 'Handler threw synchronously',
113
+ done: true,
114
+ metadata: { error: true },
115
+ };
116
+ return;
117
+ }
118
+ // If the return is a Promise, await it first
119
+ if (returnValue instanceof Promise) {
120
+ let resolved;
121
+ try {
122
+ resolved = await returnValue;
123
+ }
124
+ catch (err) {
125
+ yield {
126
+ text: err instanceof Error ? err.message : 'Handler rejected',
127
+ done: true,
128
+ metadata: { error: true },
129
+ };
130
+ return;
131
+ }
132
+ if (isAsyncIterable(resolved)) {
133
+ // Resolved to an async iterable — pipe it through
134
+ yield* this._pipeIterable(resolved);
135
+ return;
136
+ }
137
+ // Plain resolved value — single chunk fallback
138
+ const text = typeof resolved === 'string' ? resolved :
139
+ resolved != null ? JSON.stringify(resolved) :
140
+ '';
141
+ yield { text, done: false };
142
+ yield { text: '', done: true };
143
+ return;
144
+ }
145
+ // Returned an AsyncIterable directly (generator function, etc.)
146
+ if (isAsyncIterable(returnValue)) {
147
+ yield* this._pipeIterable(returnValue);
148
+ return;
149
+ }
150
+ // Fallback — single chunk from whatever value was returned
151
+ const text = typeof returnValue === 'string' ? returnValue :
152
+ returnValue != null ? JSON.stringify(returnValue) :
153
+ '';
154
+ yield { text, done: false };
155
+ yield { text: '', done: true };
156
+ }
157
+ /** Pipe an `AsyncIterable<string | StreamingChunk>` to `StreamingChunk` values. */
158
+ async *_pipeIterable(iterable) {
159
+ try {
160
+ for await (const item of iterable) {
161
+ if (isStreamingChunk(item)) {
162
+ yield item;
163
+ }
164
+ else {
165
+ const text = typeof item === 'string' ? item : JSON.stringify(item);
166
+ yield { text, done: false };
167
+ }
168
+ }
169
+ yield { text: '', done: true };
170
+ }
171
+ catch (err) {
172
+ yield {
173
+ text: err instanceof Error ? err.message : 'Stream iteration failed',
174
+ done: true,
175
+ metadata: { error: true },
176
+ };
177
+ }
178
+ }
179
+ }
180
+ exports.CustomStreamingAdapter = CustomStreamingAdapter;
181
+ //# sourceMappingURL=custom-streaming-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-streaming-adapter.js","sourceRoot":"","sources":["../../../adapters/custom-streaming-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /**
3
+ * DSPy Adapter
4
+ *
5
+ * Integrates Stanford DSPy modules and programs with the SwarmOrchestrator.
6
+ * DSPy is a framework for algorithmically optimising LM prompts and weights,
7
+ * enabling systematic prompt engineering and agent compilation.
8
+ *
9
+ * Usage:
10
+ * const adapter = new DSPyAdapter();
11
+ * adapter.registerModule("classifier", myDSPyModule);
12
+ * adapter.registerProgram("rag-pipeline", myCompiledProgram);
13
+ * await registry.addAdapter(adapter);
14
+ *
15
+ * Then in the orchestrator:
16
+ * delegateTask({ targetAgent: "dspy:classifier", ... })
17
+ *
18
+ * @module DSPyAdapter
19
+ * @version 1.0.0
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.DSPyAdapter = void 0;
23
+ const base_adapter_1 = require("./base-adapter");
24
+ class DSPyAdapter extends base_adapter_1.BaseAdapter {
25
+ name = 'dspy';
26
+ version = '1.0.0';
27
+ entries = new Map();
28
+ get capabilities() {
29
+ return {
30
+ streaming: false,
31
+ parallel: true,
32
+ bidirectional: false,
33
+ discovery: true,
34
+ authentication: false,
35
+ statefulSessions: false,
36
+ };
37
+ }
38
+ // --- Registration ---
39
+ registerModule(agentId, module, metadata) {
40
+ this.entries.set(agentId, { type: 'module', module });
41
+ this.registerLocalAgent({
42
+ id: agentId,
43
+ name: agentId,
44
+ description: metadata?.description ?? `DSPy Module: ${agentId}`,
45
+ capabilities: metadata?.capabilities ?? ['module', 'prompt-optimization'],
46
+ status: 'available',
47
+ });
48
+ }
49
+ registerProgram(agentId, program, metadata) {
50
+ this.entries.set(agentId, { type: 'program', program });
51
+ this.registerLocalAgent({
52
+ id: agentId,
53
+ name: agentId,
54
+ description: metadata?.description ?? `DSPy Program: ${agentId}`,
55
+ capabilities: metadata?.capabilities ?? ['program', 'compiled', 'optimized'],
56
+ status: 'available',
57
+ });
58
+ }
59
+ registerPredictor(agentId, predictor, metadata) {
60
+ this.entries.set(agentId, { type: 'predictor', predictor });
61
+ this.registerLocalAgent({
62
+ id: agentId,
63
+ name: agentId,
64
+ description: metadata?.description ?? `DSPy Predictor: ${agentId}`,
65
+ capabilities: metadata?.capabilities ?? ['predictor'],
66
+ status: 'available',
67
+ });
68
+ }
69
+ // --- Execution ---
70
+ async executeAgent(agentId, payload, context) {
71
+ this.ensureReady();
72
+ const entry = this.entries.get(agentId);
73
+ if (!entry) {
74
+ return this.errorResult('AGENT_NOT_FOUND', `DSPy entry "${agentId}" is not registered`, false);
75
+ }
76
+ const inputs = this.buildInputs(payload);
77
+ const startTime = Date.now();
78
+ try {
79
+ let prediction;
80
+ switch (entry.type) {
81
+ case 'module':
82
+ prediction = entry.module.__call__
83
+ ? await entry.module.__call__(inputs)
84
+ : await entry.module.forward(inputs);
85
+ break;
86
+ case 'program':
87
+ prediction = await entry.program.run(inputs);
88
+ break;
89
+ case 'predictor':
90
+ prediction = await entry.predictor(inputs);
91
+ break;
92
+ default:
93
+ return this.errorResult('UNKNOWN_TYPE', 'Unknown DSPy entry type', false);
94
+ }
95
+ return this.successResult(this.normalizePrediction(prediction), Date.now() - startTime);
96
+ }
97
+ catch (error) {
98
+ return this.errorResult('DSPY_ERROR', error instanceof Error ? error.message : 'DSPy execution failed', true, error);
99
+ }
100
+ }
101
+ // --- Private helpers ---
102
+ buildInputs(payload) {
103
+ const inputs = { ...payload.params };
104
+ if (payload.handoff?.instruction) {
105
+ inputs.question = payload.handoff.instruction;
106
+ inputs.query = payload.handoff.instruction;
107
+ }
108
+ if (payload.blackboardSnapshot) {
109
+ inputs.context = payload.blackboardSnapshot;
110
+ }
111
+ return inputs;
112
+ }
113
+ normalizePrediction(prediction) {
114
+ // DSPy predictions have named output fields
115
+ const response = prediction.answer ??
116
+ prediction.response ??
117
+ prediction.rationale ??
118
+ '';
119
+ return {
120
+ response,
121
+ prediction: { ...prediction },
122
+ rationale: prediction.rationale,
123
+ };
124
+ }
125
+ }
126
+ exports.DSPyAdapter = DSPyAdapter;
127
+ //# sourceMappingURL=dspy-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dspy-adapter.js","sourceRoot":"","sources":["../../../adapters/dspy-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ /**
3
+ * Haystack Adapter
4
+ *
5
+ * Integrates deepset Haystack pipelines and agents with the SwarmOrchestrator.
6
+ * Haystack is a production-grade framework for building RAG and search
7
+ * pipelines with customisable components.
8
+ *
9
+ * Usage:
10
+ * const adapter = new HaystackAdapter();
11
+ * adapter.registerPipeline("search", myPipeline);
12
+ * adapter.registerAgent("qa-agent", myHaystackAgent);
13
+ * await registry.addAdapter(adapter);
14
+ *
15
+ * Then in the orchestrator:
16
+ * delegateTask({ targetAgent: "haystack:search", ... })
17
+ *
18
+ * @module HaystackAdapter
19
+ * @version 1.0.0
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.HaystackAdapter = void 0;
23
+ const base_adapter_1 = require("./base-adapter");
24
+ class HaystackAdapter extends base_adapter_1.BaseAdapter {
25
+ name = 'haystack';
26
+ version = '1.0.0';
27
+ entries = new Map();
28
+ get capabilities() {
29
+ return {
30
+ streaming: false,
31
+ parallel: true,
32
+ bidirectional: false,
33
+ discovery: true,
34
+ authentication: false,
35
+ statefulSessions: false,
36
+ };
37
+ }
38
+ // --- Registration ---
39
+ registerPipeline(agentId, pipeline, metadata) {
40
+ this.entries.set(agentId, { type: 'pipeline', pipeline });
41
+ const pipelineMeta = pipeline.getMetadata?.();
42
+ this.registerLocalAgent({
43
+ id: agentId,
44
+ name: pipelineMeta?.name || agentId,
45
+ description: metadata?.description ?? `Haystack Pipeline: ${agentId}`,
46
+ capabilities: metadata?.capabilities ?? ['pipeline', 'rag'],
47
+ status: 'available',
48
+ });
49
+ }
50
+ registerAgent(agentId, agent, metadata) {
51
+ this.entries.set(agentId, { type: 'agent', agent });
52
+ this.registerLocalAgent({
53
+ id: agentId,
54
+ name: agentId,
55
+ description: metadata?.description ?? `Haystack Agent: ${agentId}`,
56
+ capabilities: metadata?.capabilities ?? ['agent', 'qa'],
57
+ status: 'available',
58
+ });
59
+ }
60
+ registerComponent(agentId, component, metadata) {
61
+ this.entries.set(agentId, { type: 'component', component });
62
+ this.registerLocalAgent({
63
+ id: agentId,
64
+ name: agentId,
65
+ description: metadata?.description ?? `Haystack Component: ${agentId}`,
66
+ capabilities: metadata?.capabilities ?? ['component'],
67
+ status: 'available',
68
+ });
69
+ }
70
+ // --- Execution ---
71
+ async executeAgent(agentId, payload, context) {
72
+ this.ensureReady();
73
+ const entry = this.entries.get(agentId);
74
+ if (!entry) {
75
+ return this.errorResult('AGENT_NOT_FOUND', `Haystack entry "${agentId}" is not registered`, false);
76
+ }
77
+ const startTime = Date.now();
78
+ try {
79
+ switch (entry.type) {
80
+ case 'pipeline':
81
+ return await this.executePipeline(entry.pipeline, payload, startTime);
82
+ case 'agent':
83
+ return await this.executeHaystackAgent(entry.agent, payload, startTime);
84
+ case 'component':
85
+ return await this.executeComponent(entry.component, payload, startTime);
86
+ default:
87
+ return this.errorResult('UNKNOWN_TYPE', 'Unknown entry type', false);
88
+ }
89
+ }
90
+ catch (error) {
91
+ return this.errorResult('HAYSTACK_ERROR', error instanceof Error ? error.message : 'Haystack execution failed', true, error);
92
+ }
93
+ }
94
+ // --- Private helpers ---
95
+ async executePipeline(pipeline, payload, startTime) {
96
+ const inputs = this.buildPipelineInputs(payload);
97
+ const result = await pipeline.run(inputs);
98
+ return this.successResult(this.normalizePipelineResult(result), Date.now() - startTime);
99
+ }
100
+ async executeHaystackAgent(agent, payload, startTime) {
101
+ const query = payload.handoff?.instruction
102
+ || payload.params?.query
103
+ || JSON.stringify(payload.params);
104
+ const result = await agent.run(query, payload.params);
105
+ return this.successResult({
106
+ response: result.answer ?? '',
107
+ transcript: result.transcript,
108
+ documents: result.documents?.map((d) => ({
109
+ content: d.content?.slice(0, 300),
110
+ score: d.score,
111
+ meta: d.meta,
112
+ })),
113
+ }, Date.now() - startTime);
114
+ }
115
+ async executeComponent(component, payload, startTime) {
116
+ const inputs = this.buildPipelineInputs(payload);
117
+ const result = await component.run(inputs);
118
+ return this.successResult(result, Date.now() - startTime);
119
+ }
120
+ buildPipelineInputs(payload) {
121
+ const inputs = { ...payload.params };
122
+ if (payload.handoff?.instruction) {
123
+ inputs.query = payload.handoff.instruction;
124
+ }
125
+ if (payload.blackboardSnapshot) {
126
+ inputs.context = payload.blackboardSnapshot;
127
+ }
128
+ return inputs;
129
+ }
130
+ normalizePipelineResult(result) {
131
+ // Haystack pipeline results are keyed by component name.
132
+ // Try to find an answer/reply in the output.
133
+ const keys = Object.keys(result);
134
+ for (const key of keys) {
135
+ const component = result[key];
136
+ if (component && typeof component === 'object') {
137
+ if ('replies' in component)
138
+ return { response: component.replies, components: result };
139
+ if ('answers' in component)
140
+ return { response: component.answers, components: result };
141
+ if ('documents' in component)
142
+ return { documents: component.documents, components: result };
143
+ }
144
+ }
145
+ return { response: result };
146
+ }
147
+ }
148
+ exports.HaystackAdapter = HaystackAdapter;
149
+ //# sourceMappingURL=haystack-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"haystack-adapter.js","sourceRoot":"","sources":["../../../adapters/haystack-adapter.ts"],"names":[],"mappings":"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"}