network-ai 5.10.2 → 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,465 @@
1
+ "use strict";
2
+ /**
3
+ * NemoClaw Adapter
4
+ *
5
+ * Integrates NVIDIA NemoClaw sandboxed agent execution with the
6
+ * SwarmOrchestrator. NemoClaw runs agents inside OpenShell sandboxes
7
+ * with deny-by-default network policies and Landlock filesystem isolation.
8
+ *
9
+ * This adapter manages:
10
+ * - Sandbox lifecycle (create, status, connect, destroy)
11
+ * - Network policy generation and application
12
+ * - Blueprint execution (plan, apply, status, rollback)
13
+ * - Command execution inside sandboxes
14
+ *
15
+ * BYOC (Bring Your Own Client): No runtime dependency on openshell CLI
16
+ * or NemoClaw. Provide an executor via config, or let the adapter shell
17
+ * out to `openshell` if available on PATH.
18
+ *
19
+ * Usage — default (CLI on PATH):
20
+ * const adapter = new NemoClawAdapter();
21
+ * await adapter.initialize({ options: { sandboxImage: 'ghcr.io/nvidia/...' } });
22
+ * adapter.registerSandboxAgent('worker-1', { sandboxName: 'my-sandbox' });
23
+ *
24
+ * Usage — custom executor (bring-your-own):
25
+ * adapter.registerSandboxAgent('worker-1', {
26
+ * sandboxName: 'my-sandbox',
27
+ * executor: async (cmd, args) => myOpenShellWrapper(cmd, args),
28
+ * });
29
+ *
30
+ * @module NemoClawAdapter
31
+ * @version 1.0.0
32
+ */
33
+ Object.defineProperty(exports, "__esModule", { value: true });
34
+ exports.NemoClawAdapter = void 0;
35
+ const base_adapter_1 = require("./base-adapter");
36
+ // ---------------------------------------------------------------------------
37
+ // Helpers
38
+ // ---------------------------------------------------------------------------
39
+ /**
40
+ * Generate a YAML network policy document from policy objects.
41
+ * Produces the format expected by `openshell policy set`.
42
+ */
43
+ function generatePolicyYaml(policies) {
44
+ const lines = ['version: 1', '', 'network_policies:'];
45
+ for (const policy of policies) {
46
+ lines.push(` ${sanitizePolicyName(policy.name)}:`);
47
+ lines.push(` name: ${sanitizePolicyName(policy.name)}`);
48
+ lines.push(' endpoints:');
49
+ for (const ep of policy.endpoints) {
50
+ lines.push(` - host: "${escapeYamlString(ep.host)}"`);
51
+ if (ep.port != null)
52
+ lines.push(` port: ${ep.port}`);
53
+ if (ep.protocol)
54
+ lines.push(` protocol: ${ep.protocol}`);
55
+ if (ep.enforcement)
56
+ lines.push(` enforcement: ${ep.enforcement}`);
57
+ if (ep.tls)
58
+ lines.push(` tls: ${ep.tls}`);
59
+ if (ep.rules && ep.rules.length > 0) {
60
+ lines.push(' rules:');
61
+ for (const rule of ep.rules) {
62
+ lines.push(` - allow:`);
63
+ lines.push(` method: "${escapeYamlString(rule.allow.method)}"`);
64
+ lines.push(` path: "${escapeYamlString(rule.allow.path)}"`);
65
+ }
66
+ }
67
+ }
68
+ if (policy.binaries && policy.binaries.length > 0) {
69
+ lines.push(' binaries:');
70
+ for (const bin of policy.binaries) {
71
+ lines.push(` - path: "${escapeYamlString(bin)}"`);
72
+ }
73
+ }
74
+ }
75
+ return lines.join('\n') + '\n';
76
+ }
77
+ /** Sanitize policy name to alphanumeric + underscore only */
78
+ function sanitizePolicyName(name) {
79
+ return name.replace(/[^a-zA-Z0-9_]/g, '_').slice(0, 64);
80
+ }
81
+ /** Escape special YAML characters in strings */
82
+ function escapeYamlString(value) {
83
+ return value.replace(/[\\"]/g, '\\$&');
84
+ }
85
+ /**
86
+ * Build the command string from an AgentPayload for sandbox execution.
87
+ */
88
+ function buildSandboxCommand(payload, config) {
89
+ if (config.command)
90
+ return config.command;
91
+ const parts = [];
92
+ if (payload.action)
93
+ parts.push(payload.action);
94
+ if (payload.params && Object.keys(payload.params).length > 0) {
95
+ // Pass params as a JSON env var inside the sandbox
96
+ parts.push(`--params '${JSON.stringify(payload.params)}'`);
97
+ }
98
+ return parts.join(' ') || 'echo "No command specified"';
99
+ }
100
+ /**
101
+ * Tokenize a command string into an argument array, respecting single
102
+ * and double quotes. Prevents command-injection when forwarding to exec.
103
+ */
104
+ function tokenizeCommand(command) {
105
+ const tokens = [];
106
+ let current = '';
107
+ let quote = null;
108
+ for (const ch of command) {
109
+ if (quote) {
110
+ if (ch === quote) {
111
+ quote = null;
112
+ continue;
113
+ }
114
+ current += ch;
115
+ }
116
+ else if (ch === '"' || ch === "'") {
117
+ quote = ch;
118
+ }
119
+ else if (ch === ' ' || ch === '\t') {
120
+ if (current) {
121
+ tokens.push(current);
122
+ current = '';
123
+ }
124
+ }
125
+ else {
126
+ current += ch;
127
+ }
128
+ }
129
+ if (current)
130
+ tokens.push(current);
131
+ return tokens;
132
+ }
133
+ /**
134
+ * Parse JSON sandbox status output, handling malformed input safely.
135
+ */
136
+ function parseSandboxStatus(output, name) {
137
+ try {
138
+ const parsed = JSON.parse(output);
139
+ return {
140
+ name,
141
+ state: (typeof parsed['state'] === 'string' ? parsed['state'] : 'unknown'),
142
+ uptime: typeof parsed['uptime'] === 'number' ? parsed['uptime'] : undefined,
143
+ image: typeof parsed['image'] === 'string' ? parsed['image'] : undefined,
144
+ };
145
+ }
146
+ catch {
147
+ return { name, state: 'unknown' };
148
+ }
149
+ }
150
+ // ---------------------------------------------------------------------------
151
+ // NemoClawAdapter
152
+ // ---------------------------------------------------------------------------
153
+ /**
154
+ * Adapter that connects NVIDIA NemoClaw sandboxed agents to the
155
+ * SwarmOrchestrator. Manages sandbox lifecycle, network policies,
156
+ * and blueprint execution with deny-by-default security.
157
+ */
158
+ class NemoClawAdapter extends base_adapter_1.BaseAdapter {
159
+ name = 'nemoclaw';
160
+ version = '1.0.0';
161
+ agents = new Map();
162
+ executor = null;
163
+ defaultImage = 'ghcr.io/nvidia/openshell-community/sandboxes/openclaw:latest';
164
+ get capabilities() {
165
+ return {
166
+ streaming: false,
167
+ parallel: true,
168
+ bidirectional: false,
169
+ discovery: true,
170
+ authentication: true,
171
+ statefulSessions: true,
172
+ };
173
+ }
174
+ // -------------------------------------------------------------------------
175
+ // Lifecycle
176
+ // -------------------------------------------------------------------------
177
+ async initialize(config) {
178
+ await super.initialize(config);
179
+ // Accept a custom executor from config
180
+ if (config.options?.executor && typeof config.options.executor === 'function') {
181
+ this.executor = config.options.executor;
182
+ }
183
+ // Accept default sandbox image from config
184
+ if (config.options?.sandboxImage && typeof config.options.sandboxImage === 'string') {
185
+ this.defaultImage = config.options.sandboxImage;
186
+ }
187
+ this.ready = true;
188
+ }
189
+ async shutdown() {
190
+ // Clean up: stop port forwarding, but don't destroy sandboxes
191
+ // (they may be shared across sessions)
192
+ this.agents.clear();
193
+ await super.shutdown();
194
+ }
195
+ // -------------------------------------------------------------------------
196
+ // Agent Registration
197
+ // -------------------------------------------------------------------------
198
+ /**
199
+ * Register an agent that runs inside a NemoClaw sandbox.
200
+ *
201
+ * @param agentId Unique identifier used in `delegateTask` calls.
202
+ * @param config Sandbox agent configuration.
203
+ */
204
+ registerSandboxAgent(agentId, config) {
205
+ if (!this.ready) {
206
+ this.ready = true; // Allow pre-initialize registration
207
+ }
208
+ if (!config.sandboxName || typeof config.sandboxName !== 'string') {
209
+ throw new Error(`NemoClawAdapter: agent "${agentId}" requires a sandboxName.`);
210
+ }
211
+ this.agents.set(agentId, { config, sandboxReady: false });
212
+ this.registeredAgents.set(agentId, {
213
+ id: agentId,
214
+ name: agentId,
215
+ description: `NemoClaw sandbox agent (sandbox: ${config.sandboxName})`,
216
+ capabilities: ['sandbox-execution', 'network-isolation', 'blueprint'],
217
+ adapter: this.name,
218
+ status: 'available',
219
+ });
220
+ }
221
+ // -------------------------------------------------------------------------
222
+ // Sandbox Management (public API for advanced usage)
223
+ // -------------------------------------------------------------------------
224
+ /**
225
+ * Create a sandbox if it doesn't already exist.
226
+ * Returns the sandbox status after creation.
227
+ */
228
+ async createSandbox(sandboxName, image, forwardPorts) {
229
+ const exec = this.getExecutor();
230
+ // Check if sandbox already exists
231
+ try {
232
+ const statusOutput = await exec('sandbox', ['get', sandboxName, '--json']);
233
+ const status = parseSandboxStatus(statusOutput, sandboxName);
234
+ if (status.state === 'running')
235
+ return status;
236
+ }
237
+ catch {
238
+ // Sandbox doesn't exist — proceed to create
239
+ }
240
+ const args = [
241
+ 'create',
242
+ '--from', image ?? this.defaultImage,
243
+ '--name', sandboxName,
244
+ ];
245
+ if (forwardPorts && forwardPorts.length > 0) {
246
+ args.push('--forward-ports', forwardPorts.join(','));
247
+ }
248
+ await exec('sandbox', args);
249
+ // Return fresh status
250
+ return this.getSandboxStatus(sandboxName);
251
+ }
252
+ /**
253
+ * Get the current status of a sandbox.
254
+ */
255
+ async getSandboxStatus(sandboxName) {
256
+ const exec = this.getExecutor();
257
+ try {
258
+ const output = await exec('sandbox', ['get', sandboxName, '--json']);
259
+ return parseSandboxStatus(output, sandboxName);
260
+ }
261
+ catch {
262
+ return { name: sandboxName, state: 'unknown' };
263
+ }
264
+ }
265
+ /**
266
+ * Destroy a sandbox. Use with caution — this is irreversible.
267
+ */
268
+ async destroySandbox(sandboxName) {
269
+ const exec = this.getExecutor();
270
+ await exec('sandbox', ['delete', sandboxName, '--force']);
271
+ }
272
+ /**
273
+ * Execute a command inside a sandbox and return the output.
274
+ */
275
+ async execInSandbox(sandboxName, command, env) {
276
+ const exec = this.getExecutor();
277
+ return exec('sandbox', ['connect', sandboxName, '--', ...tokenizeCommand(command)], { env });
278
+ }
279
+ // -------------------------------------------------------------------------
280
+ // Network Policy Management
281
+ // -------------------------------------------------------------------------
282
+ /**
283
+ * Apply network policies to a sandbox.
284
+ * Generates YAML and applies via `openshell policy set`.
285
+ */
286
+ async applyPolicies(policies) {
287
+ const exec = this.getExecutor();
288
+ const yaml = generatePolicyYaml(policies);
289
+ // openshell policy set reads from stdin or a file path
290
+ // We pass the YAML content via a temp mechanism handled by the executor
291
+ await exec('policy', ['set', '--stdin'], { env: { __POLICY_YAML: yaml } });
292
+ }
293
+ /**
294
+ * Generate a Network-AI MCP server policy preset.
295
+ * This allows the sandbox to connect back to the host's MCP server.
296
+ *
297
+ * @param host Host address for the MCP server (default: "host.docker.internal")
298
+ * @param port Port number for the MCP server (default: 3001)
299
+ */
300
+ static mcpServerPolicy(host = 'host.docker.internal', port = 3001) {
301
+ return {
302
+ name: 'network_ai_mcp',
303
+ endpoints: [
304
+ {
305
+ host,
306
+ port,
307
+ protocol: 'rest',
308
+ enforcement: 'enforce',
309
+ rules: [
310
+ { allow: { method: '*', path: '/sse' } },
311
+ { allow: { method: 'POST', path: '/messages' } },
312
+ ],
313
+ },
314
+ ],
315
+ };
316
+ }
317
+ /**
318
+ * Generate an NVIDIA NIM API policy preset.
319
+ */
320
+ static nvidiaPolicy() {
321
+ return {
322
+ name: 'nvidia',
323
+ endpoints: [
324
+ { host: 'integrate.api.nvidia.com', port: 443, tls: 'passthrough' },
325
+ { host: 'inference-api.nvidia.com', port: 443, tls: 'passthrough' },
326
+ ],
327
+ };
328
+ }
329
+ // -------------------------------------------------------------------------
330
+ // Blueprint Execution
331
+ // -------------------------------------------------------------------------
332
+ /**
333
+ * Execute a blueprint action (plan, apply, status, rollback).
334
+ */
335
+ async execBlueprint(blueprintPath, action, options) {
336
+ const exec = this.getExecutor();
337
+ const args = [action, '--blueprint', blueprintPath];
338
+ if (options?.profile)
339
+ args.push('--profile', options.profile);
340
+ if (options?.planPath)
341
+ args.push('--plan', options.planPath);
342
+ if (options?.dryRun)
343
+ args.push('--dry-run');
344
+ const runId = `run-${Date.now()}`;
345
+ try {
346
+ const output = await exec('blueprint', args, {
347
+ env: {
348
+ NEMOCLAW_BLUEPRINT_PATH: blueprintPath,
349
+ NEMOCLAW_ACTION: action,
350
+ },
351
+ });
352
+ return {
353
+ success: true,
354
+ runId,
355
+ action,
356
+ output,
357
+ exitCode: 0,
358
+ };
359
+ }
360
+ catch (error) {
361
+ return {
362
+ success: false,
363
+ runId,
364
+ action,
365
+ output: error instanceof Error ? error.message : String(error),
366
+ exitCode: 1,
367
+ };
368
+ }
369
+ }
370
+ // -------------------------------------------------------------------------
371
+ // Agent Execution (BaseAdapter contract)
372
+ // -------------------------------------------------------------------------
373
+ async executeAgent(agentId, payload, context) {
374
+ this.ensureReady();
375
+ const entry = this.agents.get(agentId);
376
+ if (!entry) {
377
+ return this.errorResult('AGENT_NOT_FOUND', `NemoClaw agent "${agentId}" is not registered. Call registerSandboxAgent() first.`, false);
378
+ }
379
+ const startTime = Date.now();
380
+ const { config } = entry;
381
+ const exec = this.getExecutor(config.executor);
382
+ try {
383
+ // Step 1: Ensure sandbox exists and is running
384
+ if (!entry.sandboxReady) {
385
+ const status = await this.createSandbox(config.sandboxName, config.sandboxImage ?? this.defaultImage, config.forwardPorts);
386
+ if (status.state !== 'running') {
387
+ return this.errorResult('SANDBOX_NOT_READY', `Sandbox "${config.sandboxName}" is in state "${status.state}"`, true);
388
+ }
389
+ // Apply network policies if configured
390
+ if (config.policies && config.policies.length > 0) {
391
+ await this.applyPolicies(config.policies);
392
+ }
393
+ entry.sandboxReady = true;
394
+ }
395
+ // Step 2: Build and execute command inside sandbox
396
+ const command = buildSandboxCommand(payload, config);
397
+ // Merge blackboard snapshot into env if present
398
+ const env = { ...config.env };
399
+ if (payload.blackboardSnapshot && Object.keys(payload.blackboardSnapshot).length > 0) {
400
+ env['NETWORK_AI_CONTEXT'] = JSON.stringify(payload.blackboardSnapshot);
401
+ }
402
+ // Include handoff info if present
403
+ if (payload.handoff) {
404
+ env['NETWORK_AI_HANDOFF'] = JSON.stringify({
405
+ handoffId: payload.handoff.handoffId,
406
+ sourceAgent: payload.handoff.sourceAgent,
407
+ taskType: payload.handoff.taskType,
408
+ instruction: payload.handoff.instruction,
409
+ });
410
+ }
411
+ const output = await exec('sandbox', ['connect', config.sandboxName, '--', ...tokenizeCommand(command)], { env });
412
+ // Step 3: Parse output
413
+ let data = output;
414
+ try {
415
+ data = JSON.parse(output);
416
+ }
417
+ catch {
418
+ // Output is plain text — that's fine
419
+ }
420
+ return this.successResult(data, Date.now() - startTime);
421
+ }
422
+ catch (error) {
423
+ return this.errorResult('NEMOCLAW_ERROR', error instanceof Error ? error.message : 'NemoClaw agent execution failed', true, error);
424
+ }
425
+ }
426
+ // -------------------------------------------------------------------------
427
+ // Private helpers
428
+ // -------------------------------------------------------------------------
429
+ /**
430
+ * Get the executor function — agent-level override > adapter-level > default CLI.
431
+ */
432
+ getExecutor(agentExecutor) {
433
+ if (agentExecutor)
434
+ return agentExecutor;
435
+ if (this.executor)
436
+ return this.executor;
437
+ return defaultCliExecutor;
438
+ }
439
+ }
440
+ exports.NemoClawAdapter = NemoClawAdapter;
441
+ // ---------------------------------------------------------------------------
442
+ // Default CLI executor — shells out to `openshell` binary
443
+ // ---------------------------------------------------------------------------
444
+ /**
445
+ * Default executor that spawns `openshell` as a child process.
446
+ * Used when no custom executor is provided.
447
+ */
448
+ const defaultCliExecutor = async (subcommand, args, options) => {
449
+ const { execFile } = await import('node:child_process');
450
+ const { promisify } = await import('node:util');
451
+ const execFileAsync = promisify(execFile);
452
+ const fullArgs = [subcommand, ...args];
453
+ const env = { ...process.env, ...options?.env };
454
+ // Remove internal transport keys
455
+ if (env['__POLICY_YAML']) {
456
+ delete env['__POLICY_YAML'];
457
+ }
458
+ const { stdout } = await execFileAsync('openshell', fullArgs, {
459
+ env,
460
+ timeout: options?.timeout ?? 60_000,
461
+ maxBuffer: 10 * 1024 * 1024,
462
+ });
463
+ return stdout;
464
+ };
465
+ //# sourceMappingURL=nemoclaw-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nemoclaw-adapter.js","sourceRoot":"","sources":["../../../adapters/nemoclaw-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ /**
3
+ * OpenAI Agents SDK Adapter
4
+ *
5
+ * Integrates the OpenAI Agents SDK (Python-first, but JS-compatible API)
6
+ * with the SwarmOrchestrator.
7
+ *
8
+ * The OpenAI Agents SDK provides:
9
+ * - Agent definition with instructions + tools
10
+ * - Handoff between agents
11
+ * - Guardrails (input/output validation)
12
+ * - Tracing
13
+ *
14
+ * This adapter wraps user-supplied agent runners or HTTP endpoints
15
+ * that expose the Agents SDK interface. No hard dependency on the SDK.
16
+ *
17
+ * Usage:
18
+ * const adapter = new OpenAIAgentsAdapter();
19
+ * adapter.registerAgentRunner('researcher', {
20
+ * runner: myAgentRunner,
21
+ * });
22
+ *
23
+ * @module OpenAIAgentsAdapter
24
+ * @version 1.0.0
25
+ */
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.OpenAIAgentsAdapter = void 0;
28
+ const base_adapter_1 = require("./base-adapter");
29
+ // ---------------------------------------------------------------------------
30
+ // Adapter
31
+ // ---------------------------------------------------------------------------
32
+ /**
33
+ * Adapter for the OpenAI Agents SDK.
34
+ *
35
+ * Wraps agent runners that implement the OAIAgentRunner interface.
36
+ * Supports tool use, handoffs, and guardrails via the SDK's execution model.
37
+ */
38
+ class OpenAIAgentsAdapter extends base_adapter_1.BaseAdapter {
39
+ name = 'openai-agents';
40
+ version = '1.0.0';
41
+ runners = new Map();
42
+ get capabilities() {
43
+ return {
44
+ streaming: false,
45
+ parallel: true,
46
+ bidirectional: false,
47
+ discovery: true,
48
+ authentication: true,
49
+ statefulSessions: false,
50
+ };
51
+ }
52
+ // -----------------------------------------------------------------------
53
+ // Registration
54
+ // -----------------------------------------------------------------------
55
+ /**
56
+ * Register an OpenAI Agent runner as a named agent.
57
+ */
58
+ registerAgentRunner(agentId, config) {
59
+ this.runners.set(agentId, config);
60
+ this.registerLocalAgent({
61
+ id: agentId,
62
+ name: agentId,
63
+ status: 'available',
64
+ capabilities: ['tool-use', 'handoff', ...(config.tools?.map((t) => t.name) ?? [])],
65
+ metadata: {
66
+ adapter: 'openai-agents',
67
+ model: config.model ?? 'gpt-4o',
68
+ handoffsEnabled: config.handoffsEnabled ?? false,
69
+ },
70
+ });
71
+ }
72
+ // -----------------------------------------------------------------------
73
+ // Execution
74
+ // -----------------------------------------------------------------------
75
+ async executeAgent(agentId, payload, _context) {
76
+ this.ensureReady();
77
+ const config = this.runners.get(agentId);
78
+ if (!config) {
79
+ return this.errorResult('OAI_AGENTS_NOT_FOUND', `No agent runner registered as '${agentId}'`);
80
+ }
81
+ const input = payload.handoff?.instruction
82
+ ?? payload.params?.instruction
83
+ ?? payload.params?.input
84
+ ?? payload.action;
85
+ const runContext = {
86
+ ...payload.params,
87
+ ...payload.handoff?.context,
88
+ };
89
+ const timeoutMs = config.timeoutMs ?? 120_000;
90
+ const start = Date.now();
91
+ try {
92
+ const result = await Promise.race([
93
+ config.runner.run(input, runContext),
94
+ new Promise((_, reject) => setTimeout(() => reject(new Error('OpenAI Agent execution timed out')), timeoutMs)),
95
+ ]);
96
+ const durationMs = Date.now() - start;
97
+ return this.successResult({
98
+ output: result.output,
99
+ toolCalls: result.toolCalls,
100
+ handoffs: result.handoffs,
101
+ guardrailTriggered: result.guardrailTriggered,
102
+ usage: result.usage,
103
+ }, durationMs);
104
+ }
105
+ catch (err) {
106
+ return this.errorResult('OAI_AGENTS_EXECUTION_FAILED', err instanceof Error ? err.message : String(err));
107
+ }
108
+ }
109
+ // -----------------------------------------------------------------------
110
+ // Lifecycle
111
+ // -----------------------------------------------------------------------
112
+ async shutdown() {
113
+ this.runners.clear();
114
+ await super.shutdown();
115
+ }
116
+ }
117
+ exports.OpenAIAgentsAdapter = OpenAIAgentsAdapter;
118
+ //# sourceMappingURL=openai-agents-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-agents-adapter.js","sourceRoot":"","sources":["../../../adapters/openai-agents-adapter.ts"],"names":[],"mappings":"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"}