@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,217 @@
1
+ /**
2
+ * Show detailed information about a cookbook
3
+ */
4
+ import path from "node:path";
5
+ import { c, s } from "@hypercli/ui/shortcuts";
6
+ import { Args, Flags } from "@oclif/core";
7
+ import { BaseCommand } from "#lib/base-command";
8
+ export default class CookbookInfo extends BaseCommand {
9
+ static description = "Show detailed information about a cookbook";
10
+ static examples = [
11
+ "<%= config.bin %> cookbook info starlight",
12
+ "<%= config.bin %> cookbook info @kit/starlight/docs --json",
13
+ ];
14
+ static flags = {
15
+ ...BaseCommand.baseFlags,
16
+ json: Flags.boolean({
17
+ description: "Output as JSON",
18
+ default: false,
19
+ }),
20
+ };
21
+ static args = {
22
+ cookbook: Args.string({
23
+ description: "Cookbook name or path",
24
+ required: true,
25
+ }),
26
+ };
27
+ async run() {
28
+ const { args, flags } = await this.parse(CookbookInfo);
29
+ try {
30
+ this.log(s.hint(`Searching for cookbook: ${args.cookbook}...`));
31
+ // 1. Discover all kits
32
+ const generators = await this.discovery.discoverAll();
33
+ // 2. Find the cookbook in the discovered kits
34
+ let foundCookbook;
35
+ // Helper to match cookbook name
36
+ const targetCookbook = args.cookbook;
37
+ for (const generator of generators) {
38
+ // We only care about kits (generators with cookbooks)
39
+ if (!generator.cookbooks || generator.cookbooks.length === 0)
40
+ continue;
41
+ // Check if this kit contains the requested cookbook
42
+ if (generator.cookbooks.includes(targetCookbook)) {
43
+ // Found it! Now we need the path.
44
+ // We need to re-parse the kit to get the cookbook globs and find the path
45
+ // (GeneratorDiscovery only gives us names)
46
+ // Import from @hypercli/core
47
+ const { parseKitFile, discoverCookbooksInKit } = await import("@hypercli/core");
48
+ const kitYmlPath = path.join(generator.path, "kit.yml");
49
+ const parsedKit = await parseKitFile(kitYmlPath);
50
+ if (parsedKit.isValid && parsedKit.config.cookbooks) {
51
+ const cookbooks = await discoverCookbooksInKit(generator.path, parsedKit.config.cookbooks);
52
+ const cookbook = cookbooks.get(targetCookbook);
53
+ if (cookbook) {
54
+ foundCookbook = {
55
+ kitName: generator.name,
56
+ kitPath: generator.path,
57
+ cookbookName: cookbook.config.name,
58
+ cookbookPath: cookbook.dirPath,
59
+ config: cookbook.config,
60
+ };
61
+ break; // Stop searching once found
62
+ }
63
+ }
64
+ }
65
+ }
66
+ if (!foundCookbook) {
67
+ this.log(s.error(`Cookbook not found: ${args.cookbook}`));
68
+ await this.suggestAvailableCookbooks(generators);
69
+ this.exit(1);
70
+ }
71
+ // 3. Discover recipes in the cookbook
72
+ const { discoverRecipesInCookbook } = await import("@hypercli/core");
73
+ // Default recipe globs if not specified in cookbook config
74
+ const recipeGlobs = foundCookbook.config.recipes || ["./*/recipe.yml"];
75
+ const recipeMap = await discoverRecipesInCookbook(foundCookbook.cookbookPath, recipeGlobs);
76
+ const recipePaths = Array.from(recipeMap.values());
77
+ // 4. Load recipe details
78
+ const recipesWithDetails = [];
79
+ for (const recipePath of recipePaths) {
80
+ try {
81
+ const { recipe } = await this.recipeEngine.loadRecipe(recipePath);
82
+ recipesWithDetails.push(recipe);
83
+ }
84
+ catch (e) {
85
+ // Log warning but continue
86
+ this.warn(`Failed to load recipe at ${recipePath}: ${e instanceof Error ? e.message : String(e)}`);
87
+ }
88
+ }
89
+ // Sort recipes by name
90
+ recipesWithDetails.sort((a, b) => a.name.localeCompare(b.name));
91
+ if (flags.json) {
92
+ const output = {
93
+ name: foundCookbook.cookbookName,
94
+ kit: foundCookbook.kitName,
95
+ location: foundCookbook.cookbookPath,
96
+ description: foundCookbook.config.description,
97
+ recipes: recipesWithDetails,
98
+ };
99
+ this.log(JSON.stringify(output, null, 2));
100
+ return;
101
+ }
102
+ // 5. Display Information
103
+ this.log("");
104
+ this.log(s.title("Cookbook", foundCookbook.cookbookName));
105
+ this.log(s.hr());
106
+ this.log(s.keyValue("Location", s.path(foundCookbook.cookbookPath), 10));
107
+ this.log(s.keyValue("Kit", c.kit(foundCookbook.kitName), 10));
108
+ if (foundCookbook.config.description) {
109
+ this.log(s.keyValue("Description", foundCookbook.config.description, 10));
110
+ }
111
+ this.log("");
112
+ this.log(s.header("Recipes", recipesWithDetails.length));
113
+ if (recipesWithDetails.length === 0) {
114
+ this.log(s.description("(No recipes found)", 2));
115
+ }
116
+ else {
117
+ for (const recipe of recipesWithDetails) {
118
+ this.log("");
119
+ this.log(s.listItem(c.recipe(recipe.name)));
120
+ if (recipe.description) {
121
+ this.log(s.description(recipe.description));
122
+ }
123
+ if (recipe.variables && Object.keys(recipe.variables).length > 0) {
124
+ this.log(s.indent(c.helper("Variables:"), 4));
125
+ for (const [key, variable] of Object.entries(recipe.variables)) {
126
+ const varAny = variable;
127
+ let varLine = c.property(` ${key}`);
128
+ if (varAny.type) {
129
+ varLine += c.subtle(` (${varAny.type})`);
130
+ }
131
+ if (varAny.required) {
132
+ varLine += c.required(" *required*");
133
+ }
134
+ if (varAny.default !== undefined) {
135
+ varLine += c.default(varAny.default);
136
+ }
137
+ this.log(s.indent(varLine, 4));
138
+ if (varAny.description) {
139
+ this.log(s.indent(c.text(varAny.description), 6));
140
+ }
141
+ // Helper to check for enum properties safely
142
+ if (varAny.options && Array.isArray(varAny.options)) {
143
+ this.log(s.indent(c.enum(`Enum: ${varAny.options.map((o) => (typeof o === "object" ? o.value : o)).join(", ")}`), 6));
144
+ }
145
+ if (varAny.suggestion) {
146
+ this.log(s.indent(c.subtle(`Suggestion: ${varAny.suggestion}`), 6));
147
+ }
148
+ }
149
+ }
150
+ }
151
+ }
152
+ this.log("");
153
+ }
154
+ catch (error) {
155
+ this.error(`Failed to get cookbook info: ${error instanceof Error ? error.message : String(error)}`);
156
+ }
157
+ }
158
+ /**
159
+ * Display available cookbooks grouped by kit when a cookbook is not found
160
+ */
161
+ async suggestAvailableCookbooks(generators) {
162
+ // Collect all cookbooks grouped by kit
163
+ const cookbooksByKit = new Map();
164
+ for (const generator of generators) {
165
+ if (!generator.cookbooks || generator.cookbooks.length === 0)
166
+ continue;
167
+ const kitCookbooks = [];
168
+ // Try to get cookbook details
169
+ try {
170
+ const { parseKitFile, discoverCookbooksInKit } = await import("@hypercli/core");
171
+ const kitYmlPath = path.join(generator.path, "kit.yml");
172
+ const parsedKit = await parseKitFile(kitYmlPath);
173
+ if (parsedKit.isValid && parsedKit.config.cookbooks) {
174
+ const cookbooks = await discoverCookbooksInKit(generator.path, parsedKit.config.cookbooks);
175
+ for (const [name, cookbook] of cookbooks) {
176
+ kitCookbooks.push({
177
+ name,
178
+ description: cookbook.config.description,
179
+ });
180
+ }
181
+ }
182
+ }
183
+ catch {
184
+ // Fallback to just names if we can't load details
185
+ for (const cookbookName of generator.cookbooks) {
186
+ kitCookbooks.push({ name: cookbookName });
187
+ }
188
+ }
189
+ if (kitCookbooks.length > 0) {
190
+ cookbooksByKit.set(generator.name, kitCookbooks);
191
+ }
192
+ }
193
+ if (cookbooksByKit.size === 0) {
194
+ this.log(c.warning("No cookbooks found in any installed kits."));
195
+ this.log(s.hint("\nInstall a kit with: hypergen kit install <kit>"));
196
+ return;
197
+ }
198
+ this.log(c.title("Available cookbooks:"));
199
+ this.log(s.hr());
200
+ this.log("");
201
+ for (const [kitName, cookbooks] of cookbooksByKit) {
202
+ this.log(c.heading(`${kitName}:`));
203
+ for (const cookbook of cookbooks) {
204
+ const name = c.cookbook(` ${cookbook.name}`);
205
+ if (cookbook.description) {
206
+ this.log(`${name} ${c.subtle(`— ${cookbook.description}`)}`);
207
+ }
208
+ else {
209
+ this.log(name);
210
+ }
211
+ }
212
+ this.log("");
213
+ }
214
+ this.log(s.hint("Run `hypergen cookbook info <cookbook>` for more details."));
215
+ }
216
+ }
217
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/cookbook/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * List cookbooks in a kit or all installed cookbooks
3
+ */
4
+ import { BaseCommand } from "#lib/base-command";
5
+ export default class CookbookList extends BaseCommand<typeof CookbookList> {
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ kit: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ cwd: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ };
14
+ static args: {
15
+ kit: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
16
+ };
17
+ run(): Promise<void>;
18
+ private displayCookbooks;
19
+ }
20
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/cookbook/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAWhD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW,CAAC,OAAO,YAAY,CAAC;IACzE,OAAgB,WAAW,SAAwD;IAEnF,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;MAUnB;IAEF,OAAgB,IAAI;;MAKlB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA6E1B,OAAO,CAAC,gBAAgB;CAgDxB"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * List cookbooks in a kit or all installed cookbooks
3
+ */
4
+ import { discoverCookbooksInKit, discoverRecipesInCookbook } from "@hypercli/core";
5
+ import { c, s } from "@hypercli/ui/shortcuts";
6
+ import { Args, Flags } from "@oclif/core";
7
+ import { BaseCommand } from "#lib/base-command";
8
+ export default class CookbookList extends BaseCommand {
9
+ static description = "List cookbooks in a kit or all installed cookbooks";
10
+ static examples = [
11
+ "<%= config.bin %> cookbook list",
12
+ "<%= config.bin %> cookbook list @kit/starlight",
13
+ "<%= config.bin %> cookbook list --json",
14
+ ];
15
+ static flags = {
16
+ ...BaseCommand.baseFlags,
17
+ json: Flags.boolean({
18
+ description: "Output as JSON",
19
+ default: false,
20
+ }),
21
+ kit: Flags.string({
22
+ char: "k",
23
+ description: "Filter by kit name",
24
+ }),
25
+ };
26
+ static args = {
27
+ kit: Args.string({
28
+ description: "Kit to list cookbooks from (optional, lists all if omitted)",
29
+ required: false,
30
+ }),
31
+ };
32
+ async run() {
33
+ const { args, flags } = await this.parse(CookbookList);
34
+ try {
35
+ // Discover all kits
36
+ const kits = await this.discovery.discoverAll();
37
+ // Filter by kit if specified (via arg or flag)
38
+ const kitFilter = args.kit || flags.kit;
39
+ const targetKits = kitFilter
40
+ ? kits.filter((k) => k.name === kitFilter ||
41
+ k.name.endsWith(`/${kitFilter}`) ||
42
+ k.name === `@kit/${kitFilter}`)
43
+ : kits;
44
+ if (targetKits.length === 0 && kitFilter) {
45
+ this.error(`Kit not found: ${kitFilter}`);
46
+ }
47
+ // Collect cookbooks from all target kits
48
+ const cookbooks = [];
49
+ for (const kit of targetKits) {
50
+ if (!kit.cookbooks || kit.cookbooks.length === 0) {
51
+ continue;
52
+ }
53
+ const kitPath = kit.path;
54
+ const cookbookGlobs = ["./cookbooks/*/cookbook.yml"]; // Default pattern
55
+ try {
56
+ const discoveredCookbooks = await discoverCookbooksInKit(kitPath, cookbookGlobs);
57
+ for (const [cookbookName, cookbook] of discoveredCookbooks) {
58
+ // Discover actual recipe names from the cookbook directory
59
+ const recipeGlobs = cookbook.config.recipes ?? ["./*/recipe.yml"];
60
+ let recipeNames;
61
+ try {
62
+ const discoveredRecipes = await discoverRecipesInCookbook(cookbook.dirPath, recipeGlobs);
63
+ if (discoveredRecipes.size > 0) {
64
+ recipeNames = Array.from(discoveredRecipes.keys()).sort();
65
+ }
66
+ }
67
+ catch {
68
+ // If recipe discovery fails, omit the recipes list
69
+ }
70
+ cookbooks.push({
71
+ name: cookbookName,
72
+ kit: kit.name,
73
+ description: cookbook.config.description,
74
+ version: cookbook.config.version,
75
+ recipes: recipeNames,
76
+ path: cookbook.dirPath,
77
+ });
78
+ }
79
+ }
80
+ catch (error) {
81
+ // Skip kits that fail to parse
82
+ this.warn(`Failed to discover cookbooks in kit ${kit.name}: ${error}`);
83
+ }
84
+ }
85
+ this.displayCookbooks(cookbooks, flags);
86
+ }
87
+ catch (error) {
88
+ this.error(`Failed to list cookbooks: ${error instanceof Error ? error.message : String(error)}`);
89
+ }
90
+ this.exit(0);
91
+ }
92
+ displayCookbooks(cookbooks, flags) {
93
+ if (flags.json) {
94
+ this.log(JSON.stringify(cookbooks, null, 2));
95
+ return;
96
+ }
97
+ if (cookbooks.length === 0) {
98
+ this.log(c.warning("No cookbooks found."));
99
+ this.log(s.hint("\nInstall a kit with: hypergen kit install <kit>"));
100
+ return;
101
+ }
102
+ // Group by kit for display
103
+ const byKit = new Map();
104
+ for (const cookbook of cookbooks) {
105
+ const kitCookbooks = byKit.get(cookbook.kit) || [];
106
+ kitCookbooks.push(cookbook);
107
+ byKit.set(cookbook.kit, kitCookbooks);
108
+ }
109
+ this.log(s.header("Cookbooks", cookbooks.length));
110
+ this.log("");
111
+ for (const [kitName, kitCookbooks] of byKit) {
112
+ this.log(c.kit(`${kitName}:`));
113
+ for (const cookbook of kitCookbooks) {
114
+ const versionStr = cookbook.version ? ` ${s.version(cookbook.version)}` : "";
115
+ this.log(s.listItem(c.cookbook(cookbook.name) + versionStr));
116
+ const bodyLines = [];
117
+ if (cookbook.description) {
118
+ bodyLines.push(s.description(cookbook.description.trim()));
119
+ }
120
+ if (cookbook.recipes && cookbook.recipes.length > 0) {
121
+ const recipeList = cookbook.recipes.map((r) => c.recipe(r)).join(c.muted(", "));
122
+ if (bodyLines.length > 0)
123
+ bodyLines.push("");
124
+ bodyLines.push(s.description("Recipes: ") + recipeList);
125
+ }
126
+ if (bodyLines.length > 0) {
127
+ this.log(s.listItemBody(...bodyLines));
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
133
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/cookbook/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Main command for executing recipes
3
+ * Usage: hyper gen <recipe> [options]
4
+ * Or shorthand: hyper <kit> <recipe-path>
5
+ */
6
+ import { BaseCommand } from "#lib/base-command";
7
+ export default class Gen extends BaseCommand<typeof Gen> {
8
+ static description: string;
9
+ static examples: string[];
10
+ static flags: {
11
+ dry: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ answers: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ "prompt-template": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ ask: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ "no-defaults": import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
+ cwd: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
19
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
+ };
21
+ static args: {
22
+ recipe: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
23
+ };
24
+ static strict: boolean;
25
+ /**
26
+ * Names of all flags that are explicitly declared on this command (and its base).
27
+ * Used to strip unknown --key=value recipe variables from argv before oclif
28
+ * parses it — oclif v4 throws NonExistentFlagsError on unknown flags even when
29
+ * `strict = false` (strict only affects extra positional args, not flags).
30
+ */
31
+ private static get knownFlagNames();
32
+ /**
33
+ * Split argv into two arrays:
34
+ * - safeArgv: only known flags + positional args (safe to pass to oclif)
35
+ * - fullArgv: the original argv (used by parseParameters / extractPathSegments)
36
+ */
37
+ private splitArgv;
38
+ run(): Promise<void>;
39
+ /**
40
+ * Execute a single recipe
41
+ */
42
+ private executeSingleRecipe;
43
+ /**
44
+ * Execute a group of recipes with dependency resolution
45
+ */
46
+ private executeGroup;
47
+ /**
48
+ * Extract non-flag path segments from argv.
49
+ * Everything before `--` and not starting with `-` is a path segment.
50
+ */
51
+ private extractPathSegments;
52
+ /**
53
+ * Resolve recipe path using the PathResolver with kit/cookbook discovery
54
+ */
55
+ private resolveRecipePath;
56
+ /**
57
+ * Map positional args (resolved.remaining) to recipe variables by position.
58
+ */
59
+ private mapPositionalArgs;
60
+ /**
61
+ * Parse named parameters from argv (--key=value or --key value)
62
+ */
63
+ private parseParameters;
64
+ }
65
+ //# sourceMappingURL=gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen.d.ts","sourceRoot":"","sources":["../../src/commands/gen.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW,CAAC,OAAO,GAAG,CAAC;IACvD,OAAgB,WAAW,SAAuC;IAElE,OAAgB,QAAQ,WAOtB;IAEF,OAAgB,KAAK;;;;;;;;;;MA+BnB;IAEF,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,MAAM,UAAS;IAE/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,KAAK,cAAc,GAYhC;IAED;;;;OAIG;IACH,OAAO,CAAC,SAAS;IA8CX,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA0E1B;;OAEG;YACW,mBAAmB;IAqKjC;;OAEG;YACW,YAAY;IA8D1B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;YACW,iBAAiB;IAuB/B;;OAEG;YACW,iBAAiB;IAyC/B;;OAEG;IACH,OAAO,CAAC,eAAe;CAqBvB"}