create-codemodekit 0.4.0 → 0.5.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/dist/scaffold.js CHANGED
@@ -4,16 +4,19 @@ import { mkdir, readdir, writeFile } from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import { normalizePortableName, scaffoldAgentPlugin, } from "./agent-plugin.js";
6
6
  import { installProjectAuthoringSkills } from "./authoring-skill.js";
7
- import { renderEnvExample, renderSource, renderSourceReadme, } from "./source-template.js";
7
+ import { renderEnvExample, renderSources, renderSourcesReadme, } from "./source-template.js";
8
+ import { renderVerifyScript } from "./verify-template.js";
8
9
  const PACKAGE_VERSION = readPackageVersion();
9
10
  // The generator and batteries-included runtime release independently.
10
- const DEFAULT_CODEMODEKIT_VERSION = "^0.3.0";
11
+ const DEFAULT_CODEMODEKIT_VERSION = "^0.4.0";
11
12
  const DEFAULT_CREATE_CODEMODEKIT_VERSION = `^${PACKAGE_VERSION}`;
12
13
  export async function scaffoldCodeModeMcp(options) {
13
14
  const cwd = options.cwd ?? process.cwd();
14
15
  const directory = path.resolve(cwd, options.targetDirectory);
15
- const source = resolveSource(options);
16
- const sourceName = source.type === "weather" ? "weather" : source.name;
16
+ const sources = resolveSources(options);
17
+ const sourceName = sources.length === 1
18
+ ? resolvedSourceName(sources[0])
19
+ : "multi-source";
17
20
  const serverName = required(options.serverName ?? `${sourceName}-code-mode`, "Server name");
18
21
  const packageName = validPackageName(options.packageName ?? packageNameFromDirectory(directory));
19
22
  const policy = options.policy ?? "allow-all";
@@ -29,7 +32,10 @@ export async function scaffoldCodeModeMcp(options) {
29
32
  const codemodekitVersion = required(options.codemodekitVersion ?? DEFAULT_CODEMODEKIT_VERSION, "CodeModeKit dependency version");
30
33
  const createCodemodekitVersion = required(options.createCodemodekitVersion ?? DEFAULT_CREATE_CODEMODEKIT_VERSION, "create-codemodekit dependency version");
31
34
  await ensureEmptyDirectory(directory);
32
- await mkdir(path.join(directory, "src"), { recursive: true });
35
+ await Promise.all([
36
+ mkdir(path.join(directory, "src"), { recursive: true }),
37
+ mkdir(path.join(directory, "scripts"), { recursive: true }),
38
+ ]);
33
39
  const packageJson = {
34
40
  name: packageName,
35
41
  version: "0.1.0",
@@ -38,6 +44,7 @@ export async function scaffoldCodeModeMcp(options) {
38
44
  engines: { node: ">=20" },
39
45
  scripts: {
40
46
  start: "node src/server.mjs",
47
+ verify: "node scripts/verify.mjs",
41
48
  ...(agentPluginOptions === undefined
42
49
  ? {}
43
50
  : {
@@ -49,35 +56,35 @@ export async function scaffoldCodeModeMcp(options) {
49
56
  }),
50
57
  },
51
58
  dependencies: { "codemodekit": codemodekitVersion },
52
- ...(agentPluginOptions === undefined
53
- ? {}
54
- : {
55
- devDependencies: {
56
- "create-codemodekit": createCodemodekitVersion,
57
- },
58
- }),
59
+ devDependencies: {
60
+ "@modelcontextprotocol/client": "2.0.0-beta.5",
61
+ ...(agentPluginOptions === undefined
62
+ ? {}
63
+ : { "create-codemodekit": createCodemodekitVersion }),
64
+ },
59
65
  };
60
66
  const entrypoint = path.join(directory, "src", "server.mjs");
61
67
  await Promise.all([
62
68
  writeFile(path.join(directory, "package.json"), `${JSON.stringify(packageJson, null, 2)}\n`, "utf8"),
63
69
  writeFile(path.join(directory, ".gitignore"), "node_modules/\n.env\n.env.*\n!.env.example\n", "utf8"),
64
- writeFile(path.join(directory, ".env.example"), renderEnvExample(source), "utf8"),
70
+ writeFile(path.join(directory, ".env.example"), renderEnvExample(sources), "utf8"),
65
71
  writeFile(path.join(directory, "README.md"), renderProjectReadme({
66
72
  packageName,
67
73
  serverName,
68
- source,
74
+ sources,
69
75
  policy,
70
76
  agentPlugin: agentPluginOptions !== undefined,
71
77
  authoringSkill: includeAuthoringSkill,
72
78
  }), "utf8"),
73
79
  writeFile(entrypoint, renderServer({
74
80
  serverName,
75
- source,
81
+ sources,
76
82
  policy,
77
83
  ...(skillName === undefined
78
84
  ? {}
79
85
  : { agentPlugin: { skillName } }),
80
86
  }), "utf8"),
87
+ writeFile(path.join(directory, "scripts", "verify.mjs"), renderVerifyScript(sources.map(resolvedSourceName)), "utf8"),
81
88
  ]);
82
89
  const authoringSkills = includeAuthoringSkill
83
90
  ? await installProjectAuthoringSkills({ root: directory })
@@ -180,7 +187,7 @@ The project-local \`.agents/skills/build-codemodekit-server\` and \`.agents/skil
180
187
  After the catalog is synchronized, ask the coding agent to use \`$author-codemode-skill\` before distributing the generated runtime skill.
181
188
  `
182
189
  : "";
183
- const sourceSection = renderSourceReadme(options.source);
190
+ const sourceSection = renderSourcesReadme(options.sources);
184
191
  return `# ${options.packageName}
185
192
 
186
193
  Code Mode MCP server generated by [CodeModeKit](https://github.com/stjbrown/codemodekit).
@@ -189,6 +196,9 @@ Code Mode MCP server generated by [CodeModeKit](https://github.com/stjbrown/code
189
196
 
190
197
  \`\`\`sh
191
198
  npm start
199
+
200
+ # Validate the Code Mode surface and sandbox without calling provider tools
201
+ npm run verify
192
202
  \`\`\`
193
203
 
194
204
  The downstream server is \`${options.serverName}\`.
@@ -196,25 +206,27 @@ The downstream server is \`${options.serverName}\`.
196
206
  ${sourceSection}
197
207
 
198
208
  The generated tool policy is \`${options.policy}\`. Review \`src/server.mjs\` before exposing the server, and keep credentials in uncommitted environment files or the upstream tool's supported secret mechanism.
209
+
210
+ For an end-to-end provider assertion, put a bounded TypeScript composition in a file that returns an object containing \`verified: true\`, then run \`CODEMODEKIT_VERIFY_CODE_FILE=verify/live.ts npm run verify\`. Export the variables shown in \`.env.example\` with your preferred environment manager before starting or verifying the server.
199
211
  ${pluginSection}${authoringSection}
200
212
  `;
201
213
  }
202
214
  export function renderServer(options) {
203
215
  const policyFactory = options.policy === "allow-all" ? "allowAllToolCalls" : "denyAllToolCalls";
204
- const source = renderSource(options.source);
216
+ const sources = renderSources(options.sources);
205
217
  const plugin = options.agentPlugin;
206
218
  const nodeImport = plugin === undefined ? "" : 'import { fileURLToPath } from "node:url";\n\n';
207
219
  const imports = [
208
220
  policyFactory,
209
221
  ...(plugin === undefined ? [] : ["createCodeModeMcp"]),
210
- ...source.imports,
222
+ ...sources.imports,
211
223
  "serveCodeModeStdio",
212
224
  ].sort();
213
225
  const application = `const options = {
214
226
  name: ${JSON.stringify(options.serverName)},
215
227
  version: "0.1.0",
216
228
  toolPolicy: ${policyFactory}(),
217
- sources: [${source.expression}],
229
+ sources: [${sources.expressions.join("")}],
218
230
  };
219
231
  `;
220
232
  const launch = plugin === undefined
@@ -224,7 +236,7 @@ export function renderServer(options) {
224
236
  ${imports.map((name) => ` ${name},`).join("\n")}
225
237
  } from "codemodekit";
226
238
 
227
- ${source.prelude}${application}
239
+ ${sources.prelude}${application}
228
240
  ${launch}`;
229
241
  }
230
242
  function renderAgentPluginLaunch(skillName, serverName) {
@@ -249,37 +261,94 @@ function renderAgentPluginLaunch(skillName, serverName) {
249
261
  }
250
262
  `;
251
263
  }
252
- function resolveSource(options) {
253
- if (options.source !== undefined &&
264
+ function resolveSources(options) {
265
+ if ((options.source !== undefined || options.sources !== undefined) &&
254
266
  (options.mcpName !== undefined || options.mcpCommand !== undefined)) {
255
- throw new TypeError("Use either source or mcpName/mcpCommand, not both");
267
+ throw new TypeError("Use sources, source, or mcpName/mcpCommand, not a combination");
256
268
  }
257
- if (options.source !== undefined) {
258
- switch (options.source.type) {
259
- case "weather":
260
- return options.source;
261
- case "mcp-stdio":
262
- return {
263
- type: "mcp-stdio",
264
- name: required(options.source.name, "MCP name"),
265
- command: validateCommand(options.source.command),
266
- };
267
- case "mcp-http":
268
- return {
269
- type: "mcp-http",
270
- name: required(options.source.name, "MCP name"),
271
- url: validateHttpUrl(options.source.url),
272
- };
269
+ if (options.source !== undefined && options.sources !== undefined) {
270
+ throw new TypeError("Use either sources or source, not both");
271
+ }
272
+ const candidates = options.sources ??
273
+ (options.source === undefined ? undefined : [options.source]);
274
+ if (candidates !== undefined) {
275
+ if (candidates.length === 0) {
276
+ throw new TypeError("At least one source is required");
273
277
  }
278
+ const resolved = candidates.map((source) => {
279
+ switch (source.type) {
280
+ case "weather":
281
+ return source;
282
+ case "mcp-stdio":
283
+ return {
284
+ type: "mcp-stdio",
285
+ name: required(source.name, "MCP name"),
286
+ command: validateCommand(source.command),
287
+ };
288
+ case "mcp-http": {
289
+ const bearerTokenEnv = validateOptionalEnvironmentName(source.bearerTokenEnv);
290
+ const headerEnv = validateHeaderEnvironment(source.headerEnv);
291
+ if (bearerTokenEnv !== undefined &&
292
+ Object.keys(headerEnv).some((header) => header.toLowerCase() === "authorization")) {
293
+ throw new TypeError("Use either bearerTokenEnv or an Authorization headerEnv mapping");
294
+ }
295
+ return {
296
+ type: "mcp-http",
297
+ name: required(source.name, "MCP name"),
298
+ url: validateHttpUrl(source.url),
299
+ ...(bearerTokenEnv === undefined ? {} : { bearerTokenEnv }),
300
+ ...(Object.keys(headerEnv).length === 0 ? {} : { headerEnv }),
301
+ };
302
+ }
303
+ }
304
+ });
305
+ const names = resolved.map(resolvedSourceName);
306
+ const duplicate = names.find((name, index) => names.indexOf(name) !== index);
307
+ if (duplicate !== undefined) {
308
+ throw new TypeError(`Duplicate source name: ${duplicate}`);
309
+ }
310
+ return resolved;
274
311
  }
275
312
  if (options.mcpName === undefined || options.mcpCommand === undefined) {
276
313
  throw new TypeError("A source or mcpName/mcpCommand pair is required");
277
314
  }
278
- return {
279
- type: "mcp-stdio",
280
- name: required(options.mcpName, "MCP name"),
281
- command: validateCommand(options.mcpCommand),
282
- };
315
+ return [
316
+ {
317
+ type: "mcp-stdio",
318
+ name: required(options.mcpName, "MCP name"),
319
+ command: validateCommand(options.mcpCommand),
320
+ },
321
+ ];
322
+ }
323
+ function resolvedSourceName(source) {
324
+ return source.type === "weather" ? "weather" : source.name;
325
+ }
326
+ function validateOptionalEnvironmentName(value) {
327
+ return value === undefined ? undefined : validateEnvironmentName(value);
328
+ }
329
+ function validateEnvironmentName(value) {
330
+ const name = required(value, "Environment variable name");
331
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(name)) {
332
+ throw new TypeError(`Invalid environment variable name: ${name}`);
333
+ }
334
+ return name;
335
+ }
336
+ function validateHeaderEnvironment(value) {
337
+ const entries = Object.entries(value ?? {}).sort(([left], [right]) => left.localeCompare(right));
338
+ const result = {};
339
+ const normalizedHeaders = new Set();
340
+ for (const [header, environment] of entries) {
341
+ if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(header)) {
342
+ throw new TypeError(`Invalid HTTP header name: ${header}`);
343
+ }
344
+ const normalized = header.toLowerCase();
345
+ if (normalizedHeaders.has(normalized)) {
346
+ throw new TypeError(`Duplicate HTTP header name: ${header}`);
347
+ }
348
+ normalizedHeaders.add(normalized);
349
+ result[header] = validateEnvironmentName(environment);
350
+ }
351
+ return result;
283
352
  }
284
353
  function validateCommand(command) {
285
354
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,10 @@ export type ScaffoldSource = {
7
7
  readonly type: "mcp-http";
8
8
  readonly name: string;
9
9
  readonly url: string;
10
+ /** Reads an Authorization bearer token from this host environment variable. */
11
+ readonly bearerTokenEnv?: string;
12
+ /** Maps HTTP header names to host environment variable names. */
13
+ readonly headerEnv?: Readonly<Record<string, string>>;
10
14
  } | {
11
15
  readonly type: "weather";
12
16
  };
@@ -15,7 +19,13 @@ export interface RenderedSource {
15
19
  readonly prelude: string;
16
20
  readonly expression: string;
17
21
  }
22
+ export interface RenderedSources {
23
+ readonly imports: readonly string[];
24
+ readonly prelude: string;
25
+ readonly expressions: readonly string[];
26
+ }
27
+ export declare function renderSources(sources: readonly ScaffoldSource[]): RenderedSources;
18
28
  export declare function renderSource(source: ScaffoldSource): RenderedSource;
19
- export declare function renderSourceReadme(source: ScaffoldSource): string;
20
- export declare function renderEnvExample(source: ScaffoldSource): string;
29
+ export declare function renderSourcesReadme(sources: readonly ScaffoldSource[]): string;
30
+ export declare function renderEnvExample(sources: readonly ScaffoldSource[]): string;
21
31
  //# sourceMappingURL=source-template.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-template.d.ts","sourceRoot":"","sources":["../src/source-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,cAAc,GACtB;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CACjC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B,CAAC;AAEN,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAqCnE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAejE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAY/D"}
1
+ {"version":3,"file":"source-template.d.ts","sourceRoot":"","sources":["../src/source-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,cAAc,GACtB;IACE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;CACjC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B,CAAC;AAEN,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,eAAe,CAejF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAoDnE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAQ9E;AA2BD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAqB3E"}
@@ -1,3 +1,15 @@
1
+ export function renderSources(sources) {
2
+ const rendered = sources.map(renderSource);
3
+ const needsEnvironment = sources.some((source) => source.type === "mcp-http" &&
4
+ (source.bearerTokenEnv !== undefined ||
5
+ Object.keys(source.headerEnv ?? {}).length > 0));
6
+ return {
7
+ imports: [...new Set(rendered.flatMap((source) => source.imports))],
8
+ prelude: (needsEnvironment ? renderEnvironmentHelper() : "") +
9
+ rendered.map((source) => source.prelude).join(""),
10
+ expressions: rendered.map((source) => source.expression),
11
+ };
12
+ }
1
13
  export function renderSource(source) {
2
14
  switch (source.type) {
3
15
  case "mcp-stdio":
@@ -12,7 +24,17 @@ export function renderSource(source) {
12
24
  }),
13
25
  `,
14
26
  };
15
- case "mcp-http":
27
+ case "mcp-http": {
28
+ const headers = [
29
+ ...(source.bearerTokenEnv === undefined
30
+ ? []
31
+ : [
32
+ ` authorization: "Bearer " + requiredEnvironment(${JSON.stringify(source.bearerTokenEnv)}),`,
33
+ ]),
34
+ ...Object.entries(source.headerEnv ?? {})
35
+ .sort(([left], [right]) => left.localeCompare(right))
36
+ .map(([header, environment]) => ` ${JSON.stringify(header)}: requiredEnvironment(${JSON.stringify(environment)}),`),
37
+ ];
16
38
  return {
17
39
  imports: ["mcp"],
18
40
  prelude: "",
@@ -20,9 +42,11 @@ export function renderSource(source) {
20
42
  mcp.http({
21
43
  name: ${JSON.stringify(source.name)},
22
44
  url: ${JSON.stringify(source.url)},
45
+ ${headers.length === 0 ? "" : ` headers: {\n${headers.join("\n")}\n },\n`}
23
46
  }),
24
47
  `,
25
48
  };
49
+ }
26
50
  case "weather":
27
51
  return {
28
52
  imports: ["defineTool", "local", "ToolError"],
@@ -36,7 +60,14 @@ export function renderSource(source) {
36
60
  };
37
61
  }
38
62
  }
39
- export function renderSourceReadme(source) {
63
+ export function renderSourcesReadme(sources) {
64
+ if (sources.length === 1)
65
+ return renderSourceReadme(sources[0]);
66
+ return `It combines ${String(sources.length)} sources in one catalog:\n\n${sources
67
+ .map((source) => `### \`${sourceName(source)}\`\n\n${renderSourceReadme(source)}`)
68
+ .join("\n\n")}`;
69
+ }
70
+ function renderSourceReadme(source) {
40
71
  switch (source.type) {
41
72
  case "mcp-stdio":
42
73
  return `It wraps the \`${source.name}\` MCP source using this shell-free process configuration:
@@ -44,26 +75,62 @@ export function renderSourceReadme(source) {
44
75
  \`\`\`json
45
76
  ${JSON.stringify(source.command, null, 2)}
46
77
  \`\`\``;
47
- case "mcp-http":
48
- return `It wraps the \`${source.name}\` Streamable HTTP MCP source at \`${source.url}\`.`;
78
+ case "mcp-http": {
79
+ const environment = sourceEnvironmentVariables(source);
80
+ const authentication = environment.length === 0
81
+ ? ""
82
+ : ` Authentication headers are assembled at runtime from ${environment
83
+ .map((name) => `\`${name}\``)
84
+ .join(", ")}; their values are not written to source or plugin artifacts.`;
85
+ return `It wraps the \`${source.name}\` Streamable HTTP MCP source at \`${source.url}\`.${authentication}`;
86
+ }
49
87
  case "weather":
50
88
  return `This is the editable, keyless weather starter. It exposes two local tools—\`weather.findLocation\` and \`weather.getCurrentWeather\`—so an agent can compose geocoding and current-weather lookup inside one \`run_typescript\` call.
51
89
 
52
90
  It uses Open-Meteo's public endpoints by default. The free endpoint is intended for non-commercial use within Open-Meteo's published limits; review their terms before production use. Set \`OPEN_METEO_GEOCODING_URL\` and \`OPEN_METEO_FORECAST_URL\` to use customer or self-hosted endpoints.`;
53
91
  }
54
92
  }
55
- export function renderEnvExample(source) {
56
- switch (source.type) {
57
- case "weather":
58
- return `# Optional Open-Meteo customer or self-hosted endpoints.
93
+ export function renderEnvExample(sources) {
94
+ const sections = sources.map((source) => {
95
+ switch (source.type) {
96
+ case "weather":
97
+ return `# Optional Open-Meteo customer or self-hosted endpoints.
59
98
  # OPEN_METEO_GEOCODING_URL=https://geocoding-api.open-meteo.com/v1/search
60
99
  # OPEN_METEO_FORECAST_URL=https://api.open-meteo.com/v1/forecast
61
100
  `;
62
- case "mcp-http":
63
- return "# Add any credentials required by the remote MCP source here.\n";
64
- case "mcp-stdio":
65
- return "# Add any credentials required by the upstream MCP process here.\n";
66
- }
101
+ case "mcp-http": {
102
+ const variables = sourceEnvironmentVariables(source);
103
+ return variables.length === 0
104
+ ? `# ${source.name}: add any environment required by the remote MCP source.\n`
105
+ : `# ${source.name}: required HTTP authentication environment.\n${variables
106
+ .map((name) => `${name}=`)
107
+ .join("\n")}\n`;
108
+ }
109
+ case "mcp-stdio":
110
+ return `# ${source.name}: add any environment required by the upstream MCP process.\n`;
111
+ }
112
+ });
113
+ return sections.join("\n");
114
+ }
115
+ function sourceEnvironmentVariables(source) {
116
+ return [
117
+ ...(source.bearerTokenEnv === undefined ? [] : [source.bearerTokenEnv]),
118
+ ...Object.values(source.headerEnv ?? {}),
119
+ ].filter((value, index, values) => values.indexOf(value) === index);
120
+ }
121
+ function sourceName(source) {
122
+ return source.type === "weather" ? "weather" : source.name;
123
+ }
124
+ function renderEnvironmentHelper() {
125
+ return `function requiredEnvironment(name) {
126
+ const value = process.env[name];
127
+ if (typeof value !== "string" || value.trim() === "") {
128
+ throw new Error("Missing required environment variable: " + name);
129
+ }
130
+ return value;
131
+ }
132
+
133
+ `;
67
134
  }
68
135
  function renderWeatherPrelude() {
69
136
  return `const geocodingEndpoint =
@@ -1 +1 @@
1
- {"version":3,"file":"source-template.js","sourceRoot":"","sources":["../src/source-template.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,YAAY,CAAC,MAAsB;IACjD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,WAAW;YACd,OAAO;gBACL,OAAO,EAAE,CAAC,KAAK,CAAC;gBAChB,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE;;cAEN,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;iBACxB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;cACzC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;;GAE9C;aACI,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,KAAK,CAAC;gBAChB,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE;;cAEN,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;aAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;;GAEpC;aACI,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,OAAO,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC;gBAC7C,OAAO,EAAE,oBAAoB,EAAE;gBAC/B,UAAU,EAAE;;;;;GAKjB;aACI,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,WAAW;YACd,OAAO,kBAAkB,MAAM,CAAC,IAAI;;;EAGxC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;OAClC,CAAC;QACJ,KAAK,UAAU;YACb,OAAO,kBAAkB,MAAM,CAAC,IAAI,sCAAsC,MAAM,CAAC,GAAG,KAAK,CAAC;QAC5F,KAAK,SAAS;YACZ,OAAO;;kSAEqR,CAAC;IACjS,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACrD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO;;;CAGZ,CAAC;QACE,KAAK,UAAU;YACb,OAAO,iEAAiE,CAAC;QAC3E,KAAK,WAAW;YACd,OAAO,oEAAoE,CAAC;IAChF,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0NR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"source-template.js","sourceRoot":"","sources":["../src/source-template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function renderVerifyScript(sourceNames: readonly string[]): string;
2
+ //# sourceMappingURL=verify-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-template.d.ts","sourceRoot":"","sources":["../src/verify-template.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CA+GzE"}
@@ -0,0 +1,113 @@
1
+ export function renderVerifyScript(sourceNames) {
2
+ return `import assert from "node:assert/strict";
3
+ import { readFile } from "node:fs/promises";
4
+ import { fileURLToPath } from "node:url";
5
+
6
+ import { Client } from "@modelcontextprotocol/client";
7
+ import { StdioClientTransport } from "@modelcontextprotocol/client/stdio";
8
+
9
+ const root = fileURLToPath(new URL("../", import.meta.url));
10
+ const client = new Client(
11
+ { name: "codemodekit-generated-verifier", version: "1.0.0" },
12
+ {
13
+ versionNegotiation: {
14
+ mode: "auto",
15
+ probe: { timeoutMs: 5_000, maxRetries: 0 },
16
+ },
17
+ inputRequired: { autoFulfill: false },
18
+ },
19
+ );
20
+
21
+ try {
22
+ await client.connect(
23
+ new StdioClientTransport({
24
+ command: process.execPath,
25
+ args: [fileURLToPath(new URL("../src/server.mjs", import.meta.url))],
26
+ cwd: root,
27
+ stderr: "pipe",
28
+ }),
29
+ { timeout: 15_000 },
30
+ );
31
+
32
+ const listed = await client.listTools();
33
+ assert.deepEqual(
34
+ listed.tools.map((tool) => tool.name).sort(),
35
+ ["run_typescript", "search_tools"],
36
+ "The server must expose exactly the two Code Mode tools",
37
+ );
38
+
39
+ for (const source of ${JSON.stringify(sourceNames)}) {
40
+ const search = await client.callTool({
41
+ name: "search_tools",
42
+ arguments: { query: source, source, detail: "summary", limit: 1 },
43
+ });
44
+ assert.notEqual(search.isError, true, "search_tools failed for " + source);
45
+ assert.equal(typeof search.structuredContent?.catalogRevision, "string");
46
+ assert.equal(typeof search.structuredContent?.returned, "number");
47
+ }
48
+
49
+ const isolation = await client.callTool({
50
+ name: "run_typescript",
51
+ arguments: {
52
+ code: \`return {
53
+ sum: [1, 2, 3].reduce((total, value) => total + value, 0),
54
+ process: typeof process,
55
+ require: typeof require,
56
+ fetch: typeof fetch,
57
+ };\`,
58
+ },
59
+ });
60
+ assert.equal(isolation.structuredContent?.ok, true);
61
+ assert.deepEqual(isolation.structuredContent?.value, {
62
+ sum: 6,
63
+ process: "undefined",
64
+ require: "undefined",
65
+ fetch: "undefined",
66
+ });
67
+ assert.deepEqual(isolation.structuredContent?.logs, []);
68
+
69
+ await expectToolError(
70
+ () => client.callTool({ name: "run_typescript", arguments: {} }),
71
+ /code|required/i,
72
+ );
73
+ await expectToolError(
74
+ () => client.callTool({ name: "not_a_code_mode_tool", arguments: {} }),
75
+ /tool|not found|unknown/i,
76
+ );
77
+
78
+ const liveFile = process.env.CODEMODEKIT_VERIFY_CODE_FILE;
79
+ if (liveFile !== undefined && liveFile.trim() !== "") {
80
+ const code = await readFile(liveFile, "utf8");
81
+ const live = await client.callTool({
82
+ name: "run_typescript",
83
+ arguments: { code },
84
+ });
85
+ assert.equal(live.structuredContent?.ok, true, "Live provider composition failed");
86
+ assert.equal(
87
+ live.structuredContent?.value?.verified,
88
+ true,
89
+ "Live verifier code must return an object containing verified: true",
90
+ );
91
+ }
92
+
93
+ process.stdout.write(
94
+ \`Verified Code Mode surface, ${String(sourceNames.length)} source(s), sandbox isolation\${liveFile ? ", and live composition" : ""}.\\n\`,
95
+ );
96
+ } finally {
97
+ await client.close();
98
+ }
99
+
100
+ async function expectToolError(call, pattern) {
101
+ let result;
102
+ try {
103
+ result = await call();
104
+ } catch (error) {
105
+ assert.match(error instanceof Error ? error.message : String(error), pattern);
106
+ return;
107
+ }
108
+ assert.equal(result.isError, true, "Expected an MCP tool error result");
109
+ assert.match(JSON.stringify(result), pattern);
110
+ }
111
+ `;
112
+ }
113
+ //# sourceMappingURL=verify-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-template.js","sourceRoot":"","sources":["../src/verify-template.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,WAA8B;IAC/D,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAqCgB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAuDhB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;CAiB7D,CAAC;AACF,CAAC"}