@kubb/cli 5.0.0-beta.1 → 5.0.0-beta.100

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 (148) hide show
  1. package/LICENSE +17 -10
  2. package/README.md +171 -51
  3. package/bin/kubb.js +9 -3
  4. package/dist/Telemetry-7z2tIqPm.js +282 -0
  5. package/dist/Telemetry-7z2tIqPm.js.map +1 -0
  6. package/dist/Telemetry-xcWb-UWT.cjs +331 -0
  7. package/dist/Telemetry-xcWb-UWT.cjs.map +1 -0
  8. package/dist/{errors-CjPmyZHy.js → errors-CMvLO2NE.js} +3 -15
  9. package/dist/{errors-CjPmyZHy.js.map → errors-CMvLO2NE.js.map} +1 -1
  10. package/dist/{errors-CLCjoSg0.cjs → errors-DNxBUo3k.cjs} +2 -20
  11. package/dist/{errors-CLCjoSg0.cjs.map → errors-DNxBUo3k.cjs.map} +1 -1
  12. package/dist/generate-dIcWEfOA.cjs +95 -0
  13. package/dist/generate-dIcWEfOA.cjs.map +1 -0
  14. package/dist/generate-nPLBd69v.js +95 -0
  15. package/dist/generate-nPLBd69v.js.map +1 -0
  16. package/dist/index.cjs +33 -252
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.ts +6 -2
  19. package/dist/index.js +34 -253
  20. package/dist/index.js.map +1 -1
  21. package/dist/init-6h3K2syO.cjs +52 -0
  22. package/dist/init-6h3K2syO.cjs.map +1 -0
  23. package/dist/init-CNV6OC7m.js +53 -0
  24. package/dist/init-CNV6OC7m.js.map +1 -0
  25. package/dist/mcp-BzPiZA36.js +21 -0
  26. package/dist/mcp-BzPiZA36.js.map +1 -0
  27. package/dist/mcp-CmxnIZku.cjs +20 -0
  28. package/dist/mcp-CmxnIZku.cjs.map +1 -0
  29. package/dist/package-By3tigpl.js +6 -0
  30. package/dist/package-By3tigpl.js.map +1 -0
  31. package/dist/{package-Cdo6lNjF.cjs → package-CImfPtTH.cjs} +2 -2
  32. package/dist/package-CImfPtTH.cjs.map +1 -0
  33. package/dist/run-BJhB7Qer.js +306 -0
  34. package/dist/run-BJhB7Qer.js.map +1 -0
  35. package/dist/run-BdtVrLKu.cjs +46 -0
  36. package/dist/run-BdtVrLKu.cjs.map +1 -0
  37. package/dist/run-CaOjZRiQ.js +45 -0
  38. package/dist/run-CaOjZRiQ.js.map +1 -0
  39. package/dist/run-D-gAS1Vq.js +1264 -0
  40. package/dist/run-D-gAS1Vq.js.map +1 -0
  41. package/dist/run-DAHp52w3.js +33 -0
  42. package/dist/run-DAHp52w3.js.map +1 -0
  43. package/dist/run-DaVewTtW.cjs +310 -0
  44. package/dist/run-DaVewTtW.cjs.map +1 -0
  45. package/dist/run-HUVxfpGj.cjs +1267 -0
  46. package/dist/run-HUVxfpGj.cjs.map +1 -0
  47. package/dist/run-iidDikJH.cjs +34 -0
  48. package/dist/run-iidDikJH.cjs.map +1 -0
  49. package/dist/tools-CzgGQa64.cjs +175 -0
  50. package/dist/tools-CzgGQa64.cjs.map +1 -0
  51. package/dist/tools-DH1a7ZJH.js +152 -0
  52. package/dist/tools-DH1a7ZJH.js.map +1 -0
  53. package/dist/validate-BUw6PkPp.js +25 -0
  54. package/dist/validate-BUw6PkPp.js.map +1 -0
  55. package/dist/validate-DMfyLIta.cjs +24 -0
  56. package/dist/validate-DMfyLIta.cjs.map +1 -0
  57. package/package.json +24 -30
  58. package/dist/agent-B_pirbeB.cjs +0 -116
  59. package/dist/agent-B_pirbeB.cjs.map +0 -1
  60. package/dist/agent-CUmEyiqY.cjs +0 -58
  61. package/dist/agent-CUmEyiqY.cjs.map +0 -1
  62. package/dist/agent-Ev5hU5hH.js +0 -112
  63. package/dist/agent-Ev5hU5hH.js.map +0 -1
  64. package/dist/agent-v_2S-bnN.js +0 -56
  65. package/dist/agent-v_2S-bnN.js.map +0 -1
  66. package/dist/constants-CnDXa1R6.cjs +0 -148
  67. package/dist/constants-CnDXa1R6.cjs.map +0 -1
  68. package/dist/constants-aL3CP_Wq.js +0 -95
  69. package/dist/constants-aL3CP_Wq.js.map +0 -1
  70. package/dist/define-Bdn8j5VM.cjs +0 -54
  71. package/dist/define-Bdn8j5VM.cjs.map +0 -1
  72. package/dist/define-Ctii4bel.js +0 -43
  73. package/dist/define-Ctii4bel.js.map +0 -1
  74. package/dist/generate-BaJRhbCS.js +0 -66
  75. package/dist/generate-BaJRhbCS.js.map +0 -1
  76. package/dist/generate-CuxArvEk.js +0 -1753
  77. package/dist/generate-CuxArvEk.js.map +0 -1
  78. package/dist/generate-TL8zY_IT.cjs +0 -65
  79. package/dist/generate-TL8zY_IT.cjs.map +0 -1
  80. package/dist/generate-UCP0qpDp.cjs +0 -1756
  81. package/dist/generate-UCP0qpDp.cjs.map +0 -1
  82. package/dist/init-CZ5Xq2Hd.cjs +0 -293
  83. package/dist/init-CZ5Xq2Hd.cjs.map +0 -1
  84. package/dist/init-DRR_YWIq.cjs +0 -25
  85. package/dist/init-DRR_YWIq.cjs.map +0 -1
  86. package/dist/init-DSnRd1RJ.js +0 -25
  87. package/dist/init-DSnRd1RJ.js.map +0 -1
  88. package/dist/init-eNRlotJK.js +0 -289
  89. package/dist/init-eNRlotJK.js.map +0 -1
  90. package/dist/mcp-CLcDV4Jm.cjs +0 -41
  91. package/dist/mcp-CLcDV4Jm.cjs.map +0 -1
  92. package/dist/mcp-D7EIR9fR.js +0 -40
  93. package/dist/mcp-D7EIR9fR.js.map +0 -1
  94. package/dist/mcp-Dakxi9CL.js +0 -16
  95. package/dist/mcp-Dakxi9CL.js.map +0 -1
  96. package/dist/mcp-Dr_RY-hd.cjs +0 -16
  97. package/dist/mcp-Dr_RY-hd.cjs.map +0 -1
  98. package/dist/package-Cdo6lNjF.cjs.map +0 -1
  99. package/dist/package-DPooAj2l.js +0 -6
  100. package/dist/package-DPooAj2l.js.map +0 -1
  101. package/dist/shell-475fQKaX.cjs +0 -62
  102. package/dist/shell-475fQKaX.cjs.map +0 -1
  103. package/dist/shell-DLzN4fRo.js +0 -51
  104. package/dist/shell-DLzN4fRo.js.map +0 -1
  105. package/dist/telemetry-DN95_2pF.cjs +0 -282
  106. package/dist/telemetry-DN95_2pF.cjs.map +0 -1
  107. package/dist/telemetry-LgT_sdPe.js +0 -245
  108. package/dist/telemetry-LgT_sdPe.js.map +0 -1
  109. package/dist/validate-B1o-rY9o.js +0 -25
  110. package/dist/validate-B1o-rY9o.js.map +0 -1
  111. package/dist/validate-CXFY-mHL.cjs +0 -25
  112. package/dist/validate-CXFY-mHL.cjs.map +0 -1
  113. package/dist/validate-kLJoT_hi.js +0 -33
  114. package/dist/validate-kLJoT_hi.js.map +0 -1
  115. package/dist/validate-yKKzqEZ5.cjs +0 -34
  116. package/dist/validate-yKKzqEZ5.cjs.map +0 -1
  117. package/src/commands/agent/start.ts +0 -47
  118. package/src/commands/agent.ts +0 -8
  119. package/src/commands/generate.ts +0 -57
  120. package/src/commands/init.ts +0 -20
  121. package/src/commands/mcp.ts +0 -12
  122. package/src/commands/validate.ts +0 -20
  123. package/src/constants.ts +0 -104
  124. package/src/index.ts +0 -43
  125. package/src/loggers/clackLogger.ts +0 -458
  126. package/src/loggers/fileSystemLogger.ts +0 -138
  127. package/src/loggers/githubActionsLogger.ts +0 -379
  128. package/src/loggers/plainLogger.ts +0 -254
  129. package/src/loggers/types.ts +0 -1
  130. package/src/loggers/utils.ts +0 -106
  131. package/src/runners/agent.ts +0 -149
  132. package/src/runners/generate.ts +0 -333
  133. package/src/runners/init.ts +0 -296
  134. package/src/runners/mcp.ts +0 -45
  135. package/src/runners/validate.ts +0 -39
  136. package/src/types.ts +0 -11
  137. package/src/utils/Writables.ts +0 -17
  138. package/src/utils/executeHooks.ts +0 -45
  139. package/src/utils/flags.ts +0 -9
  140. package/src/utils/getConfig.ts +0 -10
  141. package/src/utils/getCosmiConfig.ts +0 -80
  142. package/src/utils/getSummary.ts +0 -68
  143. package/src/utils/packageManager.ts +0 -23
  144. package/src/utils/runHook.ts +0 -91
  145. package/src/utils/telemetry.ts +0 -273
  146. package/src/utils/watcher.ts +0 -19
  147. /package/dist/{chunk-ByKO4r7w.cjs → rolldown-runtime-Bx3C2hgW.cjs} +0 -0
  148. /package/dist/{chunk--u3MIqq1.js → rolldown-runtime-C0LytTxp.js} +0 -0
@@ -0,0 +1,25 @@
1
+ import "./rolldown-runtime-C0LytTxp.js";
2
+ import { t as version } from "./package-By3tigpl.js";
3
+ import { define } from "gunshi";
4
+ //#region src/commands/validate.ts
5
+ const command = define({
6
+ name: "validate",
7
+ description: "Parse and validate an OpenAPI/Swagger file for structural correctness. Reports schema errors, missing required fields, and malformed references. Use this before running generate to catch spec issues early.",
8
+ examples: ["kubb validate ./openapi.yaml", "kubb validate https://petstore3.swagger.io/api/v3/openapi.json"].join("\n"),
9
+ args: { input: {
10
+ type: "positional",
11
+ description: "Path or URL to the OpenAPI/Swagger file to validate",
12
+ required: true
13
+ } },
14
+ async run(ctx) {
15
+ const { run } = await import("./run-CaOjZRiQ.js");
16
+ await run({
17
+ input: ctx.values.input,
18
+ version
19
+ });
20
+ }
21
+ });
22
+ //#endregion
23
+ export { command };
24
+
25
+ //# sourceMappingURL=validate-BUw6PkPp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-BUw6PkPp.js","names":[],"sources":["../src/commands/validate.ts"],"sourcesContent":["import { define } from 'gunshi'\nimport { version } from '../../package.json'\n\nexport const command = define({\n name: 'validate',\n description:\n 'Parse and validate an OpenAPI/Swagger file for structural correctness. Reports schema errors, missing required fields, and malformed references. Use this before running generate to catch spec issues early.',\n examples: ['kubb validate ./openapi.yaml', 'kubb validate https://petstore3.swagger.io/api/v3/openapi.json'].join('\\n'),\n args: {\n input: {\n type: 'positional',\n description: 'Path or URL to the OpenAPI/Swagger file to validate',\n required: true,\n },\n },\n async run(ctx) {\n const { run } = await import('../runners/validate/run.ts')\n\n await run({ input: ctx.values.input, version })\n },\n})\n"],"mappings":";;;;AAGA,MAAa,UAAU,OAAO;CAC5B,MAAM;CACN,aACE;CACF,UAAU,CAAC,gCAAgC,gEAAgE,CAAC,CAAC,KAAK,IAAI;CACtH,MAAM,EACJ,OAAO;EACL,MAAM;EACN,aAAa;EACb,UAAU;CACZ,EACF;CACA,MAAM,IAAI,KAAK;EACb,MAAM,EAAE,QAAQ,MAAM,OAAO;EAE7B,MAAM,IAAI;GAAE,OAAO,IAAI,OAAO;GAAO;EAAQ,CAAC;CAChD;AACF,CAAC"}
@@ -0,0 +1,24 @@
1
+ require("./rolldown-runtime-Bx3C2hgW.cjs");
2
+ const require_package = require("./package-CImfPtTH.cjs");
3
+ //#region src/commands/validate.ts
4
+ const command = (0, require("gunshi").define)({
5
+ name: "validate",
6
+ description: "Parse and validate an OpenAPI/Swagger file for structural correctness. Reports schema errors, missing required fields, and malformed references. Use this before running generate to catch spec issues early.",
7
+ examples: ["kubb validate ./openapi.yaml", "kubb validate https://petstore3.swagger.io/api/v3/openapi.json"].join("\n"),
8
+ args: { input: {
9
+ type: "positional",
10
+ description: "Path or URL to the OpenAPI/Swagger file to validate",
11
+ required: true
12
+ } },
13
+ async run(ctx) {
14
+ const { run } = await Promise.resolve().then(() => require("./run-BdtVrLKu.cjs"));
15
+ await run({
16
+ input: ctx.values.input,
17
+ version: require_package.version
18
+ });
19
+ }
20
+ });
21
+ //#endregion
22
+ exports.command = command;
23
+
24
+ //# sourceMappingURL=validate-DMfyLIta.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-DMfyLIta.cjs","names":[],"sources":["../src/commands/validate.ts"],"sourcesContent":["import { define } from 'gunshi'\nimport { version } from '../../package.json'\n\nexport const command = define({\n name: 'validate',\n description:\n 'Parse and validate an OpenAPI/Swagger file for structural correctness. Reports schema errors, missing required fields, and malformed references. Use this before running generate to catch spec issues early.',\n examples: ['kubb validate ./openapi.yaml', 'kubb validate https://petstore3.swagger.io/api/v3/openapi.json'].join('\\n'),\n args: {\n input: {\n type: 'positional',\n description: 'Path or URL to the OpenAPI/Swagger file to validate',\n required: true,\n },\n },\n async run(ctx) {\n const { run } = await import('../runners/validate/run.ts')\n\n await run({ input: ctx.values.input, version })\n },\n})\n"],"mappings":";;;AAGA,MAAa,WAAA,mBAAA,CAAA,CAAA,OAAA,CAAiB;CAC5B,MAAM;CACN,aACE;CACF,UAAU,CAAC,gCAAgC,gEAAgE,CAAC,CAAC,KAAK,IAAI;CACtH,MAAM,EACJ,OAAO;EACL,MAAM;EACN,aAAa;EACb,UAAU;CACZ,EACF;CACA,MAAM,IAAI,KAAK;EACb,MAAM,EAAE,QAAQ,MAAA,QAAA,QAAA,CAAA,CAAA,WAAA,QAAM,oBAAA,CAAA;EAEtB,MAAM,IAAI;GAAE,OAAO,IAAI,OAAO;GAAO,SAAA,gBAAA;EAAQ,CAAC;CAChD;AACF,CAAC"}
package/package.json CHANGED
@@ -1,20 +1,14 @@
1
1
  {
2
2
  "name": "@kubb/cli",
3
- "version": "5.0.0-beta.1",
4
- "description": "Command-line interface for Kubb, enabling easy generation of TypeScript, React-Query, Zod, and other code from OpenAPI specifications.",
3
+ "version": "5.0.0-beta.100",
4
+ "description": "Official CLI for Kubb. Run kubb generate, kubb init, kubb validate, and kubb mcp to manage the full code generation lifecycle.",
5
5
  "keywords": [
6
6
  "cli",
7
7
  "code-generator",
8
8
  "codegen",
9
- "command-line",
10
- "command-line-tool",
11
9
  "kubb",
12
- "oas",
13
- "openapi",
14
- "plugins",
10
+ "meta-framework",
15
11
  "sdk-generator",
16
- "swagger",
17
- "terminal",
18
12
  "typescript"
19
13
  ],
20
14
  "license": "MIT",
@@ -28,7 +22,6 @@
28
22
  "kubb": "bin/kubb.js"
29
23
  },
30
24
  "files": [
31
- "src",
32
25
  "dist",
33
26
  "bin",
34
27
  "!/**/**.test.**",
@@ -52,39 +45,40 @@
52
45
  "registry": "https://registry.npmjs.org/"
53
46
  },
54
47
  "dependencies": {
55
- "@clack/prompts": "^1.3.0",
48
+ "@clack/prompts": "^1.7.0",
56
49
  "chokidar": "^5.0.0",
57
- "cosmiconfig": "^9.0.1",
58
- "tinyexec": "^1.1.2",
59
- "unrun": "^0.2.37",
60
- "@kubb/adapter-oas": "5.0.0-beta.1",
61
- "@kubb/core": "5.0.0-beta.1"
50
+ "gunshi": "^0.36.0",
51
+ "jiti": "^2.7.0",
52
+ "tinyexec": "^1.2.4",
53
+ "unconfig": "^7.5.0",
54
+ "@kubb/core": "5.0.0-beta.100"
62
55
  },
63
56
  "devDependencies": {
64
- "@internals/utils": "0.0.0"
57
+ "@internals/shared": "0.0.0",
58
+ "@internals/utils": "0.0.0",
59
+ "@kubb/adapter-oas": "5.0.0-beta.100"
65
60
  },
66
- "optionalDependencies": {
67
- "@kubb/agent": "5.0.0-beta.1",
68
- "@kubb/mcp": "5.0.0-beta.1"
61
+ "peerDependencies": {
62
+ "@kubb/adapter-oas": "5.0.0-beta.100",
63
+ "@kubb/mcp": "5.0.0-beta.100"
69
64
  },
70
- "size-limit": [
71
- {
72
- "path": "./dist/*.js",
73
- "limit": "510 KiB",
74
- "gzip": true
65
+ "peerDependenciesMeta": {
66
+ "@kubb/adapter-oas": {
67
+ "optional": true
68
+ },
69
+ "@kubb/mcp": {
70
+ "optional": true
75
71
  }
76
- ],
72
+ },
77
73
  "preferGlobal": true,
78
74
  "engines": {
79
75
  "node": ">=22"
80
76
  },
81
77
  "scripts": {
82
- "build": "tsdown && size-limit",
83
- "clean": "npx rimraf ./dist",
78
+ "build": "tsdown",
79
+ "clean": "node -e \"require('node:fs').rmSync('./dist', {recursive:true,force:true})\"",
84
80
  "lint": "oxlint .",
85
81
  "lint:fix": "oxlint --fix .",
86
- "release": "pnpm publish --no-git-check",
87
- "release:canary": "bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check",
88
82
  "start": "tsdown --watch",
89
83
  "test": "vitest --passWithNoTests",
90
84
  "typecheck": "tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false"
@@ -1,116 +0,0 @@
1
- const require_chunk = require("./chunk-ByKO4r7w.cjs");
2
- const require_telemetry = require("./telemetry-DN95_2pF.cjs");
3
- const require_shell = require("./shell-475fQKaX.cjs");
4
- const require_constants = require("./constants-CnDXa1R6.cjs");
5
- let node_util = require("node:util");
6
- let node_path = require("node:path");
7
- node_path = require_chunk.__toESM(node_path, 1);
8
- let node_process = require("node:process");
9
- node_process = require_chunk.__toESM(node_process, 1);
10
- let node_net = require("node:net");
11
- node_net = require_chunk.__toESM(node_net, 1);
12
- let node_url = require("node:url");
13
- let _clack_prompts = require("@clack/prompts");
14
- _clack_prompts = require_chunk.__toESM(_clack_prompts, 1);
15
- //#region src/runners/agent.ts
16
- /**
17
- * Resolves the environment passed to the detached agent process using CLI values first, then environment values, then CLI defaults.
18
- */
19
- function resolveAgentStartEnvironment({ port, host, configPath, allowWrite, allowAll }) {
20
- const resolvedPort = port ?? node_process.env.PORT ?? require_constants.agentDefaults.port;
21
- const resolvedHost = host !== require_constants.agentDefaults.host ? host : node_process.env.HOST ?? require_constants.agentDefaults.host;
22
- const resolvedAllowAll = allowAll || node_process.env.KUBB_AGENT_ALLOW_ALL === "true";
23
- const resolvedAllowWrite = resolvedAllowAll || allowWrite || node_process.env.KUBB_AGENT_ALLOW_WRITE === "true";
24
- const agentRoot = node_process.env.KUBB_AGENT_ROOT ?? node_process.cwd();
25
- const agentConfigPath = node_path.default.resolve(node_process.cwd(), configPath || node_process.env.KUBB_AGENT_CONFIG || require_constants.agentDefaults.configFile);
26
- return {
27
- port: resolvedPort,
28
- host: resolvedHost,
29
- allowWrite: resolvedAllowWrite,
30
- allowAll: resolvedAllowAll,
31
- agentConfigPath,
32
- env: {
33
- ...node_process.env,
34
- PORT: resolvedPort,
35
- HOST: resolvedHost,
36
- KUBB_AGENT_ROOT: agentRoot,
37
- KUBB_AGENT_CONFIG: agentConfigPath,
38
- KUBB_AGENT_ALLOW_WRITE: String(resolvedAllowWrite),
39
- KUBB_AGENT_ALLOW_ALL: String(resolvedAllowAll),
40
- KUBB_AGENT_TOKEN: node_process.env.KUBB_AGENT_TOKEN,
41
- KUBB_AGENT_RETRY_TIMEOUT: node_process.env.KUBB_AGENT_RETRY_TIMEOUT ?? require_constants.agentDefaults.retryTimeout,
42
- KUBB_STUDIO_URL: node_process.env.KUBB_STUDIO_URL ?? require_constants.agentDefaults.studioUrl
43
- }
44
- };
45
- }
46
- function isPortAvailable(port, host) {
47
- return new Promise((resolve) => {
48
- const server = node_net.default.createServer();
49
- server.once("error", () => resolve(false));
50
- server.once("listening", () => {
51
- server.close();
52
- resolve(true);
53
- });
54
- server.listen(port, host);
55
- });
56
- }
57
- async function runAgentStart({ port, host, configPath, allowWrite, allowAll, version }) {
58
- const hrStart = node_process.hrtime();
59
- try {
60
- try {
61
- node_process.loadEnvFile();
62
- } catch {}
63
- let agentPkgUrl;
64
- try {
65
- agentPkgUrl = {}.resolve("@kubb/agent/package.json");
66
- } catch (_e) {
67
- console.error(`Import of '@kubb/agent' is required to start the Agent server`);
68
- node_process.exit(1);
69
- }
70
- const agentPkgPath = (0, node_url.fileURLToPath)(agentPkgUrl);
71
- const agentDir = node_path.default.dirname(agentPkgPath);
72
- const serverPath = node_path.default.join(agentDir, require_constants.agentDefaults.serverEntryPath);
73
- const resolvedEnv = resolveAgentStartEnvironment({
74
- port,
75
- host,
76
- configPath,
77
- allowWrite,
78
- allowAll
79
- });
80
- const numericPort = Number(resolvedEnv.port);
81
- if (!Number.isInteger(numericPort) || numericPort <= 0) throw new Error(`Invalid port "${resolvedEnv.port}". Provide a positive integer with --port or PORT.`);
82
- _clack_prompts.log.step((0, node_util.styleText)("cyan", "Starting agent server..."));
83
- _clack_prompts.log.info((0, node_util.styleText)("dim", `Config: ${resolvedEnv.agentConfigPath}`));
84
- _clack_prompts.log.info((0, node_util.styleText)("dim", `Host: ${resolvedEnv.host}`));
85
- _clack_prompts.log.info((0, node_util.styleText)("dim", `Port: ${resolvedEnv.port}`));
86
- if (!resolvedEnv.allowWrite && !resolvedEnv.allowAll) _clack_prompts.log.warn((0, node_util.styleText)("yellow", "Filesystem writes disabled. Use --allow-write or --allow-all to enable."));
87
- if (!await isPortAvailable(numericPort, resolvedEnv.host)) {
88
- _clack_prompts.log.error((0, node_util.styleText)("red", `Port ${resolvedEnv.port} is already in use. Stop the existing process or choose a different port with --port.`));
89
- node_process.exit(1);
90
- }
91
- await require_shell.spawnAsync("node", [serverPath], {
92
- env: resolvedEnv.env,
93
- cwd: node_process.cwd()
94
- });
95
- await require_telemetry.sendTelemetry(require_telemetry.buildTelemetryEvent({
96
- command: "agent",
97
- kubbVersion: version,
98
- hrStart,
99
- status: "success"
100
- }));
101
- } catch (error) {
102
- await require_telemetry.sendTelemetry(require_telemetry.buildTelemetryEvent({
103
- command: "agent",
104
- kubbVersion: version,
105
- hrStart,
106
- status: "failed"
107
- }));
108
- _clack_prompts.log.error((0, node_util.styleText)("red", "Failed to start agent server"));
109
- console.error(error);
110
- node_process.exit(1);
111
- }
112
- }
113
- //#endregion
114
- exports.runAgentStart = runAgentStart;
115
-
116
- //# sourceMappingURL=agent-B_pirbeB.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-B_pirbeB.cjs","names":["process","agentDefaults","path","net","spawnAsync","sendTelemetry","buildTelemetryEvent"],"sources":["../src/runners/agent.ts"],"sourcesContent":["import net from 'node:net'\nimport path from 'node:path'\nimport * as process from 'node:process'\nimport { fileURLToPath } from 'node:url'\nimport { styleText } from 'node:util'\nimport * as clack from '@clack/prompts'\nimport { spawnAsync } from '@internals/utils'\nimport { agentDefaults } from '../constants.ts'\nimport { buildTelemetryEvent, sendTelemetry } from '../utils/telemetry.ts'\n\ntype AgentStartOptions = {\n port: string | undefined\n host: string\n configPath: string | undefined\n allowWrite: boolean\n allowAll: boolean\n version: string\n}\n\ntype ResolvedAgentStartEnvironment = {\n port: string\n host: string\n allowWrite: boolean\n allowAll: boolean\n agentConfigPath: string\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 */\nfunction resolveAgentStartEnvironment({ port, host, configPath, allowWrite, allowAll }: Omit<AgentStartOptions, 'version'>): 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\nfunction 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\nexport async function runAgentStart({ port, host, configPath, allowWrite, allowAll, version }: AgentStartOptions): Promise<void> {\n const hrStart = process.hrtime()\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\n let agentPkgUrl: string\n try {\n agentPkgUrl = import.meta.resolve('@kubb/agent/package.json')\n } catch (_e) {\n console.error(`Import of '@kubb/agent' is required to start the Agent server`)\n process.exit(1)\n }\n const agentPkgPath = fileURLToPath(agentPkgUrl)\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 sendTelemetry(\n buildTelemetryEvent({\n command: 'agent',\n kubbVersion: version,\n hrStart,\n status: 'success',\n }),\n )\n } catch (error) {\n await sendTelemetry(\n buildTelemetryEvent({\n command: 'agent',\n kubbVersion: version,\n hrStart,\n status: 'failed',\n }),\n )\n clack.log.error(styleText('red', 'Failed to start agent server'))\n console.error(error)\n process.exit(1)\n }\n}\n"],"mappings":"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"}
@@ -1,58 +0,0 @@
1
- require("./chunk-ByKO4r7w.cjs");
2
- const require_define = require("./define-Bdn8j5VM.cjs");
3
- const require_package = require("./package-Cdo6lNjF.cjs");
4
- const require_constants = require("./constants-CnDXa1R6.cjs");
5
- //#region src/commands/agent/start.ts
6
- const command$1 = require_define.defineCommand({
7
- name: "start",
8
- description: "Start the Agent server",
9
- options: {
10
- config: {
11
- type: "string",
12
- description: "Path to the Kubb config",
13
- short: "c"
14
- },
15
- port: {
16
- type: "string",
17
- description: `Port for the server (default: ${require_constants.agentDefaults.port})`,
18
- short: "p"
19
- },
20
- host: {
21
- type: "string",
22
- description: "Host for the server",
23
- default: require_constants.agentDefaults.host
24
- },
25
- "allow-write": {
26
- type: "boolean",
27
- description: "Allow writing generated files to the filesystem. When not set, no files are written and the config patch is not persisted.",
28
- default: false
29
- },
30
- "allow-all": {
31
- type: "boolean",
32
- description: "Grant all permissions (implies --allow-write).",
33
- default: false
34
- }
35
- },
36
- async run({ values }) {
37
- const { runAgentStart } = await Promise.resolve().then(() => require("./agent-B_pirbeB.cjs"));
38
- await runAgentStart({
39
- port: values.port !== void 0 ? values.port : void 0,
40
- host: values.host,
41
- configPath: values.config,
42
- allowWrite: values["allow-write"],
43
- allowAll: values["allow-all"],
44
- version: require_package.version
45
- });
46
- }
47
- });
48
- //#endregion
49
- //#region src/commands/agent.ts
50
- const command = require_define.defineCommand({
51
- name: "agent",
52
- description: "Manage the Kubb Agent server",
53
- subCommands: [command$1]
54
- });
55
- //#endregion
56
- exports.command = command;
57
-
58
- //# sourceMappingURL=agent-CUmEyiqY.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-CUmEyiqY.cjs","names":["command","defineCommand","agentDefaults","defineCommand","startCommand"],"sources":["../src/commands/agent/start.ts","../src/commands/agent.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\nimport { version } from '../../../package.json'\nimport { agentDefaults } from '../../constants.ts'\n\nexport const command = defineCommand({\n name: 'start',\n description: 'Start the Agent server',\n options: {\n config: {\n type: 'string',\n description: 'Path to the Kubb config',\n short: 'c',\n },\n port: {\n type: 'string',\n description: `Port for the server (default: ${agentDefaults.port})`,\n short: 'p',\n },\n host: {\n type: 'string',\n description: 'Host for the server',\n default: agentDefaults.host,\n },\n 'allow-write': {\n type: 'boolean',\n description: 'Allow writing generated files to the filesystem. When not set, no files are written and the config patch is not persisted.',\n default: false,\n },\n 'allow-all': {\n type: 'boolean',\n description: 'Grant all permissions (implies --allow-write).',\n default: false,\n },\n },\n async run({ values }) {\n const { runAgentStart } = await import('../../runners/agent.ts')\n\n await runAgentStart({\n port: values.port !== undefined ? values.port : undefined,\n host: values.host,\n configPath: values.config,\n allowWrite: values['allow-write'],\n allowAll: values['allow-all'],\n version,\n })\n },\n})\n","import { defineCommand } from '@internals/utils'\nimport { command as startCommand } from './agent/start.ts'\n\nexport const command = defineCommand({\n name: 'agent',\n description: 'Manage the Kubb Agent server',\n subCommands: [startCommand],\n})\n"],"mappings":";;;;;AAIA,MAAaA,YAAUC,eAAAA,cAAc;CACnC,MAAM;CACN,aAAa;CACb,SAAS;EACP,QAAQ;GACN,MAAM;GACN,aAAa;GACb,OAAO;GACR;EACD,MAAM;GACJ,MAAM;GACN,aAAa,iCAAiCC,kBAAAA,cAAc,KAAK;GACjE,OAAO;GACR;EACD,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAASA,kBAAAA,cAAc;GACxB;EACD,eAAe;GACb,MAAM;GACN,aAAa;GACb,SAAS;GACV;EACD,aAAa;GACX,MAAM;GACN,aAAa;GACb,SAAS;GACV;EACF;CACD,MAAM,IAAI,EAAE,UAAU;EACpB,MAAM,EAAE,kBAAkB,MAAA,QAAA,SAAA,CAAA,WAAA,QAAM,uBAAA,CAAA;AAEhC,QAAM,cAAc;GAClB,MAAM,OAAO,SAAS,KAAA,IAAY,OAAO,OAAO,KAAA;GAChD,MAAM,OAAO;GACb,YAAY,OAAO;GACnB,YAAY,OAAO;GACnB,UAAU,OAAO;GACjB,SAAA,gBAAA;GACD,CAAC;;CAEL,CAAC;;;AC3CF,MAAa,UAAUC,eAAAA,cAAc;CACnC,MAAM;CACN,aAAa;CACb,aAAa,CAACC,UAAa;CAC5B,CAAC"}
@@ -1,112 +0,0 @@
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";
5
- import { styleText } from "node:util";
6
- 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";
10
- import * as clack from "@clack/prompts";
11
- //#region src/runners/agent.ts
12
- /**
13
- * Resolves the environment passed to the detached agent process using CLI values first, then environment values, then CLI defaults.
14
- */
15
- 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);
22
- return {
23
- port: resolvedPort,
24
- host: resolvedHost,
25
- allowWrite: resolvedAllowWrite,
26
- allowAll: resolvedAllowAll,
27
- agentConfigPath,
28
- env: {
29
- ...process$1.env,
30
- PORT: resolvedPort,
31
- HOST: resolvedHost,
32
- KUBB_AGENT_ROOT: agentRoot,
33
- KUBB_AGENT_CONFIG: agentConfigPath,
34
- KUBB_AGENT_ALLOW_WRITE: String(resolvedAllowWrite),
35
- 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
39
- }
40
- };
41
- }
42
- function isPortAvailable(port, host) {
43
- return new Promise((resolve) => {
44
- const server = net.createServer();
45
- server.once("error", () => resolve(false));
46
- server.once("listening", () => {
47
- server.close();
48
- resolve(true);
49
- });
50
- server.listen(port, host);
51
- });
52
- }
53
- async function runAgentStart({ port, host, configPath, allowWrite, allowAll, version }) {
54
- const hrStart = process$1.hrtime();
55
- try {
56
- try {
57
- process$1.loadEnvFile();
58
- } catch {}
59
- let agentPkgUrl;
60
- try {
61
- agentPkgUrl = import.meta.resolve("@kubb/agent/package.json");
62
- } catch (_e) {
63
- console.error(`Import of '@kubb/agent' is required to start the Agent server`);
64
- process$1.exit(1);
65
- }
66
- const agentPkgPath = fileURLToPath(agentPkgUrl);
67
- const agentDir = path.dirname(agentPkgPath);
68
- const serverPath = path.join(agentDir, agentDefaults.serverEntryPath);
69
- const resolvedEnv = resolveAgentStartEnvironment({
70
- port,
71
- host,
72
- configPath,
73
- allowWrite,
74
- allowAll
75
- });
76
- const numericPort = Number(resolvedEnv.port);
77
- if (!Number.isInteger(numericPort) || numericPort <= 0) throw new Error(`Invalid port "${resolvedEnv.port}". Provide a positive integer with --port or PORT.`);
78
- clack.log.step(styleText("cyan", "Starting agent server..."));
79
- clack.log.info(styleText("dim", `Config: ${resolvedEnv.agentConfigPath}`));
80
- clack.log.info(styleText("dim", `Host: ${resolvedEnv.host}`));
81
- clack.log.info(styleText("dim", `Port: ${resolvedEnv.port}`));
82
- if (!resolvedEnv.allowWrite && !resolvedEnv.allowAll) clack.log.warn(styleText("yellow", "Filesystem writes disabled. Use --allow-write or --allow-all to enable."));
83
- if (!await isPortAvailable(numericPort, resolvedEnv.host)) {
84
- 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);
86
- }
87
- await spawnAsync("node", [serverPath], {
88
- env: resolvedEnv.env,
89
- cwd: process$1.cwd()
90
- });
91
- await sendTelemetry(buildTelemetryEvent({
92
- command: "agent",
93
- kubbVersion: version,
94
- hrStart,
95
- status: "success"
96
- }));
97
- } catch (error) {
98
- await sendTelemetry(buildTelemetryEvent({
99
- command: "agent",
100
- kubbVersion: version,
101
- hrStart,
102
- status: "failed"
103
- }));
104
- clack.log.error(styleText("red", "Failed to start agent server"));
105
- console.error(error);
106
- process$1.exit(1);
107
- }
108
- }
109
- //#endregion
110
- export { runAgentStart };
111
-
112
- //# sourceMappingURL=agent-Ev5hU5hH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-Ev5hU5hH.js","names":["process"],"sources":["../src/runners/agent.ts"],"sourcesContent":["import net from 'node:net'\nimport path from 'node:path'\nimport * as process from 'node:process'\nimport { fileURLToPath } from 'node:url'\nimport { styleText } from 'node:util'\nimport * as clack from '@clack/prompts'\nimport { spawnAsync } from '@internals/utils'\nimport { agentDefaults } from '../constants.ts'\nimport { buildTelemetryEvent, sendTelemetry } from '../utils/telemetry.ts'\n\ntype AgentStartOptions = {\n port: string | undefined\n host: string\n configPath: string | undefined\n allowWrite: boolean\n allowAll: boolean\n version: string\n}\n\ntype ResolvedAgentStartEnvironment = {\n port: string\n host: string\n allowWrite: boolean\n allowAll: boolean\n agentConfigPath: string\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 */\nfunction resolveAgentStartEnvironment({ port, host, configPath, allowWrite, allowAll }: Omit<AgentStartOptions, 'version'>): 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\nfunction 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\nexport async function runAgentStart({ port, host, configPath, allowWrite, allowAll, version }: AgentStartOptions): Promise<void> {\n const hrStart = process.hrtime()\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\n let agentPkgUrl: string\n try {\n agentPkgUrl = import.meta.resolve('@kubb/agent/package.json')\n } catch (_e) {\n console.error(`Import of '@kubb/agent' is required to start the Agent server`)\n process.exit(1)\n }\n const agentPkgPath = fileURLToPath(agentPkgUrl)\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 sendTelemetry(\n buildTelemetryEvent({\n command: 'agent',\n kubbVersion: version,\n hrStart,\n status: 'success',\n }),\n )\n } catch (error) {\n await sendTelemetry(\n buildTelemetryEvent({\n command: 'agent',\n kubbVersion: version,\n hrStart,\n status: 'failed',\n }),\n )\n clack.log.error(styleText('red', 'Failed to start agent server'))\n console.error(error)\n process.exit(1)\n }\n}\n"],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- import "./chunk--u3MIqq1.js";
2
- import { n as defineCommand } from "./define-Ctii4bel.js";
3
- import { t as version } from "./package-DPooAj2l.js";
4
- import { s as agentDefaults } from "./constants-aL3CP_Wq.js";
5
- //#endregion
6
- //#region src/commands/agent.ts
7
- const command = defineCommand({
8
- name: "agent",
9
- description: "Manage the Kubb Agent server",
10
- subCommands: [defineCommand({
11
- name: "start",
12
- description: "Start the Agent server",
13
- options: {
14
- config: {
15
- type: "string",
16
- description: "Path to the Kubb config",
17
- short: "c"
18
- },
19
- port: {
20
- type: "string",
21
- description: `Port for the server (default: ${agentDefaults.port})`,
22
- short: "p"
23
- },
24
- host: {
25
- type: "string",
26
- description: "Host for the server",
27
- default: agentDefaults.host
28
- },
29
- "allow-write": {
30
- type: "boolean",
31
- description: "Allow writing generated files to the filesystem. When not set, no files are written and the config patch is not persisted.",
32
- default: false
33
- },
34
- "allow-all": {
35
- type: "boolean",
36
- description: "Grant all permissions (implies --allow-write).",
37
- default: false
38
- }
39
- },
40
- async run({ values }) {
41
- const { runAgentStart } = await import("./agent-Ev5hU5hH.js");
42
- await runAgentStart({
43
- port: values.port !== void 0 ? values.port : void 0,
44
- host: values.host,
45
- configPath: values.config,
46
- allowWrite: values["allow-write"],
47
- allowAll: values["allow-all"],
48
- version
49
- });
50
- }
51
- })]
52
- });
53
- //#endregion
54
- export { command };
55
-
56
- //# sourceMappingURL=agent-v_2S-bnN.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-v_2S-bnN.js","names":["command","startCommand"],"sources":["../src/commands/agent/start.ts","../src/commands/agent.ts"],"sourcesContent":["import { defineCommand } from '@internals/utils'\nimport { version } from '../../../package.json'\nimport { agentDefaults } from '../../constants.ts'\n\nexport const command = defineCommand({\n name: 'start',\n description: 'Start the Agent server',\n options: {\n config: {\n type: 'string',\n description: 'Path to the Kubb config',\n short: 'c',\n },\n port: {\n type: 'string',\n description: `Port for the server (default: ${agentDefaults.port})`,\n short: 'p',\n },\n host: {\n type: 'string',\n description: 'Host for the server',\n default: agentDefaults.host,\n },\n 'allow-write': {\n type: 'boolean',\n description: 'Allow writing generated files to the filesystem. When not set, no files are written and the config patch is not persisted.',\n default: false,\n },\n 'allow-all': {\n type: 'boolean',\n description: 'Grant all permissions (implies --allow-write).',\n default: false,\n },\n },\n async run({ values }) {\n const { runAgentStart } = await import('../../runners/agent.ts')\n\n await runAgentStart({\n port: values.port !== undefined ? values.port : undefined,\n host: values.host,\n configPath: values.config,\n allowWrite: values['allow-write'],\n allowAll: values['allow-all'],\n version,\n })\n },\n})\n","import { defineCommand } from '@internals/utils'\nimport { command as startCommand } from './agent/start.ts'\n\nexport const command = defineCommand({\n name: 'agent',\n description: 'Manage the Kubb Agent server',\n subCommands: [startCommand],\n})\n"],"mappings":";;;;;;ACGA,MAAa,UAAU,cAAc;CACnC,MAAM;CACN,aAAa;CACb,aAAa,CDFQ,cAAc;EACnC,MAAM;EACN,aAAa;EACb,SAAS;GACP,QAAQ;IACN,MAAM;IACN,aAAa;IACb,OAAO;IACR;GACD,MAAM;IACJ,MAAM;IACN,aAAa,iCAAiC,cAAc,KAAK;IACjE,OAAO;IACR;GACD,MAAM;IACJ,MAAM;IACN,aAAa;IACb,SAAS,cAAc;IACxB;GACD,eAAe;IACb,MAAM;IACN,aAAa;IACb,SAAS;IACV;GACD,aAAa;IACX,MAAM;IACN,aAAa;IACb,SAAS;IACV;GACF;EACD,MAAM,IAAI,EAAE,UAAU;GACpB,MAAM,EAAE,kBAAkB,MAAM,OAAO;AAEvC,SAAM,cAAc;IAClB,MAAM,OAAO,SAAS,KAAA,IAAY,OAAO,OAAO,KAAA;IAChD,MAAM,OAAO;IACb,YAAY,OAAO;IACnB,YAAY,OAAO;IACnB,UAAU,OAAO;IACjB;IACD,CAAC;;EAEL,CCxCeC,CAAa;CAC5B,CAAC"}