specli 0.0.5 → 0.0.7

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 (208) hide show
  1. package/cli.ts +13 -4
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +2331 -0
  5. package/dist/cli.js.map +53 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +2032 -0
  9. package/dist/index.js.map +48 -0
  10. package/dist/src/ai/tools.d.ts +139 -0
  11. package/dist/src/ai/tools.d.ts.map +1 -0
  12. package/dist/src/ai/tools.js +1656 -0
  13. package/dist/src/ai/tools.js.map +45 -0
  14. package/dist/src/cli/auth-requirements.d.ts +10 -0
  15. package/dist/src/cli/auth-requirements.d.ts.map +1 -0
  16. package/dist/src/cli/auth-requirements.js +66 -0
  17. package/dist/src/cli/auth-requirements.js.map +10 -0
  18. package/dist/src/cli/auth-schemes.d.ts +22 -0
  19. package/dist/src/cli/auth-schemes.d.ts.map +1 -0
  20. package/dist/src/cli/auth-schemes.js +116 -0
  21. package/dist/src/cli/auth-schemes.js.map +11 -0
  22. package/dist/src/cli/capabilities.d.ts +32 -0
  23. package/dist/src/cli/capabilities.d.ts.map +1 -0
  24. package/dist/src/cli/capabilities.js +45 -0
  25. package/dist/src/cli/capabilities.js.map +10 -0
  26. package/dist/src/cli/command-id.d.ts +8 -0
  27. package/dist/src/cli/command-id.d.ts.map +1 -0
  28. package/dist/src/cli/command-id.js +18 -0
  29. package/dist/src/cli/command-id.js.map +11 -0
  30. package/dist/src/cli/command-index.d.ts +6 -0
  31. package/dist/src/cli/command-index.d.ts.map +1 -0
  32. package/dist/src/cli/command-index.js +15 -0
  33. package/dist/src/cli/command-index.js.map +10 -0
  34. package/dist/src/cli/command-model.d.ts +40 -0
  35. package/dist/src/cli/command-model.d.ts.map +1 -0
  36. package/dist/src/cli/command-model.js +274 -0
  37. package/dist/src/cli/command-model.js.map +18 -0
  38. package/dist/src/cli/compile.d.ts +15 -0
  39. package/dist/src/cli/compile.d.ts.map +1 -0
  40. package/dist/src/cli/compile.js +146 -0
  41. package/dist/src/cli/compile.js.map +11 -0
  42. package/dist/src/cli/crypto.d.ts +2 -0
  43. package/dist/src/cli/crypto.d.ts.map +1 -0
  44. package/dist/src/cli/crypto.js +15 -0
  45. package/dist/src/cli/crypto.js.map +10 -0
  46. package/dist/src/cli/derive-name.d.ts +9 -0
  47. package/dist/src/cli/derive-name.d.ts.map +1 -0
  48. package/dist/src/cli/derive-name.js +70 -0
  49. package/dist/src/cli/derive-name.js.map +10 -0
  50. package/dist/src/cli/exec.d.ts +14 -0
  51. package/dist/src/cli/exec.d.ts.map +1 -0
  52. package/dist/src/cli/exec.js +2077 -0
  53. package/dist/src/cli/exec.js.map +49 -0
  54. package/dist/src/cli/main.d.ts +10 -0
  55. package/dist/src/cli/main.d.ts.map +1 -0
  56. package/dist/src/cli/main.js +2032 -0
  57. package/dist/src/cli/main.js.map +48 -0
  58. package/dist/src/cli/naming.d.ts +12 -0
  59. package/dist/src/cli/naming.d.ts.map +1 -0
  60. package/dist/src/cli/naming.js +216 -0
  61. package/dist/src/cli/naming.js.map +12 -0
  62. package/dist/src/cli/operations.d.ts +3 -0
  63. package/dist/src/cli/operations.d.ts.map +1 -0
  64. package/dist/src/cli/operations.js +103 -0
  65. package/dist/src/cli/operations.js.map +10 -0
  66. package/dist/src/cli/params.d.ts +19 -0
  67. package/dist/src/cli/params.d.ts.map +1 -0
  68. package/dist/src/cli/params.js +79 -0
  69. package/dist/src/cli/params.js.map +12 -0
  70. package/dist/src/cli/pluralize.d.ts +2 -0
  71. package/dist/src/cli/pluralize.d.ts.map +1 -0
  72. package/dist/src/cli/pluralize.js +43 -0
  73. package/dist/src/cli/pluralize.js.map +10 -0
  74. package/dist/src/cli/positional.d.ts +19 -0
  75. package/dist/src/cli/positional.d.ts.map +1 -0
  76. package/dist/src/cli/positional.js +39 -0
  77. package/dist/src/cli/positional.js.map +10 -0
  78. package/dist/src/cli/request-body.d.ts +20 -0
  79. package/dist/src/cli/request-body.d.ts.map +1 -0
  80. package/dist/src/cli/request-body.js +82 -0
  81. package/dist/src/cli/request-body.js.map +12 -0
  82. package/dist/src/cli/runtime/argv.d.ts +3 -0
  83. package/dist/src/cli/runtime/argv.d.ts.map +1 -0
  84. package/dist/src/cli/runtime/argv.js +22 -0
  85. package/dist/src/cli/runtime/argv.js.map +10 -0
  86. package/dist/src/cli/runtime/auth/resolve.d.ts +9 -0
  87. package/dist/src/cli/runtime/auth/resolve.d.ts.map +1 -0
  88. package/dist/src/cli/runtime/auth/resolve.js +38 -0
  89. package/dist/src/cli/runtime/auth/resolve.js.map +10 -0
  90. package/dist/src/cli/runtime/body-flags.d.ts +41 -0
  91. package/dist/src/cli/runtime/body-flags.d.ts.map +1 -0
  92. package/dist/src/cli/runtime/body-flags.js +86 -0
  93. package/dist/src/cli/runtime/body-flags.js.map +10 -0
  94. package/dist/src/cli/runtime/body.d.ts +15 -0
  95. package/dist/src/cli/runtime/body.d.ts.map +1 -0
  96. package/dist/src/cli/runtime/body.js +40 -0
  97. package/dist/src/cli/runtime/body.js.map +11 -0
  98. package/dist/src/cli/runtime/collect.d.ts +2 -0
  99. package/dist/src/cli/runtime/collect.d.ts.map +1 -0
  100. package/dist/src/cli/runtime/collect.js +9 -0
  101. package/dist/src/cli/runtime/collect.js.map +10 -0
  102. package/dist/src/cli/runtime/compat.d.ts +35 -0
  103. package/dist/src/cli/runtime/compat.d.ts.map +1 -0
  104. package/dist/src/cli/runtime/compat.js +62 -0
  105. package/dist/src/cli/runtime/compat.js.map +10 -0
  106. package/dist/src/cli/runtime/context.d.ts +16 -0
  107. package/dist/src/cli/runtime/context.d.ts.map +1 -0
  108. package/dist/src/cli/runtime/context.js +936 -0
  109. package/dist/src/cli/runtime/context.js.map +32 -0
  110. package/dist/src/cli/runtime/execute.d.ts +33 -0
  111. package/dist/src/cli/runtime/execute.d.ts.map +1 -0
  112. package/dist/src/cli/runtime/execute.js +670 -0
  113. package/dist/src/cli/runtime/execute.js.map +22 -0
  114. package/dist/src/cli/runtime/generated.d.ts +14 -0
  115. package/dist/src/cli/runtime/generated.d.ts.map +1 -0
  116. package/dist/src/cli/runtime/generated.js +869 -0
  117. package/dist/src/cli/runtime/generated.js.map +23 -0
  118. package/dist/src/cli/runtime/headers.d.ts +9 -0
  119. package/dist/src/cli/runtime/headers.d.ts.map +1 -0
  120. package/dist/src/cli/runtime/headers.js +36 -0
  121. package/dist/src/cli/runtime/headers.js.map +10 -0
  122. package/dist/src/cli/runtime/index.d.ts +4 -0
  123. package/dist/src/cli/runtime/index.d.ts.map +1 -0
  124. package/dist/src/cli/runtime/index.js +1808 -0
  125. package/dist/src/cli/runtime/index.js.map +46 -0
  126. package/dist/src/cli/runtime/profile/secrets.d.ts +25 -0
  127. package/dist/src/cli/runtime/profile/secrets.d.ts.map +1 -0
  128. package/dist/src/cli/runtime/profile/secrets.js +51 -0
  129. package/dist/src/cli/runtime/profile/secrets.js.map +11 -0
  130. package/dist/src/cli/runtime/profile/store.d.ts +15 -0
  131. package/dist/src/cli/runtime/profile/store.d.ts.map +1 -0
  132. package/dist/src/cli/runtime/profile/store.js +102 -0
  133. package/dist/src/cli/runtime/profile/store.js.map +11 -0
  134. package/dist/src/cli/runtime/request.d.ts +36 -0
  135. package/dist/src/cli/runtime/request.d.ts.map +1 -0
  136. package/dist/src/cli/runtime/request.js +571 -0
  137. package/dist/src/cli/runtime/request.js.map +21 -0
  138. package/dist/src/cli/runtime/server-url.d.ts +8 -0
  139. package/dist/src/cli/runtime/server-url.d.ts.map +1 -0
  140. package/dist/src/cli/runtime/server-url.js +55 -0
  141. package/dist/src/cli/runtime/server-url.js.map +11 -0
  142. package/dist/src/cli/runtime/template.d.ts +5 -0
  143. package/dist/src/cli/runtime/template.d.ts.map +1 -0
  144. package/dist/src/cli/runtime/template.js +29 -0
  145. package/dist/src/cli/runtime/template.js.map +10 -0
  146. package/dist/src/cli/runtime/validate/ajv.d.ts +3 -0
  147. package/dist/src/cli/runtime/validate/ajv.d.ts.map +1 -0
  148. package/dist/src/cli/runtime/validate/ajv.js +17 -0
  149. package/dist/src/cli/runtime/validate/ajv.js.map +10 -0
  150. package/dist/src/cli/runtime/validate/coerce.d.ts +4 -0
  151. package/dist/src/cli/runtime/validate/coerce.d.ts.map +1 -0
  152. package/dist/src/cli/runtime/validate/coerce.js +60 -0
  153. package/dist/src/cli/runtime/validate/coerce.js.map +10 -0
  154. package/dist/src/cli/runtime/validate/error.d.ts +3 -0
  155. package/dist/src/cli/runtime/validate/error.d.ts.map +1 -0
  156. package/dist/src/cli/runtime/validate/error.js +21 -0
  157. package/dist/src/cli/runtime/validate/error.js.map +10 -0
  158. package/dist/src/cli/runtime/validate/index.d.ts +5 -0
  159. package/dist/src/cli/runtime/validate/index.d.ts.map +1 -0
  160. package/dist/src/cli/runtime/validate/index.js +122 -0
  161. package/dist/src/cli/runtime/validate/index.js.map +13 -0
  162. package/dist/src/cli/runtime/validate/schema.d.ts +9 -0
  163. package/dist/src/cli/runtime/validate/schema.d.ts.map +1 -0
  164. package/dist/src/cli/runtime/validate/schema.js +36 -0
  165. package/dist/src/cli/runtime/validate/schema.js.map +10 -0
  166. package/dist/src/cli/schema-shape.d.ts +5 -0
  167. package/dist/src/cli/schema-shape.d.ts.map +1 -0
  168. package/dist/src/cli/schema-shape.js +41 -0
  169. package/dist/src/cli/schema-shape.js.map +10 -0
  170. package/dist/src/cli/schema.d.ts +30 -0
  171. package/dist/src/cli/schema.d.ts.map +1 -0
  172. package/dist/src/cli/schema.js +38 -0
  173. package/dist/src/cli/schema.js.map +10 -0
  174. package/dist/src/cli/server.d.ts +16 -0
  175. package/dist/src/cli/server.d.ts.map +1 -0
  176. package/dist/src/cli/server.js +64 -0
  177. package/dist/src/cli/server.js.map +11 -0
  178. package/dist/src/cli/spec-id.d.ts +3 -0
  179. package/dist/src/cli/spec-id.d.ts.map +1 -0
  180. package/dist/src/cli/spec-id.js +21 -0
  181. package/dist/src/cli/spec-id.js.map +11 -0
  182. package/dist/src/cli/spec-loader.d.ts +7 -0
  183. package/dist/src/cli/spec-loader.d.ts.map +1 -0
  184. package/dist/src/cli/spec-loader.js +110 -0
  185. package/dist/src/cli/spec-loader.js.map +15 -0
  186. package/dist/src/cli/stable-json.d.ts +4 -0
  187. package/dist/src/cli/stable-json.d.ts.map +1 -0
  188. package/dist/src/cli/stable-json.js +35 -0
  189. package/dist/src/cli/stable-json.js.map +10 -0
  190. package/dist/src/cli/strings.d.ts +3 -0
  191. package/dist/src/cli/strings.d.ts.map +1 -0
  192. package/dist/src/cli/strings.js +16 -0
  193. package/dist/src/cli/strings.js.map +10 -0
  194. package/dist/src/cli/types.d.ts +53 -0
  195. package/dist/src/cli/types.d.ts.map +1 -0
  196. package/dist/src/cli/types.js +9 -0
  197. package/dist/src/cli/types.js.map +10 -0
  198. package/package.json +31 -4
  199. package/src/ai/tools.ts +211 -0
  200. package/src/cli/main.ts +3 -2
  201. package/src/cli/runtime/body.ts +3 -3
  202. package/src/cli/runtime/compat.ts +89 -0
  203. package/src/cli/runtime/execute.ts +98 -39
  204. package/src/cli/runtime/generated.ts +111 -4
  205. package/src/cli/runtime/profile/secrets.ts +42 -1
  206. package/src/cli/runtime/profile/store.ts +15 -13
  207. package/src/cli/runtime/request.ts +12 -4
  208. package/src/cli/spec-loader.ts +2 -2
@@ -0,0 +1,48 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/cli/runtime/body-flags.ts", "../../../src/cli/main.ts", "../../../src/cli/runtime/argv.ts", "../../../src/cli/runtime/collect.ts", "../../../src/cli/runtime/compat.ts", "../../../src/cli/strings.ts", "../../../src/cli/auth-schemes.ts", "../../../src/cli/capabilities.ts", "../../../src/cli/command-index.ts", "../../../src/cli/auth-requirements.ts", "../../../src/cli/command-id.ts", "../../../src/cli/schema-shape.ts", "../../../src/cli/params.ts", "../../../src/cli/positional.ts", "../../../src/cli/types.ts", "../../../src/cli/request-body.ts", "../../../src/cli/command-model.ts", "../../../src/cli/pluralize.ts", "../../../src/cli/naming.ts", "../../../src/cli/operations.ts", "../../../src/cli/schema.ts", "../../../src/cli/server.ts", "../../../src/cli/spec-loader.ts", "../../../src/cli/crypto.ts", "../../../src/cli/spec-id.ts", "../../../src/cli/stable-json.ts", "../../../src/cli/runtime/context.ts", "../../../src/cli/runtime/generated.ts", "../../../src/cli/runtime/auth/resolve.ts", "../../../src/cli/runtime/profile/secrets.ts", "../../../src/cli/runtime/profile/store.ts", "../../../src/cli/runtime/template.ts", "../../../src/cli/runtime/server-url.ts", "../../../src/cli/runtime/validate/ajv.ts", "../../../src/cli/runtime/validate/coerce.ts", "../../../src/cli/runtime/validate/error.ts", "../../../src/cli/runtime/validate/schema.ts", "../../../src/cli/runtime/request.ts", "../../../src/cli/runtime/execute.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Body flag generation and parsing utilities.\n *\n * Generates CLI flags from JSON schema properties and parses\n * dot-notation flags back into nested objects.\n */\n\ntype JsonSchema = {\n\ttype?: string;\n\tproperties?: Record<string, JsonSchema>;\n\titems?: JsonSchema;\n\trequired?: string[];\n\tdescription?: string;\n};\n\nexport type BodyFlagDef = {\n\tflag: string; // e.g. \"--name\" or \"--address.street\"\n\tpath: string[]; // e.g. [\"name\"] or [\"address\", \"street\"]\n\ttype: \"string\" | \"number\" | \"integer\" | \"boolean\";\n\tdescription: string;\n\trequired: boolean;\n};\n\n/**\n * Generate flag definitions from a JSON schema.\n * Recursively handles nested objects using dot notation.\n */\nexport function generateBodyFlags(\n\tschema: JsonSchema | undefined,\n\treservedFlags: Set<string>,\n): BodyFlagDef[] {\n\tif (!schema || schema.type !== \"object\" || !schema.properties) {\n\t\treturn [];\n\t}\n\n\tconst flags: BodyFlagDef[] = [];\n\tconst requiredSet = new Set(schema.required ?? []);\n\n\tcollectFlags(schema.properties, [], requiredSet, flags, reservedFlags);\n\n\treturn flags;\n}\n\nfunction collectFlags(\n\tproperties: Record<string, JsonSchema>,\n\tpathPrefix: string[],\n\trequiredAtRoot: Set<string>,\n\tout: BodyFlagDef[],\n\treservedFlags: Set<string>,\n): void {\n\tfor (const [name, propSchema] of Object.entries(properties)) {\n\t\tif (!name || typeof name !== \"string\") continue;\n\t\tif (!propSchema || typeof propSchema !== \"object\") continue;\n\n\t\tconst path = [...pathPrefix, name];\n\t\tconst flagName = `--${path.join(\".\")}`;\n\n\t\t// Skip if this flag would conflict with an operation parameter\n\t\tif (reservedFlags.has(flagName)) continue;\n\n\t\tconst t = propSchema.type;\n\n\t\tif (t === \"object\" && propSchema.properties) {\n\t\t\t// Recurse into nested object\n\t\t\tconst nestedRequired = new Set(propSchema.required ?? []);\n\t\t\tcollectFlags(\n\t\t\t\tpropSchema.properties,\n\t\t\t\tpath,\n\t\t\t\tnestedRequired,\n\t\t\t\tout,\n\t\t\t\treservedFlags,\n\t\t\t);\n\t\t} else if (\n\t\t\tt === \"string\" ||\n\t\t\tt === \"number\" ||\n\t\t\tt === \"integer\" ||\n\t\t\tt === \"boolean\"\n\t\t) {\n\t\t\t// Leaf property - generate a flag\n\t\t\tconst isRequired =\n\t\t\t\tpathPrefix.length === 0 ? requiredAtRoot.has(name) : false;\n\n\t\t\tout.push({\n\t\t\t\tflag: flagName,\n\t\t\t\tpath,\n\t\t\t\ttype: t,\n\t\t\t\tdescription: propSchema.description ?? `Body field '${path.join(\".\")}'`,\n\t\t\t\trequired: isRequired,\n\t\t\t});\n\t\t}\n\t\t// Skip arrays and other complex types for now\n\t}\n}\n\n/**\n * Parse flag values with dot notation into a nested object.\n *\n * Example:\n * { \"address.street\": \"123 Main\", \"address.city\": \"NYC\", \"name\": \"Ada\" }\n * Becomes:\n * { address: { street: \"123 Main\", city: \"NYC\" }, name: \"Ada\" }\n */\nexport function parseDotNotationFlags(\n\tflagValues: Record<string, unknown>,\n\tflagDefs: BodyFlagDef[],\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (const def of flagDefs) {\n\t\t// Commander keeps dots in option names: --address.street -> \"address.street\"\n\t\tconst dotKey = def.path.join(\".\");\n\t\tconst value = flagValues[dotKey];\n\n\t\tif (value === undefined) continue;\n\n\t\tsetNestedValue(result, def.path, value, def.type);\n\t}\n\n\treturn result;\n}\n\n/**\n * Set a value at a nested path, creating intermediate objects as needed.\n */\nfunction setNestedValue(\n\tobj: Record<string, unknown>,\n\tpath: string[],\n\tvalue: unknown,\n\ttype: string,\n): void {\n\tlet current = obj;\n\n\tfor (let i = 0; i < path.length - 1; i++) {\n\t\tconst key = path[i] as string;\n\t\tif (!(key in current) || typeof current[key] !== \"object\") {\n\t\t\tcurrent[key] = {};\n\t\t}\n\t\tcurrent = current[key] as Record<string, unknown>;\n\t}\n\n\tconst finalKey = path[path.length - 1] as string;\n\n\t// Coerce value based on type\n\tif (type === \"boolean\") {\n\t\tcurrent[finalKey] = true;\n\t} else if (type === \"integer\") {\n\t\tcurrent[finalKey] = Number.parseInt(String(value), 10);\n\t} else if (type === \"number\") {\n\t\tcurrent[finalKey] = Number(String(value));\n\t} else {\n\t\tcurrent[finalKey] = String(value);\n\t}\n}\n\n/**\n * Check if all required fields are present.\n * Returns list of missing field paths.\n */\nexport function findMissingRequired(\n\tflagValues: Record<string, unknown>,\n\tflagDefs: BodyFlagDef[],\n): string[] {\n\tconst missing: string[] = [];\n\n\tfor (const def of flagDefs) {\n\t\tif (!def.required) continue;\n\n\t\t// Commander keeps dots in option names: --address.street -> \"address.street\"\n\t\tconst dotKey = def.path.join(\".\");\n\t\tif (flagValues[dotKey] === undefined) {\n\t\t\tmissing.push(dotKey);\n\t\t}\n\t}\n\n\treturn missing;\n}\n",
6
+ "import { Command } from \"commander\";\n\nimport { getArgValue, hasAnyArg } from \"./runtime/argv.ts\";\nimport { collectRepeatable } from \"./runtime/collect.ts\";\nimport { readStdinText } from \"./runtime/compat.ts\";\nimport { buildRuntimeContext } from \"./runtime/context.ts\";\nimport { addGeneratedCommands } from \"./runtime/generated.ts\";\nimport { deleteToken, getToken, setToken } from \"./runtime/profile/secrets.ts\";\nimport {\n\treadProfiles,\n\tupsertProfile,\n\twriteProfiles,\n} from \"./runtime/profile/store.ts\";\nimport { toMinimalSchemaOutput } from \"./schema.ts\";\nimport { stableStringify } from \"./stable-json.ts\";\n\ntype MainOptions = {\n\tembeddedSpecText?: string;\n\tcliName?: string;\n\tserver?: string;\n\tserverVars?: string[];\n\tauth?: string;\n};\n\nexport async function main(argv: string[], options: MainOptions = {}) {\n\tconst program = new Command();\n\n\tprogram\n\t\t.name(options.cliName ?? \"specli\")\n\t\t.description(\"Generate a CLI from an OpenAPI spec\")\n\t\t.option(\"--spec <urlOrPath>\", \"OpenAPI URL or file path\")\n\t\t.option(\"--server <url>\", \"Override server/base URL\")\n\t\t.option(\n\t\t\t\"--server-var <name=value>\",\n\t\t\t\"Server URL template variable (repeatable)\",\n\t\t\tcollectRepeatable,\n\t\t)\n\t\t.option(\"--auth <scheme>\", \"Select auth scheme by key\")\n\t\t.option(\"--bearer-token <token>\", \"Bearer token (Authorization: Bearer)\")\n\t\t.option(\"--oauth-token <token>\", \"OAuth token (alias of bearer)\")\n\t\t.option(\"--username <username>\", \"Basic auth username\")\n\t\t.option(\"--password <password>\", \"Basic auth password\")\n\t\t.option(\"--api-key <key>\", \"API key value\")\n\t\t.option(\"--json\", \"Machine-readable output\")\n\t\t.showHelpAfterError();\n\n\t// If user asks for help and we have no embedded spec and no --spec, show minimal help.\n\tconst spec = getArgValue(argv, \"--spec\");\n\tconst wantsHelp = hasAnyArg(argv, [\"-h\", \"--help\"]);\n\tif (!spec && !options.embeddedSpecText && wantsHelp) {\n\t\tprogram.addHelpText(\n\t\t\t\"after\",\n\t\t\t\"\\nTo see generated commands, run with --spec <url|path>.\\n\",\n\t\t);\n\t\tprogram.parse(argv);\n\t\treturn;\n\t}\n\n\tconst ctx = await buildRuntimeContext({\n\t\tspec,\n\t\tembeddedSpecText: options.embeddedSpecText,\n\t});\n\n\t// Simple auth commands\n\tconst defaultProfileName = \"default\";\n\n\tprogram\n\t\t.command(\"login [token]\")\n\t\t.description(\"Store a bearer token for authentication\")\n\t\t.action(async (tokenArg: string | undefined, _opts, command) => {\n\t\t\tconst globals = command.optsWithGlobals() as { json?: boolean };\n\n\t\t\tlet token = tokenArg;\n\n\t\t\t// If no token argument, try to read from stdin (for piping)\n\t\t\tif (!token) {\n\t\t\t\tconst isTTY = process.stdin.isTTY;\n\t\t\t\tif (isTTY) {\n\t\t\t\t\t// Interactive mode - prompt user\n\t\t\t\t\tprocess.stdout.write(\"Enter token: \");\n\t\t\t\t\tconst reader = process.stdin;\n\t\t\t\t\tconst chunks: Buffer[] = [];\n\t\t\t\t\tfor await (const chunk of reader) {\n\t\t\t\t\t\tchunks.push(chunk);\n\t\t\t\t\t\t// Read one line only\n\t\t\t\t\t\tif (chunk.includes(10)) break; // newline\n\t\t\t\t\t}\n\t\t\t\t\ttoken = Buffer.concat(chunks).toString().trim();\n\t\t\t\t} else {\n\t\t\t\t\t// Piped input - use cross-runtime stdin reading\n\t\t\t\t\tconst text = await readStdinText();\n\t\t\t\t\ttoken = text.trim();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!token) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"No token provided. Usage: login <token> or echo $TOKEN | login\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Ensure default profile exists\n\t\t\tconst file = await readProfiles();\n\t\t\tif (!file.profiles.find((p) => p.name === defaultProfileName)) {\n\t\t\t\tconst updated = upsertProfile(file, { name: defaultProfileName });\n\t\t\t\tawait writeProfiles({ ...updated, defaultProfile: defaultProfileName });\n\t\t\t} else if (!file.defaultProfile) {\n\t\t\t\tawait writeProfiles({ ...file, defaultProfile: defaultProfileName });\n\t\t\t}\n\n\t\t\tawait setToken(ctx.loaded.id, defaultProfileName, token);\n\n\t\t\tif (globals.json) {\n\t\t\t\tprocess.stdout.write(`${JSON.stringify({ ok: true })}\\n`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tprocess.stdout.write(\"ok: logged in\\n\");\n\t\t});\n\n\tprogram\n\t\t.command(\"logout\")\n\t\t.description(\"Clear stored authentication token\")\n\t\t.action(async (_opts, command) => {\n\t\t\tconst globals = command.optsWithGlobals() as { json?: boolean };\n\n\t\t\tconst deleted = await deleteToken(ctx.loaded.id, defaultProfileName);\n\n\t\t\tif (globals.json) {\n\t\t\t\tprocess.stdout.write(`${JSON.stringify({ ok: deleted })}\\n`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tprocess.stdout.write(\n\t\t\t\tdeleted ? \"ok: logged out\\n\" : \"ok: not logged in\\n\",\n\t\t\t);\n\t\t});\n\n\tprogram\n\t\t.command(\"whoami\")\n\t\t.description(\"Show current authentication status\")\n\t\t.action(async (_opts, command) => {\n\t\t\tconst globals = command.optsWithGlobals() as { json?: boolean };\n\n\t\t\tconst token = await getToken(ctx.loaded.id, defaultProfileName);\n\t\t\tconst hasToken = Boolean(token);\n\n\t\t\t// Mask the token for display (show first 8 and last 4 chars)\n\t\t\tlet maskedToken: string | null = null;\n\t\t\tif (token && token.length > 16) {\n\t\t\t\tmaskedToken = `${token.slice(0, 8)}...${token.slice(-4)}`;\n\t\t\t} else if (token) {\n\t\t\t\tmaskedToken = `${token.slice(0, 4)}...`;\n\t\t\t}\n\n\t\t\tif (globals.json) {\n\t\t\t\tprocess.stdout.write(\n\t\t\t\t\t`${JSON.stringify({ authenticated: hasToken, token: maskedToken })}\\n`,\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (hasToken) {\n\t\t\t\tprocess.stdout.write(`authenticated: yes\\n`);\n\t\t\t\tprocess.stdout.write(`token: ${maskedToken}\\n`);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`authenticated: no\\n`);\n\t\t\t\tprocess.stdout.write(`Run 'login <token>' to authenticate.\\n`);\n\t\t\t}\n\t\t});\n\n\tprogram\n\t\t.command(\"__schema\")\n\t\t.description(\"Print indexed operations (machine-readable when --json)\")\n\t\t.option(\"--pretty\", \"Pretty-print JSON when used with --json\")\n\t\t.option(\"--min\", \"Minimal JSON output (commands + metadata only)\")\n\t\t.action(async (_opts, command) => {\n\t\t\tconst flags = command.optsWithGlobals() as {\n\t\t\t\tjson?: boolean;\n\t\t\t\tpretty?: boolean;\n\t\t\t\tmin?: boolean;\n\t\t\t};\n\n\t\t\tif (flags.json) {\n\t\t\t\tconst pretty = Boolean(flags.pretty);\n\t\t\t\tconst payload = flags.min\n\t\t\t\t\t? toMinimalSchemaOutput(ctx.schema)\n\t\t\t\t\t: ctx.schema;\n\t\t\t\tconst text = stableStringify(payload, { space: pretty ? 2 : 0 });\n\t\t\t\tprocess.stdout.write(`${text}\\n`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tprocess.stdout.write(`${ctx.schema.openapi.title ?? \"(untitled)\"}\\n`);\n\t\t\tprocess.stdout.write(`OpenAPI: ${ctx.schema.openapi.version}\\n`);\n\t\t\tprocess.stdout.write(\n\t\t\t\t`Spec: ${ctx.schema.spec.id} (${ctx.schema.spec.source})\\n`,\n\t\t\t);\n\t\t\tprocess.stdout.write(`Fingerprint: ${ctx.schema.spec.fingerprint}\\n`);\n\t\t\tprocess.stdout.write(`Servers: ${ctx.schema.servers.length}\\n`);\n\t\t\tprocess.stdout.write(`Auth Schemes: ${ctx.schema.authSchemes.length}\\n`);\n\t\t\tprocess.stdout.write(`Operations: ${ctx.schema.operations.length}\\n`);\n\n\t\t\tfor (const op of ctx.schema.operations) {\n\t\t\t\tconst id = op.operationId ? ` (${op.operationId})` : \"\";\n\t\t\t\tprocess.stdout.write(`- ${op.method} ${op.path}${id}\\n`);\n\t\t\t}\n\n\t\t\tif (ctx.schema.planned?.length) {\n\t\t\t\tprocess.stdout.write(\"\\nPlanned commands:\\n\");\n\t\t\t\tfor (const op of ctx.schema.planned) {\n\t\t\t\t\tconst args = op.pathArgs.length\n\t\t\t\t\t\t? ` ${op.pathArgs.map((a) => `<${a}>`).join(\" \")}`\n\t\t\t\t\t\t: \"\";\n\t\t\t\t\tprocess.stdout.write(`- specli ${op.resource} ${op.action}${args}\\n`);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\taddGeneratedCommands(program, {\n\t\tservers: ctx.servers,\n\t\tauthSchemes: ctx.authSchemes,\n\t\tcommands: ctx.commands,\n\t\tspecId: ctx.loaded.id,\n\t\tembeddedDefaults: {\n\t\t\tserver: options.server,\n\t\t\tserverVars: options.serverVars,\n\t\t\tauth: options.auth,\n\t\t},\n\t});\n\n\tawait program.parseAsync(argv);\n}\n",
7
+ "export function getArgValue(argv: string[], key: string): string | undefined {\n\tfor (let i = 0; i < argv.length; i++) {\n\t\tconst a = argv[i];\n\t\tif (!a) continue;\n\n\t\tif (a === key) return argv[i + 1];\n\t\tif (a.startsWith(`${key}=`)) return a.slice(key.length + 1);\n\t}\n\treturn undefined;\n}\n\nexport function hasAnyArg(argv: string[], names: string[]): boolean {\n\treturn argv.some((a) => a && names.includes(a));\n}\n",
8
+ "export function collectRepeatable(\n\tvalue: string,\n\tprevious: string[] | undefined,\n): string[] {\n\treturn [...(previous ?? []), value];\n}\n",
9
+ "/**\n * Cross-runtime compatibility utilities for Bun and Node.js\n *\n * This module provides abstractions over Bun-specific APIs to allow\n * the exec command to run in Node.js while compile remains Bun-only.\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { parse as parseYaml } from \"yaml\";\n\n/**\n * Detect if we're running in Bun\n */\nexport const isBun = typeof globalThis.Bun !== \"undefined\";\n\n/**\n * Read a file's text content - works in both Bun and Node.js\n */\nexport async function readFileText(path: string): Promise<string> {\n\tif (isBun) {\n\t\treturn Bun.file(path).text();\n\t}\n\treturn readFileSync(path, \"utf-8\");\n}\n\n/**\n * Check if a file exists - works in both Bun and Node.js\n */\nexport async function fileExists(path: string): Promise<boolean> {\n\tif (isBun) {\n\t\treturn Bun.file(path).exists();\n\t}\n\treturn existsSync(path);\n}\n\n/**\n * Write text to a file - works in both Bun and Node.js\n */\nexport async function writeFileText(\n\tpath: string,\n\tcontent: string,\n): Promise<void> {\n\tif (isBun) {\n\t\tawait Bun.write(path, content);\n\t\treturn;\n\t}\n\twriteFileSync(path, content, \"utf-8\");\n}\n\n/**\n * Create directory recursively - works in both Bun and Node.js\n */\nexport async function mkdirp(path: string): Promise<void> {\n\tif (isBun) {\n\t\tawait Bun.$`mkdir -p ${path}`;\n\t\treturn;\n\t}\n\tmkdirSync(path, { recursive: true });\n}\n\n/**\n * Parse YAML content - works in both Bun and Node.js\n */\nexport function parseYamlContent(text: string): unknown {\n\tif (isBun) {\n\t\tconst { YAML } = globalThis.Bun;\n\t\treturn YAML.parse(text);\n\t}\n\treturn parseYaml(text);\n}\n\n/**\n * Read from stdin - works in both Bun and Node.js\n */\nexport async function readStdinText(): Promise<string> {\n\tif (isBun) {\n\t\treturn Bun.stdin.text();\n\t}\n\t// Node.js stdin reading\n\treturn new Promise((resolve, reject) => {\n\t\tlet data = \"\";\n\t\tprocess.stdin.setEncoding(\"utf8\");\n\t\tprocess.stdin.on(\"data\", (chunk) => {\n\t\t\tdata += chunk;\n\t\t});\n\t\tprocess.stdin.on(\"end\", () => resolve(data));\n\t\tprocess.stdin.on(\"error\", reject);\n\t});\n}\n",
10
+ "export function kebabCase(input: string): string {\n\tconst trimmed = input.trim();\n\tif (!trimmed) return \"\";\n\n\t// Convert spaces/underscores/dots to dashes, split camelCase.\n\treturn trimmed\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n\t\t.replace(/[\\s_.:/]+/g, \"-\")\n\t\t.replace(/[^a-zA-Z0-9-]/g, \"-\")\n\t\t.replace(/-+/g, \"-\")\n\t\t.replace(/^-|-$/g, \"\")\n\t\t.toLowerCase();\n}\n\nexport function titleCase(input: string): string {\n\treturn input\n\t\t.split(/\\s+/g)\n\t\t.filter(Boolean)\n\t\t.map((w) => w[0]?.toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n",
11
+ "import { kebabCase } from \"./strings.ts\";\nimport type { OpenApiDoc } from \"./types.ts\";\n\nexport type AuthSchemeKind =\n\t| \"http-bearer\"\n\t| \"http-basic\"\n\t| \"api-key\"\n\t| \"oauth2\"\n\t| \"openIdConnect\"\n\t| \"unknown\";\n\nexport type AuthScheme = {\n\tkey: string;\n\tkind: AuthSchemeKind;\n\tname?: string;\n\tin?: \"header\" | \"query\" | \"cookie\";\n\tscheme?: string;\n\tbearerFormat?: string;\n\tdescription?: string;\n\n\t// oauth2/openid only (subset of spec, enough to derive flags + docs)\n\toauthFlows?: OAuthFlows;\n\topenIdConnectUrl?: string;\n};\n\nexport type OAuthFlow = {\n\tauthorizationUrl?: string;\n\ttokenUrl?: string;\n\trefreshUrl?: string;\n\tscopes: string[];\n};\n\nexport type OAuthFlows = Partial<\n\tRecord<\n\t\t\"implicit\" | \"password\" | \"clientCredentials\" | \"authorizationCode\",\n\t\tOAuthFlow\n\t>\n>;\n\ntype RawOAuthFlow = {\n\tauthorizationUrl?: unknown;\n\ttokenUrl?: unknown;\n\trefreshUrl?: unknown;\n\tscopes?: unknown;\n};\n\ntype RawOAuthFlows = {\n\timplicit?: RawOAuthFlow;\n\tpassword?: RawOAuthFlow;\n\tclientCredentials?: RawOAuthFlow;\n\tauthorizationCode?: RawOAuthFlow;\n};\n\ntype RawSecurityScheme = {\n\ttype?: string;\n\tdescription?: string;\n\tname?: string;\n\tin?: string;\n\tscheme?: string;\n\tbearerFormat?: string;\n\tflows?: RawOAuthFlows;\n\topenIdConnectUrl?: string;\n};\n\nfunction parseOAuthFlow(flow: RawOAuthFlow | undefined): OAuthFlow | undefined {\n\tif (!flow) return undefined;\n\tconst scopesObj = flow.scopes;\n\tconst scopes =\n\t\tscopesObj && typeof scopesObj === \"object\" && !Array.isArray(scopesObj)\n\t\t\t? Object.keys(scopesObj as Record<string, unknown>)\n\t\t\t: [];\n\n\treturn {\n\t\tauthorizationUrl:\n\t\t\ttypeof flow.authorizationUrl === \"string\"\n\t\t\t\t? flow.authorizationUrl\n\t\t\t\t: undefined,\n\t\ttokenUrl: typeof flow.tokenUrl === \"string\" ? flow.tokenUrl : undefined,\n\t\trefreshUrl:\n\t\t\ttypeof flow.refreshUrl === \"string\" ? flow.refreshUrl : undefined,\n\t\tscopes: scopes.sort(),\n\t};\n}\n\nfunction parseOAuthFlows(\n\tflows: RawOAuthFlows | undefined,\n): OAuthFlows | undefined {\n\tif (!flows) return undefined;\n\tconst out: OAuthFlows = {};\n\n\tconst implicit = parseOAuthFlow(flows.implicit);\n\tif (implicit) out.implicit = implicit;\n\n\tconst password = parseOAuthFlow(flows.password);\n\tif (password) out.password = password;\n\n\tconst clientCredentials = parseOAuthFlow(flows.clientCredentials);\n\tif (clientCredentials) out.clientCredentials = clientCredentials;\n\n\tconst authorizationCode = parseOAuthFlow(flows.authorizationCode);\n\tif (authorizationCode) out.authorizationCode = authorizationCode;\n\n\treturn Object.keys(out).length ? out : undefined;\n}\n\nexport function listAuthSchemes(doc: OpenApiDoc): AuthScheme[] {\n\tconst schemes = doc.components?.securitySchemes;\n\tif (!schemes || typeof schemes !== \"object\") return [];\n\n\tconst out: AuthScheme[] = [];\n\n\tfor (const [key, raw] of Object.entries(schemes)) {\n\t\tif (!raw || typeof raw !== \"object\") continue;\n\t\tconst s = raw as RawSecurityScheme;\n\n\t\tconst type = s.type;\n\t\tif (type === \"http\") {\n\t\t\tconst scheme = (s.scheme ?? \"\").toLowerCase();\n\t\t\tif (scheme === \"bearer\") {\n\t\t\t\tout.push({\n\t\t\t\t\tkey,\n\t\t\t\t\tkind: \"http-bearer\",\n\t\t\t\t\tscheme: scheme,\n\t\t\t\t\tbearerFormat: s.bearerFormat,\n\t\t\t\t\tdescription: s.description,\n\t\t\t\t});\n\t\t\t} else if (scheme === \"basic\") {\n\t\t\t\tout.push({\n\t\t\t\t\tkey,\n\t\t\t\t\tkind: \"http-basic\",\n\t\t\t\t\tscheme: scheme,\n\t\t\t\t\tdescription: s.description,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tout.push({\n\t\t\t\t\tkey,\n\t\t\t\t\tkind: \"unknown\",\n\t\t\t\t\tscheme: s.scheme,\n\t\t\t\t\tdescription: s.description,\n\t\t\t\t});\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (type === \"apiKey\") {\n\t\t\tconst where = s.in;\n\t\t\tconst loc =\n\t\t\t\twhere === \"header\" || where === \"query\" || where === \"cookie\"\n\t\t\t\t\t? where\n\t\t\t\t\t: undefined;\n\t\t\tout.push({\n\t\t\t\tkey,\n\t\t\t\tkind: \"api-key\",\n\t\t\t\tname: s.name,\n\t\t\t\tin: loc,\n\t\t\t\tdescription: s.description,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (type === \"oauth2\") {\n\t\t\tout.push({\n\t\t\t\tkey,\n\t\t\t\tkind: \"oauth2\",\n\t\t\t\tdescription: s.description,\n\t\t\t\toauthFlows: parseOAuthFlows(s.flows),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (type === \"openIdConnect\") {\n\t\t\tout.push({\n\t\t\t\tkey,\n\t\t\t\tkind: \"openIdConnect\",\n\t\t\t\tdescription: s.description,\n\t\t\t\topenIdConnectUrl: s.openIdConnectUrl,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tout.push({ key, kind: \"unknown\", description: s.description });\n\t}\n\n\t// Stable order.\n\tout.sort((a, b) => kebabCase(a.key).localeCompare(kebabCase(b.key)));\n\treturn out;\n}\n",
12
+ "import type { AuthScheme, AuthSchemeKind } from \"./auth-schemes.ts\";\nimport type { CommandModel } from \"./command-model.ts\";\nimport type { ServerInfo } from \"./server.ts\";\nimport type {\n\tNormalizedOperation,\n\tOpenApiDoc,\n\tSecurityRequirement,\n} from \"./types.ts\";\n\nexport type Capabilities = {\n\tservers: {\n\t\tcount: number;\n\t\thasVariables: boolean;\n\t};\n\tauth: {\n\t\tcount: number;\n\t\tkinds: AuthSchemeKind[];\n\t\thasSecurityRequirements: boolean;\n\t};\n\toperations: {\n\t\tcount: number;\n\t\thasRequestBodies: boolean;\n\t};\n\tcommands: {\n\t\tcountResources: number;\n\t\tcountActions: number;\n\t\thasRequestBodies: boolean;\n\t};\n};\n\nfunction uniqueSorted<T>(items: T[], compare: (a: T, b: T) => number): T[] {\n\tconst out = [...items];\n\tout.sort(compare);\n\treturn out.filter((v, i) => i === 0 || compare(out[i - 1] as T, v) !== 0);\n}\n\nfunction hasSecurity(requirements: SecurityRequirement[] | undefined): boolean {\n\tif (!requirements?.length) return false;\n\n\t// Treat any non-empty array as \"auth exists\", even if it contains `{}` to mean optional.\n\treturn true;\n}\n\nexport function deriveCapabilities(input: {\n\tdoc: OpenApiDoc;\n\tservers: ServerInfo[];\n\tauthSchemes: AuthScheme[];\n\toperations: NormalizedOperation[];\n\tcommands?: CommandModel;\n}): Capabilities {\n\tconst serverHasVars = input.servers.some((s) => s.variableNames.length > 0);\n\n\tconst authKinds = uniqueSorted(\n\t\tinput.authSchemes.map((s) => s.kind),\n\t\t(a, b) => a.localeCompare(b),\n\t);\n\n\tconst hasSecurityRequirements =\n\t\thasSecurity(input.doc.security) ||\n\t\tinput.operations.some((op) => hasSecurity(op.security));\n\n\tconst opHasBodies = input.operations.some((op) => Boolean(op.requestBody));\n\n\tconst cmdResources = input.commands?.resources ?? [];\n\tconst cmdActions = cmdResources.flatMap((r) => r.actions);\n\tconst cmdHasBodies = cmdActions.some((a) => Boolean(a.requestBody));\n\n\treturn {\n\t\tservers: {\n\t\t\tcount: input.servers.length,\n\t\t\thasVariables: serverHasVars,\n\t\t},\n\t\tauth: {\n\t\t\tcount: input.authSchemes.length,\n\t\t\tkinds: authKinds,\n\t\t\thasSecurityRequirements,\n\t\t},\n\t\toperations: {\n\t\t\tcount: input.operations.length,\n\t\t\thasRequestBodies: opHasBodies,\n\t\t},\n\t\tcommands: {\n\t\t\tcountResources: cmdResources.length,\n\t\t\tcountActions: cmdActions.length,\n\t\t\thasRequestBodies: cmdHasBodies,\n\t\t},\n\t};\n}\n",
13
+ "import type { CommandAction, CommandModel } from \"./command-model.ts\";\n\nexport type CommandsIndex = {\n\tbyId: Record<string, CommandAction>;\n};\n\nexport function buildCommandsIndex(\n\tcommands: CommandModel | undefined,\n): CommandsIndex {\n\tconst byId: Record<string, CommandAction> = {};\n\n\tfor (const resource of commands?.resources ?? []) {\n\t\tfor (const action of resource.actions) {\n\t\t\tbyId[action.id] = action;\n\t\t}\n\t}\n\n\treturn { byId };\n}\n",
14
+ "import type { AuthScheme } from \"./auth-schemes.ts\";\nimport type { SecurityRequirement } from \"./types.ts\";\n\nexport type AuthRequirement = {\n\tkey: string;\n\tscopes: string[];\n};\n\nexport type AuthSummary = {\n\t// Alternatives: any one of these sets is sufficient.\n\talternatives: AuthRequirement[][];\n};\n\nfunction isSecurityRequirement(value: unknown): value is SecurityRequirement {\n\tif (!value || typeof value !== \"object\") return false;\n\tif (Array.isArray(value)) return false;\n\n\tfor (const [k, v] of Object.entries(value)) {\n\t\tif (typeof k !== \"string\") return false;\n\t\tif (!Array.isArray(v)) return false;\n\t\tif (!v.every((s) => typeof s === \"string\")) return false;\n\t}\n\n\treturn true;\n}\n\nfunction normalizeSecurity(value: unknown): {\n\trequirements: SecurityRequirement[];\n\tsource: \"none\" | \"empty\" | \"non-empty\";\n} {\n\tif (value == null) return { requirements: [], source: \"none\" };\n\tif (!Array.isArray(value)) return { requirements: [], source: \"none\" };\n\n\tconst reqs = value.filter(isSecurityRequirement);\n\tif (reqs.length === 0) return { requirements: [], source: \"empty\" };\n\treturn { requirements: reqs, source: \"non-empty\" };\n}\n\nexport function summarizeAuth(\n\toperationSecurity: unknown,\n\tglobalSecurity: unknown,\n\tknownSchemes: AuthScheme[],\n): AuthSummary {\n\t// Per spec:\n\t// - operation security overrides root\n\t// - empty array [] means \"no auth\"\n\tconst op = normalizeSecurity(operationSecurity);\n\tif (op.source === \"non-empty\") {\n\t\treturn { alternatives: toAlternatives(op.requirements, knownSchemes) };\n\t}\n\tif (op.source === \"empty\") {\n\t\treturn { alternatives: [] };\n\t}\n\n\tconst global = normalizeSecurity(globalSecurity);\n\tif (global.source === \"non-empty\") {\n\t\treturn { alternatives: toAlternatives(global.requirements, knownSchemes) };\n\t}\n\n\treturn { alternatives: [] };\n}\n\nfunction toAlternatives(\n\trequirements: SecurityRequirement[],\n\tknownSchemes: AuthScheme[],\n): AuthRequirement[][] {\n\tconst known = new Set(knownSchemes.map((s) => s.key));\n\n\treturn requirements.map((req) => {\n\t\tconst out: AuthRequirement[] = [];\n\t\tfor (const [key, scopes] of Object.entries(req)) {\n\t\t\tout.push({\n\t\t\t\tkey,\n\t\t\t\tscopes: Array.isArray(scopes) ? scopes : [],\n\t\t\t});\n\t\t}\n\n\t\t// Stable order.\n\t\tout.sort((a, b) => a.key.localeCompare(b.key));\n\n\t\t// Prefer known schemes first.\n\t\tout.sort((a, b) => {\n\t\t\tconst ak = known.has(a.key) ? 0 : 1;\n\t\t\tconst bk = known.has(b.key) ? 0 : 1;\n\t\t\tif (ak !== bk) return ak - bk;\n\t\t\treturn a.key.localeCompare(b.key);\n\t\t});\n\n\t\treturn out;\n\t});\n}\n",
15
+ "import { kebabCase } from \"./strings.ts\";\n\nexport type CommandIdParts = {\n\tspecId: string;\n\tresource: string;\n\taction: string;\n\toperationKey: string;\n};\n\nexport function buildCommandId(parts: CommandIdParts): string {\n\t// operationKey is the ultimate disambiguator, but we keep the id readable.\n\t// Example:\n\t// contacts-api:contacts:get:GET-/contacts/{id}\n\tconst op = kebabCase(parts.operationKey.replace(/\\s+/g, \"-\"));\n\treturn `${parts.specId}:${kebabCase(parts.resource)}:${kebabCase(parts.action)}:${op}`;\n}\n",
16
+ "export type ParamType =\n\t| \"string\"\n\t| \"number\"\n\t| \"integer\"\n\t| \"boolean\"\n\t| \"array\"\n\t| \"object\"\n\t| \"unknown\";\n\nexport function getSchemaType(schema: unknown): ParamType {\n\tif (!schema || typeof schema !== \"object\") return \"unknown\";\n\tconst t = (schema as { type?: unknown }).type;\n\tif (t === \"string\") return \"string\";\n\tif (t === \"number\") return \"number\";\n\tif (t === \"integer\") return \"integer\";\n\tif (t === \"boolean\") return \"boolean\";\n\tif (t === \"array\") return \"array\";\n\tif (t === \"object\") return \"object\";\n\treturn \"unknown\";\n}\n\nexport function getSchemaFormat(schema: unknown): string | undefined {\n\tif (!schema || typeof schema !== \"object\") return undefined;\n\tconst f = (schema as { format?: unknown }).format;\n\treturn typeof f === \"string\" ? f : undefined;\n}\n\nexport function getSchemaEnumStrings(schema: unknown): string[] | undefined {\n\tif (!schema || typeof schema !== \"object\") return undefined;\n\tconst e = (schema as { enum?: unknown }).enum;\n\tif (!Array.isArray(e)) return undefined;\n\n\t// We only surface string enums for now (enough for flag docs + completion).\n\tconst values = e.filter((v) => typeof v === \"string\") as string[];\n\treturn values.length ? values : undefined;\n}\n",
17
+ "import {\n\tgetSchemaEnumStrings,\n\tgetSchemaFormat,\n\tgetSchemaType,\n} from \"./schema-shape.ts\";\nimport { kebabCase } from \"./strings.ts\";\nimport type { NormalizedOperation, NormalizedParameter } from \"./types.ts\";\n\nexport type ParamType = import(\"./schema-shape.ts\").ParamType;\n\nexport type ParamSpec = {\n\tkind: \"positional\" | \"flag\";\n\tin: NormalizedParameter[\"in\"];\n\tname: string;\n\tflag: string;\n\trequired: boolean;\n\tdescription?: string;\n\ttype: ParamType;\n\tformat?: string;\n\tenum?: string[];\n\n\t// Arrays\n\titemType?: ParamType;\n\titemFormat?: string;\n\titemEnum?: string[];\n\n\t// Original schema for Ajv validation and future advanced flag expansion.\n\tschema?: import(\"./types.ts\").JsonSchema;\n};\n\nexport function deriveParamSpecs(op: NormalizedOperation): ParamSpec[] {\n\tconst out: ParamSpec[] = [];\n\n\tfor (const p of op.parameters) {\n\t\tconst flag = `--${kebabCase(p.name)}`;\n\t\tconst type = getSchemaType(p.schema);\n\t\tconst schemaObj =\n\t\t\tp.schema && typeof p.schema === \"object\"\n\t\t\t\t? (p.schema as import(\"./types.ts\").JsonSchema)\n\t\t\t\t: undefined;\n\n\t\tconst itemsSchema =\n\t\t\tschemaObj && type === \"array\" && typeof schemaObj.items === \"object\"\n\t\t\t\t? (schemaObj.items as unknown)\n\t\t\t\t: undefined;\n\n\t\tout.push({\n\t\t\tkind: p.in === \"path\" ? \"positional\" : \"flag\",\n\t\t\tin: p.in,\n\t\t\tname: p.name,\n\t\t\tflag,\n\t\t\trequired: p.required,\n\t\t\tdescription: p.description,\n\t\t\ttype,\n\t\t\tformat: getSchemaFormat(p.schema),\n\t\t\tenum: getSchemaEnumStrings(p.schema),\n\t\t\titemType: type === \"array\" ? getSchemaType(itemsSchema) : undefined,\n\t\t\titemFormat: type === \"array\" ? getSchemaFormat(itemsSchema) : undefined,\n\t\t\titemEnum:\n\t\t\t\ttype === \"array\" ? getSchemaEnumStrings(itemsSchema) : undefined,\n\t\t\tschema: schemaObj,\n\t\t});\n\t}\n\n\tout.sort((a, b) => {\n\t\tif (a.in !== b.in) return a.in.localeCompare(b.in);\n\t\treturn a.name.localeCompare(b.name);\n\t});\n\n\treturn out;\n}\n",
18
+ "import type { ParamSpec } from \"./params.ts\";\n\nexport type ActionShapeForCli = {\n\tpathArgs: string[];\n\tparams: ParamSpec[];\n};\n\nexport type PositionalArg = {\n\tname: string;\n\trequired: boolean;\n\tdescription?: string;\n\ttype: import(\"./schema-shape.ts\").ParamType;\n\tformat?: string;\n\tenum?: string[];\n};\n\nexport type FlagsIndex = {\n\tflags: Array<\n\t\tPick<\n\t\t\timport(\"./params.ts\").ParamSpec,\n\t\t\t| \"in\"\n\t\t\t| \"name\"\n\t\t\t| \"flag\"\n\t\t\t| \"required\"\n\t\t\t| \"description\"\n\t\t\t| \"type\"\n\t\t\t| \"format\"\n\t\t\t| \"enum\"\n\t\t\t| \"itemType\"\n\t\t\t| \"itemFormat\"\n\t\t\t| \"itemEnum\"\n\t\t>\n\t>;\n};\n\nexport function derivePositionals(action: ActionShapeForCli): PositionalArg[] {\n\tconst byName = new Map<string, PositionalArg>();\n\n\t// Use pathArgs order; match metadata from params when available.\n\tfor (const name of action.pathArgs) {\n\t\tconst p = action.params.find(\n\t\t\t(x: ParamSpec) => x.in === \"path\" && x.name === name,\n\t\t);\n\t\tbyName.set(name, {\n\t\t\tname,\n\t\t\trequired: true,\n\t\t\tdescription: p?.description,\n\t\t\ttype: p?.type ?? \"unknown\",\n\t\t\tformat: p?.format,\n\t\t\tenum: p?.enum,\n\t\t});\n\t}\n\n\treturn [...byName.values()];\n}\n\nexport function deriveFlags(action: ActionShapeForCli): FlagsIndex {\n\treturn {\n\t\tflags: action.params\n\t\t\t.filter((p: ParamSpec) => p.kind === \"flag\")\n\t\t\t.map((p: ParamSpec) => ({\n\t\t\t\tin: p.in,\n\t\t\t\tname: p.name,\n\t\t\t\tflag: p.flag,\n\t\t\t\trequired: p.required,\n\t\t\t\tdescription: p.description,\n\t\t\t\ttype: p.type,\n\t\t\t\tformat: p.format,\n\t\t\t\tenum: p.enum,\n\t\t\t\titemType: p.itemType,\n\t\t\t\titemFormat: p.itemFormat,\n\t\t\t\titemEnum: p.itemEnum,\n\t\t\t})),\n\t};\n}\n",
19
+ "export type SpecSource = \"embedded\" | \"file\" | \"url\";\n\nexport type SecurityRequirement = Record<string, string[]>;\n\nexport type OpenApiDoc = {\n\topenapi: string;\n\tinfo?: {\n\t\ttitle?: string;\n\t\tversion?: string;\n\t};\n\tservers?: Array<{ url: string; description?: string; variables?: unknown }>;\n\tsecurity?: SecurityRequirement[];\n\tcomponents?: {\n\t\tsecuritySchemes?: Record<string, unknown>;\n\t};\n\tpaths?: Record<string, unknown>;\n};\n\nexport type NormalizedParameter = {\n\tin: \"path\" | \"query\" | \"header\" | \"cookie\";\n\tname: string;\n\trequired: boolean;\n\tdescription?: string;\n\tschema?: unknown;\n};\n\n// Minimal JSON Schema-like shape for validation and flag expansion.\nexport type JsonSchema = Record<string, unknown>;\n\nexport function isJsonSchema(value: unknown): value is JsonSchema {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport type NormalizedRequestBody = {\n\trequired: boolean;\n\tcontentTypes: string[];\n\tschemasByContentType: Record<string, unknown | undefined>;\n};\n\nexport type NormalizedOperation = {\n\tkey: string;\n\tmethod: string;\n\tpath: string;\n\toperationId?: string;\n\ttags: string[];\n\tsummary?: string;\n\tdescription?: string;\n\tdeprecated?: boolean;\n\tsecurity?: SecurityRequirement[];\n\tparameters: NormalizedParameter[];\n\trequestBody?: NormalizedRequestBody;\n};\n\nexport type LoadedSpec = {\n\tsource: SpecSource;\n\tid: string;\n\tfingerprint: string;\n\tdoc: OpenApiDoc;\n};\n",
20
+ "import {\n\tgetSchemaEnumStrings,\n\tgetSchemaFormat,\n\tgetSchemaType,\n} from \"./schema-shape.ts\";\nimport type {\n\tJsonSchema,\n\tNormalizedOperation,\n\tNormalizedRequestBody,\n} from \"./types.ts\";\nimport { isJsonSchema } from \"./types.ts\";\n\nexport type RequestBodyContent = {\n\tcontentType: string;\n\trequired: boolean;\n\tschemaType: import(\"./schema-shape.ts\").ParamType;\n\tschemaFormat?: string;\n\tschemaEnum?: string[];\n};\n\nexport type RequestBodyInfo = {\n\trequired: boolean;\n\tcontent: RequestBodyContent[];\n\t// Convenience flags for later arg generation.\n\thasJson: boolean;\n\thasFormUrlEncoded: boolean;\n\thasMultipart: boolean;\n\n\t// Phase 1 planning: supported generic body inputs.\n\tbodyFlags: string[];\n\tpreferredContentType?: string;\n\n\t// Original JSON Schema (for expanded flags + validation)\n\tpreferredSchema?: JsonSchema;\n};\n\nfunction getRequestBody(\n\top: NormalizedOperation,\n): NormalizedRequestBody | undefined {\n\treturn op.requestBody;\n}\n\nexport function deriveRequestBodyInfo(\n\top: NormalizedOperation,\n): RequestBodyInfo | undefined {\n\tconst rb = getRequestBody(op);\n\tif (!rb) return undefined;\n\n\tconst content: RequestBodyContent[] = [];\n\tfor (const contentType of rb.contentTypes) {\n\t\tconst schema = rb.schemasByContentType[contentType];\n\t\tcontent.push({\n\t\t\tcontentType,\n\t\t\trequired: rb.required,\n\t\t\tschemaType: getSchemaType(schema),\n\t\t\tschemaFormat: getSchemaFormat(schema),\n\t\t\tschemaEnum: getSchemaEnumStrings(schema),\n\t\t});\n\t}\n\n\tcontent.sort((a, b) => a.contentType.localeCompare(b.contentType));\n\n\tconst hasJson = content.some((c) => c.contentType.includes(\"json\"));\n\tconst hasFormUrlEncoded = content.some(\n\t\t(c) => c.contentType === \"application/x-www-form-urlencoded\",\n\t);\n\tconst hasMultipart = content.some((c) =>\n\t\tc.contentType.startsWith(\"multipart/\"),\n\t);\n\n\tconst bodyFlags = [\"--data\", \"--file\"]; // always available when requestBody exists\n\n\tconst preferredContentType =\n\t\tcontent.find((c) => c.contentType === \"application/json\")?.contentType ??\n\t\tcontent.find((c) => c.contentType.includes(\"json\"))?.contentType ??\n\t\tcontent[0]?.contentType;\n\n\tconst preferredSchema = preferredContentType\n\t\t? rb.schemasByContentType[preferredContentType]\n\t\t: undefined;\n\n\treturn {\n\t\trequired: rb.required,\n\t\tcontent,\n\t\thasJson,\n\t\thasFormUrlEncoded,\n\t\thasMultipart,\n\t\tbodyFlags,\n\t\tpreferredContentType,\n\t\tpreferredSchema: isJsonSchema(preferredSchema)\n\t\t\t? preferredSchema\n\t\t\t: undefined,\n\t};\n}\n",
21
+ "import type { AuthSummary } from \"./auth-requirements.ts\";\nimport { summarizeAuth } from \"./auth-requirements.ts\";\nimport type { AuthScheme } from \"./auth-schemes.ts\";\nimport { buildCommandId } from \"./command-id.ts\";\nimport type { PlannedOperation } from \"./naming.ts\";\nimport type { ParamSpec } from \"./params.ts\";\nimport { deriveParamSpecs } from \"./params.ts\";\nimport { deriveFlags, derivePositionals } from \"./positional.ts\";\nimport type { RequestBodyInfo } from \"./request-body.ts\";\nimport { deriveRequestBodyInfo } from \"./request-body.ts\";\nimport type { SecurityRequirement } from \"./types.ts\";\n\nexport type CommandAction = {\n\tid: string;\n\tkey: string;\n\taction: string;\n\t// Derived path arguments. These become positionals later.\n\tpathArgs: string[];\n\tmethod: string;\n\tpath: string;\n\toperationId?: string;\n\ttags: string[];\n\tsummary?: string;\n\tdescription?: string;\n\tdeprecated?: boolean;\n\tstyle: PlannedOperation[\"style\"];\n\n\t// Derived CLI shape (Phase 1 output; Phase 2 will wire these into commander)\n\tpositionals: Array<import(\"./positional.ts\").PositionalArg>;\n\tflags: Array<\n\t\tPick<\n\t\t\timport(\"./params.ts\").ParamSpec,\n\t\t\t| \"in\"\n\t\t\t| \"name\"\n\t\t\t| \"flag\"\n\t\t\t| \"required\"\n\t\t\t| \"description\"\n\t\t\t| \"type\"\n\t\t\t| \"format\"\n\t\t\t| \"enum\"\n\t\t\t| \"itemType\"\n\t\t\t| \"itemFormat\"\n\t\t\t| \"itemEnum\"\n\t\t>\n\t>;\n\n\t// Full raw params list (useful for debugging and future features)\n\tparams: ParamSpec[];\n\n\tauth: AuthSummary;\n\trequestBody?: RequestBodyInfo;\n\trequestBodySchema?: import(\"./types.ts\").JsonSchema;\n};\n\nexport type CommandResource = {\n\tresource: string;\n\tactions: CommandAction[];\n};\n\nexport type CommandModel = {\n\tresources: CommandResource[];\n};\n\nexport type BuildCommandModelOptions = {\n\tspecId: string;\n\tglobalSecurity?: SecurityRequirement[];\n\tauthSchemes?: AuthScheme[];\n};\n\nexport function buildCommandModel(\n\tplanned: PlannedOperation[],\n\toptions: BuildCommandModelOptions,\n): CommandModel {\n\tconst byResource = new Map<string, CommandAction[]>();\n\n\tfor (const op of planned) {\n\t\tconst list = byResource.get(op.resource) ?? [];\n\t\tconst params = deriveParamSpecs(op);\n\t\tconst positionals = derivePositionals({ pathArgs: op.pathArgs, params });\n\t\tconst flags = deriveFlags({ pathArgs: op.pathArgs, params });\n\n\t\tlist.push({\n\t\t\tid: buildCommandId({\n\t\t\t\tspecId: options.specId,\n\t\t\t\tresource: op.resource,\n\t\t\t\taction: op.action,\n\t\t\t\toperationKey: op.key,\n\t\t\t}),\n\t\t\tkey: op.key,\n\t\t\taction: op.action,\n\t\t\tpathArgs: op.pathArgs,\n\t\t\tmethod: op.method,\n\t\t\tpath: op.path,\n\t\t\toperationId: op.operationId,\n\t\t\ttags: op.tags,\n\t\t\tsummary: op.summary,\n\t\t\tdescription: op.description,\n\t\t\tdeprecated: op.deprecated,\n\t\t\tstyle: op.style,\n\t\t\tparams,\n\t\t\tpositionals,\n\t\t\tflags: flags.flags,\n\t\t\tauth: summarizeAuth(\n\t\t\t\top.security,\n\t\t\t\toptions.globalSecurity,\n\t\t\t\toptions.authSchemes ?? [],\n\t\t\t),\n\t\t\trequestBody: deriveRequestBodyInfo(op),\n\t\t\trequestBodySchema: deriveRequestBodyInfo(op)?.preferredSchema,\n\t\t});\n\t\tbyResource.set(op.resource, list);\n\t}\n\n\tconst resources: CommandResource[] = [];\n\n\tfor (const [resource, actions] of byResource.entries()) {\n\t\tactions.sort((a, b) => {\n\t\t\tif (a.action !== b.action) return a.action.localeCompare(b.action);\n\t\t\tif (a.path !== b.path) return a.path.localeCompare(b.path);\n\t\t\treturn a.method.localeCompare(b.method);\n\t\t});\n\t\tresources.push({ resource, actions });\n\t}\n\n\tresources.sort((a, b) => a.resource.localeCompare(b.resource));\n\n\treturn { resources };\n}\n",
22
+ "const IRREGULAR: Record<string, string> = {\n\tperson: \"people\",\n\tman: \"men\",\n\twoman: \"women\",\n\tchild: \"children\",\n\ttooth: \"teeth\",\n\tfoot: \"feet\",\n\tmouse: \"mice\",\n\tgoose: \"geese\",\n};\n\nconst UNCOUNTABLE = new Set([\n\t\"metadata\",\n\t\"information\",\n\t\"equipment\",\n\t\"money\",\n\t\"series\",\n\t\"species\",\n]);\n\nexport function pluralize(word: string): string {\n\tconst w = word.trim();\n\tif (!w) return w;\n\n\tconst lower = w.toLowerCase();\n\tif (UNCOUNTABLE.has(lower)) return lower;\n\tif (IRREGULAR[lower]) return IRREGULAR[lower];\n\n\t// already plural-ish\n\tif (lower.endsWith(\"s\")) return lower;\n\n\tif (/[bcdfghjklmnpqrstvwxyz]y$/.test(lower)) {\n\t\treturn lower.replace(/y$/, \"ies\");\n\t}\n\n\tif (/(ch|sh|x|z)$/.test(lower)) {\n\t\treturn `${lower}es`;\n\t}\n\n\treturn `${lower}s`;\n}\n",
23
+ "import { pluralize } from \"./pluralize.ts\";\nimport { kebabCase } from \"./strings.ts\";\nimport type { NormalizedOperation } from \"./types.ts\";\n\nexport type PlannedOperation = NormalizedOperation & {\n\tresource: string;\n\taction: string;\n\tpathArgs: string[];\n\tstyle: \"rest\" | \"rpc\";\n\tcanonicalAction: string;\n\taliasOf?: string;\n};\n\nconst GENERIC_TAGS = new Set([\"default\", \"defaults\", \"api\"]);\n\nfunction getPathSegments(path: string): string[] {\n\treturn path\n\t\t.split(\"/\")\n\t\t.map((s) => s.trim())\n\t\t.filter(Boolean);\n}\n\nfunction getPathArgs(path: string): string[] {\n\tconst args: string[] = [];\n\tconst re = /\\{([^}]+)\\}/g;\n\n\twhile (true) {\n\t\tconst match = re.exec(path);\n\t\tif (!match) break;\n\t\t// biome-ignore lint/style/noNonNullAssertion: unknown\n\t\targs.push(match[1]!);\n\t}\n\n\treturn args;\n}\n\nfunction pickResourceFromTags(tags: string[]): string | undefined {\n\tif (!tags.length) return undefined;\n\tconst first = tags[0]?.trim();\n\tif (!first) return undefined;\n\tif (GENERIC_TAGS.has(first.toLowerCase())) return undefined;\n\treturn first;\n}\n\nfunction splitOperationId(operationId: string): {\n\tprefix?: string;\n\tsuffix?: string;\n} {\n\tconst trimmed = operationId.trim();\n\tif (!trimmed) return {};\n\n\t// Prefer dot-notation when present: Contacts.List\n\tif (trimmed.includes(\".\")) {\n\t\tconst [prefix, ...rest] = trimmed.split(\".\");\n\t\treturn { prefix, suffix: rest.join(\".\") };\n\t}\n\n\t// Try separators: Contacts_List, Contacts__List\n\tif (trimmed.includes(\"__\")) {\n\t\tconst [prefix, ...rest] = trimmed.split(\"__\");\n\t\treturn { prefix, suffix: rest.join(\"__\") };\n\t}\n\n\tif (trimmed.includes(\"_\")) {\n\t\tconst [prefix, ...rest] = trimmed.split(\"_\");\n\t\treturn { prefix, suffix: rest.join(\"_\") };\n\t}\n\n\treturn { suffix: trimmed };\n}\n\nfunction inferStyle(op: NormalizedOperation): \"rest\" | \"rpc\" {\n\t// Path-based RPC convention (common in gRPC-ish HTTP gateways)\n\t// - POST /Contacts.List\n\t// - POST /Contacts/Service.List\n\tif (op.path.includes(\".\")) return \"rpc\";\n\n\t// operationId dot-notation alone is not enough to call it RPC; many REST APIs\n\t// have dotted ids. We treat dotted operationId as a weak signal.\n\tif (op.operationId?.includes(\".\") && op.method === \"POST\") return \"rpc\";\n\n\treturn \"rest\";\n}\n\nfunction inferResource(op: NormalizedOperation): string {\n\tconst tag = pickResourceFromTags(op.tags);\n\tif (tag) return pluralize(kebabCase(tag));\n\n\tif (op.operationId) {\n\t\tconst { prefix } = splitOperationId(op.operationId);\n\t\tif (prefix) {\n\t\t\tconst fromId = kebabCase(prefix);\n\t\t\tif (fromId === \"ping\") return \"ping\";\n\t\t\treturn pluralize(fromId);\n\t\t}\n\t}\n\n\tconst segments = getPathSegments(op.path);\n\tlet first = segments[0] ?? \"api\";\n\n\t// If first segment is rpc-ish, like Contacts.List, split it.\n\t// biome-ignore lint/style/noNonNullAssertion: split always returns at least one element\n\tfirst = first.includes(\".\") ? first.split(\".\")[0]! : first;\n\n\t// Singletons like /ping generally shouldn't become `pings`.\n\tif (first.toLowerCase() === \"ping\") return \"ping\";\n\n\t// Strip path params if they appear in first segment (rare)\n\tconst cleaned = first.replace(/^\\{.+\\}$/, \"\");\n\treturn pluralize(kebabCase(cleaned || \"api\"));\n}\n\nfunction canonicalizeAction(action: string): string {\n\tconst a = kebabCase(action);\n\n\t// Common RPC verbs -> REST canonical verbs\n\tif (a === \"retrieve\" || a === \"read\") return \"get\";\n\tif (a === \"list\" || a === \"search\") return \"list\";\n\tif (a === \"create\") return \"create\";\n\tif (a === \"update\" || a === \"patch\") return \"update\";\n\tif (a === \"delete\" || a === \"remove\") return \"delete\";\n\n\treturn a;\n}\n\nfunction inferRestAction(op: NormalizedOperation): string {\n\t// If operationId is present and looks intentional, prefer it.\n\t// This helps with singleton endpoints like GET /ping (Ping.Get) vs collections.\n\tif (op.operationId) {\n\t\tconst { suffix } = splitOperationId(op.operationId);\n\t\tif (suffix) {\n\t\t\tconst fromId = canonicalizeAction(suffix);\n\t\t\tif (\n\t\t\t\tfromId === \"get\" ||\n\t\t\t\tfromId === \"list\" ||\n\t\t\t\tfromId === \"create\" ||\n\t\t\t\tfromId === \"update\" ||\n\t\t\t\tfromId === \"delete\"\n\t\t\t) {\n\t\t\t\treturn fromId;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst method = op.method.toUpperCase();\n\tconst args = getPathArgs(op.path);\n\tconst hasId = args.length > 0;\n\n\tif (method === \"GET\" && !hasId) return \"list\";\n\tif (method === \"POST\" && !hasId) return \"create\";\n\n\tif (method === \"GET\" && hasId) return \"get\";\n\tif ((method === \"PUT\" || method === \"PATCH\") && hasId) return \"update\";\n\tif (method === \"DELETE\" && hasId) return \"delete\";\n\n\treturn kebabCase(method);\n}\n\nfunction inferRpcAction(op: NormalizedOperation): string {\n\t// Prefer operationId suffix: Contacts.List -> list\n\tif (op.operationId) {\n\t\tconst { suffix } = splitOperationId(op.operationId);\n\t\tif (suffix) return canonicalizeAction(suffix);\n\t}\n\n\t// Else take last segment and split by '.'\n\tconst segments = getPathSegments(op.path);\n\tconst last = segments[segments.length - 1] ?? \"\";\n\tif (last.includes(\".\")) {\n\t\tconst part = last.split(\".\").pop() ?? last;\n\t\treturn canonicalizeAction(part);\n\t}\n\n\treturn kebabCase(op.method);\n}\n\nexport function planOperation(op: NormalizedOperation): PlannedOperation {\n\tconst style = inferStyle(op);\n\tconst resource = inferResource(op);\n\tconst action = style === \"rpc\" ? inferRpcAction(op) : inferRestAction(op);\n\n\treturn {\n\t\t...op,\n\t\tkey: op.key,\n\t\tstyle,\n\t\tresource,\n\t\taction,\n\t\tcanonicalAction: action,\n\t\tpathArgs: getPathArgs(op.path).map((a) => kebabCase(a)),\n\t};\n}\n\nexport function planOperations(ops: NormalizedOperation[]): PlannedOperation[] {\n\tconst planned = ops.map(planOperation);\n\n\t// Stable collision handling: if resource+action repeats, add a suffix.\n\tconst counts = new Map<string, number>();\n\tfor (const op of planned) {\n\t\tconst key = `${op.resource}:${op.action}`;\n\t\tcounts.set(key, (counts.get(key) ?? 0) + 1);\n\t}\n\n\tconst seen = new Map<string, number>();\n\treturn planned.map((op) => {\n\t\tconst key = `${op.resource}:${op.action}`;\n\t\tconst total = counts.get(key) ?? 0;\n\t\tif (total <= 1) return op;\n\n\t\tconst idx = (seen.get(key) ?? 0) + 1;\n\t\tseen.set(key, idx);\n\n\t\tconst suffix = op.operationId\n\t\t\t? kebabCase(op.operationId)\n\t\t\t: kebabCase(`${op.method}-${op.path}`);\n\n\t\tconst disambiguatedAction = `${op.action}-${suffix}-${idx}`;\n\n\t\treturn {\n\t\t\t...op,\n\t\t\taction: disambiguatedAction,\n\t\t\taliasOf: `${op.resource} ${op.canonicalAction}`,\n\t\t};\n\t});\n}\n",
24
+ "import type {\n\tNormalizedOperation,\n\tNormalizedParameter,\n\tNormalizedRequestBody,\n\tOpenApiDoc,\n} from \"./types.ts\";\n\nfunction operationKey(method: string, path: string): string {\n\treturn `${method.toUpperCase()} ${path}`;\n}\n\nconst HTTP_METHODS = [\n\t\"get\",\n\t\"post\",\n\t\"put\",\n\t\"patch\",\n\t\"delete\",\n\t\"options\",\n\t\"head\",\n\t\"trace\",\n] as const;\n\ntype RawParameter = {\n\tin?: string;\n\tname?: string;\n\trequired?: boolean;\n\tdescription?: string;\n\tschema?: unknown;\n};\n\ntype RawRequestBody = {\n\trequired?: boolean;\n\tcontent?: Record<string, { schema?: unknown } | undefined>;\n};\n\ntype RawOperation = {\n\toperationId?: string;\n\ttags?: string[];\n\tsummary?: string;\n\tdescription?: string;\n\tdeprecated?: boolean;\n\tsecurity?: OpenApiDoc[\"security\"];\n\tparameters?: RawParameter[];\n\trequestBody?: RawRequestBody;\n};\n\ntype RawPathItem = {\n\tparameters?: RawParameter[];\n} & Partial<Record<(typeof HTTP_METHODS)[number], RawOperation>>;\n\nfunction normalizeParam(p: RawParameter): NormalizedParameter | undefined {\n\tif (!p || typeof p !== \"object\") return undefined;\n\tconst loc = p.in;\n\tconst name = p.name;\n\tif (\n\t\tloc !== \"path\" &&\n\t\tloc !== \"query\" &&\n\t\tloc !== \"header\" &&\n\t\tloc !== \"cookie\"\n\t) {\n\t\treturn undefined;\n\t}\n\tif (!name) return undefined;\n\n\treturn {\n\t\tin: loc,\n\t\tname,\n\t\trequired: Boolean(p.required || loc === \"path\"),\n\t\tdescription: p.description,\n\t\tschema: p.schema,\n\t};\n}\n\nfunction mergeParameters(\n\tpathParams: RawParameter[] | undefined,\n\topParams: RawParameter[] | undefined,\n): NormalizedParameter[] {\n\tconst merged = new Map<string, NormalizedParameter>();\n\n\tfor (const p of pathParams ?? []) {\n\t\tconst normalized = normalizeParam(p);\n\t\tif (!normalized) continue;\n\t\tmerged.set(`${normalized.in}:${normalized.name}`, normalized);\n\t}\n\n\tfor (const p of opParams ?? []) {\n\t\tconst normalized = normalizeParam(p);\n\t\tif (!normalized) continue;\n\t\tmerged.set(`${normalized.in}:${normalized.name}`, normalized);\n\t}\n\n\treturn [...merged.values()];\n}\n\nfunction normalizeRequestBody(\n\trb: RawRequestBody | undefined,\n): NormalizedRequestBody | undefined {\n\tif (!rb) return undefined;\n\n\tconst content = rb.content ?? {};\n\tconst contentTypes = Object.keys(content);\n\tconst schemasByContentType: Record<string, unknown | undefined> = {};\n\n\tfor (const contentType of contentTypes) {\n\t\tschemasByContentType[contentType] = content[contentType]?.schema;\n\t}\n\n\treturn {\n\t\trequired: Boolean(rb.required),\n\t\tcontentTypes,\n\t\tschemasByContentType,\n\t};\n}\n\nexport function indexOperations(doc: OpenApiDoc): NormalizedOperation[] {\n\tconst out: NormalizedOperation[] = [];\n\tconst paths = doc.paths ?? {};\n\n\tfor (const [path, rawPathItem] of Object.entries(paths)) {\n\t\tif (!rawPathItem || typeof rawPathItem !== \"object\") continue;\n\n\t\tconst pathItem = rawPathItem as RawPathItem;\n\n\t\tfor (const method of HTTP_METHODS) {\n\t\t\tconst op = pathItem[method];\n\t\t\tif (!op) continue;\n\n\t\t\tconst parameters = mergeParameters(pathItem.parameters, op.parameters);\n\t\t\tconst normalizedMethod = method.toUpperCase();\n\t\t\tout.push({\n\t\t\t\tkey: operationKey(normalizedMethod, path),\n\t\t\t\tmethod: normalizedMethod,\n\t\t\t\tpath,\n\t\t\t\toperationId: op.operationId,\n\t\t\t\ttags: op.tags ?? [],\n\t\t\t\tsummary: op.summary,\n\t\t\t\tdescription: op.description,\n\t\t\t\tdeprecated: op.deprecated,\n\t\t\t\tsecurity: (op.security ?? doc.security) as OpenApiDoc[\"security\"],\n\t\t\t\tparameters,\n\t\t\t\trequestBody: normalizeRequestBody(op.requestBody),\n\t\t\t});\n\t\t}\n\t}\n\n\tout.sort((a, b) => {\n\t\tif (a.path !== b.path) return a.path.localeCompare(b.path);\n\t\treturn a.method.localeCompare(b.method);\n\t});\n\n\treturn out;\n}\n",
25
+ "import type { AuthScheme } from \"./auth-schemes.ts\";\nimport type { Capabilities } from \"./capabilities.ts\";\nimport type { CommandModel } from \"./command-model.ts\";\nimport type { PlannedOperation } from \"./naming.ts\";\nimport type { ServerInfo } from \"./server.ts\";\nimport type { LoadedSpec, NormalizedOperation } from \"./types.ts\";\n\nexport type SchemaOutput = {\n\tschemaVersion: 1;\n\topenapi: {\n\t\tversion: string;\n\t\ttitle?: string;\n\t\tinfoVersion?: string;\n\t};\n\tspec: {\n\t\tid: string;\n\t\tfingerprint: string;\n\t\tsource: LoadedSpec[\"source\"];\n\t};\n\tcapabilities: Capabilities;\n\tservers: ServerInfo[];\n\tauthSchemes: AuthScheme[];\n\toperations: NormalizedOperation[];\n\tplanned?: PlannedOperation[];\n\tcommands?: CommandModel;\n\tcommandsIndex?: import(\"./command-index.ts\").CommandsIndex;\n};\n\nexport type MinimalSchemaOutput = Pick<\n\tSchemaOutput,\n\t\"schemaVersion\" | \"openapi\" | \"spec\" | \"capabilities\" | \"commands\"\n>;\n\nexport function buildSchemaOutput(\n\tloaded: LoadedSpec,\n\toperations: NormalizedOperation[],\n\tplanned: PlannedOperation[] | undefined,\n\tservers: ServerInfo[],\n\tauthSchemes: AuthScheme[],\n\tcommands: CommandModel | undefined,\n\tcommandsIndex: import(\"./command-index.ts\").CommandsIndex | undefined,\n\tcapabilities: Capabilities,\n): SchemaOutput {\n\treturn {\n\t\tschemaVersion: 1,\n\t\topenapi: {\n\t\t\tversion: loaded.doc.openapi,\n\t\t\ttitle: loaded.doc.info?.title,\n\t\t\tinfoVersion: loaded.doc.info?.version,\n\t\t},\n\t\tspec: {\n\t\t\tid: loaded.id,\n\t\t\tfingerprint: loaded.fingerprint,\n\t\t\tsource: loaded.source,\n\t\t},\n\t\tcapabilities,\n\t\tservers,\n\t\tauthSchemes,\n\t\toperations,\n\t\tplanned,\n\t\tcommands,\n\t\tcommandsIndex,\n\t};\n}\n\nexport function toMinimalSchemaOutput(\n\toutput: SchemaOutput,\n): MinimalSchemaOutput {\n\treturn {\n\t\tschemaVersion: output.schemaVersion,\n\t\topenapi: output.openapi,\n\t\tspec: output.spec,\n\t\tcapabilities: output.capabilities,\n\t\tcommands: output.commands,\n\t};\n}\n",
26
+ "import { getSchemaEnumStrings } from \"./schema-shape.ts\";\nimport type { OpenApiDoc } from \"./types.ts\";\n\nexport type ServerVariable = {\n\tname: string;\n\tdefault?: string;\n\tenum?: string[];\n\tdescription?: string;\n};\n\nexport type ServerInfo = {\n\turl: string;\n\tdescription?: string;\n\tvariables: ServerVariable[];\n\tvariableNames: string[];\n};\n\ntype RawServerVariable = {\n\tdefault?: unknown;\n\tenum?: unknown;\n\tdescription?: unknown;\n};\n\ntype RawServer = {\n\turl?: unknown;\n\tdescription?: unknown;\n\tvariables?: unknown;\n};\n\nfunction extractVariableNames(url: string): string[] {\n\tconst names: string[] = [];\n\tconst re = /\\{([^}]+)\\}/g;\n\n\twhile (true) {\n\t\tconst match = re.exec(url);\n\t\tif (!match) break;\n\t\tnames.push(match[1] ?? \"\");\n\t}\n\n\treturn names.map((n) => n.trim()).filter(Boolean);\n}\n\nexport function listServers(doc: OpenApiDoc): ServerInfo[] {\n\tconst servers = doc.servers ?? [];\n\tconst out: ServerInfo[] = [];\n\n\tfor (const raw of servers) {\n\t\tconst s = raw as RawServer;\n\t\tif (!s || typeof s !== \"object\") continue;\n\t\tif (typeof s.url !== \"string\") continue;\n\n\t\tconst variableNames = extractVariableNames(s.url);\n\t\tconst variables: ServerVariable[] = [];\n\n\t\tconst rawVars =\n\t\t\ts.variables &&\n\t\t\ttypeof s.variables === \"object\" &&\n\t\t\t!Array.isArray(s.variables)\n\t\t\t\t? (s.variables as Record<string, RawServerVariable>)\n\t\t\t\t: {};\n\n\t\tfor (const name of variableNames) {\n\t\t\tconst v = rawVars[name];\n\t\t\tconst def = v?.default;\n\t\t\tconst desc = v?.description;\n\t\t\tvariables.push({\n\t\t\t\tname,\n\t\t\t\tdefault: typeof def === \"string\" ? def : undefined,\n\t\t\t\tenum: getSchemaEnumStrings(v),\n\t\t\t\tdescription: typeof desc === \"string\" ? desc : undefined,\n\t\t\t});\n\t\t}\n\n\t\tout.push({\n\t\t\turl: s.url,\n\t\t\tdescription:\n\t\t\t\ttypeof s.description === \"string\" ? s.description : undefined,\n\t\t\tvariables,\n\t\t\tvariableNames,\n\t\t});\n\t}\n\n\treturn out;\n}\n\nexport function getDefaultServerUrl(doc: OpenApiDoc): string | undefined {\n\treturn listServers(doc)[0]?.url;\n}\n",
27
+ "import SwaggerParser from \"@apidevtools/swagger-parser\";\n\nimport { sha256Hex } from \"./crypto.ts\";\nimport { parseYamlContent } from \"./runtime/compat.ts\";\nimport { getSpecId } from \"./spec-id.ts\";\nimport { stableStringify } from \"./stable-json.ts\";\nimport type { LoadedSpec, OpenApiDoc, SpecSource } from \"./types.ts\";\n\nexport type LoadSpecOptions = {\n\tspec?: string;\n\tembeddedSpecText?: string;\n};\n\nfunction isProbablyUrl(input: string): boolean {\n\treturn /^https?:\\/\\//i.test(input);\n}\n\nfunction parseSpecText(text: string): unknown {\n\tconst trimmed = text.trimStart();\n\tif (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\")) {\n\t\treturn JSON.parse(text);\n\t}\n\n\treturn parseYamlContent(text);\n}\n\nexport async function loadSpec(options: LoadSpecOptions): Promise<LoadedSpec> {\n\tconst { spec, embeddedSpecText } = options;\n\n\tlet source: SpecSource;\n\tlet inputForParser: unknown;\n\n\tif (typeof embeddedSpecText === \"string\") {\n\t\tsource = \"embedded\";\n\t\tinputForParser = parseSpecText(embeddedSpecText);\n\t} else if (spec) {\n\t\tsource = isProbablyUrl(spec) ? \"url\" : \"file\";\n\t\tinputForParser = spec;\n\t} else {\n\t\tthrow new Error(\n\t\t\t\"Missing spec. Provide --spec <url|path> or build with an embedded spec.\",\n\t\t);\n\t}\n\n\tconst doc = (await SwaggerParser.dereference(\n\t\t// biome-ignore lint/suspicious/noExplicitAny: unknown\n\t\tinputForParser as any,\n\t)) as OpenApiDoc;\n\n\tif (!doc || typeof doc !== \"object\" || typeof doc.openapi !== \"string\") {\n\t\tthrow new Error(\"Loaded spec is not a valid OpenAPI document\");\n\t}\n\n\tconst fingerprint = await sha256Hex(stableStringify(doc));\n\tconst id = getSpecId({ doc, fingerprint });\n\n\treturn { source, id, fingerprint, doc };\n}\n",
28
+ "export async function sha256Hex(text: string): Promise<string> {\n\tconst data = new TextEncoder().encode(text);\n\tconst hash = await crypto.subtle.digest(\"SHA-256\", data);\n\tconst bytes = new Uint8Array(hash);\n\n\tlet out = \"\";\n\tfor (const b of bytes) out += b.toString(16).padStart(2, \"0\");\n\treturn out;\n}\n",
29
+ "import { kebabCase } from \"./strings.ts\";\nimport type { LoadedSpec } from \"./types.ts\";\n\nexport function getSpecId(\n\tloaded: Pick<LoadedSpec, \"doc\" | \"fingerprint\">,\n): string {\n\tconst title = loaded.doc.info?.title;\n\tconst fromTitle = title ? kebabCase(title) : \"\";\n\tif (fromTitle) return fromTitle;\n\n\treturn loaded.fingerprint.slice(0, 12);\n}\n",
30
+ "export function stableStringify(\n\tvalue: unknown,\n\toptions?: { space?: number },\n): string {\n\tconst visiting = new WeakSet<object>();\n\treturn JSON.stringify(sort(value, visiting), null, options?.space);\n}\n\nfunction sort(value: unknown, visiting: WeakSet<object>): unknown {\n\tif (value === null) return null;\n\n\tif (Array.isArray(value)) {\n\t\tif (visiting.has(value)) return { __specli_circular: true };\n\t\tvisiting.add(value);\n\t\tconst out = value.map((v) => sort(v, visiting));\n\t\tvisiting.delete(value);\n\t\treturn out;\n\t}\n\n\tif (typeof value === \"object\") {\n\t\tif (visiting.has(value)) return { __specli_circular: true };\n\t\tvisiting.add(value);\n\n\t\tconst obj = value as Record<string, unknown>;\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const key of Object.keys(obj).sort()) {\n\t\t\tout[key] = sort(obj[key], visiting);\n\t\t}\n\n\t\tvisiting.delete(value);\n\t\treturn out;\n\t}\n\n\treturn value;\n}\n",
31
+ "import { listAuthSchemes } from \"../auth-schemes.ts\";\nimport { deriveCapabilities } from \"../capabilities.ts\";\nimport { buildCommandsIndex } from \"../command-index.ts\";\nimport { buildCommandModel } from \"../command-model.ts\";\nimport { planOperations } from \"../naming.ts\";\nimport { indexOperations } from \"../operations.ts\";\nimport { buildSchemaOutput } from \"../schema.ts\";\nimport { listServers } from \"../server.ts\";\nimport { loadSpec } from \"../spec-loader.ts\";\n\nexport type BuildRuntimeContextOptions = {\n\tspec?: string;\n\tembeddedSpecText?: string;\n};\n\nexport async function buildRuntimeContext(options: BuildRuntimeContextOptions) {\n\tconst loaded = await loadSpec({\n\t\tspec: options.spec,\n\t\tembeddedSpecText: options.embeddedSpecText,\n\t});\n\n\tconst operations = indexOperations(loaded.doc);\n\tconst servers = listServers(loaded.doc);\n\tconst authSchemes = listAuthSchemes(loaded.doc);\n\tconst planned = planOperations(operations);\n\tconst commands = buildCommandModel(planned, {\n\t\tspecId: loaded.id,\n\t\tglobalSecurity: loaded.doc.security,\n\t\tauthSchemes,\n\t});\n\tconst commandsIndex = buildCommandsIndex(commands);\n\tconst capabilities = deriveCapabilities({\n\t\tdoc: loaded.doc,\n\t\tservers,\n\t\tauthSchemes,\n\t\toperations,\n\t\tcommands,\n\t});\n\n\tconst schema = buildSchemaOutput(\n\t\tloaded,\n\t\toperations,\n\t\tplanned,\n\t\tservers,\n\t\tauthSchemes,\n\t\tcommands,\n\t\tcommandsIndex,\n\t\tcapabilities,\n\t);\n\n\treturn {\n\t\tloaded,\n\t\toperations,\n\t\tservers,\n\t\tauthSchemes,\n\t\tplanned,\n\t\tcommands,\n\t\tcommandsIndex,\n\t\tcapabilities,\n\t\tschema,\n\t};\n}\n",
32
+ "import { Command } from \"commander\";\n\nimport type { AuthScheme } from \"../auth-schemes.ts\";\nimport type { CommandAction, CommandModel } from \"../command-model.ts\";\nimport type { ServerInfo } from \"../server.ts\";\n\nimport { type BodyFlagDef, generateBodyFlags } from \"./body-flags.ts\";\nimport { executeAction } from \"./execute.ts\";\nimport type { EmbeddedDefaults } from \"./request.ts\";\nimport { coerceArrayInput, coerceValue } from \"./validate/index.ts\";\n\n// Flag type from CommandAction\ntype CommandFlag = CommandAction[\"flags\"][number];\n\n/**\n * Format help output that is clear for both humans and AI agents.\n * Groups options into Required, Optional, and Global sections.\n */\nfunction formatCustomHelp(\n\tcmd: Command,\n\taction: CommandAction,\n\toperationFlags: CommandFlag[],\n\tbodyFlagDefs: BodyFlagDef[],\n): string {\n\tconst lines: string[] = [];\n\tconst cmdName = cmd.name();\n\tconst parentName = cmd.parent?.name() ?? \"\";\n\tconst fullCmd = parentName ? `${parentName} ${cmdName}` : cmdName;\n\n\t// Usage line\n\tconst positionals = action.positionals.map((p) => `<${p.name}>`).join(\" \");\n\tconst usageSuffix = positionals ? ` ${positionals}` : \"\";\n\tlines.push(`Usage: ${fullCmd}${usageSuffix} [options]`);\n\tlines.push(\"\");\n\n\t// Description\n\tconst desc =\n\t\taction.summary ?? action.description ?? `${action.method} ${action.path}`;\n\tlines.push(desc);\n\tlines.push(\"\");\n\n\t// Collect all options into categories\n\tconst requiredOpts: string[] = [];\n\tconst optionalOpts: string[] = [];\n\n\t// Format a single option line\n\tconst formatOpt = (\n\t\tflag: string,\n\t\ttype: string,\n\t\tdesc: string,\n\t\trequired: boolean,\n\t): string => {\n\t\tconst typeStr = type === \"boolean\" ? \"\" : ` <${type}>`;\n\t\tconst reqMarker = required ? \" (required)\" : \"\";\n\t\treturn ` ${flag}${typeStr}${reqMarker}\\n ${desc}`;\n\t};\n\n\t// Operation flags (query/header/path params)\n\tfor (const f of operationFlags) {\n\t\tconst type = f.type === \"array\" ? `${f.itemType ?? \"string\"}[]` : f.type;\n\t\tconst line = formatOpt(\n\t\t\tf.flag,\n\t\t\ttype,\n\t\t\tf.description ?? `${f.in} parameter`,\n\t\t\tf.required,\n\t\t);\n\t\tif (f.required) {\n\t\t\trequiredOpts.push(line);\n\t\t} else {\n\t\t\toptionalOpts.push(line);\n\t\t}\n\t}\n\n\t// Body flags\n\tfor (const def of bodyFlagDefs) {\n\t\tconst line = formatOpt(def.flag, def.type, def.description, def.required);\n\t\tif (def.required) {\n\t\t\trequiredOpts.push(line);\n\t\t} else {\n\t\t\toptionalOpts.push(line);\n\t\t}\n\t}\n\n\t// Required options section\n\tif (requiredOpts.length > 0) {\n\t\tlines.push(\"Required:\");\n\t\tlines.push(...requiredOpts);\n\t\tlines.push(\"\");\n\t}\n\n\t// Optional options section\n\tif (optionalOpts.length > 0) {\n\t\tlines.push(\"Options:\");\n\t\tlines.push(...optionalOpts);\n\t\tlines.push(\"\");\n\t}\n\n\t// Global options (always available)\n\tlines.push(\"Global:\");\n\tlines.push(\" --curl\\n Print curl command instead of executing\");\n\tlines.push(\" --json\\n Output response as JSON\");\n\tlines.push(\" --server <url>\\n Override the API server URL\");\n\tlines.push(\n\t\t\" --bearer-token <token>\\n Provide auth token (or use 'login' command)\",\n\t);\n\tlines.push(\" -h, --help\\n Show this help message\");\n\tlines.push(\"\");\n\n\treturn lines.join(\"\\n\");\n}\n\nexport type GeneratedCliContext = {\n\tservers: ServerInfo[];\n\tauthSchemes: AuthScheme[];\n\tcommands: CommandModel;\n\tspecId: string;\n\tembeddedDefaults?: EmbeddedDefaults;\n};\n\nexport function addGeneratedCommands(\n\tprogram: Command,\n\tcontext: GeneratedCliContext,\n): void {\n\tfor (const resource of context.commands.resources) {\n\t\tconst resourceCmd = program\n\t\t\t.command(resource.resource)\n\t\t\t.description(`Operations for ${resource.resource}`);\n\n\t\tfor (const action of resource.actions) {\n\t\t\tconst cmd = resourceCmd.command(action.action);\n\t\t\tcmd.description(\n\t\t\t\taction.summary ??\n\t\t\t\t\taction.description ??\n\t\t\t\t\t`${action.method} ${action.path}`,\n\t\t\t);\n\n\t\t\tfor (const pos of action.positionals) {\n\t\t\t\tcmd.argument(`<${pos.name}>`, pos.description);\n\t\t\t}\n\n\t\t\tfor (const flag of action.flags) {\n\t\t\t\tconst opt = flag.flag;\n\t\t\t\tconst desc = flag.description ?? `${flag.in} parameter`;\n\n\t\t\t\tif (flag.type === \"boolean\") {\n\t\t\t\t\tcmd.option(opt, desc);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst isArray = flag.type === \"array\";\n\t\t\t\tconst itemType = flag.itemType ?? \"string\";\n\t\t\t\tconst flagType = isArray ? itemType : flag.type;\n\t\t\t\tconst parser = (raw: string) => coerceValue(raw, flagType);\n\n\t\t\t\tif (isArray) {\n\t\t\t\t\tconst key = `${opt} <value>`;\n\t\t\t\t\tcmd.option(\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tdesc,\n\t\t\t\t\t\t(value: string, prev: unknown[] | undefined) => {\n\t\t\t\t\t\t\tconst next: unknown[] = [...(prev ?? [])];\n\n\t\t\t\t\t\t\t// Allow `--tags a,b` and `--tags '[\"a\",\"b\"]'` to expand.\n\t\t\t\t\t\t\tconst items = coerceArrayInput(value, itemType);\n\t\t\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t\t\tnext.push(item);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn next;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst key = `${opt} <value>`;\n\t\t\t\tif (flag.required) cmd.requiredOption(key, desc, parser);\n\t\t\t\telse cmd.option(key, desc, parser);\n\t\t\t}\n\n\t\t\t// Collect reserved flags: operation params + --curl\n\t\t\tconst operationFlagSet = new Set(action.flags.map((f) => f.flag));\n\t\t\tconst reservedFlags = new Set([...operationFlagSet, \"--curl\"]);\n\n\t\t\t// Only --curl is a built-in flag (for debugging)\n\t\t\tif (!operationFlagSet.has(\"--curl\")) {\n\t\t\t\tcmd.option(\"--curl\", \"Print curl command without sending\");\n\t\t\t}\n\n\t\t\t// Track body flag definitions for this action\n\t\t\tlet bodyFlagDefs: BodyFlagDef[] = [];\n\n\t\t\tif (action.requestBody) {\n\t\t\t\t// Generate body flags from schema (recursive with dot notation)\n\t\t\t\t// Pass reserved flags to avoid conflicts with operation params and --curl\n\t\t\t\tbodyFlagDefs = generateBodyFlags(\n\t\t\t\t\taction.requestBodySchema,\n\t\t\t\t\treservedFlags,\n\t\t\t\t);\n\n\t\t\t\tfor (const def of bodyFlagDefs) {\n\t\t\t\t\tif (def.type === \"boolean\") {\n\t\t\t\t\t\tcmd.option(def.flag, def.description);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcmd.option(`${def.flag} <value>`, def.description);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Custom help output for better agent/human readability\n\t\t\tcmd.configureHelp({\n\t\t\t\tformatHelp: () =>\n\t\t\t\t\tformatCustomHelp(cmd, action, action.flags, bodyFlagDefs),\n\t\t\t});\n\n\t\t\t// Commander passes positional args and then the Command instance as last arg.\n\t\t\tcmd.action(async (...args) => {\n\t\t\t\tconst command = args[args.length - 1];\n\t\t\t\tconst positionalValues = args.slice(0, -1).map((v) => String(v));\n\n\t\t\t\tif (!(command instanceof Command)) {\n\t\t\t\t\tthrow new Error(\"Unexpected commander action signature\");\n\t\t\t\t}\n\n\t\t\t\tconst globals = command.optsWithGlobals();\n\t\t\t\tconst local = command.opts();\n\n\t\t\t\tawait executeAction({\n\t\t\t\t\taction,\n\t\t\t\t\tpositionalValues,\n\t\t\t\t\tflagValues: local,\n\t\t\t\t\tglobals,\n\t\t\t\t\tservers: context.servers,\n\t\t\t\t\tauthSchemes: context.authSchemes,\n\t\t\t\t\tspecId: context.specId,\n\t\t\t\t\tembeddedDefaults: context.embeddedDefaults,\n\t\t\t\t\tbodyFlagDefs,\n\t\t\t\t\tresourceName: resource.resource,\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n}\n",
33
+ "import type { AuthScheme } from \"../../auth-schemes.ts\";\n\nexport type AuthInputs = {\n\tflagAuthScheme?: string;\n\tprofileAuthScheme?: string;\n\tembeddedAuthScheme?: string;\n\thasStoredToken?: boolean;\n};\n\nconst BEARER_COMPATIBLE_KINDS = new Set([\n\t\"http-bearer\",\n\t\"oauth2\",\n\t\"openIdConnect\",\n]);\n\nexport function resolveAuthScheme(\n\tauthSchemes: AuthScheme[],\n\trequired: import(\"../../auth-requirements.ts\").AuthSummary,\n\tinputs: AuthInputs,\n): string | undefined {\n\t// Priority: CLI flag > profile > embedded default\n\tif (inputs.flagAuthScheme) return inputs.flagAuthScheme;\n\n\tif (\n\t\tinputs.profileAuthScheme &&\n\t\tauthSchemes.some((s) => s.key === inputs.profileAuthScheme)\n\t) {\n\t\treturn inputs.profileAuthScheme;\n\t}\n\n\tif (\n\t\tinputs.embeddedAuthScheme &&\n\t\tauthSchemes.some((s) => s.key === inputs.embeddedAuthScheme)\n\t) {\n\t\treturn inputs.embeddedAuthScheme;\n\t}\n\n\t// If operation requires exactly one scheme, choose it.\n\tconst alts = required.alternatives;\n\tif (alts.length === 1 && alts[0]?.length === 1) return alts[0][0]?.key;\n\n\t// Otherwise if there is only one scheme in spec, pick it.\n\tif (authSchemes.length === 1) return authSchemes[0]?.key;\n\n\t// If user has a stored token and operation accepts a bearer-compatible scheme,\n\t// automatically pick the first one that matches.\n\tif (inputs.hasStoredToken && alts.length > 0) {\n\t\tfor (const alt of alts) {\n\t\t\tif (alt.length !== 1) continue;\n\t\t\tconst key = alt[0]?.key;\n\t\t\tconst scheme = authSchemes.find((s) => s.key === key);\n\t\t\tif (scheme && BEARER_COMPATIBLE_KINDS.has(scheme.kind)) {\n\t\t\t\treturn key;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n}\n",
34
+ "import { isBun } from \"../compat.ts\";\n\nconst bunLiteral = \"bun\" as const;\n\nexport type SecretKey = {\n\tservice: string;\n\tname: string;\n};\n\nexport function secretServiceForSpec(specId: string): string {\n\treturn `specli:${specId}`;\n}\n\nexport function tokenSecretKey(specId: string, profile: string): SecretKey {\n\treturn {\n\t\tservice: secretServiceForSpec(specId),\n\t\tname: `profile:${profile}:token`,\n\t};\n}\n\n/**\n * Store a token securely.\n * In Bun: uses the native secrets store (system keychain)\n * In Node.js: secrets are not supported, warns user\n */\nexport async function setToken(\n\tspecId: string,\n\tprofile: string,\n\ttoken: string,\n): Promise<void> {\n\tif (!isBun) {\n\t\tconsole.warn(\n\t\t\t\"Warning: Secure token storage requires Bun. Token will not be persisted.\",\n\t\t);\n\t\tconsole.warn(\n\t\t\t\"Use --bearer-token <token> flag instead when running with Node.js.\",\n\t\t);\n\t\treturn;\n\t}\n\n\tconst { secrets } = await import(bunLiteral);\n\tconst key = tokenSecretKey(specId, profile);\n\tawait secrets.set({ service: key.service, name: key.name, value: token });\n}\n\n/**\n * Retrieve a stored token.\n * In Bun: retrieves from the native secrets store\n * In Node.js: returns null (secrets not supported)\n */\nexport async function getToken(\n\tspecId: string,\n\tprofile: string,\n): Promise<string | null> {\n\tif (!isBun) {\n\t\treturn null;\n\t}\n\n\tconst { secrets } = await import(bunLiteral);\n\tconst key = tokenSecretKey(specId, profile);\n\treturn await secrets.get({ service: key.service, name: key.name });\n}\n\n/**\n * Delete a stored token.\n * In Bun: removes from the native secrets store\n * In Node.js: returns false (secrets not supported)\n */\nexport async function deleteToken(\n\tspecId: string,\n\tprofile: string,\n): Promise<boolean> {\n\tif (!isBun) {\n\t\tconsole.warn(\n\t\t\t\"Warning: Secure token storage requires Bun. No token to delete.\",\n\t\t);\n\t\treturn false;\n\t}\n\n\tconst { secrets } = await import(bunLiteral);\n\tconst key = tokenSecretKey(specId, profile);\n\treturn await secrets.delete({ service: key.service, name: key.name });\n}\n",
35
+ "import {\n\tfileExists,\n\tmkdirp,\n\tparseYamlContent,\n\treadFileText,\n\twriteFileText,\n} from \"../compat.ts\";\n\nexport type Profile = {\n\tname: string;\n\tserver?: string;\n\tauthScheme?: string;\n\t// For apiKey schemes we also need the apiKey name/in from spec to inject,\n\t// but that is discoverable from the spec at runtime.\n};\n\nexport type ProfilesFile = {\n\tprofiles: Profile[];\n\tdefaultProfile?: string;\n};\n\nfunction configDir(): string {\n\t// Keep it simple (v1). We can move to env-paths later.\n\tconst home = process.env.HOME;\n\tif (!home) throw new Error(\"Missing HOME env var\");\n\treturn `${home}/.config/specli`;\n}\n\nfunction configPathJson(): string {\n\treturn `${configDir()}/profiles.json`;\n}\n\nfunction configPathYaml(): string {\n\treturn `${configDir()}/profiles.yaml`;\n}\n\nexport async function readProfiles(): Promise<ProfilesFile> {\n\tconst jsonPath = configPathJson();\n\tconst yamlPath = configPathYaml();\n\n\tconst jsonExists = await fileExists(jsonPath);\n\tconst yamlExists = await fileExists(yamlPath);\n\n\tconst filePath = jsonExists ? jsonPath : yamlExists ? yamlPath : null;\n\n\tif (!filePath) return { profiles: [] };\n\n\tconst text = await readFileText(filePath);\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = parseYamlContent(text) as unknown;\n\t} catch {\n\t\tparsed = JSON.parse(text) as unknown;\n\t}\n\n\tconst obj =\n\t\tparsed && typeof parsed === \"object\"\n\t\t\t? (parsed as Record<string, unknown>)\n\t\t\t: {};\n\tconst profiles = Array.isArray(obj.profiles)\n\t\t? (obj.profiles as Profile[])\n\t\t: [];\n\n\treturn {\n\t\tprofiles: profiles.filter(Boolean),\n\t\tdefaultProfile:\n\t\t\ttypeof obj.defaultProfile === \"string\"\n\t\t\t\t? (obj.defaultProfile as string)\n\t\t\t\t: undefined,\n\t};\n}\n\nexport async function writeProfiles(data: ProfilesFile): Promise<void> {\n\tconst dir = configDir();\n\tawait mkdirp(dir);\n\tawait writeFileText(configPathJson(), JSON.stringify(data, null, 2));\n}\n\nexport function getProfile(\n\tdata: ProfilesFile,\n\tname: string | undefined,\n): Profile | undefined {\n\tconst wanted = name ?? data.defaultProfile;\n\tif (!wanted) return undefined;\n\treturn data.profiles.find((p) => p?.name === wanted);\n}\n\nexport function upsertProfile(\n\tdata: ProfilesFile,\n\tprofile: Profile,\n): ProfilesFile {\n\tconst profiles = data.profiles.filter((p) => p.name !== profile.name);\n\tprofiles.push(profile);\n\tprofiles.sort((a, b) => a.name.localeCompare(b.name));\n\treturn { ...data, profiles };\n}\n\nexport function removeProfile(data: ProfilesFile, name: string): ProfilesFile {\n\treturn { ...data, profiles: data.profiles.filter((p) => p.name !== name) };\n}\n",
36
+ "export function extractTemplateVars(template: string): string[] {\n\tconst out: string[] = [];\n\tconst re = /\\{([^}]+)\\}/g;\n\twhile (true) {\n\t\tconst match = re.exec(template);\n\t\tif (!match) break;\n\t\tout.push((match[1] ?? \"\").trim());\n\t}\n\treturn out.filter(Boolean);\n}\n\nexport function applyTemplate(\n\ttemplate: string,\n\tvars: Record<string, string>,\n\toptions?: { encode?: boolean },\n): string {\n\tconst encode = options?.encode ?? false;\n\treturn template.replace(/\\{([^}]+)\\}/g, (_, rawName) => {\n\t\tconst name = String(rawName).trim();\n\t\tconst value = vars[name];\n\t\tif (typeof value !== \"string\") {\n\t\t\tthrow new Error(`Missing template variable: ${name}`);\n\t\t}\n\t\treturn encode ? encodeURIComponent(value) : value;\n\t});\n}\n",
37
+ "import type { ServerInfo } from \"../server.ts\";\n\nimport { applyTemplate, extractTemplateVars } from \"./template.ts\";\n\nexport type ResolveServerInput = {\n\tserverOverride?: string;\n\tservers: ServerInfo[];\n\tserverVars: Record<string, string>;\n};\n\nexport function resolveServerUrl(input: ResolveServerInput): string {\n\t// Treat empty string as undefined (serverOverride can come from env vars or profiles)\n\tconst base = input.serverOverride || input.servers[0]?.url;\n\tif (!base) {\n\t\tthrow new Error(\n\t\t\t\"No server URL found. Provide --server <url> or define servers in the OpenAPI spec.\",\n\t\t);\n\t}\n\n\tconst names = extractTemplateVars(base);\n\tif (!names.length) return base;\n\n\tconst vars: Record<string, string> = {};\n\tfor (const name of names) {\n\t\tconst provided = input.serverVars[name];\n\t\tif (typeof provided === \"string\") {\n\t\t\tvars[name] = provided;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// If spec has default for this var, use it.\n\t\tconst match = input.servers.find((s) => s.url === base);\n\t\tconst v = match?.variables.find((x) => x.name === name);\n\t\tif (typeof v?.default === \"string\") {\n\t\t\tvars[name] = v.default;\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`Missing server variable '${name}'. Provide --server-var ${name}=...`,\n\t\t);\n\t}\n\n\treturn applyTemplate(base, vars);\n}\n",
38
+ "import Ajv from \"ajv\";\nimport addFormats from \"ajv-formats\";\n\nexport function createAjv() {\n\tconst ajv = new Ajv({\n\t\tallErrors: true,\n\t\tstrict: false,\n\t\tcoerceTypes: false,\n\t});\n\n\taddFormats(ajv);\n\treturn ajv;\n}\n",
39
+ "import { InvalidArgumentError } from \"commander\";\n\nimport type { ParamType } from \"../../schema-shape.ts\";\n\nexport function coerceValue(raw: string, type: ParamType): unknown {\n\tif (type === \"string\" || type === \"unknown\") return raw;\n\n\tif (type === \"boolean\") {\n\t\t// Commander boolean options are handled without a value; keep for completeness.\n\t\tif (raw === \"true\") return true;\n\t\tif (raw === \"false\") return false;\n\t\tthrow new InvalidArgumentError(`Expected boolean, got '${raw}'`);\n\t}\n\n\tif (type === \"integer\") {\n\t\tconst n = Number.parseInt(raw, 10);\n\t\tif (!Number.isFinite(n))\n\t\t\tthrow new InvalidArgumentError(`Expected integer, got '${raw}'`);\n\t\treturn n;\n\t}\n\n\tif (type === \"number\") {\n\t\tconst n = Number(raw);\n\t\tif (!Number.isFinite(n))\n\t\t\tthrow new InvalidArgumentError(`Expected number, got '${raw}'`);\n\t\treturn n;\n\t}\n\n\t// For now, accept objects as JSON strings.\n\tif (type === \"object\") {\n\t\ttry {\n\t\t\treturn JSON.parse(raw);\n\t\t} catch {\n\t\t\tthrow new InvalidArgumentError(\n\t\t\t\t`Expected JSON object, got '${raw}'. Use --data/--file for complex bodies.`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Arrays should usually be passed as repeatable flags or comma-separated,\n\t// but allow JSON arrays too.\n\tif (type === \"array\") {\n\t\treturn coerceArrayInput(raw, \"string\");\n\t}\n\n\treturn raw;\n}\n\nexport function coerceArrayInput(raw: string, itemType: ParamType): unknown[] {\n\tconst trimmed = raw.trim();\n\tif (!trimmed) return [];\n\n\tif (trimmed.startsWith(\"[\")) {\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(trimmed);\n\t\t} catch {\n\t\t\tthrow new InvalidArgumentError(`Expected JSON array, got '${raw}'`);\n\t\t}\n\t\tif (!Array.isArray(parsed)) {\n\t\t\tthrow new InvalidArgumentError(`Expected JSON array, got '${raw}'`);\n\t\t}\n\t\treturn parsed.map((v) => coerceValue(String(v), itemType));\n\t}\n\n\treturn trimmed\n\t\t.split(\",\")\n\t\t.map((s) => s.trim())\n\t\t.filter(Boolean)\n\t\t.map((s) => coerceValue(s, itemType));\n}\n",
40
+ "import type { ErrorObject } from \"ajv\";\n\nexport function formatAjvErrors(\n\terrors: ErrorObject[] | null | undefined,\n): string {\n\tif (!errors?.length) return \"Invalid input\";\n\n\treturn errors\n\t\t.map((e) => {\n\t\t\tconst path = e.instancePath || e.schemaPath || \"\";\n\n\t\t\tif (\n\t\t\t\te.keyword === \"required\" &&\n\t\t\t\te.params &&\n\t\t\t\ttypeof e.params === \"object\" &&\n\t\t\t\t\"missingProperty\" in e.params\n\t\t\t) {\n\t\t\t\tconst missing = String(\n\t\t\t\t\t(e.params as { missingProperty?: unknown }).missingProperty,\n\t\t\t\t);\n\t\t\t\tconst where = e.instancePath || \"/\";\n\t\t\t\treturn `${where} missing required property '${missing}'`.trim();\n\t\t\t}\n\n\t\t\tconst msg = e.message || \"invalid\";\n\t\t\treturn `${path} ${msg}`.trim();\n\t\t})\n\t\t.join(\"\\n\");\n}\n",
41
+ "import type { CommandAction } from \"../../command-model.ts\";\nimport type { JsonSchema } from \"../../types.ts\";\n\nexport type ValidationSchemas = {\n\tquerySchema?: JsonSchema;\n\theaderSchema?: JsonSchema;\n\tcookieSchema?: JsonSchema;\n};\n\ntype ObjectSchema = {\n\ttype: \"object\";\n\tproperties: Record<string, JsonSchema>;\n\trequired?: string[];\n};\n\nexport function deriveValidationSchemas(\n\taction: CommandAction,\n): ValidationSchemas {\n\t// We validate only simple containers for now.\n\t// Deep style/encoding differences for OpenAPI params are out of scope for v1.\n\tconst query: ObjectSchema = { type: \"object\", properties: {}, required: [] };\n\tconst header: ObjectSchema = { type: \"object\", properties: {}, required: [] };\n\tconst cookie: ObjectSchema = { type: \"object\", properties: {}, required: [] };\n\n\tfor (const p of action.params) {\n\t\tif (p.kind !== \"flag\") continue;\n\t\tconst target =\n\t\t\tp.in === \"query\"\n\t\t\t\t? query\n\t\t\t\t: p.in === \"header\"\n\t\t\t\t\t? header\n\t\t\t\t\t: p.in === \"cookie\"\n\t\t\t\t\t\t? cookie\n\t\t\t\t\t\t: undefined;\n\t\tif (!target) continue;\n\n\t\tconst schema = p.schema ?? (p.type === \"unknown\" ? {} : { type: p.type });\n\t\ttarget.properties[p.name] = schema;\n\t\tif (p.required) {\n\t\t\tif (!target.required) target.required = [];\n\t\t\ttarget.required.push(p.name);\n\t\t}\n\t}\n\n\tif (!query.required?.length) delete query.required;\n\tif (!header.required?.length) delete header.required;\n\tif (!cookie.required?.length) delete cookie.required;\n\n\treturn {\n\t\tquerySchema: Object.keys(query.properties).length ? query : undefined,\n\t\theaderSchema: Object.keys(header.properties).length ? header : undefined,\n\t\tcookieSchema: Object.keys(cookie.properties).length ? cookie : undefined,\n\t};\n}\n",
42
+ "import type { AuthScheme } from \"../auth-schemes.ts\";\nimport type { CommandAction } from \"../command-model.ts\";\n\nimport { resolveAuthScheme } from \"./auth/resolve.ts\";\nimport { getToken } from \"./profile/secrets.ts\";\nimport { getProfile, readProfiles } from \"./profile/store.ts\";\nimport { resolveServerUrl } from \"./server-url.ts\";\nimport { applyTemplate } from \"./template.ts\";\nimport {\n\tcreateAjv,\n\tderiveValidationSchemas,\n\tformatAjvErrors,\n} from \"./validate/index.ts\";\n\nexport type RuntimeGlobals = {\n\tspec?: string;\n\tserver?: string;\n\tserverVar?: string[];\n\n\tcurl?: boolean;\n\tjson?: boolean;\n\n\tauth?: string;\n\tbearerToken?: string;\n\toauthToken?: string;\n\tusername?: string;\n\tpassword?: string;\n\tapiKey?: string;\n};\n\nfunction parseKeyValuePairs(\n\tpairs: string[] | undefined,\n): Record<string, string> {\n\tconst out: Record<string, string> = {};\n\tfor (const pair of pairs ?? []) {\n\t\tconst idx = pair.indexOf(\"=\");\n\t\tif (idx === -1)\n\t\t\tthrow new Error(`Invalid pair '${pair}', expected name=value`);\n\t\tconst name = pair.slice(0, idx).trim();\n\t\tconst value = pair.slice(idx + 1).trim();\n\t\tif (!name) throw new Error(`Invalid pair '${pair}', missing name`);\n\t\tout[name] = value;\n\t}\n\treturn out;\n}\n\nfunction _parseTimeoutMs(value: string | undefined): number | undefined {\n\tif (!value) return undefined;\n\tconst n = Number(value);\n\tif (!Number.isFinite(n) || n <= 0)\n\t\tthrow new Error(\"--timeout must be a positive number\");\n\treturn n;\n}\n\nfunction pickAuthSchemeKey(\n\taction: CommandAction,\n\tglobals: RuntimeGlobals,\n): string | undefined {\n\tif (globals.auth) return globals.auth;\n\n\t// If operation declares a single requirement set with a single scheme, default to it.\n\tconst req = action.auth.alternatives;\n\tif (req.length === 1 && req[0]?.length === 1) {\n\t\treturn req[0][0]?.key;\n\t}\n\n\treturn undefined;\n}\n\nfunction applyAuth(\n\theaders: Headers,\n\turl: URL,\n\taction: CommandAction,\n\tglobals: RuntimeGlobals,\n\tauthSchemes: AuthScheme[],\n): { headers: Headers; url: URL } {\n\tconst schemeKey = pickAuthSchemeKey(action, globals);\n\tif (!schemeKey) return { headers, url };\n\n\tconst scheme = authSchemes.find((s) => s.key === schemeKey);\n\tif (!scheme) {\n\t\tthrow new Error(\n\t\t\t`Unknown auth scheme '${schemeKey}'. Available: ${authSchemes\n\t\t\t\t.map((s) => s.key)\n\t\t\t\t.join(\", \")}`,\n\t\t);\n\t}\n\n\tif (\n\t\tscheme.kind === \"http-bearer\" ||\n\t\tscheme.kind === \"oauth2\" ||\n\t\tscheme.kind === \"openIdConnect\"\n\t) {\n\t\tconst token = globals.bearerToken ?? globals.oauthToken;\n\t\tif (!token)\n\t\t\tthrow new Error(\"Missing token. Provide --bearer-token <token>.\");\n\t\theaders.set(\"Authorization\", `Bearer ${token}`);\n\t\treturn { headers, url };\n\t}\n\n\tif (scheme.kind === \"http-basic\") {\n\t\tif (!globals.username) throw new Error(\"Missing --username for basic auth\");\n\t\tif (!globals.password) throw new Error(\"Missing --password for basic auth\");\n\t\tconst raw = `${globals.username}:${globals.password}`;\n\t\tconst encoded = Buffer.from(raw, \"utf8\").toString(\"base64\");\n\t\theaders.set(\"Authorization\", `Basic ${encoded}`);\n\t\treturn { headers, url };\n\t}\n\n\tif (scheme.kind === \"api-key\") {\n\t\tif (!scheme.name)\n\t\t\tthrow new Error(`apiKey scheme '${scheme.key}' missing name`);\n\t\tif (!scheme.in)\n\t\t\tthrow new Error(`apiKey scheme '${scheme.key}' missing location`);\n\t\tif (!globals.apiKey) throw new Error(\"Missing --api-key for apiKey auth\");\n\n\t\tif (scheme.in === \"header\") {\n\t\t\theaders.set(scheme.name, globals.apiKey);\n\t\t}\n\t\tif (scheme.in === \"query\") {\n\t\t\turl.searchParams.set(scheme.name, globals.apiKey);\n\t\t}\n\t\tif (scheme.in === \"cookie\") {\n\t\t\tconst existing = headers.get(\"Cookie\");\n\t\t\tconst part = `${scheme.name}=${globals.apiKey}`;\n\t\t\theaders.set(\"Cookie\", existing ? `${existing}; ${part}` : part);\n\t\t}\n\n\t\treturn { headers, url };\n\t}\n\n\treturn { headers, url };\n}\n\nexport type EmbeddedDefaults = {\n\tserver?: string;\n\tserverVars?: string[];\n\tauth?: string;\n};\n\nexport type BuildRequestInput = {\n\tspecId: string;\n\taction: CommandAction;\n\tpositionalValues: string[];\n\tflagValues: Record<string, unknown>;\n\tglobals: RuntimeGlobals;\n\tservers: import(\"../server.ts\").ServerInfo[];\n\tauthSchemes: AuthScheme[];\n\tembeddedDefaults?: EmbeddedDefaults;\n\tbodyFlagDefs?: import(\"./body-flags.ts\").BodyFlagDef[];\n};\n\nexport async function buildRequest(\n\tinput: BuildRequestInput,\n): Promise<{ request: Request; curl: string }> {\n\t// Always use the \"default\" profile for simplicity\n\tconst defaultProfileName = \"default\";\n\tconst profilesFile = await readProfiles();\n\tconst profile = getProfile(profilesFile, defaultProfileName);\n\tconst embedded = input.embeddedDefaults;\n\n\t// Merge server vars: CLI flags override embedded defaults\n\tconst embeddedServerVars = parseKeyValuePairs(embedded?.serverVars);\n\tconst cliServerVars = parseKeyValuePairs(input.globals.serverVar);\n\tconst serverVars = { ...embeddedServerVars, ...cliServerVars };\n\n\t// Priority: CLI flag > profile > embedded default\n\tconst serverUrl = resolveServerUrl({\n\t\tserverOverride: input.globals.server ?? profile?.server ?? embedded?.server,\n\t\tservers: input.servers,\n\t\tserverVars,\n\t});\n\n\t// Path params: action.positionals order matches templated params order.\n\tconst pathVars: Record<string, string> = {};\n\tfor (let i = 0; i < input.action.positionals.length; i++) {\n\t\tconst pos = input.action.positionals[i];\n\t\tconst raw = input.action.pathArgs[i];\n\t\tconst value = input.positionalValues[i];\n\t\tif (typeof raw === \"string\" && typeof value === \"string\") {\n\t\t\tpathVars[raw] = value;\n\t\t}\n\t\t// Use cli name too as fallback\n\t\tif (pos?.name && typeof value === \"string\") {\n\t\t\tpathVars[pos.name] = value;\n\t\t}\n\t}\n\n\tconst path = applyTemplate(input.action.path, pathVars, { encode: true });\n\n\t// Build the full URL by combining server URL and path.\n\t// We need to handle the case where path starts with \"/\" carefully:\n\t// URL constructor treats absolute paths as relative to origin, not base path.\n\tconst baseUrl = serverUrl.endsWith(\"/\") ? serverUrl : `${serverUrl}/`;\n\tconst relativePath = path.startsWith(\"/\") ? path.slice(1) : path;\n\tconst url = new URL(relativePath, baseUrl);\n\n\tconst headers = new Headers();\n\n\t// Collect declared params for validation.\n\tconst queryValues: Record<string, unknown> = {};\n\tconst headerValues: Record<string, unknown> = {};\n\tconst cookieValues: Record<string, unknown> = {};\n\n\tfor (const p of input.action.params) {\n\t\tif (p.kind !== \"flag\") continue;\n\t\tconst optValue = input.flagValues[optionKeyFromFlag(p.flag)];\n\t\tif (typeof optValue === \"undefined\") continue;\n\n\t\tif (p.in === \"query\") {\n\t\t\tqueryValues[p.name] = optValue;\n\t\t}\n\t\tif (p.in === \"header\") {\n\t\t\theaderValues[p.name] = optValue;\n\t\t}\n\t\tif (p.in === \"cookie\") {\n\t\t\tcookieValues[p.name] = optValue;\n\t\t}\n\t}\n\n\t// Validate params (query/header/cookie) using Ajv.\n\tconst schemas = deriveValidationSchemas(input.action);\n\tconst ajv = createAjv();\n\n\tif (schemas.querySchema) {\n\t\tconst validate = ajv.compile(schemas.querySchema);\n\t\tif (!validate(queryValues)) {\n\t\t\tthrow new Error(formatAjvErrors(validate.errors));\n\t\t}\n\t}\n\tif (schemas.headerSchema) {\n\t\tconst validate = ajv.compile(schemas.headerSchema);\n\t\tif (!validate(headerValues)) {\n\t\t\tthrow new Error(formatAjvErrors(validate.errors));\n\t\t}\n\t}\n\tif (schemas.cookieSchema) {\n\t\tconst validate = ajv.compile(schemas.cookieSchema);\n\t\tif (!validate(cookieValues)) {\n\t\t\tthrow new Error(formatAjvErrors(validate.errors));\n\t\t}\n\t}\n\n\t// Apply params -> query/header/cookie\n\tfor (const [name, value] of Object.entries(queryValues)) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const item of value) {\n\t\t\t\turl.searchParams.append(name, String(item));\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\turl.searchParams.set(name, String(value));\n\t}\n\tfor (const [name, value] of Object.entries(headerValues)) {\n\t\theaders.set(name, String(value));\n\t}\n\tfor (const [name, value] of Object.entries(cookieValues)) {\n\t\tconst existing = headers.get(\"Cookie\");\n\t\tconst part = `${name}=${String(value)}`;\n\t\theaders.set(\"Cookie\", existing ? `${existing}; ${part}` : part);\n\t}\n\n\tlet body: string | undefined;\n\tif (input.action.requestBody) {\n\t\t// Check if any body flags were provided using the flag definitions\n\t\tconst bodyFlagDefs = input.bodyFlagDefs ?? [];\n\t\tconst hasBodyFlags = bodyFlagDefs.some((def) => {\n\t\t\t// Commander keeps dots in option names: --address.street -> \"address.street\"\n\t\t\tconst dotKey = def.path.join(\".\");\n\t\t\treturn input.flagValues[dotKey] !== undefined;\n\t\t});\n\n\t\tconst contentType = input.action.requestBody.preferredContentType;\n\t\tif (contentType) headers.set(\"Content-Type\", contentType);\n\n\t\tconst schema = input.action.requestBodySchema;\n\n\t\t// Check if there are any required fields in the body\n\t\tconst requiredFields = bodyFlagDefs.filter((d) => d.required);\n\n\t\tif (!hasBodyFlags) {\n\t\t\tif (requiredFields.length > 0) {\n\t\t\t\t// Error: user must provide required fields\n\t\t\t\tconst flagList = requiredFields.map((d) => `--${d.path.join(\".\")}`);\n\t\t\t\tthrow new Error(`Required: ${flagList.join(\", \")}`);\n\t\t\t}\n\t\t\t// No required fields - send empty body if body is required, otherwise skip\n\t\t\tif (input.action.requestBody.required) {\n\t\t\t\tbody = \"{}\";\n\t\t\t}\n\t\t} else {\n\t\t\tif (!contentType?.includes(\"json\")) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Body field flags are only supported for JSON request bodies.\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Check for missing required fields\n\t\t\tconst { findMissingRequired, parseDotNotationFlags } = await import(\n\t\t\t\t\"./body-flags.ts\"\n\t\t\t);\n\t\t\tconst missing = findMissingRequired(input.flagValues, bodyFlagDefs);\n\t\t\tif (missing.length > 0) {\n\t\t\t\tconst missingFlags = missing.map((m) => `--${m}`).join(\", \");\n\t\t\t\tthrow new Error(`Missing required fields: ${missingFlags}`);\n\t\t\t}\n\n\t\t\t// Build nested object from dot-notation flags\n\t\t\tconst built = parseDotNotationFlags(input.flagValues, bodyFlagDefs);\n\n\t\t\tif (schema) {\n\t\t\t\tconst validate = ajv.compile(schema);\n\t\t\t\tif (!validate(built)) {\n\t\t\t\t\tthrow new Error(formatAjvErrors(validate.errors));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbody = JSON.stringify(built);\n\t\t}\n\t}\n\n\t// Check if user has a stored token (needed for auth scheme auto-selection)\n\tconst storedToken = profile?.name\n\t\t? await getToken(input.specId, profile.name)\n\t\t: null;\n\n\t// Auth resolution priority: CLI flag > profile > embedded default\n\tconst resolvedAuthScheme = resolveAuthScheme(\n\t\tinput.authSchemes,\n\t\tinput.action.auth,\n\t\t{\n\t\t\tflagAuthScheme: input.globals.auth,\n\t\t\tprofileAuthScheme: profile?.authScheme,\n\t\t\tembeddedAuthScheme: embedded?.auth,\n\t\t\thasStoredToken: Boolean(storedToken),\n\t\t},\n\t);\n\n\tconst tokenFromProfile = resolvedAuthScheme ? storedToken : null;\n\n\tconst globalsWithProfileAuth: RuntimeGlobals = {\n\t\t...input.globals,\n\t\tauth: resolvedAuthScheme,\n\t\tbearerToken:\n\t\t\tinput.globals.bearerToken ??\n\t\t\tinput.globals.oauthToken ??\n\t\t\ttokenFromProfile ??\n\t\t\tundefined,\n\t};\n\n\tconst final = applyAuth(\n\t\theaders,\n\t\turl,\n\t\tinput.action,\n\t\tglobalsWithProfileAuth,\n\t\tinput.authSchemes,\n\t);\n\n\tconst req = new Request(final.url.toString(), {\n\t\tmethod: input.action.method,\n\t\theaders: final.headers,\n\t\tbody,\n\t});\n\n\tconst curl = buildCurl(req, body);\n\treturn { request: req, curl };\n}\n\nfunction buildCurl(req: Request, body: string | undefined): string {\n\tconst parts: string[] = [\"curl\", \"-sS\", \"-X\", req.method];\n\tfor (const [k, v] of req.headers.entries()) {\n\t\tparts.push(\"-H\", shellQuote(`${k}: ${v}`));\n\t}\n\tif (typeof body === \"string\") {\n\t\tparts.push(\"--data\", shellQuote(body));\n\t}\n\tparts.push(shellQuote(req.url));\n\treturn parts.join(\" \");\n}\n\nfunction shellQuote(value: string): string {\n\treturn `'${value.replace(/'/g, `'\\\\''`)}'`;\n}\n\nfunction optionKeyFromFlag(flag: string): string {\n\t// Commander uses camelCase property names derived from long flag.\n\t// Example: --x-request-id -> xRequestId\n\tconst name = flag.replace(/^--/, \"\");\n\treturn name.replace(/-([a-z])/g, (_, c) => String(c).toUpperCase());\n}\n",
43
+ "import type { CommandAction } from \"../command-model.ts\";\n\nimport type { BodyFlagDef } from \"./body-flags.ts\";\nimport { buildRequest, type EmbeddedDefaults } from \"./request.ts\";\n\nexport type ExecuteInput = {\n\taction: CommandAction;\n\tpositionalValues: string[];\n\tflagValues: Record<string, unknown>;\n\tglobals: import(\"./request.ts\").RuntimeGlobals;\n\tservers: import(\"../server.ts\").ServerInfo[];\n\tauthSchemes: import(\"../auth-schemes.ts\").AuthScheme[];\n\tspecId: string;\n\tembeddedDefaults?: EmbeddedDefaults;\n\tbodyFlagDefs?: BodyFlagDef[];\n\t/** Resource name for error messages (e.g. \"plans\") */\n\tresourceName?: string;\n};\n\nexport type ExecuteResult = {\n\tok: boolean;\n\tstatus: number;\n\tbody: unknown;\n\tcurl: string;\n};\n\n/**\n * Format an error message with a help hint.\n */\nfunction formatError(\n\tmessage: string,\n\tresourceName: string | undefined,\n\tactionName: string,\n): string {\n\tconst helpCmd = resourceName\n\t\t? `${resourceName} ${actionName} --help`\n\t\t: `${actionName} --help`;\n\treturn `${message}\\n\\nRun '${helpCmd}' to see available options.`;\n}\n\n/**\n * Execute an action and return the result as data.\n * This is the core execution function used by both CLI and programmatic API.\n */\nexport async function execute(\n\tinput: Omit<ExecuteInput, \"resourceName\">,\n): Promise<ExecuteResult> {\n\tconst { request, curl } = await buildRequest({\n\t\tspecId: input.specId,\n\t\taction: input.action,\n\t\tpositionalValues: input.positionalValues,\n\t\tflagValues: input.flagValues,\n\t\tglobals: input.globals,\n\t\tservers: input.servers,\n\t\tauthSchemes: input.authSchemes,\n\t\tembeddedDefaults: input.embeddedDefaults,\n\t\tbodyFlagDefs: input.bodyFlagDefs,\n\t});\n\n\tconst res = await fetch(request);\n\tconst contentType = res.headers.get(\"content-type\") ?? \"\";\n\n\tconst text = await res.text();\n\tlet body: unknown = text;\n\n\tif (contentType.includes(\"json\") && text) {\n\t\ttry {\n\t\t\tbody = JSON.parse(text);\n\t\t} catch {\n\t\t\t// keep as text\n\t\t}\n\t}\n\n\treturn {\n\t\tok: res.ok,\n\t\tstatus: res.status,\n\t\tbody,\n\t\tcurl,\n\t};\n}\n\n/**\n * Execute an action and write output to stdout/stderr.\n * This is the CLI-facing wrapper around execute().\n */\nexport async function executeAction(input: ExecuteInput): Promise<void> {\n\tconst actionName = input.action.action;\n\tconst resourceName = input.resourceName;\n\n\ttry {\n\t\tif (input.globals.curl) {\n\t\t\tconst { curl } = await buildRequest({\n\t\t\t\tspecId: input.specId,\n\t\t\t\taction: input.action,\n\t\t\t\tpositionalValues: input.positionalValues,\n\t\t\t\tflagValues: input.flagValues,\n\t\t\t\tglobals: input.globals,\n\t\t\t\tservers: input.servers,\n\t\t\t\tauthSchemes: input.authSchemes,\n\t\t\t\tembeddedDefaults: input.embeddedDefaults,\n\t\t\t\tbodyFlagDefs: input.bodyFlagDefs,\n\t\t\t});\n\t\t\tprocess.stdout.write(`${curl}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst result = await execute(input);\n\n\t\tif (!result.ok) {\n\t\t\tif (input.globals.json) {\n\t\t\t\tprocess.stdout.write(\n\t\t\t\t\t`${JSON.stringify({ status: result.status, body: result.body })}\\n`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tprocess.stderr.write(`HTTP ${result.status}\\n`);\n\t\t\t\tprocess.stderr.write(\n\t\t\t\t\t`${typeof result.body === \"string\" ? result.body : JSON.stringify(result.body, null, 2)}\\n`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tprocess.exitCode = 1;\n\t\t\treturn;\n\t\t}\n\n\t\tif (input.globals.json) {\n\t\t\tprocess.stdout.write(`${JSON.stringify(result.body)}\\n`);\n\t\t\treturn;\n\t\t}\n\n\t\t// default (human + agent readable)\n\t\tif (typeof result.body === \"string\") {\n\t\t\tprocess.stdout.write(result.body);\n\t\t\tif (!result.body.endsWith(\"\\n\")) process.stdout.write(\"\\n\");\n\t\t} else {\n\t\t\tprocess.stdout.write(`${JSON.stringify(result.body, null, 2)}\\n`);\n\t\t}\n\t} catch (err) {\n\t\tconst rawMessage = err instanceof Error ? err.message : String(err);\n\t\tconst message = formatError(rawMessage, resourceName, actionName);\n\n\t\tif (input.globals.json) {\n\t\t\tprocess.stdout.write(`${JSON.stringify({ error: rawMessage })}\\n`);\n\t\t} else {\n\t\t\tprocess.stderr.write(`error: ${message}\\n`);\n\t\t}\n\t\tprocess.exitCode = 1;\n\t}\n}\n"
44
+ ],
45
+ "mappings": "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",
46
+ "debugId": "4FE857249D0B04F164756E2164756E21",
47
+ "names": []
48
+ }
@@ -0,0 +1,12 @@
1
+ import type { NormalizedOperation } from "./types.js";
2
+ export type PlannedOperation = NormalizedOperation & {
3
+ resource: string;
4
+ action: string;
5
+ pathArgs: string[];
6
+ style: "rest" | "rpc";
7
+ canonicalAction: string;
8
+ aliasOf?: string;
9
+ };
10
+ export declare function planOperation(op: NormalizedOperation): PlannedOperation;
11
+ export declare function planOperations(ops: NormalizedOperation[]): PlannedOperation[];
12
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../../src/cli/naming.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,GAAG;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAqKF,wBAAgB,aAAa,CAAC,EAAE,EAAE,mBAAmB,GAAG,gBAAgB,CAcvE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,gBAAgB,EAAE,CA+B7E"}