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.
- package/INTEGRATION_GUIDE.md +2 -2
- package/README.md +5 -3
- package/SKILL.md +3 -3
- package/dist/esm/adapters/a2a-adapter.js +235 -0
- package/dist/esm/adapters/a2a-adapter.js.map +1 -0
- package/dist/esm/adapters/adapter-registry.js +613 -0
- package/dist/esm/adapters/adapter-registry.js.map +1 -0
- package/dist/esm/adapters/agno-adapter.js +140 -0
- package/dist/esm/adapters/agno-adapter.js.map +1 -0
- package/dist/esm/adapters/anthropic-computer-use-adapter.js +180 -0
- package/dist/esm/adapters/anthropic-computer-use-adapter.js.map +1 -0
- package/dist/esm/adapters/aps-adapter.js +289 -0
- package/dist/esm/adapters/aps-adapter.js.map +1 -0
- package/dist/esm/adapters/autogen-adapter.js +141 -0
- package/dist/esm/adapters/autogen-adapter.js.map +1 -0
- package/dist/esm/adapters/base-adapter.js +104 -0
- package/dist/esm/adapters/base-adapter.js.map +1 -0
- package/dist/esm/adapters/browser-agent-adapter.js +219 -0
- package/dist/esm/adapters/browser-agent-adapter.js.map +1 -0
- package/dist/esm/adapters/codex-adapter.js +318 -0
- package/dist/esm/adapters/codex-adapter.js.map +1 -0
- package/dist/esm/adapters/copilot-adapter.js +132 -0
- package/dist/esm/adapters/copilot-adapter.js.map +1 -0
- package/dist/esm/adapters/crewai-adapter.js +148 -0
- package/dist/esm/adapters/crewai-adapter.js.map +1 -0
- package/dist/esm/adapters/custom-adapter.js +142 -0
- package/dist/esm/adapters/custom-adapter.js.map +1 -0
- package/dist/esm/adapters/custom-streaming-adapter.js +181 -0
- package/dist/esm/adapters/custom-streaming-adapter.js.map +1 -0
- package/dist/esm/adapters/dspy-adapter.js +127 -0
- package/dist/esm/adapters/dspy-adapter.js.map +1 -0
- package/dist/esm/adapters/haystack-adapter.js +149 -0
- package/dist/esm/adapters/haystack-adapter.js.map +1 -0
- package/dist/esm/adapters/hermes-adapter.js +217 -0
- package/dist/esm/adapters/hermes-adapter.js.map +1 -0
- package/dist/esm/adapters/index.js +109 -0
- package/dist/esm/adapters/index.js.map +1 -0
- package/dist/esm/adapters/langchain-adapter.js +134 -0
- package/dist/esm/adapters/langchain-adapter.js.map +1 -0
- package/dist/esm/adapters/langchain-streaming-adapter.js +161 -0
- package/dist/esm/adapters/langchain-streaming-adapter.js.map +1 -0
- package/dist/esm/adapters/langgraph-adapter.js +119 -0
- package/dist/esm/adapters/langgraph-adapter.js.map +1 -0
- package/dist/esm/adapters/llamaindex-adapter.js +135 -0
- package/dist/esm/adapters/llamaindex-adapter.js.map +1 -0
- package/dist/esm/adapters/mcp-adapter.js +200 -0
- package/dist/esm/adapters/mcp-adapter.js.map +1 -0
- package/dist/esm/adapters/minimax-adapter.js +233 -0
- package/dist/esm/adapters/minimax-adapter.js.map +1 -0
- package/dist/esm/adapters/nemoclaw-adapter.js +465 -0
- package/dist/esm/adapters/nemoclaw-adapter.js.map +1 -0
- package/dist/esm/adapters/openai-agents-adapter.js +118 -0
- package/dist/esm/adapters/openai-agents-adapter.js.map +1 -0
- package/dist/esm/adapters/openai-assistants-adapter.js +130 -0
- package/dist/esm/adapters/openai-assistants-adapter.js.map +1 -0
- package/dist/esm/adapters/openclaw-adapter.js +107 -0
- package/dist/esm/adapters/openclaw-adapter.js.map +1 -0
- package/dist/esm/adapters/orchestrator-adapter.js +218 -0
- package/dist/esm/adapters/orchestrator-adapter.js.map +1 -0
- package/dist/esm/adapters/pydantic-ai-adapter.js +163 -0
- package/dist/esm/adapters/pydantic-ai-adapter.js.map +1 -0
- package/dist/esm/adapters/rlm-adapter.js +167 -0
- package/dist/esm/adapters/rlm-adapter.js.map +1 -0
- package/dist/esm/adapters/semantic-kernel-adapter.js +123 -0
- package/dist/esm/adapters/semantic-kernel-adapter.js.map +1 -0
- package/dist/esm/adapters/streaming-base-adapter.js +74 -0
- package/dist/esm/adapters/streaming-base-adapter.js.map +1 -0
- package/dist/esm/adapters/vertex-ai-adapter.js +166 -0
- package/dist/esm/adapters/vertex-ai-adapter.js.map +1 -0
- package/dist/esm/demo-control-plane.js +147 -0
- package/dist/esm/demo-control-plane.js.map +1 -0
- package/dist/esm/demo-worktree-dashboard.js +131 -0
- package/dist/esm/demo-worktree-dashboard.js.map +1 -0
- package/dist/esm/examples/01-hello-swarm.js +165 -0
- package/dist/esm/examples/01-hello-swarm.js.map +1 -0
- package/dist/esm/examples/02-fsm-pipeline.js +189 -0
- package/dist/esm/examples/02-fsm-pipeline.js.map +1 -0
- package/dist/esm/examples/03-parallel-agents.js +192 -0
- package/dist/esm/examples/03-parallel-agents.js.map +1 -0
- package/dist/esm/examples/05-code-review-swarm.js +1177 -0
- package/dist/esm/examples/05-code-review-swarm.js.map +1 -0
- package/dist/esm/examples/06-ai-pipeline-demo.js +263 -0
- package/dist/esm/examples/06-ai-pipeline-demo.js.map +1 -0
- package/dist/esm/examples/07-full-showcase.js +946 -0
- package/dist/esm/examples/07-full-showcase.js.map +1 -0
- package/dist/esm/examples/08-control-plane-stress-demo.js +186 -0
- package/dist/esm/examples/08-control-plane-stress-demo.js.map +1 -0
- package/dist/esm/examples/09-real-langchain.js +231 -0
- package/dist/esm/examples/09-real-langchain.js.map +1 -0
- package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js +270 -0
- package/dist/esm/examples/10-nemoclaw-sandbox-swarm.js.map +1 -0
- package/dist/esm/examples/demo-runner.js +119 -0
- package/dist/esm/examples/demo-runner.js.map +1 -0
- package/dist/esm/index.js +1352 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/adapter-hooks.js +216 -0
- package/dist/esm/lib/adapter-hooks.js.map +1 -0
- package/dist/esm/lib/adapter-test-harness.js +118 -0
- package/dist/esm/lib/adapter-test-harness.js.map +1 -0
- package/dist/esm/lib/agent-conversation.js +155 -0
- package/dist/esm/lib/agent-conversation.js.map +1 -0
- package/dist/esm/lib/agent-debate.js +146 -0
- package/dist/esm/lib/agent-debate.js.map +1 -0
- package/dist/esm/lib/agent-memory.js +336 -0
- package/dist/esm/lib/agent-memory.js.map +1 -0
- package/dist/esm/lib/agent-runtime.js +818 -0
- package/dist/esm/lib/agent-runtime.js.map +1 -0
- package/dist/esm/lib/agent-vcr.js +218 -0
- package/dist/esm/lib/agent-vcr.js.map +1 -0
- package/dist/esm/lib/anomaly-detector.js +178 -0
- package/dist/esm/lib/anomaly-detector.js.map +1 -0
- package/dist/esm/lib/approval-inbox.js +385 -0
- package/dist/esm/lib/approval-inbox.js.map +1 -0
- package/dist/esm/lib/auth-guardian.js +692 -0
- package/dist/esm/lib/auth-guardian.js.map +1 -0
- package/dist/esm/lib/auth-validator.js +32 -0
- package/dist/esm/lib/auth-validator.js.map +1 -0
- package/dist/esm/lib/blackboard-backend-crdt.js +251 -0
- package/dist/esm/lib/blackboard-backend-crdt.js.map +1 -0
- package/dist/esm/lib/blackboard-backend-redis.js +244 -0
- package/dist/esm/lib/blackboard-backend-redis.js.map +1 -0
- package/dist/esm/lib/blackboard-backend.js +141 -0
- package/dist/esm/lib/blackboard-backend.js.map +1 -0
- package/dist/esm/lib/blackboard-validator.js +985 -0
- package/dist/esm/lib/blackboard-validator.js.map +1 -0
- package/dist/esm/lib/circuit-breaker.js +164 -0
- package/dist/esm/lib/circuit-breaker.js.map +1 -0
- package/dist/esm/lib/claim-verifier.js +173 -0
- package/dist/esm/lib/claim-verifier.js.map +1 -0
- package/dist/esm/lib/comparison-runner.js +138 -0
- package/dist/esm/lib/comparison-runner.js.map +1 -0
- package/dist/esm/lib/compliance-monitor.js +261 -0
- package/dist/esm/lib/compliance-monitor.js.map +1 -0
- package/dist/esm/lib/confidence-filter.js +210 -0
- package/dist/esm/lib/confidence-filter.js.map +1 -0
- package/dist/esm/lib/config-watcher.js +215 -0
- package/dist/esm/lib/config-watcher.js.map +1 -0
- package/dist/esm/lib/consistency.js +274 -0
- package/dist/esm/lib/consistency.js.map +1 -0
- package/dist/esm/lib/console-ui.js +276 -0
- package/dist/esm/lib/console-ui.js.map +1 -0
- package/dist/esm/lib/context-throttler.js +171 -0
- package/dist/esm/lib/context-throttler.js.map +1 -0
- package/dist/esm/lib/control-plane.js +527 -0
- package/dist/esm/lib/control-plane.js.map +1 -0
- package/dist/esm/lib/cost-governor.js +128 -0
- package/dist/esm/lib/cost-governor.js.map +1 -0
- package/dist/esm/lib/cost-heatmap.js +161 -0
- package/dist/esm/lib/cost-heatmap.js.map +1 -0
- package/dist/esm/lib/coverage-gate.js +213 -0
- package/dist/esm/lib/coverage-gate.js.map +1 -0
- package/dist/esm/lib/coverage-reporter.js +177 -0
- package/dist/esm/lib/coverage-reporter.js.map +1 -0
- package/dist/esm/lib/crdt.js +141 -0
- package/dist/esm/lib/crdt.js.map +1 -0
- package/dist/esm/lib/dashboard-server.js +403 -0
- package/dist/esm/lib/dashboard-server.js.map +1 -0
- package/dist/esm/lib/dry-run.js +130 -0
- package/dist/esm/lib/dry-run.js.map +1 -0
- package/dist/esm/lib/env-manager.js +518 -0
- package/dist/esm/lib/env-manager.js.map +1 -0
- package/dist/esm/lib/errors.js +201 -0
- package/dist/esm/lib/errors.js.map +1 -0
- package/dist/esm/lib/event-bus.js +229 -0
- package/dist/esm/lib/event-bus.js.map +1 -0
- package/dist/esm/lib/explainability.js +102 -0
- package/dist/esm/lib/explainability.js.map +1 -0
- package/dist/esm/lib/fan-out.js +237 -0
- package/dist/esm/lib/fan-out.js.map +1 -0
- package/dist/esm/lib/federated-budget.js +322 -0
- package/dist/esm/lib/federated-budget.js.map +1 -0
- package/dist/esm/lib/fsm-journey.js +478 -0
- package/dist/esm/lib/fsm-journey.js.map +1 -0
- package/dist/esm/lib/goal-decomposer.js +698 -0
- package/dist/esm/lib/goal-decomposer.js.map +1 -0
- package/dist/esm/lib/goal-dsl.js +391 -0
- package/dist/esm/lib/goal-dsl.js.map +1 -0
- package/dist/esm/lib/job-queue.js +310 -0
- package/dist/esm/lib/job-queue.js.map +1 -0
- package/dist/esm/lib/landscape-agent.js +134 -0
- package/dist/esm/lib/landscape-agent.js.map +1 -0
- package/dist/esm/lib/learning-loop.js +181 -0
- package/dist/esm/lib/learning-loop.js.map +1 -0
- package/dist/esm/lib/lifecycle-hooks.js +148 -0
- package/dist/esm/lib/lifecycle-hooks.js.map +1 -0
- package/dist/esm/lib/locked-blackboard.js +1295 -0
- package/dist/esm/lib/locked-blackboard.js.map +1 -0
- package/dist/esm/lib/logger.js +150 -0
- package/dist/esm/lib/logger.js.map +1 -0
- package/dist/esm/lib/mcp-blackboard-tools.js +298 -0
- package/dist/esm/lib/mcp-blackboard-tools.js.map +1 -0
- package/dist/esm/lib/mcp-bridge.js +357 -0
- package/dist/esm/lib/mcp-bridge.js.map +1 -0
- package/dist/esm/lib/mcp-tool-consumer.js +287 -0
- package/dist/esm/lib/mcp-tool-consumer.js.map +1 -0
- package/dist/esm/lib/mcp-tools-control.js +392 -0
- package/dist/esm/lib/mcp-tools-control.js.map +1 -0
- package/dist/esm/lib/mcp-tools-extended.js +371 -0
- package/dist/esm/lib/mcp-tools-extended.js.map +1 -0
- package/dist/esm/lib/mcp-transport-http.js +528 -0
- package/dist/esm/lib/mcp-transport-http.js.map +1 -0
- package/dist/esm/lib/mcp-transport-sse.js +503 -0
- package/dist/esm/lib/mcp-transport-sse.js.map +1 -0
- package/dist/esm/lib/metrics.js +284 -0
- package/dist/esm/lib/metrics.js.map +1 -0
- package/dist/esm/lib/orchestrator-types.js +66 -0
- package/dist/esm/lib/orchestrator-types.js.map +1 -0
- package/dist/esm/lib/otel-bridge.js +167 -0
- package/dist/esm/lib/otel-bridge.js.map +1 -0
- package/dist/esm/lib/partition-planner.js +246 -0
- package/dist/esm/lib/partition-planner.js.map +1 -0
- package/dist/esm/lib/phase-pipeline.js +367 -0
- package/dist/esm/lib/phase-pipeline.js.map +1 -0
- package/dist/esm/lib/playground.js +224 -0
- package/dist/esm/lib/playground.js.map +1 -0
- package/dist/esm/lib/qa-orchestrator.js +296 -0
- package/dist/esm/lib/qa-orchestrator.js.map +1 -0
- package/dist/esm/lib/quadtree.js +259 -0
- package/dist/esm/lib/quadtree.js.map +1 -0
- package/dist/esm/lib/route-classifier.js +217 -0
- package/dist/esm/lib/route-classifier.js.map +1 -0
- package/dist/esm/lib/semantic-search.js +235 -0
- package/dist/esm/lib/semantic-search.js.map +1 -0
- package/dist/esm/lib/shared-blackboard.js +249 -0
- package/dist/esm/lib/shared-blackboard.js.map +1 -0
- package/dist/esm/lib/skill-composer.js +190 -0
- package/dist/esm/lib/skill-composer.js.map +1 -0
- package/dist/esm/lib/speculative-executor.js +107 -0
- package/dist/esm/lib/speculative-executor.js.map +1 -0
- package/dist/esm/lib/strategy-agent.js +626 -0
- package/dist/esm/lib/strategy-agent.js.map +1 -0
- package/dist/esm/lib/swarm-transport.js +307 -0
- package/dist/esm/lib/swarm-transport.js.map +1 -0
- package/dist/esm/lib/swarm-utils.js +510 -0
- package/dist/esm/lib/swarm-utils.js.map +1 -0
- package/dist/esm/lib/task-decomposer.js +272 -0
- package/dist/esm/lib/task-decomposer.js.map +1 -0
- package/dist/esm/lib/telemetry-provider.js +207 -0
- package/dist/esm/lib/telemetry-provider.js.map +1 -0
- package/dist/esm/lib/timeline-scrubber.js +173 -0
- package/dist/esm/lib/timeline-scrubber.js.map +1 -0
- package/dist/esm/lib/topology.js +591 -0
- package/dist/esm/lib/topology.js.map +1 -0
- package/dist/esm/lib/transport-agent.js +366 -0
- package/dist/esm/lib/transport-agent.js.map +1 -0
- package/dist/esm/lib/work-tree-dashboard.js +583 -0
- package/dist/esm/lib/work-tree-dashboard.js.map +1 -0
- package/dist/esm/lib/work-tree-ui.js +333 -0
- package/dist/esm/lib/work-tree-ui.js.map +1 -0
- package/dist/esm/lib/work-tree.js +480 -0
- package/dist/esm/lib/work-tree.js.map +1 -0
- package/dist/esm/run.js +144 -0
- package/dist/esm/run.js.map +1 -0
- package/dist/esm/security.js +1122 -0
- package/dist/esm/security.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/mcp-transport-http.d.ts +203 -0
- package/dist/lib/mcp-transport-http.d.ts.map +1 -0
- package/dist/lib/mcp-transport-http.js +528 -0
- package/dist/lib/mcp-transport-http.js.map +1 -0
- package/dist/lib/phase-pipeline.d.ts +31 -0
- package/dist/lib/phase-pipeline.d.ts.map +1 -1
- package/dist/lib/phase-pipeline.js +93 -1
- package/dist/lib/phase-pipeline.js.map +1 -1
- package/dist/lib/semantic-search.d.ts +42 -6
- package/dist/lib/semantic-search.d.ts.map +1 -1
- package/dist/lib/semantic-search.js +87 -6
- package/dist/lib/semantic-search.js.map +1 -1
- 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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"}
|