groundswell 0.0.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (554) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -9
  3. package/dist/cache/cache-key.d.ts +86 -0
  4. package/dist/cache/cache-key.d.ts.map +1 -0
  5. package/dist/cache/cache-key.js +204 -0
  6. package/dist/cache/cache-key.js.map +1 -0
  7. package/dist/cache/cache.d.ts +104 -0
  8. package/dist/cache/cache.d.ts.map +1 -0
  9. package/dist/cache/cache.js +179 -0
  10. package/dist/cache/cache.js.map +1 -0
  11. package/{src/cache/index.ts → dist/cache/index.d.ts} +1 -1
  12. package/dist/cache/index.d.ts.map +1 -0
  13. package/dist/cache/index.js +6 -0
  14. package/dist/cache/index.js.map +1 -0
  15. package/dist/core/agent.d.ts +203 -0
  16. package/dist/core/agent.d.ts.map +1 -0
  17. package/dist/core/agent.js +833 -0
  18. package/dist/core/agent.js.map +1 -0
  19. package/{src/core/context.ts → dist/core/context.d.ts} +16 -67
  20. package/dist/core/context.d.ts.map +1 -0
  21. package/dist/core/context.js +80 -0
  22. package/dist/core/context.js.map +1 -0
  23. package/dist/core/event-tree.d.ts +72 -0
  24. package/dist/core/event-tree.d.ts.map +1 -0
  25. package/dist/core/event-tree.js +211 -0
  26. package/dist/core/event-tree.js.map +1 -0
  27. package/{src/core/factory.ts → dist/core/factory.d.ts} +6 -27
  28. package/dist/core/factory.d.ts.map +1 -0
  29. package/dist/core/factory.js +110 -0
  30. package/dist/core/factory.js.map +1 -0
  31. package/{src/core/index.ts → dist/core/index.d.ts} +2 -10
  32. package/dist/core/index.d.ts.map +1 -0
  33. package/dist/core/index.js +9 -0
  34. package/dist/core/index.js.map +1 -0
  35. package/dist/core/logger.d.ts +50 -0
  36. package/dist/core/logger.d.ts.map +1 -0
  37. package/dist/core/logger.js +91 -0
  38. package/dist/core/logger.js.map +1 -0
  39. package/dist/core/mcp-handler.d.ts +127 -0
  40. package/dist/core/mcp-handler.d.ts.map +1 -0
  41. package/dist/core/mcp-handler.js +323 -0
  42. package/dist/core/mcp-handler.js.map +1 -0
  43. package/dist/core/prompt.d.ts +80 -0
  44. package/dist/core/prompt.d.ts.map +1 -0
  45. package/dist/core/prompt.js +120 -0
  46. package/dist/core/prompt.js.map +1 -0
  47. package/dist/core/workflow-context.d.ts +61 -0
  48. package/dist/core/workflow-context.d.ts.map +1 -0
  49. package/dist/core/workflow-context.js +358 -0
  50. package/dist/core/workflow-context.js.map +1 -0
  51. package/dist/core/workflow.d.ts +543 -0
  52. package/dist/core/workflow.d.ts.map +1 -0
  53. package/dist/core/workflow.js +986 -0
  54. package/dist/core/workflow.js.map +1 -0
  55. package/dist/debugger/event-replayer.d.ts +422 -0
  56. package/dist/debugger/event-replayer.d.ts.map +1 -0
  57. package/dist/debugger/event-replayer.js +639 -0
  58. package/dist/debugger/event-replayer.js.map +1 -0
  59. package/dist/debugger/index.d.ts +2 -0
  60. package/dist/debugger/index.d.ts.map +1 -0
  61. package/{src/debugger/index.ts → dist/debugger/index.js} +1 -0
  62. package/dist/debugger/index.js.map +1 -0
  63. package/dist/debugger/tree-debugger.d.ts +240 -0
  64. package/dist/debugger/tree-debugger.d.ts.map +1 -0
  65. package/dist/debugger/tree-debugger.js +620 -0
  66. package/dist/debugger/tree-debugger.js.map +1 -0
  67. package/dist/decorators/index.d.ts +4 -0
  68. package/dist/decorators/index.d.ts.map +1 -0
  69. package/{src/decorators/index.ts → dist/decorators/index.js} +1 -0
  70. package/dist/decorators/index.js.map +1 -0
  71. package/dist/decorators/observed-state.d.ts +32 -0
  72. package/dist/decorators/observed-state.d.ts.map +1 -0
  73. package/dist/decorators/observed-state.js +79 -0
  74. package/dist/decorators/observed-state.js.map +1 -0
  75. package/dist/decorators/step.d.ts +15 -0
  76. package/dist/decorators/step.d.ts.map +1 -0
  77. package/dist/decorators/step.js +192 -0
  78. package/dist/decorators/step.js.map +1 -0
  79. package/dist/decorators/task.d.ts +50 -0
  80. package/dist/decorators/task.d.ts.map +1 -0
  81. package/dist/decorators/task.js +118 -0
  82. package/dist/decorators/task.js.map +1 -0
  83. package/dist/examples/index.d.ts +3 -0
  84. package/dist/examples/index.d.ts.map +1 -0
  85. package/{src/examples/index.ts → dist/examples/index.js} +1 -0
  86. package/dist/examples/index.js.map +1 -0
  87. package/dist/examples/tdd-orchestrator.d.ts +15 -0
  88. package/dist/examples/tdd-orchestrator.d.ts.map +1 -0
  89. package/dist/examples/tdd-orchestrator.js +121 -0
  90. package/dist/examples/tdd-orchestrator.js.map +1 -0
  91. package/dist/examples/test-cycle-workflow.d.ts +14 -0
  92. package/dist/examples/test-cycle-workflow.d.ts.map +1 -0
  93. package/dist/examples/test-cycle-workflow.js +116 -0
  94. package/dist/examples/test-cycle-workflow.js.map +1 -0
  95. package/dist/harnesses/claude-code-harness.d.ts +391 -0
  96. package/dist/harnesses/claude-code-harness.d.ts.map +1 -0
  97. package/dist/harnesses/claude-code-harness.js +1076 -0
  98. package/dist/harnesses/claude-code-harness.js.map +1 -0
  99. package/dist/harnesses/harness-registry.d.ts +440 -0
  100. package/dist/harnesses/harness-registry.d.ts.map +1 -0
  101. package/dist/harnesses/harness-registry.js +543 -0
  102. package/dist/harnesses/harness-registry.js.map +1 -0
  103. package/dist/harnesses/index.d.ts +12 -0
  104. package/dist/harnesses/index.d.ts.map +1 -0
  105. package/dist/harnesses/index.js +11 -0
  106. package/dist/harnesses/index.js.map +1 -0
  107. package/dist/harnesses/pi-harness.d.ts +219 -0
  108. package/dist/harnesses/pi-harness.d.ts.map +1 -0
  109. package/dist/harnesses/pi-harness.js +676 -0
  110. package/dist/harnesses/pi-harness.js.map +1 -0
  111. package/dist/harnesses/pi-schema-converter.d.ts +24 -0
  112. package/dist/harnesses/pi-schema-converter.d.ts.map +1 -0
  113. package/dist/harnesses/pi-schema-converter.js +81 -0
  114. package/dist/harnesses/pi-schema-converter.js.map +1 -0
  115. package/dist/harnesses/register-defaults.d.ts +24 -0
  116. package/dist/harnesses/register-defaults.d.ts.map +1 -0
  117. package/dist/harnesses/register-defaults.js +40 -0
  118. package/dist/harnesses/register-defaults.js.map +1 -0
  119. package/dist/harnesses/session-store.d.ts +201 -0
  120. package/dist/harnesses/session-store.d.ts.map +1 -0
  121. package/dist/harnesses/session-store.js +254 -0
  122. package/dist/harnesses/session-store.js.map +1 -0
  123. package/dist/index.d.ts +37 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +57 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/reflection/index.d.ts +5 -0
  128. package/dist/reflection/index.d.ts.map +1 -0
  129. package/{src/reflection/index.ts → dist/reflection/index.js} +1 -1
  130. package/dist/reflection/index.js.map +1 -0
  131. package/dist/reflection/reflection.d.ts +84 -0
  132. package/dist/reflection/reflection.d.ts.map +1 -0
  133. package/dist/reflection/reflection.js +344 -0
  134. package/dist/reflection/reflection.js.map +1 -0
  135. package/dist/tools/index.d.ts +6 -0
  136. package/dist/tools/index.d.ts.map +1 -0
  137. package/dist/tools/index.js +11 -0
  138. package/dist/tools/index.js.map +1 -0
  139. package/dist/tools/introspection.d.ts +165 -0
  140. package/dist/tools/introspection.d.ts.map +1 -0
  141. package/dist/tools/introspection.js +324 -0
  142. package/dist/tools/introspection.js.map +1 -0
  143. package/dist/types/agent.d.ts +1317 -0
  144. package/dist/types/agent.d.ts.map +1 -0
  145. package/dist/types/agent.js +423 -0
  146. package/dist/types/agent.js.map +1 -0
  147. package/dist/types/decorators.d.ts +40 -0
  148. package/dist/types/decorators.d.ts.map +1 -0
  149. package/dist/types/decorators.js +2 -0
  150. package/dist/types/decorators.js.map +1 -0
  151. package/dist/types/error-strategy.d.ts +13 -0
  152. package/dist/types/error-strategy.d.ts.map +1 -0
  153. package/dist/types/error-strategy.js +2 -0
  154. package/dist/types/error-strategy.js.map +1 -0
  155. package/dist/types/error.d.ts +20 -0
  156. package/dist/types/error.d.ts.map +1 -0
  157. package/dist/types/error.js +2 -0
  158. package/dist/types/error.js.map +1 -0
  159. package/dist/types/events.d.ts +113 -0
  160. package/dist/types/events.d.ts.map +1 -0
  161. package/dist/types/events.js +2 -0
  162. package/dist/types/events.js.map +1 -0
  163. package/dist/types/harnesses.d.ts +474 -0
  164. package/dist/types/harnesses.d.ts.map +1 -0
  165. package/dist/types/harnesses.js +2 -0
  166. package/dist/types/harnesses.js.map +1 -0
  167. package/dist/types/index.d.ts +23 -0
  168. package/dist/types/index.d.ts.map +1 -0
  169. package/dist/types/index.js +8 -0
  170. package/dist/types/index.js.map +1 -0
  171. package/dist/types/logging.d.ts +24 -0
  172. package/dist/types/logging.d.ts.map +1 -0
  173. package/dist/types/logging.js +2 -0
  174. package/dist/types/logging.js.map +1 -0
  175. package/dist/types/observer.d.ts +18 -0
  176. package/dist/types/observer.d.ts.map +1 -0
  177. package/dist/types/observer.js +2 -0
  178. package/dist/types/observer.js.map +1 -0
  179. package/dist/types/prompt.d.ts +31 -0
  180. package/dist/types/prompt.d.ts.map +1 -0
  181. package/dist/types/prompt.js +6 -0
  182. package/dist/types/prompt.js.map +1 -0
  183. package/dist/types/providers.d.ts +691 -0
  184. package/dist/types/providers.d.ts.map +1 -0
  185. package/dist/types/providers.js +14 -0
  186. package/dist/types/providers.js.map +1 -0
  187. package/dist/types/reflection.d.ts +96 -0
  188. package/dist/types/reflection.d.ts.map +1 -0
  189. package/dist/types/reflection.js +24 -0
  190. package/dist/types/reflection.js.map +1 -0
  191. package/dist/types/restart.d.ts +132 -0
  192. package/dist/types/restart.d.ts.map +1 -0
  193. package/dist/types/restart.js +2 -0
  194. package/dist/types/restart.js.map +1 -0
  195. package/dist/types/sdk-primitives.d.ts +118 -0
  196. package/dist/types/sdk-primitives.d.ts.map +1 -0
  197. package/dist/types/sdk-primitives.js +6 -0
  198. package/dist/types/sdk-primitives.js.map +1 -0
  199. package/{src/types/snapshot.ts → dist/types/snapshot.d.ts} +5 -5
  200. package/dist/types/snapshot.d.ts.map +1 -0
  201. package/dist/types/snapshot.js +2 -0
  202. package/dist/types/snapshot.js.map +1 -0
  203. package/dist/types/streaming.d.ts +194 -0
  204. package/dist/types/streaming.d.ts.map +1 -0
  205. package/dist/types/streaming.js +67 -0
  206. package/dist/types/streaming.js.map +1 -0
  207. package/dist/types/workflow-context.d.ts +275 -0
  208. package/dist/types/workflow-context.d.ts.map +1 -0
  209. package/dist/types/workflow-context.js +8 -0
  210. package/dist/types/workflow-context.js.map +1 -0
  211. package/dist/types/workflow.d.ts +30 -0
  212. package/dist/types/workflow.d.ts.map +1 -0
  213. package/dist/types/workflow.js +2 -0
  214. package/dist/types/workflow.js.map +1 -0
  215. package/dist/utils/agent-validation.d.ts +88 -0
  216. package/dist/utils/agent-validation.d.ts.map +1 -0
  217. package/dist/utils/agent-validation.js +87 -0
  218. package/dist/utils/agent-validation.js.map +1 -0
  219. package/dist/utils/delay.d.ts +7 -0
  220. package/dist/utils/delay.d.ts.map +1 -0
  221. package/dist/utils/delay.js +9 -0
  222. package/dist/utils/delay.js.map +1 -0
  223. package/dist/utils/harness-config.d.ts +180 -0
  224. package/dist/utils/harness-config.d.ts.map +1 -0
  225. package/dist/utils/harness-config.js +311 -0
  226. package/dist/utils/harness-config.js.map +1 -0
  227. package/dist/utils/id.d.ts +6 -0
  228. package/dist/utils/id.d.ts.map +1 -0
  229. package/dist/utils/id.js +12 -0
  230. package/dist/utils/id.js.map +1 -0
  231. package/dist/utils/index.d.ts +13 -0
  232. package/dist/utils/index.d.ts.map +1 -0
  233. package/dist/utils/index.js +11 -0
  234. package/dist/utils/index.js.map +1 -0
  235. package/dist/utils/model-spec.d.ts +110 -0
  236. package/dist/utils/model-spec.d.ts.map +1 -0
  237. package/dist/utils/model-spec.js +149 -0
  238. package/dist/utils/model-spec.js.map +1 -0
  239. package/dist/utils/observable.d.ts +54 -0
  240. package/dist/utils/observable.d.ts.map +1 -0
  241. package/dist/utils/observable.js +82 -0
  242. package/dist/utils/observable.js.map +1 -0
  243. package/dist/utils/provider-config.d.ts +10 -0
  244. package/dist/utils/provider-config.d.ts.map +1 -0
  245. package/dist/utils/provider-config.js +10 -0
  246. package/dist/utils/provider-config.js.map +1 -0
  247. package/dist/utils/restart-analysis.d.ts +202 -0
  248. package/dist/utils/restart-analysis.d.ts.map +1 -0
  249. package/dist/utils/restart-analysis.js +426 -0
  250. package/dist/utils/restart-analysis.js.map +1 -0
  251. package/dist/utils/session-serialization.d.ts +118 -0
  252. package/dist/utils/session-serialization.d.ts.map +1 -0
  253. package/dist/utils/session-serialization.js +217 -0
  254. package/dist/utils/session-serialization.js.map +1 -0
  255. package/dist/utils/workflow-error-utils.d.ts +22 -0
  256. package/dist/utils/workflow-error-utils.d.ts.map +1 -0
  257. package/dist/utils/workflow-error-utils.js +45 -0
  258. package/dist/utils/workflow-error-utils.js.map +1 -0
  259. package/package.json +34 -5
  260. package/.claude/commands/subtask-planning/prp-base-create.md +0 -120
  261. package/.claude/commands/subtask-planning/prp-base-execute.md +0 -65
  262. package/.claude/commands/task-breakdown.md +0 -94
  263. package/.claude/settings.local.json +0 -9
  264. package/.claude/system_prompts/task-breakdown.md +0 -101
  265. package/CHANGELOG.md +0 -188
  266. package/PRD.md +0 -543
  267. package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
  268. package/PRPs/PRDs/002-agent-prompt.md +0 -390
  269. package/PRPs/PRDs/003-agent-prompt.md +0 -943
  270. package/PRPs/PRDs/004-agent-prompt.md +0 -1136
  271. package/PRPs/PRDs/tasks-001.json +0 -492
  272. package/PRPs/README.md +0 -83
  273. package/PRPs/templates/prp_base.md +0 -222
  274. package/docs/agent.md +0 -422
  275. package/docs/prompt.md +0 -419
  276. package/docs/workflow.md +0 -600
  277. package/examples/README.md +0 -258
  278. package/examples/examples/01-basic-workflow.ts +0 -100
  279. package/examples/examples/02-decorator-options.ts +0 -217
  280. package/examples/examples/03-parent-child.ts +0 -241
  281. package/examples/examples/04-observers-debugger.ts +0 -340
  282. package/examples/examples/05-error-handling.ts +0 -387
  283. package/examples/examples/06-concurrent-tasks.ts +0 -352
  284. package/examples/examples/07-agent-loops.ts +0 -432
  285. package/examples/examples/08-sdk-features.ts +0 -667
  286. package/examples/examples/09-reflection.ts +0 -573
  287. package/examples/examples/10-introspection.ts +0 -550
  288. package/examples/examples/11-reparenting-workflows.ts +0 -269
  289. package/examples/index.ts +0 -147
  290. package/examples/utils/helpers.ts +0 -57
  291. package/package-lock.json +0 -2398
  292. package/plan/001_d3bb02af4886/TEST_RESULTS.md +0 -259
  293. package/plan/001_d3bb02af4886/backlog.json +0 -867
  294. package/plan/001_d3bb02af4886/bug_fix_tasks.json +0 -484
  295. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S1/PRP.md +0 -488
  296. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md +0 -581
  297. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md +0 -687
  298. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S1/PRP.md +0 -492
  299. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/PRP.md +0 -932
  300. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/concurrent_error_testing_patterns.md +0 -1109
  301. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/vitest_concurrent_testing.md +0 -802
  302. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/workflow_engine_test_references.md +0 -603
  303. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S1/PRP.md +0 -564
  304. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S3/PRP.md +0 -518
  305. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S4/PRP.md +0 -1252
  306. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/PRP.md +0 -364
  307. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/CODEBASE_INVENTORY.md +0 -114
  308. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/DECORATOR_DOCUMENTATION_PATTERNS.md +0 -205
  309. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/PRD_LOCATION_ANALYSIS.md +0 -199
  310. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/ULTRATHINK_PRP_PLAN.md +0 -134
  311. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/PRP.md +0 -495
  312. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md +0 -435
  313. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md +0 -506
  314. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S3/PRP.md +0 -612
  315. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/PRP.md +0 -558
  316. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md +0 -788
  317. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S2/PRP.md +0 -460
  318. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S3/PRP.md +0 -454
  319. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/PRP.md +0 -520
  320. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md +0 -417
  321. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/external_workflow_engines_research.md +0 -760
  322. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md +0 -245
  323. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S2/PRP.md +0 -792
  324. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/PRP.md +0 -535
  325. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md +0 -190
  326. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/PRP.md +0 -654
  327. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/TEST_FIX_REPORT.md +0 -227
  328. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/KEY_FINDINGS.md +0 -345
  329. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/QUICK_REFERENCE.md +0 -193
  330. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/test_maintenance_research.md +0 -1323
  331. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/BREAKING_CHANGES_AUDIT.md +0 -1011
  332. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/PRP.md +0 -927
  333. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S2/PRP.md +0 -505
  334. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/architecture/logger_child_signature_analysis.md +0 -401
  335. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/child_implementation_research.md +0 -142
  336. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/test_patterns_research.md +0 -112
  337. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/vitest_patterns_research.md +0 -159
  338. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/PRP.md +0 -549
  339. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md +0 -368
  340. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/edge_case_analysis.md +0 -172
  341. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/usage_inventory.md +0 -175
  342. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S2/PRP.md +0 -696
  343. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S4/PRP.md +0 -860
  344. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/PRP.md +0 -1066
  345. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01-testing-aggregated-errors.md +0 -1103
  346. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01_typescript_error_aggregation_patterns.md +0 -789
  347. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02-error-merge-strategy-testing-guide.md +0 -1098
  348. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02_aggregate_error_patterns.md +0 -1037
  349. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03-promise-allsettled-testing-patterns.md +0 -916
  350. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03_error_merging_strategies.md +0 -1045
  351. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/04_github_stackoverflow_examples.md +0 -890
  352. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/05_comprehensive_summary.md +0 -822
  353. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/INDEX.md +0 -668
  354. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/QUICK_REFERENCE.md +0 -706
  355. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/README.md +0 -265
  356. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/RESEARCH_REPORT.md +0 -655
  357. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S4/research/vitest_testing_patterns.md +0 -1103
  358. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T3S2/PRP.md +0 -426
  359. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/PRP.md +0 -506
  360. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/QUICK_REFERENCE.md +0 -114
  361. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/RESEARCH_SUMMARY.md +0 -316
  362. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/vitest_observer_error_logging_best_practices.md +0 -754
  363. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S3/PRP.md +0 -612
  364. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/PRP.md +0 -719
  365. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/README.md +0 -215
  366. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md +0 -765
  367. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S3/PRP.md +0 -718
  368. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md +0 -149
  369. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/PRP.md +0 -470
  370. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/ULTRATHINK_PLAN.md +0 -332
  371. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/codebase_workflow_name_analysis.md +0 -167
  372. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/external_best_practices.md +0 -265
  373. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md +0 -273
  374. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md +0 -760
  375. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S3-PRP.md +0 -434
  376. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S1/PRP.md +0 -717
  377. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/PRP.md +0 -472
  378. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/VALIDATION_REPORT.md +0 -125
  379. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/research/ULTRATHINK_PRP_PLAN.md +0 -301
  380. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/error-logging-best-practices.md +0 -1170
  381. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/research_typescript_partial_and_overloads.md +0 -940
  382. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-quick-reference.md +0 -151
  383. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-research.md +0 -650
  384. package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md +0 -259
  385. package/plan/001_d3bb02af4886/bugfix/P1M1T1S1/PRP.md +0 -457
  386. package/plan/001_d3bb02af4886/bugfix/RESEARCH_SUMMARY.md +0 -346
  387. package/plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md +0 -311
  388. package/plan/001_d3bb02af4886/bugfix/architecture/concurrent_execution_best_practices.md +0 -1565
  389. package/plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md +0 -288
  390. package/plan/001_d3bb02af4886/bugfix/architecture/promise_all_analysis.md +0 -741
  391. package/plan/001_d3bb02af4886/docs/PRP/P1M1T1S4-functional-workflow-error-state-capture-test.md +0 -652
  392. package/plan/001_d3bb02af4886/docs/PRP/P1P2-PRP.md +0 -527
  393. package/plan/001_d3bb02af4886/docs/PRP/P3P4-PRP.md +0 -1388
  394. package/plan/001_d3bb02af4886/docs/PRP/P4P5-PRP.md +0 -1136
  395. package/plan/001_d3bb02af4886/docs/PRP/PRP.md +0 -527
  396. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S1-PRP.md +0 -415
  397. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S2-PRP.md +0 -378
  398. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S4-PRP.md +0 -713
  399. package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M2T1S4-PRP.md +0 -370
  400. package/plan/001_d3bb02af4886/docs/PRP_P1M3T1S3.md +0 -499
  401. package/plan/001_d3bb02af4886/docs/TEST_RESULTS.md +0 -230
  402. package/plan/001_d3bb02af4886/docs/architecture/external_deps.md +0 -358
  403. package/plan/001_d3bb02af4886/docs/architecture/system_context.md +0 -242
  404. package/plan/001_d3bb02af4886/docs/bugfix/ANALYSIS_PRD_VS_IMPLEMENTATION.md +0 -1134
  405. package/plan/001_d3bb02af4886/docs/bugfix/GAP_ANALYSIS_SUMMARY.md +0 -179
  406. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/PRP.md +0 -629
  407. package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/validation-report.md +0 -214
  408. package/plan/001_d3bb02af4886/docs/bugfix/PRP_P1M4T2S3.md +0 -629
  409. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_PRP.md +0 -529
  410. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_QUICK_REFERENCE.md +0 -142
  411. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_README.md +0 -304
  412. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_TEST_RESULTS.md +0 -558
  413. package/plan/001_d3bb02af4886/docs/bugfix/bugfix_VALIDATION_SUMMARY.md +0 -256
  414. package/plan/001_d3bb02af4886/docs/bugfix/system_context.md +0 -346
  415. package/plan/001_d3bb02af4886/docs/bugfix-architecture/bug_analysis.md +0 -415
  416. package/plan/001_d3bb02af4886/docs/bugfix-architecture/implementation_patterns.md +0 -489
  417. package/plan/001_d3bb02af4886/docs/bugfix-architecture/system_context.md +0 -218
  418. package/plan/001_d3bb02af4886/docs/bugfix_INITIATION_SUMMARY.md +0 -380
  419. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_PATTERNS.md +0 -1923
  420. package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_QUICK_REF.md +0 -319
  421. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/codebase-context.md +0 -115
  422. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/cycle-detection-algorithms.md +0 -134
  423. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/test-patterns.md +0 -153
  424. package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/workflow-class.md +0 -132
  425. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_BEST_PRACTICES.md +0 -716
  426. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_QUICK_REF.md +0 -186
  427. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/GROUNDSWELL_DECORATOR_EXAMPLES.md +0 -604
  428. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/INDEX.md +0 -213
  429. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/codebase_structure.md +0 -30
  430. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/existing_test_pattern.md +0 -56
  431. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/getRootObservers_implementation.md +0 -53
  432. package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/test_conventions.md +0 -49
  433. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/PRP.md +0 -958
  434. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/QUICK_REFERENCE.md +0 -339
  435. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/README.md +0 -305
  436. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/SUMMARY.md +0 -433
  437. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/bidirectional-tree-consistency-testing.md +0 -1574
  438. package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/test-pattern-examples.md +0 -1014
  439. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_BEST_PRACTICES.md +0 -1929
  440. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_CODE_PATTERNS.md +0 -857
  441. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
  442. package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_RESEARCH_INDEX.md +0 -424
  443. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_INDEX.md +0 -291
  444. package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_RESEARCH_REPORT.md +0 -1342
  445. package/plan/001_d3bb02af4886/docs/research/P1P2/RESEARCH_SUMMARY.md +0 -342
  446. package/plan/001_d3bb02af4886/docs/research/P1P2/anthropic-sdk.md +0 -174
  447. package/plan/001_d3bb02af4886/docs/research/P1P2/async-local-storage.md +0 -200
  448. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-code-patterns.md +0 -1205
  449. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-decision-matrix.md +0 -421
  450. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-implementation-guide.md +0 -1341
  451. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-integration-guide.md +0 -834
  452. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-patterns.md +0 -1468
  453. package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-quick-reference.md +0 -558
  454. package/plan/001_d3bb02af4886/docs/research/P1P2/zod-schema.md +0 -152
  455. package/plan/001_d3bb02af4886/docs/research/P3P4/caching-lru.md +0 -116
  456. package/plan/001_d3bb02af4886/docs/research/P3P4/introspection-tools.md +0 -177
  457. package/plan/001_d3bb02af4886/docs/research/P3P4/reflection-patterns.md +0 -117
  458. package/plan/001_d3bb02af4886/docs/research/P4P5/RESEARCH_SUMMARY.md +0 -151
  459. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_QUICK_REF.md +0 -376
  460. package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_RESEARCH.md +0 -1507
  461. package/plan/001_d3bb02af4886/docs/research/bugfix_typescript_patterns.md +0 -949
  462. package/plan/001_d3bb02af4886/docs/research/error-testing-research.md +0 -619
  463. package/plan/001_d3bb02af4886/docs/research/error_handling_patterns.md +0 -723
  464. package/plan/001_d3bb02af4886/docs/research/general/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
  465. package/plan/001_d3bb02af4886/docs/research/general/README-INTROSPECTION.md +0 -352
  466. package/plan/001_d3bb02af4886/docs/research/general/agent-introspection-patterns.md +0 -1085
  467. package/plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md +0 -984
  468. package/plan/001_d3bb02af4886/docs/research/general/introspection-tool-examples.md +0 -875
  469. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/PRP_TEMPLATE.md +0 -460
  470. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md +0 -324
  471. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/README.md +0 -175
  472. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md +0 -499
  473. package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/SUMMARY.md +0 -163
  474. package/plan/001_d3bb02af4886/prd_snapshot.md +0 -543
  475. package/plan/bugfix/BUG_FIX_SUMMARY.md +0 -961
  476. package/scripts/generate-llms-full.ts +0 -206
  477. package/src/__tests__/adversarial/attachChild-performance.test.ts +0 -216
  478. package/src/__tests__/adversarial/circular-reference.test.ts +0 -101
  479. package/src/__tests__/adversarial/complex-circular-reference.test.ts +0 -139
  480. package/src/__tests__/adversarial/concurrent-task-failures.test.ts +0 -571
  481. package/src/__tests__/adversarial/deep-analysis.test.ts +0 -729
  482. package/src/__tests__/adversarial/deep-hierarchy-stress.test.ts +0 -213
  483. package/src/__tests__/adversarial/e2e-prd-validation.test.ts +0 -448
  484. package/src/__tests__/adversarial/edge-case.test.ts +0 -703
  485. package/src/__tests__/adversarial/error-merge-strategy.test.ts +0 -760
  486. package/src/__tests__/adversarial/incremental-performance.test.ts +0 -140
  487. package/src/__tests__/adversarial/node-map-update-benchmarks.test.ts +0 -457
  488. package/src/__tests__/adversarial/observer-propagation.test.ts +0 -487
  489. package/src/__tests__/adversarial/parent-validation.test.ts +0 -143
  490. package/src/__tests__/adversarial/prd-12-2-compliance.test.ts +0 -611
  491. package/src/__tests__/adversarial/prd-compliance.test.ts +0 -731
  492. package/src/__tests__/compatibility/backward-compatibility.test.ts +0 -1572
  493. package/src/__tests__/helpers/index.ts +0 -18
  494. package/src/__tests__/helpers/tree-verification.ts +0 -257
  495. package/src/__tests__/integration/agent-workflow.test.ts +0 -256
  496. package/src/__tests__/integration/bidirectional-consistency.test.ts +0 -847
  497. package/src/__tests__/integration/observer-logging.test.ts +0 -643
  498. package/src/__tests__/integration/tree-mirroring.test.ts +0 -151
  499. package/src/__tests__/integration/workflow-reparenting.test.ts +0 -303
  500. package/src/__tests__/unit/agent.test.ts +0 -169
  501. package/src/__tests__/unit/cache-key.test.ts +0 -182
  502. package/src/__tests__/unit/cache.test.ts +0 -172
  503. package/src/__tests__/unit/context.test.ts +0 -217
  504. package/src/__tests__/unit/decorators.test.ts +0 -100
  505. package/src/__tests__/unit/introspection-tools.test.ts +0 -277
  506. package/src/__tests__/unit/logger.test.ts +0 -293
  507. package/src/__tests__/unit/observable.test.ts +0 -321
  508. package/src/__tests__/unit/prompt.test.ts +0 -135
  509. package/src/__tests__/unit/reflection.test.ts +0 -210
  510. package/src/__tests__/unit/tree-debugger-incremental.test.ts +0 -170
  511. package/src/__tests__/unit/tree-debugger.test.ts +0 -85
  512. package/src/__tests__/unit/utils/workflow-error-utils.test.ts +0 -209
  513. package/src/__tests__/unit/workflow-detachChild.test.ts +0 -100
  514. package/src/__tests__/unit/workflow-emitEvent-childDetached.test.ts +0 -153
  515. package/src/__tests__/unit/workflow-isDescendantOf.test.ts +0 -180
  516. package/src/__tests__/unit/workflow.test.ts +0 -357
  517. package/src/cache/cache-key.ts +0 -244
  518. package/src/cache/cache.ts +0 -236
  519. package/src/core/agent.ts +0 -593
  520. package/src/core/event-tree.ts +0 -260
  521. package/src/core/logger.ts +0 -112
  522. package/src/core/mcp-handler.ts +0 -184
  523. package/src/core/prompt.ts +0 -150
  524. package/src/core/workflow-context.ts +0 -351
  525. package/src/core/workflow.ts +0 -540
  526. package/src/debugger/tree-debugger.ts +0 -255
  527. package/src/decorators/observed-state.ts +0 -95
  528. package/src/decorators/step.ts +0 -139
  529. package/src/decorators/task.ts +0 -159
  530. package/src/examples/tdd-orchestrator.ts +0 -65
  531. package/src/examples/test-cycle-workflow.ts +0 -64
  532. package/src/index.ts +0 -142
  533. package/src/reflection/reflection.ts +0 -407
  534. package/src/tools/index.ts +0 -36
  535. package/src/tools/introspection.ts +0 -464
  536. package/src/types/agent.ts +0 -90
  537. package/src/types/decorators.ts +0 -32
  538. package/src/types/error-strategy.ts +0 -13
  539. package/src/types/error.ts +0 -20
  540. package/src/types/events.ts +0 -75
  541. package/src/types/index.ts +0 -55
  542. package/src/types/logging.ts +0 -24
  543. package/src/types/observer.ts +0 -18
  544. package/src/types/prompt.ts +0 -40
  545. package/src/types/reflection.ts +0 -117
  546. package/src/types/sdk-primitives.ts +0 -128
  547. package/src/types/workflow-context.ts +0 -163
  548. package/src/types/workflow.ts +0 -37
  549. package/src/utils/id.ts +0 -11
  550. package/src/utils/index.ts +0 -4
  551. package/src/utils/observable.ts +0 -106
  552. package/src/utils/workflow-error-utils.ts +0 -56
  553. package/tsconfig.json +0 -22
  554. package/vitest.config.ts +0 -16
@@ -1,1085 +0,0 @@
1
- # Agent Introspection and Self-Awareness Patterns in AI Orchestration Frameworks
2
-
3
- **Research Date:** December 8, 2025
4
- **Focus:** Anthropic Tool Format, Hierarchy Inspection, Security Boundaries, Self-Modification Capabilities
5
-
6
- ---
7
-
8
- ## Table of Contents
9
-
10
- 1. [Introspection Capabilities](#introspection-capabilities)
11
- 2. [Anthropic Tool Definition Format](#anthropic-tool-definition-format)
12
- 3. [Hierarchy Inspection Patterns](#hierarchy-inspection-patterns)
13
- 4. [Security Considerations](#security-considerations)
14
- 5. [Self-Modification Capabilities](#self-modification-capabilities)
15
- 6. [Implementation Patterns for Groundswell](#implementation-patterns-for-groundswell)
16
-
17
- ---
18
-
19
- ## Introspection Capabilities
20
-
21
- ### Current State of Agent Introspection
22
-
23
- Research from Anthropic demonstrates that modern LLMs like Claude exhibit **emergent introspective awareness**, though it remains "highly unreliable and limited in scope." Key findings include:
24
-
25
- - Claude models can examine and critique their own outputs
26
- - Self-analysis ("introspection") capabilities are less developed than task execution
27
- - Agents benefit from explicit introspection tools rather than relying on emergent capabilities
28
-
29
- ### How Agents Should Inspect Position in Workflow Hierarchy
30
-
31
- Agents require access to contextual information about their place in execution hierarchy:
32
-
33
- **Position Inspection Elements:**
34
- - **Workflow Identity**: Current workflow ID, name, status
35
- - **Parent Context**: Parent workflow ID, name, execution stage
36
- - **Ancestor Chain**: Full path from current node to root
37
- - **Sibling Information**: Peer workflows at same hierarchy level
38
- - **Hierarchy Depth**: How many levels deep in the tree
39
- - **Execution Timeline**: When workflow started, current elapsed time
40
-
41
- **Prior Output Inspection:**
42
- - **Ancestor Outputs**: Results from parent workflows and prior steps
43
- - **Sibling Results**: Outputs from parallel or sequential peer workflows
44
- - **Cache Status**: What results have been cached vs. computed fresh
45
- - **State Snapshots**: Captured state at key decision points
46
- - **Event History**: Log of all events in the execution tree
47
-
48
- ### Design Pattern: Ancestor Chain Traversal
49
-
50
- From research on tree data structures (DOM navigation, XPath axes):
51
-
52
- ```
53
- Current Node (ID: workflow-456)
54
- ↑ parent
55
- Parent Node (ID: workflow-123, status: running)
56
- ↑ parent
57
- Root Node (ID: root-001, status: running)
58
- ```
59
-
60
- **Key Methods for Tree Traversal:**
61
- - `ancestors(nodeId)` → returns path from node to root
62
- - `parent(nodeId)` → returns immediate parent
63
- - `root()` → returns root workflow
64
- - `siblings(nodeId)` → returns peers at same level
65
- - `children(nodeId)` → returns all direct children
66
- - `descendants(nodeId)` → returns full subtree
67
-
68
- ---
69
-
70
- ## Anthropic Tool Definition Format
71
-
72
- ### Tool Structure (JSON Schema)
73
-
74
- Based on Anthropic's official documentation and MCP Protocol specification:
75
-
76
- ```json
77
- {
78
- "name": "inspect_workflow_hierarchy",
79
- "description": "Inspect the current workflow's position in the execution hierarchy, including ancestors, siblings, and prior results.",
80
- "input_schema": {
81
- "type": "object",
82
- "properties": {
83
- "node_id": {
84
- "type": "string",
85
- "description": "The workflow node ID to inspect. If omitted, inspects current workflow."
86
- },
87
- "include_ancestors": {
88
- "type": "boolean",
89
- "description": "Include full ancestor chain from current node to root",
90
- "default": true
91
- },
92
- "include_siblings": {
93
- "type": "boolean",
94
- "description": "Include sibling workflows at same hierarchy level",
95
- "default": false
96
- },
97
- "include_state_snapshots": {
98
- "type": "boolean",
99
- "description": "Include captured state snapshots from ancestor workflows",
100
- "default": false
101
- },
102
- "include_prior_outputs": {
103
- "type": "boolean",
104
- "description": "Include execution outputs from ancestor workflows",
105
- "default": false
106
- }
107
- },
108
- "required": ["node_id"]
109
- }
110
- }
111
- ```
112
-
113
- ### Core Tool Naming Conventions
114
-
115
- **Recommended Naming Patterns for Introspection Tools:**
116
-
117
- 1. **Prefix-Based (Resource + Action):**
118
- - `workflow_inspect_hierarchy`
119
- - `workflow_inspect_state`
120
- - `workflow_inspect_cache`
121
- - `workflow_read_ancestor_outputs`
122
-
123
- 2. **Verb-First (Clearer Intent):**
124
- - `inspect_workflow_hierarchy`
125
- - `read_workflow_state`
126
- - `query_execution_history`
127
- - `get_ancestor_results`
128
-
129
- 3. **Hierarchical Grouping (MCP Style):**
130
- - `workflows/inspect_hierarchy`
131
- - `workflows/read_state`
132
- - `workflows/list_ancestors`
133
- - `cache/get_status`
134
-
135
- **Anthropic Best Practices:**
136
- - Use snake_case for tool names
137
- - Group related tools with common prefixes (e.g., `workflow_*`)
138
- - Avoid generic names like `get` or `query` - be specific
139
- - Names should be immediately understandable to the model
140
-
141
- ### Complete Tool Definition Set
142
-
143
- #### 1. Workflow Hierarchy Inspector
144
-
145
- ```json
146
- {
147
- "name": "workflow_inspect_hierarchy",
148
- "description": "Get the current workflow's position in the execution hierarchy. Returns parent, ancestors, siblings, and depth information.",
149
- "input_schema": {
150
- "type": "object",
151
- "properties": {
152
- "node_id": {
153
- "type": "string",
154
- "description": "Workflow node ID. If omitted, uses current workflow context."
155
- },
156
- "depth": {
157
- "type": "string",
158
- "enum": ["current_only", "parent_only", "ancestors_only", "full_tree"],
159
- "description": "How much of the hierarchy to return",
160
- "default": "full_tree"
161
- }
162
- },
163
- "required": []
164
- }
165
- }
166
- ```
167
-
168
- **Example Response:**
169
- ```json
170
- {
171
- "current": {
172
- "id": "workflow-456",
173
- "name": "DataProcessingStep",
174
- "status": "running",
175
- "started_at": 1702080000000,
176
- "elapsed_ms": 5432
177
- },
178
- "parent": {
179
- "id": "workflow-123",
180
- "name": "MainOrchestrator",
181
- "status": "running",
182
- "depth": 1
183
- },
184
- "ancestors": [
185
- {
186
- "id": "workflow-123",
187
- "name": "MainOrchestrator",
188
- "depth": 1
189
- },
190
- {
191
- "id": "root-001",
192
- "name": "RootWorkflow",
193
- "depth": 2
194
- }
195
- ],
196
- "siblings": [
197
- {
198
- "id": "workflow-789",
199
- "name": "DataValidationStep",
200
- "status": "completed"
201
- },
202
- {
203
- "id": "workflow-999",
204
- "name": "DataTransformStep",
205
- "status": "pending"
206
- }
207
- ],
208
- "hierarchy_depth": 2,
209
- "total_siblings": 2
210
- }
211
- ```
212
-
213
- #### 2. Ancestor Output Reader
214
-
215
- ```json
216
- {
217
- "name": "workflow_read_ancestor_outputs",
218
- "description": "Read execution outputs and results from ancestor workflows. Supports filtering by ancestor name or ID.",
219
- "input_schema": {
220
- "type": "object",
221
- "properties": {
222
- "ancestor_id": {
223
- "type": "string",
224
- "description": "Specific ancestor workflow ID. If omitted, returns outputs from all ancestors in order."
225
- },
226
- "ancestor_name": {
227
- "type": "string",
228
- "description": "Filter by ancestor workflow name (e.g., 'MainOrchestrator')"
229
- },
230
- "include_state_snapshots": {
231
- "type": "boolean",
232
- "description": "Include full state snapshots from ancestors",
233
- "default": false
234
- },
235
- "limit_ancestry_depth": {
236
- "type": "integer",
237
- "description": "Only go this many levels up (1=parent only, 2=parent+grandparent, etc)",
238
- "minimum": 1
239
- }
240
- },
241
- "required": []
242
- }
243
- }
244
- ```
245
-
246
- **Example Response:**
247
- ```json
248
- {
249
- "outputs": [
250
- {
251
- "workflow_id": "workflow-123",
252
- "workflow_name": "MainOrchestrator",
253
- "depth": 1,
254
- "status": "running",
255
- "result": {
256
- "data_schema": "validated",
257
- "record_count": 15000,
258
- "processing_duration_ms": 2341
259
- },
260
- "state_snapshot": {
261
- "timestamp": 1702080005000,
262
- "error_count": 0,
263
- "warnings": ["High memory usage detected"]
264
- }
265
- }
266
- ]
267
- }
268
- ```
269
-
270
- #### 3. Cache Status Inspector
271
-
272
- ```json
273
- {
274
- "name": "workflow_inspect_cache",
275
- "description": "Inspect caching status for current workflow and ancestors. Shows which results have been cached vs computed fresh.",
276
- "input_schema": {
277
- "type": "object",
278
- "properties": {
279
- "node_id": {
280
- "type": "string",
281
- "description": "Workflow node ID to check cache for"
282
- },
283
- "check_ancestors": {
284
- "type": "boolean",
285
- "description": "Also check cache status for ancestor workflows",
286
- "default": true
287
- },
288
- "cache_key_filter": {
289
- "type": "string",
290
- "description": "Only return cache entries matching this filter (supports wildcards)"
291
- }
292
- },
293
- "required": []
294
- }
295
- }
296
- ```
297
-
298
- **Example Response:**
299
- ```json
300
- {
301
- "workflow_id": "workflow-456",
302
- "cache_status": {
303
- "enabled": true,
304
- "entries": [
305
- {
306
- "key": "data_validation_result",
307
- "cached": true,
308
- "age_ms": 1234,
309
- "hit_count": 3,
310
- "source_workflow": "workflow-123"
311
- },
312
- {
313
- "key": "schema_analysis",
314
- "cached": false,
315
- "computed_ms": 5678,
316
- "computation_time": 5678
317
- }
318
- ],
319
- "total_cache_size_bytes": 102400,
320
- "cache_hit_rate": 0.75
321
- }
322
- }
323
- ```
324
-
325
- #### 4. Event History Reader
326
-
327
- ```json
328
- {
329
- "name": "workflow_read_event_history",
330
- "description": "Read events from workflow execution tree. Supports filtering by type, workflow, time range.",
331
- "input_schema": {
332
- "type": "object",
333
- "properties": {
334
- "workflow_id": {
335
- "type": "string",
336
- "description": "Filter to specific workflow (if omitted, includes all)"
337
- },
338
- "event_types": {
339
- "type": "array",
340
- "items": {
341
- "type": "string",
342
- "enum": ["stepStart", "stepEnd", "toolInvocation", "error", "stateSnapshot", "childAttached"]
343
- },
344
- "description": "Only include these event types"
345
- },
346
- "limit": {
347
- "type": "integer",
348
- "description": "Maximum number of events to return",
349
- "default": 100,
350
- "maximum": 1000
351
- },
352
- "include_full_context": {
353
- "type": "boolean",
354
- "description": "Include full event details and payload",
355
- "default": false
356
- }
357
- },
358
- "required": []
359
- }
360
- }
361
- ```
362
-
363
- #### 5. Workflow State Snapshot Reader
364
-
365
- ```json
366
- {
367
- "name": "workflow_inspect_state_snapshot",
368
- "description": "Read captured state snapshot from a specific workflow. Shows decorated @ObservedState values at point of capture.",
369
- "input_schema": {
370
- "type": "object",
371
- "properties": {
372
- "workflow_id": {
373
- "type": "string",
374
- "description": "Workflow to read state from"
375
- },
376
- "snapshot_timestamp": {
377
- "type": "integer",
378
- "description": "Specific snapshot timestamp (if omitted, returns latest)"
379
- },
380
- "property_filter": {
381
- "type": "string",
382
- "description": "Only return state properties matching this filter"
383
- }
384
- },
385
- "required": ["workflow_id"]
386
- }
387
- }
388
- ```
389
-
390
- ---
391
-
392
- ## Hierarchy Inspection Patterns
393
-
394
- ### Tree Navigation Query Language
395
-
396
- From research on LangGraph, XPath, and ADK workflow patterns, effective hierarchy inspection requires:
397
-
398
- **1. Axis-Based Navigation (XPath-Inspired):**
399
-
400
- ```
401
- ancestor::* → All ancestors from current to root
402
- ancestor-or-self::* → Current node plus all ancestors
403
- parent::* → Immediate parent only
404
- sibling::* → All siblings at same level
405
- child::* → All direct children
406
- descendant::* → All children recursively
407
- descendant-or-self::* → Current plus all descendants
408
- ```
409
-
410
- **2. Predicate Filtering:**
411
-
412
- ```
413
- [name="MainOrchestrator"] → Filter by name
414
- [status="completed"] → Filter by status
415
- [depth=1] → Filter by hierarchy depth
416
- [time_range="1702080000000..1702081000000"] → Filter by time
417
- ```
418
-
419
- ### Exposure Architecture
420
-
421
- **What Agents Should See (READ-ONLY):**
422
- - Workflow IDs and names
423
- - Execution status (idle, running, completed, failed)
424
- - Hierarchy relationships (parent, children, siblings)
425
- - Execution timeline (start time, duration, elapsed)
426
- - Results and outputs from ancestor workflows
427
- - State snapshots from decision points
428
- - Event history and logs
429
- - Cache status and hit rates
430
-
431
- **What Agents Should NEVER See:**
432
- - Internal implementation details
433
- - Memory pointers or internal node references
434
- - Credentials or secrets in ancestor state
435
- - Private parent workflow configurations
436
- - Sibling workflow inputs (only outputs)
437
- - System-level performance metrics
438
- - Other tenant's data (multi-tenant systems)
439
-
440
- ### Security Boundaries - Read-Only Access Pattern
441
-
442
- Implement introspection as **read-only query tools** with these protections:
443
-
444
- ```typescript
445
- interface WorkflowIntrospectionRequest {
446
- // Which node to query
447
- node_id: string;
448
-
449
- // What information is requested
450
- query_type: 'hierarchy' | 'outputs' | 'state' | 'events';
451
-
452
- // Explicit data inclusion flags (deny-by-default)
453
- include_outputs?: boolean;
454
- include_state_snapshots?: boolean;
455
- include_event_history?: boolean;
456
- include_cache_status?: boolean;
457
-
458
- // Scope limitations
459
- max_ancestry_depth?: number; // Limit how far up tree we traverse
460
- max_results?: number; // Limit result set size
461
- time_range_start?: number; // Prevent excessive historical queries
462
- time_range_end?: number;
463
- }
464
-
465
- interface WorkflowIntrospectionResponse {
466
- // What was queried
467
- request_id: string;
468
-
469
- // Results (filtered by permissions)
470
- data: {
471
- hierarchy?: HierarchyData;
472
- outputs?: OutputData;
473
- state?: StateData;
474
- events?: EventData;
475
- };
476
-
477
- // Metadata for debugging
478
- execution_time_ms: number;
479
- results_count: number;
480
- is_complete: boolean; // Whether all requested data is included
481
- truncation_reason?: string; // Why results might be incomplete
482
- }
483
- ```
484
-
485
- ---
486
-
487
- ## Security Considerations
488
-
489
- ### Key Threat Vectors for Agent Introspection
490
-
491
- **1. Prompt Injection via Introspection Data**
492
- - Untrusted data in ancestor outputs could inject prompts
493
- - **Mitigation**: Introspection returns structured, validated data only
494
- - Agents cannot execute code embedded in returned state
495
-
496
- **2. Information Leakage**
497
- - Agents could read sensitive data from ancestor states
498
- - **Mitigation**:
499
- - Read-only access only
500
- - Explicit `include_sensitive_data` flags
501
- - Audit logging of all introspection queries
502
- - Secrets never included in state snapshots
503
-
504
- **3. Recursive Self-Modification**
505
- - Agent could inspect itself and modify its own execution
506
- - **Mitigation**:
507
- - Agents cannot read or modify their own prompts
508
- - Introspection tools return data only, never take actions
509
- - Self-spawning workflows require explicit approval
510
-
511
- **4. Denial of Service via Deep Hierarchy**
512
- - Agents could query very deep trees or large result sets
513
- - **Mitigation**:
514
- - `max_ancestry_depth` limit (e.g., 10 levels)
515
- - `max_results` limit (e.g., 1000 items)
516
- - Pagination for large result sets
517
- - Query timeout (e.g., 5 second max)
518
-
519
- ### Design Pattern: Capability Tokens
520
-
521
- From AWS Bedrock and Cerbos research, use explicit capabilities:
522
-
523
- ```typescript
524
- interface AgentCapabilities {
525
- // Introspection permissions
526
- can_inspect_hierarchy: boolean;
527
- can_read_ancestor_outputs: boolean;
528
- can_read_state_snapshots: boolean;
529
- can_read_event_history: boolean;
530
-
531
- // Modification permissions
532
- can_spawn_child_workflows: boolean;
533
- can_modify_sibling_state: boolean;
534
- can_spawn_arbitrary_agents: boolean;
535
-
536
- // Resource limits
537
- max_ancestry_depth: number;
538
- max_concurrent_children: number;
539
- max_result_size_bytes: number;
540
- }
541
- ```
542
-
543
- ### Sandboxing Pattern: Container Isolation
544
-
545
- From research on multi-agent security:
546
-
547
- ```typescript
548
- interface AgentSandbox {
549
- // Execution environment
550
- container_id: string;
551
- memory_limit_mb: number;
552
- cpu_shares: number;
553
- network_restricted: boolean;
554
-
555
- // Filesystem isolation
556
- mount_readonly: string[]; // Read-only mounts
557
- mount_readwrite: string[]; // Writable mounts
558
- mount_hidden: string[]; // Completely hidden
559
-
560
- // Tool access restrictions
561
- allowed_tools: string[]; // Whitelist of tools
562
- forbidden_tools: string[]; // Blacklist of tools
563
-
564
- // Data access controls
565
- visible_workflow_ids: string[]; // Which workflows this agent can see
566
- allowed_data_categories: string[]; // PII, secrets, etc.
567
- }
568
- ```
569
-
570
- ---
571
-
572
- ## Self-Modification Capabilities
573
-
574
- ### Safe Patterns for Workflow Spawning
575
-
576
- Research from LoopStacks, LangGraph, and Google ADK identifies several safe patterns:
577
-
578
- **1. Explicit Spawning with Approval**
579
-
580
- Agents cannot unilaterally spawn workflows. Instead:
581
-
582
- ```json
583
- {
584
- "name": "workflow_spawn_child",
585
- "description": "Request to spawn a child workflow. Requires explicit configuration and parent approval.",
586
- "input_schema": {
587
- "type": "object",
588
- "properties": {
589
- "child_workflow_name": {
590
- "type": "string",
591
- "description": "Name for the child workflow"
592
- },
593
- "workflow_template_id": {
594
- "type": "string",
595
- "description": "Pre-approved template to use (REQUIRED - agents cannot define arbitrary workflows)"
596
- },
597
- "input_data": {
598
- "type": "object",
599
- "description": "Data to pass to child workflow"
600
- },
601
- "parallel_execution": {
602
- "type": "boolean",
603
- "description": "Whether to run in parallel or sequentially",
604
- "default": false
605
- },
606
- "timeout_seconds": {
607
- "type": "integer",
608
- "description": "Maximum execution time",
609
- "minimum": 1,
610
- "maximum": 3600
611
- }
612
- },
613
- "required": ["child_workflow_name", "workflow_template_id"]
614
- }
615
- }
616
- ```
617
-
618
- **2. Prompt Generation with Validation**
619
-
620
- ```json
621
- {
622
- "name": "workflow_generate_dynamic_prompt",
623
- "description": "Generate a prompt for a child workflow based on current analysis. Generated prompt is validated before execution.",
624
- "input_schema": {
625
- "type": "object",
626
- "properties": {
627
- "target_workflow_id": {
628
- "type": "string",
629
- "description": "Which child workflow to generate prompt for"
630
- },
631
- "prompt_template": {
632
- "type": "string",
633
- "enum": [
634
- "data_analysis",
635
- "validation",
636
- "transformation",
637
- "summarization",
638
- "decision_making"
639
- ],
640
- "description": "Template constrains prompt generation"
641
- },
642
- "template_variables": {
643
- "type": "object",
644
- "description": "Variables to substitute in template"
645
- },
646
- "system_context": {
647
- "type": "string",
648
- "description": "System-level context to include (optional)"
649
- }
650
- },
651
- "required": ["target_workflow_id", "prompt_template"]
652
- }
653
- }
654
- ```
655
-
656
- **3. Safety Limits on Self-Modification**
657
-
658
- ```typescript
659
- interface WorkflowModificationLimits {
660
- // Spawning limits
661
- max_children_per_workflow: number; // e.g., 5
662
- max_total_descendants: number; // e.g., 100
663
- max_depth: number; // e.g., 10 levels
664
-
665
- // Prompt generation limits
666
- max_prompt_length_chars: number; // e.g., 5000
667
- max_dynamic_prompts_per_session: number; // e.g., 10
668
-
669
- // State modification limits
670
- can_modify_own_state: boolean; // false - only read
671
- can_modify_parent_state: boolean; // false
672
- can_modify_sibling_state: boolean; // false
673
- can_modify_ancestor_state: boolean; // false
674
-
675
- // Execution limits
676
- max_concurrent_child_workflows: number; // e.g., 3
677
- max_total_execution_time_seconds: number; // e.g., 3600
678
- }
679
- ```
680
-
681
- ### Self-Awareness Patterns from Anthropic Research
682
-
683
- Anthropic's research on introspection suggests these metacognitive capabilities:
684
-
685
- **1. Reflexion Pattern** (Self-Evaluation and Memory)
686
- - After each reasoning-action cycle, agent critiques output
687
- - Stores insights for future reference
688
- - Enables "thinking about thinking"
689
-
690
- **2. Chain-of-Thought with Introspection**
691
- - Agent reasons through multiple steps
692
- - At each step, checks own reasoning against hierarchy context
693
- - Can revise based on ancestor examples
694
-
695
- **3. Self-Correcting Workflows**
696
- - Agent detects errors via introspection
697
- - Can spawn correction workflows
698
- - Learns which patterns work within organization
699
-
700
- ---
701
-
702
- ## Implementation Patterns for Groundswell
703
-
704
- ### Integration with Existing Groundswell Architecture
705
-
706
- Based on analysis of `/src/core/workflow.ts`, `/src/core/agent.ts`, and `/src/core/event-tree.ts`:
707
-
708
- **Current Capabilities:**
709
- - `EventTreeHandle` already provides `getAncestors()` and `getChildren()`
710
- - `WorkflowContext` maintains connection to root workflow
711
- - `WorkflowNode` tracks hierarchy relationships
712
- - Event emission is already implemented
713
-
714
- **Proposed Introspection Tool Implementation:**
715
-
716
- #### 1. WorkflowIntrospectionService
717
-
718
- ```typescript
719
- // src/core/introspection-service.ts
720
-
721
- import type { WorkflowNode, WorkflowEvent } from '../types/index.js';
722
- import type { EventTreeHandle } from '../types/workflow-context.js';
723
-
724
- export interface HierarchyInfo {
725
- current: {
726
- id: string;
727
- name: string;
728
- status: WorkflowStatus;
729
- started_at: number;
730
- elapsed_ms: number;
731
- };
732
- parent?: {
733
- id: string;
734
- name: string;
735
- status: WorkflowStatus;
736
- depth: number;
737
- };
738
- ancestors: Array<{
739
- id: string;
740
- name: string;
741
- status: WorkflowStatus;
742
- depth: number;
743
- }>;
744
- siblings: Array<{
745
- id: string;
746
- name: string;
747
- status: WorkflowStatus;
748
- }>;
749
- hierarchy_depth: number;
750
- total_siblings: number;
751
- }
752
-
753
- export class WorkflowIntrospectionService {
754
- constructor(
755
- private eventTree: EventTreeHandle,
756
- private workflowNode: WorkflowNode
757
- ) {}
758
-
759
- /**
760
- * Get full hierarchy information for a node
761
- */
762
- inspectHierarchy(nodeId?: string): HierarchyInfo {
763
- const targetId = nodeId || this.workflowNode.id;
764
- const node = this.eventTree.getNode(targetId);
765
-
766
- if (!node) {
767
- throw new Error(`Node not found: ${targetId}`);
768
- }
769
-
770
- const ancestors = this.eventTree.getAncestors(targetId);
771
- const parent = ancestors[0];
772
- const children = this.eventTree.getChildren(parent?.id || '');
773
-
774
- return {
775
- current: this.extractNodeInfo(node),
776
- parent: parent ? this.extractNodeInfo(parent) : undefined,
777
- ancestors: ancestors.map(a => this.extractNodeInfo(a)),
778
- siblings: children.filter(c => c.id !== targetId),
779
- hierarchy_depth: ancestors.length,
780
- total_siblings: children.length - 1
781
- };
782
- }
783
-
784
- /**
785
- * Read outputs from ancestor workflows
786
- */
787
- readAncestorOutputs(ancestorId?: string, maxDepth?: number): object {
788
- const ancestors = this.eventTree.getAncestors(this.workflowNode.id);
789
- const filtered = maxDepth
790
- ? ancestors.slice(0, maxDepth)
791
- : ancestors;
792
-
793
- if (ancestorId) {
794
- const ancestor = filtered.find(a => a.id === ancestorId);
795
- if (!ancestor) {
796
- throw new Error(`Ancestor not found: ${ancestorId}`);
797
- }
798
- return this.extractNodeOutput(ancestor);
799
- }
800
-
801
- return {
802
- outputs: filtered.map(a => ({
803
- workflow_id: a.id,
804
- result: this.extractNodeOutput(a)
805
- }))
806
- };
807
- }
808
-
809
- /**
810
- * Inspect cache status
811
- */
812
- inspectCache(nodeId?: string): object {
813
- // Implementation would check WorkflowContext cache
814
- // Return structure matching tool specification above
815
- return {
816
- workflow_id: nodeId || this.workflowNode.id,
817
- cache_status: {
818
- enabled: true,
819
- entries: [],
820
- total_cache_size_bytes: 0,
821
- cache_hit_rate: 0
822
- }
823
- };
824
- }
825
-
826
- /**
827
- * Read event history
828
- */
829
- readEventHistory(workflowId?: string, eventTypes?: string[], limit = 100): object {
830
- const targetId = workflowId || this.workflowNode.id;
831
- const node = this.eventTree.getNode(targetId);
832
-
833
- if (!node) {
834
- throw new Error(`Node not found: ${targetId}`);
835
- }
836
-
837
- const events = this.extractEvents(node, eventTypes).slice(0, limit);
838
- return { events, total_count: events.length };
839
- }
840
-
841
- // Helper methods
842
- private extractNodeInfo(node: any): object {
843
- return {
844
- id: node.id,
845
- name: node.name,
846
- status: node.status || 'unknown',
847
- depth: this.calculateDepth(node)
848
- };
849
- }
850
-
851
- private extractNodeOutput(node: any): object {
852
- // Extract result data from node
853
- return node.payload || node.metrics || {};
854
- }
855
-
856
- private extractEvents(node: any, types?: string[]): WorkflowEvent[] {
857
- if (!node.events) return [];
858
-
859
- if (types && types.length > 0) {
860
- return node.events.filter(e => types.includes(e.type));
861
- }
862
-
863
- return node.events;
864
- }
865
-
866
- private calculateDepth(node: any): number {
867
- if (!node.parentId) return 0;
868
- const parent = this.eventTree.getNode(node.parentId);
869
- return parent ? 1 + this.calculateDepth(parent) : 1;
870
- }
871
- }
872
- ```
873
-
874
- #### 2. Introspection Tools for Agent
875
-
876
- ```typescript
877
- // src/core/introspection-tools.ts
878
-
879
- import type { Tool } from '../types/index.js';
880
- import { WorkflowIntrospectionService } from './introspection-service.js';
881
-
882
- export function createIntrospectionTools(
883
- introspectionService: WorkflowIntrospectionService
884
- ): Tool[] {
885
- return [
886
- {
887
- name: 'workflow_inspect_hierarchy',
888
- description: 'Get the current workflow\'s position in the execution hierarchy, including ancestors, siblings, and depth.',
889
- input_schema: {
890
- type: 'object' as const,
891
- properties: {
892
- node_id: {
893
- type: 'string',
894
- description: 'Workflow node ID. If omitted, uses current workflow context.'
895
- },
896
- depth: {
897
- type: 'string',
898
- enum: ['current_only', 'parent_only', 'ancestors_only', 'full_tree'],
899
- description: 'How much of the hierarchy to return',
900
- default: 'full_tree'
901
- }
902
- },
903
- required: []
904
- },
905
- handler: async (input: any) => {
906
- const hierarchy = introspectionService.inspectHierarchy(input.node_id);
907
-
908
- // Apply depth filter
909
- if (input.depth === 'current_only') {
910
- return { current: hierarchy.current };
911
- } else if (input.depth === 'parent_only') {
912
- return { current: hierarchy.current, parent: hierarchy.parent };
913
- } else if (input.depth === 'ancestors_only') {
914
- return { ancestors: hierarchy.ancestors };
915
- }
916
-
917
- return hierarchy;
918
- }
919
- },
920
-
921
- {
922
- name: 'workflow_read_ancestor_outputs',
923
- description: 'Read execution outputs and results from ancestor workflows.',
924
- input_schema: {
925
- type: 'object' as const,
926
- properties: {
927
- ancestor_id: {
928
- type: 'string',
929
- description: 'Specific ancestor workflow ID'
930
- },
931
- max_depth: {
932
- type: 'integer',
933
- description: 'Only go this many levels up'
934
- }
935
- },
936
- required: []
937
- },
938
- handler: async (input: any) => {
939
- return introspectionService.readAncestorOutputs(input.ancestor_id, input.max_depth);
940
- }
941
- },
942
-
943
- {
944
- name: 'workflow_inspect_cache',
945
- description: 'Inspect caching status for current or specified workflow.',
946
- input_schema: {
947
- type: 'object' as const,
948
- properties: {
949
- node_id: {
950
- type: 'string',
951
- description: 'Workflow node ID'
952
- }
953
- },
954
- required: []
955
- },
956
- handler: async (input: any) => {
957
- return introspectionService.inspectCache(input.node_id);
958
- }
959
- },
960
-
961
- {
962
- name: 'workflow_read_event_history',
963
- description: 'Read events from workflow execution tree.',
964
- input_schema: {
965
- type: 'object' as const,
966
- properties: {
967
- workflow_id: {
968
- type: 'string',
969
- description: 'Filter to specific workflow'
970
- },
971
- event_types: {
972
- type: 'array',
973
- items: {
974
- type: 'string',
975
- enum: ['stepStart', 'stepEnd', 'toolInvocation', 'error', 'stateSnapshot']
976
- },
977
- description: 'Only include these event types'
978
- },
979
- limit: {
980
- type: 'integer',
981
- description: 'Maximum number of events',
982
- default: 100
983
- }
984
- },
985
- required: []
986
- },
987
- handler: async (input: any) => {
988
- return introspectionService.readEventHistory(
989
- input.workflow_id,
990
- input.event_types,
991
- input.limit
992
- );
993
- }
994
- }
995
- ];
996
- }
997
- ```
998
-
999
- #### 3. Wiring Into WorkflowContext
1000
-
1001
- ```typescript
1002
- // In createWorkflowContext() function
1003
- // src/core/workflow-context.ts
1004
-
1005
- import { WorkflowIntrospectionService } from './introspection-service.js';
1006
- import { createIntrospectionTools } from './introspection-tools.js';
1007
-
1008
- export function createWorkflowContext(workflow, parentId?, enableReflection?) {
1009
- // ... existing code ...
1010
-
1011
- // Create introspection service
1012
- const introspectionService = new WorkflowIntrospectionService(
1013
- eventTree,
1014
- workflow.getNode()
1015
- );
1016
-
1017
- // Create introspection tools
1018
- const introspectionTools = createIntrospectionTools(introspectionService);
1019
-
1020
- // Add to agent config
1021
- const agentConfig = {
1022
- ...existingConfig,
1023
- tools: [...(existingConfig.tools || []), ...introspectionTools]
1024
- };
1025
-
1026
- return {
1027
- // ... existing context properties ...
1028
- introspectionService,
1029
- getIntrospectionTools: () => introspectionTools
1030
- };
1031
- }
1032
- ```
1033
-
1034
- ---
1035
-
1036
- ## Best Practices Summary
1037
-
1038
- ### For Tool Design
1039
-
1040
- 1. **Explicit Over Implicit**: Require agents to explicitly request sensitive data
1041
- 2. **Structured Schemas**: Use strict JSON schemas to prevent injection
1042
- 3. **Clear Names**: Tool names should be immediately understandable
1043
- 4. **Comprehensive Descriptions**: Include examples in descriptions
1044
- 5. **Error Messages**: Return detailed, actionable error messages
1045
-
1046
- ### For Hierarchy Inspection
1047
-
1048
- 1. **Read-Only Access**: Introspection tools never modify state
1049
- 2. **Depth Limits**: Prevent unbounded tree traversal
1050
- 3. **Result Limits**: Cap result set sizes
1051
- 4. **Time Limits**: Implement query timeouts
1052
- 5. **Audit Logging**: Log all introspection queries
1053
-
1054
- ### For Self-Modification
1055
-
1056
- 1. **Approval Required**: No unilateral workflow spawning
1057
- 2. **Template-Based**: Agents use pre-approved templates
1058
- 3. **Prompt Validation**: Generated prompts are validated before execution
1059
- 4. **Resource Limits**: Cap concurrent children, depth, total descendants
1060
- 5. **Capability Tokens**: Explicitly grant permissions
1061
-
1062
- ### For Security
1063
-
1064
- 1. **Sandboxing**: Run agents in isolated containers
1065
- 2. **Least Privilege**: Start read-only, grant permissions as needed
1066
- 3. **Secrets Protection**: Never include credentials in introspection data
1067
- 4. **Tenant Isolation**: Agents only see their own workflow tree
1068
- 5. **Network Restrictions**: Isolate tool execution from host network
1069
-
1070
- ---
1071
-
1072
- ## References
1073
-
1074
- ### Key Research Sources
1075
-
1076
- - **Anthropic Introspection Research**: [Emergent introspective awareness in large language models](https://www.anthropic.com/research/introspection)
1077
- - **Anthropic Tool Use Docs**: [Tool use with Claude](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview)
1078
- - **Claude Agent SDK**: [Building agents with the Claude Agent SDK](https://www.anthropic.com/engineering/building-agents-with-the-claude-agent-sdk)
1079
- - **Model Context Protocol**: [Tools - MCP Specification](https://modelcontextprotocol.io/docs/concepts/tools)
1080
- - **Multi-Agent Security**: [Securing Agentic AI: authorization patterns](https://dev.to/siddhantkcode/securing-agentic-ai-authorization-patterns-for-autonomous-systems-3ajo)
1081
- - **Prompt Injection Defense**: [Design Patterns for Securing LLM Agents against Prompt Injection](https://arxiv.org/abs/2506.08837)
1082
- - **Hierarchical Multi-Agent Systems**: [A Taxonomy of Hierarchical Multi-Agent Systems](https://arxiv.org/html/2508.12683)
1083
- - **LangGraph Workflows**: [Workflows and agents - LangChain Documentation](https://docs.langchain.com/oss/python/langgraph/workflows-agents)
1084
- - **Google ADK Safety**: [Safety and Security for AI Agents - Agent Development Kit](https://google.github.io/adk-docs/safety/)
1085
-