@crewx/cli 0.8.3-rc.9 → 0.8.4-rc.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/README.md +33 -33
- package/bin/crewx +2 -2
- package/dist/ai-provider.service.d.ts +34 -0
- package/dist/ai-provider.service.js +311 -0
- package/dist/ai-provider.service.js.map +1 -0
- package/dist/ai.service.d.ts +17 -0
- package/dist/ai.service.js +51 -0
- package/dist/ai.service.js.map +1 -0
- package/dist/app.module.d.ts +5 -0
- package/dist/app.module.js +165 -0
- package/dist/app.module.js.map +1 -0
- package/dist/cli/agent.handler.d.ts +2 -0
- package/dist/cli/agent.handler.js +186 -0
- package/dist/cli/agent.handler.js.map +1 -0
- package/dist/cli/builtin.handler.d.ts +3 -0
- package/dist/cli/builtin.handler.js +110 -0
- package/dist/cli/builtin.handler.js.map +1 -0
- package/dist/cli/chat.handler.d.ts +20 -0
- package/dist/cli/chat.handler.js +446 -0
- package/dist/cli/chat.handler.js.map +1 -0
- package/dist/cli/cli.handler.d.ts +4 -0
- package/dist/cli/cli.handler.js +119 -0
- package/dist/cli/cli.handler.js.map +1 -0
- package/dist/cli/doctor.handler.d.ts +38 -0
- package/dist/cli/doctor.handler.js +495 -0
- package/dist/cli/doctor.handler.js.map +1 -0
- package/dist/cli/execute.handler.d.ts +2 -0
- package/dist/cli/execute.handler.js +321 -0
- package/dist/cli/execute.handler.js.map +1 -0
- package/dist/cli/help.handler.d.ts +2 -0
- package/dist/cli/help.handler.js +10 -0
- package/dist/cli/help.handler.js.map +1 -0
- package/dist/cli/init.handler.d.ts +26 -0
- package/dist/cli/init.handler.js +450 -0
- package/dist/cli/init.handler.js.map +1 -0
- 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/mcp.handler.d.ts +3 -0
- package/dist/cli/mcp.handler.js +121 -0
- package/dist/cli/mcp.handler.js.map +1 -0
- package/dist/cli/query.handler.d.ts +2 -0
- package/dist/cli/query.handler.js +379 -0
- package/dist/cli/query.handler.js.map +1 -0
- package/dist/cli/skill.handler.d.ts +2 -0
- package/dist/cli/skill.handler.js +252 -0
- package/dist/cli/skill.handler.js.map +1 -0
- package/dist/cli/slack-files.handler.d.ts +2 -0
- package/dist/cli/slack-files.handler.js +291 -0
- package/dist/cli/slack-files.handler.js.map +1 -0
- package/dist/cli/template.handler.d.ts +2 -0
- package/dist/cli/template.handler.js +188 -0
- package/dist/cli/template.handler.js.map +1 -0
- package/dist/cli/templates.handler.d.ts +2 -0
- package/dist/cli/templates.handler.js +100 -0
- package/dist/cli/templates.handler.js.map +1 -0
- package/dist/cli-options.d.ts +39 -0
- package/dist/cli-options.js +355 -0
- package/dist/cli-options.js.map +1 -0
- package/dist/commands/agent.js +23 -23
- package/dist/commands/init.js +36 -28
- package/dist/commands/resolve-prompt.d.ts +4 -4
- package/dist/commands/resolve-prompt.js +5 -5
- package/dist/config/timeout.config.d.ts +14 -0
- package/dist/config/timeout.config.js +34 -0
- package/dist/config/timeout.config.js.map +1 -0
- package/dist/conversation/base-conversation-history.provider.d.ts +12 -0
- package/dist/conversation/base-conversation-history.provider.js +45 -0
- package/dist/conversation/base-conversation-history.provider.js.map +1 -0
- package/dist/conversation/cli-conversation-history.provider.d.ts +16 -0
- package/dist/conversation/cli-conversation-history.provider.js +111 -0
- package/dist/conversation/cli-conversation-history.provider.js.map +1 -0
- package/dist/conversation/conversation-provider.factory.d.ts +10 -0
- package/dist/conversation/conversation-provider.factory.js +50 -0
- package/dist/conversation/conversation-provider.factory.js.map +1 -0
- package/dist/conversation/index.d.ts +6 -0
- package/dist/conversation/index.js +27 -0
- package/dist/conversation/index.js.map +1 -0
- package/dist/conversation/slack-conversation-history.provider.d.ts +29 -0
- package/dist/conversation/slack-conversation-history.provider.js +302 -0
- package/dist/conversation/slack-conversation-history.provider.js.map +1 -0
- package/dist/crewx.tool.d.ts +359 -0
- package/dist/crewx.tool.js +2501 -0
- package/dist/crewx.tool.js.map +1 -0
- package/dist/crewx.tool.spec.d.ts +1 -0
- package/dist/crewx.tool.spec.js +158 -0
- package/dist/crewx.tool.spec.js.map +1 -0
- package/dist/guards/bearer-auth.guard.d.ts +7 -0
- package/dist/guards/bearer-auth.guard.js +44 -0
- package/dist/guards/bearer-auth.guard.js.map +1 -0
- package/dist/health.controller.d.ts +6 -0
- package/dist/health.controller.js +32 -0
- package/dist/health.controller.js.map +1 -0
- package/dist/main.js +72 -71
- package/dist/main.js.map +1 -0
- package/dist/mcp.controller.d.ts +8 -0
- package/dist/mcp.controller.js +62 -0
- package/dist/mcp.controller.js.map +1 -0
- package/dist/package.json +3 -0
- package/dist/providers/dynamic-provider.factory.d.ts +15 -0
- package/dist/providers/dynamic-provider.factory.js +133 -0
- package/dist/providers/dynamic-provider.factory.js.map +1 -0
- package/dist/providers/logger.adapter.d.ts +6 -0
- package/dist/providers/logger.adapter.js +102 -0
- package/dist/providers/logger.adapter.js.map +1 -0
- package/dist/services/agent-loader.service.d.ts +35 -0
- package/dist/services/agent-loader.service.js +622 -0
- package/dist/services/agent-loader.service.js.map +1 -0
- package/dist/services/auth.service.d.ts +9 -0
- package/dist/services/auth.service.js +47 -0
- package/dist/services/auth.service.js.map +1 -0
- package/dist/services/config-validator.service.d.ts +29 -0
- package/dist/services/config-validator.service.js +483 -0
- package/dist/services/config-validator.service.js.map +1 -0
- package/dist/services/config.service.d.ts +45 -0
- package/dist/services/config.service.js +352 -0
- package/dist/services/config.service.js.map +1 -0
- package/dist/services/document-loader.service.d.ts +21 -0
- package/dist/services/document-loader.service.js +156 -0
- package/dist/services/document-loader.service.js.map +1 -0
- package/dist/services/help.service.d.ts +5 -0
- package/dist/services/help.service.js +139 -0
- package/dist/services/help.service.js.map +1 -0
- package/dist/services/intelligent-compression.service.d.ts +20 -0
- package/dist/services/intelligent-compression.service.js +179 -0
- package/dist/services/intelligent-compression.service.js.map +1 -0
- package/dist/services/mcp-client.service.d.ts +26 -0
- package/dist/services/mcp-client.service.js +81 -0
- package/dist/services/mcp-client.service.js.map +1 -0
- package/dist/services/parallel-processing.service.d.ts +108 -0
- package/dist/services/parallel-processing.service.js +333 -0
- package/dist/services/parallel-processing.service.js.map +1 -0
- 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 +50 -0
- package/dist/services/remote-agent.service.js +171 -0
- package/dist/services/remote-agent.service.js.map +1 -0
- package/dist/services/result-formatter.service.d.ts +27 -0
- package/dist/services/result-formatter.service.js +126 -0
- package/dist/services/result-formatter.service.js.map +1 -0
- package/dist/services/skill-loader.service.d.ts +15 -0
- package/dist/services/skill-loader.service.js +278 -0
- package/dist/services/skill-loader.service.js.map +1 -0
- package/dist/services/skill.service.d.ts +67 -0
- package/dist/services/skill.service.js +670 -0
- package/dist/services/skill.service.js.map +1 -0
- package/dist/services/skill.service.spec.d.ts +1 -0
- package/dist/services/skill.service.spec.js +35 -0
- package/dist/services/skill.service.spec.js.map +1 -0
- package/dist/services/task-management.service.d.ts +65 -0
- package/dist/services/task-management.service.js +288 -0
- package/dist/services/task-management.service.js.map +1 -0
- package/dist/services/template.service.d.ts +61 -0
- package/dist/services/template.service.js +416 -0
- package/dist/services/template.service.js.map +1 -0
- package/dist/services/tool-call.service.d.ts +19 -0
- package/dist/services/tool-call.service.js +1061 -0
- package/dist/services/tool-call.service.js.map +1 -0
- package/dist/services/tracing.service.d.ts +200 -0
- package/dist/services/tracing.service.js +1290 -0
- package/dist/services/tracing.service.js.map +1 -0
- package/dist/slack/formatters/message.formatter.d.ts +32 -0
- package/dist/slack/formatters/message.formatter.js +352 -0
- package/dist/slack/formatters/message.formatter.js.map +1 -0
- package/dist/slack/services/slack-file-download.service.d.ts +58 -0
- package/dist/slack/services/slack-file-download.service.js +558 -0
- package/dist/slack/services/slack-file-download.service.js.map +1 -0
- package/dist/slack/slack-bot.d.ts +33 -0
- package/dist/slack/slack-bot.js +567 -0
- package/dist/slack/slack-bot.js.map +1 -0
- package/dist/stderr.logger.d.ts +8 -0
- package/dist/stderr.logger.js +26 -0
- package/dist/stderr.logger.js.map +1 -0
- package/dist/types/usage.types.d.ts +107 -0
- package/dist/types/usage.types.js +3 -0
- package/dist/types/usage.types.js.map +1 -0
- package/dist/utils/config-utils.d.ts +15 -0
- package/dist/utils/config-utils.js +69 -0
- package/dist/utils/config-utils.js.map +1 -0
- package/dist/utils/extract-text.d.ts +1 -0
- package/dist/utils/extract-text.js +15 -0
- package/dist/utils/extract-text.js.map +1 -0
- package/dist/utils/mcp-installer.d.ts +20 -0
- package/dist/utils/mcp-installer.js +199 -0
- package/dist/utils/mcp-installer.js.map +1 -0
- package/dist/utils/project-hash.d.ts +6 -0
- package/dist/utils/project-hash.js +70 -0
- package/dist/utils/project-hash.js.map +1 -0
- package/dist/utils/simple-security.d.ts +3 -0
- package/dist/utils/simple-security.js +20 -0
- package/dist/utils/simple-security.js.map +1 -0
- package/dist/utils/stdin-utils.d.ts +6 -0
- package/dist/utils/stdin-utils.js +109 -0
- package/dist/utils/stdin-utils.js.map +1 -0
- package/dist/utils/template-processor.d.ts +4 -0
- package/dist/utils/template-processor.js +266 -0
- package/dist/utils/template-processor.js.map +1 -0
- 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/dist/version.d.ts +1 -0
- package/dist/version.js +17 -0
- package/dist/version.js.map +1 -0
- package/dist/workspace.service.d.ts +44 -0
- package/dist/workspace.service.js +299 -0
- package/dist/workspace.service.js.map +1 -0
- package/package.json +18 -18
- package/dist/commands/task-db.d.ts +0 -33
- package/dist/commands/task-db.js +0 -107
- package/dist/examples/deny-secrets-plugin.d.ts +0 -22
- package/dist/examples/deny-secrets-plugin.js +0 -40
- package/dist/plugins/examples/echo-hook.d.ts +0 -24
- package/dist/plugins/examples/echo-hook.js +0 -60
- package/dist/plugins/examples/verify-echo-hook.d.ts +0 -8
- package/dist/plugins/examples/verify-echo-hook.js +0 -47
- package/dist/plugins/sqlite-tracing.d.ts +0 -11
- package/dist/plugins/sqlite-tracing.js +0 -19
- package/dist/repository/workspace.repository.d.ts +0 -26
- package/dist/repository/workspace.repository.js +0 -111
- package/dist/schema/tasks.d.ts +0 -7
- package/dist/schema/tasks.js +0 -48
|
@@ -0,0 +1,416 @@
|
|
|
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 TemplateService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.TemplateService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const fs_1 = require("fs");
|
|
16
|
+
const path_1 = require("path");
|
|
17
|
+
const giget_1 = require("giget");
|
|
18
|
+
const CREWX_VERSION = '0.3.0';
|
|
19
|
+
const DEFAULT_TEMPLATE_REPO = 'https://github.com/sowonlabs/crewx-templates';
|
|
20
|
+
const TEMPLATE_LIST_CACHE_TTL_MS = 5 * 60 * 1000;
|
|
21
|
+
let TemplateService = TemplateService_1 = class TemplateService {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.logger = new common_1.Logger(TemplateService_1.name);
|
|
24
|
+
this.cdnBaseUrl = 'https://cdn.jsdelivr.net/gh/sowonlabs/crewx@';
|
|
25
|
+
this.githubRawUrl = 'https://raw.githubusercontent.com/sowonlabs/crewx/';
|
|
26
|
+
this.cacheDir = (0, path_1.join)(process.cwd(), '.crewx', 'cache', 'templates');
|
|
27
|
+
this.remoteTemplatesEnabled = process.env.CREWX_ENABLE_REMOTE_TEMPLATES === 'true';
|
|
28
|
+
this.templateListCache = null;
|
|
29
|
+
if (!(0, fs_1.existsSync)(this.cacheDir)) {
|
|
30
|
+
(0, fs_1.mkdirSync)(this.cacheDir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
tryLoadLocalTemplate(templateName) {
|
|
34
|
+
const candidatePaths = [
|
|
35
|
+
(0, path_1.join)(__dirname, '..', 'templates', 'agents', `${templateName}.yaml`),
|
|
36
|
+
(0, path_1.join)(__dirname, '..', '..', 'templates', 'agents', `${templateName}.yaml`),
|
|
37
|
+
(0, path_1.join)(__dirname, '..', '..', '..', 'templates', 'agents', `${templateName}.yaml`),
|
|
38
|
+
(0, path_1.join)(process.cwd(), 'templates', 'agents', `${templateName}.yaml`),
|
|
39
|
+
];
|
|
40
|
+
for (const candidate of candidatePaths) {
|
|
41
|
+
if (!(0, fs_1.existsSync)(candidate)) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const content = (0, fs_1.readFileSync)(candidate, 'utf8');
|
|
46
|
+
this.logger.log(`📄 Using local template: ${templateName} (${candidate})`);
|
|
47
|
+
return content;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
51
|
+
this.logger.warn(`Failed to read local template at ${candidate}: ${message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
isVersionCompatible(minVersion, maxVersion) {
|
|
57
|
+
if (!minVersion && !maxVersion) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
const currentVersion = CREWX_VERSION.split('.').map(Number);
|
|
61
|
+
if (minVersion) {
|
|
62
|
+
const min = minVersion.split('.').map(Number);
|
|
63
|
+
if (this.compareVersions(currentVersion, min) < 0) {
|
|
64
|
+
this.logger.warn(`Template requires CrewX >= ${minVersion}, current version is ${CREWX_VERSION}`);
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (maxVersion) {
|
|
69
|
+
const max = maxVersion.split('.').map(Number);
|
|
70
|
+
if (this.compareVersions(currentVersion, max) > 0) {
|
|
71
|
+
this.logger.warn(`Template supports CrewX <= ${maxVersion}, current version is ${CREWX_VERSION}`);
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
compareVersions(v1, v2) {
|
|
78
|
+
for (let i = 0; i < Math.max(v1.length, v2.length); i++) {
|
|
79
|
+
const num1 = v1[i] || 0;
|
|
80
|
+
const num2 = v2[i] || 0;
|
|
81
|
+
if (num1 < num2)
|
|
82
|
+
return -1;
|
|
83
|
+
if (num1 > num2)
|
|
84
|
+
return 1;
|
|
85
|
+
}
|
|
86
|
+
return 0;
|
|
87
|
+
}
|
|
88
|
+
async downloadTemplate(templateName, version = 'main') {
|
|
89
|
+
try {
|
|
90
|
+
const localTemplate = this.tryLoadLocalTemplate(templateName);
|
|
91
|
+
if (localTemplate) {
|
|
92
|
+
return localTemplate;
|
|
93
|
+
}
|
|
94
|
+
if (!this.remoteTemplatesEnabled) {
|
|
95
|
+
this.logger.warn(`Remote template download disabled (set CREWX_ENABLE_REMOTE_TEMPLATES=true to enable).`);
|
|
96
|
+
const cached = this.loadFromCache(templateName, version);
|
|
97
|
+
if (cached) {
|
|
98
|
+
this.logger.log(`📦 Using cached template: ${templateName}@${version}`);
|
|
99
|
+
return cached;
|
|
100
|
+
}
|
|
101
|
+
throw new Error(`Remote template download disabled and no cached template found for ${templateName}@${version}`);
|
|
102
|
+
}
|
|
103
|
+
this.logger.log(`Downloading template: ${templateName}@${version}`);
|
|
104
|
+
try {
|
|
105
|
+
const versions = await this.getVersions();
|
|
106
|
+
const versionInfo = versions?.versions?.[version];
|
|
107
|
+
if (versionInfo) {
|
|
108
|
+
const compatible = this.isVersionCompatible(versionInfo.minCrewxVersion, versionInfo.maxCrewxVersion);
|
|
109
|
+
if (!compatible) {
|
|
110
|
+
throw new Error(`❌ Template version ${version} is not compatible with CrewX ${CREWX_VERSION}.\n` +
|
|
111
|
+
` Required: ${versionInfo.minCrewxVersion || 'any'} - ${versionInfo.maxCrewxVersion || 'any'}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (versionError) {
|
|
116
|
+
this.logger.warn(`Could not check version compatibility: ${versionError?.message || versionError}`);
|
|
117
|
+
}
|
|
118
|
+
const cdnUrl = `${this.cdnBaseUrl}${version}/templates/agents/${templateName}.yaml`;
|
|
119
|
+
try {
|
|
120
|
+
const response = await fetch(cdnUrl);
|
|
121
|
+
if (response.ok) {
|
|
122
|
+
const content = await response.text();
|
|
123
|
+
this.logger.log(`✅ Downloaded from CDN: ${templateName}@${version}`);
|
|
124
|
+
this.cacheTemplate(templateName, version, content);
|
|
125
|
+
return content;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (cdnError) {
|
|
129
|
+
this.logger.warn(`CDN download failed, trying GitHub raw...`);
|
|
130
|
+
}
|
|
131
|
+
const githubUrl = `${this.githubRawUrl}${version}/templates/agents/${templateName}.yaml`;
|
|
132
|
+
const response = await fetch(githubUrl);
|
|
133
|
+
if (!response.ok) {
|
|
134
|
+
throw new Error(`Template not found: ${templateName}@${version} (HTTP ${response.status})`);
|
|
135
|
+
}
|
|
136
|
+
const content = await response.text();
|
|
137
|
+
this.logger.log(`✅ Downloaded from GitHub: ${templateName}@${version}`);
|
|
138
|
+
this.cacheTemplate(templateName, version, content);
|
|
139
|
+
return content;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
this.logger.error(`Failed to download template: ${error instanceof Error ? error.message : error}`);
|
|
143
|
+
const cached = this.loadFromCache(templateName, version);
|
|
144
|
+
if (cached) {
|
|
145
|
+
this.logger.log(`📦 Using cached template: ${templateName}@${version}`);
|
|
146
|
+
return cached;
|
|
147
|
+
}
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async fetchTemplateList() {
|
|
152
|
+
const repo = process.env.CREWX_TEMPLATE_REPO || DEFAULT_TEMPLATE_REPO;
|
|
153
|
+
if (this.templateListCache &&
|
|
154
|
+
this.templateListCache.repo === repo &&
|
|
155
|
+
this.templateListCache.expiresAt > Date.now()) {
|
|
156
|
+
return this.templateListCache.templates;
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
const registryUrl = this.buildTemplatesRegistryUrl(repo);
|
|
160
|
+
const response = await fetch(registryUrl);
|
|
161
|
+
if (!response.ok) {
|
|
162
|
+
this.logger.warn(`Failed to fetch templates.json from ${registryUrl} (HTTP ${response.status}). Returning empty list.`);
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
const registry = await response.json();
|
|
166
|
+
const templates = Array.isArray(registry?.templates) ? registry.templates : [];
|
|
167
|
+
this.templateListCache = {
|
|
168
|
+
repo,
|
|
169
|
+
expiresAt: Date.now() + TEMPLATE_LIST_CACHE_TTL_MS,
|
|
170
|
+
templates,
|
|
171
|
+
};
|
|
172
|
+
return templates;
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
this.logger.warn(`Failed to fetch template list: ${error instanceof Error ? error.message : error}. Returning empty list.`);
|
|
176
|
+
return [];
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async listAvailableTemplates(version = 'main') {
|
|
180
|
+
if (!this.remoteTemplatesEnabled) {
|
|
181
|
+
this.logger.warn('Remote template listing disabled (set CREWX_ENABLE_REMOTE_TEMPLATES=true to enable). Returning defaults.');
|
|
182
|
+
return ['default', 'minimal', 'development', 'production'];
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
const url = `${this.cdnBaseUrl}${version}/versions.json`;
|
|
186
|
+
const response = await fetch(url);
|
|
187
|
+
if (!response.ok) {
|
|
188
|
+
throw new Error(`Failed to fetch template list (HTTP ${response.status})`);
|
|
189
|
+
}
|
|
190
|
+
const data = await response.json();
|
|
191
|
+
const latestVersion = data.latest;
|
|
192
|
+
const templates = data.versions[latestVersion]?.templates || [];
|
|
193
|
+
return templates;
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
this.logger.error(`Failed to list templates: ${error instanceof Error ? error.message : error}`);
|
|
197
|
+
return ['default', 'minimal', 'development', 'production'];
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
async getVersions() {
|
|
201
|
+
if (!this.remoteTemplatesEnabled) {
|
|
202
|
+
this.logger.warn('Remote template version lookup disabled (set CREWX_ENABLE_REMOTE_TEMPLATES=true to enable).');
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
try {
|
|
206
|
+
const url = `${this.cdnBaseUrl}main/versions.json`;
|
|
207
|
+
const response = await fetch(url);
|
|
208
|
+
if (!response.ok) {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
return await response.json();
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
this.logger.error(`Failed to get versions: ${error instanceof Error ? error.message : error}`);
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
async checkAvailability() {
|
|
219
|
+
try {
|
|
220
|
+
const url = `${this.cdnBaseUrl}main/versions.json`;
|
|
221
|
+
const response = await fetch(url, { method: 'HEAD' });
|
|
222
|
+
return response.ok;
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
cacheTemplate(name, version, content) {
|
|
229
|
+
try {
|
|
230
|
+
const cacheFile = (0, path_1.join)(this.cacheDir, `${name}_${version}.yaml`);
|
|
231
|
+
(0, fs_1.writeFileSync)(cacheFile, content, 'utf8');
|
|
232
|
+
this.logger.log(`💾 Cached template: ${name}@${version}`);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
this.logger.warn(`Failed to cache template: ${error instanceof Error ? error.message : error}`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
loadFromCache(name, version) {
|
|
239
|
+
try {
|
|
240
|
+
const cacheFile = (0, path_1.join)(this.cacheDir, `${name}_${version}.yaml`);
|
|
241
|
+
if ((0, fs_1.existsSync)(cacheFile)) {
|
|
242
|
+
return (0, fs_1.readFileSync)(cacheFile, 'utf8');
|
|
243
|
+
}
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
this.logger.warn(`Failed to load from cache: ${error instanceof Error ? error.message : error}`);
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
clearCache() {
|
|
252
|
+
try {
|
|
253
|
+
const fs = require('fs');
|
|
254
|
+
const files = fs.readdirSync(this.cacheDir);
|
|
255
|
+
for (const file of files) {
|
|
256
|
+
if (file.endsWith('.yaml')) {
|
|
257
|
+
fs.unlinkSync((0, path_1.join)(this.cacheDir, file));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
this.logger.log('🧹 Template cache cleared');
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
this.logger.error(`Failed to clear cache: ${error instanceof Error ? error.message : error}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
getTemplateRepositoryInfo(repoUrl) {
|
|
267
|
+
const defaultRef = 'main';
|
|
268
|
+
const normalizeRepoName = (name) => name.replace(/\.git$/, '');
|
|
269
|
+
if (repoUrl.startsWith('github:')) {
|
|
270
|
+
const withoutPrefix = repoUrl.replace(/^github:/, '');
|
|
271
|
+
const [repoPath, ref] = withoutPrefix.split('#');
|
|
272
|
+
if (!repoPath) {
|
|
273
|
+
throw new Error(`Invalid GitHub repository: ${repoUrl}`);
|
|
274
|
+
}
|
|
275
|
+
const [owner, repo] = repoPath.split('/');
|
|
276
|
+
if (!owner || !repo) {
|
|
277
|
+
throw new Error(`Invalid GitHub repository: ${repoUrl}`);
|
|
278
|
+
}
|
|
279
|
+
return { owner, name: normalizeRepoName(repo), ref: ref || defaultRef };
|
|
280
|
+
}
|
|
281
|
+
try {
|
|
282
|
+
const parsed = new URL(repoUrl);
|
|
283
|
+
if (!parsed.hostname.includes('github.com')) {
|
|
284
|
+
throw new Error(`Repository must be hosted on GitHub: ${repoUrl}`);
|
|
285
|
+
}
|
|
286
|
+
const trimmedPath = parsed.pathname.replace(/^\/+|\/+$/g, '');
|
|
287
|
+
const segments = trimmedPath.split('/');
|
|
288
|
+
const owner = segments[0];
|
|
289
|
+
const repo = segments[1];
|
|
290
|
+
if (!owner || !repo) {
|
|
291
|
+
throw new Error(`Invalid GitHub repository URL: ${repoUrl}`);
|
|
292
|
+
}
|
|
293
|
+
let ref = defaultRef;
|
|
294
|
+
if (segments.length >= 4 && segments[2] === 'tree' && segments[3]) {
|
|
295
|
+
ref = segments[3];
|
|
296
|
+
}
|
|
297
|
+
if (parsed.hash) {
|
|
298
|
+
ref = parsed.hash.substring(1);
|
|
299
|
+
}
|
|
300
|
+
return { owner, name: normalizeRepoName(repo), ref: ref || defaultRef };
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
throw new Error(`Invalid GitHub repository URL: ${repoUrl}`);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
buildTemplatesRegistryUrl(repoUrl) {
|
|
307
|
+
const { owner, name, ref } = this.getTemplateRepositoryInfo(repoUrl);
|
|
308
|
+
return `https://raw.githubusercontent.com/${owner}/${name}/${ref}/templates.json`;
|
|
309
|
+
}
|
|
310
|
+
parseGitHubUrl(url) {
|
|
311
|
+
if (url.startsWith('github:')) {
|
|
312
|
+
return url;
|
|
313
|
+
}
|
|
314
|
+
const { owner, name, ref } = this.getTemplateRepositoryInfo(url);
|
|
315
|
+
const suffix = ref && ref !== 'main' ? `#${ref}` : '';
|
|
316
|
+
return `github:${owner}/${name}${suffix}`;
|
|
317
|
+
}
|
|
318
|
+
collectFiles(dir, baseDir = dir) {
|
|
319
|
+
const files = [];
|
|
320
|
+
const entries = (0, fs_1.readdirSync)(dir);
|
|
321
|
+
for (const entry of entries) {
|
|
322
|
+
const fullPath = (0, path_1.join)(dir, entry);
|
|
323
|
+
const stat = (0, fs_1.statSync)(fullPath);
|
|
324
|
+
if (stat.isDirectory()) {
|
|
325
|
+
files.push(...this.collectFiles(fullPath, baseDir));
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
const relativePath = fullPath.substring(baseDir.length + 1);
|
|
329
|
+
files.push(relativePath);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return files;
|
|
333
|
+
}
|
|
334
|
+
async scaffoldProject(templateName, targetDir, force = false) {
|
|
335
|
+
try {
|
|
336
|
+
const repo = process.env.CREWX_TEMPLATE_REPO || DEFAULT_TEMPLATE_REPO;
|
|
337
|
+
this.logger.log(`📦 Downloading template from: ${repo}`);
|
|
338
|
+
const source = this.parseGitHubUrl(repo);
|
|
339
|
+
const fullSource = `${source}/${templateName}`;
|
|
340
|
+
this.logger.log(`📥 Downloading: ${templateName}`);
|
|
341
|
+
this.logger.log(`🎯 Target directory: ${targetDir}`);
|
|
342
|
+
const tempDir = (0, path_1.join)(targetDir, '.crewx-temp-download');
|
|
343
|
+
await (0, giget_1.downloadTemplate)(fullSource, {
|
|
344
|
+
dir: tempDir,
|
|
345
|
+
force: true,
|
|
346
|
+
forceClean: false,
|
|
347
|
+
offline: false,
|
|
348
|
+
});
|
|
349
|
+
let createdCount = 0;
|
|
350
|
+
let skippedCount = 0;
|
|
351
|
+
const createdFiles = [];
|
|
352
|
+
const skippedFiles = [];
|
|
353
|
+
const templateFiles = this.collectFiles(tempDir);
|
|
354
|
+
for (const relativeFile of templateFiles) {
|
|
355
|
+
const sourceFile = (0, path_1.join)(tempDir, relativeFile);
|
|
356
|
+
const targetFile = (0, path_1.join)(targetDir, relativeFile);
|
|
357
|
+
const fileExists = (0, fs_1.existsSync)(targetFile);
|
|
358
|
+
if (fileExists && !force) {
|
|
359
|
+
this.logger.log(`⚠️ Skipping existing file: ${relativeFile}`);
|
|
360
|
+
skippedCount++;
|
|
361
|
+
skippedFiles.push(relativeFile);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
const targetFileDir = (0, path_1.join)(targetFile, '..');
|
|
365
|
+
if (!(0, fs_1.existsSync)(targetFileDir)) {
|
|
366
|
+
(0, fs_1.mkdirSync)(targetFileDir, { recursive: true });
|
|
367
|
+
}
|
|
368
|
+
const content = (0, fs_1.readFileSync)(sourceFile, 'utf8');
|
|
369
|
+
(0, fs_1.writeFileSync)(targetFile, content, 'utf8');
|
|
370
|
+
if (fileExists) {
|
|
371
|
+
this.logger.log(`✅ Overwritten: ${relativeFile}`);
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
this.logger.log(`✅ Created: ${relativeFile}`);
|
|
375
|
+
}
|
|
376
|
+
createdCount++;
|
|
377
|
+
createdFiles.push(relativeFile);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
const fs = require('fs');
|
|
381
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
382
|
+
this.logger.log(`✅ Template processing complete: ${templateName}`);
|
|
383
|
+
return {
|
|
384
|
+
created: createdCount,
|
|
385
|
+
skipped: skippedCount,
|
|
386
|
+
createdFiles,
|
|
387
|
+
skippedFiles,
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
392
|
+
this.logger.error(`❌ Failed to download template: ${message}`);
|
|
393
|
+
if (message.includes('404') || message.includes('Not Found')) {
|
|
394
|
+
throw new Error(`Template "${templateName}" not found in repository.\n` +
|
|
395
|
+
` Repository: ${process.env.CREWX_TEMPLATE_REPO || DEFAULT_TEMPLATE_REPO}\n` +
|
|
396
|
+
` Template: ${templateName}\n\n` +
|
|
397
|
+
`Please check:\n` +
|
|
398
|
+
` 1. Template name is correct\n` +
|
|
399
|
+
` 2. Repository URL is correct (use CREWX_TEMPLATE_REPO env variable)\n` +
|
|
400
|
+
` 3. Repository is publicly accessible`);
|
|
401
|
+
}
|
|
402
|
+
if (message.includes('network') || message.includes('ENOTFOUND')) {
|
|
403
|
+
throw new Error(`Network error while downloading template.\n` +
|
|
404
|
+
` Repository: ${process.env.CREWX_TEMPLATE_REPO || DEFAULT_TEMPLATE_REPO}\n\n` +
|
|
405
|
+
`Please check your internet connection and try again.`);
|
|
406
|
+
}
|
|
407
|
+
throw new Error(`Failed to download template: ${message}`);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
};
|
|
411
|
+
exports.TemplateService = TemplateService;
|
|
412
|
+
exports.TemplateService = TemplateService = TemplateService_1 = __decorate([
|
|
413
|
+
(0, common_1.Injectable)(),
|
|
414
|
+
__metadata("design:paramtypes", [])
|
|
415
|
+
], TemplateService);
|
|
416
|
+
//# sourceMappingURL=template.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.service.js","sourceRoot":"","sources":["../../src/services/template.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AgentLoaderService } from './agent-loader.service';
|
|
2
|
+
import { type Tool, type ToolExecutionContext, type ToolExecutionResult, type ToolCallHandler } from '@sowonai/crewx-sdk';
|
|
3
|
+
export interface ToolExecutor {
|
|
4
|
+
execute(context: ToolExecutionContext): Promise<ToolExecutionResult>;
|
|
5
|
+
}
|
|
6
|
+
export declare class ToolCallService implements ToolCallHandler {
|
|
7
|
+
private readonly agentLoaderService;
|
|
8
|
+
private readonly logger;
|
|
9
|
+
private tools;
|
|
10
|
+
private crewXTool?;
|
|
11
|
+
constructor(agentLoaderService: AgentLoaderService);
|
|
12
|
+
setCrewXTool(crewXTool: any): void;
|
|
13
|
+
private registerBuiltinTools;
|
|
14
|
+
private registerMcpTools;
|
|
15
|
+
register(definition: Tool, executor: ToolExecutor): void;
|
|
16
|
+
list(): Tool[];
|
|
17
|
+
execute(name: string, input: Record<string, any>, context?: Partial<Omit<ToolExecutionContext, 'input'>>): Promise<ToolExecutionResult>;
|
|
18
|
+
has(name: string): boolean;
|
|
19
|
+
}
|