network-ai 4.15.3 → 5.1.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 (282) hide show
  1. package/INTEGRATION_GUIDE.md +12 -5
  2. package/QUICKSTART.md +32 -5
  3. package/README.md +42 -17
  4. package/bin/dashboard.ts +146 -0
  5. package/bin/mcp-server.ts +3 -2
  6. package/dist/adapters/adapter-registry.d.ts +33 -1
  7. package/dist/adapters/adapter-registry.d.ts.map +1 -1
  8. package/dist/adapters/adapter-registry.js +49 -0
  9. package/dist/adapters/adapter-registry.js.map +1 -1
  10. package/dist/adapters/anthropic-computer-use-adapter.d.ts +132 -0
  11. package/dist/adapters/anthropic-computer-use-adapter.d.ts.map +1 -0
  12. package/dist/adapters/anthropic-computer-use-adapter.js +180 -0
  13. package/dist/adapters/anthropic-computer-use-adapter.js.map +1 -0
  14. package/dist/adapters/browser-agent-adapter.d.ts +121 -0
  15. package/dist/adapters/browser-agent-adapter.d.ts.map +1 -0
  16. package/dist/adapters/browser-agent-adapter.js +219 -0
  17. package/dist/adapters/browser-agent-adapter.js.map +1 -0
  18. package/dist/adapters/copilot-adapter.d.ts +59 -0
  19. package/dist/adapters/copilot-adapter.d.ts.map +1 -0
  20. package/dist/adapters/copilot-adapter.js +132 -0
  21. package/dist/adapters/copilot-adapter.js.map +1 -0
  22. package/dist/adapters/custom-adapter.d.ts +1 -1
  23. package/dist/adapters/custom-adapter.js +1 -1
  24. package/dist/adapters/index.d.ts +17 -1
  25. package/dist/adapters/index.d.ts.map +1 -1
  26. package/dist/adapters/index.js +25 -1
  27. package/dist/adapters/index.js.map +1 -1
  28. package/dist/adapters/langchain-adapter.js +1 -1
  29. package/dist/adapters/langchain-adapter.js.map +1 -1
  30. package/dist/adapters/langgraph-adapter.d.ts +70 -0
  31. package/dist/adapters/langgraph-adapter.d.ts.map +1 -0
  32. package/dist/adapters/langgraph-adapter.js +119 -0
  33. package/dist/adapters/langgraph-adapter.js.map +1 -0
  34. package/dist/adapters/mcp-adapter.d.ts +1 -1
  35. package/dist/adapters/mcp-adapter.js +3 -3
  36. package/dist/adapters/mcp-adapter.js.map +1 -1
  37. package/dist/adapters/openai-agents-adapter.d.ts +100 -0
  38. package/dist/adapters/openai-agents-adapter.d.ts.map +1 -0
  39. package/dist/adapters/openai-agents-adapter.js +118 -0
  40. package/dist/adapters/openai-agents-adapter.js.map +1 -0
  41. package/dist/adapters/openclaw-adapter.d.ts +1 -1
  42. package/dist/adapters/openclaw-adapter.js +3 -3
  43. package/dist/adapters/openclaw-adapter.js.map +1 -1
  44. package/dist/adapters/orchestrator-adapter.d.ts +118 -0
  45. package/dist/adapters/orchestrator-adapter.d.ts.map +1 -0
  46. package/dist/adapters/orchestrator-adapter.js +219 -0
  47. package/dist/adapters/orchestrator-adapter.js.map +1 -0
  48. package/dist/adapters/pydantic-ai-adapter.d.ts +104 -0
  49. package/dist/adapters/pydantic-ai-adapter.d.ts.map +1 -0
  50. package/dist/adapters/pydantic-ai-adapter.js +163 -0
  51. package/dist/adapters/pydantic-ai-adapter.js.map +1 -0
  52. package/dist/adapters/vertex-ai-adapter.d.ts +122 -0
  53. package/dist/adapters/vertex-ai-adapter.d.ts.map +1 -0
  54. package/dist/adapters/vertex-ai-adapter.js +166 -0
  55. package/dist/adapters/vertex-ai-adapter.js.map +1 -0
  56. package/dist/bin/dashboard.d.ts +11 -0
  57. package/dist/bin/dashboard.d.ts.map +1 -0
  58. package/dist/bin/dashboard.js +135 -0
  59. package/dist/bin/dashboard.js.map +1 -0
  60. package/dist/bin/mcp-server.js +3 -2
  61. package/dist/bin/mcp-server.js.map +1 -1
  62. package/dist/demo-control-plane.d.ts +12 -0
  63. package/dist/demo-control-plane.d.ts.map +1 -0
  64. package/dist/demo-control-plane.js +147 -0
  65. package/dist/demo-control-plane.js.map +1 -0
  66. package/dist/demo-worktree-dashboard.d.ts +2 -0
  67. package/dist/demo-worktree-dashboard.d.ts.map +1 -0
  68. package/dist/demo-worktree-dashboard.js +131 -0
  69. package/dist/demo-worktree-dashboard.js.map +1 -0
  70. package/dist/examples/01-hello-swarm.d.ts +13 -0
  71. package/dist/examples/01-hello-swarm.d.ts.map +1 -0
  72. package/dist/examples/01-hello-swarm.js +165 -0
  73. package/dist/examples/01-hello-swarm.js.map +1 -0
  74. package/dist/examples/02-fsm-pipeline.d.ts +20 -0
  75. package/dist/examples/02-fsm-pipeline.d.ts.map +1 -0
  76. package/dist/examples/02-fsm-pipeline.js +189 -0
  77. package/dist/examples/02-fsm-pipeline.js.map +1 -0
  78. package/dist/examples/03-parallel-agents.d.ts +21 -0
  79. package/dist/examples/03-parallel-agents.d.ts.map +1 -0
  80. package/dist/examples/03-parallel-agents.js +192 -0
  81. package/dist/examples/03-parallel-agents.js.map +1 -0
  82. package/dist/examples/05-code-review-swarm.d.ts +21 -0
  83. package/dist/examples/05-code-review-swarm.d.ts.map +1 -0
  84. package/dist/examples/05-code-review-swarm.js +1177 -0
  85. package/dist/examples/05-code-review-swarm.js.map +1 -0
  86. package/dist/examples/06-ai-pipeline-demo.d.ts +24 -0
  87. package/dist/examples/06-ai-pipeline-demo.d.ts.map +1 -0
  88. package/dist/examples/06-ai-pipeline-demo.js +263 -0
  89. package/dist/examples/06-ai-pipeline-demo.js.map +1 -0
  90. package/dist/examples/07-full-showcase.d.ts +27 -0
  91. package/dist/examples/07-full-showcase.d.ts.map +1 -0
  92. package/dist/examples/07-full-showcase.js +946 -0
  93. package/dist/examples/07-full-showcase.js.map +1 -0
  94. package/dist/examples/08-control-plane-stress-demo.d.ts +19 -0
  95. package/dist/examples/08-control-plane-stress-demo.d.ts.map +1 -0
  96. package/dist/examples/08-control-plane-stress-demo.js +186 -0
  97. package/dist/examples/08-control-plane-stress-demo.js.map +1 -0
  98. package/dist/examples/09-real-langchain.d.ts +19 -0
  99. package/dist/examples/09-real-langchain.d.ts.map +1 -0
  100. package/dist/examples/09-real-langchain.js +231 -0
  101. package/dist/examples/09-real-langchain.js.map +1 -0
  102. package/dist/examples/10-nemoclaw-sandbox-swarm.d.ts +16 -0
  103. package/dist/examples/10-nemoclaw-sandbox-swarm.d.ts.map +1 -0
  104. package/dist/examples/10-nemoclaw-sandbox-swarm.js +270 -0
  105. package/dist/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
  106. package/dist/examples/demo-runner.d.ts +2 -0
  107. package/dist/examples/demo-runner.d.ts.map +1 -0
  108. package/dist/examples/demo-runner.js +119 -0
  109. package/dist/examples/demo-runner.js.map +1 -0
  110. package/dist/index.d.ts +113 -559
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +310 -1074
  113. package/dist/index.js.map +1 -1
  114. package/dist/lib/adapter-test-harness.d.ts +88 -0
  115. package/dist/lib/adapter-test-harness.d.ts.map +1 -0
  116. package/dist/lib/adapter-test-harness.js +118 -0
  117. package/dist/lib/adapter-test-harness.js.map +1 -0
  118. package/dist/lib/agent-conversation.d.ts +115 -0
  119. package/dist/lib/agent-conversation.d.ts.map +1 -0
  120. package/dist/lib/agent-conversation.js +155 -0
  121. package/dist/lib/agent-conversation.js.map +1 -0
  122. package/dist/lib/agent-debate.d.ts +115 -0
  123. package/dist/lib/agent-debate.d.ts.map +1 -0
  124. package/dist/lib/agent-debate.js +146 -0
  125. package/dist/lib/agent-debate.js.map +1 -0
  126. package/dist/lib/agent-memory.d.ts +157 -0
  127. package/dist/lib/agent-memory.d.ts.map +1 -0
  128. package/dist/lib/agent-memory.js +336 -0
  129. package/dist/lib/agent-memory.js.map +1 -0
  130. package/dist/lib/agent-vcr.d.ts +133 -0
  131. package/dist/lib/agent-vcr.d.ts.map +1 -0
  132. package/dist/lib/agent-vcr.js +218 -0
  133. package/dist/lib/agent-vcr.js.map +1 -0
  134. package/dist/lib/anomaly-detector.d.ts +112 -0
  135. package/dist/lib/anomaly-detector.d.ts.map +1 -0
  136. package/dist/lib/anomaly-detector.js +178 -0
  137. package/dist/lib/anomaly-detector.js.map +1 -0
  138. package/dist/lib/approval-inbox.d.ts +147 -0
  139. package/dist/lib/approval-inbox.d.ts.map +1 -0
  140. package/dist/lib/approval-inbox.js +385 -0
  141. package/dist/lib/approval-inbox.js.map +1 -0
  142. package/dist/lib/auth-guardian.d.ts +170 -0
  143. package/dist/lib/auth-guardian.d.ts.map +1 -0
  144. package/dist/lib/auth-guardian.js +604 -0
  145. package/dist/lib/auth-guardian.js.map +1 -0
  146. package/dist/lib/auth-validator.d.ts +70 -0
  147. package/dist/lib/auth-validator.d.ts.map +1 -0
  148. package/dist/lib/auth-validator.js +32 -0
  149. package/dist/lib/auth-validator.js.map +1 -0
  150. package/dist/lib/blackboard-validator.d.ts +56 -0
  151. package/dist/lib/blackboard-validator.d.ts.map +1 -1
  152. package/dist/lib/blackboard-validator.js +181 -4
  153. package/dist/lib/blackboard-validator.js.map +1 -1
  154. package/dist/lib/comparison-runner.d.ts +99 -0
  155. package/dist/lib/comparison-runner.d.ts.map +1 -0
  156. package/dist/lib/comparison-runner.js +138 -0
  157. package/dist/lib/comparison-runner.js.map +1 -0
  158. package/dist/lib/config-watcher.d.ts +109 -0
  159. package/dist/lib/config-watcher.d.ts.map +1 -0
  160. package/dist/lib/config-watcher.js +215 -0
  161. package/dist/lib/config-watcher.js.map +1 -0
  162. package/dist/lib/control-plane.d.ts +128 -0
  163. package/dist/lib/control-plane.d.ts.map +1 -0
  164. package/dist/lib/control-plane.js +527 -0
  165. package/dist/lib/control-plane.js.map +1 -0
  166. package/dist/lib/cost-governor.d.ts +105 -0
  167. package/dist/lib/cost-governor.d.ts.map +1 -0
  168. package/dist/lib/cost-governor.js +128 -0
  169. package/dist/lib/cost-governor.js.map +1 -0
  170. package/dist/lib/cost-heatmap.d.ts +104 -0
  171. package/dist/lib/cost-heatmap.d.ts.map +1 -0
  172. package/dist/lib/cost-heatmap.js +161 -0
  173. package/dist/lib/cost-heatmap.js.map +1 -0
  174. package/dist/lib/coverage-reporter.d.ts +92 -0
  175. package/dist/lib/coverage-reporter.d.ts.map +1 -0
  176. package/dist/lib/coverage-reporter.js +177 -0
  177. package/dist/lib/coverage-reporter.js.map +1 -0
  178. package/dist/lib/dashboard-server.d.ts +71 -0
  179. package/dist/lib/dashboard-server.d.ts.map +1 -0
  180. package/dist/lib/dashboard-server.js +403 -0
  181. package/dist/lib/dashboard-server.js.map +1 -0
  182. package/dist/lib/dry-run.d.ts +73 -0
  183. package/dist/lib/dry-run.d.ts.map +1 -0
  184. package/dist/lib/dry-run.js +130 -0
  185. package/dist/lib/dry-run.js.map +1 -0
  186. package/dist/lib/errors.d.ts +15 -0
  187. package/dist/lib/errors.d.ts.map +1 -1
  188. package/dist/lib/errors.js +38 -0
  189. package/dist/lib/errors.js.map +1 -1
  190. package/dist/lib/event-bus.d.ts +167 -0
  191. package/dist/lib/event-bus.d.ts.map +1 -0
  192. package/dist/lib/event-bus.js +229 -0
  193. package/dist/lib/event-bus.js.map +1 -0
  194. package/dist/lib/explainability.d.ts +85 -0
  195. package/dist/lib/explainability.d.ts.map +1 -0
  196. package/dist/lib/explainability.js +102 -0
  197. package/dist/lib/explainability.js.map +1 -0
  198. package/dist/lib/goal-dsl.d.ts +157 -0
  199. package/dist/lib/goal-dsl.d.ts.map +1 -0
  200. package/dist/lib/goal-dsl.js +391 -0
  201. package/dist/lib/goal-dsl.js.map +1 -0
  202. package/dist/lib/job-queue.d.ts +183 -0
  203. package/dist/lib/job-queue.d.ts.map +1 -0
  204. package/dist/lib/job-queue.js +310 -0
  205. package/dist/lib/job-queue.js.map +1 -0
  206. package/dist/lib/learning-loop.d.ts +113 -0
  207. package/dist/lib/learning-loop.d.ts.map +1 -0
  208. package/dist/lib/learning-loop.js +181 -0
  209. package/dist/lib/learning-loop.js.map +1 -0
  210. package/dist/lib/lifecycle-hooks.d.ts +116 -0
  211. package/dist/lib/lifecycle-hooks.d.ts.map +1 -0
  212. package/dist/lib/lifecycle-hooks.js +148 -0
  213. package/dist/lib/lifecycle-hooks.js.map +1 -0
  214. package/dist/lib/locked-blackboard.d.ts.map +1 -1
  215. package/dist/lib/locked-blackboard.js +9 -5
  216. package/dist/lib/locked-blackboard.js.map +1 -1
  217. package/dist/lib/mcp-tool-consumer.d.ts +153 -0
  218. package/dist/lib/mcp-tool-consumer.d.ts.map +1 -0
  219. package/dist/lib/mcp-tool-consumer.js +320 -0
  220. package/dist/lib/mcp-tool-consumer.js.map +1 -0
  221. package/dist/lib/metrics.d.ts +119 -0
  222. package/dist/lib/metrics.d.ts.map +1 -0
  223. package/dist/lib/metrics.js +284 -0
  224. package/dist/lib/metrics.js.map +1 -0
  225. package/dist/lib/orchestrator-types.d.ts +309 -0
  226. package/dist/lib/orchestrator-types.d.ts.map +1 -0
  227. package/dist/lib/orchestrator-types.js +61 -0
  228. package/dist/lib/orchestrator-types.js.map +1 -0
  229. package/dist/lib/otel-bridge.d.ts +74 -0
  230. package/dist/lib/otel-bridge.d.ts.map +1 -0
  231. package/dist/lib/otel-bridge.js +167 -0
  232. package/dist/lib/otel-bridge.js.map +1 -0
  233. package/dist/lib/playground.d.ts +76 -0
  234. package/dist/lib/playground.d.ts.map +1 -0
  235. package/dist/lib/playground.js +224 -0
  236. package/dist/lib/playground.js.map +1 -0
  237. package/dist/lib/quadtree.d.ts +114 -0
  238. package/dist/lib/quadtree.d.ts.map +1 -0
  239. package/dist/lib/quadtree.js +259 -0
  240. package/dist/lib/quadtree.js.map +1 -0
  241. package/dist/lib/shared-blackboard.d.ts +101 -0
  242. package/dist/lib/shared-blackboard.d.ts.map +1 -0
  243. package/dist/lib/shared-blackboard.js +249 -0
  244. package/dist/lib/shared-blackboard.js.map +1 -0
  245. package/dist/lib/speculative-executor.d.ts +89 -0
  246. package/dist/lib/speculative-executor.d.ts.map +1 -0
  247. package/dist/lib/speculative-executor.js +107 -0
  248. package/dist/lib/speculative-executor.js.map +1 -0
  249. package/dist/lib/swarm-transport.d.ts +150 -0
  250. package/dist/lib/swarm-transport.d.ts.map +1 -0
  251. package/dist/lib/swarm-transport.js +307 -0
  252. package/dist/lib/swarm-transport.js.map +1 -0
  253. package/dist/lib/task-decomposer.d.ts +41 -0
  254. package/dist/lib/task-decomposer.d.ts.map +1 -0
  255. package/dist/lib/task-decomposer.js +272 -0
  256. package/dist/lib/task-decomposer.js.map +1 -0
  257. package/dist/lib/timeline-scrubber.d.ts +84 -0
  258. package/dist/lib/timeline-scrubber.d.ts.map +1 -0
  259. package/dist/lib/timeline-scrubber.js +173 -0
  260. package/dist/lib/timeline-scrubber.js.map +1 -0
  261. package/dist/lib/topology.d.ts +361 -0
  262. package/dist/lib/topology.d.ts.map +1 -0
  263. package/dist/lib/topology.js +591 -0
  264. package/dist/lib/topology.js.map +1 -0
  265. package/dist/lib/work-tree-dashboard.d.ts +130 -0
  266. package/dist/lib/work-tree-dashboard.d.ts.map +1 -0
  267. package/dist/lib/work-tree-dashboard.js +583 -0
  268. package/dist/lib/work-tree-dashboard.js.map +1 -0
  269. package/dist/lib/work-tree-ui.d.ts +107 -0
  270. package/dist/lib/work-tree-ui.d.ts.map +1 -0
  271. package/dist/lib/work-tree-ui.js +333 -0
  272. package/dist/lib/work-tree-ui.js.map +1 -0
  273. package/dist/lib/work-tree.d.ts +184 -0
  274. package/dist/lib/work-tree.d.ts.map +1 -0
  275. package/dist/lib/work-tree.js +480 -0
  276. package/dist/lib/work-tree.js.map +1 -0
  277. package/dist/security.d.ts +95 -0
  278. package/dist/security.d.ts.map +1 -1
  279. package/dist/security.js +267 -4
  280. package/dist/security.js.map +1 -1
  281. package/package.json +8 -6
  282. package/types/agent-adapter.d.ts +5 -0
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ /**
3
+ * 10-nemoclaw-sandbox-swarm.ts
4
+ * ────────────────────────────
5
+ * Demonstrates three agents running in isolated NemoClaw sandboxes,
6
+ * coordinating through a shared blackboard. Each agent has its own
7
+ * deny-by-default network policy — only the endpoints it needs are
8
+ * accessible.
9
+ *
10
+ * No API key needed — uses mock sandbox executor for demo purposes.
11
+ * In production, replace the mock executor with a real OpenShell CLI.
12
+ *
13
+ * Run:
14
+ * npx ts-node examples/10-nemoclaw-sandbox-swarm.ts
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ const __1 = require("..");
18
+ const nemoclaw_adapter_1 = require("../adapters/nemoclaw-adapter");
19
+ // ─── ANSI helpers ─────────────────────────────────────────────────────────────
20
+ const c = {
21
+ reset: '\x1b[0m',
22
+ bold: '\x1b[1m',
23
+ cyan: '\x1b[36m',
24
+ green: '\x1b[32m',
25
+ yellow: '\x1b[33m',
26
+ blue: '\x1b[34m',
27
+ magenta: '\x1b[35m',
28
+ red: '\x1b[31m',
29
+ dim: '\x1b[2m',
30
+ };
31
+ const banner = (msg) => console.log(`\n${c.bold}${c.cyan}--- ${msg} ---${c.reset}`);
32
+ const step = (agent, msg) => console.log(` ${c.green}[${agent}]${c.reset} ${msg}`);
33
+ const policy = (msg) => console.log(` ${c.yellow}[policy]${c.reset} ${msg}`);
34
+ const info = (msg) => console.log(` ${c.dim}${msg}${c.reset}`);
35
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
36
+ // ─── Mock sandbox executor ───────────────────────────────────────────────────
37
+ // In production, this would shell out to `openshell` CLI.
38
+ // For the demo, it simulates sandbox creation and agent execution.
39
+ function createMockExecutor() {
40
+ const sandboxes = new Map();
41
+ return async (subcommand, args, options) => {
42
+ await sleep(100); // Simulate I/O latency
43
+ if (subcommand === 'sandbox' && args[0] === 'create') {
44
+ const nameIdx = args.indexOf('--name');
45
+ const name = nameIdx >= 0 ? args[nameIdx + 1] : 'unnamed';
46
+ const fromIdx = args.indexOf('--from');
47
+ const image = fromIdx >= 0 ? args[fromIdx + 1] : 'unknown';
48
+ sandboxes.set(name, { state: 'running', image });
49
+ step('openshell', `Sandbox "${name}" created from ${image}`);
50
+ return `sandbox "${name}" created`;
51
+ }
52
+ if (subcommand === 'sandbox' && args[0] === 'get') {
53
+ const name = args[1];
54
+ const sb = sandboxes.get(name);
55
+ if (sb)
56
+ return JSON.stringify({ state: sb.state, uptime: 60, image: sb.image });
57
+ throw new Error(`sandbox "${name}" not found`);
58
+ }
59
+ if (subcommand === 'sandbox' && args[0] === 'connect') {
60
+ const name = args[1];
61
+ const cmd = args.slice(3).join(' '); // Skip --
62
+ const env = options?.env ?? {};
63
+ // Simulate agent execution based on environment context
64
+ const handoff = env['NETWORK_AI_HANDOFF'] ? JSON.parse(env['NETWORK_AI_HANDOFF']) : null;
65
+ const context = env['NETWORK_AI_CONTEXT'] ? JSON.parse(env['NETWORK_AI_CONTEXT']) : {};
66
+ step(name, `Executing: ${cmd || 'default task'}`);
67
+ if (handoff?.instruction) {
68
+ info(` Handoff: "${handoff.instruction}"`);
69
+ }
70
+ // Generate mock responses based on sandbox name
71
+ if (name.includes('researcher')) {
72
+ return JSON.stringify({
73
+ findings: [
74
+ 'NemoClaw uses deny-by-default network policies',
75
+ 'OpenShell provides Landlock filesystem isolation',
76
+ 'Blueprints automate sandbox provisioning',
77
+ ],
78
+ sourceCount: 5,
79
+ confidence: 0.92,
80
+ });
81
+ }
82
+ if (name.includes('analyst')) {
83
+ const findings = context['research:findings']
84
+ ? JSON.parse(JSON.stringify(context['research:findings']))
85
+ : ['No prior research available'];
86
+ return JSON.stringify({
87
+ riskScore: 15,
88
+ recommendation: 'Low risk — sandbox isolation is strong',
89
+ analyzed: Array.isArray(findings) ? findings.length : 1,
90
+ summary: 'NemoClaw sandboxing provides defense-in-depth for multi-agent systems',
91
+ });
92
+ }
93
+ if (name.includes('reporter')) {
94
+ return JSON.stringify({
95
+ report: '# Security Analysis Report\n\n' +
96
+ '## Findings\n' +
97
+ 'NemoClaw sandbox isolation provides strong security boundaries.\n\n' +
98
+ '## Risk Assessment\n' +
99
+ 'Overall risk: LOW (15/100)\n\n' +
100
+ '## Recommendation\n' +
101
+ 'Proceed with sandbox deployment for multi-agent coordination.',
102
+ format: 'markdown',
103
+ wordCount: 42,
104
+ });
105
+ }
106
+ return JSON.stringify({ output: 'task completed' });
107
+ }
108
+ if (subcommand === 'policy') {
109
+ const yaml = options?.env?.['__POLICY_YAML'] ?? '';
110
+ const policyCount = (yaml.match(/endpoints:/g) ?? []).length;
111
+ policy(`Applied ${policyCount} policy group(s)`);
112
+ return 'policies applied';
113
+ }
114
+ if (subcommand === 'sandbox' && args[0] === 'delete') {
115
+ const name = args[1];
116
+ sandboxes.delete(name);
117
+ step('openshell', `Sandbox "${name}" destroyed`);
118
+ return 'deleted';
119
+ }
120
+ return '';
121
+ };
122
+ }
123
+ // ─── Define network policies per agent ───────────────────────────────────────
124
+ const researcherPolicies = [
125
+ {
126
+ name: 'web_research',
127
+ endpoints: [
128
+ { host: 'api.arxiv.org', port: 443, protocol: 'rest' },
129
+ { host: 'api.semanticscholar.org', port: 443, protocol: 'rest' },
130
+ ],
131
+ },
132
+ nemoclaw_adapter_1.NemoClawAdapter.mcpServerPolicy(), // Connect to Network-AI MCP server
133
+ ];
134
+ const analystPolicies = [
135
+ nemoclaw_adapter_1.NemoClawAdapter.nvidiaPolicy(), // Access NVIDIA NIM for analysis
136
+ nemoclaw_adapter_1.NemoClawAdapter.mcpServerPolicy(), // Connect to Network-AI MCP server
137
+ ];
138
+ const reporterPolicies = [
139
+ nemoclaw_adapter_1.NemoClawAdapter.mcpServerPolicy(), // Only needs MCP server access
140
+ ];
141
+ // ─── MAIN ─────────────────────────────────────────────────────────────────────
142
+ async function main() {
143
+ banner('NemoClaw Sandbox Swarm — Isolated Multi-Agent Coordination');
144
+ console.log();
145
+ info('Three agents in separate sandboxes, each with its own network policy.');
146
+ info('Coordination happens through the shared blackboard (no direct comms).');
147
+ console.log();
148
+ // 1. Shared blackboard
149
+ const blackboard = new __1.SharedBlackboard(process.cwd());
150
+ blackboard.registerAgent('researcher', 'tok-researcher', ['task:', 'research:']);
151
+ blackboard.registerAgent('analyst', 'tok-analyst', ['task:', 'research:', 'analysis:']);
152
+ blackboard.registerAgent('reporter', 'tok-reporter', ['task:', 'analysis:', 'report:']);
153
+ // 2. NemoClaw adapter with mock executor
154
+ const adapter = new nemoclaw_adapter_1.NemoClawAdapter();
155
+ await adapter.initialize({ options: { executor: createMockExecutor() } });
156
+ // 3. Register each agent in its own isolated sandbox
157
+ banner('Step 1: Register Sandboxed Agents');
158
+ adapter.registerSandboxAgent('researcher', {
159
+ sandboxName: 'researcher-sandbox',
160
+ sandboxImage: 'ghcr.io/nvidia/openshell-community/sandboxes/python:latest',
161
+ policies: researcherPolicies,
162
+ command: 'python3 /app/research.py',
163
+ env: { MAX_SOURCES: '10' },
164
+ });
165
+ info('Researcher: web_research + mcp_server policies');
166
+ adapter.registerSandboxAgent('analyst', {
167
+ sandboxName: 'analyst-sandbox',
168
+ sandboxImage: 'ghcr.io/nvidia/openshell-community/sandboxes/python:latest',
169
+ policies: analystPolicies,
170
+ command: 'python3 /app/analyze.py',
171
+ env: { NVIDIA_API_KEY: 'demo-key-not-real' },
172
+ });
173
+ info('Analyst: nvidia + mcp_server policies');
174
+ adapter.registerSandboxAgent('reporter', {
175
+ sandboxName: 'reporter-sandbox',
176
+ sandboxImage: 'ghcr.io/nvidia/openshell-community/sandboxes/python:latest',
177
+ policies: reporterPolicies,
178
+ command: 'python3 /app/report.py',
179
+ });
180
+ info('Reporter: mcp_server policy only (most restricted)');
181
+ // 4. Execute the pipeline
182
+ banner('Step 2: Research Phase');
183
+ const researchResult = await adapter.executeAgent('researcher', {
184
+ action: 'research',
185
+ params: { topic: 'NemoClaw sandbox security model' },
186
+ handoff: {
187
+ handoffId: 'h-001',
188
+ sourceAgent: 'orchestrator',
189
+ targetAgent: 'researcher',
190
+ taskType: 'delegate',
191
+ instruction: 'Research NemoClaw sandboxing capabilities and network isolation',
192
+ },
193
+ }, { agentId: 'orchestrator', taskId: 'task-001' });
194
+ if (researchResult.success) {
195
+ const findings = researchResult.data;
196
+ step('Result', `Found ${findings['findings']?.length ?? 0} key findings (confidence: ${findings['confidence']})`);
197
+ // Write findings to blackboard for analyst
198
+ blackboard.write('research:findings', JSON.stringify(findings['findings']), 'researcher', 3600, 'tok-researcher');
199
+ blackboard.write('research:confidence', String(findings['confidence']), 'researcher', 3600, 'tok-researcher');
200
+ info('Findings written to blackboard under "research:" namespace');
201
+ }
202
+ banner('Step 3: Analysis Phase');
203
+ const analysisResult = await adapter.executeAgent('analyst', {
204
+ action: 'analyze',
205
+ params: { focus: 'security risk assessment' },
206
+ blackboardSnapshot: {
207
+ 'research:findings': blackboard.read('research:findings')?.value,
208
+ 'research:confidence': blackboard.read('research:confidence')?.value,
209
+ },
210
+ handoff: {
211
+ handoffId: 'h-002',
212
+ sourceAgent: 'orchestrator',
213
+ targetAgent: 'analyst',
214
+ taskType: 'delegate',
215
+ instruction: 'Analyze research findings for security risks',
216
+ },
217
+ }, { agentId: 'orchestrator', taskId: 'task-002' });
218
+ if (analysisResult.success) {
219
+ const analysis = analysisResult.data;
220
+ step('Result', `Risk score: ${analysis['riskScore']}/100 — "${analysis['recommendation']}"`);
221
+ blackboard.write('analysis:risk', String(analysis['riskScore']), 'analyst', 3600, 'tok-analyst');
222
+ blackboard.write('analysis:summary', String(analysis['summary']), 'analyst', 3600, 'tok-analyst');
223
+ info('Analysis written to blackboard under "analysis:" namespace');
224
+ }
225
+ banner('Step 4: Report Phase');
226
+ const reportResult = await adapter.executeAgent('reporter', {
227
+ action: 'report',
228
+ params: { format: 'markdown' },
229
+ blackboardSnapshot: {
230
+ 'analysis:risk': blackboard.read('analysis:risk')?.value,
231
+ 'analysis:summary': blackboard.read('analysis:summary')?.value,
232
+ },
233
+ handoff: {
234
+ handoffId: 'h-003',
235
+ sourceAgent: 'orchestrator',
236
+ targetAgent: 'reporter',
237
+ taskType: 'delegate',
238
+ instruction: 'Generate a security analysis report from the findings',
239
+ },
240
+ }, { agentId: 'orchestrator', taskId: 'task-003' });
241
+ if (reportResult.success) {
242
+ const report = reportResult.data;
243
+ step('Result', `Report generated (${report['wordCount']} words, ${report['format']} format)`);
244
+ }
245
+ // 5. Show sandbox isolation summary
246
+ banner('Sandbox Isolation Summary');
247
+ console.log(`
248
+ ${c.bold}Agent${c.reset} ${c.bold}Sandbox${c.reset} ${c.bold}Network Access${c.reset}
249
+ ────────── ────────────────── ────────────────────────────────────
250
+ Researcher researcher-sandbox arxiv, semanticscholar, MCP server
251
+ Analyst analyst-sandbox NVIDIA NIM, MCP server
252
+ Reporter reporter-sandbox MCP server only (most restricted)
253
+
254
+ ${c.yellow}Key:${c.reset} Each sandbox has ${c.red}deny-by-default${c.reset} networking.
255
+ Only explicitly allowlisted endpoints are reachable.
256
+ Agents coordinate ${c.green}only${c.reset} through the shared blackboard.
257
+ `);
258
+ // 6. Cleanup
259
+ banner('Step 5: Cleanup');
260
+ await adapter.destroySandbox('researcher-sandbox');
261
+ await adapter.destroySandbox('analyst-sandbox');
262
+ await adapter.destroySandbox('reporter-sandbox');
263
+ await adapter.shutdown();
264
+ banner('Done — All sandboxes destroyed');
265
+ }
266
+ main().catch((err) => {
267
+ console.error(`${c.red}Error:${c.reset}`, err);
268
+ process.exit(1);
269
+ });
270
+ //# sourceMappingURL=10-nemoclaw-sandbox-swarm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"10-nemoclaw-sandbox-swarm.js","sourceRoot":"","sources":["../../examples/10-nemoclaw-sandbox-swarm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=demo-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-runner.d.ts","sourceRoot":"","sources":["../../examples/demo-runner.ts"],"names":[],"mappings":""}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const node_child_process_1 = require("node:child_process");
4
+ const promises_1 = require("node:readline/promises");
5
+ const node_process_1 = require("node:process");
6
+ const DEMOS = {
7
+ '07': { file: 'examples/07-full-showcase.ts', label: 'Full Showcase (AI-powered)' },
8
+ '08': { file: 'examples/08-control-plane-stress-demo.ts', label: 'Control Plane Stress (no API key)' },
9
+ };
10
+ function parseMode(args) {
11
+ if (args.includes('--07') || args.includes('--full'))
12
+ return '07';
13
+ if (args.includes('--08') || args.includes('--control'))
14
+ return '08';
15
+ if (args.includes('--both') || args.includes('--all'))
16
+ return 'both';
17
+ return null;
18
+ }
19
+ function parseSilentSummary(args) {
20
+ return args.includes('--silent-summary') || args.includes('--summary');
21
+ }
22
+ function pickHighlights(log) {
23
+ const lines = log.split(/\r?\n/);
24
+ const patterns = [
25
+ /Deterministic Score:/i,
26
+ /Deterministic Gate Result:/i,
27
+ /Iteration\s+\d+\/\d+\s+score:/i,
28
+ /Target reached/i,
29
+ /violations total=/i,
30
+ /byType=/i,
31
+ /byAgent=/i,
32
+ /demo complete\./i,
33
+ ];
34
+ const matched = lines.filter(line => patterns.some(re => re.test(line.trim())));
35
+ const unique = [];
36
+ for (const line of matched) {
37
+ const trimmed = line.trim();
38
+ if (trimmed.length > 0 && !unique.includes(trimmed))
39
+ unique.push(trimmed);
40
+ }
41
+ return unique;
42
+ }
43
+ function runTsDemo(file, silentSummary) {
44
+ return new Promise((resolve, reject) => {
45
+ const child = (0, node_child_process_1.spawn)('npx', ['ts-node', file], {
46
+ stdio: silentSummary ? 'pipe' : 'inherit',
47
+ shell: true,
48
+ });
49
+ let stdoutLog = '';
50
+ let stderrLog = '';
51
+ if (silentSummary) {
52
+ child.stdout?.on('data', chunk => {
53
+ stdoutLog += chunk.toString();
54
+ });
55
+ child.stderr?.on('data', chunk => {
56
+ stderrLog += chunk.toString();
57
+ });
58
+ }
59
+ child.on('error', reject);
60
+ child.on('exit', code => {
61
+ resolve({ code: code ?? 1, log: `${stdoutLog}\n${stderrLog}`.trim() });
62
+ });
63
+ });
64
+ }
65
+ async function askMode() {
66
+ const rl = (0, promises_1.createInterface)({ input: node_process_1.stdin, output: node_process_1.stdout });
67
+ node_process_1.stdout.write('\nNetwork-AI Demo Runner\n');
68
+ node_process_1.stdout.write(' [1] Full Showcase (07)\n');
69
+ node_process_1.stdout.write(' [2] Control Plane Stress (08)\n');
70
+ node_process_1.stdout.write(' [3] Both demos (07 then 08)\n\n');
71
+ const answer = (await rl.question('Select demo [default: 3]: ')).trim();
72
+ rl.close();
73
+ if (answer === '1')
74
+ return '07';
75
+ if (answer === '2')
76
+ return '08';
77
+ return 'both';
78
+ }
79
+ async function main() {
80
+ const args = process.argv.slice(2);
81
+ const mode = parseMode(args) ?? (await askMode());
82
+ const silentSummary = parseSilentSummary(args);
83
+ if (silentSummary) {
84
+ node_process_1.stdout.write('\nSilent summary mode enabled (full logs suppressed).\n');
85
+ }
86
+ const queue = mode === 'both' ? ['07', '08'] : [mode];
87
+ for (const id of queue) {
88
+ const demo = DEMOS[id];
89
+ node_process_1.stdout.write(`\n=== Running ${demo.label} ===\n`);
90
+ const result = await runTsDemo(demo.file, silentSummary);
91
+ if (result.code !== 0) {
92
+ if (silentSummary && result.log) {
93
+ node_process_1.stdout.write('Summary (before failure):\n');
94
+ const highlights = pickHighlights(result.log);
95
+ for (const line of highlights)
96
+ node_process_1.stdout.write(` - ${line}\n`);
97
+ }
98
+ node_process_1.stdout.write(`\nDemo ${id} failed with exit code ${result.code}.\n`);
99
+ process.exit(result.code);
100
+ }
101
+ if (silentSummary) {
102
+ const highlights = pickHighlights(result.log);
103
+ if (highlights.length > 0) {
104
+ node_process_1.stdout.write('Summary:\n');
105
+ for (const line of highlights)
106
+ node_process_1.stdout.write(` - ${line}\n`);
107
+ }
108
+ else {
109
+ node_process_1.stdout.write('Summary: no highlights detected (run without --silent-summary for full logs).\n');
110
+ }
111
+ }
112
+ }
113
+ node_process_1.stdout.write('\nAll selected demos completed successfully.\n');
114
+ }
115
+ main().catch(err => {
116
+ console.error('Demo runner failed:', err instanceof Error ? err.message : String(err));
117
+ process.exit(1);
118
+ });
119
+ //# sourceMappingURL=demo-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-runner.js","sourceRoot":"","sources":["../../examples/demo-runner.ts"],"names":[],"mappings":"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"}