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,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AutoGen / AG2 Adapter
|
|
3
|
+
*
|
|
4
|
+
* Allows Microsoft AutoGen (AG2) agents to plug into the SwarmOrchestrator.
|
|
5
|
+
* AutoGen agents communicate via message-passing conversations, so this
|
|
6
|
+
* adapter translates the orchestrator's task payloads into AutoGen messages.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const adapter = new AutoGenAdapter();
|
|
10
|
+
* adapter.registerAgent("coder", myAutoGenAgent);
|
|
11
|
+
* adapter.registerAgent("critic", myCriticAgent);
|
|
12
|
+
* await registry.addAdapter(adapter);
|
|
13
|
+
*
|
|
14
|
+
* Then in the orchestrator:
|
|
15
|
+
* delegateTask({ targetAgent: "autogen:coder", ... })
|
|
16
|
+
*
|
|
17
|
+
* @module AutoGenAdapter
|
|
18
|
+
* @version 1.0.0
|
|
19
|
+
*/
|
|
20
|
+
import { BaseAdapter } from './base-adapter';
|
|
21
|
+
import type { AdapterCapabilities, AgentPayload, AgentContext, AgentResult } from '../types/agent-adapter';
|
|
22
|
+
/**
|
|
23
|
+
* AutoGen-compatible agent interface.
|
|
24
|
+
* Matches the core methods of AutoGen's ConversableAgent.
|
|
25
|
+
*/
|
|
26
|
+
export interface AutoGenAgent {
|
|
27
|
+
/** Agent name */
|
|
28
|
+
name: string;
|
|
29
|
+
/** Send a message and get a reply */
|
|
30
|
+
generateReply?: (messages: Array<{
|
|
31
|
+
role: string;
|
|
32
|
+
content: string;
|
|
33
|
+
name?: string;
|
|
34
|
+
}>, sender?: unknown) => Promise<string | {
|
|
35
|
+
content: string;
|
|
36
|
+
[key: string]: unknown;
|
|
37
|
+
} | null>;
|
|
38
|
+
/** Run the agent with a task (simplified interface) */
|
|
39
|
+
run?: (task: string, context?: Record<string, unknown>) => Promise<unknown>;
|
|
40
|
+
/** Initiate a chat (AutoGen 0.2+ style) */
|
|
41
|
+
initiateChat?: (recipient: unknown, message: string, config?: Record<string, unknown>) => Promise<{
|
|
42
|
+
chat_history: Array<{
|
|
43
|
+
role: string;
|
|
44
|
+
content: string;
|
|
45
|
+
}>;
|
|
46
|
+
summary?: string;
|
|
47
|
+
}>;
|
|
48
|
+
}
|
|
49
|
+
export declare class AutoGenAdapter extends BaseAdapter {
|
|
50
|
+
readonly name = "autogen";
|
|
51
|
+
readonly version = "1.0.0";
|
|
52
|
+
private agents;
|
|
53
|
+
get capabilities(): AdapterCapabilities;
|
|
54
|
+
/**
|
|
55
|
+
* Register an AutoGen agent.
|
|
56
|
+
* The agent should implement at least one of: generateReply, run, or initiateChat.
|
|
57
|
+
*/
|
|
58
|
+
registerAgent(agentId: string, agent: AutoGenAgent, metadata?: {
|
|
59
|
+
description?: string;
|
|
60
|
+
capabilities?: string[];
|
|
61
|
+
}): void;
|
|
62
|
+
executeAgent(agentId: string, payload: AgentPayload, context: AgentContext): Promise<AgentResult>;
|
|
63
|
+
private buildTaskString;
|
|
64
|
+
private buildMessages;
|
|
65
|
+
private normalizeResult;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=autogen-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autogen-adapter.d.ts","sourceRoot":"","sources":["../../adapters/autogen-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;AAEhC;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,aAAa,CAAC,EAAE,CACd,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EACjE,MAAM,CAAC,EAAE,OAAO,KACb,OAAO,CAAC,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC1E,uDAAuD;IACvD,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5E,2CAA2C;IAC3C,YAAY,CAAC,EAAE,CACb,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC;QAAE,YAAY,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5F;AAED,qBAAa,cAAe,SAAQ,WAAW;IAC7C,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,OAAO,WAAW;IAC3B,OAAO,CAAC,MAAM,CAAwC;IAEtD,IAAI,YAAY,IAAI,mBAAmB,CAStC;IAED;;;OAGG;IACH,aAAa,CACX,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,EACnB,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC3D,IAAI;IAWD,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;IAmDvB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,eAAe;CA0BxB"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AutoGen / AG2 Adapter
|
|
4
|
+
*
|
|
5
|
+
* Allows Microsoft AutoGen (AG2) agents to plug into the SwarmOrchestrator.
|
|
6
|
+
* AutoGen agents communicate via message-passing conversations, so this
|
|
7
|
+
* adapter translates the orchestrator's task payloads into AutoGen messages.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const adapter = new AutoGenAdapter();
|
|
11
|
+
* adapter.registerAgent("coder", myAutoGenAgent);
|
|
12
|
+
* adapter.registerAgent("critic", myCriticAgent);
|
|
13
|
+
* await registry.addAdapter(adapter);
|
|
14
|
+
*
|
|
15
|
+
* Then in the orchestrator:
|
|
16
|
+
* delegateTask({ targetAgent: "autogen:coder", ... })
|
|
17
|
+
*
|
|
18
|
+
* @module AutoGenAdapter
|
|
19
|
+
* @version 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.AutoGenAdapter = void 0;
|
|
23
|
+
const base_adapter_1 = require("./base-adapter");
|
|
24
|
+
class AutoGenAdapter extends base_adapter_1.BaseAdapter {
|
|
25
|
+
name = 'autogen';
|
|
26
|
+
version = '1.0.0';
|
|
27
|
+
agents = new Map();
|
|
28
|
+
get capabilities() {
|
|
29
|
+
return {
|
|
30
|
+
streaming: false,
|
|
31
|
+
parallel: true,
|
|
32
|
+
bidirectional: true,
|
|
33
|
+
discovery: true,
|
|
34
|
+
authentication: false,
|
|
35
|
+
statefulSessions: true,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Register an AutoGen agent.
|
|
40
|
+
* The agent should implement at least one of: generateReply, run, or initiateChat.
|
|
41
|
+
*/
|
|
42
|
+
registerAgent(agentId, agent, metadata) {
|
|
43
|
+
this.agents.set(agentId, agent);
|
|
44
|
+
this.registerLocalAgent({
|
|
45
|
+
id: agentId,
|
|
46
|
+
name: agent.name || agentId,
|
|
47
|
+
description: metadata?.description ?? `AutoGen agent: ${agent.name || agentId}`,
|
|
48
|
+
capabilities: metadata?.capabilities,
|
|
49
|
+
status: 'available',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async executeAgent(agentId, payload, context) {
|
|
53
|
+
this.ensureReady();
|
|
54
|
+
const agent = this.agents.get(agentId);
|
|
55
|
+
if (!agent) {
|
|
56
|
+
return this.errorResult('AGENT_NOT_FOUND', `AutoGen agent "${agentId}" is not registered`, false);
|
|
57
|
+
}
|
|
58
|
+
const startTime = Date.now();
|
|
59
|
+
try {
|
|
60
|
+
let result;
|
|
61
|
+
// Strategy 1: Use .run() if available (simplest interface)
|
|
62
|
+
if (agent.run) {
|
|
63
|
+
const task = this.buildTaskString(payload);
|
|
64
|
+
result = await agent.run(task, {
|
|
65
|
+
agentId: context.agentId,
|
|
66
|
+
taskId: context.taskId,
|
|
67
|
+
blackboard: payload.blackboardSnapshot,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// Strategy 2: Use .generateReply() with message format
|
|
71
|
+
else if (agent.generateReply) {
|
|
72
|
+
const messages = this.buildMessages(payload, context);
|
|
73
|
+
result = await agent.generateReply(messages);
|
|
74
|
+
}
|
|
75
|
+
// Strategy 3: Fallback error
|
|
76
|
+
else {
|
|
77
|
+
return this.errorResult('NO_METHOD', `AutoGen agent "${agentId}" has no callable method (run, generateReply, or initiateChat)`, false);
|
|
78
|
+
}
|
|
79
|
+
return this.normalizeResult(result, startTime);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
return this.errorResult('AUTOGEN_ERROR', error instanceof Error ? error.message : 'AutoGen execution failed', true, error);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
buildTaskString(payload) {
|
|
86
|
+
if (payload.handoff?.instruction) {
|
|
87
|
+
let task = payload.handoff.instruction;
|
|
88
|
+
if (payload.handoff.constraints?.length) {
|
|
89
|
+
task += `\n\nConstraints: ${payload.handoff.constraints.join(', ')}`;
|
|
90
|
+
}
|
|
91
|
+
if (payload.handoff.expectedOutput) {
|
|
92
|
+
task += `\n\nExpected output: ${payload.handoff.expectedOutput}`;
|
|
93
|
+
}
|
|
94
|
+
return task;
|
|
95
|
+
}
|
|
96
|
+
return JSON.stringify(payload.params);
|
|
97
|
+
}
|
|
98
|
+
buildMessages(payload, context) {
|
|
99
|
+
const messages = [];
|
|
100
|
+
// System context
|
|
101
|
+
if (payload.blackboardSnapshot) {
|
|
102
|
+
messages.push({
|
|
103
|
+
role: 'system',
|
|
104
|
+
content: `Shared state: ${JSON.stringify(payload.blackboardSnapshot)}`,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
// The actual task
|
|
108
|
+
const taskContent = payload.handoff?.instruction || JSON.stringify(payload.params);
|
|
109
|
+
messages.push({
|
|
110
|
+
role: 'user',
|
|
111
|
+
content: taskContent,
|
|
112
|
+
name: context.agentId,
|
|
113
|
+
});
|
|
114
|
+
return messages;
|
|
115
|
+
}
|
|
116
|
+
normalizeResult(result, startTime) {
|
|
117
|
+
if (result === null || result === undefined) {
|
|
118
|
+
return this.successResult({ response: 'No response generated' }, Date.now() - startTime);
|
|
119
|
+
}
|
|
120
|
+
if (typeof result === 'string') {
|
|
121
|
+
return this.successResult({ response: result }, Date.now() - startTime);
|
|
122
|
+
}
|
|
123
|
+
if (typeof result === 'object') {
|
|
124
|
+
const obj = result;
|
|
125
|
+
// AutoGen chat result format
|
|
126
|
+
if ('chat_history' in obj) {
|
|
127
|
+
return this.successResult({
|
|
128
|
+
response: obj.summary || obj.chat_history,
|
|
129
|
+
chatHistory: obj.chat_history,
|
|
130
|
+
}, Date.now() - startTime);
|
|
131
|
+
}
|
|
132
|
+
// generateReply format
|
|
133
|
+
if ('content' in obj) {
|
|
134
|
+
return this.successResult(obj.content, Date.now() - startTime);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return this.successResult(result, Date.now() - startTime);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.AutoGenAdapter = AutoGenAdapter;
|
|
141
|
+
//# sourceMappingURL=autogen-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autogen-adapter.js","sourceRoot":"","sources":["../../adapters/autogen-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Adapter - Abstract base class for all agent system adapters
|
|
3
|
+
*
|
|
4
|
+
* Provides sensible defaults so adapter authors only need to implement
|
|
5
|
+
* the core `executeAgent` method. Everything else works out of the box.
|
|
6
|
+
*
|
|
7
|
+
* @module BaseAdapter
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
import type { IAgentAdapter, AdapterConfig, AdapterCapabilities, AgentPayload, AgentContext, AgentResult, AgentInfo } from '../types/agent-adapter';
|
|
11
|
+
export declare abstract class BaseAdapter implements IAgentAdapter {
|
|
12
|
+
abstract readonly name: string;
|
|
13
|
+
abstract readonly version: string;
|
|
14
|
+
protected config: AdapterConfig;
|
|
15
|
+
protected ready: boolean;
|
|
16
|
+
protected registeredAgents: Map<string, AgentInfo>;
|
|
17
|
+
/** Override to declare what your adapter supports */
|
|
18
|
+
get capabilities(): AdapterCapabilities;
|
|
19
|
+
initialize(config: AdapterConfig): Promise<void>;
|
|
20
|
+
shutdown(): Promise<void>;
|
|
21
|
+
isReady(): boolean;
|
|
22
|
+
abstract executeAgent(agentId: string, payload: AgentPayload, context: AgentContext): Promise<AgentResult>;
|
|
23
|
+
listAgents(): Promise<AgentInfo[]>;
|
|
24
|
+
isAgentAvailable(agentId: string): Promise<boolean>;
|
|
25
|
+
healthCheck(): Promise<{
|
|
26
|
+
healthy: boolean;
|
|
27
|
+
details?: string;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Register an agent as available through this adapter.
|
|
31
|
+
* Adapters call this during init or discovery to declare their agents.
|
|
32
|
+
*/
|
|
33
|
+
protected registerLocalAgent(agent: Omit<AgentInfo, 'adapter'>): void;
|
|
34
|
+
/**
|
|
35
|
+
* Remove an agent from the registry
|
|
36
|
+
*/
|
|
37
|
+
protected unregisterAgent(agentId: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Create a standard success result
|
|
40
|
+
*/
|
|
41
|
+
protected successResult(data: unknown, executionTimeMs?: number): AgentResult;
|
|
42
|
+
/**
|
|
43
|
+
* Create a standard error result
|
|
44
|
+
*/
|
|
45
|
+
protected errorResult(code: string, message: string, recoverable?: boolean, nativeError?: unknown): AgentResult;
|
|
46
|
+
/**
|
|
47
|
+
* Ensures the adapter is initialized before use
|
|
48
|
+
*/
|
|
49
|
+
protected ensureReady(): void;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=base-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../adapters/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,EACV,MAAM,wBAAwB,CAAC;AAEhC,8BAAsB,WAAY,YAAW,aAAa;IACxD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAElC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAM;IACrC,SAAS,CAAC,KAAK,UAAS;IACxB,SAAS,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAa;IAE/D,qDAAqD;IACrD,IAAI,YAAY,IAAI,mBAAmB,CAStC;IAIK,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,OAAO,IAAI,OAAO;IAMlB,QAAQ,CAAC,YAAY,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;IAIjB,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIlC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMnD,WAAW,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAMpE;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,IAAI;IAIrE;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIhD;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,WAAW;IAW7E;;OAEG;IACH,SAAS,CAAC,WAAW,CACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,WAAW,UAAO,EAClB,WAAW,CAAC,EAAE,OAAO,GACpB,WAAW;IAad;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;CAK9B"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base Adapter - Abstract base class for all agent system adapters
|
|
4
|
+
*
|
|
5
|
+
* Provides sensible defaults so adapter authors only need to implement
|
|
6
|
+
* the core `executeAgent` method. Everything else works out of the box.
|
|
7
|
+
*
|
|
8
|
+
* @module BaseAdapter
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.BaseAdapter = void 0;
|
|
13
|
+
class BaseAdapter {
|
|
14
|
+
config = {};
|
|
15
|
+
ready = false;
|
|
16
|
+
registeredAgents = new Map();
|
|
17
|
+
/** Override to declare what your adapter supports */
|
|
18
|
+
get capabilities() {
|
|
19
|
+
return {
|
|
20
|
+
streaming: false,
|
|
21
|
+
parallel: true,
|
|
22
|
+
bidirectional: false,
|
|
23
|
+
discovery: false,
|
|
24
|
+
authentication: false,
|
|
25
|
+
statefulSessions: false,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// --- Lifecycle ---
|
|
29
|
+
async initialize(config) {
|
|
30
|
+
this.config = config;
|
|
31
|
+
this.ready = true;
|
|
32
|
+
}
|
|
33
|
+
async shutdown() {
|
|
34
|
+
this.ready = false;
|
|
35
|
+
this.registeredAgents.clear();
|
|
36
|
+
}
|
|
37
|
+
isReady() {
|
|
38
|
+
return this.ready;
|
|
39
|
+
}
|
|
40
|
+
// --- Agent Discovery (default: use registered agents) ---
|
|
41
|
+
async listAgents() {
|
|
42
|
+
return Array.from(this.registeredAgents.values());
|
|
43
|
+
}
|
|
44
|
+
async isAgentAvailable(agentId) {
|
|
45
|
+
return this.registeredAgents.has(agentId);
|
|
46
|
+
}
|
|
47
|
+
// --- Health ---
|
|
48
|
+
async healthCheck() {
|
|
49
|
+
return { healthy: this.ready, details: this.ready ? 'Adapter is ready' : 'Adapter not initialized' };
|
|
50
|
+
}
|
|
51
|
+
// --- Helpers for subclasses ---
|
|
52
|
+
/**
|
|
53
|
+
* Register an agent as available through this adapter.
|
|
54
|
+
* Adapters call this during init or discovery to declare their agents.
|
|
55
|
+
*/
|
|
56
|
+
registerLocalAgent(agent) {
|
|
57
|
+
this.registeredAgents.set(agent.id, { ...agent, adapter: this.name });
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Remove an agent from the registry
|
|
61
|
+
*/
|
|
62
|
+
unregisterAgent(agentId) {
|
|
63
|
+
this.registeredAgents.delete(agentId);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Create a standard success result
|
|
67
|
+
*/
|
|
68
|
+
successResult(data, executionTimeMs) {
|
|
69
|
+
return {
|
|
70
|
+
success: true,
|
|
71
|
+
data,
|
|
72
|
+
metadata: {
|
|
73
|
+
adapter: this.name,
|
|
74
|
+
executionTimeMs,
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create a standard error result
|
|
80
|
+
*/
|
|
81
|
+
errorResult(code, message, recoverable = true, nativeError) {
|
|
82
|
+
return {
|
|
83
|
+
success: false,
|
|
84
|
+
error: {
|
|
85
|
+
code,
|
|
86
|
+
message,
|
|
87
|
+
recoverable,
|
|
88
|
+
nativeError,
|
|
89
|
+
},
|
|
90
|
+
metadata: { adapter: this.name },
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Ensures the adapter is initialized before use
|
|
95
|
+
*/
|
|
96
|
+
ensureReady() {
|
|
97
|
+
if (!this.ready) {
|
|
98
|
+
throw new Error(`Adapter "${this.name}" is not initialized. Call initialize() first.`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.BaseAdapter = BaseAdapter;
|
|
103
|
+
//# sourceMappingURL=base-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../../adapters/base-adapter.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAYH,MAAsB,WAAW;IAIrB,MAAM,GAAkB,EAAE,CAAC;IAC3B,KAAK,GAAG,KAAK,CAAC;IACd,gBAAgB,GAA2B,IAAI,GAAG,EAAE,CAAC;IAE/D,qDAAqD;IACrD,IAAI,YAAY;QACd,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,IAAI;YACd,aAAa,EAAE,KAAK;YACpB,SAAS,EAAE,KAAK;YAChB,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,KAAK;SACxB,CAAC;IACJ,CAAC;IAED,oBAAoB;IAEpB,KAAK,CAAC,UAAU,CAAC,MAAqB;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAUD,2DAA2D;IAE3D,KAAK,CAAC,UAAU;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,iBAAiB;IAEjB,KAAK,CAAC,WAAW;QACf,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC;IACvG,CAAC;IAED,iCAAiC;IAEjC;;;OAGG;IACO,kBAAkB,CAAC,KAAiC;QAC5D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACO,eAAe,CAAC,OAAe;QACvC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACO,aAAa,CAAC,IAAa,EAAE,eAAwB;QAC7D,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI;YACJ,QAAQ,EAAE;gBACR,OAAO,EAAE,IAAI,CAAC,IAAI;gBAClB,eAAe;aAChB;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,WAAW,CACnB,IAAY,EACZ,OAAe,EACf,WAAW,GAAG,IAAI,EAClB,WAAqB;QAErB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI;gBACJ,OAAO;gBACP,WAAW;gBACX,WAAW;aACZ;YACD,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;SACjC,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,WAAW;QACnB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,gDAAgD,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;CACF;AAxHD,kCAwHC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CrewAI Adapter
|
|
3
|
+
*
|
|
4
|
+
* Allows CrewAI agents and crews to plug into the SwarmOrchestrator.
|
|
5
|
+
* CrewAI uses a role-based agent model with tools, so this adapter
|
|
6
|
+
* maps task payloads to CrewAI's Task/Agent execution model.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const adapter = new CrewAIAdapter();
|
|
10
|
+
* adapter.registerAgent("researcher", myCrewAIAgent);
|
|
11
|
+
* adapter.registerCrew("analysis_crew", myCrew);
|
|
12
|
+
* await registry.addAdapter(adapter);
|
|
13
|
+
*
|
|
14
|
+
* Then in the orchestrator:
|
|
15
|
+
* delegateTask({ targetAgent: "crewai:researcher", ... })
|
|
16
|
+
* spawnParallel({ agentType: "crewai:analysis_crew", ... })
|
|
17
|
+
*
|
|
18
|
+
* @module CrewAIAdapter
|
|
19
|
+
* @version 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
import { BaseAdapter } from './base-adapter';
|
|
22
|
+
import type { AdapterCapabilities, AgentPayload, AgentContext, AgentResult } from '../types/agent-adapter';
|
|
23
|
+
/**
|
|
24
|
+
* CrewAI-compatible agent interface
|
|
25
|
+
*/
|
|
26
|
+
export interface CrewAIAgent {
|
|
27
|
+
role: string;
|
|
28
|
+
goal: string;
|
|
29
|
+
backstory?: string;
|
|
30
|
+
/** Execute a task with this agent */
|
|
31
|
+
execute?: (task: string, context?: Record<string, unknown>) => Promise<string>;
|
|
32
|
+
/** Tools available to this agent */
|
|
33
|
+
tools?: Array<{
|
|
34
|
+
name: string;
|
|
35
|
+
description: string;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* CrewAI-compatible crew interface
|
|
40
|
+
*/
|
|
41
|
+
export interface CrewAICrew {
|
|
42
|
+
agents: CrewAIAgent[];
|
|
43
|
+
/** Kick off the crew with a set of inputs */
|
|
44
|
+
kickoff?: (inputs?: Record<string, unknown>) => Promise<unknown>;
|
|
45
|
+
/** Run with a specific task description */
|
|
46
|
+
run?: (task: string) => Promise<unknown>;
|
|
47
|
+
}
|
|
48
|
+
export declare class CrewAIAdapter extends BaseAdapter {
|
|
49
|
+
readonly name = "crewai";
|
|
50
|
+
readonly version = "1.0.0";
|
|
51
|
+
private agents;
|
|
52
|
+
private crews;
|
|
53
|
+
get capabilities(): AdapterCapabilities;
|
|
54
|
+
/**
|
|
55
|
+
* Register a single CrewAI agent
|
|
56
|
+
*/
|
|
57
|
+
registerAgent(agentId: string, agent: CrewAIAgent, metadata?: {
|
|
58
|
+
description?: string;
|
|
59
|
+
capabilities?: string[];
|
|
60
|
+
}): void;
|
|
61
|
+
/**
|
|
62
|
+
* Register an entire CrewAI crew as a single callable unit
|
|
63
|
+
*/
|
|
64
|
+
registerCrew(crewId: string, crew: CrewAICrew, metadata?: {
|
|
65
|
+
description?: string;
|
|
66
|
+
}): void;
|
|
67
|
+
executeAgent(agentId: string, payload: AgentPayload, context: AgentContext): Promise<AgentResult>;
|
|
68
|
+
private executeSingleAgent;
|
|
69
|
+
private executeCrew;
|
|
70
|
+
private buildTask;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=crewai-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crewai-adapter.d.ts","sourceRoot":"","sources":["../../adapters/crewai-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAEV,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,oCAAoC;IACpC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,2CAA2C;IAC3C,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED,qBAAa,aAAc,SAAQ,WAAW;IAC5C,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,OAAO,WAAW;IAC3B,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,KAAK,CAAsC;IAEnD,IAAI,YAAY,IAAI,mBAAmB,CAStC;IAED;;OAEG;IACH,aAAa,CACX,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,WAAW,EAClB,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAC3D,IAAI;IAWP;;OAEG;IACH,YAAY,CACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,EAChB,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAClC,IAAI;IAWD,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC;YAwBT,kBAAkB;YAkClB,WAAW;IAqCzB,OAAO,CAAC,SAAS;CAgBlB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CrewAI Adapter
|
|
4
|
+
*
|
|
5
|
+
* Allows CrewAI agents and crews to plug into the SwarmOrchestrator.
|
|
6
|
+
* CrewAI uses a role-based agent model with tools, so this adapter
|
|
7
|
+
* maps task payloads to CrewAI's Task/Agent execution model.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const adapter = new CrewAIAdapter();
|
|
11
|
+
* adapter.registerAgent("researcher", myCrewAIAgent);
|
|
12
|
+
* adapter.registerCrew("analysis_crew", myCrew);
|
|
13
|
+
* await registry.addAdapter(adapter);
|
|
14
|
+
*
|
|
15
|
+
* Then in the orchestrator:
|
|
16
|
+
* delegateTask({ targetAgent: "crewai:researcher", ... })
|
|
17
|
+
* spawnParallel({ agentType: "crewai:analysis_crew", ... })
|
|
18
|
+
*
|
|
19
|
+
* @module CrewAIAdapter
|
|
20
|
+
* @version 1.0.0
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.CrewAIAdapter = void 0;
|
|
24
|
+
const base_adapter_1 = require("./base-adapter");
|
|
25
|
+
class CrewAIAdapter extends base_adapter_1.BaseAdapter {
|
|
26
|
+
name = 'crewai';
|
|
27
|
+
version = '1.0.0';
|
|
28
|
+
agents = new Map();
|
|
29
|
+
crews = new Map();
|
|
30
|
+
get capabilities() {
|
|
31
|
+
return {
|
|
32
|
+
streaming: false,
|
|
33
|
+
parallel: true,
|
|
34
|
+
bidirectional: false,
|
|
35
|
+
discovery: true,
|
|
36
|
+
authentication: false,
|
|
37
|
+
statefulSessions: false,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Register a single CrewAI agent
|
|
42
|
+
*/
|
|
43
|
+
registerAgent(agentId, agent, metadata) {
|
|
44
|
+
this.agents.set(agentId, agent);
|
|
45
|
+
this.registerLocalAgent({
|
|
46
|
+
id: agentId,
|
|
47
|
+
name: agent.role,
|
|
48
|
+
description: metadata?.description ?? agent.goal,
|
|
49
|
+
capabilities: metadata?.capabilities ?? agent.tools?.map(t => t.name),
|
|
50
|
+
status: 'available',
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Register an entire CrewAI crew as a single callable unit
|
|
55
|
+
*/
|
|
56
|
+
registerCrew(crewId, crew, metadata) {
|
|
57
|
+
this.crews.set(crewId, crew);
|
|
58
|
+
this.registerLocalAgent({
|
|
59
|
+
id: crewId,
|
|
60
|
+
name: crewId,
|
|
61
|
+
description: metadata?.description ?? `CrewAI crew with ${crew.agents.length} agents`,
|
|
62
|
+
capabilities: crew.agents.map(a => a.role),
|
|
63
|
+
status: 'available',
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async executeAgent(agentId, payload, context) {
|
|
67
|
+
this.ensureReady();
|
|
68
|
+
const startTime = Date.now();
|
|
69
|
+
// Check if it's a crew first
|
|
70
|
+
const crew = this.crews.get(agentId);
|
|
71
|
+
if (crew) {
|
|
72
|
+
return this.executeCrew(crew, payload, startTime);
|
|
73
|
+
}
|
|
74
|
+
// Then check individual agents
|
|
75
|
+
const agent = this.agents.get(agentId);
|
|
76
|
+
if (!agent) {
|
|
77
|
+
return this.errorResult('AGENT_NOT_FOUND', `CrewAI agent/crew "${agentId}" is not registered`, false);
|
|
78
|
+
}
|
|
79
|
+
return this.executeSingleAgent(agent, payload, context, startTime);
|
|
80
|
+
}
|
|
81
|
+
async executeSingleAgent(agent, payload, context, startTime) {
|
|
82
|
+
try {
|
|
83
|
+
if (!agent.execute) {
|
|
84
|
+
return this.errorResult('NO_EXECUTE', `CrewAI agent "${agent.role}" has no execute method`, false);
|
|
85
|
+
}
|
|
86
|
+
const task = this.buildTask(payload);
|
|
87
|
+
const taskContext = {
|
|
88
|
+
agentId: context.agentId,
|
|
89
|
+
taskId: context.taskId,
|
|
90
|
+
...(payload.blackboardSnapshot ? { shared_state: payload.blackboardSnapshot } : {}),
|
|
91
|
+
};
|
|
92
|
+
const result = await agent.execute(task, taskContext);
|
|
93
|
+
return this.successResult({
|
|
94
|
+
response: result,
|
|
95
|
+
agentRole: agent.role,
|
|
96
|
+
}, Date.now() - startTime);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return this.errorResult('CREWAI_ERROR', error instanceof Error ? error.message : 'CrewAI agent execution failed', true, error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async executeCrew(crew, payload, startTime) {
|
|
103
|
+
try {
|
|
104
|
+
let result;
|
|
105
|
+
if (crew.kickoff) {
|
|
106
|
+
const inputs = {
|
|
107
|
+
...payload.params,
|
|
108
|
+
};
|
|
109
|
+
if (payload.handoff) {
|
|
110
|
+
inputs.task = payload.handoff.instruction;
|
|
111
|
+
inputs.context = payload.handoff.context;
|
|
112
|
+
}
|
|
113
|
+
result = await crew.kickoff(inputs);
|
|
114
|
+
}
|
|
115
|
+
else if (crew.run) {
|
|
116
|
+
result = await crew.run(this.buildTask(payload));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
return this.errorResult('NO_METHOD', 'CrewAI crew has no kickoff or run method', false);
|
|
120
|
+
}
|
|
121
|
+
return this.successResult({
|
|
122
|
+
crewResult: result,
|
|
123
|
+
agentCount: crew.agents.length,
|
|
124
|
+
}, Date.now() - startTime);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
return this.errorResult('CREWAI_ERROR', error instanceof Error ? error.message : 'CrewAI crew execution failed', true, error);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
buildTask(payload) {
|
|
131
|
+
if (payload.handoff?.instruction) {
|
|
132
|
+
let task = payload.handoff.instruction;
|
|
133
|
+
if (payload.handoff.constraints?.length) {
|
|
134
|
+
task += `\n\nConstraints:\n${payload.handoff.constraints.map(c => `- ${c}`).join('\n')}`;
|
|
135
|
+
}
|
|
136
|
+
if (payload.handoff.expectedOutput) {
|
|
137
|
+
task += `\n\nExpected Output: ${payload.handoff.expectedOutput}`;
|
|
138
|
+
}
|
|
139
|
+
if (payload.handoff.context) {
|
|
140
|
+
task += `\n\nContext: ${JSON.stringify(payload.handoff.context)}`;
|
|
141
|
+
}
|
|
142
|
+
return task;
|
|
143
|
+
}
|
|
144
|
+
return JSON.stringify(payload.params);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
exports.CrewAIAdapter = CrewAIAdapter;
|
|
148
|
+
//# sourceMappingURL=crewai-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crewai-adapter.js","sourceRoot":"","sources":["../../adapters/crewai-adapter.ts"],"names":[],"mappings":"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"}
|