groundswell 0.0.1 → 0.0.3

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 (451) hide show
  1. package/CHANGELOG.md +188 -0
  2. package/README.md +99 -5
  3. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts +16 -0
  4. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts.map +1 -0
  5. package/dist/__tests__/adversarial/attachChild-performance.test.js +187 -0
  6. package/dist/__tests__/adversarial/attachChild-performance.test.js.map +1 -0
  7. package/dist/__tests__/adversarial/circular-reference.test.d.ts +13 -0
  8. package/dist/__tests__/adversarial/circular-reference.test.d.ts.map +1 -0
  9. package/dist/__tests__/adversarial/circular-reference.test.js +92 -0
  10. package/dist/__tests__/adversarial/circular-reference.test.js.map +1 -0
  11. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts +16 -0
  12. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts.map +1 -0
  13. package/dist/__tests__/adversarial/complex-circular-reference.test.js +127 -0
  14. package/dist/__tests__/adversarial/complex-circular-reference.test.js.map +1 -0
  15. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts +21 -0
  16. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts.map +1 -0
  17. package/dist/__tests__/adversarial/concurrent-task-failures.test.js +667 -0
  18. package/dist/__tests__/adversarial/concurrent-task-failures.test.js.map +1 -0
  19. package/dist/__tests__/adversarial/deep-analysis.test.d.ts +6 -0
  20. package/dist/__tests__/adversarial/deep-analysis.test.d.ts.map +1 -0
  21. package/dist/__tests__/adversarial/deep-analysis.test.js +877 -0
  22. package/dist/__tests__/adversarial/deep-analysis.test.js.map +1 -0
  23. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts +13 -0
  24. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts.map +1 -0
  25. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js +186 -0
  26. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js.map +1 -0
  27. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts +6 -0
  28. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts.map +1 -0
  29. package/dist/__tests__/adversarial/e2e-prd-validation.test.js +626 -0
  30. package/dist/__tests__/adversarial/e2e-prd-validation.test.js.map +1 -0
  31. package/dist/__tests__/adversarial/edge-case.test.d.ts +6 -0
  32. package/dist/__tests__/adversarial/edge-case.test.d.ts.map +1 -0
  33. package/dist/__tests__/adversarial/edge-case.test.js +857 -0
  34. package/dist/__tests__/adversarial/edge-case.test.js.map +1 -0
  35. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts +20 -0
  36. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts.map +1 -0
  37. package/dist/__tests__/adversarial/error-merge-strategy.test.js +907 -0
  38. package/dist/__tests__/adversarial/error-merge-strategy.test.js.map +1 -0
  39. package/dist/__tests__/adversarial/incremental-performance.test.d.ts +2 -0
  40. package/dist/__tests__/adversarial/incremental-performance.test.d.ts.map +1 -0
  41. package/dist/__tests__/adversarial/incremental-performance.test.js +113 -0
  42. package/dist/__tests__/adversarial/incremental-performance.test.js.map +1 -0
  43. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts +22 -0
  44. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts.map +1 -0
  45. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js +383 -0
  46. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js.map +1 -0
  47. package/dist/__tests__/adversarial/observer-propagation.test.d.ts +21 -0
  48. package/dist/__tests__/adversarial/observer-propagation.test.d.ts.map +1 -0
  49. package/dist/__tests__/adversarial/observer-propagation.test.js +404 -0
  50. package/dist/__tests__/adversarial/observer-propagation.test.js.map +1 -0
  51. package/dist/__tests__/adversarial/parent-validation.test.d.ts +13 -0
  52. package/dist/__tests__/adversarial/parent-validation.test.d.ts.map +1 -0
  53. package/dist/__tests__/adversarial/parent-validation.test.js +128 -0
  54. package/dist/__tests__/adversarial/parent-validation.test.js.map +1 -0
  55. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts +20 -0
  56. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts.map +1 -0
  57. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js +482 -0
  58. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js.map +1 -0
  59. package/dist/__tests__/adversarial/prd-compliance.test.d.ts +6 -0
  60. package/dist/__tests__/adversarial/prd-compliance.test.d.ts.map +1 -0
  61. package/dist/__tests__/adversarial/prd-compliance.test.js +886 -0
  62. package/dist/__tests__/adversarial/prd-compliance.test.js.map +1 -0
  63. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts +22 -0
  64. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts.map +1 -0
  65. package/dist/__tests__/compatibility/backward-compatibility.test.js +1843 -0
  66. package/dist/__tests__/compatibility/backward-compatibility.test.js.map +1 -0
  67. package/dist/__tests__/helpers/index.d.ts +10 -0
  68. package/dist/__tests__/helpers/index.d.ts.map +1 -0
  69. package/dist/__tests__/helpers/index.js +10 -0
  70. package/dist/__tests__/helpers/index.js.map +1 -0
  71. package/dist/__tests__/helpers/tree-verification.d.ts +90 -0
  72. package/dist/__tests__/helpers/tree-verification.d.ts.map +1 -0
  73. package/dist/__tests__/helpers/tree-verification.js +202 -0
  74. package/dist/__tests__/helpers/tree-verification.js.map +1 -0
  75. package/dist/__tests__/integration/agent-workflow.test.d.ts +2 -0
  76. package/dist/__tests__/integration/agent-workflow.test.d.ts.map +1 -0
  77. package/dist/__tests__/integration/agent-workflow.test.js +256 -0
  78. package/dist/__tests__/integration/agent-workflow.test.js.map +1 -0
  79. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts +14 -0
  80. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts.map +1 -0
  81. package/dist/__tests__/integration/bidirectional-consistency.test.js +668 -0
  82. package/dist/__tests__/integration/bidirectional-consistency.test.js.map +1 -0
  83. package/dist/__tests__/integration/observer-logging.test.d.ts +2 -0
  84. package/dist/__tests__/integration/observer-logging.test.d.ts.map +1 -0
  85. package/dist/__tests__/integration/observer-logging.test.js +517 -0
  86. package/dist/__tests__/integration/observer-logging.test.js.map +1 -0
  87. package/dist/__tests__/integration/tree-mirroring.test.d.ts +2 -0
  88. package/dist/__tests__/integration/tree-mirroring.test.d.ts.map +1 -0
  89. package/dist/__tests__/integration/tree-mirroring.test.js +117 -0
  90. package/dist/__tests__/integration/tree-mirroring.test.js.map +1 -0
  91. package/dist/__tests__/integration/workflow-reparenting.test.d.ts +12 -0
  92. package/dist/__tests__/integration/workflow-reparenting.test.d.ts.map +1 -0
  93. package/dist/__tests__/integration/workflow-reparenting.test.js +239 -0
  94. package/dist/__tests__/integration/workflow-reparenting.test.js.map +1 -0
  95. package/dist/__tests__/unit/agent.test.d.ts +2 -0
  96. package/dist/__tests__/unit/agent.test.d.ts.map +1 -0
  97. package/dist/__tests__/unit/agent.test.js +143 -0
  98. package/dist/__tests__/unit/agent.test.js.map +1 -0
  99. package/dist/__tests__/unit/cache-key.test.d.ts +5 -0
  100. package/dist/__tests__/unit/cache-key.test.d.ts.map +1 -0
  101. package/dist/__tests__/unit/cache-key.test.js +145 -0
  102. package/dist/__tests__/unit/cache-key.test.js.map +1 -0
  103. package/dist/__tests__/unit/cache.test.d.ts +5 -0
  104. package/dist/__tests__/unit/cache.test.d.ts.map +1 -0
  105. package/dist/__tests__/unit/cache.test.js +132 -0
  106. package/dist/__tests__/unit/cache.test.js.map +1 -0
  107. package/dist/__tests__/unit/context.test.d.ts +2 -0
  108. package/dist/__tests__/unit/context.test.d.ts.map +1 -0
  109. package/dist/__tests__/unit/context.test.js +220 -0
  110. package/dist/__tests__/unit/context.test.js.map +1 -0
  111. package/dist/__tests__/unit/decorators.test.d.ts +2 -0
  112. package/dist/__tests__/unit/decorators.test.d.ts.map +1 -0
  113. package/dist/__tests__/unit/decorators.test.js +162 -0
  114. package/dist/__tests__/unit/decorators.test.js.map +1 -0
  115. package/dist/__tests__/unit/introspection-tools.test.d.ts +5 -0
  116. package/dist/__tests__/unit/introspection-tools.test.d.ts.map +1 -0
  117. package/dist/__tests__/unit/introspection-tools.test.js +191 -0
  118. package/dist/__tests__/unit/introspection-tools.test.js.map +1 -0
  119. package/dist/__tests__/unit/logger.test.d.ts +2 -0
  120. package/dist/__tests__/unit/logger.test.d.ts.map +1 -0
  121. package/dist/__tests__/unit/logger.test.js +241 -0
  122. package/dist/__tests__/unit/logger.test.js.map +1 -0
  123. package/dist/__tests__/unit/observable.test.d.ts +2 -0
  124. package/dist/__tests__/unit/observable.test.d.ts.map +1 -0
  125. package/dist/__tests__/unit/observable.test.js +251 -0
  126. package/dist/__tests__/unit/observable.test.js.map +1 -0
  127. package/dist/__tests__/unit/prompt.test.d.ts +2 -0
  128. package/dist/__tests__/unit/prompt.test.d.ts.map +1 -0
  129. package/dist/__tests__/unit/prompt.test.js +113 -0
  130. package/dist/__tests__/unit/prompt.test.js.map +1 -0
  131. package/dist/__tests__/unit/reflection.test.d.ts +5 -0
  132. package/dist/__tests__/unit/reflection.test.d.ts.map +1 -0
  133. package/dist/__tests__/unit/reflection.test.js +160 -0
  134. package/dist/__tests__/unit/reflection.test.js.map +1 -0
  135. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts +2 -0
  136. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts.map +1 -0
  137. package/dist/__tests__/unit/tree-debugger-incremental.test.js +136 -0
  138. package/dist/__tests__/unit/tree-debugger-incremental.test.js.map +1 -0
  139. package/dist/__tests__/unit/tree-debugger.test.d.ts +2 -0
  140. package/dist/__tests__/unit/tree-debugger.test.d.ts.map +1 -0
  141. package/dist/__tests__/unit/tree-debugger.test.js +69 -0
  142. package/dist/__tests__/unit/tree-debugger.test.js.map +1 -0
  143. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts +2 -0
  144. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts.map +1 -0
  145. package/dist/__tests__/unit/utils/workflow-error-utils.test.js +154 -0
  146. package/dist/__tests__/unit/utils/workflow-error-utils.test.js.map +1 -0
  147. package/dist/__tests__/unit/workflow-detachChild.test.d.ts +2 -0
  148. package/dist/__tests__/unit/workflow-detachChild.test.d.ts.map +1 -0
  149. package/dist/__tests__/unit/workflow-detachChild.test.js +76 -0
  150. package/dist/__tests__/unit/workflow-detachChild.test.js.map +1 -0
  151. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts +2 -0
  152. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts.map +1 -0
  153. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js +122 -0
  154. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js.map +1 -0
  155. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts +2 -0
  156. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts.map +1 -0
  157. package/dist/__tests__/unit/workflow-isDescendantOf.test.js +140 -0
  158. package/dist/__tests__/unit/workflow-isDescendantOf.test.js.map +1 -0
  159. package/dist/__tests__/unit/workflow.test.d.ts +2 -0
  160. package/dist/__tests__/unit/workflow.test.d.ts.map +1 -0
  161. package/dist/__tests__/unit/workflow.test.js +330 -0
  162. package/dist/__tests__/unit/workflow.test.js.map +1 -0
  163. package/dist/cache/cache-key.d.ts +66 -0
  164. package/dist/cache/cache-key.d.ts.map +1 -0
  165. package/dist/cache/cache-key.js +195 -0
  166. package/dist/cache/cache-key.js.map +1 -0
  167. package/dist/cache/cache.d.ts +104 -0
  168. package/dist/cache/cache.d.ts.map +1 -0
  169. package/dist/cache/cache.js +179 -0
  170. package/dist/cache/cache.js.map +1 -0
  171. package/{src/cache/index.ts → dist/cache/index.d.ts} +1 -1
  172. package/dist/cache/index.d.ts.map +1 -0
  173. package/dist/cache/index.js +6 -0
  174. package/dist/cache/index.js.map +1 -0
  175. package/dist/core/agent.d.ts +112 -0
  176. package/dist/core/agent.d.ts.map +1 -0
  177. package/dist/core/agent.js +426 -0
  178. package/dist/core/agent.js.map +1 -0
  179. package/{src/core/context.ts → dist/core/context.d.ts} +16 -67
  180. package/dist/core/context.d.ts.map +1 -0
  181. package/dist/core/context.js +80 -0
  182. package/dist/core/context.js.map +1 -0
  183. package/dist/core/event-tree.d.ts +72 -0
  184. package/dist/core/event-tree.d.ts.map +1 -0
  185. package/dist/core/event-tree.js +211 -0
  186. package/dist/core/event-tree.js.map +1 -0
  187. package/{src/core/factory.ts → dist/core/factory.d.ts} +6 -27
  188. package/dist/core/factory.d.ts.map +1 -0
  189. package/dist/core/factory.js +110 -0
  190. package/dist/core/factory.js.map +1 -0
  191. package/{src/core/index.ts → dist/core/index.d.ts} +2 -10
  192. package/dist/core/index.d.ts.map +1 -0
  193. package/dist/core/index.js +9 -0
  194. package/dist/core/index.js.map +1 -0
  195. package/dist/core/logger.d.ts +50 -0
  196. package/dist/core/logger.d.ts.map +1 -0
  197. package/dist/core/logger.js +91 -0
  198. package/dist/core/logger.js.map +1 -0
  199. package/dist/core/mcp-handler.d.ts +69 -0
  200. package/dist/core/mcp-handler.d.ts.map +1 -0
  201. package/dist/core/mcp-handler.js +143 -0
  202. package/dist/core/mcp-handler.js.map +1 -0
  203. package/dist/core/prompt.d.ts +80 -0
  204. package/dist/core/prompt.d.ts.map +1 -0
  205. package/dist/core/prompt.js +120 -0
  206. package/dist/core/prompt.js.map +1 -0
  207. package/dist/core/workflow-context.d.ts +57 -0
  208. package/dist/core/workflow-context.d.ts.map +1 -0
  209. package/dist/core/workflow-context.js +263 -0
  210. package/dist/core/workflow-context.js.map +1 -0
  211. package/dist/core/workflow.d.ts +241 -0
  212. package/dist/core/workflow.d.ts.map +1 -0
  213. package/dist/core/workflow.js +464 -0
  214. package/dist/core/workflow.js.map +1 -0
  215. package/dist/debugger/index.d.ts +2 -0
  216. package/dist/debugger/index.d.ts.map +1 -0
  217. package/{src/debugger/index.ts → dist/debugger/index.js} +1 -0
  218. package/dist/debugger/index.js.map +1 -0
  219. package/dist/debugger/tree-debugger.d.ts +71 -0
  220. package/dist/debugger/tree-debugger.d.ts.map +1 -0
  221. package/dist/debugger/tree-debugger.js +198 -0
  222. package/dist/debugger/tree-debugger.js.map +1 -0
  223. package/dist/decorators/index.d.ts +4 -0
  224. package/dist/decorators/index.d.ts.map +1 -0
  225. package/{src/decorators/index.ts → dist/decorators/index.js} +1 -0
  226. package/dist/decorators/index.js.map +1 -0
  227. package/dist/decorators/observed-state.d.ts +32 -0
  228. package/dist/decorators/observed-state.d.ts.map +1 -0
  229. package/dist/decorators/observed-state.js +79 -0
  230. package/dist/decorators/observed-state.js.map +1 -0
  231. package/dist/decorators/step.d.ts +15 -0
  232. package/dist/decorators/step.d.ts.map +1 -0
  233. package/dist/decorators/step.js +110 -0
  234. package/dist/decorators/step.js.map +1 -0
  235. package/dist/decorators/task.d.ts +50 -0
  236. package/dist/decorators/task.d.ts.map +1 -0
  237. package/dist/decorators/task.js +118 -0
  238. package/dist/decorators/task.js.map +1 -0
  239. package/dist/examples/index.d.ts +3 -0
  240. package/dist/examples/index.d.ts.map +1 -0
  241. package/{src/examples/index.ts → dist/examples/index.js} +1 -0
  242. package/dist/examples/index.js.map +1 -0
  243. package/dist/examples/tdd-orchestrator.d.ts +15 -0
  244. package/dist/examples/tdd-orchestrator.d.ts.map +1 -0
  245. package/dist/examples/tdd-orchestrator.js +121 -0
  246. package/dist/examples/tdd-orchestrator.js.map +1 -0
  247. package/dist/examples/test-cycle-workflow.d.ts +14 -0
  248. package/dist/examples/test-cycle-workflow.d.ts.map +1 -0
  249. package/dist/examples/test-cycle-workflow.js +116 -0
  250. package/dist/examples/test-cycle-workflow.js.map +1 -0
  251. package/dist/index.d.ts +27 -0
  252. package/dist/index.d.ts.map +1 -0
  253. package/dist/index.js +40 -0
  254. package/dist/index.js.map +1 -0
  255. package/dist/reflection/index.d.ts +5 -0
  256. package/dist/reflection/index.d.ts.map +1 -0
  257. package/{src/reflection/index.ts → dist/reflection/index.js} +1 -1
  258. package/dist/reflection/index.js.map +1 -0
  259. package/dist/reflection/reflection.d.ts +84 -0
  260. package/dist/reflection/reflection.d.ts.map +1 -0
  261. package/dist/reflection/reflection.js +329 -0
  262. package/dist/reflection/reflection.js.map +1 -0
  263. package/dist/tools/index.d.ts +6 -0
  264. package/dist/tools/index.d.ts.map +1 -0
  265. package/dist/tools/index.js +11 -0
  266. package/dist/tools/index.js.map +1 -0
  267. package/dist/tools/introspection.d.ts +165 -0
  268. package/dist/tools/introspection.d.ts.map +1 -0
  269. package/dist/tools/introspection.js +324 -0
  270. package/dist/tools/introspection.js.map +1 -0
  271. package/dist/types/agent.d.ts +66 -0
  272. package/dist/types/agent.d.ts.map +1 -0
  273. package/dist/types/agent.js +6 -0
  274. package/dist/types/agent.js.map +1 -0
  275. package/dist/types/decorators.d.ts +31 -0
  276. package/dist/types/decorators.d.ts.map +1 -0
  277. package/dist/types/decorators.js +2 -0
  278. package/dist/types/decorators.js.map +1 -0
  279. package/dist/types/error-strategy.d.ts +13 -0
  280. package/dist/types/error-strategy.d.ts.map +1 -0
  281. package/dist/types/error-strategy.js +2 -0
  282. package/dist/types/error-strategy.js.map +1 -0
  283. package/dist/types/error.d.ts +20 -0
  284. package/dist/types/error.d.ts.map +1 -0
  285. package/dist/types/error.js +2 -0
  286. package/dist/types/error.js.map +1 -0
  287. package/dist/types/events.d.ts +87 -0
  288. package/dist/types/events.d.ts.map +1 -0
  289. package/dist/types/events.js +2 -0
  290. package/dist/types/events.js.map +1 -0
  291. package/dist/types/index.d.ts +15 -0
  292. package/dist/types/index.d.ts.map +1 -0
  293. package/dist/types/index.js +2 -0
  294. package/dist/types/index.js.map +1 -0
  295. package/dist/types/logging.d.ts +24 -0
  296. package/dist/types/logging.d.ts.map +1 -0
  297. package/dist/types/logging.js +2 -0
  298. package/dist/types/logging.js.map +1 -0
  299. package/dist/types/observer.d.ts +18 -0
  300. package/dist/types/observer.d.ts.map +1 -0
  301. package/dist/types/observer.js +2 -0
  302. package/dist/types/observer.js.map +1 -0
  303. package/dist/types/prompt.d.ts +31 -0
  304. package/dist/types/prompt.d.ts.map +1 -0
  305. package/dist/types/prompt.js +6 -0
  306. package/dist/types/prompt.js.map +1 -0
  307. package/dist/types/reflection.d.ts +96 -0
  308. package/dist/types/reflection.d.ts.map +1 -0
  309. package/dist/types/reflection.js +24 -0
  310. package/dist/types/reflection.js.map +1 -0
  311. package/dist/types/sdk-primitives.d.ts +118 -0
  312. package/dist/types/sdk-primitives.d.ts.map +1 -0
  313. package/dist/types/sdk-primitives.js +6 -0
  314. package/dist/types/sdk-primitives.js.map +1 -0
  315. package/{src/types/snapshot.ts → dist/types/snapshot.d.ts} +5 -5
  316. package/dist/types/snapshot.d.ts.map +1 -0
  317. package/dist/types/snapshot.js +2 -0
  318. package/dist/types/snapshot.js.map +1 -0
  319. package/dist/types/workflow-context.d.ts +139 -0
  320. package/dist/types/workflow-context.d.ts.map +1 -0
  321. package/dist/types/workflow-context.js +8 -0
  322. package/dist/types/workflow-context.js.map +1 -0
  323. package/dist/types/workflow.d.ts +30 -0
  324. package/dist/types/workflow.d.ts.map +1 -0
  325. package/dist/types/workflow.js +2 -0
  326. package/dist/types/workflow.js.map +1 -0
  327. package/dist/utils/id.d.ts +6 -0
  328. package/dist/utils/id.d.ts.map +1 -0
  329. package/dist/utils/id.js +12 -0
  330. package/dist/utils/id.js.map +1 -0
  331. package/{src/utils/index.ts → dist/utils/index.d.ts} +2 -0
  332. package/dist/utils/index.d.ts.map +1 -0
  333. package/dist/utils/index.js +4 -0
  334. package/dist/utils/index.js.map +1 -0
  335. package/dist/utils/observable.d.ts +54 -0
  336. package/dist/utils/observable.d.ts.map +1 -0
  337. package/dist/utils/observable.js +82 -0
  338. package/dist/utils/observable.js.map +1 -0
  339. package/dist/utils/workflow-error-utils.d.ts +22 -0
  340. package/dist/utils/workflow-error-utils.d.ts.map +1 -0
  341. package/dist/utils/workflow-error-utils.js +45 -0
  342. package/dist/utils/workflow-error-utils.js.map +1 -0
  343. package/package.json +7 -2
  344. package/.claude/settings.local.json +0 -9
  345. package/.claude/system_prompts/task-breakdown.md +0 -100
  346. package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
  347. package/PRPs/PRDs/001-hierarchical-workflow-engine.md +0 -543
  348. package/PRPs/PRDs/002-agent-prompt.md +0 -390
  349. package/PRPs/PRDs/003-agent-prompt.md +0 -943
  350. package/PRPs/PRDs/004-agent-prompt.md +0 -1136
  351. package/PRPs/PRDs/tasks-001.json +0 -492
  352. package/PRPs/README.md +0 -83
  353. package/PRPs/templates/prp_base.md +0 -222
  354. package/docs/agent.md +0 -422
  355. package/docs/prompt.md +0 -419
  356. package/docs/workflow.md +0 -600
  357. package/examples/README.md +0 -244
  358. package/examples/examples/01-basic-workflow.ts +0 -100
  359. package/examples/examples/02-decorator-options.ts +0 -217
  360. package/examples/examples/03-parent-child.ts +0 -241
  361. package/examples/examples/04-observers-debugger.ts +0 -340
  362. package/examples/examples/05-error-handling.ts +0 -387
  363. package/examples/examples/06-concurrent-tasks.ts +0 -352
  364. package/examples/examples/07-agent-loops.ts +0 -432
  365. package/examples/examples/08-sdk-features.ts +0 -667
  366. package/examples/examples/09-reflection.ts +0 -573
  367. package/examples/examples/10-introspection.ts +0 -550
  368. package/examples/index.ts +0 -143
  369. package/examples/utils/helpers.ts +0 -57
  370. package/llms_full.txt +0 -5890
  371. package/plan/P1P2/PRP.md +0 -527
  372. package/plan/P1P2/research/LRU_CACHE_BEST_PRACTICES.md +0 -1929
  373. package/plan/P1P2/research/LRU_CACHE_CODE_PATTERNS.md +0 -857
  374. package/plan/P1P2/research/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
  375. package/plan/P1P2/research/LRU_CACHE_RESEARCH_INDEX.md +0 -424
  376. package/plan/P1P2/research/REFLECTION_INDEX.md +0 -291
  377. package/plan/P1P2/research/REFLECTION_RESEARCH_REPORT.md +0 -1342
  378. package/plan/P1P2/research/RESEARCH_SUMMARY.md +0 -342
  379. package/plan/P1P2/research/anthropic-sdk.md +0 -174
  380. package/plan/P1P2/research/async-local-storage.md +0 -200
  381. package/plan/P1P2/research/reflection-code-patterns.md +0 -1205
  382. package/plan/P1P2/research/reflection-decision-matrix.md +0 -421
  383. package/plan/P1P2/research/reflection-implementation-guide.md +0 -1341
  384. package/plan/P1P2/research/reflection-integration-guide.md +0 -834
  385. package/plan/P1P2/research/reflection-patterns.md +0 -1468
  386. package/plan/P1P2/research/reflection-quick-reference.md +0 -558
  387. package/plan/P1P2/research/zod-schema.md +0 -152
  388. package/plan/P3P4/PRP.md +0 -1388
  389. package/plan/P3P4/research/caching-lru.md +0 -116
  390. package/plan/P3P4/research/introspection-tools.md +0 -177
  391. package/plan/P3P4/research/reflection-patterns.md +0 -117
  392. package/plan/P4P5/PRP.md +0 -1136
  393. package/plan/P4P5/research/RESEARCH_SUMMARY.md +0 -151
  394. package/plan/architecture/external_deps.md +0 -358
  395. package/plan/architecture/system_context.md +0 -242
  396. package/plan/backlog.json +0 -867
  397. package/plan/research/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
  398. package/plan/research/README-INTROSPECTION.md +0 -352
  399. package/plan/research/agent-introspection-patterns.md +0 -1085
  400. package/plan/research/introspection-security-guide.md +0 -928
  401. package/plan/research/introspection-tool-examples.md +0 -875
  402. package/scripts/generate-llms-full.ts +0 -206
  403. package/src/__tests__/integration/agent-workflow.test.ts +0 -256
  404. package/src/__tests__/integration/tree-mirroring.test.ts +0 -114
  405. package/src/__tests__/unit/agent.test.ts +0 -169
  406. package/src/__tests__/unit/cache-key.test.ts +0 -182
  407. package/src/__tests__/unit/cache.test.ts +0 -172
  408. package/src/__tests__/unit/context.test.ts +0 -138
  409. package/src/__tests__/unit/decorators.test.ts +0 -100
  410. package/src/__tests__/unit/introspection-tools.test.ts +0 -277
  411. package/src/__tests__/unit/prompt.test.ts +0 -135
  412. package/src/__tests__/unit/reflection.test.ts +0 -210
  413. package/src/__tests__/unit/tree-debugger.test.ts +0 -85
  414. package/src/__tests__/unit/workflow.test.ts +0 -81
  415. package/src/cache/cache-key.ts +0 -244
  416. package/src/cache/cache.ts +0 -236
  417. package/src/core/agent.ts +0 -573
  418. package/src/core/event-tree.ts +0 -260
  419. package/src/core/logger.ts +0 -87
  420. package/src/core/mcp-handler.ts +0 -184
  421. package/src/core/prompt.ts +0 -150
  422. package/src/core/workflow-context.ts +0 -349
  423. package/src/core/workflow.ts +0 -302
  424. package/src/debugger/tree-debugger.ts +0 -210
  425. package/src/decorators/observed-state.ts +0 -95
  426. package/src/decorators/step.ts +0 -139
  427. package/src/decorators/task.ts +0 -96
  428. package/src/examples/tdd-orchestrator.ts +0 -65
  429. package/src/examples/test-cycle-workflow.ts +0 -64
  430. package/src/index.ts +0 -140
  431. package/src/reflection/reflection.ts +0 -407
  432. package/src/tools/index.ts +0 -36
  433. package/src/tools/introspection.ts +0 -464
  434. package/src/types/agent.ts +0 -90
  435. package/src/types/decorators.ts +0 -25
  436. package/src/types/error-strategy.ts +0 -13
  437. package/src/types/error.ts +0 -20
  438. package/src/types/events.ts +0 -74
  439. package/src/types/index.ts +0 -55
  440. package/src/types/logging.ts +0 -24
  441. package/src/types/observer.ts +0 -18
  442. package/src/types/prompt.ts +0 -40
  443. package/src/types/reflection.ts +0 -117
  444. package/src/types/sdk-primitives.ts +0 -128
  445. package/src/types/workflow-context.ts +0 -163
  446. package/src/types/workflow.ts +0 -37
  447. package/src/utils/id.ts +0 -11
  448. package/src/utils/observable.ts +0 -77
  449. package/tasks.json +0 -0
  450. package/tsconfig.json +0 -22
  451. package/vitest.config.ts +0 -16
@@ -0,0 +1,667 @@
1
+ /**
2
+ * Concurrent Task Failure Scenarios Test Suite
3
+ *
4
+ * Tests the Promise.allSettled implementation in @Task decorator
5
+ * for concurrent execution with various failure scenarios.
6
+ *
7
+ * Validates:
8
+ * - Single child failure in concurrent batch
9
+ * - Multiple children failing concurrently
10
+ * - Mixed success/failure scenarios
11
+ * - All children failing edge case
12
+ * - No orphaned or hanging promises
13
+ * - Error collection correctness
14
+ * - Event emission during failures
15
+ *
16
+ * Related:
17
+ * - S2 Implementation: Promise.allSettled in task.ts (lines 111-120)
18
+ * - Bug: 001_e8e04329daf3 - Concurrent task error collection
19
+ */
20
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
21
+ var useValue = arguments.length > 2;
22
+ for (var i = 0; i < initializers.length; i++) {
23
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
24
+ }
25
+ return useValue ? value : void 0;
26
+ };
27
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
28
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
29
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
30
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
31
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
32
+ var _, done = false;
33
+ for (var i = decorators.length - 1; i >= 0; i--) {
34
+ var context = {};
35
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
36
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
37
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
38
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
39
+ if (kind === "accessor") {
40
+ if (result === void 0) continue;
41
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
42
+ if (_ = accept(result.get)) descriptor.get = _;
43
+ if (_ = accept(result.set)) descriptor.set = _;
44
+ if (_ = accept(result.init)) initializers.unshift(_);
45
+ }
46
+ else if (_ = accept(result)) {
47
+ if (kind === "field") initializers.unshift(_);
48
+ else descriptor[key] = _;
49
+ }
50
+ }
51
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
52
+ done = true;
53
+ };
54
+ import { describe, it, expect } from 'vitest';
55
+ import { Workflow, Task, Step } from '../../index.js';
56
+ describe('@Task decorator concurrent failure scenarios', () => {
57
+ /**
58
+ * Helper to create a child workflow that may fail
59
+ * Pattern from: src/__tests__/adversarial/edge-case.test.ts (lines 146-167)
60
+ */
61
+ function createChildWorkflow(parent, name, shouldFail = false) {
62
+ return new ((() => {
63
+ let _classSuper = Workflow;
64
+ let _instanceExtraInitializers = [];
65
+ let _executeStep_decorators;
66
+ return class extends _classSuper {
67
+ static {
68
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
69
+ _executeStep_decorators = [Step()];
70
+ __esDecorate(this, null, _executeStep_decorators, { kind: "method", name: "executeStep", static: false, private: false, access: { has: obj => "executeStep" in obj, get: obj => obj.executeStep }, metadata: _metadata }, null, _instanceExtraInitializers);
71
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
72
+ }
73
+ constructor(n, p) {
74
+ super(n, p);
75
+ __runInitializers(this, _instanceExtraInitializers);
76
+ }
77
+ async executeStep() {
78
+ if (shouldFail) {
79
+ throw new Error(`${name} failed`);
80
+ }
81
+ return `${name} succeeded`;
82
+ }
83
+ async run() {
84
+ return this.executeStep();
85
+ }
86
+ };
87
+ })())(name, parent);
88
+ }
89
+ /**
90
+ * Helper to setup event observer for event collection
91
+ * Pattern from: src/__tests__/adversarial/observer-propagation.test.ts (lines 42-49)
92
+ */
93
+ function setupEventObserver(workflow) {
94
+ const events = [];
95
+ workflow.addObserver({
96
+ onLog: () => { },
97
+ onEvent: (e) => events.push(e),
98
+ onStateUpdated: () => { },
99
+ onTreeChanged: () => { },
100
+ });
101
+ return events;
102
+ }
103
+ describe('Single child failure scenarios', () => {
104
+ it('should complete all siblings when one child fails', async () => {
105
+ // ARRANGE: Create parent with 4 children, child[1] will fail
106
+ let ParentWorkflow = (() => {
107
+ let _classSuper = Workflow;
108
+ let _instanceExtraInitializers = [];
109
+ let _spawnChildren_decorators;
110
+ return class ParentWorkflow extends _classSuper {
111
+ static {
112
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
113
+ _spawnChildren_decorators = [Task({ concurrent: true })];
114
+ __esDecorate(this, null, _spawnChildren_decorators, { kind: "method", name: "spawnChildren", static: false, private: false, access: { has: obj => "spawnChildren" in obj, get: obj => obj.spawnChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
115
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
116
+ }
117
+ async spawnChildren() {
118
+ return [
119
+ createChildWorkflow(this, 'Child-0', false),
120
+ createChildWorkflow(this, 'Child-1', true), // Will fail
121
+ createChildWorkflow(this, 'Child-2', false),
122
+ createChildWorkflow(this, 'Child-3', false),
123
+ ];
124
+ }
125
+ async run() {
126
+ try {
127
+ await this.spawnChildren();
128
+ }
129
+ catch (err) {
130
+ // Expected - first error thrown after all complete
131
+ }
132
+ }
133
+ constructor() {
134
+ super(...arguments);
135
+ __runInitializers(this, _instanceExtraInitializers);
136
+ }
137
+ };
138
+ })();
139
+ const parent = new ParentWorkflow('Parent');
140
+ // ACT: Run parent (children run concurrently)
141
+ await parent.run();
142
+ // ASSERT: All 4 children attached (Promise.allSettled completed all)
143
+ expect(parent.children.length).toBe(4);
144
+ // ASSERT: Verify child names match what we created
145
+ const childNames = parent.children.map((c) => c.node.name);
146
+ expect(childNames).toContain('Child-0');
147
+ expect(childNames).toContain('Child-1');
148
+ expect(childNames).toContain('Child-2');
149
+ expect(childNames).toContain('Child-3');
150
+ });
151
+ });
152
+ describe('Multiple concurrent failures', () => {
153
+ it('should collect all errors when multiple children fail concurrently', async () => {
154
+ // ARRANGE: Create parent with 6 children, 3 will fail
155
+ let ParentWorkflow = (() => {
156
+ let _classSuper = Workflow;
157
+ let _instanceExtraInitializers = [];
158
+ let _spawnChildren_decorators;
159
+ return class ParentWorkflow extends _classSuper {
160
+ static {
161
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
162
+ _spawnChildren_decorators = [Task({ concurrent: true })];
163
+ __esDecorate(this, null, _spawnChildren_decorators, { kind: "method", name: "spawnChildren", static: false, private: false, access: { has: obj => "spawnChildren" in obj, get: obj => obj.spawnChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
164
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
165
+ }
166
+ async spawnChildren() {
167
+ return [
168
+ createChildWorkflow(this, 'Alpha', false),
169
+ createChildWorkflow(this, 'Beta', true), // Will fail
170
+ createChildWorkflow(this, 'Gamma', false),
171
+ createChildWorkflow(this, 'Delta', true), // Will fail
172
+ createChildWorkflow(this, 'Epsilon', false),
173
+ createChildWorkflow(this, 'Zeta', true), // Will fail
174
+ ];
175
+ }
176
+ async run() {
177
+ try {
178
+ await this.spawnChildren();
179
+ }
180
+ catch (err) {
181
+ // Expected
182
+ }
183
+ }
184
+ constructor() {
185
+ super(...arguments);
186
+ __runInitializers(this, _instanceExtraInitializers);
187
+ }
188
+ };
189
+ })();
190
+ const parent = new ParentWorkflow('Parent');
191
+ // ACT
192
+ await parent.run();
193
+ // ASSERT: All 6 children attached (Promise.allSettled completed all)
194
+ expect(parent.children.length).toBe(6);
195
+ // ASSERT: Verify expected child names are present
196
+ const childNames = parent.children.map((c) => c.node.name);
197
+ expect(childNames).toContain('Alpha');
198
+ expect(childNames).toContain('Beta');
199
+ expect(childNames).toContain('Gamma');
200
+ expect(childNames).toContain('Delta');
201
+ expect(childNames).toContain('Epsilon');
202
+ expect(childNames).toContain('Zeta');
203
+ });
204
+ it('should preserve error context for each failure', async () => {
205
+ // ARRANGE: Create parent with multiple failing children
206
+ let ParentWorkflow = (() => {
207
+ let _classSuper = Workflow;
208
+ let _instanceExtraInitializers = [];
209
+ let _spawnChildren_decorators;
210
+ return class ParentWorkflow extends _classSuper {
211
+ static {
212
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
213
+ _spawnChildren_decorators = [Task({ concurrent: true })];
214
+ __esDecorate(this, null, _spawnChildren_decorators, { kind: "method", name: "spawnChildren", static: false, private: false, access: { has: obj => "spawnChildren" in obj, get: obj => obj.spawnChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
215
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
216
+ }
217
+ async spawnChildren() {
218
+ return [
219
+ createChildWorkflow(this, 'Alpha', true),
220
+ createChildWorkflow(this, 'Beta', true),
221
+ createChildWorkflow(this, 'Gamma', true),
222
+ ];
223
+ }
224
+ async run() {
225
+ try {
226
+ await this.spawnChildren();
227
+ }
228
+ catch (err) {
229
+ // Expected
230
+ }
231
+ }
232
+ constructor() {
233
+ super(...arguments);
234
+ __runInitializers(this, _instanceExtraInitializers);
235
+ }
236
+ };
237
+ })();
238
+ const parent = new ParentWorkflow('Parent');
239
+ const events = setupEventObserver(parent);
240
+ // ACT
241
+ await parent.run();
242
+ // ASSERT: Error events emitted for all failures
243
+ const errorEvents = events.filter((e) => e.type === 'error');
244
+ expect(errorEvents.length).toBeGreaterThanOrEqual(3);
245
+ // ASSERT: Each error event has correct structure
246
+ errorEvents.forEach((event) => {
247
+ expect(event.type).toBe('error');
248
+ if (event.type === 'error') {
249
+ expect(event.error).toBeDefined();
250
+ expect(event.error.workflowId).toBeDefined();
251
+ expect(event.error.message).toBeDefined();
252
+ expect(Array.isArray(event.error.logs)).toBe(true);
253
+ }
254
+ });
255
+ // ASSERT: All three distinct error messages captured
256
+ const errorMessages = errorEvents
257
+ .filter((e) => e.type === 'error')
258
+ .map((e) => e.error.message);
259
+ expect(errorMessages).toContain('Alpha failed');
260
+ expect(errorMessages).toContain('Beta failed');
261
+ expect(errorMessages).toContain('Gamma failed');
262
+ });
263
+ });
264
+ describe('Mixed success/failure scenarios', () => {
265
+ it('should complete successful workflows despite failures', async () => {
266
+ // ARRANGE: Create parent with mixed success/failure children
267
+ let ParentWorkflow = (() => {
268
+ let _classSuper = Workflow;
269
+ let _instanceExtraInitializers = [];
270
+ let _spawnChildren_decorators;
271
+ return class ParentWorkflow extends _classSuper {
272
+ static {
273
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
274
+ _spawnChildren_decorators = [Task({ concurrent: true })];
275
+ __esDecorate(this, null, _spawnChildren_decorators, { kind: "method", name: "spawnChildren", static: false, private: false, access: { has: obj => "spawnChildren" in obj, get: obj => obj.spawnChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
276
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
277
+ }
278
+ async spawnChildren() {
279
+ return [
280
+ createChildWorkflow(this, 'Success-1', false),
281
+ createChildWorkflow(this, 'Fail-1', true),
282
+ createChildWorkflow(this, 'Success-2', false),
283
+ createChildWorkflow(this, 'Fail-2', true),
284
+ createChildWorkflow(this, 'Success-3', false),
285
+ ];
286
+ }
287
+ async run() {
288
+ try {
289
+ await this.spawnChildren();
290
+ }
291
+ catch (err) {
292
+ // Expected
293
+ }
294
+ }
295
+ constructor() {
296
+ super(...arguments);
297
+ __runInitializers(this, _instanceExtraInitializers);
298
+ }
299
+ };
300
+ })();
301
+ const parent = new ParentWorkflow('Parent');
302
+ // ACT
303
+ await parent.run();
304
+ // ASSERT: All 5 children attached (Promise.allSettled completed all)
305
+ expect(parent.children.length).toBe(5);
306
+ // ASSERT: Verify all expected children are present
307
+ const childNames = parent.children.map((c) => c.node.name);
308
+ expect(childNames).toContain('Success-1');
309
+ expect(childNames).toContain('Fail-1');
310
+ expect(childNames).toContain('Success-2');
311
+ expect(childNames).toContain('Fail-2');
312
+ expect(childNames).toContain('Success-3');
313
+ });
314
+ it('should ensure no orphaned workflows in mixed scenario', async () => {
315
+ // ARRANGE: Track all completions
316
+ const completedWorkflows = new Set();
317
+ let ParentWorkflow = (() => {
318
+ let _classSuper = Workflow;
319
+ let _instanceExtraInitializers = [];
320
+ let _spawnChildren_decorators;
321
+ return class ParentWorkflow extends _classSuper {
322
+ static {
323
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
324
+ _spawnChildren_decorators = [Task({ concurrent: true })];
325
+ __esDecorate(this, null, _spawnChildren_decorators, { kind: "method", name: "spawnChildren", static: false, private: false, access: { has: obj => "spawnChildren" in obj, get: obj => obj.spawnChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
326
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
327
+ }
328
+ async spawnChildren() {
329
+ const children = [
330
+ createChildWorkflow(this, 'Alpha', false),
331
+ createChildWorkflow(this, 'Beta', true),
332
+ createChildWorkflow(this, 'Gamma', false),
333
+ createChildWorkflow(this, 'Delta', false),
334
+ createChildWorkflow(this, 'Epsilon', true),
335
+ ];
336
+ // Track completion for all children
337
+ children.forEach((child) => {
338
+ child.run().then(() => completedWorkflows.add(child.id), () => completedWorkflows.add(child.id));
339
+ });
340
+ return children;
341
+ }
342
+ async run() {
343
+ try {
344
+ await this.spawnChildren();
345
+ }
346
+ catch (err) {
347
+ // Expected
348
+ }
349
+ }
350
+ constructor() {
351
+ super(...arguments);
352
+ __runInitializers(this, _instanceExtraInitializers);
353
+ }
354
+ };
355
+ })();
356
+ const parent = new ParentWorkflow('Parent');
357
+ // ACT
358
+ await parent.run();
359
+ // ASSERT: All 5 workflows accounted for (no orphans)
360
+ expect(completedWorkflows.size).toBe(5);
361
+ expect(parent.children.length).toBe(5);
362
+ });
363
+ });
364
+ describe('All children failing', () => {
365
+ it('should handle edge case of all children failing', async () => {
366
+ // ARRANGE: All children will fail
367
+ let ParentWorkflow = (() => {
368
+ let _classSuper = Workflow;
369
+ let _instanceExtraInitializers = [];
370
+ let _spawnChildren_decorators;
371
+ return class ParentWorkflow extends _classSuper {
372
+ static {
373
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
374
+ _spawnChildren_decorators = [Task({ concurrent: true })];
375
+ __esDecorate(this, null, _spawnChildren_decorators, { kind: "method", name: "spawnChildren", static: false, private: false, access: { has: obj => "spawnChildren" in obj, get: obj => obj.spawnChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
376
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
377
+ }
378
+ async spawnChildren() {
379
+ return Array.from({ length: 5 }, (_, i) => createChildWorkflow(this, `FailChild-${i}`, true) // All fail
380
+ );
381
+ }
382
+ async run() {
383
+ try {
384
+ await this.spawnChildren();
385
+ }
386
+ catch (err) {
387
+ // Expected - first error thrown
388
+ }
389
+ }
390
+ constructor() {
391
+ super(...arguments);
392
+ __runInitializers(this, _instanceExtraInitializers);
393
+ }
394
+ };
395
+ })();
396
+ const parent = new ParentWorkflow('Parent');
397
+ const events = setupEventObserver(parent);
398
+ // ACT
399
+ await parent.run();
400
+ // ASSERT: All 5 children attached
401
+ expect(parent.children.length).toBe(5);
402
+ // ASSERT: Error events emitted for all failures
403
+ const errorEvents = events.filter((e) => e.type === 'error');
404
+ expect(errorEvents.length).toBeGreaterThanOrEqual(5);
405
+ // ASSERT: Each failure has distinct error message
406
+ const errorMessages = errorEvents
407
+ .filter((e) => e.type === 'error')
408
+ .map((e) => e.error.message);
409
+ for (let i = 0; i < 5; i++) {
410
+ expect(errorMessages).toContain(`FailChild-${i} failed`);
411
+ }
412
+ });
413
+ });
414
+ describe('No orphaned workflows', () => {
415
+ it('should verify all workflows complete with no hanging promises', async () => {
416
+ // ARRANGE: Track all completions
417
+ const completedWorkflows = new Set();
418
+ let ParentWorkflow = (() => {
419
+ let _classSuper = Workflow;
420
+ let _instanceExtraInitializers = [];
421
+ let _spawnChildren_decorators;
422
+ return class ParentWorkflow extends _classSuper {
423
+ static {
424
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
425
+ _spawnChildren_decorators = [Task({ concurrent: true })];
426
+ __esDecorate(this, null, _spawnChildren_decorators, { kind: "method", name: "spawnChildren", static: false, private: false, access: { has: obj => "spawnChildren" in obj, get: obj => obj.spawnChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
427
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
428
+ }
429
+ async spawnChildren() {
430
+ const children = Array.from({ length: 10 }, (_, i) => createChildWorkflow(this, `Child-${i}`, Math.random() < 0.3 // 30% failure rate
431
+ ));
432
+ // Track completion for all children
433
+ children.forEach((child) => {
434
+ child.run().then(() => completedWorkflows.add(child.id), () => completedWorkflows.add(child.id));
435
+ });
436
+ return children;
437
+ }
438
+ async run() {
439
+ try {
440
+ await this.spawnChildren();
441
+ }
442
+ catch (err) {
443
+ // Expected
444
+ }
445
+ }
446
+ constructor() {
447
+ super(...arguments);
448
+ __runInitializers(this, _instanceExtraInitializers);
449
+ }
450
+ };
451
+ })();
452
+ const parent = new ParentWorkflow('Parent');
453
+ // ACT: Run with timeout to detect hanging promises
454
+ const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout: workflows hung')), 5000));
455
+ const runPromise = parent.run();
456
+ await Promise.race([runPromise, timeoutPromise]);
457
+ // ASSERT: All 10 workflows accounted for (no orphans)
458
+ expect(completedWorkflows.size).toBe(10);
459
+ });
460
+ });
461
+ describe('Event emission verification', () => {
462
+ it('should emit error events for all failing workflows', async () => {
463
+ // ARRANGE: Setup event observer
464
+ let ParentWorkflow = (() => {
465
+ let _classSuper = Workflow;
466
+ let _instanceExtraInitializers = [];
467
+ let _spawnChildren_decorators;
468
+ return class ParentWorkflow extends _classSuper {
469
+ static {
470
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
471
+ _spawnChildren_decorators = [Task({ concurrent: true })];
472
+ __esDecorate(this, null, _spawnChildren_decorators, { kind: "method", name: "spawnChildren", static: false, private: false, access: { has: obj => "spawnChildren" in obj, get: obj => obj.spawnChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
473
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
474
+ }
475
+ async spawnChildren() {
476
+ return [
477
+ createChildWorkflow(this, 'Good', false),
478
+ createChildWorkflow(this, 'Bad1', true),
479
+ createChildWorkflow(this, 'Bad2', true),
480
+ ];
481
+ }
482
+ async run() {
483
+ try {
484
+ await this.spawnChildren();
485
+ }
486
+ catch (err) {
487
+ // Expected
488
+ }
489
+ }
490
+ constructor() {
491
+ super(...arguments);
492
+ __runInitializers(this, _instanceExtraInitializers);
493
+ }
494
+ };
495
+ })();
496
+ const parent = new ParentWorkflow('Parent');
497
+ const events = [];
498
+ // CRITICAL: Add observer to root workflow
499
+ parent.addObserver({
500
+ onLog: () => { },
501
+ onEvent: (e) => events.push(e),
502
+ onStateUpdated: () => { },
503
+ onTreeChanged: () => { },
504
+ });
505
+ // ACT
506
+ await parent.run();
507
+ // ASSERT: Error events emitted for both failures
508
+ const errorEvents = events.filter((e) => e.type === 'error');
509
+ expect(errorEvents.length).toBeGreaterThanOrEqual(2);
510
+ // ASSERT: Each error event has correct structure
511
+ errorEvents.forEach((event) => {
512
+ expect(event.type).toBe('error');
513
+ if (event.type === 'error') {
514
+ expect(event.error).toBeDefined();
515
+ expect(event.error.workflowId).toBeDefined();
516
+ expect(event.error.message).toBeDefined();
517
+ expect(Array.isArray(event.error.logs)).toBe(true);
518
+ }
519
+ });
520
+ // ASSERT: Verify expected error messages
521
+ const errorMessages = errorEvents
522
+ .filter((e) => e.type === 'error')
523
+ .map((e) => e.error.message);
524
+ expect(errorMessages).toContain('Bad1 failed');
525
+ expect(errorMessages).toContain('Bad2 failed');
526
+ });
527
+ it('should capture logs from both successful and failed workflows', async () => {
528
+ // ARRANGE: Create workflows that log before completion/failure
529
+ let ChildWorkflow = (() => {
530
+ let _classSuper = Workflow;
531
+ let _instanceExtraInitializers = [];
532
+ let _executeStep_decorators;
533
+ return class ChildWorkflow extends _classSuper {
534
+ static {
535
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
536
+ _executeStep_decorators = [Step()];
537
+ __esDecorate(this, null, _executeStep_decorators, { kind: "method", name: "executeStep", static: false, private: false, access: { has: obj => "executeStep" in obj, get: obj => obj.executeStep }, metadata: _metadata }, null, _instanceExtraInitializers);
538
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
539
+ }
540
+ shouldFail = __runInitializers(this, _instanceExtraInitializers);
541
+ constructor(name, parent, shouldFail) {
542
+ super(name, parent);
543
+ this.shouldFail = shouldFail;
544
+ }
545
+ async executeStep() {
546
+ this.logger.info(`${this.node.name} is running`);
547
+ if (this.shouldFail) {
548
+ this.logger.error(`${this.node.name} is about to fail`);
549
+ throw new Error(`${this.node.name} failed`);
550
+ }
551
+ this.logger.info(`${this.node.name} completed successfully`);
552
+ return `${this.node.name} succeeded`;
553
+ }
554
+ async run() {
555
+ return this.executeStep();
556
+ }
557
+ };
558
+ })();
559
+ let ParentWorkflow = (() => {
560
+ let _classSuper = Workflow;
561
+ let _instanceExtraInitializers = [];
562
+ let _spawnChildren_decorators;
563
+ return class ParentWorkflow extends _classSuper {
564
+ static {
565
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
566
+ _spawnChildren_decorators = [Task({ concurrent: true })];
567
+ __esDecorate(this, null, _spawnChildren_decorators, { kind: "method", name: "spawnChildren", static: false, private: false, access: { has: obj => "spawnChildren" in obj, get: obj => obj.spawnChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
568
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
569
+ }
570
+ async spawnChildren() {
571
+ return [
572
+ new ChildWorkflow('SuccessChild', this, false),
573
+ new ChildWorkflow('FailChild', this, true),
574
+ ];
575
+ }
576
+ async run() {
577
+ try {
578
+ await this.spawnChildren();
579
+ }
580
+ catch (err) {
581
+ // Expected
582
+ }
583
+ }
584
+ constructor() {
585
+ super(...arguments);
586
+ __runInitializers(this, _instanceExtraInitializers);
587
+ }
588
+ };
589
+ })();
590
+ const parent = new ParentWorkflow('Parent');
591
+ const allLogs = [];
592
+ parent.addObserver({
593
+ onLog: (entry) => allLogs.push(entry.message),
594
+ onEvent: () => { },
595
+ onStateUpdated: () => { },
596
+ onTreeChanged: () => { },
597
+ });
598
+ // ACT
599
+ await parent.run();
600
+ // ASSERT: Logs from both children captured
601
+ expect(allLogs.length).toBeGreaterThan(0);
602
+ // ASSERT: Success child logs present
603
+ expect(allLogs.some((msg) => msg.includes('SuccessChild is running'))).toBe(true);
604
+ expect(allLogs.some((msg) => msg.includes('SuccessChild completed successfully'))).toBe(true);
605
+ // ASSERT: Fail child logs present
606
+ expect(allLogs.some((msg) => msg.includes('FailChild is running'))).toBe(true);
607
+ expect(allLogs.some((msg) => msg.includes('FailChild is about to fail'))).toBe(true);
608
+ });
609
+ });
610
+ describe('Error collection correctness', () => {
611
+ it('should verify error messages are preserved correctly', async () => {
612
+ // ARRANGE: Create children with specific error messages
613
+ let ParentWorkflow = (() => {
614
+ let _classSuper = Workflow;
615
+ let _instanceExtraInitializers = [];
616
+ let _spawnChildren_decorators;
617
+ return class ParentWorkflow extends _classSuper {
618
+ static {
619
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
620
+ _spawnChildren_decorators = [Task({ concurrent: true })];
621
+ __esDecorate(this, null, _spawnChildren_decorators, { kind: "method", name: "spawnChildren", static: false, private: false, access: { has: obj => "spawnChildren" in obj, get: obj => obj.spawnChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
622
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
623
+ }
624
+ async spawnChildren() {
625
+ return [
626
+ createChildWorkflow(this, 'Task-Alpha', false),
627
+ createChildWorkflow(this, 'Task-Beta', true), // Will fail with "Task-Beta failed"
628
+ createChildWorkflow(this, 'Task-Gamma', false),
629
+ ];
630
+ }
631
+ async run() {
632
+ try {
633
+ await this.spawnChildren();
634
+ }
635
+ catch (err) {
636
+ // Expected - error should be thrown
637
+ return err;
638
+ }
639
+ }
640
+ constructor() {
641
+ super(...arguments);
642
+ __runInitializers(this, _instanceExtraInitializers);
643
+ }
644
+ };
645
+ })();
646
+ const parent = new ParentWorkflow('Parent');
647
+ const events = setupEventObserver(parent);
648
+ // ACT
649
+ const thrownError = await parent.run();
650
+ // ASSERT: Error was thrown
651
+ expect(thrownError).toBeDefined();
652
+ // ASSERT: Error message is preserved (WorkflowError wraps the original)
653
+ expect(thrownError.message).toContain('Task-Beta failed');
654
+ // ASSERT: Error events captured with correct messages
655
+ const errorEvents = events.filter((e) => e.type === 'error');
656
+ expect(errorEvents.length).toBeGreaterThanOrEqual(1);
657
+ const matchingError = errorEvents.find((e) => {
658
+ if (e.type === 'error') {
659
+ return e.error.message.includes('Task-Beta');
660
+ }
661
+ return false;
662
+ });
663
+ expect(matchingError).toBeDefined();
664
+ });
665
+ });
666
+ });
667
+ //# sourceMappingURL=concurrent-task-failures.test.js.map