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
@@ -1,349 +0,0 @@
1
- /**
2
- * WorkflowContextImpl - Implementation of functional workflow context
3
- *
4
- * Provides step(), spawnWorkflow(), and automatic context propagation
5
- * for agents and prompts executed within workflows.
6
- */
7
-
8
- import type {
9
- WorkflowContext,
10
- EventTreeHandle,
11
- ReflectionAPI,
12
- AgentLike,
13
- PromptLike,
14
- } from '../types/workflow-context.js';
15
- import type {
16
- WorkflowNode,
17
- WorkflowEvent,
18
- ReflectionConfig,
19
- ReflectionContext,
20
- } from '../types/index.js';
21
- import { EventTreeHandleImpl, createEventTreeHandle } from './event-tree.js';
22
- import {
23
- runInContext,
24
- type AgentExecutionContext,
25
- } from './context.js';
26
- import { generateId } from '../utils/id.js';
27
- import { ReflectionManager } from '../reflection/reflection.js';
28
- import { createReflectionConfig } from '../types/index.js';
29
-
30
- /**
31
- * Interface for workflow-like objects that can emit events
32
- */
33
- interface WorkflowLike {
34
- id: string;
35
- node: WorkflowNode;
36
- emitEvent(event: WorkflowEvent): void;
37
- setStatus(status: 'idle' | 'running' | 'completed' | 'failed' | 'cancelled'): void;
38
- attachChild(child: WorkflowLike): void;
39
- }
40
-
41
- /**
42
- * WorkflowContext implementation
43
- */
44
- export class WorkflowContextImpl implements WorkflowContext {
45
- public readonly workflowId: string;
46
- public readonly parentWorkflowId?: string;
47
- public readonly eventTree: EventTreeHandle;
48
- public readonly reflection: ReflectionAPI;
49
-
50
- private workflow: WorkflowLike;
51
- private eventTreeImpl: EventTreeHandleImpl;
52
- private reflectionManager: ReflectionManager;
53
-
54
- constructor(
55
- workflow: WorkflowLike,
56
- parentWorkflowId?: string,
57
- reflectionConfig?: Partial<ReflectionConfig>
58
- ) {
59
- this.workflowId = workflow.id;
60
- this.parentWorkflowId = parentWorkflowId;
61
- this.workflow = workflow;
62
-
63
- // Create event tree handle
64
- this.eventTreeImpl = new EventTreeHandleImpl(workflow.node);
65
- this.eventTree = this.eventTreeImpl;
66
-
67
- // Create reflection manager with config
68
- const config = createReflectionConfig(reflectionConfig);
69
- this.reflectionManager = new ReflectionManager(config);
70
- this.reflectionManager.setEventEmitter((event) => this.workflow.emitEvent(event));
71
- this.reflection = this.reflectionManager;
72
- }
73
-
74
- /**
75
- * Execute a named step with automatic context propagation and reflection support
76
- */
77
- async step<T>(name: string, fn: () => Promise<T>): Promise<T> {
78
- const maxAttempts = this.reflectionManager.isEnabled()
79
- ? this.reflectionManager.getMaxAttempts()
80
- : 1;
81
-
82
- let lastError: Error | null = null;
83
-
84
- for (let attempt = 1; attempt <= maxAttempts; attempt++) {
85
- const startTime = Date.now();
86
-
87
- // Create step node
88
- const stepNode: WorkflowNode = {
89
- id: generateId(),
90
- name: attempt > 1 ? `${name} (retry ${attempt - 1})` : name,
91
- parent: this.workflow.node,
92
- children: [],
93
- status: 'running',
94
- logs: [],
95
- events: [],
96
- stateSnapshot: null,
97
- };
98
-
99
- // Attach to parent
100
- this.workflow.node.children.push(stepNode);
101
-
102
- // Emit step start
103
- this.workflow.emitEvent({
104
- type: 'stepStart',
105
- node: stepNode,
106
- step: name,
107
- });
108
-
109
- // Create execution context for this step
110
- const executionContext: AgentExecutionContext = {
111
- workflowNode: stepNode,
112
- emitEvent: (event: WorkflowEvent) => {
113
- stepNode.events.push(event);
114
- this.workflow.emitEvent(event);
115
- },
116
- workflowId: this.workflowId,
117
- parentWorkflowId: this.parentWorkflowId,
118
- };
119
-
120
- try {
121
- // Execute function in context
122
- const result = await runInContext(executionContext, fn);
123
-
124
- // Update step node status
125
- stepNode.status = 'completed';
126
-
127
- // Emit step end
128
- const duration = Date.now() - startTime;
129
- this.workflow.emitEvent({
130
- type: 'stepEnd',
131
- node: stepNode,
132
- step: name,
133
- duration,
134
- });
135
-
136
- // Rebuild event tree
137
- this.eventTreeImpl.rebuild(this.workflow.node);
138
-
139
- // If we succeeded after a reflection, mark it as successful
140
- if (attempt > 1) {
141
- this.reflectionManager.markLastReflectionSuccessful();
142
- }
143
-
144
- return result;
145
- } catch (error) {
146
- lastError = error as Error;
147
-
148
- // Update step node status
149
- stepNode.status = 'failed';
150
-
151
- // Emit error event
152
- this.workflow.emitEvent({
153
- type: 'error',
154
- node: stepNode,
155
- error: {
156
- message: error instanceof Error ? error.message : 'Unknown error',
157
- original: error,
158
- workflowId: this.workflowId,
159
- stack: error instanceof Error ? error.stack : undefined,
160
- state: {},
161
- logs: [],
162
- },
163
- });
164
-
165
- // Rebuild event tree
166
- this.eventTreeImpl.rebuild(this.workflow.node);
167
-
168
- // Check if we should try reflection
169
- if (!this.reflectionManager.isEnabled() || attempt === maxAttempts) {
170
- throw error;
171
- }
172
-
173
- // Try reflection
174
- const reflectionContext: ReflectionContext = {
175
- level: 'workflow',
176
- failedNode: stepNode,
177
- error: lastError,
178
- attemptNumber: attempt,
179
- previousAttempts: this.reflectionManager.getReflectionHistory(),
180
- };
181
-
182
- const reflectionResult = await this.reflectionManager.reflect(reflectionContext);
183
-
184
- if (!reflectionResult.shouldRetry) {
185
- throw lastError;
186
- }
187
-
188
- // Continue to next iteration for retry
189
- }
190
- }
191
-
192
- throw lastError ?? new Error('Max reflection attempts exceeded');
193
- }
194
-
195
- /**
196
- * Spawn a child workflow
197
- */
198
- async spawnWorkflow<T>(workflow: { run(): Promise<T>; id?: string; node?: WorkflowNode }): Promise<T> {
199
- // If workflow has attachChild-like capability, use it
200
- if ('node' in workflow && workflow.node) {
201
- // Set parent reference
202
- workflow.node.parent = this.workflow.node;
203
-
204
- // Attach child node
205
- this.workflow.node.children.push(workflow.node);
206
-
207
- // Emit child attached event
208
- this.workflow.emitEvent({
209
- type: 'childAttached',
210
- parentId: this.workflowId,
211
- child: workflow.node,
212
- });
213
- }
214
-
215
- // Run the child workflow
216
- const result = await workflow.run();
217
-
218
- // Rebuild event tree
219
- this.eventTreeImpl.rebuild(this.workflow.node);
220
-
221
- return result;
222
- }
223
-
224
- /**
225
- * Replace the last prompt result with a new one (context revision)
226
- * The previous prompt node is marked as 'revised' and the new result is attached as sibling
227
- */
228
- async replaceLastPromptResult<T>(
229
- newPrompt: PromptLike<T>,
230
- agent: AgentLike
231
- ): Promise<T> {
232
- // Find the last completed prompt node in the tree
233
- const children = this.workflow.node.children;
234
- let lastPromptNodeIndex = -1;
235
-
236
- for (let i = children.length - 1; i >= 0; i--) {
237
- const child = children[i];
238
- if (child.status === 'completed') {
239
- lastPromptNodeIndex = i;
240
- break;
241
- }
242
- }
243
-
244
- // Create a revision node to mark the replacement
245
- const revisionNode: WorkflowNode = {
246
- id: generateId(),
247
- name: `revision:${newPrompt.id}`,
248
- parent: this.workflow.node,
249
- children: [],
250
- status: 'running',
251
- logs: [],
252
- events: [],
253
- stateSnapshot: null,
254
- };
255
-
256
- // If we found a previous node, mark it as revised
257
- if (lastPromptNodeIndex >= 0) {
258
- const previousNode = children[lastPromptNodeIndex];
259
- // Mark as revised by adding a special status flag in logs
260
- previousNode.logs.push({
261
- id: generateId(),
262
- workflowId: this.workflowId,
263
- level: 'info',
264
- message: `Revised by ${revisionNode.id}`,
265
- timestamp: Date.now(),
266
- });
267
- }
268
-
269
- // Attach revision node as sibling (at same level)
270
- this.workflow.node.children.push(revisionNode);
271
-
272
- // Emit prompt revision event
273
- this.workflow.emitEvent({
274
- type: 'stepStart',
275
- node: revisionNode,
276
- step: `revision:${newPrompt.id}`,
277
- });
278
-
279
- // Create execution context for this revision
280
- const executionContext: AgentExecutionContext = {
281
- workflowNode: revisionNode,
282
- emitEvent: (event: WorkflowEvent) => {
283
- revisionNode.events.push(event);
284
- this.workflow.emitEvent(event);
285
- },
286
- workflowId: this.workflowId,
287
- parentWorkflowId: this.parentWorkflowId,
288
- };
289
-
290
- try {
291
- // Execute the new prompt in context
292
- const result = await runInContext(executionContext, () =>
293
- agent.prompt(newPrompt)
294
- );
295
-
296
- // Update revision node status
297
- revisionNode.status = 'completed';
298
-
299
- // Emit completion event
300
- this.workflow.emitEvent({
301
- type: 'stepEnd',
302
- node: revisionNode,
303
- step: `revision:${newPrompt.id}`,
304
- duration: 0, // Could track actual duration if needed
305
- });
306
-
307
- // Rebuild event tree
308
- this.eventTreeImpl.rebuild(this.workflow.node);
309
-
310
- return result;
311
- } catch (error) {
312
- // Update revision node status
313
- revisionNode.status = 'failed';
314
-
315
- // Emit error event
316
- this.workflow.emitEvent({
317
- type: 'error',
318
- node: revisionNode,
319
- error: {
320
- message: error instanceof Error ? error.message : 'Unknown error',
321
- original: error,
322
- workflowId: this.workflowId,
323
- stack: error instanceof Error ? error.stack : undefined,
324
- state: {},
325
- logs: [],
326
- },
327
- });
328
-
329
- // Rebuild event tree
330
- this.eventTreeImpl.rebuild(this.workflow.node);
331
-
332
- throw error;
333
- }
334
- }
335
- }
336
-
337
- /**
338
- * Create a WorkflowContext for a workflow
339
- * @param workflow The workflow object
340
- * @param parentWorkflowId Optional parent workflow ID
341
- * @param reflectionConfig Optional reflection configuration
342
- */
343
- export function createWorkflowContext(
344
- workflow: WorkflowLike,
345
- parentWorkflowId?: string,
346
- reflectionConfig?: Partial<ReflectionConfig>
347
- ): WorkflowContext {
348
- return new WorkflowContextImpl(workflow, parentWorkflowId, reflectionConfig);
349
- }
@@ -1,302 +0,0 @@
1
- import type {
2
- WorkflowNode,
3
- WorkflowStatus,
4
- WorkflowEvent,
5
- WorkflowObserver,
6
- } from '../types/index.js';
7
- import type { WorkflowContext, WorkflowConfig, WorkflowResult } from '../types/workflow-context.js';
8
- import { generateId } from '../utils/id.js';
9
- import { WorkflowLogger } from './logger.js';
10
- import { getObservedState } from '../decorators/observed-state.js';
11
- import { createWorkflowContext } from './workflow-context.js';
12
-
13
- /**
14
- * Executor function type for functional workflows
15
- */
16
- export type WorkflowExecutor<T = unknown> = (ctx: WorkflowContext) => Promise<T>;
17
-
18
- /**
19
- * Base class for all workflows
20
- * Supports both class-based (subclass with run()) and functional (executor) patterns
21
- *
22
- * @example Class-based pattern:
23
- * ```ts
24
- * class MyWorkflow extends Workflow {
25
- * async run() {
26
- * this.setStatus('running');
27
- * // workflow logic
28
- * this.setStatus('completed');
29
- * }
30
- * }
31
- * ```
32
- *
33
- * @example Functional pattern:
34
- * ```ts
35
- * const workflow = new Workflow({ name: 'MyWorkflow' }, async (ctx) => {
36
- * await ctx.step('step1', async () => {
37
- * // step logic
38
- * });
39
- * });
40
- * await workflow.run();
41
- * ```
42
- */
43
- export class Workflow<T = unknown> {
44
- /** Unique identifier for this workflow instance */
45
- public readonly id: string;
46
-
47
- /** Parent workflow (null for root workflows) */
48
- public parent: Workflow | null = null;
49
-
50
- /** Child workflows */
51
- public children: Workflow[] = [];
52
-
53
- /** Current execution status */
54
- public status: WorkflowStatus = 'idle';
55
-
56
- /** Logger instance for this workflow */
57
- protected readonly logger: WorkflowLogger;
58
-
59
- /** The node representation of this workflow */
60
- protected readonly node: WorkflowNode;
61
-
62
- /** Observers (only populated on root workflow) */
63
- private observers: WorkflowObserver[] = [];
64
-
65
- /** Optional executor function for functional workflows */
66
- private executor?: WorkflowExecutor<T>;
67
-
68
- /** Workflow configuration */
69
- private config: WorkflowConfig;
70
-
71
- /**
72
- * Create a new workflow instance
73
- *
74
- * @overload Class-based pattern
75
- * @param name Human-readable name (defaults to class name)
76
- * @param parent Optional parent workflow
77
- *
78
- * @overload Functional pattern
79
- * @param config Workflow configuration
80
- * @param executor Executor function
81
- */
82
- constructor(name?: string | WorkflowConfig, parentOrExecutor?: Workflow | WorkflowExecutor<T>) {
83
- this.id = generateId();
84
-
85
- // Parse overloaded arguments
86
- if (typeof name === 'object' && name !== null) {
87
- // Functional pattern: constructor(config, executor)
88
- this.config = name;
89
- this.executor = parentOrExecutor as WorkflowExecutor<T>;
90
- this.parent = null;
91
- } else {
92
- // Class-based pattern: constructor(name, parent)
93
- this.config = { name: name ?? this.constructor.name };
94
- this.parent = (parentOrExecutor as Workflow) ?? null;
95
- }
96
-
97
- // Create the node representation
98
- this.node = {
99
- id: this.id,
100
- name: this.config.name ?? this.constructor.name,
101
- parent: this.parent?.node ?? null,
102
- children: [],
103
- status: 'idle',
104
- logs: [],
105
- events: [],
106
- stateSnapshot: null,
107
- };
108
-
109
- // Create logger with root observers
110
- this.logger = new WorkflowLogger(this.node, this.getRootObservers());
111
-
112
- // Attach to parent if provided
113
- if (this.parent) {
114
- this.parent.attachChild(this);
115
- }
116
- }
117
-
118
- /**
119
- * Get observers from the root workflow
120
- * Traverses up the tree to find the root
121
- */
122
- private getRootObservers(): WorkflowObserver[] {
123
- if (this.parent) {
124
- return this.parent.getRootObservers();
125
- }
126
- return this.observers;
127
- }
128
-
129
- /**
130
- * Get the root workflow
131
- */
132
- protected getRoot(): Workflow {
133
- if (this.parent) {
134
- return this.parent.getRoot();
135
- }
136
- return this;
137
- }
138
-
139
- /**
140
- * Add an observer to this workflow (must be root)
141
- * @throws Error if called on non-root workflow
142
- */
143
- public addObserver(observer: WorkflowObserver): void {
144
- if (this.parent) {
145
- throw new Error('Observers can only be added to root workflows');
146
- }
147
- this.observers.push(observer);
148
- }
149
-
150
- /**
151
- * Remove an observer from this workflow
152
- */
153
- public removeObserver(observer: WorkflowObserver): void {
154
- const index = this.observers.indexOf(observer);
155
- if (index !== -1) {
156
- this.observers.splice(index, 1);
157
- }
158
- }
159
-
160
- /**
161
- * Attach a child workflow
162
- * Called automatically in constructor when parent is provided
163
- */
164
- public attachChild(child: Workflow): void {
165
- this.children.push(child);
166
- this.node.children.push(child.node);
167
-
168
- // Emit child attached event
169
- this.emitEvent({
170
- type: 'childAttached',
171
- parentId: this.id,
172
- child: child.node,
173
- });
174
- }
175
-
176
- /**
177
- * Emit an event to all root observers
178
- */
179
- public emitEvent(event: WorkflowEvent): void {
180
- this.node.events.push(event);
181
-
182
- const observers = this.getRootObservers();
183
- for (const obs of observers) {
184
- try {
185
- obs.onEvent(event);
186
-
187
- // Also notify tree changed for tree update events
188
- if (event.type === 'treeUpdated' || event.type === 'childAttached') {
189
- obs.onTreeChanged(this.getRoot().node);
190
- }
191
- } catch (err) {
192
- console.error('Observer onEvent error:', err);
193
- }
194
- }
195
- }
196
-
197
- /**
198
- * Capture and emit a state snapshot
199
- */
200
- public snapshotState(): void {
201
- const snapshot = getObservedState(this);
202
- this.node.stateSnapshot = snapshot;
203
-
204
- // Notify observers
205
- const observers = this.getRootObservers();
206
- for (const obs of observers) {
207
- try {
208
- obs.onStateUpdated(this.node);
209
- } catch (err) {
210
- console.error('Observer onStateUpdated error:', err);
211
- }
212
- }
213
-
214
- // Emit snapshot event
215
- this.emitEvent({
216
- type: 'stateSnapshot',
217
- node: this.node,
218
- });
219
- }
220
-
221
- /**
222
- * Update workflow status and sync with node
223
- */
224
- public setStatus(status: WorkflowStatus): void {
225
- this.status = status;
226
- this.node.status = status;
227
- }
228
-
229
- /**
230
- * Get the node representation of this workflow
231
- */
232
- public getNode(): WorkflowNode {
233
- return this.node;
234
- }
235
-
236
- /**
237
- * Run the workflow
238
- *
239
- * For functional workflows (created with executor), runs the executor function.
240
- * For class-based workflows (subclasses), this should be overridden.
241
- *
242
- * @returns Workflow result
243
- */
244
- public async run(..._args: unknown[]): Promise<T | WorkflowResult<T>> {
245
- if (this.executor) {
246
- return this.runFunctional();
247
- }
248
-
249
- // Class-based workflows must override this method
250
- throw new Error(
251
- 'Workflow.run() must be overridden in subclass or provide executor in constructor'
252
- );
253
- }
254
-
255
- /**
256
- * Run a functional workflow with context
257
- */
258
- private async runFunctional(): Promise<WorkflowResult<T>> {
259
- if (!this.executor) {
260
- throw new Error('No executor provided');
261
- }
262
-
263
- const startTime = Date.now();
264
- this.setStatus('running');
265
-
266
- // Create workflow context
267
- const ctx = createWorkflowContext(
268
- this as unknown as Parameters<typeof createWorkflowContext>[0],
269
- this.parent?.id,
270
- this.config.enableReflection ? { enabled: true } : undefined
271
- );
272
-
273
- try {
274
- const result = await this.executor(ctx);
275
- this.setStatus('completed');
276
-
277
- return {
278
- data: result,
279
- node: this.node,
280
- duration: Date.now() - startTime,
281
- };
282
- } catch (error) {
283
- this.setStatus('failed');
284
-
285
- // Emit error event
286
- this.emitEvent({
287
- type: 'error',
288
- node: this.node,
289
- error: {
290
- message: error instanceof Error ? error.message : 'Unknown error',
291
- original: error,
292
- workflowId: this.id,
293
- stack: error instanceof Error ? error.stack : undefined,
294
- state: {},
295
- logs: [],
296
- },
297
- });
298
-
299
- throw error;
300
- }
301
- }
302
- }