groundswell 0.0.1 → 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 (451) hide show
  1. package/CHANGELOG.md +188 -0
  2. package/README.md +99 -5
  3. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts +16 -0
  4. package/dist/__tests__/adversarial/attachChild-performance.test.d.ts.map +1 -0
  5. package/dist/__tests__/adversarial/attachChild-performance.test.js +187 -0
  6. package/dist/__tests__/adversarial/attachChild-performance.test.js.map +1 -0
  7. package/dist/__tests__/adversarial/circular-reference.test.d.ts +13 -0
  8. package/dist/__tests__/adversarial/circular-reference.test.d.ts.map +1 -0
  9. package/dist/__tests__/adversarial/circular-reference.test.js +92 -0
  10. package/dist/__tests__/adversarial/circular-reference.test.js.map +1 -0
  11. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts +16 -0
  12. package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts.map +1 -0
  13. package/dist/__tests__/adversarial/complex-circular-reference.test.js +127 -0
  14. package/dist/__tests__/adversarial/complex-circular-reference.test.js.map +1 -0
  15. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts +21 -0
  16. package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts.map +1 -0
  17. package/dist/__tests__/adversarial/concurrent-task-failures.test.js +667 -0
  18. package/dist/__tests__/adversarial/concurrent-task-failures.test.js.map +1 -0
  19. package/dist/__tests__/adversarial/deep-analysis.test.d.ts +6 -0
  20. package/dist/__tests__/adversarial/deep-analysis.test.d.ts.map +1 -0
  21. package/dist/__tests__/adversarial/deep-analysis.test.js +877 -0
  22. package/dist/__tests__/adversarial/deep-analysis.test.js.map +1 -0
  23. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts +13 -0
  24. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts.map +1 -0
  25. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js +186 -0
  26. package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js.map +1 -0
  27. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts +6 -0
  28. package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts.map +1 -0
  29. package/dist/__tests__/adversarial/e2e-prd-validation.test.js +626 -0
  30. package/dist/__tests__/adversarial/e2e-prd-validation.test.js.map +1 -0
  31. package/dist/__tests__/adversarial/edge-case.test.d.ts +6 -0
  32. package/dist/__tests__/adversarial/edge-case.test.d.ts.map +1 -0
  33. package/dist/__tests__/adversarial/edge-case.test.js +857 -0
  34. package/dist/__tests__/adversarial/edge-case.test.js.map +1 -0
  35. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts +20 -0
  36. package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts.map +1 -0
  37. package/dist/__tests__/adversarial/error-merge-strategy.test.js +907 -0
  38. package/dist/__tests__/adversarial/error-merge-strategy.test.js.map +1 -0
  39. package/dist/__tests__/adversarial/incremental-performance.test.d.ts +2 -0
  40. package/dist/__tests__/adversarial/incremental-performance.test.d.ts.map +1 -0
  41. package/dist/__tests__/adversarial/incremental-performance.test.js +113 -0
  42. package/dist/__tests__/adversarial/incremental-performance.test.js.map +1 -0
  43. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts +22 -0
  44. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts.map +1 -0
  45. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js +383 -0
  46. package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js.map +1 -0
  47. package/dist/__tests__/adversarial/observer-propagation.test.d.ts +21 -0
  48. package/dist/__tests__/adversarial/observer-propagation.test.d.ts.map +1 -0
  49. package/dist/__tests__/adversarial/observer-propagation.test.js +404 -0
  50. package/dist/__tests__/adversarial/observer-propagation.test.js.map +1 -0
  51. package/dist/__tests__/adversarial/parent-validation.test.d.ts +13 -0
  52. package/dist/__tests__/adversarial/parent-validation.test.d.ts.map +1 -0
  53. package/dist/__tests__/adversarial/parent-validation.test.js +128 -0
  54. package/dist/__tests__/adversarial/parent-validation.test.js.map +1 -0
  55. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts +20 -0
  56. package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts.map +1 -0
  57. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js +482 -0
  58. package/dist/__tests__/adversarial/prd-12-2-compliance.test.js.map +1 -0
  59. package/dist/__tests__/adversarial/prd-compliance.test.d.ts +6 -0
  60. package/dist/__tests__/adversarial/prd-compliance.test.d.ts.map +1 -0
  61. package/dist/__tests__/adversarial/prd-compliance.test.js +886 -0
  62. package/dist/__tests__/adversarial/prd-compliance.test.js.map +1 -0
  63. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts +22 -0
  64. package/dist/__tests__/compatibility/backward-compatibility.test.d.ts.map +1 -0
  65. package/dist/__tests__/compatibility/backward-compatibility.test.js +1843 -0
  66. package/dist/__tests__/compatibility/backward-compatibility.test.js.map +1 -0
  67. package/dist/__tests__/helpers/index.d.ts +10 -0
  68. package/dist/__tests__/helpers/index.d.ts.map +1 -0
  69. package/dist/__tests__/helpers/index.js +10 -0
  70. package/dist/__tests__/helpers/index.js.map +1 -0
  71. package/dist/__tests__/helpers/tree-verification.d.ts +90 -0
  72. package/dist/__tests__/helpers/tree-verification.d.ts.map +1 -0
  73. package/dist/__tests__/helpers/tree-verification.js +202 -0
  74. package/dist/__tests__/helpers/tree-verification.js.map +1 -0
  75. package/dist/__tests__/integration/agent-workflow.test.d.ts +2 -0
  76. package/dist/__tests__/integration/agent-workflow.test.d.ts.map +1 -0
  77. package/dist/__tests__/integration/agent-workflow.test.js +256 -0
  78. package/dist/__tests__/integration/agent-workflow.test.js.map +1 -0
  79. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts +14 -0
  80. package/dist/__tests__/integration/bidirectional-consistency.test.d.ts.map +1 -0
  81. package/dist/__tests__/integration/bidirectional-consistency.test.js +668 -0
  82. package/dist/__tests__/integration/bidirectional-consistency.test.js.map +1 -0
  83. package/dist/__tests__/integration/observer-logging.test.d.ts +2 -0
  84. package/dist/__tests__/integration/observer-logging.test.d.ts.map +1 -0
  85. package/dist/__tests__/integration/observer-logging.test.js +517 -0
  86. package/dist/__tests__/integration/observer-logging.test.js.map +1 -0
  87. package/dist/__tests__/integration/tree-mirroring.test.d.ts +2 -0
  88. package/dist/__tests__/integration/tree-mirroring.test.d.ts.map +1 -0
  89. package/dist/__tests__/integration/tree-mirroring.test.js +117 -0
  90. package/dist/__tests__/integration/tree-mirroring.test.js.map +1 -0
  91. package/dist/__tests__/integration/workflow-reparenting.test.d.ts +12 -0
  92. package/dist/__tests__/integration/workflow-reparenting.test.d.ts.map +1 -0
  93. package/dist/__tests__/integration/workflow-reparenting.test.js +239 -0
  94. package/dist/__tests__/integration/workflow-reparenting.test.js.map +1 -0
  95. package/dist/__tests__/unit/agent.test.d.ts +2 -0
  96. package/dist/__tests__/unit/agent.test.d.ts.map +1 -0
  97. package/dist/__tests__/unit/agent.test.js +143 -0
  98. package/dist/__tests__/unit/agent.test.js.map +1 -0
  99. package/dist/__tests__/unit/cache-key.test.d.ts +5 -0
  100. package/dist/__tests__/unit/cache-key.test.d.ts.map +1 -0
  101. package/dist/__tests__/unit/cache-key.test.js +145 -0
  102. package/dist/__tests__/unit/cache-key.test.js.map +1 -0
  103. package/dist/__tests__/unit/cache.test.d.ts +5 -0
  104. package/dist/__tests__/unit/cache.test.d.ts.map +1 -0
  105. package/dist/__tests__/unit/cache.test.js +132 -0
  106. package/dist/__tests__/unit/cache.test.js.map +1 -0
  107. package/dist/__tests__/unit/context.test.d.ts +2 -0
  108. package/dist/__tests__/unit/context.test.d.ts.map +1 -0
  109. package/dist/__tests__/unit/context.test.js +220 -0
  110. package/dist/__tests__/unit/context.test.js.map +1 -0
  111. package/dist/__tests__/unit/decorators.test.d.ts +2 -0
  112. package/dist/__tests__/unit/decorators.test.d.ts.map +1 -0
  113. package/dist/__tests__/unit/decorators.test.js +162 -0
  114. package/dist/__tests__/unit/decorators.test.js.map +1 -0
  115. package/dist/__tests__/unit/introspection-tools.test.d.ts +5 -0
  116. package/dist/__tests__/unit/introspection-tools.test.d.ts.map +1 -0
  117. package/dist/__tests__/unit/introspection-tools.test.js +191 -0
  118. package/dist/__tests__/unit/introspection-tools.test.js.map +1 -0
  119. package/dist/__tests__/unit/logger.test.d.ts +2 -0
  120. package/dist/__tests__/unit/logger.test.d.ts.map +1 -0
  121. package/dist/__tests__/unit/logger.test.js +241 -0
  122. package/dist/__tests__/unit/logger.test.js.map +1 -0
  123. package/dist/__tests__/unit/observable.test.d.ts +2 -0
  124. package/dist/__tests__/unit/observable.test.d.ts.map +1 -0
  125. package/dist/__tests__/unit/observable.test.js +251 -0
  126. package/dist/__tests__/unit/observable.test.js.map +1 -0
  127. package/dist/__tests__/unit/prompt.test.d.ts +2 -0
  128. package/dist/__tests__/unit/prompt.test.d.ts.map +1 -0
  129. package/dist/__tests__/unit/prompt.test.js +113 -0
  130. package/dist/__tests__/unit/prompt.test.js.map +1 -0
  131. package/dist/__tests__/unit/reflection.test.d.ts +5 -0
  132. package/dist/__tests__/unit/reflection.test.d.ts.map +1 -0
  133. package/dist/__tests__/unit/reflection.test.js +160 -0
  134. package/dist/__tests__/unit/reflection.test.js.map +1 -0
  135. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts +2 -0
  136. package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts.map +1 -0
  137. package/dist/__tests__/unit/tree-debugger-incremental.test.js +136 -0
  138. package/dist/__tests__/unit/tree-debugger-incremental.test.js.map +1 -0
  139. package/dist/__tests__/unit/tree-debugger.test.d.ts +2 -0
  140. package/dist/__tests__/unit/tree-debugger.test.d.ts.map +1 -0
  141. package/dist/__tests__/unit/tree-debugger.test.js +69 -0
  142. package/dist/__tests__/unit/tree-debugger.test.js.map +1 -0
  143. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts +2 -0
  144. package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts.map +1 -0
  145. package/dist/__tests__/unit/utils/workflow-error-utils.test.js +154 -0
  146. package/dist/__tests__/unit/utils/workflow-error-utils.test.js.map +1 -0
  147. package/dist/__tests__/unit/workflow-detachChild.test.d.ts +2 -0
  148. package/dist/__tests__/unit/workflow-detachChild.test.d.ts.map +1 -0
  149. package/dist/__tests__/unit/workflow-detachChild.test.js +76 -0
  150. package/dist/__tests__/unit/workflow-detachChild.test.js.map +1 -0
  151. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts +2 -0
  152. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts.map +1 -0
  153. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js +122 -0
  154. package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js.map +1 -0
  155. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts +2 -0
  156. package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts.map +1 -0
  157. package/dist/__tests__/unit/workflow-isDescendantOf.test.js +140 -0
  158. package/dist/__tests__/unit/workflow-isDescendantOf.test.js.map +1 -0
  159. package/dist/__tests__/unit/workflow.test.d.ts +2 -0
  160. package/dist/__tests__/unit/workflow.test.d.ts.map +1 -0
  161. package/dist/__tests__/unit/workflow.test.js +330 -0
  162. package/dist/__tests__/unit/workflow.test.js.map +1 -0
  163. package/dist/cache/cache-key.d.ts +66 -0
  164. package/dist/cache/cache-key.d.ts.map +1 -0
  165. package/dist/cache/cache-key.js +195 -0
  166. package/dist/cache/cache-key.js.map +1 -0
  167. package/dist/cache/cache.d.ts +104 -0
  168. package/dist/cache/cache.d.ts.map +1 -0
  169. package/dist/cache/cache.js +179 -0
  170. package/dist/cache/cache.js.map +1 -0
  171. package/{src/cache/index.ts → dist/cache/index.d.ts} +1 -1
  172. package/dist/cache/index.d.ts.map +1 -0
  173. package/dist/cache/index.js +6 -0
  174. package/dist/cache/index.js.map +1 -0
  175. package/dist/core/agent.d.ts +112 -0
  176. package/dist/core/agent.d.ts.map +1 -0
  177. package/dist/core/agent.js +426 -0
  178. package/dist/core/agent.js.map +1 -0
  179. package/{src/core/context.ts → dist/core/context.d.ts} +16 -67
  180. package/dist/core/context.d.ts.map +1 -0
  181. package/dist/core/context.js +80 -0
  182. package/dist/core/context.js.map +1 -0
  183. package/dist/core/event-tree.d.ts +72 -0
  184. package/dist/core/event-tree.d.ts.map +1 -0
  185. package/dist/core/event-tree.js +211 -0
  186. package/dist/core/event-tree.js.map +1 -0
  187. package/{src/core/factory.ts → dist/core/factory.d.ts} +6 -27
  188. package/dist/core/factory.d.ts.map +1 -0
  189. package/dist/core/factory.js +110 -0
  190. package/dist/core/factory.js.map +1 -0
  191. package/{src/core/index.ts → dist/core/index.d.ts} +2 -10
  192. package/dist/core/index.d.ts.map +1 -0
  193. package/dist/core/index.js +9 -0
  194. package/dist/core/index.js.map +1 -0
  195. package/dist/core/logger.d.ts +50 -0
  196. package/dist/core/logger.d.ts.map +1 -0
  197. package/dist/core/logger.js +91 -0
  198. package/dist/core/logger.js.map +1 -0
  199. package/dist/core/mcp-handler.d.ts +69 -0
  200. package/dist/core/mcp-handler.d.ts.map +1 -0
  201. package/dist/core/mcp-handler.js +143 -0
  202. package/dist/core/mcp-handler.js.map +1 -0
  203. package/dist/core/prompt.d.ts +80 -0
  204. package/dist/core/prompt.d.ts.map +1 -0
  205. package/dist/core/prompt.js +120 -0
  206. package/dist/core/prompt.js.map +1 -0
  207. package/dist/core/workflow-context.d.ts +57 -0
  208. package/dist/core/workflow-context.d.ts.map +1 -0
  209. package/dist/core/workflow-context.js +263 -0
  210. package/dist/core/workflow-context.js.map +1 -0
  211. package/dist/core/workflow.d.ts +241 -0
  212. package/dist/core/workflow.d.ts.map +1 -0
  213. package/dist/core/workflow.js +464 -0
  214. package/dist/core/workflow.js.map +1 -0
  215. package/dist/debugger/index.d.ts +2 -0
  216. package/dist/debugger/index.d.ts.map +1 -0
  217. package/{src/debugger/index.ts → dist/debugger/index.js} +1 -0
  218. package/dist/debugger/index.js.map +1 -0
  219. package/dist/debugger/tree-debugger.d.ts +71 -0
  220. package/dist/debugger/tree-debugger.d.ts.map +1 -0
  221. package/dist/debugger/tree-debugger.js +198 -0
  222. package/dist/debugger/tree-debugger.js.map +1 -0
  223. package/dist/decorators/index.d.ts +4 -0
  224. package/dist/decorators/index.d.ts.map +1 -0
  225. package/{src/decorators/index.ts → dist/decorators/index.js} +1 -0
  226. package/dist/decorators/index.js.map +1 -0
  227. package/dist/decorators/observed-state.d.ts +32 -0
  228. package/dist/decorators/observed-state.d.ts.map +1 -0
  229. package/dist/decorators/observed-state.js +79 -0
  230. package/dist/decorators/observed-state.js.map +1 -0
  231. package/dist/decorators/step.d.ts +15 -0
  232. package/dist/decorators/step.d.ts.map +1 -0
  233. package/dist/decorators/step.js +110 -0
  234. package/dist/decorators/step.js.map +1 -0
  235. package/dist/decorators/task.d.ts +50 -0
  236. package/dist/decorators/task.d.ts.map +1 -0
  237. package/dist/decorators/task.js +118 -0
  238. package/dist/decorators/task.js.map +1 -0
  239. package/dist/examples/index.d.ts +3 -0
  240. package/dist/examples/index.d.ts.map +1 -0
  241. package/{src/examples/index.ts → dist/examples/index.js} +1 -0
  242. package/dist/examples/index.js.map +1 -0
  243. package/dist/examples/tdd-orchestrator.d.ts +15 -0
  244. package/dist/examples/tdd-orchestrator.d.ts.map +1 -0
  245. package/dist/examples/tdd-orchestrator.js +121 -0
  246. package/dist/examples/tdd-orchestrator.js.map +1 -0
  247. package/dist/examples/test-cycle-workflow.d.ts +14 -0
  248. package/dist/examples/test-cycle-workflow.d.ts.map +1 -0
  249. package/dist/examples/test-cycle-workflow.js +116 -0
  250. package/dist/examples/test-cycle-workflow.js.map +1 -0
  251. package/dist/index.d.ts +27 -0
  252. package/dist/index.d.ts.map +1 -0
  253. package/dist/index.js +40 -0
  254. package/dist/index.js.map +1 -0
  255. package/dist/reflection/index.d.ts +5 -0
  256. package/dist/reflection/index.d.ts.map +1 -0
  257. package/{src/reflection/index.ts → dist/reflection/index.js} +1 -1
  258. package/dist/reflection/index.js.map +1 -0
  259. package/dist/reflection/reflection.d.ts +84 -0
  260. package/dist/reflection/reflection.d.ts.map +1 -0
  261. package/dist/reflection/reflection.js +329 -0
  262. package/dist/reflection/reflection.js.map +1 -0
  263. package/dist/tools/index.d.ts +6 -0
  264. package/dist/tools/index.d.ts.map +1 -0
  265. package/dist/tools/index.js +11 -0
  266. package/dist/tools/index.js.map +1 -0
  267. package/dist/tools/introspection.d.ts +165 -0
  268. package/dist/tools/introspection.d.ts.map +1 -0
  269. package/dist/tools/introspection.js +324 -0
  270. package/dist/tools/introspection.js.map +1 -0
  271. package/dist/types/agent.d.ts +66 -0
  272. package/dist/types/agent.d.ts.map +1 -0
  273. package/dist/types/agent.js +6 -0
  274. package/dist/types/agent.js.map +1 -0
  275. package/dist/types/decorators.d.ts +31 -0
  276. package/dist/types/decorators.d.ts.map +1 -0
  277. package/dist/types/decorators.js +2 -0
  278. package/dist/types/decorators.js.map +1 -0
  279. package/dist/types/error-strategy.d.ts +13 -0
  280. package/dist/types/error-strategy.d.ts.map +1 -0
  281. package/dist/types/error-strategy.js +2 -0
  282. package/dist/types/error-strategy.js.map +1 -0
  283. package/dist/types/error.d.ts +20 -0
  284. package/dist/types/error.d.ts.map +1 -0
  285. package/dist/types/error.js +2 -0
  286. package/dist/types/error.js.map +1 -0
  287. package/dist/types/events.d.ts +87 -0
  288. package/dist/types/events.d.ts.map +1 -0
  289. package/dist/types/events.js +2 -0
  290. package/dist/types/events.js.map +1 -0
  291. package/dist/types/index.d.ts +15 -0
  292. package/dist/types/index.d.ts.map +1 -0
  293. package/dist/types/index.js +2 -0
  294. package/dist/types/index.js.map +1 -0
  295. package/dist/types/logging.d.ts +24 -0
  296. package/dist/types/logging.d.ts.map +1 -0
  297. package/dist/types/logging.js +2 -0
  298. package/dist/types/logging.js.map +1 -0
  299. package/dist/types/observer.d.ts +18 -0
  300. package/dist/types/observer.d.ts.map +1 -0
  301. package/dist/types/observer.js +2 -0
  302. package/dist/types/observer.js.map +1 -0
  303. package/dist/types/prompt.d.ts +31 -0
  304. package/dist/types/prompt.d.ts.map +1 -0
  305. package/dist/types/prompt.js +6 -0
  306. package/dist/types/prompt.js.map +1 -0
  307. package/dist/types/reflection.d.ts +96 -0
  308. package/dist/types/reflection.d.ts.map +1 -0
  309. package/dist/types/reflection.js +24 -0
  310. package/dist/types/reflection.js.map +1 -0
  311. package/dist/types/sdk-primitives.d.ts +118 -0
  312. package/dist/types/sdk-primitives.d.ts.map +1 -0
  313. package/dist/types/sdk-primitives.js +6 -0
  314. package/dist/types/sdk-primitives.js.map +1 -0
  315. package/{src/types/snapshot.ts → dist/types/snapshot.d.ts} +5 -5
  316. package/dist/types/snapshot.d.ts.map +1 -0
  317. package/dist/types/snapshot.js +2 -0
  318. package/dist/types/snapshot.js.map +1 -0
  319. package/dist/types/workflow-context.d.ts +139 -0
  320. package/dist/types/workflow-context.d.ts.map +1 -0
  321. package/dist/types/workflow-context.js +8 -0
  322. package/dist/types/workflow-context.js.map +1 -0
  323. package/dist/types/workflow.d.ts +30 -0
  324. package/dist/types/workflow.d.ts.map +1 -0
  325. package/dist/types/workflow.js +2 -0
  326. package/dist/types/workflow.js.map +1 -0
  327. package/dist/utils/id.d.ts +6 -0
  328. package/dist/utils/id.d.ts.map +1 -0
  329. package/dist/utils/id.js +12 -0
  330. package/dist/utils/id.js.map +1 -0
  331. package/{src/utils/index.ts → dist/utils/index.d.ts} +2 -0
  332. package/dist/utils/index.d.ts.map +1 -0
  333. package/dist/utils/index.js +4 -0
  334. package/dist/utils/index.js.map +1 -0
  335. package/dist/utils/observable.d.ts +54 -0
  336. package/dist/utils/observable.d.ts.map +1 -0
  337. package/dist/utils/observable.js +82 -0
  338. package/dist/utils/observable.js.map +1 -0
  339. package/dist/utils/workflow-error-utils.d.ts +22 -0
  340. package/dist/utils/workflow-error-utils.d.ts.map +1 -0
  341. package/dist/utils/workflow-error-utils.js +45 -0
  342. package/dist/utils/workflow-error-utils.js.map +1 -0
  343. package/package.json +7 -2
  344. package/.claude/settings.local.json +0 -9
  345. package/.claude/system_prompts/task-breakdown.md +0 -100
  346. package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
  347. package/PRPs/PRDs/001-hierarchical-workflow-engine.md +0 -543
  348. package/PRPs/PRDs/002-agent-prompt.md +0 -390
  349. package/PRPs/PRDs/003-agent-prompt.md +0 -943
  350. package/PRPs/PRDs/004-agent-prompt.md +0 -1136
  351. package/PRPs/PRDs/tasks-001.json +0 -492
  352. package/PRPs/README.md +0 -83
  353. package/PRPs/templates/prp_base.md +0 -222
  354. package/docs/agent.md +0 -422
  355. package/docs/prompt.md +0 -419
  356. package/docs/workflow.md +0 -600
  357. package/examples/README.md +0 -244
  358. package/examples/examples/01-basic-workflow.ts +0 -100
  359. package/examples/examples/02-decorator-options.ts +0 -217
  360. package/examples/examples/03-parent-child.ts +0 -241
  361. package/examples/examples/04-observers-debugger.ts +0 -340
  362. package/examples/examples/05-error-handling.ts +0 -387
  363. package/examples/examples/06-concurrent-tasks.ts +0 -352
  364. package/examples/examples/07-agent-loops.ts +0 -432
  365. package/examples/examples/08-sdk-features.ts +0 -667
  366. package/examples/examples/09-reflection.ts +0 -573
  367. package/examples/examples/10-introspection.ts +0 -550
  368. package/examples/index.ts +0 -143
  369. package/examples/utils/helpers.ts +0 -57
  370. package/llms_full.txt +0 -5890
  371. package/plan/P1P2/PRP.md +0 -527
  372. package/plan/P1P2/research/LRU_CACHE_BEST_PRACTICES.md +0 -1929
  373. package/plan/P1P2/research/LRU_CACHE_CODE_PATTERNS.md +0 -857
  374. package/plan/P1P2/research/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
  375. package/plan/P1P2/research/LRU_CACHE_RESEARCH_INDEX.md +0 -424
  376. package/plan/P1P2/research/REFLECTION_INDEX.md +0 -291
  377. package/plan/P1P2/research/REFLECTION_RESEARCH_REPORT.md +0 -1342
  378. package/plan/P1P2/research/RESEARCH_SUMMARY.md +0 -342
  379. package/plan/P1P2/research/anthropic-sdk.md +0 -174
  380. package/plan/P1P2/research/async-local-storage.md +0 -200
  381. package/plan/P1P2/research/reflection-code-patterns.md +0 -1205
  382. package/plan/P1P2/research/reflection-decision-matrix.md +0 -421
  383. package/plan/P1P2/research/reflection-implementation-guide.md +0 -1341
  384. package/plan/P1P2/research/reflection-integration-guide.md +0 -834
  385. package/plan/P1P2/research/reflection-patterns.md +0 -1468
  386. package/plan/P1P2/research/reflection-quick-reference.md +0 -558
  387. package/plan/P1P2/research/zod-schema.md +0 -152
  388. package/plan/P3P4/PRP.md +0 -1388
  389. package/plan/P3P4/research/caching-lru.md +0 -116
  390. package/plan/P3P4/research/introspection-tools.md +0 -177
  391. package/plan/P3P4/research/reflection-patterns.md +0 -117
  392. package/plan/P4P5/PRP.md +0 -1136
  393. package/plan/P4P5/research/RESEARCH_SUMMARY.md +0 -151
  394. package/plan/architecture/external_deps.md +0 -358
  395. package/plan/architecture/system_context.md +0 -242
  396. package/plan/backlog.json +0 -867
  397. package/plan/research/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
  398. package/plan/research/README-INTROSPECTION.md +0 -352
  399. package/plan/research/agent-introspection-patterns.md +0 -1085
  400. package/plan/research/introspection-security-guide.md +0 -928
  401. package/plan/research/introspection-tool-examples.md +0 -875
  402. package/scripts/generate-llms-full.ts +0 -206
  403. package/src/__tests__/integration/agent-workflow.test.ts +0 -256
  404. package/src/__tests__/integration/tree-mirroring.test.ts +0 -114
  405. package/src/__tests__/unit/agent.test.ts +0 -169
  406. package/src/__tests__/unit/cache-key.test.ts +0 -182
  407. package/src/__tests__/unit/cache.test.ts +0 -172
  408. package/src/__tests__/unit/context.test.ts +0 -138
  409. package/src/__tests__/unit/decorators.test.ts +0 -100
  410. package/src/__tests__/unit/introspection-tools.test.ts +0 -277
  411. package/src/__tests__/unit/prompt.test.ts +0 -135
  412. package/src/__tests__/unit/reflection.test.ts +0 -210
  413. package/src/__tests__/unit/tree-debugger.test.ts +0 -85
  414. package/src/__tests__/unit/workflow.test.ts +0 -81
  415. package/src/cache/cache-key.ts +0 -244
  416. package/src/cache/cache.ts +0 -236
  417. package/src/core/agent.ts +0 -573
  418. package/src/core/event-tree.ts +0 -260
  419. package/src/core/logger.ts +0 -87
  420. package/src/core/mcp-handler.ts +0 -184
  421. package/src/core/prompt.ts +0 -150
  422. package/src/core/workflow-context.ts +0 -349
  423. package/src/core/workflow.ts +0 -302
  424. package/src/debugger/tree-debugger.ts +0 -210
  425. package/src/decorators/observed-state.ts +0 -95
  426. package/src/decorators/step.ts +0 -139
  427. package/src/decorators/task.ts +0 -96
  428. package/src/examples/tdd-orchestrator.ts +0 -65
  429. package/src/examples/test-cycle-workflow.ts +0 -64
  430. package/src/index.ts +0 -140
  431. package/src/reflection/reflection.ts +0 -407
  432. package/src/tools/index.ts +0 -36
  433. package/src/tools/introspection.ts +0 -464
  434. package/src/types/agent.ts +0 -90
  435. package/src/types/decorators.ts +0 -25
  436. package/src/types/error-strategy.ts +0 -13
  437. package/src/types/error.ts +0 -20
  438. package/src/types/events.ts +0 -74
  439. package/src/types/index.ts +0 -55
  440. package/src/types/logging.ts +0 -24
  441. package/src/types/observer.ts +0 -18
  442. package/src/types/prompt.ts +0 -40
  443. package/src/types/reflection.ts +0 -117
  444. package/src/types/sdk-primitives.ts +0 -128
  445. package/src/types/workflow-context.ts +0 -163
  446. package/src/types/workflow.ts +0 -37
  447. package/src/utils/id.ts +0 -11
  448. package/src/utils/observable.ts +0 -77
  449. package/tasks.json +0 -0
  450. package/tsconfig.json +0 -22
  451. package/vitest.config.ts +0 -16
@@ -1,943 +0,0 @@
1
- # PRP: Caching, Reflection & Introspection Systems
2
-
3
- ## Phases 3 & 4 Implementation Plan
4
-
5
- > **PRP**: Product Requirements Package - A comprehensive implementation guide enabling one-pass success
6
-
7
- ---
8
-
9
- ## Pre-Implementation Checklist
10
-
11
- Before implementing, verify you have:
12
- - [ ] Read and understood this entire PRP
13
- - [ ] Read PRPs/PRDs/002-agent-prompt.md (prior phases)
14
- - [ ] Verified Phase 1 & 2 are complete (Agent, Prompt, Hierarchy integration)
15
- - [ ] Access to `./` codebase
16
- - [ ] npm dependencies installed: `@anthropic-ai/sdk`, `zod`
17
- - [ ] Understanding of existing patterns in `/src/core/agent.ts`, `/src/core/workflow.ts`
18
-
19
- ---
20
-
21
- ## 1. Goal
22
-
23
- ### Feature Goal
24
- Implement deterministic response caching, multi-level reflection capabilities, and agent introspection tools to complete the Groundswell orchestration framework per PRD Sections 9, 10, 11, and 12.
25
-
26
- ### Deliverable
27
- A complete system where:
28
- 1. LLM responses are cached with SHA-256 deterministic keys (PRD Section 9)
29
- 2. Reflection API provides automatic retry with self-correction at workflow, agent, and prompt levels (PRD Section 4.4)
30
- 3. Introspection tools allow agents to inspect/manipulate their hierarchy position (PRD Section 11)
31
- 4. Dynamic workflow/agent/prompt creation and context revision work seamlessly (PRD Section 10)
32
- 5. All 10 canonical examples are implemented (PRD Section 12)
33
-
34
- ### Success Definition
35
- - [ ] `npm run build` passes with no TypeScript errors
36
- - [ ] `npm test` passes all new and existing tests
37
- - [ ] Cache integration reduces redundant API calls in tests
38
- - [ ] Reflection triggers automatically on step/prompt failures
39
- - [ ] Agents can use introspection tools to navigate hierarchy
40
- - [ ] All 10 PRD examples execute successfully
41
-
42
- ---
43
-
44
- ## 2. Context
45
-
46
- ### External Documentation
47
- ```yaml
48
- anthropic_sdk:
49
- url: "https://github.com/anthropics/anthropic-sdk-typescript"
50
- purpose: "Tool definitions, message API"
51
- version: "^0.71.1"
52
-
53
- lru_cache:
54
- url: "https://www.npmjs.com/package/lru-cache"
55
- purpose: "LRU cache implementation with TTL support"
56
- version: "^10.0.0"
57
- note: "Zero external dependencies in v10+"
58
-
59
- node_crypto:
60
- url: "https://nodejs.org/api/crypto.html"
61
- purpose: "SHA-256 hashing for cache keys"
62
- section: "createHash"
63
-
64
- zod:
65
- url: "https://zod.dev/"
66
- purpose: "Schema validation, _def access for hashing"
67
- version: "^3.23.0"
68
- ```
69
-
70
- ### Codebase Context
71
- ```yaml
72
- existing_patterns:
73
- - file: "/src/core/agent.ts"
74
- pattern: "Agent class with prompt() method"
75
- follow_for: "Cache integration point in executePrompt()"
76
- line: 171
77
-
78
- - file: "/src/core/workflow-context.ts"
79
- pattern: "ReflectionAPIImpl placeholder"
80
- follow_for: "Full ReflectionAPI implementation"
81
- line: 24
82
-
83
- - file: "/src/core/context.ts"
84
- pattern: "AgentExecutionContext with AsyncLocalStorage"
85
- follow_for: "Introspection tool handlers accessing context"
86
-
87
- - file: "/src/types/events.ts"
88
- pattern: "WorkflowEvent discriminated union"
89
- follow_for: "Already includes reflectionStart/reflectionEnd types"
90
-
91
- - file: "/src/core/mcp-handler.ts"
92
- pattern: "Tool registration and execution"
93
- follow_for: "Introspection tool registration pattern"
94
-
95
- related_files:
96
- - path: "/src/types/workflow-context.ts"
97
- relationship: "ReflectionAPI interface definition (line 70)"
98
-
99
- - path: "/src/core/event-tree.ts"
100
- relationship: "EventTreeHandle for introspection queries"
101
-
102
- - path: "/src/utils/id.ts"
103
- relationship: "generateId() for cache key prefixes"
104
-
105
- naming_conventions:
106
- files: "kebab-case.ts in appropriate directory"
107
- classes: "PascalCase (e.g., LRUCache, ReflectionManager)"
108
- functions: "camelCase (e.g., generateCacheKey, triggerReflection)"
109
- types: "PascalCase with descriptive suffixes (e.g., CacheConfig, ReflectionEntry)"
110
- tools: "snake_case for Anthropic tool names (e.g., inspect_current_node)"
111
- ```
112
-
113
- ### Technical Constraints
114
- ```yaml
115
- typescript:
116
- version: "5.2+"
117
- config_requirements:
118
- - "strict: true"
119
- - "module: NodeNext"
120
- - "moduleResolution: NodeNext"
121
-
122
- dependencies:
123
- required:
124
- - name: "lru-cache"
125
- version: "^10.0.0"
126
- purpose: "LRU cache with size/TTL limits"
127
- existing:
128
- - name: "@anthropic-ai/sdk"
129
- version: "^0.71.1"
130
- - name: "zod"
131
- version: "^3.23.0"
132
-
133
- runtime:
134
- node_version: "18+"
135
- target: "ES2022"
136
- ```
137
-
138
- ### Known Gotchas
139
- ```yaml
140
- pitfalls:
141
- - issue: "JSON.stringify does not guarantee key order"
142
- solution: "Use deterministicStringify with sorted keys for cache key generation"
143
- file: "/plan/P3P4/research/caching-lru.md"
144
-
145
- - issue: "Zod schemas are functions, cannot serialize directly"
146
- solution: "Hash schema._def for schema fingerprint in cache key"
147
-
148
- - issue: "Reflection can infinite loop"
149
- solution: "Hard limit maxReflectionAttempts to 3, track attempt count"
150
-
151
- - issue: "AsyncLocalStorage context loss in some async patterns"
152
- solution: "Always use runInContext() wrapper, test with nested async/await"
153
-
154
- - issue: "Tool handlers need access to current context"
155
- solution: "Use getExecutionContext() from context.ts inside tool handlers"
156
- ```
157
-
158
- ---
159
-
160
- ## 3. Implementation Tasks
161
-
162
- > Tasks are ordered by dependency. Complete each task fully before moving to the next.
163
-
164
- ### Phase 3: Caching & Reflection Systems
165
-
166
- ---
167
-
168
- ### Task P3.1: Cache Key Generation
169
- **Depends on**: Phase 1 & 2 complete
170
-
171
- **Input**:
172
- - Prompt instance with user, data, responseFormat
173
- - Merged AgentConfig (system, tools, mcps, skills, temperature, model)
174
-
175
- **Steps**:
176
- 1. Create `/src/cache/cache-key.ts`
177
- 2. Implement `deterministicStringify(value: unknown): string`
178
- - Sort object keys alphabetically
179
- - Handle arrays, primitives, null, undefined
180
- - Detect circular references with WeakSet
181
- 3. Implement `getSchemaHash(schema: z.ZodType): string`
182
- - Access `schema._def` for internal representation
183
- - Hash with SHA-256
184
- 4. Implement `generateCacheKey(inputs: CacheKeyInputs): string`
185
- - Include: user, data, system, model, temperature, maxTokens
186
- - Include: sorted tool names, sorted mcp names, sorted skill names
187
- - Include: schemaHash from responseFormat
188
- - Return 64-character hex SHA-256 digest
189
- 5. Export `CacheKeyInputs` interface and functions
190
-
191
- **Output**: `/src/cache/cache-key.ts` with deterministic key generation
192
-
193
- **Validation**:
194
- ```bash
195
- # Unit test: same input always produces same key
196
- npm test -- --grep "cache-key"
197
- ```
198
-
199
- ---
200
-
201
- ### Task P3.2: LRU Cache Implementation
202
- **Depends on**: Task P3.1
203
-
204
- **Input**: Cache interface from PRD Section 9.2
205
-
206
- **Steps**:
207
- 1. Add `lru-cache@^10.0.0` to package.json dependencies
208
- 2. Create `/src/cache/cache.ts`
209
- 3. Define `CacheConfig` interface:
210
- ```typescript
211
- interface CacheConfig {
212
- maxItems?: number; // default: 1000
213
- maxSizeBytes?: number; // default: 50MB
214
- defaultTTLMs?: number; // default: 1 hour
215
- }
216
- ```
217
- 4. Implement `LLMCache` class:
218
- - Constructor accepting CacheConfig
219
- - `get(key: string): Promise<T | undefined>`
220
- - `set(key: string, value: T, ttl?: number): Promise<void>`
221
- - `bust(key: string): Promise<void>`
222
- - `bustPrefix(prefix: string): Promise<void>`
223
- - `metrics(): CacheMetrics`
224
- 5. Implement prefix tracking with Map<string, Set<string>> for bustPrefix
225
- 6. Export singleton `defaultCache` instance
226
-
227
- **Output**: `/src/cache/cache.ts` with full Cache implementation
228
-
229
- **Validation**:
230
- ```bash
231
- npm test -- --grep "LLMCache"
232
- ```
233
-
234
- ---
235
-
236
- ### Task P3.3: Cache Integration into Agent
237
- **Depends on**: Task P3.2
238
-
239
- **Input**: Agent.executePrompt() method at `/src/core/agent.ts:171`
240
-
241
- **Steps**:
242
- 1. Import `generateCacheKey` and `defaultCache` in agent.ts
243
- 2. Add cache check at start of `executePrompt()`:
244
- ```typescript
245
- if (this.config.enableCache && !overrides?.disableCache) {
246
- const cacheKey = generateCacheKey({...});
247
- const cached = await defaultCache.get(cacheKey);
248
- if (cached) {
249
- // Return cached result
250
- }
251
- }
252
- ```
253
- 3. Add cache set after successful response:
254
- ```typescript
255
- if (this.config.enableCache && !overrides?.disableCache) {
256
- await defaultCache.set(cacheKey, result);
257
- }
258
- ```
259
- 4. Emit cache hit/miss events if in workflow context:
260
- ```typescript
261
- { type: 'cacheHit' | 'cacheMiss'; key: string; node: WorkflowNode }
262
- ```
263
- 5. Update `/src/types/events.ts` to add cacheHit/cacheMiss event types
264
-
265
- **Output**: Agent.prompt() checks and populates cache
266
-
267
- **Validation**:
268
- ```bash
269
- # Integration test: second identical prompt returns cached
270
- npm test -- --grep "agent-cache"
271
- ```
272
-
273
- ---
274
-
275
- ### Task P3.4: ReflectionAPI Interface Definition
276
- **Depends on**: Phase 2 complete
277
-
278
- **Input**: Placeholder at `/src/core/workflow-context.ts:24`
279
-
280
- **Steps**:
281
- 1. Create `/src/types/reflection.ts`
282
- 2. Define complete interfaces:
283
- ```typescript
284
- interface ReflectionConfig {
285
- enabled: boolean;
286
- maxAttempts: number; // default: 3
287
- retryDelayMs?: number; // default: 0
288
- }
289
-
290
- interface ReflectionContext {
291
- level: 'workflow' | 'agent' | 'prompt';
292
- failedNode: WorkflowNode;
293
- error: Error;
294
- attemptNumber: number;
295
- previousAttempts: ReflectionEntry[];
296
- }
297
-
298
- interface ReflectionResult {
299
- shouldRetry: boolean;
300
- revisedPromptData?: Record<string, unknown>;
301
- revisedSystemPrompt?: string;
302
- reason: string;
303
- }
304
-
305
- interface ReflectionEntry {
306
- timestamp: number;
307
- level: 'workflow' | 'agent' | 'prompt';
308
- reason: string;
309
- error: Error;
310
- resolution: 'retry' | 'skip' | 'abort';
311
- success: boolean;
312
- }
313
-
314
- interface ReflectionAPI {
315
- isEnabled(): boolean;
316
- triggerReflection(reason?: string): Promise<void>;
317
- getReflectionHistory(): ReflectionEntry[];
318
- reflect(context: ReflectionContext): Promise<ReflectionResult>;
319
- }
320
- ```
321
- 3. Export from `/src/types/index.ts`
322
-
323
- **Output**: Complete reflection type definitions
324
-
325
- **Validation**: `npm run build` passes
326
-
327
- ---
328
-
329
- ### Task P3.5: Reflection Implementation
330
- **Depends on**: Task P3.4
331
-
332
- **Input**: ReflectionAPI interface, Agent.reflect() method
333
-
334
- **Steps**:
335
- 1. Create `/src/reflection/reflection.ts`
336
- 2. Implement `ReflectionManager` class:
337
- - Constructor: `(config: ReflectionConfig, agent?: Agent)`
338
- - `isEnabled()`: Return config.enabled
339
- - `reflect(context: ReflectionContext): Promise<ReflectionResult>`
340
- - Build reflection prompt with error context
341
- - Call agent.reflect() with reflection prompt
342
- - Parse response for shouldRetry decision
343
- - Record entry in history
344
- - `triggerReflection(reason?: string)`: Emit events, log
345
- - `getReflectionHistory()`: Return recorded entries
346
- 3. Define reflection prompt template:
347
- ```typescript
348
- const REFLECTION_PROMPT = `
349
- A previous operation failed with the following error:
350
-
351
- Error: {{error.message}}
352
- Level: {{level}}
353
- Attempt: {{attemptNumber}} of {{maxAttempts}}
354
-
355
- Analyze the error and determine:
356
- 1. Can this be retried with modifications?
357
- 2. What changes would help succeed?
358
-
359
- Respond with JSON: { "shouldRetry": boolean, "reason": string, "revisedPromptData": {...} }
360
- `;
361
- ```
362
- 4. Emit reflectionStart/reflectionEnd events
363
-
364
- **Output**: `/src/reflection/reflection.ts` with full implementation
365
-
366
- **Validation**:
367
- ```bash
368
- npm test -- --grep "ReflectionManager"
369
- ```
370
-
371
- ---
372
-
373
- ### Task P3.6: Wire Reflection into WorkflowContext
374
- **Depends on**: Task P3.5
375
-
376
- **Input**: `/src/core/workflow-context.ts`
377
-
378
- **Steps**:
379
- 1. Replace `ReflectionAPIImpl` placeholder with real import
380
- 2. Update `WorkflowContextImpl` constructor:
381
- - Create `ReflectionManager` with workflow's enableReflection config
382
- 3. Update `step()` method to wrap with reflection:
383
- ```typescript
384
- async step<T>(name: string, fn: () => Promise<T>): Promise<T> {
385
- let lastError: Error | null = null;
386
-
387
- for (let attempt = 1; attempt <= this.reflection.maxAttempts; attempt++) {
388
- try {
389
- return await this.executeStep(name, fn);
390
- } catch (error) {
391
- if (!this.reflection.isEnabled()) throw error;
392
-
393
- const result = await this.reflection.reflect({
394
- level: 'workflow',
395
- failedNode: stepNode,
396
- error: error as Error,
397
- attemptNumber: attempt,
398
- previousAttempts: this.reflection.getReflectionHistory()
399
- });
400
-
401
- if (!result.shouldRetry) throw error;
402
- lastError = error as Error;
403
- }
404
- }
405
-
406
- throw lastError;
407
- }
408
- ```
409
-
410
- **Output**: Automatic reflection on step failures
411
-
412
- **Validation**:
413
- ```bash
414
- npm test -- --grep "workflow-reflection"
415
- ```
416
-
417
- ---
418
-
419
- ### Phase 4: Dynamic Behavior & Introspection
420
-
421
- ---
422
-
423
- ### Task P4.1: Dynamic Factory Functions
424
- **Depends on**: Phase 3 complete
425
-
426
- **Input**: Workflow, Agent, Prompt classes
427
-
428
- **Steps**:
429
- 1. Create `/src/core/factory.ts`
430
- 2. Implement factory functions:
431
- ```typescript
432
- export function createWorkflow<T>(
433
- config: WorkflowConfig,
434
- executor: WorkflowExecutor<T>
435
- ): Workflow<T> {
436
- return new Workflow(config, executor);
437
- }
438
-
439
- export function createAgent(config: AgentConfig): Agent {
440
- return new Agent(config);
441
- }
442
-
443
- export function createPrompt<T>(config: PromptConfig<T>): Prompt<T> {
444
- return new Prompt(config);
445
- }
446
- ```
447
- 3. Export from `/src/index.ts`
448
-
449
- **Output**: Convenience factory functions for dynamic creation
450
-
451
- **Validation**: `npm run build`
452
-
453
- ---
454
-
455
- ### Task P4.2: Dynamic Context Revision
456
- **Depends on**: Task P4.1
457
-
458
- **Input**: WorkflowContext, step() implementation
459
-
460
- **Steps**:
461
- 1. Add to WorkflowContext interface in `/src/types/workflow-context.ts`:
462
- ```typescript
463
- replaceLastPromptResult<T>(
464
- newPrompt: Prompt<T>,
465
- agent: Agent
466
- ): Promise<T>;
467
- ```
468
- 2. Implement in `WorkflowContextImpl`:
469
- - Mark previous prompt node as 'revised'
470
- - Execute new prompt
471
- - Attach result as sibling (not child)
472
- - Update event tree
473
- - Return new result
474
- 3. Emit 'promptRevision' event
475
-
476
- **Output**: Context revision without tree forking
477
-
478
- **Validation**:
479
- ```bash
480
- npm test -- --grep "context-revision"
481
- ```
482
-
483
- ---
484
-
485
- ### Task P4.3: Introspection Tool Definitions
486
- **Depends on**: P4.1
487
-
488
- **Input**: PRD Section 11, `/plan/P3P4/research/introspection-tools.md`
489
-
490
- **Steps**:
491
- 1. Create `/src/tools/introspection.ts`
492
- 2. Define 6 tool interfaces using Anthropic Tool format:
493
- - `inspect_current_node`: Return current node info
494
- - `read_ancestor_chain`: Return ancestors up to root
495
- - `list_siblings_children`: Return siblings or children
496
- - `inspect_prior_outputs`: Return previous step outputs
497
- - `inspect_cache_status`: Check cache for prompt hash
498
- - `request_spawn_workflow`: Request dynamic workflow creation
499
- 3. For each tool, define:
500
- - Tool definition (name, description, input_schema)
501
- - Handler function signature
502
-
503
- **Output**: Tool definitions in `/src/tools/introspection.ts`
504
-
505
- **Validation**: TypeScript compiles
506
-
507
- ---
508
-
509
- ### Task P4.4: Introspection Tool Handlers
510
- **Depends on**: Task P4.3
511
-
512
- **Input**: Tool definitions, AgentExecutionContext
513
-
514
- **Steps**:
515
- 1. Implement handler for `inspect_current_node`:
516
- ```typescript
517
- async function handleInspectCurrentNode(): Promise<CurrentNodeInfo> {
518
- const ctx = getExecutionContext();
519
- if (!ctx) throw new Error('Not in workflow context');
520
-
521
- return {
522
- id: ctx.workflowNode.id,
523
- name: ctx.workflowNode.name,
524
- status: ctx.workflowNode.status,
525
- parentId: ctx.workflowNode.parent?.id,
526
- parentName: ctx.workflowNode.parent?.name,
527
- childCount: ctx.workflowNode.children.length,
528
- depth: calculateDepth(ctx.workflowNode)
529
- };
530
- }
531
- ```
532
- 2. Implement remaining handlers similarly
533
- 3. Create tool executor registry
534
- 4. Register handlers with MCPHandler pattern
535
-
536
- **Output**: Working introspection tool handlers
537
-
538
- **Validation**:
539
- ```bash
540
- npm test -- --grep "introspection-tools"
541
- ```
542
-
543
- ---
544
-
545
- ### Task P4.5: Introspection Tools Bundle
546
- **Depends on**: Task P4.4
547
-
548
- **Input**: All introspection tool definitions and handlers
549
-
550
- **Steps**:
551
- 1. Export bundle from `/src/tools/introspection.ts`:
552
- ```typescript
553
- export const INTROSPECTION_TOOLS: Tool[] = [
554
- inspectCurrentNodeTool,
555
- readAncestorChainTool,
556
- listSiblingsChildrenTool,
557
- inspectPriorOutputsTool,
558
- inspectCacheStatusTool,
559
- requestSpawnWorkflowTool
560
- ];
561
-
562
- export function registerIntrospectionTools(handler: MCPHandler): void {
563
- // Register all tool handlers
564
- }
565
- ```
566
- 2. Export from `/src/index.ts`
567
-
568
- **Output**: Single import for all introspection tools
569
-
570
- **Validation**: Import works from main package
571
-
572
- ---
573
-
574
- ### Phase 5: Examples (partial - Agent/Prompt focused)
575
-
576
- ---
577
-
578
- ### Task P5.1: Example 7 - Agent Loops with Observability
579
- **Depends on**: All Phase 3-4 tasks
580
-
581
- **Input**: PRD Section 12 item 7
582
-
583
- **Steps**:
584
- 1. Create `/examples/examples/07-agent-loops.ts`
585
- 2. Implement:
586
- - Array of items to process
587
- - for loop with ctx.step() for each item
588
- - Multiple agents for different item types
589
- - Full event tree visualization
590
- - Timing metrics per step
591
-
592
- **Output**: Working example with observability
593
-
594
- ---
595
-
596
- ### Task P5.2: Example 8 - SDK Features (Tools, MCPs, Hooks)
597
- **Depends on**: Task P5.1
598
-
599
- **Input**: PRD Section 12 item 8
600
-
601
- **Steps**:
602
- 1. Create `/examples/examples/08-sdk-features.ts`
603
- 2. Implement:
604
- - Custom tool definitions
605
- - MCP server configuration
606
- - Pre/Post tool hooks
607
- - Skills integration
608
- - Event capture demonstration
609
-
610
- **Output**: Comprehensive SDK integration example
611
-
612
- ---
613
-
614
- ### Task P5.3: Example 9 - Multi-level Reflection
615
- **Depends on**: Task P5.2
616
-
617
- **Input**: PRD Section 12 item 9
618
-
619
- **Steps**:
620
- 1. Create `/examples/examples/09-reflection.ts`
621
- 2. Implement three scenarios:
622
- - Workflow-level: step fails, reflection retries
623
- - Agent-level: prompt fails validation, agent reflects
624
- - Prompt-level: enableReflection on specific prompt
625
- 3. Show reflection events in tree output
626
-
627
- **Output**: Multi-level reflection demonstration
628
-
629
- ---
630
-
631
- ### Task P5.4: Example 10 - Introspection Tools Demo
632
- **Depends on**: Task P5.3
633
-
634
- **Input**: PRD Section 12 item 10
635
-
636
- **Steps**:
637
- 1. Create `/examples/examples/10-introspection.ts`
638
- 2. Implement:
639
- - Agent with all INTROSPECTION_TOOLS
640
- - Nested workflow structure
641
- - Prompt asking agent to describe its position
642
- - Agent using tools to explore hierarchy
643
-
644
- **Output**: Agent self-awareness demonstration
645
-
646
- ---
647
-
648
- ### Task P5.5: Update Main Exports
649
- **Depends on**: All prior tasks
650
-
651
- **Input**: All new classes, types, tools
652
-
653
- **Steps**:
654
- 1. Update `/src/index.ts` with all new exports:
655
- ```typescript
656
- // Cache
657
- export { LLMCache, defaultCache } from './cache/cache.js';
658
- export { generateCacheKey } from './cache/cache-key.js';
659
- export type { CacheConfig, CacheMetrics } from './cache/cache.js';
660
-
661
- // Reflection
662
- export { ReflectionManager } from './reflection/reflection.js';
663
- export type {
664
- ReflectionAPI,
665
- ReflectionConfig,
666
- ReflectionEntry
667
- } from './types/reflection.js';
668
-
669
- // Introspection
670
- export { INTROSPECTION_TOOLS, registerIntrospectionTools } from './tools/introspection.js';
671
-
672
- // Factories
673
- export { createWorkflow, createAgent, createPrompt } from './core/factory.js';
674
- ```
675
- 2. Update `/src/types/index.ts` with new type exports
676
-
677
- **Output**: Complete public API
678
-
679
- **Validation**:
680
- ```bash
681
- npm run build
682
- node -e "const g = require('./dist'); console.log(Object.keys(g))"
683
- ```
684
-
685
- ---
686
-
687
- ## 4. Implementation Details
688
-
689
- ### Code Patterns to Follow
690
-
691
- ```typescript
692
- // Cache key generation pattern (deterministic)
693
- import { createHash } from 'node:crypto';
694
-
695
- function generateCacheKey(inputs: CacheKeyInputs): string {
696
- const normalized = {
697
- user: inputs.user,
698
- data: inputs.data,
699
- system: inputs.system,
700
- model: inputs.model,
701
- temperature: inputs.temperature,
702
- maxTokens: inputs.maxTokens,
703
- tools: inputs.tools?.map(t => t.name).sort(),
704
- mcps: inputs.mcps?.map(m => m.name).sort(),
705
- skills: inputs.skills?.map(s => s.name).sort(),
706
- schemaHash: getSchemaHash(inputs.responseFormat)
707
- };
708
-
709
- return createHash('sha256')
710
- .update(deterministicStringify(normalized))
711
- .digest('hex');
712
- }
713
- ```
714
-
715
- ```typescript
716
- // Reflection retry pattern
717
- async function executeWithReflection<T>(
718
- fn: () => Promise<T>,
719
- reflection: ReflectionAPI,
720
- context: Partial<ReflectionContext>
721
- ): Promise<T> {
722
- const maxAttempts = 3;
723
-
724
- for (let attempt = 1; attempt <= maxAttempts; attempt++) {
725
- try {
726
- return await fn();
727
- } catch (error) {
728
- if (!reflection.isEnabled() || attempt === maxAttempts) {
729
- throw error;
730
- }
731
-
732
- const result = await reflection.reflect({
733
- ...context,
734
- error: error as Error,
735
- attemptNumber: attempt
736
- } as ReflectionContext);
737
-
738
- if (!result.shouldRetry) {
739
- throw error;
740
- }
741
- }
742
- }
743
-
744
- throw new Error('Max reflection attempts exceeded');
745
- }
746
- ```
747
-
748
- ### File Structure
749
- ```
750
- /src
751
- ├── cache/
752
- │ ├── cache.ts # LLMCache class
753
- │ ├── cache-key.ts # Key generation
754
- │ └── index.ts # Cache exports
755
- ├── reflection/
756
- │ ├── reflection.ts # ReflectionManager
757
- │ └── index.ts # Reflection exports
758
- ├── tools/
759
- │ ├── introspection.ts # Introspection tools
760
- │ └── index.ts # Tools exports
761
- ├── types/
762
- │ ├── reflection.ts # NEW: Reflection types
763
- │ └── ... (existing)
764
- └── ... (existing)
765
-
766
- /examples/examples/
767
- ├── 07-agent-loops.ts # NEW
768
- ├── 08-sdk-features.ts # NEW
769
- ├── 09-reflection.ts # NEW
770
- └── 10-introspection.ts # NEW
771
- ```
772
-
773
- ### Interface Definitions
774
- ```typescript
775
- // Key new interfaces
776
-
777
- interface CacheKeyInputs {
778
- user: string;
779
- data?: Record<string, unknown>;
780
- system?: string;
781
- model: string;
782
- temperature?: number;
783
- maxTokens?: number;
784
- tools?: Tool[];
785
- mcps?: MCPServer[];
786
- skills?: Skill[];
787
- responseFormat: z.ZodType;
788
- }
789
-
790
- interface ReflectionAPI {
791
- isEnabled(): boolean;
792
- triggerReflection(reason?: string): Promise<void>;
793
- getReflectionHistory(): ReflectionEntry[];
794
- reflect(context: ReflectionContext): Promise<ReflectionResult>;
795
- }
796
-
797
- type IntrospectionTool = Tool & {
798
- handler: (input: unknown) => Promise<unknown>;
799
- };
800
- ```
801
-
802
- ---
803
-
804
- ## 5. Testing Strategy
805
-
806
- ### Unit Tests
807
- ```yaml
808
- test_files:
809
- - path: "/src/__tests__/unit/cache-key.test.ts"
810
- covers:
811
- - "deterministicStringify produces same output for same input"
812
- - "getSchemaHash produces consistent hashes"
813
- - "generateCacheKey is deterministic"
814
- - "Different inputs produce different keys"
815
-
816
- - path: "/src/__tests__/unit/cache.test.ts"
817
- covers:
818
- - "LRU eviction works correctly"
819
- - "TTL expiration works"
820
- - "bustPrefix removes correct entries"
821
- - "Size limits enforced"
822
-
823
- - path: "/src/__tests__/unit/reflection.test.ts"
824
- covers:
825
- - "ReflectionManager.reflect() builds correct prompt"
826
- - "History is recorded"
827
- - "maxAttempts is respected"
828
-
829
- - path: "/src/__tests__/unit/introspection-tools.test.ts"
830
- covers:
831
- - "Each tool handler returns expected format"
832
- - "Tools work within context"
833
- - "Tools fail gracefully outside context"
834
-
835
- test_patterns:
836
- - "Use vitest describe/it/expect"
837
- - "Mock Agent for reflection tests"
838
- - "Use runInContext for introspection tests"
839
- ```
840
-
841
- ### Integration Tests
842
- ```yaml
843
- scenarios:
844
- - name: "Cache integration with Agent"
845
- validates: "Second identical prompt returns cached response"
846
- file: "/src/__tests__/integration/agent-cache.test.ts"
847
-
848
- - name: "Reflection in workflow step"
849
- validates: "Failed step triggers reflection, retry succeeds"
850
- file: "/src/__tests__/integration/workflow-reflection.test.ts"
851
-
852
- - name: "Introspection tools in agent"
853
- validates: "Agent can use tools to explore hierarchy"
854
- file: "/src/__tests__/integration/introspection.test.ts"
855
- ```
856
-
857
- ### Manual Validation
858
- ```yaml
859
- steps:
860
- - action: "Run example 09-reflection.ts"
861
- expected: "See reflection events in console, retry succeeds"
862
- command: "npx tsx examples/examples/09-reflection.ts"
863
-
864
- - action: "Run example 10-introspection.ts"
865
- expected: "Agent describes its position in hierarchy"
866
- command: "npx tsx examples/examples/10-introspection.ts"
867
- ```
868
-
869
- ---
870
-
871
- ## 6. Final Validation Checklist
872
-
873
- ### Code Quality
874
- - [ ] All TypeScript compiles without errors: `npm run build`
875
- - [ ] No linting warnings: `npm run lint`
876
- - [ ] Follows existing code patterns (check agent.ts, workflow.ts)
877
- - [ ] Proper error handling with typed errors
878
- - [ ] No circular dependencies
879
-
880
- ### Functionality
881
- - [ ] Cache generates deterministic keys
882
- - [ ] Cache respects maxItems and maxSize limits
883
- - [ ] Cache TTL works correctly
884
- - [ ] Reflection triggers on step failures when enabled
885
- - [ ] Reflection respects maxAttempts limit
886
- - [ ] All 6 introspection tools work
887
- - [ ] Dynamic factories create valid instances
888
- - [ ] Context revision works without forking tree
889
-
890
- ### Testing
891
- - [ ] Unit tests pass: `npm test -- --grep "cache|reflection|introspection"`
892
- - [ ] Integration tests pass: `npm test`
893
- - [ ] Manual validation with examples complete
894
-
895
- ### Documentation
896
- - [ ] Code is self-documenting with clear names
897
- - [ ] Complex logic has comments
898
- - [ ] Public APIs have JSDoc
899
- - [ ] Examples have header comments explaining purpose
900
-
901
- ---
902
-
903
- ## 7. "No Prior Knowledge" Test
904
-
905
- **Validation**: If someone knew nothing about this codebase, would they have everything needed to implement this successfully using only this PRP?
906
-
907
- - [x] All file paths are absolute and specific
908
- - [x] All patterns have concrete examples
909
- - [x] All dependencies are explicitly listed
910
- - [x] All validation steps are executable
911
- - [x] No assumed knowledge of codebase internals
912
- - [x] Research documents provide background context
913
-
914
- ---
915
-
916
- ## Research References
917
-
918
- See `/plan/P3P4/research/` for detailed research:
919
- - `caching-lru.md` - LRU cache implementation patterns
920
- - `reflection-patterns.md` - AI reflection/self-correction patterns
921
- - `introspection-tools.md` - Tool definitions and security considerations
922
-
923
- ---
924
-
925
- ## Confidence Score: 8/10
926
-
927
- **Strengths:**
928
- - Clear existing patterns to follow from Phase 1 & 2
929
- - Comprehensive research on caching and reflection
930
- - Specific file locations and code examples
931
- - Detailed validation steps
932
-
933
- **Risks:**
934
- - Reflection prompt effectiveness depends on LLM behavior
935
- - Introspection tool handlers need careful context access
936
- - Cache key generation for complex Zod schemas may need iteration
937
- - Some examples require real API calls (need mocking strategy)
938
-
939
- **Mitigations:**
940
- - Provide sensible defaults for reflection prompts
941
- - Extensive test coverage for edge cases
942
- - Schema hashing tested with various Zod types
943
- - Mock Anthropic client for example testing