@kubb/cli 5.0.0-beta.75 → 5.0.0-beta.8

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 (151) hide show
  1. package/README.md +177 -26
  2. package/dist/agent-DPLjUza1.cjs +70 -0
  3. package/dist/agent-DPLjUza1.cjs.map +1 -0
  4. package/dist/agent-DTeGTNl7.js +68 -0
  5. package/dist/agent-DTeGTNl7.js.map +1 -0
  6. package/dist/{chunk--u3MIqq1.js → chunk-BvFE5Tac.js} +1 -0
  7. package/dist/constants-B2JTeRBb.js +42 -0
  8. package/dist/constants-B2JTeRBb.js.map +1 -0
  9. package/dist/constants-BINTA5VZ.cjs +77 -0
  10. package/dist/constants-BINTA5VZ.cjs.map +1 -0
  11. package/dist/constants-BYGmiFs0.cjs +139 -0
  12. package/dist/constants-BYGmiFs0.cjs.map +1 -0
  13. package/dist/constants-DSJ-Xrbv.js +116 -0
  14. package/dist/constants-DSJ-Xrbv.js.map +1 -0
  15. package/dist/define-Bdn8j5VM.cjs.map +1 -1
  16. package/dist/{define-Ctii4bel.js → define-m_fp-Aqm.js} +2 -2
  17. package/dist/{define-Ctii4bel.js.map → define-m_fp-Aqm.js.map} +1 -1
  18. package/dist/{errors-CjPmyZHy.js → errors-CINO1EIv.js} +2 -2
  19. package/dist/{errors-CjPmyZHy.js.map → errors-CINO1EIv.js.map} +1 -1
  20. package/dist/errors-CLCjoSg0.cjs.map +1 -1
  21. package/dist/{generate-DDCwNQNo.cjs → generate-CiBa5UMJ.cjs} +10 -4
  22. package/dist/generate-CiBa5UMJ.cjs.map +1 -0
  23. package/dist/{generate-YPtfjsg4.js → generate-DzC1brc9.js} +12 -6
  24. package/dist/generate-DzC1brc9.js.map +1 -0
  25. package/dist/index.cjs +20 -11
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.ts +1 -1
  28. package/dist/index.js +22 -13
  29. package/dist/index.js.map +1 -1
  30. package/dist/init-BVYkUQ-b.cjs +53 -0
  31. package/dist/init-BVYkUQ-b.cjs.map +1 -0
  32. package/dist/init-BYlb-ua0.js +53 -0
  33. package/dist/init-BYlb-ua0.js.map +1 -0
  34. package/dist/mcp-Bm2Q7YdS.js +39 -0
  35. package/dist/mcp-Bm2Q7YdS.js.map +1 -0
  36. package/dist/mcp-CiNoagVX.cjs +39 -0
  37. package/dist/mcp-CiNoagVX.cjs.map +1 -0
  38. package/dist/{package-D5arPDnh.cjs → package-BvBzYG6c.cjs} +2 -2
  39. package/dist/package-BvBzYG6c.cjs.map +1 -0
  40. package/dist/package-s8PvCnk-.js +6 -0
  41. package/dist/package-s8PvCnk-.js.map +1 -0
  42. package/dist/{agent-Ev5hU5hH.js → run-BzpYYOQs.js} +53 -44
  43. package/dist/run-BzpYYOQs.js.map +1 -0
  44. package/dist/run-CCZ24VKk.js +51 -0
  45. package/dist/run-CCZ24VKk.js.map +1 -0
  46. package/dist/{init-eNRlotJK.js → run-CF97BWVa.js} +102 -147
  47. package/dist/run-CF97BWVa.js.map +1 -0
  48. package/dist/run-CQbj3ley.cjs +52 -0
  49. package/dist/run-CQbj3ley.cjs.map +1 -0
  50. package/dist/{generate-Cg8yufrw.js → run-CXTVu3Wl.js} +322 -337
  51. package/dist/run-CXTVu3Wl.js.map +1 -0
  52. package/dist/run-D0hmRpHy.js +49 -0
  53. package/dist/run-D0hmRpHy.js.map +1 -0
  54. package/dist/{agent-B_pirbeB.cjs → run-DwdAwnLG.cjs} +51 -42
  55. package/dist/run-DwdAwnLG.cjs.map +1 -0
  56. package/dist/run-Lr0Ctnu0.cjs +50 -0
  57. package/dist/run-Lr0Ctnu0.cjs.map +1 -0
  58. package/dist/{generate-K8MJ9aQF.cjs → run-QyqW2rPC.cjs} +319 -334
  59. package/dist/run-QyqW2rPC.cjs.map +1 -0
  60. package/dist/{init-CZ5Xq2Hd.cjs → run-YsoCk5we.cjs} +100 -145
  61. package/dist/run-YsoCk5we.cjs.map +1 -0
  62. package/dist/shell-475fQKaX.cjs.map +1 -1
  63. package/dist/{shell-DLzN4fRo.js → shell-CN6DNqeC.js} +2 -2
  64. package/dist/{shell-DLzN4fRo.js.map → shell-CN6DNqeC.js.map} +1 -1
  65. package/dist/{telemetry-DN95_2pF.cjs → telemetry-B2iWkY5e.cjs} +5 -7
  66. package/dist/telemetry-B2iWkY5e.cjs.map +1 -0
  67. package/dist/{telemetry-LgT_sdPe.js → telemetry-BkektVz6.js} +6 -8
  68. package/dist/telemetry-BkektVz6.js.map +1 -0
  69. package/dist/validate-BYuHYBhg.cjs +26 -0
  70. package/dist/validate-BYuHYBhg.cjs.map +1 -0
  71. package/dist/validate-Da2LIDVc.js +26 -0
  72. package/dist/validate-Da2LIDVc.js.map +1 -0
  73. package/package.json +22 -14
  74. package/src/commands/agent/start.ts +10 -7
  75. package/src/commands/agent.ts +3 -1
  76. package/src/commands/generate.ts +5 -3
  77. package/src/commands/init.ts +34 -3
  78. package/src/commands/mcp.ts +28 -4
  79. package/src/commands/validate.ts +6 -4
  80. package/src/constants.ts +2 -58
  81. package/src/index.ts +5 -3
  82. package/src/loggers/clackLogger.ts +45 -43
  83. package/src/loggers/fileSystemLogger.ts +26 -13
  84. package/src/loggers/githubActionsLogger.ts +13 -25
  85. package/src/loggers/plainLogger.ts +12 -23
  86. package/src/loggers/types.ts +6 -0
  87. package/src/loggers/utils.ts +155 -9
  88. package/src/runners/agent/run.ts +113 -0
  89. package/src/runners/agent/utils.ts +98 -0
  90. package/src/runners/generate/run.ts +276 -0
  91. package/src/runners/generate/utils.ts +209 -0
  92. package/src/runners/init/run.ts +211 -0
  93. package/src/{utils/packageManager.ts → runners/init/utils.ts} +10 -0
  94. package/src/runners/mcp/run.ts +55 -0
  95. package/src/runners/validate/run.ts +63 -0
  96. package/src/{utils/telemetry.ts → telemetry.ts} +12 -5
  97. package/dist/agent-BEgI2HXH.cjs +0 -58
  98. package/dist/agent-BEgI2HXH.cjs.map +0 -1
  99. package/dist/agent-B_pirbeB.cjs.map +0 -1
  100. package/dist/agent-CTdJEHEs.js +0 -56
  101. package/dist/agent-CTdJEHEs.js.map +0 -1
  102. package/dist/agent-Ev5hU5hH.js.map +0 -1
  103. package/dist/constants-CnDXa1R6.cjs +0 -148
  104. package/dist/constants-CnDXa1R6.cjs.map +0 -1
  105. package/dist/constants-aL3CP_Wq.js +0 -95
  106. package/dist/constants-aL3CP_Wq.js.map +0 -1
  107. package/dist/generate-Cg8yufrw.js.map +0 -1
  108. package/dist/generate-DDCwNQNo.cjs.map +0 -1
  109. package/dist/generate-K8MJ9aQF.cjs.map +0 -1
  110. package/dist/generate-YPtfjsg4.js.map +0 -1
  111. package/dist/init-Bu95ML_u.cjs +0 -25
  112. package/dist/init-Bu95ML_u.cjs.map +0 -1
  113. package/dist/init-CZ5Xq2Hd.cjs.map +0 -1
  114. package/dist/init-eNRlotJK.js.map +0 -1
  115. package/dist/init-ooJeOBGt.js +0 -25
  116. package/dist/init-ooJeOBGt.js.map +0 -1
  117. package/dist/mcp-C-d5N1wZ.js +0 -16
  118. package/dist/mcp-C-d5N1wZ.js.map +0 -1
  119. package/dist/mcp-CLcDV4Jm.cjs +0 -41
  120. package/dist/mcp-CLcDV4Jm.cjs.map +0 -1
  121. package/dist/mcp-D7EIR9fR.js +0 -40
  122. package/dist/mcp-D7EIR9fR.js.map +0 -1
  123. package/dist/mcp-Dpu8vzzj.cjs +0 -16
  124. package/dist/mcp-Dpu8vzzj.cjs.map +0 -1
  125. package/dist/package-D5arPDnh.cjs.map +0 -1
  126. package/dist/package-DqZsMLZ9.js +0 -6
  127. package/dist/package-DqZsMLZ9.js.map +0 -1
  128. package/dist/telemetry-DN95_2pF.cjs.map +0 -1
  129. package/dist/telemetry-LgT_sdPe.js.map +0 -1
  130. package/dist/validate-CIR3_lZI.js +0 -25
  131. package/dist/validate-CIR3_lZI.js.map +0 -1
  132. package/dist/validate-DcqUb4DM.cjs +0 -25
  133. package/dist/validate-DcqUb4DM.cjs.map +0 -1
  134. package/dist/validate-kLJoT_hi.js +0 -33
  135. package/dist/validate-kLJoT_hi.js.map +0 -1
  136. package/dist/validate-yKKzqEZ5.cjs +0 -34
  137. package/dist/validate-yKKzqEZ5.cjs.map +0 -1
  138. package/src/runners/agent.ts +0 -149
  139. package/src/runners/generate.ts +0 -333
  140. package/src/runners/init.ts +0 -296
  141. package/src/runners/mcp.ts +0 -45
  142. package/src/runners/validate.ts +0 -39
  143. package/src/types.ts +0 -11
  144. package/src/utils/Writables.ts +0 -17
  145. package/src/utils/executeHooks.ts +0 -45
  146. package/src/utils/flags.ts +0 -9
  147. package/src/utils/getConfig.ts +0 -10
  148. package/src/utils/getCosmiConfig.ts +0 -80
  149. package/src/utils/getSummary.ts +0 -68
  150. package/src/utils/runHook.ts +0 -91
  151. package/src/utils/watcher.ts +0 -19
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import "./chunk--u3MIqq1.js";
2
- import { t as defineCLIAdapter } from "./define-Ctii4bel.js";
3
- import { n as isTelemetryDisabled } from "./telemetry-LgT_sdPe.js";
4
- import { t as version } from "./package-DqZsMLZ9.js";
5
- import { i as QUIET_FLAGS } from "./constants-aL3CP_Wq.js";
1
+ import "./chunk-BvFE5Tac.js";
2
+ import { t as defineCLIAdapter } from "./define-m_fp-Aqm.js";
3
+ import { n as isTelemetryDisabled } from "./telemetry-BkektVz6.js";
4
+ import { t as version } from "./package-s8PvCnk-.js";
5
+ import { r as QUIET_FLAGS } from "./constants-B2JTeRBb.js";
6
6
  import { parseArgs, styleText } from "node:util";
7
7
  //#region ../../internals/utils/src/cli/schema.ts
8
8
  /**
@@ -23,6 +23,7 @@ function serializeCommand(def) {
23
23
  name: def.name,
24
24
  description: def.description,
25
25
  arguments: def.arguments,
26
+ ...def.examples?.length ? { examples: def.examples } : {},
26
27
  options: serializeOptions(def.options ?? {}),
27
28
  subCommands: def.subCommands ? def.subCommands.map(serializeCommand) : []
28
29
  };
@@ -76,6 +77,11 @@ function renderHelp(def, parentName) {
76
77
  console.log(` ${flags}${opt.description}${defaultPart}`);
77
78
  }
78
79
  console.log();
80
+ if (schema.examples?.length) {
81
+ console.log(styleText("bold", "Examples:"));
82
+ for (const ex of schema.examples) console.log(` ${styleText("dim", ex)}`);
83
+ console.log();
84
+ }
79
85
  }
80
86
  //#endregion
81
87
  //#region ../../internals/utils/src/cli/adapters/nodeAdapter.ts
@@ -132,7 +138,9 @@ async function runCommand(def, argv, parentName) {
132
138
  }
133
139
  function printRootHelp(programName, version, defs) {
134
140
  console.log(`\n${styleText("bold", "Usage:")} ${programName} <command> [options]\n`);
135
- console.log(` Kubb generation — v${version}\n`);
141
+ console.log(` Kubb v${version} — Generate TypeScript types, API clients, React Query hooks,`);
142
+ console.log(` Zod schemas, and more from an OpenAPI specification.\n`);
143
+ console.log(` Quick start: ${styleText("cyan", `${programName} init`)} to scaffold a config, then ${styleText("cyan", `${programName} generate`)} to run.\n`);
136
144
  console.log(styleText("bold", "Commands:"));
137
145
  for (const def of defs) console.log(` ${styleText("cyan", def.name.padEnd(16))}${def.description}`);
138
146
  console.log();
@@ -151,7 +159,8 @@ const nodeAdapter = defineCLIAdapter({
151
159
  },
152
160
  async run(defs, argv, opts) {
153
161
  const { programName, defaultCommandName, version } = opts;
154
- const args = argv.length >= 2 && argv[0]?.includes("node") ? argv.slice(2) : argv;
162
+ const firstArgIsExecutablePath = (argv[0]?.includes("/") || argv[0]?.includes("\\")) ?? false;
163
+ const args = argv.length >= 2 && firstArgIsExecutablePath ? argv.slice(2) : argv;
155
164
  if (args[0] === "--version" || args[0] === "-v") {
156
165
  console.log(version);
157
166
  process.exit(0);
@@ -225,7 +234,7 @@ function createCLI(options) {
225
234
  } };
226
235
  }
227
236
  //#endregion
228
- //#region src/utils/flags.ts
237
+ //#region ../../internals/utils/src/isFlag.ts
229
238
  /**
230
239
  * Type guard that confirms `value` is a member of `set`. Avoids type assertions with `Set<T extends string>`.
231
240
  */
@@ -244,11 +253,11 @@ function shouldShowTelemetryNotice(argv) {
244
253
  }
245
254
  async function run(argv = process.argv) {
246
255
  if (shouldShowTelemetryNotice(argv)) console.log(`${styleText("yellow", "Notice:")} Kubb collects anonymous telemetry data to help improve the tool. No personal data or file contents are collected. \nTo disable, set ${styleText("cyan", "KUBB_DISABLE_TELEMETRY=1")}.\n`);
247
- const { command: generateCommand } = await import("./generate-YPtfjsg4.js");
248
- const { command: validateCommand } = await import("./validate-CIR3_lZI.js");
249
- const { command: mcpCommand } = await import("./mcp-C-d5N1wZ.js");
250
- const { command: agentCommand } = await import("./agent-CTdJEHEs.js");
251
- const { command: initCommand } = await import("./init-ooJeOBGt.js");
256
+ const { command: generateCommand } = await import("./generate-DzC1brc9.js");
257
+ const { command: validateCommand } = await import("./validate-Da2LIDVc.js");
258
+ const { command: mcpCommand } = await import("./mcp-Bm2Q7YdS.js");
259
+ const { command: agentCommand } = await import("./agent-DTeGTNl7.js");
260
+ const { command: initCommand } = await import("./init-BYlb-ua0.js");
252
261
  await cli.run([
253
262
  generateCommand,
254
263
  validateCommand,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../internals/utils/src/cli/schema.ts","../../../internals/utils/src/cli/help.ts","../../../internals/utils/src/cli/adapters/nodeAdapter.ts","../../../internals/utils/src/cli/parse.ts","../src/utils/flags.ts","../src/index.ts"],"sourcesContent":["import type { CommandDefinition, CommandSchema, OptionDefinition, OptionSchema } from './types.ts'\n\n/**\n * Serializes `CommandDefinition[]` to a plain, JSON-serializable structure.\n * Use to expose CLI capabilities to AI agents or MCP tools.\n *\n * @example\n * ```ts\n * getCommandSchema([generateCommand, agentCommand])\n * // [{ name: 'generate', options: [...], subCommands: [] }, ...]\n * ```\n */\nexport function getCommandSchema(defs: CommandDefinition[]): CommandSchema[] {\n return defs.map(serializeCommand)\n}\n\nfunction serializeCommand(def: CommandDefinition): CommandSchema {\n return {\n name: def.name,\n description: def.description,\n arguments: def.arguments,\n options: serializeOptions(def.options ?? {}),\n subCommands: def.subCommands ? def.subCommands.map(serializeCommand) : [],\n }\n}\n\nfunction serializeOptions(options: Record<string, OptionDefinition>): OptionSchema[] {\n return Object.entries(options).map(([name, opt]) => {\n const shortPart = opt.short ? `-${opt.short}, ` : ''\n const valuePart = opt.type === 'string' ? ` <${opt.hint ?? name}>` : ''\n const flags = `${shortPart}--${name}${valuePart}`\n\n return {\n name,\n flags,\n type: opt.type,\n description: opt.description,\n ...(opt.default !== undefined ? { default: opt.default } : {}),\n ...(opt.hint ? { hint: opt.hint } : {}),\n ...(opt.enum ? { enum: opt.enum } : {}),\n ...(opt.required ? { required: opt.required } : {}),\n }\n })\n}\n","import { styleText } from 'node:util'\nimport { getCommandSchema } from './schema.ts'\nimport type { CommandDefinition, OptionSchema } from './types.ts'\n\n/** Prints formatted help output for `def` using its `CommandDefinition`.\n *\n * @example\n * ```ts\n * renderHelp({ name: 'generate', description: 'Generate client code' })\n * // prints Usage: generate [options] ...\n * ```\n */\nexport function renderHelp(def: CommandDefinition, parentName?: string): void {\n const schema = getCommandSchema([def])[0]!\n\n const programName = parentName ? `${parentName} ${schema.name}` : schema.name\n\n const argsPart = schema.arguments?.length ? ` ${schema.arguments.join(' ')}` : ''\n const subCmdPart = schema.subCommands.length ? ' <command>' : ''\n console.log(`\\n${styleText('bold', 'Usage:')} ${programName}${argsPart}${subCmdPart} [options]\\n`)\n\n if (schema.description) {\n console.log(` ${schema.description}\\n`)\n }\n\n if (schema.subCommands.length) {\n console.log(styleText('bold', 'Commands:'))\n for (const sub of schema.subCommands) {\n console.log(` ${styleText('cyan', sub.name.padEnd(16))}${sub.description}`)\n }\n console.log()\n }\n\n const options: OptionSchema[] = [\n ...schema.options,\n {\n name: 'help',\n flags: '-h, --help',\n type: 'boolean' as const,\n description: 'Show help',\n },\n ]\n\n console.log(styleText('bold', 'Options:'))\n for (const opt of options) {\n const flags = styleText('cyan', opt.flags.padEnd(30))\n const defaultPart = opt.default !== undefined ? styleText('dim', ` (default: ${opt.default})`) : ''\n console.log(` ${flags}${opt.description}${defaultPart}`)\n }\n console.log()\n}\n","import { parseArgs, styleText } from 'node:util'\nimport { defineCLIAdapter } from '../define.ts'\nimport { renderHelp } from '../help.ts'\nimport type { CommandDefinition, OptionType, ParsedArgs, RunOptions } from '../types.ts'\n\ntype ParseOption = {\n type: OptionType\n short?: string\n default?: string | boolean\n}\ntype ParseOptions = Record<string, ParseOption>\n\nfunction buildParseOptions(def: CommandDefinition): ParseOptions {\n const result: ParseOptions = {\n help: { type: 'boolean', short: 'h' },\n }\n\n for (const [name, opt] of Object.entries(def.options ?? {})) {\n result[name] = {\n type: opt.type,\n ...(opt.short ? { short: opt.short } : {}),\n ...(opt.default !== undefined ? { default: opt.default } : {}),\n }\n }\n\n return result\n}\n\nasync function runCommand(def: CommandDefinition, argv: string[], parentName?: string): Promise<void> {\n const parseOptions = buildParseOptions(def)\n\n let parsed: ParsedArgs\n try {\n const result = parseArgs({\n args: argv,\n options: parseOptions,\n allowPositionals: true,\n strict: false,\n })\n parsed = {\n values: result.values as ParsedArgs['values'],\n positionals: result.positionals,\n }\n } catch {\n renderHelp(def, parentName)\n process.exit(1)\n }\n\n if (parsed.values['help']) {\n renderHelp(def, parentName)\n process.exit(0)\n }\n\n // Validate required options before running the command\n for (const [name, opt] of Object.entries(def.options ?? {})) {\n if (opt.required && parsed.values[name] === undefined) {\n console.error(styleText('red', `Error: --${name} is required`))\n renderHelp(def, parentName)\n process.exit(1)\n }\n }\n\n if (!def.run) {\n renderHelp(def, parentName)\n process.exit(0)\n }\n\n try {\n await def.run(parsed)\n } catch (err) {\n console.error(styleText('red', `Error: ${err instanceof Error ? err.message : String(err)}`))\n renderHelp(def, parentName)\n process.exit(1)\n }\n}\n\nfunction printRootHelp(programName: string, version: string, defs: CommandDefinition[]): void {\n console.log(`\\n${styleText('bold', 'Usage:')} ${programName} <command> [options]\\n`)\n console.log(` Kubb generation — v${version}\\n`)\n console.log(styleText('bold', 'Commands:'))\n for (const def of defs) {\n console.log(` ${styleText('cyan', def.name.padEnd(16))}${def.description}`)\n }\n console.log()\n console.log(styleText('bold', 'Options:'))\n console.log(` ${styleText('cyan', '-v, --version'.padEnd(30))}Show version number`)\n console.log(` ${styleText('cyan', '-h, --help'.padEnd(30))}Show help`)\n console.log()\n console.log(`Run ${styleText('cyan', `${programName} <command> --help`)} for command-specific help.\\n`)\n}\n\n/**\n * CLI adapter using `node:util parseArgs`. No external dependencies.\n */\nexport const nodeAdapter = defineCLIAdapter({\n renderHelp(def: CommandDefinition, parentName?: string): void {\n renderHelp(def, parentName)\n },\n\n async run(defs: CommandDefinition[], argv: string[], opts: RunOptions): Promise<void> {\n const { programName, defaultCommandName, version } = opts\n\n const args = argv.length >= 2 && argv[0]?.includes('node') ? argv.slice(2) : argv\n\n if (args[0] === '--version' || args[0] === '-v') {\n console.log(version)\n process.exit(0)\n }\n\n if (args[0] === '--help' || args[0] === '-h') {\n printRootHelp(programName, version, defs)\n process.exit(0)\n }\n\n if (args.length === 0) {\n const defaultDef = defs.find((d) => d.name === defaultCommandName)\n if (defaultDef?.run) {\n await runCommand(defaultDef, [], programName)\n } else {\n printRootHelp(programName, version, defs)\n }\n return\n }\n\n const [first, ...rest] = args\n const isKnownSubcommand = defs.some((d) => d.name === first)\n\n let def: CommandDefinition | undefined\n let commandArgv: string[]\n let parentName: string | undefined\n\n if (isKnownSubcommand) {\n def = defs.find((d) => d.name === first)\n commandArgv = rest\n parentName = programName\n } else {\n def = defs.find((d) => d.name === defaultCommandName)\n commandArgv = args\n parentName = programName\n }\n\n if (!def) {\n console.error(`Unknown command: ${first}`)\n printRootHelp(programName, version, defs)\n process.exit(1)\n }\n\n if (def.subCommands?.length) {\n const [subName, ...subRest] = commandArgv\n const subDef = def.subCommands.find((s) => s.name === subName)\n\n if (subName === '--help' || subName === '-h') {\n renderHelp(def, parentName)\n process.exit(0)\n }\n\n if (!subDef) {\n renderHelp(def, parentName)\n process.exit(subName ? 1 : 0)\n }\n\n await runCommand(subDef, subRest, `${parentName} ${def.name}`)\n return\n }\n\n await runCommand(def, commandArgv, parentName)\n },\n})\n","import { nodeAdapter } from './adapters/nodeAdapter.ts'\nimport type { CLIAdapter, CommandDefinition, RunOptions } from './types.ts'\n\n/**\n * Creates a CLI runner bound to a specific adapter.\n *\n * @default nodeAdapter (Node.js `node:util parseArgs`)\n *\n * @example\n * ```ts\n * await createCLI().run(commands, process.argv.slice(2), {\n * programName: 'kubb',\n * defaultCommandName: 'generate',\n * version: '5.0.0',\n * })\n * ```\n */\nexport function createCLI(options?: { adapter?: CLIAdapter }): {\n run(commands: CommandDefinition[], argv: string[], opts: RunOptions): Promise<void>\n} {\n const adapter = options?.adapter ?? nodeAdapter\n\n return {\n run(commands, argv, opts) {\n return adapter.run(commands, argv, opts)\n },\n }\n}\n","/**\n * Type guard that confirms `value` is a member of `set`. Avoids type assertions with `Set<T extends string>`.\n */\nexport function isFlag<T extends string>(set: ReadonlySet<T>, value: string): value is T {\n for (const flag of set) {\n if (flag === value) return true\n }\n return false\n}\n","import { styleText } from 'node:util'\nimport { createCLI } from '@internals/utils'\nimport { version } from '../package.json'\nimport { QUIET_FLAGS } from './constants.ts'\nimport { isFlag } from './utils/flags.ts'\nimport { isTelemetryDisabled } from './utils/telemetry.ts'\n\nconst cli = createCLI()\n\nfunction shouldShowTelemetryNotice(argv: Array<string>): boolean {\n if (isTelemetryDisabled()) {\n return false\n }\n // Skip when the user is just asking for help or version info\n if (argv.some((arg) => isFlag(QUIET_FLAGS, arg))) {\n return false\n }\n // Skip in non-interactive / scripting contexts\n if (!process.stdout.isTTY) {\n return false\n }\n return true\n}\n\nexport async function run(argv: Array<string> = process.argv): Promise<void> {\n if (shouldShowTelemetryNotice(argv)) {\n console.log(\n `${styleText('yellow', 'Notice:')} Kubb collects anonymous telemetry data to help improve the tool. No personal data or file contents are collected. \\nTo disable, set ${styleText('cyan', 'KUBB_DISABLE_TELEMETRY=1')}.\\n`,\n )\n }\n\n const { command: generateCommand } = await import('./commands/generate.ts')\n const { command: validateCommand } = await import('./commands/validate.ts')\n const { command: mcpCommand } = await import('./commands/mcp.ts')\n const { command: agentCommand } = await import('./commands/agent.ts')\n const { command: initCommand } = await import('./commands/init.ts')\n\n await cli.run([generateCommand, validateCommand, mcpCommand, agentCommand, initCommand], argv, {\n programName: 'kubb',\n defaultCommandName: 'generate',\n version,\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../internals/utils/src/cli/schema.ts","../../../internals/utils/src/cli/help.ts","../../../internals/utils/src/cli/adapters/nodeAdapter.ts","../../../internals/utils/src/cli/parse.ts","../../../internals/utils/src/isFlag.ts","../src/index.ts"],"sourcesContent":["import type { CommandDefinition, CommandSchema, OptionDefinition, OptionSchema } from './types.ts'\n\n/**\n * Serializes `CommandDefinition[]` to a plain, JSON-serializable structure.\n * Use to expose CLI capabilities to AI agents or MCP tools.\n *\n * @example\n * ```ts\n * getCommandSchema([generateCommand, agentCommand])\n * // [{ name: 'generate', options: [...], subCommands: [] }, ...]\n * ```\n */\nexport function getCommandSchema(defs: CommandDefinition[]): CommandSchema[] {\n return defs.map(serializeCommand)\n}\n\nfunction serializeCommand(def: CommandDefinition): CommandSchema {\n return {\n name: def.name,\n description: def.description,\n arguments: def.arguments,\n ...(def.examples?.length ? { examples: def.examples } : {}),\n options: serializeOptions(def.options ?? {}),\n subCommands: def.subCommands ? def.subCommands.map(serializeCommand) : [],\n }\n}\n\nfunction serializeOptions(options: Record<string, OptionDefinition>): OptionSchema[] {\n return Object.entries(options).map(([name, opt]) => {\n const shortPart = opt.short ? `-${opt.short}, ` : ''\n const valuePart = opt.type === 'string' ? ` <${opt.hint ?? name}>` : ''\n const flags = `${shortPart}--${name}${valuePart}`\n\n return {\n name,\n flags,\n type: opt.type,\n description: opt.description,\n ...(opt.default !== undefined ? { default: opt.default } : {}),\n ...(opt.hint ? { hint: opt.hint } : {}),\n ...(opt.enum ? { enum: opt.enum } : {}),\n ...(opt.required ? { required: opt.required } : {}),\n }\n })\n}\n","import { styleText } from 'node:util'\nimport { getCommandSchema } from './schema.ts'\nimport type { CommandDefinition, OptionSchema } from './types.ts'\n\n/** Prints formatted help output for `def` using its `CommandDefinition`.\n *\n * @example\n * ```ts\n * renderHelp({ name: 'generate', description: 'Generate client code' })\n * // prints Usage: generate [options] ...\n * ```\n */\nexport function renderHelp(def: CommandDefinition, parentName?: string): void {\n const schema = getCommandSchema([def])[0]!\n\n const programName = parentName ? `${parentName} ${schema.name}` : schema.name\n\n const argsPart = schema.arguments?.length ? ` ${schema.arguments.join(' ')}` : ''\n const subCmdPart = schema.subCommands.length ? ' <command>' : ''\n console.log(`\\n${styleText('bold', 'Usage:')} ${programName}${argsPart}${subCmdPart} [options]\\n`)\n\n if (schema.description) {\n console.log(` ${schema.description}\\n`)\n }\n\n if (schema.subCommands.length) {\n console.log(styleText('bold', 'Commands:'))\n for (const sub of schema.subCommands) {\n console.log(` ${styleText('cyan', sub.name.padEnd(16))}${sub.description}`)\n }\n console.log()\n }\n\n const options: OptionSchema[] = [\n ...schema.options,\n {\n name: 'help',\n flags: '-h, --help',\n type: 'boolean' as const,\n description: 'Show help',\n },\n ]\n\n console.log(styleText('bold', 'Options:'))\n for (const opt of options) {\n const flags = styleText('cyan', opt.flags.padEnd(30))\n const defaultPart = opt.default !== undefined ? styleText('dim', ` (default: ${opt.default})`) : ''\n console.log(` ${flags}${opt.description}${defaultPart}`)\n }\n console.log()\n\n if (schema.examples?.length) {\n console.log(styleText('bold', 'Examples:'))\n for (const ex of schema.examples) {\n console.log(` ${styleText('dim', ex)}`)\n }\n console.log()\n }\n}\n","import { parseArgs, styleText } from 'node:util'\nimport { defineCLIAdapter } from '../define.ts'\nimport { renderHelp } from '../help.ts'\nimport type { CommandDefinition, OptionType, ParsedArgs, RunOptions } from '../types.ts'\n\ntype ParseOption = {\n type: OptionType\n short?: string\n default?: string | boolean\n}\ntype ParseOptions = Record<string, ParseOption>\n\nfunction buildParseOptions(def: CommandDefinition): ParseOptions {\n const result: ParseOptions = {\n help: { type: 'boolean', short: 'h' },\n }\n\n for (const [name, opt] of Object.entries(def.options ?? {})) {\n result[name] = {\n type: opt.type,\n ...(opt.short ? { short: opt.short } : {}),\n ...(opt.default !== undefined ? { default: opt.default } : {}),\n }\n }\n\n return result\n}\n\nasync function runCommand(def: CommandDefinition, argv: string[], parentName?: string): Promise<void> {\n const parseOptions = buildParseOptions(def)\n\n let parsed: ParsedArgs\n try {\n const result = parseArgs({\n args: argv,\n options: parseOptions,\n allowPositionals: true,\n strict: false,\n })\n parsed = {\n values: result.values as ParsedArgs['values'],\n positionals: result.positionals,\n }\n } catch {\n renderHelp(def, parentName)\n process.exit(1)\n }\n\n if (parsed.values['help']) {\n renderHelp(def, parentName)\n process.exit(0)\n }\n\n // Validate required options before running the command\n for (const [name, opt] of Object.entries(def.options ?? {})) {\n if (opt.required && parsed.values[name] === undefined) {\n console.error(styleText('red', `Error: --${name} is required`))\n renderHelp(def, parentName)\n process.exit(1)\n }\n }\n\n if (!def.run) {\n renderHelp(def, parentName)\n process.exit(0)\n }\n\n try {\n await def.run(parsed)\n } catch (err) {\n console.error(styleText('red', `Error: ${err instanceof Error ? err.message : String(err)}`))\n renderHelp(def, parentName)\n process.exit(1)\n }\n}\n\nfunction printRootHelp(programName: string, version: string, defs: CommandDefinition[]): void {\n console.log(`\\n${styleText('bold', 'Usage:')} ${programName} <command> [options]\\n`)\n console.log(` Kubb v${version} — Generate TypeScript types, API clients, React Query hooks,`)\n console.log(` Zod schemas, and more from an OpenAPI specification.\\n`)\n console.log(` Quick start: ${styleText('cyan', `${programName} init`)} to scaffold a config, then ${styleText('cyan', `${programName} generate`)} to run.\\n`)\n console.log(styleText('bold', 'Commands:'))\n for (const def of defs) {\n console.log(` ${styleText('cyan', def.name.padEnd(16))}${def.description}`)\n }\n console.log()\n console.log(styleText('bold', 'Options:'))\n console.log(` ${styleText('cyan', '-v, --version'.padEnd(30))}Show version number`)\n console.log(` ${styleText('cyan', '-h, --help'.padEnd(30))}Show help`)\n console.log()\n console.log(`Run ${styleText('cyan', `${programName} <command> --help`)} for command-specific help.\\n`)\n}\n\n/**\n * CLI adapter using `node:util parseArgs`. No external dependencies.\n */\nexport const nodeAdapter = defineCLIAdapter({\n renderHelp(def: CommandDefinition, parentName?: string): void {\n renderHelp(def, parentName)\n },\n\n async run(defs: CommandDefinition[], argv: string[], opts: RunOptions): Promise<void> {\n const { programName, defaultCommandName, version } = opts\n\n // Strip the leading executable + script entries when process.argv is passed directly.\n // Handles Node.js (/usr/bin/node), Bun (/usr/local/bin/bun), Deno, tsx, etc.\n // All runtime executable paths contain a path separator; bare command names do not.\n const firstArgIsExecutablePath = (argv[0]?.includes('/') || argv[0]?.includes('\\\\')) ?? false\n const args = argv.length >= 2 && firstArgIsExecutablePath ? argv.slice(2) : argv\n\n if (args[0] === '--version' || args[0] === '-v') {\n console.log(version)\n process.exit(0)\n }\n\n if (args[0] === '--help' || args[0] === '-h') {\n printRootHelp(programName, version, defs)\n process.exit(0)\n }\n\n if (args.length === 0) {\n const defaultDef = defs.find((d) => d.name === defaultCommandName)\n if (defaultDef?.run) {\n await runCommand(defaultDef, [], programName)\n } else {\n printRootHelp(programName, version, defs)\n }\n return\n }\n\n const [first, ...rest] = args\n const isKnownSubcommand = defs.some((d) => d.name === first)\n\n let def: CommandDefinition | undefined\n let commandArgv: string[]\n let parentName: string | undefined\n\n if (isKnownSubcommand) {\n def = defs.find((d) => d.name === first)\n commandArgv = rest\n parentName = programName\n } else {\n def = defs.find((d) => d.name === defaultCommandName)\n commandArgv = args\n parentName = programName\n }\n\n if (!def) {\n console.error(`Unknown command: ${first}`)\n printRootHelp(programName, version, defs)\n process.exit(1)\n }\n\n if (def.subCommands?.length) {\n const [subName, ...subRest] = commandArgv\n const subDef = def.subCommands.find((s) => s.name === subName)\n\n if (subName === '--help' || subName === '-h') {\n renderHelp(def, parentName)\n process.exit(0)\n }\n\n if (!subDef) {\n renderHelp(def, parentName)\n process.exit(subName ? 1 : 0)\n }\n\n await runCommand(subDef, subRest, `${parentName} ${def.name}`)\n return\n }\n\n await runCommand(def, commandArgv, parentName)\n },\n})\n","import { nodeAdapter } from './adapters/nodeAdapter.ts'\nimport type { CLIAdapter, CommandDefinition, RunOptions } from './types.ts'\n\n/**\n * Creates a CLI runner bound to a specific adapter.\n *\n * @default nodeAdapter (Node.js `node:util parseArgs`)\n *\n * @example\n * ```ts\n * await createCLI().run(commands, process.argv.slice(2), {\n * programName: 'kubb',\n * defaultCommandName: 'generate',\n * version: '5.0.0',\n * })\n * ```\n */\nexport function createCLI(options?: { adapter?: CLIAdapter }): {\n run(commands: CommandDefinition[], argv: string[], opts: RunOptions): Promise<void>\n} {\n const adapter = options?.adapter ?? nodeAdapter\n\n return {\n run(commands, argv, opts) {\n return adapter.run(commands, argv, opts)\n },\n }\n}\n","/**\n * Type guard that confirms `value` is a member of `set`. Avoids type assertions with `Set<T extends string>`.\n */\nexport function isFlag<T extends string>(set: ReadonlySet<T>, value: string): value is T {\n for (const flag of set) {\n if (flag === value) return true\n }\n return false\n}\n","import { styleText } from 'node:util'\nimport { createCLI, isFlag } from '@internals/utils'\nimport { version } from '../package.json'\nimport { QUIET_FLAGS } from './constants.ts'\nimport { isTelemetryDisabled } from './telemetry.ts'\n\nconst cli = createCLI()\n\nfunction shouldShowTelemetryNotice(argv: Array<string>): boolean {\n if (isTelemetryDisabled()) {\n return false\n }\n\n // Skip when the user is just asking for help or version info\n if (argv.some((arg) => isFlag(QUIET_FLAGS, arg))) {\n return false\n }\n\n // Skip in non-interactive / scripting contexts\n if (!process.stdout.isTTY) {\n return false\n }\n\n return true\n}\n\nexport async function run(argv: Array<string> = process.argv): Promise<void> {\n if (shouldShowTelemetryNotice(argv)) {\n console.log(\n `${styleText('yellow', 'Notice:')} Kubb collects anonymous telemetry data to help improve the tool. No personal data or file contents are collected. \\nTo disable, set ${styleText('cyan', 'KUBB_DISABLE_TELEMETRY=1')}.\\n`,\n )\n }\n\n const { command: generateCommand } = await import('./commands/generate.ts')\n const { command: validateCommand } = await import('./commands/validate.ts')\n const { command: mcpCommand } = await import('./commands/mcp.ts')\n const { command: agentCommand } = await import('./commands/agent.ts')\n const { command: initCommand } = await import('./commands/init.ts')\n\n await cli.run([generateCommand, validateCommand, mcpCommand, agentCommand, initCommand], argv, {\n programName: 'kubb',\n defaultCommandName: 'generate',\n version,\n })\n}\n"],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ require("./chunk-ByKO4r7w.cjs");
2
+ const require_define = require("./define-Bdn8j5VM.cjs");
3
+ const require_package = require("./package-BvBzYG6c.cjs");
4
+ //#region src/commands/init.ts
5
+ const command = require_define.defineCommand({
6
+ name: "init",
7
+ description: "Scaffold a kubb.config.ts and install plugins for code generation from an OpenAPI spec. Run without flags for interactive setup, or pass --input, --output, and --plugins to skip the prompts.",
8
+ examples: [
9
+ "kubb init",
10
+ "kubb init --yes",
11
+ "kubb init --input ./openapi.yaml --output ./src/gen --plugins plugin-ts,plugin-zod",
12
+ "kubb init --plugins plugin-ts,plugin-client,plugin-react-query"
13
+ ],
14
+ options: {
15
+ yes: {
16
+ type: "boolean",
17
+ description: "Skip prompts and use default options",
18
+ short: "y",
19
+ default: false
20
+ },
21
+ input: {
22
+ type: "string",
23
+ description: "Path to the OpenAPI specification",
24
+ short: "i",
25
+ hint: "path"
26
+ },
27
+ output: {
28
+ type: "string",
29
+ description: "Output directory for generated files",
30
+ short: "o",
31
+ hint: "path"
32
+ },
33
+ plugins: {
34
+ type: "string",
35
+ description: "Comma-separated list of plugins to use (plugin-ts, plugin-client, plugin-react-query, plugin-vue-query, plugin-zod, plugin-faker, plugin-msw, plugin-cypress, plugin-mcp, plugin-redoc)",
36
+ hint: "plugin-ts,plugin-zod,..."
37
+ }
38
+ },
39
+ async run({ values }) {
40
+ const { run } = await Promise.resolve().then(() => require("./run-YsoCk5we.cjs"));
41
+ await run({
42
+ yes: values.yes,
43
+ version: require_package.version,
44
+ input: values.input,
45
+ output: values.output,
46
+ plugins: values.plugins
47
+ });
48
+ }
49
+ });
50
+ //#endregion
51
+ exports.command = command;
52
+
53
+ //# sourceMappingURL=init-BVYkUQ-b.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-BVYkUQ-b.cjs","names":["defineCommand"],"sources":["../src/commands/init.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\nimport { version } from '../../package.json'\n\nexport const command = defineCommand({\n name: 'init',\n description:\n 'Scaffold a kubb.config.ts and install plugins for code generation from an OpenAPI spec. Run without flags for interactive setup, or pass --input, --output, and --plugins to skip the prompts.',\n examples: [\n 'kubb init',\n 'kubb init --yes',\n 'kubb init --input ./openapi.yaml --output ./src/gen --plugins plugin-ts,plugin-zod',\n 'kubb init --plugins plugin-ts,plugin-client,plugin-react-query',\n ],\n options: {\n yes: {\n type: 'boolean',\n description: 'Skip prompts and use default options',\n short: 'y',\n default: false,\n },\n input: {\n type: 'string',\n description: 'Path to the OpenAPI specification',\n short: 'i',\n hint: 'path',\n },\n output: {\n type: 'string',\n description: 'Output directory for generated files',\n short: 'o',\n hint: 'path',\n },\n plugins: {\n type: 'string',\n description:\n 'Comma-separated list of plugins to use (plugin-ts, plugin-client, plugin-react-query, plugin-vue-query, plugin-zod, plugin-faker, plugin-msw, plugin-cypress, plugin-mcp, plugin-redoc)',\n hint: 'plugin-ts,plugin-zod,...',\n },\n },\n async run({ values }) {\n const { run } = await import('../runners/init/run.ts')\n\n await run({\n yes: values.yes,\n version,\n input: values.input,\n output: values.output,\n plugins: values.plugins,\n })\n },\n})\n"],"mappings":";;;;AAGA,MAAa,UAAUA,eAAAA,cAAc;CACnC,MAAM;CACN,aACE;CACF,UAAU;EACR;EACA;EACA;EACA;EACD;CACD,SAAS;EACP,KAAK;GACH,MAAM;GACN,aAAa;GACb,OAAO;GACP,SAAS;GACV;EACD,OAAO;GACL,MAAM;GACN,aAAa;GACb,OAAO;GACP,MAAM;GACP;EACD,QAAQ;GACN,MAAM;GACN,aAAa;GACb,OAAO;GACP,MAAM;GACP;EACD,SAAS;GACP,MAAM;GACN,aACE;GACF,MAAM;GACP;EACF;CACD,MAAM,IAAI,EAAE,UAAU;EACpB,MAAM,EAAE,QAAQ,MAAA,QAAA,SAAA,CAAA,WAAA,QAAM,qBAAA,CAAA;EAEtB,MAAM,IAAI;GACR,KAAK,OAAO;GACZ,SAAA,gBAAA;GACA,OAAO,OAAO;GACd,QAAQ,OAAO;GACf,SAAS,OAAO;GACjB,CAAC;;CAEL,CAAC"}
@@ -0,0 +1,53 @@
1
+ import "./chunk-BvFE5Tac.js";
2
+ import { n as defineCommand } from "./define-m_fp-Aqm.js";
3
+ import { t as version } from "./package-s8PvCnk-.js";
4
+ //#region src/commands/init.ts
5
+ const command = defineCommand({
6
+ name: "init",
7
+ description: "Scaffold a kubb.config.ts and install plugins for code generation from an OpenAPI spec. Run without flags for interactive setup, or pass --input, --output, and --plugins to skip the prompts.",
8
+ examples: [
9
+ "kubb init",
10
+ "kubb init --yes",
11
+ "kubb init --input ./openapi.yaml --output ./src/gen --plugins plugin-ts,plugin-zod",
12
+ "kubb init --plugins plugin-ts,plugin-client,plugin-react-query"
13
+ ],
14
+ options: {
15
+ yes: {
16
+ type: "boolean",
17
+ description: "Skip prompts and use default options",
18
+ short: "y",
19
+ default: false
20
+ },
21
+ input: {
22
+ type: "string",
23
+ description: "Path to the OpenAPI specification",
24
+ short: "i",
25
+ hint: "path"
26
+ },
27
+ output: {
28
+ type: "string",
29
+ description: "Output directory for generated files",
30
+ short: "o",
31
+ hint: "path"
32
+ },
33
+ plugins: {
34
+ type: "string",
35
+ description: "Comma-separated list of plugins to use (plugin-ts, plugin-client, plugin-react-query, plugin-vue-query, plugin-zod, plugin-faker, plugin-msw, plugin-cypress, plugin-mcp, plugin-redoc)",
36
+ hint: "plugin-ts,plugin-zod,..."
37
+ }
38
+ },
39
+ async run({ values }) {
40
+ const { run } = await import("./run-CF97BWVa.js");
41
+ await run({
42
+ yes: values.yes,
43
+ version,
44
+ input: values.input,
45
+ output: values.output,
46
+ plugins: values.plugins
47
+ });
48
+ }
49
+ });
50
+ //#endregion
51
+ export { command };
52
+
53
+ //# sourceMappingURL=init-BYlb-ua0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-BYlb-ua0.js","names":[],"sources":["../src/commands/init.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\nimport { version } from '../../package.json'\n\nexport const command = defineCommand({\n name: 'init',\n description:\n 'Scaffold a kubb.config.ts and install plugins for code generation from an OpenAPI spec. Run without flags for interactive setup, or pass --input, --output, and --plugins to skip the prompts.',\n examples: [\n 'kubb init',\n 'kubb init --yes',\n 'kubb init --input ./openapi.yaml --output ./src/gen --plugins plugin-ts,plugin-zod',\n 'kubb init --plugins plugin-ts,plugin-client,plugin-react-query',\n ],\n options: {\n yes: {\n type: 'boolean',\n description: 'Skip prompts and use default options',\n short: 'y',\n default: false,\n },\n input: {\n type: 'string',\n description: 'Path to the OpenAPI specification',\n short: 'i',\n hint: 'path',\n },\n output: {\n type: 'string',\n description: 'Output directory for generated files',\n short: 'o',\n hint: 'path',\n },\n plugins: {\n type: 'string',\n description:\n 'Comma-separated list of plugins to use (plugin-ts, plugin-client, plugin-react-query, plugin-vue-query, plugin-zod, plugin-faker, plugin-msw, plugin-cypress, plugin-mcp, plugin-redoc)',\n hint: 'plugin-ts,plugin-zod,...',\n },\n },\n async run({ values }) {\n const { run } = await import('../runners/init/run.ts')\n\n await run({\n yes: values.yes,\n version,\n input: values.input,\n output: values.output,\n plugins: values.plugins,\n })\n },\n})\n"],"mappings":";;;;AAGA,MAAa,UAAU,cAAc;CACnC,MAAM;CACN,aACE;CACF,UAAU;EACR;EACA;EACA;EACA;EACD;CACD,SAAS;EACP,KAAK;GACH,MAAM;GACN,aAAa;GACb,OAAO;GACP,SAAS;GACV;EACD,OAAO;GACL,MAAM;GACN,aAAa;GACb,OAAO;GACP,MAAM;GACP;EACD,QAAQ;GACN,MAAM;GACN,aAAa;GACb,OAAO;GACP,MAAM;GACP;EACD,SAAS;GACP,MAAM;GACN,aACE;GACF,MAAM;GACP;EACF;CACD,MAAM,IAAI,EAAE,UAAU;EACpB,MAAM,EAAE,QAAQ,MAAM,OAAO;EAE7B,MAAM,IAAI;GACR,KAAK,OAAO;GACZ;GACA,OAAO,OAAO;GACd,QAAQ,OAAO;GACf,SAAS,OAAO;GACjB,CAAC;;CAEL,CAAC"}
@@ -0,0 +1,39 @@
1
+ import "./chunk-BvFE5Tac.js";
2
+ import { n as defineCommand } from "./define-m_fp-Aqm.js";
3
+ import { t as version } from "./package-s8PvCnk-.js";
4
+ //#region src/commands/mcp.ts
5
+ const command = defineCommand({
6
+ name: "mcp",
7
+ description: "Start a Model Context Protocol (MCP) server that exposes Kubb code generation as tools for AI assistants. Once running, configure your AI client (Claude, Cursor, Windsurf, etc.) to connect to it — the assistant can then call kubb generate directly without leaving the chat.",
8
+ examples: [
9
+ "kubb mcp",
10
+ "kubb mcp --port 3001",
11
+ "# Then add to your MCP client config:",
12
+ "# { \"mcpServers\": { \"kubb\": { \"command\": \"npx\", \"args\": [\"kubb\", \"mcp\"] } } }"
13
+ ],
14
+ options: {
15
+ port: {
16
+ type: "string",
17
+ short: "p",
18
+ description: "Port for HTTP MCP server (omit for stdio)",
19
+ hint: "number"
20
+ },
21
+ host: {
22
+ type: "string",
23
+ description: "Hostname to bind to (HTTP mode only)",
24
+ default: "localhost"
25
+ }
26
+ },
27
+ async run({ values }) {
28
+ const { run } = await import("./run-D0hmRpHy.js");
29
+ await run({
30
+ version,
31
+ port: values.port,
32
+ host: values.host
33
+ });
34
+ }
35
+ });
36
+ //#endregion
37
+ export { command };
38
+
39
+ //# sourceMappingURL=mcp-Bm2Q7YdS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-Bm2Q7YdS.js","names":[],"sources":["../src/commands/mcp.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\nimport { version } from '../../package.json'\n\nexport const command = defineCommand({\n name: 'mcp',\n description:\n 'Start a Model Context Protocol (MCP) server that exposes Kubb code generation as tools for AI assistants. Once running, configure your AI client (Claude, Cursor, Windsurf, etc.) to connect to it — the assistant can then call kubb generate directly without leaving the chat.',\n examples: [\n 'kubb mcp',\n 'kubb mcp --port 3001',\n '# Then add to your MCP client config:',\n '# { \"mcpServers\": { \"kubb\": { \"command\": \"npx\", \"args\": [\"kubb\", \"mcp\"] } } }',\n ],\n options: {\n port: {\n type: 'string',\n short: 'p',\n description: 'Port for HTTP MCP server (omit for stdio)',\n hint: 'number',\n },\n host: {\n type: 'string',\n description: 'Hostname to bind to (HTTP mode only)',\n default: 'localhost',\n },\n },\n async run({ values }) {\n const { run } = await import('../runners/mcp/run.ts')\n\n await run({\n version,\n port: values.port,\n host: values.host,\n })\n },\n})\n"],"mappings":";;;;AAGA,MAAa,UAAU,cAAc;CACnC,MAAM;CACN,aACE;CACF,UAAU;EACR;EACA;EACA;EACA;EACD;CACD,SAAS;EACP,MAAM;GACJ,MAAM;GACN,OAAO;GACP,aAAa;GACb,MAAM;GACP;EACD,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;GACV;EACF;CACD,MAAM,IAAI,EAAE,UAAU;EACpB,MAAM,EAAE,QAAQ,MAAM,OAAO;EAE7B,MAAM,IAAI;GACR;GACA,MAAM,OAAO;GACb,MAAM,OAAO;GACd,CAAC;;CAEL,CAAC"}
@@ -0,0 +1,39 @@
1
+ require("./chunk-ByKO4r7w.cjs");
2
+ const require_define = require("./define-Bdn8j5VM.cjs");
3
+ const require_package = require("./package-BvBzYG6c.cjs");
4
+ //#region src/commands/mcp.ts
5
+ const command = require_define.defineCommand({
6
+ name: "mcp",
7
+ description: "Start a Model Context Protocol (MCP) server that exposes Kubb code generation as tools for AI assistants. Once running, configure your AI client (Claude, Cursor, Windsurf, etc.) to connect to it — the assistant can then call kubb generate directly without leaving the chat.",
8
+ examples: [
9
+ "kubb mcp",
10
+ "kubb mcp --port 3001",
11
+ "# Then add to your MCP client config:",
12
+ "# { \"mcpServers\": { \"kubb\": { \"command\": \"npx\", \"args\": [\"kubb\", \"mcp\"] } } }"
13
+ ],
14
+ options: {
15
+ port: {
16
+ type: "string",
17
+ short: "p",
18
+ description: "Port for HTTP MCP server (omit for stdio)",
19
+ hint: "number"
20
+ },
21
+ host: {
22
+ type: "string",
23
+ description: "Hostname to bind to (HTTP mode only)",
24
+ default: "localhost"
25
+ }
26
+ },
27
+ async run({ values }) {
28
+ const { run } = await Promise.resolve().then(() => require("./run-Lr0Ctnu0.cjs"));
29
+ await run({
30
+ version: require_package.version,
31
+ port: values.port,
32
+ host: values.host
33
+ });
34
+ }
35
+ });
36
+ //#endregion
37
+ exports.command = command;
38
+
39
+ //# sourceMappingURL=mcp-CiNoagVX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-CiNoagVX.cjs","names":["defineCommand"],"sources":["../src/commands/mcp.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\nimport { version } from '../../package.json'\n\nexport const command = defineCommand({\n name: 'mcp',\n description:\n 'Start a Model Context Protocol (MCP) server that exposes Kubb code generation as tools for AI assistants. Once running, configure your AI client (Claude, Cursor, Windsurf, etc.) to connect to it — the assistant can then call kubb generate directly without leaving the chat.',\n examples: [\n 'kubb mcp',\n 'kubb mcp --port 3001',\n '# Then add to your MCP client config:',\n '# { \"mcpServers\": { \"kubb\": { \"command\": \"npx\", \"args\": [\"kubb\", \"mcp\"] } } }',\n ],\n options: {\n port: {\n type: 'string',\n short: 'p',\n description: 'Port for HTTP MCP server (omit for stdio)',\n hint: 'number',\n },\n host: {\n type: 'string',\n description: 'Hostname to bind to (HTTP mode only)',\n default: 'localhost',\n },\n },\n async run({ values }) {\n const { run } = await import('../runners/mcp/run.ts')\n\n await run({\n version,\n port: values.port,\n host: values.host,\n })\n },\n})\n"],"mappings":";;;;AAGA,MAAa,UAAUA,eAAAA,cAAc;CACnC,MAAM;CACN,aACE;CACF,UAAU;EACR;EACA;EACA;EACA;EACD;CACD,SAAS;EACP,MAAM;GACJ,MAAM;GACN,OAAO;GACP,aAAa;GACb,MAAM;GACP;EACD,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;GACV;EACF;CACD,MAAM,IAAI,EAAE,UAAU;EACpB,MAAM,EAAE,QAAQ,MAAA,QAAA,SAAA,CAAA,WAAA,QAAM,qBAAA,CAAA;EAEtB,MAAM,IAAI;GACR,SAAA,gBAAA;GACA,MAAM,OAAO;GACb,MAAM,OAAO;GACd,CAAC;;CAEL,CAAC"}
@@ -1,5 +1,5 @@
1
1
  //#region package.json
2
- var version = "5.0.0-beta.75";
2
+ var version = "5.0.0-beta.8";
3
3
  //#endregion
4
4
  Object.defineProperty(exports, "version", {
5
5
  enumerable: true,
@@ -8,4 +8,4 @@ Object.defineProperty(exports, "version", {
8
8
  }
9
9
  });
10
10
 
11
- //# sourceMappingURL=package-D5arPDnh.cjs.map
11
+ //# sourceMappingURL=package-BvBzYG6c.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-BvBzYG6c.cjs","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
@@ -0,0 +1,6 @@
1
+ //#region package.json
2
+ var version = "5.0.0-beta.8";
3
+ //#endregion
4
+ export { version as t };
5
+
6
+ //# sourceMappingURL=package-s8PvCnk-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-s8PvCnk-.js","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
@@ -1,24 +1,25 @@
1
- import "./chunk--u3MIqq1.js";
2
- import { r as sendTelemetry, t as buildTelemetryEvent } from "./telemetry-LgT_sdPe.js";
3
- import { t as spawnAsync } from "./shell-DLzN4fRo.js";
4
- import { s as agentDefaults } from "./constants-aL3CP_Wq.js";
1
+ import "./chunk-BvFE5Tac.js";
2
+ import { t as getErrorMessage } from "./errors-CINO1EIv.js";
3
+ import { r as sendTelemetry, t as buildTelemetryEvent } from "./telemetry-BkektVz6.js";
4
+ import { t as spawnAsync } from "./shell-CN6DNqeC.js";
5
+ import { o as agentDefaults } from "./constants-B2JTeRBb.js";
6
+ import { createRequire } from "node:module";
5
7
  import { styleText } from "node:util";
6
8
  import path from "node:path";
7
- import * as process$1 from "node:process";
8
- import net from "node:net";
9
- import { fileURLToPath } from "node:url";
9
+ import process from "node:process";
10
10
  import * as clack from "@clack/prompts";
11
- //#region src/runners/agent.ts
11
+ import net from "node:net";
12
+ //#region src/runners/agent/utils.ts
12
13
  /**
13
14
  * Resolves the environment passed to the detached agent process using CLI values first, then environment values, then CLI defaults.
14
15
  */
15
16
  function resolveAgentStartEnvironment({ port, host, configPath, allowWrite, allowAll }) {
16
- const resolvedPort = port ?? process$1.env.PORT ?? agentDefaults.port;
17
- const resolvedHost = host !== agentDefaults.host ? host : process$1.env.HOST ?? agentDefaults.host;
18
- const resolvedAllowAll = allowAll || process$1.env.KUBB_AGENT_ALLOW_ALL === "true";
19
- const resolvedAllowWrite = resolvedAllowAll || allowWrite || process$1.env.KUBB_AGENT_ALLOW_WRITE === "true";
20
- const agentRoot = process$1.env.KUBB_AGENT_ROOT ?? process$1.cwd();
21
- const agentConfigPath = path.resolve(process$1.cwd(), configPath || process$1.env.KUBB_AGENT_CONFIG || agentDefaults.configFile);
17
+ const resolvedPort = port ?? process.env.PORT ?? agentDefaults.port;
18
+ const resolvedHost = host !== agentDefaults.host ? host : process.env.HOST ?? agentDefaults.host;
19
+ const resolvedAllowAll = allowAll || process.env.KUBB_AGENT_ALLOW_ALL === "true";
20
+ const resolvedAllowWrite = resolvedAllowAll || allowWrite || process.env.KUBB_AGENT_ALLOW_WRITE === "true";
21
+ const agentRoot = process.env.KUBB_AGENT_ROOT ?? process.cwd();
22
+ const agentConfigPath = path.resolve(process.cwd(), configPath || process.env.KUBB_AGENT_CONFIG || agentDefaults.configFile);
22
23
  return {
23
24
  port: resolvedPort,
24
25
  host: resolvedHost,
@@ -26,16 +27,16 @@ function resolveAgentStartEnvironment({ port, host, configPath, allowWrite, allo
26
27
  allowAll: resolvedAllowAll,
27
28
  agentConfigPath,
28
29
  env: {
29
- ...process$1.env,
30
+ ...process.env,
30
31
  PORT: resolvedPort,
31
32
  HOST: resolvedHost,
32
33
  KUBB_AGENT_ROOT: agentRoot,
33
34
  KUBB_AGENT_CONFIG: agentConfigPath,
34
35
  KUBB_AGENT_ALLOW_WRITE: String(resolvedAllowWrite),
35
36
  KUBB_AGENT_ALLOW_ALL: String(resolvedAllowAll),
36
- KUBB_AGENT_TOKEN: process$1.env.KUBB_AGENT_TOKEN,
37
- KUBB_AGENT_RETRY_TIMEOUT: process$1.env.KUBB_AGENT_RETRY_TIMEOUT ?? agentDefaults.retryTimeout,
38
- KUBB_STUDIO_URL: process$1.env.KUBB_STUDIO_URL ?? agentDefaults.studioUrl
37
+ KUBB_AGENT_TOKEN: process.env.KUBB_AGENT_TOKEN,
38
+ KUBB_AGENT_RETRY_TIMEOUT: process.env.KUBB_AGENT_RETRY_TIMEOUT ?? agentDefaults.retryTimeout,
39
+ KUBB_STUDIO_URL: process.env.KUBB_STUDIO_URL ?? agentDefaults.studioUrl
39
40
  }
40
41
  };
41
42
  }
@@ -50,20 +51,38 @@ function isPortAvailable(port, host) {
50
51
  server.listen(port, host);
51
52
  });
52
53
  }
53
- async function runAgentStart({ port, host, configPath, allowWrite, allowAll, version }) {
54
- const hrStart = process$1.hrtime();
54
+ //#endregion
55
+ //#region src/runners/agent/run.ts
56
+ /**
57
+ * Spawns the Kubb Agent HTTP server as a Node.js subprocess.
58
+ * Resolves config from CLI flags and environment variables, validates the port, and exits with code 1 on failure.
59
+ */
60
+ async function run({ port, host, configPath, allowWrite, allowAll, version }) {
61
+ const hrStart = process.hrtime();
62
+ const report = (status) => sendTelemetry(buildTelemetryEvent({
63
+ command: "agent",
64
+ kubbVersion: version,
65
+ hrStart,
66
+ status
67
+ }));
55
68
  try {
56
69
  try {
57
- process$1.loadEnvFile();
70
+ process.loadEnvFile();
58
71
  } catch {}
59
- let agentPkgUrl;
72
+ const require = createRequire(import.meta.url);
73
+ let agentPkgPath;
60
74
  try {
61
- agentPkgUrl = import.meta.resolve("@kubb/agent/package.json");
75
+ agentPkgPath = require.resolve("@kubb/agent/package.json");
62
76
  } catch (_e) {
63
- console.error(`Import of '@kubb/agent' is required to start the Agent server`);
64
- process$1.exit(1);
77
+ console.error(styleText("red", "The @kubb/agent package is not installed."));
78
+ console.error("");
79
+ console.error("Install it with:");
80
+ console.error(styleText("cyan", " npm install @kubb/agent"));
81
+ console.error(styleText("cyan", " # or"));
82
+ console.error(styleText("cyan", " pnpm install @kubb/agent"));
83
+ console.error("");
84
+ process.exit(1);
65
85
  }
66
- const agentPkgPath = fileURLToPath(agentPkgUrl);
67
86
  const agentDir = path.dirname(agentPkgPath);
68
87
  const serverPath = path.join(agentDir, agentDefaults.serverEntryPath);
69
88
  const resolvedEnv = resolveAgentStartEnvironment({
@@ -82,31 +101,21 @@ async function runAgentStart({ port, host, configPath, allowWrite, allowAll, ver
82
101
  if (!resolvedEnv.allowWrite && !resolvedEnv.allowAll) clack.log.warn(styleText("yellow", "Filesystem writes disabled. Use --allow-write or --allow-all to enable."));
83
102
  if (!await isPortAvailable(numericPort, resolvedEnv.host)) {
84
103
  clack.log.error(styleText("red", `Port ${resolvedEnv.port} is already in use. Stop the existing process or choose a different port with --port.`));
85
- process$1.exit(1);
104
+ process.exit(1);
86
105
  }
87
106
  await spawnAsync("node", [serverPath], {
88
107
  env: resolvedEnv.env,
89
- cwd: process$1.cwd()
108
+ cwd: process.cwd()
90
109
  });
91
- await sendTelemetry(buildTelemetryEvent({
92
- command: "agent",
93
- kubbVersion: version,
94
- hrStart,
95
- status: "success"
96
- }));
110
+ await report("success");
97
111
  } catch (error) {
98
- await sendTelemetry(buildTelemetryEvent({
99
- command: "agent",
100
- kubbVersion: version,
101
- hrStart,
102
- status: "failed"
103
- }));
112
+ await report("failed");
104
113
  clack.log.error(styleText("red", "Failed to start agent server"));
105
- console.error(error);
106
- process$1.exit(1);
114
+ clack.log.error(getErrorMessage(error));
115
+ process.exit(1);
107
116
  }
108
117
  }
109
118
  //#endregion
110
- export { runAgentStart };
119
+ export { run };
111
120
 
112
- //# sourceMappingURL=agent-Ev5hU5hH.js.map
121
+ //# sourceMappingURL=run-BzpYYOQs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-BzpYYOQs.js","names":[],"sources":["../src/runners/agent/utils.ts","../src/runners/agent/run.ts"],"sourcesContent":["import net from 'node:net'\nimport path from 'node:path'\nimport process from 'node:process'\nimport { agentDefaults } from '../../constants.ts'\n\ntype AgentStartEnvironmentInput = {\n /**\n * TCP port for the HTTP server. When `undefined`, falls back to `PORT` env var or the default (`3000`).\n */\n port: string | undefined\n /**\n * Hostname the HTTP server binds to.\n */\n host: string\n /**\n * Explicit path to the Kubb config file. When `undefined`, falls back to `KUBB_AGENT_CONFIG` or the default filename.\n */\n configPath: string | undefined\n /**\n * Grants the agent permission to write generated files to the filesystem.\n */\n allowWrite: boolean\n /**\n * Grants all agent permissions, including filesystem writes. Implies `allowWrite`.\n */\n allowAll: boolean\n}\n\ntype ResolvedAgentStartEnvironment = {\n /**\n * Final port string after merging CLI flag, `PORT` env var, and the default.\n */\n port: string\n /**\n * Final hostname after merging CLI flag, `HOST` env var, and the default.\n */\n host: string\n /**\n * Effective write-permission flag, accounting for `allowAll` and `KUBB_AGENT_ALLOW_WRITE`.\n */\n allowWrite: boolean\n /**\n * Effective all-permissions flag, accounting for `KUBB_AGENT_ALLOW_ALL`.\n */\n allowAll: boolean\n /**\n * Absolute path to the Kubb config file passed to the agent subprocess.\n */\n agentConfigPath: string\n /**\n * Merged `process.env` object with all resolved agent environment variables applied.\n */\n env: NodeJS.ProcessEnv\n}\n\n/**\n * Resolves the environment passed to the detached agent process using CLI values first, then environment values, then CLI defaults.\n */\nexport function resolveAgentStartEnvironment({ port, host, configPath, allowWrite, allowAll }: AgentStartEnvironmentInput): ResolvedAgentStartEnvironment {\n const resolvedPort = port ?? process.env.PORT ?? agentDefaults.port\n const resolvedHost = host !== agentDefaults.host ? host : (process.env.HOST ?? agentDefaults.host)\n const resolvedAllowAll = allowAll || process.env.KUBB_AGENT_ALLOW_ALL === 'true'\n const resolvedAllowWrite = resolvedAllowAll || allowWrite || process.env.KUBB_AGENT_ALLOW_WRITE === 'true'\n const agentRoot = process.env.KUBB_AGENT_ROOT ?? process.cwd()\n const agentConfigPath = path.resolve(process.cwd(), configPath || process.env.KUBB_AGENT_CONFIG || agentDefaults.configFile)\n\n return {\n port: resolvedPort,\n host: resolvedHost,\n allowWrite: resolvedAllowWrite,\n allowAll: resolvedAllowAll,\n agentConfigPath,\n env: {\n ...process.env,\n PORT: resolvedPort,\n HOST: resolvedHost,\n KUBB_AGENT_ROOT: agentRoot,\n KUBB_AGENT_CONFIG: agentConfigPath,\n KUBB_AGENT_ALLOW_WRITE: String(resolvedAllowWrite),\n KUBB_AGENT_ALLOW_ALL: String(resolvedAllowAll),\n KUBB_AGENT_TOKEN: process.env.KUBB_AGENT_TOKEN,\n KUBB_AGENT_RETRY_TIMEOUT: process.env.KUBB_AGENT_RETRY_TIMEOUT ?? agentDefaults.retryTimeout,\n KUBB_STUDIO_URL: process.env.KUBB_STUDIO_URL ?? agentDefaults.studioUrl,\n },\n }\n}\n\nexport function isPortAvailable(port: number, host: string): Promise<boolean> {\n return new Promise((resolve) => {\n const server = net.createServer()\n server.once('error', () => resolve(false))\n server.once('listening', () => {\n server.close()\n resolve(true)\n })\n server.listen(port, host)\n })\n}\n","import { createRequire } from 'node:module'\nimport path from 'node:path'\nimport process from 'node:process'\nimport { styleText } from 'node:util'\nimport * as clack from '@clack/prompts'\nimport { spawnAsync, getErrorMessage } from '@internals/utils'\nimport { agentDefaults } from '../../constants.ts'\nimport { buildTelemetryEvent, sendTelemetry } from '../../telemetry.ts'\nimport { isPortAvailable, resolveAgentStartEnvironment } from './utils.ts'\n\ntype AgentStartOptions = {\n /**\n * TCP port for the HTTP server. When `undefined`, falls back to `PORT` env var or the default (`3000`).\n */\n port: string | undefined\n /**\n * Hostname the HTTP server binds to.\n *\n * @default 'localhost'\n */\n host: string\n /**\n * Explicit path to the Kubb config file. When `undefined`, falls back to `KUBB_AGENT_CONFIG` or the default filename.\n */\n configPath: string | undefined\n /**\n * Grants the agent permission to write generated files to the filesystem.\n */\n allowWrite: boolean\n /**\n * Grants all agent permissions, including filesystem writes. Implies `allowWrite`.\n */\n allowAll: boolean\n /**\n * Current `@kubb/cli` version string, used for the telemetry payload.\n */\n version: string\n}\n\n/**\n * Spawns the Kubb Agent HTTP server as a Node.js subprocess.\n * Resolves config from CLI flags and environment variables, validates the port, and exits with code 1 on failure.\n */\nexport async function run({ port, host, configPath, allowWrite, allowAll, version }: AgentStartOptions): Promise<void> {\n const hrStart = process.hrtime()\n const report = (status: 'success' | 'failed') => sendTelemetry(buildTelemetryEvent({ command: 'agent', kubbVersion: version, hrStart, status }))\n\n try {\n // Load .env file into process.env using Node.js built-in (v20.12.0+)\n try {\n process.loadEnvFile()\n } catch {\n // .env file may not exist; ignore\n }\n\n // Resolve the @kubb/agent package path — createRequire is CJS/ESM compatible (import.meta.resolve is ESM-only)\n const require = createRequire(import.meta.url)\n let agentPkgPath: string\n try {\n agentPkgPath = require.resolve('@kubb/agent/package.json')\n } catch (_e) {\n console.error(styleText('red', 'The @kubb/agent package is not installed.'))\n console.error('')\n console.error('Install it with:')\n console.error(styleText('cyan', ' npm install @kubb/agent'))\n console.error(styleText('cyan', ' # or'))\n console.error(styleText('cyan', ' pnpm install @kubb/agent'))\n console.error('')\n process.exit(1)\n }\n const agentDir = path.dirname(agentPkgPath)\n const serverPath = path.join(agentDir, agentDefaults.serverEntryPath)\n\n const resolvedEnv = resolveAgentStartEnvironment({\n port,\n host,\n configPath,\n allowWrite,\n allowAll,\n })\n const numericPort = Number(resolvedEnv.port)\n\n if (!Number.isInteger(numericPort) || numericPort <= 0) {\n throw new Error(`Invalid port \"${resolvedEnv.port}\". Provide a positive integer with --port or PORT.`)\n }\n\n clack.log.step(styleText('cyan', 'Starting agent server...'))\n clack.log.info(styleText('dim', `Config: ${resolvedEnv.agentConfigPath}`))\n clack.log.info(styleText('dim', `Host: ${resolvedEnv.host}`))\n clack.log.info(styleText('dim', `Port: ${resolvedEnv.port}`))\n if (!resolvedEnv.allowWrite && !resolvedEnv.allowAll) {\n clack.log.warn(styleText('yellow', 'Filesystem writes disabled. Use --allow-write or --allow-all to enable.'))\n }\n\n if (!(await isPortAvailable(numericPort, resolvedEnv.host))) {\n clack.log.error(styleText('red', `Port ${resolvedEnv.port} is already in use. Stop the existing process or choose a different port with --port.`))\n process.exit(1)\n }\n\n // Spawns the server as a detached background process so the CLI can exit independently.\n await spawnAsync('node', [serverPath], {\n env: resolvedEnv.env,\n cwd: process.cwd(),\n })\n\n await report('success')\n } catch (error) {\n await report('failed')\n clack.log.error(styleText('red', 'Failed to start agent server'))\n clack.log.error(getErrorMessage(error))\n process.exit(1)\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import "./chunk-BvFE5Tac.js";
2
+ import { t as getErrorMessage } from "./errors-CINO1EIv.js";
3
+ import { r as sendTelemetry, t as buildTelemetryEvent } from "./telemetry-BkektVz6.js";
4
+ import { styleText } from "node:util";
5
+ import process from "node:process";
6
+ //#region src/runners/validate/run.ts
7
+ /**
8
+ * Dynamically loads `@kubb/adapter-oas` for OpenAPI validation.
9
+ */
10
+ function loadValidateModule() {
11
+ return import("@kubb/adapter-oas");
12
+ }
13
+ /**
14
+ * Validates an OpenAPI/Swagger file at `input` using `@kubb/adapter-oas`.
15
+ * Exits the process with code 1 on validation failure or missing dependency.
16
+ */
17
+ async function run({ input, version }, dependencies = { loadValidateModule }) {
18
+ const hrStart = process.hrtime();
19
+ const report = (status) => sendTelemetry(buildTelemetryEvent({
20
+ command: "validate",
21
+ kubbVersion: version,
22
+ hrStart,
23
+ status
24
+ }));
25
+ try {
26
+ const { adapterOas } = await dependencies.loadValidateModule();
27
+ const adapter = adapterOas();
28
+ if (!adapter.validate) throw new Error("The loaded adapter does not support validation.");
29
+ await adapter.validate(input, { throwOnError: true });
30
+ await report("success");
31
+ console.log("✅ Validation success");
32
+ } catch (error) {
33
+ await report("failed");
34
+ if (error instanceof Error && /@kubb\/adapter-oas/.test(error.message)) {
35
+ console.error(styleText("red", "The @kubb/adapter-oas package is not installed."));
36
+ console.error("");
37
+ console.error("Install it with:");
38
+ console.error(styleText("cyan", " npm install @kubb/adapter-oas"));
39
+ console.error(styleText("cyan", " # or"));
40
+ console.error(styleText("cyan", " pnpm install @kubb/adapter-oas"));
41
+ console.error("");
42
+ }
43
+ console.error("❌ Validation failed");
44
+ console.error(getErrorMessage(error));
45
+ process.exit(1);
46
+ }
47
+ }
48
+ //#endregion
49
+ export { run };
50
+
51
+ //# sourceMappingURL=run-CCZ24VKk.js.map