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.
- package/LICENSE +21 -0
- package/QUICKSTART.md +260 -0
- package/README.md +604 -0
- package/SKILL.md +568 -0
- package/dist/adapters/adapter-registry.d.ts +94 -0
- package/dist/adapters/adapter-registry.d.ts.map +1 -0
- package/dist/adapters/adapter-registry.js +355 -0
- package/dist/adapters/adapter-registry.js.map +1 -0
- package/dist/adapters/agno-adapter.d.ts +112 -0
- package/dist/adapters/agno-adapter.d.ts.map +1 -0
- package/dist/adapters/agno-adapter.js +140 -0
- package/dist/adapters/agno-adapter.js.map +1 -0
- package/dist/adapters/autogen-adapter.d.ts +67 -0
- package/dist/adapters/autogen-adapter.d.ts.map +1 -0
- package/dist/adapters/autogen-adapter.js +141 -0
- package/dist/adapters/autogen-adapter.js.map +1 -0
- package/dist/adapters/base-adapter.d.ts +51 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -0
- package/dist/adapters/base-adapter.js +103 -0
- package/dist/adapters/base-adapter.js.map +1 -0
- package/dist/adapters/crewai-adapter.d.ts +72 -0
- package/dist/adapters/crewai-adapter.d.ts.map +1 -0
- package/dist/adapters/crewai-adapter.js +148 -0
- package/dist/adapters/crewai-adapter.js.map +1 -0
- package/dist/adapters/custom-adapter.d.ts +74 -0
- package/dist/adapters/custom-adapter.d.ts.map +1 -0
- package/dist/adapters/custom-adapter.js +142 -0
- package/dist/adapters/custom-adapter.js.map +1 -0
- package/dist/adapters/dspy-adapter.d.ts +70 -0
- package/dist/adapters/dspy-adapter.d.ts.map +1 -0
- package/dist/adapters/dspy-adapter.js +127 -0
- package/dist/adapters/dspy-adapter.js.map +1 -0
- package/dist/adapters/haystack-adapter.d.ts +83 -0
- package/dist/adapters/haystack-adapter.d.ts.map +1 -0
- package/dist/adapters/haystack-adapter.js +149 -0
- package/dist/adapters/haystack-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +47 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +56 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/langchain-adapter.d.ts +51 -0
- package/dist/adapters/langchain-adapter.d.ts.map +1 -0
- package/dist/adapters/langchain-adapter.js +134 -0
- package/dist/adapters/langchain-adapter.js.map +1 -0
- package/dist/adapters/llamaindex-adapter.d.ts +89 -0
- package/dist/adapters/llamaindex-adapter.d.ts.map +1 -0
- package/dist/adapters/llamaindex-adapter.js +135 -0
- package/dist/adapters/llamaindex-adapter.js.map +1 -0
- package/dist/adapters/mcp-adapter.d.ts +90 -0
- package/dist/adapters/mcp-adapter.d.ts.map +1 -0
- package/dist/adapters/mcp-adapter.js +200 -0
- package/dist/adapters/mcp-adapter.js.map +1 -0
- package/dist/adapters/openai-assistants-adapter.d.ts +94 -0
- package/dist/adapters/openai-assistants-adapter.d.ts.map +1 -0
- package/dist/adapters/openai-assistants-adapter.js +130 -0
- package/dist/adapters/openai-assistants-adapter.js.map +1 -0
- package/dist/adapters/openclaw-adapter.d.ts +21 -0
- package/dist/adapters/openclaw-adapter.d.ts.map +1 -0
- package/dist/adapters/openclaw-adapter.js +140 -0
- package/dist/adapters/openclaw-adapter.js.map +1 -0
- package/dist/adapters/semantic-kernel-adapter.d.ts +73 -0
- package/dist/adapters/semantic-kernel-adapter.d.ts.map +1 -0
- package/dist/adapters/semantic-kernel-adapter.js +123 -0
- package/dist/adapters/semantic-kernel-adapter.js.map +1 -0
- package/dist/index.d.ts +379 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1428 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/blackboard-validator.d.ts +205 -0
- package/dist/lib/blackboard-validator.d.ts.map +1 -0
- package/dist/lib/blackboard-validator.js +756 -0
- package/dist/lib/blackboard-validator.js.map +1 -0
- package/dist/lib/locked-blackboard.d.ts +174 -0
- package/dist/lib/locked-blackboard.d.ts.map +1 -0
- package/dist/lib/locked-blackboard.js +654 -0
- package/dist/lib/locked-blackboard.js.map +1 -0
- package/dist/lib/swarm-utils.d.ts +136 -0
- package/dist/lib/swarm-utils.d.ts.map +1 -0
- package/dist/lib/swarm-utils.js +510 -0
- package/dist/lib/swarm-utils.js.map +1 -0
- package/dist/security.d.ts +269 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +713 -0
- package/dist/security.js.map +1 -0
- package/package.json +84 -0
- package/scripts/blackboard.py +819 -0
- package/scripts/check_permission.py +331 -0
- package/scripts/revoke_token.py +243 -0
- package/scripts/swarm_guard.py +1140 -0
- package/scripts/validate_token.py +97 -0
- package/types/agent-adapter.d.ts +244 -0
- package/types/openclaw-core.d.ts +52 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenAI Assistants Adapter
|
|
4
|
+
*
|
|
5
|
+
* Integrates OpenAI's Assistants API (v2) with the SwarmOrchestrator.
|
|
6
|
+
* Supports function calling, code interpreter, file search, and
|
|
7
|
+
* custom assistant configurations.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const adapter = new OpenAIAssistantsAdapter();
|
|
11
|
+
* adapter.registerAssistant("analyst", { assistantId: "asst_abc123", apiKey });
|
|
12
|
+
* adapter.registerLocalFunction("calculator", async (params) => calculate(params));
|
|
13
|
+
* await registry.addAdapter(adapter);
|
|
14
|
+
*
|
|
15
|
+
* Then in the orchestrator:
|
|
16
|
+
* delegateTask({ targetAgent: "openai-assistants:analyst", ... })
|
|
17
|
+
*
|
|
18
|
+
* @module OpenAIAssistantsAdapter
|
|
19
|
+
* @version 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.OpenAIAssistantsAdapter = void 0;
|
|
23
|
+
const base_adapter_1 = require("./base-adapter");
|
|
24
|
+
class OpenAIAssistantsAdapter extends base_adapter_1.BaseAdapter {
|
|
25
|
+
name = 'openai-assistants';
|
|
26
|
+
version = '1.0.0';
|
|
27
|
+
assistants = new Map();
|
|
28
|
+
defaultClient;
|
|
29
|
+
get capabilities() {
|
|
30
|
+
return {
|
|
31
|
+
streaming: true,
|
|
32
|
+
parallel: true,
|
|
33
|
+
bidirectional: true,
|
|
34
|
+
discovery: true,
|
|
35
|
+
authentication: true,
|
|
36
|
+
statefulSessions: true,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
async initialize(config) {
|
|
40
|
+
await super.initialize(config);
|
|
41
|
+
if (config.options?.client) {
|
|
42
|
+
this.defaultClient = config.options.client;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// --- Registration ---
|
|
46
|
+
registerAssistant(agentId, assistantConfig, client, metadata) {
|
|
47
|
+
this.assistants.set(agentId, {
|
|
48
|
+
config: assistantConfig,
|
|
49
|
+
client,
|
|
50
|
+
});
|
|
51
|
+
this.registerLocalAgent({
|
|
52
|
+
id: agentId,
|
|
53
|
+
name: agentId,
|
|
54
|
+
description: metadata?.description ?? `OpenAI Assistant: ${agentId}`,
|
|
55
|
+
capabilities: metadata?.capabilities ?? ['chat', 'function-calling', 'code-interpreter'],
|
|
56
|
+
status: 'available',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
// --- Execution ---
|
|
60
|
+
async executeAgent(agentId, payload, context) {
|
|
61
|
+
this.ensureReady();
|
|
62
|
+
const entry = this.assistants.get(agentId);
|
|
63
|
+
if (!entry) {
|
|
64
|
+
return this.errorResult('AGENT_NOT_FOUND', `OpenAI Assistant "${agentId}" is not registered`, false);
|
|
65
|
+
}
|
|
66
|
+
const client = entry.client || this.defaultClient;
|
|
67
|
+
if (!client) {
|
|
68
|
+
return this.errorResult('NO_CLIENT', 'No OpenAI client provided. Pass a client via registerAssistant() or initialize({ options: { client } })', false);
|
|
69
|
+
}
|
|
70
|
+
const message = this.buildMessage(payload);
|
|
71
|
+
const startTime = Date.now();
|
|
72
|
+
try {
|
|
73
|
+
// Strategy 1: Simple chat helper
|
|
74
|
+
if (client.chat) {
|
|
75
|
+
const result = await client.chat(entry.config.assistantId, message, {
|
|
76
|
+
model: entry.config.model,
|
|
77
|
+
maxTokens: entry.config.maxTokens,
|
|
78
|
+
});
|
|
79
|
+
return this.successResult({
|
|
80
|
+
response: result.response,
|
|
81
|
+
usage: result.usage,
|
|
82
|
+
}, Date.now() - startTime);
|
|
83
|
+
}
|
|
84
|
+
// Strategy 2: Thread-based flow
|
|
85
|
+
if (client.createThread && client.addMessage && client.createAndPollRun) {
|
|
86
|
+
// Reuse thread for session statefulness
|
|
87
|
+
if (!entry.threadId) {
|
|
88
|
+
const thread = await client.createThread();
|
|
89
|
+
entry.threadId = thread.id;
|
|
90
|
+
}
|
|
91
|
+
await client.addMessage(entry.threadId, { role: 'user', content: message });
|
|
92
|
+
const run = await client.createAndPollRun(entry.threadId, entry.config.assistantId, { model: entry.config.model, maxTokens: entry.config.maxTokens });
|
|
93
|
+
if (run.status !== 'completed') {
|
|
94
|
+
return this.errorResult('RUN_FAILED', `Run finished with status: ${run.status}. ${run.error || ''}`, run.status === 'expired');
|
|
95
|
+
}
|
|
96
|
+
const assistantMessages = run.messages.filter((m) => m.role === 'assistant');
|
|
97
|
+
const lastMessage = assistantMessages[assistantMessages.length - 1];
|
|
98
|
+
return this.successResult({
|
|
99
|
+
response: lastMessage?.content ?? '',
|
|
100
|
+
messages: assistantMessages,
|
|
101
|
+
usage: run.usage,
|
|
102
|
+
threadId: entry.threadId,
|
|
103
|
+
}, Date.now() - startTime);
|
|
104
|
+
}
|
|
105
|
+
return this.errorResult('NO_METHOD', 'Client has no callable method (chat or createThread+addMessage+createAndPollRun)', false);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
return this.errorResult('OPENAI_ERROR', error instanceof Error ? error.message : 'OpenAI Assistants execution failed', true, error);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// --- Helpers ---
|
|
112
|
+
buildMessage(payload) {
|
|
113
|
+
if (payload.handoff?.instruction) {
|
|
114
|
+
let msg = payload.handoff.instruction;
|
|
115
|
+
if (payload.handoff.constraints?.length) {
|
|
116
|
+
msg += `\n\nConstraints: ${payload.handoff.constraints.join(', ')}`;
|
|
117
|
+
}
|
|
118
|
+
if (payload.handoff.expectedOutput) {
|
|
119
|
+
msg += `\n\nExpected output format: ${payload.handoff.expectedOutput}`;
|
|
120
|
+
}
|
|
121
|
+
if (payload.blackboardSnapshot) {
|
|
122
|
+
msg += `\n\nContext: ${JSON.stringify(payload.blackboardSnapshot)}`;
|
|
123
|
+
}
|
|
124
|
+
return msg;
|
|
125
|
+
}
|
|
126
|
+
return JSON.stringify(payload.params);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.OpenAIAssistantsAdapter = OpenAIAssistantsAdapter;
|
|
130
|
+
//# sourceMappingURL=openai-assistants-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-assistants-adapter.js","sourceRoot":"","sources":["../../adapters/openai-assistants-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw Adapter -- Preserves all existing OpenClaw functionality
|
|
3
|
+
*
|
|
4
|
+
* This adapter wraps the original `callSkill()` / `OpenClawSkill` interface
|
|
5
|
+
* so the SwarmOrchestrator continues to work exactly as before for OpenClaw users.
|
|
6
|
+
*
|
|
7
|
+
* @module OpenClawAdapter
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
import { BaseAdapter } from './base-adapter';
|
|
11
|
+
import type { AdapterConfig, AdapterCapabilities, AgentPayload, AgentContext, AgentResult } from '../types/agent-adapter';
|
|
12
|
+
export type { OpenClawSkill, SkillContext, SkillResult } from 'openclaw-core';
|
|
13
|
+
export declare class OpenClawAdapter extends BaseAdapter {
|
|
14
|
+
readonly name = "openclaw";
|
|
15
|
+
readonly version = "1.0.0";
|
|
16
|
+
private callSkill;
|
|
17
|
+
get capabilities(): AdapterCapabilities;
|
|
18
|
+
initialize(config: AdapterConfig): Promise<void>;
|
|
19
|
+
executeAgent(agentId: string, payload: AgentPayload, context: AgentContext): Promise<AgentResult>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=openclaw-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-adapter.d.ts","sourceRoot":"","sources":["../../adapters/openclaw-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;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;AAGhC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAU9E,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,OAAO,WAAW;IAC3B,OAAO,CAAC,SAAS,CAA4B;IAE7C,IAAI,YAAY,IAAI,mBAAmB,CAStC;IAEK,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBhD,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;CAoExB"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenClaw Adapter -- Preserves all existing OpenClaw functionality
|
|
4
|
+
*
|
|
5
|
+
* This adapter wraps the original `callSkill()` / `OpenClawSkill` interface
|
|
6
|
+
* so the SwarmOrchestrator continues to work exactly as before for OpenClaw users.
|
|
7
|
+
*
|
|
8
|
+
* @module OpenClawAdapter
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.OpenClawAdapter = void 0;
|
|
46
|
+
const base_adapter_1 = require("./base-adapter");
|
|
47
|
+
class OpenClawAdapter extends base_adapter_1.BaseAdapter {
|
|
48
|
+
name = 'openclaw';
|
|
49
|
+
version = '1.0.0';
|
|
50
|
+
callSkill = null;
|
|
51
|
+
get capabilities() {
|
|
52
|
+
return {
|
|
53
|
+
streaming: false,
|
|
54
|
+
parallel: true,
|
|
55
|
+
bidirectional: true,
|
|
56
|
+
discovery: false,
|
|
57
|
+
authentication: true,
|
|
58
|
+
statefulSessions: true,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
async initialize(config) {
|
|
62
|
+
await super.initialize(config);
|
|
63
|
+
// Try to import callSkill from openclaw-core
|
|
64
|
+
try {
|
|
65
|
+
const openclawCore = await Promise.resolve().then(() => __importStar(require('openclaw-core')));
|
|
66
|
+
this.callSkill = openclawCore.callSkill;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// If openclaw-core is provided via config, use that
|
|
70
|
+
if (config.options?.callSkill && typeof config.options.callSkill === 'function') {
|
|
71
|
+
this.callSkill = config.options.callSkill;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.warn('[OpenClawAdapter] openclaw-core not available. Provide callSkill via config.options.callSkill');
|
|
75
|
+
this.ready = false;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
this.ready = true;
|
|
80
|
+
}
|
|
81
|
+
async executeAgent(agentId, payload, context) {
|
|
82
|
+
this.ensureReady();
|
|
83
|
+
if (!this.callSkill) {
|
|
84
|
+
return this.errorResult('NO_CALLSKILL', 'callSkill function is not available', false);
|
|
85
|
+
}
|
|
86
|
+
const startTime = Date.now();
|
|
87
|
+
try {
|
|
88
|
+
// Translate universal payload -> OpenClaw callSkill format
|
|
89
|
+
const openclawParams = {
|
|
90
|
+
action: payload.action,
|
|
91
|
+
...payload.params,
|
|
92
|
+
};
|
|
93
|
+
// Include handoff context if present (preserves existing handoff protocol)
|
|
94
|
+
if (payload.handoff) {
|
|
95
|
+
openclawParams.handoff = {
|
|
96
|
+
handoffId: payload.handoff.handoffId,
|
|
97
|
+
sourceAgent: payload.handoff.sourceAgent,
|
|
98
|
+
targetAgent: payload.handoff.targetAgent,
|
|
99
|
+
taskType: payload.handoff.taskType,
|
|
100
|
+
payload: {
|
|
101
|
+
instruction: payload.handoff.instruction,
|
|
102
|
+
context: payload.handoff.context,
|
|
103
|
+
constraints: payload.handoff.constraints,
|
|
104
|
+
expectedOutput: payload.handoff.expectedOutput,
|
|
105
|
+
},
|
|
106
|
+
metadata: payload.handoff.metadata,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// Include blackboard snapshot if present
|
|
110
|
+
if (payload.blackboardSnapshot) {
|
|
111
|
+
openclawParams.context = {
|
|
112
|
+
...(openclawParams.context || {}),
|
|
113
|
+
blackboardSnapshot: payload.blackboardSnapshot,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// Call the OpenClaw skill
|
|
117
|
+
const result = await this.callSkill(agentId, openclawParams);
|
|
118
|
+
// Translate OpenClaw result -> universal AgentResult
|
|
119
|
+
return {
|
|
120
|
+
success: result.success,
|
|
121
|
+
data: result.data,
|
|
122
|
+
error: result.error ? {
|
|
123
|
+
code: result.error.code,
|
|
124
|
+
message: result.error.message,
|
|
125
|
+
recoverable: result.error.recoverable,
|
|
126
|
+
suggestedAction: result.error.suggestedAction,
|
|
127
|
+
} : undefined,
|
|
128
|
+
metadata: {
|
|
129
|
+
adapter: this.name,
|
|
130
|
+
executionTimeMs: Date.now() - startTime,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return this.errorResult('OPENCLAW_ERROR', error instanceof Error ? error.message : 'OpenClaw skill execution failed', true, error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.OpenClawAdapter = OpenClawAdapter;
|
|
140
|
+
//# sourceMappingURL=openclaw-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-adapter.js","sourceRoot":"","sources":["../../adapters/openclaw-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semantic Kernel Adapter
|
|
3
|
+
*
|
|
4
|
+
* Integrates Microsoft Semantic Kernel agents and functions with the
|
|
5
|
+
* SwarmOrchestrator. Semantic Kernel is Microsoft's enterprise SDK for
|
|
6
|
+
* building AI-powered apps with plugins, planners, and memory.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const adapter = new SemanticKernelAdapter();
|
|
10
|
+
* adapter.registerKernel("planner", myKernel);
|
|
11
|
+
* adapter.registerFunction("summarise", mySKFunction);
|
|
12
|
+
* await registry.addAdapter(adapter);
|
|
13
|
+
*
|
|
14
|
+
* Then in the orchestrator:
|
|
15
|
+
* delegateTask({ targetAgent: "semantic-kernel:planner", ... })
|
|
16
|
+
*
|
|
17
|
+
* @module SemanticKernelAdapter
|
|
18
|
+
* @version 1.0.0
|
|
19
|
+
*/
|
|
20
|
+
import { BaseAdapter } from './base-adapter';
|
|
21
|
+
import type { AdapterCapabilities, AgentPayload, AgentContext, AgentResult } from '../types/agent-adapter';
|
|
22
|
+
/** Matches SK's Kernel interface */
|
|
23
|
+
export interface SKKernel {
|
|
24
|
+
/** Invoke a function within the kernel */
|
|
25
|
+
invokeFunction?(functionName: string, args?: Record<string, unknown>): Promise<SKFunctionResult>;
|
|
26
|
+
/** Invoke a prompt directly */
|
|
27
|
+
invokePrompt?(prompt: string, args?: Record<string, unknown>): Promise<SKFunctionResult>;
|
|
28
|
+
/** Run a planner */
|
|
29
|
+
runPlan?(goal: string, options?: Record<string, unknown>): Promise<SKPlanResult>;
|
|
30
|
+
}
|
|
31
|
+
/** Matches SK's KernelFunction */
|
|
32
|
+
export interface SKFunction {
|
|
33
|
+
/** Function name */
|
|
34
|
+
name: string;
|
|
35
|
+
/** Invoke the function */
|
|
36
|
+
invoke(args?: Record<string, unknown>): Promise<SKFunctionResult>;
|
|
37
|
+
}
|
|
38
|
+
/** Matches SK's FunctionResult */
|
|
39
|
+
export interface SKFunctionResult {
|
|
40
|
+
value?: unknown;
|
|
41
|
+
toString?(): string;
|
|
42
|
+
metadata?: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
/** Planner result */
|
|
45
|
+
export interface SKPlanResult {
|
|
46
|
+
result?: string;
|
|
47
|
+
steps?: Array<{
|
|
48
|
+
plugin: string;
|
|
49
|
+
function: string;
|
|
50
|
+
result?: string;
|
|
51
|
+
}>;
|
|
52
|
+
error?: string;
|
|
53
|
+
}
|
|
54
|
+
export declare class SemanticKernelAdapter extends BaseAdapter {
|
|
55
|
+
readonly name = "semantic-kernel";
|
|
56
|
+
readonly version = "1.0.0";
|
|
57
|
+
private entries;
|
|
58
|
+
get capabilities(): AdapterCapabilities;
|
|
59
|
+
registerKernel(agentId: string, kernel: SKKernel, metadata?: {
|
|
60
|
+
description?: string;
|
|
61
|
+
capabilities?: string[];
|
|
62
|
+
}): void;
|
|
63
|
+
registerFunction(agentId: string, fn: SKFunction, metadata?: {
|
|
64
|
+
description?: string;
|
|
65
|
+
capabilities?: string[];
|
|
66
|
+
}): void;
|
|
67
|
+
executeAgent(agentId: string, payload: AgentPayload, context: AgentContext): Promise<AgentResult>;
|
|
68
|
+
private executeSKFunction;
|
|
69
|
+
private executeKernel;
|
|
70
|
+
private buildArgs;
|
|
71
|
+
private normalizeResult;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=semantic-kernel-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-kernel-adapter.d.ts","sourceRoot":"","sources":["../../adapters/semantic-kernel-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAEV,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAMhC,oCAAoC;AACpC,MAAM,WAAW,QAAQ;IACvB,0CAA0C;IAC1C,cAAc,CAAC,CACb,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7B,+BAA+B;IAC/B,YAAY,CAAC,CACX,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7B,oBAAoB;IACpB,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAClF;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACnE;AAED,kCAAkC;AAClC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,IAAI,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,qBAAqB;AACrB,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,OAAO,WAAW;IAC3B,OAAO,CAAC,OAAO,CAAmC;IAElD,IAAI,YAAY,IAAI,mBAAmB,CAStC;IAID,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,EAChB,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC3D,IAAI;IAWP,gBAAgB,CACd,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,UAAU,EACd,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC3D,IAAI;IAaD,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;YA+BT,iBAAiB;YAUjB,aAAa;IAwC3B,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,eAAe;CAMxB"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Semantic Kernel Adapter
|
|
4
|
+
*
|
|
5
|
+
* Integrates Microsoft Semantic Kernel agents and functions with the
|
|
6
|
+
* SwarmOrchestrator. Semantic Kernel is Microsoft's enterprise SDK for
|
|
7
|
+
* building AI-powered apps with plugins, planners, and memory.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const adapter = new SemanticKernelAdapter();
|
|
11
|
+
* adapter.registerKernel("planner", myKernel);
|
|
12
|
+
* adapter.registerFunction("summarise", mySKFunction);
|
|
13
|
+
* await registry.addAdapter(adapter);
|
|
14
|
+
*
|
|
15
|
+
* Then in the orchestrator:
|
|
16
|
+
* delegateTask({ targetAgent: "semantic-kernel:planner", ... })
|
|
17
|
+
*
|
|
18
|
+
* @module SemanticKernelAdapter
|
|
19
|
+
* @version 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.SemanticKernelAdapter = void 0;
|
|
23
|
+
const base_adapter_1 = require("./base-adapter");
|
|
24
|
+
class SemanticKernelAdapter extends base_adapter_1.BaseAdapter {
|
|
25
|
+
name = 'semantic-kernel';
|
|
26
|
+
version = '1.0.0';
|
|
27
|
+
entries = new Map();
|
|
28
|
+
get capabilities() {
|
|
29
|
+
return {
|
|
30
|
+
streaming: false,
|
|
31
|
+
parallel: true,
|
|
32
|
+
bidirectional: false,
|
|
33
|
+
discovery: true,
|
|
34
|
+
authentication: true,
|
|
35
|
+
statefulSessions: true,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// --- Registration ---
|
|
39
|
+
registerKernel(agentId, kernel, metadata) {
|
|
40
|
+
this.entries.set(agentId, { type: 'kernel', kernel });
|
|
41
|
+
this.registerLocalAgent({
|
|
42
|
+
id: agentId,
|
|
43
|
+
name: agentId,
|
|
44
|
+
description: metadata?.description ?? `Semantic Kernel: ${agentId}`,
|
|
45
|
+
capabilities: metadata?.capabilities ?? ['planner', 'plugins', 'prompt'],
|
|
46
|
+
status: 'available',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
registerFunction(agentId, fn, metadata) {
|
|
50
|
+
this.entries.set(agentId, { type: 'function', fn });
|
|
51
|
+
this.registerLocalAgent({
|
|
52
|
+
id: agentId,
|
|
53
|
+
name: fn.name || agentId,
|
|
54
|
+
description: metadata?.description ?? `SK Function: ${fn.name || agentId}`,
|
|
55
|
+
capabilities: metadata?.capabilities ?? ['function'],
|
|
56
|
+
status: 'available',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
// --- Execution ---
|
|
60
|
+
async executeAgent(agentId, payload, context) {
|
|
61
|
+
this.ensureReady();
|
|
62
|
+
const entry = this.entries.get(agentId);
|
|
63
|
+
if (!entry) {
|
|
64
|
+
return this.errorResult('AGENT_NOT_FOUND', `Semantic Kernel entry "${agentId}" is not registered`, false);
|
|
65
|
+
}
|
|
66
|
+
const startTime = Date.now();
|
|
67
|
+
try {
|
|
68
|
+
if (entry.type === 'function') {
|
|
69
|
+
return await this.executeSKFunction(entry.fn, payload, startTime);
|
|
70
|
+
}
|
|
71
|
+
return await this.executeKernel(entry.kernel, payload, startTime);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
return this.errorResult('SK_ERROR', error instanceof Error ? error.message : 'Semantic Kernel execution failed', true, error);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// --- Private helpers ---
|
|
78
|
+
async executeSKFunction(fn, payload, startTime) {
|
|
79
|
+
const args = this.buildArgs(payload);
|
|
80
|
+
const result = await fn.invoke(args);
|
|
81
|
+
return this.successResult(this.normalizeResult(result), Date.now() - startTime);
|
|
82
|
+
}
|
|
83
|
+
async executeKernel(kernel, payload, startTime) {
|
|
84
|
+
const goal = payload.handoff?.instruction || JSON.stringify(payload.params);
|
|
85
|
+
const args = this.buildArgs(payload);
|
|
86
|
+
// Strategy 1: Use planner if available and we have a goal
|
|
87
|
+
if (kernel.runPlan && payload.handoff?.instruction) {
|
|
88
|
+
const plan = await kernel.runPlan(goal, args);
|
|
89
|
+
return this.successResult({
|
|
90
|
+
response: plan.result,
|
|
91
|
+
steps: plan.steps,
|
|
92
|
+
error: plan.error,
|
|
93
|
+
}, Date.now() - startTime);
|
|
94
|
+
}
|
|
95
|
+
// Strategy 2: Invoke a named function
|
|
96
|
+
if (kernel.invokeFunction && payload.params?.functionName) {
|
|
97
|
+
const result = await kernel.invokeFunction(String(payload.params.functionName), args);
|
|
98
|
+
return this.successResult(this.normalizeResult(result), Date.now() - startTime);
|
|
99
|
+
}
|
|
100
|
+
// Strategy 3: Invoke a prompt directly
|
|
101
|
+
if (kernel.invokePrompt) {
|
|
102
|
+
const result = await kernel.invokePrompt(goal, args);
|
|
103
|
+
return this.successResult(this.normalizeResult(result), Date.now() - startTime);
|
|
104
|
+
}
|
|
105
|
+
return this.errorResult('NO_METHOD', 'Kernel has no callable method (runPlan, invokeFunction, invokePrompt)', false);
|
|
106
|
+
}
|
|
107
|
+
buildArgs(payload) {
|
|
108
|
+
const args = { ...payload.params };
|
|
109
|
+
if (payload.handoff?.instruction)
|
|
110
|
+
args.input = payload.handoff.instruction;
|
|
111
|
+
if (payload.blackboardSnapshot)
|
|
112
|
+
args.context = payload.blackboardSnapshot;
|
|
113
|
+
return args;
|
|
114
|
+
}
|
|
115
|
+
normalizeResult(result) {
|
|
116
|
+
return {
|
|
117
|
+
response: result.value ?? result.toString?.() ?? '',
|
|
118
|
+
metadata: result.metadata,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.SemanticKernelAdapter = SemanticKernelAdapter;
|
|
123
|
+
//# sourceMappingURL=semantic-kernel-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-kernel-adapter.js","sourceRoot":"","sources":["../../adapters/semantic-kernel-adapter.ts"],"names":[],"mappings":"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"}
|