devchain-cli 0.9.0 → 0.9.2

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.
Files changed (80) hide show
  1. package/dist/drizzle/0041_community_skill_sources.sql +12 -0
  2. package/dist/drizzle/0042_nice_flatman.sql +10 -0
  3. package/dist/drizzle/0043_majestic_starhawk.sql +10 -0
  4. package/dist/drizzle/meta/0041_snapshot.json +4102 -0
  5. package/dist/drizzle/meta/0042_snapshot.json +4171 -0
  6. package/dist/drizzle/meta/0043_snapshot.json +4231 -0
  7. package/dist/drizzle/meta/_journal.json +21 -0
  8. package/dist/server/modules/seeders/seeders/0003_seed_preseed_jeffallan_claude_skills.d.ts +3 -0
  9. package/dist/server/modules/seeders/seeders/0003_seed_preseed_jeffallan_claude_skills.js +41 -0
  10. package/dist/server/modules/seeders/seeders/0003_seed_preseed_jeffallan_claude_skills.js.map +1 -0
  11. package/dist/server/modules/seeders/seeders/0004_seed_disable_microsoft_source_default.d.ts +3 -0
  12. package/dist/server/modules/seeders/seeders/0004_seed_disable_microsoft_source_default.js +48 -0
  13. package/dist/server/modules/seeders/seeders/0004_seed_disable_microsoft_source_default.js.map +1 -0
  14. package/dist/server/modules/seeders/services/data-seeder.service.js +4 -0
  15. package/dist/server/modules/seeders/services/data-seeder.service.js.map +1 -1
  16. package/dist/server/modules/skills/adapters/community-skill-source.adapter.d.ts +11 -0
  17. package/dist/server/modules/skills/adapters/community-skill-source.adapter.js +181 -0
  18. package/dist/server/modules/skills/adapters/community-skill-source.adapter.js.map +1 -0
  19. package/dist/server/modules/skills/adapters/github-skill-source.base.d.ts +2 -5
  20. package/dist/server/modules/skills/adapters/github-skill-source.base.js +31 -100
  21. package/dist/server/modules/skills/adapters/github-skill-source.base.js.map +1 -1
  22. package/dist/server/modules/skills/adapters/local-skill-source.adapter.d.ts +16 -0
  23. package/dist/server/modules/skills/adapters/local-skill-source.adapter.js +265 -0
  24. package/dist/server/modules/skills/adapters/local-skill-source.adapter.js.map +1 -0
  25. package/dist/server/modules/skills/adapters/skill-parsing.utils.d.ts +32 -0
  26. package/dist/server/modules/skills/adapters/skill-parsing.utils.js +169 -0
  27. package/dist/server/modules/skills/adapters/skill-parsing.utils.js.map +1 -0
  28. package/dist/server/modules/skills/controllers/community-sources.controller.d.ts +12 -0
  29. package/dist/server/modules/skills/controllers/community-sources.controller.js +71 -0
  30. package/dist/server/modules/skills/controllers/community-sources.controller.js.map +1 -0
  31. package/dist/server/modules/skills/controllers/local-sources.controller.d.ts +12 -0
  32. package/dist/server/modules/skills/controllers/local-sources.controller.js +71 -0
  33. package/dist/server/modules/skills/controllers/local-sources.controller.js.map +1 -0
  34. package/dist/server/modules/skills/controllers/skills.controller.d.ts +11 -1
  35. package/dist/server/modules/skills/controllers/skills.controller.js +35 -3
  36. package/dist/server/modules/skills/controllers/skills.controller.js.map +1 -1
  37. package/dist/server/modules/skills/dtos/community-sources.dto.d.ts +100 -0
  38. package/dist/server/modules/skills/dtos/community-sources.dto.js +138 -0
  39. package/dist/server/modules/skills/dtos/community-sources.dto.js.map +1 -0
  40. package/dist/server/modules/skills/dtos/local-sources.dto.d.ts +42 -0
  41. package/dist/server/modules/skills/dtos/local-sources.dto.js +30 -0
  42. package/dist/server/modules/skills/dtos/local-sources.dto.js.map +1 -0
  43. package/dist/server/modules/skills/dtos/skill.dto.d.ts +16 -0
  44. package/dist/server/modules/skills/dtos/skill.dto.js +7 -1
  45. package/dist/server/modules/skills/dtos/skill.dto.js.map +1 -1
  46. package/dist/server/modules/skills/services/community-sources.service.d.ts +18 -0
  47. package/dist/server/modules/skills/services/community-sources.service.js +158 -0
  48. package/dist/server/modules/skills/services/community-sources.service.js.map +1 -0
  49. package/dist/server/modules/skills/services/local-sources.service.d.ts +20 -0
  50. package/dist/server/modules/skills/services/local-sources.service.js +206 -0
  51. package/dist/server/modules/skills/services/local-sources.service.js.map +1 -0
  52. package/dist/server/modules/skills/services/skill-source-registry.service.d.ts +20 -0
  53. package/dist/server/modules/skills/services/skill-source-registry.service.js +142 -0
  54. package/dist/server/modules/skills/services/skill-source-registry.service.js.map +1 -0
  55. package/dist/server/modules/skills/services/skill-sync.service.d.ts +7 -3
  56. package/dist/server/modules/skills/services/skill-sync.service.js +102 -11
  57. package/dist/server/modules/skills/services/skill-sync.service.js.map +1 -1
  58. package/dist/server/modules/skills/services/skills.service.d.ts +16 -4
  59. package/dist/server/modules/skills/services/skills.service.js +141 -36
  60. package/dist/server/modules/skills/services/skills.service.js.map +1 -1
  61. package/dist/server/modules/skills/skills.module.js +10 -1
  62. package/dist/server/modules/skills/skills.module.js.map +1 -1
  63. package/dist/server/modules/storage/db/schema.d.ts +342 -0
  64. package/dist/server/modules/storage/db/schema.js +30 -1
  65. package/dist/server/modules/storage/db/schema.js.map +1 -1
  66. package/dist/server/modules/storage/interfaces/storage.interface.d.ts +18 -1
  67. package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
  68. package/dist/server/modules/storage/local/local-storage.service.d.ts +28 -1
  69. package/dist/server/modules/storage/local/local-storage.service.js +452 -2
  70. package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
  71. package/dist/server/modules/storage/models/domain.models.d.ts +20 -0
  72. package/dist/server/tsconfig.tsbuildinfo +1 -1
  73. package/dist/server/ui/assets/{ReviewDetailPage-D_-bS1MK.js → ReviewDetailPage-BvSckWKj.js} +1 -1
  74. package/dist/server/ui/assets/{ReviewsPage-BE1gxYlC.js → ReviewsPage-MKT-vv59.js} +1 -1
  75. package/dist/server/ui/assets/index-BtUq-Qxb.css +32 -0
  76. package/dist/server/ui/assets/{index-C094CE5I.js → index-kTb634Zp.js} +197 -197
  77. package/dist/server/ui/assets/{useReviewSubscription-Bs-17h-m.js → useReviewSubscription-Dc58i6Bk.js} +1 -1
  78. package/dist/server/ui/index.html +2 -2
  79. package/package.json +8 -1
  80. package/dist/server/ui/assets/index-CbtpBUHu.css +0 -32
@@ -1,29 +1,62 @@
1
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
+ });
2
18
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
19
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
20
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
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;
6
22
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
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
+ })();
8
41
  var __metadata = (this && this.__metadata) || function (k, v) {
9
42
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
43
  };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
44
  Object.defineProperty(exports, "__esModule", { value: true });
15
45
  exports.SkillSyncService = void 0;
16
46
  const common_1 = require("@nestjs/common");
47
+ const fs = __importStar(require("node:fs/promises"));
48
+ const node_os_1 = require("node:os");
49
+ const node_path_1 = require("node:path");
17
50
  const error_types_1 = require("../../../common/errors/error-types");
18
51
  const logger_1 = require("../../../common/logging/logger");
19
52
  const settings_service_1 = require("../../settings/services/settings.service");
20
- const skill_source_adapter_1 = require("../adapters/skill-source.adapter");
21
53
  const skill_category_service_1 = require("./skill-category.service");
54
+ const skill_source_registry_service_1 = require("./skill-source-registry.service");
22
55
  const skills_service_1 = require("./skills.service");
23
56
  const logger = (0, logger_1.createLogger)('SkillSyncService');
24
57
  let SkillSyncService = class SkillSyncService {
25
- constructor(adapters, skillsService, skillCategoryService, settingsService) {
26
- this.adapters = adapters;
58
+ constructor(skillSourceRegistry, skillsService, skillCategoryService, settingsService) {
59
+ this.skillSourceRegistry = skillSourceRegistry;
27
60
  this.skillsService = skillsService;
28
61
  this.skillCategoryService = skillCategoryService;
29
62
  this.settingsService = settingsService;
@@ -40,9 +73,10 @@ let SkillSyncService = class SkillSyncService {
40
73
  }
41
74
  async syncAll() {
42
75
  return this.withMutex(async () => {
76
+ const adapters = await this.skillSourceRegistry.getAdapters();
43
77
  const sourceSettings = this.settingsService.getSkillSourcesEnabled();
44
- const enabledAdapters = this.adapters.filter((adapter) => this.isSourceEnabled(adapter.sourceName, sourceSettings));
45
- for (const adapter of this.adapters) {
78
+ const enabledAdapters = adapters.filter((adapter) => this.isSourceEnabled(adapter.sourceName, sourceSettings));
79
+ for (const adapter of adapters) {
46
80
  if (!this.isSourceEnabled(adapter.sourceName, sourceSettings)) {
47
81
  logger.info({ sourceName: adapter.sourceName }, 'Skill sync skipped because source is disabled');
48
82
  }
@@ -67,7 +101,7 @@ let SkillSyncService = class SkillSyncService {
67
101
  }
68
102
  async syncSource(sourceName) {
69
103
  const normalizedSourceName = sourceName.trim().toLowerCase();
70
- const adapter = this.adapters.find((item) => item.sourceName === normalizedSourceName);
104
+ const adapter = await this.skillSourceRegistry.getAdapterBySourceName(normalizedSourceName);
71
105
  if (!adapter) {
72
106
  throw new error_types_1.ValidationError(`Unknown skill source: ${normalizedSourceName}`, {
73
107
  sourceName: normalizedSourceName,
@@ -180,6 +214,7 @@ let SkillSyncService = class SkillSyncService {
180
214
  }
181
215
  }
182
216
  }
217
+ await this.cleanupStaleSkills(adapter.sourceName, syncContext, result);
183
218
  }
184
219
  finally {
185
220
  try {
@@ -194,6 +229,36 @@ let SkillSyncService = class SkillSyncService {
194
229
  }
195
230
  return result;
196
231
  }
232
+ async cleanupStaleSkills(sourceName, syncContext, result) {
233
+ const expectedSlugs = new Set(Array.from(syncContext.manifests.keys()).map((skillName) => this.buildSkillSlug(sourceName, skillName)));
234
+ const existingSkills = await this.skillsService.listSkillsBySource(sourceName);
235
+ for (const existingSkill of existingSkills) {
236
+ if (expectedSlugs.has(existingSkill.slug)) {
237
+ continue;
238
+ }
239
+ try {
240
+ const wasDeleted = await this.skillsService.deleteSkillBySlug(existingSkill.slug);
241
+ if (!wasDeleted) {
242
+ continue;
243
+ }
244
+ result.removed += 1;
245
+ }
246
+ catch (error) {
247
+ result.failed += 1;
248
+ result.errors.push({
249
+ sourceName,
250
+ skillSlug: existingSkill.slug,
251
+ message: error instanceof Error ? error.message : String(error),
252
+ });
253
+ continue;
254
+ }
255
+ const skillNameFromSlug = this.extractSkillNameFromSlug(existingSkill.slug, sourceName);
256
+ if (!skillNameFromSlug) {
257
+ continue;
258
+ }
259
+ await this.deleteSyncedSkillDirectory(sourceName, skillNameFromSlug);
260
+ }
261
+ }
197
262
  async markSkillSyncError(params) {
198
263
  try {
199
264
  await this.skillsService.upsertSkill(params.skillSlug, {
@@ -226,6 +291,29 @@ let SkillSyncService = class SkillSyncService {
226
291
  const normalizedSkill = skillName.trim().toLowerCase();
227
292
  return `${normalizedSource}/${normalizedSkill}`;
228
293
  }
294
+ extractSkillNameFromSlug(slug, sourceName) {
295
+ const normalizedSlug = slug.trim().toLowerCase();
296
+ const sourcePrefix = `${sourceName.trim().toLowerCase()}/`;
297
+ if (!normalizedSlug.startsWith(sourcePrefix)) {
298
+ return null;
299
+ }
300
+ const skillName = normalizedSlug.slice(sourcePrefix.length).trim();
301
+ return skillName.length > 0 ? skillName : null;
302
+ }
303
+ async deleteSyncedSkillDirectory(sourceName, skillName) {
304
+ const sourcePath = (0, node_path_1.join)((0, node_os_1.homedir)(), '.devchain', 'skills', sourceName.trim().toLowerCase(), skillName);
305
+ try {
306
+ await fs.rm(sourcePath, { recursive: true, force: true });
307
+ }
308
+ catch (error) {
309
+ logger.warn({
310
+ sourceName,
311
+ skillName,
312
+ sourcePath,
313
+ error: error instanceof Error ? error.message : String(error),
314
+ }, 'Failed to cleanup stale synced skill files');
315
+ }
316
+ }
229
317
  async getExistingSkill(slug) {
230
318
  try {
231
319
  return await this.skillsService.getSkillBySlug(slug);
@@ -242,6 +330,7 @@ let SkillSyncService = class SkillSyncService {
242
330
  status: 'completed',
243
331
  added: 0,
244
332
  updated: 0,
333
+ removed: 0,
245
334
  failed: 0,
246
335
  unchanged: 0,
247
336
  errors: [],
@@ -252,6 +341,7 @@ let SkillSyncService = class SkillSyncService {
252
341
  status: 'already_running',
253
342
  added: 0,
254
343
  updated: 0,
344
+ removed: 0,
255
345
  failed: 0,
256
346
  unchanged: 0,
257
347
  errors: [],
@@ -262,6 +352,7 @@ let SkillSyncService = class SkillSyncService {
262
352
  status: 'completed',
263
353
  added: left.added + right.added,
264
354
  updated: left.updated + right.updated,
355
+ removed: left.removed + right.removed,
265
356
  failed: left.failed + right.failed,
266
357
  unchanged: left.unchanged + right.unchanged,
267
358
  errors: [...left.errors, ...right.errors],
@@ -275,8 +366,8 @@ let SkillSyncService = class SkillSyncService {
275
366
  exports.SkillSyncService = SkillSyncService;
276
367
  exports.SkillSyncService = SkillSyncService = __decorate([
277
368
  (0, common_1.Injectable)(),
278
- __param(0, (0, common_1.Inject)(skill_source_adapter_1.SKILL_SOURCE_ADAPTERS)),
279
- __metadata("design:paramtypes", [Array, skills_service_1.SkillsService,
369
+ __metadata("design:paramtypes", [skill_source_registry_service_1.SkillSourceRegistryService,
370
+ skills_service_1.SkillsService,
280
371
  skill_category_service_1.SkillCategoryService,
281
372
  settings_service_1.SettingsService])
282
373
  ], SkillSyncService);
@@ -1 +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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"}
1
+ {"version":3,"file":"skill-sync.service.js","sourceRoot":"","sources":["../../../../src/modules/skills/services/skill-sync.service.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
2
2
  import { SettingsService } from '../../settings/services/settings.service';
3
3
  import type { ResolvedSkillSummary } from '../dtos/skill.dto';
4
4
  import type { Skill, SkillStatus, SkillUsageLog as SkillUsageLogModel } from '../../storage/models/domain.models';
5
- import { SkillSourceAdapter } from '../adapters/skill-source.adapter';
5
+ import { SkillSourceRegistryService, type SkillSourceKind } from './skill-source-registry.service';
6
6
  export interface ListSkillsOptions {
7
7
  source?: string;
8
8
  category?: string;
@@ -68,20 +68,24 @@ export interface SkillUsageLogListResult {
68
68
  }
69
69
  export interface SkillSourceMetadata {
70
70
  name: string;
71
+ kind: SkillSourceKind;
71
72
  enabled: boolean;
73
+ projectEnabled?: boolean;
72
74
  repoUrl: string;
73
75
  skillCount: number;
74
76
  }
75
77
  export declare class SkillsService {
76
78
  private readonly db;
77
79
  private readonly settingsService;
78
- private readonly adapters;
79
- constructor(db: BetterSQLite3Database, settingsService: SettingsService, adapters: SkillSourceAdapter[]);
80
+ private readonly skillSourceRegistry;
81
+ constructor(db: BetterSQLite3Database, settingsService: SettingsService, skillSourceRegistry: SkillSourceRegistryService);
80
82
  listSkills(options?: ListSkillsOptions): Promise<Skill[]>;
81
83
  listAllForProject(projectId: string, options?: ListProjectSkillsOptions): Promise<ProjectSkill[]>;
82
84
  listDiscoverable(projectId: string, options?: ListProjectSkillsOptions): Promise<Skill[]>;
83
85
  getSkill(id: string): Promise<Skill>;
84
86
  getSkillBySlug(slug: string): Promise<Skill>;
87
+ listSkillsBySource(sourceName: string): Promise<Skill[]>;
88
+ deleteSkillBySlug(slug: string): Promise<boolean>;
85
89
  resolveSkillSummariesBySlugs(slugsToResolve: string[]): Promise<Record<string, ResolvedSkillSummary>>;
86
90
  upsertSkill(slug: string, data: UpsertSkillData): Promise<Skill>;
87
91
  disableSkill(projectId: string, skillId: string): Promise<void>;
@@ -89,11 +93,17 @@ export declare class SkillsService {
89
93
  listDisabled(projectId: string): Promise<string[]>;
90
94
  disableAll(projectId: string): Promise<number>;
91
95
  enableAll(projectId: string): Promise<number>;
92
- listSources(): Promise<SkillSourceMetadata[]>;
96
+ listSources(projectId?: string): Promise<SkillSourceMetadata[]>;
97
+ getReservedSourceNames(): string[];
93
98
  setSourceEnabled(sourceName: string, enabled: boolean): Promise<{
94
99
  name: string;
95
100
  enabled: boolean;
96
101
  }>;
102
+ setSourceProjectEnabled(sourceName: string, projectId: string, enabled: boolean): Promise<{
103
+ name: string;
104
+ projectId: string;
105
+ projectEnabled: boolean;
106
+ }>;
97
107
  logUsage(skillId: string, skillSlug: string, projectId?: string | null, agentId?: string | null, agentNameSnapshot?: string | null): Promise<SkillUsageLogModel>;
98
108
  getUsageStats(options?: SkillUsageStatsOptions): Promise<SkillUsageStat[]>;
99
109
  listUsageLog(options?: SkillUsageLogOptions): Promise<SkillUsageLogListResult>;
@@ -110,6 +120,8 @@ export declare class SkillsService {
110
120
  private combineConditions;
111
121
  private getRegisteredSources;
112
122
  private getEnabledSources;
123
+ private getEnabledSourcesForProject;
124
+ private getProjectSourceEnabledMap;
113
125
  private isSourceEnabled;
114
126
  private requireKnownSourceName;
115
127
  private isUniqueConstraintError;
@@ -21,17 +21,17 @@ const logger_1 = require("../../../common/logging/logger");
21
21
  const settings_service_1 = require("../../settings/services/settings.service");
22
22
  const db_provider_1 = require("../../storage/db/db.provider");
23
23
  const schema_1 = require("../../storage/db/schema");
24
- const skill_source_adapter_1 = require("../adapters/skill-source.adapter");
24
+ const skill_source_registry_service_1 = require("./skill-source-registry.service");
25
25
  const logger = (0, logger_1.createLogger)('SkillsService');
26
26
  const VALID_SKILL_STATUSES = ['available', 'outdated', 'sync_error'];
27
27
  let SkillsService = class SkillsService {
28
- constructor(db, settingsService, adapters) {
28
+ constructor(db, settingsService, skillSourceRegistry) {
29
29
  this.db = db;
30
30
  this.settingsService = settingsService;
31
- this.adapters = adapters;
31
+ this.skillSourceRegistry = skillSourceRegistry;
32
32
  }
33
33
  async listSkills(options = {}) {
34
- const enabledSources = this.getEnabledSources();
34
+ const enabledSources = await this.getEnabledSources();
35
35
  if (enabledSources.length === 0) {
36
36
  return [];
37
37
  }
@@ -67,11 +67,11 @@ let SkillsService = class SkillsService {
67
67
  return rows.map((row) => this.mapSkillRow(row));
68
68
  }
69
69
  async listAllForProject(projectId, options = {}) {
70
- const enabledSources = this.getEnabledSources();
70
+ const normalizedProjectId = this.requireNonEmpty(projectId, 'projectId');
71
+ const enabledSources = await this.getEnabledSourcesForProject(normalizedProjectId);
71
72
  if (enabledSources.length === 0) {
72
73
  return [];
73
74
  }
74
- const normalizedProjectId = this.requireNonEmpty(projectId, 'projectId');
75
75
  const query = this.db
76
76
  .select({
77
77
  skill: schema_1.skills,
@@ -92,11 +92,11 @@ let SkillsService = class SkillsService {
92
92
  }));
93
93
  }
94
94
  async listDiscoverable(projectId, options = {}) {
95
- const enabledSources = this.getEnabledSources();
95
+ const normalizedProjectId = this.requireNonEmpty(projectId, 'projectId');
96
+ const enabledSources = await this.getEnabledSourcesForProject(normalizedProjectId);
96
97
  if (enabledSources.length === 0) {
97
98
  return [];
98
99
  }
99
- const normalizedProjectId = this.requireNonEmpty(projectId, 'projectId');
100
100
  const query = this.db
101
101
  .select({ skill: schema_1.skills })
102
102
  .from(schema_1.skills)
@@ -127,6 +127,28 @@ let SkillsService = class SkillsService {
127
127
  }
128
128
  return this.mapSkillRow(row[0]);
129
129
  }
130
+ async listSkillsBySource(sourceName) {
131
+ const normalizedSourceName = this.requireNonEmpty(sourceName, 'sourceName').toLowerCase();
132
+ const rows = await this.db
133
+ .select()
134
+ .from(schema_1.skills)
135
+ .where((0, drizzle_orm_1.eq)(schema_1.skills.source, normalizedSourceName))
136
+ .orderBy((0, drizzle_orm_1.asc)(schema_1.skills.name), (0, drizzle_orm_1.asc)(schema_1.skills.slug));
137
+ return rows.map((row) => this.mapSkillRow(row));
138
+ }
139
+ async deleteSkillBySlug(slug) {
140
+ const normalizedSlug = this.requireNonEmpty(slug, 'slug').toLowerCase();
141
+ const existing = await this.db
142
+ .select({ id: schema_1.skills.id })
143
+ .from(schema_1.skills)
144
+ .where((0, drizzle_orm_1.eq)(schema_1.skills.slug, normalizedSlug))
145
+ .limit(1);
146
+ if (!existing[0]) {
147
+ return false;
148
+ }
149
+ await this.db.delete(schema_1.skills).where((0, drizzle_orm_1.eq)(schema_1.skills.slug, normalizedSlug));
150
+ return true;
151
+ }
130
152
  async resolveSkillSummariesBySlugs(slugsToResolve) {
131
153
  const uniqueSlugs = Array.from(new Set(slugsToResolve.map((slug) => this.requireNonEmpty(slug, 'slug').toLowerCase())));
132
154
  if (uniqueSlugs.length === 0) {
@@ -295,7 +317,7 @@ let SkillsService = class SkillsService {
295
317
  return rows.map((row) => row.skillId);
296
318
  }
297
319
  async disableAll(projectId) {
298
- const enabledSources = this.getEnabledSources();
320
+ const enabledSources = await this.getEnabledSources();
299
321
  if (enabledSources.length === 0) {
300
322
  return 0;
301
323
  }
@@ -328,7 +350,7 @@ let SkillsService = class SkillsService {
328
350
  return rowsToInsert.length;
329
351
  }
330
352
  async enableAll(projectId) {
331
- const enabledSources = this.getEnabledSources();
353
+ const enabledSources = await this.getEnabledSources();
332
354
  if (enabledSources.length === 0) {
333
355
  return 0;
334
356
  }
@@ -347,25 +369,98 @@ let SkillsService = class SkillsService {
347
369
  .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema_1.skillProjectDisabled.projectId, normalizedProjectId), (0, drizzle_orm_1.inArray)(schema_1.skillProjectDisabled.skillId, disabledSkillIds)));
348
370
  return disabledRows.length;
349
371
  }
350
- async listSources() {
372
+ async listSources(projectId) {
351
373
  const sourceRows = await this.db
352
374
  .select({ source: schema_1.skills.source, skillCount: (0, drizzle_orm_1.count)() })
353
375
  .from(schema_1.skills)
354
376
  .groupBy(schema_1.skills.source);
355
377
  const sourceCountMap = new Map(sourceRows.map((row) => [row.source.trim().toLowerCase(), Number(row.skillCount)]));
356
378
  const sourceSettings = this.settingsService.getSkillSourcesEnabled();
357
- return this.getRegisteredSources().map((source) => ({
358
- name: source.name,
359
- enabled: this.isSourceEnabled(source.name, sourceSettings),
360
- repoUrl: source.repoUrl,
361
- skillCount: sourceCountMap.get(source.name) ?? 0,
362
- }));
379
+ const registeredSources = await this.getRegisteredSources();
380
+ const normalizedProjectId = projectId !== undefined ? this.requireNonEmpty(projectId, 'projectId') : undefined;
381
+ const projectSourceEnabledMap = normalizedProjectId
382
+ ? await this.getProjectSourceEnabledMap(normalizedProjectId)
383
+ : null;
384
+ return registeredSources.map((source) => {
385
+ const globallyEnabled = this.isSourceEnabled(source.name, sourceSettings);
386
+ const base = {
387
+ name: source.name,
388
+ kind: source.kind,
389
+ enabled: globallyEnabled,
390
+ repoUrl: source.repoUrl,
391
+ skillCount: sourceCountMap.get(source.name) ?? 0,
392
+ };
393
+ if (!projectSourceEnabledMap) {
394
+ return base;
395
+ }
396
+ const projectSetting = projectSourceEnabledMap.get(source.name);
397
+ return {
398
+ ...base,
399
+ projectEnabled: globallyEnabled && (projectSetting ?? true),
400
+ };
401
+ });
402
+ }
403
+ getReservedSourceNames() {
404
+ return this.skillSourceRegistry.getBuiltInSourceNames();
363
405
  }
364
406
  async setSourceEnabled(sourceName, enabled) {
365
- const normalizedSourceName = this.requireKnownSourceName(sourceName);
407
+ const normalizedSourceName = await this.requireKnownSourceName(sourceName);
366
408
  await this.settingsService.setSkillSourceEnabled(normalizedSourceName, enabled);
367
409
  return { name: normalizedSourceName, enabled };
368
410
  }
411
+ async setSourceProjectEnabled(sourceName, projectId, enabled) {
412
+ const normalizedSourceName = await this.requireKnownSourceName(sourceName);
413
+ const normalizedProjectId = this.requireNonEmpty(projectId, 'projectId');
414
+ const now = new Date().toISOString();
415
+ try {
416
+ const existing = await this.db
417
+ .select({ id: schema_1.sourceProjectEnabled.id })
418
+ .from(schema_1.sourceProjectEnabled)
419
+ .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema_1.sourceProjectEnabled.projectId, normalizedProjectId), (0, drizzle_orm_1.eq)(schema_1.sourceProjectEnabled.sourceName, normalizedSourceName)))
420
+ .limit(1);
421
+ if (existing[0]) {
422
+ await this.db
423
+ .update(schema_1.sourceProjectEnabled)
424
+ .set({ enabled })
425
+ .where((0, drizzle_orm_1.eq)(schema_1.sourceProjectEnabled.id, existing[0].id));
426
+ }
427
+ else {
428
+ await this.db.insert(schema_1.sourceProjectEnabled).values({
429
+ id: (0, node_crypto_1.randomUUID)(),
430
+ projectId: normalizedProjectId,
431
+ sourceName: normalizedSourceName,
432
+ enabled,
433
+ createdAt: now,
434
+ });
435
+ }
436
+ }
437
+ catch (error) {
438
+ if (this.isUniqueConstraintError(error)) {
439
+ await this.db
440
+ .update(schema_1.sourceProjectEnabled)
441
+ .set({ enabled })
442
+ .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema_1.sourceProjectEnabled.projectId, normalizedProjectId), (0, drizzle_orm_1.eq)(schema_1.sourceProjectEnabled.sourceName, normalizedSourceName)));
443
+ }
444
+ else if (this.isForeignKeyConstraintError(error)) {
445
+ throw new error_types_1.ValidationError('Cannot update source for unknown project.', {
446
+ projectId: normalizedProjectId,
447
+ });
448
+ }
449
+ else {
450
+ throw new error_types_1.StorageError('Failed to update source enablement for project.', {
451
+ projectId: normalizedProjectId,
452
+ sourceName: normalizedSourceName,
453
+ enabled,
454
+ cause: error instanceof Error ? error.message : String(error),
455
+ });
456
+ }
457
+ }
458
+ return {
459
+ name: normalizedSourceName,
460
+ projectId: normalizedProjectId,
461
+ projectEnabled: enabled,
462
+ };
463
+ }
369
464
  async logUsage(skillId, skillSlug, projectId, agentId, agentNameSnapshot) {
370
465
  const normalizedSkillId = this.requireNonEmpty(skillId, 'skillId');
371
466
  const normalizedSkillSlug = this.requireNonEmpty(skillSlug, 'skillSlug');
@@ -657,31 +752,41 @@ let SkillsService = class SkillsService {
657
752
  }
658
753
  return (0, drizzle_orm_1.and)(...conditions);
659
754
  }
660
- getRegisteredSources() {
661
- const sourceMap = new Map();
662
- for (const adapter of this.adapters) {
663
- const normalizedName = adapter.sourceName.trim().toLowerCase();
664
- if (!normalizedName || sourceMap.has(normalizedName)) {
665
- continue;
666
- }
667
- sourceMap.set(normalizedName, adapter.repoUrl);
668
- }
669
- return Array.from(sourceMap.entries())
670
- .map(([name, repoUrl]) => ({ name, repoUrl }))
671
- .sort((left, right) => left.name.localeCompare(right.name));
755
+ async getRegisteredSources() {
756
+ return this.skillSourceRegistry.listRegisteredSources();
672
757
  }
673
- getEnabledSources() {
758
+ async getEnabledSources() {
674
759
  const sourceSettings = this.settingsService.getSkillSourcesEnabled();
675
- return this.getRegisteredSources()
760
+ const registeredSources = await this.getRegisteredSources();
761
+ return registeredSources
676
762
  .map((source) => source.name)
677
763
  .filter((sourceName) => this.isSourceEnabled(sourceName, sourceSettings));
678
764
  }
765
+ async getEnabledSourcesForProject(projectId) {
766
+ const enabledSources = await this.getEnabledSources();
767
+ if (enabledSources.length === 0) {
768
+ return [];
769
+ }
770
+ const projectSourceEnabledMap = await this.getProjectSourceEnabledMap(projectId);
771
+ return enabledSources.filter((sourceName) => projectSourceEnabledMap.get(sourceName) ?? true);
772
+ }
773
+ async getProjectSourceEnabledMap(projectId) {
774
+ const normalizedProjectId = this.requireNonEmpty(projectId, 'projectId');
775
+ const rows = await this.db
776
+ .select({
777
+ sourceName: schema_1.sourceProjectEnabled.sourceName,
778
+ enabled: schema_1.sourceProjectEnabled.enabled,
779
+ })
780
+ .from(schema_1.sourceProjectEnabled)
781
+ .where((0, drizzle_orm_1.eq)(schema_1.sourceProjectEnabled.projectId, normalizedProjectId));
782
+ return new Map(rows.map((row) => [row.sourceName.trim().toLowerCase(), Boolean(row.enabled)]));
783
+ }
679
784
  isSourceEnabled(sourceName, sourceSettings) {
680
785
  return sourceSettings[sourceName] !== false;
681
786
  }
682
- requireKnownSourceName(sourceName) {
787
+ async requireKnownSourceName(sourceName) {
683
788
  const normalized = this.requireNonEmpty(sourceName, 'sourceName').toLowerCase();
684
- const knownSources = new Set(this.getRegisteredSources().map((source) => source.name));
789
+ const knownSources = new Set((await this.getRegisteredSources()).map((source) => source.name));
685
790
  if (!knownSources.has(normalized)) {
686
791
  throw new error_types_1.ValidationError(`Unknown skill source: ${normalized}`, { sourceName: normalized });
687
792
  }
@@ -725,7 +830,7 @@ exports.SkillsService = SkillsService;
725
830
  exports.SkillsService = SkillsService = __decorate([
726
831
  (0, common_1.Injectable)(),
727
832
  __param(0, (0, common_1.Inject)(db_provider_1.DB_CONNECTION)),
728
- __param(2, (0, common_1.Inject)(skill_source_adapter_1.SKILL_SOURCE_ADAPTERS)),
729
- __metadata("design:paramtypes", [Function, settings_service_1.SettingsService, Array])
833
+ __metadata("design:paramtypes", [Function, settings_service_1.SettingsService,
834
+ skill_source_registry_service_1.SkillSourceRegistryService])
730
835
  ], SkillsService);
731
836
  //# sourceMappingURL=skills.service.js.map