opencastle 0.2.0 → 0.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAuE,MAAM,YAAY,CAAA;AASjH,wBAA8B,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0K/E"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAuE,MAAM,YAAY,CAAA;AASjH,wBAA8B,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAyL/E"}
package/dist/cli/init.js CHANGED
@@ -5,6 +5,7 @@ import { select, confirm, closePrompts } from './prompt.js';
5
5
  import { readManifest, writeManifest, createManifest } from './manifest.js';
6
6
  import { removeDirIfExists } from './copy.js';
7
7
  import { updateGitignore } from './gitignore.js';
8
+ import { getRequiredMcpEnvVars } from './stack-config.js';
8
9
  const ADAPTERS = {
9
10
  vscode: () => import('./adapters/vscode.js'),
10
11
  cursor: () => import('./adapters/cursor.js'),
@@ -139,6 +140,15 @@ export default async function init({ pkgRoot, args }) {
139
140
  if (skipped > 0) {
140
141
  console.log(` → Skipped ${skipped} existing files`);
141
142
  }
143
+ // ── Env var notice ──────────────────────────────────────────────
144
+ const envVars = getRequiredMcpEnvVars(stack);
145
+ if (envVars.length > 0) {
146
+ console.log(`\n ⚠ Required environment variables for MCP servers:\n`);
147
+ for (const { envVar, hint } of envVars) {
148
+ console.log(` ${envVar}`);
149
+ console.log(` └ ${hint}\n`);
150
+ }
151
+ }
142
152
  console.log(`\n Next steps:`);
143
153
  if (ide === 'vscode') {
144
154
  console.log(' 0. Reload VS Code window (Cmd+Shift+P → "Reload Window") to pick up agents');
@@ -146,9 +156,12 @@ export default async function init({ pkgRoot, args }) {
146
156
  else if (ide === 'cursor') {
147
157
  console.log(' 0. Reload Cursor window to pick up the new rule files');
148
158
  }
149
- console.log(' 1. Run the "Bootstrap Customizations" prompt to configure for your project');
150
- console.log(' 2. Customize agent definitions for your tech stack');
151
- console.log(' 3. Commit the generated files to your repository');
159
+ if (envVars.length > 0) {
160
+ console.log(` 1. Set the environment variable${envVars.length > 1 ? 's' : ''} listed above`);
161
+ }
162
+ console.log(` ${envVars.length > 0 ? '2' : '1'}. Run the "Bootstrap Customizations" prompt to configure for your project`);
163
+ console.log(` ${envVars.length > 0 ? '3' : '2'}. Customize agent definitions for your tech stack`);
164
+ console.log(` ${envVars.length > 0 ? '4' : '3'}. Commit the generated files to your repository`);
152
165
  console.log();
153
166
  closePrompts();
154
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,20 @@
1
1
  import type { StackConfig, CopyDirOptions } from './types.js';
2
+ export interface McpEnvRequirement {
3
+ /** MCP server key (must match mcp.json) */
4
+ server: string;
5
+ /** Environment variable name */
6
+ envVar: string;
7
+ /** Short description of where to get the key */
8
+ hint: string;
9
+ }
2
10
  export declare function getExcludedSkills(stack: StackConfig): Set<string>;
3
11
  export declare function getExcludedAgents(stack: StackConfig): Set<string>;
4
12
  export declare function getIncludedMcpServers(stack: StackConfig): Set<string>;
13
+ /**
14
+ * Returns env var requirements for the MCP servers included in the stack.
15
+ * Only returns entries for servers that actually need API keys.
16
+ */
17
+ export declare function getRequiredMcpEnvVars(stack: StackConfig): McpEnvRequirement[];
5
18
  /**
6
19
  * Return a transform callback that pre-populates customization files
7
20
  * based on the user's stack selection.
@@ -1 +1 @@
1
- {"version":3,"file":"stack-config.d.ts","sourceRoot":"","sources":["../../src/cli/stack-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8C,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA2G1G,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAOjE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAKjE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAQrE;AAID;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,WAAW,GACjB,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAQ1C"}
1
+ {"version":3,"file":"stack-config.d.ts","sourceRoot":"","sources":["../../src/cli/stack-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8C,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA6G1G,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;CACd;AAeD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAOjE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAKjE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAQrE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,iBAAiB,EAAE,CAG7E;AAID;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,WAAW,GACjB,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAQ1C"}
@@ -86,6 +86,18 @@ const NOTIF_MCP_MAP = {
86
86
  };
87
87
  /** Always-included MCP servers */
88
88
  const CORE_MCP_SERVERS = ['chrome-devtools', 'Vercel'];
89
+ /**
90
+ * Registry of MCP servers that require API keys via environment variables.
91
+ * Only servers with `env` fields in mcp.json need to be listed here.
92
+ * HTTP-based servers (Sanity, Slack, Vercel, etc.) handle auth via OAuth.
93
+ */
94
+ const MCP_ENV_REQUIREMENTS = [
95
+ {
96
+ server: 'Linear',
97
+ envVar: 'LINEAR_API_KEY',
98
+ hint: 'Create at linear.app → Settings → API → Personal API keys',
99
+ },
100
+ ];
89
101
  export function getExcludedSkills(stack) {
90
102
  return new Set([
91
103
  ...CMS_SKILL_MAP[stack.cms],
@@ -109,6 +121,14 @@ export function getIncludedMcpServers(stack) {
109
121
  ...NOTIF_MCP_MAP[stack.notifications],
110
122
  ]);
111
123
  }
124
+ /**
125
+ * Returns env var requirements for the MCP servers included in the stack.
126
+ * Only returns entries for servers that actually need API keys.
127
+ */
128
+ export function getRequiredMcpEnvVars(stack) {
129
+ const included = getIncludedMcpServers(stack);
130
+ return MCP_ENV_REQUIREMENTS.filter((req) => included.has(req.server));
131
+ }
112
132
  // ── Customization file transforms ─────────────────────────────
113
133
  /**
114
134
  * Return a transform callback that pre-populates customization files
@@ -1 +1 @@
1
- {"version":3,"file":"stack-config.js","sourceRoot":"","sources":["../../src/cli/stack-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stack-config.js","sourceRoot":"","sources":["../../src/cli/stack-config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencastle",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "Multi-agent orchestration framework for AI coding assistants",
6
6
  "bin": {
package/src/cli/init.ts CHANGED
@@ -5,6 +5,7 @@ import { select, confirm, closePrompts } from './prompt.js'
5
5
  import { readManifest, writeManifest, createManifest } from './manifest.js'
6
6
  import { removeDirIfExists } from './copy.js'
7
7
  import { updateGitignore } from './gitignore.js'
8
+ import { getRequiredMcpEnvVars } from './stack-config.js'
8
9
  import type { CliContext, IdeAdapter, CmsChoice, DbChoice, PmChoice, NotifChoice, StackConfig } from './types.js'
9
10
 
10
11
  const ADAPTERS: Record<string, () => Promise<IdeAdapter>> = {
@@ -166,6 +167,16 @@ export default async function init({ pkgRoot, args }: CliContext): Promise<void>
166
167
  console.log(` → Skipped ${skipped} existing files`)
167
168
  }
168
169
 
170
+ // ── Env var notice ──────────────────────────────────────────────
171
+ const envVars = getRequiredMcpEnvVars(stack)
172
+ if (envVars.length > 0) {
173
+ console.log(`\n ⚠ Required environment variables for MCP servers:\n`)
174
+ for (const { envVar, hint } of envVars) {
175
+ console.log(` ${envVar}`)
176
+ console.log(` └ ${hint}\n`)
177
+ }
178
+ }
179
+
169
180
  console.log(`\n Next steps:`)
170
181
  if (ide === 'vscode') {
171
182
  console.log(
@@ -176,11 +187,16 @@ export default async function init({ pkgRoot, args }: CliContext): Promise<void>
176
187
  ' 0. Reload Cursor window to pick up the new rule files'
177
188
  )
178
189
  }
190
+ if (envVars.length > 0) {
191
+ console.log(
192
+ ` 1. Set the environment variable${envVars.length > 1 ? 's' : ''} listed above`
193
+ )
194
+ }
179
195
  console.log(
180
- ' 1. Run the "Bootstrap Customizations" prompt to configure for your project'
196
+ ` ${envVars.length > 0 ? '2' : '1'}. Run the "Bootstrap Customizations" prompt to configure for your project`
181
197
  )
182
- console.log(' 2. Customize agent definitions for your tech stack')
183
- console.log(' 3. Commit the generated files to your repository')
198
+ console.log(` ${envVars.length > 0 ? '3' : '2'}. Customize agent definitions for your tech stack`)
199
+ console.log(` ${envVars.length > 0 ? '4' : '3'}. Commit the generated files to your repository`)
184
200
  console.log()
185
201
 
186
202
  closePrompts()
@@ -105,6 +105,30 @@ const NOTIF_MCP_MAP: Record<NotifChoice, string[]> = {
105
105
  /** Always-included MCP servers */
106
106
  const CORE_MCP_SERVERS = ['chrome-devtools', 'Vercel'];
107
107
 
108
+ // ── MCP environment variable requirements ─────────────────────
109
+
110
+ export interface McpEnvRequirement {
111
+ /** MCP server key (must match mcp.json) */
112
+ server: string;
113
+ /** Environment variable name */
114
+ envVar: string;
115
+ /** Short description of where to get the key */
116
+ hint: string;
117
+ }
118
+
119
+ /**
120
+ * Registry of MCP servers that require API keys via environment variables.
121
+ * Only servers with `env` fields in mcp.json need to be listed here.
122
+ * HTTP-based servers (Sanity, Slack, Vercel, etc.) handle auth via OAuth.
123
+ */
124
+ const MCP_ENV_REQUIREMENTS: McpEnvRequirement[] = [
125
+ {
126
+ server: 'Linear',
127
+ envVar: 'LINEAR_API_KEY',
128
+ hint: 'Create at linear.app → Settings → API → Personal API keys',
129
+ },
130
+ ];
131
+
108
132
  export function getExcludedSkills(stack: StackConfig): Set<string> {
109
133
  return new Set([
110
134
  ...CMS_SKILL_MAP[stack.cms],
@@ -131,6 +155,15 @@ export function getIncludedMcpServers(stack: StackConfig): Set<string> {
131
155
  ]);
132
156
  }
133
157
 
158
+ /**
159
+ * Returns env var requirements for the MCP servers included in the stack.
160
+ * Only returns entries for servers that actually need API keys.
161
+ */
162
+ export function getRequiredMcpEnvVars(stack: StackConfig): McpEnvRequirement[] {
163
+ const included = getIncludedMcpServers(stack);
164
+ return MCP_ENV_REQUIREMENTS.filter((req) => included.has(req.server));
165
+ }
166
+
134
167
  // ── Customization file transforms ─────────────────────────────
135
168
 
136
169
  /**