@sowonai/crewx-cli 0.4.0-dev.3 → 0.4.0-dev.30
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 +40 -6
- package/dist/ai-provider.service.d.ts +7 -12
- package/dist/ai-provider.service.js +41 -19
- package/dist/ai-provider.service.js.map +1 -1
- package/dist/ai.service.d.ts +5 -45
- package/dist/ai.service.js +7 -584
- package/dist/ai.service.js.map +1 -1
- package/dist/app.module.js +67 -9
- package/dist/app.module.js.map +1 -1
- package/dist/cli/chat.handler.d.ts +2 -1
- package/dist/cli/chat.handler.js +26 -11
- package/dist/cli/chat.handler.js.map +1 -1
- package/dist/cli/doctor.handler.js +8 -40
- package/dist/cli/doctor.handler.js.map +1 -1
- package/dist/cli/execute.handler.js +8 -6
- package/dist/cli/execute.handler.js.map +1 -1
- package/dist/cli/mcp.handler.js.map +1 -1
- package/dist/cli/query.handler.js +4 -2
- package/dist/cli/query.handler.js.map +1 -1
- package/dist/cli-options.d.ts +2 -0
- package/dist/cli-options.js +10 -0
- package/dist/cli-options.js.map +1 -1
- package/dist/crewx.tool.d.ts +18 -2
- package/dist/crewx.tool.js +509 -105
- package/dist/crewx.tool.js.map +1 -1
- package/dist/providers/dynamic-provider.factory.d.ts +9 -51
- package/dist/providers/dynamic-provider.factory.js +44 -506
- package/dist/providers/dynamic-provider.factory.js.map +1 -1
- package/dist/providers/logger.adapter.d.ts +4 -0
- package/dist/providers/logger.adapter.js +56 -0
- package/dist/providers/logger.adapter.js.map +1 -0
- package/dist/services/agent-loader.service.d.ts +6 -2
- package/dist/services/agent-loader.service.js +207 -25
- package/dist/services/agent-loader.service.js.map +1 -1
- package/dist/services/config.service.d.ts +7 -27
- package/dist/services/config.service.js +80 -38
- package/dist/services/config.service.js.map +1 -1
- package/dist/services/parallel-processing.service.d.ts +17 -17
- package/dist/services/parallel-processing.service.js +259 -196
- package/dist/services/parallel-processing.service.js.map +1 -1
- package/dist/services/provider-bridge.service.d.ts +35 -0
- package/dist/services/provider-bridge.service.js +224 -0
- package/dist/services/provider-bridge.service.js.map +1 -0
- package/dist/services/remote-agent.service.d.ts +4 -7
- package/dist/services/remote-agent.service.js +41 -95
- package/dist/services/remote-agent.service.js.map +1 -1
- package/dist/services/template.service.d.ts +2 -0
- package/dist/services/template.service.js +46 -1
- package/dist/services/template.service.js.map +1 -1
- package/dist/services/tool-call.service.d.ts +2 -36
- package/dist/services/tool-call.service.js.map +1 -1
- package/dist/slack/formatters/message.formatter.d.ts +5 -2
- package/dist/slack/formatters/message.formatter.js +55 -2
- package/dist/slack/formatters/message.formatter.js.map +1 -1
- package/dist/slack/slack-bot.js +1 -2
- package/dist/slack/slack-bot.js.map +1 -1
- package/dist/utils/stdin-utils.d.ts +4 -25
- package/dist/utils/stdin-utils.js +2 -23
- package/dist/utils/stdin-utils.js.map +1 -1
- package/dist/utils/template-processor.d.ts +2 -29
- package/dist/utils/template-processor.js +1 -1
- package/dist/utils/template-processor.js.map +1 -1
- package/dist/utils/terminal-message-formatter.d.ts +23 -0
- package/dist/utils/terminal-message-formatter.js +136 -0
- package/dist/utils/terminal-message-formatter.js.map +1 -0
- package/package.json +2 -3
- package/scripts/postbuild-cli.mjs +20 -1
- package/templates/agents/default.yaml +1066 -0
- package/templates/agents/minimal.yaml +16 -0
- package/templates/documents/crewcode-manual.md +292 -0
- package/templates/versions.json +19 -0
- package/dist/providers/base-ai.provider.d.ts +0 -50
- package/dist/providers/base-ai.provider.js +0 -624
- package/dist/providers/base-ai.provider.js.map +0 -1
- package/dist/providers/claude.provider.d.ts +0 -25
- package/dist/providers/claude.provider.js +0 -362
- package/dist/providers/claude.provider.js.map +0 -1
- package/dist/providers/codex.provider.d.ts +0 -17
- package/dist/providers/codex.provider.js +0 -99
- package/dist/providers/codex.provider.js.map +0 -1
- package/dist/providers/copilot.provider.d.ts +0 -25
- package/dist/providers/copilot.provider.js +0 -266
- package/dist/providers/copilot.provider.js.map +0 -1
- package/dist/providers/gemini.provider.d.ts +0 -22
- package/dist/providers/gemini.provider.js +0 -147
- package/dist/providers/gemini.provider.js.map +0 -1
- package/dist/utils/mention-parser.d.ts +0 -18
- package/dist/utils/mention-parser.js +0 -136
- package/dist/utils/mention-parser.js.map +0 -1
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var ProviderBridgeService_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.ProviderBridgeService = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const crewx_sdk_1 = require("@sowonai/crewx-sdk");
|
|
19
|
+
const ai_provider_service_1 = require("../ai-provider.service");
|
|
20
|
+
const config_service_1 = require("./config.service");
|
|
21
|
+
const BUILTIN_FALLBACK_ORDER = [
|
|
22
|
+
'cli/claude',
|
|
23
|
+
'claude',
|
|
24
|
+
'cli/gemini',
|
|
25
|
+
'gemini',
|
|
26
|
+
'cli/copilot',
|
|
27
|
+
'copilot',
|
|
28
|
+
'cli/codex',
|
|
29
|
+
'codex',
|
|
30
|
+
];
|
|
31
|
+
let ProviderBridgeService = ProviderBridgeService_1 = class ProviderBridgeService {
|
|
32
|
+
constructor(aiProviderService, configService) {
|
|
33
|
+
this.aiProviderService = aiProviderService;
|
|
34
|
+
this.configService = configService;
|
|
35
|
+
this.logger = new common_1.Logger(ProviderBridgeService_1.name);
|
|
36
|
+
}
|
|
37
|
+
async resolveProvider(input) {
|
|
38
|
+
if (this.isAIProvider(input)) {
|
|
39
|
+
this.logger.debug(`Using direct AIProvider instance: ${input.name ?? 'anonymous'}`);
|
|
40
|
+
return { provider: input };
|
|
41
|
+
}
|
|
42
|
+
if (this.isProviderConfig(input)) {
|
|
43
|
+
const key = `${input.namespace}/${input.id}`;
|
|
44
|
+
const provider = this.findProviderByString(key);
|
|
45
|
+
if (!provider) {
|
|
46
|
+
throw new crewx_sdk_1.ProviderNotAvailableError(key);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
provider,
|
|
50
|
+
defaultModel: this.getDefaultModel(provider.name, input),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (typeof input === 'string' && input.trim().length > 0) {
|
|
54
|
+
const provider = this.findProviderByString(input);
|
|
55
|
+
if (!provider) {
|
|
56
|
+
throw new crewx_sdk_1.ProviderNotAvailableError(input);
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
provider,
|
|
60
|
+
defaultModel: this.getDefaultModel(provider.name),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const fallbackProvider = this.getDefaultProvider();
|
|
64
|
+
this.logger.debug(`Resolved fallback provider: ${fallbackProvider.name}`);
|
|
65
|
+
return {
|
|
66
|
+
provider: fallbackProvider,
|
|
67
|
+
defaultModel: this.getDefaultModel(fallbackProvider.name),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
async getProviderForSDK(input) {
|
|
71
|
+
const { provider } = await this.resolveProvider(input);
|
|
72
|
+
return provider;
|
|
73
|
+
}
|
|
74
|
+
listAvailableProviders() {
|
|
75
|
+
const registered = this.aiProviderService.getAvailableProviders();
|
|
76
|
+
if (!Array.isArray(registered) || registered.length === 0) {
|
|
77
|
+
return [];
|
|
78
|
+
}
|
|
79
|
+
const normalized = new Set();
|
|
80
|
+
for (const name of registered) {
|
|
81
|
+
normalized.add(this.normalizeOutputName(name));
|
|
82
|
+
}
|
|
83
|
+
return Array.from(normalized).sort();
|
|
84
|
+
}
|
|
85
|
+
async isProviderAvailable(input) {
|
|
86
|
+
try {
|
|
87
|
+
const provider = await this.getProviderForSDK(input);
|
|
88
|
+
return await provider.isAvailable();
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
this.logger.debug(`Provider availability check failed: ${error instanceof Error ? error.message : error}`);
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async createAgentRuntime(options = {}) {
|
|
96
|
+
const resolution = await this.resolveProvider(options.provider);
|
|
97
|
+
const runtime = await (0, crewx_sdk_1.createCrewxAgent)({
|
|
98
|
+
provider: resolution.provider,
|
|
99
|
+
defaultAgentId: options.defaultAgentId,
|
|
100
|
+
validAgents: options.validAgents,
|
|
101
|
+
enableCallStack: options.enableCallStack ?? false,
|
|
102
|
+
});
|
|
103
|
+
return { runtime, resolution };
|
|
104
|
+
}
|
|
105
|
+
isAIProvider(candidate) {
|
|
106
|
+
return (typeof candidate === 'object' &&
|
|
107
|
+
candidate !== null &&
|
|
108
|
+
typeof candidate.query === 'function' &&
|
|
109
|
+
typeof candidate.isAvailable === 'function');
|
|
110
|
+
}
|
|
111
|
+
isProviderConfig(candidate) {
|
|
112
|
+
return (typeof candidate === 'object' &&
|
|
113
|
+
candidate !== null &&
|
|
114
|
+
'namespace' in candidate &&
|
|
115
|
+
'id' in candidate);
|
|
116
|
+
}
|
|
117
|
+
findProviderByString(providerId) {
|
|
118
|
+
const candidates = this.expandProviderCandidates(providerId);
|
|
119
|
+
for (const candidate of candidates) {
|
|
120
|
+
const provider = this.aiProviderService.getProvider(candidate);
|
|
121
|
+
if (provider) {
|
|
122
|
+
return provider;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
expandProviderCandidates(providerId) {
|
|
128
|
+
const trimmed = providerId.trim();
|
|
129
|
+
const lower = trimmed.toLowerCase();
|
|
130
|
+
const candidates = new Set();
|
|
131
|
+
const addCandidate = (value) => {
|
|
132
|
+
if (value) {
|
|
133
|
+
candidates.add(value);
|
|
134
|
+
candidates.add(value.toLowerCase());
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
addCandidate(trimmed);
|
|
138
|
+
addCandidate(lower);
|
|
139
|
+
if (trimmed.includes('/')) {
|
|
140
|
+
const [namespace, id] = trimmed.split('/', 2);
|
|
141
|
+
addCandidate(id);
|
|
142
|
+
if (namespace && id) {
|
|
143
|
+
addCandidate(`${namespace.toLowerCase()}/${id.toLowerCase()}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
addCandidate(`cli/${trimmed}`);
|
|
148
|
+
addCandidate(`cli/${lower}`);
|
|
149
|
+
}
|
|
150
|
+
return Array.from(candidates).filter(Boolean);
|
|
151
|
+
}
|
|
152
|
+
getDefaultProvider() {
|
|
153
|
+
for (const candidate of BUILTIN_FALLBACK_ORDER) {
|
|
154
|
+
const provider = this.findProviderByString(candidate);
|
|
155
|
+
if (provider) {
|
|
156
|
+
return provider;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const registered = this.aiProviderService.getAvailableProviders();
|
|
160
|
+
for (const name of registered) {
|
|
161
|
+
const provider = this.findProviderByString(name);
|
|
162
|
+
if (provider) {
|
|
163
|
+
return provider;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
this.logger.warn('No CLI providers registered; falling back to MockProvider');
|
|
167
|
+
return new crewx_sdk_1.MockProvider();
|
|
168
|
+
}
|
|
169
|
+
normalizeOutputName(name) {
|
|
170
|
+
const trimmed = name.trim();
|
|
171
|
+
if (!trimmed) {
|
|
172
|
+
return trimmed;
|
|
173
|
+
}
|
|
174
|
+
const normalized = trimmed.toLowerCase();
|
|
175
|
+
return normalized.includes('/') ? normalized : `cli/${normalized}`;
|
|
176
|
+
}
|
|
177
|
+
getDefaultModel(providerName, providerConfig) {
|
|
178
|
+
if (providerConfig?.model && typeof providerConfig.model === 'string') {
|
|
179
|
+
return providerConfig.model;
|
|
180
|
+
}
|
|
181
|
+
return this.getDynamicDefaultModel(providerName);
|
|
182
|
+
}
|
|
183
|
+
getDynamicDefaultModel(providerName) {
|
|
184
|
+
if (!this.configService || typeof this.configService.getDynamicProviders !== 'function') {
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
const providers = this.configService.getDynamicProviders();
|
|
188
|
+
if (!Array.isArray(providers) || providers.length === 0) {
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
const normalized = this.normalizeOutputName(providerName);
|
|
192
|
+
const [namespace, id] = normalized.split('/', 2);
|
|
193
|
+
if (!namespace || !id) {
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
for (const provider of providers) {
|
|
197
|
+
if (this.matchesPluginProvider(provider, namespace, id)) {
|
|
198
|
+
return provider.default_model;
|
|
199
|
+
}
|
|
200
|
+
if (this.matchesRemoteProvider(provider, namespace, id)) {
|
|
201
|
+
return provider.default_model;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
matchesPluginProvider(provider, namespace, id) {
|
|
207
|
+
return (provider.type === 'plugin' &&
|
|
208
|
+
namespace === 'plugin' &&
|
|
209
|
+
provider.id.toLowerCase() === id.toLowerCase());
|
|
210
|
+
}
|
|
211
|
+
matchesRemoteProvider(provider, namespace, id) {
|
|
212
|
+
return (provider.type === 'remote' &&
|
|
213
|
+
namespace === 'remote' &&
|
|
214
|
+
provider.id.toLowerCase() === id.toLowerCase());
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
exports.ProviderBridgeService = ProviderBridgeService;
|
|
218
|
+
exports.ProviderBridgeService = ProviderBridgeService = ProviderBridgeService_1 = __decorate([
|
|
219
|
+
(0, common_1.Injectable)(),
|
|
220
|
+
__param(1, (0, common_1.Optional)()),
|
|
221
|
+
__metadata("design:paramtypes", [ai_provider_service_1.AIProviderService,
|
|
222
|
+
config_service_1.ConfigService])
|
|
223
|
+
], ProviderBridgeService);
|
|
224
|
+
//# sourceMappingURL=provider-bridge.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-bridge.service.js","sourceRoot":"","sources":["../../src/services/provider-bridge.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { AgentLoaderService } from './agent-loader.service';
|
|
2
2
|
import { ConfigService } from './config.service';
|
|
3
3
|
import { AgentInfo, RemoteAgentInfo } from '@sowonai/crewx-sdk';
|
|
4
|
-
import { RemoteProviderConfig } from '
|
|
5
|
-
import { McpClientService } from './mcp-client.service';
|
|
4
|
+
import { RemoteProviderConfig } from '@sowonai/crewx-sdk';
|
|
6
5
|
export interface RemoteAgentDescriptor {
|
|
7
6
|
agent: AgentInfo;
|
|
8
7
|
remote: RemoteAgentInfo;
|
|
@@ -11,9 +10,9 @@ export interface RemoteAgentDescriptor {
|
|
|
11
10
|
export declare class RemoteAgentService {
|
|
12
11
|
private readonly agentLoaderService;
|
|
13
12
|
private readonly configService;
|
|
14
|
-
private readonly mcpClientService;
|
|
15
13
|
private readonly logger;
|
|
16
|
-
|
|
14
|
+
private readonly manager;
|
|
15
|
+
constructor(agentLoaderService: AgentLoaderService, configService: ConfigService);
|
|
17
16
|
getRemoteAgents(): Promise<RemoteAgentDescriptor[]>;
|
|
18
17
|
getRemoteAgent(agentId: string): Promise<RemoteAgentDescriptor | undefined>;
|
|
19
18
|
isRemoteAgent(agentId: string): Promise<boolean>;
|
|
@@ -39,11 +38,9 @@ export declare class RemoteAgentService {
|
|
|
39
38
|
metadata?: Record<string, any>;
|
|
40
39
|
}>;
|
|
41
40
|
}): Promise<any>;
|
|
41
|
+
private convertToSdkConfig;
|
|
42
42
|
private resolveRemoteInfo;
|
|
43
43
|
private resolveRemoteProviderConfig;
|
|
44
44
|
private normalizeProviderName;
|
|
45
45
|
private ensureRemote;
|
|
46
|
-
private callRemoteTool;
|
|
47
|
-
private normalizeRemoteResponse;
|
|
48
|
-
private normalizeRemoteUrl;
|
|
49
46
|
}
|
|
@@ -15,13 +15,15 @@ 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
17
|
const crewx_sdk_1 = require("@sowonai/crewx-sdk");
|
|
18
|
-
const
|
|
18
|
+
const logger_adapter_1 = require("../providers/logger.adapter");
|
|
19
19
|
let RemoteAgentService = RemoteAgentService_1 = class RemoteAgentService {
|
|
20
|
-
constructor(agentLoaderService, configService
|
|
20
|
+
constructor(agentLoaderService, configService) {
|
|
21
21
|
this.agentLoaderService = agentLoaderService;
|
|
22
22
|
this.configService = configService;
|
|
23
|
-
this.mcpClientService = mcpClientService;
|
|
24
23
|
this.logger = new common_1.Logger(RemoteAgentService_1.name);
|
|
24
|
+
this.manager = new crewx_sdk_1.RemoteAgentManager({
|
|
25
|
+
logger: (0, logger_adapter_1.createSdkLoggerAdapter)(this.logger),
|
|
26
|
+
});
|
|
25
27
|
}
|
|
26
28
|
async getRemoteAgents() {
|
|
27
29
|
const allAgents = await this.agentLoaderService.getAllAgents();
|
|
@@ -37,6 +39,8 @@ let RemoteAgentService = RemoteAgentService_1 = class RemoteAgentService {
|
|
|
37
39
|
remote: remoteInfo,
|
|
38
40
|
providerConfig,
|
|
39
41
|
});
|
|
42
|
+
const sdkConfig = this.convertToSdkConfig(remoteInfo);
|
|
43
|
+
this.manager.loadConfig(agent.id, sdkConfig);
|
|
40
44
|
}
|
|
41
45
|
return descriptors;
|
|
42
46
|
}
|
|
@@ -49,27 +53,19 @@ let RemoteAgentService = RemoteAgentService_1 = class RemoteAgentService {
|
|
|
49
53
|
}
|
|
50
54
|
async queryRemoteAgent(agent, params) {
|
|
51
55
|
const remote = this.ensureRemote(agent);
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
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;
|
|
56
|
+
const sdkConfig = this.convertToSdkConfig(remote);
|
|
57
|
+
if (!this.manager.isRemoteAgent(agent.id)) {
|
|
58
|
+
this.manager.loadConfig(agent.id, sdkConfig);
|
|
69
59
|
}
|
|
70
60
|
try {
|
|
71
|
-
|
|
72
|
-
|
|
61
|
+
return await this.manager.query(agent.id, {
|
|
62
|
+
agentId: remote.agentId ?? agent.id,
|
|
63
|
+
query: params.query,
|
|
64
|
+
context: params.context,
|
|
65
|
+
model: params.model,
|
|
66
|
+
platform: params.platform,
|
|
67
|
+
messages: params.messages,
|
|
68
|
+
});
|
|
73
69
|
}
|
|
74
70
|
catch (error) {
|
|
75
71
|
this.logger.error(`Remote query failed for agent ${agent.id}: ${(0, crewx_sdk_1.getErrorMessage)(error)}`);
|
|
@@ -78,33 +74,35 @@ let RemoteAgentService = RemoteAgentService_1 = class RemoteAgentService {
|
|
|
78
74
|
}
|
|
79
75
|
async executeRemoteAgent(agent, params) {
|
|
80
76
|
const remote = this.ensureRemote(agent);
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
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;
|
|
77
|
+
const sdkConfig = this.convertToSdkConfig(remote);
|
|
78
|
+
if (!this.manager.isRemoteAgent(agent.id)) {
|
|
79
|
+
this.manager.loadConfig(agent.id, sdkConfig);
|
|
98
80
|
}
|
|
99
81
|
try {
|
|
100
|
-
|
|
101
|
-
|
|
82
|
+
return await this.manager.execute(agent.id, {
|
|
83
|
+
agentId: remote.agentId ?? agent.id,
|
|
84
|
+
task: params.task,
|
|
85
|
+
context: params.context,
|
|
86
|
+
model: params.model,
|
|
87
|
+
platform: params.platform,
|
|
88
|
+
messages: params.messages,
|
|
89
|
+
});
|
|
102
90
|
}
|
|
103
91
|
catch (error) {
|
|
104
92
|
this.logger.error(`Remote execute failed for agent ${agent.id}: ${(0, crewx_sdk_1.getErrorMessage)(error)}`);
|
|
105
93
|
throw error;
|
|
106
94
|
}
|
|
107
95
|
}
|
|
96
|
+
convertToSdkConfig(remote) {
|
|
97
|
+
return {
|
|
98
|
+
type: remote.type,
|
|
99
|
+
url: remote.url,
|
|
100
|
+
apiKey: remote.apiKey,
|
|
101
|
+
timeoutMs: remote.timeoutMs,
|
|
102
|
+
agentId: remote.agentId,
|
|
103
|
+
tools: remote.tools,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
108
106
|
resolveRemoteInfo(agent) {
|
|
109
107
|
if (agent.remote?.type === 'mcp-http') {
|
|
110
108
|
return agent.remote;
|
|
@@ -116,7 +114,7 @@ let RemoteAgentService = RemoteAgentService_1 = class RemoteAgentService {
|
|
|
116
114
|
const authHeader = providerConfig.auth?.token;
|
|
117
115
|
return {
|
|
118
116
|
type: 'mcp-http',
|
|
119
|
-
url:
|
|
117
|
+
url: providerConfig.location,
|
|
120
118
|
apiKey: authHeader,
|
|
121
119
|
agentId: providerConfig.external_agent_id,
|
|
122
120
|
timeoutMs: providerConfig.timeout?.query ?? providerConfig.timeout?.execute,
|
|
@@ -153,63 +151,11 @@ let RemoteAgentService = RemoteAgentService_1 = class RemoteAgentService {
|
|
|
153
151
|
}
|
|
154
152
|
return remoteInfo;
|
|
155
153
|
}
|
|
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;
|
|
206
|
-
}
|
|
207
154
|
};
|
|
208
155
|
exports.RemoteAgentService = RemoteAgentService;
|
|
209
156
|
exports.RemoteAgentService = RemoteAgentService = RemoteAgentService_1 = __decorate([
|
|
210
157
|
(0, common_1.Injectable)(),
|
|
211
158
|
__metadata("design:paramtypes", [agent_loader_service_1.AgentLoaderService,
|
|
212
|
-
config_service_1.ConfigService
|
|
213
|
-
mcp_client_service_1.McpClientService])
|
|
159
|
+
config_service_1.ConfigService])
|
|
214
160
|
], RemoteAgentService);
|
|
215
161
|
//# 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;AACjD,
|
|
1
|
+
{"version":3,"file":"remote-agent.service.js","sourceRoot":"","sources":["../../src/services/remote-agent.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,9 @@ export declare class TemplateService {
|
|
|
23
23
|
private readonly cdnBaseUrl;
|
|
24
24
|
private readonly githubRawUrl;
|
|
25
25
|
private readonly cacheDir;
|
|
26
|
+
private readonly remoteTemplatesEnabled;
|
|
26
27
|
constructor();
|
|
28
|
+
private tryLoadLocalTemplate;
|
|
27
29
|
private isVersionCompatible;
|
|
28
30
|
private compareVersions;
|
|
29
31
|
downloadTemplate(templateName: string, version?: string): Promise<string>;
|
|
@@ -14,17 +14,41 @@ exports.TemplateService = void 0;
|
|
|
14
14
|
const common_1 = require("@nestjs/common");
|
|
15
15
|
const fs_1 = require("fs");
|
|
16
16
|
const path_1 = require("path");
|
|
17
|
-
const CREWX_VERSION = '0.
|
|
17
|
+
const CREWX_VERSION = '0.3.0';
|
|
18
18
|
let TemplateService = TemplateService_1 = class TemplateService {
|
|
19
19
|
constructor() {
|
|
20
20
|
this.logger = new common_1.Logger(TemplateService_1.name);
|
|
21
21
|
this.cdnBaseUrl = 'https://cdn.jsdelivr.net/gh/sowonlabs/crewx@';
|
|
22
22
|
this.githubRawUrl = 'https://raw.githubusercontent.com/sowonlabs/crewx/';
|
|
23
23
|
this.cacheDir = (0, path_1.join)(process.cwd(), '.crewx', 'cache', 'templates');
|
|
24
|
+
this.remoteTemplatesEnabled = process.env.CREWX_ENABLE_REMOTE_TEMPLATES === 'true';
|
|
24
25
|
if (!(0, fs_1.existsSync)(this.cacheDir)) {
|
|
25
26
|
(0, fs_1.mkdirSync)(this.cacheDir, { recursive: true });
|
|
26
27
|
}
|
|
27
28
|
}
|
|
29
|
+
tryLoadLocalTemplate(templateName) {
|
|
30
|
+
const candidatePaths = [
|
|
31
|
+
(0, path_1.join)(__dirname, '..', 'templates', 'agents', `${templateName}.yaml`),
|
|
32
|
+
(0, path_1.join)(__dirname, '..', '..', 'templates', 'agents', `${templateName}.yaml`),
|
|
33
|
+
(0, path_1.join)(__dirname, '..', '..', '..', 'templates', 'agents', `${templateName}.yaml`),
|
|
34
|
+
(0, path_1.join)(process.cwd(), 'templates', 'agents', `${templateName}.yaml`),
|
|
35
|
+
];
|
|
36
|
+
for (const candidate of candidatePaths) {
|
|
37
|
+
if (!(0, fs_1.existsSync)(candidate)) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const content = (0, fs_1.readFileSync)(candidate, 'utf8');
|
|
42
|
+
this.logger.log(`📄 Using local template: ${templateName} (${candidate})`);
|
|
43
|
+
return content;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
47
|
+
this.logger.warn(`Failed to read local template at ${candidate}: ${message}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
28
52
|
isVersionCompatible(minVersion, maxVersion) {
|
|
29
53
|
if (!minVersion && !maxVersion) {
|
|
30
54
|
return true;
|
|
@@ -59,6 +83,19 @@ let TemplateService = TemplateService_1 = class TemplateService {
|
|
|
59
83
|
}
|
|
60
84
|
async downloadTemplate(templateName, version = 'main') {
|
|
61
85
|
try {
|
|
86
|
+
const localTemplate = this.tryLoadLocalTemplate(templateName);
|
|
87
|
+
if (localTemplate) {
|
|
88
|
+
return localTemplate;
|
|
89
|
+
}
|
|
90
|
+
if (!this.remoteTemplatesEnabled) {
|
|
91
|
+
this.logger.warn(`Remote template download disabled (set CREWX_ENABLE_REMOTE_TEMPLATES=true to enable).`);
|
|
92
|
+
const cached = this.loadFromCache(templateName, version);
|
|
93
|
+
if (cached) {
|
|
94
|
+
this.logger.log(`📦 Using cached template: ${templateName}@${version}`);
|
|
95
|
+
return cached;
|
|
96
|
+
}
|
|
97
|
+
throw new Error(`Remote template download disabled and no cached template found for ${templateName}@${version}`);
|
|
98
|
+
}
|
|
62
99
|
this.logger.log(`Downloading template: ${templateName}@${version}`);
|
|
63
100
|
try {
|
|
64
101
|
const versions = await this.getVersions();
|
|
@@ -108,6 +145,10 @@ let TemplateService = TemplateService_1 = class TemplateService {
|
|
|
108
145
|
}
|
|
109
146
|
}
|
|
110
147
|
async listAvailableTemplates(version = 'main') {
|
|
148
|
+
if (!this.remoteTemplatesEnabled) {
|
|
149
|
+
this.logger.warn('Remote template listing disabled (set CREWX_ENABLE_REMOTE_TEMPLATES=true to enable). Returning defaults.');
|
|
150
|
+
return ['default', 'minimal', 'development', 'production'];
|
|
151
|
+
}
|
|
111
152
|
try {
|
|
112
153
|
const url = `${this.cdnBaseUrl}${version}/versions.json`;
|
|
113
154
|
const response = await fetch(url);
|
|
@@ -125,6 +166,10 @@ let TemplateService = TemplateService_1 = class TemplateService {
|
|
|
125
166
|
}
|
|
126
167
|
}
|
|
127
168
|
async getVersions() {
|
|
169
|
+
if (!this.remoteTemplatesEnabled) {
|
|
170
|
+
this.logger.warn('Remote template version lookup disabled (set CREWX_ENABLE_REMOTE_TEMPLATES=true to enable).');
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
128
173
|
try {
|
|
129
174
|
const url = `${this.cdnBaseUrl}main/versions.json`;
|
|
130
175
|
const response = await fetch(url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.service.js","sourceRoot":"","sources":["../../src/services/template.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2BAAwE;AACxE,+BAA4B;AAG5B,MAAM,aAAa,GAAG,OAAO,CAAC;AAyBvB,IAAM,eAAe,uBAArB,MAAM,eAAe;
|
|
1
|
+
{"version":3,"file":"template.service.js","sourceRoot":"","sources":["../../src/services/template.service.ts"],"names":[],"mappings":"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"}
|