devchain-cli 0.8.5 → 0.9.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/dist/drizzle/0038_soft_texas_twister.sql +51 -0
- package/dist/drizzle/0039_early_the_spike.sql +1 -0
- package/dist/drizzle/0040_typical_mole_man.sql +3 -0
- package/dist/drizzle/meta/0037_snapshot.json +3670 -0
- package/dist/drizzle/meta/0038_snapshot.json +4019 -0
- package/dist/drizzle/meta/0039_snapshot.json +4026 -0
- package/dist/drizzle/meta/0040_snapshot.json +4028 -0
- package/dist/drizzle/meta/_journal.json +22 -1
- package/dist/server/app.module.js +2 -0
- package/dist/server/app.module.js.map +1 -1
- package/dist/server/modules/epics/controllers/epics.controller.js +4 -0
- package/dist/server/modules/epics/controllers/epics.controller.js.map +1 -1
- package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +74 -0
- package/dist/server/modules/mcp/dtos/mcp.dto.js +18 -1
- package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -1
- package/dist/server/modules/mcp/dtos/schema-registry.js +2 -0
- package/dist/server/modules/mcp/dtos/schema-registry.js.map +1 -1
- package/dist/server/modules/mcp/mcp.module.js +2 -0
- package/dist/server/modules/mcp/mcp.module.js.map +1 -1
- package/dist/server/modules/mcp/services/mcp.service.d.ts +7 -1
- package/dist/server/modules/mcp/services/mcp.service.js +126 -2
- package/dist/server/modules/mcp/services/mcp.service.js.map +1 -1
- package/dist/server/modules/mcp/tool-definitions.d.ts +177 -0
- package/dist/server/modules/mcp/tool-definitions.js +48 -0
- package/dist/server/modules/mcp/tool-definitions.js.map +1 -1
- package/dist/server/modules/projects/dtos/export.dto.d.ts +15 -15
- package/dist/server/modules/seeders/seeders/0002_seed_replace_permission_mode_plan.d.ts +3 -0
- package/dist/server/modules/seeders/seeders/0002_seed_replace_permission_mode_plan.js +45 -0
- package/dist/server/modules/seeders/seeders/0002_seed_replace_permission_mode_plan.js.map +1 -0
- package/dist/server/modules/seeders/services/data-seeder.service.js +5 -1
- package/dist/server/modules/seeders/services/data-seeder.service.js.map +1 -1
- package/dist/server/modules/settings/dtos/settings.dto.d.ts +18 -0
- package/dist/server/modules/settings/dtos/settings.dto.js +5 -0
- package/dist/server/modules/settings/dtos/settings.dto.js.map +1 -1
- package/dist/server/modules/settings/services/settings.service.d.ts +5 -0
- package/dist/server/modules/settings/services/settings.service.js +80 -1
- package/dist/server/modules/settings/services/settings.service.js.map +1 -1
- package/dist/server/modules/skills/adapters/anthropic-skill-source.adapter.d.ts +9 -0
- package/dist/server/modules/skills/adapters/anthropic-skill-source.adapter.js +169 -0
- package/dist/server/modules/skills/adapters/anthropic-skill-source.adapter.js.map +1 -0
- package/dist/server/modules/skills/adapters/github-skill-source.base.d.ts +48 -0
- package/dist/server/modules/skills/adapters/github-skill-source.base.js +382 -0
- package/dist/server/modules/skills/adapters/github-skill-source.base.js.map +1 -0
- package/dist/server/modules/skills/adapters/microsoft-skill-source.adapter.d.ts +11 -0
- package/dist/server/modules/skills/adapters/microsoft-skill-source.adapter.js +227 -0
- package/dist/server/modules/skills/adapters/microsoft-skill-source.adapter.js.map +1 -0
- package/dist/server/modules/skills/adapters/openai-skill-source.adapter.d.ts +13 -0
- package/dist/server/modules/skills/adapters/openai-skill-source.adapter.js +260 -0
- package/dist/server/modules/skills/adapters/openai-skill-source.adapter.js.map +1 -0
- package/dist/server/modules/skills/adapters/skill-source.adapter.d.ts +26 -0
- package/dist/server/modules/skills/adapters/skill-source.adapter.js +5 -0
- package/dist/server/modules/skills/adapters/skill-source.adapter.js.map +1 -0
- package/dist/server/modules/skills/adapters/trailofbits-skill-source.adapter.d.ts +14 -0
- package/dist/server/modules/skills/adapters/trailofbits-skill-source.adapter.js +253 -0
- package/dist/server/modules/skills/adapters/trailofbits-skill-source.adapter.js.map +1 -0
- package/dist/server/modules/skills/adapters/vercel-skill-source.adapter.d.ts +15 -0
- package/dist/server/modules/skills/adapters/vercel-skill-source.adapter.js +292 -0
- package/dist/server/modules/skills/adapters/vercel-skill-source.adapter.js.map +1 -0
- package/dist/server/modules/skills/controllers/skills.controller.d.ts +42 -0
- package/dist/server/modules/skills/controllers/skills.controller.js +257 -0
- package/dist/server/modules/skills/controllers/skills.controller.js.map +1 -0
- package/dist/server/modules/skills/dtos/skill.dto.d.ts +169 -0
- package/dist/server/modules/skills/dtos/skill.dto.js +116 -0
- package/dist/server/modules/skills/dtos/skill.dto.js.map +1 -0
- package/dist/server/modules/skills/services/skill-category.service.d.ts +5 -0
- package/dist/server/modules/skills/services/skill-category.service.js +155 -0
- package/dist/server/modules/skills/services/skill-category.service.js.map +1 -0
- package/dist/server/modules/skills/services/skill-sync.service.d.ts +38 -0
- package/dist/server/modules/skills/services/skill-sync.service.js +283 -0
- package/dist/server/modules/skills/services/skill-sync.service.js.map +1 -0
- package/dist/server/modules/skills/services/skills.service.d.ts +119 -0
- package/dist/server/modules/skills/services/skills.service.js +731 -0
- package/dist/server/modules/skills/services/skills.service.js.map +1 -0
- package/dist/server/modules/skills/skills.module.d.ts +2 -0
- package/dist/server/modules/skills/skills.module.js +70 -0
- package/dist/server/modules/skills/skills.module.js.map +1 -0
- package/dist/server/modules/storage/db/schema.d.ts +629 -0
- package/dist/server/modules/storage/db/schema.js +56 -1
- package/dist/server/modules/storage/db/schema.js.map +1 -1
- package/dist/server/modules/storage/interfaces/storage.interface.d.ts +1 -0
- package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
- package/dist/server/modules/storage/local/local-storage.service.d.ts +2 -0
- package/dist/server/modules/storage/local/local-storage.service.js +50 -7
- package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
- package/dist/server/modules/storage/models/domain.models.d.ts +47 -1
- package/dist/server/templates/dev-loop.json +85 -78
- package/dist/server/tsconfig.tsbuildinfo +1 -1
- package/dist/server/ui/assets/{ReviewDetailPage-DNZbiwkx.js → ReviewDetailPage-D_-bS1MK.js} +1 -1
- package/dist/server/ui/assets/{ReviewsPage-Dow8B8sr.js → ReviewsPage-BE1gxYlC.js} +1 -1
- package/dist/server/ui/assets/index-C094CE5I.js +945 -0
- package/dist/server/ui/assets/index-CbtpBUHu.css +32 -0
- package/dist/server/ui/assets/useReviewSubscription-Bs-17h-m.js +77 -0
- package/dist/server/ui/index.html +2 -2
- package/dist/templates/dev-loop.json +85 -78
- package/package.json +14 -1
- package/dist/server/ui/assets/index--HtPKe24.js +0 -914
- package/dist/server/ui/assets/index-BkiWahA0.css +0 -32
- package/dist/server/ui/assets/useReviewSubscription-CNhZ4Xwh.js +0 -83
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.TrailOfBitsSkillSource = void 0;
|
|
46
|
+
const node_path_1 = require("node:path");
|
|
47
|
+
const common_1 = require("@nestjs/common");
|
|
48
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
49
|
+
const error_types_1 = require("../../../common/errors/error-types");
|
|
50
|
+
const logger_1 = require("../../../common/logging/logger");
|
|
51
|
+
const github_skill_source_base_1 = require("./github-skill-source.base");
|
|
52
|
+
const logger = (0, logger_1.createLogger)('TrailOfBitsSkillSource');
|
|
53
|
+
const PLUGINS_DIRECTORY = 'plugins';
|
|
54
|
+
const SKILLS_DIRECTORY = 'skills';
|
|
55
|
+
let TrailOfBitsSkillSource = class TrailOfBitsSkillSource extends github_skill_source_base_1.GitHubSkillSourceBase {
|
|
56
|
+
constructor() {
|
|
57
|
+
super({
|
|
58
|
+
sourceName: 'trailofbits',
|
|
59
|
+
repoOwner: 'trailofbits',
|
|
60
|
+
repoName: 'skills',
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async listSkills() {
|
|
64
|
+
const context = await this.createSyncContext();
|
|
65
|
+
try {
|
|
66
|
+
return new Map(context.manifests);
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
await context.dispose();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async createSyncContext() {
|
|
73
|
+
const repoContext = await this.prepareExtractedRepository();
|
|
74
|
+
const manifests = new Map();
|
|
75
|
+
let disposed = false;
|
|
76
|
+
const dispose = async () => {
|
|
77
|
+
if (disposed) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
disposed = true;
|
|
81
|
+
await repoContext.dispose();
|
|
82
|
+
};
|
|
83
|
+
try {
|
|
84
|
+
const skillNames = await this.listSkillNamesFromExtractedRepo(repoContext.extractedRepoRoot);
|
|
85
|
+
for (const skillName of skillNames) {
|
|
86
|
+
try {
|
|
87
|
+
const skillDirectory = await this.resolveSkillDirectory(repoContext.extractedRepoRoot, skillName);
|
|
88
|
+
const parsedSkill = await this.parseSkillMarkdown(skillDirectory);
|
|
89
|
+
if (!parsedSkill) {
|
|
90
|
+
logger.warn({ sourceName: this.sourceName, skillName }, 'Missing SKILL.md. Skipping.');
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
manifests.set(skillName, this.toSkillManifest(skillName, parsedSkill, this.getSourcePathFromDirectory(repoContext.extractedRepoRoot, skillDirectory, skillName)));
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
logger.warn({
|
|
97
|
+
sourceName: this.sourceName,
|
|
98
|
+
skillName,
|
|
99
|
+
error: error instanceof Error ? error.message : String(error),
|
|
100
|
+
}, 'Failed processing Trail of Bits skill. Skipping.');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
manifests,
|
|
105
|
+
downloadSkill: async (skillName, targetPath) => this.downloadSkillFromExtractedRepo(skillName, targetPath, repoContext.extractedRepoRoot),
|
|
106
|
+
dispose,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
await dispose();
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async resolveSkillDirectory(extractedRepoRoot, skillName) {
|
|
115
|
+
const pluginRoot = (0, node_path_1.join)(extractedRepoRoot, PLUGINS_DIRECTORY, skillName);
|
|
116
|
+
const primaryPath = (0, node_path_1.join)(pluginRoot, SKILLS_DIRECTORY, skillName);
|
|
117
|
+
if (await this.hasSkillMarkdown(primaryPath)) {
|
|
118
|
+
return primaryPath;
|
|
119
|
+
}
|
|
120
|
+
if (await this.hasSkillMarkdown(pluginRoot)) {
|
|
121
|
+
return pluginRoot;
|
|
122
|
+
}
|
|
123
|
+
const flatSkillsPath = (0, node_path_1.join)(pluginRoot, SKILLS_DIRECTORY);
|
|
124
|
+
if (await this.hasSkillMarkdown(flatSkillsPath)) {
|
|
125
|
+
return flatSkillsPath;
|
|
126
|
+
}
|
|
127
|
+
const nestedSkillDirectories = await this.listNestedSkillDirectories(flatSkillsPath);
|
|
128
|
+
if (nestedSkillDirectories.length > 0) {
|
|
129
|
+
return nestedSkillDirectories[0];
|
|
130
|
+
}
|
|
131
|
+
throw new error_types_1.StorageError('Trail of Bits skill directory not found in repository archive.', {
|
|
132
|
+
sourceName: this.sourceName,
|
|
133
|
+
skillName,
|
|
134
|
+
pluginRoot,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
async listSkillNamesFromExtractedRepo(extractedRepoRoot) {
|
|
138
|
+
const pluginsRoot = (0, node_path_1.join)(extractedRepoRoot, PLUGINS_DIRECTORY);
|
|
139
|
+
let entries;
|
|
140
|
+
try {
|
|
141
|
+
entries = await fs.readdir(pluginsRoot, { withFileTypes: true });
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (error.code === 'ENOENT') {
|
|
145
|
+
throw new error_types_1.StorageError('Trail of Bits plugins directory not found in repository archive.', {
|
|
146
|
+
sourceName: this.sourceName,
|
|
147
|
+
pluginsRoot,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
throw new error_types_1.StorageError('Failed reading Trail of Bits plugins directory in archive.', {
|
|
151
|
+
sourceName: this.sourceName,
|
|
152
|
+
pluginsRoot,
|
|
153
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return entries
|
|
157
|
+
.filter((entry) => entry.isDirectory() && !entry.name.startsWith('.'))
|
|
158
|
+
.map((entry) => entry.name)
|
|
159
|
+
.sort((left, right) => left.localeCompare(right));
|
|
160
|
+
}
|
|
161
|
+
async hasSkillMarkdown(skillDirectory) {
|
|
162
|
+
const skillMarkdownPath = (0, node_path_1.join)(skillDirectory, 'SKILL.md');
|
|
163
|
+
try {
|
|
164
|
+
const stats = await fs.stat(skillMarkdownPath);
|
|
165
|
+
return stats.isFile();
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
if (error.code === 'ENOENT') {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
throw new error_types_1.StorageError('Failed checking Trail of Bits SKILL.md path in archive.', {
|
|
172
|
+
sourceName: this.sourceName,
|
|
173
|
+
skillDirectory,
|
|
174
|
+
skillMarkdownPath,
|
|
175
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async listNestedSkillDirectories(skillsRoot) {
|
|
180
|
+
let entries;
|
|
181
|
+
try {
|
|
182
|
+
entries = await fs.readdir(skillsRoot, { withFileTypes: true });
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (error.code === 'ENOENT') {
|
|
186
|
+
return [];
|
|
187
|
+
}
|
|
188
|
+
throw new error_types_1.StorageError('Failed reading nested Trail of Bits skill directories in archive.', {
|
|
189
|
+
sourceName: this.sourceName,
|
|
190
|
+
skillsRoot,
|
|
191
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
const skillDirectories = [];
|
|
195
|
+
for (const entry of entries) {
|
|
196
|
+
if (!entry.isDirectory() || entry.name.startsWith('.')) {
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
const candidate = (0, node_path_1.join)(skillsRoot, entry.name);
|
|
200
|
+
if (await this.hasSkillMarkdown(candidate)) {
|
|
201
|
+
skillDirectories.push(candidate);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return skillDirectories.sort((left, right) => left.localeCompare(right));
|
|
205
|
+
}
|
|
206
|
+
getSourcePathFromDirectory(extractedRepoRoot, skillDirectory, skillName) {
|
|
207
|
+
const repoRelativePath = (0, node_path_1.relative)(extractedRepoRoot, skillDirectory).split('\\').join('/');
|
|
208
|
+
if (!repoRelativePath || repoRelativePath.startsWith('..')) {
|
|
209
|
+
return `${PLUGINS_DIRECTORY}/${skillName}`;
|
|
210
|
+
}
|
|
211
|
+
return repoRelativePath;
|
|
212
|
+
}
|
|
213
|
+
encodePathSegments(pathValue) {
|
|
214
|
+
return pathValue
|
|
215
|
+
.split('/')
|
|
216
|
+
.filter((segment) => segment.length > 0)
|
|
217
|
+
.map((segment) => encodeURIComponent(segment))
|
|
218
|
+
.join('/');
|
|
219
|
+
}
|
|
220
|
+
toSkillManifest(skillName, parsedSkill, sourcePath) {
|
|
221
|
+
const frontmatter = parsedSkill.frontmatter;
|
|
222
|
+
const manifestName = this.pickString(frontmatter, ['name']) ?? skillName;
|
|
223
|
+
const displayName = this.pickString(frontmatter, ['displayName', 'display_name', 'title']);
|
|
224
|
+
const description = this.pickString(frontmatter, ['description', 'summary', 'shortDescription']) ??
|
|
225
|
+
`Skill instructions for ${skillName}`;
|
|
226
|
+
const shortDescription = this.pickString(frontmatter, [
|
|
227
|
+
'shortDescription',
|
|
228
|
+
'short_description',
|
|
229
|
+
'summary',
|
|
230
|
+
]);
|
|
231
|
+
const license = this.pickString(frontmatter, ['license']);
|
|
232
|
+
const compatibility = this.pickString(frontmatter, ['compatibility']);
|
|
233
|
+
const resources = this.pickStringArray(frontmatter, ['resources', 'references']);
|
|
234
|
+
return {
|
|
235
|
+
name: manifestName,
|
|
236
|
+
displayName,
|
|
237
|
+
description,
|
|
238
|
+
shortDescription,
|
|
239
|
+
license,
|
|
240
|
+
compatibility,
|
|
241
|
+
frontmatter,
|
|
242
|
+
instructionContent: parsedSkill.instructionContent,
|
|
243
|
+
resources,
|
|
244
|
+
sourceUrl: `${this.repoUrl}/tree/${encodeURIComponent(this.branch)}/${this.encodePathSegments(sourcePath)}`,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
exports.TrailOfBitsSkillSource = TrailOfBitsSkillSource;
|
|
249
|
+
exports.TrailOfBitsSkillSource = TrailOfBitsSkillSource = __decorate([
|
|
250
|
+
(0, common_1.Injectable)(),
|
|
251
|
+
__metadata("design:paramtypes", [])
|
|
252
|
+
], TrailOfBitsSkillSource);
|
|
253
|
+
//# sourceMappingURL=trailofbits-skill-source.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trailofbits-skill-source.adapter.js","sourceRoot":"","sources":["../../../../src/modules/skills/adapters/trailofbits-skill-source.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { GitHubSkillSourceBase } from './github-skill-source.base';
|
|
2
|
+
import { SkillManifest, SkillSourceAdapter, SkillSourceSyncContext } from './skill-source.adapter';
|
|
3
|
+
export declare class VercelSkillSource extends GitHubSkillSourceBase implements SkillSourceAdapter {
|
|
4
|
+
constructor();
|
|
5
|
+
listSkills(): Promise<Map<string, SkillManifest>>;
|
|
6
|
+
createSyncContext(): Promise<SkillSourceSyncContext>;
|
|
7
|
+
protected resolveSkillDirectory(extractedRepoRoot: string, skillName: string): Promise<string>;
|
|
8
|
+
private listSkillNamesFromExtractedRepo;
|
|
9
|
+
private listNestedSkillNames;
|
|
10
|
+
private hasSkillMarkdown;
|
|
11
|
+
private findNestedSkillDirectory;
|
|
12
|
+
private getSourcePathFromDirectory;
|
|
13
|
+
private encodePathSegments;
|
|
14
|
+
private toSkillManifest;
|
|
15
|
+
}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.VercelSkillSource = void 0;
|
|
46
|
+
const node_path_1 = require("node:path");
|
|
47
|
+
const common_1 = require("@nestjs/common");
|
|
48
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
49
|
+
const error_types_1 = require("../../../common/errors/error-types");
|
|
50
|
+
const logger_1 = require("../../../common/logging/logger");
|
|
51
|
+
const github_skill_source_base_1 = require("./github-skill-source.base");
|
|
52
|
+
const logger = (0, logger_1.createLogger)('VercelSkillSource');
|
|
53
|
+
const SKILLS_DIRECTORY = 'skills';
|
|
54
|
+
let VercelSkillSource = class VercelSkillSource extends github_skill_source_base_1.GitHubSkillSourceBase {
|
|
55
|
+
constructor() {
|
|
56
|
+
super({
|
|
57
|
+
sourceName: 'vercel',
|
|
58
|
+
repoOwner: 'vercel-labs',
|
|
59
|
+
repoName: 'agent-skills',
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
async listSkills() {
|
|
63
|
+
const context = await this.createSyncContext();
|
|
64
|
+
try {
|
|
65
|
+
return new Map(context.manifests);
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
await context.dispose();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async createSyncContext() {
|
|
72
|
+
const repoContext = await this.prepareExtractedRepository();
|
|
73
|
+
const manifests = new Map();
|
|
74
|
+
let disposed = false;
|
|
75
|
+
const dispose = async () => {
|
|
76
|
+
if (disposed) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
disposed = true;
|
|
80
|
+
await repoContext.dispose();
|
|
81
|
+
};
|
|
82
|
+
try {
|
|
83
|
+
const skillNames = await this.listSkillNamesFromExtractedRepo(repoContext.extractedRepoRoot);
|
|
84
|
+
for (const skillName of skillNames) {
|
|
85
|
+
try {
|
|
86
|
+
const skillDirectory = await this.resolveSkillDirectory(repoContext.extractedRepoRoot, skillName);
|
|
87
|
+
const parsedSkill = await this.parseSkillMarkdown(skillDirectory);
|
|
88
|
+
if (!parsedSkill) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
manifests.set(skillName, this.toSkillManifest(skillName, parsedSkill, this.getSourcePathFromDirectory(repoContext.extractedRepoRoot, skillDirectory, skillName)));
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
logger.warn({
|
|
95
|
+
sourceName: this.sourceName,
|
|
96
|
+
skillName,
|
|
97
|
+
error: error instanceof Error ? error.message : String(error),
|
|
98
|
+
}, 'Failed processing Vercel skill. Skipping.');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
manifests,
|
|
103
|
+
downloadSkill: async (skillName, targetPath) => this.downloadSkillFromExtractedRepo(skillName, targetPath, repoContext.extractedRepoRoot),
|
|
104
|
+
dispose,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
await dispose();
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async resolveSkillDirectory(extractedRepoRoot, skillName) {
|
|
113
|
+
try {
|
|
114
|
+
return await super.resolveSkillDirectory(extractedRepoRoot, skillName);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
const nestedSkillDirectory = await this.findNestedSkillDirectory(extractedRepoRoot, skillName);
|
|
118
|
+
if (nestedSkillDirectory) {
|
|
119
|
+
return nestedSkillDirectory;
|
|
120
|
+
}
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async listSkillNamesFromExtractedRepo(extractedRepoRoot) {
|
|
125
|
+
const skillsRoot = (0, node_path_1.join)(extractedRepoRoot, SKILLS_DIRECTORY);
|
|
126
|
+
let entries;
|
|
127
|
+
try {
|
|
128
|
+
entries = await fs.readdir(skillsRoot, { withFileTypes: true });
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
if (error.code === 'ENOENT') {
|
|
132
|
+
throw new error_types_1.StorageError('Vercel skills directory not found in repository archive.', {
|
|
133
|
+
sourceName: this.sourceName,
|
|
134
|
+
skillsRoot,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
throw new error_types_1.StorageError('Failed reading Vercel skills directory in archive.', {
|
|
138
|
+
sourceName: this.sourceName,
|
|
139
|
+
skillsRoot,
|
|
140
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
const skillNames = new Set();
|
|
144
|
+
for (const entry of entries) {
|
|
145
|
+
if (!entry.isDirectory() || entry.name.startsWith('.')) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const topLevelSkillDirectory = (0, node_path_1.join)(skillsRoot, entry.name);
|
|
149
|
+
if (await this.hasSkillMarkdown(topLevelSkillDirectory)) {
|
|
150
|
+
skillNames.add(entry.name);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
const nestedSkillNames = await this.listNestedSkillNames(topLevelSkillDirectory);
|
|
154
|
+
for (const nestedSkillName of nestedSkillNames) {
|
|
155
|
+
skillNames.add(nestedSkillName);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return [...skillNames].sort((left, right) => left.localeCompare(right));
|
|
159
|
+
}
|
|
160
|
+
async listNestedSkillNames(parentDirectory) {
|
|
161
|
+
let entries;
|
|
162
|
+
try {
|
|
163
|
+
entries = await fs.readdir(parentDirectory, { withFileTypes: true });
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
if (error.code === 'ENOENT') {
|
|
167
|
+
return [];
|
|
168
|
+
}
|
|
169
|
+
throw new error_types_1.StorageError('Failed reading nested Vercel skill directories in archive.', {
|
|
170
|
+
sourceName: this.sourceName,
|
|
171
|
+
parentDirectory,
|
|
172
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
const skillNames = [];
|
|
176
|
+
for (const entry of entries) {
|
|
177
|
+
if (!entry.isDirectory() || entry.name.startsWith('.')) {
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
const nestedSkillDirectory = (0, node_path_1.join)(parentDirectory, entry.name);
|
|
181
|
+
if (await this.hasSkillMarkdown(nestedSkillDirectory)) {
|
|
182
|
+
skillNames.push(entry.name);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return skillNames;
|
|
186
|
+
}
|
|
187
|
+
async hasSkillMarkdown(skillDirectory) {
|
|
188
|
+
const skillMarkdownPath = (0, node_path_1.join)(skillDirectory, 'SKILL.md');
|
|
189
|
+
try {
|
|
190
|
+
const stats = await fs.stat(skillMarkdownPath);
|
|
191
|
+
return stats.isFile();
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
if (error.code === 'ENOENT') {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
throw new error_types_1.StorageError('Failed checking Vercel SKILL.md path in archive.', {
|
|
198
|
+
sourceName: this.sourceName,
|
|
199
|
+
skillDirectory,
|
|
200
|
+
skillMarkdownPath,
|
|
201
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async findNestedSkillDirectory(extractedRepoRoot, skillName) {
|
|
206
|
+
const skillsRoot = (0, node_path_1.join)(extractedRepoRoot, SKILLS_DIRECTORY);
|
|
207
|
+
let entries;
|
|
208
|
+
try {
|
|
209
|
+
entries = await fs.readdir(skillsRoot, { withFileTypes: true });
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
if (error.code === 'ENOENT') {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
throw new error_types_1.StorageError('Failed reading Vercel skills root for nested lookup.', {
|
|
216
|
+
sourceName: this.sourceName,
|
|
217
|
+
skillsRoot,
|
|
218
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
for (const entry of entries) {
|
|
222
|
+
if (!entry.isDirectory() || entry.name.startsWith('.')) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
const nestedSkillDirectory = (0, node_path_1.join)(skillsRoot, entry.name, skillName);
|
|
226
|
+
try {
|
|
227
|
+
const stats = await fs.stat(nestedSkillDirectory);
|
|
228
|
+
if (stats.isDirectory() && (await this.hasSkillMarkdown(nestedSkillDirectory))) {
|
|
229
|
+
return nestedSkillDirectory;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
if (error.code !== 'ENOENT') {
|
|
234
|
+
throw new error_types_1.StorageError('Failed checking nested Vercel skill directory in archive.', {
|
|
235
|
+
sourceName: this.sourceName,
|
|
236
|
+
skillName,
|
|
237
|
+
nestedSkillDirectory,
|
|
238
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
getSourcePathFromDirectory(extractedRepoRoot, skillDirectory, skillName) {
|
|
246
|
+
const repoRelativePath = (0, node_path_1.relative)(extractedRepoRoot, skillDirectory).split('\\').join('/');
|
|
247
|
+
if (!repoRelativePath || repoRelativePath.startsWith('..')) {
|
|
248
|
+
return `${SKILLS_DIRECTORY}/${skillName}`;
|
|
249
|
+
}
|
|
250
|
+
return repoRelativePath;
|
|
251
|
+
}
|
|
252
|
+
encodePathSegments(pathValue) {
|
|
253
|
+
return pathValue
|
|
254
|
+
.split('/')
|
|
255
|
+
.filter((segment) => segment.length > 0)
|
|
256
|
+
.map((segment) => encodeURIComponent(segment))
|
|
257
|
+
.join('/');
|
|
258
|
+
}
|
|
259
|
+
toSkillManifest(skillName, parsedSkill, sourcePath) {
|
|
260
|
+
const frontmatter = parsedSkill.frontmatter;
|
|
261
|
+
const manifestName = this.pickString(frontmatter, ['name']) ?? skillName;
|
|
262
|
+
const displayName = this.pickString(frontmatter, ['displayName', 'display_name', 'title']);
|
|
263
|
+
const description = this.pickString(frontmatter, ['description', 'summary', 'shortDescription']) ??
|
|
264
|
+
`Skill instructions for ${skillName}`;
|
|
265
|
+
const shortDescription = this.pickString(frontmatter, [
|
|
266
|
+
'shortDescription',
|
|
267
|
+
'short_description',
|
|
268
|
+
'summary',
|
|
269
|
+
]);
|
|
270
|
+
const license = this.pickString(frontmatter, ['license']);
|
|
271
|
+
const compatibility = this.pickString(frontmatter, ['compatibility']);
|
|
272
|
+
const resources = this.pickStringArray(frontmatter, ['resources', 'references']);
|
|
273
|
+
return {
|
|
274
|
+
name: manifestName,
|
|
275
|
+
displayName,
|
|
276
|
+
description,
|
|
277
|
+
shortDescription,
|
|
278
|
+
license,
|
|
279
|
+
compatibility,
|
|
280
|
+
frontmatter,
|
|
281
|
+
instructionContent: parsedSkill.instructionContent,
|
|
282
|
+
resources,
|
|
283
|
+
sourceUrl: `${this.repoUrl}/tree/${encodeURIComponent(this.branch)}/${this.encodePathSegments(sourcePath)}`,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
exports.VercelSkillSource = VercelSkillSource;
|
|
288
|
+
exports.VercelSkillSource = VercelSkillSource = __decorate([
|
|
289
|
+
(0, common_1.Injectable)(),
|
|
290
|
+
__metadata("design:paramtypes", [])
|
|
291
|
+
], VercelSkillSource);
|
|
292
|
+
//# sourceMappingURL=vercel-skill-source.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel-skill-source.adapter.js","sourceRoot":"","sources":["../../../../src/modules/skills/adapters/vercel-skill-source.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Skill } from '../../storage/models/domain.models';
|
|
2
|
+
import { type ResolvedSkillSummary } from '../dtos/skill.dto';
|
|
3
|
+
import { SkillSyncService, SyncResult } from '../services/skill-sync.service';
|
|
4
|
+
import { SkillSourceMetadata, ProjectSkill, SkillUsageLogListResult, SkillUsageStat, SkillsService } from '../services/skills.service';
|
|
5
|
+
export declare class SkillsController {
|
|
6
|
+
private readonly skillsService;
|
|
7
|
+
private readonly skillSyncService;
|
|
8
|
+
constructor(skillsService: SkillsService, skillSyncService: SkillSyncService);
|
|
9
|
+
syncSkills(body: unknown): Promise<SyncResult>;
|
|
10
|
+
listSources(): Promise<SkillSourceMetadata[]>;
|
|
11
|
+
enableSource(params: unknown): Promise<{
|
|
12
|
+
name: string;
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
}>;
|
|
15
|
+
disableSource(params: unknown): Promise<{
|
|
16
|
+
name: string;
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
listDisabled(query: unknown): Promise<string[]>;
|
|
20
|
+
disableAll(body: unknown): Promise<{
|
|
21
|
+
projectId: string;
|
|
22
|
+
disabledCount: number;
|
|
23
|
+
}>;
|
|
24
|
+
enableAll(body: unknown): Promise<{
|
|
25
|
+
projectId: string;
|
|
26
|
+
enabledCount: number;
|
|
27
|
+
}>;
|
|
28
|
+
getUsageStats(query: unknown): Promise<SkillUsageStat[]>;
|
|
29
|
+
getUsageLog(query: unknown): Promise<SkillUsageLogListResult>;
|
|
30
|
+
getBySlug(params: unknown): Promise<Skill>;
|
|
31
|
+
listSkills(query: unknown): Promise<Array<Skill | ProjectSkill>>;
|
|
32
|
+
resolveSkills(body: unknown): Promise<Record<string, ResolvedSkillSummary>>;
|
|
33
|
+
disableSkill(params: unknown, body: unknown): Promise<{
|
|
34
|
+
projectId: string;
|
|
35
|
+
skillId: string;
|
|
36
|
+
}>;
|
|
37
|
+
enableSkill(params: unknown, body: unknown): Promise<{
|
|
38
|
+
projectId: string;
|
|
39
|
+
skillId: string;
|
|
40
|
+
}>;
|
|
41
|
+
getSkillById(params: unknown): Promise<Skill>;
|
|
42
|
+
}
|