network-ai 5.10.1 → 5.11.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 (272) hide show
  1. package/INTEGRATION_GUIDE.md +2 -2
  2. package/README.md +5 -3
  3. package/SKILL.md +3 -3
  4. package/dist/esm/adapters/a2a-adapter.js +235 -0
  5. package/dist/esm/adapters/a2a-adapter.js.map +1 -0
  6. package/dist/esm/adapters/adapter-registry.js +613 -0
  7. package/dist/esm/adapters/adapter-registry.js.map +1 -0
  8. package/dist/esm/adapters/agno-adapter.js +140 -0
  9. package/dist/esm/adapters/agno-adapter.js.map +1 -0
  10. package/dist/esm/adapters/anthropic-computer-use-adapter.js +180 -0
  11. package/dist/esm/adapters/anthropic-computer-use-adapter.js.map +1 -0
  12. package/dist/esm/adapters/aps-adapter.js +289 -0
  13. package/dist/esm/adapters/aps-adapter.js.map +1 -0
  14. package/dist/esm/adapters/autogen-adapter.js +141 -0
  15. package/dist/esm/adapters/autogen-adapter.js.map +1 -0
  16. package/dist/esm/adapters/base-adapter.js +104 -0
  17. package/dist/esm/adapters/base-adapter.js.map +1 -0
  18. package/dist/esm/adapters/browser-agent-adapter.js +219 -0
  19. package/dist/esm/adapters/browser-agent-adapter.js.map +1 -0
  20. package/dist/esm/adapters/codex-adapter.js +318 -0
  21. package/dist/esm/adapters/codex-adapter.js.map +1 -0
  22. package/dist/esm/adapters/copilot-adapter.js +132 -0
  23. package/dist/esm/adapters/copilot-adapter.js.map +1 -0
  24. package/dist/esm/adapters/crewai-adapter.js +148 -0
  25. package/dist/esm/adapters/crewai-adapter.js.map +1 -0
  26. package/dist/esm/adapters/custom-adapter.js +142 -0
  27. package/dist/esm/adapters/custom-adapter.js.map +1 -0
  28. package/dist/esm/adapters/custom-streaming-adapter.js +181 -0
  29. package/dist/esm/adapters/custom-streaming-adapter.js.map +1 -0
  30. package/dist/esm/adapters/dspy-adapter.js +127 -0
  31. package/dist/esm/adapters/dspy-adapter.js.map +1 -0
  32. package/dist/esm/adapters/haystack-adapter.js +149 -0
  33. package/dist/esm/adapters/haystack-adapter.js.map +1 -0
  34. package/dist/esm/adapters/hermes-adapter.js +217 -0
  35. package/dist/esm/adapters/hermes-adapter.js.map +1 -0
  36. package/dist/esm/adapters/index.js +109 -0
  37. package/dist/esm/adapters/index.js.map +1 -0
  38. package/dist/esm/adapters/langchain-adapter.js +134 -0
  39. package/dist/esm/adapters/langchain-adapter.js.map +1 -0
  40. package/dist/esm/adapters/langchain-streaming-adapter.js +161 -0
  41. package/dist/esm/adapters/langchain-streaming-adapter.js.map +1 -0
  42. package/dist/esm/adapters/langgraph-adapter.js +119 -0
  43. package/dist/esm/adapters/langgraph-adapter.js.map +1 -0
  44. package/dist/esm/adapters/llamaindex-adapter.js +135 -0
  45. package/dist/esm/adapters/llamaindex-adapter.js.map +1 -0
  46. package/dist/esm/adapters/mcp-adapter.js +200 -0
  47. package/dist/esm/adapters/mcp-adapter.js.map +1 -0
  48. package/dist/esm/adapters/minimax-adapter.js +233 -0
  49. package/dist/esm/adapters/minimax-adapter.js.map +1 -0
  50. package/dist/esm/adapters/nemoclaw-adapter.js +465 -0
  51. package/dist/esm/adapters/nemoclaw-adapter.js.map +1 -0
  52. package/dist/esm/adapters/openai-agents-adapter.js +118 -0
  53. package/dist/esm/adapters/openai-agents-adapter.js.map +1 -0
  54. package/dist/esm/adapters/openai-assistants-adapter.js +130 -0
  55. package/dist/esm/adapters/openai-assistants-adapter.js.map +1 -0
  56. package/dist/esm/adapters/openclaw-adapter.js +107 -0
  57. package/dist/esm/adapters/openclaw-adapter.js.map +1 -0
  58. package/dist/esm/adapters/orchestrator-adapter.js +218 -0
  59. package/dist/esm/adapters/orchestrator-adapter.js.map +1 -0
  60. package/dist/esm/adapters/pydantic-ai-adapter.js +163 -0
  61. package/dist/esm/adapters/pydantic-ai-adapter.js.map +1 -0
  62. package/dist/esm/adapters/rlm-adapter.js +167 -0
  63. package/dist/esm/adapters/rlm-adapter.js.map +1 -0
  64. package/dist/esm/adapters/semantic-kernel-adapter.js +123 -0
  65. package/dist/esm/adapters/semantic-kernel-adapter.js.map +1 -0
  66. package/dist/esm/adapters/streaming-base-adapter.js +74 -0
  67. package/dist/esm/adapters/streaming-base-adapter.js.map +1 -0
  68. package/dist/esm/adapters/vertex-ai-adapter.js +166 -0
  69. package/dist/esm/adapters/vertex-ai-adapter.js.map +1 -0
  70. package/dist/esm/demo-control-plane.js +147 -0
  71. package/dist/esm/demo-control-plane.js.map +1 -0
  72. package/dist/esm/demo-worktree-dashboard.js +131 -0
  73. package/dist/esm/demo-worktree-dashboard.js.map +1 -0
  74. package/dist/esm/examples/01-hello-swarm.js +165 -0
  75. package/dist/esm/examples/01-hello-swarm.js.map +1 -0
  76. package/dist/esm/examples/02-fsm-pipeline.js +189 -0
  77. package/dist/esm/examples/02-fsm-pipeline.js.map +1 -0
  78. package/dist/esm/examples/03-parallel-agents.js +192 -0
  79. package/dist/esm/examples/03-parallel-agents.js.map +1 -0
  80. package/dist/esm/examples/05-code-review-swarm.js +1177 -0
  81. package/dist/esm/examples/05-code-review-swarm.js.map +1 -0
  82. package/dist/esm/examples/06-ai-pipeline-demo.js +263 -0
  83. package/dist/esm/examples/06-ai-pipeline-demo.js.map +1 -0
  84. package/dist/esm/examples/07-full-showcase.js +946 -0
  85. package/dist/esm/examples/07-full-showcase.js.map +1 -0
  86. package/dist/esm/examples/08-control-plane-stress-demo.js +186 -0
  87. package/dist/esm/examples/08-control-plane-stress-demo.js.map +1 -0
  88. package/dist/esm/examples/09-real-langchain.js +231 -0
  89. package/dist/esm/examples/09-real-langchain.js.map +1 -0
  90. package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js +270 -0
  91. package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
  92. package/dist/esm/examples/demo-runner.js +119 -0
  93. package/dist/esm/examples/demo-runner.js.map +1 -0
  94. package/dist/esm/index.js +1352 -0
  95. package/dist/esm/index.js.map +1 -0
  96. package/dist/esm/lib/adapter-hooks.js +216 -0
  97. package/dist/esm/lib/adapter-hooks.js.map +1 -0
  98. package/dist/esm/lib/adapter-test-harness.js +118 -0
  99. package/dist/esm/lib/adapter-test-harness.js.map +1 -0
  100. package/dist/esm/lib/agent-conversation.js +155 -0
  101. package/dist/esm/lib/agent-conversation.js.map +1 -0
  102. package/dist/esm/lib/agent-debate.js +146 -0
  103. package/dist/esm/lib/agent-debate.js.map +1 -0
  104. package/dist/esm/lib/agent-memory.js +336 -0
  105. package/dist/esm/lib/agent-memory.js.map +1 -0
  106. package/dist/esm/lib/agent-runtime.js +818 -0
  107. package/dist/esm/lib/agent-runtime.js.map +1 -0
  108. package/dist/esm/lib/agent-vcr.js +218 -0
  109. package/dist/esm/lib/agent-vcr.js.map +1 -0
  110. package/dist/esm/lib/anomaly-detector.js +178 -0
  111. package/dist/esm/lib/anomaly-detector.js.map +1 -0
  112. package/dist/esm/lib/approval-inbox.js +385 -0
  113. package/dist/esm/lib/approval-inbox.js.map +1 -0
  114. package/dist/esm/lib/auth-guardian.js +692 -0
  115. package/dist/esm/lib/auth-guardian.js.map +1 -0
  116. package/dist/esm/lib/auth-validator.js +32 -0
  117. package/dist/esm/lib/auth-validator.js.map +1 -0
  118. package/dist/esm/lib/blackboard-backend-crdt.js +251 -0
  119. package/dist/esm/lib/blackboard-backend-crdt.js.map +1 -0
  120. package/dist/esm/lib/blackboard-backend-redis.js +244 -0
  121. package/dist/esm/lib/blackboard-backend-redis.js.map +1 -0
  122. package/dist/esm/lib/blackboard-backend.js +141 -0
  123. package/dist/esm/lib/blackboard-backend.js.map +1 -0
  124. package/dist/esm/lib/blackboard-validator.js +985 -0
  125. package/dist/esm/lib/blackboard-validator.js.map +1 -0
  126. package/dist/esm/lib/circuit-breaker.js +164 -0
  127. package/dist/esm/lib/circuit-breaker.js.map +1 -0
  128. package/dist/esm/lib/claim-verifier.js +173 -0
  129. package/dist/esm/lib/claim-verifier.js.map +1 -0
  130. package/dist/esm/lib/comparison-runner.js +138 -0
  131. package/dist/esm/lib/comparison-runner.js.map +1 -0
  132. package/dist/esm/lib/compliance-monitor.js +261 -0
  133. package/dist/esm/lib/compliance-monitor.js.map +1 -0
  134. package/dist/esm/lib/confidence-filter.js +210 -0
  135. package/dist/esm/lib/confidence-filter.js.map +1 -0
  136. package/dist/esm/lib/config-watcher.js +215 -0
  137. package/dist/esm/lib/config-watcher.js.map +1 -0
  138. package/dist/esm/lib/consistency.js +274 -0
  139. package/dist/esm/lib/consistency.js.map +1 -0
  140. package/dist/esm/lib/console-ui.js +276 -0
  141. package/dist/esm/lib/console-ui.js.map +1 -0
  142. package/dist/esm/lib/context-throttler.js +171 -0
  143. package/dist/esm/lib/context-throttler.js.map +1 -0
  144. package/dist/esm/lib/control-plane.js +527 -0
  145. package/dist/esm/lib/control-plane.js.map +1 -0
  146. package/dist/esm/lib/cost-governor.js +128 -0
  147. package/dist/esm/lib/cost-governor.js.map +1 -0
  148. package/dist/esm/lib/cost-heatmap.js +161 -0
  149. package/dist/esm/lib/cost-heatmap.js.map +1 -0
  150. package/dist/esm/lib/coverage-gate.js +213 -0
  151. package/dist/esm/lib/coverage-gate.js.map +1 -0
  152. package/dist/esm/lib/coverage-reporter.js +177 -0
  153. package/dist/esm/lib/coverage-reporter.js.map +1 -0
  154. package/dist/esm/lib/crdt.js +141 -0
  155. package/dist/esm/lib/crdt.js.map +1 -0
  156. package/dist/esm/lib/dashboard-server.js +403 -0
  157. package/dist/esm/lib/dashboard-server.js.map +1 -0
  158. package/dist/esm/lib/dry-run.js +130 -0
  159. package/dist/esm/lib/dry-run.js.map +1 -0
  160. package/dist/esm/lib/env-manager.js +518 -0
  161. package/dist/esm/lib/env-manager.js.map +1 -0
  162. package/dist/esm/lib/errors.js +201 -0
  163. package/dist/esm/lib/errors.js.map +1 -0
  164. package/dist/esm/lib/event-bus.js +229 -0
  165. package/dist/esm/lib/event-bus.js.map +1 -0
  166. package/dist/esm/lib/explainability.js +102 -0
  167. package/dist/esm/lib/explainability.js.map +1 -0
  168. package/dist/esm/lib/fan-out.js +237 -0
  169. package/dist/esm/lib/fan-out.js.map +1 -0
  170. package/dist/esm/lib/federated-budget.js +322 -0
  171. package/dist/esm/lib/federated-budget.js.map +1 -0
  172. package/dist/esm/lib/fsm-journey.js +478 -0
  173. package/dist/esm/lib/fsm-journey.js.map +1 -0
  174. package/dist/esm/lib/goal-decomposer.js +698 -0
  175. package/dist/esm/lib/goal-decomposer.js.map +1 -0
  176. package/dist/esm/lib/goal-dsl.js +391 -0
  177. package/dist/esm/lib/goal-dsl.js.map +1 -0
  178. package/dist/esm/lib/job-queue.js +310 -0
  179. package/dist/esm/lib/job-queue.js.map +1 -0
  180. package/dist/esm/lib/landscape-agent.js +134 -0
  181. package/dist/esm/lib/landscape-agent.js.map +1 -0
  182. package/dist/esm/lib/learning-loop.js +181 -0
  183. package/dist/esm/lib/learning-loop.js.map +1 -0
  184. package/dist/esm/lib/lifecycle-hooks.js +148 -0
  185. package/dist/esm/lib/lifecycle-hooks.js.map +1 -0
  186. package/dist/esm/lib/locked-blackboard.js +1295 -0
  187. package/dist/esm/lib/locked-blackboard.js.map +1 -0
  188. package/dist/esm/lib/logger.js +150 -0
  189. package/dist/esm/lib/logger.js.map +1 -0
  190. package/dist/esm/lib/mcp-blackboard-tools.js +298 -0
  191. package/dist/esm/lib/mcp-blackboard-tools.js.map +1 -0
  192. package/dist/esm/lib/mcp-bridge.js +357 -0
  193. package/dist/esm/lib/mcp-bridge.js.map +1 -0
  194. package/dist/esm/lib/mcp-tool-consumer.js +287 -0
  195. package/dist/esm/lib/mcp-tool-consumer.js.map +1 -0
  196. package/dist/esm/lib/mcp-tools-control.js +392 -0
  197. package/dist/esm/lib/mcp-tools-control.js.map +1 -0
  198. package/dist/esm/lib/mcp-tools-extended.js +371 -0
  199. package/dist/esm/lib/mcp-tools-extended.js.map +1 -0
  200. package/dist/esm/lib/mcp-transport-http.js +528 -0
  201. package/dist/esm/lib/mcp-transport-http.js.map +1 -0
  202. package/dist/esm/lib/mcp-transport-sse.js +503 -0
  203. package/dist/esm/lib/mcp-transport-sse.js.map +1 -0
  204. package/dist/esm/lib/metrics.js +284 -0
  205. package/dist/esm/lib/metrics.js.map +1 -0
  206. package/dist/esm/lib/orchestrator-types.js +66 -0
  207. package/dist/esm/lib/orchestrator-types.js.map +1 -0
  208. package/dist/esm/lib/otel-bridge.js +167 -0
  209. package/dist/esm/lib/otel-bridge.js.map +1 -0
  210. package/dist/esm/lib/partition-planner.js +246 -0
  211. package/dist/esm/lib/partition-planner.js.map +1 -0
  212. package/dist/esm/lib/phase-pipeline.js +367 -0
  213. package/dist/esm/lib/phase-pipeline.js.map +1 -0
  214. package/dist/esm/lib/playground.js +224 -0
  215. package/dist/esm/lib/playground.js.map +1 -0
  216. package/dist/esm/lib/qa-orchestrator.js +296 -0
  217. package/dist/esm/lib/qa-orchestrator.js.map +1 -0
  218. package/dist/esm/lib/quadtree.js +259 -0
  219. package/dist/esm/lib/quadtree.js.map +1 -0
  220. package/dist/esm/lib/route-classifier.js +217 -0
  221. package/dist/esm/lib/route-classifier.js.map +1 -0
  222. package/dist/esm/lib/semantic-search.js +235 -0
  223. package/dist/esm/lib/semantic-search.js.map +1 -0
  224. package/dist/esm/lib/shared-blackboard.js +249 -0
  225. package/dist/esm/lib/shared-blackboard.js.map +1 -0
  226. package/dist/esm/lib/skill-composer.js +190 -0
  227. package/dist/esm/lib/skill-composer.js.map +1 -0
  228. package/dist/esm/lib/speculative-executor.js +107 -0
  229. package/dist/esm/lib/speculative-executor.js.map +1 -0
  230. package/dist/esm/lib/strategy-agent.js +626 -0
  231. package/dist/esm/lib/strategy-agent.js.map +1 -0
  232. package/dist/esm/lib/swarm-transport.js +307 -0
  233. package/dist/esm/lib/swarm-transport.js.map +1 -0
  234. package/dist/esm/lib/swarm-utils.js +510 -0
  235. package/dist/esm/lib/swarm-utils.js.map +1 -0
  236. package/dist/esm/lib/task-decomposer.js +272 -0
  237. package/dist/esm/lib/task-decomposer.js.map +1 -0
  238. package/dist/esm/lib/telemetry-provider.js +207 -0
  239. package/dist/esm/lib/telemetry-provider.js.map +1 -0
  240. package/dist/esm/lib/timeline-scrubber.js +173 -0
  241. package/dist/esm/lib/timeline-scrubber.js.map +1 -0
  242. package/dist/esm/lib/topology.js +591 -0
  243. package/dist/esm/lib/topology.js.map +1 -0
  244. package/dist/esm/lib/transport-agent.js +366 -0
  245. package/dist/esm/lib/transport-agent.js.map +1 -0
  246. package/dist/esm/lib/work-tree-dashboard.js +583 -0
  247. package/dist/esm/lib/work-tree-dashboard.js.map +1 -0
  248. package/dist/esm/lib/work-tree-ui.js +333 -0
  249. package/dist/esm/lib/work-tree-ui.js.map +1 -0
  250. package/dist/esm/lib/work-tree.js +480 -0
  251. package/dist/esm/lib/work-tree.js.map +1 -0
  252. package/dist/esm/run.js +144 -0
  253. package/dist/esm/run.js.map +1 -0
  254. package/dist/esm/security.js +1122 -0
  255. package/dist/esm/security.js.map +1 -0
  256. package/dist/index.d.ts +2 -0
  257. package/dist/index.d.ts.map +1 -1
  258. package/dist/index.js +6 -1
  259. package/dist/index.js.map +1 -1
  260. package/dist/lib/mcp-transport-http.d.ts +203 -0
  261. package/dist/lib/mcp-transport-http.d.ts.map +1 -0
  262. package/dist/lib/mcp-transport-http.js +528 -0
  263. package/dist/lib/mcp-transport-http.js.map +1 -0
  264. package/dist/lib/phase-pipeline.d.ts +31 -0
  265. package/dist/lib/phase-pipeline.d.ts.map +1 -1
  266. package/dist/lib/phase-pipeline.js +93 -1
  267. package/dist/lib/phase-pipeline.js.map +1 -1
  268. package/dist/lib/semantic-search.d.ts +42 -6
  269. package/dist/lib/semantic-search.d.ts.map +1 -1
  270. package/dist/lib/semantic-search.js +87 -6
  271. package/dist/lib/semantic-search.js.map +1 -1
  272. package/package.json +24 -4
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /**
3
+ * Skill Composer — Meta-operations for composing agent execution
4
+ *
5
+ * Provides chain(), batch(), loop(), and verify() combinators that orchestrate
6
+ * multiple agent calls into higher-level workflows. Works with any AdapterRegistry.
7
+ *
8
+ * Inspired by Claw-Code's skill composition pattern.
9
+ *
10
+ * @module SkillComposer
11
+ * @version 1.0.0
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.SkillComposer = void 0;
15
+ // ============================================================================
16
+ // SKILL COMPOSER
17
+ // ============================================================================
18
+ /**
19
+ * Composes agent execution into higher-level workflows.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const composer = new SkillComposer(registry, { agentId: 'orchestrator' });
24
+ *
25
+ * // Sequential chain — output of each step feeds into next
26
+ * const results = await composer.chain([
27
+ * { agentId: 'researcher', payload: { action: 'search', params: { query: 'AI safety' } } },
28
+ * { agentId: 'writer', payload: { action: 'draft', params: {} } },
29
+ * { agentId: 'reviewer', payload: { action: 'review', params: {} } },
30
+ * ]);
31
+ *
32
+ * // Parallel batch with concurrency limit
33
+ * const batchResults = await composer.batch(steps, 5);
34
+ * ```
35
+ */
36
+ class SkillComposer {
37
+ registry;
38
+ baseContext;
39
+ /**
40
+ * @param registry The adapter registry to execute agents through
41
+ * @param baseContext Default execution context (merged with step-level overrides)
42
+ */
43
+ constructor(registry, baseContext) {
44
+ this.registry = registry;
45
+ this.baseContext = baseContext;
46
+ }
47
+ /**
48
+ * Execute steps sequentially. Each step's result is passed as
49
+ * `blackboardSnapshot.previousResult` to the next step.
50
+ *
51
+ * Stops on first failure unless `continueOnError` is true.
52
+ */
53
+ async chain(steps, continueOnError = false) {
54
+ const start = Date.now();
55
+ const results = [];
56
+ let successCount = 0;
57
+ let failureCount = 0;
58
+ let previousResult = undefined;
59
+ for (const step of steps) {
60
+ const payload = {
61
+ ...step.payload,
62
+ blackboardSnapshot: {
63
+ ...step.payload.blackboardSnapshot,
64
+ previousResult,
65
+ },
66
+ };
67
+ const ctx = { ...this.baseContext, ...step.context };
68
+ const result = await this.registry.executeAgent(step.agentId, payload, ctx);
69
+ results.push(result);
70
+ if (result.success) {
71
+ successCount++;
72
+ previousResult = result.data;
73
+ }
74
+ else {
75
+ failureCount++;
76
+ if (!continueOnError)
77
+ break;
78
+ }
79
+ }
80
+ return {
81
+ success: failureCount === 0,
82
+ results,
83
+ totalMs: Date.now() - start,
84
+ successCount,
85
+ failureCount,
86
+ };
87
+ }
88
+ /**
89
+ * Execute steps in parallel with an optional concurrency limit.
90
+ *
91
+ * @param steps Steps to execute
92
+ * @param concurrency Max parallel executions (default: all at once)
93
+ */
94
+ async batch(steps, concurrency) {
95
+ const start = Date.now();
96
+ const limit = concurrency ?? steps.length;
97
+ const results = new Array(steps.length);
98
+ let successCount = 0;
99
+ let failureCount = 0;
100
+ // Process in chunks of `limit`
101
+ for (let i = 0; i < steps.length; i += limit) {
102
+ const chunk = steps.slice(i, i + limit);
103
+ const chunkResults = await Promise.all(chunk.map((step, idx) => {
104
+ const ctx = { ...this.baseContext, ...step.context };
105
+ return this.registry.executeAgent(step.agentId, step.payload, ctx);
106
+ }));
107
+ for (let j = 0; j < chunkResults.length; j++) {
108
+ results[i + j] = chunkResults[j];
109
+ if (chunkResults[j].success) {
110
+ successCount++;
111
+ }
112
+ else {
113
+ failureCount++;
114
+ }
115
+ }
116
+ }
117
+ return {
118
+ success: failureCount === 0,
119
+ results,
120
+ totalMs: Date.now() - start,
121
+ successCount,
122
+ failureCount,
123
+ };
124
+ }
125
+ /**
126
+ * Repeatedly execute a step while `condition` returns true.
127
+ *
128
+ * @param step The step to repeat
129
+ * @param options Loop options (condition + maxIterations)
130
+ */
131
+ async loop(step, options) {
132
+ const start = Date.now();
133
+ const maxIter = options.maxIterations ?? 10;
134
+ const results = [];
135
+ let successCount = 0;
136
+ let failureCount = 0;
137
+ for (let i = 0; i < maxIter; i++) {
138
+ const ctx = {
139
+ ...this.baseContext,
140
+ ...step.context,
141
+ metadata: { ...this.baseContext.metadata, ...step.context?.metadata, iteration: i },
142
+ };
143
+ const result = await this.registry.executeAgent(step.agentId, step.payload, ctx);
144
+ results.push(result);
145
+ if (result.success) {
146
+ successCount++;
147
+ }
148
+ else {
149
+ failureCount++;
150
+ }
151
+ if (!options.condition(result, i))
152
+ break;
153
+ }
154
+ return {
155
+ success: failureCount === 0,
156
+ results,
157
+ totalMs: Date.now() - start,
158
+ successCount,
159
+ failureCount,
160
+ };
161
+ }
162
+ /**
163
+ * Execute a step and retry until the validator accepts the result or retries are exhausted.
164
+ *
165
+ * @param step The step to execute and verify
166
+ * @param options Verify options (validator + maxRetries)
167
+ */
168
+ async verify(step, options) {
169
+ const maxRetries = options.maxRetries ?? 3;
170
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
171
+ const ctx = {
172
+ ...this.baseContext,
173
+ ...step.context,
174
+ metadata: { ...this.baseContext.metadata, ...step.context?.metadata, attempt },
175
+ };
176
+ const result = await this.registry.executeAgent(step.agentId, step.payload, ctx);
177
+ if (result.success && options.validator(result)) {
178
+ return result;
179
+ }
180
+ // Last attempt — return whatever we got
181
+ if (attempt === maxRetries) {
182
+ return result;
183
+ }
184
+ }
185
+ // Unreachable, but TypeScript needs it
186
+ return { success: false, error: { code: 'VERIFY_EXHAUSTED', message: 'All retries exhausted', recoverable: false } };
187
+ }
188
+ }
189
+ exports.SkillComposer = SkillComposer;
190
+ //# sourceMappingURL=skill-composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-composer.js","sourceRoot":"","sources":["../../../lib/skill-composer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ /**
3
+ * SpeculativeExecutor — Dispatch the same task to multiple agents in parallel,
4
+ * then pick the best result via confidence scoring.
5
+ *
6
+ * Uses FanOutFanIn for parallel dispatch and ConfidenceFilter for quality-based
7
+ * winner selection. Optimistic concurrency: spend the extra budget up-front
8
+ * and discard inferior results.
9
+ *
10
+ * @module SpeculativeExecutor
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.SpeculativeExecutor = void 0;
14
+ // ============================================================================
15
+ // SPECULATIVE EXECUTOR
16
+ // ============================================================================
17
+ /**
18
+ * Dispatch one task to multiple agents, pick the best result.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const executor = new SpeculativeExecutor(async (agentId, payload) => {
23
+ * const result = await adapters.executeAgent(agentId, payload, ctx);
24
+ * return {
25
+ * success: result.success,
26
+ * data: result.data,
27
+ * confidence: result.data?.confidence ?? 70,
28
+ * };
29
+ * });
30
+ *
31
+ * const outcome = await executor.race(
32
+ * { instruction: 'Summarize this document', context: { doc: '...' } },
33
+ * [{ agentId: 'gpt4' }, { agentId: 'claude' }, { agentId: 'gemini' }],
34
+ * );
35
+ * if (outcome.hasWinner) {
36
+ * console.log(`Winner: ${outcome.winner!.agentId} (${outcome.winner!.confidence})`);
37
+ * }
38
+ * ```
39
+ */
40
+ class SpeculativeExecutor {
41
+ executeFn;
42
+ constructor(executeFn) {
43
+ this.executeFn = executeFn;
44
+ }
45
+ /**
46
+ * Race the same payload across multiple candidate agents.
47
+ * Returns the highest-confidence successful result.
48
+ */
49
+ async race(payload, candidates, options = {}) {
50
+ const minConfidence = options.minConfidence ?? 50;
51
+ const globalTimeout = options.timeoutMs ?? 30_000;
52
+ const concurrency = options.concurrency ?? candidates.length;
53
+ const startMs = Date.now();
54
+ // Build per-candidate promises with individual timeouts
55
+ const tasks = candidates.map(c => ({
56
+ candidate: c,
57
+ promise: this.executeWithTimeout(c.agentId, payload, c.timeoutMs ?? globalTimeout),
58
+ }));
59
+ // Execute with concurrency limit
60
+ const results = [];
61
+ for (let i = 0; i < tasks.length; i += concurrency) {
62
+ const batch = tasks.slice(i, i + concurrency);
63
+ const settled = await Promise.allSettled(batch.map(async (t) => {
64
+ const res = await t.promise;
65
+ return {
66
+ agentId: t.candidate.agentId,
67
+ label: t.candidate.label,
68
+ ...res,
69
+ };
70
+ }));
71
+ for (const s of settled) {
72
+ if (s.status === 'fulfilled') {
73
+ results.push(s.value);
74
+ }
75
+ // Rejections are silently dropped — speculative by design
76
+ }
77
+ }
78
+ // Sort by confidence descending
79
+ results.sort((a, b) => b.confidence - a.confidence);
80
+ // Pick winner: highest confidence that is successful and above threshold
81
+ const winner = results.find(r => r.success && r.confidence >= minConfidence) ?? null;
82
+ return {
83
+ winner,
84
+ candidates: results,
85
+ hasWinner: winner !== null,
86
+ totalMs: Date.now() - startMs,
87
+ successCount: results.filter(r => r.success).length,
88
+ };
89
+ }
90
+ // --------------------------------------------------------------------------
91
+ // INTERNAL
92
+ // --------------------------------------------------------------------------
93
+ async executeWithTimeout(agentId, payload, timeoutMs) {
94
+ const start = Date.now();
95
+ const resultPromise = this.executeFn(agentId, payload);
96
+ const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`Speculative timeout for ${agentId}`)), timeoutMs));
97
+ try {
98
+ const result = await Promise.race([resultPromise, timeoutPromise]);
99
+ return { ...result, durationMs: Date.now() - start };
100
+ }
101
+ catch {
102
+ return { success: false, data: null, confidence: 0, durationMs: Date.now() - start };
103
+ }
104
+ }
105
+ }
106
+ exports.SpeculativeExecutor = SpeculativeExecutor;
107
+ //# sourceMappingURL=speculative-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speculative-executor.js","sourceRoot":"","sources":["../../../lib/speculative-executor.ts"],"names":[],"mappings":"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"}