opencastle 0.5.1 → 0.7.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 (231) hide show
  1. package/README.md +5 -4
  2. package/dist/cli/adapters/claude-code.d.ts +2 -2
  3. package/dist/cli/adapters/claude-code.d.ts.map +1 -1
  4. package/dist/cli/adapters/claude-code.js +31 -4
  5. package/dist/cli/adapters/claude-code.js.map +1 -1
  6. package/dist/cli/adapters/cursor.d.ts +2 -2
  7. package/dist/cli/adapters/cursor.d.ts.map +1 -1
  8. package/dist/cli/adapters/cursor.js +28 -4
  9. package/dist/cli/adapters/cursor.js.map +1 -1
  10. package/dist/cli/adapters/opencode.d.ts +20 -0
  11. package/dist/cli/adapters/opencode.d.ts.map +1 -0
  12. package/dist/cli/adapters/opencode.js +265 -0
  13. package/dist/cli/adapters/opencode.js.map +1 -0
  14. package/dist/cli/adapters/vscode.d.ts +2 -2
  15. package/dist/cli/adapters/vscode.d.ts.map +1 -1
  16. package/dist/cli/adapters/vscode.js +38 -7
  17. package/dist/cli/adapters/vscode.js.map +1 -1
  18. package/dist/cli/copy.d.ts +12 -0
  19. package/dist/cli/copy.d.ts.map +1 -1
  20. package/dist/cli/copy.js +27 -0
  21. package/dist/cli/copy.js.map +1 -1
  22. package/dist/cli/detect.d.ts +18 -0
  23. package/dist/cli/detect.d.ts.map +1 -0
  24. package/dist/cli/detect.js +434 -0
  25. package/dist/cli/detect.js.map +1 -0
  26. package/dist/cli/gitignore.d.ts.map +1 -1
  27. package/dist/cli/gitignore.js +0 -2
  28. package/dist/cli/gitignore.js.map +1 -1
  29. package/dist/cli/init.d.ts.map +1 -1
  30. package/dist/cli/init.js +154 -91
  31. package/dist/cli/init.js.map +1 -1
  32. package/dist/cli/manifest.d.ts +1 -1
  33. package/dist/cli/manifest.d.ts.map +1 -1
  34. package/dist/cli/manifest.js +2 -1
  35. package/dist/cli/manifest.js.map +1 -1
  36. package/dist/cli/mcp.d.ts +6 -6
  37. package/dist/cli/mcp.d.ts.map +1 -1
  38. package/dist/cli/mcp.js +105 -34
  39. package/dist/cli/mcp.js.map +1 -1
  40. package/dist/cli/prompt.d.ts +22 -0
  41. package/dist/cli/prompt.d.ts.map +1 -1
  42. package/dist/cli/prompt.js +239 -0
  43. package/dist/cli/prompt.js.map +1 -1
  44. package/dist/cli/stack-config.d.ts +26 -3
  45. package/dist/cli/stack-config.d.ts.map +1 -1
  46. package/dist/cli/stack-config.js +140 -125
  47. package/dist/cli/stack-config.js.map +1 -1
  48. package/dist/cli/types.d.ts +46 -10
  49. package/dist/cli/types.d.ts.map +1 -1
  50. package/dist/cli/types.js +26 -1
  51. package/dist/cli/types.js.map +1 -1
  52. package/dist/cli/update.d.ts.map +1 -1
  53. package/dist/cli/update.js +66 -19
  54. package/dist/cli/update.js.map +1 -1
  55. package/dist/orchestrator/plugins/chrome-devtools/config.d.ts +3 -0
  56. package/dist/orchestrator/plugins/chrome-devtools/config.d.ts.map +1 -0
  57. package/dist/orchestrator/plugins/chrome-devtools/config.js +28 -0
  58. package/dist/orchestrator/plugins/chrome-devtools/config.js.map +1 -0
  59. package/dist/orchestrator/plugins/contentful/config.d.ts +3 -0
  60. package/dist/orchestrator/plugins/contentful/config.d.ts.map +1 -0
  61. package/dist/orchestrator/plugins/contentful/config.js +48 -0
  62. package/dist/orchestrator/plugins/contentful/config.js.map +1 -0
  63. package/dist/orchestrator/plugins/convex/config.d.ts +3 -0
  64. package/dist/orchestrator/plugins/convex/config.d.ts.map +1 -0
  65. package/dist/orchestrator/plugins/convex/config.js +32 -0
  66. package/dist/orchestrator/plugins/convex/config.js.map +1 -0
  67. package/dist/orchestrator/plugins/index.d.ts +28 -0
  68. package/dist/orchestrator/plugins/index.d.ts.map +1 -0
  69. package/dist/orchestrator/plugins/index.js +63 -0
  70. package/dist/orchestrator/plugins/index.js.map +1 -0
  71. package/dist/orchestrator/plugins/jira/config.d.ts +3 -0
  72. package/dist/orchestrator/plugins/jira/config.d.ts.map +1 -0
  73. package/dist/orchestrator/plugins/jira/config.js +29 -0
  74. package/dist/orchestrator/plugins/jira/config.js.map +1 -0
  75. package/dist/orchestrator/plugins/linear/config.d.ts +3 -0
  76. package/dist/orchestrator/plugins/linear/config.d.ts.map +1 -0
  77. package/dist/orchestrator/plugins/linear/config.js +33 -0
  78. package/dist/orchestrator/plugins/linear/config.js.map +1 -0
  79. package/dist/orchestrator/plugins/nx/config.d.ts +3 -0
  80. package/dist/orchestrator/plugins/nx/config.d.ts.map +1 -0
  81. package/dist/orchestrator/plugins/nx/config.js +28 -0
  82. package/dist/orchestrator/plugins/nx/config.js.map +1 -0
  83. package/dist/orchestrator/plugins/sanity/config.d.ts +3 -0
  84. package/dist/orchestrator/plugins/sanity/config.d.ts.map +1 -0
  85. package/dist/orchestrator/plugins/sanity/config.js +43 -0
  86. package/dist/orchestrator/plugins/sanity/config.js.map +1 -0
  87. package/dist/orchestrator/plugins/slack/config.d.ts +3 -0
  88. package/dist/orchestrator/plugins/slack/config.d.ts.map +1 -0
  89. package/dist/orchestrator/plugins/slack/config.js +34 -0
  90. package/dist/orchestrator/plugins/slack/config.js.map +1 -0
  91. package/dist/orchestrator/plugins/strapi/config.d.ts +3 -0
  92. package/dist/orchestrator/plugins/strapi/config.d.ts.map +1 -0
  93. package/dist/orchestrator/plugins/strapi/config.js +40 -0
  94. package/dist/orchestrator/plugins/strapi/config.js.map +1 -0
  95. package/dist/orchestrator/plugins/supabase/config.d.ts +3 -0
  96. package/dist/orchestrator/plugins/supabase/config.d.ts.map +1 -0
  97. package/dist/orchestrator/plugins/supabase/config.js +33 -0
  98. package/dist/orchestrator/plugins/supabase/config.js.map +1 -0
  99. package/dist/orchestrator/plugins/teams/config.d.ts +3 -0
  100. package/dist/orchestrator/plugins/teams/config.d.ts.map +1 -0
  101. package/dist/orchestrator/plugins/teams/config.js +43 -0
  102. package/dist/orchestrator/plugins/teams/config.js.map +1 -0
  103. package/dist/orchestrator/plugins/types.d.ts +61 -0
  104. package/dist/orchestrator/plugins/types.d.ts.map +1 -0
  105. package/dist/orchestrator/plugins/types.js +2 -0
  106. package/dist/orchestrator/plugins/types.js.map +1 -0
  107. package/dist/orchestrator/plugins/vercel/config.d.ts +3 -0
  108. package/dist/orchestrator/plugins/vercel/config.d.ts.map +1 -0
  109. package/dist/orchestrator/plugins/vercel/config.js +32 -0
  110. package/dist/orchestrator/plugins/vercel/config.js.map +1 -0
  111. package/package.json +1 -1
  112. package/src/cli/adapters/claude-code.ts +40 -6
  113. package/src/cli/adapters/cursor.ts +46 -6
  114. package/src/cli/adapters/opencode.ts +320 -0
  115. package/src/cli/adapters/vscode.ts +43 -9
  116. package/src/cli/copy.ts +32 -0
  117. package/src/cli/detect.ts +483 -0
  118. package/src/cli/gitignore.ts +0 -3
  119. package/src/cli/init.ts +169 -96
  120. package/src/cli/manifest.ts +2 -1
  121. package/src/cli/mcp.ts +131 -51
  122. package/src/cli/prompt.ts +299 -0
  123. package/src/cli/stack-config.ts +187 -145
  124. package/src/cli/types.ts +60 -9
  125. package/src/cli/update.ts +78 -20
  126. package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
  127. package/src/orchestrator/agent-workflows/README.md +1 -1
  128. package/src/orchestrator/agent-workflows/bug-fix.md +12 -12
  129. package/src/orchestrator/agent-workflows/data-pipeline.md +21 -20
  130. package/src/orchestrator/agent-workflows/database-migration.md +11 -11
  131. package/src/orchestrator/agent-workflows/feature-implementation.md +10 -10
  132. package/src/orchestrator/agent-workflows/performance-optimization.md +6 -6
  133. package/src/orchestrator/agent-workflows/refactoring.md +10 -10
  134. package/src/orchestrator/agent-workflows/schema-changes.md +8 -8
  135. package/src/orchestrator/agent-workflows/security-audit.md +12 -12
  136. package/src/orchestrator/agent-workflows/shared-delivery-phase.md +5 -5
  137. package/src/orchestrator/agents/api-designer.agent.md +2 -2
  138. package/src/orchestrator/agents/architect.agent.md +2 -2
  139. package/src/orchestrator/agents/content-engineer.agent.md +4 -4
  140. package/src/orchestrator/agents/copywriter.agent.md +2 -2
  141. package/src/orchestrator/agents/data-expert.agent.md +6 -6
  142. package/src/orchestrator/agents/database-engineer.agent.md +4 -4
  143. package/src/orchestrator/agents/developer.agent.md +5 -5
  144. package/src/orchestrator/agents/devops-expert.agent.md +5 -5
  145. package/src/orchestrator/agents/documentation-writer.agent.md +1 -1
  146. package/src/orchestrator/agents/performance-expert.agent.md +3 -3
  147. package/src/orchestrator/agents/release-manager.agent.md +4 -4
  148. package/src/orchestrator/agents/researcher.agent.md +19 -3
  149. package/src/orchestrator/agents/reviewer.agent.md +2 -4
  150. package/src/orchestrator/agents/security-expert.agent.md +4 -4
  151. package/src/orchestrator/agents/seo-specialist.agent.md +2 -2
  152. package/src/orchestrator/agents/team-lead.agent.md +97 -101
  153. package/src/orchestrator/agents/testing-expert.agent.md +5 -5
  154. package/src/orchestrator/agents/ui-ux-expert.agent.md +7 -7
  155. package/src/orchestrator/copilot-instructions.md +1 -1
  156. package/src/orchestrator/customizations/AGENT-FAILURES.md +1 -1
  157. package/src/orchestrator/customizations/AGENT-PERFORMANCE.md +12 -12
  158. package/src/orchestrator/customizations/DISPUTES.md +5 -5
  159. package/src/orchestrator/customizations/KNOWN-ISSUES.md +30 -0
  160. package/src/orchestrator/customizations/LESSONS-LEARNED.md +7 -7
  161. package/src/orchestrator/customizations/README.md +5 -2
  162. package/src/orchestrator/customizations/agents/agent-registry.md +1 -1
  163. package/src/orchestrator/customizations/agents/skill-matrix.md +12 -7
  164. package/src/orchestrator/customizations/logs/README.md +1 -1
  165. package/src/orchestrator/customizations/project/decisions.md +31 -0
  166. package/src/orchestrator/customizations/project/docs-structure.md +16 -5
  167. package/src/orchestrator/customizations/project/roadmap.md +24 -0
  168. package/src/orchestrator/customizations/project/tracker-config.md +1 -1
  169. package/src/orchestrator/customizations/stack/cms-config.md +1 -1
  170. package/src/orchestrator/customizations/stack/notifications-config.md +1 -1
  171. package/src/orchestrator/instructions/ai-optimization.instructions.md +2 -2
  172. package/src/orchestrator/instructions/general.instructions.md +102 -40
  173. package/src/orchestrator/{skills/browser-testing → plugins/chrome-devtools}/SKILL.md +1 -1
  174. package/src/orchestrator/plugins/chrome-devtools/config.ts +29 -0
  175. package/src/orchestrator/{skills/contentful-cms → plugins/contentful}/SKILL.md +1 -1
  176. package/src/orchestrator/plugins/contentful/config.ts +49 -0
  177. package/src/orchestrator/{skills/convex-database → plugins/convex}/SKILL.md +1 -1
  178. package/src/orchestrator/plugins/convex/config.ts +33 -0
  179. package/src/orchestrator/plugins/index.ts +85 -0
  180. package/src/orchestrator/{skills/jira-management → plugins/jira}/SKILL.md +3 -3
  181. package/src/orchestrator/plugins/jira/config.ts +30 -0
  182. package/src/orchestrator/{skills/task-management → plugins/linear}/SKILL.md +3 -3
  183. package/src/orchestrator/plugins/linear/config.ts +34 -0
  184. package/src/orchestrator/{skills/nx-workspace → plugins/nx}/SKILL.md +1 -1
  185. package/src/orchestrator/plugins/nx/config.ts +29 -0
  186. package/src/orchestrator/{skills/sanity-cms → plugins/sanity}/SKILL.md +1 -1
  187. package/src/orchestrator/plugins/sanity/config.ts +44 -0
  188. package/src/orchestrator/{skills/slack-notifications → plugins/slack}/SKILL.md +2 -2
  189. package/src/orchestrator/plugins/slack/config.ts +35 -0
  190. package/src/orchestrator/{skills/strapi-cms → plugins/strapi}/SKILL.md +1 -1
  191. package/src/orchestrator/plugins/strapi/config.ts +41 -0
  192. package/src/orchestrator/{skills/supabase-database → plugins/supabase}/SKILL.md +1 -1
  193. package/src/orchestrator/plugins/supabase/config.ts +34 -0
  194. package/src/orchestrator/{skills/teams-notifications → plugins/teams}/SKILL.md +2 -2
  195. package/src/orchestrator/plugins/teams/config.ts +44 -0
  196. package/src/orchestrator/plugins/types.ts +79 -0
  197. package/src/orchestrator/plugins/vercel/config.ts +33 -0
  198. package/src/orchestrator/prompts/bootstrap-customizations.prompt.md +59 -12
  199. package/src/orchestrator/prompts/brainstorm.prompt.md +3 -3
  200. package/src/orchestrator/prompts/bug-fix.prompt.md +18 -18
  201. package/src/orchestrator/prompts/create-skill.prompt.md +50 -32
  202. package/src/orchestrator/prompts/generate-task-spec.prompt.md +3 -3
  203. package/src/orchestrator/prompts/implement-feature.prompt.md +26 -26
  204. package/src/orchestrator/prompts/metrics-report.prompt.md +11 -11
  205. package/src/orchestrator/prompts/quick-refinement.prompt.md +16 -16
  206. package/src/orchestrator/prompts/resolve-pr-comments.prompt.md +2 -2
  207. package/src/orchestrator/skills/accessibility-standards/SKILL.md +1 -1
  208. package/src/orchestrator/skills/agent-hooks/SKILL.md +27 -18
  209. package/src/orchestrator/skills/agent-memory/SKILL.md +7 -7
  210. package/src/orchestrator/skills/api-patterns/SKILL.md +6 -6
  211. package/src/orchestrator/skills/code-commenting/SKILL.md +1 -1
  212. package/src/orchestrator/skills/context-map/SKILL.md +4 -4
  213. package/src/orchestrator/skills/data-engineering/SKILL.md +7 -4
  214. package/src/orchestrator/skills/deployment-infrastructure/SKILL.md +2 -2
  215. package/src/orchestrator/skills/documentation-standards/SKILL.md +1 -1
  216. package/src/orchestrator/skills/fast-review/SKILL.md +3 -3
  217. package/src/orchestrator/skills/frontend-design/SKILL.md +1 -1
  218. package/src/orchestrator/skills/memory-merger/SKILL.md +8 -8
  219. package/src/orchestrator/skills/nextjs-patterns/SKILL.md +1 -1
  220. package/src/orchestrator/skills/panel-majority-vote/SKILL.md +2 -2
  221. package/src/orchestrator/skills/panel-majority-vote/panel-report.template.md +1 -1
  222. package/src/orchestrator/skills/performance-optimization/SKILL.md +1 -1
  223. package/src/orchestrator/skills/react-development/SKILL.md +3 -3
  224. package/src/orchestrator/skills/security-hardening/SKILL.md +27 -27
  225. package/src/orchestrator/skills/self-improvement/SKILL.md +14 -13
  226. package/src/orchestrator/skills/seo-patterns/SKILL.md +1 -1
  227. package/src/orchestrator/skills/session-checkpoints/SKILL.md +19 -19
  228. package/src/orchestrator/skills/team-lead-reference/SKILL.md +9 -9
  229. package/src/orchestrator/skills/testing-workflow/SKILL.md +13 -13
  230. package/src/orchestrator/skills/validation-gates/SKILL.md +8 -15
  231. package/src/orchestrator/mcp.json +0 -61
@@ -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.5.1",
3
+ "version": "0.7.0",
4
4
  "type": "module",
5
5
  "description": "Multi-agent orchestration framework for AI coding assistants",
6
6
  "bin": {
@@ -1,10 +1,10 @@
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'
7
- import type { CopyResults, ManagedPaths, StackConfig } from '../types.js'
6
+ import { getExcludedSkills, getExcludedAgents, getCustomizationsTransform, getIncludedPluginIds } from '../stack-config.js'
7
+ import type { CopyResults, ManagedPaths, RepoInfo, StackConfig } from '../types.js'
8
8
 
9
9
  /**
10
10
  * Claude Code adapter.
@@ -48,7 +48,8 @@ function parseFrontmatterMeta(content: string): Record<string, string> {
48
48
  export async function install(
49
49
  pkgRoot: string,
50
50
  projectRoot: string,
51
- stack?: StackConfig
51
+ stack?: StackConfig,
52
+ repoInfo?: RepoInfo
52
53
  ): Promise<CopyResults> {
53
54
  const srcRoot = getOrchestratorRoot(pkgRoot)
54
55
  const results: CopyResults = { copied: [], skipped: [], created: [] }
@@ -126,6 +127,19 @@ export async function install(
126
127
  `- **${entry.name}** (\`.claude/skills/${entry.name}.md\`): ${desc}`
127
128
  )
128
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
+
129
143
  sections.push(skillLines.join('\n'))
130
144
  }
131
145
 
@@ -179,6 +193,25 @@ export async function install(
179
193
  }
180
194
  }
181
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
+
182
215
  // 4. Prompts → .claude/commands/<name>.md
183
216
  const promptDir = resolve(srcRoot, 'prompts')
184
217
  if (existsSync(promptDir)) {
@@ -230,10 +263,11 @@ export async function install(
230
263
 
231
264
  // 7. MCP server config → .claude/mcp.json (scaffold once)
232
265
  const mcpResult = await scaffoldMcpConfig(
233
- pkgRoot,
234
266
  projectRoot,
235
267
  '.claude/mcp.json',
236
- stack
268
+ stack,
269
+ repoInfo,
270
+ 'claude-code'
237
271
  )
238
272
  results[mcpResult.action].push(mcpResult.path)
239
273
 
@@ -1,10 +1,10 @@
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'
7
- import type { CopyResults, ManagedPaths, StackConfig } from '../types.js'
6
+ import { getExcludedSkills, getExcludedAgents, getCustomizationsTransform, getIncludedPluginIds } from '../stack-config.js'
7
+ import type { CopyResults, ManagedPaths, RepoInfo, StackConfig } from '../types.js'
8
8
 
9
9
  /**
10
10
  * Cursor adapter.
@@ -122,7 +122,8 @@ async function writeConverted(
122
122
  export async function install(
123
123
  pkgRoot: string,
124
124
  projectRoot: string,
125
- stack?: StackConfig
125
+ stack?: StackConfig,
126
+ repoInfo?: RepoInfo
126
127
  ): Promise<CopyResults> {
127
128
  const srcRoot = getOrchestratorRoot(pkgRoot)
128
129
  const results: CopyResults = { copied: [], skipped: [], created: [] }
@@ -163,6 +164,24 @@ export async function install(
163
164
  // 4. Skills → .cursor/rules/skills/*.mdc
164
165
  await convertSkills(srcRoot, resolve(rulesRoot, 'skills'), results, false, excludedSkills)
165
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
+
166
185
  // 5. Agent Workflows → .cursor/rules/agent-workflows/*.mdc
167
186
  await convertDir(
168
187
  srcRoot,
@@ -190,10 +209,11 @@ export async function install(
190
209
 
191
210
  // 8. MCP server config → .cursor/mcp.json (scaffold once)
192
211
  const mcpResult = await scaffoldMcpConfig(
193
- pkgRoot,
194
212
  projectRoot,
195
213
  '.cursor/mcp.json',
196
- stack
214
+ stack,
215
+ repoInfo,
216
+ 'cursor'
197
217
  )
198
218
  results[mcpResult.action].push(mcpResult.path)
199
219
 
@@ -253,6 +273,26 @@ export async function update(
253
273
  { descriptionPrefix: 'Agent: ', removeExt: '.agent.md', overwrite: true, excludeFiles: excludedAgents }
254
274
  )
255
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
+
256
296
  await convertDir(
257
297
  srcRoot,
258
298
  'agent-workflows',