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,857 @@
1
+ /**
2
+ * Adversarial and Edge Case Tests for Hierarchical Workflow Engine
3
+ * These tests explore potential bugs, edge cases, and PRD compliance issues
4
+ */
5
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
6
+ var useValue = arguments.length > 2;
7
+ for (var i = 0; i < initializers.length; i++) {
8
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
9
+ }
10
+ return useValue ? value : void 0;
11
+ };
12
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
13
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
14
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
15
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
16
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
17
+ var _, done = false;
18
+ for (var i = decorators.length - 1; i >= 0; i--) {
19
+ var context = {};
20
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
21
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
22
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
23
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
24
+ if (kind === "accessor") {
25
+ if (result === void 0) continue;
26
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
27
+ if (_ = accept(result.get)) descriptor.get = _;
28
+ if (_ = accept(result.set)) descriptor.set = _;
29
+ if (_ = accept(result.init)) initializers.unshift(_);
30
+ }
31
+ else if (_ = accept(result)) {
32
+ if (kind === "field") initializers.unshift(_);
33
+ else descriptor[key] = _;
34
+ }
35
+ }
36
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
37
+ done = true;
38
+ };
39
+ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
40
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
41
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
42
+ };
43
+ import { describe, it, expect } from 'vitest';
44
+ import { Workflow, Step, Task, ObservedState } from '../../index.js';
45
+ import { WorkflowTreeDebugger } from '../../debugger/tree-debugger.js';
46
+ describe('Adversarial Edge Case Tests', () => {
47
+ describe('PRD Requirement: Step Decorator Defaults', () => {
48
+ /**
49
+ * PRD Section 8.1 specifies @Step options with defaults
50
+ * - trackTiming should be true by default (mentioned in skeleton but not explicit)
51
+ */
52
+ it('should track timing by default when trackTiming is not specified', async () => {
53
+ let stepEndEmitted = false;
54
+ let durationEmitted;
55
+ let TestWorkflow = (() => {
56
+ let _classSuper = Workflow;
57
+ let _instanceExtraInitializers = [];
58
+ let _testStep_decorators;
59
+ return class TestWorkflow extends _classSuper {
60
+ static {
61
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
62
+ _testStep_decorators = [Step()];
63
+ __esDecorate(this, null, _testStep_decorators, { kind: "method", name: "testStep", static: false, private: false, access: { has: obj => "testStep" in obj, get: obj => obj.testStep }, metadata: _metadata }, null, _instanceExtraInitializers);
64
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
65
+ }
66
+ async testStep() {
67
+ return 'done';
68
+ }
69
+ async run() {
70
+ return this.testStep();
71
+ }
72
+ constructor() {
73
+ super(...arguments);
74
+ __runInitializers(this, _instanceExtraInitializers);
75
+ }
76
+ };
77
+ })();
78
+ const workflow = new TestWorkflow();
79
+ const debuggerInstance = new WorkflowTreeDebugger(workflow);
80
+ // Subscribe to events correctly
81
+ debuggerInstance.events.subscribe({
82
+ next: (event) => {
83
+ if (event.type === 'stepEnd') {
84
+ stepEndEmitted = true;
85
+ durationEmitted = event.duration;
86
+ }
87
+ },
88
+ });
89
+ await workflow.run();
90
+ expect(stepEndEmitted).toBe(true);
91
+ expect(typeof durationEmitted).toBe('number');
92
+ expect(durationEmitted).toBeGreaterThanOrEqual(0);
93
+ });
94
+ it('should NOT track timing when explicitly set to false', async () => {
95
+ let stepEndEmitted = false;
96
+ let TestWorkflow = (() => {
97
+ let _classSuper = Workflow;
98
+ let _instanceExtraInitializers = [];
99
+ let _testStep_decorators;
100
+ return class TestWorkflow extends _classSuper {
101
+ static {
102
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
103
+ _testStep_decorators = [Step({ trackTiming: false })];
104
+ __esDecorate(this, null, _testStep_decorators, { kind: "method", name: "testStep", static: false, private: false, access: { has: obj => "testStep" in obj, get: obj => obj.testStep }, metadata: _metadata }, null, _instanceExtraInitializers);
105
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
106
+ }
107
+ async testStep() {
108
+ return 'done';
109
+ }
110
+ async run() {
111
+ return this.testStep();
112
+ }
113
+ constructor() {
114
+ super(...arguments);
115
+ __runInitializers(this, _instanceExtraInitializers);
116
+ }
117
+ };
118
+ })();
119
+ const workflow = new TestWorkflow();
120
+ const debuggerInstance = new WorkflowTreeDebugger(workflow);
121
+ debuggerInstance.events.subscribe({
122
+ next: (event) => {
123
+ if (event.type === 'stepEnd') {
124
+ stepEndEmitted = true;
125
+ }
126
+ },
127
+ });
128
+ await workflow.run();
129
+ // stepEnd should NOT be emitted when trackTiming is false
130
+ // This is based on the implementation: trackTiming !== false controls emission
131
+ expect(stepEndEmitted).toBe(false);
132
+ });
133
+ });
134
+ describe('PRD Requirement: WorkflowLogger.child() Behavior', () => {
135
+ /**
136
+ * PRD Section 12.1 shows WorkflowLogger.child(meta: Partial<LogEntry>)
137
+ * But implementation shows: child(parentLogId: string)
138
+ * This is a mismatch between PRD and implementation
139
+ */
140
+ it('should have child() method that accepts parentLogId', async () => {
141
+ class TestWorkflow extends Workflow {
142
+ async run() {
143
+ // Access logger to verify child method exists
144
+ const childLogger = this.logger.child('parent-id-123');
145
+ expect(childLogger).toBeDefined();
146
+ }
147
+ }
148
+ const workflow = new TestWorkflow();
149
+ await workflow.run();
150
+ });
151
+ });
152
+ describe('Edge Case: Empty and Null Values', () => {
153
+ it('should reject empty string workflow name', async () => {
154
+ class TestWorkflow extends Workflow {
155
+ async run() {
156
+ return 'done';
157
+ }
158
+ }
159
+ expect(() => new TestWorkflow('')).toThrow('Workflow name cannot be empty or whitespace only');
160
+ });
161
+ it('should handle null and undefined observed state values', async () => {
162
+ let TestWorkflow = (() => {
163
+ let _classSuper = Workflow;
164
+ let _nullableValue_decorators;
165
+ let _nullableValue_initializers = [];
166
+ let _nullableValue_extraInitializers = [];
167
+ let _undefinedValue_decorators;
168
+ let _undefinedValue_initializers = [];
169
+ let _undefinedValue_extraInitializers = [];
170
+ let _emptyValue_decorators;
171
+ let _emptyValue_initializers = [];
172
+ let _emptyValue_extraInitializers = [];
173
+ return class TestWorkflow extends _classSuper {
174
+ static {
175
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
176
+ _nullableValue_decorators = [ObservedState()];
177
+ _undefinedValue_decorators = [ObservedState()];
178
+ _emptyValue_decorators = [ObservedState()];
179
+ __esDecorate(null, null, _nullableValue_decorators, { kind: "field", name: "nullableValue", static: false, private: false, access: { has: obj => "nullableValue" in obj, get: obj => obj.nullableValue, set: (obj, value) => { obj.nullableValue = value; } }, metadata: _metadata }, _nullableValue_initializers, _nullableValue_extraInitializers);
180
+ __esDecorate(null, null, _undefinedValue_decorators, { kind: "field", name: "undefinedValue", static: false, private: false, access: { has: obj => "undefinedValue" in obj, get: obj => obj.undefinedValue, set: (obj, value) => { obj.undefinedValue = value; } }, metadata: _metadata }, _undefinedValue_initializers, _undefinedValue_extraInitializers);
181
+ __esDecorate(null, null, _emptyValue_decorators, { kind: "field", name: "emptyValue", static: false, private: false, access: { has: obj => "emptyValue" in obj, get: obj => obj.emptyValue, set: (obj, value) => { obj.emptyValue = value; } }, metadata: _metadata }, _emptyValue_initializers, _emptyValue_extraInitializers);
182
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
183
+ }
184
+ nullableValue = __runInitializers(this, _nullableValue_initializers, null);
185
+ undefinedValue = (__runInitializers(this, _nullableValue_extraInitializers), __runInitializers(this, _undefinedValue_initializers, undefined));
186
+ emptyValue = (__runInitializers(this, _undefinedValue_extraInitializers), __runInitializers(this, _emptyValue_initializers, ''));
187
+ async run() {
188
+ this.snapshotState();
189
+ return this.node.stateSnapshot;
190
+ }
191
+ constructor() {
192
+ super(...arguments);
193
+ __runInitializers(this, _emptyValue_extraInitializers);
194
+ }
195
+ };
196
+ })();
197
+ const workflow = new TestWorkflow();
198
+ const snapshot = await workflow.run();
199
+ expect(snapshot).toHaveProperty('nullableValue', null);
200
+ expect(snapshot).toHaveProperty('undefinedValue', undefined);
201
+ expect(snapshot).toHaveProperty('emptyValue', '');
202
+ });
203
+ it('should handle empty array from @Task', async () => {
204
+ class ChildWorkflow extends Workflow {
205
+ async run() {
206
+ return 'child';
207
+ }
208
+ }
209
+ let ParentWorkflow = (() => {
210
+ let _classSuper = Workflow;
211
+ let _instanceExtraInitializers = [];
212
+ let _returnsEmpty_decorators;
213
+ return class ParentWorkflow extends _classSuper {
214
+ static {
215
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
216
+ _returnsEmpty_decorators = [Task()];
217
+ __esDecorate(this, null, _returnsEmpty_decorators, { kind: "method", name: "returnsEmpty", static: false, private: false, access: { has: obj => "returnsEmpty" in obj, get: obj => obj.returnsEmpty }, metadata: _metadata }, null, _instanceExtraInitializers);
218
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
219
+ }
220
+ async returnsEmpty() {
221
+ return [];
222
+ }
223
+ async run() {
224
+ return this.returnsEmpty();
225
+ }
226
+ constructor() {
227
+ super(...arguments);
228
+ __runInitializers(this, _instanceExtraInitializers);
229
+ }
230
+ };
231
+ })();
232
+ const workflow = new ParentWorkflow();
233
+ const result = await workflow.run();
234
+ expect(Array.isArray(result)).toBe(true);
235
+ expect(result.length).toBe(0);
236
+ });
237
+ it('should handle null return from @Task', async () => {
238
+ let ParentWorkflow = (() => {
239
+ let _classSuper = Workflow;
240
+ let _instanceExtraInitializers = [];
241
+ let _returnsNull_decorators;
242
+ return class ParentWorkflow extends _classSuper {
243
+ static {
244
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
245
+ _returnsNull_decorators = [Task()];
246
+ __esDecorate(this, null, _returnsNull_decorators, { kind: "method", name: "returnsNull", static: false, private: false, access: { has: obj => "returnsNull" in obj, get: obj => obj.returnsNull }, metadata: _metadata }, null, _instanceExtraInitializers);
247
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
248
+ }
249
+ async returnsNull() {
250
+ return null;
251
+ }
252
+ async run() {
253
+ return this.returnsNull();
254
+ }
255
+ constructor() {
256
+ super(...arguments);
257
+ __runInitializers(this, _instanceExtraInitializers);
258
+ }
259
+ };
260
+ })();
261
+ const workflow = new ParentWorkflow();
262
+ const result = await workflow.run();
263
+ expect(result).toBe(null);
264
+ });
265
+ it('should handle undefined return from @Task', async () => {
266
+ let ParentWorkflow = (() => {
267
+ let _classSuper = Workflow;
268
+ let _instanceExtraInitializers = [];
269
+ let _returnsUndefined_decorators;
270
+ return class ParentWorkflow extends _classSuper {
271
+ static {
272
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
273
+ _returnsUndefined_decorators = [Task()];
274
+ __esDecorate(this, null, _returnsUndefined_decorators, { kind: "method", name: "returnsUndefined", static: false, private: false, access: { has: obj => "returnsUndefined" in obj, get: obj => obj.returnsUndefined }, metadata: _metadata }, null, _instanceExtraInitializers);
275
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
276
+ }
277
+ async returnsUndefined() {
278
+ return undefined;
279
+ }
280
+ async run() {
281
+ return this.returnsUndefined();
282
+ }
283
+ constructor() {
284
+ super(...arguments);
285
+ __runInitializers(this, _instanceExtraInitializers);
286
+ }
287
+ };
288
+ })();
289
+ const workflow = new ParentWorkflow();
290
+ const result = await workflow.run();
291
+ expect(result).toBe(undefined);
292
+ });
293
+ });
294
+ describe('Edge Case: Unicode and Special Characters', () => {
295
+ it('should handle unicode in workflow names', async () => {
296
+ class TestWorkflow extends Workflow {
297
+ async run() {
298
+ return 'done';
299
+ }
300
+ }
301
+ const unicodeNames = [
302
+ '🚀 Rocket',
303
+ '测试工作流',
304
+ 'العملية',
305
+ '🎯Target',
306
+ ];
307
+ for (const name of unicodeNames) {
308
+ const workflow = new TestWorkflow(name);
309
+ expect(workflow.node.name).toBe(name);
310
+ await workflow.run();
311
+ }
312
+ });
313
+ it('should handle unicode in log messages', async () => {
314
+ class TestWorkflow extends Workflow {
315
+ async run() {
316
+ this.logger.info('测试消息 🚀');
317
+ this.logger.warn('⚠️ Warning');
318
+ this.logger.error('❌ Error with emoji');
319
+ }
320
+ }
321
+ const workflow = new TestWorkflow();
322
+ await workflow.run();
323
+ expect(workflow.node.logs.length).toBe(3);
324
+ expect(workflow.node.logs[0].message).toBe('测试消息 🚀');
325
+ });
326
+ it('should handle unicode in observed state values', async () => {
327
+ let TestWorkflow = (() => {
328
+ let _classSuper = Workflow;
329
+ let _unicodeField_decorators;
330
+ let _unicodeField_initializers = [];
331
+ let _unicodeField_extraInitializers = [];
332
+ return class TestWorkflow extends _classSuper {
333
+ static {
334
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
335
+ _unicodeField_decorators = [ObservedState()];
336
+ __esDecorate(null, null, _unicodeField_decorators, { kind: "field", name: "unicodeField", static: false, private: false, access: { has: obj => "unicodeField" in obj, get: obj => obj.unicodeField, set: (obj, value) => { obj.unicodeField = value; } }, metadata: _metadata }, _unicodeField_initializers, _unicodeField_extraInitializers);
337
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
338
+ }
339
+ unicodeField = __runInitializers(this, _unicodeField_initializers, '测试 🎯');
340
+ async run() {
341
+ this.snapshotState();
342
+ return this.node.stateSnapshot;
343
+ }
344
+ constructor() {
345
+ super(...arguments);
346
+ __runInitializers(this, _unicodeField_extraInitializers);
347
+ }
348
+ };
349
+ })();
350
+ const workflow = new TestWorkflow();
351
+ const snapshot = await workflow.run();
352
+ expect(snapshot?.unicodeField).toBe('测试 🎯');
353
+ });
354
+ });
355
+ describe('Edge Case: Deep Hierarchies', () => {
356
+ it('should handle very deep workflow hierarchies', async () => {
357
+ // Create a chain of 100 nested workflows
358
+ let lastWorkflow = null;
359
+ for (let i = 0; i < 100; i++) {
360
+ const name = `Workflow-${i}`;
361
+ const DynamicWorkflow = (() => {
362
+ let _classSuper = Workflow;
363
+ let _instanceExtraInitializers = [];
364
+ let _doWork_decorators;
365
+ return class extends _classSuper {
366
+ static { __setFunctionName(this, "DynamicWorkflow"); }
367
+ static {
368
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
369
+ _doWork_decorators = [Step()];
370
+ __esDecorate(this, null, _doWork_decorators, { kind: "method", name: "doWork", static: false, private: false, access: { has: obj => "doWork" in obj, get: obj => obj.doWork }, metadata: _metadata }, null, _instanceExtraInitializers);
371
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
372
+ }
373
+ async doWork() {
374
+ return `level-${i}`;
375
+ }
376
+ async run() {
377
+ return this.doWork();
378
+ }
379
+ constructor() {
380
+ super(...arguments);
381
+ __runInitializers(this, _instanceExtraInitializers);
382
+ }
383
+ };
384
+ })();
385
+ lastWorkflow = new DynamicWorkflow(name, lastWorkflow);
386
+ }
387
+ await lastWorkflow.run();
388
+ // Verify hierarchy depth
389
+ let depth = 0;
390
+ let current = lastWorkflow;
391
+ while (current.parent) {
392
+ depth++;
393
+ current = current.parent;
394
+ }
395
+ expect(depth).toBe(99);
396
+ });
397
+ it('should handle wide workflow hierarchies (many siblings)', async () => {
398
+ let ChildWorkflow = (() => {
399
+ let _classSuper = Workflow;
400
+ let _instanceExtraInitializers = [];
401
+ let _doWork_decorators;
402
+ return class ChildWorkflow extends _classSuper {
403
+ static {
404
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
405
+ _doWork_decorators = [Step()];
406
+ __esDecorate(this, null, _doWork_decorators, { kind: "method", name: "doWork", static: false, private: false, access: { has: obj => "doWork" in obj, get: obj => obj.doWork }, metadata: _metadata }, null, _instanceExtraInitializers);
407
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
408
+ }
409
+ async doWork() {
410
+ return 'child-work';
411
+ }
412
+ async run() {
413
+ return this.doWork();
414
+ }
415
+ constructor() {
416
+ super(...arguments);
417
+ __runInitializers(this, _instanceExtraInitializers);
418
+ }
419
+ };
420
+ })();
421
+ let ParentWorkflow = (() => {
422
+ let _classSuper = Workflow;
423
+ let _instanceExtraInitializers = [];
424
+ let _spawnMany_decorators;
425
+ return class ParentWorkflow extends _classSuper {
426
+ static {
427
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
428
+ _spawnMany_decorators = [Task({ concurrent: true })];
429
+ __esDecorate(this, null, _spawnMany_decorators, { kind: "method", name: "spawnMany", static: false, private: false, access: { has: obj => "spawnMany" in obj, get: obj => obj.spawnMany }, metadata: _metadata }, null, _instanceExtraInitializers);
430
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
431
+ }
432
+ async spawnMany() {
433
+ return Array.from({ length: 50 }, (_, i) => new ChildWorkflow(`Child-${i}`, this));
434
+ }
435
+ async run() {
436
+ return this.spawnMany();
437
+ }
438
+ constructor() {
439
+ super(...arguments);
440
+ __runInitializers(this, _instanceExtraInitializers);
441
+ }
442
+ };
443
+ })();
444
+ const workflow = new ParentWorkflow();
445
+ await workflow.run();
446
+ expect(workflow.children.length).toBe(50);
447
+ });
448
+ });
449
+ describe('Edge Case: Rapid State Changes', () => {
450
+ it('should handle rapid status changes', async () => {
451
+ class TestWorkflow extends Workflow {
452
+ async run() {
453
+ this.setStatus('running');
454
+ this.setStatus('running');
455
+ this.setStatus('running');
456
+ this.setStatus('completed');
457
+ }
458
+ }
459
+ const workflow = new TestWorkflow();
460
+ await workflow.run();
461
+ expect(workflow.status).toBe('completed');
462
+ expect(workflow.node.status).toBe('completed');
463
+ });
464
+ it('should handle multiple rapid snapshots', async () => {
465
+ let TestWorkflow = (() => {
466
+ let _classSuper = Workflow;
467
+ let _counter_decorators;
468
+ let _counter_initializers = [];
469
+ let _counter_extraInitializers = [];
470
+ return class TestWorkflow extends _classSuper {
471
+ static {
472
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
473
+ _counter_decorators = [ObservedState()];
474
+ __esDecorate(null, null, _counter_decorators, { kind: "field", name: "counter", static: false, private: false, access: { has: obj => "counter" in obj, get: obj => obj.counter, set: (obj, value) => { obj.counter = value; } }, metadata: _metadata }, _counter_initializers, _counter_extraInitializers);
475
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
476
+ }
477
+ counter = __runInitializers(this, _counter_initializers, 0);
478
+ async run() {
479
+ for (let i = 0; i < 10; i++) {
480
+ this.counter = i;
481
+ this.snapshotState();
482
+ }
483
+ }
484
+ constructor() {
485
+ super(...arguments);
486
+ __runInitializers(this, _counter_extraInitializers);
487
+ }
488
+ };
489
+ })();
490
+ const workflow = new TestWorkflow();
491
+ await workflow.run();
492
+ expect(workflow.node.stateSnapshot?.counter).toBe(9);
493
+ });
494
+ });
495
+ describe('Edge Case: Concurrent Execution', () => {
496
+ it('should handle concurrent task execution with errors', async () => {
497
+ class GoodChild extends Workflow {
498
+ async run() {
499
+ return 'good';
500
+ }
501
+ }
502
+ class BadChild extends Workflow {
503
+ async run() {
504
+ throw new Error('Bad child error');
505
+ }
506
+ }
507
+ let ParentWorkflow = (() => {
508
+ let _classSuper = Workflow;
509
+ let _instanceExtraInitializers = [];
510
+ let _spawnMixed_decorators;
511
+ return class ParentWorkflow extends _classSuper {
512
+ static {
513
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
514
+ _spawnMixed_decorators = [Task({ concurrent: true })];
515
+ __esDecorate(this, null, _spawnMixed_decorators, { kind: "method", name: "spawnMixed", static: false, private: false, access: { has: obj => "spawnMixed" in obj, get: obj => obj.spawnMixed }, metadata: _metadata }, null, _instanceExtraInitializers);
516
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
517
+ }
518
+ async spawnMixed() {
519
+ return [
520
+ new GoodChild('Good', this),
521
+ new BadChild('Bad', this),
522
+ ];
523
+ }
524
+ async run() {
525
+ // This should throw because concurrent runs happen
526
+ try {
527
+ await this.spawnMixed();
528
+ }
529
+ catch (err) {
530
+ // Expected to throw
531
+ }
532
+ }
533
+ constructor() {
534
+ super(...arguments);
535
+ __runInitializers(this, _instanceExtraInitializers);
536
+ }
537
+ };
538
+ })();
539
+ const workflow = new ParentWorkflow();
540
+ await workflow.run();
541
+ // Both children should be attached
542
+ expect(workflow.children.length).toBe(2);
543
+ });
544
+ it('should handle @Task with concurrent: true on single workflow', async () => {
545
+ class ChildWorkflow extends Workflow {
546
+ async run() {
547
+ return 'child-result';
548
+ }
549
+ }
550
+ let ParentWorkflow = (() => {
551
+ let _classSuper = Workflow;
552
+ let _instanceExtraInitializers = [];
553
+ let _spawnOne_decorators;
554
+ return class ParentWorkflow extends _classSuper {
555
+ static {
556
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
557
+ _spawnOne_decorators = [Task({ concurrent: true })];
558
+ __esDecorate(this, null, _spawnOne_decorators, { kind: "method", name: "spawnOne", static: false, private: false, access: { has: obj => "spawnOne" in obj, get: obj => obj.spawnOne }, metadata: _metadata }, null, _instanceExtraInitializers);
559
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
560
+ }
561
+ async spawnOne() {
562
+ return new ChildWorkflow('SingleChild', this);
563
+ }
564
+ async run() {
565
+ return this.spawnOne();
566
+ }
567
+ constructor() {
568
+ super(...arguments);
569
+ __runInitializers(this, _instanceExtraInitializers);
570
+ }
571
+ };
572
+ })();
573
+ const workflow = new ParentWorkflow();
574
+ const result = await workflow.run();
575
+ // Single workflow should still be returned
576
+ expect(result).toBeDefined();
577
+ expect(workflow.children.length).toBe(1);
578
+ });
579
+ });
580
+ describe('Edge Case: Observers and Event Handling', () => {
581
+ it('should handle observer that throws errors', async () => {
582
+ class TestWorkflow extends Workflow {
583
+ async run() {
584
+ this.emitEvent({ type: 'stepStart', node: this.node, step: 'test' });
585
+ }
586
+ }
587
+ const workflow = new TestWorkflow();
588
+ // Add an observer that throws
589
+ workflow.addObserver({
590
+ onLog: () => {
591
+ throw new Error('Observer error');
592
+ },
593
+ onEvent: () => {
594
+ throw new Error('Event observer error');
595
+ },
596
+ onStateUpdated: () => {
597
+ throw new Error('State observer error');
598
+ },
599
+ onTreeChanged: () => {
600
+ throw new Error('Tree observer error');
601
+ },
602
+ });
603
+ // Should not throw, errors are caught and console.error'd
604
+ await workflow.run();
605
+ });
606
+ it('should handle multiple observers', async () => {
607
+ class TestWorkflow extends Workflow {
608
+ async run() {
609
+ this.emitEvent({ type: 'stepStart', node: this.node, step: 'test' });
610
+ }
611
+ }
612
+ const workflow = new TestWorkflow();
613
+ const counts = { onLog: 0, onEvent: 0, onStateUpdated: 0, onTreeChanged: 0 };
614
+ // Add multiple observers
615
+ for (let i = 0; i < 5; i++) {
616
+ workflow.addObserver({
617
+ onLog: () => counts.onLog++,
618
+ onEvent: () => counts.onEvent++,
619
+ onStateUpdated: () => counts.onStateUpdated++,
620
+ onTreeChanged: () => counts.onTreeChanged++,
621
+ });
622
+ }
623
+ await workflow.run();
624
+ // Each observer should have been called
625
+ expect(counts.onEvent).toBe(5);
626
+ });
627
+ });
628
+ describe('Edge Case: Circular References', () => {
629
+ it('should detect circular parent-child relationships', async () => {
630
+ class TestWorkflow extends Workflow {
631
+ async run() {
632
+ return 'done';
633
+ }
634
+ }
635
+ const parent = new TestWorkflow('Parent');
636
+ const child = new TestWorkflow('Child', parent);
637
+ // Try to create a circular reference
638
+ expect(() => {
639
+ parent.attachChild(child); // This should throw
640
+ }).toThrow('Child already attached');
641
+ });
642
+ it('should prevent creating cycles through getRoot', async () => {
643
+ class TestWorkflow extends Workflow {
644
+ async run() {
645
+ return 'done';
646
+ }
647
+ }
648
+ const root = new TestWorkflow('Root');
649
+ const child = new TestWorkflow('Child', root);
650
+ // getRoot should work correctly
651
+ const rootFromChild = child.getRoot();
652
+ expect(rootFromChild.id).toBe(root.id);
653
+ });
654
+ });
655
+ describe('Edge Case: Memory and Performance', () => {
656
+ it('should handle large number of events', async () => {
657
+ class TestWorkflow extends Workflow {
658
+ async run() {
659
+ for (let i = 0; i < 1000; i++) {
660
+ this.emitEvent({ type: 'stepStart', node: this.node, step: `step-${i}` });
661
+ }
662
+ }
663
+ }
664
+ const workflow = new TestWorkflow();
665
+ await workflow.run();
666
+ expect(workflow.node.events.length).toBe(1000);
667
+ });
668
+ it('should handle large number of logs', async () => {
669
+ class TestWorkflow extends Workflow {
670
+ async run() {
671
+ for (let i = 0; i < 1000; i++) {
672
+ this.logger.info(`Log entry ${i}`);
673
+ }
674
+ }
675
+ }
676
+ const workflow = new TestWorkflow();
677
+ await workflow.run();
678
+ expect(workflow.node.logs.length).toBe(1000);
679
+ });
680
+ });
681
+ describe('PRD Compliance: Error Event Format', () => {
682
+ /**
683
+ * PRD Section 5.1 specifies WorkflowError interface
684
+ * Verifying the error structure matches PRD
685
+ */
686
+ it('should emit error with all required fields', async () => {
687
+ let TestWorkflow = (() => {
688
+ let _classSuper = Workflow;
689
+ let _instanceExtraInitializers = [];
690
+ let _testField_decorators;
691
+ let _testField_initializers = [];
692
+ let _testField_extraInitializers = [];
693
+ let _failingStep_decorators;
694
+ return class TestWorkflow extends _classSuper {
695
+ static {
696
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
697
+ _testField_decorators = [ObservedState()];
698
+ _failingStep_decorators = [Step()];
699
+ __esDecorate(this, null, _failingStep_decorators, { kind: "method", name: "failingStep", static: false, private: false, access: { has: obj => "failingStep" in obj, get: obj => obj.failingStep }, metadata: _metadata }, null, _instanceExtraInitializers);
700
+ __esDecorate(null, null, _testField_decorators, { kind: "field", name: "testField", static: false, private: false, access: { has: obj => "testField" in obj, get: obj => obj.testField, set: (obj, value) => { obj.testField = value; } }, metadata: _metadata }, _testField_initializers, _testField_extraInitializers);
701
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
702
+ }
703
+ testField = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _testField_initializers, 'test-value'));
704
+ async failingStep() {
705
+ this.logger.info('About to fail');
706
+ throw new Error('Test error');
707
+ }
708
+ async run() {
709
+ try {
710
+ await this.failingStep();
711
+ }
712
+ catch (err) {
713
+ // Expected
714
+ }
715
+ }
716
+ constructor() {
717
+ super(...arguments);
718
+ __runInitializers(this, _testField_extraInitializers);
719
+ }
720
+ };
721
+ })();
722
+ const workflow = new TestWorkflow();
723
+ let capturedError = null;
724
+ workflow.addObserver({
725
+ onLog: () => { },
726
+ onEvent: (event) => {
727
+ if (event.type === 'error') {
728
+ capturedError = event.error;
729
+ }
730
+ },
731
+ onStateUpdated: () => { },
732
+ onTreeChanged: () => { },
733
+ });
734
+ await workflow.run();
735
+ expect(capturedError).not.toBeNull();
736
+ expect(capturedError.message).toBe('Test error');
737
+ expect(capturedError.workflowId).toBe(workflow.id);
738
+ expect(capturedError.original).toBeDefined();
739
+ expect(capturedError.state).toBeDefined();
740
+ expect(capturedError.logs).toBeDefined();
741
+ expect(Array.isArray(capturedError.logs)).toBe(true);
742
+ });
743
+ });
744
+ describe('PRD Compliance: Event Types', () => {
745
+ /**
746
+ * PRD Section 4.2 specifies all WorkflowEvent types
747
+ * Verifying all event types are properly emitted
748
+ */
749
+ it('should emit childAttached event', async () => {
750
+ class ChildWorkflow extends Workflow {
751
+ async run() {
752
+ return 'child';
753
+ }
754
+ }
755
+ let ParentWorkflow = (() => {
756
+ let _classSuper = Workflow;
757
+ let _instanceExtraInitializers = [];
758
+ let _spawnChild_decorators;
759
+ return class ParentWorkflow extends _classSuper {
760
+ static {
761
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
762
+ _spawnChild_decorators = [Task()];
763
+ __esDecorate(this, null, _spawnChild_decorators, { kind: "method", name: "spawnChild", static: false, private: false, access: { has: obj => "spawnChild" in obj, get: obj => obj.spawnChild }, metadata: _metadata }, null, _instanceExtraInitializers);
764
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
765
+ }
766
+ async spawnChild() {
767
+ return new ChildWorkflow('Child', this);
768
+ }
769
+ async run() {
770
+ return this.spawnChild();
771
+ }
772
+ constructor() {
773
+ super(...arguments);
774
+ __runInitializers(this, _instanceExtraInitializers);
775
+ }
776
+ };
777
+ })();
778
+ const workflow = new ParentWorkflow();
779
+ let childAttachedFired = false;
780
+ workflow.addObserver({
781
+ onLog: () => { },
782
+ onEvent: (event) => {
783
+ if (event.type === 'childAttached') {
784
+ childAttachedFired = true;
785
+ expect(event.parentId).toBe(workflow.id);
786
+ expect(event.child).toBeDefined();
787
+ }
788
+ },
789
+ onStateUpdated: () => { },
790
+ onTreeChanged: () => { },
791
+ });
792
+ await workflow.run();
793
+ expect(childAttachedFired).toBe(true);
794
+ });
795
+ it('should emit stateSnapshot event', async () => {
796
+ let TestWorkflow = (() => {
797
+ let _classSuper = Workflow;
798
+ let _testField_decorators;
799
+ let _testField_initializers = [];
800
+ let _testField_extraInitializers = [];
801
+ return class TestWorkflow extends _classSuper {
802
+ static {
803
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
804
+ _testField_decorators = [ObservedState()];
805
+ __esDecorate(null, null, _testField_decorators, { kind: "field", name: "testField", static: false, private: false, access: { has: obj => "testField" in obj, get: obj => obj.testField, set: (obj, value) => { obj.testField = value; } }, metadata: _metadata }, _testField_initializers, _testField_extraInitializers);
806
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
807
+ }
808
+ testField = __runInitializers(this, _testField_initializers, 'value');
809
+ async run() {
810
+ this.snapshotState();
811
+ }
812
+ constructor() {
813
+ super(...arguments);
814
+ __runInitializers(this, _testField_extraInitializers);
815
+ }
816
+ };
817
+ })();
818
+ const workflow = new TestWorkflow();
819
+ let snapshotFired = false;
820
+ workflow.addObserver({
821
+ onLog: () => { },
822
+ onEvent: (event) => {
823
+ if (event.type === 'stateSnapshot') {
824
+ snapshotFired = true;
825
+ expect(event.node).toBeDefined();
826
+ }
827
+ },
828
+ onStateUpdated: () => { },
829
+ onTreeChanged: () => { },
830
+ });
831
+ await workflow.run();
832
+ expect(snapshotFired).toBe(true);
833
+ });
834
+ it('should emit treeUpdated event', async () => {
835
+ class TestWorkflow extends Workflow {
836
+ async run() {
837
+ this.emitEvent({ type: 'treeUpdated', root: this.node });
838
+ }
839
+ }
840
+ const workflow = new TestWorkflow();
841
+ let treeUpdatedFired = false;
842
+ workflow.addObserver({
843
+ onLog: () => { },
844
+ onEvent: (event) => {
845
+ if (event.type === 'treeUpdated') {
846
+ treeUpdatedFired = true;
847
+ }
848
+ },
849
+ onStateUpdated: () => { },
850
+ onTreeChanged: () => { },
851
+ });
852
+ await workflow.run();
853
+ expect(treeUpdatedFired).toBe(true);
854
+ });
855
+ });
856
+ });
857
+ //# sourceMappingURL=edge-case.test.js.map