groundswell 0.0.2 → 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 (633) hide show
  1. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts +16 -0
  2. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts.map +1 -0
  3. package/dist/__tests__/adversarial/attachChild-performance.test.js +187 -0
  4. package/dist/__tests__/adversarial/attachChild-performance.test.js.map +1 -0
  5. package/dist/__tests__/adversarial/circular-reference.test.d.ts +13 -0
  6. package/dist/__tests__/adversarial/circular-reference.test.d.ts.map +1 -0
  7. package/dist/__tests__/adversarial/circular-reference.test.js +92 -0
  8. package/dist/__tests__/adversarial/circular-reference.test.js.map +1 -0
  9. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts +16 -0
  10. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts.map +1 -0
  11. package/dist/__tests__/adversarial/complex-circular-reference.test.js +127 -0
  12. package/dist/__tests__/adversarial/complex-circular-reference.test.js.map +1 -0
  13. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts +21 -0
  14. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts.map +1 -0
  15. package/dist/__tests__/adversarial/concurrent-task-failures.test.js +667 -0
  16. package/dist/__tests__/adversarial/concurrent-task-failures.test.js.map +1 -0
  17. package/dist/__tests__/adversarial/deep-analysis.test.d.ts +6 -0
  18. package/dist/__tests__/adversarial/deep-analysis.test.d.ts.map +1 -0
  19. package/dist/__tests__/adversarial/deep-analysis.test.js +877 -0
  20. package/dist/__tests__/adversarial/deep-analysis.test.js.map +1 -0
  21. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts +13 -0
  22. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts.map +1 -0
  23. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js +186 -0
  24. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js.map +1 -0
  25. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts +6 -0
  26. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts.map +1 -0
  27. package/dist/__tests__/adversarial/e2e-prd-validation.test.js +626 -0
  28. package/dist/__tests__/adversarial/e2e-prd-validation.test.js.map +1 -0
  29. package/dist/__tests__/adversarial/edge-case.test.d.ts +6 -0
  30. package/dist/__tests__/adversarial/edge-case.test.d.ts.map +1 -0
  31. package/dist/__tests__/adversarial/edge-case.test.js +857 -0
  32. package/dist/__tests__/adversarial/edge-case.test.js.map +1 -0
  33. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts +20 -0
  34. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts.map +1 -0
  35. package/dist/__tests__/adversarial/error-merge-strategy.test.js +907 -0
  36. package/dist/__tests__/adversarial/error-merge-strategy.test.js.map +1 -0
  37. package/dist/__tests__/adversarial/incremental-performance.test.d.ts +2 -0
  38. package/dist/__tests__/adversarial/incremental-performance.test.d.ts.map +1 -0
  39. package/dist/__tests__/adversarial/incremental-performance.test.js +113 -0
  40. package/dist/__tests__/adversarial/incremental-performance.test.js.map +1 -0
  41. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts +22 -0
  42. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts.map +1 -0
  43. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js +383 -0
  44. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js.map +1 -0
  45. package/dist/__tests__/adversarial/observer-propagation.test.d.ts +21 -0
  46. package/dist/__tests__/adversarial/observer-propagation.test.d.ts.map +1 -0
  47. package/dist/__tests__/adversarial/observer-propagation.test.js +404 -0
  48. package/dist/__tests__/adversarial/observer-propagation.test.js.map +1 -0
  49. package/dist/__tests__/adversarial/parent-validation.test.d.ts +13 -0
  50. package/dist/__tests__/adversarial/parent-validation.test.d.ts.map +1 -0
  51. package/dist/__tests__/adversarial/parent-validation.test.js +128 -0
  52. package/dist/__tests__/adversarial/parent-validation.test.js.map +1 -0
  53. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts +20 -0
  54. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts.map +1 -0
  55. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js +482 -0
  56. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js.map +1 -0
  57. package/dist/__tests__/adversarial/prd-compliance.test.d.ts +6 -0
  58. package/dist/__tests__/adversarial/prd-compliance.test.d.ts.map +1 -0
  59. package/dist/__tests__/adversarial/prd-compliance.test.js +886 -0
  60. package/dist/__tests__/adversarial/prd-compliance.test.js.map +1 -0
  61. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts +22 -0
  62. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts.map +1 -0
  63. package/dist/__tests__/compatibility/backward-compatibility.test.js +1843 -0
  64. package/dist/__tests__/compatibility/backward-compatibility.test.js.map +1 -0
  65. package/dist/__tests__/helpers/index.d.ts +10 -0
  66. package/dist/__tests__/helpers/index.d.ts.map +1 -0
  67. package/{src/__tests__/helpers/index.ts → dist/__tests__/helpers/index.js} +2 -10
  68. package/dist/__tests__/helpers/index.js.map +1 -0
  69. package/dist/__tests__/helpers/tree-verification.d.ts +90 -0
  70. package/dist/__tests__/helpers/tree-verification.d.ts.map +1 -0
  71. package/dist/__tests__/helpers/tree-verification.js +202 -0
  72. package/dist/__tests__/helpers/tree-verification.js.map +1 -0
  73. package/dist/__tests__/integration/agent-workflow.test.d.ts +2 -0
  74. package/dist/__tests__/integration/agent-workflow.test.d.ts.map +1 -0
  75. package/dist/__tests__/integration/agent-workflow.test.js +256 -0
  76. package/dist/__tests__/integration/agent-workflow.test.js.map +1 -0
  77. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts +14 -0
  78. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts.map +1 -0
  79. package/dist/__tests__/integration/bidirectional-consistency.test.js +668 -0
  80. package/dist/__tests__/integration/bidirectional-consistency.test.js.map +1 -0
  81. package/dist/__tests__/integration/observer-logging.test.d.ts +2 -0
  82. package/dist/__tests__/integration/observer-logging.test.d.ts.map +1 -0
  83. package/dist/__tests__/integration/observer-logging.test.js +517 -0
  84. package/dist/__tests__/integration/observer-logging.test.js.map +1 -0
  85. package/dist/__tests__/integration/tree-mirroring.test.d.ts +2 -0
  86. package/dist/__tests__/integration/tree-mirroring.test.d.ts.map +1 -0
  87. package/dist/__tests__/integration/tree-mirroring.test.js +117 -0
  88. package/dist/__tests__/integration/tree-mirroring.test.js.map +1 -0
  89. package/dist/__tests__/integration/workflow-reparenting.test.d.ts +12 -0
  90. package/dist/__tests__/integration/workflow-reparenting.test.d.ts.map +1 -0
  91. package/dist/__tests__/integration/workflow-reparenting.test.js +239 -0
  92. package/dist/__tests__/integration/workflow-reparenting.test.js.map +1 -0
  93. package/dist/__tests__/unit/agent.test.d.ts +2 -0
  94. package/dist/__tests__/unit/agent.test.d.ts.map +1 -0
  95. package/dist/__tests__/unit/agent.test.js +143 -0
  96. package/dist/__tests__/unit/agent.test.js.map +1 -0
  97. package/dist/__tests__/unit/cache-key.test.d.ts +5 -0
  98. package/dist/__tests__/unit/cache-key.test.d.ts.map +1 -0
  99. package/dist/__tests__/unit/cache-key.test.js +145 -0
  100. package/dist/__tests__/unit/cache-key.test.js.map +1 -0
  101. package/dist/__tests__/unit/cache.test.d.ts +5 -0
  102. package/dist/__tests__/unit/cache.test.d.ts.map +1 -0
  103. package/dist/__tests__/unit/cache.test.js +132 -0
  104. package/dist/__tests__/unit/cache.test.js.map +1 -0
  105. package/dist/__tests__/unit/context.test.d.ts +2 -0
  106. package/dist/__tests__/unit/context.test.d.ts.map +1 -0
  107. package/dist/__tests__/unit/context.test.js +220 -0
  108. package/dist/__tests__/unit/context.test.js.map +1 -0
  109. package/dist/__tests__/unit/decorators.test.d.ts +2 -0
  110. package/dist/__tests__/unit/decorators.test.d.ts.map +1 -0
  111. package/dist/__tests__/unit/decorators.test.js +162 -0
  112. package/dist/__tests__/unit/decorators.test.js.map +1 -0
  113. package/dist/__tests__/unit/introspection-tools.test.d.ts +5 -0
  114. package/dist/__tests__/unit/introspection-tools.test.d.ts.map +1 -0
  115. package/dist/__tests__/unit/introspection-tools.test.js +191 -0
  116. package/dist/__tests__/unit/introspection-tools.test.js.map +1 -0
  117. package/dist/__tests__/unit/logger.test.d.ts +2 -0
  118. package/dist/__tests__/unit/logger.test.d.ts.map +1 -0
  119. package/dist/__tests__/unit/logger.test.js +241 -0
  120. package/dist/__tests__/unit/logger.test.js.map +1 -0
  121. package/dist/__tests__/unit/observable.test.d.ts +2 -0
  122. package/dist/__tests__/unit/observable.test.d.ts.map +1 -0
  123. package/dist/__tests__/unit/observable.test.js +251 -0
  124. package/dist/__tests__/unit/observable.test.js.map +1 -0
  125. package/dist/__tests__/unit/prompt.test.d.ts +2 -0
  126. package/dist/__tests__/unit/prompt.test.d.ts.map +1 -0
  127. package/dist/__tests__/unit/prompt.test.js +113 -0
  128. package/dist/__tests__/unit/prompt.test.js.map +1 -0
  129. package/dist/__tests__/unit/reflection.test.d.ts +5 -0
  130. package/dist/__tests__/unit/reflection.test.d.ts.map +1 -0
  131. package/dist/__tests__/unit/reflection.test.js +160 -0
  132. package/dist/__tests__/unit/reflection.test.js.map +1 -0
  133. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts +2 -0
  134. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts.map +1 -0
  135. package/dist/__tests__/unit/tree-debugger-incremental.test.js +136 -0
  136. package/dist/__tests__/unit/tree-debugger-incremental.test.js.map +1 -0
  137. package/dist/__tests__/unit/tree-debugger.test.d.ts +2 -0
  138. package/dist/__tests__/unit/tree-debugger.test.d.ts.map +1 -0
  139. package/dist/__tests__/unit/tree-debugger.test.js +69 -0
  140. package/dist/__tests__/unit/tree-debugger.test.js.map +1 -0
  141. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts +2 -0
  142. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts.map +1 -0
  143. package/dist/__tests__/unit/utils/workflow-error-utils.test.js +154 -0
  144. package/dist/__tests__/unit/utils/workflow-error-utils.test.js.map +1 -0
  145. package/dist/__tests__/unit/workflow-detachChild.test.d.ts +2 -0
  146. package/dist/__tests__/unit/workflow-detachChild.test.d.ts.map +1 -0
  147. package/dist/__tests__/unit/workflow-detachChild.test.js +76 -0
  148. package/dist/__tests__/unit/workflow-detachChild.test.js.map +1 -0
  149. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts +2 -0
  150. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts.map +1 -0
  151. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js +122 -0
  152. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js.map +1 -0
  153. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts +2 -0
  154. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts.map +1 -0
  155. package/dist/__tests__/unit/workflow-isDescendantOf.test.js +140 -0
  156. package/dist/__tests__/unit/workflow-isDescendantOf.test.js.map +1 -0
  157. package/dist/__tests__/unit/workflow.test.d.ts +2 -0
  158. package/dist/__tests__/unit/workflow.test.d.ts.map +1 -0
  159. package/dist/__tests__/unit/workflow.test.js +330 -0
  160. package/dist/__tests__/unit/workflow.test.js.map +1 -0
  161. package/dist/cache/cache-key.d.ts +66 -0
  162. package/dist/cache/cache-key.d.ts.map +1 -0
  163. package/dist/cache/cache-key.js +195 -0
  164. package/dist/cache/cache-key.js.map +1 -0
  165. package/dist/cache/cache.d.ts +104 -0
  166. package/dist/cache/cache.d.ts.map +1 -0
  167. package/dist/cache/cache.js +179 -0
  168. package/dist/cache/cache.js.map +1 -0
  169. package/{src/cache/index.ts → dist/cache/index.d.ts} +1 -1
  170. package/dist/cache/index.d.ts.map +1 -0
  171. package/dist/cache/index.js +6 -0
  172. package/dist/cache/index.js.map +1 -0
  173. package/dist/core/agent.d.ts +112 -0
  174. package/dist/core/agent.d.ts.map +1 -0
  175. package/dist/core/agent.js +426 -0
  176. package/dist/core/agent.js.map +1 -0
  177. package/{src/core/context.ts → dist/core/context.d.ts} +16 -67
  178. package/dist/core/context.d.ts.map +1 -0
  179. package/dist/core/context.js +80 -0
  180. package/dist/core/context.js.map +1 -0
  181. package/dist/core/event-tree.d.ts +72 -0
  182. package/dist/core/event-tree.d.ts.map +1 -0
  183. package/dist/core/event-tree.js +211 -0
  184. package/dist/core/event-tree.js.map +1 -0
  185. package/{src/core/factory.ts → dist/core/factory.d.ts} +6 -27
  186. package/dist/core/factory.d.ts.map +1 -0
  187. package/dist/core/factory.js +110 -0
  188. package/dist/core/factory.js.map +1 -0
  189. package/{src/core/index.ts → dist/core/index.d.ts} +2 -10
  190. package/dist/core/index.d.ts.map +1 -0
  191. package/dist/core/index.js +9 -0
  192. package/dist/core/index.js.map +1 -0
  193. package/dist/core/logger.d.ts +50 -0
  194. package/dist/core/logger.d.ts.map +1 -0
  195. package/dist/core/logger.js +91 -0
  196. package/dist/core/logger.js.map +1 -0
  197. package/dist/core/mcp-handler.d.ts +69 -0
  198. package/dist/core/mcp-handler.d.ts.map +1 -0
  199. package/dist/core/mcp-handler.js +143 -0
  200. package/dist/core/mcp-handler.js.map +1 -0
  201. package/dist/core/prompt.d.ts +80 -0
  202. package/dist/core/prompt.d.ts.map +1 -0
  203. package/dist/core/prompt.js +120 -0
  204. package/dist/core/prompt.js.map +1 -0
  205. package/dist/core/workflow-context.d.ts +57 -0
  206. package/dist/core/workflow-context.d.ts.map +1 -0
  207. package/dist/core/workflow-context.js +263 -0
  208. package/dist/core/workflow-context.js.map +1 -0
  209. package/dist/core/workflow.d.ts +241 -0
  210. package/dist/core/workflow.d.ts.map +1 -0
  211. package/dist/core/workflow.js +464 -0
  212. package/dist/core/workflow.js.map +1 -0
  213. package/dist/debugger/index.d.ts +2 -0
  214. package/dist/debugger/index.d.ts.map +1 -0
  215. package/{src/debugger/index.ts → dist/debugger/index.js} +1 -0
  216. package/dist/debugger/index.js.map +1 -0
  217. package/dist/debugger/tree-debugger.d.ts +71 -0
  218. package/dist/debugger/tree-debugger.d.ts.map +1 -0
  219. package/dist/debugger/tree-debugger.js +198 -0
  220. package/dist/debugger/tree-debugger.js.map +1 -0
  221. package/dist/decorators/index.d.ts +4 -0
  222. package/dist/decorators/index.d.ts.map +1 -0
  223. package/{src/decorators/index.ts → dist/decorators/index.js} +1 -0
  224. package/dist/decorators/index.js.map +1 -0
  225. package/dist/decorators/observed-state.d.ts +32 -0
  226. package/dist/decorators/observed-state.d.ts.map +1 -0
  227. package/dist/decorators/observed-state.js +79 -0
  228. package/dist/decorators/observed-state.js.map +1 -0
  229. package/dist/decorators/step.d.ts +15 -0
  230. package/dist/decorators/step.d.ts.map +1 -0
  231. package/dist/decorators/step.js +110 -0
  232. package/dist/decorators/step.js.map +1 -0
  233. package/dist/decorators/task.d.ts +50 -0
  234. package/dist/decorators/task.d.ts.map +1 -0
  235. package/dist/decorators/task.js +118 -0
  236. package/dist/decorators/task.js.map +1 -0
  237. package/dist/examples/index.d.ts +3 -0
  238. package/dist/examples/index.d.ts.map +1 -0
  239. package/{src/examples/index.ts → dist/examples/index.js} +1 -0
  240. package/dist/examples/index.js.map +1 -0
  241. package/dist/examples/tdd-orchestrator.d.ts +15 -0
  242. package/dist/examples/tdd-orchestrator.d.ts.map +1 -0
  243. package/dist/examples/tdd-orchestrator.js +121 -0
  244. package/dist/examples/tdd-orchestrator.js.map +1 -0
  245. package/dist/examples/test-cycle-workflow.d.ts +14 -0
  246. package/dist/examples/test-cycle-workflow.d.ts.map +1 -0
  247. package/dist/examples/test-cycle-workflow.js +116 -0
  248. package/dist/examples/test-cycle-workflow.js.map +1 -0
  249. package/dist/index.d.ts +27 -0
  250. package/dist/index.d.ts.map +1 -0
  251. package/dist/index.js +40 -0
  252. package/dist/index.js.map +1 -0
  253. package/dist/reflection/index.d.ts +5 -0
  254. package/dist/reflection/index.d.ts.map +1 -0
  255. package/{src/reflection/index.ts → dist/reflection/index.js} +1 -1
  256. package/dist/reflection/index.js.map +1 -0
  257. package/dist/reflection/reflection.d.ts +84 -0
  258. package/dist/reflection/reflection.d.ts.map +1 -0
  259. package/dist/reflection/reflection.js +329 -0
  260. package/dist/reflection/reflection.js.map +1 -0
  261. package/dist/tools/index.d.ts +6 -0
  262. package/dist/tools/index.d.ts.map +1 -0
  263. package/dist/tools/index.js +11 -0
  264. package/dist/tools/index.js.map +1 -0
  265. package/dist/tools/introspection.d.ts +165 -0
  266. package/dist/tools/introspection.d.ts.map +1 -0
  267. package/dist/tools/introspection.js +324 -0
  268. package/dist/tools/introspection.js.map +1 -0
  269. package/dist/types/agent.d.ts +66 -0
  270. package/dist/types/agent.d.ts.map +1 -0
  271. package/dist/types/agent.js +6 -0
  272. package/dist/types/agent.js.map +1 -0
  273. package/dist/types/decorators.d.ts +31 -0
  274. package/dist/types/decorators.d.ts.map +1 -0
  275. package/dist/types/decorators.js +2 -0
  276. package/dist/types/decorators.js.map +1 -0
  277. package/dist/types/error-strategy.d.ts +13 -0
  278. package/dist/types/error-strategy.d.ts.map +1 -0
  279. package/dist/types/error-strategy.js +2 -0
  280. package/dist/types/error-strategy.js.map +1 -0
  281. package/dist/types/error.d.ts +20 -0
  282. package/dist/types/error.d.ts.map +1 -0
  283. package/dist/types/error.js +2 -0
  284. package/dist/types/error.js.map +1 -0
  285. package/dist/types/events.d.ts +87 -0
  286. package/dist/types/events.d.ts.map +1 -0
  287. package/dist/types/events.js +2 -0
  288. package/dist/types/events.js.map +1 -0
  289. package/dist/types/index.d.ts +15 -0
  290. package/dist/types/index.d.ts.map +1 -0
  291. package/dist/types/index.js +2 -0
  292. package/dist/types/index.js.map +1 -0
  293. package/dist/types/logging.d.ts +24 -0
  294. package/dist/types/logging.d.ts.map +1 -0
  295. package/dist/types/logging.js +2 -0
  296. package/dist/types/logging.js.map +1 -0
  297. package/dist/types/observer.d.ts +18 -0
  298. package/dist/types/observer.d.ts.map +1 -0
  299. package/dist/types/observer.js +2 -0
  300. package/dist/types/observer.js.map +1 -0
  301. package/dist/types/prompt.d.ts +31 -0
  302. package/dist/types/prompt.d.ts.map +1 -0
  303. package/dist/types/prompt.js +6 -0
  304. package/dist/types/prompt.js.map +1 -0
  305. package/dist/types/reflection.d.ts +96 -0
  306. package/dist/types/reflection.d.ts.map +1 -0
  307. package/dist/types/reflection.js +24 -0
  308. package/dist/types/reflection.js.map +1 -0
  309. package/dist/types/sdk-primitives.d.ts +118 -0
  310. package/dist/types/sdk-primitives.d.ts.map +1 -0
  311. package/dist/types/sdk-primitives.js +6 -0
  312. package/dist/types/sdk-primitives.js.map +1 -0
  313. package/{src/types/snapshot.ts → dist/types/snapshot.d.ts} +5 -5
  314. package/dist/types/snapshot.d.ts.map +1 -0
  315. package/dist/types/snapshot.js +2 -0
  316. package/dist/types/snapshot.js.map +1 -0
  317. package/dist/types/workflow-context.d.ts +139 -0
  318. package/dist/types/workflow-context.d.ts.map +1 -0
  319. package/dist/types/workflow-context.js +8 -0
  320. package/dist/types/workflow-context.js.map +1 -0
  321. package/dist/types/workflow.d.ts +30 -0
  322. package/dist/types/workflow.d.ts.map +1 -0
  323. package/dist/types/workflow.js +2 -0
  324. package/dist/types/workflow.js.map +1 -0
  325. package/dist/utils/id.d.ts +6 -0
  326. package/dist/utils/id.d.ts.map +1 -0
  327. package/dist/utils/id.js +12 -0
  328. package/dist/utils/id.js.map +1 -0
  329. package/{src/utils/index.ts → dist/utils/index.d.ts} +1 -0
  330. package/dist/utils/index.d.ts.map +1 -0
  331. package/dist/utils/index.js +4 -0
  332. package/dist/utils/index.js.map +1 -0
  333. package/dist/utils/observable.d.ts +54 -0
  334. package/dist/utils/observable.d.ts.map +1 -0
  335. package/dist/utils/observable.js +82 -0
  336. package/dist/utils/observable.js.map +1 -0
  337. package/dist/utils/workflow-error-utils.d.ts +22 -0
  338. package/dist/utils/workflow-error-utils.d.ts.map +1 -0
  339. package/dist/utils/workflow-error-utils.js +45 -0
  340. package/dist/utils/workflow-error-utils.js.map +1 -0
  341. package/package.json +5 -2
  342. package/.claude/commands/subtask-planning/prp-base-create.md +0 -120
  343. package/.claude/commands/subtask-planning/prp-base-execute.md +0 -65
  344. package/.claude/commands/task-breakdown.md +0 -94
  345. package/.claude/settings.local.json +0 -9
  346. package/.claude/system_prompts/task-breakdown.md +0 -101
  347. package/PRD.md +0 -543
  348. package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
  349. package/PRPs/PRDs/002-agent-prompt.md +0 -390
  350. package/PRPs/PRDs/003-agent-prompt.md +0 -943
  351. package/PRPs/PRDs/004-agent-prompt.md +0 -1136
  352. package/PRPs/PRDs/tasks-001.json +0 -492
  353. package/PRPs/README.md +0 -83
  354. package/PRPs/templates/prp_base.md +0 -222
  355. package/docs/agent.md +0 -422
  356. package/docs/prompt.md +0 -419
  357. package/docs/workflow.md +0 -600
  358. package/examples/README.md +0 -258
  359. package/examples/examples/01-basic-workflow.ts +0 -100
  360. package/examples/examples/02-decorator-options.ts +0 -217
  361. package/examples/examples/03-parent-child.ts +0 -241
  362. package/examples/examples/04-observers-debugger.ts +0 -340
  363. package/examples/examples/05-error-handling.ts +0 -387
  364. package/examples/examples/06-concurrent-tasks.ts +0 -352
  365. package/examples/examples/07-agent-loops.ts +0 -432
  366. package/examples/examples/08-sdk-features.ts +0 -667
  367. package/examples/examples/09-reflection.ts +0 -573
  368. package/examples/examples/10-introspection.ts +0 -550
  369. package/examples/examples/11-reparenting-workflows.ts +0 -269
  370. package/examples/index.ts +0 -147
  371. package/examples/utils/helpers.ts +0 -57
  372. package/package-lock.json +0 -2398
  373. package/plan/001_d3bb02af4886/TEST_RESULTS.md +0 -259
  374. package/plan/001_d3bb02af4886/backlog.json +0 -867
  375. package/plan/001_d3bb02af4886/bug_fix_tasks.json +0 -484
  376. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S1/PRP.md +0 -488
  377. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md +0 -581
  378. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md +0 -687
  379. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S1/PRP.md +0 -492
  380. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/PRP.md +0 -932
  381. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/concurrent_error_testing_patterns.md +0 -1109
  382. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/vitest_concurrent_testing.md +0 -802
  383. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/workflow_engine_test_references.md +0 -603
  384. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S1/PRP.md +0 -564
  385. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S3/PRP.md +0 -518
  386. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S4/PRP.md +0 -1252
  387. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/PRP.md +0 -364
  388. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/CODEBASE_INVENTORY.md +0 -114
  389. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/DECORATOR_DOCUMENTATION_PATTERNS.md +0 -205
  390. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/PRD_LOCATION_ANALYSIS.md +0 -199
  391. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/ULTRATHINK_PRP_PLAN.md +0 -134
  392. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/PRP.md +0 -495
  393. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md +0 -435
  394. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md +0 -506
  395. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S3/PRP.md +0 -612
  396. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/PRP.md +0 -558
  397. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md +0 -788
  398. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S2/PRP.md +0 -460
  399. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S3/PRP.md +0 -454
  400. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/PRP.md +0 -520
  401. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md +0 -417
  402. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/external_workflow_engines_research.md +0 -760
  403. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md +0 -245
  404. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S2/PRP.md +0 -792
  405. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/PRP.md +0 -535
  406. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md +0 -190
  407. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/PRP.md +0 -654
  408. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/TEST_FIX_REPORT.md +0 -227
  409. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/KEY_FINDINGS.md +0 -345
  410. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/QUICK_REFERENCE.md +0 -193
  411. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/test_maintenance_research.md +0 -1323
  412. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/BREAKING_CHANGES_AUDIT.md +0 -1011
  413. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/PRP.md +0 -927
  414. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S2/PRP.md +0 -505
  415. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/architecture/logger_child_signature_analysis.md +0 -401
  416. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/child_implementation_research.md +0 -142
  417. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/test_patterns_research.md +0 -112
  418. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/vitest_patterns_research.md +0 -159
  419. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/PRP.md +0 -549
  420. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md +0 -368
  421. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/edge_case_analysis.md +0 -172
  422. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/usage_inventory.md +0 -175
  423. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S2/PRP.md +0 -696
  424. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S4/PRP.md +0 -860
  425. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/PRP.md +0 -1066
  426. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01-testing-aggregated-errors.md +0 -1103
  427. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01_typescript_error_aggregation_patterns.md +0 -789
  428. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02-error-merge-strategy-testing-guide.md +0 -1098
  429. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02_aggregate_error_patterns.md +0 -1037
  430. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03-promise-allsettled-testing-patterns.md +0 -916
  431. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03_error_merging_strategies.md +0 -1045
  432. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/04_github_stackoverflow_examples.md +0 -890
  433. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/05_comprehensive_summary.md +0 -822
  434. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/INDEX.md +0 -668
  435. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/QUICK_REFERENCE.md +0 -706
  436. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/README.md +0 -265
  437. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/RESEARCH_REPORT.md +0 -655
  438. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S4/research/vitest_testing_patterns.md +0 -1103
  439. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T3S2/PRP.md +0 -426
  440. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/PRP.md +0 -506
  441. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/QUICK_REFERENCE.md +0 -114
  442. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/RESEARCH_SUMMARY.md +0 -316
  443. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/vitest_observer_error_logging_best_practices.md +0 -754
  444. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S3/PRP.md +0 -612
  445. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/PRP.md +0 -719
  446. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/README.md +0 -215
  447. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md +0 -765
  448. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S3/PRP.md +0 -718
  449. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md +0 -149
  450. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/PRP.md +0 -470
  451. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/ULTRATHINK_PLAN.md +0 -332
  452. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/codebase_workflow_name_analysis.md +0 -167
  453. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/external_best_practices.md +0 -265
  454. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md +0 -273
  455. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md +0 -760
  456. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S3-PRP.md +0 -434
  457. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S1/PRP.md +0 -717
  458. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/PRP.md +0 -472
  459. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/VALIDATION_REPORT.md +0 -125
  460. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/research/ULTRATHINK_PRP_PLAN.md +0 -301
  461. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/error-logging-best-practices.md +0 -1170
  462. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/research_typescript_partial_and_overloads.md +0 -940
  463. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-quick-reference.md +0 -151
  464. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-research.md +0 -650
  465. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md +0 -259
  466. package/plan/001_d3bb02af4886/bugfix/P1M1T1S1/PRP.md +0 -457
  467. package/plan/001_d3bb02af4886/bugfix/RESEARCH_SUMMARY.md +0 -346
  468. package/plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md +0 -311
  469. package/plan/001_d3bb02af4886/bugfix/architecture/concurrent_execution_best_practices.md +0 -1565
  470. package/plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md +0 -288
  471. package/plan/001_d3bb02af4886/bugfix/architecture/promise_all_analysis.md +0 -741
  472. package/plan/001_d3bb02af4886/docs/PRP/P1M1T1S4-functional-workflow-error-state-capture-test.md +0 -652
  473. package/plan/001_d3bb02af4886/docs/PRP/P1P2-PRP.md +0 -527
  474. package/plan/001_d3bb02af4886/docs/PRP/P3P4-PRP.md +0 -1388
  475. package/plan/001_d3bb02af4886/docs/PRP/P4P5-PRP.md +0 -1136
  476. package/plan/001_d3bb02af4886/docs/PRP/PRP.md +0 -527
  477. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S1-PRP.md +0 -415
  478. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S2-PRP.md +0 -378
  479. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S4-PRP.md +0 -713
  480. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M2T1S4-PRP.md +0 -370
  481. package/plan/001_d3bb02af4886/docs/PRP_P1M3T1S3.md +0 -499
  482. package/plan/001_d3bb02af4886/docs/TEST_RESULTS.md +0 -230
  483. package/plan/001_d3bb02af4886/docs/architecture/external_deps.md +0 -358
  484. package/plan/001_d3bb02af4886/docs/architecture/system_context.md +0 -242
  485. package/plan/001_d3bb02af4886/docs/bugfix/ANALYSIS_PRD_VS_IMPLEMENTATION.md +0 -1134
  486. package/plan/001_d3bb02af4886/docs/bugfix/GAP_ANALYSIS_SUMMARY.md +0 -179
  487. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/PRP.md +0 -629
  488. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/validation-report.md +0 -214
  489. package/plan/001_d3bb02af4886/docs/bugfix/PRP_P1M4T2S3.md +0 -629
  490. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_PRP.md +0 -529
  491. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_QUICK_REFERENCE.md +0 -142
  492. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_README.md +0 -304
  493. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_TEST_RESULTS.md +0 -558
  494. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_VALIDATION_SUMMARY.md +0 -256
  495. package/plan/001_d3bb02af4886/docs/bugfix/system_context.md +0 -346
  496. package/plan/001_d3bb02af4886/docs/bugfix-architecture/bug_analysis.md +0 -415
  497. package/plan/001_d3bb02af4886/docs/bugfix-architecture/implementation_patterns.md +0 -489
  498. package/plan/001_d3bb02af4886/docs/bugfix-architecture/system_context.md +0 -218
  499. package/plan/001_d3bb02af4886/docs/bugfix_INITIATION_SUMMARY.md +0 -380
  500. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_PATTERNS.md +0 -1923
  501. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_QUICK_REF.md +0 -319
  502. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/codebase-context.md +0 -115
  503. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/cycle-detection-algorithms.md +0 -134
  504. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/test-patterns.md +0 -153
  505. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/workflow-class.md +0 -132
  506. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_BEST_PRACTICES.md +0 -716
  507. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_QUICK_REF.md +0 -186
  508. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/GROUNDSWELL_DECORATOR_EXAMPLES.md +0 -604
  509. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/INDEX.md +0 -213
  510. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/codebase_structure.md +0 -30
  511. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/existing_test_pattern.md +0 -56
  512. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/getRootObservers_implementation.md +0 -53
  513. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/test_conventions.md +0 -49
  514. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/PRP.md +0 -958
  515. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/QUICK_REFERENCE.md +0 -339
  516. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/README.md +0 -305
  517. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/SUMMARY.md +0 -433
  518. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/bidirectional-tree-consistency-testing.md +0 -1574
  519. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/test-pattern-examples.md +0 -1014
  520. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_BEST_PRACTICES.md +0 -1929
  521. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_CODE_PATTERNS.md +0 -857
  522. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
  523. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_RESEARCH_INDEX.md +0 -424
  524. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_INDEX.md +0 -291
  525. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_RESEARCH_REPORT.md +0 -1342
  526. package/plan/001_d3bb02af4886/docs/research/P1P2/RESEARCH_SUMMARY.md +0 -342
  527. package/plan/001_d3bb02af4886/docs/research/P1P2/anthropic-sdk.md +0 -174
  528. package/plan/001_d3bb02af4886/docs/research/P1P2/async-local-storage.md +0 -200
  529. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-code-patterns.md +0 -1205
  530. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-decision-matrix.md +0 -421
  531. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-implementation-guide.md +0 -1341
  532. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-integration-guide.md +0 -834
  533. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-patterns.md +0 -1468
  534. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-quick-reference.md +0 -558
  535. package/plan/001_d3bb02af4886/docs/research/P1P2/zod-schema.md +0 -152
  536. package/plan/001_d3bb02af4886/docs/research/P3P4/caching-lru.md +0 -116
  537. package/plan/001_d3bb02af4886/docs/research/P3P4/introspection-tools.md +0 -177
  538. package/plan/001_d3bb02af4886/docs/research/P3P4/reflection-patterns.md +0 -117
  539. package/plan/001_d3bb02af4886/docs/research/P4P5/RESEARCH_SUMMARY.md +0 -151
  540. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_QUICK_REF.md +0 -376
  541. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_RESEARCH.md +0 -1507
  542. package/plan/001_d3bb02af4886/docs/research/bugfix_typescript_patterns.md +0 -949
  543. package/plan/001_d3bb02af4886/docs/research/error-testing-research.md +0 -619
  544. package/plan/001_d3bb02af4886/docs/research/error_handling_patterns.md +0 -723
  545. package/plan/001_d3bb02af4886/docs/research/general/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
  546. package/plan/001_d3bb02af4886/docs/research/general/README-INTROSPECTION.md +0 -352
  547. package/plan/001_d3bb02af4886/docs/research/general/agent-introspection-patterns.md +0 -1085
  548. package/plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md +0 -984
  549. package/plan/001_d3bb02af4886/docs/research/general/introspection-tool-examples.md +0 -875
  550. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/PRP_TEMPLATE.md +0 -460
  551. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md +0 -324
  552. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/README.md +0 -175
  553. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md +0 -499
  554. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/SUMMARY.md +0 -163
  555. package/plan/001_d3bb02af4886/prd_snapshot.md +0 -543
  556. package/plan/bugfix/BUG_FIX_SUMMARY.md +0 -961
  557. package/scripts/generate-llms-full.ts +0 -206
  558. package/src/__tests__/adversarial/attachChild-performance.test.ts +0 -216
  559. package/src/__tests__/adversarial/circular-reference.test.ts +0 -101
  560. package/src/__tests__/adversarial/complex-circular-reference.test.ts +0 -139
  561. package/src/__tests__/adversarial/concurrent-task-failures.test.ts +0 -571
  562. package/src/__tests__/adversarial/deep-analysis.test.ts +0 -729
  563. package/src/__tests__/adversarial/deep-hierarchy-stress.test.ts +0 -213
  564. package/src/__tests__/adversarial/e2e-prd-validation.test.ts +0 -448
  565. package/src/__tests__/adversarial/edge-case.test.ts +0 -703
  566. package/src/__tests__/adversarial/error-merge-strategy.test.ts +0 -760
  567. package/src/__tests__/adversarial/incremental-performance.test.ts +0 -140
  568. package/src/__tests__/adversarial/node-map-update-benchmarks.test.ts +0 -457
  569. package/src/__tests__/adversarial/observer-propagation.test.ts +0 -487
  570. package/src/__tests__/adversarial/parent-validation.test.ts +0 -143
  571. package/src/__tests__/adversarial/prd-12-2-compliance.test.ts +0 -611
  572. package/src/__tests__/adversarial/prd-compliance.test.ts +0 -731
  573. package/src/__tests__/compatibility/backward-compatibility.test.ts +0 -1572
  574. package/src/__tests__/helpers/tree-verification.ts +0 -257
  575. package/src/__tests__/integration/agent-workflow.test.ts +0 -256
  576. package/src/__tests__/integration/bidirectional-consistency.test.ts +0 -847
  577. package/src/__tests__/integration/observer-logging.test.ts +0 -643
  578. package/src/__tests__/integration/tree-mirroring.test.ts +0 -151
  579. package/src/__tests__/integration/workflow-reparenting.test.ts +0 -303
  580. package/src/__tests__/unit/agent.test.ts +0 -169
  581. package/src/__tests__/unit/cache-key.test.ts +0 -182
  582. package/src/__tests__/unit/cache.test.ts +0 -172
  583. package/src/__tests__/unit/context.test.ts +0 -217
  584. package/src/__tests__/unit/decorators.test.ts +0 -100
  585. package/src/__tests__/unit/introspection-tools.test.ts +0 -277
  586. package/src/__tests__/unit/logger.test.ts +0 -293
  587. package/src/__tests__/unit/observable.test.ts +0 -321
  588. package/src/__tests__/unit/prompt.test.ts +0 -135
  589. package/src/__tests__/unit/reflection.test.ts +0 -210
  590. package/src/__tests__/unit/tree-debugger-incremental.test.ts +0 -170
  591. package/src/__tests__/unit/tree-debugger.test.ts +0 -85
  592. package/src/__tests__/unit/utils/workflow-error-utils.test.ts +0 -209
  593. package/src/__tests__/unit/workflow-detachChild.test.ts +0 -100
  594. package/src/__tests__/unit/workflow-emitEvent-childDetached.test.ts +0 -153
  595. package/src/__tests__/unit/workflow-isDescendantOf.test.ts +0 -180
  596. package/src/__tests__/unit/workflow.test.ts +0 -357
  597. package/src/cache/cache-key.ts +0 -244
  598. package/src/cache/cache.ts +0 -236
  599. package/src/core/agent.ts +0 -593
  600. package/src/core/event-tree.ts +0 -260
  601. package/src/core/logger.ts +0 -112
  602. package/src/core/mcp-handler.ts +0 -184
  603. package/src/core/prompt.ts +0 -150
  604. package/src/core/workflow-context.ts +0 -351
  605. package/src/core/workflow.ts +0 -540
  606. package/src/debugger/tree-debugger.ts +0 -255
  607. package/src/decorators/observed-state.ts +0 -95
  608. package/src/decorators/step.ts +0 -139
  609. package/src/decorators/task.ts +0 -159
  610. package/src/examples/tdd-orchestrator.ts +0 -65
  611. package/src/examples/test-cycle-workflow.ts +0 -64
  612. package/src/index.ts +0 -142
  613. package/src/reflection/reflection.ts +0 -407
  614. package/src/tools/index.ts +0 -36
  615. package/src/tools/introspection.ts +0 -464
  616. package/src/types/agent.ts +0 -90
  617. package/src/types/decorators.ts +0 -32
  618. package/src/types/error-strategy.ts +0 -13
  619. package/src/types/error.ts +0 -20
  620. package/src/types/events.ts +0 -75
  621. package/src/types/index.ts +0 -55
  622. package/src/types/logging.ts +0 -24
  623. package/src/types/observer.ts +0 -18
  624. package/src/types/prompt.ts +0 -40
  625. package/src/types/reflection.ts +0 -117
  626. package/src/types/sdk-primitives.ts +0 -128
  627. package/src/types/workflow-context.ts +0 -163
  628. package/src/types/workflow.ts +0 -37
  629. package/src/utils/id.ts +0 -11
  630. package/src/utils/observable.ts +0 -106
  631. package/src/utils/workflow-error-utils.ts +0 -56
  632. package/tsconfig.json +0 -22
  633. package/vitest.config.ts +0 -16
@@ -1,788 +0,0 @@
1
- # External Research: Incremental Tree Mutation Handling
2
-
3
- **Research Date:** 2026-01-12
4
- **Purpose:** P1M3T2S2 - Implement incremental node map updates for WorkflowTreeDebugger
5
- **Focus:** BFS/DFS traversal, Map performance, event dispatching, and tree mutation patterns
6
-
7
- ---
8
-
9
- ## 1. React's Reconciliation & Virtual DOM Patterns
10
-
11
- ### 1.1 Key Concepts from React's Diffing Algorithm
12
-
13
- React's reconciliation algorithm provides excellent patterns for incremental tree updates:
14
-
15
- **O(n) Algorithm for Tree Diffing:**
16
- - React assumes two trees of different elements will produce different trees
17
- - Uses heuristics to reduce O(n³) problem to O(n)
18
- - Key heuristic: If elements have different types, entire subtrees are different
19
-
20
- **Source:** [React Documentation - Reconciliation](https://react.dev/learn/render-and-commit)
21
- - **Section:** "React's Diffing Algorithm"
22
- - **Key Pattern:** Component type comparison for subtree replacement decisions
23
-
24
- ### 1.2 Applicable Patterns for Tree Debugger
25
-
26
- **Pattern 1: Key-based Identification**
27
- ```typescript
28
- // React uses keys to identify nodes across renders
29
- // Similarly, nodeMap uses node.id for O(1) lookups
30
-
31
- // Current implementation (good):
32
- private nodeMap: Map<string, WorkflowNode> = new Map();
33
-
34
- // Pattern: Always use stable identifiers for tree nodes
35
- // Avoid using array indices as identifiers (breaks on insertions/deletions)
36
- ```
37
-
38
- **Pattern 2: Structural Change Detection**
39
- ```typescript
40
- // React detects structural changes by comparing element types
41
- // For tree debugger, detect structural changes by event type:
42
-
43
- onEvent(event: WorkflowEvent): void {
44
- switch (event.type) {
45
- case 'childAttached':
46
- // Incremental: Add only new subtree
47
- this.addSubtreeToMap(event.child);
48
- break;
49
- case 'childDetached':
50
- // Incremental: Remove only detached subtree
51
- this.removeSubtreeFromMap(event.child);
52
- break;
53
- default:
54
- // Non-structural: No map update needed
55
- break;
56
- }
57
- }
58
- ```
59
-
60
- **Pattern 3: Batching Updates**
61
- ```typescript
62
- // React batches multiple state updates
63
- // Apply similar pattern for rapid tree changes:
64
-
65
- private pendingUpdates: Array<() => void> = [];
66
- private updateScheduled = false;
67
-
68
- private scheduleUpdate(fn: () => void) {
69
- this.pendingUpdates.push(fn);
70
- if (!this.updateScheduled) {
71
- this.updateScheduled = true;
72
- Promise.resolve().then(() => {
73
- this.pendingUpdates.forEach(fn => fn());
74
- this.pendingUpdates = [];
75
- this.updateScheduled = false;
76
- });
77
- }
78
- }
79
- ```
80
-
81
- ### 1.3 Virtual DOM Memory Efficiency
82
-
83
- **Insights:**
84
- - Virtual DOM uses object pooling for frequently created objects
85
- - Consider object pooling for WorkflowEvent if many events are created
86
- - Use structural sharing: Only copy changed branches
87
-
88
- ---
89
-
90
- ## 2. JavaScript Map Manipulation & Performance
91
-
92
- ### 2.1 MDN Map Best Practices
93
-
94
- **Source:** [MDN Web Docs - Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)
95
-
96
- **Key Performance Characteristics:**
97
- - **Operations:** `set()`, `get()`, `has()`, `delete()` are O(1) average case
98
- - **Iteration:** `forEach()` and `for...of` are optimized by V8
99
- - **Memory:** Maps have slightly more overhead than Objects, but better for频繁添加/删除
100
-
101
- ### 2.2 V8 Engine Optimizations
102
-
103
- **Source:** [V8 Blog - Map Performance](https://v8.dev/blog/elements-kinds) (Related concepts)
104
-
105
- **Optimization Patterns:**
106
-
107
- **Pattern 1: Preserve Map Reference**
108
- ```typescript
109
- // BAD: Creates new Map frequently
110
- function updateNodeMap(nodes: WorkflowNode[]): Map<string, WorkflowNode> {
111
- const newMap = new Map();
112
- nodes.forEach(node => newMap.set(node.id, node));
113
- return newMap; // Forces garbage collection of old Map
114
- }
115
-
116
- // GOOD: Mutate existing Map
117
- function addNodesToMap(map: Map<string, WorkflowNode>, nodes: WorkflowNode[]): void {
118
- nodes.forEach(node => map.set(node.id, node));
119
- }
120
- ```
121
-
122
- **Pattern 2: Batch Deletions**
123
- ```typescript
124
- // GOOD: Delete multiple keys in single iteration
125
- function removeNodes(map: Map<string, WorkflowNode>, idsToRemove: string[]): void {
126
- for (const id of idsToRemove) {
127
- map.delete(id);
128
- }
129
- // V8 optimizes consecutive deletions
130
- }
131
-
132
- // BETTER: Collect keys first, then delete
133
- function removeSubtree(map: Map<string, WorkflowNode>, rootId: string): void {
134
- const keysToDelete: string[] = [];
135
-
136
- // First pass: collect all keys in subtree
137
- const collectKeys = (node: WorkflowNode) => {
138
- keysToDelete.push(node.id);
139
- node.children.forEach(child => collectKeys(child));
140
- };
141
-
142
- const rootNode = map.get(rootId);
143
- if (rootNode) {
144
- collectKeys(rootNode);
145
- }
146
-
147
- // Second pass: delete all collected keys
148
- for (const key of keysToDelete) {
149
- map.delete(key);
150
- }
151
- }
152
- ```
153
-
154
- **Pattern 3: Use `has()` for Conditional Access**
155
- ```typescript
156
- // GOOD: Check before accessing
157
- if (this.nodeMap.has(nodeId)) {
158
- const node = this.nodeMap.get(nodeId);
159
- // Use node
160
- }
161
-
162
- // ACCEPTABLE: Direct access with undefined check
163
- const node = this.nodeMap.get(nodeId);
164
- if (node) {
165
- // Use node
166
- }
167
- ```
168
-
169
- ### 2.3 Map vs Object for Tree Nodes
170
-
171
- **Use Map when:**
172
- - Keys are not strings/symbols
173
- - Need to iterate in insertion order
174
- - Frequent additions/removals
175
- - Need to know size efficiently
176
-
177
- **Use Object when:**
178
- - Keys are strings/symbols
179
- - Need JSON serialization
180
- - Static set of keys
181
- - Prototype safety concerns
182
-
183
- **Decision:** Map is correct choice for nodeMap due to:
184
- - Frequent additions/removals (childAttached/childDetached)
185
- - O(1) size property
186
- - No prototype pollution concerns
187
-
188
- ---
189
-
190
- ## 3. BFS vs DFS Traversal for Tree Operations
191
-
192
- ### 3.1 Algorithm Comparison
193
-
194
- | Aspect | BFS (Breadth-First) | DFS (Depth-First) |
195
- |--------|---------------------|-------------------|
196
- | **Strategy** | Level-by-level | Go deep, then backtrack |
197
- | **Memory** | O(w) - max width | O(h) - max height |
198
- | **Time** | O(V + E) | O(V + E) |
199
- | **Implementation** | Queue | Stack (or recursion) |
200
- | **Use Case** | Shortest path, level-order | Memory efficient for deep trees |
201
-
202
- ### 3.2 When to Use BFS for Tree Operations
203
-
204
- **Use BFS when:**
205
- 1. **Removing subtrees** - Process parent before children (natural for removal)
206
- 2. **Level-order statistics** - Need to process nodes by depth
207
- 3. **Finding nearest nodes** - Shortest path in unweighted tree
208
- 4. **Wide trees** - When width << height
209
-
210
- **BFS Implementation for Subtree Removal:**
211
- ```typescript
212
- /**
213
- * Remove subtree using BFS traversal
214
- * Good for: Processing parent before children, level-by-level cleanup
215
- */
216
- private removeSubtreeBFS(rootId: string): void {
217
- const queue: string[] = [rootId];
218
- const keysToRemove: string[] = [];
219
-
220
- // Collect all node IDs in subtree
221
- while (queue.length > 0) {
222
- const currentId = queue.shift()!;
223
- const node = this.nodeMap.get(currentId);
224
-
225
- if (node) {
226
- keysToRemove.push(currentId);
227
- // Add children to queue (BFS order)
228
- node.children.forEach(child => queue.push(child.id));
229
- }
230
- }
231
-
232
- // Remove all collected keys
233
- for (const key of keysToRemove) {
234
- this.nodeMap.delete(key);
235
- }
236
- }
237
- ```
238
-
239
- ### 3.3 When to Use DFS for Tree Operations
240
-
241
- **Use DFS when:**
242
- 1. **Adding subtrees** - Recursively add children
243
- 2. **Deep trees** - When height << width (memory efficient)
244
- 3. **Path finding** - Need specific path between nodes
245
- 4. **Ancestry checks** - Bottom-up processing
246
-
247
- **DFS Implementation for Subtree Addition:**
248
- ```typescript
249
- /**
250
- * Add subtree using DFS traversal
251
- * Good for: Memory efficient, natural recursion
252
- */
253
- private addSubtreeDFS(node: WorkflowNode): void {
254
- this.nodeMap.set(node.id, node);
255
-
256
- // Recursively add children (DFS - depth-first)
257
- for (const child of node.children) {
258
- this.addSubtreeDFS(child);
259
- }
260
- }
261
- ```
262
-
263
- ### 3.4 Recommended Pattern for Tree Debugger
264
-
265
- **Hybrid Approach:**
266
-
267
- ```typescript
268
- /**
269
- * Incremental update based on event type
270
- * Uses optimal traversal for each operation
271
- */
272
- private updateNodeMapIncremental(event: WorkflowEvent): void {
273
- switch (event.type) {
274
- case 'childAttached':
275
- // DFS for addition: Natural recursion, memory efficient
276
- this.addSubtreeDFS(event.child);
277
- break;
278
-
279
- case 'childDetached':
280
- // BFS for removal: Parent before children, clear ordering
281
- this.removeSubtreeBFS(event.child.id);
282
- break;
283
-
284
- default:
285
- // Other events don't affect structure
286
- break;
287
- }
288
- }
289
- ```
290
-
291
- ### 3.5 Performance Comparison
292
-
293
- **Benchmark Scenario:** Tree with 1000 nodes, removing 100-node subtree
294
-
295
- | Method | Time Complexity | Memory | Notes |
296
- |--------|----------------|--------|-------|
297
- | Full Rebuild | O(n) | O(n) | Clears all, re-adds all |
298
- | BFS Incremental | O(m) | O(w) | m=subtree size, w=max width |
299
- | DFS Incremental | O(m) | O(h) | m=subtree size, h=max height |
300
-
301
- **Recommendation:** BFS for removal, DFS for addition
302
-
303
- ---
304
-
305
- ## 4. Memory Management Patterns for Tree Structures
306
-
307
- ### 4.1 Weak References for Auxiliary Data
308
-
309
- **Source:** [MDN - WeakMap](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap)
310
-
311
- **Pattern:** Use WeakMap for metadata that shouldn't prevent garbage collection
312
-
313
- ```typescript
314
- // Good pattern: WeakMap for node metadata
315
- const nodeMetadata = new WeakMap<WorkflowNode, {
316
- lastAccessed: number;
317
- accessCount: number;
318
- }>();
319
-
320
- // When node is garbage collected, metadata is automatically cleaned up
321
- // No memory leaks from detached nodes
322
- ```
323
-
324
- **Not Applicable to nodeMap:** nodeMap needs strong references (nodes must stay in memory)
325
-
326
- ### 4.2 Circular Reference Prevention
327
-
328
- **Common Pitfall:** Parent <-> Child circular references prevent garbage collection
329
-
330
- ```typescript
331
- // BAD: Circular references prevent GC
332
- class TreeNode {
333
- parent: TreeNode | null = null;
334
- children: TreeNode[] = [];
335
- }
336
-
337
- // Even after removing from tree, nodes may stay in memory
338
- // due to circular parent/child references
339
-
340
- // Solution: Explicit cleanup
341
- class TreeNode {
342
- dispose() {
343
- this.children.forEach(child => {
344
- child.parent = null; // Break circular reference
345
- child.dispose();
346
- });
347
- this.children = [];
348
- }
349
- }
350
- ```
351
-
352
- **For Tree Debugger:** Ensure detached nodes are removed from nodeMap
353
-
354
- ```typescript
355
- private removeSubtreeWithCleanup(rootId: string): void {
356
- const node = this.nodeMap.get(rootId);
357
- if (!node) return;
358
-
359
- // Break references if needed (implementation dependent)
360
- // For WorkflowNode, just remove from map
361
- this.removeSubtreeBFS(rootId);
362
- }
363
- ```
364
-
365
- ### 4.3 Object Pooling for Frequent Creation
366
-
367
- **Pattern:** Reuse objects instead of creating/destroying
368
-
369
- ```typescript
370
- // Object pool for frequently created WorkflowEvent objects
371
- class EventPool {
372
- private pool: WorkflowEvent[] = [];
373
-
374
- acquire(): WorkflowEvent {
375
- return this.pool.pop() || this.createEvent();
376
- }
377
-
378
- release(event: WorkflowEvent): void {
379
- // Reset event state
380
- this.pool.push(event);
381
- }
382
-
383
- private createEvent(): WorkflowEvent {
384
- // Create new event
385
- return {} as WorkflowEvent;
386
- }
387
- }
388
- ```
389
-
390
- **When to Use:**
391
- - High-frequency events (1000+ per second)
392
- - Events have consistent structure
393
- - Memory pressure is a concern
394
-
395
- **For Tree Debugger:** Probably not needed unless event frequency is very high
396
-
397
- ### 4.4 Memory Profiling Patterns
398
-
399
- **Chrome DevTools Memory Profiling:**
400
- ```typescript
401
- // Add memory tracking for debugging
402
- class MemoryTracker {
403
- private snapshots: Map<string, number> = new Map();
404
-
405
- snapshot(label: string): void {
406
- if (performance.memory) {
407
- this.snapshots.set(label, performance.memory.usedJSHeapSize);
408
- }
409
- }
410
-
411
- report(): void {
412
- console.table(this.snapshots);
413
- }
414
- }
415
-
416
- // Usage in tree debugger
417
- constructor(workflow: Workflow) {
418
- this.memoryTracker = new MemoryTracker();
419
- this.memoryTracker.snapshot('constructor');
420
-
421
- // ... build node map
422
-
423
- this.memoryTracker.snapshot('after-build');
424
- }
425
- ```
426
-
427
- ---
428
-
429
- ## 5. Common Pitfalls in Incremental Tree Updates
430
-
431
- ### 5.1 Pitfall 1: Missing Descendants
432
-
433
- **Problem:** Only removing/adding root node, not entire subtree
434
-
435
- ```typescript
436
- // BAD: Only removes root
437
- private removeSubtreeBad(rootId: string): void {
438
- this.nodeMap.delete(rootId); // Children remain in map!
439
- }
440
-
441
- // GOOD: Removes entire subtree
442
- private removeSubtreeGood(rootId: string): void {
443
- const keysToDelete = this.collectSubtreeKeys(rootId);
444
- for (const key of keysToDelete) {
445
- this.nodeMap.delete(key);
446
- }
447
- }
448
-
449
- private collectSubtreeKeys(rootId: string): string[] {
450
- const keys: string[] = [];
451
- const queue = [rootId];
452
-
453
- while (queue.length > 0) {
454
- const currentId = queue.shift()!;
455
- const node = this.nodeMap.get(currentId);
456
-
457
- if (node) {
458
- keys.push(currentId);
459
- node.children.forEach(child => queue.push(child.id));
460
- }
461
- }
462
-
463
- return keys;
464
- }
465
- ```
466
-
467
- ### 5.2 Pitfall 2: Inconsistent State During Update
468
-
469
- **Problem:** Map is partially updated when accessed by other code
470
-
471
- ```typescript
472
- // BAD: Map is inconsistent during iteration
473
- private removeSubtreeBad(rootId: string): void {
474
- const node = this.nodeMap.get(rootId);
475
- if (node) {
476
- this.nodeMap.delete(rootId); // Map now missing root
477
- // If another thread calls getNode() here, returns undefined
478
- node.children.forEach(child => {
479
- this.removeSubtreeBad(child.id); // Recursion leaves map inconsistent
480
- });
481
- }
482
- }
483
-
484
- // GOOD: Collect all keys first, then update atomically
485
- private removeSubtreeGood(rootId: string): void {
486
- const keysToDelete = this.collectSubtreeKeys(rootId);
487
-
488
- // Single atomic update
489
- for (const key of keysToDelete) {
490
- this.nodeMap.delete(key);
491
- }
492
- }
493
- ```
494
-
495
- ### 5.3 Pitfall 3: Event Type Confusion
496
-
497
- **Problem:** Treating all events as structural changes
498
-
499
- ```typescript
500
- // BAD: Rebuilds on every event
501
- onEvent(event: WorkflowEvent): void {
502
- this.nodeMap.clear();
503
- this.buildNodeMap(this.root); // Unnecessary for non-structural events
504
- }
505
-
506
- // GOOD: Only update on structural changes
507
- onEvent(event: WorkflowEvent): void {
508
- switch (event.type) {
509
- case 'childAttached':
510
- this.addSubtreeDFS(event.child);
511
- break;
512
- case 'childDetached':
513
- this.removeSubtreeBFS(event.child.id);
514
- break;
515
- // Other events don't affect structure
516
- }
517
- }
518
- ```
519
-
520
- ### 5.4 Pitfall 4: Stack Overflow on Deep Recursion
521
-
522
- **Problem:** DFS recursion on very deep trees causes stack overflow
523
-
524
- ```typescript
525
- // BAD: Recursion may overflow stack on deep trees
526
- private addSubtreeDFS(node: WorkflowNode): void {
527
- this.nodeMap.set(node.id, node);
528
- node.children.forEach(child => this.addSubtreeDFS(child)); // Recursion depth = tree height
529
- }
530
-
531
- // GOOD: Use iterative DFS for deep trees
532
- private addSubtreeDFSIterative(node: WorkflowNode): void {
533
- const stack = [node];
534
-
535
- while (stack.length > 0) {
536
- const current = stack.pop()!;
537
- this.nodeMap.set(current.id, current);
538
-
539
- // Push children in reverse order for correct traversal
540
- for (let i = current.children.length - 1; i >= 0; i--) {
541
- stack.push(current.children[i]);
542
- }
543
- }
544
- }
545
- ```
546
-
547
- **Recommendation:** Use iterative approach for production code with unknown tree depth
548
-
549
- ### 5.5 Pitfall 5: Memory Leaks from Event Listeners
550
-
551
- **Problem:** Observers not removed when workflow is destroyed
552
-
553
- ```typescript
554
- // BAD: Observer never removed
555
- class WorkflowTreeDebugger {
556
- constructor(workflow: Workflow) {
557
- workflow.addObserver(this); // Never removed
558
- }
559
- }
560
-
561
- // GOOD: Implement cleanup
562
- class WorkflowTreeDebugger {
563
- constructor(private workflow: Workflow) {
564
- this.workflow.addObserver(this);
565
- }
566
-
567
- dispose(): void {
568
- this.workflow.removeObserver(this);
569
- this.nodeMap.clear();
570
- }
571
- }
572
- ```
573
-
574
- ---
575
-
576
- ## 6. Actionable Implementation Guide
577
-
578
- ### 6.1 Implement removeSubtreeNodes() with BFS
579
-
580
- ```typescript
581
- /**
582
- * Remove subtree nodes from nodeMap using BFS traversal
583
- * @param rootId ID of root node to remove
584
- *
585
- * Why BFS:
586
- * - Processes parent before children (natural removal order)
587
- * - Level-by-level traversal predictable
588
- * - No recursion (no stack overflow risk)
589
- */
590
- private removeSubtreeNodes(rootId: string): void {
591
- const queue: string[] = [rootId];
592
- const keysToRemove: string[] = [];
593
-
594
- // BFS traversal to collect all keys in subtree
595
- while (queue.length > 0) {
596
- const currentId = queue.shift()!;
597
- const node = this.nodeMap.get(currentId);
598
-
599
- if (node) {
600
- keysToRemove.push(currentId);
601
- // Add children to queue for BFS traversal
602
- node.children.forEach(child => queue.push(child.id));
603
- }
604
- }
605
-
606
- // Batch delete all collected keys
607
- for (const key of keysToRemove) {
608
- this.nodeMap.delete(key);
609
- }
610
- }
611
- ```
612
-
613
- ### 6.2 Implement Event-Type Dispatch for onEvent()
614
-
615
- ```typescript
616
- /**
617
- * Handle workflow events with type-based dispatch
618
- * @param event Workflow event to process
619
- *
620
- * Performance considerations:
621
- * - Only updates nodeMap on structural changes
622
- * - Non-structural events bypass map updates
623
- * - O(1) switch statement dispatch
624
- */
625
- onEvent(event: WorkflowEvent): void {
626
- // Early return for non-structural events (fast path)
627
- if (event.type !== 'childAttached' && event.type !== 'childDetached') {
628
- this.events.next(event);
629
- return;
630
- }
631
-
632
- // Type-based dispatch for structural events
633
- switch (event.type) {
634
- case 'childAttached': {
635
- // Incremental add: DFS for memory efficiency
636
- this.addSubtreeDFS(event.child);
637
- break;
638
- }
639
-
640
- case 'childDetached': {
641
- // Incremental remove: BFS for level-by-level cleanup
642
- this.removeSubtreeNodes(event.child.id);
643
- break;
644
- }
645
-
646
- default: {
647
- // Exhaustive check for type safety
648
- const _exhaustiveCheck: never = event;
649
- break;
650
- }
651
- }
652
-
653
- // Forward all events to event stream
654
- this.events.next(event);
655
- }
656
-
657
- /**
658
- * Add subtree using DFS traversal
659
- * Good for: Memory efficient on deep trees, natural recursion
660
- */
661
- private addSubtreeDFS(node: WorkflowNode): void {
662
- this.nodeMap.set(node.id, node);
663
- node.children.forEach(child => this.addSubtreeDFS(child));
664
- }
665
- ```
666
-
667
- ### 6.3 Performance Optimization Checklist
668
-
669
- **Optimizations Applied:**
670
- - [x] Use Map instead of Object for O(1) operations
671
- - [x] Batch deletions (collect keys, then delete)
672
- - [x] Event-type dispatch (avoid unnecessary updates)
673
- - [x] BFS for removal (parent before children)
674
- - [x] DFS for addition (memory efficient)
675
- - [ ] Consider iterative DFS for very deep trees
676
- - [ ] Add memory tracking for debugging
677
- - [ ] Consider batching rapid successive updates
678
-
679
- **Future Optimizations:**
680
- - Object pooling for high-frequency events
681
- - WeakMap for auxiliary metadata
682
- - Update batching/debouncing for rapid changes
683
- - Lazy nodeMap rebuild after N incremental updates
684
-
685
- ### 6.4 Testing Strategy
686
-
687
- ```typescript
688
- describe('Incremental Node Map Updates', () => {
689
- it('should correctly remove subtree using BFS', () => {
690
- const debugger = new WorkflowTreeDebugger(rootWorkflow);
691
-
692
- // Build tree with 100 nodes
693
- const initialSize = debugger.getStats().totalNodes;
694
- expect(initialSize).toBe(100);
695
-
696
- // Detach subtree with 20 nodes
697
- detachChild(childId);
698
-
699
- // Verify only 20 nodes removed
700
- const finalSize = debugger.getStats().totalNodes;
701
- expect(finalSize).toBe(80);
702
-
703
- // Verify detached nodes not accessible
704
- expect(debugger.getNode(detachedChildId)).toBeUndefined();
705
- expect(debugger.getNode(detachedGrandchildId)).toBeUndefined();
706
- });
707
-
708
- it('should correctly add subtree using DFS', () => {
709
- const debugger = new WorkflowTreeDebugger(rootWorkflow);
710
-
711
- // Attach subtree with 20 nodes
712
- attachChild(parentId, newChild);
713
-
714
- // Verify all 20 nodes added
715
- const stats = debugger.getStats();
716
- expect(stats.totalNodes).toBe(120);
717
-
718
- // Verify all nodes accessible
719
- expect(debugger.getNode(newChild.id)).toBeDefined();
720
- expect(debugger.getNode(grandchild.id)).toBeDefined();
721
- });
722
-
723
- it('should handle non-structural events efficiently', () => {
724
- const debugger = new WorkflowTreeDebugger(rootWorkflow);
725
- const initialMapSize = (debugger as any).nodeMap.size;
726
-
727
- // Trigger 100 non-structural events
728
- for (let i = 0; i < 100; i++) {
729
- triggerNonStructuralEvent();
730
- }
731
-
732
- // Verify nodeMap not rebuilt
733
- expect((debugger as any).nodeMap.size).toBe(initialMapSize);
734
- });
735
- });
736
- ```
737
-
738
- ---
739
-
740
- ## 7. Summary & Recommendations
741
-
742
- ### 7.1 Key Takeaways
743
-
744
- 1. **Use BFS for subtree removal** - Parent before children, predictable ordering
745
- 2. **Use DFS for subtree addition** - Memory efficient, natural recursion
746
- 3. **Event-type dispatch** - Only update map on structural changes
747
- 4. **Batch operations** - Collect keys, then update atomically
748
- 5. **Consider iterative DFS** - Avoid stack overflow on deep trees
749
-
750
- ### 7.2 Performance Improvements
751
-
752
- **Before (Full Rebuild):**
753
- - Time: O(n) for every tree change
754
- - Memory: O(n) - entire tree in memory during rebuild
755
- - Scalability: Poor for large trees
756
-
757
- **After (Incremental):**
758
- - Time: O(m) where m = subtree size
759
- - Memory: O(w) for BFS, O(h) for DFS
760
- - Scalability: Excellent for large trees
761
-
762
- **Expected Speedup:** 10-100x for large trees when modifying small subtrees
763
-
764
- ### 7.3 References
765
-
766
- 1. **React Reconciliation:** https://react.dev/learn/render-and-commit
767
- - Section: "React's Diffing Algorithm"
768
- - Key concepts: O(n) heuristics, key-based identification
769
-
770
- 2. **MDN Map Documentation:** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
771
- - Operations: O(1) get/set/has/delete
772
- - Iteration: forEach and for...of performance
773
-
774
- 3. **V8 Performance Blog:** https://v8.dev/blog
775
- - Map optimization patterns
776
- - Hidden classes and inline caching
777
-
778
- 4. **WeakMap Documentation:** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
779
- - Use case: Auxiliary data that shouldn't prevent GC
780
-
781
- 5. **Chrome DevTools Memory:** https://developer.chrome.com/docs/devtools/memory-problems
782
- - Heap snapshots, memory profiling
783
-
784
- ---
785
-
786
- **Document Status:** Research Complete
787
- **Next Step:** Implement incremental updates in WorkflowTreeDebugger
788
- **Estimated Impact:** 10-100x performance improvement for large tree operations