@sowonai/crewx-cli 0.4.0-dev.9 → 0.4.0-rc.1
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 +34 -12
- package/dist/ai-provider.service.d.ts +7 -12
- package/dist/ai-provider.service.js +42 -20
- package/dist/ai-provider.service.js.map +1 -1
- package/dist/ai.service.d.ts +5 -45
- package/dist/ai.service.js +10 -587
- package/dist/ai.service.js.map +1 -1
- package/dist/app.module.js +67 -11
- package/dist/app.module.js.map +1 -1
- package/dist/cli/agent.handler.js +3 -4
- package/dist/cli/agent.handler.js.map +1 -1
- package/dist/cli/chat.handler.d.ts +2 -1
- package/dist/cli/chat.handler.js +17 -6
- package/dist/cli/chat.handler.js.map +1 -1
- package/dist/cli/cli.handler.js +4 -0
- package/dist/cli/cli.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/log.handler.d.ts +2 -0
- package/dist/cli/log.handler.js +69 -0
- package/dist/cli/log.handler.js.map +1 -0
- package/dist/cli/query.handler.js +4 -2
- package/dist/cli/query.handler.js.map +1 -1
- package/dist/cli-options.d.ts +4 -2
- package/dist/cli-options.js +19 -12
- package/dist/cli-options.js.map +1 -1
- package/dist/crewx.tool.d.ts +18 -2
- package/dist/crewx.tool.js +542 -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/services/agent-loader.service.d.ts +6 -2
- package/dist/services/agent-loader.service.js +210 -26
- 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/document-loader.service.d.ts +9 -4
- package/dist/services/document-loader.service.js +26 -7
- package/dist/services/document-loader.service.js.map +1 -1
- package/dist/services/help.service.js +6 -0
- package/dist/services/help.service.js.map +1 -1
- package/dist/services/parallel-processing.service.d.ts +2 -0
- package/dist/services/parallel-processing.service.js +40 -6
- 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 +1 -1
- package/dist/services/task-management.service.d.ts +3 -3
- package/dist/services/task-management.service.js +2 -1
- package/dist/services/task-management.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/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 +1 -29
- package/dist/utils/template-processor.js +38 -11
- package/dist/utils/template-processor.js.map +1 -1
- package/package.json +2 -3
- package/scripts/postbuild-cli.mjs +20 -1
- package/templates/agents/default.yaml +455 -0
- package/templates/agents/minimal.yaml +16 -0
- package/templates/documents/crewx-manual.md +390 -0
- package/templates/versions.json +19 -0
- package/dist/providers/base-ai.provider.d.ts +0 -1
- package/dist/providers/base-ai.provider.js +0 -6
- package/dist/providers/base-ai.provider.js.map +0 -1
- package/dist/providers/claude.provider.d.ts +0 -5
- package/dist/providers/claude.provider.js +0 -32
- package/dist/providers/claude.provider.js.map +0 -1
- package/dist/providers/codex.provider.d.ts +0 -4
- package/dist/providers/codex.provider.js +0 -30
- package/dist/providers/codex.provider.js.map +0 -1
- package/dist/providers/copilot.provider.d.ts +0 -5
- package/dist/providers/copilot.provider.js +0 -32
- package/dist/providers/copilot.provider.js.map +0 -1
- package/dist/providers/gemini.provider.d.ts +0 -5
- package/dist/providers/gemini.provider.js +0 -32
- package/dist/providers/gemini.provider.js.map +0 -1
- package/dist/services/context-enhancement.service.d.ts +0 -13
- package/dist/services/context-enhancement.service.js +0 -169
- package/dist/services/context-enhancement.service.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
package/dist/crewx.tool.js
CHANGED
|
@@ -41,9 +41,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
41
41
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
42
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
43
|
};
|
|
44
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
45
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
46
|
+
};
|
|
44
47
|
var CrewXTool_1;
|
|
45
48
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
49
|
exports.CrewXTool = void 0;
|
|
50
|
+
const crewx_sdk_1 = require("@sowonai/crewx-sdk");
|
|
47
51
|
const common_1 = require("@nestjs/common");
|
|
48
52
|
const nestjs_mcp_adapter_1 = require("@sowonai/nestjs-mcp-adapter");
|
|
49
53
|
const zod_1 = require("zod");
|
|
@@ -53,7 +57,6 @@ const crypto = __importStar(require("crypto"));
|
|
|
53
57
|
const ai_service_1 = require("./ai.service");
|
|
54
58
|
const ai_provider_service_1 = require("./ai-provider.service");
|
|
55
59
|
const project_service_1 = require("./project.service");
|
|
56
|
-
const crewx_sdk_1 = require("@sowonai/crewx-sdk");
|
|
57
60
|
const parallel_processing_service_1 = require("./services/parallel-processing.service");
|
|
58
61
|
const task_management_service_1 = require("./services/task-management.service");
|
|
59
62
|
const result_formatter_service_1 = require("./services/result-formatter.service");
|
|
@@ -62,6 +65,7 @@ const document_loader_service_1 = require("./services/document-loader.service");
|
|
|
62
65
|
const tool_call_service_1 = require("./services/tool-call.service");
|
|
63
66
|
const agent_loader_service_1 = require("./services/agent-loader.service");
|
|
64
67
|
const remote_agent_service_1 = require("./services/remote-agent.service");
|
|
68
|
+
const provider_bridge_service_1 = require("./services/provider-bridge.service");
|
|
65
69
|
let CrewXTool = CrewXTool_1 = class CrewXTool {
|
|
66
70
|
generateSecurityKey() {
|
|
67
71
|
return crypto.randomBytes(8).toString('hex');
|
|
@@ -122,7 +126,7 @@ let CrewXTool = CrewXTool_1 = class CrewXTool {
|
|
|
122
126
|
};
|
|
123
127
|
return JSON.stringify(payload);
|
|
124
128
|
}
|
|
125
|
-
constructor(aiService, aiProviderService, projectService, parallelProcessingService, taskManagementService, resultFormatterService, templateService, documentLoaderService, toolCallService, agentLoaderService, remoteAgentService) {
|
|
129
|
+
constructor(aiService, aiProviderService, projectService, parallelProcessingService, taskManagementService, resultFormatterService, templateService, documentLoaderService, toolCallService, agentLoaderService, remoteAgentService, providerBridgeService, layoutLoader, layoutRenderer) {
|
|
126
130
|
this.aiService = aiService;
|
|
127
131
|
this.aiProviderService = aiProviderService;
|
|
128
132
|
this.projectService = projectService;
|
|
@@ -134,6 +138,9 @@ let CrewXTool = CrewXTool_1 = class CrewXTool {
|
|
|
134
138
|
this.toolCallService = toolCallService;
|
|
135
139
|
this.agentLoaderService = agentLoaderService;
|
|
136
140
|
this.remoteAgentService = remoteAgentService;
|
|
141
|
+
this.providerBridgeService = providerBridgeService;
|
|
142
|
+
this.layoutLoader = layoutLoader;
|
|
143
|
+
this.layoutRenderer = layoutRenderer;
|
|
137
144
|
this.logger = new common_1.Logger(CrewXTool_1.name);
|
|
138
145
|
this.timeoutConfig = (0, crewx_sdk_1.getTimeoutConfig)();
|
|
139
146
|
}
|
|
@@ -141,6 +148,128 @@ let CrewXTool = CrewXTool_1 = class CrewXTool {
|
|
|
141
148
|
this.toolCallService.setCrewXTool(this);
|
|
142
149
|
this.logger.log('CrewXTool registered to ToolCallService');
|
|
143
150
|
}
|
|
151
|
+
async processAgentSystemPrompt(agent, templateContext) {
|
|
152
|
+
const inlineLayout = agent.inline?.layout;
|
|
153
|
+
const baseSystemPrompt = agent.inline?.prompt ||
|
|
154
|
+
agent.inline?.system_prompt ||
|
|
155
|
+
agent.systemPrompt ||
|
|
156
|
+
agent.description ||
|
|
157
|
+
`You are an expert ${agent.id}.`;
|
|
158
|
+
const layoutSpec = inlineLayout ?? 'crewx/default';
|
|
159
|
+
if (layoutSpec) {
|
|
160
|
+
const layoutId = typeof layoutSpec === 'string' ? layoutSpec : layoutSpec.id;
|
|
161
|
+
const layoutProps = typeof layoutSpec === 'object' && layoutSpec !== null && 'props' in layoutSpec
|
|
162
|
+
? layoutSpec.props
|
|
163
|
+
: undefined;
|
|
164
|
+
try {
|
|
165
|
+
const layout = this.layoutLoader.load(layoutId, layoutProps);
|
|
166
|
+
const providerRaw = agent.provider;
|
|
167
|
+
const providerList = Array.isArray(providerRaw)
|
|
168
|
+
? providerRaw
|
|
169
|
+
: (typeof providerRaw === 'string' && providerRaw.length > 0)
|
|
170
|
+
? [providerRaw]
|
|
171
|
+
: [];
|
|
172
|
+
const providerDisplay = providerList.length > 0
|
|
173
|
+
? providerList.join(', ')
|
|
174
|
+
: (typeof providerRaw === 'string' ? providerRaw : '');
|
|
175
|
+
const inlineConfig = agent.inline
|
|
176
|
+
? { ...agent.inline, prompt: baseSystemPrompt }
|
|
177
|
+
: { prompt: baseSystemPrompt };
|
|
178
|
+
const templateOptions = [];
|
|
179
|
+
const sessionInfo = {
|
|
180
|
+
mode: templateContext.mode ?? 'query',
|
|
181
|
+
platform: templateContext.platform ?? 'cli',
|
|
182
|
+
options: templateOptions,
|
|
183
|
+
env: templateContext.env ?? {},
|
|
184
|
+
vars: templateContext.vars ?? {},
|
|
185
|
+
tools: templateContext.tools ?? null,
|
|
186
|
+
};
|
|
187
|
+
const documentsForTemplate = {};
|
|
188
|
+
if (this.documentLoaderService.isInitialized()) {
|
|
189
|
+
const docNames = this.documentLoaderService.getDocumentNames();
|
|
190
|
+
for (const docName of docNames) {
|
|
191
|
+
const content = await this.documentLoaderService.getDocumentContent(docName);
|
|
192
|
+
const toc = await this.documentLoaderService.getDocumentToc(docName);
|
|
193
|
+
const summary = await this.documentLoaderService.getDocumentSummary(docName);
|
|
194
|
+
documentsForTemplate[docName] = {
|
|
195
|
+
content: content || '',
|
|
196
|
+
toc: toc || '',
|
|
197
|
+
summary: summary || '',
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const renderContext = {
|
|
202
|
+
user_input: templateContext.user_input,
|
|
203
|
+
agent: {
|
|
204
|
+
id: agent.id,
|
|
205
|
+
name: agent.name || agent.id,
|
|
206
|
+
role: agent.role || '',
|
|
207
|
+
team: agent.team || '',
|
|
208
|
+
description: agent.description || '',
|
|
209
|
+
workingDirectory: agent.workingDirectory,
|
|
210
|
+
capabilities: agent.capabilities || [],
|
|
211
|
+
specialties: agent.specialties || [],
|
|
212
|
+
provider: providerDisplay,
|
|
213
|
+
providerList,
|
|
214
|
+
providerRaw,
|
|
215
|
+
inline: inlineConfig,
|
|
216
|
+
model: agent.inline?.model,
|
|
217
|
+
options: agent.options ?? {},
|
|
218
|
+
optionsArray: Array.isArray(agent.options) ? agent.options : undefined,
|
|
219
|
+
optionsByMode: !Array.isArray(agent.options) && typeof agent.options === 'object'
|
|
220
|
+
? agent.options
|
|
221
|
+
: undefined,
|
|
222
|
+
remote: agent.remote ?? null,
|
|
223
|
+
documents: agent.inline && 'documents' in agent.inline ? agent.inline.documents : undefined,
|
|
224
|
+
},
|
|
225
|
+
documents: documentsForTemplate,
|
|
226
|
+
vars: templateContext.vars || {},
|
|
227
|
+
props: layoutProps ?? {},
|
|
228
|
+
messages: templateContext.messages || [],
|
|
229
|
+
platform: templateContext.platform ?? 'cli',
|
|
230
|
+
tools: templateContext.tools,
|
|
231
|
+
session: sessionInfo,
|
|
232
|
+
env: templateContext.env ?? {},
|
|
233
|
+
context: {
|
|
234
|
+
mode: templateContext.mode ?? 'query',
|
|
235
|
+
platform: templateContext.platform ?? 'cli',
|
|
236
|
+
options: templateOptions,
|
|
237
|
+
env: templateContext.env ?? {},
|
|
238
|
+
vars: templateContext.vars ?? {},
|
|
239
|
+
agent: templateContext.agent ?? null,
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
renderContext.layout = {
|
|
243
|
+
system_prompt: baseSystemPrompt,
|
|
244
|
+
prompt: baseSystemPrompt,
|
|
245
|
+
};
|
|
246
|
+
const rendered = this.layoutRenderer.render(layout, renderContext);
|
|
247
|
+
this.logger.debug(`Layout rendered successfully for agent ${agent.id}`);
|
|
248
|
+
const { processDocumentTemplate } = await Promise.resolve().then(() => __importStar(require('./utils/template-processor')));
|
|
249
|
+
const finalSystemPrompt = await processDocumentTemplate(rendered, this.documentLoaderService, templateContext);
|
|
250
|
+
return finalSystemPrompt;
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
const layoutIdForLog = typeof layoutSpec === 'string' ? layoutSpec : layoutSpec.id;
|
|
254
|
+
console.error(`❌ [Layout Error] Failed to process layout (${layoutIdForLog}) for agent ${agent.id}:`, (0, crewx_sdk_1.getErrorMessage)(error));
|
|
255
|
+
this.logger.warn(`Failed to process layout (${layoutIdForLog}) for agent ${agent.id}: ${(0, crewx_sdk_1.getErrorMessage)(error)}`);
|
|
256
|
+
if (inlineLayout) {
|
|
257
|
+
console.log('[Layout Fallback] Using inline.system_prompt');
|
|
258
|
+
this.logger.warn('Falling back to inline.system_prompt');
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
console.log('[Layout Fallback] Using default system prompt');
|
|
262
|
+
this.logger.warn('Falling back to default system prompt');
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
let systemPrompt = baseSystemPrompt;
|
|
267
|
+
if (systemPrompt) {
|
|
268
|
+
const { processDocumentTemplate } = await Promise.resolve().then(() => __importStar(require('./utils/template-processor')));
|
|
269
|
+
systemPrompt = await processDocumentTemplate(systemPrompt, this.documentLoaderService, templateContext);
|
|
270
|
+
}
|
|
271
|
+
return systemPrompt;
|
|
272
|
+
}
|
|
144
273
|
async getTaskLogs(input) {
|
|
145
274
|
this.logger.log('=== getTaskLogs called ===');
|
|
146
275
|
this.logger.log(`Input taskId: ${input.taskId}`);
|
|
@@ -165,11 +294,29 @@ let CrewXTool = CrewXTool_1 = class CrewXTool {
|
|
|
165
294
|
const availableProviders = await this.aiService.checkAvailableProviders();
|
|
166
295
|
const installation = await this.aiService.validateCLIInstallation();
|
|
167
296
|
const recommendations = this.getInstallationRecommendations(installation);
|
|
297
|
+
const bridgeProviders = this.providerBridgeService.listAvailableProviders();
|
|
298
|
+
let bridgeStatus = '⚠️ ProviderBridge: no providers registered.';
|
|
299
|
+
if (bridgeProviders.length > 0) {
|
|
300
|
+
try {
|
|
301
|
+
const { resolution } = await this.providerBridgeService.createAgentRuntime({
|
|
302
|
+
provider: bridgeProviders[0],
|
|
303
|
+
defaultAgentId: 'provider-bridge-check',
|
|
304
|
+
});
|
|
305
|
+
bridgeStatus = `✅ ProviderBridge ready (${resolution.provider.name})`;
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
309
|
+
bridgeStatus = `❌ ProviderBridge error: ${message}`;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
168
312
|
const responseText = `🤖 **AI Providers Status**
|
|
169
313
|
|
|
170
314
|
**Available Providers:**
|
|
171
315
|
${availableProviders.length > 0 ? availableProviders.map(p => `✅ ${p}`).join('\n') : '❌ No providers available'}
|
|
172
316
|
|
|
317
|
+
**Provider Bridge:**
|
|
318
|
+
${bridgeStatus}${bridgeProviders.length > 0 ? `\nRegistered: ${bridgeProviders.join(', ')}` : ''}
|
|
319
|
+
|
|
173
320
|
**Installation Status:**
|
|
174
321
|
• Claude CLI: ${installation.claude ? '✅ Installed' : '❌ Not Installed'}
|
|
175
322
|
• Gemini CLI: ${installation.gemini ? '✅ Installed' : '❌ Not Installed'}
|
|
@@ -191,6 +338,10 @@ ${recommendations.map(r => `• ${r}`).join('\n')}`;
|
|
|
191
338
|
gemini: installation.gemini,
|
|
192
339
|
copilot: installation.copilot,
|
|
193
340
|
},
|
|
341
|
+
providerBridge: {
|
|
342
|
+
status: bridgeStatus,
|
|
343
|
+
providers: bridgeProviders,
|
|
344
|
+
},
|
|
194
345
|
recommendations,
|
|
195
346
|
};
|
|
196
347
|
}
|
|
@@ -215,7 +366,11 @@ No AI providers could be verified.`
|
|
|
215
366
|
claude: { installed: false },
|
|
216
367
|
gemini: { installed: false },
|
|
217
368
|
copilot: { installed: false }
|
|
218
|
-
}
|
|
369
|
+
},
|
|
370
|
+
providerBridge: {
|
|
371
|
+
status: '❌ ProviderBridge inspection skipped due to error',
|
|
372
|
+
providers: [],
|
|
373
|
+
},
|
|
219
374
|
};
|
|
220
375
|
}
|
|
221
376
|
}
|
|
@@ -416,63 +571,146 @@ ${errorMessage}`,
|
|
|
416
571
|
}
|
|
417
572
|
}
|
|
418
573
|
const workingDir = agent.workingDirectory || process.cwd();
|
|
419
|
-
let systemPrompt = agent.systemPrompt || agent.description || `You are an expert ${agentId}.`;
|
|
420
574
|
const securityKey = this.generateSecurityKey();
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
model: model || agent.inline?.model,
|
|
431
|
-
workingDirectory: workingDir,
|
|
432
|
-
},
|
|
433
|
-
mode: 'query',
|
|
434
|
-
messages: contextMessages,
|
|
435
|
-
platform: platform,
|
|
436
|
-
tools: this.buildToolsContext(),
|
|
437
|
-
vars: {
|
|
438
|
-
security_key: securityKey,
|
|
439
|
-
},
|
|
440
|
-
};
|
|
441
|
-
systemPrompt = await processDocumentTemplate(systemPrompt, this.documentLoaderService, templateContext);
|
|
575
|
+
const contextMessages = messages && messages.length > 0 ? messages.slice(0, -1) : [];
|
|
576
|
+
const documents = {};
|
|
577
|
+
const docNames = this.documentLoaderService.getDocumentNames();
|
|
578
|
+
for (const docName of docNames) {
|
|
579
|
+
const content = await this.documentLoaderService.getDocumentContent(docName);
|
|
580
|
+
const toc = await this.documentLoaderService.getDocumentToc(docName);
|
|
581
|
+
if (content) {
|
|
582
|
+
documents[docName] = { content, toc };
|
|
583
|
+
}
|
|
442
584
|
}
|
|
443
|
-
|
|
585
|
+
const templateContext = {
|
|
586
|
+
user_input: query,
|
|
587
|
+
messages: contextMessages,
|
|
588
|
+
agent: {
|
|
589
|
+
id: agent.id,
|
|
590
|
+
name: agent.name || agent.id,
|
|
591
|
+
provider: (Array.isArray(agent.provider) ? agent.provider[0] : agent.provider) || 'claude',
|
|
592
|
+
model: model || agent.inline?.model,
|
|
593
|
+
workingDirectory: workingDir,
|
|
594
|
+
inline: {
|
|
595
|
+
prompt: agent.inline?.prompt || agent.inline?.system_prompt || agent.systemPrompt || '',
|
|
596
|
+
},
|
|
597
|
+
specialties: agent.specialties,
|
|
598
|
+
capabilities: agent.capabilities,
|
|
599
|
+
description: agent.description,
|
|
600
|
+
},
|
|
601
|
+
documents,
|
|
602
|
+
vars: {
|
|
603
|
+
security_key: securityKey,
|
|
604
|
+
},
|
|
605
|
+
props: {},
|
|
606
|
+
mode: 'query',
|
|
607
|
+
platform: platform,
|
|
608
|
+
env: process.env,
|
|
609
|
+
tools: this.buildToolsContext(),
|
|
610
|
+
};
|
|
611
|
+
let systemPrompt = await this.processAgentSystemPrompt(agent, templateContext);
|
|
612
|
+
if (process.env.CREWX_APPEND_LEGACY === 'true') {
|
|
613
|
+
this.logger.debug('[WBS-14] Legacy append mode enabled (query)', {
|
|
614
|
+
agentId: agent.id,
|
|
615
|
+
layoutId: typeof agent.inline?.layout === 'string'
|
|
616
|
+
? agent.inline?.layout
|
|
617
|
+
: agent.inline?.layout?.id ?? 'crewx/default',
|
|
618
|
+
});
|
|
619
|
+
systemPrompt += `
|
|
444
620
|
|
|
445
621
|
Specialties: ${agent.specialties?.join(', ') || 'General'}
|
|
446
622
|
Capabilities: ${agent.capabilities?.join(', ') || 'Analysis'}
|
|
447
623
|
Working Directory: ${workingDir}`;
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
624
|
+
}
|
|
625
|
+
else if (process.env.CREWX_WBS14_TELEMETRY === 'true') {
|
|
626
|
+
this.logger.debug('[WBS-14] Metadata delegated to layout (query mode)', {
|
|
627
|
+
agentId: agent.id,
|
|
628
|
+
hasLayout: Boolean(agent.inline?.layout),
|
|
629
|
+
layoutId: typeof agent.inline?.layout === 'string'
|
|
630
|
+
? agent.inline?.layout
|
|
631
|
+
: agent.inline?.layout?.id ?? 'crewx/default',
|
|
632
|
+
specialtiesCount: agent.specialties?.length ?? 0,
|
|
633
|
+
capabilitiesCount: agent.capabilities?.length ?? 0,
|
|
634
|
+
workingDirectory: workingDir,
|
|
635
|
+
});
|
|
636
|
+
}
|
|
452
637
|
let fullPrompt = systemPrompt;
|
|
453
638
|
if (context) {
|
|
454
639
|
fullPrompt += `\n\n${context}`;
|
|
455
640
|
}
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
641
|
+
if (!systemPrompt.includes('<user_query')) {
|
|
642
|
+
this.logger.debug('[Legacy] Adding <user_query> wrapper manually (layout not used)');
|
|
643
|
+
fullPrompt += `\n\n<user_query key="${securityKey}">
|
|
644
|
+
${query}
|
|
645
|
+
</user_query>`;
|
|
646
|
+
}
|
|
647
|
+
let runtimeResult;
|
|
648
|
+
let providerResolution;
|
|
649
|
+
let providerInput;
|
|
650
|
+
if (args.provider) {
|
|
651
|
+
providerInput = args.provider;
|
|
652
|
+
}
|
|
653
|
+
else if (Array.isArray(agent.provider)) {
|
|
654
|
+
providerInput = await this.getAvailableProvider(agent.provider);
|
|
655
|
+
}
|
|
656
|
+
else if (typeof agent.provider === 'string' && agent.provider.trim().length > 0) {
|
|
657
|
+
providerInput = agent.provider;
|
|
658
|
+
}
|
|
659
|
+
try {
|
|
660
|
+
runtimeResult = await this.providerBridgeService.createAgentRuntime({
|
|
661
|
+
provider: providerInput,
|
|
662
|
+
defaultAgentId: agentId,
|
|
663
|
+
validAgents: agents.map(a => a.id),
|
|
664
|
+
});
|
|
665
|
+
providerResolution = runtimeResult.resolution;
|
|
666
|
+
}
|
|
667
|
+
catch (error) {
|
|
668
|
+
const errorMsg = error instanceof Error ? error.message : 'Unknown provider error';
|
|
669
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
670
|
+
level: 'error',
|
|
671
|
+
message: `Provider resolution failed: ${errorMsg}`,
|
|
672
|
+
});
|
|
673
|
+
this.taskManagementService.completeTask(taskId, { success: false, error: errorMsg }, false);
|
|
674
|
+
return {
|
|
675
|
+
content: [
|
|
676
|
+
{
|
|
677
|
+
type: 'text',
|
|
678
|
+
text: `❌ **Provider Error**\n\n${errorMsg}\n\nAvailable providers: ${this.providerBridgeService.listAvailableProviders().join(', ')}`,
|
|
679
|
+
},
|
|
680
|
+
],
|
|
681
|
+
success: false,
|
|
682
|
+
agent: agentId,
|
|
683
|
+
provider: 'none',
|
|
684
|
+
error: errorMsg,
|
|
685
|
+
taskId,
|
|
686
|
+
readOnlyMode: true,
|
|
687
|
+
readOnly: true,
|
|
688
|
+
};
|
|
689
|
+
}
|
|
690
|
+
const resolvedProviderName = providerResolution.provider.name;
|
|
691
|
+
if (args.provider) {
|
|
692
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
693
|
+
level: 'info',
|
|
694
|
+
message: `Using CLI-specified provider: ${args.provider} (resolved to ${resolvedProviderName})`
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
else if (providerInput) {
|
|
698
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
699
|
+
level: 'info',
|
|
700
|
+
message: `Agent provider resolved to ${resolvedProviderName} (input: ${providerInput})`
|
|
701
|
+
});
|
|
467
702
|
}
|
|
468
703
|
else {
|
|
469
|
-
|
|
704
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
705
|
+
level: 'info',
|
|
706
|
+
message: `Using ProviderBridge fallback provider: ${resolvedProviderName}`,
|
|
707
|
+
});
|
|
470
708
|
}
|
|
471
|
-
const agentOptions = this.getOptionsForAgent(agent, 'query',
|
|
472
|
-
const modelToUse = model || agent.inline?.model;
|
|
709
|
+
const agentOptions = this.getOptionsForAgent(agent, 'query', resolvedProviderName);
|
|
710
|
+
const modelToUse = model || agent.inline?.model || providerResolution.defaultModel;
|
|
473
711
|
const structuredPayload = await this.buildStructuredPayload({
|
|
474
712
|
agentId,
|
|
475
|
-
provider,
|
|
713
|
+
provider: resolvedProviderName,
|
|
476
714
|
mode: 'query',
|
|
477
715
|
prompt: fullPrompt,
|
|
478
716
|
context,
|
|
@@ -480,17 +718,55 @@ ${query}
|
|
|
480
718
|
platform: platform || 'cli',
|
|
481
719
|
model: modelToUse,
|
|
482
720
|
});
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
721
|
+
const runtimeMessages = this.toConversationMessages(messages);
|
|
722
|
+
let agentResult;
|
|
723
|
+
try {
|
|
724
|
+
agentResult = await runtimeResult.runtime.agent.query({
|
|
725
|
+
agentId,
|
|
726
|
+
prompt: fullPrompt,
|
|
727
|
+
context,
|
|
728
|
+
messages: runtimeMessages,
|
|
729
|
+
model: modelToUse,
|
|
730
|
+
options: {
|
|
731
|
+
workingDirectory: workingDir,
|
|
732
|
+
timeout: this.timeoutConfig.parallel,
|
|
733
|
+
additionalArgs: agentOptions,
|
|
734
|
+
taskId,
|
|
735
|
+
securityKey,
|
|
736
|
+
pipedContext: structuredPayload,
|
|
737
|
+
},
|
|
738
|
+
});
|
|
739
|
+
}
|
|
740
|
+
catch (error) {
|
|
741
|
+
const errorMsg = error instanceof Error ? error.message : 'Agent runtime query failed';
|
|
742
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
743
|
+
level: 'error',
|
|
744
|
+
message: `Agent runtime query failed: ${errorMsg}`,
|
|
745
|
+
});
|
|
746
|
+
this.taskManagementService.completeTask(taskId, { success: false, error: errorMsg }, false);
|
|
747
|
+
return {
|
|
748
|
+
content: [
|
|
749
|
+
{
|
|
750
|
+
type: 'text',
|
|
751
|
+
text: `❌ **Provider Error**\n\n${errorMsg}\n\nAvailable providers: ${this.providerBridgeService.listAvailableProviders().join(', ')}`,
|
|
752
|
+
},
|
|
753
|
+
],
|
|
754
|
+
success: false,
|
|
755
|
+
agent: agentId,
|
|
756
|
+
provider: resolvedProviderName,
|
|
757
|
+
error: errorMsg,
|
|
758
|
+
taskId,
|
|
759
|
+
readOnlyMode: true,
|
|
760
|
+
readOnly: true,
|
|
761
|
+
};
|
|
762
|
+
}
|
|
763
|
+
const response = {
|
|
764
|
+
success: agentResult.success,
|
|
765
|
+
content: agentResult.content,
|
|
766
|
+
provider: agentResult.metadata?.provider ?? resolvedProviderName,
|
|
767
|
+
taskId: agentResult.metadata?.taskId ?? taskId,
|
|
768
|
+
error: agentResult.metadata?.error,
|
|
769
|
+
};
|
|
494
770
|
this.taskManagementService.addTaskLog(taskId, { level: 'info', message: `Query completed. Success: ${response.success}` });
|
|
495
771
|
this.taskManagementService.completeTask(taskId, response, response.success);
|
|
496
772
|
const responseText = response.success
|
|
@@ -624,34 +900,68 @@ Please check the agent ID and try again.`
|
|
|
624
900
|
}
|
|
625
901
|
}
|
|
626
902
|
const workingDir = projectPath || agent.workingDirectory || './';
|
|
627
|
-
let systemPrompt = agent.systemPrompt || agent.description || `You are an expert ${agentId}.`;
|
|
628
903
|
const securityKey = this.generateSecurityKey();
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
model: model || agent.inline?.model,
|
|
639
|
-
workingDirectory: workingDir,
|
|
640
|
-
},
|
|
641
|
-
mode: 'execute',
|
|
642
|
-
messages: contextMessages,
|
|
643
|
-
platform: platform,
|
|
644
|
-
tools: this.buildToolsContext(),
|
|
645
|
-
vars: {
|
|
646
|
-
security_key: securityKey,
|
|
647
|
-
},
|
|
648
|
-
};
|
|
649
|
-
systemPrompt = await processDocumentTemplate(systemPrompt, this.documentLoaderService, templateContext);
|
|
904
|
+
const contextMessages = messages && messages.length > 0 ? messages.slice(0, -1) : [];
|
|
905
|
+
const documentsForExecute = {};
|
|
906
|
+
const docNamesForExecute = this.documentLoaderService.getDocumentNames();
|
|
907
|
+
for (const docName of docNamesForExecute) {
|
|
908
|
+
const content = await this.documentLoaderService.getDocumentContent(docName);
|
|
909
|
+
const toc = await this.documentLoaderService.getDocumentToc(docName);
|
|
910
|
+
if (content) {
|
|
911
|
+
documentsForExecute[docName] = { content, toc };
|
|
912
|
+
}
|
|
650
913
|
}
|
|
651
|
-
|
|
914
|
+
const templateContext = {
|
|
915
|
+
user_input: task,
|
|
916
|
+
messages: contextMessages,
|
|
917
|
+
agent: {
|
|
918
|
+
id: agent.id,
|
|
919
|
+
name: agent.name || agent.id,
|
|
920
|
+
provider: (Array.isArray(agent.provider) ? agent.provider[0] : agent.provider) || 'claude',
|
|
921
|
+
model: model || agent.inline?.model,
|
|
922
|
+
workingDirectory: workingDir,
|
|
923
|
+
inline: {
|
|
924
|
+
prompt: agent.inline?.prompt || agent.inline?.system_prompt || agent.systemPrompt || '',
|
|
925
|
+
},
|
|
926
|
+
specialties: agent.specialties,
|
|
927
|
+
capabilities: agent.capabilities,
|
|
928
|
+
description: agent.description,
|
|
929
|
+
},
|
|
930
|
+
documents: documentsForExecute,
|
|
931
|
+
vars: {
|
|
932
|
+
security_key: securityKey,
|
|
933
|
+
},
|
|
934
|
+
props: {},
|
|
935
|
+
mode: 'execute',
|
|
936
|
+
platform: platform,
|
|
937
|
+
env: process.env,
|
|
938
|
+
tools: this.buildToolsContext(),
|
|
939
|
+
};
|
|
940
|
+
let systemPrompt = await this.processAgentSystemPrompt(agent, templateContext);
|
|
941
|
+
if (process.env.CREWX_APPEND_LEGACY === 'true') {
|
|
942
|
+
this.logger.debug('[WBS-14] Legacy append mode enabled (execute)', {
|
|
943
|
+
agentId: agent.id,
|
|
944
|
+
layoutId: typeof agent.inline?.layout === 'string'
|
|
945
|
+
? agent.inline?.layout
|
|
946
|
+
: agent.inline?.layout?.id ?? 'crewx/default',
|
|
947
|
+
});
|
|
948
|
+
systemPrompt += `
|
|
652
949
|
Specialties: ${agent.specialties?.join(', ') || 'General'}
|
|
653
950
|
Capabilities: ${agent.capabilities?.join(', ') || 'Implementation'}
|
|
654
951
|
Working Directory: ${workingDir}`;
|
|
952
|
+
}
|
|
953
|
+
else if (process.env.CREWX_WBS14_TELEMETRY === 'true') {
|
|
954
|
+
this.logger.debug('[WBS-14] Metadata delegated to layout (execute mode)', {
|
|
955
|
+
agentId: agent.id,
|
|
956
|
+
hasLayout: Boolean(agent.inline?.layout),
|
|
957
|
+
layoutId: typeof agent.inline?.layout === 'string'
|
|
958
|
+
? agent.inline?.layout
|
|
959
|
+
: agent.inline?.layout?.id ?? 'crewx/default',
|
|
960
|
+
specialtiesCount: agent.specialties?.length ?? 0,
|
|
961
|
+
capabilitiesCount: agent.capabilities?.length ?? 0,
|
|
962
|
+
workingDirectory: workingDir,
|
|
963
|
+
});
|
|
964
|
+
}
|
|
655
965
|
const fullPrompt = context
|
|
656
966
|
? `${systemPrompt}
|
|
657
967
|
${context}
|
|
@@ -662,26 +972,74 @@ Task: ${task}
|
|
|
662
972
|
|
|
663
973
|
Task: ${task}
|
|
664
974
|
`;
|
|
665
|
-
let
|
|
666
|
-
let
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
975
|
+
let runtimeResult;
|
|
976
|
+
let providerResolution;
|
|
977
|
+
let providerInput;
|
|
978
|
+
if (args.provider) {
|
|
979
|
+
providerInput = args.provider;
|
|
980
|
+
}
|
|
981
|
+
else if (Array.isArray(agent.provider)) {
|
|
982
|
+
providerInput = await this.getAvailableProvider(agent.provider);
|
|
983
|
+
}
|
|
984
|
+
else if (typeof agent.provider === 'string' && agent.provider.trim().length > 0) {
|
|
985
|
+
providerInput = agent.provider;
|
|
986
|
+
}
|
|
987
|
+
try {
|
|
988
|
+
runtimeResult = await this.providerBridgeService.createAgentRuntime({
|
|
989
|
+
provider: providerInput,
|
|
990
|
+
defaultAgentId: agentId,
|
|
991
|
+
validAgents: agents.map(a => a.id),
|
|
992
|
+
enableCallStack: true,
|
|
993
|
+
});
|
|
994
|
+
providerResolution = runtimeResult.resolution;
|
|
995
|
+
}
|
|
996
|
+
catch (error) {
|
|
997
|
+
const errorMsg = error instanceof Error ? error.message : 'Unknown provider error';
|
|
998
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
999
|
+
level: 'error',
|
|
1000
|
+
message: `Provider resolution failed: ${errorMsg}`,
|
|
1001
|
+
});
|
|
1002
|
+
this.taskManagementService.completeTask(taskId, { success: false, error: errorMsg }, false);
|
|
1003
|
+
return {
|
|
1004
|
+
content: [
|
|
1005
|
+
{
|
|
1006
|
+
type: 'text',
|
|
1007
|
+
text: `❌ **Provider Error**\n\n${errorMsg}\n\nAvailable providers: ${this.providerBridgeService.listAvailableProviders().join(', ')}`,
|
|
1008
|
+
},
|
|
1009
|
+
],
|
|
1010
|
+
success: false,
|
|
1011
|
+
agent: agentId,
|
|
1012
|
+
provider: 'none',
|
|
1013
|
+
error: errorMsg,
|
|
1014
|
+
taskId,
|
|
1015
|
+
readOnlyMode: false,
|
|
1016
|
+
readOnly: false,
|
|
1017
|
+
};
|
|
1018
|
+
}
|
|
1019
|
+
const resolvedProviderName = providerResolution.provider.name;
|
|
1020
|
+
if (args.provider) {
|
|
1021
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
1022
|
+
level: 'info',
|
|
1023
|
+
message: `Using CLI-specified provider: ${args.provider} (resolved to ${resolvedProviderName})`
|
|
1024
|
+
});
|
|
1025
|
+
}
|
|
1026
|
+
else if (providerInput) {
|
|
1027
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
1028
|
+
level: 'info',
|
|
1029
|
+
message: `Agent provider resolved to ${resolvedProviderName} (input: ${providerInput})`
|
|
1030
|
+
});
|
|
675
1031
|
}
|
|
676
1032
|
else {
|
|
677
|
-
|
|
1033
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
1034
|
+
level: 'info',
|
|
1035
|
+
message: `Using ProviderBridge fallback provider: ${resolvedProviderName}`,
|
|
1036
|
+
});
|
|
678
1037
|
}
|
|
679
|
-
this.
|
|
680
|
-
const
|
|
681
|
-
const modelToUse = model || agent.inline?.model;
|
|
1038
|
+
const agentOptions = this.getOptionsForAgent(agent, 'execute', resolvedProviderName);
|
|
1039
|
+
const modelToUse = model || agent.inline?.model || providerResolution.defaultModel;
|
|
682
1040
|
const structuredPayload = await this.buildStructuredPayload({
|
|
683
1041
|
agentId,
|
|
684
|
-
provider,
|
|
1042
|
+
provider: resolvedProviderName,
|
|
685
1043
|
mode: 'execute',
|
|
686
1044
|
prompt: fullPrompt,
|
|
687
1045
|
context,
|
|
@@ -689,16 +1047,55 @@ Task: ${task}
|
|
|
689
1047
|
platform: platform || 'cli',
|
|
690
1048
|
model: modelToUse,
|
|
691
1049
|
});
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
1050
|
+
const runtimeMessages = this.toConversationMessages(messages);
|
|
1051
|
+
let agentResult;
|
|
1052
|
+
try {
|
|
1053
|
+
agentResult = await runtimeResult.runtime.agent.execute({
|
|
1054
|
+
agentId,
|
|
1055
|
+
prompt: fullPrompt,
|
|
1056
|
+
context,
|
|
1057
|
+
messages: runtimeMessages,
|
|
1058
|
+
model: modelToUse,
|
|
1059
|
+
options: {
|
|
1060
|
+
workingDirectory: workingDir,
|
|
1061
|
+
timeout: 1200000,
|
|
1062
|
+
additionalArgs: agentOptions,
|
|
1063
|
+
taskId,
|
|
1064
|
+
pipedContext: structuredPayload,
|
|
1065
|
+
securityKey,
|
|
1066
|
+
},
|
|
1067
|
+
});
|
|
1068
|
+
}
|
|
1069
|
+
catch (error) {
|
|
1070
|
+
const errorMsg = error instanceof Error ? error.message : 'Agent runtime execution failed';
|
|
1071
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
1072
|
+
level: 'error',
|
|
1073
|
+
message: `Agent runtime execution failed: ${errorMsg}`,
|
|
1074
|
+
});
|
|
1075
|
+
this.taskManagementService.completeTask(taskId, { success: false, error: errorMsg }, false);
|
|
1076
|
+
return {
|
|
1077
|
+
content: [
|
|
1078
|
+
{
|
|
1079
|
+
type: 'text',
|
|
1080
|
+
text: `❌ **Provider Error**\n\n${errorMsg}\n\nAvailable providers: ${this.providerBridgeService.listAvailableProviders().join(', ')}`,
|
|
1081
|
+
},
|
|
1082
|
+
],
|
|
1083
|
+
success: false,
|
|
1084
|
+
agent: agentId,
|
|
1085
|
+
provider: resolvedProviderName,
|
|
1086
|
+
error: errorMsg,
|
|
1087
|
+
taskId,
|
|
1088
|
+
readOnlyMode: false,
|
|
1089
|
+
readOnly: false,
|
|
1090
|
+
};
|
|
1091
|
+
}
|
|
1092
|
+
const response = {
|
|
1093
|
+
success: agentResult.success,
|
|
1094
|
+
content: agentResult.content,
|
|
1095
|
+
provider: agentResult.metadata?.provider ?? resolvedProviderName,
|
|
1096
|
+
taskId: agentResult.metadata?.taskId ?? taskId,
|
|
1097
|
+
error: agentResult.metadata?.error,
|
|
1098
|
+
};
|
|
702
1099
|
this.taskManagementService.addTaskLog(taskId, { level: 'info', message: `Execution completed. Success: ${response.success}` });
|
|
703
1100
|
this.taskManagementService.completeTask(taskId, response, response.success);
|
|
704
1101
|
const responseText = response.success ? response.content : `❌ Execution Failed: ${response.error}`;
|
|
@@ -770,6 +1167,41 @@ Task: ${task}
|
|
|
770
1167
|
readOnly,
|
|
771
1168
|
};
|
|
772
1169
|
}
|
|
1170
|
+
toConversationMessages(messages) {
|
|
1171
|
+
if (!messages || messages.length === 0) {
|
|
1172
|
+
return [];
|
|
1173
|
+
}
|
|
1174
|
+
return messages.map((message, index) => {
|
|
1175
|
+
const metadata = message.metadata ?? {};
|
|
1176
|
+
const rawTimestamp = metadata.timestamp;
|
|
1177
|
+
let timestamp;
|
|
1178
|
+
if (rawTimestamp instanceof Date) {
|
|
1179
|
+
timestamp = rawTimestamp;
|
|
1180
|
+
}
|
|
1181
|
+
else if (typeof rawTimestamp === 'number') {
|
|
1182
|
+
timestamp = new Date(rawTimestamp);
|
|
1183
|
+
}
|
|
1184
|
+
else if (typeof rawTimestamp === 'string') {
|
|
1185
|
+
const parsed = new Date(rawTimestamp);
|
|
1186
|
+
timestamp = Number.isNaN(parsed.getTime()) ? new Date() : parsed;
|
|
1187
|
+
}
|
|
1188
|
+
else {
|
|
1189
|
+
timestamp = new Date();
|
|
1190
|
+
}
|
|
1191
|
+
return {
|
|
1192
|
+
id: typeof metadata.id === 'string' ? metadata.id : `cli-msg-${index}`,
|
|
1193
|
+
userId: typeof metadata.userId === 'string'
|
|
1194
|
+
? metadata.userId
|
|
1195
|
+
: message.isAssistant
|
|
1196
|
+
? 'assistant'
|
|
1197
|
+
: 'user',
|
|
1198
|
+
text: message.text,
|
|
1199
|
+
timestamp,
|
|
1200
|
+
isAssistant: message.isAssistant,
|
|
1201
|
+
metadata: metadata,
|
|
1202
|
+
};
|
|
1203
|
+
});
|
|
1204
|
+
}
|
|
773
1205
|
getOptionsForAgent(agent, mode, provider) {
|
|
774
1206
|
try {
|
|
775
1207
|
if (agent.options && typeof agent.options === 'object' && !Array.isArray(agent.options)) {
|
|
@@ -1446,6 +1878,8 @@ __decorate([
|
|
|
1446
1878
|
], CrewXTool.prototype, "clearAllLogs", null);
|
|
1447
1879
|
exports.CrewXTool = CrewXTool = CrewXTool_1 = __decorate([
|
|
1448
1880
|
(0, common_1.Injectable)(),
|
|
1881
|
+
__param(12, (0, common_1.Inject)('LAYOUT_LOADER')),
|
|
1882
|
+
__param(13, (0, common_1.Inject)('LAYOUT_RENDERER')),
|
|
1449
1883
|
__metadata("design:paramtypes", [ai_service_1.AIService,
|
|
1450
1884
|
ai_provider_service_1.AIProviderService,
|
|
1451
1885
|
project_service_1.ProjectService,
|
|
@@ -1456,6 +1890,9 @@ exports.CrewXTool = CrewXTool = CrewXTool_1 = __decorate([
|
|
|
1456
1890
|
document_loader_service_1.DocumentLoaderService,
|
|
1457
1891
|
tool_call_service_1.ToolCallService,
|
|
1458
1892
|
agent_loader_service_1.AgentLoaderService,
|
|
1459
|
-
remote_agent_service_1.RemoteAgentService
|
|
1893
|
+
remote_agent_service_1.RemoteAgentService,
|
|
1894
|
+
provider_bridge_service_1.ProviderBridgeService,
|
|
1895
|
+
crewx_sdk_1.LayoutLoader,
|
|
1896
|
+
crewx_sdk_1.LayoutRenderer])
|
|
1460
1897
|
], CrewXTool);
|
|
1461
1898
|
//# sourceMappingURL=crewx.tool.js.map
|