groundswell 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (633) hide show
  1. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts +16 -0
  2. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts.map +1 -0
  3. package/dist/__tests__/adversarial/attachChild-performance.test.js +187 -0
  4. package/dist/__tests__/adversarial/attachChild-performance.test.js.map +1 -0
  5. package/dist/__tests__/adversarial/circular-reference.test.d.ts +13 -0
  6. package/dist/__tests__/adversarial/circular-reference.test.d.ts.map +1 -0
  7. package/dist/__tests__/adversarial/circular-reference.test.js +92 -0
  8. package/dist/__tests__/adversarial/circular-reference.test.js.map +1 -0
  9. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts +16 -0
  10. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts.map +1 -0
  11. package/dist/__tests__/adversarial/complex-circular-reference.test.js +127 -0
  12. package/dist/__tests__/adversarial/complex-circular-reference.test.js.map +1 -0
  13. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts +21 -0
  14. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts.map +1 -0
  15. package/dist/__tests__/adversarial/concurrent-task-failures.test.js +667 -0
  16. package/dist/__tests__/adversarial/concurrent-task-failures.test.js.map +1 -0
  17. package/dist/__tests__/adversarial/deep-analysis.test.d.ts +6 -0
  18. package/dist/__tests__/adversarial/deep-analysis.test.d.ts.map +1 -0
  19. package/dist/__tests__/adversarial/deep-analysis.test.js +877 -0
  20. package/dist/__tests__/adversarial/deep-analysis.test.js.map +1 -0
  21. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts +13 -0
  22. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts.map +1 -0
  23. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js +186 -0
  24. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js.map +1 -0
  25. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts +6 -0
  26. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts.map +1 -0
  27. package/dist/__tests__/adversarial/e2e-prd-validation.test.js +626 -0
  28. package/dist/__tests__/adversarial/e2e-prd-validation.test.js.map +1 -0
  29. package/dist/__tests__/adversarial/edge-case.test.d.ts +6 -0
  30. package/dist/__tests__/adversarial/edge-case.test.d.ts.map +1 -0
  31. package/dist/__tests__/adversarial/edge-case.test.js +857 -0
  32. package/dist/__tests__/adversarial/edge-case.test.js.map +1 -0
  33. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts +20 -0
  34. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts.map +1 -0
  35. package/dist/__tests__/adversarial/error-merge-strategy.test.js +907 -0
  36. package/dist/__tests__/adversarial/error-merge-strategy.test.js.map +1 -0
  37. package/dist/__tests__/adversarial/incremental-performance.test.d.ts +2 -0
  38. package/dist/__tests__/adversarial/incremental-performance.test.d.ts.map +1 -0
  39. package/dist/__tests__/adversarial/incremental-performance.test.js +113 -0
  40. package/dist/__tests__/adversarial/incremental-performance.test.js.map +1 -0
  41. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts +22 -0
  42. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts.map +1 -0
  43. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js +383 -0
  44. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js.map +1 -0
  45. package/dist/__tests__/adversarial/observer-propagation.test.d.ts +21 -0
  46. package/dist/__tests__/adversarial/observer-propagation.test.d.ts.map +1 -0
  47. package/dist/__tests__/adversarial/observer-propagation.test.js +404 -0
  48. package/dist/__tests__/adversarial/observer-propagation.test.js.map +1 -0
  49. package/dist/__tests__/adversarial/parent-validation.test.d.ts +13 -0
  50. package/dist/__tests__/adversarial/parent-validation.test.d.ts.map +1 -0
  51. package/dist/__tests__/adversarial/parent-validation.test.js +128 -0
  52. package/dist/__tests__/adversarial/parent-validation.test.js.map +1 -0
  53. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts +20 -0
  54. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts.map +1 -0
  55. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js +482 -0
  56. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js.map +1 -0
  57. package/dist/__tests__/adversarial/prd-compliance.test.d.ts +6 -0
  58. package/dist/__tests__/adversarial/prd-compliance.test.d.ts.map +1 -0
  59. package/dist/__tests__/adversarial/prd-compliance.test.js +886 -0
  60. package/dist/__tests__/adversarial/prd-compliance.test.js.map +1 -0
  61. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts +22 -0
  62. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts.map +1 -0
  63. package/dist/__tests__/compatibility/backward-compatibility.test.js +1843 -0
  64. package/dist/__tests__/compatibility/backward-compatibility.test.js.map +1 -0
  65. package/dist/__tests__/helpers/index.d.ts +10 -0
  66. package/dist/__tests__/helpers/index.d.ts.map +1 -0
  67. package/{src/__tests__/helpers/index.ts → dist/__tests__/helpers/index.js} +2 -10
  68. package/dist/__tests__/helpers/index.js.map +1 -0
  69. package/dist/__tests__/helpers/tree-verification.d.ts +90 -0
  70. package/dist/__tests__/helpers/tree-verification.d.ts.map +1 -0
  71. package/dist/__tests__/helpers/tree-verification.js +202 -0
  72. package/dist/__tests__/helpers/tree-verification.js.map +1 -0
  73. package/dist/__tests__/integration/agent-workflow.test.d.ts +2 -0
  74. package/dist/__tests__/integration/agent-workflow.test.d.ts.map +1 -0
  75. package/dist/__tests__/integration/agent-workflow.test.js +256 -0
  76. package/dist/__tests__/integration/agent-workflow.test.js.map +1 -0
  77. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts +14 -0
  78. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts.map +1 -0
  79. package/dist/__tests__/integration/bidirectional-consistency.test.js +668 -0
  80. package/dist/__tests__/integration/bidirectional-consistency.test.js.map +1 -0
  81. package/dist/__tests__/integration/observer-logging.test.d.ts +2 -0
  82. package/dist/__tests__/integration/observer-logging.test.d.ts.map +1 -0
  83. package/dist/__tests__/integration/observer-logging.test.js +517 -0
  84. package/dist/__tests__/integration/observer-logging.test.js.map +1 -0
  85. package/dist/__tests__/integration/tree-mirroring.test.d.ts +2 -0
  86. package/dist/__tests__/integration/tree-mirroring.test.d.ts.map +1 -0
  87. package/dist/__tests__/integration/tree-mirroring.test.js +117 -0
  88. package/dist/__tests__/integration/tree-mirroring.test.js.map +1 -0
  89. package/dist/__tests__/integration/workflow-reparenting.test.d.ts +12 -0
  90. package/dist/__tests__/integration/workflow-reparenting.test.d.ts.map +1 -0
  91. package/dist/__tests__/integration/workflow-reparenting.test.js +239 -0
  92. package/dist/__tests__/integration/workflow-reparenting.test.js.map +1 -0
  93. package/dist/__tests__/unit/agent.test.d.ts +2 -0
  94. package/dist/__tests__/unit/agent.test.d.ts.map +1 -0
  95. package/dist/__tests__/unit/agent.test.js +143 -0
  96. package/dist/__tests__/unit/agent.test.js.map +1 -0
  97. package/dist/__tests__/unit/cache-key.test.d.ts +5 -0
  98. package/dist/__tests__/unit/cache-key.test.d.ts.map +1 -0
  99. package/dist/__tests__/unit/cache-key.test.js +145 -0
  100. package/dist/__tests__/unit/cache-key.test.js.map +1 -0
  101. package/dist/__tests__/unit/cache.test.d.ts +5 -0
  102. package/dist/__tests__/unit/cache.test.d.ts.map +1 -0
  103. package/dist/__tests__/unit/cache.test.js +132 -0
  104. package/dist/__tests__/unit/cache.test.js.map +1 -0
  105. package/dist/__tests__/unit/context.test.d.ts +2 -0
  106. package/dist/__tests__/unit/context.test.d.ts.map +1 -0
  107. package/dist/__tests__/unit/context.test.js +220 -0
  108. package/dist/__tests__/unit/context.test.js.map +1 -0
  109. package/dist/__tests__/unit/decorators.test.d.ts +2 -0
  110. package/dist/__tests__/unit/decorators.test.d.ts.map +1 -0
  111. package/dist/__tests__/unit/decorators.test.js +162 -0
  112. package/dist/__tests__/unit/decorators.test.js.map +1 -0
  113. package/dist/__tests__/unit/introspection-tools.test.d.ts +5 -0
  114. package/dist/__tests__/unit/introspection-tools.test.d.ts.map +1 -0
  115. package/dist/__tests__/unit/introspection-tools.test.js +191 -0
  116. package/dist/__tests__/unit/introspection-tools.test.js.map +1 -0
  117. package/dist/__tests__/unit/logger.test.d.ts +2 -0
  118. package/dist/__tests__/unit/logger.test.d.ts.map +1 -0
  119. package/dist/__tests__/unit/logger.test.js +241 -0
  120. package/dist/__tests__/unit/logger.test.js.map +1 -0
  121. package/dist/__tests__/unit/observable.test.d.ts +2 -0
  122. package/dist/__tests__/unit/observable.test.d.ts.map +1 -0
  123. package/dist/__tests__/unit/observable.test.js +251 -0
  124. package/dist/__tests__/unit/observable.test.js.map +1 -0
  125. package/dist/__tests__/unit/prompt.test.d.ts +2 -0
  126. package/dist/__tests__/unit/prompt.test.d.ts.map +1 -0
  127. package/dist/__tests__/unit/prompt.test.js +113 -0
  128. package/dist/__tests__/unit/prompt.test.js.map +1 -0
  129. package/dist/__tests__/unit/reflection.test.d.ts +5 -0
  130. package/dist/__tests__/unit/reflection.test.d.ts.map +1 -0
  131. package/dist/__tests__/unit/reflection.test.js +160 -0
  132. package/dist/__tests__/unit/reflection.test.js.map +1 -0
  133. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts +2 -0
  134. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts.map +1 -0
  135. package/dist/__tests__/unit/tree-debugger-incremental.test.js +136 -0
  136. package/dist/__tests__/unit/tree-debugger-incremental.test.js.map +1 -0
  137. package/dist/__tests__/unit/tree-debugger.test.d.ts +2 -0
  138. package/dist/__tests__/unit/tree-debugger.test.d.ts.map +1 -0
  139. package/dist/__tests__/unit/tree-debugger.test.js +69 -0
  140. package/dist/__tests__/unit/tree-debugger.test.js.map +1 -0
  141. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts +2 -0
  142. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts.map +1 -0
  143. package/dist/__tests__/unit/utils/workflow-error-utils.test.js +154 -0
  144. package/dist/__tests__/unit/utils/workflow-error-utils.test.js.map +1 -0
  145. package/dist/__tests__/unit/workflow-detachChild.test.d.ts +2 -0
  146. package/dist/__tests__/unit/workflow-detachChild.test.d.ts.map +1 -0
  147. package/dist/__tests__/unit/workflow-detachChild.test.js +76 -0
  148. package/dist/__tests__/unit/workflow-detachChild.test.js.map +1 -0
  149. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts +2 -0
  150. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts.map +1 -0
  151. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js +122 -0
  152. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js.map +1 -0
  153. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts +2 -0
  154. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts.map +1 -0
  155. package/dist/__tests__/unit/workflow-isDescendantOf.test.js +140 -0
  156. package/dist/__tests__/unit/workflow-isDescendantOf.test.js.map +1 -0
  157. package/dist/__tests__/unit/workflow.test.d.ts +2 -0
  158. package/dist/__tests__/unit/workflow.test.d.ts.map +1 -0
  159. package/dist/__tests__/unit/workflow.test.js +330 -0
  160. package/dist/__tests__/unit/workflow.test.js.map +1 -0
  161. package/dist/cache/cache-key.d.ts +66 -0
  162. package/dist/cache/cache-key.d.ts.map +1 -0
  163. package/dist/cache/cache-key.js +195 -0
  164. package/dist/cache/cache-key.js.map +1 -0
  165. package/dist/cache/cache.d.ts +104 -0
  166. package/dist/cache/cache.d.ts.map +1 -0
  167. package/dist/cache/cache.js +179 -0
  168. package/dist/cache/cache.js.map +1 -0
  169. package/{src/cache/index.ts → dist/cache/index.d.ts} +1 -1
  170. package/dist/cache/index.d.ts.map +1 -0
  171. package/dist/cache/index.js +6 -0
  172. package/dist/cache/index.js.map +1 -0
  173. package/dist/core/agent.d.ts +112 -0
  174. package/dist/core/agent.d.ts.map +1 -0
  175. package/dist/core/agent.js +426 -0
  176. package/dist/core/agent.js.map +1 -0
  177. package/{src/core/context.ts → dist/core/context.d.ts} +16 -67
  178. package/dist/core/context.d.ts.map +1 -0
  179. package/dist/core/context.js +80 -0
  180. package/dist/core/context.js.map +1 -0
  181. package/dist/core/event-tree.d.ts +72 -0
  182. package/dist/core/event-tree.d.ts.map +1 -0
  183. package/dist/core/event-tree.js +211 -0
  184. package/dist/core/event-tree.js.map +1 -0
  185. package/{src/core/factory.ts → dist/core/factory.d.ts} +6 -27
  186. package/dist/core/factory.d.ts.map +1 -0
  187. package/dist/core/factory.js +110 -0
  188. package/dist/core/factory.js.map +1 -0
  189. package/{src/core/index.ts → dist/core/index.d.ts} +2 -10
  190. package/dist/core/index.d.ts.map +1 -0
  191. package/dist/core/index.js +9 -0
  192. package/dist/core/index.js.map +1 -0
  193. package/dist/core/logger.d.ts +50 -0
  194. package/dist/core/logger.d.ts.map +1 -0
  195. package/dist/core/logger.js +91 -0
  196. package/dist/core/logger.js.map +1 -0
  197. package/dist/core/mcp-handler.d.ts +69 -0
  198. package/dist/core/mcp-handler.d.ts.map +1 -0
  199. package/dist/core/mcp-handler.js +143 -0
  200. package/dist/core/mcp-handler.js.map +1 -0
  201. package/dist/core/prompt.d.ts +80 -0
  202. package/dist/core/prompt.d.ts.map +1 -0
  203. package/dist/core/prompt.js +120 -0
  204. package/dist/core/prompt.js.map +1 -0
  205. package/dist/core/workflow-context.d.ts +57 -0
  206. package/dist/core/workflow-context.d.ts.map +1 -0
  207. package/dist/core/workflow-context.js +263 -0
  208. package/dist/core/workflow-context.js.map +1 -0
  209. package/dist/core/workflow.d.ts +241 -0
  210. package/dist/core/workflow.d.ts.map +1 -0
  211. package/dist/core/workflow.js +464 -0
  212. package/dist/core/workflow.js.map +1 -0
  213. package/dist/debugger/index.d.ts +2 -0
  214. package/dist/debugger/index.d.ts.map +1 -0
  215. package/{src/debugger/index.ts → dist/debugger/index.js} +1 -0
  216. package/dist/debugger/index.js.map +1 -0
  217. package/dist/debugger/tree-debugger.d.ts +71 -0
  218. package/dist/debugger/tree-debugger.d.ts.map +1 -0
  219. package/dist/debugger/tree-debugger.js +198 -0
  220. package/dist/debugger/tree-debugger.js.map +1 -0
  221. package/dist/decorators/index.d.ts +4 -0
  222. package/dist/decorators/index.d.ts.map +1 -0
  223. package/{src/decorators/index.ts → dist/decorators/index.js} +1 -0
  224. package/dist/decorators/index.js.map +1 -0
  225. package/dist/decorators/observed-state.d.ts +32 -0
  226. package/dist/decorators/observed-state.d.ts.map +1 -0
  227. package/dist/decorators/observed-state.js +79 -0
  228. package/dist/decorators/observed-state.js.map +1 -0
  229. package/dist/decorators/step.d.ts +15 -0
  230. package/dist/decorators/step.d.ts.map +1 -0
  231. package/dist/decorators/step.js +110 -0
  232. package/dist/decorators/step.js.map +1 -0
  233. package/dist/decorators/task.d.ts +50 -0
  234. package/dist/decorators/task.d.ts.map +1 -0
  235. package/dist/decorators/task.js +118 -0
  236. package/dist/decorators/task.js.map +1 -0
  237. package/dist/examples/index.d.ts +3 -0
  238. package/dist/examples/index.d.ts.map +1 -0
  239. package/{src/examples/index.ts → dist/examples/index.js} +1 -0
  240. package/dist/examples/index.js.map +1 -0
  241. package/dist/examples/tdd-orchestrator.d.ts +15 -0
  242. package/dist/examples/tdd-orchestrator.d.ts.map +1 -0
  243. package/dist/examples/tdd-orchestrator.js +121 -0
  244. package/dist/examples/tdd-orchestrator.js.map +1 -0
  245. package/dist/examples/test-cycle-workflow.d.ts +14 -0
  246. package/dist/examples/test-cycle-workflow.d.ts.map +1 -0
  247. package/dist/examples/test-cycle-workflow.js +116 -0
  248. package/dist/examples/test-cycle-workflow.js.map +1 -0
  249. package/dist/index.d.ts +27 -0
  250. package/dist/index.d.ts.map +1 -0
  251. package/dist/index.js +40 -0
  252. package/dist/index.js.map +1 -0
  253. package/dist/reflection/index.d.ts +5 -0
  254. package/dist/reflection/index.d.ts.map +1 -0
  255. package/{src/reflection/index.ts → dist/reflection/index.js} +1 -1
  256. package/dist/reflection/index.js.map +1 -0
  257. package/dist/reflection/reflection.d.ts +84 -0
  258. package/dist/reflection/reflection.d.ts.map +1 -0
  259. package/dist/reflection/reflection.js +329 -0
  260. package/dist/reflection/reflection.js.map +1 -0
  261. package/dist/tools/index.d.ts +6 -0
  262. package/dist/tools/index.d.ts.map +1 -0
  263. package/dist/tools/index.js +11 -0
  264. package/dist/tools/index.js.map +1 -0
  265. package/dist/tools/introspection.d.ts +165 -0
  266. package/dist/tools/introspection.d.ts.map +1 -0
  267. package/dist/tools/introspection.js +324 -0
  268. package/dist/tools/introspection.js.map +1 -0
  269. package/dist/types/agent.d.ts +66 -0
  270. package/dist/types/agent.d.ts.map +1 -0
  271. package/dist/types/agent.js +6 -0
  272. package/dist/types/agent.js.map +1 -0
  273. package/dist/types/decorators.d.ts +31 -0
  274. package/dist/types/decorators.d.ts.map +1 -0
  275. package/dist/types/decorators.js +2 -0
  276. package/dist/types/decorators.js.map +1 -0
  277. package/dist/types/error-strategy.d.ts +13 -0
  278. package/dist/types/error-strategy.d.ts.map +1 -0
  279. package/dist/types/error-strategy.js +2 -0
  280. package/dist/types/error-strategy.js.map +1 -0
  281. package/dist/types/error.d.ts +20 -0
  282. package/dist/types/error.d.ts.map +1 -0
  283. package/dist/types/error.js +2 -0
  284. package/dist/types/error.js.map +1 -0
  285. package/dist/types/events.d.ts +87 -0
  286. package/dist/types/events.d.ts.map +1 -0
  287. package/dist/types/events.js +2 -0
  288. package/dist/types/events.js.map +1 -0
  289. package/dist/types/index.d.ts +15 -0
  290. package/dist/types/index.d.ts.map +1 -0
  291. package/dist/types/index.js +2 -0
  292. package/dist/types/index.js.map +1 -0
  293. package/dist/types/logging.d.ts +24 -0
  294. package/dist/types/logging.d.ts.map +1 -0
  295. package/dist/types/logging.js +2 -0
  296. package/dist/types/logging.js.map +1 -0
  297. package/dist/types/observer.d.ts +18 -0
  298. package/dist/types/observer.d.ts.map +1 -0
  299. package/dist/types/observer.js +2 -0
  300. package/dist/types/observer.js.map +1 -0
  301. package/dist/types/prompt.d.ts +31 -0
  302. package/dist/types/prompt.d.ts.map +1 -0
  303. package/dist/types/prompt.js +6 -0
  304. package/dist/types/prompt.js.map +1 -0
  305. package/dist/types/reflection.d.ts +96 -0
  306. package/dist/types/reflection.d.ts.map +1 -0
  307. package/dist/types/reflection.js +24 -0
  308. package/dist/types/reflection.js.map +1 -0
  309. package/dist/types/sdk-primitives.d.ts +118 -0
  310. package/dist/types/sdk-primitives.d.ts.map +1 -0
  311. package/dist/types/sdk-primitives.js +6 -0
  312. package/dist/types/sdk-primitives.js.map +1 -0
  313. package/{src/types/snapshot.ts → dist/types/snapshot.d.ts} +5 -5
  314. package/dist/types/snapshot.d.ts.map +1 -0
  315. package/dist/types/snapshot.js +2 -0
  316. package/dist/types/snapshot.js.map +1 -0
  317. package/dist/types/workflow-context.d.ts +139 -0
  318. package/dist/types/workflow-context.d.ts.map +1 -0
  319. package/dist/types/workflow-context.js +8 -0
  320. package/dist/types/workflow-context.js.map +1 -0
  321. package/dist/types/workflow.d.ts +30 -0
  322. package/dist/types/workflow.d.ts.map +1 -0
  323. package/dist/types/workflow.js +2 -0
  324. package/dist/types/workflow.js.map +1 -0
  325. package/dist/utils/id.d.ts +6 -0
  326. package/dist/utils/id.d.ts.map +1 -0
  327. package/dist/utils/id.js +12 -0
  328. package/dist/utils/id.js.map +1 -0
  329. package/{src/utils/index.ts → dist/utils/index.d.ts} +1 -0
  330. package/dist/utils/index.d.ts.map +1 -0
  331. package/dist/utils/index.js +4 -0
  332. package/dist/utils/index.js.map +1 -0
  333. package/dist/utils/observable.d.ts +54 -0
  334. package/dist/utils/observable.d.ts.map +1 -0
  335. package/dist/utils/observable.js +82 -0
  336. package/dist/utils/observable.js.map +1 -0
  337. package/dist/utils/workflow-error-utils.d.ts +22 -0
  338. package/dist/utils/workflow-error-utils.d.ts.map +1 -0
  339. package/dist/utils/workflow-error-utils.js +45 -0
  340. package/dist/utils/workflow-error-utils.js.map +1 -0
  341. package/package.json +5 -2
  342. package/.claude/commands/subtask-planning/prp-base-create.md +0 -120
  343. package/.claude/commands/subtask-planning/prp-base-execute.md +0 -65
  344. package/.claude/commands/task-breakdown.md +0 -94
  345. package/.claude/settings.local.json +0 -9
  346. package/.claude/system_prompts/task-breakdown.md +0 -101
  347. package/PRD.md +0 -543
  348. package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
  349. package/PRPs/PRDs/002-agent-prompt.md +0 -390
  350. package/PRPs/PRDs/003-agent-prompt.md +0 -943
  351. package/PRPs/PRDs/004-agent-prompt.md +0 -1136
  352. package/PRPs/PRDs/tasks-001.json +0 -492
  353. package/PRPs/README.md +0 -83
  354. package/PRPs/templates/prp_base.md +0 -222
  355. package/docs/agent.md +0 -422
  356. package/docs/prompt.md +0 -419
  357. package/docs/workflow.md +0 -600
  358. package/examples/README.md +0 -258
  359. package/examples/examples/01-basic-workflow.ts +0 -100
  360. package/examples/examples/02-decorator-options.ts +0 -217
  361. package/examples/examples/03-parent-child.ts +0 -241
  362. package/examples/examples/04-observers-debugger.ts +0 -340
  363. package/examples/examples/05-error-handling.ts +0 -387
  364. package/examples/examples/06-concurrent-tasks.ts +0 -352
  365. package/examples/examples/07-agent-loops.ts +0 -432
  366. package/examples/examples/08-sdk-features.ts +0 -667
  367. package/examples/examples/09-reflection.ts +0 -573
  368. package/examples/examples/10-introspection.ts +0 -550
  369. package/examples/examples/11-reparenting-workflows.ts +0 -269
  370. package/examples/index.ts +0 -147
  371. package/examples/utils/helpers.ts +0 -57
  372. package/package-lock.json +0 -2398
  373. package/plan/001_d3bb02af4886/TEST_RESULTS.md +0 -259
  374. package/plan/001_d3bb02af4886/backlog.json +0 -867
  375. package/plan/001_d3bb02af4886/bug_fix_tasks.json +0 -484
  376. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S1/PRP.md +0 -488
  377. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md +0 -581
  378. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md +0 -687
  379. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S1/PRP.md +0 -492
  380. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/PRP.md +0 -932
  381. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/concurrent_error_testing_patterns.md +0 -1109
  382. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/vitest_concurrent_testing.md +0 -802
  383. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/workflow_engine_test_references.md +0 -603
  384. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S1/PRP.md +0 -564
  385. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S3/PRP.md +0 -518
  386. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S4/PRP.md +0 -1252
  387. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/PRP.md +0 -364
  388. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/CODEBASE_INVENTORY.md +0 -114
  389. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/DECORATOR_DOCUMENTATION_PATTERNS.md +0 -205
  390. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/PRD_LOCATION_ANALYSIS.md +0 -199
  391. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/ULTRATHINK_PRP_PLAN.md +0 -134
  392. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/PRP.md +0 -495
  393. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md +0 -435
  394. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md +0 -506
  395. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S3/PRP.md +0 -612
  396. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/PRP.md +0 -558
  397. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md +0 -788
  398. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S2/PRP.md +0 -460
  399. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S3/PRP.md +0 -454
  400. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/PRP.md +0 -520
  401. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md +0 -417
  402. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/external_workflow_engines_research.md +0 -760
  403. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md +0 -245
  404. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S2/PRP.md +0 -792
  405. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/PRP.md +0 -535
  406. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md +0 -190
  407. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/PRP.md +0 -654
  408. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/TEST_FIX_REPORT.md +0 -227
  409. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/KEY_FINDINGS.md +0 -345
  410. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/QUICK_REFERENCE.md +0 -193
  411. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/test_maintenance_research.md +0 -1323
  412. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/BREAKING_CHANGES_AUDIT.md +0 -1011
  413. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/PRP.md +0 -927
  414. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S2/PRP.md +0 -505
  415. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/architecture/logger_child_signature_analysis.md +0 -401
  416. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/child_implementation_research.md +0 -142
  417. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/test_patterns_research.md +0 -112
  418. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/vitest_patterns_research.md +0 -159
  419. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/PRP.md +0 -549
  420. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md +0 -368
  421. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/edge_case_analysis.md +0 -172
  422. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/usage_inventory.md +0 -175
  423. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S2/PRP.md +0 -696
  424. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S4/PRP.md +0 -860
  425. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/PRP.md +0 -1066
  426. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01-testing-aggregated-errors.md +0 -1103
  427. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01_typescript_error_aggregation_patterns.md +0 -789
  428. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02-error-merge-strategy-testing-guide.md +0 -1098
  429. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02_aggregate_error_patterns.md +0 -1037
  430. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03-promise-allsettled-testing-patterns.md +0 -916
  431. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03_error_merging_strategies.md +0 -1045
  432. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/04_github_stackoverflow_examples.md +0 -890
  433. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/05_comprehensive_summary.md +0 -822
  434. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/INDEX.md +0 -668
  435. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/QUICK_REFERENCE.md +0 -706
  436. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/README.md +0 -265
  437. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/RESEARCH_REPORT.md +0 -655
  438. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S4/research/vitest_testing_patterns.md +0 -1103
  439. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T3S2/PRP.md +0 -426
  440. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/PRP.md +0 -506
  441. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/QUICK_REFERENCE.md +0 -114
  442. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/RESEARCH_SUMMARY.md +0 -316
  443. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/vitest_observer_error_logging_best_practices.md +0 -754
  444. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S3/PRP.md +0 -612
  445. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/PRP.md +0 -719
  446. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/README.md +0 -215
  447. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md +0 -765
  448. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S3/PRP.md +0 -718
  449. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md +0 -149
  450. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/PRP.md +0 -470
  451. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/ULTRATHINK_PLAN.md +0 -332
  452. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/codebase_workflow_name_analysis.md +0 -167
  453. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/external_best_practices.md +0 -265
  454. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md +0 -273
  455. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md +0 -760
  456. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S3-PRP.md +0 -434
  457. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S1/PRP.md +0 -717
  458. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/PRP.md +0 -472
  459. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/VALIDATION_REPORT.md +0 -125
  460. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/research/ULTRATHINK_PRP_PLAN.md +0 -301
  461. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/error-logging-best-practices.md +0 -1170
  462. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/research_typescript_partial_and_overloads.md +0 -940
  463. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-quick-reference.md +0 -151
  464. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-research.md +0 -650
  465. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md +0 -259
  466. package/plan/001_d3bb02af4886/bugfix/P1M1T1S1/PRP.md +0 -457
  467. package/plan/001_d3bb02af4886/bugfix/RESEARCH_SUMMARY.md +0 -346
  468. package/plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md +0 -311
  469. package/plan/001_d3bb02af4886/bugfix/architecture/concurrent_execution_best_practices.md +0 -1565
  470. package/plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md +0 -288
  471. package/plan/001_d3bb02af4886/bugfix/architecture/promise_all_analysis.md +0 -741
  472. package/plan/001_d3bb02af4886/docs/PRP/P1M1T1S4-functional-workflow-error-state-capture-test.md +0 -652
  473. package/plan/001_d3bb02af4886/docs/PRP/P1P2-PRP.md +0 -527
  474. package/plan/001_d3bb02af4886/docs/PRP/P3P4-PRP.md +0 -1388
  475. package/plan/001_d3bb02af4886/docs/PRP/P4P5-PRP.md +0 -1136
  476. package/plan/001_d3bb02af4886/docs/PRP/PRP.md +0 -527
  477. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S1-PRP.md +0 -415
  478. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S2-PRP.md +0 -378
  479. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S4-PRP.md +0 -713
  480. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M2T1S4-PRP.md +0 -370
  481. package/plan/001_d3bb02af4886/docs/PRP_P1M3T1S3.md +0 -499
  482. package/plan/001_d3bb02af4886/docs/TEST_RESULTS.md +0 -230
  483. package/plan/001_d3bb02af4886/docs/architecture/external_deps.md +0 -358
  484. package/plan/001_d3bb02af4886/docs/architecture/system_context.md +0 -242
  485. package/plan/001_d3bb02af4886/docs/bugfix/ANALYSIS_PRD_VS_IMPLEMENTATION.md +0 -1134
  486. package/plan/001_d3bb02af4886/docs/bugfix/GAP_ANALYSIS_SUMMARY.md +0 -179
  487. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/PRP.md +0 -629
  488. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/validation-report.md +0 -214
  489. package/plan/001_d3bb02af4886/docs/bugfix/PRP_P1M4T2S3.md +0 -629
  490. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_PRP.md +0 -529
  491. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_QUICK_REFERENCE.md +0 -142
  492. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_README.md +0 -304
  493. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_TEST_RESULTS.md +0 -558
  494. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_VALIDATION_SUMMARY.md +0 -256
  495. package/plan/001_d3bb02af4886/docs/bugfix/system_context.md +0 -346
  496. package/plan/001_d3bb02af4886/docs/bugfix-architecture/bug_analysis.md +0 -415
  497. package/plan/001_d3bb02af4886/docs/bugfix-architecture/implementation_patterns.md +0 -489
  498. package/plan/001_d3bb02af4886/docs/bugfix-architecture/system_context.md +0 -218
  499. package/plan/001_d3bb02af4886/docs/bugfix_INITIATION_SUMMARY.md +0 -380
  500. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_PATTERNS.md +0 -1923
  501. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_QUICK_REF.md +0 -319
  502. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/codebase-context.md +0 -115
  503. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/cycle-detection-algorithms.md +0 -134
  504. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/test-patterns.md +0 -153
  505. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/workflow-class.md +0 -132
  506. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_BEST_PRACTICES.md +0 -716
  507. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_QUICK_REF.md +0 -186
  508. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/GROUNDSWELL_DECORATOR_EXAMPLES.md +0 -604
  509. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/INDEX.md +0 -213
  510. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/codebase_structure.md +0 -30
  511. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/existing_test_pattern.md +0 -56
  512. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/getRootObservers_implementation.md +0 -53
  513. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/test_conventions.md +0 -49
  514. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/PRP.md +0 -958
  515. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/QUICK_REFERENCE.md +0 -339
  516. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/README.md +0 -305
  517. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/SUMMARY.md +0 -433
  518. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/bidirectional-tree-consistency-testing.md +0 -1574
  519. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/test-pattern-examples.md +0 -1014
  520. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_BEST_PRACTICES.md +0 -1929
  521. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_CODE_PATTERNS.md +0 -857
  522. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
  523. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_RESEARCH_INDEX.md +0 -424
  524. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_INDEX.md +0 -291
  525. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_RESEARCH_REPORT.md +0 -1342
  526. package/plan/001_d3bb02af4886/docs/research/P1P2/RESEARCH_SUMMARY.md +0 -342
  527. package/plan/001_d3bb02af4886/docs/research/P1P2/anthropic-sdk.md +0 -174
  528. package/plan/001_d3bb02af4886/docs/research/P1P2/async-local-storage.md +0 -200
  529. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-code-patterns.md +0 -1205
  530. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-decision-matrix.md +0 -421
  531. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-implementation-guide.md +0 -1341
  532. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-integration-guide.md +0 -834
  533. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-patterns.md +0 -1468
  534. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-quick-reference.md +0 -558
  535. package/plan/001_d3bb02af4886/docs/research/P1P2/zod-schema.md +0 -152
  536. package/plan/001_d3bb02af4886/docs/research/P3P4/caching-lru.md +0 -116
  537. package/plan/001_d3bb02af4886/docs/research/P3P4/introspection-tools.md +0 -177
  538. package/plan/001_d3bb02af4886/docs/research/P3P4/reflection-patterns.md +0 -117
  539. package/plan/001_d3bb02af4886/docs/research/P4P5/RESEARCH_SUMMARY.md +0 -151
  540. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_QUICK_REF.md +0 -376
  541. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_RESEARCH.md +0 -1507
  542. package/plan/001_d3bb02af4886/docs/research/bugfix_typescript_patterns.md +0 -949
  543. package/plan/001_d3bb02af4886/docs/research/error-testing-research.md +0 -619
  544. package/plan/001_d3bb02af4886/docs/research/error_handling_patterns.md +0 -723
  545. package/plan/001_d3bb02af4886/docs/research/general/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
  546. package/plan/001_d3bb02af4886/docs/research/general/README-INTROSPECTION.md +0 -352
  547. package/plan/001_d3bb02af4886/docs/research/general/agent-introspection-patterns.md +0 -1085
  548. package/plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md +0 -984
  549. package/plan/001_d3bb02af4886/docs/research/general/introspection-tool-examples.md +0 -875
  550. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/PRP_TEMPLATE.md +0 -460
  551. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md +0 -324
  552. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/README.md +0 -175
  553. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md +0 -499
  554. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/SUMMARY.md +0 -163
  555. package/plan/001_d3bb02af4886/prd_snapshot.md +0 -543
  556. package/plan/bugfix/BUG_FIX_SUMMARY.md +0 -961
  557. package/scripts/generate-llms-full.ts +0 -206
  558. package/src/__tests__/adversarial/attachChild-performance.test.ts +0 -216
  559. package/src/__tests__/adversarial/circular-reference.test.ts +0 -101
  560. package/src/__tests__/adversarial/complex-circular-reference.test.ts +0 -139
  561. package/src/__tests__/adversarial/concurrent-task-failures.test.ts +0 -571
  562. package/src/__tests__/adversarial/deep-analysis.test.ts +0 -729
  563. package/src/__tests__/adversarial/deep-hierarchy-stress.test.ts +0 -213
  564. package/src/__tests__/adversarial/e2e-prd-validation.test.ts +0 -448
  565. package/src/__tests__/adversarial/edge-case.test.ts +0 -703
  566. package/src/__tests__/adversarial/error-merge-strategy.test.ts +0 -760
  567. package/src/__tests__/adversarial/incremental-performance.test.ts +0 -140
  568. package/src/__tests__/adversarial/node-map-update-benchmarks.test.ts +0 -457
  569. package/src/__tests__/adversarial/observer-propagation.test.ts +0 -487
  570. package/src/__tests__/adversarial/parent-validation.test.ts +0 -143
  571. package/src/__tests__/adversarial/prd-12-2-compliance.test.ts +0 -611
  572. package/src/__tests__/adversarial/prd-compliance.test.ts +0 -731
  573. package/src/__tests__/compatibility/backward-compatibility.test.ts +0 -1572
  574. package/src/__tests__/helpers/tree-verification.ts +0 -257
  575. package/src/__tests__/integration/agent-workflow.test.ts +0 -256
  576. package/src/__tests__/integration/bidirectional-consistency.test.ts +0 -847
  577. package/src/__tests__/integration/observer-logging.test.ts +0 -643
  578. package/src/__tests__/integration/tree-mirroring.test.ts +0 -151
  579. package/src/__tests__/integration/workflow-reparenting.test.ts +0 -303
  580. package/src/__tests__/unit/agent.test.ts +0 -169
  581. package/src/__tests__/unit/cache-key.test.ts +0 -182
  582. package/src/__tests__/unit/cache.test.ts +0 -172
  583. package/src/__tests__/unit/context.test.ts +0 -217
  584. package/src/__tests__/unit/decorators.test.ts +0 -100
  585. package/src/__tests__/unit/introspection-tools.test.ts +0 -277
  586. package/src/__tests__/unit/logger.test.ts +0 -293
  587. package/src/__tests__/unit/observable.test.ts +0 -321
  588. package/src/__tests__/unit/prompt.test.ts +0 -135
  589. package/src/__tests__/unit/reflection.test.ts +0 -210
  590. package/src/__tests__/unit/tree-debugger-incremental.test.ts +0 -170
  591. package/src/__tests__/unit/tree-debugger.test.ts +0 -85
  592. package/src/__tests__/unit/utils/workflow-error-utils.test.ts +0 -209
  593. package/src/__tests__/unit/workflow-detachChild.test.ts +0 -100
  594. package/src/__tests__/unit/workflow-emitEvent-childDetached.test.ts +0 -153
  595. package/src/__tests__/unit/workflow-isDescendantOf.test.ts +0 -180
  596. package/src/__tests__/unit/workflow.test.ts +0 -357
  597. package/src/cache/cache-key.ts +0 -244
  598. package/src/cache/cache.ts +0 -236
  599. package/src/core/agent.ts +0 -593
  600. package/src/core/event-tree.ts +0 -260
  601. package/src/core/logger.ts +0 -112
  602. package/src/core/mcp-handler.ts +0 -184
  603. package/src/core/prompt.ts +0 -150
  604. package/src/core/workflow-context.ts +0 -351
  605. package/src/core/workflow.ts +0 -540
  606. package/src/debugger/tree-debugger.ts +0 -255
  607. package/src/decorators/observed-state.ts +0 -95
  608. package/src/decorators/step.ts +0 -139
  609. package/src/decorators/task.ts +0 -159
  610. package/src/examples/tdd-orchestrator.ts +0 -65
  611. package/src/examples/test-cycle-workflow.ts +0 -64
  612. package/src/index.ts +0 -142
  613. package/src/reflection/reflection.ts +0 -407
  614. package/src/tools/index.ts +0 -36
  615. package/src/tools/introspection.ts +0 -464
  616. package/src/types/agent.ts +0 -90
  617. package/src/types/decorators.ts +0 -32
  618. package/src/types/error-strategy.ts +0 -13
  619. package/src/types/error.ts +0 -20
  620. package/src/types/events.ts +0 -75
  621. package/src/types/index.ts +0 -55
  622. package/src/types/logging.ts +0 -24
  623. package/src/types/observer.ts +0 -18
  624. package/src/types/prompt.ts +0 -40
  625. package/src/types/reflection.ts +0 -117
  626. package/src/types/sdk-primitives.ts +0 -128
  627. package/src/types/workflow-context.ts +0 -163
  628. package/src/types/workflow.ts +0 -37
  629. package/src/utils/id.ts +0 -11
  630. package/src/utils/observable.ts +0 -106
  631. package/src/utils/workflow-error-utils.ts +0 -56
  632. package/tsconfig.json +0 -22
  633. package/vitest.config.ts +0 -16
@@ -1,792 +0,0 @@
1
- # Product Requirement Prompt (PRP): Implement Public `isDescendantOf` API
2
-
3
- **Work Item**: P1.M3.T4.S2 - Implement public `isDescendantOf` if approved
4
- **PRD Reference**: Issue 9 - Steps Not in Tree Structure (Bug Report Note)
5
- **Implementation Target**: `src/core/workflow.ts:162`
6
- **S1 Decision**: **APPROVED** - Make public with confidence 9/10
7
-
8
- ---
9
-
10
- ## Goal
11
-
12
- **Feature Goal**: Change the `isDescendantOf()` method visibility from `private` to `public`, add comprehensive JSDoc documentation with security warning, and ensure the method has appropriate parameter validation.
13
-
14
- **Deliverable**:
15
- 1. `isDescendantOf()` method changed from `private` to `public` in `src/core/workflow.ts:162`
16
- 2. Comprehensive JSDoc documentation with `@warning` tag for security implications
17
- 3. Optional: Parameter validation for the `ancestor` parameter
18
- 4. Update to security documentation guide
19
- 5. Tests pass (no changes to test logic needed)
20
-
21
- **Success Definition**:
22
- - Method is publicly accessible without casting to `any`
23
- - JSDoc includes `@warning` about topology information disclosure
24
- - All existing tests pass without modification
25
- - New tests (if added) verify public accessibility and parameter validation
26
-
27
- ## User Persona
28
-
29
- **Target User**: Developer using the Groundswell workflow engine who needs to check workflow hierarchy relationships programmatically.
30
-
31
- **Use Case**: A developer building a workflow-based application needs to validate that a workflow belongs to a specific tree branch before executing an operation.
32
-
33
- **User Journey**:
34
- 1. User has references to two workflow instances
35
- 2. User calls `childWorkflow.isDescendantOf(rootWorkflow)`
36
- 3. Method returns `true` if child is in root's hierarchy, `false` otherwise
37
- 4. User proceeds with conditional logic based on result
38
-
39
- **Pain Points Addressed**:
40
- - Users currently must manually traverse `parent` chain (error-prone, forget cycle detection)
41
- - Current workaround requires casting to `any` to access private method
42
- - Inconsistent with other public hierarchy properties (`parent`, `children`)
43
-
44
- ## Why
45
-
46
- - **API Ergonomics**: `isDescendantOf()` provides cleaner interface than manual tree traversal
47
- - **User Needs**: Introspection tools and examples show users want hierarchy navigation
48
- - **No Security Risk**: Does NOT expose new information beyond existing `parent`/`children` properties
49
- - **Low Implementation Cost**: Change one keyword, add documentation; already battle-tested (25+ tests)
50
- - **Competitive Differentiator**: No major workflow engine exposes this API publicly
51
- - **S1 Approval**: Comprehensive research and recommendation supports this change
52
-
53
- ## What
54
-
55
- ### Success Criteria
56
-
57
- - [ ] `isDescendantOf()` method changed from `private` to `public` at `src/core/workflow.ts:162`
58
- - [ ] Comprehensive JSDoc documentation added with security `@warning`
59
- - [ ] All existing tests pass (25+ tests already cover this method indirectly)
60
- - [ ] No breaking changes to existing functionality
61
- - [ ] Security documentation updated with `isDescendantOf()` section
62
-
63
- ---
64
-
65
- ## All Needed Context
66
-
67
- ### Context Completeness Check
68
-
69
- _This PRP passes the "No Prior Knowledge" test - someone unfamiliar with the codebase would have everything needed to implement this successfully._
70
-
71
- ### Documentation & References
72
-
73
- ```yaml
74
- # MUST READ - S1 Research Decision (APPROVED)
75
- - file: plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md
76
- why: Final recommendation to make isDescendantOf public with confidence 9/10
77
- section: Lines 1-50 (Executive Summary and Decision Matrix)
78
- critical: Decision is APPROVED with safeguards (JSDoc warning, security docs)
79
- gotcha: This is a BREAKING API change per Semantic Versioning (requires major version bump)
80
-
81
- # MUST READ - Current Implementation
82
- - file: src/core/workflow.ts
83
- why: The isDescendantOf() implementation at lines 162-180, currently private
84
- pattern: Private method using iterative traversal with visited Set for cycle detection
85
- gotcha: No parameter validation currently - relies on TypeScript type system
86
-
87
- # MUST READ - JSDoc Documentation Patterns
88
- - file: src/core/workflow.ts
89
- why: Examples of comprehensive JSDoc patterns for public methods
90
- pattern: attachChild (lines 224-276), detachChild (lines 318-369)
91
- gotcha: Codebase uses @throws, @example, detailed descriptions with sections
92
- critical: No existing @warning tags - this will be first security-warning JSDoc
93
-
94
- # MUST READ - Security Implications Analysis
95
- - file: plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md
96
- why: Security assessment showing NO new information exposed
97
- section: Lines 58-68 (Comparison with Existing Public APIs)
98
- critical: parent and children already public - isDescendantOf is convenience only
99
- gotcha: Applications must implement their own access control if exposing workflows via API
100
-
101
- # MUST READ - Security Guide (to update)
102
- - file: plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md
103
- why: Security patterns for introspection and hierarchy exposure
104
- section: Lines 1-100 (Threat Model and Introspection Attack Vectors)
105
- critical: Add isDescendantOf() section documenting hierarchy information disclosure
106
- gotcha: Groundswell has NO built-in authentication/authorization - security is app's responsibility
107
-
108
- # MUST READ - Parameter Validation Patterns
109
- - file: src/core/workflow.ts
110
- why: Patterns for validating parameters in public methods
111
- pattern: attachChild (lines 277-299) - Array.includes(), reference equality checks
112
- gotcha: Most validation is implicit via TypeScript types; explicit checks for edge cases
113
- critical: No instanceof checks - codebase trusts TypeScript types
114
-
115
- # MUST READ - Testing Patterns
116
- - file: src/__tests__/adversarial/circular-reference.test.ts
117
- why: Tests for isDescendantOf behavior (currently cast to 'any' for access)
118
- pattern: Uses (workflow as any).isDescendantOf() to test private method
119
- gotcha: After making public, tests can call method directly without casting
120
- critical: 25+ test cases already cover this method via attachChild circular reference detection
121
-
122
- # MUST READ - Industry Comparison
123
- - file: plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md
124
- why: Groundswell would be UNIQUE in exposing public isDescendantOf API
125
- section: Lines 450-470 (API Exposure Matrix)
126
- critical: NO major workflow engine (Airflow, Temporal, Prefect) exposes this publicly
127
- gotcha: Not an anti-pattern, just different from industry
128
-
129
- # MUST READ - External JSDoc Best Practices
130
- - url: https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html
131
- why: TypeScript's official JSDoc reference
132
- section: @throws, @example, @warning tags
133
-
134
- # MUST READ - Semantic Versioning Implications
135
- - url: https://semver.org/
136
- why: Making private method public is a MAJOR breaking change
137
- critical: Requires version bump from X.Y.Z to (X+1).0.0
138
- gotcha: Even though implementation doesn't change, API surface area increases
139
-
140
- # REFERENCE - Current Usage Site
141
- - file: src/core/workflow.ts
142
- why: Single call site at line 293 in attachChild() method
143
- pattern: if (this.isDescendantOf(child)) - circular reference detection
144
- gotcha: This internal usage continues unchanged after visibility change
145
- ```
146
-
147
- ### Current Codebase Tree (relevant to isDescendantOf)
148
-
149
- ```bash
150
- src/
151
- ├── core/
152
- │ └── workflow.ts # isDescendantOf at line 162 (private → public)
153
- │ # attachChild usage at line 293
154
- │ # public parent/children properties at 49-52
155
- ├── types/
156
- │ └── workflow.ts # WorkflowNode interface with parent/children
157
- ├── tools/
158
- │ └── introspection.ts # Public introspection tools (read_ancestor_chain, etc.)
159
- └── __tests__/
160
- ├── adversarial/
161
- │ ├── circular-reference.test.ts # Tests for isDescendantOf behavior
162
- │ ├── complex-circular-reference.test.ts
163
- │ ├── deep-hierarchy-stress.test.ts
164
- │ └── attachChild-performance.test.ts
165
- └── unit/
166
- └── workflow-detachChild.test.ts # Example of public method test patterns
167
- ```
168
-
169
- ### Desired Codebase Tree with files to be added and responsibility of file
170
-
171
- ```bash
172
- # NO new files needed - only modifications to existing files
173
-
174
- # CHANGES:
175
- src/core/workflow.ts # CHANGE: private → public, add JSDoc
176
- plan/.../introspection-security-guide.md # CHANGE: Add isDescendantOf section
177
- ```
178
-
179
- ### Known Gotchas of Our Codebase
180
-
181
- ```typescript
182
- // CRITICAL: isDescendantOf is private - changing to public is a BREAKING API change
183
- // Per Semantic Versioning, this requires a MAJOR version bump (X.0.0 → (X+1).0.0)
184
-
185
- // CRITICAL: Groundswell has NO built-in authentication or authorization
186
- // Security is entirely the application's responsibility
187
-
188
- // CRITICAL: parent and children properties are already PUBLIC
189
- // isDescendantOf does NOT expose any new information
190
-
191
- // CRITICAL: No instanceof checks for parameter validation in codebase
192
- // Codebase relies on TypeScript type system for type safety
193
-
194
- // CRITICAL: isDescendantOf uses iterative while loop (not recursive)
195
- // This is intentional for stack safety at extreme depths (1000+ levels)
196
-
197
- // CRITICAL: Cycle detection uses visited Set pattern
198
- // Same pattern as getRoot() and getRootObservers()
199
-
200
- // CRITICAL: @warning JSDoc tag does NOT exist in codebase yet
201
- // This will be the first usage of @warning for security documentation
202
-
203
- // CRITICAL: Tests currently use (workflow as any).isDescendantOf()
204
- // After making public, can call directly - but existing tests still work
205
-
206
- // CRITICAL: Method returns boolean, NOT throws for non-descendant
207
- // Only throws Error if circular reference detected during traversal
208
-
209
- // CRITICAL: JSDoc pattern uses markdown with bold headers
210
- // See attachChild() for example: **Structural Changes:**, **Invariants Maintained:**
211
- ```
212
-
213
- ---
214
-
215
- ## Implementation Blueprint
216
-
217
- ### Data Models and Structure
218
-
219
- No new data models needed. The `Workflow` class already exists with all necessary structure.
220
-
221
- ### Implementation Tasks (ordered by dependencies)
222
-
223
- ```yaml
224
- Task 1: MODIFY src/core/workflow.ts - Change Visibility
225
- - CHANGE: Line 162 from `private isDescendantOf` to `public isDescendantOf`
226
- - LOCATION: src/core/workflow.ts:162
227
- - PRESERVE: All existing implementation logic (lines 163-180)
228
- - NAMING: Keep method name exactly as is (no rename)
229
-
230
- Task 2: ADD JSDoc Documentation
231
- - ADD: Comprehensive JSDoc comment BEFORE line 162
232
- - FOLLOW: Pattern from attachChild() method (lines 224-276)
233
- - INCLUDE:
234
- - One-line summary
235
- - Detailed description paragraph
236
- - @warning tag about topology information disclosure
237
- - @param tag for ancestor parameter
238
- - @returns tag describing boolean return
239
- - @throws {Error} tag for cycle detection
240
- - @example tags showing usage patterns
241
- - PLACEMENT: Lines 152-161 (replace existing private JSDoc)
242
-
243
- Task 3: CONSIDER Adding Parameter Validation (OPTIONAL)
244
- - DECISION POINT: Add instanceof check or rely on TypeScript types?
245
- - IF ADDING: Insert at line 163 (first line of method body)
246
- - PATTERN: Follow attachChild() validation style
247
- - EXAMPLE:
248
- ```typescript
249
- if (!(ancestor instanceof Workflow)) {
250
- throw new TypeError(`Expected Workflow instance, got ${typeof ancestor}`);
251
- }
252
- ```
253
- - NOTE: Codebase typically relies on TypeScript types - this is optional
254
-
255
- Task 4: MODIFY Security Documentation
256
- - ADD: New section to plan/.../introspection-security-guide.md
257
- - LOCATION: After "Threat Model" section, before "Implementation Checklist"
258
- - TITLE: "### Threat 5: Topology Exposure via isDescendantOf()"
259
- - INCLUDE: What information is exposed, why risk is LOW, mitigation recommendations
260
- - PATTERN: Follow existing threat section structure (Threat 1-4)
261
-
262
- Task 5: VERIFY Tests Pass
263
- - RUN: Full test suite to ensure no regressions
264
- - VERIFY: All 25+ existing tests still pass
265
- - CHECK: circular-reference.test.ts, complex-circular-reference.test.ts, deep-hierarchy-stress.test.ts
266
- - EXPECTED: All tests pass without modification (private → public is backward compatible)
267
-
268
- Task 6: CONSIDER Adding Public API Tests (OPTIONAL)
269
- - CREATE: src/__tests__/unit/workflow-isDescendantOf.test.ts (if desired)
270
- - IMPLEMENT: Tests that call isDescendantOf() directly without (as any) cast
271
- - FOLLOW: Pattern from workflow-detachChild.test.ts
272
- - COVERAGE: Happy path, edge cases (self, null, unrelated workflows)
273
- - NOTE: Existing tests already cover behavior - new tests would verify public accessibility only
274
- ```
275
-
276
- ### Implementation Patterns & Key Details
277
-
278
- ```typescript
279
- // CRITICAL: JSDoc Pattern for Security-Sensitive Public API
280
- /**
281
- * Check if this workflow is a descendant of the given ancestor workflow.
282
- *
283
- * Traverses the parent chain upward looking for the ancestor reference.
284
- * Uses a visited Set to detect cycles during traversal. This method provides
285
- * a convenient way to check workflow hierarchy relationships without manually
286
- * traversing the parent chain.
287
- *
288
- * @warning This method reveals workflow hierarchy information. If your
289
- * application exposes workflows via an API, ensure you implement proper
290
- * access control to prevent unauthorized topology discovery. Note that
291
- * the `parent` and `children` properties are already public, so this
292
- * method does not expose any new information beyond what is currently
293
- * accessible.
294
- *
295
- * **Time Complexity**: O(d) where d is the depth of the hierarchy
296
- * **Space Complexity**: O(d) for the visited Set in worst case (cycle detection)
297
- *
298
- * @example Check if a workflow belongs to a specific hierarchy
299
- * ```typescript
300
- * const root = new Workflow('root');
301
- * const child = new Workflow('child', { parent: root });
302
- *
303
- * if (child.isDescendantOf(root)) {
304
- * console.log('Child is in root hierarchy');
305
- * }
306
- * ```
307
- *
308
- * @example Validate before attaching to prevent circular references
309
- * ```typescript
310
- * if (!newChild.isDescendantOf(parent)) {
311
- * parent.attachChild(newChild);
312
- * } else {
313
- * throw new Error('Would create circular reference');
314
- * }
315
- * ```
316
- *
317
- * @example Check for ancestor relationship in conditional logic
318
- * ```typescript
319
- * const isInProductionBranch = workflow.isDescendantOf(productionRoot);
320
- * if (isInProductionBranch) {
321
- * // Apply production-specific logic
322
- * }
323
- * ```
324
- *
325
- * @param ancestor - The potential ancestor workflow to check
326
- * @returns true if ancestor is found in parent chain, false otherwise
327
- * @throws {Error} If a cycle is detected during traversal (indicates corrupted tree structure)
328
- */
329
- public isDescendantOf(ancestor: Workflow): boolean {
330
- // Implementation unchanged (lines 163-180)
331
- }
332
-
333
- // CRITICAL: Security Documentation Pattern
334
- // Add to introspection-security-guide.md after Threat 4:
335
-
336
- /**
337
- ### Threat 5: Topology Exposure via isDescendantOf
338
-
339
- **Attack Scenario:**
340
- ```
341
- Attacker → Calls workflow.isDescendantOf(suspectWorkflow)
342
- → Learns hierarchy relationship between workflows
343
- → Maps workflow tree structure
344
- → Extracts business intelligence from topology
345
- ```
346
-
347
- **Risk Level:** LOW (same as current exposure)
348
-
349
- **Rationale:**
350
- - `parent` and `children` properties are already public
351
- - `getNode()` exposes full tree structure
352
- - `isDescendantOf()` only provides convenience, not new information
353
- - Attacker can already traverse tree manually
354
-
355
- **Affected Method:** `Workflow.isDescendantOf()` (newly public)
356
-
357
- **Mitigation:**
358
- 1. **Application-Level Access Control** - If exposing workflows via API:
359
- ```typescript
360
- // Validate user has permission to access workflow
361
- if (!user.canAccessWorkflow(workflowId)) {
362
- throw new Error('Unauthorized');
363
- }
364
- // Only then allow isDescendantOf calls
365
- ```
366
-
367
- 2. **Filter Hierarchy Information** - For unauthenticated users:
368
- ```typescript
369
- // Return filtered view without hierarchy
370
- const filteredWorkflow = {
371
- id: workflow.id,
372
- name: workflow.name,
373
- // Omit parent, children, isDescendantOf
374
- };
375
- ```
376
-
377
- 3. **Audit Topology Access** - Log calls to isDescendantOf:
378
- ```typescript
379
- auditLog.log({
380
- timestamp: Date.now(),
381
- userId: user.id,
382
- action: 'isDescendantOf',
383
- workflowId: workflow.id,
384
- ancestorId: ancestor.id
385
- });
386
- ```
387
-
388
- **Recommendation:** Document that applications should implement access control
389
- if exposing workflows via APIs. The library itself provides no built-in security.
390
- */
391
- ```
392
-
393
- ### Integration Points
394
-
395
- ```yaml
396
- CODE CHANGES:
397
- - file: src/core/workflow.ts
398
- line: 152-161 (JSDoc section)
399
- change: Replace existing private JSDoc with comprehensive public JSDoc
400
- - file: src/core/workflow.ts
401
- line: 162
402
- change: `private isDescendantOf` → `public isDescendantOf`
403
-
404
- DOCUMENTATION CHANGES:
405
- - file: plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md
406
- add: New Threat 5 section for isDescendantOf topology exposure
407
- location: After Threat 4 (Denial of Service), before Implementation Checklist
408
-
409
- NO BREAKING CHANGES:
410
- - All existing code using isDescendantOf internally continues unchanged
411
- - attachChild() usage at line 293 unaffected
412
- - All existing tests pass without modification
413
- ```
414
-
415
- ---
416
-
417
- ## Validation Loop
418
-
419
- ### Level 1: Syntax & Style (Immediate Feedback)
420
-
421
- ```bash
422
- # Run after making changes to workflow.ts
423
- # From project root
424
-
425
- # Check TypeScript compilation
426
- npm run build
427
- # Expected: No compilation errors
428
-
429
- # Type checking
430
- npx tsc --noEmit
431
- # Expected: No type errors
432
-
433
- # If using ESLint/prettier (check package.json for scripts)
434
- npm run lint
435
- # Expected: No linting errors
436
-
437
- # Expected: Zero errors. If errors exist, READ output and fix before proceeding.
438
- ```
439
-
440
- ### Level 2: Unit Tests (Component Validation)
441
-
442
- ```bash
443
- # Test specific functionality
444
- npm test -- circular-reference
445
- npm test -- complex-circular-reference
446
- npm test -- deep-hierarchy-stress
447
- npm test -- attachChild-performance
448
-
449
- # Full test suite
450
- npm test
451
-
452
- # Expected: All tests pass. isDescendantOf is already tested indirectly via attachChild tests.
453
- # No test modifications should be needed.
454
- ```
455
-
456
- ### Level 3: Integration Testing (System Validation)
457
-
458
- ```bash
459
- # Verify public accessibility without casting
460
- # Create a simple test file:
461
- cat > test-public-api.test.ts << 'EOF'
462
- import { describe, it, expect } from 'vitest';
463
- import { Workflow } from '../src/core/workflow.js';
464
-
465
- describe('Workflow.isDescendantOf() - Public API', () => {
466
- it('should be publicly accessible without casting', () => {
467
- const root = new Workflow('root');
468
- const child = new Workflow('child', { parent: root });
469
-
470
- // This should work without (as any) cast
471
- const result = child.isDescendantOf(root);
472
-
473
- expect(result).toBe(true);
474
- });
475
-
476
- it('should return false for unrelated workflows', () => {
477
- const tree1 = new Workflow('tree1');
478
- const tree2 = new Workflow('tree2');
479
-
480
- const result = tree1.isDescendantOf(tree2);
481
-
482
- expect(result).toBe(false);
483
- });
484
-
485
- it('should return false when checking root against descendant', () => {
486
- const root = new Workflow('root');
487
- const child = new Workflow('child', { parent: root });
488
-
489
- const result = root.isDescendantOf(child);
490
-
491
- expect(result).toBe(false);
492
- });
493
- });
494
- EOF
495
-
496
- # Run the test
497
- npm test test-public-api.test.ts
498
-
499
- # Expected: All new tests pass, proving public API accessibility
500
- ```
501
-
502
- ### Level 4: Creative & Domain-Specific Validation
503
-
504
- ```bash
505
- # Manual validation of JSDoc visibility
506
-
507
- # 1. Generate TypeScript declaration files
508
- npx tsc --declaration --emitDeclarationOnly
509
-
510
- # 2. Check the generated .d.ts file
511
- cat src/core/workflow.d.ts | grep -A 10 "isDescendantOf"
512
-
513
- # Expected output should show:
514
- # isDescendantOf(ancestor: Workflow): boolean;
515
- # (without private keyword)
516
-
517
- # 3. Verify IDE documentation
518
- # Open src/core/workflow.ts in VS Code
519
- # Hover over a workflow instance and verify isDescendantOf appears in autocomplete
520
- # Call the method and verify JSDoc tooltip shows documentation
521
-
522
- # 4. Security documentation validation
523
- cat plan/.../introspection-security-guide.md | grep -A 20 "Threat 5"
524
-
525
- # Expected: New Threat 5 section present with isDescendantOf documentation
526
-
527
- # 5. Verify no information disclosure beyond existing APIs
528
- # (This is conceptual - no automated test)
529
- # Review that isDescendantOf only returns boolean (true/false)
530
- # Compare with existing public APIs:
531
- # - workflow.parent: Returns full Workflow reference
532
- # - workflow.children: Returns array of Workflow references
533
- # - workflow.getNode(): Returns WorkflowNode with full tree, logs, events, state
534
- #
535
- # Conclusion: isDescendantOf exposes LESS information than existing APIs
536
- ```
537
-
538
- ---
539
-
540
- ## Final Validation Checklist
541
-
542
- ### Technical Validation
543
-
544
- - [ ] `isDescendantOf()` changed from `private` to `public` at line 162
545
- - [ ] JSDoc documentation added with `@warning` tag
546
- - [ ] JSDoc includes `@param`, `@returns`, `@throws`, `@example` tags
547
- - [ ] TypeScript compilation succeeds: `npm run build`
548
- - [ ] All tests pass: `npm test`
549
- - [ ] No breaking changes to existing functionality
550
- - [ ] Security documentation updated with isDescendantOf section
551
-
552
- ### Feature Validation
553
-
554
- - [ ] Method is publicly callable without `(as any)` cast
555
- - [ ] JSDoc `@warning` explains topology information disclosure
556
- - [ ] JSDoc references that `parent`/`children` are already public
557
- - [ ] Examples show practical usage patterns
558
- - [ ] Error handling documented (`@throws` for cycle detection)
559
- - [ ] Time/space complexity documented (O(d))
560
-
561
- ### Code Quality Validation
562
-
563
- - [ ] Follows existing JSDoc patterns from `attachChild()` method
564
- - [ ] Uses markdown formatting consistent with codebase
565
- - [ ] Implementation logic unchanged (minizes risk)
566
- - [ ] No new dependencies added
567
- - [ ] No performance impact (method already tested and optimized)
568
-
569
- ### Documentation & Deployment
570
-
571
- - [ ] Security guide updated (`introspection-security-guide.md`)
572
- - [ ] Threat 5 section added with mitigation patterns
573
- - [ ] References to existing public APIs (`parent`, `children`)
574
- - [ ] Application-level security responsibility documented
575
- - [ ] Semantic versioning impact noted (MAJOR version bump required)
576
-
577
- ---
578
-
579
- ## Anti-Patterns to Avoid
580
-
581
- - **Don't** change the implementation logic - only visibility and documentation
582
- - **Don't** add unnecessary parameter validation if codebase doesn't use it elsewhere
583
- - **Don't** forget to document that `parent`/`children` are already public
584
- - **Don't** use recursive implementation (current iterative is stack-safe)
585
- - **Don't** skip the `@warning` tag - this is security-sensitive API
586
- - **Don't** modify existing tests - they should pass without changes
587
- - **Don't** forget Semantic Versioning implications (MAJOR bump required)
588
- - **Don't** make the method async - it's synchronous and should stay that way
589
- - **Don't** add depth limit parameter - S1 research didn't recommend it
590
- - **Don't** rename the method - keep `isDescendantOf` for consistency
591
-
592
- ---
593
-
594
- ## Appendix: Implementation Reference
595
-
596
- ### Current Implementation (Before Change)
597
-
598
- ```typescript
599
- // File: src/core/workflow.ts, lines 152-180
600
-
601
- /**
602
- * Check if this workflow is a descendant of the given ancestor workflow
603
- * Traverses the parent chain upward looking for the ancestor reference
604
- * Uses visited Set to detect cycles during traversal
605
- *
606
- * @private
607
- * @param ancestor - The potential ancestor workflow to check
608
- * @returns true if ancestor is found in parent chain, false otherwise
609
- * @throws {Error} If a cycle is detected during traversal
610
- */
611
- private isDescendantOf(ancestor: Workflow): boolean {
612
- const visited = new Set<Workflow>();
613
- let current: Workflow | null = this.parent;
614
-
615
- while (current !== null) {
616
- if (visited.has(current)) {
617
- throw new Error('Circular parent-child relationship detected');
618
- }
619
- visited.add(current);
620
-
621
- if (current === ancestor) {
622
- return true;
623
- }
624
-
625
- current = current.parent;
626
- }
627
-
628
- return false;
629
- }
630
- ```
631
-
632
- ### Proposed Implementation (After Change)
633
-
634
- ```typescript
635
- // File: src/core/workflow.ts, lines 152-190 (proposed)
636
-
637
- /**
638
- * Check if this workflow is a descendant of the given ancestor workflow.
639
- *
640
- * Traverses the parent chain upward looking for the ancestor reference.
641
- * Uses a visited Set to detect cycles during traversal. This method provides
642
- * a convenient way to check workflow hierarchy relationships without manually
643
- * traversing the parent chain.
644
- *
645
- * @warning This method reveals workflow hierarchy information. If your
646
- * application exposes workflows via an API, ensure you implement proper
647
- * access control to prevent unauthorized topology discovery. Note that
648
- * the `parent` and `children` properties are already public, so this
649
- * method does not expose any new information beyond what is currently
650
- * accessible.
651
- *
652
- * **Time Complexity**: O(d) where d is the depth of the hierarchy
653
- * **Space Complexity**: O(d) for the visited Set in worst case (cycle detection)
654
- *
655
- * @example Check if a workflow belongs to a specific hierarchy
656
- * ```typescript
657
- * const root = new Workflow('root');
658
- * const child = new Workflow('child', { parent: root });
659
- *
660
- * if (child.isDescendantOf(root)) {
661
- * console.log('Child is in root hierarchy');
662
- * }
663
- * ```
664
- *
665
- * @example Validate before attaching to prevent circular references
666
- * ```typescript
667
- * if (!newChild.isDescendantOf(parent)) {
668
- * parent.attachChild(newChild);
669
- * } else {
670
- * throw new Error('Would create circular reference');
671
- * }
672
- * ```
673
- *
674
- * @example Check for ancestor relationship in conditional logic
675
- * ```typescript
676
- * const isInProductionBranch = workflow.isDescendantOf(productionRoot);
677
- * if (isInProductionBranch) {
678
- * // Apply production-specific logic
679
- * }
680
- * ```
681
- *
682
- * @param ancestor - The potential ancestor workflow to check
683
- * @returns true if ancestor is found in parent chain, false otherwise
684
- * @throws {Error} If a cycle is detected during traversal (indicates corrupted tree structure)
685
- */
686
- public isDescendantOf(ancestor: Workflow): boolean {
687
- const visited = new Set<Workflow>();
688
- let current: Workflow | null = this.parent;
689
-
690
- while (current !== null) {
691
- if (visited.has(current)) {
692
- throw new Error('Circular parent-child relationship detected');
693
- }
694
- visited.add(current);
695
-
696
- if (current === ancestor) {
697
- return true;
698
- }
699
-
700
- current = current.parent;
701
- }
702
-
703
- return false;
704
- }
705
- ```
706
-
707
- ### Security Documentation Addition
708
-
709
- ```markdown
710
- # Add to: plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md
711
- # Location: After Threat 4 (Denial of Service), before Implementation Checklist
712
-
713
- ### Threat 5: Topology Exposure via isDescendantOf
714
-
715
- **Attack Scenario:**
716
- ```
717
- Attacker → Calls workflow.isDescendantOf(suspectWorkflow)
718
- → Learns hierarchy relationship between workflows
719
- → Maps workflow tree structure
720
- → Extracts business intelligence from topology
721
- ```
722
-
723
- **Risk Level:** LOW (same as current exposure)
724
-
725
- **Rationale:**
726
- - `parent` and `children` properties are already public
727
- - `getNode()` exposes full tree structure
728
- - `isDescendantOf()` only provides convenience, not new information
729
- - Attacker can already traverse tree manually
730
-
731
- **Affected Method:** `Workflow.isDescendantOf()` (newly public)
732
-
733
- **Mitigation:**
734
- 1. **Application-Level Access Control** - If exposing workflows via API:
735
- ```typescript
736
- // Validate user has permission to access workflow
737
- if (!user.canAccessWorkflow(workflowId)) {
738
- throw new Error('Unauthorized');
739
- }
740
- // Only then allow isDescendantOf calls
741
- ```
742
-
743
- 2. **Filter Hierarchy Information** - For unauthenticated users:
744
- ```typescript
745
- // Return filtered view without hierarchy
746
- const filteredWorkflow = {
747
- id: workflow.id,
748
- name: workflow.name,
749
- // Omit parent, children, isDescendantOf
750
- };
751
- ```
752
-
753
- 3. **Audit Topology Access** - Log calls to isDescendantOf:
754
- ```typescript
755
- auditLog.log({
756
- timestamp: Date.now(),
757
- userId: user.id,
758
- action: 'isDescendantOf',
759
- workflowId: workflow.id,
760
- ancestorId: ancestor.id
761
- });
762
- ```
763
-
764
- **Recommendation:** Document that applications should implement access control
765
- if exposing workflows via APIs. The library itself provides no built-in security.
766
- ```
767
-
768
- ---
769
-
770
- ## Confidence Score
771
-
772
- **One-Pass Implementation Success Likelihood**: **9/10**
773
-
774
- **Rationale**:
775
- - S1 research and recommendation are comprehensive and clear
776
- - Implementation is straightforward (one keyword change + documentation)
777
- - Existing tests already cover the functionality (25+ test cases)
778
- - No logic changes required, minimizing risk
779
- - Clear documentation patterns exist in codebase to follow
780
- - Security implications are well-understood and documented
781
-
782
- **Risk Mitigation**:
783
- - Comprehensive JSDoc with security warning prevents misuse
784
- - Security documentation update addresses information disclosure
785
- - All changes are backward compatible (private → public only adds capability)
786
- - Existing test suite provides safety net
787
-
788
- ---
789
-
790
- **PRP Version**: 1.0
791
- **Last Updated**: 2026-01-12
792
- **Status**: Ready for Implementation