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,162 @@
1
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
2
+ var useValue = arguments.length > 2;
3
+ for (var i = 0; i < initializers.length; i++) {
4
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
5
+ }
6
+ return useValue ? value : void 0;
7
+ };
8
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
9
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
10
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
11
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
12
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
13
+ var _, done = false;
14
+ for (var i = decorators.length - 1; i >= 0; i--) {
15
+ var context = {};
16
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
17
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
18
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
19
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
20
+ if (kind === "accessor") {
21
+ if (result === void 0) continue;
22
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
23
+ if (_ = accept(result.get)) descriptor.get = _;
24
+ if (_ = accept(result.set)) descriptor.set = _;
25
+ if (_ = accept(result.init)) initializers.unshift(_);
26
+ }
27
+ else if (_ = accept(result)) {
28
+ if (kind === "field") initializers.unshift(_);
29
+ else descriptor[key] = _;
30
+ }
31
+ }
32
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
33
+ done = true;
34
+ };
35
+ import { describe, it, expect } from 'vitest';
36
+ import { Workflow, Step, ObservedState, getObservedState } from '../../index.js';
37
+ describe('@Step decorator', () => {
38
+ let StepTestWorkflow = (() => {
39
+ let _classSuper = Workflow;
40
+ let _instanceExtraInitializers = [];
41
+ let _myStep_decorators;
42
+ return class StepTestWorkflow extends _classSuper {
43
+ static {
44
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
45
+ _myStep_decorators = [Step({ trackTiming: true })];
46
+ __esDecorate(this, null, _myStep_decorators, { kind: "method", name: "myStep", static: false, private: false, access: { has: obj => "myStep" in obj, get: obj => obj.myStep }, metadata: _metadata }, null, _instanceExtraInitializers);
47
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
48
+ }
49
+ stepCalled = (__runInitializers(this, _instanceExtraInitializers), false);
50
+ async myStep() {
51
+ this.stepCalled = true;
52
+ return 'step result';
53
+ }
54
+ async run() {
55
+ await this.myStep();
56
+ }
57
+ };
58
+ })();
59
+ it('should execute the original method', async () => {
60
+ const wf = new StepTestWorkflow();
61
+ await wf.run();
62
+ expect(wf.stepCalled).toBe(true);
63
+ });
64
+ it('should emit stepStart and stepEnd events', async () => {
65
+ const wf = new StepTestWorkflow();
66
+ const events = [];
67
+ wf.addObserver({
68
+ onLog: () => { },
69
+ onEvent: (e) => events.push(e),
70
+ onStateUpdated: () => { },
71
+ onTreeChanged: () => { },
72
+ });
73
+ await wf.run();
74
+ const startEvent = events.find((e) => e.type === 'stepStart');
75
+ const endEvent = events.find((e) => e.type === 'stepEnd');
76
+ expect(startEvent).toBeDefined();
77
+ expect(endEvent).toBeDefined();
78
+ if (endEvent?.type === 'stepEnd') {
79
+ expect(endEvent.duration).toBeGreaterThanOrEqual(0);
80
+ }
81
+ });
82
+ it('should wrap errors in WorkflowError', async () => {
83
+ let FailingWorkflow = (() => {
84
+ let _classSuper = Workflow;
85
+ let _instanceExtraInitializers = [];
86
+ let _failingStep_decorators;
87
+ return class FailingWorkflow extends _classSuper {
88
+ static {
89
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
90
+ _failingStep_decorators = [Step()];
91
+ __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);
92
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
93
+ }
94
+ async failingStep() {
95
+ throw new Error('Step failed');
96
+ }
97
+ async run() {
98
+ await this.failingStep();
99
+ }
100
+ constructor() {
101
+ super(...arguments);
102
+ __runInitializers(this, _instanceExtraInitializers);
103
+ }
104
+ };
105
+ })();
106
+ const wf = new FailingWorkflow();
107
+ await expect(wf.run()).rejects.toMatchObject({
108
+ message: 'Step failed',
109
+ workflowId: wf.id,
110
+ });
111
+ });
112
+ });
113
+ describe('@ObservedState decorator', () => {
114
+ let StateTestWorkflow = (() => {
115
+ let _classSuper = Workflow;
116
+ let _publicField_decorators;
117
+ let _publicField_initializers = [];
118
+ let _publicField_extraInitializers = [];
119
+ let _secretField_decorators;
120
+ let _secretField_initializers = [];
121
+ let _secretField_extraInitializers = [];
122
+ let _hiddenField_decorators;
123
+ let _hiddenField_initializers = [];
124
+ let _hiddenField_extraInitializers = [];
125
+ return class StateTestWorkflow extends _classSuper {
126
+ static {
127
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
128
+ _publicField_decorators = [ObservedState()];
129
+ _secretField_decorators = [ObservedState({ redact: true })];
130
+ _hiddenField_decorators = [ObservedState({ hidden: true })];
131
+ __esDecorate(null, null, _publicField_decorators, { kind: "field", name: "publicField", static: false, private: false, access: { has: obj => "publicField" in obj, get: obj => obj.publicField, set: (obj, value) => { obj.publicField = value; } }, metadata: _metadata }, _publicField_initializers, _publicField_extraInitializers);
132
+ __esDecorate(null, null, _secretField_decorators, { kind: "field", name: "secretField", static: false, private: false, access: { has: obj => "secretField" in obj, get: obj => obj.secretField, set: (obj, value) => { obj.secretField = value; } }, metadata: _metadata }, _secretField_initializers, _secretField_extraInitializers);
133
+ __esDecorate(null, null, _hiddenField_decorators, { kind: "field", name: "hiddenField", static: false, private: false, access: { has: obj => "hiddenField" in obj, get: obj => obj.hiddenField, set: (obj, value) => { obj.hiddenField = value; } }, metadata: _metadata }, _hiddenField_initializers, _hiddenField_extraInitializers);
134
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
135
+ }
136
+ publicField = __runInitializers(this, _publicField_initializers, 'public');
137
+ secretField = (__runInitializers(this, _publicField_extraInitializers), __runInitializers(this, _secretField_initializers, 'secret'));
138
+ hiddenField = (__runInitializers(this, _secretField_extraInitializers), __runInitializers(this, _hiddenField_initializers, 'hidden'));
139
+ async run() { }
140
+ constructor() {
141
+ super(...arguments);
142
+ __runInitializers(this, _hiddenField_extraInitializers);
143
+ }
144
+ };
145
+ })();
146
+ it('should include public fields in snapshot', () => {
147
+ const wf = new StateTestWorkflow();
148
+ const state = getObservedState(wf);
149
+ expect(state.publicField).toBe('public');
150
+ });
151
+ it('should redact secret fields', () => {
152
+ const wf = new StateTestWorkflow();
153
+ const state = getObservedState(wf);
154
+ expect(state.secretField).toBe('***');
155
+ });
156
+ it('should exclude hidden fields', () => {
157
+ const wf = new StateTestWorkflow();
158
+ const state = getObservedState(wf);
159
+ expect('hiddenField' in state).toBe(false);
160
+ });
161
+ });
162
+ //# sourceMappingURL=decorators.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/decorators.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for introspection tools
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=introspection-tools.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspection-tools.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/introspection-tools.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Unit tests for introspection tools
3
+ */
4
+ import { describe, it, expect, beforeEach } from 'vitest';
5
+ import { INTROSPECTION_TOOLS, handleInspectCurrentNode, handleReadAncestorChain, handleListSiblingsChildren, handleInspectPriorOutputs, handleInspectCacheStatus, handleRequestSpawnWorkflow, executeIntrospectionTool, } from '../../tools/introspection.js';
6
+ import { runInContext } from '../../core/context.js';
7
+ import { defaultCache } from '../../cache/cache.js';
8
+ describe('Introspection Tools', () => {
9
+ describe('INTROSPECTION_TOOLS', () => {
10
+ it('should export 6 tools', () => {
11
+ expect(INTROSPECTION_TOOLS).toHaveLength(6);
12
+ });
13
+ it('should have valid tool definitions', () => {
14
+ for (const tool of INTROSPECTION_TOOLS) {
15
+ expect(tool.name).toBeDefined();
16
+ expect(tool.description).toBeDefined();
17
+ expect(tool.input_schema).toBeDefined();
18
+ expect(tool.input_schema.type).toBe('object');
19
+ }
20
+ });
21
+ it('should include all expected tool names', () => {
22
+ const names = INTROSPECTION_TOOLS.map((t) => t.name);
23
+ expect(names).toContain('inspect_current_node');
24
+ expect(names).toContain('read_ancestor_chain');
25
+ expect(names).toContain('list_siblings_children');
26
+ expect(names).toContain('inspect_prior_outputs');
27
+ expect(names).toContain('inspect_cache_status');
28
+ expect(names).toContain('request_spawn_workflow');
29
+ });
30
+ });
31
+ describe('handlers', () => {
32
+ const createTestNode = (id, name, parent = null) => ({
33
+ id,
34
+ name,
35
+ parent,
36
+ children: [],
37
+ status: 'running',
38
+ logs: [],
39
+ events: [],
40
+ stateSnapshot: null,
41
+ });
42
+ const createContext = (node) => ({
43
+ workflowNode: node,
44
+ emitEvent: () => { },
45
+ workflowId: 'test-workflow',
46
+ });
47
+ describe('handleInspectCurrentNode', () => {
48
+ it('should throw when not in workflow context', async () => {
49
+ await expect(handleInspectCurrentNode()).rejects.toThrow('Not in workflow context');
50
+ });
51
+ it('should return current node info', async () => {
52
+ const parent = createTestNode('parent-1', 'Parent');
53
+ const node = createTestNode('child-1', 'Child', parent);
54
+ parent.children.push(node);
55
+ const result = await runInContext(createContext(node), () => handleInspectCurrentNode());
56
+ expect(result.id).toBe('child-1');
57
+ expect(result.name).toBe('Child');
58
+ expect(result.status).toBe('running');
59
+ expect(result.parentId).toBe('parent-1');
60
+ expect(result.parentName).toBe('Parent');
61
+ expect(result.depth).toBe(1);
62
+ });
63
+ it('should handle root node (no parent)', async () => {
64
+ const node = createTestNode('root-1', 'Root');
65
+ const result = await runInContext(createContext(node), () => handleInspectCurrentNode());
66
+ expect(result.parentId).toBeUndefined();
67
+ expect(result.depth).toBe(0);
68
+ });
69
+ });
70
+ describe('handleReadAncestorChain', () => {
71
+ it('should throw when not in workflow context', async () => {
72
+ await expect(handleReadAncestorChain({})).rejects.toThrow('Not in workflow context');
73
+ });
74
+ it('should return ancestor chain', async () => {
75
+ const root = createTestNode('root-1', 'Root');
76
+ const parent = createTestNode('parent-1', 'Parent', root);
77
+ root.children.push(parent);
78
+ const child = createTestNode('child-1', 'Child', parent);
79
+ parent.children.push(child);
80
+ const result = await runInContext(createContext(child), () => handleReadAncestorChain({}));
81
+ expect(result.ancestors).toHaveLength(2);
82
+ expect(result.ancestors[0].id).toBe('parent-1');
83
+ expect(result.ancestors[1].id).toBe('root-1');
84
+ expect(result.totalDepth).toBe(2);
85
+ });
86
+ it('should respect maxDepth limit', async () => {
87
+ const root = createTestNode('root-1', 'Root');
88
+ const parent = createTestNode('parent-1', 'Parent', root);
89
+ root.children.push(parent);
90
+ const child = createTestNode('child-1', 'Child', parent);
91
+ parent.children.push(child);
92
+ const result = await runInContext(createContext(child), () => handleReadAncestorChain({ maxDepth: 1 }));
93
+ expect(result.ancestors).toHaveLength(1);
94
+ expect(result.ancestors[0].id).toBe('parent-1');
95
+ });
96
+ });
97
+ describe('handleListSiblingsChildren', () => {
98
+ it('should throw when not in workflow context', async () => {
99
+ await expect(handleListSiblingsChildren({ type: 'children' })).rejects.toThrow('Not in workflow context');
100
+ });
101
+ it('should return children', async () => {
102
+ const parent = createTestNode('parent-1', 'Parent');
103
+ const child1 = createTestNode('child-1', 'Child 1', parent);
104
+ const child2 = createTestNode('child-2', 'Child 2', parent);
105
+ parent.children.push(child1, child2);
106
+ const result = await runInContext(createContext(parent), () => handleListSiblingsChildren({ type: 'children' }));
107
+ expect(result.type).toBe('children');
108
+ expect(result.nodes).toHaveLength(2);
109
+ });
110
+ it('should return siblings (excluding self)', async () => {
111
+ const parent = createTestNode('parent-1', 'Parent');
112
+ const child1 = createTestNode('child-1', 'Child 1', parent);
113
+ const child2 = createTestNode('child-2', 'Child 2', parent);
114
+ parent.children.push(child1, child2);
115
+ const result = await runInContext(createContext(child1), () => handleListSiblingsChildren({ type: 'siblings' }));
116
+ expect(result.type).toBe('siblings');
117
+ expect(result.nodes).toHaveLength(1);
118
+ expect(result.nodes[0].id).toBe('child-2');
119
+ });
120
+ });
121
+ describe('handleInspectPriorOutputs', () => {
122
+ it('should throw when not in workflow context', async () => {
123
+ await expect(handleInspectPriorOutputs({})).rejects.toThrow('Not in workflow context');
124
+ });
125
+ it('should return completed sibling outputs', async () => {
126
+ const parent = createTestNode('parent-1', 'Parent');
127
+ const completed = createTestNode('completed-1', 'Completed', parent);
128
+ completed.status = 'completed';
129
+ // Add a valid workflow event for testing
130
+ completed.events.push({
131
+ type: 'stepEnd',
132
+ node: completed,
133
+ step: 'test-step',
134
+ duration: 100,
135
+ }); // Cast to avoid strict type checking in tests
136
+ const current = createTestNode('current-1', 'Current', parent);
137
+ parent.children.push(completed, current);
138
+ const result = await runInContext(createContext(current), () => handleInspectPriorOutputs({}));
139
+ expect(result).toHaveLength(1);
140
+ expect(result[0].nodeId).toBe('completed-1');
141
+ expect(result[0].status).toBe('completed');
142
+ });
143
+ });
144
+ describe('handleInspectCacheStatus', () => {
145
+ beforeEach(async () => {
146
+ await defaultCache.clear();
147
+ });
148
+ it('should return false for missing cache key', async () => {
149
+ const result = await handleInspectCacheStatus({
150
+ promptHash: 'nonexistent-key',
151
+ });
152
+ expect(result.exists).toBe(false);
153
+ expect(result.key).toBe('nonexistent-key');
154
+ });
155
+ it('should return true for existing cache key', async () => {
156
+ await defaultCache.set('test-key', { data: 'test' });
157
+ const result = await handleInspectCacheStatus({ promptHash: 'test-key' });
158
+ expect(result.exists).toBe(true);
159
+ });
160
+ });
161
+ describe('handleRequestSpawnWorkflow', () => {
162
+ it('should throw when not in workflow context', async () => {
163
+ await expect(handleRequestSpawnWorkflow({ name: 'Test', description: 'Test workflow' })).rejects.toThrow('Not in workflow context');
164
+ });
165
+ it('should return spawn request', async () => {
166
+ const node = createTestNode('node-1', 'Node');
167
+ const result = await runInContext(createContext(node), () => handleRequestSpawnWorkflow({
168
+ name: 'NewWorkflow',
169
+ description: 'A new workflow',
170
+ }));
171
+ expect(result.name).toBe('NewWorkflow');
172
+ expect(result.description).toBe('A new workflow');
173
+ expect(result.requestId).toMatch(/^spawn-/);
174
+ expect(result.status).toBe('pending');
175
+ });
176
+ });
177
+ });
178
+ describe('executeIntrospectionTool', () => {
179
+ it('should execute tool by name', async () => {
180
+ await defaultCache.set('cache-test', 'value');
181
+ const result = await executeIntrospectionTool('inspect_cache_status', {
182
+ promptHash: 'cache-test',
183
+ });
184
+ expect(result).toMatchObject({ exists: true, key: 'cache-test' });
185
+ });
186
+ it('should throw for unknown tool', async () => {
187
+ await expect(executeIntrospectionTool('unknown_tool', {})).rejects.toThrow('Unknown introspection tool');
188
+ });
189
+ });
190
+ });
191
+ //# sourceMappingURL=introspection-tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspection-tools.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/introspection-tools.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/logger.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,241 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { Workflow } from '../../core/workflow';
3
+ describe('WorkflowLogger.child()', () => {
4
+ describe('with Partial<LogEntry> containing parentLogId', () => {
5
+ it('should create child logger with parentLogId from Partial<LogEntry>', async () => {
6
+ class TestWorkflow extends Workflow {
7
+ async run() {
8
+ const childLogger = this.logger.child({ parentLogId: 'parent-123' });
9
+ childLogger.info('Child message');
10
+ }
11
+ }
12
+ const workflow = new TestWorkflow();
13
+ await workflow.run();
14
+ expect(workflow.node.logs.length).toBe(1);
15
+ expect(workflow.node.logs[0].parentLogId).toBe('parent-123');
16
+ expect(workflow.node.logs[0].message).toBe('Child message');
17
+ });
18
+ it('should handle parentLogId with special characters', async () => {
19
+ class TestWorkflow extends Workflow {
20
+ async run() {
21
+ const childLogger = this.logger.child({ parentLogId: 'parent-with-dashes-and_underscores' });
22
+ childLogger.info('Test');
23
+ }
24
+ }
25
+ const workflow = new TestWorkflow();
26
+ await workflow.run();
27
+ expect(workflow.node.logs[0].parentLogId).toBe('parent-with-dashes-and_underscores');
28
+ });
29
+ });
30
+ describe('with Partial<LogEntry> containing id field', () => {
31
+ it('should not use id field as parentLogId', async () => {
32
+ class TestWorkflow extends Workflow {
33
+ async run() {
34
+ // id field should NOT be used as parentLogId
35
+ const childLogger = this.logger.child({ id: 'custom-id' });
36
+ childLogger.info('Test message');
37
+ }
38
+ }
39
+ const workflow = new TestWorkflow();
40
+ await workflow.run();
41
+ // parentLogId is undefined because implementation only checks input.parentLogId
42
+ expect(workflow.node.logs[0].parentLogId).toBeUndefined();
43
+ expect(workflow.node.logs[0].message).toBe('Test message');
44
+ });
45
+ it('should handle both id and parentLogId fields', async () => {
46
+ class TestWorkflow extends Workflow {
47
+ async run() {
48
+ // parentLogId should be used, not id
49
+ const childLogger = this.logger.child({ id: 'custom-id', parentLogId: 'correct-parent' });
50
+ childLogger.info('Test');
51
+ }
52
+ }
53
+ const workflow = new TestWorkflow();
54
+ await workflow.run();
55
+ expect(workflow.node.logs[0].parentLogId).toBe('correct-parent');
56
+ });
57
+ });
58
+ describe('with empty Partial<LogEntry>', () => {
59
+ it('should create child logger with undefined parentLogId from empty object', async () => {
60
+ class TestWorkflow extends Workflow {
61
+ async run() {
62
+ const childLogger = this.logger.child({});
63
+ childLogger.info('Child log with empty parent metadata');
64
+ }
65
+ }
66
+ const workflow = new TestWorkflow();
67
+ await workflow.run();
68
+ expect(workflow.node.logs.length).toBe(1);
69
+ expect(workflow.node.logs[0].parentLogId).toBeUndefined();
70
+ expect(workflow.node.logs[0].message).toBe('Child log with empty parent metadata');
71
+ });
72
+ });
73
+ describe('with string parameter (backward compatibility)', () => {
74
+ it('should create child logger with parentLogId from string', async () => {
75
+ class TestWorkflow extends Workflow {
76
+ async run() {
77
+ const childLogger = this.logger.child('parent-id-123');
78
+ childLogger.info('Child message');
79
+ }
80
+ }
81
+ const workflow = new TestWorkflow();
82
+ await workflow.run();
83
+ expect(workflow.node.logs.length).toBe(1);
84
+ expect(workflow.node.logs[0].parentLogId).toBe('parent-id-123');
85
+ expect(workflow.node.logs[0].message).toBe('Child message');
86
+ });
87
+ it('should create child logger with parentLogId from string containing parentLogId', async () => {
88
+ class TestWorkflow extends Workflow {
89
+ async run() {
90
+ // String value is used directly as parentLogId
91
+ const childLogger = this.logger.child('log-abc-123');
92
+ childLogger.warn('Warning message');
93
+ }
94
+ }
95
+ const workflow = new TestWorkflow();
96
+ await workflow.run();
97
+ expect(workflow.node.logs[0].parentLogId).toBe('log-abc-123');
98
+ expect(workflow.node.logs[0].level).toBe('warn');
99
+ });
100
+ });
101
+ describe('with empty string', () => {
102
+ it('should create child logger with undefined parentLogId from empty string', async () => {
103
+ class TestWorkflow extends Workflow {
104
+ async run() {
105
+ const childLogger = this.logger.child('');
106
+ childLogger.info('Child log with empty parent');
107
+ }
108
+ }
109
+ const workflow = new TestWorkflow();
110
+ await workflow.run();
111
+ expect(workflow.node.logs.length).toBe(1);
112
+ // Empty string is falsy, so parentLogId becomes undefined in log entry
113
+ expect(workflow.node.logs[0].parentLogId).toBeUndefined();
114
+ });
115
+ });
116
+ describe('child logger with different log levels', () => {
117
+ it.each([
118
+ { level: 'debug', method: 'debug' },
119
+ { level: 'info', method: 'info' },
120
+ { level: 'warn', method: 'warn' },
121
+ { level: 'error', method: 'error' },
122
+ ])('should log at $level level with child logger', async ({ level, method }) => {
123
+ class TestWorkflow extends Workflow {
124
+ async run() {
125
+ const childLogger = this.logger.child({ parentLogId: 'parent-123' });
126
+ childLogger[method](`Test ${level} message`);
127
+ }
128
+ }
129
+ const workflow = new TestWorkflow();
130
+ await workflow.run();
131
+ expect(workflow.node.logs[0].level).toBe(level);
132
+ expect(workflow.node.logs[0].parentLogId).toBe('parent-123');
133
+ expect(workflow.node.logs[0].message).toBe(`Test ${level} message`);
134
+ });
135
+ it('should support logging with data parameter at all levels', async () => {
136
+ class TestWorkflow extends Workflow {
137
+ async run() {
138
+ const childLogger = this.logger.child({ parentLogId: 'parent-data' });
139
+ childLogger.debug('Debug message', { debugData: true });
140
+ childLogger.info('Info message', { infoData: 123 });
141
+ childLogger.warn('Warn message', { warnData: 'warning' });
142
+ childLogger.error('Error message', { errorData: { code: 500 } });
143
+ }
144
+ }
145
+ const workflow = new TestWorkflow();
146
+ await workflow.run();
147
+ expect(workflow.node.logs.length).toBe(4);
148
+ expect(workflow.node.logs[0].data).toEqual({ debugData: true });
149
+ expect(workflow.node.logs[1].data).toEqual({ infoData: 123 });
150
+ expect(workflow.node.logs[2].data).toEqual({ warnData: 'warning' });
151
+ expect(workflow.node.logs[3].data).toEqual({ errorData: { code: 500 } });
152
+ });
153
+ });
154
+ describe('parent-child log hierarchy', () => {
155
+ it('should maintain parent-child relationship in log entries', async () => {
156
+ class TestWorkflow extends Workflow {
157
+ async run() {
158
+ // Log from parent logger
159
+ this.logger.info('Parent message');
160
+ // Get the parent log entry ID
161
+ const parentLogId = this.node.logs[0].id;
162
+ // Create child logger with that ID
163
+ const childLogger = this.logger.child({ parentLogId });
164
+ childLogger.info('Child message');
165
+ }
166
+ }
167
+ const workflow = new TestWorkflow();
168
+ await workflow.run();
169
+ // Verify hierarchy
170
+ expect(workflow.node.logs.length).toBe(2);
171
+ expect(workflow.node.logs[0].parentLogId).toBeUndefined(); // Root log
172
+ expect(workflow.node.logs[1].parentLogId).toBe(workflow.node.logs[0].id); // Child log
173
+ expect(workflow.node.logs[0].message).toBe('Parent message');
174
+ expect(workflow.node.logs[1].message).toBe('Child message');
175
+ });
176
+ it('should support multi-level nesting with child loggers', async () => {
177
+ class TestWorkflow extends Workflow {
178
+ async run() {
179
+ // Root log
180
+ this.logger.info('Root message');
181
+ const rootLogId = this.node.logs[0].id;
182
+ // First level child
183
+ const child1 = this.logger.child({ parentLogId: rootLogId });
184
+ child1.info('Level 1 child');
185
+ const level1LogId = this.node.logs[1].id;
186
+ // Second level child
187
+ const child2 = this.logger.child({ parentLogId: level1LogId });
188
+ child2.info('Level 2 child');
189
+ }
190
+ }
191
+ const workflow = new TestWorkflow();
192
+ await workflow.run();
193
+ expect(workflow.node.logs.length).toBe(3);
194
+ expect(workflow.node.logs[0].parentLogId).toBeUndefined();
195
+ expect(workflow.node.logs[1].parentLogId).toBe(workflow.node.logs[0].id);
196
+ expect(workflow.node.logs[2].parentLogId).toBe(workflow.node.logs[1].id);
197
+ });
198
+ it('should support string-based parent-child hierarchy', async () => {
199
+ class TestWorkflow extends Workflow {
200
+ async run() {
201
+ // Log from parent
202
+ this.logger.info('Parent log');
203
+ const parentLogId = this.node.logs[0].id;
204
+ // Create child using string parentLogId (backward compatibility)
205
+ const childLogger = this.logger.child(parentLogId);
206
+ childLogger.info('Child log');
207
+ }
208
+ }
209
+ const workflow = new TestWorkflow();
210
+ await workflow.run();
211
+ expect(workflow.node.logs.length).toBe(2);
212
+ expect(workflow.node.logs[0].parentLogId).toBeUndefined();
213
+ expect(workflow.node.logs[1].parentLogId).toBe(workflow.node.logs[0].id);
214
+ });
215
+ it('should allow multiple child loggers from same parent', async () => {
216
+ class TestWorkflow extends Workflow {
217
+ async run() {
218
+ // Parent log
219
+ this.logger.info('Parent');
220
+ const parentLogId = this.node.logs[0].id;
221
+ // Multiple children from same parent
222
+ const child1 = this.logger.child({ parentLogId });
223
+ child1.info('First child');
224
+ const child2 = this.logger.child({ parentLogId });
225
+ child2.info('Second child');
226
+ const child3 = this.logger.child({ parentLogId });
227
+ child3.info('Third child');
228
+ }
229
+ }
230
+ const workflow = new TestWorkflow();
231
+ await workflow.run();
232
+ expect(workflow.node.logs.length).toBe(4);
233
+ expect(workflow.node.logs[0].parentLogId).toBeUndefined();
234
+ // All children should have the same parent
235
+ expect(workflow.node.logs[1].parentLogId).toBe(workflow.node.logs[0].id);
236
+ expect(workflow.node.logs[2].parentLogId).toBe(workflow.node.logs[0].id);
237
+ expect(workflow.node.logs[3].parentLogId).toBe(workflow.node.logs[0].id);
238
+ });
239
+ });
240
+ });
241
+ //# sourceMappingURL=logger.test.js.map