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,227 @@
|
|
|
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.MicrosoftSkillSource = 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)('MicrosoftSkillSource');
|
|
53
|
+
const SKILLS_DIRECTORY = '.github/skills';
|
|
54
|
+
let MicrosoftSkillSource = class MicrosoftSkillSource extends github_skill_source_base_1.GitHubSkillSourceBase {
|
|
55
|
+
constructor() {
|
|
56
|
+
super({
|
|
57
|
+
sourceName: 'microsoft',
|
|
58
|
+
repoOwner: 'microsoft',
|
|
59
|
+
repoName: 'skills',
|
|
60
|
+
timeoutMs: 90_000,
|
|
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.parseSkillMarkdownWithFallback(skillDirectory);
|
|
89
|
+
if (!parsedSkill) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
manifests.set(skillName, this.toSkillManifest(skillName, parsedSkill));
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
logger.warn({
|
|
96
|
+
sourceName: this.sourceName,
|
|
97
|
+
skillName,
|
|
98
|
+
error: error instanceof Error ? error.message : String(error),
|
|
99
|
+
}, 'Failed processing Microsoft skill. Skipping.');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
manifests,
|
|
104
|
+
downloadSkill: async (skillName, targetPath) => this.downloadSkillFromExtractedRepo(skillName, targetPath, repoContext.extractedRepoRoot),
|
|
105
|
+
dispose,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
await dispose();
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async resolveSkillDirectory(extractedRepoRoot, skillName) {
|
|
114
|
+
const skillDirectory = (0, node_path_1.join)(extractedRepoRoot, SKILLS_DIRECTORY, skillName);
|
|
115
|
+
try {
|
|
116
|
+
const stats = await fs.stat(skillDirectory);
|
|
117
|
+
if (stats.isDirectory()) {
|
|
118
|
+
return skillDirectory;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
if (error.code !== 'ENOENT') {
|
|
123
|
+
throw new error_types_1.StorageError('Failed checking extracted Microsoft skill directory.', {
|
|
124
|
+
sourceName: this.sourceName,
|
|
125
|
+
skillName,
|
|
126
|
+
skillDirectory,
|
|
127
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
throw new error_types_1.StorageError('Microsoft skill directory not found in repository archive.', {
|
|
132
|
+
sourceName: this.sourceName,
|
|
133
|
+
skillName,
|
|
134
|
+
skillDirectory,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
async listSkillNamesFromExtractedRepo(extractedRepoRoot) {
|
|
138
|
+
const skillsRoot = (0, node_path_1.join)(extractedRepoRoot, SKILLS_DIRECTORY);
|
|
139
|
+
let entries;
|
|
140
|
+
try {
|
|
141
|
+
entries = await fs.readdir(skillsRoot, { withFileTypes: true });
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (error.code === 'ENOENT') {
|
|
145
|
+
throw new error_types_1.StorageError('Microsoft skills directory not found in repository archive.', {
|
|
146
|
+
sourceName: this.sourceName,
|
|
147
|
+
skillsRoot,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
throw new error_types_1.StorageError('Failed reading Microsoft skills directory in archive.', {
|
|
151
|
+
sourceName: this.sourceName,
|
|
152
|
+
skillsRoot,
|
|
153
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
const skillNames = [];
|
|
157
|
+
for (const entry of entries) {
|
|
158
|
+
if (!entry.isDirectory() || entry.name.startsWith('.')) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
skillNames.push(this.validatePathSegment(entry.name, 'skillName'));
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
logger.warn({ sourceName: this.sourceName, skillName: entry.name }, 'Skipping Microsoft skill directory with invalid name.');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return skillNames.sort((left, right) => left.localeCompare(right));
|
|
169
|
+
}
|
|
170
|
+
async parseSkillMarkdownWithFallback(skillDirectory) {
|
|
171
|
+
const parsed = await this.parseSkillMarkdown(skillDirectory);
|
|
172
|
+
if (parsed) {
|
|
173
|
+
return parsed;
|
|
174
|
+
}
|
|
175
|
+
const skillMarkdownPath = (0, node_path_1.join)(skillDirectory, 'SKILL.md');
|
|
176
|
+
try {
|
|
177
|
+
const markdown = await fs.readFile(skillMarkdownPath, 'utf-8');
|
|
178
|
+
return {
|
|
179
|
+
frontmatter: {},
|
|
180
|
+
instructionContent: markdown,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
if (error.code === 'ENOENT') {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
throw new error_types_1.StorageError('Failed reading Microsoft SKILL.md fallback content.', {
|
|
188
|
+
sourceName: this.sourceName,
|
|
189
|
+
skillMarkdownPath,
|
|
190
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
toSkillManifest(skillName, parsedSkill) {
|
|
195
|
+
const frontmatter = parsedSkill.frontmatter;
|
|
196
|
+
const manifestName = this.pickString(frontmatter, ['name']) ?? skillName;
|
|
197
|
+
const displayName = this.pickString(frontmatter, ['displayName', 'display_name', 'title']);
|
|
198
|
+
const description = this.pickString(frontmatter, ['description', 'summary', 'shortDescription']) ??
|
|
199
|
+
`Skill instructions for ${skillName}`;
|
|
200
|
+
const shortDescription = this.pickString(frontmatter, [
|
|
201
|
+
'shortDescription',
|
|
202
|
+
'short_description',
|
|
203
|
+
'summary',
|
|
204
|
+
]);
|
|
205
|
+
const license = this.pickString(frontmatter, ['license']);
|
|
206
|
+
const compatibility = this.pickString(frontmatter, ['compatibility']);
|
|
207
|
+
const resources = this.pickStringArray(frontmatter, ['resources', 'references']);
|
|
208
|
+
return {
|
|
209
|
+
name: manifestName,
|
|
210
|
+
displayName,
|
|
211
|
+
description,
|
|
212
|
+
shortDescription,
|
|
213
|
+
license,
|
|
214
|
+
compatibility,
|
|
215
|
+
frontmatter,
|
|
216
|
+
instructionContent: parsedSkill.instructionContent,
|
|
217
|
+
resources,
|
|
218
|
+
sourceUrl: `${this.repoUrl}/tree/${encodeURIComponent(this.branch)}/${SKILLS_DIRECTORY}/${encodeURIComponent(skillName)}`,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
exports.MicrosoftSkillSource = MicrosoftSkillSource;
|
|
223
|
+
exports.MicrosoftSkillSource = MicrosoftSkillSource = __decorate([
|
|
224
|
+
(0, common_1.Injectable)(),
|
|
225
|
+
__metadata("design:paramtypes", [])
|
|
226
|
+
], MicrosoftSkillSource);
|
|
227
|
+
//# sourceMappingURL=microsoft-skill-source.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microsoft-skill-source.adapter.js","sourceRoot":"","sources":["../../../../src/modules/skills/adapters/microsoft-skill-source.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { GitHubSkillSourceBase } from './github-skill-source.base';
|
|
2
|
+
import { SkillManifest, SkillSourceSyncContext } from './skill-source.adapter';
|
|
3
|
+
export declare class OpenAISkillSource extends GitHubSkillSourceBase {
|
|
4
|
+
constructor();
|
|
5
|
+
listSkills(): Promise<Map<string, SkillManifest>>;
|
|
6
|
+
protected resolveSkillDirectory(extractedRepoRoot: string, skillName: string): Promise<string>;
|
|
7
|
+
createSyncContext(): Promise<SkillSourceSyncContext>;
|
|
8
|
+
private listSkillNamesFromExtractedRepo;
|
|
9
|
+
private parseOpenAIAgentMetadata;
|
|
10
|
+
private extractOpenAIInterfaceFields;
|
|
11
|
+
private normalizeYamlScalar;
|
|
12
|
+
private toSkillManifest;
|
|
13
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
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.OpenAISkillSource = 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)('OpenAISkillSource');
|
|
53
|
+
const SKILLS_DIRECTORY = 'skills/.curated';
|
|
54
|
+
let OpenAISkillSource = class OpenAISkillSource extends github_skill_source_base_1.GitHubSkillSourceBase {
|
|
55
|
+
constructor() {
|
|
56
|
+
super({
|
|
57
|
+
sourceName: 'openai',
|
|
58
|
+
repoOwner: 'openai',
|
|
59
|
+
repoName: '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 resolveSkillDirectory(extractedRepoRoot, skillName) {
|
|
72
|
+
const curatedSkillPath = (0, node_path_1.join)(extractedRepoRoot, 'skills', '.curated', skillName);
|
|
73
|
+
try {
|
|
74
|
+
const stats = await fs.stat(curatedSkillPath);
|
|
75
|
+
if (stats.isDirectory()) {
|
|
76
|
+
return curatedSkillPath;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (error.code !== 'ENOENT') {
|
|
81
|
+
throw new error_types_1.StorageError('Failed checking extracted OpenAI curated skill directory.', {
|
|
82
|
+
sourceName: this.sourceName,
|
|
83
|
+
skillName,
|
|
84
|
+
curatedSkillPath,
|
|
85
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return super.resolveSkillDirectory(extractedRepoRoot, skillName);
|
|
90
|
+
}
|
|
91
|
+
async createSyncContext() {
|
|
92
|
+
const repoContext = await this.prepareExtractedRepository();
|
|
93
|
+
const manifests = new Map();
|
|
94
|
+
let disposed = false;
|
|
95
|
+
const dispose = async () => {
|
|
96
|
+
if (disposed) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
disposed = true;
|
|
100
|
+
await repoContext.dispose();
|
|
101
|
+
};
|
|
102
|
+
try {
|
|
103
|
+
const skillNames = await this.listSkillNamesFromExtractedRepo(repoContext.extractedRepoRoot);
|
|
104
|
+
for (const skillName of skillNames) {
|
|
105
|
+
try {
|
|
106
|
+
const skillDirectory = await this.resolveSkillDirectory(repoContext.extractedRepoRoot, skillName);
|
|
107
|
+
const parsedSkill = await this.parseSkillMarkdown(skillDirectory);
|
|
108
|
+
if (!parsedSkill) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const agentMetadata = await this.parseOpenAIAgentMetadata(skillDirectory);
|
|
112
|
+
manifests.set(skillName, this.toSkillManifest(skillName, parsedSkill, agentMetadata));
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
logger.warn({
|
|
116
|
+
sourceName: this.sourceName,
|
|
117
|
+
skillName,
|
|
118
|
+
error: error instanceof Error ? error.message : String(error),
|
|
119
|
+
}, 'Failed processing OpenAI skill. Skipping.');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
manifests,
|
|
124
|
+
downloadSkill: async (skillName, targetPath) => this.downloadSkillFromExtractedRepo(skillName, targetPath, repoContext.extractedRepoRoot),
|
|
125
|
+
dispose,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
await dispose();
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async listSkillNamesFromExtractedRepo(extractedRepoRoot) {
|
|
134
|
+
const curatedRoot = (0, node_path_1.join)(extractedRepoRoot, SKILLS_DIRECTORY);
|
|
135
|
+
let entries;
|
|
136
|
+
try {
|
|
137
|
+
entries = await fs.readdir(curatedRoot, { withFileTypes: true });
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
if (error.code === 'ENOENT') {
|
|
141
|
+
throw new error_types_1.StorageError('OpenAI curated skills directory not found in repository archive.', {
|
|
142
|
+
sourceName: this.sourceName,
|
|
143
|
+
curatedRoot,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
throw new error_types_1.StorageError('Failed reading OpenAI curated skills directory in archive.', {
|
|
147
|
+
sourceName: this.sourceName,
|
|
148
|
+
curatedRoot,
|
|
149
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return entries
|
|
153
|
+
.filter((entry) => entry.isDirectory() && !entry.name.startsWith('.'))
|
|
154
|
+
.map((entry) => entry.name)
|
|
155
|
+
.sort((left, right) => left.localeCompare(right));
|
|
156
|
+
}
|
|
157
|
+
async parseOpenAIAgentMetadata(skillDirectory) {
|
|
158
|
+
const agentYamlPath = (0, node_path_1.join)(skillDirectory, 'agents', 'openai.yaml');
|
|
159
|
+
let yamlContent;
|
|
160
|
+
try {
|
|
161
|
+
yamlContent = await fs.readFile(agentYamlPath, 'utf-8');
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
if (error.code === 'ENOENT') {
|
|
165
|
+
return {};
|
|
166
|
+
}
|
|
167
|
+
throw new error_types_1.StorageError('Failed reading OpenAI agent metadata file.', {
|
|
168
|
+
sourceName: this.sourceName,
|
|
169
|
+
agentYamlPath,
|
|
170
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return this.extractOpenAIInterfaceFields(yamlContent);
|
|
174
|
+
}
|
|
175
|
+
extractOpenAIInterfaceFields(yamlContent) {
|
|
176
|
+
const lines = yamlContent.split(/\r?\n/);
|
|
177
|
+
let insideInterface = false;
|
|
178
|
+
let interfaceIndent = 0;
|
|
179
|
+
let displayName;
|
|
180
|
+
let shortDescription;
|
|
181
|
+
for (const line of lines) {
|
|
182
|
+
const trimmed = line.trim();
|
|
183
|
+
if (!insideInterface) {
|
|
184
|
+
if (trimmed === 'interface:') {
|
|
185
|
+
insideInterface = true;
|
|
186
|
+
interfaceIndent = line.search(/\S|$/);
|
|
187
|
+
}
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
if (trimmed.length === 0 || trimmed.startsWith('#')) {
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
const currentIndent = line.search(/\S|$/);
|
|
194
|
+
if (currentIndent <= interfaceIndent) {
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
const displayMatch = line.match(/^\s*display_name:\s*(.+)\s*$/);
|
|
198
|
+
if (displayMatch) {
|
|
199
|
+
displayName = this.normalizeYamlScalar(displayMatch[1]);
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const shortDescriptionMatch = line.match(/^\s*short_description:\s*(.+)\s*$/);
|
|
203
|
+
if (shortDescriptionMatch) {
|
|
204
|
+
shortDescription = this.normalizeYamlScalar(shortDescriptionMatch[1]);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return { displayName, shortDescription };
|
|
208
|
+
}
|
|
209
|
+
normalizeYamlScalar(value) {
|
|
210
|
+
const trimmed = value.trim();
|
|
211
|
+
if (!trimmed) {
|
|
212
|
+
return undefined;
|
|
213
|
+
}
|
|
214
|
+
if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
|
|
215
|
+
(trimmed.startsWith("'") && trimmed.endsWith("'"))) {
|
|
216
|
+
const unwrapped = trimmed.slice(1, -1).trim();
|
|
217
|
+
return unwrapped.length > 0 ? unwrapped : undefined;
|
|
218
|
+
}
|
|
219
|
+
return trimmed;
|
|
220
|
+
}
|
|
221
|
+
toSkillManifest(skillName, parsedSkill, agentMetadata) {
|
|
222
|
+
const frontmatter = parsedSkill.frontmatter;
|
|
223
|
+
const manifestName = this.pickString(frontmatter, ['name']) ?? skillName;
|
|
224
|
+
const displayName = agentMetadata.displayName ??
|
|
225
|
+
this.pickString(frontmatter, ['displayName', 'display_name', 'title']);
|
|
226
|
+
const shortDescription = agentMetadata.shortDescription ??
|
|
227
|
+
this.pickString(frontmatter, ['shortDescription', 'short_description', 'summary']);
|
|
228
|
+
const description = this.pickString(frontmatter, ['description']) ??
|
|
229
|
+
shortDescription ??
|
|
230
|
+
`Skill instructions for ${skillName}`;
|
|
231
|
+
const license = this.pickString(frontmatter, ['license']);
|
|
232
|
+
const compatibility = this.pickString(frontmatter, ['compatibility']);
|
|
233
|
+
const resources = this.pickStringArray(frontmatter, ['resources', 'references']);
|
|
234
|
+
const mergedFrontmatter = {
|
|
235
|
+
...frontmatter,
|
|
236
|
+
openaiAgent: {
|
|
237
|
+
display_name: agentMetadata.displayName,
|
|
238
|
+
short_description: agentMetadata.shortDescription,
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
return {
|
|
242
|
+
name: manifestName,
|
|
243
|
+
displayName,
|
|
244
|
+
description,
|
|
245
|
+
shortDescription,
|
|
246
|
+
license,
|
|
247
|
+
compatibility,
|
|
248
|
+
frontmatter: mergedFrontmatter,
|
|
249
|
+
instructionContent: parsedSkill.instructionContent,
|
|
250
|
+
resources,
|
|
251
|
+
sourceUrl: `${this.repoUrl}/tree/${encodeURIComponent(this.branch)}/${SKILLS_DIRECTORY}/${encodeURIComponent(skillName)}`,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
exports.OpenAISkillSource = OpenAISkillSource;
|
|
256
|
+
exports.OpenAISkillSource = OpenAISkillSource = __decorate([
|
|
257
|
+
(0, common_1.Injectable)(),
|
|
258
|
+
__metadata("design:paramtypes", [])
|
|
259
|
+
], OpenAISkillSource);
|
|
260
|
+
//# sourceMappingURL=openai-skill-source.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-skill-source.adapter.js","sourceRoot":"","sources":["../../../../src/modules/skills/adapters/openai-skill-source.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const SKILL_SOURCE_ADAPTERS = "SKILL_SOURCE_ADAPTERS";
|
|
2
|
+
export interface SkillManifest {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName?: string;
|
|
5
|
+
description: string;
|
|
6
|
+
shortDescription?: string;
|
|
7
|
+
license?: string;
|
|
8
|
+
compatibility?: string;
|
|
9
|
+
frontmatter: Record<string, unknown>;
|
|
10
|
+
instructionContent: string;
|
|
11
|
+
resources: string[];
|
|
12
|
+
sourceUrl: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SkillSourceSyncContext {
|
|
15
|
+
manifests: Map<string, SkillManifest>;
|
|
16
|
+
downloadSkill(skillName: string, targetPath: string): Promise<string>;
|
|
17
|
+
dispose(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
export interface SkillSourceAdapter {
|
|
20
|
+
readonly sourceName: string;
|
|
21
|
+
readonly repoUrl: string;
|
|
22
|
+
createSyncContext(): Promise<SkillSourceSyncContext>;
|
|
23
|
+
listSkills(): Promise<Map<string, SkillManifest>>;
|
|
24
|
+
downloadSkill(skillName: string, targetPath: string): Promise<string>;
|
|
25
|
+
getLatestCommit(): Promise<string>;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-source.adapter.js","sourceRoot":"","sources":["../../../../src/modules/skills/adapters/skill-source.adapter.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAAG,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { GitHubSkillSourceBase } from './github-skill-source.base';
|
|
2
|
+
import { SkillManifest, SkillSourceAdapter, SkillSourceSyncContext } from './skill-source.adapter';
|
|
3
|
+
export declare class TrailOfBitsSkillSource 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 hasSkillMarkdown;
|
|
10
|
+
private listNestedSkillDirectories;
|
|
11
|
+
private getSourcePathFromDirectory;
|
|
12
|
+
private encodePathSegments;
|
|
13
|
+
private toSkillManifest;
|
|
14
|
+
}
|