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
|
@@ -57,6 +57,7 @@ const epics_service_1 = require("../../epics/services/epics.service");
|
|
|
57
57
|
const settings_service_1 = require("../../settings/services/settings.service");
|
|
58
58
|
const guests_service_1 = require("../../guests/services/guests.service");
|
|
59
59
|
const reviews_service_1 = require("../../reviews/services/reviews.service");
|
|
60
|
+
const skills_service_1 = require("../../skills/services/skills.service");
|
|
60
61
|
const logger_1 = require("../../../common/logging/logger");
|
|
61
62
|
const schema_registry_1 = require("../dtos/schema-registry");
|
|
62
63
|
const mcp_dto_1 = require("../dtos/mcp.dto");
|
|
@@ -95,7 +96,7 @@ function redactParams(params) {
|
|
|
95
96
|
return params;
|
|
96
97
|
}
|
|
97
98
|
let McpService = class McpService {
|
|
98
|
-
constructor(storage, chatService, sessionsService, messagePoolService, terminalGateway, tmuxService, epicsService, settingsService, guestsService, reviewsService) {
|
|
99
|
+
constructor(storage, chatService, sessionsService, messagePoolService, terminalGateway, tmuxService, epicsService, settingsService, guestsService, skillsService, reviewsService) {
|
|
99
100
|
this.storage = storage;
|
|
100
101
|
this.chatService = chatService;
|
|
101
102
|
this.sessionsService = sessionsService;
|
|
@@ -105,6 +106,7 @@ let McpService = class McpService {
|
|
|
105
106
|
this.epicsService = epicsService;
|
|
106
107
|
this.settingsService = settingsService;
|
|
107
108
|
this.guestsService = guestsService;
|
|
109
|
+
this.skillsService = skillsService;
|
|
108
110
|
this.reviewsService = reviewsService;
|
|
109
111
|
this.DEFAULT_INLINE_MAX_BYTES = 64 * 1024;
|
|
110
112
|
logger.info('McpService initialized');
|
|
@@ -167,6 +169,10 @@ let McpService = class McpService {
|
|
|
167
169
|
return await this.listPrompts(normalizedParams);
|
|
168
170
|
case 'devchain_get_prompt':
|
|
169
171
|
return await this.getPrompt(normalizedParams);
|
|
172
|
+
case 'devchain_list_skills':
|
|
173
|
+
return await this.listSkills(normalizedParams);
|
|
174
|
+
case 'devchain_get_skill':
|
|
175
|
+
return await this.getSkill(normalizedParams);
|
|
170
176
|
case 'devchain_list_agents':
|
|
171
177
|
return await this.listAgents(normalizedParams);
|
|
172
178
|
case 'devchain_get_agent_by_name':
|
|
@@ -593,6 +599,94 @@ let McpService = class McpService {
|
|
|
593
599
|
};
|
|
594
600
|
return { success: true, data: response };
|
|
595
601
|
}
|
|
602
|
+
async listSkills(params) {
|
|
603
|
+
if (!this.skillsService) {
|
|
604
|
+
return {
|
|
605
|
+
success: false,
|
|
606
|
+
error: {
|
|
607
|
+
code: 'SERVICE_UNAVAILABLE',
|
|
608
|
+
message: 'Skill listing requires SkillsService to be available',
|
|
609
|
+
},
|
|
610
|
+
};
|
|
611
|
+
}
|
|
612
|
+
const validated = mcp_dto_1.ListSkillsParamsSchema.parse(params);
|
|
613
|
+
const ctx = await this.resolveSessionContext(validated.sessionId);
|
|
614
|
+
if (!ctx.success)
|
|
615
|
+
return ctx;
|
|
616
|
+
const { project } = ctx.data;
|
|
617
|
+
if (!project) {
|
|
618
|
+
return {
|
|
619
|
+
success: false,
|
|
620
|
+
error: {
|
|
621
|
+
code: 'PROJECT_NOT_FOUND',
|
|
622
|
+
message: 'No project associated with this session',
|
|
623
|
+
},
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
const projectSkills = await this.skillsService.listDiscoverable(project.id, { q: validated.q });
|
|
627
|
+
const response = {
|
|
628
|
+
skills: projectSkills.map((skill) => this.mapSkillListItem(skill)),
|
|
629
|
+
total: projectSkills.length,
|
|
630
|
+
};
|
|
631
|
+
return { success: true, data: response };
|
|
632
|
+
}
|
|
633
|
+
async getSkill(params) {
|
|
634
|
+
if (!this.skillsService) {
|
|
635
|
+
return {
|
|
636
|
+
success: false,
|
|
637
|
+
error: {
|
|
638
|
+
code: 'SERVICE_UNAVAILABLE',
|
|
639
|
+
message: 'Skill retrieval requires SkillsService to be available',
|
|
640
|
+
},
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
const validated = mcp_dto_1.GetSkillParamsSchema.parse(params);
|
|
644
|
+
const ctx = await this.resolveSessionContext(validated.sessionId);
|
|
645
|
+
if (!ctx.success)
|
|
646
|
+
return ctx;
|
|
647
|
+
const sessionCtx = ctx.data;
|
|
648
|
+
const { project } = sessionCtx;
|
|
649
|
+
if (!project) {
|
|
650
|
+
return {
|
|
651
|
+
success: false,
|
|
652
|
+
error: {
|
|
653
|
+
code: 'PROJECT_NOT_FOUND',
|
|
654
|
+
message: 'No project associated with this session',
|
|
655
|
+
},
|
|
656
|
+
};
|
|
657
|
+
}
|
|
658
|
+
const normalizedSlug = validated.slug.trim().toLowerCase();
|
|
659
|
+
let skill;
|
|
660
|
+
try {
|
|
661
|
+
skill = await this.skillsService.getSkillBySlug(normalizedSlug);
|
|
662
|
+
}
|
|
663
|
+
catch (error) {
|
|
664
|
+
if (error instanceof error_types_1.NotFoundError) {
|
|
665
|
+
return {
|
|
666
|
+
success: false,
|
|
667
|
+
error: {
|
|
668
|
+
code: 'SKILL_NOT_FOUND',
|
|
669
|
+
message: `Skill "${validated.slug}" was not found.`,
|
|
670
|
+
},
|
|
671
|
+
};
|
|
672
|
+
}
|
|
673
|
+
if (error instanceof error_types_1.ValidationError) {
|
|
674
|
+
return {
|
|
675
|
+
success: false,
|
|
676
|
+
error: {
|
|
677
|
+
code: 'VALIDATION_ERROR',
|
|
678
|
+
message: error.message,
|
|
679
|
+
data: error.details,
|
|
680
|
+
},
|
|
681
|
+
};
|
|
682
|
+
}
|
|
683
|
+
throw error;
|
|
684
|
+
}
|
|
685
|
+
const actor = getActorFromContext(sessionCtx);
|
|
686
|
+
await this.skillsService.logUsage(skill.id, skill.slug, project.id, actor?.id ?? null, actor?.name ?? null);
|
|
687
|
+
const response = this.mapSkillDetail(skill);
|
|
688
|
+
return { success: true, data: response };
|
|
689
|
+
}
|
|
596
690
|
async listAgents(params) {
|
|
597
691
|
const validated = mcp_dto_1.ListAgentsParamsSchema.parse(params);
|
|
598
692
|
const ctx = await this.resolveSessionContext(validated.sessionId);
|
|
@@ -997,6 +1091,7 @@ let McpService = class McpService {
|
|
|
997
1091
|
tags: validated.tags ?? [],
|
|
998
1092
|
agentName: validated.agentName,
|
|
999
1093
|
parentId: validated.parentId ?? null,
|
|
1094
|
+
skillsRequired: validated.skillsRequired ?? null,
|
|
1000
1095
|
}, context);
|
|
1001
1096
|
let agentNameById;
|
|
1002
1097
|
if (epic.agentId) {
|
|
@@ -1282,6 +1377,9 @@ let McpService = class McpService {
|
|
|
1282
1377
|
if (validated.description !== undefined) {
|
|
1283
1378
|
updateData.description = validated.description;
|
|
1284
1379
|
}
|
|
1380
|
+
if (validated.skillsRequired !== undefined) {
|
|
1381
|
+
updateData.skillsRequired = validated.skillsRequired;
|
|
1382
|
+
}
|
|
1285
1383
|
if (validated.statusName) {
|
|
1286
1384
|
const status = await this.storage.findStatusByName(project.id, validated.statusName);
|
|
1287
1385
|
if (!status) {
|
|
@@ -2426,6 +2524,7 @@ let McpService = class McpService {
|
|
|
2426
2524
|
summary.parentId = epic.parentId;
|
|
2427
2525
|
}
|
|
2428
2526
|
summary.tags = epic.tags ?? [];
|
|
2527
|
+
summary.skillsRequired = epic.skillsRequired ?? [];
|
|
2429
2528
|
return summary;
|
|
2430
2529
|
}
|
|
2431
2530
|
mapEpicChild(epic) {
|
|
@@ -2500,6 +2599,29 @@ let McpService = class McpService {
|
|
|
2500
2599
|
updatedAt: prompt.updatedAt,
|
|
2501
2600
|
};
|
|
2502
2601
|
}
|
|
2602
|
+
mapSkillListItem(skill) {
|
|
2603
|
+
const description = skill.shortDescription ||
|
|
2604
|
+
(skill.description ? skill.description.slice(0, 120) : 'No description available');
|
|
2605
|
+
return {
|
|
2606
|
+
slug: skill.slug,
|
|
2607
|
+
description,
|
|
2608
|
+
};
|
|
2609
|
+
}
|
|
2610
|
+
mapSkillDetail(skill) {
|
|
2611
|
+
return {
|
|
2612
|
+
slug: skill.slug,
|
|
2613
|
+
name: skill.name,
|
|
2614
|
+
description: skill.description,
|
|
2615
|
+
instructionContent: skill.instructionContent,
|
|
2616
|
+
contentPath: skill.contentPath,
|
|
2617
|
+
resources: skill.resources,
|
|
2618
|
+
sourceUrl: skill.sourceUrl,
|
|
2619
|
+
license: skill.license,
|
|
2620
|
+
compatibility: skill.compatibility,
|
|
2621
|
+
status: skill.status,
|
|
2622
|
+
frontmatter: skill.frontmatter,
|
|
2623
|
+
};
|
|
2624
|
+
}
|
|
2503
2625
|
extractLinkSlugs(content) {
|
|
2504
2626
|
const regex = /\[\[([A-Za-z0-9_\-./]+)\]\]/g;
|
|
2505
2627
|
const seen = new Set();
|
|
@@ -3333,7 +3455,8 @@ exports.McpService = McpService = __decorate([
|
|
|
3333
3455
|
__param(6, (0, common_1.Inject)((0, common_1.forwardRef)(() => epics_service_1.EpicsService))),
|
|
3334
3456
|
__param(7, (0, common_1.Inject)((0, common_1.forwardRef)(() => settings_service_1.SettingsService))),
|
|
3335
3457
|
__param(8, (0, common_1.Inject)((0, common_1.forwardRef)(() => guests_service_1.GuestsService))),
|
|
3336
|
-
__param(9, (0, common_1.Inject)((0, common_1.forwardRef)(() =>
|
|
3458
|
+
__param(9, (0, common_1.Inject)((0, common_1.forwardRef)(() => skills_service_1.SkillsService))),
|
|
3459
|
+
__param(10, (0, common_1.Inject)((0, common_1.forwardRef)(() => reviews_service_1.ReviewsService))),
|
|
3337
3460
|
__metadata("design:paramtypes", [Object, chat_service_1.ChatService,
|
|
3338
3461
|
sessions_service_1.SessionsService,
|
|
3339
3462
|
sessions_message_pool_service_1.SessionsMessagePoolService,
|
|
@@ -3342,6 +3465,7 @@ exports.McpService = McpService = __decorate([
|
|
|
3342
3465
|
epics_service_1.EpicsService,
|
|
3343
3466
|
settings_service_1.SettingsService,
|
|
3344
3467
|
guests_service_1.GuestsService,
|
|
3468
|
+
skills_service_1.SkillsService,
|
|
3345
3469
|
reviews_service_1.ReviewsService])
|
|
3346
3470
|
], McpService);
|
|
3347
3471
|
//# sourceMappingURL=mcp.service.js.map
|