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.
- package/README.md +5 -4
- package/dist/cli/adapters/claude-code.d.ts +2 -2
- package/dist/cli/adapters/claude-code.d.ts.map +1 -1
- package/dist/cli/adapters/claude-code.js +31 -4
- package/dist/cli/adapters/claude-code.js.map +1 -1
- package/dist/cli/adapters/cursor.d.ts +2 -2
- package/dist/cli/adapters/cursor.d.ts.map +1 -1
- package/dist/cli/adapters/cursor.js +28 -4
- package/dist/cli/adapters/cursor.js.map +1 -1
- package/dist/cli/adapters/opencode.d.ts +20 -0
- package/dist/cli/adapters/opencode.d.ts.map +1 -0
- package/dist/cli/adapters/opencode.js +265 -0
- package/dist/cli/adapters/opencode.js.map +1 -0
- package/dist/cli/adapters/vscode.d.ts +2 -2
- package/dist/cli/adapters/vscode.d.ts.map +1 -1
- package/dist/cli/adapters/vscode.js +38 -7
- package/dist/cli/adapters/vscode.js.map +1 -1
- package/dist/cli/copy.d.ts +12 -0
- package/dist/cli/copy.d.ts.map +1 -1
- package/dist/cli/copy.js +27 -0
- package/dist/cli/copy.js.map +1 -1
- package/dist/cli/detect.d.ts +18 -0
- package/dist/cli/detect.d.ts.map +1 -0
- package/dist/cli/detect.js +434 -0
- package/dist/cli/detect.js.map +1 -0
- package/dist/cli/gitignore.d.ts.map +1 -1
- package/dist/cli/gitignore.js +0 -2
- package/dist/cli/gitignore.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +154 -91
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/manifest.d.ts +1 -1
- package/dist/cli/manifest.d.ts.map +1 -1
- package/dist/cli/manifest.js +2 -1
- package/dist/cli/manifest.js.map +1 -1
- package/dist/cli/mcp.d.ts +6 -6
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +105 -34
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/prompt.d.ts +22 -0
- package/dist/cli/prompt.d.ts.map +1 -1
- package/dist/cli/prompt.js +239 -0
- package/dist/cli/prompt.js.map +1 -1
- package/dist/cli/stack-config.d.ts +26 -3
- package/dist/cli/stack-config.d.ts.map +1 -1
- package/dist/cli/stack-config.js +140 -125
- package/dist/cli/stack-config.js.map +1 -1
- package/dist/cli/types.d.ts +46 -10
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js +26 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/cli/update.d.ts.map +1 -1
- package/dist/cli/update.js +66 -19
- package/dist/cli/update.js.map +1 -1
- package/dist/orchestrator/plugins/chrome-devtools/config.d.ts +3 -0
- package/dist/orchestrator/plugins/chrome-devtools/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/chrome-devtools/config.js +28 -0
- package/dist/orchestrator/plugins/chrome-devtools/config.js.map +1 -0
- package/dist/orchestrator/plugins/contentful/config.d.ts +3 -0
- package/dist/orchestrator/plugins/contentful/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/contentful/config.js +48 -0
- package/dist/orchestrator/plugins/contentful/config.js.map +1 -0
- package/dist/orchestrator/plugins/convex/config.d.ts +3 -0
- package/dist/orchestrator/plugins/convex/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/convex/config.js +32 -0
- package/dist/orchestrator/plugins/convex/config.js.map +1 -0
- package/dist/orchestrator/plugins/index.d.ts +28 -0
- package/dist/orchestrator/plugins/index.d.ts.map +1 -0
- package/dist/orchestrator/plugins/index.js +63 -0
- package/dist/orchestrator/plugins/index.js.map +1 -0
- package/dist/orchestrator/plugins/jira/config.d.ts +3 -0
- package/dist/orchestrator/plugins/jira/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/jira/config.js +29 -0
- package/dist/orchestrator/plugins/jira/config.js.map +1 -0
- package/dist/orchestrator/plugins/linear/config.d.ts +3 -0
- package/dist/orchestrator/plugins/linear/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/linear/config.js +33 -0
- package/dist/orchestrator/plugins/linear/config.js.map +1 -0
- package/dist/orchestrator/plugins/nx/config.d.ts +3 -0
- package/dist/orchestrator/plugins/nx/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/nx/config.js +28 -0
- package/dist/orchestrator/plugins/nx/config.js.map +1 -0
- package/dist/orchestrator/plugins/sanity/config.d.ts +3 -0
- package/dist/orchestrator/plugins/sanity/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/sanity/config.js +43 -0
- package/dist/orchestrator/plugins/sanity/config.js.map +1 -0
- package/dist/orchestrator/plugins/slack/config.d.ts +3 -0
- package/dist/orchestrator/plugins/slack/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/slack/config.js +34 -0
- package/dist/orchestrator/plugins/slack/config.js.map +1 -0
- package/dist/orchestrator/plugins/strapi/config.d.ts +3 -0
- package/dist/orchestrator/plugins/strapi/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/strapi/config.js +40 -0
- package/dist/orchestrator/plugins/strapi/config.js.map +1 -0
- package/dist/orchestrator/plugins/supabase/config.d.ts +3 -0
- package/dist/orchestrator/plugins/supabase/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/supabase/config.js +33 -0
- package/dist/orchestrator/plugins/supabase/config.js.map +1 -0
- package/dist/orchestrator/plugins/teams/config.d.ts +3 -0
- package/dist/orchestrator/plugins/teams/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/teams/config.js +43 -0
- package/dist/orchestrator/plugins/teams/config.js.map +1 -0
- package/dist/orchestrator/plugins/types.d.ts +61 -0
- package/dist/orchestrator/plugins/types.d.ts.map +1 -0
- package/dist/orchestrator/plugins/types.js +2 -0
- package/dist/orchestrator/plugins/types.js.map +1 -0
- package/dist/orchestrator/plugins/vercel/config.d.ts +3 -0
- package/dist/orchestrator/plugins/vercel/config.d.ts.map +1 -0
- package/dist/orchestrator/plugins/vercel/config.js +32 -0
- package/dist/orchestrator/plugins/vercel/config.js.map +1 -0
- package/package.json +1 -1
- package/src/cli/adapters/claude-code.ts +40 -6
- package/src/cli/adapters/cursor.ts +46 -6
- package/src/cli/adapters/opencode.ts +320 -0
- package/src/cli/adapters/vscode.ts +43 -9
- package/src/cli/copy.ts +32 -0
- package/src/cli/detect.ts +483 -0
- package/src/cli/gitignore.ts +0 -3
- package/src/cli/init.ts +169 -96
- package/src/cli/manifest.ts +2 -1
- package/src/cli/mcp.ts +131 -51
- package/src/cli/prompt.ts +299 -0
- package/src/cli/stack-config.ts +187 -145
- package/src/cli/types.ts +60 -9
- package/src/cli/update.ts +78 -20
- package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
- package/src/orchestrator/agent-workflows/README.md +1 -1
- package/src/orchestrator/agent-workflows/bug-fix.md +12 -12
- package/src/orchestrator/agent-workflows/data-pipeline.md +21 -20
- package/src/orchestrator/agent-workflows/database-migration.md +11 -11
- package/src/orchestrator/agent-workflows/feature-implementation.md +10 -10
- package/src/orchestrator/agent-workflows/performance-optimization.md +6 -6
- package/src/orchestrator/agent-workflows/refactoring.md +10 -10
- package/src/orchestrator/agent-workflows/schema-changes.md +8 -8
- package/src/orchestrator/agent-workflows/security-audit.md +12 -12
- package/src/orchestrator/agent-workflows/shared-delivery-phase.md +5 -5
- package/src/orchestrator/agents/api-designer.agent.md +2 -2
- package/src/orchestrator/agents/architect.agent.md +2 -2
- package/src/orchestrator/agents/content-engineer.agent.md +4 -4
- package/src/orchestrator/agents/copywriter.agent.md +2 -2
- package/src/orchestrator/agents/data-expert.agent.md +6 -6
- package/src/orchestrator/agents/database-engineer.agent.md +4 -4
- package/src/orchestrator/agents/developer.agent.md +5 -5
- package/src/orchestrator/agents/devops-expert.agent.md +5 -5
- package/src/orchestrator/agents/documentation-writer.agent.md +1 -1
- package/src/orchestrator/agents/performance-expert.agent.md +3 -3
- package/src/orchestrator/agents/release-manager.agent.md +4 -4
- package/src/orchestrator/agents/researcher.agent.md +19 -3
- package/src/orchestrator/agents/reviewer.agent.md +2 -4
- package/src/orchestrator/agents/security-expert.agent.md +4 -4
- package/src/orchestrator/agents/seo-specialist.agent.md +2 -2
- package/src/orchestrator/agents/team-lead.agent.md +97 -101
- package/src/orchestrator/agents/testing-expert.agent.md +5 -5
- package/src/orchestrator/agents/ui-ux-expert.agent.md +7 -7
- package/src/orchestrator/copilot-instructions.md +1 -1
- package/src/orchestrator/customizations/AGENT-FAILURES.md +1 -1
- package/src/orchestrator/customizations/AGENT-PERFORMANCE.md +12 -12
- package/src/orchestrator/customizations/DISPUTES.md +5 -5
- package/src/orchestrator/customizations/KNOWN-ISSUES.md +30 -0
- package/src/orchestrator/customizations/LESSONS-LEARNED.md +7 -7
- package/src/orchestrator/customizations/README.md +5 -2
- package/src/orchestrator/customizations/agents/agent-registry.md +1 -1
- package/src/orchestrator/customizations/agents/skill-matrix.md +12 -7
- package/src/orchestrator/customizations/logs/README.md +1 -1
- package/src/orchestrator/customizations/project/decisions.md +31 -0
- package/src/orchestrator/customizations/project/docs-structure.md +16 -5
- package/src/orchestrator/customizations/project/roadmap.md +24 -0
- package/src/orchestrator/customizations/project/tracker-config.md +1 -1
- package/src/orchestrator/customizations/stack/cms-config.md +1 -1
- package/src/orchestrator/customizations/stack/notifications-config.md +1 -1
- package/src/orchestrator/instructions/ai-optimization.instructions.md +2 -2
- package/src/orchestrator/instructions/general.instructions.md +102 -40
- package/src/orchestrator/{skills/browser-testing → plugins/chrome-devtools}/SKILL.md +1 -1
- package/src/orchestrator/plugins/chrome-devtools/config.ts +29 -0
- package/src/orchestrator/{skills/contentful-cms → plugins/contentful}/SKILL.md +1 -1
- package/src/orchestrator/plugins/contentful/config.ts +49 -0
- package/src/orchestrator/{skills/convex-database → plugins/convex}/SKILL.md +1 -1
- package/src/orchestrator/plugins/convex/config.ts +33 -0
- package/src/orchestrator/plugins/index.ts +85 -0
- package/src/orchestrator/{skills/jira-management → plugins/jira}/SKILL.md +3 -3
- package/src/orchestrator/plugins/jira/config.ts +30 -0
- package/src/orchestrator/{skills/task-management → plugins/linear}/SKILL.md +3 -3
- package/src/orchestrator/plugins/linear/config.ts +34 -0
- package/src/orchestrator/{skills/nx-workspace → plugins/nx}/SKILL.md +1 -1
- package/src/orchestrator/plugins/nx/config.ts +29 -0
- package/src/orchestrator/{skills/sanity-cms → plugins/sanity}/SKILL.md +1 -1
- package/src/orchestrator/plugins/sanity/config.ts +44 -0
- package/src/orchestrator/{skills/slack-notifications → plugins/slack}/SKILL.md +2 -2
- package/src/orchestrator/plugins/slack/config.ts +35 -0
- package/src/orchestrator/{skills/strapi-cms → plugins/strapi}/SKILL.md +1 -1
- package/src/orchestrator/plugins/strapi/config.ts +41 -0
- package/src/orchestrator/{skills/supabase-database → plugins/supabase}/SKILL.md +1 -1
- package/src/orchestrator/plugins/supabase/config.ts +34 -0
- package/src/orchestrator/{skills/teams-notifications → plugins/teams}/SKILL.md +2 -2
- package/src/orchestrator/plugins/teams/config.ts +44 -0
- package/src/orchestrator/plugins/types.ts +79 -0
- package/src/orchestrator/plugins/vercel/config.ts +33 -0
- package/src/orchestrator/prompts/bootstrap-customizations.prompt.md +59 -12
- package/src/orchestrator/prompts/brainstorm.prompt.md +3 -3
- package/src/orchestrator/prompts/bug-fix.prompt.md +18 -18
- package/src/orchestrator/prompts/create-skill.prompt.md +50 -32
- package/src/orchestrator/prompts/generate-task-spec.prompt.md +3 -3
- package/src/orchestrator/prompts/implement-feature.prompt.md +26 -26
- package/src/orchestrator/prompts/metrics-report.prompt.md +11 -11
- package/src/orchestrator/prompts/quick-refinement.prompt.md +16 -16
- package/src/orchestrator/prompts/resolve-pr-comments.prompt.md +2 -2
- package/src/orchestrator/skills/accessibility-standards/SKILL.md +1 -1
- package/src/orchestrator/skills/agent-hooks/SKILL.md +27 -18
- package/src/orchestrator/skills/agent-memory/SKILL.md +7 -7
- package/src/orchestrator/skills/api-patterns/SKILL.md +6 -6
- package/src/orchestrator/skills/code-commenting/SKILL.md +1 -1
- package/src/orchestrator/skills/context-map/SKILL.md +4 -4
- package/src/orchestrator/skills/data-engineering/SKILL.md +7 -4
- package/src/orchestrator/skills/deployment-infrastructure/SKILL.md +2 -2
- package/src/orchestrator/skills/documentation-standards/SKILL.md +1 -1
- package/src/orchestrator/skills/fast-review/SKILL.md +3 -3
- package/src/orchestrator/skills/frontend-design/SKILL.md +1 -1
- package/src/orchestrator/skills/memory-merger/SKILL.md +8 -8
- package/src/orchestrator/skills/nextjs-patterns/SKILL.md +1 -1
- package/src/orchestrator/skills/panel-majority-vote/SKILL.md +2 -2
- package/src/orchestrator/skills/panel-majority-vote/panel-report.template.md +1 -1
- package/src/orchestrator/skills/performance-optimization/SKILL.md +1 -1
- package/src/orchestrator/skills/react-development/SKILL.md +3 -3
- package/src/orchestrator/skills/security-hardening/SKILL.md +27 -27
- package/src/orchestrator/skills/self-improvement/SKILL.md +14 -13
- package/src/orchestrator/skills/seo-patterns/SKILL.md +1 -1
- package/src/orchestrator/skills/session-checkpoints/SKILL.md +19 -19
- package/src/orchestrator/skills/team-lead-reference/SKILL.md +9 -9
- package/src/orchestrator/skills/testing-workflow/SKILL.md +13 -13
- package/src/orchestrator/skills/validation-gates/SKILL.md +8 -15
- package/src/orchestrator/mcp.json +0 -61
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { PluginConfig } from '../types.js';
|
|
2
|
+
|
|
3
|
+
export const config: PluginConfig = {
|
|
4
|
+
id: 'convex',
|
|
5
|
+
name: 'Convex',
|
|
6
|
+
category: 'tech',
|
|
7
|
+
subCategory: 'database',
|
|
8
|
+
label: 'Convex',
|
|
9
|
+
hint: 'Reactive backend with real-time sync',
|
|
10
|
+
skillName: 'convex-database',
|
|
11
|
+
mcpServerKey: 'Convex',
|
|
12
|
+
mcpConfig: {
|
|
13
|
+
type: 'stdio',
|
|
14
|
+
command: 'npx',
|
|
15
|
+
args: ['-y', 'convex@latest', 'mcp', 'start'],
|
|
16
|
+
},
|
|
17
|
+
authType: 'none',
|
|
18
|
+
envVars: [],
|
|
19
|
+
agentToolMap: {
|
|
20
|
+
'database-engineer': [
|
|
21
|
+
'convex/status', 'convex/data', 'convex/tables', 'convex/functionSpec',
|
|
22
|
+
'convex/run', 'convex/envList', 'convex/envGet', 'convex/envSet',
|
|
23
|
+
'convex/envRemove', 'convex/runOneoffQuery', 'convex/logs', 'convex/insights',
|
|
24
|
+
],
|
|
25
|
+
'security-expert': [
|
|
26
|
+
'convex/status', 'convex/tables', 'convex/functionSpec',
|
|
27
|
+
'convex/envList', 'convex/envGet', 'convex/logs', 'convex/insights',
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
docsUrl: null,
|
|
31
|
+
officialDocs: 'https://docs.convex.dev/',
|
|
32
|
+
mcpPackage: 'convex',
|
|
33
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { PluginConfig } from './types.js';
|
|
2
|
+
import { config as sanity } from './sanity/config.js';
|
|
3
|
+
import { config as contentful } from './contentful/config.js';
|
|
4
|
+
import { config as strapi } from './strapi/config.js';
|
|
5
|
+
import { config as supabase } from './supabase/config.js';
|
|
6
|
+
import { config as convex } from './convex/config.js';
|
|
7
|
+
import { config as vercel } from './vercel/config.js';
|
|
8
|
+
import { config as nx } from './nx/config.js';
|
|
9
|
+
import { config as linear } from './linear/config.js';
|
|
10
|
+
import { config as jira } from './jira/config.js';
|
|
11
|
+
import { config as slack } from './slack/config.js';
|
|
12
|
+
import { config as teams } from './teams/config.js';
|
|
13
|
+
import { config as chromeDevtools } from './chrome-devtools/config.js';
|
|
14
|
+
|
|
15
|
+
export type { PluginConfig, McpServerConfig, McpInput, EnvVarRequirement } from './types.js';
|
|
16
|
+
|
|
17
|
+
/** All registered plugins, keyed by ID. */
|
|
18
|
+
export const PLUGINS: Record<string, PluginConfig> = {
|
|
19
|
+
sanity,
|
|
20
|
+
contentful,
|
|
21
|
+
strapi,
|
|
22
|
+
supabase,
|
|
23
|
+
convex,
|
|
24
|
+
vercel,
|
|
25
|
+
nx,
|
|
26
|
+
'chrome-devtools': chromeDevtools,
|
|
27
|
+
linear,
|
|
28
|
+
jira,
|
|
29
|
+
slack,
|
|
30
|
+
teams,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/** Tech tool plugins only. */
|
|
34
|
+
export const TECH_PLUGINS = Object.values(PLUGINS).filter(
|
|
35
|
+
(p) => p.category === 'tech'
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
/** Team tool plugins only. */
|
|
39
|
+
export const TEAM_PLUGINS = Object.values(PLUGINS).filter(
|
|
40
|
+
(p) => p.category === 'team'
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
/** CMS plugins (subset of tech). */
|
|
44
|
+
export const CMS_PLUGINS = TECH_PLUGINS.filter(
|
|
45
|
+
(p) => p.subCategory === 'cms'
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
/** Database plugins (subset of tech). */
|
|
49
|
+
export const DB_PLUGINS = TECH_PLUGINS.filter(
|
|
50
|
+
(p) => p.subCategory === 'database'
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
/** Get a plugin by ID. */
|
|
54
|
+
export function getPlugin(id: string): PluginConfig | undefined {
|
|
55
|
+
return PLUGINS[id];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Get all plugins in a category. */
|
|
59
|
+
export function getPluginsByCategory(category: 'tech' | 'team'): PluginConfig[] {
|
|
60
|
+
return Object.values(PLUGINS).filter((p) => p.category === category);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Get all plugins in a sub-category. */
|
|
64
|
+
export function getPluginsBySubCategory(
|
|
65
|
+
subCategory: PluginConfig['subCategory']
|
|
66
|
+
): PluginConfig[] {
|
|
67
|
+
return Object.values(PLUGINS).filter((p) => p.subCategory === subCategory);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Get all skill names from selected plugins.
|
|
72
|
+
* Returns only non-null skill names for the given tool IDs.
|
|
73
|
+
*/
|
|
74
|
+
export function getSelectedSkillNames(toolIds: string[]): string[] {
|
|
75
|
+
return toolIds
|
|
76
|
+
.map((id) => PLUGINS[id]?.skillName)
|
|
77
|
+
.filter((s): s is string => s !== null);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* All possible tool-specific skill names (used to compute exclusions).
|
|
82
|
+
*/
|
|
83
|
+
export const ALL_PLUGIN_SKILL_NAMES: string[] = Object.values(PLUGINS)
|
|
84
|
+
.map((p) => p.skillName)
|
|
85
|
+
.filter((s): s is string => s !== null);
|
|
@@ -3,11 +3,11 @@ name: jira-management
|
|
|
3
3
|
description: "Jira board conventions for tracking feature work — issue naming, labels, priorities, status workflow, and session continuity via Atlassian Rovo MCP. Use when decomposing features into tasks or resuming interrupted sessions."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
|
|
6
|
+
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
|
|
7
7
|
|
|
8
8
|
# Task Management with Jira
|
|
9
9
|
|
|
10
|
-
Conventions for tracking feature work on Jira via the Atlassian Rovo MCP server. For project-specific project keys, workflow state IDs, and board configuration, see [
|
|
10
|
+
Conventions for tracking feature work on Jira via the Atlassian Rovo MCP server. For project-specific project keys, workflow state IDs, and board configuration, see [tracker-config.md](../../customizations/project/tracker-config.md).
|
|
11
11
|
|
|
12
12
|
## Atlassian Rovo MCP Server
|
|
13
13
|
|
|
@@ -167,4 +167,4 @@ project = PROJ AND sprint in openSprints() ORDER BY priority DESC
|
|
|
167
167
|
project = PROJ AND priority = Highest AND status != Done
|
|
168
168
|
```
|
|
169
169
|
|
|
170
|
-
Replace `PROJ` with the actual project key from [
|
|
170
|
+
Replace `PROJ` with the actual project key from [tracker-config.md](../../customizations/project/tracker-config.md).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { PluginConfig } from '../types.js';
|
|
2
|
+
|
|
3
|
+
export const config: PluginConfig = {
|
|
4
|
+
id: 'jira',
|
|
5
|
+
name: 'Jira',
|
|
6
|
+
category: 'team',
|
|
7
|
+
subCategory: 'tracker',
|
|
8
|
+
label: 'Jira',
|
|
9
|
+
hint: 'Atlassian issue tracking via Rovo MCP',
|
|
10
|
+
skillName: 'jira-management',
|
|
11
|
+
mcpServerKey: 'Jira',
|
|
12
|
+
mcpConfig: {
|
|
13
|
+
type: 'http',
|
|
14
|
+
url: 'https://mcp.atlassian.com/v1/mcp',
|
|
15
|
+
},
|
|
16
|
+
authType: 'oauth',
|
|
17
|
+
envVars: [],
|
|
18
|
+
agentToolMap: {
|
|
19
|
+
'team-lead': [
|
|
20
|
+
'Jira/searchJiraIssuesUsingJql', 'Jira/getJiraIssue', 'Jira/createJiraIssue',
|
|
21
|
+
'Jira/addCommentToJiraIssue', 'Jira/getJiraProjectIssueTypesMetadata',
|
|
22
|
+
'Jira/getJiraIssueTypeMetaWithFields', 'Jira/search',
|
|
23
|
+
'Jira/getConfluencePage', 'Jira/searchConfluenceUsingCql',
|
|
24
|
+
'Jira/getAccessibleAtlassianResources',
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
docsUrl: null,
|
|
28
|
+
officialDocs: 'https://developer.atlassian.com/cloud/jira/platform/',
|
|
29
|
+
mcpPackage: null,
|
|
30
|
+
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: task-management
|
|
2
|
+
name: linear-task-management
|
|
3
3
|
description: "Linear board conventions for tracking feature work — issue naming, labels, priorities, status workflow, and session continuity. Use when decomposing features into tasks or resuming interrupted sessions."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
|
|
6
|
+
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
|
|
7
7
|
|
|
8
8
|
# Task Management with Linear
|
|
9
9
|
|
|
10
|
-
Conventions for tracking feature work on the Linear board via MCP tools. For project-specific team ID, workflow state UUIDs, and label UUIDs, see [
|
|
10
|
+
Conventions for tracking feature work on the Linear board via MCP tools. For project-specific team ID, workflow state UUIDs, and label UUIDs, see [tracker-config.md](../../customizations/project/tracker-config.md).
|
|
11
11
|
|
|
12
12
|
## Discovered Issues (Bug Tickets)
|
|
13
13
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { PluginConfig } from '../types.js';
|
|
2
|
+
|
|
3
|
+
export const config: PluginConfig = {
|
|
4
|
+
id: 'linear',
|
|
5
|
+
name: 'Linear',
|
|
6
|
+
category: 'team',
|
|
7
|
+
subCategory: 'tracker',
|
|
8
|
+
label: 'Linear',
|
|
9
|
+
hint: 'Issue tracking with MCP integration',
|
|
10
|
+
skillName: 'linear-task-management',
|
|
11
|
+
mcpServerKey: 'Linear',
|
|
12
|
+
mcpConfig: {
|
|
13
|
+
type: 'stdio',
|
|
14
|
+
command: 'npx',
|
|
15
|
+
args: ['-y', '@mseep/linear-mcp'],
|
|
16
|
+
envFile: '${workspaceFolder}/.env',
|
|
17
|
+
},
|
|
18
|
+
authType: 'env-token',
|
|
19
|
+
envVars: [
|
|
20
|
+
{
|
|
21
|
+
name: 'LINEAR_API_KEY',
|
|
22
|
+
hint: 'Create at linear.app → Settings → API → Personal API keys',
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
agentToolMap: {
|
|
26
|
+
'team-lead': [
|
|
27
|
+
'linear/create_issue', 'linear/list_issues', 'linear/update_issue',
|
|
28
|
+
'linear/list_teams', 'linear/list_projects', 'linear/get_issue', 'linear/search_issues',
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
docsUrl: '/guides/linear-setup',
|
|
32
|
+
officialDocs: 'https://linear.app/docs',
|
|
33
|
+
mcpPackage: '@mseep/linear-mcp',
|
|
34
|
+
};
|
|
@@ -3,7 +3,7 @@ name: nx-workspace
|
|
|
3
3
|
description: "NX monorepo commands, conventions, code generation, and task running patterns. Use when running builds, tests, linting, code generation, or any development commands."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
|
|
6
|
+
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
|
|
7
7
|
|
|
8
8
|
# NX Workspace
|
|
9
9
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { PluginConfig } from '../types.js';
|
|
2
|
+
|
|
3
|
+
export const config: PluginConfig = {
|
|
4
|
+
id: 'nx',
|
|
5
|
+
name: 'NX',
|
|
6
|
+
category: 'tech',
|
|
7
|
+
subCategory: 'monorepo',
|
|
8
|
+
label: 'NX',
|
|
9
|
+
hint: 'Monorepo build system',
|
|
10
|
+
skillName: 'nx-workspace',
|
|
11
|
+
mcpServerKey: 'Nx',
|
|
12
|
+
mcpConfig: {
|
|
13
|
+
type: 'stdio',
|
|
14
|
+
command: 'npx',
|
|
15
|
+
args: ['nx', 'mcp'],
|
|
16
|
+
},
|
|
17
|
+
authType: 'none',
|
|
18
|
+
envVars: [],
|
|
19
|
+
agentToolMap: {
|
|
20
|
+
'architect': ['nx-mcp-server/nx_workspace', 'nx-mcp-server/nx_project_details', 'nx-mcp-server/nx_visualize_graph'],
|
|
21
|
+
'developer': ['nx-mcp-server/nx_project_details', 'nx-mcp-server/nx_workspace', 'nx-mcp-server/nx_generators'],
|
|
22
|
+
'devops-expert': ['nx-mcp-server/nx_project_details', 'nx-mcp-server/nx_workspace', 'nx-mcp-server/nx_workspace_path'],
|
|
23
|
+
'performance-expert': ['nx-mcp-server/nx_project_details', 'nx-mcp-server/nx_workspace'],
|
|
24
|
+
'release-manager': ['nx-mcp-server/nx_project_details', 'nx-mcp-server/nx_workspace', 'nx-mcp-server/nx_workspace_path'],
|
|
25
|
+
},
|
|
26
|
+
docsUrl: null,
|
|
27
|
+
officialDocs: 'https://nx.dev/getting-started/intro',
|
|
28
|
+
mcpPackage: null,
|
|
29
|
+
};
|
|
@@ -3,7 +3,7 @@ name: sanity-cms
|
|
|
3
3
|
description: "Sanity CMS development rules, GROQ query patterns, and content management best practices. Use when working with Sanity schemas, writing GROQ queries, modifying content models, or managing CMS configuration."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
|
|
6
|
+
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
|
|
7
7
|
|
|
8
8
|
# Sanity CMS
|
|
9
9
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { PluginConfig } from '../types.js';
|
|
2
|
+
|
|
3
|
+
export const config: PluginConfig = {
|
|
4
|
+
id: 'sanity',
|
|
5
|
+
name: 'Sanity',
|
|
6
|
+
category: 'tech',
|
|
7
|
+
subCategory: 'cms',
|
|
8
|
+
label: 'Sanity',
|
|
9
|
+
hint: 'GROQ queries, real-time collaboration',
|
|
10
|
+
skillName: 'sanity-cms',
|
|
11
|
+
mcpServerKey: 'Sanity',
|
|
12
|
+
mcpConfig: {
|
|
13
|
+
type: 'http',
|
|
14
|
+
url: 'https://mcp.sanity.io',
|
|
15
|
+
},
|
|
16
|
+
authType: 'oauth',
|
|
17
|
+
envVars: [],
|
|
18
|
+
agentToolMap: {
|
|
19
|
+
'content-engineer': [
|
|
20
|
+
'sanity/get_schema', 'sanity/get_sanity_rules', 'sanity/list_sanity_rules',
|
|
21
|
+
'sanity/query_documents', 'sanity/get_document', 'sanity/create_documents_from_json',
|
|
22
|
+
'sanity/create_documents_from_markdown', 'sanity/patch_document_from_json',
|
|
23
|
+
'sanity/patch_document_from_markdown', 'sanity/deploy_schema', 'sanity/publish_documents',
|
|
24
|
+
'sanity/unpublish_documents', 'sanity/discard_drafts', 'sanity/list_projects',
|
|
25
|
+
'sanity/list_datasets', 'sanity/list_workspace_schemas', 'sanity/list_embeddings_indices',
|
|
26
|
+
'sanity/search_docs', 'sanity/read_docs', 'sanity/semantic_search',
|
|
27
|
+
'sanity/migration_guide', 'sanity/create_version', 'sanity/generate_image',
|
|
28
|
+
'sanity/transform_image', 'sanity/add_cors_origin',
|
|
29
|
+
],
|
|
30
|
+
'copywriter': [
|
|
31
|
+
'sanity/get_schema', 'sanity/query_documents', 'sanity/get_document',
|
|
32
|
+
'sanity/patch_document_from_json', 'sanity/patch_document_from_markdown',
|
|
33
|
+
'sanity/list_datasets', 'sanity/list_projects',
|
|
34
|
+
],
|
|
35
|
+
'data-expert': [
|
|
36
|
+
'sanity/get_schema', 'sanity/query_documents', 'sanity/create_documents_from_json',
|
|
37
|
+
'sanity/patch_document_from_json', 'sanity/get_document', 'sanity/list_datasets',
|
|
38
|
+
'sanity/list_projects',
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
docsUrl: null,
|
|
42
|
+
officialDocs: 'https://www.sanity.io/docs',
|
|
43
|
+
mcpPackage: null,
|
|
44
|
+
};
|
|
@@ -3,7 +3,7 @@ name: slack-notifications
|
|
|
3
3
|
description: "Slack MCP integration for agent-to-human notifications and bi-directional communication. Use when agents need to post progress updates, request approvals, or read user responses via Slack channels and threads."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
|
|
6
|
+
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
|
|
7
7
|
|
|
8
8
|
# Slack Notifications
|
|
9
9
|
|
|
@@ -232,7 +232,7 @@ Project-specific channel mappings are defined in `.github/customizations/stack/n
|
|
|
232
232
|
|
|
233
233
|
- **Always thread replies** — never post top-level messages for follow-ups
|
|
234
234
|
- **One thread per task** — keep all updates for a single task in one thread
|
|
235
|
-
- **Include task ID** — every message references the
|
|
235
|
+
- **Include task ID** — every message references the tracker issue ID
|
|
236
236
|
- **Pin important threads** — pin approval requests and blocking issues
|
|
237
237
|
|
|
238
238
|
## Message Formatting
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { PluginConfig } from '../types.js';
|
|
2
|
+
|
|
3
|
+
export const config: PluginConfig = {
|
|
4
|
+
id: 'slack',
|
|
5
|
+
name: 'Slack',
|
|
6
|
+
category: 'team',
|
|
7
|
+
subCategory: 'notifications',
|
|
8
|
+
label: 'Slack',
|
|
9
|
+
hint: 'Agent notifications and communication',
|
|
10
|
+
skillName: 'slack-notifications',
|
|
11
|
+
mcpServerKey: 'Slack',
|
|
12
|
+
mcpConfig: {
|
|
13
|
+
type: 'stdio',
|
|
14
|
+
command: 'npx',
|
|
15
|
+
args: ['-y', '@kazuph/mcp-slack'],
|
|
16
|
+
envFile: '${workspaceFolder}/.env',
|
|
17
|
+
env: {
|
|
18
|
+
SLACK_MCP_ADD_MESSAGE_TOOL: 'true',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
authType: 'env-token',
|
|
22
|
+
envVars: [
|
|
23
|
+
{
|
|
24
|
+
name: 'SLACK_MCP_XOXB_TOKEN',
|
|
25
|
+
hint: 'Create a Slack App at api.slack.com/apps → Bot User OAuth Token',
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
agentToolMap: {
|
|
29
|
+
'team-lead': ['slack/*'],
|
|
30
|
+
'release-manager': ['slack/*'],
|
|
31
|
+
},
|
|
32
|
+
docsUrl: '/guides/plugins#slack',
|
|
33
|
+
officialDocs: 'https://api.slack.com/docs',
|
|
34
|
+
mcpPackage: '@kazuph/mcp-slack',
|
|
35
|
+
};
|
|
@@ -3,7 +3,7 @@ name: strapi-cms
|
|
|
3
3
|
description: "Strapi CMS development patterns, REST/GraphQL API usage, content type building, plugin development, and deployment best practices. Use when working with Strapi content types, controllers, services, or plugins."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
|
|
6
|
+
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
|
|
7
7
|
|
|
8
8
|
# Strapi CMS
|
|
9
9
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { PluginConfig } from '../types.js';
|
|
2
|
+
|
|
3
|
+
export const config: PluginConfig = {
|
|
4
|
+
id: 'strapi',
|
|
5
|
+
name: 'Strapi',
|
|
6
|
+
category: 'tech',
|
|
7
|
+
subCategory: 'cms',
|
|
8
|
+
label: 'Strapi',
|
|
9
|
+
hint: 'Open-source headless CMS',
|
|
10
|
+
skillName: 'strapi-cms',
|
|
11
|
+
mcpServerKey: 'Strapi',
|
|
12
|
+
mcpConfig: {
|
|
13
|
+
type: 'stdio',
|
|
14
|
+
command: 'npx',
|
|
15
|
+
args: ['-y', 'strapi-mcp'],
|
|
16
|
+
},
|
|
17
|
+
authType: 'none',
|
|
18
|
+
envVars: [],
|
|
19
|
+
agentToolMap: {
|
|
20
|
+
'content-engineer': [
|
|
21
|
+
'strapi/list_content_types', 'strapi/get_content_type_schema', 'strapi/get_entries',
|
|
22
|
+
'strapi/get_entry', 'strapi/create_entry', 'strapi/update_entry', 'strapi/delete_entry',
|
|
23
|
+
'strapi/publish_entry', 'strapi/unpublish_entry', 'strapi/upload_media',
|
|
24
|
+
'strapi/upload_media_from_path', 'strapi/connect_relation', 'strapi/disconnect_relation',
|
|
25
|
+
'strapi/create_content_type', 'strapi/update_content_type', 'strapi/delete_content_type',
|
|
26
|
+
'strapi/list_components', 'strapi/get_component_schema', 'strapi/create_component',
|
|
27
|
+
'strapi/update_component',
|
|
28
|
+
],
|
|
29
|
+
'copywriter': [
|
|
30
|
+
'strapi/list_content_types', 'strapi/get_content_type_schema', 'strapi/get_entries',
|
|
31
|
+
'strapi/get_entry', 'strapi/update_entry', 'strapi/publish_entry',
|
|
32
|
+
],
|
|
33
|
+
'data-expert': [
|
|
34
|
+
'strapi/list_content_types', 'strapi/get_content_type_schema', 'strapi/get_entries',
|
|
35
|
+
'strapi/get_entry', 'strapi/create_entry', 'strapi/update_entry',
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
docsUrl: null,
|
|
39
|
+
officialDocs: 'https://docs.strapi.io/',
|
|
40
|
+
mcpPackage: 'strapi-mcp',
|
|
41
|
+
};
|
|
@@ -3,7 +3,7 @@ name: supabase-database
|
|
|
3
3
|
description: "Supabase database migration rules, RLS policy patterns, and auth integration best practices. Use when designing database tables, writing migrations, configuring RLS policies, implementing auth, or managing user roles."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
|
|
6
|
+
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
|
|
7
7
|
|
|
8
8
|
# Supabase Database
|
|
9
9
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { PluginConfig } from '../types.js';
|
|
2
|
+
|
|
3
|
+
export const config: PluginConfig = {
|
|
4
|
+
id: 'supabase',
|
|
5
|
+
name: 'Supabase',
|
|
6
|
+
category: 'tech',
|
|
7
|
+
subCategory: 'database',
|
|
8
|
+
label: 'Supabase',
|
|
9
|
+
hint: 'Postgres + Auth + RLS + Edge Functions',
|
|
10
|
+
skillName: 'supabase-database',
|
|
11
|
+
mcpServerKey: 'Supabase',
|
|
12
|
+
mcpConfig: {
|
|
13
|
+
type: 'http',
|
|
14
|
+
url: 'https://mcp.supabase.com/mcp',
|
|
15
|
+
},
|
|
16
|
+
authType: 'oauth',
|
|
17
|
+
envVars: [],
|
|
18
|
+
agentToolMap: {
|
|
19
|
+
'database-engineer': [
|
|
20
|
+
'supabase/apply_migration', 'supabase/execute_sql', 'supabase/list_tables',
|
|
21
|
+
'supabase/list_migrations', 'supabase/list_extensions', 'supabase/get_logs',
|
|
22
|
+
'supabase/get_project', 'supabase/get_project_url', 'supabase/list_projects',
|
|
23
|
+
'supabase/search_docs', 'supabase/generate_typescript_types', 'supabase/get_advisors',
|
|
24
|
+
'supabase/create_branch', 'supabase/list_branches',
|
|
25
|
+
],
|
|
26
|
+
'security-expert': [
|
|
27
|
+
'supabase/execute_sql', 'supabase/list_tables', 'supabase/get_advisors',
|
|
28
|
+
'supabase/list_migrations', 'supabase/get_project',
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
docsUrl: null,
|
|
32
|
+
officialDocs: 'https://supabase.com/docs',
|
|
33
|
+
mcpPackage: null,
|
|
34
|
+
};
|
|
@@ -3,7 +3,7 @@ name: teams-notifications
|
|
|
3
3
|
description: "Microsoft Teams MCP integration for agent-to-human notifications and bi-directional communication. Use when agents need to post progress updates, request approvals, or read user responses via Teams channels and chats."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the customizations/ directory instead. -->
|
|
6
|
+
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .github/customizations/ directory instead. -->
|
|
7
7
|
|
|
8
8
|
# Teams Notifications
|
|
9
9
|
|
|
@@ -127,7 +127,7 @@ To check for approvals or instructions:
|
|
|
127
127
|
|
|
128
128
|
- **Always reply in threads** — use message replies, not top-level posts for follow-ups
|
|
129
129
|
- **One thread per task** — keep all updates for a single task in one conversation thread
|
|
130
|
-
- **Include task ID** — every message references the
|
|
130
|
+
- **Include task ID** — every message references the tracker issue ID
|
|
131
131
|
- **Mark important messages** — use importance flags for approval requests
|
|
132
132
|
|
|
133
133
|
### Chat vs Channel
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { PluginConfig } from '../types.js';
|
|
2
|
+
|
|
3
|
+
export const config: PluginConfig = {
|
|
4
|
+
id: 'teams',
|
|
5
|
+
name: 'Microsoft Teams',
|
|
6
|
+
category: 'team',
|
|
7
|
+
subCategory: 'notifications',
|
|
8
|
+
label: 'Microsoft Teams',
|
|
9
|
+
hint: 'Agent notifications via Teams channels',
|
|
10
|
+
skillName: 'teams-notifications',
|
|
11
|
+
mcpServerKey: 'Teams',
|
|
12
|
+
mcpConfig: {
|
|
13
|
+
type: 'http',
|
|
14
|
+
url: 'https://agent365.svc.cloud.microsoft/agents/tenants/${input:tenant_id}/servers/mcp_TeamsServer',
|
|
15
|
+
},
|
|
16
|
+
authType: 'oauth',
|
|
17
|
+
envVars: [],
|
|
18
|
+
agentToolMap: {
|
|
19
|
+
'team-lead': [
|
|
20
|
+
'Teams/mcp_graph_chat_createChat', 'Teams/mcp_graph_chat_listChats',
|
|
21
|
+
'Teams/mcp_graph_chat_getChat', 'Teams/mcp_graph_chat_postMessage',
|
|
22
|
+
'Teams/mcp_graph_chat_listChatMessages', 'Teams/mcp_graph_chat_getChatMessage',
|
|
23
|
+
'Teams/mcp_graph_teams_listTeams', 'Teams/mcp_graph_teams_listChannels',
|
|
24
|
+
'Teams/mcp_graph_teams_getChannel', 'Teams/mcp_graph_teams_postChannelMessage',
|
|
25
|
+
'Teams/mcp_graph_teams_replyToChannelMessage', 'Teams/mcp_graph_teams_listChannelMessages',
|
|
26
|
+
],
|
|
27
|
+
'release-manager': [
|
|
28
|
+
'Teams/mcp_graph_chat_postMessage', 'Teams/mcp_graph_chat_listChats',
|
|
29
|
+
'Teams/mcp_graph_teams_listTeams', 'Teams/mcp_graph_teams_listChannels',
|
|
30
|
+
'Teams/mcp_graph_teams_postChannelMessage', 'Teams/mcp_graph_teams_replyToChannelMessage',
|
|
31
|
+
'Teams/mcp_graph_teams_listChannelMessages',
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
docsUrl: null,
|
|
35
|
+
officialDocs: 'https://learn.microsoft.com/en-us/microsoftteams/',
|
|
36
|
+
mcpPackage: null,
|
|
37
|
+
mcpInputs: [
|
|
38
|
+
{
|
|
39
|
+
id: 'tenant_id',
|
|
40
|
+
type: 'promptString',
|
|
41
|
+
description: 'Microsoft Entra tenant ID (GUID)',
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
|
|
9
|
+
/** Human-readable display name */
|
|
10
|
+
name: string;
|
|
11
|
+
|
|
12
|
+
/** Plugin category */
|
|
13
|
+
category: 'tech' | 'team';
|
|
14
|
+
|
|
15
|
+
/** Sub-category for grouping */
|
|
16
|
+
subCategory: 'cms' | 'database' | 'deployment' | 'monorepo' | 'tracker' | 'notifications' | 'testing';
|
|
17
|
+
|
|
18
|
+
/** Label shown in the `npx opencastle init` multiselect */
|
|
19
|
+
label: string;
|
|
20
|
+
|
|
21
|
+
/** Hint shown next to the label in multiselect */
|
|
22
|
+
hint: string;
|
|
23
|
+
|
|
24
|
+
/** Skill directory name (matches the old skills/ dirname). null if no skill. */
|
|
25
|
+
skillName: string | null;
|
|
26
|
+
|
|
27
|
+
/** MCP server key used in the generated MCP config. null if no MCP server. */
|
|
28
|
+
mcpServerKey: string | null;
|
|
29
|
+
|
|
30
|
+
/** Raw MCP server config */
|
|
31
|
+
mcpConfig: McpServerConfig;
|
|
32
|
+
|
|
33
|
+
/** Authentication type */
|
|
34
|
+
authType: 'oauth' | 'env-token' | 'none';
|
|
35
|
+
|
|
36
|
+
/** Required environment variables for this plugin */
|
|
37
|
+
envVars: EnvVarRequirement[];
|
|
38
|
+
|
|
39
|
+
/** Tools to inject into specific agent definitions when this plugin is selected.
|
|
40
|
+
* Key = agent name (e.g. 'content-engineer'), Value = tool names to append. */
|
|
41
|
+
agentToolMap?: Record<string, string[]>;
|
|
42
|
+
|
|
43
|
+
/** URL to setup guide on opencastle.dev (null if none) */
|
|
44
|
+
docsUrl: string | null;
|
|
45
|
+
|
|
46
|
+
/** Official product documentation URL */
|
|
47
|
+
officialDocs: string;
|
|
48
|
+
|
|
49
|
+
/** NPM package for the MCP server (null for HTTP/OAuth servers) */
|
|
50
|
+
mcpPackage: string | null;
|
|
51
|
+
|
|
52
|
+
/** Whether this plugin should be preselected in the init prompt */
|
|
53
|
+
preselected?: boolean;
|
|
54
|
+
|
|
55
|
+
/** VS Code input prompts required by this plugin's MCP config (e.g. tenant ID) */
|
|
56
|
+
mcpInputs?: McpInput[];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface McpInput {
|
|
60
|
+
id: string;
|
|
61
|
+
type: 'promptString';
|
|
62
|
+
description: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface McpServerConfig {
|
|
66
|
+
type: 'stdio' | 'http';
|
|
67
|
+
command?: string;
|
|
68
|
+
args?: string[];
|
|
69
|
+
url?: string;
|
|
70
|
+
env?: Record<string, string>;
|
|
71
|
+
envFile?: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface EnvVarRequirement {
|
|
75
|
+
/** Environment variable name */
|
|
76
|
+
name: string;
|
|
77
|
+
/** Short description of where to get the value */
|
|
78
|
+
hint: string;
|
|
79
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { PluginConfig } from '../types.js';
|
|
2
|
+
|
|
3
|
+
export const config: PluginConfig = {
|
|
4
|
+
id: 'vercel',
|
|
5
|
+
name: 'Vercel',
|
|
6
|
+
category: 'tech',
|
|
7
|
+
subCategory: 'deployment',
|
|
8
|
+
label: 'Vercel',
|
|
9
|
+
hint: 'Deployment and hosting platform',
|
|
10
|
+
skillName: null,
|
|
11
|
+
mcpServerKey: 'Vercel',
|
|
12
|
+
mcpConfig: {
|
|
13
|
+
type: 'http',
|
|
14
|
+
url: 'https://mcp.vercel.com',
|
|
15
|
+
},
|
|
16
|
+
authType: 'oauth',
|
|
17
|
+
envVars: [],
|
|
18
|
+
agentToolMap: {
|
|
19
|
+
'devops-expert': [
|
|
20
|
+
'vercel/deploy_to_vercel', 'vercel/get_deployment', 'vercel/get_deployment_build_logs',
|
|
21
|
+
'vercel/get_project', 'vercel/get_runtime_logs', 'vercel/list_deployments',
|
|
22
|
+
'vercel/list_projects', 'vercel/list_teams', 'vercel/search_vercel_documentation',
|
|
23
|
+
'vercel/check_domain_availability_and_price',
|
|
24
|
+
],
|
|
25
|
+
'release-manager': [
|
|
26
|
+
'vercel/get_deployment', 'vercel/get_deployment_build_logs',
|
|
27
|
+
'vercel/get_runtime_logs', 'vercel/list_deployments', 'vercel/list_projects',
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
docsUrl: null,
|
|
31
|
+
officialDocs: 'https://vercel.com/docs',
|
|
32
|
+
mcpPackage: null,
|
|
33
|
+
};
|