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,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hermes Adapter (NousResearch Hermes)
|
|
4
|
+
*
|
|
5
|
+
* Integrates NousResearch Hermes models (Hermes-3, Hermes-2, etc.) with the
|
|
6
|
+
* SwarmOrchestrator. Hermes runs via Ollama, llama.cpp, Together AI, Fireworks,
|
|
7
|
+
* or any OpenAI-compatible endpoint — BYOC, no hard dependency.
|
|
8
|
+
*
|
|
9
|
+
* Usage — Ollama (local):
|
|
10
|
+
* const adapter = new HermesAdapter();
|
|
11
|
+
* adapter.registerAgent('assistant', {
|
|
12
|
+
* model: 'hermes3',
|
|
13
|
+
* baseUrl: 'http://localhost:11434/v1',
|
|
14
|
+
* systemPrompt: 'You are a helpful assistant.',
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* Usage — Together AI / Fireworks (hosted):
|
|
18
|
+
* adapter.registerAgent('reasoner', {
|
|
19
|
+
* model: 'NousResearch/Hermes-3-Llama-3.1-70B',
|
|
20
|
+
* baseUrl: 'https://api.together.xyz/v1',
|
|
21
|
+
* apiKey: process.env.TOGETHER_API_KEY,
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* Usage — bring-your-own OpenAI-compatible client:
|
|
25
|
+
* adapter.registerAgent('coder', {
|
|
26
|
+
* model: 'hermes3:8b',
|
|
27
|
+
* client: openaiInstance.chat.completions,
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* @module HermesAdapter
|
|
31
|
+
* @version 1.0.0
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.HermesAdapter = void 0;
|
|
35
|
+
const base_adapter_1 = require("./base-adapter");
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// Helpers
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
/** Build the user prompt string from an AgentPayload */
|
|
40
|
+
function buildPrompt(payload) {
|
|
41
|
+
const parts = [];
|
|
42
|
+
const instruction = payload.handoff?.instruction;
|
|
43
|
+
if (instruction)
|
|
44
|
+
parts.push(instruction);
|
|
45
|
+
if (payload.action)
|
|
46
|
+
parts.push(`Task: ${payload.action}`);
|
|
47
|
+
if (payload.params && Object.keys(payload.params).length > 0) {
|
|
48
|
+
parts.push(`Parameters: ${JSON.stringify(payload.params, null, 2)}`);
|
|
49
|
+
}
|
|
50
|
+
if (payload.blackboardSnapshot && Object.keys(payload.blackboardSnapshot).length > 0) {
|
|
51
|
+
const relevant = Object.entries(payload.blackboardSnapshot)
|
|
52
|
+
.slice(0, 10)
|
|
53
|
+
.map(([k, v]) => `${k}: ${JSON.stringify(v)}`)
|
|
54
|
+
.join('\n');
|
|
55
|
+
parts.push(`Context:\n${relevant}`);
|
|
56
|
+
}
|
|
57
|
+
return parts.join('\n\n') || 'Complete the task.';
|
|
58
|
+
}
|
|
59
|
+
/** Resolve API key from config then environment */
|
|
60
|
+
function resolveApiKey(config) {
|
|
61
|
+
return config.apiKey ?? process.env['HERMES_API_KEY'] ?? '';
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Built-in fetch-based OpenAI-compatible completion.
|
|
65
|
+
* Used when no `client` is supplied.
|
|
66
|
+
*/
|
|
67
|
+
async function fetchCompletion(config, messages) {
|
|
68
|
+
const baseUrl = (config.baseUrl ?? 'http://localhost:11434/v1').replace(/\/$/, '');
|
|
69
|
+
const url = `${baseUrl}/chat/completions`;
|
|
70
|
+
const apiKey = resolveApiKey(config);
|
|
71
|
+
const headers = {
|
|
72
|
+
'Content-Type': 'application/json',
|
|
73
|
+
...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),
|
|
74
|
+
...(config.headers ?? {}),
|
|
75
|
+
};
|
|
76
|
+
const body = JSON.stringify({
|
|
77
|
+
model: config.model ?? 'hermes3',
|
|
78
|
+
messages,
|
|
79
|
+
...(config.maxTokens !== undefined ? { max_tokens: config.maxTokens } : {}),
|
|
80
|
+
...(config.temperature !== undefined ? { temperature: config.temperature } : {}),
|
|
81
|
+
...(config.stop?.length ? { stop: config.stop } : {}),
|
|
82
|
+
});
|
|
83
|
+
const controller = new AbortController();
|
|
84
|
+
const timeoutMs = config.timeout ?? 120_000;
|
|
85
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
86
|
+
try {
|
|
87
|
+
const res = await fetch(url, { method: 'POST', headers, body, signal: controller.signal });
|
|
88
|
+
if (!res.ok) {
|
|
89
|
+
const text = await res.text().catch(() => '');
|
|
90
|
+
throw new Error(`Hermes API error ${res.status}: ${text}`);
|
|
91
|
+
}
|
|
92
|
+
const json = await res.json();
|
|
93
|
+
const content = json.choices?.[0]?.message?.content ?? '';
|
|
94
|
+
const usage = json.usage
|
|
95
|
+
? {
|
|
96
|
+
prompt_tokens: json.usage.prompt_tokens ?? 0,
|
|
97
|
+
completion_tokens: json.usage.completion_tokens ?? 0,
|
|
98
|
+
total_tokens: json.usage.total_tokens ?? 0,
|
|
99
|
+
}
|
|
100
|
+
: undefined;
|
|
101
|
+
return { content, ...(usage ? { usage } : {}) };
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
clearTimeout(timer);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// Adapter
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
class HermesAdapter extends base_adapter_1.BaseAdapter {
|
|
111
|
+
name = 'hermes';
|
|
112
|
+
version = '1.0.0';
|
|
113
|
+
agents = new Map();
|
|
114
|
+
get capabilities() {
|
|
115
|
+
return {
|
|
116
|
+
streaming: false,
|
|
117
|
+
parallel: true,
|
|
118
|
+
bidirectional: false,
|
|
119
|
+
discovery: true,
|
|
120
|
+
authentication: false,
|
|
121
|
+
statefulSessions: false,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Register a Hermes agent with the given configuration.
|
|
126
|
+
*
|
|
127
|
+
* @param agentId - Unique identifier used to route tasks to this agent
|
|
128
|
+
* @param config - Model, endpoint, system prompt, and optional BYOC client
|
|
129
|
+
*/
|
|
130
|
+
registerAgent(agentId, config) {
|
|
131
|
+
if (!agentId || typeof agentId !== 'string') {
|
|
132
|
+
throw new Error('HermesAdapter.registerAgent: agentId must be a non-empty string');
|
|
133
|
+
}
|
|
134
|
+
this.agents.set(agentId, { config });
|
|
135
|
+
this.registeredAgents.set(agentId, {
|
|
136
|
+
id: agentId,
|
|
137
|
+
name: agentId,
|
|
138
|
+
description: `Hermes agent — model: ${config.model ?? 'hermes3'}`,
|
|
139
|
+
adapter: 'hermes',
|
|
140
|
+
capabilities: ['text-generation', 'reasoning', 'instruction-following'],
|
|
141
|
+
status: 'available',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
async executeAgent(agentId, payload, _context) {
|
|
145
|
+
if (!this.ready) {
|
|
146
|
+
return { success: false, error: { code: 'NOT_INITIALIZED', message: 'HermesAdapter not initialized', recoverable: false } };
|
|
147
|
+
}
|
|
148
|
+
const entry = this.agents.get(agentId);
|
|
149
|
+
if (!entry) {
|
|
150
|
+
return { success: false, error: { code: 'AGENT_NOT_FOUND', message: `Hermes agent not found: ${agentId}`, recoverable: false } };
|
|
151
|
+
}
|
|
152
|
+
const { config } = entry;
|
|
153
|
+
const prompt = buildPrompt(payload);
|
|
154
|
+
const messages = [];
|
|
155
|
+
if (config.systemPrompt) {
|
|
156
|
+
messages.push({ role: 'system', content: config.systemPrompt });
|
|
157
|
+
}
|
|
158
|
+
messages.push({ role: 'user', content: prompt });
|
|
159
|
+
try {
|
|
160
|
+
let content;
|
|
161
|
+
let usage;
|
|
162
|
+
if (config.client) {
|
|
163
|
+
// BYOC path
|
|
164
|
+
const resp = await config.client.create({
|
|
165
|
+
model: config.model ?? 'hermes3',
|
|
166
|
+
messages,
|
|
167
|
+
...(config.maxTokens !== undefined ? { max_tokens: config.maxTokens } : {}),
|
|
168
|
+
...(config.temperature !== undefined ? { temperature: config.temperature } : {}),
|
|
169
|
+
...(config.stop?.length ? { stop: config.stop } : {}),
|
|
170
|
+
});
|
|
171
|
+
content = resp.choices[0]?.message?.content ?? resp.choices[0]?.text ?? '';
|
|
172
|
+
if (resp.usage) {
|
|
173
|
+
usage = {
|
|
174
|
+
prompt_tokens: resp.usage.prompt_tokens ?? 0,
|
|
175
|
+
completion_tokens: resp.usage.completion_tokens ?? 0,
|
|
176
|
+
total_tokens: resp.usage.total_tokens ?? 0,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
// Built-in fetch path
|
|
182
|
+
const result = await fetchCompletion(config, messages);
|
|
183
|
+
content = result.content;
|
|
184
|
+
usage = result.usage;
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
success: true,
|
|
188
|
+
data: {
|
|
189
|
+
response: content,
|
|
190
|
+
model: config.model ?? 'hermes3',
|
|
191
|
+
agentId,
|
|
192
|
+
...(usage ? { usage } : {}),
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
return {
|
|
198
|
+
success: false,
|
|
199
|
+
error: {
|
|
200
|
+
code: 'EXECUTION_ERROR',
|
|
201
|
+
message: err instanceof Error ? err.message : String(err),
|
|
202
|
+
recoverable: true,
|
|
203
|
+
nativeError: err,
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async initialize(config) {
|
|
209
|
+
await super.initialize(config);
|
|
210
|
+
}
|
|
211
|
+
async shutdown() {
|
|
212
|
+
this.agents.clear();
|
|
213
|
+
await super.shutdown();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
exports.HermesAdapter = HermesAdapter;
|
|
217
|
+
//# sourceMappingURL=hermes-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-adapter.js","sourceRoot":"","sources":["../../../adapters/hermes-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Adapter System -- Plug-and-Play Agent Framework Support
|
|
4
|
+
*
|
|
5
|
+
* This module exports everything needed to make the SwarmOrchestrator
|
|
6
|
+
* work with any agent system. Import from here for clean access.
|
|
7
|
+
*
|
|
8
|
+
* Quick Start:
|
|
9
|
+
*
|
|
10
|
+
* import { AdapterRegistry, CustomAdapter } from './adapters';
|
|
11
|
+
*
|
|
12
|
+
* const registry = new AdapterRegistry();
|
|
13
|
+
* const custom = new CustomAdapter();
|
|
14
|
+
* custom.registerHandler("my-agent", async (payload) => {
|
|
15
|
+
* return { result: "done" };
|
|
16
|
+
* });
|
|
17
|
+
* await registry.addAdapter(custom);
|
|
18
|
+
*
|
|
19
|
+
* @module Adapters
|
|
20
|
+
* @version 1.0.0
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.RLMAdapter = exports.OrchestratorAdapter = exports.BrowserAgentAdapter = exports.PydanticAIAdapter = exports.VertexAIAdapter = exports.OpenAIAgentsAdapter = exports.AnthropicComputerUseAdapter = exports.LangGraphAdapter = exports.HermesAdapter = exports.CopilotAdapter = exports.NemoClawAdapter = exports.APSAdapter = exports.MiniMaxAdapter = exports.CodexAdapter = exports.A2AAdapter = exports.CustomStreamingAdapter = exports.LangChainStreamingAdapter = exports.collectStream = exports.StreamingBaseAdapter = exports.AgnoAdapter = exports.DSPyAdapter = exports.HaystackAdapter = exports.OpenAIAssistantsAdapter = exports.SemanticKernelAdapter = exports.LlamaIndexAdapter = exports.CustomAdapter = exports.MCPAdapter = exports.CrewAIAdapter = exports.AutoGenAdapter = exports.LangChainAdapter = exports.OpenClawAdapter = exports.getRegistry = exports.AdapterRegistry = exports.BaseAdapter = void 0;
|
|
24
|
+
// Core infrastructure
|
|
25
|
+
var base_adapter_1 = require("./base-adapter");
|
|
26
|
+
Object.defineProperty(exports, "BaseAdapter", { enumerable: true, get: function () { return base_adapter_1.BaseAdapter; } });
|
|
27
|
+
var adapter_registry_1 = require("./adapter-registry");
|
|
28
|
+
Object.defineProperty(exports, "AdapterRegistry", { enumerable: true, get: function () { return adapter_registry_1.AdapterRegistry; } });
|
|
29
|
+
Object.defineProperty(exports, "getRegistry", { enumerable: true, get: function () { return adapter_registry_1.getRegistry; } });
|
|
30
|
+
// Framework adapters -- Original 6
|
|
31
|
+
var openclaw_adapter_1 = require("./openclaw-adapter");
|
|
32
|
+
Object.defineProperty(exports, "OpenClawAdapter", { enumerable: true, get: function () { return openclaw_adapter_1.OpenClawAdapter; } });
|
|
33
|
+
var langchain_adapter_1 = require("./langchain-adapter");
|
|
34
|
+
Object.defineProperty(exports, "LangChainAdapter", { enumerable: true, get: function () { return langchain_adapter_1.LangChainAdapter; } });
|
|
35
|
+
var autogen_adapter_1 = require("./autogen-adapter");
|
|
36
|
+
Object.defineProperty(exports, "AutoGenAdapter", { enumerable: true, get: function () { return autogen_adapter_1.AutoGenAdapter; } });
|
|
37
|
+
var crewai_adapter_1 = require("./crewai-adapter");
|
|
38
|
+
Object.defineProperty(exports, "CrewAIAdapter", { enumerable: true, get: function () { return crewai_adapter_1.CrewAIAdapter; } });
|
|
39
|
+
var mcp_adapter_1 = require("./mcp-adapter");
|
|
40
|
+
Object.defineProperty(exports, "MCPAdapter", { enumerable: true, get: function () { return mcp_adapter_1.MCPAdapter; } });
|
|
41
|
+
var custom_adapter_1 = require("./custom-adapter");
|
|
42
|
+
Object.defineProperty(exports, "CustomAdapter", { enumerable: true, get: function () { return custom_adapter_1.CustomAdapter; } });
|
|
43
|
+
// Framework adapters -- New 6
|
|
44
|
+
var llamaindex_adapter_1 = require("./llamaindex-adapter");
|
|
45
|
+
Object.defineProperty(exports, "LlamaIndexAdapter", { enumerable: true, get: function () { return llamaindex_adapter_1.LlamaIndexAdapter; } });
|
|
46
|
+
var semantic_kernel_adapter_1 = require("./semantic-kernel-adapter");
|
|
47
|
+
Object.defineProperty(exports, "SemanticKernelAdapter", { enumerable: true, get: function () { return semantic_kernel_adapter_1.SemanticKernelAdapter; } });
|
|
48
|
+
var openai_assistants_adapter_1 = require("./openai-assistants-adapter");
|
|
49
|
+
Object.defineProperty(exports, "OpenAIAssistantsAdapter", { enumerable: true, get: function () { return openai_assistants_adapter_1.OpenAIAssistantsAdapter; } });
|
|
50
|
+
var haystack_adapter_1 = require("./haystack-adapter");
|
|
51
|
+
Object.defineProperty(exports, "HaystackAdapter", { enumerable: true, get: function () { return haystack_adapter_1.HaystackAdapter; } });
|
|
52
|
+
var dspy_adapter_1 = require("./dspy-adapter");
|
|
53
|
+
Object.defineProperty(exports, "DSPyAdapter", { enumerable: true, get: function () { return dspy_adapter_1.DSPyAdapter; } });
|
|
54
|
+
var agno_adapter_1 = require("./agno-adapter");
|
|
55
|
+
Object.defineProperty(exports, "AgnoAdapter", { enumerable: true, get: function () { return agno_adapter_1.AgnoAdapter; } });
|
|
56
|
+
// Streaming adapters
|
|
57
|
+
var streaming_base_adapter_1 = require("./streaming-base-adapter");
|
|
58
|
+
Object.defineProperty(exports, "StreamingBaseAdapter", { enumerable: true, get: function () { return streaming_base_adapter_1.StreamingBaseAdapter; } });
|
|
59
|
+
Object.defineProperty(exports, "collectStream", { enumerable: true, get: function () { return streaming_base_adapter_1.collectStream; } });
|
|
60
|
+
var langchain_streaming_adapter_1 = require("./langchain-streaming-adapter");
|
|
61
|
+
Object.defineProperty(exports, "LangChainStreamingAdapter", { enumerable: true, get: function () { return langchain_streaming_adapter_1.LangChainStreamingAdapter; } });
|
|
62
|
+
var custom_streaming_adapter_1 = require("./custom-streaming-adapter");
|
|
63
|
+
Object.defineProperty(exports, "CustomStreamingAdapter", { enumerable: true, get: function () { return custom_streaming_adapter_1.CustomStreamingAdapter; } });
|
|
64
|
+
// A2A (Agent-to-Agent) adapter
|
|
65
|
+
var a2a_adapter_1 = require("./a2a-adapter");
|
|
66
|
+
Object.defineProperty(exports, "A2AAdapter", { enumerable: true, get: function () { return a2a_adapter_1.A2AAdapter; } });
|
|
67
|
+
// Codex adapter (OpenAI Codex CLI / chat / completion)
|
|
68
|
+
var codex_adapter_1 = require("./codex-adapter");
|
|
69
|
+
Object.defineProperty(exports, "CodexAdapter", { enumerable: true, get: function () { return codex_adapter_1.CodexAdapter; } });
|
|
70
|
+
// MiniMax adapter (MiniMax LLM API — MiniMax-M2.5 / MiniMax-M2.5-highspeed)
|
|
71
|
+
var minimax_adapter_1 = require("./minimax-adapter");
|
|
72
|
+
Object.defineProperty(exports, "MiniMaxAdapter", { enumerable: true, get: function () { return minimax_adapter_1.MiniMaxAdapter; } });
|
|
73
|
+
// APS adapter (Agent Permission Service — delegation chain → trust mapping)
|
|
74
|
+
var aps_adapter_1 = require("./aps-adapter");
|
|
75
|
+
Object.defineProperty(exports, "APSAdapter", { enumerable: true, get: function () { return aps_adapter_1.APSAdapter; } });
|
|
76
|
+
// NemoClaw adapter (NVIDIA NemoClaw — sandboxed agent execution via OpenShell)
|
|
77
|
+
var nemoclaw_adapter_1 = require("./nemoclaw-adapter");
|
|
78
|
+
Object.defineProperty(exports, "NemoClawAdapter", { enumerable: true, get: function () { return nemoclaw_adapter_1.NemoClawAdapter; } });
|
|
79
|
+
// Copilot adapter (GitHub Copilot — code generation, review, analysis)
|
|
80
|
+
var copilot_adapter_1 = require("./copilot-adapter");
|
|
81
|
+
Object.defineProperty(exports, "CopilotAdapter", { enumerable: true, get: function () { return copilot_adapter_1.CopilotAdapter; } });
|
|
82
|
+
// Hermes adapter (NousResearch Hermes — Ollama / OpenAI-compatible endpoint, BYOC)
|
|
83
|
+
var hermes_adapter_1 = require("./hermes-adapter");
|
|
84
|
+
Object.defineProperty(exports, "HermesAdapter", { enumerable: true, get: function () { return hermes_adapter_1.HermesAdapter; } });
|
|
85
|
+
// LangGraph adapter (LangChain stateful graph execution)
|
|
86
|
+
var langgraph_adapter_1 = require("./langgraph-adapter");
|
|
87
|
+
Object.defineProperty(exports, "LangGraphAdapter", { enumerable: true, get: function () { return langgraph_adapter_1.LangGraphAdapter; } });
|
|
88
|
+
// Anthropic Computer Use adapter (Claude with screen/keyboard/mouse)
|
|
89
|
+
var anthropic_computer_use_adapter_1 = require("./anthropic-computer-use-adapter");
|
|
90
|
+
Object.defineProperty(exports, "AnthropicComputerUseAdapter", { enumerable: true, get: function () { return anthropic_computer_use_adapter_1.AnthropicComputerUseAdapter; } });
|
|
91
|
+
// OpenAI Agents SDK adapter (agent runners with tools, handoffs, guardrails)
|
|
92
|
+
var openai_agents_adapter_1 = require("./openai-agents-adapter");
|
|
93
|
+
Object.defineProperty(exports, "OpenAIAgentsAdapter", { enumerable: true, get: function () { return openai_agents_adapter_1.OpenAIAgentsAdapter; } });
|
|
94
|
+
// Vertex AI adapter (Google Gemini, PaLM, custom endpoints)
|
|
95
|
+
var vertex_ai_adapter_1 = require("./vertex-ai-adapter");
|
|
96
|
+
Object.defineProperty(exports, "VertexAIAdapter", { enumerable: true, get: function () { return vertex_ai_adapter_1.VertexAIAdapter; } });
|
|
97
|
+
// Pydantic AI adapter (type-safe Python agent framework)
|
|
98
|
+
var pydantic_ai_adapter_1 = require("./pydantic-ai-adapter");
|
|
99
|
+
Object.defineProperty(exports, "PydanticAIAdapter", { enumerable: true, get: function () { return pydantic_ai_adapter_1.PydanticAIAdapter; } });
|
|
100
|
+
// Browser Agent adapter (Playwright, Puppeteer, CDP browser automation)
|
|
101
|
+
var browser_agent_adapter_1 = require("./browser-agent-adapter");
|
|
102
|
+
Object.defineProperty(exports, "BrowserAgentAdapter", { enumerable: true, get: function () { return browser_agent_adapter_1.BrowserAgentAdapter; } });
|
|
103
|
+
// Orchestrator adapter (hierarchical multi-orchestrator coordination)
|
|
104
|
+
var orchestrator_adapter_1 = require("./orchestrator-adapter");
|
|
105
|
+
Object.defineProperty(exports, "OrchestratorAdapter", { enumerable: true, get: function () { return orchestrator_adapter_1.OrchestratorAdapter; } });
|
|
106
|
+
// RLM adapter (Recursive Language Model — arxiv 2512.24601)
|
|
107
|
+
var rlm_adapter_1 = require("./rlm-adapter");
|
|
108
|
+
Object.defineProperty(exports, "RLMAdapter", { enumerable: true, get: function () { return rlm_adapter_1.RLMAdapter; } });
|
|
109
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../adapters/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAEH,sBAAsB;AACtB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,uDAAkE;AAAzD,mHAAA,eAAe,OAAA;AAAE,+GAAA,WAAW,OAAA;AAGrC,mCAAmC;AACnC,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AAEzB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAEvB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAEtB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAEnB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAGtB,8BAA8B;AAC9B,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAO1B,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAE9B,yEAAsE;AAA7D,oIAAA,uBAAuB,OAAA;AAOhC,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AAQxB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAEpB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAQpB,qBAAqB;AACrB,mEAA+E;AAAtE,8HAAA,oBAAoB,OAAA;AAAE,uHAAA,aAAa,OAAA;AAC5C,6EAA0E;AAAjE,wIAAA,yBAAyB,OAAA;AAClC,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAG/B,+BAA+B;AAC/B,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAUnB,uDAAuD;AACvD,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AASrB,4EAA4E;AAC5E,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAGvB,4EAA4E;AAC5E,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AAOnB,+EAA+E;AAC/E,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AAYxB,uEAAuE;AACvE,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AAGvB,mFAAmF;AACnF,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAGtB,yDAAyD;AACzD,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AAGzB,qEAAqE;AACrE,mFAA+E;AAAtE,6IAAA,2BAA2B,OAAA;AAUpC,6EAA6E;AAC7E,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAQ5B,4DAA4D;AAC5D,yDAAsD;AAA7C,oHAAA,eAAe,OAAA;AAUxB,yDAAyD;AACzD,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAQ1B,wEAAwE;AACxE,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAS5B,sEAAsE;AACtE,+DAA6D;AAApD,2HAAA,mBAAmB,OAAA;AAO5B,4DAA4D;AAC5D,6CAA2C;AAAlC,yGAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LangChain / LangGraph Adapter
|
|
4
|
+
*
|
|
5
|
+
* Allows LangChain agents, chains, and LangGraph workflows to plug into
|
|
6
|
+
* the SwarmOrchestrator. Agents are registered as callable functions
|
|
7
|
+
* or LangChain Runnable objects.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const adapter = new LangChainAdapter();
|
|
11
|
+
* adapter.registerAgent("research", myLangChainAgent);
|
|
12
|
+
* adapter.registerAgent("summarizer", myChain);
|
|
13
|
+
* await registry.addAdapter(adapter);
|
|
14
|
+
*
|
|
15
|
+
* Then in the orchestrator:
|
|
16
|
+
* delegateTask({ targetAgent: "lc:research", ... })
|
|
17
|
+
*
|
|
18
|
+
* @module LangChainAdapter
|
|
19
|
+
* @version 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.LangChainAdapter = void 0;
|
|
23
|
+
const base_adapter_1 = require("./base-adapter");
|
|
24
|
+
class LangChainAdapter extends base_adapter_1.BaseAdapter {
|
|
25
|
+
name = 'langchain';
|
|
26
|
+
version = '1.0.0';
|
|
27
|
+
runnables = new Map();
|
|
28
|
+
get capabilities() {
|
|
29
|
+
return {
|
|
30
|
+
streaming: true,
|
|
31
|
+
parallel: true,
|
|
32
|
+
bidirectional: false,
|
|
33
|
+
discovery: true,
|
|
34
|
+
authentication: false,
|
|
35
|
+
statefulSessions: true,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Register a LangChain agent, chain, or LangGraph graph.
|
|
40
|
+
*
|
|
41
|
+
* @param agentId - Unique identifier for this agent
|
|
42
|
+
* @param runnable - A LangChain Runnable (agent, chain, graph) or async function
|
|
43
|
+
* @param metadata - Optional metadata (description, capabilities)
|
|
44
|
+
*/
|
|
45
|
+
registerAgent(agentId, runnable, metadata) {
|
|
46
|
+
this.runnables.set(agentId, runnable);
|
|
47
|
+
this.registerLocalAgent({
|
|
48
|
+
id: agentId,
|
|
49
|
+
name: agentId,
|
|
50
|
+
description: metadata?.description ?? `LangChain agent: ${agentId}`,
|
|
51
|
+
capabilities: metadata?.capabilities,
|
|
52
|
+
status: 'available',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async executeAgent(agentId, payload, context) {
|
|
56
|
+
this.ensureReady();
|
|
57
|
+
const runnable = this.runnables.get(agentId);
|
|
58
|
+
if (!runnable) {
|
|
59
|
+
return this.errorResult('AGENT_NOT_FOUND', `LangChain agent "${agentId}" is not registered. Call adapter.registerAgent() first.`, false);
|
|
60
|
+
}
|
|
61
|
+
const startTime = Date.now();
|
|
62
|
+
try {
|
|
63
|
+
// Build the input in LangChain's expected format
|
|
64
|
+
const input = this.buildInput(payload, context);
|
|
65
|
+
// Execute: support both Runnable.invoke() and plain functions
|
|
66
|
+
let result;
|
|
67
|
+
if (typeof runnable === 'function') {
|
|
68
|
+
result = await runnable(input);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
result = await runnable.invoke(input, {
|
|
72
|
+
metadata: {
|
|
73
|
+
taskId: context.taskId,
|
|
74
|
+
sessionId: context.sessionId,
|
|
75
|
+
sourceAgent: context.agentId,
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
// Normalize the result
|
|
80
|
+
return this.normalizeResult(result, startTime);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
return this.errorResult('LANGCHAIN_ERROR', error instanceof Error ? error.message : 'LangChain execution failed', true, error);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
buildInput(payload, context) {
|
|
87
|
+
const input = {
|
|
88
|
+
...payload.params,
|
|
89
|
+
};
|
|
90
|
+
// Map handoff instruction to common LangChain input keys
|
|
91
|
+
if (payload.handoff) {
|
|
92
|
+
input.input = payload.handoff.instruction;
|
|
93
|
+
input.question = payload.handoff.instruction; // Some chains expect "question"
|
|
94
|
+
input.task = payload.handoff.instruction;
|
|
95
|
+
if (payload.handoff.context) {
|
|
96
|
+
input.context = payload.handoff.context;
|
|
97
|
+
}
|
|
98
|
+
if (payload.handoff.constraints) {
|
|
99
|
+
input.constraints = payload.handoff.constraints;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Include blackboard data
|
|
103
|
+
if (payload.blackboardSnapshot) {
|
|
104
|
+
input.shared_state = payload.blackboardSnapshot;
|
|
105
|
+
}
|
|
106
|
+
// Agent context
|
|
107
|
+
input.agent_context = {
|
|
108
|
+
agentId: context.agentId,
|
|
109
|
+
taskId: context.taskId,
|
|
110
|
+
sessionId: context.sessionId,
|
|
111
|
+
};
|
|
112
|
+
return input;
|
|
113
|
+
}
|
|
114
|
+
normalizeResult(result, startTime) {
|
|
115
|
+
// Handle LangChain's various output formats
|
|
116
|
+
if (result && typeof result === 'object') {
|
|
117
|
+
const obj = result;
|
|
118
|
+
// AgentExecutor returns { output: "..." }
|
|
119
|
+
if ('output' in obj) {
|
|
120
|
+
return this.successResult(obj.output, Date.now() - startTime);
|
|
121
|
+
}
|
|
122
|
+
// Some chains return { result: "..." }
|
|
123
|
+
if ('result' in obj) {
|
|
124
|
+
return this.successResult(obj.result, Date.now() - startTime);
|
|
125
|
+
}
|
|
126
|
+
// LangGraph returns state objects — pass through
|
|
127
|
+
return this.successResult(result, Date.now() - startTime);
|
|
128
|
+
}
|
|
129
|
+
// String or primitive result
|
|
130
|
+
return this.successResult(result, Date.now() - startTime);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.LangChainAdapter = LangChainAdapter;
|
|
134
|
+
//# sourceMappingURL=langchain-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain-adapter.js","sourceRoot":"","sources":["../../../adapters/langchain-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LangChainStreamingAdapter — LangChainAdapter with real incremental streaming.
|
|
4
|
+
*
|
|
5
|
+
* Extends {@link LangChainAdapter} with genuine streaming via the LangChain
|
|
6
|
+
* Runnable `.stream()` interface. Falls back gracefully to `.invoke()` for
|
|
7
|
+
* agents whose Runnable does not expose `.stream()`.
|
|
8
|
+
*
|
|
9
|
+
* Usage (drop-in replacement for LangChainAdapter):
|
|
10
|
+
*
|
|
11
|
+
* const adapter = new LangChainStreamingAdapter();
|
|
12
|
+
* adapter.registerAgent('analyst', myChain); // same API
|
|
13
|
+
* await registry.addAdapter(adapter);
|
|
14
|
+
*
|
|
15
|
+
* // Stream the response
|
|
16
|
+
* for await (const chunk of adapter.executeAgentStream('analyst', payload, ctx)) {
|
|
17
|
+
* process.stdout.write(chunk.text);
|
|
18
|
+
* if (chunk.done) break;
|
|
19
|
+
* }
|
|
20
|
+
*
|
|
21
|
+
* @module LangChainStreamingAdapter
|
|
22
|
+
* @version 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.LangChainStreamingAdapter = void 0;
|
|
26
|
+
const langchain_adapter_1 = require("./langchain-adapter");
|
|
27
|
+
function isStreamable(runnable) {
|
|
28
|
+
return (typeof runnable === 'object' &&
|
|
29
|
+
runnable !== null &&
|
|
30
|
+
typeof runnable.stream === 'function');
|
|
31
|
+
}
|
|
32
|
+
/** Coerce any chunk value yielded by a LangChain stream to a string. */
|
|
33
|
+
function chunkToText(raw) {
|
|
34
|
+
if (typeof raw === 'string')
|
|
35
|
+
return raw;
|
|
36
|
+
if (raw == null)
|
|
37
|
+
return '';
|
|
38
|
+
if (typeof raw === 'object') {
|
|
39
|
+
const obj = raw;
|
|
40
|
+
// AIMessage / BaseMessage pattern
|
|
41
|
+
if (typeof obj.content === 'string')
|
|
42
|
+
return obj.content;
|
|
43
|
+
// { output: "..." } pattern
|
|
44
|
+
if (typeof obj.output === 'string')
|
|
45
|
+
return obj.output;
|
|
46
|
+
// { result: "..." } pattern
|
|
47
|
+
if (typeof obj.result === 'string')
|
|
48
|
+
return obj.result;
|
|
49
|
+
// Generic object — stringify
|
|
50
|
+
return JSON.stringify(obj);
|
|
51
|
+
}
|
|
52
|
+
return String(raw);
|
|
53
|
+
}
|
|
54
|
+
class LangChainStreamingAdapter extends langchain_adapter_1.LangChainAdapter {
|
|
55
|
+
// Internal registry of agents that have a real .stream() method
|
|
56
|
+
streamableAgentIds = new Set();
|
|
57
|
+
get capabilities() {
|
|
58
|
+
return {
|
|
59
|
+
...super.capabilities,
|
|
60
|
+
streaming: true,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Register a LangChain agent. Automatically detects `.stream()` support.
|
|
65
|
+
*/
|
|
66
|
+
registerAgent(agentId, runnable, metadata) {
|
|
67
|
+
super.registerAgent(agentId, runnable, metadata);
|
|
68
|
+
if (isStreamable(runnable)) {
|
|
69
|
+
this.streamableAgentIds.add(agentId);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** Returns `true` when the agent exposes LangChain's `.stream()` method. */
|
|
73
|
+
supportsStreaming(agentId) {
|
|
74
|
+
return this.streamableAgentIds.has(agentId);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Stream agent execution as incremental `StreamingChunk` values.
|
|
78
|
+
*
|
|
79
|
+
* - If the registered Runnable exposes `.stream()`, emits tokens incrementally.
|
|
80
|
+
* - Otherwise falls back to `.invoke()` and emits a single chunk.
|
|
81
|
+
*/
|
|
82
|
+
async *executeAgentStream(agentId, payload, context) {
|
|
83
|
+
this.ensureReady();
|
|
84
|
+
// Access the internal runnables map via the parent's execute path.
|
|
85
|
+
// We override at the stream level; non-streamable agents fall through
|
|
86
|
+
// to the single-chunk wrapper in the base non-streaming path.
|
|
87
|
+
if (!this.streamableAgentIds.has(agentId)) {
|
|
88
|
+
// Fall back: executeAgent → single chunk
|
|
89
|
+
const result = await this.executeAgent(agentId, payload, context);
|
|
90
|
+
if (!result.success) {
|
|
91
|
+
yield {
|
|
92
|
+
text: result.error?.message ?? 'Agent execution failed',
|
|
93
|
+
done: true,
|
|
94
|
+
metadata: { error: true, code: result.error?.code },
|
|
95
|
+
};
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const data = result.data;
|
|
99
|
+
const text = typeof data === 'string' ? data :
|
|
100
|
+
data != null ? JSON.stringify(data) :
|
|
101
|
+
'';
|
|
102
|
+
yield { text, done: false, metadata: result.metadata };
|
|
103
|
+
yield { text: '', done: true, metadata: { adapter: this.name } };
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// Build the same input the non-streaming path would use
|
|
107
|
+
const input = this.buildInput(payload, context);
|
|
108
|
+
// We need the runnable — access it via executeAgent's path by delegating
|
|
109
|
+
// through a custom approach: re-invoke via the known runnables map.
|
|
110
|
+
// The parent stores runnables as a private field; we get it via symbol.
|
|
111
|
+
const runnables = this.runnables;
|
|
112
|
+
const runnable = runnables?.get(agentId);
|
|
113
|
+
if (!runnable || !isStreamable(runnable)) {
|
|
114
|
+
// Shouldn't happen — fallback anyway
|
|
115
|
+
yield* this._fallbackStream(agentId, payload, context);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const langchainConfig = {
|
|
119
|
+
metadata: {
|
|
120
|
+
taskId: context.taskId,
|
|
121
|
+
sessionId: context.sessionId,
|
|
122
|
+
sourceAgent: context.agentId,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
try {
|
|
126
|
+
for await (const rawChunk of runnable.stream(input, langchainConfig)) {
|
|
127
|
+
const text = chunkToText(rawChunk);
|
|
128
|
+
if (text)
|
|
129
|
+
yield { text, done: false };
|
|
130
|
+
}
|
|
131
|
+
yield { text: '', done: true, metadata: { adapter: this.name } };
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
yield {
|
|
135
|
+
text: error instanceof Error ? error.message : 'Streaming failed',
|
|
136
|
+
done: true,
|
|
137
|
+
metadata: { error: true },
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Private helper used for fallback path
|
|
142
|
+
async *_fallbackStream(agentId, payload, context) {
|
|
143
|
+
const result = await this.executeAgent(agentId, payload, context);
|
|
144
|
+
if (!result.success) {
|
|
145
|
+
yield {
|
|
146
|
+
text: result.error?.message ?? 'Agent execution failed',
|
|
147
|
+
done: true,
|
|
148
|
+
metadata: { error: true },
|
|
149
|
+
};
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const data = result.data;
|
|
153
|
+
const text = typeof data === 'string' ? data :
|
|
154
|
+
data != null ? JSON.stringify(data) :
|
|
155
|
+
'';
|
|
156
|
+
yield { text, done: false };
|
|
157
|
+
yield { text: '', done: true };
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.LangChainStreamingAdapter = LangChainStreamingAdapter;
|
|
161
|
+
//# sourceMappingURL=langchain-streaming-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain-streaming-adapter.js","sourceRoot":"","sources":["../../../adapters/langchain-streaming-adapter.ts"],"names":[],"mappings":"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"}
|