network-ai 3.0.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 (92) hide show
  1. package/LICENSE +21 -0
  2. package/QUICKSTART.md +260 -0
  3. package/README.md +604 -0
  4. package/SKILL.md +568 -0
  5. package/dist/adapters/adapter-registry.d.ts +94 -0
  6. package/dist/adapters/adapter-registry.d.ts.map +1 -0
  7. package/dist/adapters/adapter-registry.js +355 -0
  8. package/dist/adapters/adapter-registry.js.map +1 -0
  9. package/dist/adapters/agno-adapter.d.ts +112 -0
  10. package/dist/adapters/agno-adapter.d.ts.map +1 -0
  11. package/dist/adapters/agno-adapter.js +140 -0
  12. package/dist/adapters/agno-adapter.js.map +1 -0
  13. package/dist/adapters/autogen-adapter.d.ts +67 -0
  14. package/dist/adapters/autogen-adapter.d.ts.map +1 -0
  15. package/dist/adapters/autogen-adapter.js +141 -0
  16. package/dist/adapters/autogen-adapter.js.map +1 -0
  17. package/dist/adapters/base-adapter.d.ts +51 -0
  18. package/dist/adapters/base-adapter.d.ts.map +1 -0
  19. package/dist/adapters/base-adapter.js +103 -0
  20. package/dist/adapters/base-adapter.js.map +1 -0
  21. package/dist/adapters/crewai-adapter.d.ts +72 -0
  22. package/dist/adapters/crewai-adapter.d.ts.map +1 -0
  23. package/dist/adapters/crewai-adapter.js +148 -0
  24. package/dist/adapters/crewai-adapter.js.map +1 -0
  25. package/dist/adapters/custom-adapter.d.ts +74 -0
  26. package/dist/adapters/custom-adapter.d.ts.map +1 -0
  27. package/dist/adapters/custom-adapter.js +142 -0
  28. package/dist/adapters/custom-adapter.js.map +1 -0
  29. package/dist/adapters/dspy-adapter.d.ts +70 -0
  30. package/dist/adapters/dspy-adapter.d.ts.map +1 -0
  31. package/dist/adapters/dspy-adapter.js +127 -0
  32. package/dist/adapters/dspy-adapter.js.map +1 -0
  33. package/dist/adapters/haystack-adapter.d.ts +83 -0
  34. package/dist/adapters/haystack-adapter.d.ts.map +1 -0
  35. package/dist/adapters/haystack-adapter.js +149 -0
  36. package/dist/adapters/haystack-adapter.js.map +1 -0
  37. package/dist/adapters/index.d.ts +47 -0
  38. package/dist/adapters/index.d.ts.map +1 -0
  39. package/dist/adapters/index.js +56 -0
  40. package/dist/adapters/index.js.map +1 -0
  41. package/dist/adapters/langchain-adapter.d.ts +51 -0
  42. package/dist/adapters/langchain-adapter.d.ts.map +1 -0
  43. package/dist/adapters/langchain-adapter.js +134 -0
  44. package/dist/adapters/langchain-adapter.js.map +1 -0
  45. package/dist/adapters/llamaindex-adapter.d.ts +89 -0
  46. package/dist/adapters/llamaindex-adapter.d.ts.map +1 -0
  47. package/dist/adapters/llamaindex-adapter.js +135 -0
  48. package/dist/adapters/llamaindex-adapter.js.map +1 -0
  49. package/dist/adapters/mcp-adapter.d.ts +90 -0
  50. package/dist/adapters/mcp-adapter.d.ts.map +1 -0
  51. package/dist/adapters/mcp-adapter.js +200 -0
  52. package/dist/adapters/mcp-adapter.js.map +1 -0
  53. package/dist/adapters/openai-assistants-adapter.d.ts +94 -0
  54. package/dist/adapters/openai-assistants-adapter.d.ts.map +1 -0
  55. package/dist/adapters/openai-assistants-adapter.js +130 -0
  56. package/dist/adapters/openai-assistants-adapter.js.map +1 -0
  57. package/dist/adapters/openclaw-adapter.d.ts +21 -0
  58. package/dist/adapters/openclaw-adapter.d.ts.map +1 -0
  59. package/dist/adapters/openclaw-adapter.js +140 -0
  60. package/dist/adapters/openclaw-adapter.js.map +1 -0
  61. package/dist/adapters/semantic-kernel-adapter.d.ts +73 -0
  62. package/dist/adapters/semantic-kernel-adapter.d.ts.map +1 -0
  63. package/dist/adapters/semantic-kernel-adapter.js +123 -0
  64. package/dist/adapters/semantic-kernel-adapter.js.map +1 -0
  65. package/dist/index.d.ts +379 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +1428 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/lib/blackboard-validator.d.ts +205 -0
  70. package/dist/lib/blackboard-validator.d.ts.map +1 -0
  71. package/dist/lib/blackboard-validator.js +756 -0
  72. package/dist/lib/blackboard-validator.js.map +1 -0
  73. package/dist/lib/locked-blackboard.d.ts +174 -0
  74. package/dist/lib/locked-blackboard.d.ts.map +1 -0
  75. package/dist/lib/locked-blackboard.js +654 -0
  76. package/dist/lib/locked-blackboard.js.map +1 -0
  77. package/dist/lib/swarm-utils.d.ts +136 -0
  78. package/dist/lib/swarm-utils.d.ts.map +1 -0
  79. package/dist/lib/swarm-utils.js +510 -0
  80. package/dist/lib/swarm-utils.js.map +1 -0
  81. package/dist/security.d.ts +269 -0
  82. package/dist/security.d.ts.map +1 -0
  83. package/dist/security.js +713 -0
  84. package/dist/security.js.map +1 -0
  85. package/package.json +84 -0
  86. package/scripts/blackboard.py +819 -0
  87. package/scripts/check_permission.py +331 -0
  88. package/scripts/revoke_token.py +243 -0
  89. package/scripts/swarm_guard.py +1140 -0
  90. package/scripts/validate_token.py +97 -0
  91. package/types/agent-adapter.d.ts +244 -0
  92. package/types/openclaw-core.d.ts +52 -0
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ /**
3
+ * LlamaIndex Adapter
4
+ *
5
+ * Integrates LlamaIndex agents (QueryEngine, ChatEngine, AgentRunner)
6
+ * with the SwarmOrchestrator. LlamaIndex specialises in retrieval-augmented
7
+ * generation (RAG) and agent-based reasoning over data.
8
+ *
9
+ * Usage:
10
+ * const adapter = new LlamaIndexAdapter();
11
+ * adapter.registerQueryEngine("rag-search", myQueryEngine);
12
+ * adapter.registerChatEngine("assistant", myChatEngine);
13
+ * adapter.registerAgentRunner("researcher", myAgentRunner);
14
+ * await registry.addAdapter(adapter);
15
+ *
16
+ * Then in the orchestrator:
17
+ * delegateTask({ targetAgent: "llamaindex:rag-search", ... })
18
+ *
19
+ * @module LlamaIndexAdapter
20
+ * @version 1.0.0
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.LlamaIndexAdapter = void 0;
24
+ const base_adapter_1 = require("./base-adapter");
25
+ class LlamaIndexAdapter extends base_adapter_1.BaseAdapter {
26
+ name = 'llamaindex';
27
+ version = '1.0.0';
28
+ engines = new Map();
29
+ get capabilities() {
30
+ return {
31
+ streaming: true,
32
+ parallel: true,
33
+ bidirectional: false,
34
+ discovery: true,
35
+ authentication: false,
36
+ statefulSessions: true,
37
+ };
38
+ }
39
+ // --- Registration ---
40
+ registerQueryEngine(agentId, engine, metadata) {
41
+ this.engines.set(agentId, { type: 'query', engine });
42
+ this.registerLocalAgent({
43
+ id: agentId,
44
+ name: agentId,
45
+ description: metadata?.description ?? `LlamaIndex QueryEngine: ${agentId}`,
46
+ capabilities: metadata?.capabilities ?? ['query', 'rag'],
47
+ status: 'available',
48
+ });
49
+ }
50
+ registerChatEngine(agentId, engine, metadata) {
51
+ this.engines.set(agentId, { type: 'chat', engine });
52
+ this.registerLocalAgent({
53
+ id: agentId,
54
+ name: agentId,
55
+ description: metadata?.description ?? `LlamaIndex ChatEngine: ${agentId}`,
56
+ capabilities: metadata?.capabilities ?? ['chat', 'rag'],
57
+ status: 'available',
58
+ });
59
+ }
60
+ registerAgentRunner(agentId, engine, metadata) {
61
+ this.engines.set(agentId, { type: 'agent', engine });
62
+ this.registerLocalAgent({
63
+ id: agentId,
64
+ name: agentId,
65
+ description: metadata?.description ?? `LlamaIndex AgentRunner: ${agentId}`,
66
+ capabilities: metadata?.capabilities ?? ['agent', 'reasoning', 'tools'],
67
+ status: 'available',
68
+ });
69
+ }
70
+ // --- Execution ---
71
+ async executeAgent(agentId, payload, context) {
72
+ this.ensureReady();
73
+ const entry = this.engines.get(agentId);
74
+ if (!entry) {
75
+ return this.errorResult('AGENT_NOT_FOUND', `LlamaIndex engine "${agentId}" is not registered`, false);
76
+ }
77
+ const query = this.extractQuery(payload);
78
+ const startTime = Date.now();
79
+ try {
80
+ switch (entry.type) {
81
+ case 'query':
82
+ return await this.executeQuery(entry.engine, query, startTime);
83
+ case 'chat':
84
+ return await this.executeChat(entry.engine, query, payload, startTime);
85
+ case 'agent':
86
+ return await this.executeAgentRunner(entry.engine, query, startTime);
87
+ default:
88
+ return this.errorResult('UNKNOWN_TYPE', 'Unknown engine type', false);
89
+ }
90
+ }
91
+ catch (error) {
92
+ return this.errorResult('LLAMAINDEX_ERROR', error instanceof Error ? error.message : 'LlamaIndex execution failed', true, error);
93
+ }
94
+ }
95
+ // --- Private helpers ---
96
+ extractQuery(payload) {
97
+ if (payload.handoff?.instruction)
98
+ return payload.handoff.instruction;
99
+ if (payload.params?.query)
100
+ return String(payload.params.query);
101
+ if (payload.params?.message)
102
+ return String(payload.params.message);
103
+ return JSON.stringify(payload.params);
104
+ }
105
+ async executeQuery(engine, query, startTime) {
106
+ const response = await engine.query(query);
107
+ return this.successResult(this.normalizeResponse(response), Date.now() - startTime);
108
+ }
109
+ async executeChat(engine, message, payload, startTime) {
110
+ const history = payload.params?.chatHistory;
111
+ const response = await engine.chat(message, history);
112
+ return this.successResult(this.normalizeResponse(response), Date.now() - startTime);
113
+ }
114
+ async executeAgentRunner(engine, message, startTime) {
115
+ const response = await engine.chat(message);
116
+ return this.successResult(this.normalizeResponse(response), Date.now() - startTime);
117
+ }
118
+ normalizeResponse(response) {
119
+ const text = response.response ?? response.toString?.() ?? '';
120
+ const result = { response: text };
121
+ if (response.sourceNodes?.length) {
122
+ result.sources = response.sourceNodes.map((sn) => ({
123
+ text: sn.node?.text?.slice(0, 200),
124
+ score: sn.score,
125
+ metadata: sn.node?.metadata,
126
+ }));
127
+ }
128
+ if (response.metadata) {
129
+ result.metadata = response.metadata;
130
+ }
131
+ return result;
132
+ }
133
+ }
134
+ exports.LlamaIndexAdapter = LlamaIndexAdapter;
135
+ //# sourceMappingURL=llamaindex-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llamaindex-adapter.js","sourceRoot":"","sources":["../../adapters/llamaindex-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * MCP (Model Context Protocol) Adapter
3
+ *
4
+ * Connects the SwarmOrchestrator to MCP servers, enabling agent communication
5
+ * over the Model Context Protocol. This enables cross-network agent discovery
6
+ * and execution via MCP's tool-calling interface.
7
+ *
8
+ * MCP servers expose "tools" -- this adapter maps each tool to an agent
9
+ * that the orchestrator can delegate tasks to.
10
+ *
11
+ * Usage:
12
+ * const adapter = new MCPAdapter();
13
+ * await registry.addAdapter(adapter, {
14
+ * connection: { url: 'http://localhost:3000/mcp' }
15
+ * });
16
+ *
17
+ * Or with pre-registered tool functions:
18
+ * const adapter = new MCPAdapter();
19
+ * adapter.registerTool("search", searchFunction);
20
+ * await registry.addAdapter(adapter);
21
+ *
22
+ * Then in the orchestrator:
23
+ * delegateTask({ targetAgent: "mcp:search", ... })
24
+ *
25
+ * @module MCPAdapter
26
+ * @version 1.0.0
27
+ */
28
+ import { BaseAdapter } from './base-adapter';
29
+ import type { AdapterConfig, AdapterCapabilities, AgentPayload, AgentContext, AgentResult } from '../types/agent-adapter';
30
+ /**
31
+ * MCP Tool definition (matches MCP spec)
32
+ */
33
+ export interface MCPTool {
34
+ name: string;
35
+ description?: string;
36
+ inputSchema?: Record<string, unknown>;
37
+ }
38
+ /**
39
+ * MCP tool execution function
40
+ */
41
+ export type MCPToolHandler = (args: Record<string, unknown>) => Promise<{
42
+ content: Array<{
43
+ type: string;
44
+ text?: string;
45
+ data?: unknown;
46
+ }>;
47
+ isError?: boolean;
48
+ }>;
49
+ /**
50
+ * MCP Server connection interface
51
+ */
52
+ export interface MCPServerConnection {
53
+ /** List available tools from the MCP server */
54
+ listTools(): Promise<MCPTool[]>;
55
+ /** Call a tool on the MCP server */
56
+ callTool(name: string, args: Record<string, unknown>): Promise<{
57
+ content: Array<{
58
+ type: string;
59
+ text?: string;
60
+ data?: unknown;
61
+ }>;
62
+ isError?: boolean;
63
+ }>;
64
+ /** Close the connection */
65
+ close(): Promise<void>;
66
+ }
67
+ export declare class MCPAdapter extends BaseAdapter {
68
+ readonly name = "mcp";
69
+ readonly version = "1.0.0";
70
+ private tools;
71
+ private toolMetadata;
72
+ private serverConnection;
73
+ get capabilities(): AdapterCapabilities;
74
+ initialize(config: AdapterConfig): Promise<void>;
75
+ /**
76
+ * Register a local tool handler (no MCP server needed)
77
+ */
78
+ registerTool(name: string, handler: MCPToolHandler, metadata?: {
79
+ description?: string;
80
+ inputSchema?: Record<string, unknown>;
81
+ }): void;
82
+ private discoverServerTools;
83
+ executeAgent(agentId: string, payload: AgentPayload, context: AgentContext): Promise<AgentResult>;
84
+ private executeLocalTool;
85
+ private executeRemoteTool;
86
+ private buildToolArgs;
87
+ private extractContent;
88
+ shutdown(): Promise<void>;
89
+ }
90
+ //# sourceMappingURL=mcp-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-adapter.d.ts","sourceRoot":"","sources":["../../adapters/mcp-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAErG;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAChC,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAC7D,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QAChE,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IACH,2BAA2B;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,qBAAa,UAAW,SAAQ,WAAW;IACzC,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,OAAO,WAAW;IAC3B,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,gBAAgB,CAAoC;IAE5D,IAAI,YAAY,IAAI,mBAAmB,CAStC;IAEK,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBtD;;OAEG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,EACvB,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GACzE,IAAI;YAgBO,mBAAmB;IAqB3B,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;YAuBT,gBAAgB;YA+BhB,iBAAiB;IAiC/B,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,cAAc;IAoBhB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAWhC"}
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ /**
3
+ * MCP (Model Context Protocol) Adapter
4
+ *
5
+ * Connects the SwarmOrchestrator to MCP servers, enabling agent communication
6
+ * over the Model Context Protocol. This enables cross-network agent discovery
7
+ * and execution via MCP's tool-calling interface.
8
+ *
9
+ * MCP servers expose "tools" -- this adapter maps each tool to an agent
10
+ * that the orchestrator can delegate tasks to.
11
+ *
12
+ * Usage:
13
+ * const adapter = new MCPAdapter();
14
+ * await registry.addAdapter(adapter, {
15
+ * connection: { url: 'http://localhost:3000/mcp' }
16
+ * });
17
+ *
18
+ * Or with pre-registered tool functions:
19
+ * const adapter = new MCPAdapter();
20
+ * adapter.registerTool("search", searchFunction);
21
+ * await registry.addAdapter(adapter);
22
+ *
23
+ * Then in the orchestrator:
24
+ * delegateTask({ targetAgent: "mcp:search", ... })
25
+ *
26
+ * @module MCPAdapter
27
+ * @version 1.0.0
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.MCPAdapter = void 0;
31
+ const base_adapter_1 = require("./base-adapter");
32
+ class MCPAdapter extends base_adapter_1.BaseAdapter {
33
+ name = 'mcp';
34
+ version = '1.0.0';
35
+ tools = new Map();
36
+ toolMetadata = new Map();
37
+ serverConnection = null;
38
+ get capabilities() {
39
+ return {
40
+ streaming: true,
41
+ parallel: true,
42
+ bidirectional: false,
43
+ discovery: true,
44
+ authentication: true,
45
+ statefulSessions: false,
46
+ };
47
+ }
48
+ async initialize(config) {
49
+ await super.initialize(config);
50
+ // If a server connection factory is provided, use it
51
+ if (config.options?.serverConnection) {
52
+ this.serverConnection = config.options.serverConnection;
53
+ // Discover tools from the server
54
+ await this.discoverServerTools();
55
+ }
56
+ // If a URL is provided, the user needs to set up the connection themselves
57
+ // (We don't bundle an MCP client library -- keep it dependency-free)
58
+ if (config.connection?.url && !this.serverConnection) {
59
+ console.info(`[MCPAdapter] URL configured: ${config.connection.url}. ` +
60
+ `Provide a serverConnection via config.options.serverConnection or register tools manually.`);
61
+ }
62
+ this.ready = true;
63
+ }
64
+ /**
65
+ * Register a local tool handler (no MCP server needed)
66
+ */
67
+ registerTool(name, handler, metadata) {
68
+ this.tools.set(name, handler);
69
+ this.toolMetadata.set(name, {
70
+ name,
71
+ description: metadata?.description,
72
+ inputSchema: metadata?.inputSchema,
73
+ });
74
+ this.registerLocalAgent({
75
+ id: name,
76
+ name,
77
+ description: metadata?.description ?? `MCP tool: ${name}`,
78
+ capabilities: ['tool'],
79
+ status: 'available',
80
+ });
81
+ }
82
+ async discoverServerTools() {
83
+ if (!this.serverConnection)
84
+ return;
85
+ try {
86
+ const tools = await this.serverConnection.listTools();
87
+ for (const tool of tools) {
88
+ this.toolMetadata.set(tool.name, tool);
89
+ this.registerLocalAgent({
90
+ id: tool.name,
91
+ name: tool.name,
92
+ description: tool.description ?? `MCP server tool: ${tool.name}`,
93
+ capabilities: ['tool'],
94
+ status: 'available',
95
+ metadata: { inputSchema: tool.inputSchema },
96
+ });
97
+ }
98
+ }
99
+ catch (error) {
100
+ console.error('[MCPAdapter] Failed to discover server tools:', error);
101
+ }
102
+ }
103
+ async executeAgent(agentId, payload, context) {
104
+ this.ensureReady();
105
+ const startTime = Date.now();
106
+ // Strategy 1: Local tool handler
107
+ const localHandler = this.tools.get(agentId);
108
+ if (localHandler) {
109
+ return this.executeLocalTool(agentId, localHandler, payload, startTime);
110
+ }
111
+ // Strategy 2: Remote MCP server
112
+ if (this.serverConnection) {
113
+ return this.executeRemoteTool(agentId, payload, startTime);
114
+ }
115
+ return this.errorResult('TOOL_NOT_FOUND', `MCP tool "${agentId}" not found locally or on any connected server`, false);
116
+ }
117
+ async executeLocalTool(name, handler, payload, startTime) {
118
+ try {
119
+ const args = this.buildToolArgs(payload);
120
+ const result = await handler(args);
121
+ if (result.isError) {
122
+ const errorText = result.content
123
+ .filter(c => c.type === 'text')
124
+ .map(c => c.text)
125
+ .join('\n');
126
+ return this.errorResult('TOOL_ERROR', errorText || 'Tool returned an error', true);
127
+ }
128
+ // Extract text content from MCP response format
129
+ const data = this.extractContent(result.content);
130
+ return this.successResult(data, Date.now() - startTime);
131
+ }
132
+ catch (error) {
133
+ return this.errorResult('MCP_ERROR', error instanceof Error ? error.message : 'MCP tool execution failed', true, error);
134
+ }
135
+ }
136
+ async executeRemoteTool(name, payload, startTime) {
137
+ if (!this.serverConnection) {
138
+ return this.errorResult('NO_CONNECTION', 'No MCP server connection', false);
139
+ }
140
+ try {
141
+ const args = this.buildToolArgs(payload);
142
+ const result = await this.serverConnection.callTool(name, args);
143
+ if (result.isError) {
144
+ const errorText = result.content
145
+ .filter(c => c.type === 'text')
146
+ .map(c => c.text)
147
+ .join('\n');
148
+ return this.errorResult('TOOL_ERROR', errorText || 'Remote tool returned an error', true);
149
+ }
150
+ const data = this.extractContent(result.content);
151
+ return this.successResult(data, Date.now() - startTime);
152
+ }
153
+ catch (error) {
154
+ return this.errorResult('MCP_REMOTE_ERROR', error instanceof Error ? error.message : 'Remote MCP tool call failed', true, error);
155
+ }
156
+ }
157
+ buildToolArgs(payload) {
158
+ const args = { ...payload.params };
159
+ if (payload.handoff) {
160
+ args.instruction = payload.handoff.instruction;
161
+ if (payload.handoff.context) {
162
+ args.context = payload.handoff.context;
163
+ }
164
+ }
165
+ return args;
166
+ }
167
+ extractContent(content) {
168
+ if (content.length === 1) {
169
+ if (content[0].type === 'text' && content[0].text) {
170
+ // Try to parse as JSON
171
+ try {
172
+ return JSON.parse(content[0].text);
173
+ }
174
+ catch {
175
+ return content[0].text;
176
+ }
177
+ }
178
+ return content[0].data ?? content[0].text;
179
+ }
180
+ // Multiple content blocks -- return structured
181
+ return content.map(c => ({
182
+ type: c.type,
183
+ value: c.type === 'text' ? c.text : c.data,
184
+ }));
185
+ }
186
+ async shutdown() {
187
+ if (this.serverConnection) {
188
+ try {
189
+ await this.serverConnection.close();
190
+ }
191
+ catch {
192
+ // Best-effort
193
+ }
194
+ this.serverConnection = null;
195
+ }
196
+ await super.shutdown();
197
+ }
198
+ }
199
+ exports.MCPAdapter = MCPAdapter;
200
+ //# sourceMappingURL=mcp-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-adapter.js","sourceRoot":"","sources":["../../adapters/mcp-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * OpenAI Assistants Adapter
3
+ *
4
+ * Integrates OpenAI's Assistants API (v2) with the SwarmOrchestrator.
5
+ * Supports function calling, code interpreter, file search, and
6
+ * custom assistant configurations.
7
+ *
8
+ * Usage:
9
+ * const adapter = new OpenAIAssistantsAdapter();
10
+ * adapter.registerAssistant("analyst", { assistantId: "asst_abc123", apiKey });
11
+ * adapter.registerLocalFunction("calculator", async (params) => calculate(params));
12
+ * await registry.addAdapter(adapter);
13
+ *
14
+ * Then in the orchestrator:
15
+ * delegateTask({ targetAgent: "openai-assistants:analyst", ... })
16
+ *
17
+ * @module OpenAIAssistantsAdapter
18
+ * @version 1.0.0
19
+ */
20
+ import { BaseAdapter } from './base-adapter';
21
+ import type { AdapterConfig, AdapterCapabilities, AgentPayload, AgentContext, AgentResult } from '../types/agent-adapter';
22
+ /** Configuration for an OpenAI Assistant */
23
+ export interface AssistantConfig {
24
+ /** The assistant ID from OpenAI (asst_xxx) */
25
+ assistantId: string;
26
+ /** OpenAI API key -- or set via adapter config */
27
+ apiKey?: string;
28
+ /** Model override (defaults to the assistant's configured model) */
29
+ model?: string;
30
+ /** Max tokens for responses */
31
+ maxTokens?: number;
32
+ /** Custom headers */
33
+ headers?: Record<string, string>;
34
+ /** Base URL override (for Azure OpenAI or proxies) */
35
+ baseUrl?: string;
36
+ }
37
+ /** Thread message */
38
+ export interface ThreadMessage {
39
+ role: 'user' | 'assistant';
40
+ content: string;
41
+ metadata?: Record<string, string>;
42
+ }
43
+ /** Run result */
44
+ export interface RunResult {
45
+ status: 'completed' | 'failed' | 'requires_action' | 'cancelled' | 'expired';
46
+ messages: ThreadMessage[];
47
+ usage?: {
48
+ prompt_tokens: number;
49
+ completion_tokens: number;
50
+ total_tokens: number;
51
+ };
52
+ error?: string;
53
+ }
54
+ /**
55
+ * Client interface for OpenAI Assistants API.
56
+ * Users provide their own client (e.g. the openai npm package) to avoid
57
+ * making the adapter depend on any external package.
58
+ */
59
+ export interface OpenAIAssistantsClient {
60
+ /** Create a thread */
61
+ createThread?(): Promise<{
62
+ id: string;
63
+ }>;
64
+ /** Add a message to a thread */
65
+ addMessage?(threadId: string, message: ThreadMessage): Promise<void>;
66
+ /** Create and poll a run */
67
+ createAndPollRun?(threadId: string, assistantId: string, options?: {
68
+ model?: string;
69
+ maxTokens?: number;
70
+ }): Promise<RunResult>;
71
+ /**
72
+ * Simple single-shot helper: send a message, get a response.
73
+ * If provided, the adapter prefers this over the thread-based flow.
74
+ */
75
+ chat?(assistantId: string, message: string, options?: Record<string, unknown>): Promise<{
76
+ response: string;
77
+ usage?: Record<string, number>;
78
+ }>;
79
+ }
80
+ export declare class OpenAIAssistantsAdapter extends BaseAdapter {
81
+ readonly name = "openai-assistants";
82
+ readonly version = "1.0.0";
83
+ private assistants;
84
+ private defaultClient?;
85
+ get capabilities(): AdapterCapabilities;
86
+ initialize(config: AdapterConfig): Promise<void>;
87
+ registerAssistant(agentId: string, assistantConfig: AssistantConfig, client?: OpenAIAssistantsClient, metadata?: {
88
+ description?: string;
89
+ capabilities?: string[];
90
+ }): void;
91
+ executeAgent(agentId: string, payload: AgentPayload, context: AgentContext): Promise<AgentResult>;
92
+ private buildMessage;
93
+ }
94
+ //# sourceMappingURL=openai-assistants-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-assistants-adapter.d.ts","sourceRoot":"","sources":["../../adapters/openai-assistants-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAMhC,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAqB;AACrB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,iBAAiB;AACjB,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,iBAAiB,GAAG,WAAW,GAAG,SAAS,CAAC;IAC7E,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,sBAAsB;IACtB,YAAY,CAAC,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzC,gCAAgC;IAChC,UAAU,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,4BAA4B;IAC5B,gBAAgB,CAAC,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC/C,OAAO,CAAC,SAAS,CAAC,CAAC;IACtB;;;OAGG;IACH,IAAI,CAAC,CACH,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;CAClE;AAQD,qBAAa,uBAAwB,SAAQ,WAAW;IACtD,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,OAAO,WAAW;IAC3B,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,aAAa,CAAC,CAAyB;IAE/C,IAAI,YAAY,IAAI,mBAAmB,CAStC;IAEK,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAStD,iBAAiB,CACf,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,eAAe,EAChC,MAAM,CAAC,EAAE,sBAAsB,EAC/B,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC3D,IAAI;IAgBD,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;IAyFvB,OAAO,CAAC,YAAY;CAgBrB"}