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,499 +0,0 @@
1
- # Incremental Tree Map Updates Research Report
2
-
3
- ## Executive Summary
4
-
5
- This report documents best practices for optimizing tree data structure updates in TypeScript/JavaScript, specifically for the WorkflowTreeDebugger's node map maintenance. Current implementation clears and rebuilds the entire Map on tree changes, which is inefficient for large trees.
6
-
7
- ## Current Implementation Analysis
8
-
9
- **File**: `/home/dustin/projects/groundswell/src/debugger/tree-debugger.ts`
10
-
11
- ### Current Behavior:
12
- ```typescript
13
- onTreeChanged(root: WorkflowNode): void {
14
- this.root = root;
15
- this.nodeMap.clear(); // ❌ Clears entire map
16
- this.buildNodeMap(root); // ❌ Rebuilds from scratch (O(n))
17
- }
18
-
19
- onEvent(event: WorkflowEvent): void {
20
- if (event.type === 'childAttached') {
21
- this.buildNodeMap(event.child); // ✅ Already incremental for additions
22
- }
23
- this.events.next(event);
24
- }
25
- ```
26
-
27
- ### Performance Impact:
28
- - **Time Complexity**: O(n) for every tree change
29
- - **Memory Impact**: Full Map reconstruction triggers garbage collection
30
- - **Scaling Problem**: With 1000+ node trees, every structural change becomes expensive
31
-
32
- ---
33
-
34
- ## Best Practices & Patterns
35
-
36
- ### 1. Incremental Map Update Strategies
37
-
38
- #### Pattern A: Event-Driven Incremental Updates (Recommended)
39
-
40
- **Best For**: Trees with frequent structural changes where events provide change context
41
-
42
- ```typescript
43
- class WorkflowTreeDebugger implements WorkflowObserver {
44
- private nodeMap: Map<string, WorkflowNode> = new Map();
45
-
46
- onEvent(event: WorkflowEvent): void {
47
- switch (event.type) {
48
- case 'childAttached':
49
- // ✅ O(1) - Add only the new subtree
50
- this.addNodeSubtree(event.child, event.parentId);
51
- break;
52
-
53
- case 'childDetached':
54
- // ✅ O(k) - Remove only the detached subtree (k = detached nodes)
55
- this.removeNodeSubtree(event.childId);
56
- break;
57
-
58
- case 'treeUpdated':
59
- // ✅ O(1) - Just update root reference
60
- this.root = event.root;
61
- break;
62
- }
63
- this.events.next(event);
64
- }
65
-
66
- private addNodeSubtree(node: WorkflowNode, parentId?: string): void {
67
- this.nodeMap.set(node.id, node);
68
- for (const child of node.children) {
69
- this.addNodeSubtree(child);
70
- }
71
- }
72
-
73
- private removeNodeSubtree(nodeId: string): void {
74
- const node = this.nodeMap.get(nodeId);
75
- if (!node) return;
76
-
77
- // Recursively remove all descendants
78
- for (const child of node.children) {
79
- this.removeNodeSubtree(child.id);
80
- }
81
- this.nodeMap.delete(nodeId);
82
- }
83
- }
84
- ```
85
-
86
- **Benefits**:
87
- - **O(1)** for single node attachment
88
- - **O(k)** for subtree removal (where k = removed nodes)
89
- - **O(1)** for root updates
90
- - **No GC pressure** from Map reconstruction
91
-
92
- #### Pattern B: Dirty Flag with Lazy Rebuild
93
-
94
- **Best For**: Read-heavy workloads where write batching is beneficial
95
-
96
- ```typescript
97
- class WorkflowTreeDebugger implements WorkflowObserver {
98
- private nodeMap: Map<string, WorkflowNode> = new Map();
99
- private mapDirty = false;
100
-
101
- onEvent(event: WorkflowEvent): void {
102
- if (event.type === 'childAttached' || event.type === 'childDetached') {
103
- this.mapDirty = true;
104
- }
105
- this.events.next(event);
106
- }
107
-
108
- getNode(id: string): WorkflowNode | undefined {
109
- // Lazy rebuild on access
110
- if (this.mapDirty) {
111
- this.rebuildNodeMap();
112
- this.mapDirty = false;
113
- }
114
- return this.nodeMap.get(id);
115
- }
116
-
117
- private rebuildNodeMap(): void {
118
- this.nodeMap.clear();
119
- this.buildNodeMap(this.root);
120
- }
121
- }
122
- ```
123
-
124
- **Benefits**:
125
- - Batches multiple changes before rebuild
126
- - Defers work until actually needed
127
- - Good for rapid sequential changes
128
-
129
- **Drawbacks**:
130
- - First access after changes pays full cost
131
- - Still O(n) on rebuild
132
-
133
- ---
134
-
135
- ### 2. Tree Diffing Algorithms
136
-
137
- #### Pattern C: Virtual DOM-Style Reconciliation
138
-
139
- Inspired by React's reconciliation algorithm:
140
-
141
- ```typescript
142
- interface TreeChange {
143
- type: 'add' | 'remove' | 'move' | 'update';
144
- nodeId: string;
145
- parentNodeId?: string;
146
- }
147
-
148
- function diffTrees(oldTree: WorkflowNode, newTree: WorkflowNode): TreeChange[] {
149
- const changes: TreeChange[] = [];
150
- const visited = new Set<string>();
151
-
152
- // Detect additions and updates
153
- function traverse(newNode: WorkflowNode, oldNode?: WorkflowNode) {
154
- if (!oldNode) {
155
- changes.push({ type: 'add', nodeId: newNode.id });
156
- } else if (oldNode.id !== newNode.id) {
157
- changes.push({ type: 'update', nodeId: newNode.id });
158
- }
159
-
160
- visited.add(newNode.id);
161
-
162
- // Check for removed children
163
- if (oldNode) {
164
- for (const oldChild of oldNode.children) {
165
- if (!newNode.children.find(c => c.id === oldChild.id)) {
166
- changes.push({ type: 'remove', nodeId: oldChild.id });
167
- }
168
- }
169
- }
170
-
171
- // Recurse into children
172
- for (const newChild of newNode.children) {
173
- const oldChild = oldNode?.children.find(c => c.id === newChild.id);
174
- traverse(newChild, oldChild);
175
- }
176
- }
177
-
178
- traverse(newTree);
179
-
180
- // Detect nodes removed from root
181
- if (oldTree) {
182
- const allNewNodes = collectAllIds(newTree);
183
- const allOldNodes = collectAllIds(oldTree);
184
- for (const oldId of allOldNodes) {
185
- if (!allNewNodes.has(oldId)) {
186
- changes.push({ type: 'remove', nodeId: oldId });
187
- }
188
- }
189
- }
190
-
191
- return changes;
192
- }
193
-
194
- function applyChanges(map: Map<string, WorkflowNode>, changes: TreeChange[]): void {
195
- for (const change of changes) {
196
- switch (change.type) {
197
- case 'add':
198
- // Fetch node from new tree and add to map
199
- break;
200
- case 'remove':
201
- map.delete(change.nodeId);
202
- break;
203
- }
204
- }
205
- }
206
- ```
207
-
208
- **Reference**: [React Reconciliation Algorithm](https://react.dev/learn/understanding-reacts-render-phase#triggering-render)
209
-
210
- ---
211
-
212
- ### 3. Memory & Performance Considerations
213
-
214
- #### Map.clear() vs Incremental Updates
215
-
216
- | Operation | Time Complexity | Memory Impact | GC Pressure |
217
- |-----------|----------------|---------------|-------------|
218
- | `Map.clear()` | O(1) | Frees entire backing store | High (single large GC) |
219
- | Incremental delete | O(k) for k deletions | Fragmented deallocation | Lower (spread out) |
220
- | Incremental add | O(1) per add | May resize backing store | Moderate |
221
-
222
- **Key Insights**:
223
-
224
- 1. **Map.clear() Performance**:
225
- - Technically O(1) but triggers GC of entire Map
226
- - Better for complete invalidation scenarios
227
- - Worse for incremental changes
228
-
229
- 2. **Incremental Modifications**:
230
- - Better cache locality for small changes
231
- - Amortizes GC cost over time
232
- - Prevents "stop-the-world" GC pauses
233
-
234
- 3. **Memory Fragmentation**:
235
- - JavaScript engines optimize Map operations well
236
- - Incremental updates don't significantly fragment memory
237
- - Modern V8/SpiderMonkey handle Map efficiently
238
-
239
- ---
240
-
241
- ### 4. Production Patterns & Examples
242
-
243
- #### Example A: Monaco Editor's LineHeightMap
244
-
245
- Monaco (VS Code's editor) uses incremental updates for line mapping:
246
-
247
- ```typescript
248
- // Simplified pattern from Monaco Editor
249
- class LineHeightMap {
250
- private heights: number[] = [];
251
-
252
- onLinesInserted(fromLineNumber: number, count: number): void {
253
- // ✅ Insert only affected range
254
- this.heights.splice(fromLineNumber - 1, 0, ...new Array(count).fill(0));
255
- }
256
-
257
- onLinesDeleted(fromLineNumber: number, count: number): void {
258
- // ✅ Remove only affected range
259
- this.heights.splice(fromLineNumber - 1, count);
260
- }
261
- }
262
- ```
263
-
264
- #### Example B: Immutable.js Update Patterns
265
-
266
- ```typescript
267
- import { Map } from 'immutable';
268
-
269
- // ❌ Bad: Full rebuild
270
- const updated = Map().withMutations(map => {
271
- allNodes.forEach(node => map.set(node.id, node));
272
- });
273
-
274
- // ✅ Good: Incremental update
275
- const updated = existingMap.set(newNode.id, newNode);
276
- ```
277
-
278
- ---
279
-
280
- ## Recommended Implementation
281
-
282
- ### Implementation Plan
283
-
284
- ```typescript
285
- class WorkflowTreeDebugger implements WorkflowObserver {
286
- private nodeMap: Map<string, WorkflowNode> = new Map();
287
-
288
- constructor(workflow: Workflow) {
289
- this.root = workflow.getNode();
290
- this.buildNodeMap(this.root);
291
- workflow.addObserver(this);
292
- }
293
-
294
- /**
295
- * Handle childAttached - incrementally add subtree
296
- * Time: O(k) where k = nodes in attached subtree
297
- */
298
- private handleChildAttached(child: WorkflowNode): void {
299
- this.addNodeToMap(child);
300
- }
301
-
302
- /**
303
- * Handle childDetached - incrementally remove subtree
304
- * Time: O(k) where k = nodes in detached subtree
305
- */
306
- private handleChildDetached(childId: string): void {
307
- const node = this.nodeMap.get(childId);
308
- if (!node) return;
309
-
310
- // Remove node and all descendants
311
- const toRemove = [childId];
312
- let i = 0;
313
- while (i < toRemove.length) {
314
- const currentNode = this.nodeMap.get(toRemove[i]);
315
- if (currentNode) {
316
- toRemove.push(...currentNode.children.map(c => c.id));
317
- }
318
- i++;
319
- }
320
-
321
- for (const id of toRemove) {
322
- this.nodeMap.delete(id);
323
- }
324
- }
325
-
326
- /**
327
- * Handle treeUpdated - no rebuild needed
328
- * Time: O(1)
329
- */
330
- private handleTreeUpdated(root: WorkflowNode): void {
331
- this.root = root;
332
- // Map remains valid - node references are unchanged
333
- }
334
-
335
- /**
336
- * Recursively add node and descendants to map
337
- */
338
- private addNodeToMap(node: WorkflowNode): void {
339
- this.nodeMap.set(node.id, node);
340
- for (const child of node.children) {
341
- this.addNodeToMap(child);
342
- }
343
- }
344
-
345
- onEvent(event: WorkflowEvent): void {
346
- switch (event.type) {
347
- case 'childAttached':
348
- this.handleChildAttached(event.child);
349
- break;
350
- case 'childDetached':
351
- this.handleChildDetached(event.childId);
352
- break;
353
- case 'treeUpdated':
354
- this.handleTreeUpdated(event.root);
355
- break;
356
- }
357
- this.events.next(event);
358
- }
359
-
360
- onTreeChanged(root: WorkflowNode): void {
361
- // ✅ No longer needed - handled incrementally in onEvent
362
- this.root = root;
363
- }
364
- }
365
- ```
366
-
367
- ---
368
-
369
- ## Performance Benchmarks
370
-
371
- ### Expected Improvements
372
-
373
- | Scenario | Current (Full Rebuild) | Incremental | Improvement |
374
- |----------|----------------------|-------------|-------------|
375
- | Single node attach | O(n) | O(1) | n× faster |
376
- | Single node detach | O(n) | O(k) | n/k× faster |
377
- | Subtree attach (10 nodes) | O(n) | O(10) | n/10× faster |
378
- | Root reference update | O(n) | O(1) | n× faster |
379
- | Large tree (1000 nodes) | 1000 ops | ~1-10 ops | 100-1000× faster |
380
-
381
- ### Benchmark Code Template
382
-
383
- ```typescript
384
- import { performance } from 'perf_hooks';
385
-
386
- function benchmark() {
387
- const tree = createLargeTree(1000); // 1000 nodes
388
- const debugger = new WorkflowTreeDebugger(tree);
389
-
390
- // Benchmark: Single node attachment
391
- const start = performance.now();
392
- for (let i = 0; i < 1000; i++) {
393
- const child = createNode();
394
- tree.attachChild(child);
395
- debugger.onEvent({ type: 'childAttached', child });
396
- }
397
- const end = performance.now();
398
-
399
- console.log(`1000 attachments: ${end - start}ms`);
400
- // Expected: <10ms with incremental vs >100ms with rebuild
401
- }
402
- ```
403
-
404
- ---
405
-
406
- ## Gotchas & Anti-Patterns
407
-
408
- ### ❌ Anti-Patterns
409
-
410
- 1. **Rebuilding on Every Change**
411
- ```typescript
412
- onEvent(event: WorkflowEvent): void {
413
- this.nodeMap.clear(); // ❌ Unnecessary
414
- this.buildNodeMap(this.root); // ❌ Expensive
415
- }
416
- ```
417
-
418
- 2. **Ignoring Detached Subtrees**
419
- ```typescript
420
- onEvent(event: WorkflowEvent): void {
421
- if (event.type === 'childDetached') {
422
- this.nodeMap.delete(event.childId); // ❌ Leaves orphaned descendants
423
- }
424
- }
425
- ```
426
-
427
- 3. **Premature Optimization**
428
- ```typescript
429
- // ❌ Don't optimize unless you've measured
430
- // Trees with <100 nodes rarely benefit from complex incremental logic
431
- ```
432
-
433
- ### ✅ Best Practices
434
-
435
- 1. **Always clean up detached subtrees recursively**
436
- 2. **Prefer O(1) Map operations over O(n) iterations**
437
- 3. **Use performance.now() to measure before optimizing**
438
- 4. **Consider tree size before implementing complex logic**
439
- 5. **Document time complexity in comments**
440
-
441
- ---
442
-
443
- ## Additional Resources
444
-
445
- ### Documentation & References
446
-
447
- 1. **MDN Web Docs - Map**
448
- - URL: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
449
- - Section: Performance considerations
450
- - Key insight: Map has O(1) average case for set/get/delete operations
451
-
452
- 2. **React Reconciliation Algorithm**
453
- - URL: https://react.dev/learn/understanding-reacts-render-phase
454
- - Section: Tree diffing strategies
455
- - Key insight: Only process changed subtrees
456
-
457
- 3. **V8 Performance Optimization**
458
- - URL: https://v8.dev/blog/elements-kinds
459
- - Section: Hidden classes and Map performance
460
- - Key insight: Map operations are highly optimized in modern engines
461
-
462
- 4. **TypeScript Performance Patterns**
463
- - URL: https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html
464
- - Section: Performance best practices
465
-
466
- 5. **GitHub - Immutable.js**
467
- - URL: https://github.com/immutable-js/immutable-js
468
- - Section: Map update patterns
469
- - Key insight: Persistent data structures for efficient updates
470
-
471
- ### Code Examples
472
-
473
- - **Monaco Editor**: LineHeightMap implementation
474
- - **React**: ReactFiber Reconciler
475
- - **Redux Toolkit**: Immer integration for incremental updates
476
-
477
- ---
478
-
479
- ## Conclusion
480
-
481
- The recommended approach is **Pattern A: Event-Driven Incremental Updates**. This provides:
482
-
483
- - **O(1)** for single node operations
484
- - **O(k)** for subtree operations (where k = affected nodes)
485
- - **Zero GC pressure** from Map reconstruction
486
- - **Clear, maintainable code** with explicit handling for each event type
487
-
488
- For the WorkflowTreeDebugger specifically:
489
- 1. Keep the existing `childAttached` logic (already optimal)
490
- 2. Add recursive cleanup for `childDetached`
491
- 3. Remove the full rebuild in `onTreeChanged`
492
- 4. Update only root reference for `treeUpdated`
493
-
494
- This optimization is most valuable for:
495
- - Trees with >100 nodes
496
- - Frequent structural changes
497
- - Performance-sensitive applications
498
-
499
- For smaller trees or infrequent changes, the current implementation is acceptable.
@@ -1,163 +0,0 @@
1
- # Research Summary: Incremental Tree Map Updates
2
-
3
- **Date**: 2026-01-12
4
- **Task**: P1.M3.T2 - Optimize WorkflowTreeDebugger Node Map Updates
5
- **Status**: Research Complete
6
-
7
- ## Quick Takeaway
8
-
9
- Replace O(n) full Map rebuilds with O(1)-O(k) incremental updates by handling `childAttached`, `childDetached`, and `treeUpdated` events separately. Expected performance improvement: **100-1000× faster** for large trees.
10
-
11
- ## Problem
12
-
13
- Current implementation in `/home/dustin/projects/groundswell/src/debugger/tree-debugger.ts`:
14
-
15
- ```typescript
16
- onTreeChanged(root: WorkflowNode): void {
17
- this.root = root;
18
- this.nodeMap.clear(); // ❌ Clears entire map
19
- this.buildNodeMap(root); // ❌ O(n) rebuild - expensive!
20
- }
21
- ```
22
-
23
- **Impact**:
24
- - Every tree change triggers full rebuild
25
- - With 1000+ node trees, each change takes ~10-100ms
26
- - Unnecessary work - most changes affect small subtrees
27
-
28
- ## Solution
29
-
30
- Incremental updates based on event type:
31
-
32
- ```typescript
33
- onEvent(event: WorkflowEvent): void {
34
- switch (event.type) {
35
- case 'childAttached':
36
- this.addSubtree(event.child); // ✅ O(k) where k = new nodes
37
- break;
38
- case 'childDetached':
39
- this.removeSubtree(event.childId); // ✅ O(k) where k = removed nodes
40
- break;
41
- case 'treeUpdated':
42
- this.root = event.root; // ✅ O(1) - just update reference
43
- break;
44
- }
45
- }
46
- ```
47
-
48
- ## Performance Comparison
49
-
50
- | Operation | Current (Full Rebuild) | Proposed (Incremental) | Speedup |
51
- |-----------|----------------------|------------------------|---------|
52
- | Add 1 node to 1000-tree | O(1000) | O(1) | 1000× |
53
- | Remove 1 node from 1000-tree | O(1000) | O(1-10) | 100× |
54
- | Add 10 nodes to 1000-tree | O(1000) | O(10) | 100× |
55
- | Update root reference | O(1000) | O(1) | 1000× |
56
-
57
- ## Key Resources
58
-
59
- ### Must-Read Documentation (with anchors)
60
-
61
- 1. **[MDN - Map Instance Methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#instance-methods)**
62
- - Confirms O(1) complexity for Map.set(), Map.get(), Map.delete()
63
-
64
- 2. **[React Reconciliation](https://react.dev/learn/understanding-reacts-render-phase#rendering-and-committing)**
65
- - Tree diffing strategy: only update changed subtrees
66
-
67
- 3. **[Stack Overflow - Map Complexity](https://stackoverflow.com/questions/38476433/what-is-the-time-complexity-of-map-set-in-javascript#answer-38476768)**
68
- - Detailed analysis of Map time complexity
69
-
70
- ## Implementation Checklist
71
-
72
- ### Code Changes
73
- - [ ] Add `addSubtree(node: WorkflowNode)` helper method
74
- - [ ] Add `removeSubtree(nodeId: string)` helper method
75
- - [ ] Update `onEvent()` to handle `childAttached` incrementally
76
- - [ ] Update `onEvent()` to handle `childDetached` incrementally
77
- - [ ] Update `onEvent()` to handle `treeUpdated` (O(1) reference update)
78
- - [ ] Simplify `onTreeChanged()` to only update root reference
79
- - [ ] Add JSDoc comments with time complexity
80
-
81
- ### Testing
82
- - [ ] Unit tests for `addSubtree()`
83
- - [ ] Unit tests for `removeSubtree()`
84
- - [ ] Integration tests for event handling
85
- - [ ] Correctness tests for map integrity
86
- - [ ] Performance benchmarks (before/after)
87
- - [ ] Test with trees of varying sizes
88
-
89
- ### Documentation
90
- - [ ] Update code comments
91
- - [ ] Document performance improvements
92
- - [ ] Add examples to test suite
93
-
94
- ## Gotchas to Avoid
95
-
96
- ### ❌ Common Mistakes
97
-
98
- 1. **Forgetting descendant cleanup**
99
- ```typescript
100
- // ❌ WRONG - Leaves orphans in map
101
- onDetach(childId: string): void {
102
- this.map.delete(childId);
103
- }
104
- ```
105
-
106
- 2. **Unnecessary rebuilds**
107
- ```typescript
108
- // ❌ WRONG - No need to rebuild when only reference changes
109
- onTreeUpdated(root: WorkflowNode): void {
110
- this.map.clear();
111
- this.buildMap(root);
112
- }
113
- ```
114
-
115
- 3. **Premature optimization**
116
- ```typescript
117
- // ❌ Don't optimize small trees (<50 nodes)
118
- // Full rebuild is fine for small datasets
119
- ```
120
-
121
- ### ✅ Best Practices
122
-
123
- 1. **Always clean up entire subtrees recursively**
124
- 2. **Use BFS/DFS for subtree operations**
125
- 3. **Document time complexity in comments**
126
- 4. **Benchmark before and after optimization**
127
- 5. **Test with various tree sizes**
128
-
129
- ## Research Files
130
-
131
- | File | Purpose |
132
- |------|---------|
133
- | `RESEARCH_REPORT.md` | Comprehensive analysis (20+ pages) |
134
- | `QUICK_REFERENCE.md` | Quick reference with URLs and code examples |
135
- | `README.md` | Navigation and overview |
136
- | `PRP_TEMPLATE.md` | Implementation PRP template |
137
- | `SUMMARY.md` | This file - executive summary |
138
-
139
- ## Next Steps
140
-
141
- 1. **Review** the research report for detailed analysis
142
- 2. **Use** the PRP template for implementation planning
143
- 3. **Reference** the quick guide during implementation
144
- 4. **Benchmark** to verify performance improvements
145
-
146
- ## Citation
147
-
148
- When implementing, reference this research:
149
-
150
- ```markdown
151
- Based on research in:
152
- plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/
153
-
154
- Key findings:
155
- - Map operations are O(1): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#instance-methods
156
- - React reconciliation pattern: https://react.dev/learn/understanding-reacts-render-phase
157
- - Expected improvement: 100-1000× for large trees
158
- ```
159
-
160
- ---
161
-
162
- **Research Complete**: Ready for implementation (P1.M3.T2.S2)
163
- **Story Points**: 4 total (1 research + 2 implementation + 1 benchmarking)