devchain-cli 0.8.4 → 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.
Files changed (100) hide show
  1. package/dist/drizzle/0038_soft_texas_twister.sql +51 -0
  2. package/dist/drizzle/0039_early_the_spike.sql +1 -0
  3. package/dist/drizzle/0040_typical_mole_man.sql +3 -0
  4. package/dist/drizzle/meta/0037_snapshot.json +3670 -0
  5. package/dist/drizzle/meta/0038_snapshot.json +4019 -0
  6. package/dist/drizzle/meta/0039_snapshot.json +4026 -0
  7. package/dist/drizzle/meta/0040_snapshot.json +4028 -0
  8. package/dist/drizzle/meta/_journal.json +22 -1
  9. package/dist/server/app.module.js +2 -0
  10. package/dist/server/app.module.js.map +1 -1
  11. package/dist/server/modules/epics/controllers/epics.controller.js +4 -0
  12. package/dist/server/modules/epics/controllers/epics.controller.js.map +1 -1
  13. package/dist/server/modules/epics/services/epics.service.js +6 -6
  14. package/dist/server/modules/epics/services/epics.service.js.map +1 -1
  15. package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +74 -0
  16. package/dist/server/modules/mcp/dtos/mcp.dto.js +18 -1
  17. package/dist/server/modules/mcp/dtos/mcp.dto.js.map +1 -1
  18. package/dist/server/modules/mcp/dtos/schema-registry.js +2 -0
  19. package/dist/server/modules/mcp/dtos/schema-registry.js.map +1 -1
  20. package/dist/server/modules/mcp/mcp.module.js +2 -0
  21. package/dist/server/modules/mcp/mcp.module.js.map +1 -1
  22. package/dist/server/modules/mcp/services/mcp.service.d.ts +7 -1
  23. package/dist/server/modules/mcp/services/mcp.service.js +126 -2
  24. package/dist/server/modules/mcp/services/mcp.service.js.map +1 -1
  25. package/dist/server/modules/mcp/tool-definitions.d.ts +177 -0
  26. package/dist/server/modules/mcp/tool-definitions.js +48 -0
  27. package/dist/server/modules/mcp/tool-definitions.js.map +1 -1
  28. package/dist/server/modules/projects/dtos/export.dto.d.ts +15 -15
  29. package/dist/server/modules/seeders/seeders/0002_seed_replace_permission_mode_plan.d.ts +3 -0
  30. package/dist/server/modules/seeders/seeders/0002_seed_replace_permission_mode_plan.js +45 -0
  31. package/dist/server/modules/seeders/seeders/0002_seed_replace_permission_mode_plan.js.map +1 -0
  32. package/dist/server/modules/seeders/services/data-seeder.service.js +5 -1
  33. package/dist/server/modules/seeders/services/data-seeder.service.js.map +1 -1
  34. package/dist/server/modules/settings/dtos/settings.dto.d.ts +18 -0
  35. package/dist/server/modules/settings/dtos/settings.dto.js +5 -0
  36. package/dist/server/modules/settings/dtos/settings.dto.js.map +1 -1
  37. package/dist/server/modules/settings/services/settings.service.d.ts +5 -0
  38. package/dist/server/modules/settings/services/settings.service.js +80 -1
  39. package/dist/server/modules/settings/services/settings.service.js.map +1 -1
  40. package/dist/server/modules/skills/adapters/anthropic-skill-source.adapter.d.ts +9 -0
  41. package/dist/server/modules/skills/adapters/anthropic-skill-source.adapter.js +169 -0
  42. package/dist/server/modules/skills/adapters/anthropic-skill-source.adapter.js.map +1 -0
  43. package/dist/server/modules/skills/adapters/github-skill-source.base.d.ts +48 -0
  44. package/dist/server/modules/skills/adapters/github-skill-source.base.js +382 -0
  45. package/dist/server/modules/skills/adapters/github-skill-source.base.js.map +1 -0
  46. package/dist/server/modules/skills/adapters/microsoft-skill-source.adapter.d.ts +11 -0
  47. package/dist/server/modules/skills/adapters/microsoft-skill-source.adapter.js +227 -0
  48. package/dist/server/modules/skills/adapters/microsoft-skill-source.adapter.js.map +1 -0
  49. package/dist/server/modules/skills/adapters/openai-skill-source.adapter.d.ts +13 -0
  50. package/dist/server/modules/skills/adapters/openai-skill-source.adapter.js +260 -0
  51. package/dist/server/modules/skills/adapters/openai-skill-source.adapter.js.map +1 -0
  52. package/dist/server/modules/skills/adapters/skill-source.adapter.d.ts +26 -0
  53. package/dist/server/modules/skills/adapters/skill-source.adapter.js +5 -0
  54. package/dist/server/modules/skills/adapters/skill-source.adapter.js.map +1 -0
  55. package/dist/server/modules/skills/adapters/trailofbits-skill-source.adapter.d.ts +14 -0
  56. package/dist/server/modules/skills/adapters/trailofbits-skill-source.adapter.js +253 -0
  57. package/dist/server/modules/skills/adapters/trailofbits-skill-source.adapter.js.map +1 -0
  58. package/dist/server/modules/skills/adapters/vercel-skill-source.adapter.d.ts +15 -0
  59. package/dist/server/modules/skills/adapters/vercel-skill-source.adapter.js +292 -0
  60. package/dist/server/modules/skills/adapters/vercel-skill-source.adapter.js.map +1 -0
  61. package/dist/server/modules/skills/controllers/skills.controller.d.ts +42 -0
  62. package/dist/server/modules/skills/controllers/skills.controller.js +257 -0
  63. package/dist/server/modules/skills/controllers/skills.controller.js.map +1 -0
  64. package/dist/server/modules/skills/dtos/skill.dto.d.ts +169 -0
  65. package/dist/server/modules/skills/dtos/skill.dto.js +116 -0
  66. package/dist/server/modules/skills/dtos/skill.dto.js.map +1 -0
  67. package/dist/server/modules/skills/services/skill-category.service.d.ts +5 -0
  68. package/dist/server/modules/skills/services/skill-category.service.js +155 -0
  69. package/dist/server/modules/skills/services/skill-category.service.js.map +1 -0
  70. package/dist/server/modules/skills/services/skill-sync.service.d.ts +38 -0
  71. package/dist/server/modules/skills/services/skill-sync.service.js +283 -0
  72. package/dist/server/modules/skills/services/skill-sync.service.js.map +1 -0
  73. package/dist/server/modules/skills/services/skills.service.d.ts +119 -0
  74. package/dist/server/modules/skills/services/skills.service.js +731 -0
  75. package/dist/server/modules/skills/services/skills.service.js.map +1 -0
  76. package/dist/server/modules/skills/skills.module.d.ts +2 -0
  77. package/dist/server/modules/skills/skills.module.js +70 -0
  78. package/dist/server/modules/skills/skills.module.js.map +1 -0
  79. package/dist/server/modules/storage/db/schema.d.ts +629 -0
  80. package/dist/server/modules/storage/db/schema.js +56 -1
  81. package/dist/server/modules/storage/db/schema.js.map +1 -1
  82. package/dist/server/modules/storage/interfaces/storage.interface.d.ts +1 -0
  83. package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
  84. package/dist/server/modules/storage/local/local-storage.service.d.ts +2 -0
  85. package/dist/server/modules/storage/local/local-storage.service.js +50 -7
  86. package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
  87. package/dist/server/modules/storage/models/domain.models.d.ts +47 -1
  88. package/dist/server/templates/dev-loop.json +86 -79
  89. package/dist/server/tsconfig.tsbuildinfo +1 -1
  90. package/dist/server/ui/assets/{ReviewDetailPage-C4NizGFT.js → ReviewDetailPage-D_-bS1MK.js} +1 -1
  91. package/dist/server/ui/assets/{ReviewsPage-DLD6BGoH.js → ReviewsPage-BE1gxYlC.js} +1 -1
  92. package/dist/server/ui/assets/index-C094CE5I.js +945 -0
  93. package/dist/server/ui/assets/index-CbtpBUHu.css +32 -0
  94. package/dist/server/ui/assets/useReviewSubscription-Bs-17h-m.js +77 -0
  95. package/dist/server/ui/index.html +2 -2
  96. package/dist/templates/dev-loop.json +86 -79
  97. package/package.json +17 -1
  98. package/dist/server/ui/assets/index-BkiWahA0.css +0 -32
  99. package/dist/server/ui/assets/index-CHBUsbMb.js +0 -914
  100. package/dist/server/ui/assets/useReviewSubscription-CptabtYL.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)(() => reviews_service_1.ReviewsService))),
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