crewx 0.2.4-dev.4 → 0.2.4-dev.6
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/README.md +41 -0
- package/crewx.yaml +442 -48
- package/dist/agent.types.d.ts +26 -1
- package/dist/agent.types.js.map +1 -1
- package/dist/cli/agent.handler.d.ts +2 -0
- package/dist/cli/agent.handler.js +140 -0
- package/dist/cli/agent.handler.js.map +1 -0
- package/dist/cli/cli.handler.js +4 -0
- package/dist/cli/cli.handler.js.map +1 -1
- package/dist/cli-options.js +3 -0
- package/dist/cli-options.js.map +1 -1
- package/dist/crewx.tool.d.ts +22 -113
- package/dist/crewx.tool.js +147 -3
- package/dist/crewx.tool.js.map +1 -1
- package/dist/providers/codex.provider.js +2 -2
- package/dist/providers/codex.provider.js.map +1 -1
- package/dist/services/agent-loader.service.d.ts +2 -0
- package/dist/services/agent-loader.service.js +45 -0
- package/dist/services/agent-loader.service.js.map +1 -1
- package/dist/services/config-validator.service.js +13 -1
- package/dist/services/config-validator.service.js.map +1 -1
- package/dist/services/help.service.js +4 -0
- package/dist/services/help.service.js.map +1 -1
- package/dist/services/remote-agent.service.d.ts +35 -8
- package/dist/services/remote-agent.service.js +171 -36
- package/dist/services/remote-agent.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/guides/agent-cli-quickstart.md +41 -0
- package/package.json +1 -1
|
@@ -14,67 +14,202 @@ exports.RemoteAgentService = void 0;
|
|
|
14
14
|
const common_1 = require("@nestjs/common");
|
|
15
15
|
const agent_loader_service_1 = require("./agent-loader.service");
|
|
16
16
|
const config_service_1 = require("./config.service");
|
|
17
|
+
const mcp_client_service_1 = require("./mcp-client.service");
|
|
18
|
+
const error_utils_1 = require("../utils/error-utils");
|
|
17
19
|
let RemoteAgentService = RemoteAgentService_1 = class RemoteAgentService {
|
|
18
|
-
constructor(agentLoaderService, configService) {
|
|
20
|
+
constructor(agentLoaderService, configService, mcpClientService) {
|
|
19
21
|
this.agentLoaderService = agentLoaderService;
|
|
20
22
|
this.configService = configService;
|
|
23
|
+
this.mcpClientService = mcpClientService;
|
|
21
24
|
this.logger = new common_1.Logger(RemoteAgentService_1.name);
|
|
22
25
|
}
|
|
23
|
-
normalizeProviderName(provider) {
|
|
24
|
-
if (Array.isArray(provider)) {
|
|
25
|
-
return provider.find((id) => typeof id === 'string' && id.startsWith('remote/')) || null;
|
|
26
|
-
}
|
|
27
|
-
if (typeof provider === 'string' && provider.startsWith('remote/')) {
|
|
28
|
-
return provider;
|
|
29
|
-
}
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
resolveRemoteProviderConfig(providerName) {
|
|
33
|
-
const remoteProviders = this.configService.getRemoteProviders();
|
|
34
|
-
const identifier = providerName.includes('/') ? providerName.split('/')[1] : providerName;
|
|
35
|
-
return remoteProviders.find((provider) => provider.id === identifier);
|
|
36
|
-
}
|
|
37
|
-
detectTransport(location) {
|
|
38
|
-
if (location.startsWith('http://') || location.startsWith('https://')) {
|
|
39
|
-
return 'http';
|
|
40
|
-
}
|
|
41
|
-
return 'file';
|
|
42
|
-
}
|
|
43
26
|
async getRemoteAgents() {
|
|
44
27
|
const allAgents = await this.agentLoaderService.getAllAgents();
|
|
45
28
|
const descriptors = [];
|
|
46
29
|
for (const agent of allAgents) {
|
|
47
|
-
const
|
|
48
|
-
if (!
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
const providerConfig = this.resolveRemoteProviderConfig(providerName);
|
|
52
|
-
if (!providerConfig) {
|
|
53
|
-
this.logger.warn(`Remote provider configuration not found for '${providerName}'`);
|
|
30
|
+
const remoteInfo = this.resolveRemoteInfo(agent);
|
|
31
|
+
if (!remoteInfo) {
|
|
54
32
|
continue;
|
|
55
33
|
}
|
|
34
|
+
const providerConfig = this.resolveRemoteProviderConfig(agent);
|
|
56
35
|
descriptors.push({
|
|
57
36
|
agent,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
location: providerConfig.location,
|
|
37
|
+
remote: remoteInfo,
|
|
38
|
+
providerConfig,
|
|
61
39
|
});
|
|
62
40
|
}
|
|
63
41
|
return descriptors;
|
|
64
42
|
}
|
|
65
43
|
async getRemoteAgent(agentId) {
|
|
66
|
-
const
|
|
67
|
-
return
|
|
44
|
+
const agents = await this.getRemoteAgents();
|
|
45
|
+
return agents.find((descriptor) => descriptor.agent.id === agentId);
|
|
68
46
|
}
|
|
69
47
|
async isRemoteAgent(agentId) {
|
|
70
|
-
|
|
71
|
-
|
|
48
|
+
return Boolean(await this.getRemoteAgent(agentId));
|
|
49
|
+
}
|
|
50
|
+
async queryRemoteAgent(agent, params) {
|
|
51
|
+
const remote = this.ensureRemote(agent);
|
|
52
|
+
const toolName = remote.tools?.query ?? 'crewx_queryAgent';
|
|
53
|
+
const remoteAgentId = remote.agentId ?? agent.id;
|
|
54
|
+
const payload = {
|
|
55
|
+
agentId: remoteAgentId,
|
|
56
|
+
query: params.query,
|
|
57
|
+
};
|
|
58
|
+
if (params.context) {
|
|
59
|
+
payload.context = params.context;
|
|
60
|
+
}
|
|
61
|
+
if (params.model) {
|
|
62
|
+
payload.model = params.model;
|
|
63
|
+
}
|
|
64
|
+
if (params.platform) {
|
|
65
|
+
payload.platform = params.platform;
|
|
66
|
+
}
|
|
67
|
+
if (params.messages && params.messages.length > 0) {
|
|
68
|
+
payload.messages = params.messages;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const result = await this.callRemoteTool(remote, toolName, payload);
|
|
72
|
+
return this.normalizeRemoteResponse(result);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
this.logger.error(`Remote query failed for agent ${agent.id}: ${(0, error_utils_1.getErrorMessage)(error)}`);
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async executeRemoteAgent(agent, params) {
|
|
80
|
+
const remote = this.ensureRemote(agent);
|
|
81
|
+
const toolName = remote.tools?.execute ?? 'crewx_executeAgent';
|
|
82
|
+
const remoteAgentId = remote.agentId ?? agent.id;
|
|
83
|
+
const payload = {
|
|
84
|
+
agentId: remoteAgentId,
|
|
85
|
+
task: params.task,
|
|
86
|
+
};
|
|
87
|
+
if (params.context) {
|
|
88
|
+
payload.context = params.context;
|
|
89
|
+
}
|
|
90
|
+
if (params.model) {
|
|
91
|
+
payload.model = params.model;
|
|
92
|
+
}
|
|
93
|
+
if (params.platform) {
|
|
94
|
+
payload.platform = params.platform;
|
|
95
|
+
}
|
|
96
|
+
if (params.messages && params.messages.length > 0) {
|
|
97
|
+
payload.messages = params.messages;
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const result = await this.callRemoteTool(remote, toolName, payload);
|
|
101
|
+
return this.normalizeRemoteResponse(result);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
this.logger.error(`Remote execute failed for agent ${agent.id}: ${(0, error_utils_1.getErrorMessage)(error)}`);
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
resolveRemoteInfo(agent) {
|
|
109
|
+
if (agent.remote?.type === 'mcp-http') {
|
|
110
|
+
return agent.remote;
|
|
111
|
+
}
|
|
112
|
+
const providerConfig = this.resolveRemoteProviderConfig(agent);
|
|
113
|
+
if (!providerConfig || !providerConfig.location.startsWith('http')) {
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
const authHeader = providerConfig.auth?.token;
|
|
117
|
+
return {
|
|
118
|
+
type: 'mcp-http',
|
|
119
|
+
url: this.normalizeRemoteUrl(providerConfig.location),
|
|
120
|
+
apiKey: authHeader,
|
|
121
|
+
agentId: providerConfig.external_agent_id,
|
|
122
|
+
timeoutMs: providerConfig.timeout?.query ?? providerConfig.timeout?.execute,
|
|
123
|
+
tools: {
|
|
124
|
+
query: 'crewx_queryAgent',
|
|
125
|
+
execute: 'crewx_executeAgent',
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
resolveRemoteProviderConfig(agent) {
|
|
130
|
+
const providerName = this.normalizeProviderName(agent.provider);
|
|
131
|
+
if (!providerName) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
const providers = this.configService.getRemoteProviders();
|
|
135
|
+
const identifier = providerName.includes('/')
|
|
136
|
+
? providerName.split('/')[1]
|
|
137
|
+
: providerName;
|
|
138
|
+
return providers.find((provider) => provider.id === identifier);
|
|
139
|
+
}
|
|
140
|
+
normalizeProviderName(provider) {
|
|
141
|
+
if (Array.isArray(provider)) {
|
|
142
|
+
return provider.find((id) => typeof id === 'string' && id.startsWith('remote/')) || null;
|
|
143
|
+
}
|
|
144
|
+
if (typeof provider === 'string' && provider.startsWith('remote/')) {
|
|
145
|
+
return provider;
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
ensureRemote(agent) {
|
|
150
|
+
const remoteInfo = this.resolveRemoteInfo(agent);
|
|
151
|
+
if (!remoteInfo) {
|
|
152
|
+
throw new Error(`Agent ${agent.id} is not configured as a remote MCP agent`);
|
|
153
|
+
}
|
|
154
|
+
return remoteInfo;
|
|
155
|
+
}
|
|
156
|
+
async callRemoteTool(remote, toolName, args) {
|
|
157
|
+
const options = {
|
|
158
|
+
baseUrl: this.normalizeRemoteUrl(remote.url),
|
|
159
|
+
apiKey: remote.apiKey,
|
|
160
|
+
timeoutMs: remote.timeoutMs,
|
|
161
|
+
};
|
|
162
|
+
this.logger.debug(`Calling remote MCP tool ${toolName} on ${options.baseUrl}`);
|
|
163
|
+
return this.mcpClientService.callTool(toolName, args, options);
|
|
164
|
+
}
|
|
165
|
+
normalizeRemoteResponse(result) {
|
|
166
|
+
if (!result) {
|
|
167
|
+
return {
|
|
168
|
+
success: false,
|
|
169
|
+
content: [
|
|
170
|
+
{
|
|
171
|
+
type: 'text',
|
|
172
|
+
text: 'Remote agent returned no response.',
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
if (Array.isArray(result.content) && result.content.length > 0) {
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
const fallbackContent = result.response ?? result.implementation ?? result.message ?? result.output;
|
|
181
|
+
const text = typeof fallbackContent === 'string'
|
|
182
|
+
? fallbackContent
|
|
183
|
+
: JSON.stringify(fallbackContent ?? result, null, 2);
|
|
184
|
+
return {
|
|
185
|
+
...result,
|
|
186
|
+
content: [
|
|
187
|
+
{
|
|
188
|
+
type: 'text',
|
|
189
|
+
text,
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
normalizeRemoteUrl(url) {
|
|
195
|
+
if (!url) {
|
|
196
|
+
return url;
|
|
197
|
+
}
|
|
198
|
+
const trimmed = url.trim();
|
|
199
|
+
if (!trimmed) {
|
|
200
|
+
return trimmed;
|
|
201
|
+
}
|
|
202
|
+
const withoutTrailingSlash = trimmed.replace(/\/+$/, '');
|
|
203
|
+
return withoutTrailingSlash.toLowerCase().endsWith('/mcp')
|
|
204
|
+
? withoutTrailingSlash.slice(0, -4)
|
|
205
|
+
: withoutTrailingSlash;
|
|
72
206
|
}
|
|
73
207
|
};
|
|
74
208
|
exports.RemoteAgentService = RemoteAgentService;
|
|
75
209
|
exports.RemoteAgentService = RemoteAgentService = RemoteAgentService_1 = __decorate([
|
|
76
210
|
(0, common_1.Injectable)(),
|
|
77
211
|
__metadata("design:paramtypes", [agent_loader_service_1.AgentLoaderService,
|
|
78
|
-
config_service_1.ConfigService
|
|
212
|
+
config_service_1.ConfigService,
|
|
213
|
+
mcp_client_service_1.McpClientService])
|
|
79
214
|
], RemoteAgentService);
|
|
80
215
|
//# sourceMappingURL=remote-agent.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-agent.service.js","sourceRoot":"","sources":["../../src/services/remote-agent.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,iEAA4D;AAC5D,qDAAiD;
|
|
1
|
+
{"version":3,"file":"remote-agent.service.js","sourceRoot":"","sources":["../../src/services/remote-agent.service.ts"],"names":[],"mappings":"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"}
|