@hypercli/gen 0.1.1

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 (306) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -0
  3. package/dist/actions/communication.d.ts +201 -0
  4. package/dist/actions/communication.d.ts.map +1 -0
  5. package/dist/actions/communication.js +515 -0
  6. package/dist/actions/communication.js.map +1 -0
  7. package/dist/actions/decorator.d.ts +22 -0
  8. package/dist/actions/decorator.d.ts.map +1 -0
  9. package/dist/actions/decorator.js +110 -0
  10. package/dist/actions/decorator.js.map +1 -0
  11. package/dist/actions/executor.d.ts +85 -0
  12. package/dist/actions/executor.d.ts.map +1 -0
  13. package/dist/actions/executor.js +289 -0
  14. package/dist/actions/executor.js.map +1 -0
  15. package/dist/actions/index.d.ts +14 -0
  16. package/dist/actions/index.d.ts.map +1 -0
  17. package/dist/actions/index.js +15 -0
  18. package/dist/actions/index.js.map +1 -0
  19. package/dist/actions/parameter-resolver.d.ts +54 -0
  20. package/dist/actions/parameter-resolver.d.ts.map +1 -0
  21. package/dist/actions/parameter-resolver.js +300 -0
  22. package/dist/actions/parameter-resolver.js.map +1 -0
  23. package/dist/actions/registry.d.ts +78 -0
  24. package/dist/actions/registry.d.ts.map +1 -0
  25. package/dist/actions/registry.js +221 -0
  26. package/dist/actions/registry.js.map +1 -0
  27. package/dist/actions/types.d.ts +109 -0
  28. package/dist/actions/types.d.ts.map +1 -0
  29. package/dist/actions/types.js +31 -0
  30. package/dist/actions/types.js.map +1 -0
  31. package/dist/actions/utils.d.ts +42 -0
  32. package/dist/actions/utils.d.ts.map +1 -0
  33. package/dist/actions/utils.js +144 -0
  34. package/dist/actions/utils.js.map +1 -0
  35. package/dist/ai/ai-collector.d.ts +52 -0
  36. package/dist/ai/ai-collector.d.ts.map +1 -0
  37. package/dist/ai/ai-collector.js +64 -0
  38. package/dist/ai/ai-collector.js.map +1 -0
  39. package/dist/ai/ai-config.d.ts +230 -0
  40. package/dist/ai/ai-config.d.ts.map +1 -0
  41. package/dist/ai/ai-config.js +8 -0
  42. package/dist/ai/ai-config.js.map +1 -0
  43. package/dist/ai/ai-service.d.ts +66 -0
  44. package/dist/ai/ai-service.d.ts.map +1 -0
  45. package/dist/ai/ai-service.js +198 -0
  46. package/dist/ai/ai-service.js.map +1 -0
  47. package/dist/ai/ai-variable-resolver.d.ts +59 -0
  48. package/dist/ai/ai-variable-resolver.d.ts.map +1 -0
  49. package/dist/ai/ai-variable-resolver.js +219 -0
  50. package/dist/ai/ai-variable-resolver.js.map +1 -0
  51. package/dist/ai/context-collector.d.ts +30 -0
  52. package/dist/ai/context-collector.d.ts.map +1 -0
  53. package/dist/ai/context-collector.js +158 -0
  54. package/dist/ai/context-collector.js.map +1 -0
  55. package/dist/ai/cost-tracker.d.ts +41 -0
  56. package/dist/ai/cost-tracker.d.ts.map +1 -0
  57. package/dist/ai/cost-tracker.js +131 -0
  58. package/dist/ai/cost-tracker.js.map +1 -0
  59. package/dist/ai/env.d.ts +36 -0
  60. package/dist/ai/env.d.ts.map +1 -0
  61. package/dist/ai/env.js +100 -0
  62. package/dist/ai/env.js.map +1 -0
  63. package/dist/ai/index.d.ts +17 -0
  64. package/dist/ai/index.d.ts.map +1 -0
  65. package/dist/ai/index.js +25 -0
  66. package/dist/ai/index.js.map +1 -0
  67. package/dist/ai/model-router.d.ts +32 -0
  68. package/dist/ai/model-router.d.ts.map +1 -0
  69. package/dist/ai/model-router.js +113 -0
  70. package/dist/ai/model-router.js.map +1 -0
  71. package/dist/ai/output-validator.d.ts +24 -0
  72. package/dist/ai/output-validator.d.ts.map +1 -0
  73. package/dist/ai/output-validator.js +279 -0
  74. package/dist/ai/output-validator.js.map +1 -0
  75. package/dist/ai/prompt-assembler.d.ts +30 -0
  76. package/dist/ai/prompt-assembler.d.ts.map +1 -0
  77. package/dist/ai/prompt-assembler.js +93 -0
  78. package/dist/ai/prompt-assembler.js.map +1 -0
  79. package/dist/ai/prompt-pipeline.d.ts +63 -0
  80. package/dist/ai/prompt-pipeline.d.ts.map +1 -0
  81. package/dist/ai/prompt-pipeline.js +119 -0
  82. package/dist/ai/prompt-pipeline.js.map +1 -0
  83. package/dist/ai/prompt-template.jig +88 -0
  84. package/dist/ai/transports/api-transport.d.ts +12 -0
  85. package/dist/ai/transports/api-transport.d.ts.map +1 -0
  86. package/dist/ai/transports/api-transport.js +86 -0
  87. package/dist/ai/transports/api-transport.js.map +1 -0
  88. package/dist/ai/transports/command-transport.d.ts +20 -0
  89. package/dist/ai/transports/command-transport.d.ts.map +1 -0
  90. package/dist/ai/transports/command-transport.js +203 -0
  91. package/dist/ai/transports/command-transport.js.map +1 -0
  92. package/dist/ai/transports/index.d.ts +11 -0
  93. package/dist/ai/transports/index.d.ts.map +1 -0
  94. package/dist/ai/transports/index.js +10 -0
  95. package/dist/ai/transports/index.js.map +1 -0
  96. package/dist/ai/transports/resolve-transport.d.ts +15 -0
  97. package/dist/ai/transports/resolve-transport.d.ts.map +1 -0
  98. package/dist/ai/transports/resolve-transport.js +96 -0
  99. package/dist/ai/transports/resolve-transport.js.map +1 -0
  100. package/dist/ai/transports/stdout-transport.d.ts +14 -0
  101. package/dist/ai/transports/stdout-transport.d.ts.map +1 -0
  102. package/dist/ai/transports/stdout-transport.js +27 -0
  103. package/dist/ai/transports/stdout-transport.js.map +1 -0
  104. package/dist/ai/transports/types.d.ts +77 -0
  105. package/dist/ai/transports/types.d.ts.map +1 -0
  106. package/dist/ai/transports/types.js +8 -0
  107. package/dist/ai/transports/types.js.map +1 -0
  108. package/dist/commands/cookbook/info.d.ts +22 -0
  109. package/dist/commands/cookbook/info.d.ts.map +1 -0
  110. package/dist/commands/cookbook/info.js +217 -0
  111. package/dist/commands/cookbook/info.js.map +1 -0
  112. package/dist/commands/cookbook/list.d.ts +20 -0
  113. package/dist/commands/cookbook/list.d.ts.map +1 -0
  114. package/dist/commands/cookbook/list.js +133 -0
  115. package/dist/commands/cookbook/list.js.map +1 -0
  116. package/dist/commands/gen.d.ts +65 -0
  117. package/dist/commands/gen.d.ts.map +1 -0
  118. package/dist/commands/gen.js +478 -0
  119. package/dist/commands/gen.js.map +1 -0
  120. package/dist/commands/recipe/info.d.ts +18 -0
  121. package/dist/commands/recipe/info.d.ts.map +1 -0
  122. package/dist/commands/recipe/info.js +89 -0
  123. package/dist/commands/recipe/info.js.map +1 -0
  124. package/dist/commands/recipe/list.d.ts +29 -0
  125. package/dist/commands/recipe/list.d.ts.map +1 -0
  126. package/dist/commands/recipe/list.js +215 -0
  127. package/dist/commands/recipe/list.js.map +1 -0
  128. package/dist/commands/recipe/run.d.ts +44 -0
  129. package/dist/commands/recipe/run.d.ts.map +1 -0
  130. package/dist/commands/recipe/run.js +239 -0
  131. package/dist/commands/recipe/run.js.map +1 -0
  132. package/dist/commands/recipe/validate.d.ts +19 -0
  133. package/dist/commands/recipe/validate.d.ts.map +1 -0
  134. package/dist/commands/recipe/validate.js +66 -0
  135. package/dist/commands/recipe/validate.js.map +1 -0
  136. package/dist/discovery/generator-discovery.d.ts +130 -0
  137. package/dist/discovery/generator-discovery.d.ts.map +1 -0
  138. package/dist/discovery/generator-discovery.js +674 -0
  139. package/dist/discovery/generator-discovery.js.map +1 -0
  140. package/dist/discovery/index.d.ts +8 -0
  141. package/dist/discovery/index.d.ts.map +1 -0
  142. package/dist/discovery/index.js +7 -0
  143. package/dist/discovery/index.js.map +1 -0
  144. package/dist/hooks/command-not-found.d.ts +18 -0
  145. package/dist/hooks/command-not-found.d.ts.map +1 -0
  146. package/dist/hooks/command-not-found.js +182 -0
  147. package/dist/hooks/command-not-found.js.map +1 -0
  148. package/dist/hooks/suggest.d.ts +13 -0
  149. package/dist/hooks/suggest.d.ts.map +1 -0
  150. package/dist/hooks/suggest.js +28 -0
  151. package/dist/hooks/suggest.js.map +1 -0
  152. package/dist/index.d.ts +2 -0
  153. package/dist/index.d.ts.map +1 -0
  154. package/dist/index.js +3 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/lib/base-command.d.ts +26 -0
  157. package/dist/lib/base-command.d.ts.map +1 -0
  158. package/dist/lib/base-command.js +24 -0
  159. package/dist/lib/base-command.js.map +1 -0
  160. package/dist/lib/flags.d.ts +33 -0
  161. package/dist/lib/flags.d.ts.map +1 -0
  162. package/dist/lib/flags.js +64 -0
  163. package/dist/lib/flags.js.map +1 -0
  164. package/dist/ops/add.d.ts +4 -0
  165. package/dist/ops/add.d.ts.map +1 -0
  166. package/dist/ops/add.js +85 -0
  167. package/dist/ops/add.js.map +1 -0
  168. package/dist/ops/inject.d.ts +4 -0
  169. package/dist/ops/inject.d.ts.map +1 -0
  170. package/dist/ops/inject.js +28 -0
  171. package/dist/ops/inject.js.map +1 -0
  172. package/dist/ops/injector.d.ts +4 -0
  173. package/dist/ops/injector.d.ts.map +1 -0
  174. package/dist/ops/injector.js +68 -0
  175. package/dist/ops/injector.js.map +1 -0
  176. package/dist/ops/result.d.ts +3 -0
  177. package/dist/ops/result.d.ts.map +1 -0
  178. package/dist/ops/result.js +8 -0
  179. package/dist/ops/result.js.map +1 -0
  180. package/dist/prompts/interactive-prompts.d.ts +152 -0
  181. package/dist/prompts/interactive-prompts.d.ts.map +1 -0
  182. package/dist/prompts/interactive-prompts.js +574 -0
  183. package/dist/prompts/interactive-prompts.js.map +1 -0
  184. package/dist/recipe-engine/group-executor.d.ts +97 -0
  185. package/dist/recipe-engine/group-executor.d.ts.map +1 -0
  186. package/dist/recipe-engine/group-executor.js +293 -0
  187. package/dist/recipe-engine/group-executor.js.map +1 -0
  188. package/dist/recipe-engine/index.d.ts +112 -0
  189. package/dist/recipe-engine/index.d.ts.map +1 -0
  190. package/dist/recipe-engine/index.js +223 -0
  191. package/dist/recipe-engine/index.js.map +1 -0
  192. package/dist/recipe-engine/output-evaluator.d.ts +28 -0
  193. package/dist/recipe-engine/output-evaluator.d.ts.map +1 -0
  194. package/dist/recipe-engine/output-evaluator.js +78 -0
  195. package/dist/recipe-engine/output-evaluator.js.map +1 -0
  196. package/dist/recipe-engine/recipe-engine.d.ts +227 -0
  197. package/dist/recipe-engine/recipe-engine.d.ts.map +1 -0
  198. package/dist/recipe-engine/recipe-engine.js +1036 -0
  199. package/dist/recipe-engine/recipe-engine.js.map +1 -0
  200. package/dist/recipe-engine/step-executor.d.ts +172 -0
  201. package/dist/recipe-engine/step-executor.d.ts.map +1 -0
  202. package/dist/recipe-engine/step-executor.js +802 -0
  203. package/dist/recipe-engine/step-executor.js.map +1 -0
  204. package/dist/recipe-engine/tools/action-tool.d.ts +103 -0
  205. package/dist/recipe-engine/tools/action-tool.d.ts.map +1 -0
  206. package/dist/recipe-engine/tools/action-tool.js +473 -0
  207. package/dist/recipe-engine/tools/action-tool.js.map +1 -0
  208. package/dist/recipe-engine/tools/ai-tool.d.ts +26 -0
  209. package/dist/recipe-engine/tools/ai-tool.d.ts.map +1 -0
  210. package/dist/recipe-engine/tools/ai-tool.js +233 -0
  211. package/dist/recipe-engine/tools/ai-tool.js.map +1 -0
  212. package/dist/recipe-engine/tools/base.d.ts +214 -0
  213. package/dist/recipe-engine/tools/base.d.ts.map +1 -0
  214. package/dist/recipe-engine/tools/base.js +397 -0
  215. package/dist/recipe-engine/tools/base.js.map +1 -0
  216. package/dist/recipe-engine/tools/codemod-tool.d.ts +130 -0
  217. package/dist/recipe-engine/tools/codemod-tool.d.ts.map +1 -0
  218. package/dist/recipe-engine/tools/codemod-tool.js +786 -0
  219. package/dist/recipe-engine/tools/codemod-tool.js.map +1 -0
  220. package/dist/recipe-engine/tools/ensure-dirs-tool.d.ts +21 -0
  221. package/dist/recipe-engine/tools/ensure-dirs-tool.d.ts.map +1 -0
  222. package/dist/recipe-engine/tools/ensure-dirs-tool.js +130 -0
  223. package/dist/recipe-engine/tools/ensure-dirs-tool.js.map +1 -0
  224. package/dist/recipe-engine/tools/index.d.ts +126 -0
  225. package/dist/recipe-engine/tools/index.d.ts.map +1 -0
  226. package/dist/recipe-engine/tools/index.js +290 -0
  227. package/dist/recipe-engine/tools/index.js.map +1 -0
  228. package/dist/recipe-engine/tools/install-tool.d.ts +20 -0
  229. package/dist/recipe-engine/tools/install-tool.d.ts.map +1 -0
  230. package/dist/recipe-engine/tools/install-tool.js +194 -0
  231. package/dist/recipe-engine/tools/install-tool.js.map +1 -0
  232. package/dist/recipe-engine/tools/parallel-tool.d.ts +21 -0
  233. package/dist/recipe-engine/tools/parallel-tool.d.ts.map +1 -0
  234. package/dist/recipe-engine/tools/parallel-tool.js +134 -0
  235. package/dist/recipe-engine/tools/parallel-tool.js.map +1 -0
  236. package/dist/recipe-engine/tools/patch-tool.d.ts +21 -0
  237. package/dist/recipe-engine/tools/patch-tool.d.ts.map +1 -0
  238. package/dist/recipe-engine/tools/patch-tool.js +248 -0
  239. package/dist/recipe-engine/tools/patch-tool.js.map +1 -0
  240. package/dist/recipe-engine/tools/prompt-tool.d.ts +25 -0
  241. package/dist/recipe-engine/tools/prompt-tool.d.ts.map +1 -0
  242. package/dist/recipe-engine/tools/prompt-tool.js +162 -0
  243. package/dist/recipe-engine/tools/prompt-tool.js.map +1 -0
  244. package/dist/recipe-engine/tools/query-tool.d.ts +21 -0
  245. package/dist/recipe-engine/tools/query-tool.d.ts.map +1 -0
  246. package/dist/recipe-engine/tools/query-tool.js +249 -0
  247. package/dist/recipe-engine/tools/query-tool.js.map +1 -0
  248. package/dist/recipe-engine/tools/recipe-tool.d.ts +103 -0
  249. package/dist/recipe-engine/tools/recipe-tool.d.ts.map +1 -0
  250. package/dist/recipe-engine/tools/recipe-tool.js +617 -0
  251. package/dist/recipe-engine/tools/recipe-tool.js.map +1 -0
  252. package/dist/recipe-engine/tools/registry.d.ts +151 -0
  253. package/dist/recipe-engine/tools/registry.d.ts.map +1 -0
  254. package/dist/recipe-engine/tools/registry.js +244 -0
  255. package/dist/recipe-engine/tools/registry.js.map +1 -0
  256. package/dist/recipe-engine/tools/sequence-tool.d.ts +22 -0
  257. package/dist/recipe-engine/tools/sequence-tool.d.ts.map +1 -0
  258. package/dist/recipe-engine/tools/sequence-tool.js +122 -0
  259. package/dist/recipe-engine/tools/sequence-tool.js.map +1 -0
  260. package/dist/recipe-engine/tools/shell-tool.d.ts +25 -0
  261. package/dist/recipe-engine/tools/shell-tool.d.ts.map +1 -0
  262. package/dist/recipe-engine/tools/shell-tool.js +149 -0
  263. package/dist/recipe-engine/tools/shell-tool.js.map +1 -0
  264. package/dist/recipe-engine/tools/template-tool.d.ts +88 -0
  265. package/dist/recipe-engine/tools/template-tool.d.ts.map +1 -0
  266. package/dist/recipe-engine/tools/template-tool.js +613 -0
  267. package/dist/recipe-engine/tools/template-tool.js.map +1 -0
  268. package/dist/recipe-engine/types.d.ts +963 -0
  269. package/dist/recipe-engine/types.d.ts.map +1 -0
  270. package/dist/recipe-engine/types.js +94 -0
  271. package/dist/recipe-engine/types.js.map +1 -0
  272. package/dist/template-engines/ai-tags.d.ts +26 -0
  273. package/dist/template-engines/ai-tags.d.ts.map +1 -0
  274. package/dist/template-engines/ai-tags.js +233 -0
  275. package/dist/template-engines/ai-tags.js.map +1 -0
  276. package/dist/template-engines/index.d.ts +8 -0
  277. package/dist/template-engines/index.d.ts.map +1 -0
  278. package/dist/template-engines/index.js +8 -0
  279. package/dist/template-engines/index.js.map +1 -0
  280. package/dist/template-engines/jig-engine.d.ts +47 -0
  281. package/dist/template-engines/jig-engine.d.ts.map +1 -0
  282. package/dist/template-engines/jig-engine.js +173 -0
  283. package/dist/template-engines/jig-engine.js.map +1 -0
  284. package/dist/utils/coerce-value.d.ts +7 -0
  285. package/dist/utils/coerce-value.d.ts.map +1 -0
  286. package/dist/utils/coerce-value.js +18 -0
  287. package/dist/utils/coerce-value.js.map +1 -0
  288. package/dist/utils/diff.d.ts +8 -0
  289. package/dist/utils/diff.d.ts.map +1 -0
  290. package/dist/utils/diff.js +10 -0
  291. package/dist/utils/diff.js.map +1 -0
  292. package/dist/utils/global-packages.d.ts +11 -0
  293. package/dist/utils/global-packages.d.ts.map +1 -0
  294. package/dist/utils/global-packages.js +88 -0
  295. package/dist/utils/global-packages.js.map +1 -0
  296. package/dist/utils/pager.d.ts +6 -0
  297. package/dist/utils/pager.d.ts.map +1 -0
  298. package/dist/utils/pager.js +41 -0
  299. package/dist/utils/pager.js.map +1 -0
  300. package/help/cookbook/info.md +35 -0
  301. package/help/cookbook/list.md +37 -0
  302. package/help/gen.md +26 -0
  303. package/help/recipe/run.md +52 -0
  304. package/help/recipe/validate.md +51 -0
  305. package/oclif.manifest.json +580 -0
  306. package/package.json +120 -0
@@ -0,0 +1,478 @@
1
+ /**
2
+ * Main command for executing recipes
3
+ * Usage: hyper gen <recipe> [options]
4
+ * Or shorthand: hyper <kit> <recipe-path>
5
+ */
6
+ import fs from "node:fs";
7
+ import path from "node:path";
8
+ import { PathResolver } from "@hypercli/core";
9
+ import { discoverKits, getDefaultKitSearchDirs } from "@hypercli/core";
10
+ import { Args, Flags } from "@oclif/core";
11
+ import { AiCollector } from "#ai/ai-collector";
12
+ import { resolveTransport } from "#ai/transports/resolve-transport";
13
+ import { BaseCommand } from "#lib/base-command";
14
+ import { GroupExecutor } from "#recipe-engine/group-executor";
15
+ import { coerceValue } from "#utils/coerce-value";
16
+ export default class Gen extends BaseCommand {
17
+ static description = "Execute a recipe to generate code";
18
+ static examples = [
19
+ "<%= config.bin %> gen ./my-recipe",
20
+ "<%= config.bin %> gen @kit/starlight/create",
21
+ "<%= config.bin %> gen create-component --name=Button",
22
+ "<%= config.bin %> gen ./my-recipe --answers ./ai-answers.json",
23
+ "<%= config.bin %> gen crud edit-page --model=Organization",
24
+ "<%= config.bin %> nextjs crud update Organization",
25
+ ];
26
+ static flags = {
27
+ ...BaseCommand.baseFlags,
28
+ dry: Flags.boolean({
29
+ description: "Show what would be generated without writing files",
30
+ default: false,
31
+ }),
32
+ force: Flags.boolean({
33
+ char: "f",
34
+ description: "Overwrite existing files",
35
+ default: false,
36
+ }),
37
+ yes: Flags.boolean({
38
+ char: "y",
39
+ description: "Skip confirmation prompts",
40
+ default: false,
41
+ }),
42
+ answers: Flags.file({
43
+ description: "Path to AI answers JSON file (2-pass generation)",
44
+ }),
45
+ "prompt-template": Flags.file({
46
+ description: "Path to a custom Jig template for the AI prompt document",
47
+ }),
48
+ ask: Flags.string({
49
+ description: "Who resolves missing variables: me (interactive), ai (use configured transport), stdout (print prompt doc to stdout), nobody (error)",
50
+ options: ["me", "ai", "stdout", "nobody"],
51
+ }),
52
+ "no-defaults": Flags.boolean({
53
+ description: "Don't use default values — ask about every variable",
54
+ default: false,
55
+ }),
56
+ };
57
+ static args = {
58
+ recipe: Args.string({
59
+ description: "Recipe to execute (path, package, or cookbook/recipe)",
60
+ required: true,
61
+ }),
62
+ };
63
+ static strict = false;
64
+ /**
65
+ * Names of all flags that are explicitly declared on this command (and its base).
66
+ * Used to strip unknown --key=value recipe variables from argv before oclif
67
+ * parses it — oclif v4 throws NonExistentFlagsError on unknown flags even when
68
+ * `strict = false` (strict only affects extra positional args, not flags).
69
+ */
70
+ static get knownFlagNames() {
71
+ const names = new Set();
72
+ const allFlags = { ...BaseCommand.baseFlags, ...Gen.flags };
73
+ for (const [name, def] of Object.entries(allFlags)) {
74
+ names.add(name);
75
+ // Also register any aliases declared on the flag
76
+ const flagDef = def;
77
+ if (flagDef.aliases) {
78
+ for (const alias of flagDef.aliases)
79
+ names.add(alias);
80
+ }
81
+ }
82
+ return names;
83
+ }
84
+ /**
85
+ * Split argv into two arrays:
86
+ * - safeArgv: only known flags + positional args (safe to pass to oclif)
87
+ * - fullArgv: the original argv (used by parseParameters / extractPathSegments)
88
+ */
89
+ splitArgv(argv) {
90
+ const known = Gen.knownFlagNames;
91
+ const safeArgv = [];
92
+ let i = 0;
93
+ while (i < argv.length) {
94
+ const arg = argv[i];
95
+ if (arg === "--") {
96
+ // Everything after `--` is safe to pass through as-is
97
+ safeArgv.push(...argv.slice(i));
98
+ break;
99
+ }
100
+ if (arg.startsWith("--")) {
101
+ const eqIdx = arg.indexOf("=");
102
+ const flagName = eqIdx > 0 ? arg.slice(2, eqIdx) : arg.slice(2);
103
+ if (known.has(flagName)) {
104
+ safeArgv.push(arg);
105
+ // If it's --flag value (no `=`), also carry forward the value token
106
+ if (eqIdx < 0 && i + 1 < argv.length && !argv[i + 1].startsWith("-")) {
107
+ i++;
108
+ safeArgv.push(argv[i]);
109
+ }
110
+ }
111
+ // Unknown --key or --key=value: drop from safeArgv (oclif won't see it)
112
+ }
113
+ else if (arg.startsWith("-") && arg.length === 2) {
114
+ // Short flag: keep only if it belongs to a known flag
115
+ const shortChar = arg.slice(1);
116
+ const isKnown = Object.values({ ...BaseCommand.baseFlags, ...Gen.flags }).some((f) => f.char === shortChar);
117
+ if (isKnown) {
118
+ safeArgv.push(arg);
119
+ // Carry the value token for -f value style
120
+ if (i + 1 < argv.length && !argv[i + 1].startsWith("-")) {
121
+ i++;
122
+ safeArgv.push(argv[i]);
123
+ }
124
+ }
125
+ }
126
+ else {
127
+ // Positional arg — always safe
128
+ safeArgv.push(arg);
129
+ }
130
+ i++;
131
+ }
132
+ return { safeArgv, fullArgv: argv };
133
+ }
134
+ async run() {
135
+ // oclif v4 throws NonExistentFlagsError for unknown flags even with strict=false.
136
+ // Recipe variables like --name=Button are unknown to oclif but valid for us.
137
+ // Strip them from argv before parse(), then use the original argv for parseParameters().
138
+ const fullArgv = this.argv;
139
+ const { safeArgv } = this.splitArgv(fullArgv);
140
+ this.argv = safeArgv;
141
+ const { flags } = await this.parse(Gen);
142
+ const argv = fullArgv; // use original argv for path/param extraction
143
+ await this.resolveEffectiveCwd(flags);
144
+ // Collect all non-flag segments for path resolution
145
+ const segments = this.extractPathSegments(argv);
146
+ // Resolve recipe path using PathResolver
147
+ const resolved = await this.resolveRecipePath(segments, flags.cwd);
148
+ if (!resolved) {
149
+ this.error(`Recipe not found: ${segments.join(" ")}\nTry 'hyper gen --help' for usage.`);
150
+ }
151
+ // Parse named parameters (--key=value and --key value)
152
+ const namedParams = this.parseParameters(argv);
153
+ // Map positional args to variables if recipe has position definitions
154
+ const positionalParams = await this.mapPositionalArgs(resolved);
155
+ const params = { ...positionalParams, ...namedParams }; // named wins
156
+ // Load AI answers if provided (Pass 2)
157
+ let answers;
158
+ if (flags.answers) {
159
+ try {
160
+ const content = fs.readFileSync(flags.answers, "utf-8");
161
+ answers = JSON.parse(content);
162
+ }
163
+ catch (error) {
164
+ this.error(`Failed to load answers file: ${error instanceof Error ? error.message : String(error)}`);
165
+ }
166
+ }
167
+ // Determine effective ask mode
168
+ // --ask=stdout is sugar for --ask=ai with the stdout transport forced
169
+ const askFlag = flags.ask;
170
+ const askMode = askFlag === "stdout" ? "ai" : (askFlag ?? (process.stdout.isTTY ? "me" : "nobody"));
171
+ const aiConfigOverride = askFlag === "stdout" ? { mode: "stdout" } : undefined;
172
+ const noDefaults = flags["no-defaults"] ?? false;
173
+ if (resolved.type === "group") {
174
+ return this.executeGroup(resolved, params, flags, answers, askMode, noDefaults, aiConfigOverride);
175
+ }
176
+ return this.executeSingleRecipe(resolved, params, flags, answers, askMode, noDefaults, aiConfigOverride);
177
+ }
178
+ /**
179
+ * Execute a single recipe
180
+ */
181
+ async executeSingleRecipe(resolved, params, flags, answers, askMode = "me", noDefaults = false, aiConfigOverride) {
182
+ // Initialize AiCollector for Pass 1 if no answers provided
183
+ const collector = AiCollector.getInstance();
184
+ collector.clear();
185
+ if (!answers) {
186
+ collector.collectMode = true;
187
+ }
188
+ if (answers) {
189
+ this.log(`Executing recipe: ${resolved.fullPath}`);
190
+ }
191
+ if (flags.dry) {
192
+ this.log("(dry run - no files will be written)");
193
+ }
194
+ const aiConfig = aiConfigOverride
195
+ ? { ...this.hypergenConfig?.ai, ...aiConfigOverride }
196
+ : this.hypergenConfig?.ai;
197
+ try {
198
+ let result = await this.recipeEngine.executeRecipe({ type: "file", path: resolved.fullPath }, {
199
+ variables: params,
200
+ workingDir: flags.cwd,
201
+ dryRun: flags.dry,
202
+ force: flags.force,
203
+ answers,
204
+ askMode,
205
+ noDefaults,
206
+ aiConfig,
207
+ });
208
+ // Check if Pass 1 collected any AI entries
209
+ if (collector.collectMode && collector.hasEntries()) {
210
+ const transport = resolveTransport(aiConfig);
211
+ // Build the original command from consumed path segments, remaining positional args,
212
+ // and flags only. Do NOT include process.argv.slice(3) directly — it contains
213
+ // the consumed path segments which would be duplicated since resolved.consumed
214
+ // already has them.
215
+ const flagsOnly = process.argv
216
+ .slice(3)
217
+ .filter((a) => a.startsWith("-") && a !== "--answers" && !a.endsWith(".json"));
218
+ const originalCommand = [
219
+ "hyper",
220
+ "gen",
221
+ ...resolved.consumed,
222
+ ...resolved.remaining,
223
+ ...flagsOnly,
224
+ ].join(" ");
225
+ const promptTemplatePath = flags["prompt-template"] || aiConfig?.promptTemplate;
226
+ // Build recipe variable descriptions for the prompt document
227
+ let promptVariables;
228
+ try {
229
+ const loadResult = await this.recipeEngine.loadRecipe({
230
+ type: "file",
231
+ path: resolved.fullPath,
232
+ });
233
+ const varDefs = loadResult.recipe.variables;
234
+ if (varDefs && Object.keys(varDefs).length > 0) {
235
+ promptVariables = Object.entries(varDefs).map(([name, def]) => ({
236
+ name,
237
+ type: def.type,
238
+ required: def.required ?? false,
239
+ default: def.default,
240
+ prompt: def.prompt,
241
+ description: def.description,
242
+ values: def.values,
243
+ provided: params[name] !== undefined,
244
+ providedValue: params[name],
245
+ }));
246
+ }
247
+ }
248
+ catch {
249
+ // Non-critical — prompt will just lack variable descriptions
250
+ }
251
+ const transportResult = await transport.resolve({
252
+ collector,
253
+ config: aiConfig ?? {},
254
+ originalCommand,
255
+ answersPath: "./ai-answers.json",
256
+ projectRoot: flags.cwd,
257
+ promptTemplate: promptTemplatePath,
258
+ variables: promptVariables,
259
+ });
260
+ if (transportResult.status === "deferred") {
261
+ collector.clear();
262
+ this.exit(transportResult.exitCode);
263
+ return;
264
+ }
265
+ // Transport resolved answers inline — re-run as Pass 2
266
+ collector.clear();
267
+ collector.collectMode = false;
268
+ result = await this.recipeEngine.executeRecipe({ type: "file", path: resolved.fullPath }, {
269
+ variables: params,
270
+ workingDir: flags.cwd,
271
+ dryRun: flags.dry,
272
+ force: flags.force,
273
+ answers: transportResult.answers,
274
+ askMode: "nobody",
275
+ noDefaults,
276
+ aiConfig,
277
+ });
278
+ }
279
+ // Pass 1 found no @ai entries — recipe doesn't use AI generation.
280
+ // Re-run without collect mode so files are actually written.
281
+ if (collector.collectMode) {
282
+ collector.collectMode = false;
283
+ collector.clear();
284
+ result = await this.recipeEngine.executeRecipe({ type: "file", path: resolved.fullPath }, {
285
+ variables: params,
286
+ workingDir: flags.cwd,
287
+ dryRun: flags.dry,
288
+ force: flags.force,
289
+ answers,
290
+ askMode: "nobody", // Don't prompt again — variables already resolved
291
+ noDefaults,
292
+ aiConfig,
293
+ });
294
+ }
295
+ else {
296
+ collector.clear();
297
+ }
298
+ if (result.success) {
299
+ this.log("\n✓ Recipe completed successfully");
300
+ this.log(` Steps completed: ${result.metadata.completedSteps}`);
301
+ if (result.filesCreated.length > 0) {
302
+ this.log(` Files created: ${result.filesCreated.length}`);
303
+ }
304
+ if (result.filesModified.length > 0) {
305
+ this.log(` Files modified: ${result.filesModified.length}`);
306
+ }
307
+ }
308
+ else {
309
+ const errorMsg = result.errors.length > 0 ? result.errors.join(", ") : "Unknown error";
310
+ this.error(`Recipe failed: ${errorMsg}`);
311
+ }
312
+ }
313
+ catch (error) {
314
+ collector.clear();
315
+ if (error?.code === "EEXIT")
316
+ throw error;
317
+ this.error(`Failed to execute recipe: ${error instanceof Error ? error.message : String(error)}`);
318
+ }
319
+ }
320
+ /**
321
+ * Execute a group of recipes with dependency resolution
322
+ */
323
+ async executeGroup(resolved, params, flags, answers, askMode = "me", noDefaults = false, aiConfigOverride) {
324
+ const groupExecutor = new GroupExecutor(this.recipeEngine);
325
+ this.log(`Executing recipe group: ${resolved.fullPath}`);
326
+ if (flags.dry) {
327
+ this.log("(dry run - no files will be written)");
328
+ }
329
+ try {
330
+ const group = await groupExecutor.discoverGroup(resolved.fullPath);
331
+ if (group.recipes.length === 0) {
332
+ this.error(`No recipes found in directory: ${resolved.fullPath}`);
333
+ }
334
+ this.log(`Found ${group.recipes.length} recipes: ${group.recipes.map((r) => r.name).join(", ")}`);
335
+ const groupAiConfig = aiConfigOverride
336
+ ? { ...this.hypergenConfig?.ai, ...aiConfigOverride }
337
+ : this.hypergenConfig?.ai;
338
+ const result = await groupExecutor.executeGroup(group, params, {
339
+ variables: params,
340
+ workingDir: flags.cwd,
341
+ dryRun: flags.dry,
342
+ force: flags.force,
343
+ answers,
344
+ continueOnError: false,
345
+ askMode,
346
+ noDefaults,
347
+ aiConfig: groupAiConfig,
348
+ });
349
+ if (result.success) {
350
+ this.log("\n✓ Group execution completed successfully");
351
+ this.log(` Recipes executed: ${result.recipeResults.length}`);
352
+ for (const rr of result.recipeResults) {
353
+ const status = rr.result.success ? "✓" : "✗";
354
+ this.log(` ${status} ${rr.name}: ${rr.result.metadata.completedSteps} steps`);
355
+ }
356
+ }
357
+ else {
358
+ const errorMsg = result.errors.length > 0 ? result.errors.join("\n ") : "Unknown error";
359
+ this.error(`Group execution failed:\n ${errorMsg}`);
360
+ }
361
+ }
362
+ catch (error) {
363
+ if (error?.code === "EEXIT")
364
+ throw error;
365
+ this.error(`Failed to execute group: ${error instanceof Error ? error.message : String(error)}`);
366
+ }
367
+ }
368
+ /**
369
+ * Extract non-flag path segments from argv.
370
+ * Everything before `--` and not starting with `-` is a path segment.
371
+ */
372
+ extractPathSegments(argv) {
373
+ const segments = [];
374
+ for (const arg of argv) {
375
+ if (arg === "--")
376
+ break;
377
+ if (arg.startsWith("-")) {
378
+ // If it's --key=value, skip
379
+ if (arg.startsWith("--")) {
380
+ // If next arg is the value (--key value), we'll handle that in parseParameters
381
+ // but we need to skip it here
382
+ const withoutPrefix = arg.slice(2);
383
+ if (!withoutPrefix.includes("=")) {
384
+ // The next non-flag arg would be the value — but we can't know that here
385
+ // without lookahead. For safety, just skip flags.
386
+ }
387
+ }
388
+ continue;
389
+ }
390
+ segments.push(arg);
391
+ }
392
+ return segments;
393
+ }
394
+ /**
395
+ * Resolve recipe path using the PathResolver with kit/cookbook discovery
396
+ */
397
+ async resolveRecipePath(segments, cwd) {
398
+ if (segments.length === 0)
399
+ return null;
400
+ // cwd is already resolved by resolveEffectiveCwd (hyper.config dir or monorepo root)
401
+ const projectRoot = cwd;
402
+ // Discover kits from project root
403
+ const kitSearchDirs = getDefaultKitSearchDirs(projectRoot);
404
+ // Also add configured search directories
405
+ const configDirs = this.hypergenConfig?.discovery?.directories || [];
406
+ const allSearchDirs = [
407
+ ...configDirs.map((d) => path.resolve(cwd, d)),
408
+ path.resolve(cwd, ".hypergen/cookbooks"),
409
+ path.resolve(cwd, "cookbooks"),
410
+ ];
411
+ const kits = await discoverKits(kitSearchDirs);
412
+ const resolver = new PathResolver(kits, allSearchDirs, cwd);
413
+ return resolver.resolve(segments);
414
+ }
415
+ /**
416
+ * Map positional args (resolved.remaining) to recipe variables by position.
417
+ */
418
+ async mapPositionalArgs(resolved) {
419
+ if (resolved.remaining.length === 0)
420
+ return {};
421
+ if (resolved.type !== "recipe")
422
+ return {};
423
+ try {
424
+ // Load the recipe to get variable definitions
425
+ const loadResult = await this.recipeEngine.loadRecipe({
426
+ type: "file",
427
+ path: resolved.fullPath,
428
+ });
429
+ const variables = loadResult.recipe.variables;
430
+ if (!variables)
431
+ return {};
432
+ // Find variables with `position` field, sorted by position
433
+ const positionalVars = [];
434
+ for (const [name, config] of Object.entries(variables)) {
435
+ if (config.position !== undefined) {
436
+ positionalVars.push({ name, position: config.position, config });
437
+ }
438
+ }
439
+ positionalVars.sort((a, b) => a.position - b.position);
440
+ // Map remaining segments to positional variables
441
+ const mapped = {};
442
+ for (let i = 0; i < Math.min(resolved.remaining.length, positionalVars.length); i++) {
443
+ mapped[positionalVars[i].name] = resolved.remaining[i];
444
+ }
445
+ return mapped;
446
+ }
447
+ catch {
448
+ // If we can't load the recipe, return empty — error will surface during execution
449
+ return {};
450
+ }
451
+ }
452
+ /**
453
+ * Parse named parameters from argv (--key=value or --key value)
454
+ */
455
+ parseParameters(argv) {
456
+ const params = {};
457
+ for (let i = 0; i < argv.length; i++) {
458
+ const arg = argv[i];
459
+ if (arg.startsWith("--")) {
460
+ const eqIndex = arg.indexOf("=");
461
+ if (eqIndex > 0) {
462
+ // --key=value format
463
+ const key = arg.slice(2, eqIndex);
464
+ const value = arg.slice(eqIndex + 1);
465
+ params[key] = coerceValue(value);
466
+ }
467
+ else if (i + 1 < argv.length && !argv[i + 1].startsWith("--")) {
468
+ // --key value format
469
+ const key = arg.slice(2);
470
+ params[key] = coerceValue(argv[i + 1]);
471
+ i++; // skip next
472
+ }
473
+ }
474
+ }
475
+ return params;
476
+ }
477
+ }
478
+ //# sourceMappingURL=gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen.js","sourceRoot":"","sources":["../../src/commands/gen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Recipe Info command - Show recipe information
3
+ */
4
+ import { BaseCommand } from "#lib/base-command";
5
+ export default class RecipeInfo extends BaseCommand<typeof RecipeInfo> {
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ };
13
+ static args: {
14
+ recipe: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/commands/recipe/info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW,CAAC,OAAO,UAAU,CAAC;IACrE,OAAgB,WAAW,SAAsC;IAEjE,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;;MAEnB;IAEF,OAAgB,IAAI;;MAKlB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkE1B"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Recipe Info command - Show recipe information
3
+ */
4
+ import { Args } from "@oclif/core";
5
+ import { BaseCommand } from "#lib/base-command";
6
+ import { outputFlags } from "#lib/flags";
7
+ import { loadRecipe } from "#recipe-engine/recipe-engine";
8
+ export default class RecipeInfo extends BaseCommand {
9
+ static description = "Show detailed recipe information";
10
+ static examples = [
11
+ "<%= config.bin %> <%= command.id %> my-recipe.yml",
12
+ "<%= config.bin %> <%= command.id %> .hyper/kits/component.yml --json",
13
+ ];
14
+ static flags = {
15
+ ...outputFlags,
16
+ };
17
+ static args = {
18
+ recipe: Args.string({
19
+ description: "Path to recipe file (.yml or .yaml)",
20
+ required: true,
21
+ }),
22
+ };
23
+ async run() {
24
+ const { args, flags } = await this.parse(RecipeInfo);
25
+ const recipePath = args.recipe;
26
+ try {
27
+ const result = await loadRecipe(recipePath);
28
+ const recipe = result.recipe;
29
+ if (flags.json) {
30
+ this.log(JSON.stringify(recipe, null, 2));
31
+ return;
32
+ }
33
+ this.log(`Recipe: ${recipe.name}`);
34
+ this.log(`Version: ${recipe.version || "unversioned"}`);
35
+ if (recipe.description) {
36
+ this.log(`Description: ${recipe.description}`);
37
+ }
38
+ // Variables
39
+ const variables = Object.entries(recipe.variables || {});
40
+ if (variables.length > 0) {
41
+ this.log("");
42
+ this.log(`Variables (${variables.length}):`);
43
+ for (const [name, varConfig] of variables) {
44
+ let line = ` - ${name}`;
45
+ if (typeof varConfig === "object" && varConfig !== null) {
46
+ const config = varConfig;
47
+ if (config.type)
48
+ line += ` (${config.type})`;
49
+ if (config.required)
50
+ line += " *required*";
51
+ if (config.default !== undefined)
52
+ line += ` [default: ${config.default}]`;
53
+ if (config.description)
54
+ line += ` - ${config.description}`;
55
+ }
56
+ this.log(line);
57
+ }
58
+ }
59
+ // Steps
60
+ if (recipe.steps?.length) {
61
+ this.log("");
62
+ this.log(`Steps (${recipe.steps.length}):`);
63
+ for (let i = 0; i < recipe.steps.length; i++) {
64
+ const step = recipe.steps[i];
65
+ let line = ` ${i + 1}. ${step.name || `Step ${i + 1}`}`;
66
+ line += ` [${step.tool}]`;
67
+ // Check for condition property (may exist on some step types)
68
+ const stepWithCondition = step;
69
+ if (stepWithCondition.condition)
70
+ line += " (conditional)";
71
+ this.log(line);
72
+ }
73
+ }
74
+ // Dependencies
75
+ if (recipe.dependencies?.length) {
76
+ this.log("");
77
+ this.log(`Dependencies (${recipe.dependencies.length}):`);
78
+ for (const dep of recipe.dependencies) {
79
+ this.log(` - ${dep}`);
80
+ }
81
+ }
82
+ }
83
+ catch (error) {
84
+ const message = error instanceof Error ? error.message : String(error);
85
+ this.error(`Failed to read recipe: ${message}`);
86
+ }
87
+ }
88
+ }
89
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/recipe/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Recipe List command - List available recipes from all discovered kits
3
+ */
4
+ import { BaseCommand } from "#lib/base-command";
5
+ export default class RecipeList extends BaseCommand<typeof RecipeList> {
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ kit: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ cookbook: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ };
15
+ static args: {
16
+ kit: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
17
+ };
18
+ run(): Promise<void>;
19
+ /**
20
+ * Quick parse a recipe file for display purposes
21
+ */
22
+ private quickParseRecipe;
23
+ /**
24
+ * Get recipe directories by scanning for recipe.yml files
25
+ */
26
+ private getRecipeDirs;
27
+ private displayRecipes;
28
+ }
29
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/recipe/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAahD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW,CAAC,OAAO,UAAU,CAAC;IACrE,OAAgB,WAAW,SAAqD;IAEhF,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;;MAUnB;IAEF,OAAgB,IAAI;;MAKlB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAwH1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,cAAc;CA8CtB"}