@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,300 @@
1
+ /**
2
+ * Action Parameter Resolver
3
+ *
4
+ * Handles parameter validation and resolution for action execution
5
+ */
6
+ import createDebug from "debug";
7
+ import { InteractivePrompter } from "#prompts/interactive-prompts";
8
+ import { ActionParameterError } from "./types.js";
9
+ const debug = createDebug("hyper:action:parameters");
10
+ export class ActionParameterResolver {
11
+ /**
12
+ * Resolve parameters without interactive prompts.
13
+ * Validates provided parameters and applies defaults.
14
+ * Throws an error if required parameters are missing.
15
+ */
16
+ async resolveParameters(metadata, provided = {}, options = {}) {
17
+ debug("Resolving parameters for action: %s", metadata.name);
18
+ const resolved = { ...provided };
19
+ if (!metadata.parameters || metadata.parameters.length === 0) {
20
+ debug("No parameters defined for action: %s", metadata.name);
21
+ return resolved;
22
+ }
23
+ // Step 1: Apply provided values and validate them
24
+ for (const param of metadata.parameters) {
25
+ if (resolved[param.name] !== undefined) {
26
+ this.validateParameterValue(param.name, resolved[param.name], param, resolved);
27
+ debug("Using provided value for %s: %o", param.name, resolved[param.name]);
28
+ }
29
+ }
30
+ // Step 2: Apply default values if useDefaults is true
31
+ if (options.useDefaults) {
32
+ for (const param of metadata.parameters) {
33
+ if (resolved[param.name] === undefined && param.default !== undefined) {
34
+ resolved[param.name] = param.default;
35
+ debug("Applied default value for %s: %o", param.name, param.default);
36
+ }
37
+ }
38
+ }
39
+ // Step 3: Final validation - ensure all required parameters have values
40
+ for (const param of metadata.parameters) {
41
+ if (resolved[param.name] === undefined && param.required) {
42
+ throw new ActionParameterError(`Required parameter '${param.name}' not provided and no default available`, param.name, undefined, param.type);
43
+ }
44
+ }
45
+ debug("Parameters resolved for %s: %o", metadata.name, Object.keys(resolved));
46
+ return resolved;
47
+ }
48
+ /**
49
+ * Resolve parameters with proper precedence and interactive prompts
50
+ *
51
+ * Resolution order:
52
+ * 1. Command line arguments (highest priority)
53
+ * 2. Default values (only if --defaults flag is used)
54
+ * 3. Interactive prompts (for any missing values)
55
+ */
56
+ async resolveParametersInteractively(metadata, provided = {}, options = {}) {
57
+ debug("Resolving parameters interactively for action: %s", metadata.name);
58
+ const resolved = { ...provided };
59
+ if (!metadata.parameters || metadata.parameters.length === 0) {
60
+ debug("No parameters defined for action: %s", metadata.name);
61
+ return resolved;
62
+ }
63
+ // Step 1: Apply provided values and validate them
64
+ for (const param of metadata.parameters) {
65
+ if (resolved[param.name] !== undefined) {
66
+ this.validateParameterValue(param.name, resolved[param.name], param, resolved);
67
+ debug("Using provided value for %s: %o", param.name, resolved[param.name]);
68
+ }
69
+ }
70
+ // Step 2: Apply default values if --defaults flag is used
71
+ if (options.useDefaults) {
72
+ for (const param of metadata.parameters) {
73
+ if (resolved[param.name] === undefined && param.default !== undefined) {
74
+ resolved[param.name] = param.default;
75
+ debug("Applied default value for %s: %o", param.name, param.default);
76
+ }
77
+ }
78
+ }
79
+ // Step 3: Identify parameters that still need values
80
+ const parametersNeedingValues = metadata.parameters.filter((param) => {
81
+ const hasValue = resolved[param.name] !== undefined;
82
+ const isRequired = param.required;
83
+ const isOptional = !param.required;
84
+ // We need a value if:
85
+ // - It's required and has no value
86
+ // - It's optional but has no value and we're not skipping optional
87
+ return !hasValue && (isRequired || (!options.skipOptional && isOptional));
88
+ });
89
+ // Step 4: Prompt for missing values
90
+ if (parametersNeedingValues.length > 0) {
91
+ // First check if we have any required parameters that still need values
92
+ const requiredParametersNeedingValues = parametersNeedingValues.filter((param) => param.required);
93
+ if (requiredParametersNeedingValues.length > 0) {
94
+ // In test mode, throw an error instead of prompting
95
+ if (process.env.NODE_ENV === "test") {
96
+ throw new ActionParameterError(`Required parameter '${requiredParametersNeedingValues[0].name}' not provided and no default available`, requiredParametersNeedingValues[0].name, undefined, requiredParametersNeedingValues[0].type);
97
+ }
98
+ // We need to prompt for required parameters
99
+ const templateVariables = {};
100
+ for (const param of parametersNeedingValues) {
101
+ templateVariables[param.name] = this.convertParameterToVariable(param);
102
+ }
103
+ const prompter = new InteractivePrompter();
104
+ const promptResult = await prompter.promptForParameters(templateVariables, resolved, {
105
+ interactive: true,
106
+ skipOptional: options.skipOptional || false,
107
+ timeout: options.timeout,
108
+ intro: options.intro || `🎯 Configure parameters for ${metadata.name}`,
109
+ outro: options.outro || "✅ Parameters configured!",
110
+ });
111
+ if (promptResult.cancelled) {
112
+ throw new ActionParameterError("Parameter configuration cancelled by user", "interactive", undefined, "string");
113
+ }
114
+ if (promptResult.errors.length > 0) {
115
+ throw new ActionParameterError(`Parameter validation failed: ${promptResult.errors.join(", ")}`, "validation", undefined, "string");
116
+ }
117
+ // Merge prompted values
118
+ Object.assign(resolved, promptResult.values);
119
+ }
120
+ else {
121
+ // Only optional parameters need values, and we might skip them
122
+ if (!options.skipOptional) {
123
+ // In test mode, skip optional prompts
124
+ if (process.env.NODE_ENV === "test") {
125
+ debug("Skipping optional parameter prompts in test mode");
126
+ return resolved;
127
+ }
128
+ const templateVariables = {};
129
+ for (const param of parametersNeedingValues) {
130
+ templateVariables[param.name] = this.convertParameterToVariable(param);
131
+ }
132
+ const prompter = new InteractivePrompter();
133
+ const promptResult = await prompter.promptForParameters(templateVariables, resolved, {
134
+ interactive: true,
135
+ skipOptional: false,
136
+ timeout: options.timeout,
137
+ intro: options.intro || `🎯 Configure parameters for ${metadata.name}`,
138
+ outro: options.outro || "✅ Parameters configured!",
139
+ });
140
+ if (!promptResult.cancelled && promptResult.errors.length === 0) {
141
+ Object.assign(resolved, promptResult.values);
142
+ }
143
+ }
144
+ }
145
+ }
146
+ // Step 5: Final validation - ensure all required parameters have values
147
+ for (const param of metadata.parameters) {
148
+ if (resolved[param.name] !== undefined) {
149
+ this.validateParameterValue(param.name, resolved[param.name], param, resolved);
150
+ }
151
+ else if (param.required) {
152
+ throw new ActionParameterError(`Required parameter '${param.name}' not provided and no default available`, param.name, undefined, param.type);
153
+ }
154
+ }
155
+ debug("Parameters resolved interactively for %s: %o", metadata.name, Object.keys(resolved));
156
+ return resolved;
157
+ }
158
+ /**
159
+ * Convert ActionParameter to TemplateVariable format
160
+ */
161
+ convertParameterToVariable(param) {
162
+ return {
163
+ type: param.type,
164
+ description: param.description,
165
+ required: param.required,
166
+ default: param.default,
167
+ values: param.values,
168
+ pattern: param.pattern,
169
+ min: param.min,
170
+ max: param.max,
171
+ validation: param.validation,
172
+ };
173
+ }
174
+ /**
175
+ * Validate a parameter value against its definition
176
+ */
177
+ validateParameterValue(name, value, param, allValues) {
178
+ const validation = this.validateParameterType(name, value, param, allValues);
179
+ if (!validation.valid) {
180
+ throw new ActionParameterError(`Parameter validation failed for '${name}': ${validation.message}`, name, value, param.type);
181
+ }
182
+ }
183
+ /**
184
+ * Validate parameter type and constraints
185
+ */
186
+ validateParameterType(name, value, param, allValues) {
187
+ // Type validation
188
+ switch (param.type) {
189
+ case "string":
190
+ return this.validateStringParameter(value, param);
191
+ case "boolean":
192
+ return this.validateBooleanParameter(value, param);
193
+ case "number":
194
+ return this.validateNumberParameter(value, param);
195
+ case "enum":
196
+ return this.validateEnumParameter(value, param);
197
+ case "array":
198
+ return this.validateArrayParameter(value, param);
199
+ case "object":
200
+ return this.validateObjectParameter(value, param);
201
+ case "file":
202
+ return this.validateFileParameter(value, param);
203
+ case "directory":
204
+ return this.validateDirectoryParameter(value, param);
205
+ default:
206
+ return {
207
+ valid: false,
208
+ message: `Unknown parameter type: ${param.type}`,
209
+ };
210
+ }
211
+ }
212
+ validateStringParameter(value, param) {
213
+ if (typeof value !== "string") {
214
+ return { valid: false, message: `Expected string, got ${typeof value}` };
215
+ }
216
+ // Pattern validation
217
+ if (param.pattern) {
218
+ const regex = new RegExp(param.pattern);
219
+ if (!regex.test(value)) {
220
+ return {
221
+ valid: false,
222
+ message: param.validation?.message || `Value does not match pattern: ${param.pattern}`,
223
+ };
224
+ }
225
+ }
226
+ return { valid: true };
227
+ }
228
+ validateBooleanParameter(value, param) {
229
+ if (typeof value !== "boolean") {
230
+ return { valid: false, message: `Expected boolean, got ${typeof value}` };
231
+ }
232
+ return { valid: true };
233
+ }
234
+ validateNumberParameter(value, param) {
235
+ if (typeof value !== "number" || Number.isNaN(value)) {
236
+ return { valid: false, message: `Expected number, got ${typeof value}` };
237
+ }
238
+ // Range validation
239
+ if (param.min !== undefined && value < param.min) {
240
+ return {
241
+ valid: false,
242
+ message: `Value ${value} is below minimum ${param.min}`,
243
+ };
244
+ }
245
+ if (param.max !== undefined && value > param.max) {
246
+ return {
247
+ valid: false,
248
+ message: `Value ${value} is above maximum ${param.max}`,
249
+ };
250
+ }
251
+ return { valid: true };
252
+ }
253
+ validateEnumParameter(value, param) {
254
+ if (!param.values || !Array.isArray(param.values)) {
255
+ return { valid: false, message: "Enum parameter missing values array" };
256
+ }
257
+ if (!param.values.includes(value)) {
258
+ return {
259
+ valid: false,
260
+ message: `Value '${value}' is not in allowed values: ${param.values.join(", ")}`,
261
+ };
262
+ }
263
+ return { valid: true };
264
+ }
265
+ validateArrayParameter(value, param) {
266
+ if (!Array.isArray(value)) {
267
+ return { valid: false, message: `Expected array, got ${typeof value}` };
268
+ }
269
+ return { valid: true };
270
+ }
271
+ validateObjectParameter(value, param) {
272
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
273
+ return { valid: false, message: `Expected object, got ${typeof value}` };
274
+ }
275
+ return { valid: true };
276
+ }
277
+ validateFileParameter(value, param) {
278
+ if (typeof value !== "string") {
279
+ return { valid: false, message: "File path must be a string" };
280
+ }
281
+ // Could add file existence validation here in the future
282
+ // For now, just validate it's a non-empty string
283
+ if (value.trim().length === 0) {
284
+ return { valid: false, message: "File path cannot be empty" };
285
+ }
286
+ return { valid: true };
287
+ }
288
+ validateDirectoryParameter(value, param) {
289
+ if (typeof value !== "string") {
290
+ return { valid: false, message: "Directory path must be a string" };
291
+ }
292
+ // Could add directory existence validation here in the future
293
+ // For now, just validate it's a non-empty string
294
+ if (value.trim().length === 0) {
295
+ return { valid: false, message: "Directory path cannot be empty" };
296
+ }
297
+ return { valid: true };
298
+ }
299
+ }
300
+ //# sourceMappingURL=parameter-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameter-resolver.js","sourceRoot":"","sources":["../../src/actions/parameter-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Action Registry
3
+ *
4
+ * Central registry for decorated actions with discovery and querying capabilities
5
+ */
6
+ import type { ActionFunction, ActionMetadata, ActionQueryOptions, DecoratedAction } from "./types.js";
7
+ export declare class ActionRegistry {
8
+ private static instance;
9
+ private actions;
10
+ private categoriesIndex;
11
+ private tagsIndex;
12
+ static getInstance(): ActionRegistry;
13
+ /**
14
+ * Register a decorated action
15
+ */
16
+ register(fn: ActionFunction, metadata: ActionMetadata): void;
17
+ /**
18
+ * Get a specific action by name
19
+ */
20
+ get(name: string): DecoratedAction | undefined;
21
+ /**
22
+ * Get all registered actions
23
+ */
24
+ getAll(): DecoratedAction[];
25
+ /**
26
+ * Get actions by category
27
+ */
28
+ getByCategory(category: string): DecoratedAction[];
29
+ /**
30
+ * Get actions by tags (OR operation - any matching tag)
31
+ */
32
+ getByTags(tags: string[]): DecoratedAction[];
33
+ /**
34
+ * Query actions with various filters
35
+ */
36
+ query(options?: ActionQueryOptions): DecoratedAction[];
37
+ /**
38
+ * Get all available categories
39
+ */
40
+ getCategories(): string[];
41
+ /**
42
+ * Get all available tags
43
+ */
44
+ getTags(): string[];
45
+ /**
46
+ * Get registry statistics
47
+ */
48
+ getStats(): {
49
+ totalActions: number;
50
+ categories: Record<string, number>;
51
+ tags: Record<string, number>;
52
+ };
53
+ /**
54
+ * Check if an action exists
55
+ */
56
+ has(name: string): boolean;
57
+ /**
58
+ * Remove an action from the registry
59
+ */
60
+ unregister(name: string): boolean;
61
+ /**
62
+ * Clear all registered actions
63
+ */
64
+ clear(): void;
65
+ /**
66
+ * Update search indexes for an action
67
+ */
68
+ private updateIndexes;
69
+ /**
70
+ * Remove action from search indexes
71
+ */
72
+ private removeFromIndexes;
73
+ /**
74
+ * Extract module path from function for better error reporting
75
+ */
76
+ private getModulePath;
77
+ }
78
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/actions/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACX,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,MAAM,YAAY,CAAC;AAIpB,qBAAa,cAAc;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,SAAS,CAAuC;IAExD,MAAM,CAAC,WAAW,IAAI,cAAc;IAQpC;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAuB5D;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI9C;;OAEG;IACH,MAAM,IAAI,eAAe,EAAE;IAI3B;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IAWlD;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE;IAe5C;;OAEG;IACH,KAAK,CAAC,OAAO,GAAE,kBAAuB,GAAG,eAAe,EAAE;IA4B1D;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;OAEG;IACH,OAAO,IAAI,MAAM,EAAE;IAInB;;OAEG;IACH,QAAQ,IAAI;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC7B;IAmBD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAajC;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;OAEG;IACH,OAAO,CAAC,aAAa;CAiBrB"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Action Registry
3
+ *
4
+ * Central registry for decorated actions with discovery and querying capabilities
5
+ */
6
+ import createDebug from "debug";
7
+ const debug = createDebug("hyper:action:registry");
8
+ export class ActionRegistry {
9
+ static instance;
10
+ actions = new Map();
11
+ categoriesIndex = new Map();
12
+ tagsIndex = new Map();
13
+ static getInstance() {
14
+ if (!ActionRegistry.instance) {
15
+ ActionRegistry.instance = new ActionRegistry();
16
+ debug("Action registry initialized");
17
+ }
18
+ return ActionRegistry.instance;
19
+ }
20
+ /**
21
+ * Register a decorated action
22
+ */
23
+ register(fn, metadata) {
24
+ if (this.actions.has(metadata.name)) {
25
+ debug("Warning: Overriding existing action: %s", metadata.name);
26
+ }
27
+ const action = {
28
+ metadata,
29
+ fn,
30
+ module: this.getModulePath(fn),
31
+ exported: true,
32
+ };
33
+ this.actions.set(metadata.name, action);
34
+ this.updateIndexes(metadata);
35
+ debug("Registered action: %s (category: %s, tags: %s)", metadata.name, metadata.category, metadata.tags?.join(", ") || "none");
36
+ }
37
+ /**
38
+ * Get a specific action by name
39
+ */
40
+ get(name) {
41
+ return this.actions.get(name);
42
+ }
43
+ /**
44
+ * Get all registered actions
45
+ */
46
+ getAll() {
47
+ return Array.from(this.actions.values());
48
+ }
49
+ /**
50
+ * Get actions by category
51
+ */
52
+ getByCategory(category) {
53
+ const actionNames = this.categoriesIndex.get(category);
54
+ if (!actionNames) {
55
+ return [];
56
+ }
57
+ return Array.from(actionNames)
58
+ .map((name) => this.actions.get(name))
59
+ .filter((action) => action !== undefined);
60
+ }
61
+ /**
62
+ * Get actions by tags (OR operation - any matching tag)
63
+ */
64
+ getByTags(tags) {
65
+ const matchingActionNames = new Set();
66
+ for (const tag of tags) {
67
+ const actionNames = this.tagsIndex.get(tag);
68
+ if (actionNames) {
69
+ actionNames.forEach((name) => matchingActionNames.add(name));
70
+ }
71
+ }
72
+ return Array.from(matchingActionNames)
73
+ .map((name) => this.actions.get(name))
74
+ .filter((action) => action !== undefined);
75
+ }
76
+ /**
77
+ * Query actions with various filters
78
+ */
79
+ query(options = {}) {
80
+ let results = this.getAll();
81
+ // Filter by category
82
+ if (options.category) {
83
+ results = results.filter((action) => action.metadata.category === options.category);
84
+ }
85
+ // Filter by tags
86
+ if (options.tags && options.tags.length > 0) {
87
+ results = results.filter((action) => action.metadata.tags?.some((tag) => options.tags?.includes(tag)));
88
+ }
89
+ // Filter by search term (name or description)
90
+ if (options.search) {
91
+ const searchTerm = options.search.toLowerCase();
92
+ results = results.filter((action) => action.metadata.name.toLowerCase().includes(searchTerm) ||
93
+ action.metadata.description?.toLowerCase().includes(searchTerm));
94
+ }
95
+ return results;
96
+ }
97
+ /**
98
+ * Get all available categories
99
+ */
100
+ getCategories() {
101
+ return Array.from(this.categoriesIndex.keys()).sort();
102
+ }
103
+ /**
104
+ * Get all available tags
105
+ */
106
+ getTags() {
107
+ return Array.from(this.tagsIndex.keys()).sort();
108
+ }
109
+ /**
110
+ * Get registry statistics
111
+ */
112
+ getStats() {
113
+ const categories = {};
114
+ const tags = {};
115
+ for (const [category, actionNames] of this.categoriesIndex) {
116
+ categories[category] = actionNames.size;
117
+ }
118
+ for (const [tag, actionNames] of this.tagsIndex) {
119
+ tags[tag] = actionNames.size;
120
+ }
121
+ return {
122
+ totalActions: this.actions.size,
123
+ categories,
124
+ tags,
125
+ };
126
+ }
127
+ /**
128
+ * Check if an action exists
129
+ */
130
+ has(name) {
131
+ return this.actions.has(name);
132
+ }
133
+ /**
134
+ * Remove an action from the registry
135
+ */
136
+ unregister(name) {
137
+ const action = this.actions.get(name);
138
+ if (!action) {
139
+ return false;
140
+ }
141
+ this.actions.delete(name);
142
+ this.removeFromIndexes(action.metadata);
143
+ debug("Unregistered action: %s", name);
144
+ return true;
145
+ }
146
+ /**
147
+ * Clear all registered actions
148
+ */
149
+ clear() {
150
+ this.actions.clear();
151
+ this.categoriesIndex.clear();
152
+ this.tagsIndex.clear();
153
+ debug("Registry cleared");
154
+ }
155
+ /**
156
+ * Update search indexes for an action
157
+ */
158
+ updateIndexes(metadata) {
159
+ // Update category index
160
+ if (metadata.category) {
161
+ if (!this.categoriesIndex.has(metadata.category)) {
162
+ this.categoriesIndex.set(metadata.category, new Set());
163
+ }
164
+ this.categoriesIndex.get(metadata.category)?.add(metadata.name);
165
+ }
166
+ // Update tags index
167
+ if (metadata.tags) {
168
+ for (const tag of metadata.tags) {
169
+ if (!this.tagsIndex.has(tag)) {
170
+ this.tagsIndex.set(tag, new Set());
171
+ }
172
+ this.tagsIndex.get(tag)?.add(metadata.name);
173
+ }
174
+ }
175
+ }
176
+ /**
177
+ * Remove action from search indexes
178
+ */
179
+ removeFromIndexes(metadata) {
180
+ // Remove from category index
181
+ if (metadata.category) {
182
+ const categoryActions = this.categoriesIndex.get(metadata.category);
183
+ if (categoryActions) {
184
+ categoryActions.delete(metadata.name);
185
+ if (categoryActions.size === 0) {
186
+ this.categoriesIndex.delete(metadata.category);
187
+ }
188
+ }
189
+ }
190
+ // Remove from tags index
191
+ if (metadata.tags) {
192
+ for (const tag of metadata.tags) {
193
+ const tagActions = this.tagsIndex.get(tag);
194
+ if (tagActions) {
195
+ tagActions.delete(metadata.name);
196
+ if (tagActions.size === 0) {
197
+ this.tagsIndex.delete(tag);
198
+ }
199
+ }
200
+ }
201
+ }
202
+ }
203
+ /**
204
+ * Extract module path from function for better error reporting
205
+ */
206
+ getModulePath(fn) {
207
+ // Try to extract file path from function toString
208
+ const fnString = fn.toString();
209
+ // Look for file:// URLs in the function string
210
+ const fileMatch = fnString.match(/file:\/\/([^"'\s]+)/);
211
+ if (fileMatch) {
212
+ return fileMatch[1];
213
+ }
214
+ // Check if function has a name that might indicate its source
215
+ if (fn.name) {
216
+ return `<${fn.name}>`;
217
+ }
218
+ return "<unknown>";
219
+ }
220
+ }
221
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/actions/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,WAAW,MAAM,OAAO,CAAC;AAQhC,MAAM,KAAK,GAAG,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAEnD,MAAM,OAAO,cAAc;IAClB,MAAM,CAAC,QAAQ,CAAiB;IAChC,OAAO,GAAiC,IAAI,GAAG,EAAE,CAAC;IAClD,eAAe,GAA6B,IAAI,GAAG,EAAE,CAAC;IACtD,SAAS,GAA6B,IAAI,GAAG,EAAE,CAAC;IAExD,MAAM,CAAC,WAAW;QACjB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC9B,cAAc,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;YAC/C,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,EAAkB,EAAE,QAAwB;QACpD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,yCAAyC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,MAAM,GAAoB;YAC/B,QAAQ;YACR,EAAE;YACF,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9B,QAAQ,EAAE,IAAI;SACd,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE7B,KAAK,CACJ,gDAAgD,EAChD,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,MAAM;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACX,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;aAC5B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACrC,MAAM,CAAC,CAAC,MAAM,EAA6B,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAc;QACvB,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE9C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,WAAW,EAAE,CAAC;gBACjB,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,CAAC;QACF,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC;aACpC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACrC,MAAM,CAAC,CAAC,MAAM,EAA6B,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAA8B,EAAE;QACrC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAE5B,qBAAqB;QACrB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrF,CAAC;QAED,iBAAiB;QACjB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAChE,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAChD,OAAO,GAAG,OAAO,CAAC,MAAM,CACvB,CAAC,MAAM,EAAE,EAAE,CACV,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACvD,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAChE,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,aAAa;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,OAAO;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,QAAQ;QAKP,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,MAAM,IAAI,GAA2B,EAAE,CAAC;QAExC,KAAK,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5D,UAAU,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;QACzC,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;QAC9B,CAAC;QAED,OAAO;YACN,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YAC/B,UAAU;YACV,IAAI;SACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAExC,KAAK,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACH,KAAK;QACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,QAAwB;QAC7C,wBAAwB;QACxB,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC;QAED,oBAAoB;QACpB,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBACpC,CAAC;gBACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;QACF,CAAC;IACF,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,QAAwB;QACjD,6BAA6B;QAC7B,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,eAAe,EAAE,CAAC;gBACrB,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBAChC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAChD,CAAC;YACF,CAAC;QACF,CAAC;QAED,yBAAyB;QACzB,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACjC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,UAAU,EAAE,CAAC;oBAChB,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACjC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;wBAC3B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC5B,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,EAAkB;QACvC,kDAAkD;QAClD,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAE/B,+CAA+C;QAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACxD,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QAED,8DAA8D;QAC9D,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YACb,OAAO,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC;QACvB,CAAC;QAED,OAAO,WAAW,CAAC;IACpB,CAAC;CACD"}