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,230 +0,0 @@
1
- # Bug Fix Requirements
2
-
3
- ## Overview
4
-
5
- This document reports findings from comprehensive end-to-end testing of the hierarchical workflow engine implementation against the PRD specifications. The testing methodology included:
6
-
7
- - **240 existing unit tests** - All passing
8
- - **Creative end-to-end testing** - PRD example workflows and edge cases
9
- - **Adversarial testing** - Unexpected inputs, boundary conditions, and stress scenarios
10
- - **PRD compliance verification** - Validation against all PRD requirements
11
-
12
- **Overall Assessment**: The implementation is robust and well-tested. One critical bug was discovered that could lead to inconsistent tree state under certain conditions.
13
-
14
- ---
15
-
16
- ## Critical Issues (Must Fix)
17
-
18
- ### Issue 1: `attachChild()` Allows Creating Inconsistent Tree State
19
-
20
- **Severity**: Critical
21
- **PRD Reference**: Section 12.2 - Workflow Base Class, `attachChild` method
22
- **Location**: `src/core/workflow.ts:187-201`
23
-
24
- #### Expected Behavior
25
-
26
- The workflow tree should maintain consistency:
27
- - A child workflow should have exactly one parent
28
- - The `child.parent` property should always match the parent that contains it
29
- - A child should only appear in one parent's `children` array
30
-
31
- #### Actual Behavior
32
-
33
- The `attachChild()` method does not validate if the child workflow already has a parent. This allows:
34
-
35
- 1. A child to be added to multiple parents' `children` arrays
36
- 2. The `child.parent` property to point to only the original parent
37
- 3. Inconsistent tree state that breaks observer propagation and tree debugging
38
-
39
- #### Steps to Reproduce
40
-
41
- ```typescript
42
- import { Workflow } from './src/index.js';
43
-
44
- const parent1 = new Workflow('Parent1');
45
- const parent2 = new Workflow('Parent2');
46
-
47
- // Create child with parent1 - child is automatically attached
48
- const child = new Workflow('Child', parent1);
49
-
50
- // BUG: attachChild doesn't check if child already has a parent
51
- parent2.attachChild(child);
52
-
53
- // Result: INCONSISTENT STATE
54
- // - child.parent === parent1 (original parent)
55
- // - parent1.children.includes(child) === true
56
- // - parent2.children.includes(child) === true
57
- // - Child appears in TWO trees but only links to one
58
- ```
59
-
60
- #### Impact
61
-
62
- 1. **Observer Event Propagation**: Events from the shared child only propagate to the original parent's observers, not all parents that contain the child.
63
-
64
- 2. **Tree Debugger Output**: The tree debugger shows the child in both trees, but navigation via parent/child links is inconsistent.
65
-
66
- 3. **getRoot() Behavior**: The `getRoot()` method only follows the `child.parent` chain, so it will always return the original parent even though the child is in multiple trees.
67
-
68
- 4. **Data Integrity**: The "1:1 tree mirror" requirement from the PRD is violated - the in-memory tree structure becomes inconsistent.
69
-
70
- #### Suggested Fix
71
-
72
- Update the `attachChild()` method in `src/core/workflow.ts` to validate the child's parent state:
73
-
74
- ```typescript
75
- public attachChild(child: Workflow): void {
76
- // Check if already attached to THIS workflow
77
- if (this.children.includes(child)) {
78
- throw new Error('Child already attached to this workflow');
79
- }
80
-
81
- // NEW: Check if child already has a different parent
82
- if (child.parent && child.parent !== this) {
83
- throw new Error(
84
- `Child '${child.node.name}' already has a parent '${child.parent.node.name}'. ` +
85
- `A workflow can only have one parent.`
86
- );
87
- }
88
-
89
- // NEW: Update child's parent if it's currently null
90
- if (!child.parent) {
91
- child.parent = this;
92
- }
93
-
94
- this.children.push(child);
95
- this.node.children.push(child.node);
96
-
97
- this.emitEvent({
98
- type: 'childAttached',
99
- parentId: this.id,
100
- child: child.node,
101
- });
102
- }
103
- ```
104
-
105
- **Note**: The fix should also consider whether to update `child.node.parent` similarly for consistency with the node tree structure.
106
-
107
- #### Test Coverage
108
-
109
- Add the following test to `src/__tests__/adversarial/edge-case.test.ts`:
110
-
111
- ```typescript
112
- it('should prevent attaching a child that already has a different parent', async () => {
113
- class ChildWorkflow extends Workflow {
114
- async run() {
115
- return 'child';
116
- }
117
- }
118
-
119
- class ParentWorkflow extends Workflow {
120
- async run() {
121
- return 'parent';
122
- }
123
- }
124
-
125
- const parent1 = new ParentWorkflow('Parent1');
126
- const parent2 = new ParentWorkflow('Parent2');
127
-
128
- // Create child with parent1
129
- const child = new ChildWorkflow('Child', parent1);
130
-
131
- // Should throw because child already has parent1 as parent
132
- expect(() => {
133
- parent2.attachChild(child);
134
- }).toThrow(/already has a parent/);
135
- });
136
- ```
137
-
138
- ---
139
-
140
- ## Major Issues (Should Fix)
141
-
142
- *None discovered*
143
-
144
- ---
145
-
146
- ## Minor Issues (Nice to Fix)
147
-
148
- ### Issue 1: Manual Parent Property Mutation Not Validated
149
-
150
- **Severity**: Minor
151
- **PRD Reference**: Implicit - data integrity expectation
152
-
153
- #### Description
154
-
155
- The `parent` property on `Workflow` is public and can be manually mutated to create inconsistent tree state. While this requires intentional misuse (not normal API usage), making it private or adding validation could improve robustness.
156
-
157
- #### Suggested Fix
158
-
159
- Consider making `parent` private with a getter, or add validation in setter to ensure consistency with `children` arrays.
160
-
161
- ---
162
-
163
- ## Testing Summary
164
-
165
- ### Total Tests Performed
166
- - **Existing test suite**: 240 tests (all passing)
167
- - **Custom e2e tests**: 20+ additional scenarios
168
- - **Adversarial scenarios**: 15+ edge cases
169
- - **PRD compliance checks**: 7+ verification tests
170
-
171
- ### Passing
172
- - All 240 existing tests pass
173
- - All custom end-to-end tests pass
174
- - All PRD compliance checks pass
175
-
176
- ### Failing
177
- - **1 critical bug**: `attachChild()` allows inconsistent tree state
178
-
179
- ### Areas with Good Coverage
180
- - ✅ PRD Section 3: Core data model (WorkflowNode, WorkflowStatus)
181
- - ✅ PRD Section 4: Logging and events model
182
- - ✅ PRD Section 5: Error model with state snapshots
183
- - ✅ PRD Section 6: Snapshot system with @ObservedState
184
- - ✅ PRD Section 7: Observer pattern and event propagation
185
- - ✅ PRD Section 8: Decorators (@Step, @Task, @ObservedState)
186
- - ✅ PRD Section 11: Tree debugger API
187
- - ✅ PRD Section 12: Base class implementation
188
- - ✅ Edge cases: Unicode, empty values, deep hierarchies, concurrent execution
189
- - ✅ Adversarial scenarios: Circular references, observer errors, state transitions
190
-
191
- ### Areas Needing More Attention
192
- - ⚠️ **Tree integrity validation**: The `attachChild()` method needs parent validation (see Critical Issue 1)
193
- - ℹ️ **Functional workflows**: Good coverage but could test more complex functional workflow scenarios
194
- - ℹ️ **Concurrent task error handling**: Current implementation throws on first error; could document this behavior more clearly
195
-
196
- ---
197
-
198
- ## Additional Notes
199
-
200
- ### Positive Findings
201
-
202
- 1. **Strong Type Safety**: TypeScript types are comprehensive and align well with the PRD
203
- 2. **Robust Error Handling**: @Step decorator properly wraps errors with full context
204
- 3. **Good Observer Pattern**: Observers receive events correctly and errors in observers don't crash the system
205
- 4. **Complete PRD Compliance**: Aside from the identified bug, all PRD requirements are met
206
- 5. **Excellent Test Coverage**: 240 tests covering unit, integration, and adversarial scenarios
207
-
208
- ### PRD Requirements Fully Satisfied
209
-
210
- - ✅ Hierarchical workflows with parent/child relationships
211
- - ✅ All 5 workflow status values supported
212
- - ✅ Complete Logging with 4 log levels
213
- - ✅ All 7 WorkflowEvent types properly emitted
214
- - ✅ WorkflowError includes all required fields (message, original, workflowId, stack, state, logs)
215
- - ✅ @Step decorator with all options (name, snapshotState, trackTiming, logStart, logFinish)
216
- - ✅ @Task decorator with concurrent execution support
217
- - ✅ @ObservedState with redact and hidden options
218
- - ✅ WorkflowTreeDebugger implements all required methods (getTree, getNode, events, toTreeString, toLogString)
219
- - ✅ Perfect 1:1 tree mirror in logs and events
220
- - ✅ Root-only observer restriction enforced
221
- - ✅ State snapshot captured AFTER step completion
222
- - ✅ Circular reference detection in getRoot() (works for direct cycles)
223
-
224
- ---
225
-
226
- ## Conclusion
227
-
228
- The hierarchical workflow engine implementation is of high quality and nearly fully compliant with the PRD. The critical bug in `attachChild()` should be fixed before production use, as it can lead to subtle data integrity issues that are difficult to debug.
229
-
230
- Once the `attachChild()` validation is added, the implementation will be production-ready for the use cases described in the PRD.
@@ -1,358 +0,0 @@
1
- # External Dependencies - Research Findings
2
-
3
- ## Document Purpose
4
- This document records verified external dependencies, SDK patterns, and integration requirements for the Agent/Prompt layer implementation.
5
-
6
- ---
7
-
8
- ## 1. Anthropic SDK (@anthropic-ai/sdk)
9
-
10
- ### Package Information
11
- - **NPM Package**: `@anthropic-ai/sdk`
12
- - **Verified Version**: `0.71.1` (already in node_modules)
13
- - **Node.js Requirement**: 18+
14
- - **Module Type**: ESM compatible
15
-
16
- ### Key Interfaces for Integration
17
-
18
- ```typescript
19
- // Core types to import from SDK
20
- import Anthropic from '@anthropic-ai/sdk';
21
-
22
- // Message types
23
- interface MessageCreateParams {
24
- model: string;
25
- max_tokens: number;
26
- messages: MessageParam[];
27
- system?: string;
28
- tools?: Tool[];
29
- temperature?: number;
30
- stop_sequences?: string[];
31
- }
32
-
33
- interface MessageParam {
34
- role: 'user' | 'assistant';
35
- content: ContentBlock[] | string;
36
- }
37
-
38
- // Tool definition
39
- interface Tool {
40
- name: string;
41
- description: string;
42
- input_schema: {
43
- type: 'object';
44
- properties: Record<string, unknown>;
45
- required?: string[];
46
- };
47
- }
48
-
49
- // Response types
50
- interface Message {
51
- id: string;
52
- type: 'message';
53
- role: 'assistant';
54
- content: ContentBlock[];
55
- model: string;
56
- stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use';
57
- stop_sequence: string | null;
58
- usage: Usage;
59
- }
60
-
61
- interface Usage {
62
- input_tokens: number;
63
- output_tokens: number;
64
- }
65
-
66
- // Content blocks
67
- type ContentBlock = TextBlock | ToolUseBlock;
68
-
69
- interface TextBlock {
70
- type: 'text';
71
- text: string;
72
- }
73
-
74
- interface ToolUseBlock {
75
- type: 'tool_use';
76
- id: string;
77
- name: string;
78
- input: Record<string, unknown>;
79
- }
80
- ```
81
-
82
- ### Streaming Support
83
- ```typescript
84
- // Streaming iteration
85
- const stream = await anthropic.messages.stream({
86
- model: 'claude-sonnet-4-20250514',
87
- max_tokens: 1024,
88
- messages: [{ role: 'user', content: 'Hello' }],
89
- });
90
-
91
- for await (const event of stream) {
92
- // event types: message_start, content_block_start, content_block_delta,
93
- // content_block_stop, message_delta, message_stop
94
- }
95
- ```
96
-
97
- ### Tool Use Pattern
98
- ```typescript
99
- // Define tools
100
- const tools: Tool[] = [{
101
- name: 'get_weather',
102
- description: 'Get the weather for a location',
103
- input_schema: {
104
- type: 'object',
105
- properties: {
106
- location: { type: 'string', description: 'City name' }
107
- },
108
- required: ['location']
109
- }
110
- }];
111
-
112
- // Send message with tools
113
- const response = await anthropic.messages.create({
114
- model: 'claude-sonnet-4-20250514',
115
- max_tokens: 1024,
116
- tools,
117
- messages: [{ role: 'user', content: 'What is the weather in SF?' }]
118
- });
119
-
120
- // Handle tool_use response
121
- if (response.stop_reason === 'tool_use') {
122
- const toolUse = response.content.find(b => b.type === 'tool_use');
123
- // Execute tool, send result back
124
- }
125
- ```
126
-
127
- ### Environment Variables
128
- ```bash
129
- ANTHROPIC_API_KEY=sk-ant-... # Required
130
- ANTHROPIC_BASE_URL=... # Optional, for proxies
131
- ```
132
-
133
- ---
134
-
135
- ## 2. Zod Schema Validation
136
-
137
- ### Package Information
138
- - **NPM Package**: `zod`
139
- - **Recommended Version**: `^3.23.0` (v3 stable)
140
- - **In node_modules**: `4.1.13` (v4 beta - consider downgrade for stability)
141
-
142
- ### Key Patterns for Prompt Response Validation
143
-
144
- ```typescript
145
- import { z } from 'zod';
146
-
147
- // Define response schema
148
- const ReviewResponseSchema = z.object({
149
- approved: z.boolean(),
150
- comments: z.array(z.object({
151
- file: z.string(),
152
- line: z.number(),
153
- message: z.string(),
154
- severity: z.enum(['error', 'warning', 'info']),
155
- })),
156
- summary: z.string(),
157
- });
158
-
159
- type ReviewResponse = z.infer<typeof ReviewResponseSchema>;
160
-
161
- // In Prompt class
162
- class Prompt<T> {
163
- constructor(config: PromptConfig<T>) {
164
- this.responseFormat = config.responseFormat; // ZodSchema<T>
165
- }
166
-
167
- // Validation method
168
- validateResponse(data: unknown): T {
169
- return this.responseFormat.parse(data);
170
- }
171
- }
172
- ```
173
-
174
- ### Schema to JSON Schema (for cache key hashing)
175
- ```typescript
176
- import { z } from 'zod';
177
-
178
- // Get deterministic representation for hashing
179
- function schemaToHashable(schema: z.ZodType): string {
180
- // Zod doesn't have built-in JSON schema export
181
- // Use schema._def for internal representation
182
- return JSON.stringify(schema._def);
183
- }
184
- ```
185
-
186
- ---
187
-
188
- ## 3. Node.js Crypto API (SHA-256 Cache Keys)
189
-
190
- ### Available in Node 18+
191
- ```typescript
192
- import { createHash } from 'crypto';
193
-
194
- function generateCacheKey(inputs: CacheKeyInputs): string {
195
- const hash = createHash('sha256');
196
-
197
- // Deterministic JSON encoding
198
- const canonical = JSON.stringify({
199
- user: inputs.user,
200
- data: inputs.data,
201
- system: inputs.system,
202
- model: inputs.model,
203
- temperature: inputs.temperature,
204
- tools: inputs.tools?.map(t => t.name).sort(),
205
- mcps: inputs.mcps?.map(m => m.name).sort(),
206
- skills: inputs.skills?.map(s => s.name).sort(),
207
- schemaHash: inputs.schemaHash,
208
- }, Object.keys(inputs).sort());
209
-
210
- hash.update(canonical);
211
- return hash.digest('hex');
212
- }
213
- ```
214
-
215
- ---
216
-
217
- ## 4. MCP (Model Context Protocol) Integration
218
-
219
- ### SDK MCP Server Pattern
220
- From research, MCP servers can be:
221
- 1. **In-process**: Faster, no subprocess overhead
222
- 2. **External (stdio)**: Separate process
223
-
224
- ### In-Process MCP Server (Recommended)
225
- ```typescript
226
- // Pattern from Anthropic docs
227
- import { createSdkMcpServer, tool } from '@anthropic-ai/claude-agent-sdk';
228
-
229
- const server = createSdkMcpServer({
230
- name: 'my-tools',
231
- version: '1.0.0',
232
- tools: [
233
- tool('get_data', 'Fetch data', { id: z.string() }, async (args) => {
234
- return { content: [{ type: 'text', text: '...' }] };
235
- })
236
- ]
237
- });
238
- ```
239
-
240
- ### MCPServer Interface for Groundswell
241
- ```typescript
242
- interface MCPServer {
243
- name: string;
244
- version?: string;
245
- transport: 'stdio' | 'inprocess';
246
- command?: string; // For stdio
247
- args?: string[]; // For stdio
248
- tools?: Tool[]; // For inprocess
249
- }
250
- ```
251
-
252
- ---
253
-
254
- ## 5. Hooks (Anthropic SDK)
255
-
256
- ### Hook Types Available
257
- ```typescript
258
- // From SDK
259
- type HookType = 'PreToolUse' | 'PostToolUse' | 'SessionStart' | 'SessionEnd';
260
-
261
- interface AgentHooks {
262
- PreToolUse?: HookHandler[];
263
- PostToolUse?: HookHandler[];
264
- SessionStart?: HookHandler[];
265
- SessionEnd?: HookHandler[];
266
- }
267
-
268
- type HookHandler = (
269
- input: HookInput,
270
- toolUseId: string,
271
- context: HookContext
272
- ) => Promise<HookOutput>;
273
- ```
274
-
275
- ### Pass-Through Strategy
276
- Hooks MUST be passed through unchanged to Anthropic SDK. Groundswell does NOT add custom hook types.
277
-
278
- ---
279
-
280
- ## 6. Skills Integration
281
-
282
- ### Skill Structure
283
- ```
284
- .claude/skills/
285
- └── my-skill/
286
- ├── SKILL.md (required)
287
- ├── /scripts (optional)
288
- └── /references (optional)
289
- ```
290
-
291
- ### Skills in AgentConfig
292
- ```typescript
293
- interface Skill {
294
- name: string;
295
- path: string; // Path to skill directory
296
- }
297
-
298
- interface AgentConfig {
299
- skills?: Skill[];
300
- }
301
- ```
302
-
303
- ---
304
-
305
- ## 7. Verified Compatibility Matrix
306
-
307
- | Dependency | Version | Node.js | ESM | Status |
308
- |------------|---------|---------|-----|--------|
309
- | @anthropic-ai/sdk | 0.71.1 | 18+ | Yes | In node_modules |
310
- | zod | 3.23.x | 16+ | Yes | Install needed |
311
- | typescript | 5.2+ | 18+ | Yes | In devDependencies |
312
- | vitest | 1.0+ | 18+ | Yes | In devDependencies |
313
-
314
- ---
315
-
316
- ## 8. API Endpoint Reference
317
-
318
- ### Anthropic Messages API
319
- ```
320
- POST https://api.anthropic.com/v1/messages
321
- Headers:
322
- x-api-key: $ANTHROPIC_API_KEY
323
- anthropic-version: 2023-06-01
324
- content-type: application/json
325
- ```
326
-
327
- ### Models Available
328
- - `claude-sonnet-4-20250514` (recommended)
329
- - `claude-3-5-sonnet-20241022`
330
- - `claude-3-5-haiku-20241022`
331
- - `claude-3-opus-20240229`
332
-
333
- ---
334
-
335
- ## 9. Breaking Changes & Deprecations
336
-
337
- ### SDK Migration (v0.1.0)
338
- - Package renamed: `@anthropic-ai/claude-code` -> `@anthropic-ai/claude-agent-sdk`
339
- - Class renamed: `ClaudeCodeOptions` -> `ClaudeAgentOptions`
340
- - These changes apply to the AGENT SDK, not the base SDK we're using
341
-
342
- ### Zod v4 Breaking Changes
343
- - v4 is in beta; recommend using v3.x for production
344
- - Schema internals changed; cache key hashing needs testing
345
-
346
- ---
347
-
348
- ## 10. Integration Checklist
349
-
350
- - [ ] Add `@anthropic-ai/sdk` to package.json dependencies
351
- - [ ] Add `zod@^3.23.0` to package.json dependencies
352
- - [ ] Verify ANTHROPIC_API_KEY environment variable handling
353
- - [ ] Test streaming iteration pattern
354
- - [ ] Test tool use response handling
355
- - [ ] Implement cache key SHA-256 generation
356
- - [ ] Test Zod schema validation
357
- - [ ] Create MCP server wrapper (if needed)
358
- - [ ] Pass through hooks unchanged