@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,515 @@
1
+ /**
2
+ * Cross-Action Communication System
3
+ *
4
+ * Enables actions to communicate with each other and share state
5
+ * during execution workflows
6
+ */
7
+ import { EventEmitter } from "node:events";
8
+ import { ErrorCode, ErrorHandler } from "@hypercli/core";
9
+ import createDebug from "debug";
10
+ const debug = createDebug("hyper:communication");
11
+ export class ActionCommunicationManager extends EventEmitter {
12
+ store;
13
+ config;
14
+ messageCorrelations = new Map();
15
+ constructor(config = {}) {
16
+ super();
17
+ this.config = {
18
+ maxMessageHistory: config.maxMessageHistory || 1000,
19
+ maxStateHistory: config.maxStateHistory || 100,
20
+ enablePersistence: config.enablePersistence || false,
21
+ stateStorePath: config.stateStorePath,
22
+ channels: config.channels || [],
23
+ };
24
+ this.store = {
25
+ actionStates: new Map(),
26
+ sharedData: new Map(),
27
+ channels: new Map(),
28
+ eventHistory: [],
29
+ };
30
+ this.initializeChannels();
31
+ debug("Communication manager initialized with %d channels", this.store.channels.size);
32
+ }
33
+ /**
34
+ * Register an action and create its initial state
35
+ */
36
+ registerAction(actionId, actionName, initialData = {}) {
37
+ debug("Registering action: %s (%s)", actionId, actionName);
38
+ const state = {
39
+ id: actionId,
40
+ action: actionName,
41
+ status: "running",
42
+ data: { ...initialData },
43
+ metadata: {
44
+ startTime: new Date(),
45
+ filesCreated: [],
46
+ errors: [],
47
+ },
48
+ };
49
+ this.store.actionStates.set(actionId, state);
50
+ this.emit("action:registered", { actionId, actionName, state });
51
+ // Broadcast action start event
52
+ this.sendMessage({
53
+ id: this.generateMessageId(),
54
+ source: actionId,
55
+ type: "action:started",
56
+ payload: { actionName, initialData },
57
+ timestamp: new Date(),
58
+ });
59
+ }
60
+ /**
61
+ * Update action state
62
+ */
63
+ updateActionState(actionId, updates, status) {
64
+ const state = this.store.actionStates.get(actionId);
65
+ if (!state) {
66
+ throw ErrorHandler.createError(ErrorCode.ACTION_NOT_FOUND, `Action state not found: ${actionId}`, { action: actionId });
67
+ }
68
+ debug("Updating action state: %s", actionId);
69
+ // Update data
70
+ Object.assign(state.data, updates);
71
+ // Update status if provided
72
+ if (status) {
73
+ state.status = status;
74
+ if (status === "completed" || status === "failed") {
75
+ state.metadata.endTime = new Date();
76
+ state.metadata.duration =
77
+ state.metadata.endTime.getTime() - state.metadata.startTime.getTime();
78
+ }
79
+ }
80
+ this.emit("action:state-updated", { actionId, updates, status, state });
81
+ // Broadcast state change
82
+ this.sendMessage({
83
+ id: this.generateMessageId(),
84
+ source: actionId,
85
+ type: "action:state-changed",
86
+ payload: { updates, status },
87
+ timestamp: new Date(),
88
+ });
89
+ }
90
+ /**
91
+ * Complete an action
92
+ */
93
+ completeAction(actionId, result) {
94
+ debug("Completing action: %s", actionId);
95
+ const state = this.store.actionStates.get(actionId);
96
+ if (!state) {
97
+ throw ErrorHandler.createError(ErrorCode.ACTION_NOT_FOUND, `Action state not found: ${actionId}`, { action: actionId });
98
+ }
99
+ state.status = "completed";
100
+ state.metadata.endTime = new Date();
101
+ state.metadata.duration = state.metadata.endTime.getTime() - state.metadata.startTime.getTime();
102
+ if (result.filesCreated) {
103
+ state.metadata.filesCreated = result.filesCreated;
104
+ }
105
+ this.emit("action:completed", { actionId, result, state });
106
+ // Broadcast completion
107
+ this.sendMessage({
108
+ id: this.generateMessageId(),
109
+ source: actionId,
110
+ type: "action:completed",
111
+ payload: result,
112
+ timestamp: new Date(),
113
+ });
114
+ }
115
+ /**
116
+ * Fail an action
117
+ */
118
+ failAction(actionId, error) {
119
+ debug("Failing action: %s", actionId);
120
+ const state = this.store.actionStates.get(actionId);
121
+ if (!state) {
122
+ throw ErrorHandler.createError(ErrorCode.ACTION_NOT_FOUND, `Action state not found: ${actionId}`, { action: actionId });
123
+ }
124
+ const errorMessage = error instanceof Error ? error.message : error;
125
+ state.status = "failed";
126
+ state.metadata.endTime = new Date();
127
+ state.metadata.duration = state.metadata.endTime.getTime() - state.metadata.startTime.getTime();
128
+ state.metadata.errors = state.metadata.errors || [];
129
+ state.metadata.errors.push(errorMessage);
130
+ this.emit("action:failed", { actionId, error: errorMessage, state });
131
+ // Broadcast failure
132
+ this.sendMessage({
133
+ id: this.generateMessageId(),
134
+ source: actionId,
135
+ type: "action:failed",
136
+ payload: { error: errorMessage },
137
+ timestamp: new Date(),
138
+ });
139
+ }
140
+ /**
141
+ * Send a message between actions
142
+ */
143
+ sendMessage(message) {
144
+ const fullMessage = {
145
+ id: message.id || this.generateMessageId(),
146
+ source: message.source,
147
+ target: message.target,
148
+ type: message.type,
149
+ payload: message.payload,
150
+ timestamp: message.timestamp || new Date(),
151
+ correlationId: message.correlationId,
152
+ };
153
+ debug("Sending message: %s -> %s [%s]", fullMessage.source, fullMessage.target || "broadcast", fullMessage.type);
154
+ // Add to history
155
+ this.store.eventHistory.push(fullMessage);
156
+ this.trimEventHistory();
157
+ // Route message to appropriate channels
158
+ this.routeMessage(fullMessage);
159
+ // Emit to listeners
160
+ this.emit("message", fullMessage);
161
+ this.emit(`message:${fullMessage.type}`, fullMessage);
162
+ // Handle correlation tracking
163
+ if (fullMessage.correlationId) {
164
+ this.trackCorrelation(fullMessage);
165
+ }
166
+ }
167
+ /**
168
+ * Subscribe to messages for a specific action
169
+ */
170
+ subscribeToMessages(actionId, messageType, handler) {
171
+ debug("Action %s subscribing to messages: %s", actionId, messageType);
172
+ const eventName = `message:${messageType}`;
173
+ const wrappedHandler = (message) => {
174
+ // Only deliver to target or broadcast messages
175
+ if (!message.target || message.target === actionId) {
176
+ handler(message);
177
+ }
178
+ };
179
+ this.on(eventName, wrappedHandler);
180
+ // Return unsubscribe function
181
+ return () => {
182
+ this.off(eventName, wrappedHandler);
183
+ debug("Action %s unsubscribed from messages: %s", actionId, messageType);
184
+ };
185
+ }
186
+ /**
187
+ * Set shared data that can be accessed by other actions
188
+ */
189
+ setSharedData(key, value, source) {
190
+ debug("Setting shared data: %s", key);
191
+ this.store.sharedData.set(key, value);
192
+ this.emit("shared-data:set", { key, value, source });
193
+ // Broadcast shared data change
194
+ this.sendMessage({
195
+ id: this.generateMessageId(),
196
+ source: source || "system",
197
+ type: "shared-data:changed",
198
+ payload: { key, value },
199
+ timestamp: new Date(),
200
+ });
201
+ }
202
+ /**
203
+ * Get shared data
204
+ */
205
+ getSharedData(key) {
206
+ return this.store.sharedData.get(key);
207
+ }
208
+ /**
209
+ * Get all shared data
210
+ */
211
+ getAllSharedData() {
212
+ return Object.fromEntries(this.store.sharedData);
213
+ }
214
+ /**
215
+ * Delete shared data
216
+ */
217
+ deleteSharedData(key, source) {
218
+ debug("Deleting shared data: %s", key);
219
+ const deleted = this.store.sharedData.delete(key);
220
+ if (deleted) {
221
+ this.emit("shared-data:deleted", { key, source });
222
+ // Broadcast shared data deletion
223
+ this.sendMessage({
224
+ id: this.generateMessageId(),
225
+ source: source || "system",
226
+ type: "shared-data:deleted",
227
+ payload: { key },
228
+ timestamp: new Date(),
229
+ });
230
+ }
231
+ return deleted;
232
+ }
233
+ /**
234
+ * Get action state
235
+ */
236
+ getActionState(actionId) {
237
+ return this.store.actionStates.get(actionId);
238
+ }
239
+ /**
240
+ * Get all action states
241
+ */
242
+ getAllActionStates() {
243
+ return Array.from(this.store.actionStates.values());
244
+ }
245
+ /**
246
+ * Get actions by status
247
+ */
248
+ getActionsByStatus(status) {
249
+ return Array.from(this.store.actionStates.values()).filter((state) => state.status === status);
250
+ }
251
+ /**
252
+ * Wait for an action to complete
253
+ */
254
+ waitForAction(actionId, timeout) {
255
+ return new Promise((resolve, reject) => {
256
+ const state = this.store.actionStates.get(actionId);
257
+ if (!state) {
258
+ reject(new Error(`Action not found: ${actionId}`));
259
+ return;
260
+ }
261
+ // If already completed, resolve immediately
262
+ if (state.status === "completed" || state.status === "failed") {
263
+ resolve(state);
264
+ return;
265
+ }
266
+ let timeoutId;
267
+ const handleStateUpdate = (event) => {
268
+ if (event.actionId === actionId &&
269
+ (event.state.status === "completed" || event.state.status === "failed")) {
270
+ if (timeoutId)
271
+ clearTimeout(timeoutId);
272
+ this.off("action:state-updated", handleStateUpdate);
273
+ this.off("action:completed", handleCompleted);
274
+ this.off("action:failed", handleFailed);
275
+ resolve(event.state);
276
+ }
277
+ };
278
+ const handleCompleted = (event) => {
279
+ if (event.actionId === actionId) {
280
+ if (timeoutId)
281
+ clearTimeout(timeoutId);
282
+ this.off("action:state-updated", handleStateUpdate);
283
+ this.off("action:completed", handleCompleted);
284
+ this.off("action:failed", handleFailed);
285
+ resolve(event.state);
286
+ }
287
+ };
288
+ const handleFailed = (event) => {
289
+ if (event.actionId === actionId) {
290
+ if (timeoutId)
291
+ clearTimeout(timeoutId);
292
+ this.off("action:state-updated", handleStateUpdate);
293
+ this.off("action:completed", handleCompleted);
294
+ this.off("action:failed", handleFailed);
295
+ resolve(event.state); // Resolve with failed state
296
+ }
297
+ };
298
+ this.on("action:state-updated", handleStateUpdate);
299
+ this.on("action:completed", handleCompleted);
300
+ this.on("action:failed", handleFailed);
301
+ // Set timeout if provided
302
+ if (timeout) {
303
+ timeoutId = setTimeout(() => {
304
+ this.off("action:state-updated", handleStateUpdate);
305
+ this.off("action:completed", handleCompleted);
306
+ this.off("action:failed", handleFailed);
307
+ reject(new Error(`Timeout waiting for action: ${actionId}`));
308
+ }, timeout);
309
+ }
310
+ });
311
+ }
312
+ /**
313
+ * Create a communication channel
314
+ */
315
+ createChannel(config) {
316
+ debug("Creating channel: %s (%s)", config.name, config.type);
317
+ const channel = {
318
+ id: this.generateChannelId(),
319
+ name: config.name,
320
+ type: config.type,
321
+ subscribers: config.subscribers || [],
322
+ messageHistory: [],
323
+ persistent: config.persistent || false,
324
+ };
325
+ this.store.channels.set(config.name, channel);
326
+ this.emit("channel:created", { channel });
327
+ }
328
+ /**
329
+ * Subscribe to a channel
330
+ */
331
+ subscribeToChannel(channelName, actionId) {
332
+ debug("Action %s subscribing to channel: %s", actionId, channelName);
333
+ const channel = this.store.channels.get(channelName);
334
+ if (!channel) {
335
+ throw ErrorHandler.createError(ErrorCode.VALIDATION_ERROR, `Channel not found: ${channelName}`, { channel: channelName });
336
+ }
337
+ if (!channel.subscribers.includes(actionId)) {
338
+ channel.subscribers.push(actionId);
339
+ this.emit("channel:subscription", {
340
+ channelName,
341
+ actionId,
342
+ type: "subscribe",
343
+ });
344
+ }
345
+ }
346
+ /**
347
+ * Unsubscribe from a channel
348
+ */
349
+ unsubscribeFromChannel(channelName, actionId) {
350
+ debug("Action %s unsubscribing from channel: %s", actionId, channelName);
351
+ const channel = this.store.channels.get(channelName);
352
+ if (!channel)
353
+ return;
354
+ const index = channel.subscribers.indexOf(actionId);
355
+ if (index > -1) {
356
+ channel.subscribers.splice(index, 1);
357
+ this.emit("channel:subscription", {
358
+ channelName,
359
+ actionId,
360
+ type: "unsubscribe",
361
+ });
362
+ }
363
+ }
364
+ /**
365
+ * Get message history
366
+ */
367
+ getMessageHistory(filter) {
368
+ let messages = this.store.eventHistory;
369
+ if (filter) {
370
+ messages = messages.filter((msg) => {
371
+ if (filter.type && msg.type !== filter.type)
372
+ return false;
373
+ if (filter.source && msg.source !== filter.source)
374
+ return false;
375
+ if (filter.target && msg.target !== filter.target)
376
+ return false;
377
+ if (filter.correlationId && msg.correlationId !== filter.correlationId)
378
+ return false;
379
+ if (filter.since && msg.timestamp < filter.since)
380
+ return false;
381
+ return true;
382
+ });
383
+ }
384
+ return messages;
385
+ }
386
+ /**
387
+ * Clear communication state
388
+ */
389
+ clear() {
390
+ debug("Clearing communication state");
391
+ this.store.actionStates.clear();
392
+ this.store.sharedData.clear();
393
+ this.store.eventHistory = [];
394
+ this.messageCorrelations.clear();
395
+ // Recreate default channels
396
+ this.initializeChannels();
397
+ this.emit("state:cleared");
398
+ }
399
+ /**
400
+ * Get communication statistics
401
+ */
402
+ getStats() {
403
+ const states = Array.from(this.store.actionStates.values());
404
+ return {
405
+ activeActions: states.filter((s) => s.status === "running" || s.status === "paused").length,
406
+ completedActions: states.filter((s) => s.status === "completed").length,
407
+ failedActions: states.filter((s) => s.status === "failed").length,
408
+ totalMessages: this.store.eventHistory.length,
409
+ sharedDataEntries: this.store.sharedData.size,
410
+ channels: this.store.channels.size,
411
+ };
412
+ }
413
+ /**
414
+ * Initialize default channels
415
+ */
416
+ initializeChannels() {
417
+ // Create default system channels
418
+ const defaultChannels = [
419
+ { name: "system", type: "broadcast", persistent: true },
420
+ { name: "errors", type: "broadcast", persistent: true },
421
+ { name: "lifecycle", type: "broadcast", persistent: false },
422
+ ...this.config.channels,
423
+ ];
424
+ for (const channelConfig of defaultChannels) {
425
+ this.createChannel(channelConfig);
426
+ }
427
+ }
428
+ /**
429
+ * Route message to appropriate channels and subscribers
430
+ */
431
+ routeMessage(message) {
432
+ // If target is specified, route directly
433
+ if (message.target) {
434
+ // Direct message - no additional routing needed
435
+ return;
436
+ }
437
+ // Broadcast to all relevant channels
438
+ for (const channel of this.store.channels.values()) {
439
+ if (channel.type === "broadcast") {
440
+ // Add to channel history if persistent
441
+ if (channel.persistent) {
442
+ channel.messageHistory.push(message);
443
+ this.trimChannelHistory(channel);
444
+ }
445
+ }
446
+ }
447
+ }
448
+ /**
449
+ * Track correlation between messages
450
+ */
451
+ trackCorrelation(message) {
452
+ if (!message.correlationId)
453
+ return;
454
+ if (!this.messageCorrelations.has(message.correlationId)) {
455
+ this.messageCorrelations.set(message.correlationId, []);
456
+ }
457
+ this.messageCorrelations.get(message.correlationId)?.push(message.id);
458
+ }
459
+ /**
460
+ * Trim event history to stay within limits
461
+ */
462
+ trimEventHistory() {
463
+ if (this.store.eventHistory.length > this.config.maxMessageHistory) {
464
+ this.store.eventHistory = this.store.eventHistory.slice(-this.config.maxMessageHistory);
465
+ }
466
+ }
467
+ /**
468
+ * Trim channel message history
469
+ */
470
+ trimChannelHistory(channel) {
471
+ const maxHistory = 100; // Configurable per channel in the future
472
+ if (channel.messageHistory.length > maxHistory) {
473
+ channel.messageHistory = channel.messageHistory.slice(-maxHistory);
474
+ }
475
+ }
476
+ /**
477
+ * Generate unique message ID
478
+ */
479
+ generateMessageId() {
480
+ return `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
481
+ }
482
+ /**
483
+ * Generate unique channel ID
484
+ */
485
+ generateChannelId() {
486
+ return `ch_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
487
+ }
488
+ }
489
+ // Global communication manager instance
490
+ let globalCommunicationManager;
491
+ /**
492
+ * Get or create the global communication manager
493
+ */
494
+ export function getCommunicationManager(config) {
495
+ if (!globalCommunicationManager) {
496
+ globalCommunicationManager = new ActionCommunicationManager(config);
497
+ }
498
+ return globalCommunicationManager;
499
+ }
500
+ /**
501
+ * Set the global communication manager
502
+ */
503
+ export function setCommunicationManager(manager) {
504
+ globalCommunicationManager = manager;
505
+ }
506
+ /**
507
+ * Clear the global communication manager
508
+ */
509
+ export function clearCommunicationManager() {
510
+ if (globalCommunicationManager) {
511
+ globalCommunicationManager.clear();
512
+ globalCommunicationManager = undefined;
513
+ }
514
+ }
515
+ //# sourceMappingURL=communication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"communication.js","sourceRoot":"","sources":["../../src/actions/communication.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Action Decorator Implementation
3
+ *
4
+ * Provides the @action decorator for defining generator actions
5
+ */
6
+ import type { ActionFunction, ActionMetadata } from "./types.js";
7
+ /**
8
+ * Action decorator factory
9
+ *
10
+ * @param metadata Action configuration including name, description, and parameters
11
+ * @returns Decorator function
12
+ */
13
+ export declare function action(metadata: ActionMetadata): <T extends ActionFunction>(target: T, propertyKey?: string | symbol, descriptor?: PropertyDescriptor) => T;
14
+ /**
15
+ * Extract action metadata from a decorated function
16
+ */
17
+ export declare function getActionMetadata(fn: ActionFunction): ActionMetadata | undefined;
18
+ /**
19
+ * Check if a function is decorated with @action
20
+ */
21
+ export declare function isActionFunction(fn: any): fn is ActionFunction;
22
+ //# sourceMappingURL=decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.d.ts","sourceRoot":"","sources":["../../src/actions/decorator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAOjE;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,cAAc,IACtC,CAAC,SAAS,cAAc,EAC/B,QAAQ,CAAC,EACT,cAAc,MAAM,GAAG,MAAM,EAC7B,aAAa,kBAAkB,KAC7B,CAAC,CA2BJ;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS,CAEhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,cAAc,CAE9D"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Action Decorator Implementation
3
+ *
4
+ * Provides the @action decorator for defining generator actions
5
+ */
6
+ import createDebug from "debug";
7
+ import { ActionRegistry } from "./registry.js";
8
+ const debug = createDebug("hyper:action:decorator");
9
+ // Symbol to store metadata on functions
10
+ const ACTION_METADATA_SYMBOL = Symbol("actionMetadata");
11
+ /**
12
+ * Action decorator factory
13
+ *
14
+ * @param metadata Action configuration including name, description, and parameters
15
+ * @returns Decorator function
16
+ */
17
+ export function action(metadata) {
18
+ return (target, propertyKey, descriptor) => {
19
+ debug("Decorating action: %s", metadata.name);
20
+ // Validate metadata
21
+ validateActionMetadata(metadata);
22
+ // Store metadata on the function
23
+ const actionMetadata = {
24
+ name: metadata.name,
25
+ description: metadata.description,
26
+ parameters: metadata.parameters || [],
27
+ category: metadata.category || "general",
28
+ tags: metadata.tags || [],
29
+ examples: metadata.examples || [],
30
+ };
31
+ // Attach metadata to function using symbol
32
+ target[ACTION_METADATA_SYMBOL] = actionMetadata;
33
+ // Register with action registry
34
+ const registry = ActionRegistry.getInstance();
35
+ registry.register(target, actionMetadata);
36
+ debug("Action registered: %s in category %s", metadata.name, actionMetadata.category);
37
+ return target;
38
+ };
39
+ }
40
+ /**
41
+ * Extract action metadata from a decorated function
42
+ */
43
+ export function getActionMetadata(fn) {
44
+ return fn[ACTION_METADATA_SYMBOL];
45
+ }
46
+ /**
47
+ * Check if a function is decorated with @action
48
+ */
49
+ export function isActionFunction(fn) {
50
+ return typeof fn === "function" && ACTION_METADATA_SYMBOL in fn;
51
+ }
52
+ /**
53
+ * Validate action metadata
54
+ */
55
+ function validateActionMetadata(metadata) {
56
+ if (!metadata.name) {
57
+ throw new Error("Action name is required");
58
+ }
59
+ if (!/^[a-z][a-z0-9-]*$/i.test(metadata.name)) {
60
+ throw new Error("Action name must be alphanumeric with hyphens (kebab-case recommended)");
61
+ }
62
+ if (metadata.parameters) {
63
+ for (const param of metadata.parameters) {
64
+ validateParameterDefinition(param);
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Validate parameter definition
70
+ */
71
+ function validateParameterDefinition(param) {
72
+ if (!param.name) {
73
+ throw new Error("Parameter name is required");
74
+ }
75
+ if (!param.type) {
76
+ throw new Error(`Parameter ${param.name} must have a type`);
77
+ }
78
+ const validTypes = [
79
+ "string",
80
+ "boolean",
81
+ "number",
82
+ "enum",
83
+ "array",
84
+ "object",
85
+ "file",
86
+ "directory",
87
+ ];
88
+ if (!validTypes.includes(param.type)) {
89
+ throw new Error(`Invalid parameter type '${param.type}' for ${param.name}. Must be one of: ${validTypes.join(", ")}`);
90
+ }
91
+ // Validate enum parameters
92
+ if (param.type === "enum") {
93
+ if (!param.values || !Array.isArray(param.values) || param.values.length === 0) {
94
+ throw new Error(`Enum parameter ${param.name} must have a non-empty values array`);
95
+ }
96
+ }
97
+ // Validate number constraints
98
+ if (param.type === "number") {
99
+ if (param.min !== undefined && typeof param.min !== "number") {
100
+ throw new Error(`Parameter ${param.name} min constraint must be a number`);
101
+ }
102
+ if (param.max !== undefined && typeof param.max !== "number") {
103
+ throw new Error(`Parameter ${param.name} max constraint must be a number`);
104
+ }
105
+ if (param.min !== undefined && param.max !== undefined && param.min > param.max) {
106
+ throw new Error(`Parameter ${param.name} min (${param.min}) cannot be greater than max (${param.max})`);
107
+ }
108
+ }
109
+ }
110
+ //# sourceMappingURL=decorator.js.map