@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,149 @@
1
+ /**
2
+ * Shell Tool Implementation for Recipe Step System
3
+ *
4
+ * This tool executes shell commands as part of the recipe execution pipeline.
5
+ * It integrates with the existing shell operations in src/ops/shell.ts.
6
+ */
7
+ import { renderTemplate } from "#template-engines/jig-engine";
8
+ import { Tool } from "./base.js";
9
+ export class ShellTool extends Tool {
10
+ constructor(name = "shell-tool", options = {}) {
11
+ super("shell", name, options);
12
+ }
13
+ async onValidate(step, context) {
14
+ const errors = [];
15
+ const warnings = [];
16
+ const suggestions = [];
17
+ if (!step.command) {
18
+ errors.push("Shell command is required");
19
+ }
20
+ if (step.cwd && typeof step.cwd !== "string") {
21
+ errors.push("Working directory (cwd) must be a string");
22
+ }
23
+ return {
24
+ isValid: errors.length === 0,
25
+ errors,
26
+ warnings,
27
+ suggestions,
28
+ estimatedExecutionTime: 1000,
29
+ resourceRequirements: {
30
+ memory: 10 * 1024 * 1024,
31
+ disk: 0,
32
+ network: true, // Optimistically assume network might be used
33
+ processes: 1,
34
+ },
35
+ };
36
+ }
37
+ async onExecute(step, context, options) {
38
+ const startTime = new Date();
39
+ this.debug("Executing shell command: %s", step.command);
40
+ try {
41
+ // Render command through Jig to support @if/@elseif/@end tags and {{ variable }} interpolation
42
+ const renderContext = this.buildRenderContext(step, context);
43
+ const command = await renderTemplate(step.command, renderContext);
44
+ const cwd = step.cwd ? await renderTemplate(step.cwd, renderContext) : context.projectRoot;
45
+ // shell() returns a Promise<ActionResult> (which is { status: string })
46
+ // but also executes the command. The current shell op implementation seems to be
47
+ // specific to the legacy action system. We might need to adapt it or use simple exec.
48
+ // However, for now let's use it as requested.
49
+ // NOTE: The current ops/shell.ts implementation is tied to legacy ops.
50
+ // It returns a function runner format. Since we want standard behavior, we might
51
+ // rely on node's child_process directly if ops/shell is too specific, but let's try to reuse.
52
+ // Wait, looking at ops/shell.ts, it uses `exec` from context.
53
+ // We need to provide that context.
54
+ // For now, let's implement a direct execution to be safe and avoid legacy baggage,
55
+ // enabling full control over the step result.
56
+ const { exec } = await import("node:child_process");
57
+ const { promisify } = await import("node:util");
58
+ const execAsync = promisify(exec);
59
+ // Strip CLAUDECODE env var to prevent "nested session" errors when
60
+ // running inside Claude Code (the env var makes child processes think
61
+ // they're inside a Claude session and refuse to run).
62
+ const { CLAUDECODE, ...cleanEnv } = process.env;
63
+ const { stdout, stderr } = await execAsync(command, {
64
+ cwd,
65
+ env: { ...cleanEnv, ...step.env },
66
+ });
67
+ const endTime = new Date();
68
+ const duration = endTime.getTime() - startTime.getTime();
69
+ return {
70
+ status: "completed",
71
+ stepName: step.name,
72
+ toolType: "shell",
73
+ startTime,
74
+ endTime,
75
+ duration,
76
+ retryCount: 0,
77
+ dependenciesSatisfied: true,
78
+ toolResult: {
79
+ exitCode: 0,
80
+ stdout: stdout.toString(),
81
+ stderr: stderr.toString(),
82
+ },
83
+ output: {
84
+ stdout: stdout.toString(),
85
+ },
86
+ };
87
+ }
88
+ catch (error) {
89
+ const endTime = new Date();
90
+ const duration = endTime.getTime() - startTime.getTime();
91
+ return {
92
+ status: "failed",
93
+ stepName: step.name,
94
+ toolType: "shell",
95
+ startTime,
96
+ endTime,
97
+ duration,
98
+ retryCount: 0,
99
+ dependenciesSatisfied: true,
100
+ error: {
101
+ message: error.message,
102
+ code: "SHELL_EXECUTION_ERROR",
103
+ cause: error,
104
+ },
105
+ };
106
+ }
107
+ }
108
+ /**
109
+ * Build render context by merging step and recipe variables.
110
+ * This matches the pattern used in template-tool.ts for consistency.
111
+ */
112
+ buildRenderContext(step, context) {
113
+ // Merge variables: recipe vars < context vars < step vars
114
+ const mergedVars = {
115
+ ...context.recipeVariables,
116
+ ...context.variables,
117
+ ...step.variables,
118
+ };
119
+ return {
120
+ ...mergedVars,
121
+ // Recipe-specific context
122
+ recipe: context.recipe,
123
+ step: { name: step.name, description: step.description },
124
+ // Utility functions
125
+ utils: context.utils,
126
+ // Step results for dependency access
127
+ stepResults: context.stepResults ? Object.fromEntries(context.stepResults) : {},
128
+ };
129
+ }
130
+ }
131
+ export class ShellToolFactory {
132
+ create(name = "shell-tool", options = {}) {
133
+ return new ShellTool(name, options);
134
+ }
135
+ getToolType() {
136
+ return "shell";
137
+ }
138
+ validateConfig(config) {
139
+ // Shell tool setup config is usually empty, but we can validate options if any
140
+ return {
141
+ isValid: true,
142
+ errors: [],
143
+ warnings: [],
144
+ suggestions: [],
145
+ };
146
+ }
147
+ }
148
+ export const shellToolFactory = new ShellToolFactory();
149
+ //# sourceMappingURL=shell-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-tool.js","sourceRoot":"","sources":["../../../src/recipe-engine/tools/shell-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Template Tool Implementation for Recipe Step System
3
+ *
4
+ * This tool processes template files using Hypergen's existing template engines,
5
+ * handles frontmatter processing, and generates files to the filesystem.
6
+ * It integrates seamlessly with the Jig template engine while supporting
7
+ * all existing template features like composition and variable substitution.
8
+ */
9
+ import { type StepContext, type StepExecutionOptions, type StepResult, type TemplateStep } from "#recipe-engine/types";
10
+ import { Tool, type ToolValidationResult } from "./base.js";
11
+ /**
12
+ * Template Tool for processing template files in the Recipe Step System
13
+ *
14
+ * Features:
15
+ * - Integration with the Jig template engine
16
+ * - Frontmatter processing (to:, skip_if:, inject:, unless_exists:, force:)
17
+ * - Template discovery and resolution
18
+ * - Variable substitution and context management
19
+ * - File generation with path resolution
20
+ * - Template composition support
21
+ * - Comprehensive error handling and validation
22
+ */
23
+ export declare class TemplateTool extends Tool<TemplateStep> {
24
+ private templateEnginesInitialized;
25
+ private templateCache;
26
+ constructor(name?: string, options?: Record<string, any>);
27
+ /**
28
+ * Initialize template engines and prepare tool for execution
29
+ */
30
+ protected onInitialize(): Promise<void>;
31
+ /**
32
+ * Validate template step configuration
33
+ */
34
+ protected onValidate(step: TemplateStep, context: StepContext): Promise<ToolValidationResult>;
35
+ /**
36
+ * Execute the template tool
37
+ */
38
+ protected onExecute(step: TemplateStep, context: StepContext, options?: StepExecutionOptions): Promise<StepResult>;
39
+ /**
40
+ * Tool-specific cleanup logic
41
+ */
42
+ protected onCleanup(): Promise<void>;
43
+ /**
44
+ * Resolve template identifier to file path and content
45
+ */
46
+ private resolveTemplate;
47
+ /**
48
+ * Process template composition (includes, extends)
49
+ */
50
+ private processTemplateComposition;
51
+ /**
52
+ * Render a template file with frontmatter processing
53
+ */
54
+ private renderTemplateFile;
55
+ /**
56
+ * Render a template string with the appropriate engine
57
+ */
58
+ private renderTemplate;
59
+ /**
60
+ * Build render context by merging step and recipe variables.
61
+ *
62
+ * Helpers are registered as Jig globals (not spread into context),
63
+ * so the context only contains data: variables, step results, and utilities.
64
+ */
65
+ private buildRenderContext;
66
+ /**
67
+ * Check if file should be skipped based on attributes
68
+ */
69
+ private shouldSkipFile;
70
+ /**
71
+ * Get skip reason for debugging
72
+ */
73
+ private getSkipReason;
74
+ /**
75
+ * Generate file using existing file operations
76
+ */
77
+ private generateFile;
78
+ }
79
+ /**
80
+ * Template Tool Factory
81
+ */
82
+ export declare class TemplateToolFactory {
83
+ create(name?: string, options?: Record<string, any>): TemplateTool;
84
+ getToolType(): "template";
85
+ validateConfig(config: Record<string, any>): ToolValidationResult;
86
+ }
87
+ export declare const templateToolFactory: TemplateToolFactory;
88
+ //# sourceMappingURL=template-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-tool.d.ts","sourceRoot":"","sources":["../../../src/recipe-engine/tools/template-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EAEf,KAAK,YAAY,EAEjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,IAAI,EAAE,KAAK,oBAAoB,EAAE,MAAM,WAAW,CAAC;AA+C5D;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,SAAQ,IAAI,CAAC,YAAY,CAAC;IACnD,OAAO,CAAC,0BAA0B,CAAS;IAC3C,OAAO,CAAC,aAAa,CAAyC;gBAElD,IAAI,SAAkB,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM;IAIrE;;OAEG;cACsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BtD;;OAEG;cACa,UAAU,CACzB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,WAAW,GAClB,OAAO,CAAC,oBAAoB,CAAC;IA+FhC;;OAEG;cACa,SAAS,CACxB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC;IAmKtB;;OAEG;cACsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnD;;OAEG;YACW,eAAe;IAkF7B;;OAEG;YACW,0BAA0B;IA6BxC;;OAEG;YACW,kBAAkB;IAiEhC;;OAEG;YACW,cAAc;IAqB5B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;YACW,YAAY;CAwE1B;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC/B,MAAM,CAAC,IAAI,SAAkB,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,YAAY;IAI/E,WAAW,IAAI,UAAU;IAIzB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,oBAAoB;CAwBjE;AAGD,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}