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.
- package/CHANGELOG.md +188 -0
- package/README.md +99 -5
- package/dist/__tests__/adversarial/attachChild-performance.test.d.ts +16 -0
- package/dist/__tests__/adversarial/attachChild-performance.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/attachChild-performance.test.js +187 -0
- package/dist/__tests__/adversarial/attachChild-performance.test.js.map +1 -0
- package/dist/__tests__/adversarial/circular-reference.test.d.ts +13 -0
- package/dist/__tests__/adversarial/circular-reference.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/circular-reference.test.js +92 -0
- package/dist/__tests__/adversarial/circular-reference.test.js.map +1 -0
- package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts +16 -0
- package/dist/__tests__/adversarial/complex-circular-reference.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/complex-circular-reference.test.js +127 -0
- package/dist/__tests__/adversarial/complex-circular-reference.test.js.map +1 -0
- package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts +21 -0
- package/dist/__tests__/adversarial/concurrent-task-failures.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/concurrent-task-failures.test.js +667 -0
- package/dist/__tests__/adversarial/concurrent-task-failures.test.js.map +1 -0
- package/dist/__tests__/adversarial/deep-analysis.test.d.ts +6 -0
- package/dist/__tests__/adversarial/deep-analysis.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/deep-analysis.test.js +877 -0
- package/dist/__tests__/adversarial/deep-analysis.test.js.map +1 -0
- package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts +13 -0
- package/dist/__tests__/adversarial/deep-hierarchy-stress.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js +186 -0
- package/dist/__tests__/adversarial/deep-hierarchy-stress.test.js.map +1 -0
- package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts +6 -0
- package/dist/__tests__/adversarial/e2e-prd-validation.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/e2e-prd-validation.test.js +626 -0
- package/dist/__tests__/adversarial/e2e-prd-validation.test.js.map +1 -0
- package/dist/__tests__/adversarial/edge-case.test.d.ts +6 -0
- package/dist/__tests__/adversarial/edge-case.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/edge-case.test.js +857 -0
- package/dist/__tests__/adversarial/edge-case.test.js.map +1 -0
- package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts +20 -0
- package/dist/__tests__/adversarial/error-merge-strategy.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/error-merge-strategy.test.js +907 -0
- package/dist/__tests__/adversarial/error-merge-strategy.test.js.map +1 -0
- package/dist/__tests__/adversarial/incremental-performance.test.d.ts +2 -0
- package/dist/__tests__/adversarial/incremental-performance.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/incremental-performance.test.js +113 -0
- package/dist/__tests__/adversarial/incremental-performance.test.js.map +1 -0
- package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts +22 -0
- package/dist/__tests__/adversarial/node-map-update-benchmarks.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js +383 -0
- package/dist/__tests__/adversarial/node-map-update-benchmarks.test.js.map +1 -0
- package/dist/__tests__/adversarial/observer-propagation.test.d.ts +21 -0
- package/dist/__tests__/adversarial/observer-propagation.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/observer-propagation.test.js +404 -0
- package/dist/__tests__/adversarial/observer-propagation.test.js.map +1 -0
- package/dist/__tests__/adversarial/parent-validation.test.d.ts +13 -0
- package/dist/__tests__/adversarial/parent-validation.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/parent-validation.test.js +128 -0
- package/dist/__tests__/adversarial/parent-validation.test.js.map +1 -0
- package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts +20 -0
- package/dist/__tests__/adversarial/prd-12-2-compliance.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/prd-12-2-compliance.test.js +482 -0
- package/dist/__tests__/adversarial/prd-12-2-compliance.test.js.map +1 -0
- package/dist/__tests__/adversarial/prd-compliance.test.d.ts +6 -0
- package/dist/__tests__/adversarial/prd-compliance.test.d.ts.map +1 -0
- package/dist/__tests__/adversarial/prd-compliance.test.js +886 -0
- package/dist/__tests__/adversarial/prd-compliance.test.js.map +1 -0
- package/dist/__tests__/compatibility/backward-compatibility.test.d.ts +22 -0
- package/dist/__tests__/compatibility/backward-compatibility.test.d.ts.map +1 -0
- package/dist/__tests__/compatibility/backward-compatibility.test.js +1843 -0
- package/dist/__tests__/compatibility/backward-compatibility.test.js.map +1 -0
- package/dist/__tests__/helpers/index.d.ts +10 -0
- package/dist/__tests__/helpers/index.d.ts.map +1 -0
- package/dist/__tests__/helpers/index.js +10 -0
- package/dist/__tests__/helpers/index.js.map +1 -0
- package/dist/__tests__/helpers/tree-verification.d.ts +90 -0
- package/dist/__tests__/helpers/tree-verification.d.ts.map +1 -0
- package/dist/__tests__/helpers/tree-verification.js +202 -0
- package/dist/__tests__/helpers/tree-verification.js.map +1 -0
- package/dist/__tests__/integration/agent-workflow.test.d.ts +2 -0
- package/dist/__tests__/integration/agent-workflow.test.d.ts.map +1 -0
- package/dist/__tests__/integration/agent-workflow.test.js +256 -0
- package/dist/__tests__/integration/agent-workflow.test.js.map +1 -0
- package/dist/__tests__/integration/bidirectional-consistency.test.d.ts +14 -0
- package/dist/__tests__/integration/bidirectional-consistency.test.d.ts.map +1 -0
- package/dist/__tests__/integration/bidirectional-consistency.test.js +668 -0
- package/dist/__tests__/integration/bidirectional-consistency.test.js.map +1 -0
- package/dist/__tests__/integration/observer-logging.test.d.ts +2 -0
- package/dist/__tests__/integration/observer-logging.test.d.ts.map +1 -0
- package/dist/__tests__/integration/observer-logging.test.js +517 -0
- package/dist/__tests__/integration/observer-logging.test.js.map +1 -0
- package/dist/__tests__/integration/tree-mirroring.test.d.ts +2 -0
- package/dist/__tests__/integration/tree-mirroring.test.d.ts.map +1 -0
- package/dist/__tests__/integration/tree-mirroring.test.js +117 -0
- package/dist/__tests__/integration/tree-mirroring.test.js.map +1 -0
- package/dist/__tests__/integration/workflow-reparenting.test.d.ts +12 -0
- package/dist/__tests__/integration/workflow-reparenting.test.d.ts.map +1 -0
- package/dist/__tests__/integration/workflow-reparenting.test.js +239 -0
- package/dist/__tests__/integration/workflow-reparenting.test.js.map +1 -0
- package/dist/__tests__/unit/agent.test.d.ts +2 -0
- package/dist/__tests__/unit/agent.test.d.ts.map +1 -0
- package/dist/__tests__/unit/agent.test.js +143 -0
- package/dist/__tests__/unit/agent.test.js.map +1 -0
- package/dist/__tests__/unit/cache-key.test.d.ts +5 -0
- package/dist/__tests__/unit/cache-key.test.d.ts.map +1 -0
- package/dist/__tests__/unit/cache-key.test.js +145 -0
- package/dist/__tests__/unit/cache-key.test.js.map +1 -0
- package/dist/__tests__/unit/cache.test.d.ts +5 -0
- package/dist/__tests__/unit/cache.test.d.ts.map +1 -0
- package/dist/__tests__/unit/cache.test.js +132 -0
- package/dist/__tests__/unit/cache.test.js.map +1 -0
- package/dist/__tests__/unit/context.test.d.ts +2 -0
- package/dist/__tests__/unit/context.test.d.ts.map +1 -0
- package/dist/__tests__/unit/context.test.js +220 -0
- package/dist/__tests__/unit/context.test.js.map +1 -0
- package/dist/__tests__/unit/decorators.test.d.ts +2 -0
- package/dist/__tests__/unit/decorators.test.d.ts.map +1 -0
- package/dist/__tests__/unit/decorators.test.js +162 -0
- package/dist/__tests__/unit/decorators.test.js.map +1 -0
- package/dist/__tests__/unit/introspection-tools.test.d.ts +5 -0
- package/dist/__tests__/unit/introspection-tools.test.d.ts.map +1 -0
- package/dist/__tests__/unit/introspection-tools.test.js +191 -0
- package/dist/__tests__/unit/introspection-tools.test.js.map +1 -0
- package/dist/__tests__/unit/logger.test.d.ts +2 -0
- package/dist/__tests__/unit/logger.test.d.ts.map +1 -0
- package/dist/__tests__/unit/logger.test.js +241 -0
- package/dist/__tests__/unit/logger.test.js.map +1 -0
- package/dist/__tests__/unit/observable.test.d.ts +2 -0
- package/dist/__tests__/unit/observable.test.d.ts.map +1 -0
- package/dist/__tests__/unit/observable.test.js +251 -0
- package/dist/__tests__/unit/observable.test.js.map +1 -0
- package/dist/__tests__/unit/prompt.test.d.ts +2 -0
- package/dist/__tests__/unit/prompt.test.d.ts.map +1 -0
- package/dist/__tests__/unit/prompt.test.js +113 -0
- package/dist/__tests__/unit/prompt.test.js.map +1 -0
- package/dist/__tests__/unit/reflection.test.d.ts +5 -0
- package/dist/__tests__/unit/reflection.test.d.ts.map +1 -0
- package/dist/__tests__/unit/reflection.test.js +160 -0
- package/dist/__tests__/unit/reflection.test.js.map +1 -0
- package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts +2 -0
- package/dist/__tests__/unit/tree-debugger-incremental.test.d.ts.map +1 -0
- package/dist/__tests__/unit/tree-debugger-incremental.test.js +136 -0
- package/dist/__tests__/unit/tree-debugger-incremental.test.js.map +1 -0
- package/dist/__tests__/unit/tree-debugger.test.d.ts +2 -0
- package/dist/__tests__/unit/tree-debugger.test.d.ts.map +1 -0
- package/dist/__tests__/unit/tree-debugger.test.js +69 -0
- package/dist/__tests__/unit/tree-debugger.test.js.map +1 -0
- package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts +2 -0
- package/dist/__tests__/unit/utils/workflow-error-utils.test.d.ts.map +1 -0
- package/dist/__tests__/unit/utils/workflow-error-utils.test.js +154 -0
- package/dist/__tests__/unit/utils/workflow-error-utils.test.js.map +1 -0
- package/dist/__tests__/unit/workflow-detachChild.test.d.ts +2 -0
- package/dist/__tests__/unit/workflow-detachChild.test.d.ts.map +1 -0
- package/dist/__tests__/unit/workflow-detachChild.test.js +76 -0
- package/dist/__tests__/unit/workflow-detachChild.test.js.map +1 -0
- package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts +2 -0
- package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.d.ts.map +1 -0
- package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js +122 -0
- package/dist/__tests__/unit/workflow-emitEvent-childDetached.test.js.map +1 -0
- package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts +2 -0
- package/dist/__tests__/unit/workflow-isDescendantOf.test.d.ts.map +1 -0
- package/dist/__tests__/unit/workflow-isDescendantOf.test.js +140 -0
- package/dist/__tests__/unit/workflow-isDescendantOf.test.js.map +1 -0
- package/dist/__tests__/unit/workflow.test.d.ts +2 -0
- package/dist/__tests__/unit/workflow.test.d.ts.map +1 -0
- package/dist/__tests__/unit/workflow.test.js +330 -0
- package/dist/__tests__/unit/workflow.test.js.map +1 -0
- package/dist/cache/cache-key.d.ts +66 -0
- package/dist/cache/cache-key.d.ts.map +1 -0
- package/dist/cache/cache-key.js +195 -0
- package/dist/cache/cache-key.js.map +1 -0
- package/dist/cache/cache.d.ts +104 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +179 -0
- package/dist/cache/cache.js.map +1 -0
- package/{src/cache/index.ts → dist/cache/index.d.ts} +1 -1
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +6 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/core/agent.d.ts +112 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +426 -0
- package/dist/core/agent.js.map +1 -0
- package/{src/core/context.ts → dist/core/context.d.ts} +16 -67
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +80 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/event-tree.d.ts +72 -0
- package/dist/core/event-tree.d.ts.map +1 -0
- package/dist/core/event-tree.js +211 -0
- package/dist/core/event-tree.js.map +1 -0
- package/{src/core/factory.ts → dist/core/factory.d.ts} +6 -27
- package/dist/core/factory.d.ts.map +1 -0
- package/dist/core/factory.js +110 -0
- package/dist/core/factory.js.map +1 -0
- package/{src/core/index.ts → dist/core/index.d.ts} +2 -10
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +50 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +91 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/mcp-handler.d.ts +69 -0
- package/dist/core/mcp-handler.d.ts.map +1 -0
- package/dist/core/mcp-handler.js +143 -0
- package/dist/core/mcp-handler.js.map +1 -0
- package/dist/core/prompt.d.ts +80 -0
- package/dist/core/prompt.d.ts.map +1 -0
- package/dist/core/prompt.js +120 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/workflow-context.d.ts +57 -0
- package/dist/core/workflow-context.d.ts.map +1 -0
- package/dist/core/workflow-context.js +263 -0
- package/dist/core/workflow-context.js.map +1 -0
- package/dist/core/workflow.d.ts +241 -0
- package/dist/core/workflow.d.ts.map +1 -0
- package/dist/core/workflow.js +464 -0
- package/dist/core/workflow.js.map +1 -0
- package/dist/debugger/index.d.ts +2 -0
- package/dist/debugger/index.d.ts.map +1 -0
- package/{src/debugger/index.ts → dist/debugger/index.js} +1 -0
- package/dist/debugger/index.js.map +1 -0
- package/dist/debugger/tree-debugger.d.ts +71 -0
- package/dist/debugger/tree-debugger.d.ts.map +1 -0
- package/dist/debugger/tree-debugger.js +198 -0
- package/dist/debugger/tree-debugger.js.map +1 -0
- package/dist/decorators/index.d.ts +4 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/{src/decorators/index.ts → dist/decorators/index.js} +1 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/observed-state.d.ts +32 -0
- package/dist/decorators/observed-state.d.ts.map +1 -0
- package/dist/decorators/observed-state.js +79 -0
- package/dist/decorators/observed-state.js.map +1 -0
- package/dist/decorators/step.d.ts +15 -0
- package/dist/decorators/step.d.ts.map +1 -0
- package/dist/decorators/step.js +110 -0
- package/dist/decorators/step.js.map +1 -0
- package/dist/decorators/task.d.ts +50 -0
- package/dist/decorators/task.d.ts.map +1 -0
- package/dist/decorators/task.js +118 -0
- package/dist/decorators/task.js.map +1 -0
- package/dist/examples/index.d.ts +3 -0
- package/dist/examples/index.d.ts.map +1 -0
- package/{src/examples/index.ts → dist/examples/index.js} +1 -0
- package/dist/examples/index.js.map +1 -0
- package/dist/examples/tdd-orchestrator.d.ts +15 -0
- package/dist/examples/tdd-orchestrator.d.ts.map +1 -0
- package/dist/examples/tdd-orchestrator.js +121 -0
- package/dist/examples/tdd-orchestrator.js.map +1 -0
- package/dist/examples/test-cycle-workflow.d.ts +14 -0
- package/dist/examples/test-cycle-workflow.d.ts.map +1 -0
- package/dist/examples/test-cycle-workflow.js +116 -0
- package/dist/examples/test-cycle-workflow.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/reflection/index.d.ts +5 -0
- package/dist/reflection/index.d.ts.map +1 -0
- package/{src/reflection/index.ts → dist/reflection/index.js} +1 -1
- package/dist/reflection/index.js.map +1 -0
- package/dist/reflection/reflection.d.ts +84 -0
- package/dist/reflection/reflection.d.ts.map +1 -0
- package/dist/reflection/reflection.js +329 -0
- package/dist/reflection/reflection.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +11 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/introspection.d.ts +165 -0
- package/dist/tools/introspection.d.ts.map +1 -0
- package/dist/tools/introspection.js +324 -0
- package/dist/tools/introspection.js.map +1 -0
- package/dist/types/agent.d.ts +66 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +6 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/decorators.d.ts +31 -0
- package/dist/types/decorators.d.ts.map +1 -0
- package/dist/types/decorators.js +2 -0
- package/dist/types/decorators.js.map +1 -0
- package/dist/types/error-strategy.d.ts +13 -0
- package/dist/types/error-strategy.d.ts.map +1 -0
- package/dist/types/error-strategy.js +2 -0
- package/dist/types/error-strategy.js.map +1 -0
- package/dist/types/error.d.ts +20 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +2 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/events.d.ts +87 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +2 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/logging.d.ts +24 -0
- package/dist/types/logging.d.ts.map +1 -0
- package/dist/types/logging.js +2 -0
- package/dist/types/logging.js.map +1 -0
- package/dist/types/observer.d.ts +18 -0
- package/dist/types/observer.d.ts.map +1 -0
- package/dist/types/observer.js +2 -0
- package/dist/types/observer.js.map +1 -0
- package/dist/types/prompt.d.ts +31 -0
- package/dist/types/prompt.d.ts.map +1 -0
- package/dist/types/prompt.js +6 -0
- package/dist/types/prompt.js.map +1 -0
- package/dist/types/reflection.d.ts +96 -0
- package/dist/types/reflection.d.ts.map +1 -0
- package/dist/types/reflection.js +24 -0
- package/dist/types/reflection.js.map +1 -0
- package/dist/types/sdk-primitives.d.ts +118 -0
- package/dist/types/sdk-primitives.d.ts.map +1 -0
- package/dist/types/sdk-primitives.js +6 -0
- package/dist/types/sdk-primitives.js.map +1 -0
- package/{src/types/snapshot.ts → dist/types/snapshot.d.ts} +5 -5
- package/dist/types/snapshot.d.ts.map +1 -0
- package/dist/types/snapshot.js +2 -0
- package/dist/types/snapshot.js.map +1 -0
- package/dist/types/workflow-context.d.ts +139 -0
- package/dist/types/workflow-context.d.ts.map +1 -0
- package/dist/types/workflow-context.js +8 -0
- package/dist/types/workflow-context.js.map +1 -0
- package/dist/types/workflow.d.ts +30 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +2 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/utils/id.d.ts +6 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +12 -0
- package/dist/utils/id.js.map +1 -0
- package/{src/utils/index.ts → dist/utils/index.d.ts} +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/observable.d.ts +54 -0
- package/dist/utils/observable.d.ts.map +1 -0
- package/dist/utils/observable.js +82 -0
- package/dist/utils/observable.js.map +1 -0
- package/dist/utils/workflow-error-utils.d.ts +22 -0
- package/dist/utils/workflow-error-utils.d.ts.map +1 -0
- package/dist/utils/workflow-error-utils.js +45 -0
- package/dist/utils/workflow-error-utils.js.map +1 -0
- package/package.json +7 -2
- package/.claude/settings.local.json +0 -9
- package/.claude/system_prompts/task-breakdown.md +0 -100
- package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
- package/PRPs/PRDs/001-hierarchical-workflow-engine.md +0 -543
- package/PRPs/PRDs/002-agent-prompt.md +0 -390
- package/PRPs/PRDs/003-agent-prompt.md +0 -943
- package/PRPs/PRDs/004-agent-prompt.md +0 -1136
- package/PRPs/PRDs/tasks-001.json +0 -492
- package/PRPs/README.md +0 -83
- package/PRPs/templates/prp_base.md +0 -222
- package/docs/agent.md +0 -422
- package/docs/prompt.md +0 -419
- package/docs/workflow.md +0 -600
- package/examples/README.md +0 -244
- package/examples/examples/01-basic-workflow.ts +0 -100
- package/examples/examples/02-decorator-options.ts +0 -217
- package/examples/examples/03-parent-child.ts +0 -241
- package/examples/examples/04-observers-debugger.ts +0 -340
- package/examples/examples/05-error-handling.ts +0 -387
- package/examples/examples/06-concurrent-tasks.ts +0 -352
- package/examples/examples/07-agent-loops.ts +0 -432
- package/examples/examples/08-sdk-features.ts +0 -667
- package/examples/examples/09-reflection.ts +0 -573
- package/examples/examples/10-introspection.ts +0 -550
- package/examples/index.ts +0 -143
- package/examples/utils/helpers.ts +0 -57
- package/llms_full.txt +0 -5890
- package/plan/P1P2/PRP.md +0 -527
- package/plan/P1P2/research/LRU_CACHE_BEST_PRACTICES.md +0 -1929
- package/plan/P1P2/research/LRU_CACHE_CODE_PATTERNS.md +0 -857
- package/plan/P1P2/research/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
- package/plan/P1P2/research/LRU_CACHE_RESEARCH_INDEX.md +0 -424
- package/plan/P1P2/research/REFLECTION_INDEX.md +0 -291
- package/plan/P1P2/research/REFLECTION_RESEARCH_REPORT.md +0 -1342
- package/plan/P1P2/research/RESEARCH_SUMMARY.md +0 -342
- package/plan/P1P2/research/anthropic-sdk.md +0 -174
- package/plan/P1P2/research/async-local-storage.md +0 -200
- package/plan/P1P2/research/reflection-code-patterns.md +0 -1205
- package/plan/P1P2/research/reflection-decision-matrix.md +0 -421
- package/plan/P1P2/research/reflection-implementation-guide.md +0 -1341
- package/plan/P1P2/research/reflection-integration-guide.md +0 -834
- package/plan/P1P2/research/reflection-patterns.md +0 -1468
- package/plan/P1P2/research/reflection-quick-reference.md +0 -558
- package/plan/P1P2/research/zod-schema.md +0 -152
- package/plan/P3P4/PRP.md +0 -1388
- package/plan/P3P4/research/caching-lru.md +0 -116
- package/plan/P3P4/research/introspection-tools.md +0 -177
- package/plan/P3P4/research/reflection-patterns.md +0 -117
- package/plan/P4P5/PRP.md +0 -1136
- package/plan/P4P5/research/RESEARCH_SUMMARY.md +0 -151
- package/plan/architecture/external_deps.md +0 -358
- package/plan/architecture/system_context.md +0 -242
- package/plan/backlog.json +0 -867
- package/plan/research/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
- package/plan/research/README-INTROSPECTION.md +0 -352
- package/plan/research/agent-introspection-patterns.md +0 -1085
- package/plan/research/introspection-security-guide.md +0 -928
- package/plan/research/introspection-tool-examples.md +0 -875
- package/scripts/generate-llms-full.ts +0 -206
- package/src/__tests__/integration/agent-workflow.test.ts +0 -256
- package/src/__tests__/integration/tree-mirroring.test.ts +0 -114
- package/src/__tests__/unit/agent.test.ts +0 -169
- package/src/__tests__/unit/cache-key.test.ts +0 -182
- package/src/__tests__/unit/cache.test.ts +0 -172
- package/src/__tests__/unit/context.test.ts +0 -138
- package/src/__tests__/unit/decorators.test.ts +0 -100
- package/src/__tests__/unit/introspection-tools.test.ts +0 -277
- package/src/__tests__/unit/prompt.test.ts +0 -135
- package/src/__tests__/unit/reflection.test.ts +0 -210
- package/src/__tests__/unit/tree-debugger.test.ts +0 -85
- package/src/__tests__/unit/workflow.test.ts +0 -81
- package/src/cache/cache-key.ts +0 -244
- package/src/cache/cache.ts +0 -236
- package/src/core/agent.ts +0 -573
- package/src/core/event-tree.ts +0 -260
- package/src/core/logger.ts +0 -87
- package/src/core/mcp-handler.ts +0 -184
- package/src/core/prompt.ts +0 -150
- package/src/core/workflow-context.ts +0 -349
- package/src/core/workflow.ts +0 -302
- package/src/debugger/tree-debugger.ts +0 -210
- package/src/decorators/observed-state.ts +0 -95
- package/src/decorators/step.ts +0 -139
- package/src/decorators/task.ts +0 -96
- package/src/examples/tdd-orchestrator.ts +0 -65
- package/src/examples/test-cycle-workflow.ts +0 -64
- package/src/index.ts +0 -140
- package/src/reflection/reflection.ts +0 -407
- package/src/tools/index.ts +0 -36
- package/src/tools/introspection.ts +0 -464
- package/src/types/agent.ts +0 -90
- package/src/types/decorators.ts +0 -25
- package/src/types/error-strategy.ts +0 -13
- package/src/types/error.ts +0 -20
- package/src/types/events.ts +0 -74
- package/src/types/index.ts +0 -55
- package/src/types/logging.ts +0 -24
- package/src/types/observer.ts +0 -18
- package/src/types/prompt.ts +0 -40
- package/src/types/reflection.ts +0 -117
- package/src/types/sdk-primitives.ts +0 -128
- package/src/types/workflow-context.ts +0 -163
- package/src/types/workflow.ts +0 -37
- package/src/utils/id.ts +0 -11
- package/src/utils/observable.ts +0 -77
- package/tasks.json +0 -0
- package/tsconfig.json +0 -22
- package/vitest.config.ts +0 -16
package/plan/P1P2/PRP.md
DELETED
|
@@ -1,527 +0,0 @@
|
|
|
1
|
-
# PRP: Agent & Prompt Foundation + Hierarchy Integration
|
|
2
|
-
|
|
3
|
-
## Phases 1 & 2 Implementation Plan
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Goal
|
|
8
|
-
|
|
9
|
-
### Feature Goal
|
|
10
|
-
Implement the foundational Agent and Prompt classes with full Anthropic SDK integration, and integrate them into the existing workflow hierarchy with automatic context propagation and event capture.
|
|
11
|
-
|
|
12
|
-
### Deliverable
|
|
13
|
-
A complete Agent/Prompt system where:
|
|
14
|
-
1. `Agent` class wraps Anthropic SDK for prompt execution
|
|
15
|
-
2. `Prompt<T>` class provides type-safe, immutable prompt definitions with Zod validation
|
|
16
|
-
3. Agent calls within workflow steps automatically capture events in the workflow tree
|
|
17
|
-
4. Zero-plumbing context propagation via `AsyncLocalStorage`
|
|
18
|
-
5. Extended `WorkflowEvent` union captures all agent/prompt/tool activities
|
|
19
|
-
|
|
20
|
-
### Success Definition
|
|
21
|
-
- [ ] `npm run build` passes with no TypeScript errors
|
|
22
|
-
- [ ] `npm test` passes all new and existing tests
|
|
23
|
-
- [ ] Agent can execute prompts and validate responses with Zod schemas
|
|
24
|
-
- [ ] Events from agent.prompt() calls appear in WorkflowTreeDebugger output
|
|
25
|
-
- [ ] Context propagates automatically without manual plumbing
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Context
|
|
30
|
-
|
|
31
|
-
### External Documentation
|
|
32
|
-
```yaml
|
|
33
|
-
anthropic_sdk:
|
|
34
|
-
npm: "https://www.npmjs.com/package/@anthropic-ai/sdk"
|
|
35
|
-
github: "https://github.com/anthropics/anthropic-sdk-typescript"
|
|
36
|
-
api_reference: "https://github.com/anthropics/anthropic-sdk-typescript/blob/main/api.md"
|
|
37
|
-
tool_use: "https://platform.claude.com/docs/en/agents-and-tools/tool-use/implement-tool-use"
|
|
38
|
-
version: "^0.71.1"
|
|
39
|
-
|
|
40
|
-
zod:
|
|
41
|
-
npm: "https://www.npmjs.com/package/zod"
|
|
42
|
-
docs: "https://v3.zod.dev/"
|
|
43
|
-
api: "https://zod.dev/api"
|
|
44
|
-
version: "^3.23.0"
|
|
45
|
-
|
|
46
|
-
async_local_storage:
|
|
47
|
-
node_docs: "https://nodejs.org/api/async_context.html"
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Codebase Patterns to Follow
|
|
51
|
-
```yaml
|
|
52
|
-
workflow_base_class:
|
|
53
|
-
file: "/src/core/workflow.ts"
|
|
54
|
-
pattern: "Abstract class with node representation, emitEvent(), observer propagation"
|
|
55
|
-
key_methods: "constructor(), attachChild(), emitEvent(), getNode(), setStatus()"
|
|
56
|
-
|
|
57
|
-
event_types:
|
|
58
|
-
file: "/src/types/events.ts"
|
|
59
|
-
pattern: "Discriminated union with type field"
|
|
60
|
-
existing: "childAttached, stateSnapshot, stepStart, stepEnd, error, taskStart, taskEnd, treeUpdated"
|
|
61
|
-
|
|
62
|
-
observer_pattern:
|
|
63
|
-
file: "/src/types/observer.ts"
|
|
64
|
-
pattern: "WorkflowObserver interface with onLog, onEvent, onStateUpdated, onTreeChanged"
|
|
65
|
-
|
|
66
|
-
step_decorator:
|
|
67
|
-
file: "/src/decorators/step.ts"
|
|
68
|
-
pattern: "Method decorator that emits stepStart/stepEnd events, captures timing"
|
|
69
|
-
|
|
70
|
-
id_generation:
|
|
71
|
-
file: "/src/utils/id.ts"
|
|
72
|
-
pattern: "generateId() using crypto.randomUUID()"
|
|
73
|
-
|
|
74
|
-
type_exports:
|
|
75
|
-
file: "/src/types/index.ts"
|
|
76
|
-
pattern: "Re-export all types from individual files"
|
|
77
|
-
|
|
78
|
-
main_exports:
|
|
79
|
-
file: "/src/index.ts"
|
|
80
|
-
pattern: "Export classes from core/, decorators/, debugger/, utils/"
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### Architectural Decisions (from system_context.md)
|
|
84
|
-
```yaml
|
|
85
|
-
decision_1:
|
|
86
|
-
rule: "Agent is NOT a Workflow subclass"
|
|
87
|
-
reason: "Agents execute prompts; they don't have their own lifecycle"
|
|
88
|
-
|
|
89
|
-
decision_2:
|
|
90
|
-
rule: "Prompts are immutable value objects"
|
|
91
|
-
reason: "Prompts define what to send; execution happens via Agent.prompt()"
|
|
92
|
-
|
|
93
|
-
decision_3:
|
|
94
|
-
rule: "WorkflowContext provides step() and spawnWorkflow()"
|
|
95
|
-
reason: "PRD requires step() callable anywhere in JS control flow"
|
|
96
|
-
|
|
97
|
-
decision_4:
|
|
98
|
-
rule: "All SDK properties pass through unchanged"
|
|
99
|
-
reason: "tools, mcps, skills, hooks, env must map 1:1 to Anthropic SDK"
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### Test Patterns
|
|
103
|
-
```yaml
|
|
104
|
-
test_framework: "vitest"
|
|
105
|
-
test_location: "/src/__tests__/unit/*.test.ts and /src/__tests__/integration/*.test.ts"
|
|
106
|
-
test_config: "/vitest.config.ts"
|
|
107
|
-
test_pattern: |
|
|
108
|
-
import { describe, it, expect } from 'vitest';
|
|
109
|
-
describe('ClassName', () => {
|
|
110
|
-
it('should do something', () => {
|
|
111
|
-
expect(result).toBe(expected);
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## Implementation Tasks
|
|
119
|
-
|
|
120
|
-
### Phase 1: Foundation Layer - Agent & Prompt Core
|
|
121
|
-
|
|
122
|
-
#### P1.M1: Project Setup & Dependencies
|
|
123
|
-
|
|
124
|
-
**P1.M1.T1.S1: Update package.json with dependencies**
|
|
125
|
-
```
|
|
126
|
-
LOCATION: /package.json
|
|
127
|
-
ACTION: Add dependencies block with @anthropic-ai/sdk@^0.71.1 and zod@^3.23.0
|
|
128
|
-
VALIDATION: npm install succeeds, npm ls @anthropic-ai/sdk zod shows correct versions
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
**P1.M1.T2.S1: Create AgentConfig and PromptOverrides types**
|
|
132
|
-
```
|
|
133
|
-
LOCATION: /src/types/agent.ts (NEW FILE)
|
|
134
|
-
PATTERN: Follow /src/types/workflow.ts structure
|
|
135
|
-
EXPORTS: AgentConfig, PromptOverrides interfaces
|
|
136
|
-
CONTENT:
|
|
137
|
-
- AgentConfig: name?, system?, tools?, mcps?, skills?, hooks?, env?, enableReflection?, enableCache?
|
|
138
|
-
- PromptOverrides: extends relevant AgentConfig fields + temperature?, maxTokens?, stop?, disableCache?
|
|
139
|
-
VALIDATION: tsc --noEmit passes
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
**P1.M1.T2.S2: Create PromptConfig and Prompt types**
|
|
143
|
-
```
|
|
144
|
-
LOCATION: /src/types/prompt.ts (NEW FILE)
|
|
145
|
-
IMPORTS: z from 'zod', AgentConfig from './agent.js'
|
|
146
|
-
EXPORTS: PromptConfig<T> interface
|
|
147
|
-
CONTENT:
|
|
148
|
-
- PromptConfig<T>: user (string), data? (Record<string,any>), responseFormat (z.ZodType<T>)
|
|
149
|
-
- Plus override fields: system?, tools?, mcps?, skills?, hooks?, enableReflection?
|
|
150
|
-
VALIDATION: tsc --noEmit passes
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
**P1.M1.T2.S3: Create SDK primitive types**
|
|
154
|
-
```
|
|
155
|
-
LOCATION: /src/types/sdk-primitives.ts (NEW FILE)
|
|
156
|
-
PATTERN: Mirror Anthropic SDK types for pass-through
|
|
157
|
-
EXPORTS: Tool, MCPServer, Skill, AgentHooks, HookHandler interfaces
|
|
158
|
-
CONTENT:
|
|
159
|
-
- Tool: name, description, input_schema (JSON Schema object)
|
|
160
|
-
- MCPServer: name, version?, transport ('stdio'|'inprocess'), command?, args?, tools?
|
|
161
|
-
- Skill: name, path (string to skill directory)
|
|
162
|
-
- AgentHooks: PreToolUse?, PostToolUse?, SessionStart?, SessionEnd? arrays
|
|
163
|
-
VALIDATION: tsc --noEmit passes
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
**P1.M1.T2.S4: Update types/index.ts exports**
|
|
167
|
-
```
|
|
168
|
-
LOCATION: /src/types/index.ts
|
|
169
|
-
ACTION: Add exports for new type files
|
|
170
|
-
PATTERN: Follow existing re-export pattern
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
#### P1.M2: Agent & Prompt Class Implementation
|
|
174
|
-
|
|
175
|
-
**P1.M2.T1.S1: Implement Agent constructor and config storage**
|
|
176
|
-
```
|
|
177
|
-
LOCATION: /src/core/agent.ts (NEW FILE)
|
|
178
|
-
IMPORTS: Anthropic from '@anthropic-ai/sdk', types from '../types/index.js'
|
|
179
|
-
PATTERN: Store config, instantiate private Anthropic client
|
|
180
|
-
CLASS: Agent
|
|
181
|
-
CONSTRUCTOR: (config: AgentConfig) => stores all config fields, creates client
|
|
182
|
-
VALIDATION: Unit test creates Agent instance successfully
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
**P1.M2.T2.S1: Implement Prompt<T> class**
|
|
186
|
-
```
|
|
187
|
-
LOCATION: /src/core/prompt.ts (NEW FILE)
|
|
188
|
-
IMPORTS: z from 'zod', types from '../types/index.js'
|
|
189
|
-
CLASS: Prompt<T>
|
|
190
|
-
CONSTRUCTOR: (config: PromptConfig<T>) => stores all fields as readonly
|
|
191
|
-
METHODS: validateResponse(data: unknown): T using this.responseFormat.parse()
|
|
192
|
-
PATTERN: Immutable value object - all fields readonly
|
|
193
|
-
VALIDATION: Unit test creates Prompt, validates response successfully
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
**P1.M2.T1.S2: Implement Agent.prompt() method**
|
|
197
|
-
```
|
|
198
|
-
LOCATION: /src/core/agent.ts
|
|
199
|
-
DEPENDENCIES: Agent constructor, Prompt class
|
|
200
|
-
METHOD: prompt<T>(prompt: Prompt<T>, overrides?: PromptOverrides): Promise<T>
|
|
201
|
-
LOGIC:
|
|
202
|
-
1. Merge config: Prompt overrides > PromptOverrides param > AgentConfig defaults
|
|
203
|
-
2. Build Anthropic messages.create() params
|
|
204
|
-
3. Execute API call
|
|
205
|
-
4. Extract text content from response
|
|
206
|
-
5. Parse JSON from text
|
|
207
|
-
6. Validate with prompt.responseFormat.parse()
|
|
208
|
-
7. Return typed result
|
|
209
|
-
ERROR_HANDLING: Throw on validation failure, API errors
|
|
210
|
-
VALIDATION: Integration test with mock API or real API call
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
**P1.M2.T1.S3: Implement Agent.reflect() method**
|
|
214
|
-
```
|
|
215
|
-
LOCATION: /src/core/agent.ts
|
|
216
|
-
DEPENDENCIES: Agent.prompt()
|
|
217
|
-
METHOD: reflect<T>(prompt: Prompt<T>, overrides?: PromptOverrides): Promise<T>
|
|
218
|
-
LOGIC: Same as prompt() but with reflection system prefix when enableReflection is true
|
|
219
|
-
VALIDATION: Unit test verifies reflection prefix added
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
**P1.M2.T3.S1: Implement tools array pass-through**
|
|
223
|
-
```
|
|
224
|
-
LOCATION: /src/core/agent.ts (within prompt() method)
|
|
225
|
-
LOGIC:
|
|
226
|
-
1. Merge tools: prompt.toolsOverride ?? overrides?.tools ?? this.config.tools
|
|
227
|
-
2. Pass to messages.create({ tools: mergedTools })
|
|
228
|
-
3. Handle tool_use stop_reason with tool execution loop
|
|
229
|
-
VALIDATION: Test with mock tool definition, verify passed to API
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
**P1.M2.T3.S2: Implement MCP server handler**
|
|
233
|
-
```
|
|
234
|
-
LOCATION: /src/core/mcp-handler.ts (NEW FILE)
|
|
235
|
-
CLASS: MCPHandler
|
|
236
|
-
METHODS:
|
|
237
|
-
- registerServer(server: MCPServer): void
|
|
238
|
-
- getTools(): Tool[] (converts MCP tools to Anthropic format)
|
|
239
|
-
LOGIC: For inprocess transport: direct tool registration. For stdio: document as future.
|
|
240
|
-
VALIDATION: Unit test with inprocess MCP server
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
**P1.M2.T3.S3: Implement hooks pass-through**
|
|
244
|
-
```
|
|
245
|
-
LOCATION: /src/core/agent.ts (within prompt() method)
|
|
246
|
-
LOGIC:
|
|
247
|
-
1. Merge hooks from config/overrides
|
|
248
|
-
2. Call PreToolUse hooks before tool execution
|
|
249
|
-
3. Call PostToolUse hooks after tool execution
|
|
250
|
-
VALIDATION: Unit test verifies hooks called at correct times
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
**P1.M2.T3.S4: Implement skills and env pass-through**
|
|
254
|
-
```
|
|
255
|
-
LOCATION: /src/core/agent.ts
|
|
256
|
-
LOGIC:
|
|
257
|
-
- Skills: Load SKILL.md from skill.path, inject into system prompt
|
|
258
|
-
- Env: Temporarily set process.env during prompt execution
|
|
259
|
-
VALIDATION: Test skill content appears in system prompt
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
**P1.M2.T4: Update core/index.ts and main exports**
|
|
263
|
-
```
|
|
264
|
-
LOCATION: /src/core/index.ts, /src/index.ts
|
|
265
|
-
ACTION: Export Agent, Prompt classes
|
|
266
|
-
VALIDATION: Import from 'groundswell' works
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
---
|
|
270
|
-
|
|
271
|
-
### Phase 2: Hierarchy & Event System Integration
|
|
272
|
-
|
|
273
|
-
#### P2.M1: Event Tree Extension
|
|
274
|
-
|
|
275
|
-
**P2.M1.T1.S1: Add agent event types to WorkflowEvent union**
|
|
276
|
-
```
|
|
277
|
-
LOCATION: /src/types/events.ts
|
|
278
|
-
ACTION: Extend WorkflowEvent union with new types
|
|
279
|
-
NEW_TYPES:
|
|
280
|
-
- { type: 'agentPromptStart'; agentId: string; promptId: string; node: WorkflowNode }
|
|
281
|
-
- { type: 'agentPromptEnd'; agentId: string; promptId: string; node: WorkflowNode; duration: number; tokenUsage?: { input: number; output: number } }
|
|
282
|
-
- { type: 'toolInvocation'; toolName: string; input: unknown; output: unknown; duration: number; node: WorkflowNode }
|
|
283
|
-
- { type: 'mcpEvent'; serverName: string; event: string; node: WorkflowNode }
|
|
284
|
-
- { type: 'reflectionStart'; level: string; node: WorkflowNode }
|
|
285
|
-
- { type: 'reflectionEnd'; level: string; success: boolean; node: WorkflowNode }
|
|
286
|
-
VALIDATION: tsc --noEmit passes
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
**P2.M1.T2.S1: Create AgentExecutionContext for hierarchy tracking**
|
|
290
|
-
```
|
|
291
|
-
LOCATION: /src/core/context.ts (NEW FILE)
|
|
292
|
-
IMPORTS: AsyncLocalStorage from 'node:async_hooks'
|
|
293
|
-
EXPORTS: AgentExecutionContext, agentExecutionContext (singleton)
|
|
294
|
-
INTERFACE:
|
|
295
|
-
- workflowNode: WorkflowNode | null
|
|
296
|
-
- emitEvent: (event: WorkflowEvent) => void
|
|
297
|
-
PATTERN: Use AsyncLocalStorage<AgentExecutionContext>
|
|
298
|
-
METHODS:
|
|
299
|
-
- getContext(): AgentExecutionContext | undefined
|
|
300
|
-
- runInContext<T>(ctx: AgentExecutionContext, fn: () => Promise<T>): Promise<T>
|
|
301
|
-
VALIDATION: Unit test context propagation through async calls
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
**P2.M1.T1.S2: Emit agentPromptStart/End events from Agent.prompt()**
|
|
305
|
-
```
|
|
306
|
-
LOCATION: /src/core/agent.ts
|
|
307
|
-
DEPENDENCIES: AgentExecutionContext
|
|
308
|
-
LOGIC:
|
|
309
|
-
1. Check agentExecutionContext.getContext()
|
|
310
|
-
2. If context exists, emit agentPromptStart before API call
|
|
311
|
-
3. Track duration
|
|
312
|
-
4. Emit agentPromptEnd after response with tokenUsage
|
|
313
|
-
5. If no context, events are standalone (not in tree)
|
|
314
|
-
VALIDATION: Integration test shows events in tree when called from step
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
**P2.M1.T1.S3: Emit toolInvocation and mcpEvent events**
|
|
318
|
-
```
|
|
319
|
-
LOCATION: /src/core/agent.ts, /src/core/mcp-handler.ts
|
|
320
|
-
DEPENDENCIES: AgentExecutionContext
|
|
321
|
-
LOGIC:
|
|
322
|
-
- In tool execution loop: emit toolInvocation for each tool call
|
|
323
|
-
- In MCP handler: emit mcpEvent for MCP interactions
|
|
324
|
-
VALIDATION: Test tool events appear nested under agentPrompt node
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
**P2.M1.T2.S2: Integrate context into @Step decorator**
|
|
328
|
-
```
|
|
329
|
-
LOCATION: /src/decorators/step.ts
|
|
330
|
-
DEPENDENCIES: AgentExecutionContext
|
|
331
|
-
LOGIC:
|
|
332
|
-
1. Before executing step function, get/create WorkflowNode
|
|
333
|
-
2. Create AgentExecutionContext with node and emitEvent
|
|
334
|
-
3. Use runInContext() to wrap step execution
|
|
335
|
-
4. Any agent.prompt() inside step automatically inherits context
|
|
336
|
-
VALIDATION: Agent calls inside @Step decorated methods emit events in tree
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
#### P2.M2: WorkflowContext Implementation
|
|
340
|
-
|
|
341
|
-
**P2.M2.T1.S1: Define WorkflowContext interface**
|
|
342
|
-
```
|
|
343
|
-
LOCATION: /src/types/workflow-context.ts (NEW FILE)
|
|
344
|
-
EXPORTS: WorkflowContext interface
|
|
345
|
-
CONTENT:
|
|
346
|
-
- workflowId: string
|
|
347
|
-
- parentWorkflowId?: string
|
|
348
|
-
- step(name: string, fn: () => Promise<any>): Promise<any>
|
|
349
|
-
- spawnWorkflow(wf: Workflow): Promise<any>
|
|
350
|
-
- eventTree: EventTreeHandle
|
|
351
|
-
- reflection: ReflectionAPI (placeholder for Phase 3)
|
|
352
|
-
VALIDATION: tsc --noEmit passes
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
**P2.M2.T1.S2: Implement WorkflowContext class**
|
|
356
|
-
```
|
|
357
|
-
LOCATION: /src/core/workflow-context.ts (NEW FILE)
|
|
358
|
-
CLASS: WorkflowContextImpl implements WorkflowContext
|
|
359
|
-
CONSTRUCTOR: (workflow: Workflow)
|
|
360
|
-
METHODS:
|
|
361
|
-
- step(name, fn): Creates step node, sets AgentExecutionContext, executes fn, captures result/error, emits stepStart/stepEnd
|
|
362
|
-
- spawnWorkflow(wf): Attaches child workflow, runs it, returns result
|
|
363
|
-
- eventTree getter: Returns EventTreeHandle for current workflow
|
|
364
|
-
PATTERN: Use AgentExecutionContext.runInContext() in step()
|
|
365
|
-
VALIDATION: Test step() creates events, test spawnWorkflow() attaches children
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
**P2.M2.T1.S3: Update Workflow class for executor pattern**
|
|
369
|
-
```
|
|
370
|
-
LOCATION: /src/core/workflow.ts
|
|
371
|
-
ACTION: Add optional executor function to constructor
|
|
372
|
-
SIGNATURE: constructor(config?: WorkflowConfig | string, executor?: (ctx: WorkflowContext) => Promise<any>)
|
|
373
|
-
LOGIC:
|
|
374
|
-
- If executor provided: In run(), create WorkflowContext, call executor(ctx)
|
|
375
|
-
- Keep abstract run() support for class-based workflows (backward compat)
|
|
376
|
-
NEW_INTERFACE:
|
|
377
|
-
WorkflowConfig { name?: string; enableReflection?: boolean }
|
|
378
|
-
VALIDATION: Both patterns work - class-based and functional
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
**P2.M2.T2.S1: Implement EventTreeHandle**
|
|
382
|
-
```
|
|
383
|
-
LOCATION: /src/core/event-tree.ts (NEW FILE)
|
|
384
|
-
CLASS: EventTreeHandle
|
|
385
|
-
CONSTRUCTOR: (root: WorkflowNode)
|
|
386
|
-
METHODS:
|
|
387
|
-
- get root(): EventNode
|
|
388
|
-
- getNode(id: string): EventNode | undefined
|
|
389
|
-
- getChildren(id: string): EventNode[]
|
|
390
|
-
- getAncestors(id: string): EventNode[]
|
|
391
|
-
- toJSON(): EventNode
|
|
392
|
-
PATTERN: Use existing WorkflowNode traversal from WorkflowTreeDebugger
|
|
393
|
-
VALIDATION: Unit test all traversal methods
|
|
394
|
-
```
|
|
395
|
-
|
|
396
|
-
**P2.M2.T3: Update exports**
|
|
397
|
-
```
|
|
398
|
-
LOCATION: /src/types/index.ts, /src/core/index.ts, /src/index.ts
|
|
399
|
-
ACTION: Export all new types and classes
|
|
400
|
-
EXPORTS:
|
|
401
|
-
- WorkflowContext, WorkflowContextImpl
|
|
402
|
-
- EventTreeHandle
|
|
403
|
-
- AgentExecutionContext helpers
|
|
404
|
-
VALIDATION: All exports accessible from main package
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
---
|
|
408
|
-
|
|
409
|
-
## Validation Gates
|
|
410
|
-
|
|
411
|
-
### After Phase 1:
|
|
412
|
-
```bash
|
|
413
|
-
# Type check
|
|
414
|
-
npm run lint
|
|
415
|
-
|
|
416
|
-
# Build
|
|
417
|
-
npm run build
|
|
418
|
-
|
|
419
|
-
# Unit tests for Agent and Prompt
|
|
420
|
-
npm test -- --grep "Agent|Prompt"
|
|
421
|
-
|
|
422
|
-
# Manual validation
|
|
423
|
-
node -e "const { Agent, Prompt } = require('./dist'); console.log('Imports work');"
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
### After Phase 2:
|
|
427
|
-
```bash
|
|
428
|
-
# Full test suite
|
|
429
|
-
npm test
|
|
430
|
-
|
|
431
|
-
# Integration test - events in tree
|
|
432
|
-
npm test -- --grep "tree-mirroring"
|
|
433
|
-
|
|
434
|
-
# Manual validation - create workflow with agent
|
|
435
|
-
cat << 'EOF' > /tmp/test-agent.ts
|
|
436
|
-
import { Workflow, Agent, Prompt, WorkflowTreeDebugger } from './dist';
|
|
437
|
-
import { z } from 'zod';
|
|
438
|
-
|
|
439
|
-
const agent = new Agent({ name: 'TestAgent' });
|
|
440
|
-
const prompt = new Prompt({
|
|
441
|
-
user: 'Say hello',
|
|
442
|
-
responseFormat: z.object({ message: z.string() })
|
|
443
|
-
});
|
|
444
|
-
|
|
445
|
-
class TestWorkflow extends Workflow {
|
|
446
|
-
async run() {
|
|
447
|
-
this.setStatus('running');
|
|
448
|
-
// This should emit events
|
|
449
|
-
const result = await agent.prompt(prompt);
|
|
450
|
-
console.log(result);
|
|
451
|
-
this.setStatus('completed');
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
const wf = new TestWorkflow('Test');
|
|
456
|
-
const debugger_ = new WorkflowTreeDebugger(wf);
|
|
457
|
-
debugger_.events.subscribe({ next: e => console.log('Event:', e.type) });
|
|
458
|
-
wf.run();
|
|
459
|
-
EOF
|
|
460
|
-
npx tsx /tmp/test-agent.ts
|
|
461
|
-
```
|
|
462
|
-
|
|
463
|
-
---
|
|
464
|
-
|
|
465
|
-
## Final Validation Checklist
|
|
466
|
-
|
|
467
|
-
- [ ] package.json has @anthropic-ai/sdk@^0.71.1 and zod@^3.23.0
|
|
468
|
-
- [ ] All new files created in correct locations
|
|
469
|
-
- [ ] Types exported from /src/types/index.ts
|
|
470
|
-
- [ ] Classes exported from /src/index.ts
|
|
471
|
-
- [ ] Agent.prompt() executes API calls and validates responses
|
|
472
|
-
- [ ] Prompt<T> provides type-safe response validation
|
|
473
|
-
- [ ] AgentExecutionContext propagates through AsyncLocalStorage
|
|
474
|
-
- [ ] Events emitted when agent.prompt() called within workflow step
|
|
475
|
-
- [ ] WorkflowTreeDebugger shows agent events in tree visualization
|
|
476
|
-
- [ ] @Step decorator integrates context automatically
|
|
477
|
-
- [ ] WorkflowContext.step() works for functional workflow pattern
|
|
478
|
-
- [ ] All existing tests still pass
|
|
479
|
-
- [ ] npm run build produces valid dist/
|
|
480
|
-
|
|
481
|
-
---
|
|
482
|
-
|
|
483
|
-
## File Creation Summary
|
|
484
|
-
|
|
485
|
-
### New Files:
|
|
486
|
-
```
|
|
487
|
-
/src/types/agent.ts - AgentConfig, PromptOverrides types
|
|
488
|
-
/src/types/prompt.ts - PromptConfig<T> type
|
|
489
|
-
/src/types/sdk-primitives.ts - Tool, MCPServer, Skill, AgentHooks types
|
|
490
|
-
/src/types/workflow-context.ts - WorkflowContext interface
|
|
491
|
-
/src/core/agent.ts - Agent class
|
|
492
|
-
/src/core/prompt.ts - Prompt<T> class
|
|
493
|
-
/src/core/context.ts - AgentExecutionContext with AsyncLocalStorage
|
|
494
|
-
/src/core/mcp-handler.ts - MCPHandler class
|
|
495
|
-
/src/core/workflow-context.ts - WorkflowContextImpl class
|
|
496
|
-
/src/core/event-tree.ts - EventTreeHandle class
|
|
497
|
-
/src/__tests__/unit/agent.test.ts
|
|
498
|
-
/src/__tests__/unit/prompt.test.ts
|
|
499
|
-
/src/__tests__/unit/context.test.ts
|
|
500
|
-
/src/__tests__/integration/agent-workflow.test.ts
|
|
501
|
-
```
|
|
502
|
-
|
|
503
|
-
### Modified Files:
|
|
504
|
-
```
|
|
505
|
-
/package.json - Add dependencies
|
|
506
|
-
/src/types/index.ts - Export new types
|
|
507
|
-
/src/types/events.ts - Extend WorkflowEvent union
|
|
508
|
-
/src/core/workflow.ts - Add executor pattern support
|
|
509
|
-
/src/core/index.ts - Export new classes
|
|
510
|
-
/src/decorators/step.ts - Integrate AgentExecutionContext
|
|
511
|
-
/src/index.ts - Export all new public API
|
|
512
|
-
```
|
|
513
|
-
|
|
514
|
-
---
|
|
515
|
-
|
|
516
|
-
## Confidence Score: 8/10
|
|
517
|
-
|
|
518
|
-
**Strengths:**
|
|
519
|
-
- Clear existing codebase patterns to follow
|
|
520
|
-
- Well-documented external dependencies
|
|
521
|
-
- Specific file locations and method signatures
|
|
522
|
-
- Comprehensive validation steps
|
|
523
|
-
|
|
524
|
-
**Risks:**
|
|
525
|
-
- AsyncLocalStorage integration with existing decorator may need iteration
|
|
526
|
-
- Tool execution loop complexity depends on actual Anthropic SDK behavior
|
|
527
|
-
- MCP handler may need refinement based on actual MCP protocol details
|