groundswell 0.0.2 → 1.0.0

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 (554) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -9
  3. package/dist/cache/cache-key.d.ts +86 -0
  4. package/dist/cache/cache-key.d.ts.map +1 -0
  5. package/dist/cache/cache-key.js +204 -0
  6. package/dist/cache/cache-key.js.map +1 -0
  7. package/dist/cache/cache.d.ts +104 -0
  8. package/dist/cache/cache.d.ts.map +1 -0
  9. package/dist/cache/cache.js +179 -0
  10. package/dist/cache/cache.js.map +1 -0
  11. package/{src/cache/index.ts → dist/cache/index.d.ts} +1 -1
  12. package/dist/cache/index.d.ts.map +1 -0
  13. package/dist/cache/index.js +6 -0
  14. package/dist/cache/index.js.map +1 -0
  15. package/dist/core/agent.d.ts +203 -0
  16. package/dist/core/agent.d.ts.map +1 -0
  17. package/dist/core/agent.js +833 -0
  18. package/dist/core/agent.js.map +1 -0
  19. package/{src/core/context.ts → dist/core/context.d.ts} +16 -67
  20. package/dist/core/context.d.ts.map +1 -0
  21. package/dist/core/context.js +80 -0
  22. package/dist/core/context.js.map +1 -0
  23. package/dist/core/event-tree.d.ts +72 -0
  24. package/dist/core/event-tree.d.ts.map +1 -0
  25. package/dist/core/event-tree.js +211 -0
  26. package/dist/core/event-tree.js.map +1 -0
  27. package/{src/core/factory.ts → dist/core/factory.d.ts} +6 -27
  28. package/dist/core/factory.d.ts.map +1 -0
  29. package/dist/core/factory.js +110 -0
  30. package/dist/core/factory.js.map +1 -0
  31. package/{src/core/index.ts → dist/core/index.d.ts} +2 -10
  32. package/dist/core/index.d.ts.map +1 -0
  33. package/dist/core/index.js +9 -0
  34. package/dist/core/index.js.map +1 -0
  35. package/dist/core/logger.d.ts +50 -0
  36. package/dist/core/logger.d.ts.map +1 -0
  37. package/dist/core/logger.js +91 -0
  38. package/dist/core/logger.js.map +1 -0
  39. package/dist/core/mcp-handler.d.ts +127 -0
  40. package/dist/core/mcp-handler.d.ts.map +1 -0
  41. package/dist/core/mcp-handler.js +323 -0
  42. package/dist/core/mcp-handler.js.map +1 -0
  43. package/dist/core/prompt.d.ts +80 -0
  44. package/dist/core/prompt.d.ts.map +1 -0
  45. package/dist/core/prompt.js +120 -0
  46. package/dist/core/prompt.js.map +1 -0
  47. package/dist/core/workflow-context.d.ts +61 -0
  48. package/dist/core/workflow-context.d.ts.map +1 -0
  49. package/dist/core/workflow-context.js +358 -0
  50. package/dist/core/workflow-context.js.map +1 -0
  51. package/dist/core/workflow.d.ts +543 -0
  52. package/dist/core/workflow.d.ts.map +1 -0
  53. package/dist/core/workflow.js +986 -0
  54. package/dist/core/workflow.js.map +1 -0
  55. package/dist/debugger/event-replayer.d.ts +422 -0
  56. package/dist/debugger/event-replayer.d.ts.map +1 -0
  57. package/dist/debugger/event-replayer.js +639 -0
  58. package/dist/debugger/event-replayer.js.map +1 -0
  59. package/dist/debugger/index.d.ts +2 -0
  60. package/dist/debugger/index.d.ts.map +1 -0
  61. package/{src/debugger/index.ts → dist/debugger/index.js} +1 -0
  62. package/dist/debugger/index.js.map +1 -0
  63. package/dist/debugger/tree-debugger.d.ts +240 -0
  64. package/dist/debugger/tree-debugger.d.ts.map +1 -0
  65. package/dist/debugger/tree-debugger.js +620 -0
  66. package/dist/debugger/tree-debugger.js.map +1 -0
  67. package/dist/decorators/index.d.ts +4 -0
  68. package/dist/decorators/index.d.ts.map +1 -0
  69. package/{src/decorators/index.ts → dist/decorators/index.js} +1 -0
  70. package/dist/decorators/index.js.map +1 -0
  71. package/dist/decorators/observed-state.d.ts +32 -0
  72. package/dist/decorators/observed-state.d.ts.map +1 -0
  73. package/dist/decorators/observed-state.js +79 -0
  74. package/dist/decorators/observed-state.js.map +1 -0
  75. package/dist/decorators/step.d.ts +15 -0
  76. package/dist/decorators/step.d.ts.map +1 -0
  77. package/dist/decorators/step.js +192 -0
  78. package/dist/decorators/step.js.map +1 -0
  79. package/dist/decorators/task.d.ts +50 -0
  80. package/dist/decorators/task.d.ts.map +1 -0
  81. package/dist/decorators/task.js +118 -0
  82. package/dist/decorators/task.js.map +1 -0
  83. package/dist/examples/index.d.ts +3 -0
  84. package/dist/examples/index.d.ts.map +1 -0
  85. package/{src/examples/index.ts → dist/examples/index.js} +1 -0
  86. package/dist/examples/index.js.map +1 -0
  87. package/dist/examples/tdd-orchestrator.d.ts +15 -0
  88. package/dist/examples/tdd-orchestrator.d.ts.map +1 -0
  89. package/dist/examples/tdd-orchestrator.js +121 -0
  90. package/dist/examples/tdd-orchestrator.js.map +1 -0
  91. package/dist/examples/test-cycle-workflow.d.ts +14 -0
  92. package/dist/examples/test-cycle-workflow.d.ts.map +1 -0
  93. package/dist/examples/test-cycle-workflow.js +116 -0
  94. package/dist/examples/test-cycle-workflow.js.map +1 -0
  95. package/dist/harnesses/claude-code-harness.d.ts +391 -0
  96. package/dist/harnesses/claude-code-harness.d.ts.map +1 -0
  97. package/dist/harnesses/claude-code-harness.js +1076 -0
  98. package/dist/harnesses/claude-code-harness.js.map +1 -0
  99. package/dist/harnesses/harness-registry.d.ts +440 -0
  100. package/dist/harnesses/harness-registry.d.ts.map +1 -0
  101. package/dist/harnesses/harness-registry.js +543 -0
  102. package/dist/harnesses/harness-registry.js.map +1 -0
  103. package/dist/harnesses/index.d.ts +12 -0
  104. package/dist/harnesses/index.d.ts.map +1 -0
  105. package/dist/harnesses/index.js +11 -0
  106. package/dist/harnesses/index.js.map +1 -0
  107. package/dist/harnesses/pi-harness.d.ts +219 -0
  108. package/dist/harnesses/pi-harness.d.ts.map +1 -0
  109. package/dist/harnesses/pi-harness.js +676 -0
  110. package/dist/harnesses/pi-harness.js.map +1 -0
  111. package/dist/harnesses/pi-schema-converter.d.ts +24 -0
  112. package/dist/harnesses/pi-schema-converter.d.ts.map +1 -0
  113. package/dist/harnesses/pi-schema-converter.js +81 -0
  114. package/dist/harnesses/pi-schema-converter.js.map +1 -0
  115. package/dist/harnesses/register-defaults.d.ts +24 -0
  116. package/dist/harnesses/register-defaults.d.ts.map +1 -0
  117. package/dist/harnesses/register-defaults.js +40 -0
  118. package/dist/harnesses/register-defaults.js.map +1 -0
  119. package/dist/harnesses/session-store.d.ts +201 -0
  120. package/dist/harnesses/session-store.d.ts.map +1 -0
  121. package/dist/harnesses/session-store.js +254 -0
  122. package/dist/harnesses/session-store.js.map +1 -0
  123. package/dist/index.d.ts +37 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +57 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/reflection/index.d.ts +5 -0
  128. package/dist/reflection/index.d.ts.map +1 -0
  129. package/{src/reflection/index.ts → dist/reflection/index.js} +1 -1
  130. package/dist/reflection/index.js.map +1 -0
  131. package/dist/reflection/reflection.d.ts +84 -0
  132. package/dist/reflection/reflection.d.ts.map +1 -0
  133. package/dist/reflection/reflection.js +344 -0
  134. package/dist/reflection/reflection.js.map +1 -0
  135. package/dist/tools/index.d.ts +6 -0
  136. package/dist/tools/index.d.ts.map +1 -0
  137. package/dist/tools/index.js +11 -0
  138. package/dist/tools/index.js.map +1 -0
  139. package/dist/tools/introspection.d.ts +165 -0
  140. package/dist/tools/introspection.d.ts.map +1 -0
  141. package/dist/tools/introspection.js +324 -0
  142. package/dist/tools/introspection.js.map +1 -0
  143. package/dist/types/agent.d.ts +1317 -0
  144. package/dist/types/agent.d.ts.map +1 -0
  145. package/dist/types/agent.js +423 -0
  146. package/dist/types/agent.js.map +1 -0
  147. package/dist/types/decorators.d.ts +40 -0
  148. package/dist/types/decorators.d.ts.map +1 -0
  149. package/dist/types/decorators.js +2 -0
  150. package/dist/types/decorators.js.map +1 -0
  151. package/dist/types/error-strategy.d.ts +13 -0
  152. package/dist/types/error-strategy.d.ts.map +1 -0
  153. package/dist/types/error-strategy.js +2 -0
  154. package/dist/types/error-strategy.js.map +1 -0
  155. package/dist/types/error.d.ts +20 -0
  156. package/dist/types/error.d.ts.map +1 -0
  157. package/dist/types/error.js +2 -0
  158. package/dist/types/error.js.map +1 -0
  159. package/dist/types/events.d.ts +113 -0
  160. package/dist/types/events.d.ts.map +1 -0
  161. package/dist/types/events.js +2 -0
  162. package/dist/types/events.js.map +1 -0
  163. package/dist/types/harnesses.d.ts +474 -0
  164. package/dist/types/harnesses.d.ts.map +1 -0
  165. package/dist/types/harnesses.js +2 -0
  166. package/dist/types/harnesses.js.map +1 -0
  167. package/dist/types/index.d.ts +23 -0
  168. package/dist/types/index.d.ts.map +1 -0
  169. package/dist/types/index.js +8 -0
  170. package/dist/types/index.js.map +1 -0
  171. package/dist/types/logging.d.ts +24 -0
  172. package/dist/types/logging.d.ts.map +1 -0
  173. package/dist/types/logging.js +2 -0
  174. package/dist/types/logging.js.map +1 -0
  175. package/dist/types/observer.d.ts +18 -0
  176. package/dist/types/observer.d.ts.map +1 -0
  177. package/dist/types/observer.js +2 -0
  178. package/dist/types/observer.js.map +1 -0
  179. package/dist/types/prompt.d.ts +31 -0
  180. package/dist/types/prompt.d.ts.map +1 -0
  181. package/dist/types/prompt.js +6 -0
  182. package/dist/types/prompt.js.map +1 -0
  183. package/dist/types/providers.d.ts +691 -0
  184. package/dist/types/providers.d.ts.map +1 -0
  185. package/dist/types/providers.js +14 -0
  186. package/dist/types/providers.js.map +1 -0
  187. package/dist/types/reflection.d.ts +96 -0
  188. package/dist/types/reflection.d.ts.map +1 -0
  189. package/dist/types/reflection.js +24 -0
  190. package/dist/types/reflection.js.map +1 -0
  191. package/dist/types/restart.d.ts +132 -0
  192. package/dist/types/restart.d.ts.map +1 -0
  193. package/dist/types/restart.js +2 -0
  194. package/dist/types/restart.js.map +1 -0
  195. package/dist/types/sdk-primitives.d.ts +118 -0
  196. package/dist/types/sdk-primitives.d.ts.map +1 -0
  197. package/dist/types/sdk-primitives.js +6 -0
  198. package/dist/types/sdk-primitives.js.map +1 -0
  199. package/{src/types/snapshot.ts → dist/types/snapshot.d.ts} +5 -5
  200. package/dist/types/snapshot.d.ts.map +1 -0
  201. package/dist/types/snapshot.js +2 -0
  202. package/dist/types/snapshot.js.map +1 -0
  203. package/dist/types/streaming.d.ts +194 -0
  204. package/dist/types/streaming.d.ts.map +1 -0
  205. package/dist/types/streaming.js +67 -0
  206. package/dist/types/streaming.js.map +1 -0
  207. package/dist/types/workflow-context.d.ts +275 -0
  208. package/dist/types/workflow-context.d.ts.map +1 -0
  209. package/dist/types/workflow-context.js +8 -0
  210. package/dist/types/workflow-context.js.map +1 -0
  211. package/dist/types/workflow.d.ts +30 -0
  212. package/dist/types/workflow.d.ts.map +1 -0
  213. package/dist/types/workflow.js +2 -0
  214. package/dist/types/workflow.js.map +1 -0
  215. package/dist/utils/agent-validation.d.ts +88 -0
  216. package/dist/utils/agent-validation.d.ts.map +1 -0
  217. package/dist/utils/agent-validation.js +87 -0
  218. package/dist/utils/agent-validation.js.map +1 -0
  219. package/dist/utils/delay.d.ts +7 -0
  220. package/dist/utils/delay.d.ts.map +1 -0
  221. package/dist/utils/delay.js +9 -0
  222. package/dist/utils/delay.js.map +1 -0
  223. package/dist/utils/harness-config.d.ts +180 -0
  224. package/dist/utils/harness-config.d.ts.map +1 -0
  225. package/dist/utils/harness-config.js +311 -0
  226. package/dist/utils/harness-config.js.map +1 -0
  227. package/dist/utils/id.d.ts +6 -0
  228. package/dist/utils/id.d.ts.map +1 -0
  229. package/dist/utils/id.js +12 -0
  230. package/dist/utils/id.js.map +1 -0
  231. package/dist/utils/index.d.ts +13 -0
  232. package/dist/utils/index.d.ts.map +1 -0
  233. package/dist/utils/index.js +11 -0
  234. package/dist/utils/index.js.map +1 -0
  235. package/dist/utils/model-spec.d.ts +110 -0
  236. package/dist/utils/model-spec.d.ts.map +1 -0
  237. package/dist/utils/model-spec.js +149 -0
  238. package/dist/utils/model-spec.js.map +1 -0
  239. package/dist/utils/observable.d.ts +54 -0
  240. package/dist/utils/observable.d.ts.map +1 -0
  241. package/dist/utils/observable.js +82 -0
  242. package/dist/utils/observable.js.map +1 -0
  243. package/dist/utils/provider-config.d.ts +10 -0
  244. package/dist/utils/provider-config.d.ts.map +1 -0
  245. package/dist/utils/provider-config.js +10 -0
  246. package/dist/utils/provider-config.js.map +1 -0
  247. package/dist/utils/restart-analysis.d.ts +202 -0
  248. package/dist/utils/restart-analysis.d.ts.map +1 -0
  249. package/dist/utils/restart-analysis.js +426 -0
  250. package/dist/utils/restart-analysis.js.map +1 -0
  251. package/dist/utils/session-serialization.d.ts +118 -0
  252. package/dist/utils/session-serialization.d.ts.map +1 -0
  253. package/dist/utils/session-serialization.js +217 -0
  254. package/dist/utils/session-serialization.js.map +1 -0
  255. package/dist/utils/workflow-error-utils.d.ts +22 -0
  256. package/dist/utils/workflow-error-utils.d.ts.map +1 -0
  257. package/dist/utils/workflow-error-utils.js +45 -0
  258. package/dist/utils/workflow-error-utils.js.map +1 -0
  259. package/package.json +34 -5
  260. package/.claude/commands/subtask-planning/prp-base-create.md +0 -120
  261. package/.claude/commands/subtask-planning/prp-base-execute.md +0 -65
  262. package/.claude/commands/task-breakdown.md +0 -94
  263. package/.claude/settings.local.json +0 -9
  264. package/.claude/system_prompts/task-breakdown.md +0 -101
  265. package/CHANGELOG.md +0 -188
  266. package/PRD.md +0 -543
  267. package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
  268. package/PRPs/PRDs/002-agent-prompt.md +0 -390
  269. package/PRPs/PRDs/003-agent-prompt.md +0 -943
  270. package/PRPs/PRDs/004-agent-prompt.md +0 -1136
  271. package/PRPs/PRDs/tasks-001.json +0 -492
  272. package/PRPs/README.md +0 -83
  273. package/PRPs/templates/prp_base.md +0 -222
  274. package/docs/agent.md +0 -422
  275. package/docs/prompt.md +0 -419
  276. package/docs/workflow.md +0 -600
  277. package/examples/README.md +0 -258
  278. package/examples/examples/01-basic-workflow.ts +0 -100
  279. package/examples/examples/02-decorator-options.ts +0 -217
  280. package/examples/examples/03-parent-child.ts +0 -241
  281. package/examples/examples/04-observers-debugger.ts +0 -340
  282. package/examples/examples/05-error-handling.ts +0 -387
  283. package/examples/examples/06-concurrent-tasks.ts +0 -352
  284. package/examples/examples/07-agent-loops.ts +0 -432
  285. package/examples/examples/08-sdk-features.ts +0 -667
  286. package/examples/examples/09-reflection.ts +0 -573
  287. package/examples/examples/10-introspection.ts +0 -550
  288. package/examples/examples/11-reparenting-workflows.ts +0 -269
  289. package/examples/index.ts +0 -147
  290. package/examples/utils/helpers.ts +0 -57
  291. package/package-lock.json +0 -2398
  292. package/plan/001_d3bb02af4886/TEST_RESULTS.md +0 -259
  293. package/plan/001_d3bb02af4886/backlog.json +0 -867
  294. package/plan/001_d3bb02af4886/bug_fix_tasks.json +0 -484
  295. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S1/PRP.md +0 -488
  296. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md +0 -581
  297. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md +0 -687
  298. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S1/PRP.md +0 -492
  299. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/PRP.md +0 -932
  300. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/concurrent_error_testing_patterns.md +0 -1109
  301. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/vitest_concurrent_testing.md +0 -802
  302. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/workflow_engine_test_references.md +0 -603
  303. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S1/PRP.md +0 -564
  304. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S3/PRP.md +0 -518
  305. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S4/PRP.md +0 -1252
  306. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/PRP.md +0 -364
  307. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/CODEBASE_INVENTORY.md +0 -114
  308. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/DECORATOR_DOCUMENTATION_PATTERNS.md +0 -205
  309. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/PRD_LOCATION_ANALYSIS.md +0 -199
  310. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/ULTRATHINK_PRP_PLAN.md +0 -134
  311. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/PRP.md +0 -495
  312. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md +0 -435
  313. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md +0 -506
  314. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S3/PRP.md +0 -612
  315. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/PRP.md +0 -558
  316. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md +0 -788
  317. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S2/PRP.md +0 -460
  318. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S3/PRP.md +0 -454
  319. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/PRP.md +0 -520
  320. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md +0 -417
  321. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/external_workflow_engines_research.md +0 -760
  322. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md +0 -245
  323. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S2/PRP.md +0 -792
  324. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/PRP.md +0 -535
  325. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md +0 -190
  326. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/PRP.md +0 -654
  327. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/TEST_FIX_REPORT.md +0 -227
  328. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/KEY_FINDINGS.md +0 -345
  329. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/QUICK_REFERENCE.md +0 -193
  330. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/test_maintenance_research.md +0 -1323
  331. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/BREAKING_CHANGES_AUDIT.md +0 -1011
  332. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/PRP.md +0 -927
  333. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S2/PRP.md +0 -505
  334. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/architecture/logger_child_signature_analysis.md +0 -401
  335. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/child_implementation_research.md +0 -142
  336. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/test_patterns_research.md +0 -112
  337. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/vitest_patterns_research.md +0 -159
  338. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/PRP.md +0 -549
  339. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md +0 -368
  340. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/edge_case_analysis.md +0 -172
  341. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/usage_inventory.md +0 -175
  342. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S2/PRP.md +0 -696
  343. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S4/PRP.md +0 -860
  344. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/PRP.md +0 -1066
  345. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01-testing-aggregated-errors.md +0 -1103
  346. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01_typescript_error_aggregation_patterns.md +0 -789
  347. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02-error-merge-strategy-testing-guide.md +0 -1098
  348. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02_aggregate_error_patterns.md +0 -1037
  349. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03-promise-allsettled-testing-patterns.md +0 -916
  350. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03_error_merging_strategies.md +0 -1045
  351. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/04_github_stackoverflow_examples.md +0 -890
  352. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/05_comprehensive_summary.md +0 -822
  353. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/INDEX.md +0 -668
  354. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/QUICK_REFERENCE.md +0 -706
  355. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/README.md +0 -265
  356. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/RESEARCH_REPORT.md +0 -655
  357. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S4/research/vitest_testing_patterns.md +0 -1103
  358. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T3S2/PRP.md +0 -426
  359. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/PRP.md +0 -506
  360. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/QUICK_REFERENCE.md +0 -114
  361. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/RESEARCH_SUMMARY.md +0 -316
  362. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/vitest_observer_error_logging_best_practices.md +0 -754
  363. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S3/PRP.md +0 -612
  364. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/PRP.md +0 -719
  365. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/README.md +0 -215
  366. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md +0 -765
  367. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S3/PRP.md +0 -718
  368. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md +0 -149
  369. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/PRP.md +0 -470
  370. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/ULTRATHINK_PLAN.md +0 -332
  371. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/codebase_workflow_name_analysis.md +0 -167
  372. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/external_best_practices.md +0 -265
  373. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md +0 -273
  374. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md +0 -760
  375. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S3-PRP.md +0 -434
  376. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S1/PRP.md +0 -717
  377. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/PRP.md +0 -472
  378. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/VALIDATION_REPORT.md +0 -125
  379. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/research/ULTRATHINK_PRP_PLAN.md +0 -301
  380. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/error-logging-best-practices.md +0 -1170
  381. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/research_typescript_partial_and_overloads.md +0 -940
  382. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-quick-reference.md +0 -151
  383. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-research.md +0 -650
  384. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md +0 -259
  385. package/plan/001_d3bb02af4886/bugfix/P1M1T1S1/PRP.md +0 -457
  386. package/plan/001_d3bb02af4886/bugfix/RESEARCH_SUMMARY.md +0 -346
  387. package/plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md +0 -311
  388. package/plan/001_d3bb02af4886/bugfix/architecture/concurrent_execution_best_practices.md +0 -1565
  389. package/plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md +0 -288
  390. package/plan/001_d3bb02af4886/bugfix/architecture/promise_all_analysis.md +0 -741
  391. package/plan/001_d3bb02af4886/docs/PRP/P1M1T1S4-functional-workflow-error-state-capture-test.md +0 -652
  392. package/plan/001_d3bb02af4886/docs/PRP/P1P2-PRP.md +0 -527
  393. package/plan/001_d3bb02af4886/docs/PRP/P3P4-PRP.md +0 -1388
  394. package/plan/001_d3bb02af4886/docs/PRP/P4P5-PRP.md +0 -1136
  395. package/plan/001_d3bb02af4886/docs/PRP/PRP.md +0 -527
  396. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S1-PRP.md +0 -415
  397. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S2-PRP.md +0 -378
  398. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S4-PRP.md +0 -713
  399. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M2T1S4-PRP.md +0 -370
  400. package/plan/001_d3bb02af4886/docs/PRP_P1M3T1S3.md +0 -499
  401. package/plan/001_d3bb02af4886/docs/TEST_RESULTS.md +0 -230
  402. package/plan/001_d3bb02af4886/docs/architecture/external_deps.md +0 -358
  403. package/plan/001_d3bb02af4886/docs/architecture/system_context.md +0 -242
  404. package/plan/001_d3bb02af4886/docs/bugfix/ANALYSIS_PRD_VS_IMPLEMENTATION.md +0 -1134
  405. package/plan/001_d3bb02af4886/docs/bugfix/GAP_ANALYSIS_SUMMARY.md +0 -179
  406. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/PRP.md +0 -629
  407. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/validation-report.md +0 -214
  408. package/plan/001_d3bb02af4886/docs/bugfix/PRP_P1M4T2S3.md +0 -629
  409. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_PRP.md +0 -529
  410. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_QUICK_REFERENCE.md +0 -142
  411. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_README.md +0 -304
  412. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_TEST_RESULTS.md +0 -558
  413. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_VALIDATION_SUMMARY.md +0 -256
  414. package/plan/001_d3bb02af4886/docs/bugfix/system_context.md +0 -346
  415. package/plan/001_d3bb02af4886/docs/bugfix-architecture/bug_analysis.md +0 -415
  416. package/plan/001_d3bb02af4886/docs/bugfix-architecture/implementation_patterns.md +0 -489
  417. package/plan/001_d3bb02af4886/docs/bugfix-architecture/system_context.md +0 -218
  418. package/plan/001_d3bb02af4886/docs/bugfix_INITIATION_SUMMARY.md +0 -380
  419. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_PATTERNS.md +0 -1923
  420. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_QUICK_REF.md +0 -319
  421. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/codebase-context.md +0 -115
  422. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/cycle-detection-algorithms.md +0 -134
  423. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/test-patterns.md +0 -153
  424. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/workflow-class.md +0 -132
  425. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_BEST_PRACTICES.md +0 -716
  426. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_QUICK_REF.md +0 -186
  427. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/GROUNDSWELL_DECORATOR_EXAMPLES.md +0 -604
  428. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/INDEX.md +0 -213
  429. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/codebase_structure.md +0 -30
  430. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/existing_test_pattern.md +0 -56
  431. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/getRootObservers_implementation.md +0 -53
  432. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/test_conventions.md +0 -49
  433. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/PRP.md +0 -958
  434. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/QUICK_REFERENCE.md +0 -339
  435. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/README.md +0 -305
  436. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/SUMMARY.md +0 -433
  437. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/bidirectional-tree-consistency-testing.md +0 -1574
  438. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/test-pattern-examples.md +0 -1014
  439. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_BEST_PRACTICES.md +0 -1929
  440. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_CODE_PATTERNS.md +0 -857
  441. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
  442. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_RESEARCH_INDEX.md +0 -424
  443. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_INDEX.md +0 -291
  444. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_RESEARCH_REPORT.md +0 -1342
  445. package/plan/001_d3bb02af4886/docs/research/P1P2/RESEARCH_SUMMARY.md +0 -342
  446. package/plan/001_d3bb02af4886/docs/research/P1P2/anthropic-sdk.md +0 -174
  447. package/plan/001_d3bb02af4886/docs/research/P1P2/async-local-storage.md +0 -200
  448. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-code-patterns.md +0 -1205
  449. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-decision-matrix.md +0 -421
  450. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-implementation-guide.md +0 -1341
  451. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-integration-guide.md +0 -834
  452. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-patterns.md +0 -1468
  453. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-quick-reference.md +0 -558
  454. package/plan/001_d3bb02af4886/docs/research/P1P2/zod-schema.md +0 -152
  455. package/plan/001_d3bb02af4886/docs/research/P3P4/caching-lru.md +0 -116
  456. package/plan/001_d3bb02af4886/docs/research/P3P4/introspection-tools.md +0 -177
  457. package/plan/001_d3bb02af4886/docs/research/P3P4/reflection-patterns.md +0 -117
  458. package/plan/001_d3bb02af4886/docs/research/P4P5/RESEARCH_SUMMARY.md +0 -151
  459. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_QUICK_REF.md +0 -376
  460. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_RESEARCH.md +0 -1507
  461. package/plan/001_d3bb02af4886/docs/research/bugfix_typescript_patterns.md +0 -949
  462. package/plan/001_d3bb02af4886/docs/research/error-testing-research.md +0 -619
  463. package/plan/001_d3bb02af4886/docs/research/error_handling_patterns.md +0 -723
  464. package/plan/001_d3bb02af4886/docs/research/general/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
  465. package/plan/001_d3bb02af4886/docs/research/general/README-INTROSPECTION.md +0 -352
  466. package/plan/001_d3bb02af4886/docs/research/general/agent-introspection-patterns.md +0 -1085
  467. package/plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md +0 -984
  468. package/plan/001_d3bb02af4886/docs/research/general/introspection-tool-examples.md +0 -875
  469. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/PRP_TEMPLATE.md +0 -460
  470. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md +0 -324
  471. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/README.md +0 -175
  472. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md +0 -499
  473. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/SUMMARY.md +0 -163
  474. package/plan/001_d3bb02af4886/prd_snapshot.md +0 -543
  475. package/plan/bugfix/BUG_FIX_SUMMARY.md +0 -961
  476. package/scripts/generate-llms-full.ts +0 -206
  477. package/src/__tests__/adversarial/attachChild-performance.test.ts +0 -216
  478. package/src/__tests__/adversarial/circular-reference.test.ts +0 -101
  479. package/src/__tests__/adversarial/complex-circular-reference.test.ts +0 -139
  480. package/src/__tests__/adversarial/concurrent-task-failures.test.ts +0 -571
  481. package/src/__tests__/adversarial/deep-analysis.test.ts +0 -729
  482. package/src/__tests__/adversarial/deep-hierarchy-stress.test.ts +0 -213
  483. package/src/__tests__/adversarial/e2e-prd-validation.test.ts +0 -448
  484. package/src/__tests__/adversarial/edge-case.test.ts +0 -703
  485. package/src/__tests__/adversarial/error-merge-strategy.test.ts +0 -760
  486. package/src/__tests__/adversarial/incremental-performance.test.ts +0 -140
  487. package/src/__tests__/adversarial/node-map-update-benchmarks.test.ts +0 -457
  488. package/src/__tests__/adversarial/observer-propagation.test.ts +0 -487
  489. package/src/__tests__/adversarial/parent-validation.test.ts +0 -143
  490. package/src/__tests__/adversarial/prd-12-2-compliance.test.ts +0 -611
  491. package/src/__tests__/adversarial/prd-compliance.test.ts +0 -731
  492. package/src/__tests__/compatibility/backward-compatibility.test.ts +0 -1572
  493. package/src/__tests__/helpers/index.ts +0 -18
  494. package/src/__tests__/helpers/tree-verification.ts +0 -257
  495. package/src/__tests__/integration/agent-workflow.test.ts +0 -256
  496. package/src/__tests__/integration/bidirectional-consistency.test.ts +0 -847
  497. package/src/__tests__/integration/observer-logging.test.ts +0 -643
  498. package/src/__tests__/integration/tree-mirroring.test.ts +0 -151
  499. package/src/__tests__/integration/workflow-reparenting.test.ts +0 -303
  500. package/src/__tests__/unit/agent.test.ts +0 -169
  501. package/src/__tests__/unit/cache-key.test.ts +0 -182
  502. package/src/__tests__/unit/cache.test.ts +0 -172
  503. package/src/__tests__/unit/context.test.ts +0 -217
  504. package/src/__tests__/unit/decorators.test.ts +0 -100
  505. package/src/__tests__/unit/introspection-tools.test.ts +0 -277
  506. package/src/__tests__/unit/logger.test.ts +0 -293
  507. package/src/__tests__/unit/observable.test.ts +0 -321
  508. package/src/__tests__/unit/prompt.test.ts +0 -135
  509. package/src/__tests__/unit/reflection.test.ts +0 -210
  510. package/src/__tests__/unit/tree-debugger-incremental.test.ts +0 -170
  511. package/src/__tests__/unit/tree-debugger.test.ts +0 -85
  512. package/src/__tests__/unit/utils/workflow-error-utils.test.ts +0 -209
  513. package/src/__tests__/unit/workflow-detachChild.test.ts +0 -100
  514. package/src/__tests__/unit/workflow-emitEvent-childDetached.test.ts +0 -153
  515. package/src/__tests__/unit/workflow-isDescendantOf.test.ts +0 -180
  516. package/src/__tests__/unit/workflow.test.ts +0 -357
  517. package/src/cache/cache-key.ts +0 -244
  518. package/src/cache/cache.ts +0 -236
  519. package/src/core/agent.ts +0 -593
  520. package/src/core/event-tree.ts +0 -260
  521. package/src/core/logger.ts +0 -112
  522. package/src/core/mcp-handler.ts +0 -184
  523. package/src/core/prompt.ts +0 -150
  524. package/src/core/workflow-context.ts +0 -351
  525. package/src/core/workflow.ts +0 -540
  526. package/src/debugger/tree-debugger.ts +0 -255
  527. package/src/decorators/observed-state.ts +0 -95
  528. package/src/decorators/step.ts +0 -139
  529. package/src/decorators/task.ts +0 -159
  530. package/src/examples/tdd-orchestrator.ts +0 -65
  531. package/src/examples/test-cycle-workflow.ts +0 -64
  532. package/src/index.ts +0 -142
  533. package/src/reflection/reflection.ts +0 -407
  534. package/src/tools/index.ts +0 -36
  535. package/src/tools/introspection.ts +0 -464
  536. package/src/types/agent.ts +0 -90
  537. package/src/types/decorators.ts +0 -32
  538. package/src/types/error-strategy.ts +0 -13
  539. package/src/types/error.ts +0 -20
  540. package/src/types/events.ts +0 -75
  541. package/src/types/index.ts +0 -55
  542. package/src/types/logging.ts +0 -24
  543. package/src/types/observer.ts +0 -18
  544. package/src/types/prompt.ts +0 -40
  545. package/src/types/reflection.ts +0 -117
  546. package/src/types/sdk-primitives.ts +0 -128
  547. package/src/types/workflow-context.ts +0 -163
  548. package/src/types/workflow.ts +0 -37
  549. package/src/utils/id.ts +0 -11
  550. package/src/utils/index.ts +0 -4
  551. package/src/utils/observable.ts +0 -106
  552. package/src/utils/workflow-error-utils.ts +0 -56
  553. package/tsconfig.json +0 -22
  554. package/vitest.config.ts +0 -16
@@ -1,558 +0,0 @@
1
- name: "P1M3T2S2: Implement Incremental Node Map Update for childDetached"
2
- description: |
3
- Implements incremental node map updates in WorkflowTreeDebugger to eliminate O(n) full rebuild on tree mutations.
4
- Replaces current full rebuild strategy with O(k) incremental updates where k = subtree size.
5
-
6
- ---
7
-
8
- ## Goal
9
-
10
- **Feature Goal**: Replace O(n) full nodeMap rebuild in `onTreeChanged()` with O(k) incremental updates for `childDetached` and `childAttached` events.
11
-
12
- **Deliverable**: Modified `src/debugger/tree-debugger.ts` with:
13
- 1. New `removeSubtreeNodes(nodeId: string)` private method using BFS traversal
14
- 2. Updated `onEvent()` to handle `childDetached` and `childAttached` events incrementally
15
- 3. Simplified `onTreeChanged()` to only update root reference
16
-
17
- **Success Definition**:
18
- - `childDetached` events remove entire subtree from nodeMap in O(k) time
19
- - `childAttached` events add subtree in O(k) time (existing behavior preserved)
20
- - `onTreeChanged()` no longer rebuilds entire map
21
- - All existing tests pass
22
- - Performance improvement of 10-100× for large trees (1000+ nodes)
23
-
24
- ## User Persona
25
-
26
- **Target User**: Developer using hierarchical workflow engine with large trees (100+ nodes) and frequent structural changes.
27
-
28
- **Use Case**: Attaching/detaching child workflows in long-running workflows with thousands of nodes.
29
-
30
- **User Journey**:
31
- 1. Developer creates workflow with 1000+ nodes
32
- 2. Workflow attaches/detaches child workflows during execution
33
- 3. Tree debugger receives tree change events
34
- 4. Node map updates incrementally without O(n) rebuild
35
-
36
- **Pain Points Addressed**:
37
- - Current O(n) rebuild causes noticeable lag on large trees
38
- - Memory churn from `Map.clear()` + full rebuild
39
- - Orphaned nodes leak in nodeMap after detach (memory leak)
40
-
41
- ## Why
42
-
43
- - **Performance**: Current implementation causes 100-1000× slowdown on large trees with frequent structural changes
44
- - **Memory leak**: `childDetached` events leave orphaned nodes in nodeMap until full rebuild
45
- - **Scalability**: Full rebuild strategy doesn't scale beyond ~1000 nodes
46
- - **Consistency**: `onEvent()` already handles `childAttached` incrementally - complete the pattern
47
-
48
- ## What
49
-
50
- Modify WorkflowTreeDebugger to use incremental node map updates for tree structural changes.
51
-
52
- ### Success Criteria
53
-
54
- - [ ] `removeSubtreeNodes(nodeId: string)` method removes entire subtree using BFS traversal
55
- - [ ] `onEvent()` handles `childDetached` by calling `removeSubtreeNodes()`
56
- - [ ] `onEvent()` handles `childAttached` using existing `buildNodeMap()` pattern
57
- - [ ] `onTreeChanged()` only updates root reference, no rebuild
58
- - [ ] All existing tests pass
59
- - [ ] No memory leaks from orphaned nodes after detach
60
- - [ ] Performance improvement measurable with 1000+ node trees
61
-
62
- ## All Needed Context
63
-
64
- ### Context Completeness Check
65
-
66
- **"No Prior Knowledge" test**: If someone knew nothing about this codebase, would they have everything needed?
67
-
68
- ✅ **YES** - This PRP provides:
69
- - Exact file paths and line numbers for all referenced code
70
- - Complete code patterns to follow from existing codebase
71
- - Specific test patterns and validation commands
72
- - All architectural constraints and gotchas
73
- - External research with specific URLs
74
-
75
- ### Documentation & References
76
-
77
- ```yaml
78
- # MUST READ - Include these in your context window
79
- - url: https://react.dev/learn/render-and-commit
80
- why: React's reconciliation algorithm patterns for incremental tree updates
81
- critical: O(n) diffing with heuristics, key-based identification
82
-
83
- - url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
84
- why: Map operations have O(1) complexity - validates incremental approach
85
- section: "#instance-methods" (set, get, delete operations)
86
-
87
- - file: plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md
88
- why: Comprehensive analysis of current onTreeChanged implementation with performance impact
89
- section: "Incremental Update Opportunities" (lines 327-472)
90
- gotcha: Current onEvent() already handles childAttached incrementally but onTreeChanged() rebuilds
91
-
92
- - file: plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md
93
- why: External research on BFS/DFS patterns, Map performance, React reconciliation
94
- section: "6. Actionable Implementation Guide" (lines 576-736)
95
-
96
- - file: src/debugger/tree-debugger.ts
97
- why: Primary file to modify - contains current implementation
98
- pattern: Observer pattern with onEvent(), onTreeChanged(), buildNodeMap()
99
- gotcha: buildNodeMap() is recursive - may hit stack limits on deep trees (use BFS for removal)
100
-
101
- - file: src/types/events.ts
102
- why: WorkflowEvent discriminated union - all event types defined
103
- pattern: Lines 10-11 define childAttached and childDetached events
104
- gotcha: childDetached only provides childId string, not full node object
105
-
106
- - file: src/types/observer.ts
107
- why: WorkflowObserver interface - must implement all methods
108
- pattern: Lines 9-18 define onLog, onEvent, onStateUpdated, onTreeChanged
109
-
110
- - file: src/__tests__/helpers/tree-verification.ts
111
- why: Test helper patterns for validating tree operations
112
- pattern: BFS traversal in collectAllNodes() (lines 13-32)
113
- pattern: verifyOrphaned() for testing detach operations (lines 151-163)
114
-
115
- - file: src/__tests__/unit/tree-debugger.test.ts
116
- why: Existing test patterns for WorkflowTreeDebugger
117
- pattern: SimpleWorkflow class pattern, observer creation helper
118
- gotcha: Tests use direct node access via debugger.getNode()
119
-
120
- - file: src/__tests__/adversarial/attachChild-performance.test.ts
121
- why: Performance test patterns using performance.now()
122
- pattern: Threshold-based performance assertions (< 10ms, < 50ms, etc.)
123
-
124
- - file: src/core/workflow.ts
125
- why: Understanding where events are emitted
126
- pattern: Lines 300-304 (childAttached emission), 353-357 (childDetached emission)
127
- pattern: Lines 367-379 (observer notification with error isolation)
128
- ```
129
-
130
- ### Current Codebase Structure
131
-
132
- ```bash
133
- /home/dustin/projects/groundswell/
134
- ├── src/
135
- │ ├── debugger/
136
- │ │ └── tree-debugger.ts # PRIMARY FILE - Modify this
137
- │ ├── core/
138
- │ │ └── workflow.ts # Event emission patterns
139
- │ ├── types/
140
- │ │ ├── events.ts # WorkflowEvent types
141
- │ │ ├── observer.ts # WorkflowObserver interface
142
- │ │ └── workflow.ts # WorkflowNode interface
143
- │ └── __tests__/
144
- │ ├── unit/
145
- │ │ └── tree-debugger.test.ts # Test patterns to follow
146
- │ ├── helpers/
147
- │ │ └── tree-verification.ts # BFS pattern reference
148
- │ └── adversarial/
149
- │ └── attachChild-performance.test.ts # Performance test patterns
150
- └── plan/
151
- └── 001_d3bb02af4886/bugfix/001_e8e04329daf3/
152
- ├── docs/P1M3T2S1/analysis.md # S1 analysis - READ THIS
153
- └── P1M3T2S2/
154
- ├── PRP.md # This file
155
- └── research/
156
- └── external_research.md # External patterns research
157
- ```
158
-
159
- ### Desired Codebase Structure After Implementation
160
-
161
- ```bash
162
- src/debugger/
163
- └── tree-debugger.ts # Modified with incremental updates
164
- ├── removeSubtreeNodes() # NEW: BFS-based subtree removal
165
- ├── onEvent() # MODIFIED: Handle childDetached
166
- ├── buildNodeMap() # UNCHANGED: Keep existing pattern
167
- └── onTreeChanged() # MODIFIED: Remove full rebuild
168
- ```
169
-
170
- ### Known Gotchas of Our Codebase & Library Quirks
171
-
172
- ```typescript
173
- // CRITICAL: childDetached event only provides childId, not full WorkflowNode
174
- // From src/types/events.ts:11
175
- // { type: 'childDetached'; parentId: string; childId: string }
176
- // Must use stored node reference from nodeMap to get descendants
177
-
178
- // CRITICAL: buildNodeMap() is recursive - may hit stack limits on deep trees
179
- // From src/debugger/tree-debugger.ts:53-58
180
- // Use iterative BFS for removeSubtreeNodes() to avoid stack overflow
181
-
182
- // CRITICAL: onEvent() is called BEFORE onTreeChanged() by emitEvent()
183
- // From src/core/workflow.ts:367-379
184
- // Order: obs.onEvent(event) THEN obs.onTreeChanged(root)
185
- // This means onEvent() must do the incremental work
186
-
187
- // CRITICAL: Observer callbacks are wrapped in try-catch for error isolation
188
- // From src/core/workflow.ts:376
189
- // Observer errors don't stop workflow execution
190
-
191
- // CRITICAL: Node tree must mirror workflow tree (1:1 correspondence)
192
- // From PRD Section 12.2 and tree-verification.ts:201-237
193
- // Any tree change affects both trees simultaneously
194
-
195
- // CRITICAL: Map.set() replaces existing entries for same key
196
- // From src/debugger/tree-debugger.ts:54
197
- // this.nodeMap.set(node.id, node) - OK to call on already-mapped nodes
198
-
199
- // CRITICAL: Use Map.delete() for removal, not setting to undefined
200
- // Map has undefined as valid value - use delete to actually remove key
201
- ```
202
-
203
- ## Implementation Blueprint
204
-
205
- ### Data Models and Structure
206
-
207
- No new data models needed. Using existing:
208
- - `WorkflowNode` from `src/types/workflow.ts`
209
- - `WorkflowEvent` discriminated union from `src/types/events.ts`
210
- - `WorkflowObserver` interface from `src/types/observer.ts`
211
-
212
- ### Implementation Tasks (ordered by dependencies)
213
-
214
- ```yaml
215
- Task 1: ADD removeSubtreeNodes() private method
216
- - IMPLEMENT: BFS-based subtree removal from nodeMap
217
- - FOLLOW pattern: src/__tests__/helpers/tree-verification.ts:13-32 (collectAllNodes BFS)
218
- - NAMING: removeSubtreeNodes(nodeId: string): void
219
- - ALGORITHM:
220
- 1. Get node from nodeMap using nodeId
221
- 2. If not found, return early (already removed)
222
- 3. Use queue-based BFS to collect all descendant IDs
223
- 4. Delete all collected IDs from nodeMap
224
- - GOTCHA: Use iterative BFS, not recursive (avoid stack overflow)
225
- - GOTCHA: Collect all keys first, then delete (atomic update)
226
- - COMPLEXITY: O(k) where k = nodes in subtree
227
- - PLACEMENT: After buildNodeMap() in tree-debugger.ts
228
-
229
- Task 2: MODIFY onEvent() to handle childDetached
230
- - IMPLEMENT: switch-case for event.type dispatch
231
- - FOLLOW pattern: S1 analysis lines 527-555 (recommended implementation)
232
- - CURRENT: Only handles childAttached (line 68-69)
233
- - ADD: case 'childDetached' -> call removeSubtreeNodes(event.childId)
234
- - PRESERVE: existing childAttached handling (buildNodeMap is already optimal)
235
- - GOTCHA: childDetached only provides childId string, not full node
236
- - PLACEMENT: Replace existing if statement with switch statement
237
-
238
- Task 3: MODIFY onTreeChanged() to remove full rebuild
239
- - IMPLEMENT: Only update root reference if different
240
- - CURRENT: Lines 80-84 - clears map and rebuilds
241
- - NEW: Just update this.root if different from parameter
242
- - PRESERVE: Observer interface contract (method must exist)
243
- - RATIONALE: All incremental work now done in onEvent()
244
- - PLACEMENT: Same location (lines 80-84)
245
-
246
- Task 4: CREATE unit tests for incremental updates
247
- - IMPLEMENT: Tests in src/__tests__/unit/tree-debugger-incremental.test.ts
248
- - FOLLOW pattern: src/__tests__/unit/tree-debugger.test.ts (test structure)
249
- - TEST CASES:
250
- 1. childDetached removes entire subtree (node + descendants)
251
- 2. childDetached on already-removed node is no-op
252
- 3. childAttached adds subtree (verify existing behavior)
253
- 4. onTreeChanged doesn't rebuild map
254
- - NAMING: describe('Incremental Node Map Updates')
255
- - PLACEMENT: New test file alongside tree-debugger.test.ts
256
-
257
- Task 5: RUN existing test suite
258
- - VERIFY: All existing tree-debugger tests pass
259
- - VERIFY: No regressions in observer tests
260
- - VERIFY: Tree verification helpers still work
261
- - COMMAND: npm test -- src/__tests__/unit/tree-debugger.test.ts
262
- - COMMAND: npm test -- src/__tests__/integration/observer-propagation.test.ts
263
- ```
264
-
265
- ### Implementation Patterns & Key Details
266
-
267
- ```typescript
268
- // Pattern 1: BFS-based subtree removal (NEW METHOD)
269
- // Follows: src/__tests__/helpers/tree-verification.ts:13-32
270
- private removeSubtreeNodes(nodeId: string): void {
271
- const node = this.nodeMap.get(nodeId);
272
- if (!node) return; // Already removed or never existed
273
-
274
- // BFS traversal to collect all descendant IDs
275
- const toRemove: string[] = [];
276
- const queue: WorkflowNode[] = [node];
277
-
278
- while (queue.length > 0) {
279
- const current = queue.shift()!;
280
- toRemove.push(current.id);
281
- // Add children to queue for BFS traversal
282
- queue.push(...current.children);
283
- }
284
-
285
- // Batch delete all collected keys (atomic update)
286
- for (const id of toRemove) {
287
- this.nodeMap.delete(id);
288
- }
289
- }
290
- // COMPLEXITY: O(k) time, O(w) space where w = max width of subtree
291
-
292
- // Pattern 2: Event-type dispatch in onEvent() (MODIFY EXISTING)
293
- // Follows: S1 analysis lines 527-555
294
- onEvent(event: WorkflowEvent): void {
295
- // Handle structural events with incremental updates
296
- switch (event.type) {
297
- case 'childAttached':
298
- // Keep existing logic - already optimal O(k)
299
- this.buildNodeMap(event.child);
300
- break;
301
-
302
- case 'childDetached':
303
- // NEW: Incremental subtree removal
304
- this.removeSubtreeNodes(event.childId);
305
- break;
306
-
307
- case 'treeUpdated':
308
- // NEW: Update root reference only
309
- this.root = event.root;
310
- break;
311
-
312
- default:
313
- // Non-structural events - no map update needed
314
- break;
315
- }
316
-
317
- // Always forward to event stream (existing behavior)
318
- this.events.next(event);
319
- }
320
- // COMPLEXITY: O(k) for structural events, O(1) for non-structural
321
-
322
- // Pattern 3: Simplified onTreeChanged() (MODIFY EXISTING)
323
- // Follows: S1 analysis lines 570-578
324
- onTreeChanged(root: WorkflowNode): void {
325
- // All tree changes now handled incrementally in onEvent()
326
- // Just update root reference if different
327
- if (this.root !== root) {
328
- this.root = root;
329
- }
330
- }
331
- // COMPLEXITY: O(1) - no rebuild!
332
-
333
- // GOTCHA: Don't forget to handle treeUpdated event!
334
- // Currently onTreeChanged() is called for treeUpdated events
335
- // After change, onEvent() must handle treeUpdated to update root
336
- ```
337
-
338
- ### Integration Points
339
-
340
- ```yaml
341
- EVENTS:
342
- - childAttached: src/core/workflow.ts:300-304
343
- - childDetached: src/core/workflow.ts:353-357
344
- - treeUpdated: src/core/workflow.ts:405
345
-
346
- OBSERVER_PATTERN:
347
- - file: src/core/workflow.ts:367-379
348
- - pattern: obs.onEvent(event) THEN obs.onTreeChanged(root)
349
- - critical: onEvent() called first - must do incremental work
350
-
351
- TREE_VERIFICATION:
352
- - file: src/__tests__/helpers/tree-verification.ts
353
- - use: verifyOrphaned() for testing detachChild
354
- - use: verifyTreeMirror() for validating tree consistency
355
- ```
356
-
357
- ## Validation Loop
358
-
359
- ### Level 1: Syntax & Style (Immediate Feedback)
360
-
361
- ```bash
362
- # TypeScript compilation check
363
- npx tsc --noEmit src/debugger/tree-debugger.ts
364
-
365
- # Lint check
366
- npm run lint -- src/debugger/tree-debugger.ts
367
-
368
- # Format check
369
- npm run format -- --check src/debugger/tree-debugger.ts
370
-
371
- # Expected: Zero errors. Fix any issues before proceeding.
372
- ```
373
-
374
- ### Level 2: Unit Tests (Component Validation)
375
-
376
- ```bash
377
- # Run existing tree debugger tests
378
- npm test -- src/__tests__/unit/tree-debugger.test.ts
379
-
380
- # Run new incremental update tests
381
- npm test -- src/__tests__/unit/tree-debugger-incremental.test.ts
382
-
383
- # Run observer propagation tests
384
- npm test -- src/__tests__/integration/observer-propagation.test.ts
385
-
386
- # Expected: All tests pass. If failing, debug root cause.
387
- ```
388
-
389
- ### Level 3: Integration Testing (System Validation)
390
-
391
- ```bash
392
- # Create test script to verify behavior
393
- cat > /tmp/test-incremental.mjs << 'EOF'
394
- import { Workflow, WorkflowTreeDebugger } from './src/index.js';
395
-
396
- class TestWorkflow extends Workflow {
397
- async run() { this.setStatus('completed'); }
398
- }
399
-
400
- // Test 1: childDetached removes subtree
401
- const root = new TestWorkflow('Root');
402
- const child1 = new TestWorkflow('Child1', root);
403
- const grandchild = new TestWorkflow('Grandchild', child1);
404
- const child2 = new TestWorkflow('Child2', root);
405
-
406
- const debugger = new WorkflowTreeDebugger(root);
407
-
408
- console.log('Initial nodes:', debugger.getStats().totalNodes); // Should be 4
409
- console.log('Grandchild found:', !!debugger.getNode(grandchild.id)); // true
410
-
411
- // Detach child1 (removes child1 + grandchild)
412
- root.detachChild(child1);
413
-
414
- console.log('After detach:', debugger.getStats().totalNodes); // Should be 2
415
- console.log('Grandchild removed:', !debugger.getNode(grandchild.id)); // true
416
- console.log('Child1 removed:', !debugger.getNode(child1.id)); // true
417
- console.log('Child2 still there:', !!debugger.getNode(child2.id)); // true
418
-
419
- // Test 2: childAttached adds subtree
420
- const child3 = new TestWorkflow('Child3', root);
421
- console.log('After attach:', debugger.getStats().totalNodes); // Should be 3
422
- console.log('Child3 found:', !!debugger.getNode(child3.id)); // true
423
-
424
- console.log('✓ All tests passed!');
425
- EOF
426
-
427
- node /tmp/test-incremental.mjs
428
-
429
- # Expected output:
430
- # Initial nodes: 4
431
- # Grandchild found: true
432
- # After detach: 2
433
- # Grandchild removed: true
434
- # Child1 removed: true
435
- # Child2 still there: true
436
- # After attach: 3
437
- # Child3 found: true
438
- # ✓ All tests passed!
439
- ```
440
-
441
- ### Level 4: Performance Validation
442
-
443
- ```bash
444
- # Create performance benchmark
445
- cat > /tmp/benchmark-incremental.mjs << 'EOF'
446
- import { Workflow, WorkflowTreeDebugger } from './src/index.js';
447
-
448
- class TestWorkflow extends Workflow {
449
- async run() { this.setStatus('completed'); }
450
- }
451
-
452
- // Build large tree (1000 nodes)
453
- const root = new TestWorkflow('Root');
454
- let current = root;
455
- for (let i = 0; i < 999; i++) {
456
- const child = new TestWorkflow(`Node${i}`, current);
457
- current = child;
458
- }
459
-
460
- const debugger = new WorkflowTreeDebugger(root);
461
- console.log('Total nodes:', debugger.getStats().totalNodes);
462
-
463
- // Benchmark: Detach single node (should be O(1) vs O(1000))
464
- const start = performance.now();
465
- const leaf = current; // Last node in chain
466
- const parent = leaf.parent!;
467
- parent.detachChild(leaf);
468
- const duration = performance.now() - start;
469
-
470
- console.log(`Detach duration: ${duration.toFixed(3)}ms`);
471
- console.log(`Expected: < 1ms for incremental, ~10ms for full rebuild`);
472
-
473
- // Verify correct behavior
474
- const stats = debugger.getStats();
475
- console.log('Nodes after detach:', stats.totalNodes); // Should be 999
476
- console.log('Leaf removed:', !debugger.getNode(leaf.id)); // true
477
- EOF
478
-
479
- node /tmp/benchmark-incremental.mjs
480
-
481
- # Expected: Detach duration < 1ms (vs ~10ms for full rebuild)
482
- # Speedup: 10-100× for single node detach from 1000-node tree
483
- ```
484
-
485
- ## Final Validation Checklist
486
-
487
- ### Technical Validation
488
-
489
- - [ ] All 4 validation levels completed successfully
490
- - [ ] TypeScript compilation passes: `npx tsc --noEmit`
491
- - [ ] All tests pass: `npm test -- src/__tests__/unit/tree-debugger*.test.ts`
492
- - [ ] Linting passes: `npm run lint`
493
- - [ ] Format check passes: `npm run format -- --check`
494
-
495
- ### Feature Validation
496
-
497
- - [ ] `removeSubtreeNodes()` method implemented with BFS traversal
498
- - [ ] `onEvent()` handles `childDetached` events
499
- - [ ] `onEvent()` handles `childAttached` events (existing preserved)
500
- - [ ] `onEvent()` handles `treeUpdated` events
501
- - [ ] `onTreeChanged()` no longer rebuilds map
502
- - [ ] Detached subtree fully removed (node + descendants)
503
- - [ ] No orphaned nodes leak in nodeMap
504
- - [ ] Performance improvement measurable (10-100× for large trees)
505
-
506
- ### Code Quality Validation
507
-
508
- - [ ] Follows existing codebase patterns (BFS from tree-verification.ts)
509
- - [ ] Method naming matches conventions (camelCase, descriptive)
510
- - [ ] File placement correct (tree-debugger.ts only modification)
511
- - [ ] No recursive methods added (BFS is iterative)
512
- - [ ] Error handling graceful (node not found = no-op)
513
-
514
- ### Edge Cases Covered
515
-
516
- - [ ] Detaching already-removed node is no-op
517
- - [ ] Detaching node with many descendants removes all
518
- - [ ] Attaching node with many descendants adds all
519
- - [ ] Multiple rapid attach/detach operations work correctly
520
- - [ ] Deep trees (1000+ depth) don't cause stack overflow
521
-
522
- ---
523
-
524
- ## Anti-Patterns to Avoid
525
-
526
- - ❌ Don't use recursive DFS for `removeSubtreeNodes()` - use iterative BFS
527
- - ❌ Don't delete nodes one-by-one during traversal - collect all keys first
528
- - ❌ Don't rebuild entire map in `onTreeChanged()` - defeats purpose
529
- - ❌ Don't forget to handle `treeUpdated` event in `onEvent()`
530
- - ❌ Don't assume `nodeMap.get()` returns non-null - check for undefined
531
- - ❌ Don't modify `buildNodeMap()` - it's already optimal for addition
532
- - ❌ Don't add new public methods - keep implementation private
533
- - ❌ Don't create new Map on each update - mutate existing Map
534
- - ❌ Don't use `Map.clear()` in any code path - causes GC churn
535
- - ❌ Don't forget to forward events to `this.events.next()` - breaks event stream
536
-
537
- ---
538
-
539
- ## Success Metrics
540
-
541
- **Confidence Score**: 9/10 for one-pass implementation success
542
-
543
- **Validation**: The completed PRP enables an AI agent unfamiliar with the codebase to implement incremental node map updates successfully using only the PRP content and codebase access.
544
-
545
- **Key Success Indicators**:
546
- 1. S1 analysis provides complete current implementation analysis
547
- 2. External research provides proven patterns (React reconciliation, BFS traversal)
548
- 3. Codebase has existing BFS pattern to follow (tree-verification.ts)
549
- 4. Test patterns are well-established
550
- 5. All file paths and line numbers are specific and actionable
551
- 6. Gotchas and anti-patterns are comprehensively documented
552
-
553
- **Estimated Performance Impact**:
554
- - Small trees (< 100 nodes): Minimal improvement (already fast)
555
- - Medium trees (100-1000 nodes): 10-100× improvement on structural changes
556
- - Large trees (1000+ nodes): 100-1000× improvement on structural changes
557
-
558
- **Expected Test Coverage**: 100% of new code paths with unit tests