devchain-cli 0.8.5 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/0041_community_skill_sources.sql +12 -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/0041_snapshot.json +4102 -0
- package/dist/drizzle/meta/_journal.json +28 -0
- 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/seeders/0003_seed_preseed_jeffallan_claude_skills.d.ts +3 -0
- package/dist/server/modules/seeders/seeders/0003_seed_preseed_jeffallan_claude_skills.js +41 -0
- package/dist/server/modules/seeders/seeders/0003_seed_preseed_jeffallan_claude_skills.js.map +1 -0
- package/dist/server/modules/seeders/seeders/0004_seed_disable_microsoft_source_default.d.ts +3 -0
- package/dist/server/modules/seeders/seeders/0004_seed_disable_microsoft_source_default.js +48 -0
- package/dist/server/modules/seeders/seeders/0004_seed_disable_microsoft_source_default.js.map +1 -0
- package/dist/server/modules/seeders/services/data-seeder.service.js +9 -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/community-skill-source.adapter.d.ts +11 -0
- package/dist/server/modules/skills/adapters/community-skill-source.adapter.js +181 -0
- package/dist/server/modules/skills/adapters/community-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/community-sources.controller.d.ts +12 -0
- package/dist/server/modules/skills/controllers/community-sources.controller.js +71 -0
- package/dist/server/modules/skills/controllers/community-sources.controller.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/community-sources.dto.d.ts +100 -0
- package/dist/server/modules/skills/dtos/community-sources.dto.js +138 -0
- package/dist/server/modules/skills/dtos/community-sources.dto.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/community-sources.service.d.ts +11 -0
- package/dist/server/modules/skills/services/community-sources.service.js +99 -0
- package/dist/server/modules/skills/services/community-sources.service.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-source-registry.service.d.ts +9 -0
- package/dist/server/modules/skills/services/skill-source-registry.service.js +46 -0
- package/dist/server/modules/skills/services/skill-source-registry.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 +281 -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 +734 -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 +76 -0
- package/dist/server/modules/skills/skills.module.js.map +1 -0
- package/dist/server/modules/storage/db/schema.d.ts +769 -0
- package/dist/server/modules/storage/db/schema.js +67 -1
- package/dist/server/modules/storage/db/schema.js.map +1 -1
- package/dist/server/modules/storage/interfaces/storage.interface.d.ts +7 -1
- package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
- package/dist/server/modules/storage/local/local-storage.service.d.ts +13 -1
- package/dist/server/modules/storage/local/local-storage.service.js +209 -7
- package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
- package/dist/server/modules/storage/models/domain.models.d.ts +59 -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-D13dH7Wh.js} +1 -1
- package/dist/server/ui/assets/{ReviewsPage-Dow8B8sr.js → ReviewsPage-C98ST0lf.js} +1 -1
- package/dist/server/ui/assets/index-C8Dc1yQf.js +945 -0
- package/dist/server/ui/assets/index-DZkJ40z9.css +32 -0
- package/dist/server/ui/assets/useReviewSubscription-CmLuF45Z.js +77 -0
- package/dist/server/ui/index.html +2 -2
- package/dist/templates/dev-loop.json +85 -78
- package/package.json +17 -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,38 @@
|
|
|
1
|
+
import { OnApplicationBootstrap } from '@nestjs/common';
|
|
2
|
+
import { SettingsService } from '../../settings/services/settings.service';
|
|
3
|
+
import { SkillCategoryService } from './skill-category.service';
|
|
4
|
+
import { SkillSourceRegistryService } from './skill-source-registry.service';
|
|
5
|
+
import { SkillsService } from './skills.service';
|
|
6
|
+
export interface SyncError {
|
|
7
|
+
sourceName: string;
|
|
8
|
+
skillSlug?: string;
|
|
9
|
+
message: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SyncResult {
|
|
12
|
+
status: 'completed' | 'already_running';
|
|
13
|
+
added: number;
|
|
14
|
+
updated: number;
|
|
15
|
+
failed: number;
|
|
16
|
+
unchanged: number;
|
|
17
|
+
errors: SyncError[];
|
|
18
|
+
}
|
|
19
|
+
export declare class SkillSyncService implements OnApplicationBootstrap {
|
|
20
|
+
private readonly skillSourceRegistry;
|
|
21
|
+
private readonly skillsService;
|
|
22
|
+
private readonly skillCategoryService;
|
|
23
|
+
private readonly settingsService;
|
|
24
|
+
private syncInProgress;
|
|
25
|
+
constructor(skillSourceRegistry: SkillSourceRegistryService, skillsService: SkillsService, skillCategoryService: SkillCategoryService, settingsService: SettingsService);
|
|
26
|
+
onApplicationBootstrap(): void;
|
|
27
|
+
syncAll(): Promise<SyncResult>;
|
|
28
|
+
syncSource(sourceName: string): Promise<SyncResult>;
|
|
29
|
+
private withMutex;
|
|
30
|
+
private syncAdapter;
|
|
31
|
+
private markSkillSyncError;
|
|
32
|
+
private buildSkillSlug;
|
|
33
|
+
private getExistingSkill;
|
|
34
|
+
private createEmptyResult;
|
|
35
|
+
private createAlreadyRunningResult;
|
|
36
|
+
private mergeSyncResults;
|
|
37
|
+
private isSourceEnabled;
|
|
38
|
+
}
|
|
@@ -0,0 +1,281 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SkillSyncService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const error_types_1 = require("../../../common/errors/error-types");
|
|
15
|
+
const logger_1 = require("../../../common/logging/logger");
|
|
16
|
+
const settings_service_1 = require("../../settings/services/settings.service");
|
|
17
|
+
const skill_category_service_1 = require("./skill-category.service");
|
|
18
|
+
const skill_source_registry_service_1 = require("./skill-source-registry.service");
|
|
19
|
+
const skills_service_1 = require("./skills.service");
|
|
20
|
+
const logger = (0, logger_1.createLogger)('SkillSyncService');
|
|
21
|
+
let SkillSyncService = class SkillSyncService {
|
|
22
|
+
constructor(skillSourceRegistry, skillsService, skillCategoryService, settingsService) {
|
|
23
|
+
this.skillSourceRegistry = skillSourceRegistry;
|
|
24
|
+
this.skillsService = skillsService;
|
|
25
|
+
this.skillCategoryService = skillCategoryService;
|
|
26
|
+
this.settingsService = settingsService;
|
|
27
|
+
this.syncInProgress = false;
|
|
28
|
+
}
|
|
29
|
+
onApplicationBootstrap() {
|
|
30
|
+
if (!this.settingsService.getSkillsSyncOnStartup()) {
|
|
31
|
+
logger.info('Startup skills sync disabled via settings');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
void this.syncAll().catch((error) => {
|
|
35
|
+
logger.error({ error: error instanceof Error ? error.message : String(error) }, 'Startup skills sync failed');
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async syncAll() {
|
|
39
|
+
return this.withMutex(async () => {
|
|
40
|
+
const adapters = await this.skillSourceRegistry.getAdapters();
|
|
41
|
+
const sourceSettings = this.settingsService.getSkillSourcesEnabled();
|
|
42
|
+
const enabledAdapters = adapters.filter((adapter) => this.isSourceEnabled(adapter.sourceName, sourceSettings));
|
|
43
|
+
for (const adapter of adapters) {
|
|
44
|
+
if (!this.isSourceEnabled(adapter.sourceName, sourceSettings)) {
|
|
45
|
+
logger.info({ sourceName: adapter.sourceName }, 'Skill sync skipped because source is disabled');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (enabledAdapters.length === 0) {
|
|
49
|
+
return this.createEmptyResult();
|
|
50
|
+
}
|
|
51
|
+
const settledResults = await Promise.allSettled(enabledAdapters.map((adapter) => this.syncAdapter(adapter)));
|
|
52
|
+
return settledResults.reduce((acc, result, index) => {
|
|
53
|
+
if (result.status === 'fulfilled') {
|
|
54
|
+
return this.mergeSyncResults(acc, result.value);
|
|
55
|
+
}
|
|
56
|
+
const adapterName = enabledAdapters[index]?.sourceName ?? 'unknown';
|
|
57
|
+
acc.failed += 1;
|
|
58
|
+
acc.errors.push({
|
|
59
|
+
sourceName: adapterName,
|
|
60
|
+
message: result.reason instanceof Error ? result.reason.message : String(result.reason),
|
|
61
|
+
});
|
|
62
|
+
return acc;
|
|
63
|
+
}, this.createEmptyResult());
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async syncSource(sourceName) {
|
|
67
|
+
const normalizedSourceName = sourceName.trim().toLowerCase();
|
|
68
|
+
const adapter = await this.skillSourceRegistry.getAdapterBySourceName(normalizedSourceName);
|
|
69
|
+
if (!adapter) {
|
|
70
|
+
throw new error_types_1.ValidationError(`Unknown skill source: ${normalizedSourceName}`, {
|
|
71
|
+
sourceName: normalizedSourceName,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (!this.isSourceEnabled(normalizedSourceName, this.settingsService.getSkillSourcesEnabled())) {
|
|
75
|
+
logger.info({ sourceName: normalizedSourceName }, 'Skill sync skipped because source is disabled');
|
|
76
|
+
return this.createEmptyResult();
|
|
77
|
+
}
|
|
78
|
+
return this.withMutex(() => this.syncAdapter(adapter));
|
|
79
|
+
}
|
|
80
|
+
async withMutex(run) {
|
|
81
|
+
if (this.syncInProgress) {
|
|
82
|
+
logger.info('Skill sync skipped because another sync is already running');
|
|
83
|
+
return this.createAlreadyRunningResult();
|
|
84
|
+
}
|
|
85
|
+
this.syncInProgress = true;
|
|
86
|
+
try {
|
|
87
|
+
return await run();
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
this.syncInProgress = false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async syncAdapter(adapter) {
|
|
94
|
+
const result = this.createEmptyResult();
|
|
95
|
+
let sourceCommit = '';
|
|
96
|
+
let syncContext = null;
|
|
97
|
+
try {
|
|
98
|
+
sourceCommit = await adapter.getLatestCommit();
|
|
99
|
+
syncContext = await adapter.createSyncContext();
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (syncContext) {
|
|
103
|
+
try {
|
|
104
|
+
await syncContext.dispose();
|
|
105
|
+
}
|
|
106
|
+
catch (disposeError) {
|
|
107
|
+
logger.warn({
|
|
108
|
+
sourceName: adapter.sourceName,
|
|
109
|
+
error: disposeError instanceof Error ? disposeError.message : String(disposeError),
|
|
110
|
+
}, 'Failed to dispose skill sync context after setup failure');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
result.failed += 1;
|
|
114
|
+
result.errors.push({
|
|
115
|
+
sourceName: adapter.sourceName,
|
|
116
|
+
message: error instanceof Error ? error.message : String(error),
|
|
117
|
+
});
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
if (!syncContext) {
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
for (const [skillName, manifest] of syncContext.manifests.entries()) {
|
|
125
|
+
const skillSlug = this.buildSkillSlug(adapter.sourceName, skillName);
|
|
126
|
+
const existingSkill = await this.getExistingSkill(skillSlug);
|
|
127
|
+
const isUnchanged = existingSkill &&
|
|
128
|
+
existingSkill.sourceCommit === sourceCommit &&
|
|
129
|
+
existingSkill.status !== 'sync_error';
|
|
130
|
+
if (isUnchanged) {
|
|
131
|
+
result.unchanged += 1;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
const contentPath = await syncContext.downloadSkill(skillName, '');
|
|
136
|
+
await this.skillsService.upsertSkill(skillSlug, {
|
|
137
|
+
name: manifest.name || skillName,
|
|
138
|
+
displayName: manifest.displayName ?? manifest.name ?? skillName,
|
|
139
|
+
description: manifest.description,
|
|
140
|
+
shortDescription: manifest.shortDescription ?? null,
|
|
141
|
+
source: adapter.sourceName,
|
|
142
|
+
sourceUrl: manifest.sourceUrl,
|
|
143
|
+
sourceCommit,
|
|
144
|
+
category: this.skillCategoryService.deriveCategory(manifest.name || skillName, manifest.description, manifest.compatibility),
|
|
145
|
+
license: manifest.license ?? null,
|
|
146
|
+
compatibility: manifest.compatibility ?? null,
|
|
147
|
+
frontmatter: manifest.frontmatter ?? {},
|
|
148
|
+
instructionContent: manifest.instructionContent,
|
|
149
|
+
contentPath,
|
|
150
|
+
resources: manifest.resources,
|
|
151
|
+
status: 'available',
|
|
152
|
+
lastSyncedAt: new Date().toISOString(),
|
|
153
|
+
});
|
|
154
|
+
if (existingSkill) {
|
|
155
|
+
result.updated += 1;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
result.added += 1;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
result.failed += 1;
|
|
163
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
164
|
+
result.errors.push({
|
|
165
|
+
sourceName: adapter.sourceName,
|
|
166
|
+
skillSlug,
|
|
167
|
+
message: errorMessage,
|
|
168
|
+
});
|
|
169
|
+
await this.markSkillSyncError({
|
|
170
|
+
adapter,
|
|
171
|
+
skillName,
|
|
172
|
+
skillSlug,
|
|
173
|
+
sourceCommit,
|
|
174
|
+
manifest,
|
|
175
|
+
});
|
|
176
|
+
if (error instanceof error_types_1.TimeoutError) {
|
|
177
|
+
logger.warn({ sourceName: adapter.sourceName, skillSlug, error: error.message }, 'Skill download timed out; skill marked as sync_error');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
try {
|
|
184
|
+
await syncContext.dispose();
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
logger.warn({
|
|
188
|
+
sourceName: adapter.sourceName,
|
|
189
|
+
error: error instanceof Error ? error.message : String(error),
|
|
190
|
+
}, 'Failed to dispose skill sync context');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
async markSkillSyncError(params) {
|
|
196
|
+
try {
|
|
197
|
+
await this.skillsService.upsertSkill(params.skillSlug, {
|
|
198
|
+
name: params.manifest.name || params.skillName,
|
|
199
|
+
displayName: params.manifest.displayName ?? params.manifest.name ?? params.skillName,
|
|
200
|
+
description: params.manifest.description,
|
|
201
|
+
shortDescription: params.manifest.shortDescription ?? null,
|
|
202
|
+
source: params.adapter.sourceName,
|
|
203
|
+
sourceUrl: params.manifest.sourceUrl,
|
|
204
|
+
sourceCommit: params.sourceCommit,
|
|
205
|
+
category: this.skillCategoryService.deriveCategory(params.manifest.name || params.skillName, params.manifest.description, params.manifest.compatibility),
|
|
206
|
+
license: params.manifest.license ?? null,
|
|
207
|
+
compatibility: params.manifest.compatibility ?? null,
|
|
208
|
+
frontmatter: params.manifest.frontmatter ?? {},
|
|
209
|
+
instructionContent: params.manifest.instructionContent,
|
|
210
|
+
resources: params.manifest.resources,
|
|
211
|
+
status: 'sync_error',
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
logger.error({
|
|
216
|
+
sourceName: params.adapter.sourceName,
|
|
217
|
+
skillSlug: params.skillSlug,
|
|
218
|
+
error: error instanceof Error ? error.message : String(error),
|
|
219
|
+
}, 'Failed to mark skill as sync_error after sync failure');
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
buildSkillSlug(sourceName, skillName) {
|
|
223
|
+
const normalizedSource = sourceName.trim().toLowerCase();
|
|
224
|
+
const normalizedSkill = skillName.trim().toLowerCase();
|
|
225
|
+
return `${normalizedSource}/${normalizedSkill}`;
|
|
226
|
+
}
|
|
227
|
+
async getExistingSkill(slug) {
|
|
228
|
+
try {
|
|
229
|
+
return await this.skillsService.getSkillBySlug(slug);
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
if (error instanceof error_types_1.NotFoundError) {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
throw error;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
createEmptyResult() {
|
|
239
|
+
return {
|
|
240
|
+
status: 'completed',
|
|
241
|
+
added: 0,
|
|
242
|
+
updated: 0,
|
|
243
|
+
failed: 0,
|
|
244
|
+
unchanged: 0,
|
|
245
|
+
errors: [],
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
createAlreadyRunningResult() {
|
|
249
|
+
return {
|
|
250
|
+
status: 'already_running',
|
|
251
|
+
added: 0,
|
|
252
|
+
updated: 0,
|
|
253
|
+
failed: 0,
|
|
254
|
+
unchanged: 0,
|
|
255
|
+
errors: [],
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
mergeSyncResults(left, right) {
|
|
259
|
+
return {
|
|
260
|
+
status: 'completed',
|
|
261
|
+
added: left.added + right.added,
|
|
262
|
+
updated: left.updated + right.updated,
|
|
263
|
+
failed: left.failed + right.failed,
|
|
264
|
+
unchanged: left.unchanged + right.unchanged,
|
|
265
|
+
errors: [...left.errors, ...right.errors],
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
isSourceEnabled(sourceName, sourceSettings) {
|
|
269
|
+
const normalizedSourceName = sourceName.trim().toLowerCase();
|
|
270
|
+
return sourceSettings[normalizedSourceName] !== false;
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
exports.SkillSyncService = SkillSyncService;
|
|
274
|
+
exports.SkillSyncService = SkillSyncService = __decorate([
|
|
275
|
+
(0, common_1.Injectable)(),
|
|
276
|
+
__metadata("design:paramtypes", [skill_source_registry_service_1.SkillSourceRegistryService,
|
|
277
|
+
skills_service_1.SkillsService,
|
|
278
|
+
skill_category_service_1.SkillCategoryService,
|
|
279
|
+
settings_service_1.SettingsService])
|
|
280
|
+
], SkillSyncService);
|
|
281
|
+
//# sourceMappingURL=skill-sync.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-sync.service.js","sourceRoot":"","sources":["../../../../src/modules/skills/services/skill-sync.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
2
|
+
import { SettingsService } from '../../settings/services/settings.service';
|
|
3
|
+
import type { ResolvedSkillSummary } from '../dtos/skill.dto';
|
|
4
|
+
import type { Skill, SkillStatus, SkillUsageLog as SkillUsageLogModel } from '../../storage/models/domain.models';
|
|
5
|
+
import { SkillSourceRegistryService } from './skill-source-registry.service';
|
|
6
|
+
export interface ListSkillsOptions {
|
|
7
|
+
source?: string;
|
|
8
|
+
category?: string;
|
|
9
|
+
status?: SkillStatus;
|
|
10
|
+
q?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ListProjectSkillsOptions {
|
|
13
|
+
q?: string;
|
|
14
|
+
source?: string;
|
|
15
|
+
category?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ProjectSkill extends Skill {
|
|
18
|
+
disabled: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface UpsertSkillData {
|
|
21
|
+
name?: string;
|
|
22
|
+
displayName?: string;
|
|
23
|
+
description?: string | null;
|
|
24
|
+
shortDescription?: string | null;
|
|
25
|
+
source?: string;
|
|
26
|
+
sourceUrl?: string | null;
|
|
27
|
+
sourceCommit?: string | null;
|
|
28
|
+
category?: string | null;
|
|
29
|
+
license?: string | null;
|
|
30
|
+
compatibility?: string | null;
|
|
31
|
+
frontmatter?: Record<string, unknown> | null;
|
|
32
|
+
instructionContent?: string | null;
|
|
33
|
+
contentPath?: string | null;
|
|
34
|
+
resources?: string[];
|
|
35
|
+
status?: SkillStatus;
|
|
36
|
+
lastSyncedAt?: string | null;
|
|
37
|
+
}
|
|
38
|
+
export interface SkillUsageStatsOptions {
|
|
39
|
+
projectId?: string | null;
|
|
40
|
+
from?: string;
|
|
41
|
+
to?: string;
|
|
42
|
+
limit?: number;
|
|
43
|
+
offset?: number;
|
|
44
|
+
}
|
|
45
|
+
export interface SkillUsageStat {
|
|
46
|
+
skillId: string;
|
|
47
|
+
skillSlug: string;
|
|
48
|
+
usageCount: number;
|
|
49
|
+
firstAccessedAt: string | null;
|
|
50
|
+
lastAccessedAt: string | null;
|
|
51
|
+
skillName: string | null;
|
|
52
|
+
skillDisplayName: string | null;
|
|
53
|
+
}
|
|
54
|
+
export interface SkillUsageLogOptions {
|
|
55
|
+
projectId?: string;
|
|
56
|
+
skillId?: string;
|
|
57
|
+
agentId?: string;
|
|
58
|
+
from?: string;
|
|
59
|
+
to?: string;
|
|
60
|
+
limit?: number;
|
|
61
|
+
offset?: number;
|
|
62
|
+
}
|
|
63
|
+
export interface SkillUsageLogListResult {
|
|
64
|
+
items: SkillUsageLogModel[];
|
|
65
|
+
total: number;
|
|
66
|
+
limit: number;
|
|
67
|
+
offset: number;
|
|
68
|
+
}
|
|
69
|
+
export interface SkillSourceMetadata {
|
|
70
|
+
name: string;
|
|
71
|
+
enabled: boolean;
|
|
72
|
+
repoUrl: string;
|
|
73
|
+
skillCount: number;
|
|
74
|
+
}
|
|
75
|
+
export declare class SkillsService {
|
|
76
|
+
private readonly db;
|
|
77
|
+
private readonly settingsService;
|
|
78
|
+
private readonly skillSourceRegistry;
|
|
79
|
+
constructor(db: BetterSQLite3Database, settingsService: SettingsService, skillSourceRegistry: SkillSourceRegistryService);
|
|
80
|
+
listSkills(options?: ListSkillsOptions): Promise<Skill[]>;
|
|
81
|
+
listAllForProject(projectId: string, options?: ListProjectSkillsOptions): Promise<ProjectSkill[]>;
|
|
82
|
+
listDiscoverable(projectId: string, options?: ListProjectSkillsOptions): Promise<Skill[]>;
|
|
83
|
+
getSkill(id: string): Promise<Skill>;
|
|
84
|
+
getSkillBySlug(slug: string): Promise<Skill>;
|
|
85
|
+
resolveSkillSummariesBySlugs(slugsToResolve: string[]): Promise<Record<string, ResolvedSkillSummary>>;
|
|
86
|
+
upsertSkill(slug: string, data: UpsertSkillData): Promise<Skill>;
|
|
87
|
+
disableSkill(projectId: string, skillId: string): Promise<void>;
|
|
88
|
+
enableSkill(projectId: string, skillId: string): Promise<void>;
|
|
89
|
+
listDisabled(projectId: string): Promise<string[]>;
|
|
90
|
+
disableAll(projectId: string): Promise<number>;
|
|
91
|
+
enableAll(projectId: string): Promise<number>;
|
|
92
|
+
listSources(): Promise<SkillSourceMetadata[]>;
|
|
93
|
+
setSourceEnabled(sourceName: string, enabled: boolean): Promise<{
|
|
94
|
+
name: string;
|
|
95
|
+
enabled: boolean;
|
|
96
|
+
}>;
|
|
97
|
+
logUsage(skillId: string, skillSlug: string, projectId?: string | null, agentId?: string | null, agentNameSnapshot?: string | null): Promise<SkillUsageLogModel>;
|
|
98
|
+
getUsageStats(options?: SkillUsageStatsOptions): Promise<SkillUsageStat[]>;
|
|
99
|
+
listUsageLog(options?: SkillUsageLogOptions): Promise<SkillUsageLogListResult>;
|
|
100
|
+
private appendProjectSkillFilterConditions;
|
|
101
|
+
private mapSkillRow;
|
|
102
|
+
private parseJsonObject;
|
|
103
|
+
private parseResources;
|
|
104
|
+
private serializeJsonObject;
|
|
105
|
+
private serializeResources;
|
|
106
|
+
private validateStatus;
|
|
107
|
+
private parseStatus;
|
|
108
|
+
private normalizeNullableString;
|
|
109
|
+
private requireNonEmpty;
|
|
110
|
+
private combineConditions;
|
|
111
|
+
private getRegisteredSources;
|
|
112
|
+
private getEnabledSources;
|
|
113
|
+
private isSourceEnabled;
|
|
114
|
+
private requireKnownSourceName;
|
|
115
|
+
private isUniqueConstraintError;
|
|
116
|
+
private isForeignKeyConstraintError;
|
|
117
|
+
private readErrorCode;
|
|
118
|
+
private readErrorMessage;
|
|
119
|
+
}
|