opencastle 0.6.0 → 0.8.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 (223) hide show
  1. package/README.md +8 -7
  2. package/dist/cli/adapters/claude-code.d.ts.map +1 -1
  3. package/dist/cli/adapters/claude-code.js +30 -3
  4. package/dist/cli/adapters/claude-code.js.map +1 -1
  5. package/dist/cli/adapters/cursor.d.ts.map +1 -1
  6. package/dist/cli/adapters/cursor.js +27 -3
  7. package/dist/cli/adapters/cursor.js.map +1 -1
  8. package/dist/cli/adapters/opencode.d.ts +20 -0
  9. package/dist/cli/adapters/opencode.d.ts.map +1 -0
  10. package/dist/cli/adapters/opencode.js +265 -0
  11. package/dist/cli/adapters/opencode.js.map +1 -0
  12. package/dist/cli/adapters/vscode.d.ts.map +1 -1
  13. package/dist/cli/adapters/vscode.js +37 -6
  14. package/dist/cli/adapters/vscode.js.map +1 -1
  15. package/dist/cli/copy.d.ts +12 -0
  16. package/dist/cli/copy.d.ts.map +1 -1
  17. package/dist/cli/copy.js +27 -0
  18. package/dist/cli/copy.js.map +1 -1
  19. package/dist/cli/detect.d.ts +1 -1
  20. package/dist/cli/detect.js +21 -15
  21. package/dist/cli/detect.js.map +1 -1
  22. package/dist/cli/init.d.ts.map +1 -1
  23. package/dist/cli/init.js +143 -94
  24. package/dist/cli/init.js.map +1 -1
  25. package/dist/cli/manifest.d.ts +1 -1
  26. package/dist/cli/manifest.d.ts.map +1 -1
  27. package/dist/cli/manifest.js +2 -1
  28. package/dist/cli/manifest.js.map +1 -1
  29. package/dist/cli/mcp.d.ts +6 -6
  30. package/dist/cli/mcp.d.ts.map +1 -1
  31. package/dist/cli/mcp.js +104 -33
  32. package/dist/cli/mcp.js.map +1 -1
  33. package/dist/cli/prompt.d.ts +19 -0
  34. package/dist/cli/prompt.d.ts.map +1 -1
  35. package/dist/cli/prompt.js +143 -0
  36. package/dist/cli/prompt.js.map +1 -1
  37. package/dist/cli/stack-config.d.ts +23 -0
  38. package/dist/cli/stack-config.d.ts.map +1 -1
  39. package/dist/cli/stack-config.js +128 -124
  40. package/dist/cli/stack-config.js.map +1 -1
  41. package/dist/cli/types.d.ts +26 -9
  42. package/dist/cli/types.d.ts.map +1 -1
  43. package/dist/cli/types.js +26 -1
  44. package/dist/cli/types.js.map +1 -1
  45. package/dist/cli/update.d.ts.map +1 -1
  46. package/dist/cli/update.js +60 -19
  47. package/dist/cli/update.js.map +1 -1
  48. package/dist/orchestrator/plugins/chrome-devtools/config.d.ts +3 -0
  49. package/dist/orchestrator/plugins/chrome-devtools/config.d.ts.map +1 -0
  50. package/dist/orchestrator/plugins/chrome-devtools/config.js +28 -0
  51. package/dist/orchestrator/plugins/chrome-devtools/config.js.map +1 -0
  52. package/dist/orchestrator/plugins/contentful/config.d.ts +3 -0
  53. package/dist/orchestrator/plugins/contentful/config.d.ts.map +1 -0
  54. package/dist/orchestrator/plugins/contentful/config.js +48 -0
  55. package/dist/orchestrator/plugins/contentful/config.js.map +1 -0
  56. package/dist/orchestrator/plugins/convex/config.d.ts +3 -0
  57. package/dist/orchestrator/plugins/convex/config.d.ts.map +1 -0
  58. package/dist/orchestrator/plugins/convex/config.js +32 -0
  59. package/dist/orchestrator/plugins/convex/config.js.map +1 -0
  60. package/dist/orchestrator/plugins/index.d.ts +28 -0
  61. package/dist/orchestrator/plugins/index.d.ts.map +1 -0
  62. package/dist/orchestrator/plugins/index.js +63 -0
  63. package/dist/orchestrator/plugins/index.js.map +1 -0
  64. package/dist/orchestrator/plugins/jira/config.d.ts +3 -0
  65. package/dist/orchestrator/plugins/jira/config.d.ts.map +1 -0
  66. package/dist/orchestrator/plugins/jira/config.js +29 -0
  67. package/dist/orchestrator/plugins/jira/config.js.map +1 -0
  68. package/dist/orchestrator/plugins/linear/config.d.ts +3 -0
  69. package/dist/orchestrator/plugins/linear/config.d.ts.map +1 -0
  70. package/dist/orchestrator/plugins/linear/config.js +33 -0
  71. package/dist/orchestrator/plugins/linear/config.js.map +1 -0
  72. package/dist/orchestrator/plugins/nx/config.d.ts +3 -0
  73. package/dist/orchestrator/plugins/nx/config.d.ts.map +1 -0
  74. package/dist/orchestrator/plugins/nx/config.js +28 -0
  75. package/dist/orchestrator/plugins/nx/config.js.map +1 -0
  76. package/dist/orchestrator/plugins/sanity/config.d.ts +3 -0
  77. package/dist/orchestrator/plugins/sanity/config.d.ts.map +1 -0
  78. package/dist/orchestrator/plugins/sanity/config.js +43 -0
  79. package/dist/orchestrator/plugins/sanity/config.js.map +1 -0
  80. package/dist/orchestrator/plugins/slack/config.d.ts +3 -0
  81. package/dist/orchestrator/plugins/slack/config.d.ts.map +1 -0
  82. package/dist/orchestrator/plugins/slack/config.js +34 -0
  83. package/dist/orchestrator/plugins/slack/config.js.map +1 -0
  84. package/dist/orchestrator/plugins/strapi/config.d.ts +3 -0
  85. package/dist/orchestrator/plugins/strapi/config.d.ts.map +1 -0
  86. package/dist/orchestrator/plugins/strapi/config.js +40 -0
  87. package/dist/orchestrator/plugins/strapi/config.js.map +1 -0
  88. package/dist/orchestrator/plugins/supabase/config.d.ts +3 -0
  89. package/dist/orchestrator/plugins/supabase/config.d.ts.map +1 -0
  90. package/dist/orchestrator/plugins/supabase/config.js +33 -0
  91. package/dist/orchestrator/plugins/supabase/config.js.map +1 -0
  92. package/dist/orchestrator/plugins/teams/config.d.ts +3 -0
  93. package/dist/orchestrator/plugins/teams/config.d.ts.map +1 -0
  94. package/dist/orchestrator/plugins/teams/config.js +43 -0
  95. package/dist/orchestrator/plugins/teams/config.js.map +1 -0
  96. package/dist/orchestrator/plugins/types.d.ts +61 -0
  97. package/dist/orchestrator/plugins/types.d.ts.map +1 -0
  98. package/dist/orchestrator/plugins/types.js +2 -0
  99. package/dist/orchestrator/plugins/types.js.map +1 -0
  100. package/dist/orchestrator/plugins/vercel/config.d.ts +3 -0
  101. package/dist/orchestrator/plugins/vercel/config.d.ts.map +1 -0
  102. package/dist/orchestrator/plugins/vercel/config.js +32 -0
  103. package/dist/orchestrator/plugins/vercel/config.js.map +1 -0
  104. package/package.json +1 -1
  105. package/src/cli/adapters/claude-code.ts +36 -4
  106. package/src/cli/adapters/cursor.ts +42 -4
  107. package/src/cli/adapters/opencode.ts +320 -0
  108. package/src/cli/adapters/vscode.ts +40 -8
  109. package/src/cli/copy.ts +32 -0
  110. package/src/cli/detect.ts +17 -17
  111. package/src/cli/init.ts +157 -99
  112. package/src/cli/manifest.ts +2 -1
  113. package/src/cli/mcp.ts +129 -50
  114. package/src/cli/prompt.ts +176 -0
  115. package/src/cli/stack-config.ts +174 -145
  116. package/src/cli/types.ts +39 -8
  117. package/src/cli/update.ts +71 -20
  118. package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
  119. package/src/orchestrator/agent-workflows/README.md +1 -1
  120. package/src/orchestrator/agent-workflows/bug-fix.md +12 -12
  121. package/src/orchestrator/agent-workflows/data-pipeline.md +21 -20
  122. package/src/orchestrator/agent-workflows/database-migration.md +11 -11
  123. package/src/orchestrator/agent-workflows/feature-implementation.md +19 -12
  124. package/src/orchestrator/agent-workflows/performance-optimization.md +6 -6
  125. package/src/orchestrator/agent-workflows/refactoring.md +10 -10
  126. package/src/orchestrator/agent-workflows/schema-changes.md +8 -8
  127. package/src/orchestrator/agent-workflows/security-audit.md +12 -12
  128. package/src/orchestrator/agent-workflows/shared-delivery-phase.md +5 -5
  129. package/src/orchestrator/agents/api-designer.agent.md +1 -1
  130. package/src/orchestrator/agents/architect.agent.md +2 -2
  131. package/src/orchestrator/agents/content-engineer.agent.md +3 -3
  132. package/src/orchestrator/agents/copywriter.agent.md +2 -2
  133. package/src/orchestrator/agents/data-expert.agent.md +6 -6
  134. package/src/orchestrator/agents/database-engineer.agent.md +3 -3
  135. package/src/orchestrator/agents/developer.agent.md +4 -4
  136. package/src/orchestrator/agents/devops-expert.agent.md +5 -5
  137. package/src/orchestrator/agents/documentation-writer.agent.md +1 -1
  138. package/src/orchestrator/agents/performance-expert.agent.md +2 -2
  139. package/src/orchestrator/agents/release-manager.agent.md +4 -4
  140. package/src/orchestrator/agents/researcher.agent.md +3 -3
  141. package/src/orchestrator/agents/reviewer.agent.md +1 -1
  142. package/src/orchestrator/agents/security-expert.agent.md +4 -4
  143. package/src/orchestrator/agents/seo-specialist.agent.md +2 -2
  144. package/src/orchestrator/agents/team-lead.agent.md +56 -38
  145. package/src/orchestrator/agents/testing-expert.agent.md +5 -5
  146. package/src/orchestrator/agents/ui-ux-expert.agent.md +6 -6
  147. package/src/orchestrator/copilot-instructions.md +1 -1
  148. package/src/orchestrator/customizations/AGENT-FAILURES.md +1 -1
  149. package/src/orchestrator/customizations/AGENT-PERFORMANCE.md +12 -12
  150. package/src/orchestrator/customizations/DISPUTES.md +5 -5
  151. package/src/orchestrator/customizations/KNOWN-ISSUES.md +30 -0
  152. package/src/orchestrator/customizations/LESSONS-LEARNED.md +7 -7
  153. package/src/orchestrator/customizations/README.md +5 -2
  154. package/src/orchestrator/customizations/agents/agent-registry.md +1 -1
  155. package/src/orchestrator/customizations/agents/skill-matrix.md +12 -7
  156. package/src/orchestrator/customizations/logs/README.md +1 -1
  157. package/src/orchestrator/customizations/project/decisions.md +31 -0
  158. package/src/orchestrator/customizations/project/docs-structure.md +16 -5
  159. package/src/orchestrator/customizations/project/roadmap.md +24 -0
  160. package/src/orchestrator/customizations/project/tracker-config.md +1 -1
  161. package/src/orchestrator/customizations/stack/cms-config.md +1 -1
  162. package/src/orchestrator/customizations/stack/notifications-config.md +1 -1
  163. package/src/orchestrator/instructions/ai-optimization.instructions.md +2 -2
  164. package/src/orchestrator/instructions/general.instructions.md +102 -40
  165. package/src/orchestrator/{skills/browser-testing → plugins/chrome-devtools}/SKILL.md +1 -1
  166. package/src/orchestrator/plugins/chrome-devtools/config.ts +29 -0
  167. package/src/orchestrator/{skills/contentful-cms → plugins/contentful}/SKILL.md +1 -1
  168. package/src/orchestrator/plugins/contentful/config.ts +49 -0
  169. package/src/orchestrator/{skills/convex-database → plugins/convex}/SKILL.md +1 -1
  170. package/src/orchestrator/plugins/convex/config.ts +33 -0
  171. package/src/orchestrator/plugins/index.ts +85 -0
  172. package/src/orchestrator/{skills/jira-management → plugins/jira}/SKILL.md +3 -3
  173. package/src/orchestrator/plugins/jira/config.ts +30 -0
  174. package/src/orchestrator/{skills/task-management → plugins/linear}/SKILL.md +3 -3
  175. package/src/orchestrator/plugins/linear/config.ts +34 -0
  176. package/src/orchestrator/{skills/nx-workspace → plugins/nx}/SKILL.md +1 -1
  177. package/src/orchestrator/plugins/nx/config.ts +29 -0
  178. package/src/orchestrator/{skills/sanity-cms → plugins/sanity}/SKILL.md +1 -1
  179. package/src/orchestrator/plugins/sanity/config.ts +44 -0
  180. package/src/orchestrator/{skills/slack-notifications → plugins/slack}/SKILL.md +2 -2
  181. package/src/orchestrator/plugins/slack/config.ts +35 -0
  182. package/src/orchestrator/{skills/strapi-cms → plugins/strapi}/SKILL.md +1 -1
  183. package/src/orchestrator/plugins/strapi/config.ts +41 -0
  184. package/src/orchestrator/{skills/supabase-database → plugins/supabase}/SKILL.md +1 -1
  185. package/src/orchestrator/plugins/supabase/config.ts +34 -0
  186. package/src/orchestrator/{skills/teams-notifications → plugins/teams}/SKILL.md +2 -2
  187. package/src/orchestrator/plugins/teams/config.ts +44 -0
  188. package/src/orchestrator/plugins/types.ts +79 -0
  189. package/src/orchestrator/plugins/vercel/config.ts +33 -0
  190. package/src/orchestrator/prompts/bootstrap-customizations.prompt.md +8 -8
  191. package/src/orchestrator/prompts/brainstorm.prompt.md +3 -3
  192. package/src/orchestrator/prompts/bug-fix.prompt.md +27 -22
  193. package/src/orchestrator/prompts/create-skill.prompt.md +50 -32
  194. package/src/orchestrator/prompts/generate-task-spec.prompt.md +3 -3
  195. package/src/orchestrator/prompts/implement-feature.prompt.md +34 -29
  196. package/src/orchestrator/prompts/metrics-report.prompt.md +11 -11
  197. package/src/orchestrator/prompts/quick-refinement.prompt.md +23 -19
  198. package/src/orchestrator/prompts/resolve-pr-comments.prompt.md +19 -5
  199. package/src/orchestrator/skills/accessibility-standards/SKILL.md +1 -1
  200. package/src/orchestrator/skills/agent-hooks/SKILL.md +27 -18
  201. package/src/orchestrator/skills/agent-memory/SKILL.md +7 -7
  202. package/src/orchestrator/skills/api-patterns/SKILL.md +6 -6
  203. package/src/orchestrator/skills/code-commenting/SKILL.md +1 -1
  204. package/src/orchestrator/skills/context-map/SKILL.md +4 -4
  205. package/src/orchestrator/skills/data-engineering/SKILL.md +7 -4
  206. package/src/orchestrator/skills/deployment-infrastructure/SKILL.md +2 -2
  207. package/src/orchestrator/skills/documentation-standards/SKILL.md +1 -1
  208. package/src/orchestrator/skills/fast-review/SKILL.md +18 -7
  209. package/src/orchestrator/skills/frontend-design/SKILL.md +1 -1
  210. package/src/orchestrator/skills/memory-merger/SKILL.md +8 -8
  211. package/src/orchestrator/skills/nextjs-patterns/SKILL.md +1 -1
  212. package/src/orchestrator/skills/panel-majority-vote/SKILL.md +2 -2
  213. package/src/orchestrator/skills/panel-majority-vote/panel-report.template.md +1 -1
  214. package/src/orchestrator/skills/performance-optimization/SKILL.md +1 -1
  215. package/src/orchestrator/skills/react-development/SKILL.md +3 -3
  216. package/src/orchestrator/skills/security-hardening/SKILL.md +27 -27
  217. package/src/orchestrator/skills/self-improvement/SKILL.md +14 -13
  218. package/src/orchestrator/skills/seo-patterns/SKILL.md +1 -1
  219. package/src/orchestrator/skills/session-checkpoints/SKILL.md +19 -19
  220. package/src/orchestrator/skills/team-lead-reference/SKILL.md +9 -9
  221. package/src/orchestrator/skills/testing-workflow/SKILL.md +13 -13
  222. package/src/orchestrator/skills/validation-gates/SKILL.md +157 -27
  223. package/src/orchestrator/mcp.json +0 -69
@@ -0,0 +1,33 @@
1
+ export const config = {
2
+ id: 'linear',
3
+ name: 'Linear',
4
+ category: 'team',
5
+ subCategory: 'tracker',
6
+ label: 'Linear',
7
+ hint: 'Issue tracking with MCP integration',
8
+ skillName: 'linear-task-management',
9
+ mcpServerKey: 'Linear',
10
+ mcpConfig: {
11
+ type: 'stdio',
12
+ command: 'npx',
13
+ args: ['-y', '@mseep/linear-mcp'],
14
+ envFile: '${workspaceFolder}/.env',
15
+ },
16
+ authType: 'env-token',
17
+ envVars: [
18
+ {
19
+ name: 'LINEAR_API_KEY',
20
+ hint: 'Create at linear.app → Settings → API → Personal API keys',
21
+ },
22
+ ],
23
+ agentToolMap: {
24
+ 'team-lead': [
25
+ 'linear/create_issue', 'linear/list_issues', 'linear/update_issue',
26
+ 'linear/list_teams', 'linear/list_projects', 'linear/get_issue', 'linear/search_issues',
27
+ ],
28
+ },
29
+ docsUrl: '/guides/linear-setup',
30
+ officialDocs: 'https://linear.app/docs',
31
+ mcpPackage: '@mseep/linear-mcp',
32
+ };
33
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/linear/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAiB;IAClC,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,SAAS;IACtB,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,qCAAqC;IAC3C,SAAS,EAAE,wBAAwB;IACnC,YAAY,EAAE,QAAQ;IACtB,SAAS,EAAE;QACT,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACjC,OAAO,EAAE,yBAAyB;KACnC;IACD,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE;QACP;YACE,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,2DAA2D;SAClE;KACF;IACD,YAAY,EAAE;QACZ,WAAW,EAAE;YACX,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB;YAClE,mBAAmB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,sBAAsB;SACxF;KACF;IACD,OAAO,EAAE,sBAAsB;IAC/B,YAAY,EAAE,yBAAyB;IACvC,UAAU,EAAE,mBAAmB;CAChC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PluginConfig } from '../types.js';
2
+ export declare const config: PluginConfig;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/nx/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,MAAM,EAAE,YA0BpB,CAAC"}
@@ -0,0 +1,28 @@
1
+ export const config = {
2
+ id: 'nx',
3
+ name: 'NX',
4
+ category: 'tech',
5
+ subCategory: 'monorepo',
6
+ label: 'NX',
7
+ hint: 'Monorepo build system',
8
+ skillName: 'nx-workspace',
9
+ mcpServerKey: 'Nx',
10
+ mcpConfig: {
11
+ type: 'stdio',
12
+ command: 'npx',
13
+ args: ['nx', 'mcp'],
14
+ },
15
+ authType: 'none',
16
+ envVars: [],
17
+ agentToolMap: {
18
+ 'architect': ['nx-mcp-server/nx_workspace', 'nx-mcp-server/nx_project_details', 'nx-mcp-server/nx_visualize_graph'],
19
+ 'developer': ['nx-mcp-server/nx_project_details', 'nx-mcp-server/nx_workspace', 'nx-mcp-server/nx_generators'],
20
+ 'devops-expert': ['nx-mcp-server/nx_project_details', 'nx-mcp-server/nx_workspace', 'nx-mcp-server/nx_workspace_path'],
21
+ 'performance-expert': ['nx-mcp-server/nx_project_details', 'nx-mcp-server/nx_workspace'],
22
+ 'release-manager': ['nx-mcp-server/nx_project_details', 'nx-mcp-server/nx_workspace', 'nx-mcp-server/nx_workspace_path'],
23
+ },
24
+ docsUrl: null,
25
+ officialDocs: 'https://nx.dev/getting-started/intro',
26
+ mcpPackage: null,
27
+ };
28
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/nx/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAiB;IAClC,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,UAAU;IACvB,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,uBAAuB;IAC7B,SAAS,EAAE,cAAc;IACzB,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE;QACT,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;KACpB;IACD,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE;QACZ,WAAW,EAAE,CAAC,4BAA4B,EAAE,kCAAkC,EAAE,kCAAkC,CAAC;QACnH,WAAW,EAAE,CAAC,kCAAkC,EAAE,4BAA4B,EAAE,6BAA6B,CAAC;QAC9G,eAAe,EAAE,CAAC,kCAAkC,EAAE,4BAA4B,EAAE,iCAAiC,CAAC;QACtH,oBAAoB,EAAE,CAAC,kCAAkC,EAAE,4BAA4B,CAAC;QACxF,iBAAiB,EAAE,CAAC,kCAAkC,EAAE,4BAA4B,EAAE,iCAAiC,CAAC;KACzH;IACD,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,sCAAsC;IACpD,UAAU,EAAE,IAAI;CACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PluginConfig } from '../types.js';
2
+ export declare const config: PluginConfig;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/sanity/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,MAAM,EAAE,YAyCpB,CAAC"}
@@ -0,0 +1,43 @@
1
+ export const config = {
2
+ id: 'sanity',
3
+ name: 'Sanity',
4
+ category: 'tech',
5
+ subCategory: 'cms',
6
+ label: 'Sanity',
7
+ hint: 'GROQ queries, real-time collaboration',
8
+ skillName: 'sanity-cms',
9
+ mcpServerKey: 'Sanity',
10
+ mcpConfig: {
11
+ type: 'http',
12
+ url: 'https://mcp.sanity.io',
13
+ },
14
+ authType: 'oauth',
15
+ envVars: [],
16
+ agentToolMap: {
17
+ 'content-engineer': [
18
+ 'sanity/get_schema', 'sanity/get_sanity_rules', 'sanity/list_sanity_rules',
19
+ 'sanity/query_documents', 'sanity/get_document', 'sanity/create_documents_from_json',
20
+ 'sanity/create_documents_from_markdown', 'sanity/patch_document_from_json',
21
+ 'sanity/patch_document_from_markdown', 'sanity/deploy_schema', 'sanity/publish_documents',
22
+ 'sanity/unpublish_documents', 'sanity/discard_drafts', 'sanity/list_projects',
23
+ 'sanity/list_datasets', 'sanity/list_workspace_schemas', 'sanity/list_embeddings_indices',
24
+ 'sanity/search_docs', 'sanity/read_docs', 'sanity/semantic_search',
25
+ 'sanity/migration_guide', 'sanity/create_version', 'sanity/generate_image',
26
+ 'sanity/transform_image', 'sanity/add_cors_origin',
27
+ ],
28
+ 'copywriter': [
29
+ 'sanity/get_schema', 'sanity/query_documents', 'sanity/get_document',
30
+ 'sanity/patch_document_from_json', 'sanity/patch_document_from_markdown',
31
+ 'sanity/list_datasets', 'sanity/list_projects',
32
+ ],
33
+ 'data-expert': [
34
+ 'sanity/get_schema', 'sanity/query_documents', 'sanity/create_documents_from_json',
35
+ 'sanity/patch_document_from_json', 'sanity/get_document', 'sanity/list_datasets',
36
+ 'sanity/list_projects',
37
+ ],
38
+ },
39
+ docsUrl: null,
40
+ officialDocs: 'https://www.sanity.io/docs',
41
+ mcpPackage: null,
42
+ };
43
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/sanity/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAiB;IAClC,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,KAAK;IAClB,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,uCAAuC;IAC7C,SAAS,EAAE,YAAY;IACvB,YAAY,EAAE,QAAQ;IACtB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,uBAAuB;KAC7B;IACD,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE;QACZ,kBAAkB,EAAE;YAClB,mBAAmB,EAAE,yBAAyB,EAAE,0BAA0B;YAC1E,wBAAwB,EAAE,qBAAqB,EAAE,mCAAmC;YACpF,uCAAuC,EAAE,iCAAiC;YAC1E,qCAAqC,EAAE,sBAAsB,EAAE,0BAA0B;YACzF,4BAA4B,EAAE,uBAAuB,EAAE,sBAAsB;YAC7E,sBAAsB,EAAE,+BAA+B,EAAE,gCAAgC;YACzF,oBAAoB,EAAE,kBAAkB,EAAE,wBAAwB;YAClE,wBAAwB,EAAE,uBAAuB,EAAE,uBAAuB;YAC1E,wBAAwB,EAAE,wBAAwB;SACnD;QACD,YAAY,EAAE;YACZ,mBAAmB,EAAE,wBAAwB,EAAE,qBAAqB;YACpE,iCAAiC,EAAE,qCAAqC;YACxE,sBAAsB,EAAE,sBAAsB;SAC/C;QACD,aAAa,EAAE;YACb,mBAAmB,EAAE,wBAAwB,EAAE,mCAAmC;YAClF,iCAAiC,EAAE,qBAAqB,EAAE,sBAAsB;YAChF,sBAAsB;SACvB;KACF;IACD,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,4BAA4B;IAC1C,UAAU,EAAE,IAAI;CACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PluginConfig } from '../types.js';
2
+ export declare const config: PluginConfig;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/slack/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,MAAM,EAAE,YAgCpB,CAAC"}
@@ -0,0 +1,34 @@
1
+ export const config = {
2
+ id: 'slack',
3
+ name: 'Slack',
4
+ category: 'team',
5
+ subCategory: 'notifications',
6
+ label: 'Slack',
7
+ hint: 'Agent notifications and communication',
8
+ skillName: 'slack-notifications',
9
+ mcpServerKey: 'Slack',
10
+ mcpConfig: {
11
+ type: 'stdio',
12
+ command: 'npx',
13
+ args: ['-y', '@kazuph/mcp-slack'],
14
+ envFile: '${workspaceFolder}/.env',
15
+ env: {
16
+ SLACK_MCP_ADD_MESSAGE_TOOL: 'true',
17
+ },
18
+ },
19
+ authType: 'env-token',
20
+ envVars: [
21
+ {
22
+ name: 'SLACK_MCP_XOXB_TOKEN',
23
+ hint: 'Create a Slack App at api.slack.com/apps → Bot User OAuth Token',
24
+ },
25
+ ],
26
+ agentToolMap: {
27
+ 'team-lead': ['slack/*'],
28
+ 'release-manager': ['slack/*'],
29
+ },
30
+ docsUrl: '/guides/plugins#slack',
31
+ officialDocs: 'https://api.slack.com/docs',
32
+ mcpPackage: '@kazuph/mcp-slack',
33
+ };
34
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/slack/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAiB;IAClC,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,eAAe;IAC5B,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,uCAAuC;IAC7C,SAAS,EAAE,qBAAqB;IAChC,YAAY,EAAE,OAAO;IACrB,SAAS,EAAE;QACT,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACjC,OAAO,EAAE,yBAAyB;QAClC,GAAG,EAAE;YACH,0BAA0B,EAAE,MAAM;SACnC;KACF;IACD,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE;QACP;YACE,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE,iEAAiE;SACxE;KACF;IACD,YAAY,EAAE;QACZ,WAAW,EAAE,CAAC,SAAS,CAAC;QACxB,iBAAiB,EAAE,CAAC,SAAS,CAAC;KAC/B;IACD,OAAO,EAAE,uBAAuB;IAChC,YAAY,EAAE,4BAA4B;IAC1C,UAAU,EAAE,mBAAmB;CAChC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PluginConfig } from '../types.js';
2
+ export declare const config: PluginConfig;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/strapi/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,MAAM,EAAE,YAsCpB,CAAC"}
@@ -0,0 +1,40 @@
1
+ export const config = {
2
+ id: 'strapi',
3
+ name: 'Strapi',
4
+ category: 'tech',
5
+ subCategory: 'cms',
6
+ label: 'Strapi',
7
+ hint: 'Open-source headless CMS',
8
+ skillName: 'strapi-cms',
9
+ mcpServerKey: 'Strapi',
10
+ mcpConfig: {
11
+ type: 'stdio',
12
+ command: 'npx',
13
+ args: ['-y', 'strapi-mcp'],
14
+ },
15
+ authType: 'none',
16
+ envVars: [],
17
+ agentToolMap: {
18
+ 'content-engineer': [
19
+ 'strapi/list_content_types', 'strapi/get_content_type_schema', 'strapi/get_entries',
20
+ 'strapi/get_entry', 'strapi/create_entry', 'strapi/update_entry', 'strapi/delete_entry',
21
+ 'strapi/publish_entry', 'strapi/unpublish_entry', 'strapi/upload_media',
22
+ 'strapi/upload_media_from_path', 'strapi/connect_relation', 'strapi/disconnect_relation',
23
+ 'strapi/create_content_type', 'strapi/update_content_type', 'strapi/delete_content_type',
24
+ 'strapi/list_components', 'strapi/get_component_schema', 'strapi/create_component',
25
+ 'strapi/update_component',
26
+ ],
27
+ 'copywriter': [
28
+ 'strapi/list_content_types', 'strapi/get_content_type_schema', 'strapi/get_entries',
29
+ 'strapi/get_entry', 'strapi/update_entry', 'strapi/publish_entry',
30
+ ],
31
+ 'data-expert': [
32
+ 'strapi/list_content_types', 'strapi/get_content_type_schema', 'strapi/get_entries',
33
+ 'strapi/get_entry', 'strapi/create_entry', 'strapi/update_entry',
34
+ ],
35
+ },
36
+ docsUrl: null,
37
+ officialDocs: 'https://docs.strapi.io/',
38
+ mcpPackage: 'strapi-mcp',
39
+ };
40
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/strapi/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAiB;IAClC,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,KAAK;IAClB,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,0BAA0B;IAChC,SAAS,EAAE,YAAY;IACvB,YAAY,EAAE,QAAQ;IACtB,SAAS,EAAE;QACT,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC;KAC3B;IACD,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE;QACZ,kBAAkB,EAAE;YAClB,2BAA2B,EAAE,gCAAgC,EAAE,oBAAoB;YACnF,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB;YACvF,sBAAsB,EAAE,wBAAwB,EAAE,qBAAqB;YACvE,+BAA+B,EAAE,yBAAyB,EAAE,4BAA4B;YACxF,4BAA4B,EAAE,4BAA4B,EAAE,4BAA4B;YACxF,wBAAwB,EAAE,6BAA6B,EAAE,yBAAyB;YAClF,yBAAyB;SAC1B;QACD,YAAY,EAAE;YACZ,2BAA2B,EAAE,gCAAgC,EAAE,oBAAoB;YACnF,kBAAkB,EAAE,qBAAqB,EAAE,sBAAsB;SAClE;QACD,aAAa,EAAE;YACb,2BAA2B,EAAE,gCAAgC,EAAE,oBAAoB;YACnF,kBAAkB,EAAE,qBAAqB,EAAE,qBAAqB;SACjE;KACF;IACD,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,yBAAyB;IACvC,UAAU,EAAE,YAAY;CACzB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PluginConfig } from '../types.js';
2
+ export declare const config: PluginConfig;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/supabase/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,MAAM,EAAE,YA+BpB,CAAC"}
@@ -0,0 +1,33 @@
1
+ export const config = {
2
+ id: 'supabase',
3
+ name: 'Supabase',
4
+ category: 'tech',
5
+ subCategory: 'database',
6
+ label: 'Supabase',
7
+ hint: 'Postgres + Auth + RLS + Edge Functions',
8
+ skillName: 'supabase-database',
9
+ mcpServerKey: 'Supabase',
10
+ mcpConfig: {
11
+ type: 'http',
12
+ url: 'https://mcp.supabase.com/mcp',
13
+ },
14
+ authType: 'oauth',
15
+ envVars: [],
16
+ agentToolMap: {
17
+ 'database-engineer': [
18
+ 'supabase/apply_migration', 'supabase/execute_sql', 'supabase/list_tables',
19
+ 'supabase/list_migrations', 'supabase/list_extensions', 'supabase/get_logs',
20
+ 'supabase/get_project', 'supabase/get_project_url', 'supabase/list_projects',
21
+ 'supabase/search_docs', 'supabase/generate_typescript_types', 'supabase/get_advisors',
22
+ 'supabase/create_branch', 'supabase/list_branches',
23
+ ],
24
+ 'security-expert': [
25
+ 'supabase/execute_sql', 'supabase/list_tables', 'supabase/get_advisors',
26
+ 'supabase/list_migrations', 'supabase/get_project',
27
+ ],
28
+ },
29
+ docsUrl: null,
30
+ officialDocs: 'https://supabase.com/docs',
31
+ mcpPackage: null,
32
+ };
33
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/supabase/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAiB;IAClC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,UAAU;IACvB,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,wCAAwC;IAC9C,SAAS,EAAE,mBAAmB;IAC9B,YAAY,EAAE,UAAU;IACxB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,8BAA8B;KACpC;IACD,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE;QACZ,mBAAmB,EAAE;YACnB,0BAA0B,EAAE,sBAAsB,EAAE,sBAAsB;YAC1E,0BAA0B,EAAE,0BAA0B,EAAE,mBAAmB;YAC3E,sBAAsB,EAAE,0BAA0B,EAAE,wBAAwB;YAC5E,sBAAsB,EAAE,oCAAoC,EAAE,uBAAuB;YACrF,wBAAwB,EAAE,wBAAwB;SACnD;QACD,iBAAiB,EAAE;YACjB,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB;YACvE,0BAA0B,EAAE,sBAAsB;SACnD;KACF;IACD,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,2BAA2B;IACzC,UAAU,EAAE,IAAI;CACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PluginConfig } from '../types.js';
2
+ export declare const config: PluginConfig;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/teams/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,MAAM,EAAE,YAyCpB,CAAC"}
@@ -0,0 +1,43 @@
1
+ export const config = {
2
+ id: 'teams',
3
+ name: 'Microsoft Teams',
4
+ category: 'team',
5
+ subCategory: 'notifications',
6
+ label: 'Microsoft Teams',
7
+ hint: 'Agent notifications via Teams channels',
8
+ skillName: 'teams-notifications',
9
+ mcpServerKey: 'Teams',
10
+ mcpConfig: {
11
+ type: 'http',
12
+ url: 'https://agent365.svc.cloud.microsoft/agents/tenants/${input:tenant_id}/servers/mcp_TeamsServer',
13
+ },
14
+ authType: 'oauth',
15
+ envVars: [],
16
+ agentToolMap: {
17
+ 'team-lead': [
18
+ 'Teams/mcp_graph_chat_createChat', 'Teams/mcp_graph_chat_listChats',
19
+ 'Teams/mcp_graph_chat_getChat', 'Teams/mcp_graph_chat_postMessage',
20
+ 'Teams/mcp_graph_chat_listChatMessages', 'Teams/mcp_graph_chat_getChatMessage',
21
+ 'Teams/mcp_graph_teams_listTeams', 'Teams/mcp_graph_teams_listChannels',
22
+ 'Teams/mcp_graph_teams_getChannel', 'Teams/mcp_graph_teams_postChannelMessage',
23
+ 'Teams/mcp_graph_teams_replyToChannelMessage', 'Teams/mcp_graph_teams_listChannelMessages',
24
+ ],
25
+ 'release-manager': [
26
+ 'Teams/mcp_graph_chat_postMessage', 'Teams/mcp_graph_chat_listChats',
27
+ 'Teams/mcp_graph_teams_listTeams', 'Teams/mcp_graph_teams_listChannels',
28
+ 'Teams/mcp_graph_teams_postChannelMessage', 'Teams/mcp_graph_teams_replyToChannelMessage',
29
+ 'Teams/mcp_graph_teams_listChannelMessages',
30
+ ],
31
+ },
32
+ docsUrl: null,
33
+ officialDocs: 'https://learn.microsoft.com/en-us/microsoftteams/',
34
+ mcpPackage: null,
35
+ mcpInputs: [
36
+ {
37
+ id: 'tenant_id',
38
+ type: 'promptString',
39
+ description: 'Microsoft Entra tenant ID (GUID)',
40
+ },
41
+ ],
42
+ };
43
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/teams/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAiB;IAClC,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,eAAe;IAC5B,KAAK,EAAE,iBAAiB;IACxB,IAAI,EAAE,wCAAwC;IAC9C,SAAS,EAAE,qBAAqB;IAChC,YAAY,EAAE,OAAO;IACrB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,gGAAgG;KACtG;IACD,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE;QACZ,WAAW,EAAE;YACX,iCAAiC,EAAE,gCAAgC;YACnE,8BAA8B,EAAE,kCAAkC;YAClE,uCAAuC,EAAE,qCAAqC;YAC9E,iCAAiC,EAAE,oCAAoC;YACvE,kCAAkC,EAAE,0CAA0C;YAC9E,6CAA6C,EAAE,2CAA2C;SAC3F;QACD,iBAAiB,EAAE;YACjB,kCAAkC,EAAE,gCAAgC;YACpE,iCAAiC,EAAE,oCAAoC;YACvE,0CAA0C,EAAE,6CAA6C;YACzF,2CAA2C;SAC5C;KACF;IACD,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,mDAAmD;IACjE,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE;QACT;YACE,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,kCAAkC;SAChD;KACF;CACF,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Configuration for a tool plugin.
3
+ * Single source of truth for tool metadata used by init, adapters, and agents.
4
+ */
5
+ export interface PluginConfig {
6
+ /** Unique ID matching TechTool | TeamTool union type */
7
+ id: string;
8
+ /** Human-readable display name */
9
+ name: string;
10
+ /** Plugin category */
11
+ category: 'tech' | 'team';
12
+ /** Sub-category for grouping */
13
+ subCategory: 'cms' | 'database' | 'deployment' | 'monorepo' | 'tracker' | 'notifications' | 'testing';
14
+ /** Label shown in the `npx opencastle init` multiselect */
15
+ label: string;
16
+ /** Hint shown next to the label in multiselect */
17
+ hint: string;
18
+ /** Skill directory name (matches the old skills/ dirname). null if no skill. */
19
+ skillName: string | null;
20
+ /** MCP server key used in the generated MCP config. null if no MCP server. */
21
+ mcpServerKey: string | null;
22
+ /** Raw MCP server config */
23
+ mcpConfig: McpServerConfig;
24
+ /** Authentication type */
25
+ authType: 'oauth' | 'env-token' | 'none';
26
+ /** Required environment variables for this plugin */
27
+ envVars: EnvVarRequirement[];
28
+ /** Tools to inject into specific agent definitions when this plugin is selected.
29
+ * Key = agent name (e.g. 'content-engineer'), Value = tool names to append. */
30
+ agentToolMap?: Record<string, string[]>;
31
+ /** URL to setup guide on opencastle.dev (null if none) */
32
+ docsUrl: string | null;
33
+ /** Official product documentation URL */
34
+ officialDocs: string;
35
+ /** NPM package for the MCP server (null for HTTP/OAuth servers) */
36
+ mcpPackage: string | null;
37
+ /** Whether this plugin should be preselected in the init prompt */
38
+ preselected?: boolean;
39
+ /** VS Code input prompts required by this plugin's MCP config (e.g. tenant ID) */
40
+ mcpInputs?: McpInput[];
41
+ }
42
+ export interface McpInput {
43
+ id: string;
44
+ type: 'promptString';
45
+ description: string;
46
+ }
47
+ export interface McpServerConfig {
48
+ type: 'stdio' | 'http';
49
+ command?: string;
50
+ args?: string[];
51
+ url?: string;
52
+ env?: Record<string, string>;
53
+ envFile?: string;
54
+ }
55
+ export interface EnvVarRequirement {
56
+ /** Environment variable name */
57
+ name: string;
58
+ /** Short description of where to get the value */
59
+ hint: string;
60
+ }
61
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/plugins/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IAEX,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,sBAAsB;IACtB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAE1B,gCAAgC;IAChC,WAAW,EAAE,KAAK,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS,CAAC;IAEtG,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IAEd,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IAEb,gFAAgF;IAChF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,4BAA4B;IAC5B,SAAS,EAAE,eAAe,CAAC;IAE3B,0BAA0B;IAC1B,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;IAEzC,qDAAqD;IACrD,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAE7B;mFAC+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAExC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IAErB,mEAAmE;IACnE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,mEAAmE;IACnE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,kFAAkF;IAClF,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/orchestrator/plugins/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { PluginConfig } from '../types.js';
2
+ export declare const config: PluginConfig;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/vercel/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,MAAM,EAAE,YA8BpB,CAAC"}
@@ -0,0 +1,32 @@
1
+ export const config = {
2
+ id: 'vercel',
3
+ name: 'Vercel',
4
+ category: 'tech',
5
+ subCategory: 'deployment',
6
+ label: 'Vercel',
7
+ hint: 'Deployment and hosting platform',
8
+ skillName: null,
9
+ mcpServerKey: 'Vercel',
10
+ mcpConfig: {
11
+ type: 'http',
12
+ url: 'https://mcp.vercel.com',
13
+ },
14
+ authType: 'oauth',
15
+ envVars: [],
16
+ agentToolMap: {
17
+ 'devops-expert': [
18
+ 'vercel/deploy_to_vercel', 'vercel/get_deployment', 'vercel/get_deployment_build_logs',
19
+ 'vercel/get_project', 'vercel/get_runtime_logs', 'vercel/list_deployments',
20
+ 'vercel/list_projects', 'vercel/list_teams', 'vercel/search_vercel_documentation',
21
+ 'vercel/check_domain_availability_and_price',
22
+ ],
23
+ 'release-manager': [
24
+ 'vercel/get_deployment', 'vercel/get_deployment_build_logs',
25
+ 'vercel/get_runtime_logs', 'vercel/list_deployments', 'vercel/list_projects',
26
+ ],
27
+ },
28
+ docsUrl: null,
29
+ officialDocs: 'https://vercel.com/docs',
30
+ mcpPackage: null,
31
+ };
32
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/orchestrator/plugins/vercel/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAiB;IAClC,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,YAAY;IACzB,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,iCAAiC;IACvC,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,QAAQ;IACtB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,wBAAwB;KAC9B;IACD,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE;QACZ,eAAe,EAAE;YACf,yBAAyB,EAAE,uBAAuB,EAAE,kCAAkC;YACtF,oBAAoB,EAAE,yBAAyB,EAAE,yBAAyB;YAC1E,sBAAsB,EAAE,mBAAmB,EAAE,oCAAoC;YACjF,4CAA4C;SAC7C;QACD,iBAAiB,EAAE;YACjB,uBAAuB,EAAE,kCAAkC;YAC3D,yBAAyB,EAAE,yBAAyB,EAAE,sBAAsB;SAC7E;KACF;IACD,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,yBAAyB;IACvC,UAAU,EAAE,IAAI;CACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencastle",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "type": "module",
5
5
  "description": "Multi-agent orchestration framework for AI coding assistants",
6
6
  "bin": {
@@ -1,9 +1,9 @@
1
1
  import { resolve, basename } from 'node:path'
2
2
  import { mkdir, writeFile, readdir, readFile, unlink, rm } from 'node:fs/promises'
3
3
  import { existsSync } from 'node:fs'
4
- import { copyDir, getOrchestratorRoot } from '../copy.js'
4
+ import { copyDir, getOrchestratorRoot, getPluginsRoot, getPluginSkillEntries } from '../copy.js'
5
5
  import { scaffoldMcpConfig } from '../mcp.js'
6
- import { getExcludedSkills, getExcludedAgents, getCustomizationsTransform } from '../stack-config.js'
6
+ import { getExcludedSkills, getExcludedAgents, getCustomizationsTransform, getIncludedPluginIds } from '../stack-config.js'
7
7
  import type { CopyResults, ManagedPaths, RepoInfo, StackConfig } from '../types.js'
8
8
 
9
9
  /**
@@ -127,6 +127,19 @@ export async function install(
127
127
  `- **${entry.name}** (\`.claude/skills/${entry.name}.md\`): ${desc}`
128
128
  )
129
129
  }
130
+
131
+ // Plugin skills
132
+ const pluginsRoot = getPluginsRoot(pkgRoot)
133
+ const includedPlugins = stack ? getIncludedPluginIds(stack) : undefined
134
+ const pluginEntries = await getPluginSkillEntries(pluginsRoot, includedPlugins)
135
+ for (const { id, skillPath } of pluginEntries.sort((a, b) => a.id.localeCompare(b.id))) {
136
+ const pluginMeta = parseFrontmatterMeta(await readFile(skillPath, 'utf8'))
137
+ const pluginDesc = pluginMeta['description'] ?? ''
138
+ skillLines.push(
139
+ `- **${id}** (\`.claude/skills/${id}.md\`): ${pluginDesc}`
140
+ )
141
+ }
142
+
130
143
  sections.push(skillLines.join('\n'))
131
144
  }
132
145
 
@@ -180,6 +193,25 @@ export async function install(
180
193
  }
181
194
  }
182
195
 
196
+ // 3b. Plugin skills → .claude/skills/<plugin-id>.md
197
+ {
198
+ const pluginsRoot = getPluginsRoot(pkgRoot)
199
+ const includedPlugins = stack ? getIncludedPluginIds(stack) : undefined
200
+ const pluginEntries = await getPluginSkillEntries(pluginsRoot, includedPlugins)
201
+ const destSkills = resolve(claudeDir, 'skills')
202
+ await mkdir(destSkills, { recursive: true })
203
+ for (const { id, skillPath } of pluginEntries) {
204
+ const destPath = resolve(destSkills, `${id}.md`)
205
+ if (existsSync(destPath)) {
206
+ results.skipped.push(destPath)
207
+ continue
208
+ }
209
+ const content = await readFile(skillPath, 'utf8')
210
+ await writeFile(destPath, stripFrontmatter(content) + '\n')
211
+ results.created.push(destPath)
212
+ }
213
+ }
214
+
183
215
  // 4. Prompts → .claude/commands/<name>.md
184
216
  const promptDir = resolve(srcRoot, 'prompts')
185
217
  if (existsSync(promptDir)) {
@@ -231,11 +263,11 @@ export async function install(
231
263
 
232
264
  // 7. MCP server config → .claude/mcp.json (scaffold once)
233
265
  const mcpResult = await scaffoldMcpConfig(
234
- pkgRoot,
235
266
  projectRoot,
236
267
  '.claude/mcp.json',
237
268
  stack,
238
- repoInfo
269
+ repoInfo,
270
+ 'claude-code'
239
271
  )
240
272
  results[mcpResult.action].push(mcpResult.path)
241
273
 
@@ -1,9 +1,9 @@
1
1
  import { resolve, basename } from 'node:path'
2
2
  import { mkdir, writeFile, readdir, readFile, unlink } from 'node:fs/promises'
3
3
  import { existsSync } from 'node:fs'
4
- import { copyDir, getOrchestratorRoot, removeDirIfExists } from '../copy.js'
4
+ import { copyDir, getOrchestratorRoot, removeDirIfExists, getPluginsRoot, getPluginSkillEntries } from '../copy.js'
5
5
  import { scaffoldMcpConfig } from '../mcp.js'
6
- import { getExcludedSkills, getExcludedAgents, getCustomizationsTransform } from '../stack-config.js'
6
+ import { getExcludedSkills, getExcludedAgents, getCustomizationsTransform, getIncludedPluginIds } from '../stack-config.js'
7
7
  import type { CopyResults, ManagedPaths, RepoInfo, StackConfig } from '../types.js'
8
8
 
9
9
  /**
@@ -164,6 +164,24 @@ export async function install(
164
164
  // 4. Skills → .cursor/rules/skills/*.mdc
165
165
  await convertSkills(srcRoot, resolve(rulesRoot, 'skills'), results, false, excludedSkills)
166
166
 
167
+ // 4b. Plugin skills → .cursor/rules/skills/<plugin-id>.mdc
168
+ {
169
+ const pluginsRoot = getPluginsRoot(pkgRoot)
170
+ const includedPlugins = stack ? getIncludedPluginIds(stack) : undefined
171
+ const pluginEntries = await getPluginSkillEntries(pluginsRoot, includedPlugins)
172
+ const skillsDest = resolve(rulesRoot, 'skills')
173
+ await mkdir(skillsDest, { recursive: true })
174
+ for (const { id, skillPath } of pluginEntries) {
175
+ const destPath = resolve(skillsDest, `${id}.mdc`)
176
+ await writeConverted(
177
+ skillPath,
178
+ destPath,
179
+ { descriptionFallback: `Skill: ${id}` },
180
+ results
181
+ )
182
+ }
183
+ }
184
+
167
185
  // 5. Agent Workflows → .cursor/rules/agent-workflows/*.mdc
168
186
  await convertDir(
169
187
  srcRoot,
@@ -191,11 +209,11 @@ export async function install(
191
209
 
192
210
  // 8. MCP server config → .cursor/mcp.json (scaffold once)
193
211
  const mcpResult = await scaffoldMcpConfig(
194
- pkgRoot,
195
212
  projectRoot,
196
213
  '.cursor/mcp.json',
197
214
  stack,
198
- repoInfo
215
+ repoInfo,
216
+ 'cursor'
199
217
  )
200
218
  results[mcpResult.action].push(mcpResult.path)
201
219
 
@@ -255,6 +273,26 @@ export async function update(
255
273
  { descriptionPrefix: 'Agent: ', removeExt: '.agent.md', overwrite: true, excludeFiles: excludedAgents }
256
274
  )
257
275
  await convertSkills(srcRoot, resolve(rulesRoot, 'skills'), results, true, excludedSkills)
276
+
277
+ // Plugin skills → .cursor/rules/skills/<plugin-id>.mdc (overwrite)
278
+ {
279
+ const pluginsRoot = getPluginsRoot(pkgRoot)
280
+ const includedPlugins = stack ? getIncludedPluginIds(stack) : undefined
281
+ const pluginEntries = await getPluginSkillEntries(pluginsRoot, includedPlugins)
282
+ const skillsDest = resolve(rulesRoot, 'skills')
283
+ await mkdir(skillsDest, { recursive: true })
284
+ for (const { id, skillPath } of pluginEntries) {
285
+ const destPath = resolve(skillsDest, `${id}.mdc`)
286
+ await writeConverted(
287
+ skillPath,
288
+ destPath,
289
+ { descriptionFallback: `Skill: ${id}` },
290
+ results,
291
+ true
292
+ )
293
+ }
294
+ }
295
+
258
296
  await convertDir(
259
297
  srcRoot,
260
298
  'agent-workflows',