groundswell 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/{src/__tests__/helpers/index.ts → dist/__tests__/helpers/index.js} +2 -10
- 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} +1 -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 +5 -2
- package/.claude/commands/subtask-planning/prp-base-create.md +0 -120
- package/.claude/commands/subtask-planning/prp-base-execute.md +0 -65
- package/.claude/commands/task-breakdown.md +0 -94
- package/.claude/settings.local.json +0 -9
- package/.claude/system_prompts/task-breakdown.md +0 -101
- package/PRD.md +0 -543
- package/PRPs/001-hierarchical-workflow-engine.md +0 -2438
- 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 -258
- 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/examples/11-reparenting-workflows.ts +0 -269
- package/examples/index.ts +0 -147
- package/examples/utils/helpers.ts +0 -57
- package/package-lock.json +0 -2398
- package/plan/001_d3bb02af4886/TEST_RESULTS.md +0 -259
- package/plan/001_d3bb02af4886/backlog.json +0 -867
- package/plan/001_d3bb02af4886/bug_fix_tasks.json +0 -484
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S1/PRP.md +0 -488
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S2/PRP.md +0 -581
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M1T1S3/PRP.md +0 -687
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S1/PRP.md +0 -492
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/PRP.md +0 -932
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/concurrent_error_testing_patterns.md +0 -1109
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/vitest_concurrent_testing.md +0 -802
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T1S3/research/workflow_engine_test_references.md +0 -603
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S1/PRP.md +0 -564
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S3/PRP.md +0 -518
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T2S4/PRP.md +0 -1252
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/PRP.md +0 -364
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/CODEBASE_INVENTORY.md +0 -114
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/DECORATOR_DOCUMENTATION_PATTERNS.md +0 -205
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/PRD_LOCATION_ANALYSIS.md +0 -199
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M2T3S1/research/ULTRATHINK_PRP_PLAN.md +0 -134
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/PRP.md +0 -495
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S1/research/console_error_inventory.md +0 -435
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S2/PRP.md +0 -506
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T1S3/PRP.md +0 -612
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/PRP.md +0 -558
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T2S2/research/external_research.md +0 -788
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S2/PRP.md +0 -460
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T3S3/PRP.md +0 -454
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/PRP.md +0 -520
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/RECOMMENDATION.md +0 -417
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/external_workflow_engines_research.md +0 -760
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S1/research/security_implications_analysis.md +0 -245
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M3T4S2/PRP.md +0 -792
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/PRP.md +0 -535
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S1/TEST_EXECUTION_REPORT.md +0 -190
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/PRP.md +0 -654
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/TEST_FIX_REPORT.md +0 -227
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/KEY_FINDINGS.md +0 -345
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/QUICK_REFERENCE.md +0 -193
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T1S2/research/test_maintenance_research.md +0 -1323
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/BREAKING_CHANGES_AUDIT.md +0 -1011
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S1/PRP.md +0 -927
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/P1M4T3S2/PRP.md +0 -505
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/architecture/logger_child_signature_analysis.md +0 -401
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/child_implementation_research.md +0 -142
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/test_patterns_research.md +0 -112
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S3/vitest_patterns_research.md +0 -159
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/PRP.md +0 -549
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/VERIFICATION_REPORT.md +0 -368
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/edge_case_analysis.md +0 -172
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M1T1S4/usage_inventory.md +0 -175
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S2/PRP.md +0 -696
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T1S4/PRP.md +0 -860
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/PRP.md +0 -1066
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01-testing-aggregated-errors.md +0 -1103
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/01_typescript_error_aggregation_patterns.md +0 -789
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02-error-merge-strategy-testing-guide.md +0 -1098
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/02_aggregate_error_patterns.md +0 -1037
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03-promise-allsettled-testing-patterns.md +0 -916
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/03_error_merging_strategies.md +0 -1045
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/04_github_stackoverflow_examples.md +0 -890
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/05_comprehensive_summary.md +0 -822
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/INDEX.md +0 -668
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/QUICK_REFERENCE.md +0 -706
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/README.md +0 -265
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S2/research/RESEARCH_REPORT.md +0 -655
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T2S4/research/vitest_testing_patterns.md +0 -1103
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M2T3S2/PRP.md +0 -426
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/PRP.md +0 -506
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/QUICK_REFERENCE.md +0 -114
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/RESEARCH_SUMMARY.md +0 -316
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S2/research/vitest_observer_error_logging_best_practices.md +0 -754
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T1S3/PRP.md +0 -612
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/PRP.md +0 -719
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/README.md +0 -215
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S1/analysis.md +0 -765
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T2S3/PRP.md +0 -718
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/DECISION.md +0 -149
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/PRP.md +0 -470
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/ULTRATHINK_PLAN.md +0 -332
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/codebase_workflow_name_analysis.md +0 -167
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/external_best_practices.md +0 -265
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md +0 -273
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S1/workflow_engine_ancestry_api_research.md +0 -760
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T4S3-PRP.md +0 -434
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S1/PRP.md +0 -717
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/PRP.md +0 -472
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/VALIDATION_REPORT.md +0 -125
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M4T2S2/research/ULTRATHINK_PRP_PLAN.md +0 -301
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/error-logging-best-practices.md +0 -1170
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/research_typescript_partial_and_overloads.md +0 -940
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-quick-reference.md +0 -151
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/vitest-research.md +0 -650
- package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/prd_snapshot.md +0 -259
- package/plan/001_d3bb02af4886/bugfix/P1M1T1S1/PRP.md +0 -457
- package/plan/001_d3bb02af4886/bugfix/RESEARCH_SUMMARY.md +0 -346
- package/plan/001_d3bb02af4886/bugfix/architecture/codebase_structure.md +0 -311
- package/plan/001_d3bb02af4886/bugfix/architecture/concurrent_execution_best_practices.md +0 -1565
- package/plan/001_d3bb02af4886/bugfix/architecture/error_handling_patterns.md +0 -288
- package/plan/001_d3bb02af4886/bugfix/architecture/promise_all_analysis.md +0 -741
- package/plan/001_d3bb02af4886/docs/PRP/P1M1T1S4-functional-workflow-error-state-capture-test.md +0 -652
- package/plan/001_d3bb02af4886/docs/PRP/P1P2-PRP.md +0 -527
- package/plan/001_d3bb02af4886/docs/PRP/P3P4-PRP.md +0 -1388
- package/plan/001_d3bb02af4886/docs/PRP/P4P5-PRP.md +0 -1136
- package/plan/001_d3bb02af4886/docs/PRP/PRP.md +0 -527
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S1-PRP.md +0 -415
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S2-PRP.md +0 -378
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M1T2S4-PRP.md +0 -713
- package/plan/001_d3bb02af4886/docs/PRP/bugfix/P1M2T1S4-PRP.md +0 -370
- package/plan/001_d3bb02af4886/docs/PRP_P1M3T1S3.md +0 -499
- package/plan/001_d3bb02af4886/docs/TEST_RESULTS.md +0 -230
- package/plan/001_d3bb02af4886/docs/architecture/external_deps.md +0 -358
- package/plan/001_d3bb02af4886/docs/architecture/system_context.md +0 -242
- package/plan/001_d3bb02af4886/docs/bugfix/ANALYSIS_PRD_VS_IMPLEMENTATION.md +0 -1134
- package/plan/001_d3bb02af4886/docs/bugfix/GAP_ANALYSIS_SUMMARY.md +0 -179
- package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/PRP.md +0 -629
- package/plan/001_d3bb02af4886/docs/bugfix/P1M4T2S1/validation-report.md +0 -214
- package/plan/001_d3bb02af4886/docs/bugfix/PRP_P1M4T2S3.md +0 -629
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_PRP.md +0 -529
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_QUICK_REFERENCE.md +0 -142
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_README.md +0 -304
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_TEST_RESULTS.md +0 -558
- package/plan/001_d3bb02af4886/docs/bugfix/bugfix_VALIDATION_SUMMARY.md +0 -256
- package/plan/001_d3bb02af4886/docs/bugfix/system_context.md +0 -346
- package/plan/001_d3bb02af4886/docs/bugfix-architecture/bug_analysis.md +0 -415
- package/plan/001_d3bb02af4886/docs/bugfix-architecture/implementation_patterns.md +0 -489
- package/plan/001_d3bb02af4886/docs/bugfix-architecture/system_context.md +0 -218
- package/plan/001_d3bb02af4886/docs/bugfix_INITIATION_SUMMARY.md +0 -380
- package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_PATTERNS.md +0 -1923
- package/plan/001_d3bb02af4886/docs/research/CYCLE_DETECTION_QUICK_REF.md +0 -319
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/codebase-context.md +0 -115
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/cycle-detection-algorithms.md +0 -134
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/test-patterns.md +0 -153
- package/plan/001_d3bb02af4886/docs/research/P1M1T2S1/workflow-class.md +0 -132
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_BEST_PRACTICES.md +0 -716
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/DECORATOR_DOCUMENTATION_QUICK_REF.md +0 -186
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/GROUNDSWELL_DECORATOR_EXAMPLES.md +0 -604
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/INDEX.md +0 -213
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/codebase_structure.md +0 -30
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/existing_test_pattern.md +0 -56
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/getRootObservers_implementation.md +0 -53
- package/plan/001_d3bb02af4886/docs/research/P1M2T1S4/test_conventions.md +0 -49
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/PRP.md +0 -958
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/QUICK_REFERENCE.md +0 -339
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/README.md +0 -305
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/SUMMARY.md +0 -433
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/bidirectional-tree-consistency-testing.md +0 -1574
- package/plan/001_d3bb02af4886/docs/research/P1M3T1S4/test-pattern-examples.md +0 -1014
- package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_BEST_PRACTICES.md +0 -1929
- package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_CODE_PATTERNS.md +0 -857
- package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_INTEGRATION_GUIDE.md +0 -738
- package/plan/001_d3bb02af4886/docs/research/P1P2/LRU_CACHE_RESEARCH_INDEX.md +0 -424
- package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_INDEX.md +0 -291
- package/plan/001_d3bb02af4886/docs/research/P1P2/REFLECTION_RESEARCH_REPORT.md +0 -1342
- package/plan/001_d3bb02af4886/docs/research/P1P2/RESEARCH_SUMMARY.md +0 -342
- package/plan/001_d3bb02af4886/docs/research/P1P2/anthropic-sdk.md +0 -174
- package/plan/001_d3bb02af4886/docs/research/P1P2/async-local-storage.md +0 -200
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-code-patterns.md +0 -1205
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-decision-matrix.md +0 -421
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-implementation-guide.md +0 -1341
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-integration-guide.md +0 -834
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-patterns.md +0 -1468
- package/plan/001_d3bb02af4886/docs/research/P1P2/reflection-quick-reference.md +0 -558
- package/plan/001_d3bb02af4886/docs/research/P1P2/zod-schema.md +0 -152
- package/plan/001_d3bb02af4886/docs/research/P3P4/caching-lru.md +0 -116
- package/plan/001_d3bb02af4886/docs/research/P3P4/introspection-tools.md +0 -177
- package/plan/001_d3bb02af4886/docs/research/P3P4/reflection-patterns.md +0 -117
- package/plan/001_d3bb02af4886/docs/research/P4P5/RESEARCH_SUMMARY.md +0 -151
- package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_QUICK_REF.md +0 -376
- package/plan/001_d3bb02af4886/docs/research/PROMISE_ALLSETTLED_RESEARCH.md +0 -1507
- package/plan/001_d3bb02af4886/docs/research/bugfix_typescript_patterns.md +0 -949
- package/plan/001_d3bb02af4886/docs/research/error-testing-research.md +0 -619
- package/plan/001_d3bb02af4886/docs/research/error_handling_patterns.md +0 -723
- package/plan/001_d3bb02af4886/docs/research/general/INTROSPECTION_RESEARCH_SUMMARY.md +0 -378
- package/plan/001_d3bb02af4886/docs/research/general/README-INTROSPECTION.md +0 -352
- package/plan/001_d3bb02af4886/docs/research/general/agent-introspection-patterns.md +0 -1085
- package/plan/001_d3bb02af4886/docs/research/general/introspection-security-guide.md +0 -984
- package/plan/001_d3bb02af4886/docs/research/general/introspection-tool-examples.md +0 -875
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/PRP_TEMPLATE.md +0 -460
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/QUICK_REFERENCE.md +0 -324
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/README.md +0 -175
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/RESEARCH_REPORT.md +0 -499
- package/plan/001_d3bb02af4886/docs/research/incremental-tree-map-updates/SUMMARY.md +0 -163
- package/plan/001_d3bb02af4886/prd_snapshot.md +0 -543
- package/plan/bugfix/BUG_FIX_SUMMARY.md +0 -961
- package/scripts/generate-llms-full.ts +0 -206
- package/src/__tests__/adversarial/attachChild-performance.test.ts +0 -216
- package/src/__tests__/adversarial/circular-reference.test.ts +0 -101
- package/src/__tests__/adversarial/complex-circular-reference.test.ts +0 -139
- package/src/__tests__/adversarial/concurrent-task-failures.test.ts +0 -571
- package/src/__tests__/adversarial/deep-analysis.test.ts +0 -729
- package/src/__tests__/adversarial/deep-hierarchy-stress.test.ts +0 -213
- package/src/__tests__/adversarial/e2e-prd-validation.test.ts +0 -448
- package/src/__tests__/adversarial/edge-case.test.ts +0 -703
- package/src/__tests__/adversarial/error-merge-strategy.test.ts +0 -760
- package/src/__tests__/adversarial/incremental-performance.test.ts +0 -140
- package/src/__tests__/adversarial/node-map-update-benchmarks.test.ts +0 -457
- package/src/__tests__/adversarial/observer-propagation.test.ts +0 -487
- package/src/__tests__/adversarial/parent-validation.test.ts +0 -143
- package/src/__tests__/adversarial/prd-12-2-compliance.test.ts +0 -611
- package/src/__tests__/adversarial/prd-compliance.test.ts +0 -731
- package/src/__tests__/compatibility/backward-compatibility.test.ts +0 -1572
- package/src/__tests__/helpers/tree-verification.ts +0 -257
- package/src/__tests__/integration/agent-workflow.test.ts +0 -256
- package/src/__tests__/integration/bidirectional-consistency.test.ts +0 -847
- package/src/__tests__/integration/observer-logging.test.ts +0 -643
- package/src/__tests__/integration/tree-mirroring.test.ts +0 -151
- package/src/__tests__/integration/workflow-reparenting.test.ts +0 -303
- 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 -217
- package/src/__tests__/unit/decorators.test.ts +0 -100
- package/src/__tests__/unit/introspection-tools.test.ts +0 -277
- package/src/__tests__/unit/logger.test.ts +0 -293
- package/src/__tests__/unit/observable.test.ts +0 -321
- package/src/__tests__/unit/prompt.test.ts +0 -135
- package/src/__tests__/unit/reflection.test.ts +0 -210
- package/src/__tests__/unit/tree-debugger-incremental.test.ts +0 -170
- package/src/__tests__/unit/tree-debugger.test.ts +0 -85
- package/src/__tests__/unit/utils/workflow-error-utils.test.ts +0 -209
- package/src/__tests__/unit/workflow-detachChild.test.ts +0 -100
- package/src/__tests__/unit/workflow-emitEvent-childDetached.test.ts +0 -153
- package/src/__tests__/unit/workflow-isDescendantOf.test.ts +0 -180
- package/src/__tests__/unit/workflow.test.ts +0 -357
- package/src/cache/cache-key.ts +0 -244
- package/src/cache/cache.ts +0 -236
- package/src/core/agent.ts +0 -593
- package/src/core/event-tree.ts +0 -260
- package/src/core/logger.ts +0 -112
- package/src/core/mcp-handler.ts +0 -184
- package/src/core/prompt.ts +0 -150
- package/src/core/workflow-context.ts +0 -351
- package/src/core/workflow.ts +0 -540
- package/src/debugger/tree-debugger.ts +0 -255
- package/src/decorators/observed-state.ts +0 -95
- package/src/decorators/step.ts +0 -139
- package/src/decorators/task.ts +0 -159
- package/src/examples/tdd-orchestrator.ts +0 -65
- package/src/examples/test-cycle-workflow.ts +0 -64
- package/src/index.ts +0 -142
- 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 -32
- package/src/types/error-strategy.ts +0 -13
- package/src/types/error.ts +0 -20
- package/src/types/events.ts +0 -75
- 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 -106
- package/src/utils/workflow-error-utils.ts +0 -56
- package/tsconfig.json +0 -22
- package/vitest.config.ts +0 -16
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
WorkflowNode,
|
|
3
|
-
WorkflowEvent,
|
|
4
|
-
WorkflowObserver,
|
|
5
|
-
LogEntry,
|
|
6
|
-
} from '../types/index.js';
|
|
7
|
-
import { Observable } from '../utils/observable.js';
|
|
8
|
-
import type { Workflow } from '../core/workflow.js';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Status symbols for tree visualization
|
|
12
|
-
*/
|
|
13
|
-
const STATUS_SYMBOLS: Record<string, string> = {
|
|
14
|
-
idle: '○',
|
|
15
|
-
running: '◐',
|
|
16
|
-
completed: '✓',
|
|
17
|
-
failed: '✗',
|
|
18
|
-
cancelled: '⊘',
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Tree debugger for real-time workflow visualization
|
|
23
|
-
* Implements WorkflowObserver to receive all events
|
|
24
|
-
*/
|
|
25
|
-
export class WorkflowTreeDebugger implements WorkflowObserver {
|
|
26
|
-
/** Root node of the workflow tree */
|
|
27
|
-
private root: WorkflowNode;
|
|
28
|
-
|
|
29
|
-
/** Observable stream of workflow events */
|
|
30
|
-
public readonly events: Observable<WorkflowEvent>;
|
|
31
|
-
|
|
32
|
-
/** Node lookup map for quick access */
|
|
33
|
-
private nodeMap: Map<string, WorkflowNode> = new Map();
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Create a tree debugger attached to a workflow
|
|
37
|
-
* @param workflow The root workflow to debug
|
|
38
|
-
*/
|
|
39
|
-
constructor(workflow: Workflow) {
|
|
40
|
-
this.root = workflow.getNode();
|
|
41
|
-
this.events = new Observable<WorkflowEvent>();
|
|
42
|
-
|
|
43
|
-
// Build initial node map
|
|
44
|
-
this.buildNodeMap(this.root);
|
|
45
|
-
|
|
46
|
-
// Register as observer on the workflow
|
|
47
|
-
workflow.addObserver(this);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Build node lookup map recursively
|
|
52
|
-
*/
|
|
53
|
-
private buildNodeMap(node: WorkflowNode): void {
|
|
54
|
-
this.nodeMap.set(node.id, node);
|
|
55
|
-
for (const child of node.children) {
|
|
56
|
-
this.buildNodeMap(child);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Remove entire subtree from node map using BFS traversal
|
|
62
|
-
* O(k) complexity where k = number of nodes in subtree
|
|
63
|
-
* Uses iterative BFS to avoid stack overflow on deep trees
|
|
64
|
-
*/
|
|
65
|
-
private removeSubtreeNodes(nodeId: string): void {
|
|
66
|
-
const node = this.nodeMap.get(nodeId);
|
|
67
|
-
if (!node) return; // Already removed or never existed
|
|
68
|
-
|
|
69
|
-
// BFS traversal to collect all descendant IDs
|
|
70
|
-
const toRemove: string[] = [];
|
|
71
|
-
const queue: WorkflowNode[] = [node];
|
|
72
|
-
|
|
73
|
-
while (queue.length > 0) {
|
|
74
|
-
const current = queue.shift()!;
|
|
75
|
-
toRemove.push(current.id);
|
|
76
|
-
// Add children to queue for BFS traversal
|
|
77
|
-
queue.push(...current.children);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Batch delete all collected keys (atomic update)
|
|
81
|
-
for (const id of toRemove) {
|
|
82
|
-
this.nodeMap.delete(id);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// WorkflowObserver implementation
|
|
87
|
-
|
|
88
|
-
onLog(_entry: LogEntry): void {
|
|
89
|
-
// Events are forwarded through the event stream
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
onEvent(event: WorkflowEvent): void {
|
|
93
|
-
// Handle structural events with incremental updates
|
|
94
|
-
switch (event.type) {
|
|
95
|
-
case 'childAttached':
|
|
96
|
-
// Keep existing logic - already optimal O(k)
|
|
97
|
-
this.buildNodeMap(event.child);
|
|
98
|
-
break;
|
|
99
|
-
|
|
100
|
-
case 'childDetached':
|
|
101
|
-
// NEW: Incremental subtree removal
|
|
102
|
-
this.removeSubtreeNodes(event.childId);
|
|
103
|
-
break;
|
|
104
|
-
|
|
105
|
-
case 'treeUpdated':
|
|
106
|
-
// NEW: Update root reference only
|
|
107
|
-
this.root = event.root;
|
|
108
|
-
break;
|
|
109
|
-
|
|
110
|
-
default:
|
|
111
|
-
// Non-structural events - no map update needed
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Always forward to event stream (existing behavior)
|
|
116
|
-
this.events.next(event);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
onStateUpdated(_node: WorkflowNode): void {
|
|
120
|
-
// State updates are available through the node
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
onTreeChanged(root: WorkflowNode): void {
|
|
124
|
-
// All tree changes now handled incrementally in onEvent()
|
|
125
|
-
// Just update root reference if different
|
|
126
|
-
if (this.root !== root) {
|
|
127
|
-
this.root = root;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// Public API
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Get the current tree root
|
|
135
|
-
*/
|
|
136
|
-
getTree(): WorkflowNode {
|
|
137
|
-
return this.root;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Get a node by ID
|
|
142
|
-
*/
|
|
143
|
-
getNode(id: string): WorkflowNode | undefined {
|
|
144
|
-
return this.nodeMap.get(id);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Render tree as ASCII string
|
|
149
|
-
* @param node Starting node (defaults to root)
|
|
150
|
-
*/
|
|
151
|
-
toTreeString(node?: WorkflowNode): string {
|
|
152
|
-
return this.renderTree(node ?? this.root, '', true, true);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Recursive tree rendering
|
|
157
|
-
*/
|
|
158
|
-
private renderTree(
|
|
159
|
-
node: WorkflowNode,
|
|
160
|
-
prefix: string,
|
|
161
|
-
isLast: boolean,
|
|
162
|
-
isRoot: boolean
|
|
163
|
-
): string {
|
|
164
|
-
let result = '';
|
|
165
|
-
|
|
166
|
-
// Status symbol and color indicator
|
|
167
|
-
const statusSymbol = STATUS_SYMBOLS[node.status] || '?';
|
|
168
|
-
const nodeInfo = `${statusSymbol} ${node.name} [${node.status}]`;
|
|
169
|
-
|
|
170
|
-
if (isRoot) {
|
|
171
|
-
result += nodeInfo + '\n';
|
|
172
|
-
} else {
|
|
173
|
-
const connector = isLast ? '└── ' : '├── ';
|
|
174
|
-
result += prefix + connector + nodeInfo + '\n';
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// Render children
|
|
178
|
-
const childCount = node.children.length;
|
|
179
|
-
node.children.forEach((child, index) => {
|
|
180
|
-
const isLastChild = index === childCount - 1;
|
|
181
|
-
const childPrefix = isRoot ? '' : prefix + (isLast ? ' ' : '│ ');
|
|
182
|
-
result += this.renderTree(child, childPrefix, isLastChild, false);
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
return result;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Render logs as formatted string
|
|
190
|
-
* @param node Starting node (defaults to root, includes descendants)
|
|
191
|
-
*/
|
|
192
|
-
toLogString(node?: WorkflowNode): string {
|
|
193
|
-
const logs = this.collectLogs(node ?? this.root);
|
|
194
|
-
|
|
195
|
-
// Sort by timestamp
|
|
196
|
-
logs.sort((a, b) => a.timestamp - b.timestamp);
|
|
197
|
-
|
|
198
|
-
return logs
|
|
199
|
-
.map((log) => {
|
|
200
|
-
const time = new Date(log.timestamp).toISOString();
|
|
201
|
-
const level = log.level.toUpperCase().padEnd(5);
|
|
202
|
-
const nodeRef = this.nodeMap.get(log.workflowId);
|
|
203
|
-
const nodeName = nodeRef?.name ?? log.workflowId;
|
|
204
|
-
return `[${time}] ${level} [${nodeName}] ${log.message}`;
|
|
205
|
-
})
|
|
206
|
-
.join('\n');
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* Collect all logs from a node and its descendants
|
|
211
|
-
*/
|
|
212
|
-
private collectLogs(node: WorkflowNode): LogEntry[] {
|
|
213
|
-
const logs: LogEntry[] = [...node.logs];
|
|
214
|
-
|
|
215
|
-
for (const child of node.children) {
|
|
216
|
-
logs.push(...this.collectLogs(child));
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
return logs;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Get summary statistics for the tree
|
|
224
|
-
*/
|
|
225
|
-
getStats(): {
|
|
226
|
-
totalNodes: number;
|
|
227
|
-
byStatus: Record<string, number>;
|
|
228
|
-
totalLogs: number;
|
|
229
|
-
totalEvents: number;
|
|
230
|
-
} {
|
|
231
|
-
const stats = {
|
|
232
|
-
totalNodes: 0,
|
|
233
|
-
byStatus: {} as Record<string, number>,
|
|
234
|
-
totalLogs: 0,
|
|
235
|
-
totalEvents: 0,
|
|
236
|
-
};
|
|
237
|
-
|
|
238
|
-
this.collectStats(this.root, stats);
|
|
239
|
-
return stats;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
private collectStats(
|
|
243
|
-
node: WorkflowNode,
|
|
244
|
-
stats: ReturnType<typeof this.getStats>
|
|
245
|
-
): void {
|
|
246
|
-
stats.totalNodes++;
|
|
247
|
-
stats.byStatus[node.status] = (stats.byStatus[node.status] || 0) + 1;
|
|
248
|
-
stats.totalLogs += node.logs.length;
|
|
249
|
-
stats.totalEvents += node.events.length;
|
|
250
|
-
|
|
251
|
-
for (const child of node.children) {
|
|
252
|
-
this.collectStats(child, stats);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import type { StateFieldMetadata, SerializedWorkflowState } from '../types/index.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* WeakMap storing field metadata keyed by class prototype
|
|
5
|
-
* Structure: Map<propertyKey, StateFieldMetadata>
|
|
6
|
-
*/
|
|
7
|
-
const OBSERVED_STATE_FIELDS = new WeakMap<object, Map<string, StateFieldMetadata>>();
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @ObservedState decorator
|
|
11
|
-
* Marks a class field for inclusion in state snapshots
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* class MyWorkflow extends Workflow {
|
|
15
|
-
* @ObservedState()
|
|
16
|
-
* currentStep!: string;
|
|
17
|
-
*
|
|
18
|
-
* @ObservedState({ redact: true })
|
|
19
|
-
* sensitiveData!: string;
|
|
20
|
-
*
|
|
21
|
-
* @ObservedState({ hidden: true })
|
|
22
|
-
* internalState!: object;
|
|
23
|
-
* }
|
|
24
|
-
*/
|
|
25
|
-
export function ObservedState(meta: StateFieldMetadata = {}) {
|
|
26
|
-
return function (
|
|
27
|
-
_value: undefined,
|
|
28
|
-
context: ClassFieldDecoratorContext
|
|
29
|
-
): void {
|
|
30
|
-
const propertyKey = String(context.name);
|
|
31
|
-
|
|
32
|
-
// Use addInitializer to register field when class is instantiated
|
|
33
|
-
context.addInitializer(function (this: unknown) {
|
|
34
|
-
const instance = this as object;
|
|
35
|
-
const proto = Object.getPrototypeOf(instance);
|
|
36
|
-
let map = OBSERVED_STATE_FIELDS.get(proto);
|
|
37
|
-
if (!map) {
|
|
38
|
-
map = new Map();
|
|
39
|
-
OBSERVED_STATE_FIELDS.set(proto, map);
|
|
40
|
-
}
|
|
41
|
-
map.set(propertyKey, meta);
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Get all observed state from an object instance
|
|
48
|
-
* Applies hidden and redact transformations
|
|
49
|
-
*/
|
|
50
|
-
export function getObservedState(obj: object): SerializedWorkflowState {
|
|
51
|
-
const proto = Object.getPrototypeOf(obj);
|
|
52
|
-
const map = OBSERVED_STATE_FIELDS.get(proto);
|
|
53
|
-
|
|
54
|
-
if (!map) {
|
|
55
|
-
return {};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const result: SerializedWorkflowState = {};
|
|
59
|
-
|
|
60
|
-
for (const [key, meta] of map) {
|
|
61
|
-
// Skip hidden fields
|
|
62
|
-
if (meta.hidden) {
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
let value = (obj as Record<string, unknown>)[key];
|
|
67
|
-
|
|
68
|
-
// Redact sensitive fields
|
|
69
|
-
if (meta.redact) {
|
|
70
|
-
value = '***';
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
result[key] = value;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return result;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Check if a field is observed on an object
|
|
81
|
-
*/
|
|
82
|
-
export function isFieldObserved(obj: object, fieldName: string): boolean {
|
|
83
|
-
const proto = Object.getPrototypeOf(obj);
|
|
84
|
-
const map = OBSERVED_STATE_FIELDS.get(proto);
|
|
85
|
-
return map?.has(fieldName) ?? false;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Get metadata for a specific field
|
|
90
|
-
*/
|
|
91
|
-
export function getFieldMetadata(obj: object, fieldName: string): StateFieldMetadata | undefined {
|
|
92
|
-
const proto = Object.getPrototypeOf(obj);
|
|
93
|
-
const map = OBSERVED_STATE_FIELDS.get(proto);
|
|
94
|
-
return map?.get(fieldName);
|
|
95
|
-
}
|
package/src/decorators/step.ts
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import type { StepOptions, WorkflowError, WorkflowNode, LogEntry, WorkflowEvent } from '../types/index.js';
|
|
2
|
-
import { getObservedState } from './observed-state.js';
|
|
3
|
-
import { runInContext, type AgentExecutionContext } from '../core/context.js';
|
|
4
|
-
import { generateId } from '../utils/id.js';
|
|
5
|
-
|
|
6
|
-
// Type for workflow-like objects that @Step can decorate methods on
|
|
7
|
-
interface WorkflowLike {
|
|
8
|
-
id: string;
|
|
9
|
-
node: WorkflowNode;
|
|
10
|
-
logger: {
|
|
11
|
-
info(message: string, data?: unknown): void;
|
|
12
|
-
};
|
|
13
|
-
emitEvent(event: WorkflowEvent): void;
|
|
14
|
-
snapshotState(): void;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @Step decorator
|
|
19
|
-
* Wraps a method to emit step events, handle errors, and optionally snapshot state
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* class MyWorkflow extends Workflow {
|
|
23
|
-
* @Step({ snapshotState: true, trackTiming: true })
|
|
24
|
-
* async processData() {
|
|
25
|
-
* // ... step logic
|
|
26
|
-
* }
|
|
27
|
-
* }
|
|
28
|
-
*/
|
|
29
|
-
export function Step(opts: StepOptions = {}) {
|
|
30
|
-
return function <This, Args extends unknown[], Return>(
|
|
31
|
-
originalMethod: (this: This, ...args: Args) => Promise<Return>,
|
|
32
|
-
context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Promise<Return>>
|
|
33
|
-
) {
|
|
34
|
-
const methodName = String(context.name);
|
|
35
|
-
|
|
36
|
-
// CRITICAL: Use regular function, not arrow function, to preserve 'this'
|
|
37
|
-
async function stepWrapper(this: This, ...args: Args): Promise<Return> {
|
|
38
|
-
// Cast to WorkflowLike for type safety when accessing workflow properties
|
|
39
|
-
const wf = this as unknown as WorkflowLike;
|
|
40
|
-
const stepName = opts.name ?? methodName;
|
|
41
|
-
const startTime = Date.now();
|
|
42
|
-
|
|
43
|
-
// Log start if requested
|
|
44
|
-
if (opts.logStart) {
|
|
45
|
-
wf.logger.info(`STEP START: ${stepName}`);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Emit step start event
|
|
49
|
-
wf.emitEvent({
|
|
50
|
-
type: 'stepStart',
|
|
51
|
-
node: wf.node,
|
|
52
|
-
step: stepName,
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
// Create step node for hierarchy tracking
|
|
56
|
-
const stepNode: WorkflowNode = {
|
|
57
|
-
id: generateId(),
|
|
58
|
-
name: stepName,
|
|
59
|
-
parent: wf.node,
|
|
60
|
-
children: [],
|
|
61
|
-
status: 'running',
|
|
62
|
-
logs: [],
|
|
63
|
-
events: [],
|
|
64
|
-
stateSnapshot: null,
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
// Create execution context for agent/prompt operations within this step
|
|
68
|
-
const executionContext: AgentExecutionContext = {
|
|
69
|
-
workflowNode: stepNode,
|
|
70
|
-
emitEvent: (event: WorkflowEvent) => {
|
|
71
|
-
stepNode.events.push(event);
|
|
72
|
-
wf.emitEvent(event);
|
|
73
|
-
},
|
|
74
|
-
workflowId: wf.id,
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
try {
|
|
78
|
-
// Execute the original method within the execution context
|
|
79
|
-
// This allows Agent.prompt() calls to automatically capture events
|
|
80
|
-
const result = await runInContext(executionContext, async () => {
|
|
81
|
-
return originalMethod.call(this, ...args);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
// Update step node status
|
|
85
|
-
stepNode.status = 'completed';
|
|
86
|
-
|
|
87
|
-
// Snapshot state if requested
|
|
88
|
-
if (opts.snapshotState) {
|
|
89
|
-
wf.snapshotState();
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Calculate duration and emit end event
|
|
93
|
-
const duration = Date.now() - startTime;
|
|
94
|
-
if (opts.trackTiming !== false) {
|
|
95
|
-
wf.emitEvent({
|
|
96
|
-
type: 'stepEnd',
|
|
97
|
-
node: wf.node,
|
|
98
|
-
step: stepName,
|
|
99
|
-
duration,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Log finish if requested
|
|
104
|
-
if (opts.logFinish) {
|
|
105
|
-
wf.logger.info(`STEP END: ${stepName} (${duration}ms)`);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return result;
|
|
109
|
-
} catch (err: unknown) {
|
|
110
|
-
// Update step node status
|
|
111
|
-
stepNode.status = 'failed';
|
|
112
|
-
// Create rich error with context
|
|
113
|
-
const error = err as Error;
|
|
114
|
-
const snap = getObservedState(this as object);
|
|
115
|
-
|
|
116
|
-
const workflowError: WorkflowError = {
|
|
117
|
-
message: error?.message ?? 'Unknown error',
|
|
118
|
-
original: err,
|
|
119
|
-
workflowId: wf.id,
|
|
120
|
-
stack: error?.stack,
|
|
121
|
-
state: snap,
|
|
122
|
-
logs: [...wf.node.logs] as LogEntry[],
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
// Emit error event
|
|
126
|
-
wf.emitEvent({
|
|
127
|
-
type: 'error',
|
|
128
|
-
node: wf.node,
|
|
129
|
-
error: workflowError,
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
// Re-throw the enriched error
|
|
133
|
-
throw workflowError;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return stepWrapper;
|
|
138
|
-
};
|
|
139
|
-
}
|
package/src/decorators/task.ts
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import type { TaskOptions, WorkflowNode, WorkflowEvent, WorkflowError, SerializedWorkflowState } from '../types/index.js';
|
|
2
|
-
import { mergeWorkflowErrors } from '../utils/workflow-error-utils.js';
|
|
3
|
-
|
|
4
|
-
// Type for workflow-like objects
|
|
5
|
-
interface WorkflowLike {
|
|
6
|
-
id: string;
|
|
7
|
-
node: WorkflowNode;
|
|
8
|
-
emitEvent(event: WorkflowEvent): void;
|
|
9
|
-
attachChild(child: WorkflowLike): void;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
// Minimal Workflow type for checking if something is a workflow
|
|
13
|
-
interface WorkflowClass {
|
|
14
|
-
id: string;
|
|
15
|
-
parent: WorkflowLike | null;
|
|
16
|
-
run(...args: unknown[]): Promise<unknown>;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @Task decorator
|
|
21
|
-
* Wraps a method that returns child workflow(s), automatically attaching them
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* class ParentWorkflow extends Workflow {
|
|
25
|
-
* @Task({ concurrent: true })
|
|
26
|
-
* async createChildren(): Promise<ChildWorkflow[]> {
|
|
27
|
-
* return [
|
|
28
|
-
* new ChildWorkflow('child1', this),
|
|
29
|
-
* new ChildWorkflow('child2', this),
|
|
30
|
-
* ];
|
|
31
|
-
* }
|
|
32
|
-
* }
|
|
33
|
-
*
|
|
34
|
-
* @example Non-workflow return (silently skipped)
|
|
35
|
-
* class MyWorkflow extends Workflow {
|
|
36
|
-
* @Task()
|
|
37
|
-
* async returnsString(): Promise<string> {
|
|
38
|
-
* return 'not a workflow'; // Returned as-is, not attached
|
|
39
|
-
* }
|
|
40
|
-
* }
|
|
41
|
-
*
|
|
42
|
-
* @example Mixed return (only workflows attached)
|
|
43
|
-
* class MyWorkflow extends Workflow {
|
|
44
|
-
* @Task()
|
|
45
|
-
* async mixedReturn(): Promise<(Workflow | string)[]> {
|
|
46
|
-
* return [
|
|
47
|
-
* new ChildWorkflow('child1', this), // Attached
|
|
48
|
-
* 'some string', // Skipped
|
|
49
|
-
* new ChildWorkflow('child2', this), // Attached
|
|
50
|
-
* ];
|
|
51
|
-
* }
|
|
52
|
-
* }
|
|
53
|
-
*
|
|
54
|
-
* Validation Behavior
|
|
55
|
-
*
|
|
56
|
-
* The decorator uses lenient validation for return values:
|
|
57
|
-
* - Workflow objects (with 'id' property) are automatically attached
|
|
58
|
-
* - Non-workflow objects are silently skipped (not attached)
|
|
59
|
-
* - The original return value is always preserved
|
|
60
|
-
*
|
|
61
|
-
* This lenient approach enables:
|
|
62
|
-
* - Duck-typing: Works with workflow-like objects, not just Workflow instances
|
|
63
|
-
* - Flexible signatures: Methods can return any type without breaking
|
|
64
|
-
* - Graceful handling: Edge cases (null, undefined, primitives) don't throw errors
|
|
65
|
-
*/
|
|
66
|
-
export function Task(opts: TaskOptions = {}) {
|
|
67
|
-
return function <This, Args extends unknown[], Return>(
|
|
68
|
-
originalMethod: (this: This, ...args: Args) => Promise<Return>,
|
|
69
|
-
context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Promise<Return>>
|
|
70
|
-
) {
|
|
71
|
-
const methodName = String(context.name);
|
|
72
|
-
|
|
73
|
-
// CRITICAL: Use regular function, not arrow function
|
|
74
|
-
async function taskWrapper(this: This, ...args: Args): Promise<Return> {
|
|
75
|
-
// Cast to WorkflowLike for type safety when accessing workflow properties
|
|
76
|
-
const wf = this as unknown as WorkflowLike;
|
|
77
|
-
const taskName = opts.name ?? methodName;
|
|
78
|
-
|
|
79
|
-
// Emit task start event
|
|
80
|
-
wf.emitEvent({
|
|
81
|
-
type: 'taskStart',
|
|
82
|
-
node: wf.node,
|
|
83
|
-
task: taskName,
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
// Execute the original method
|
|
87
|
-
const result = await originalMethod.call(this, ...args);
|
|
88
|
-
|
|
89
|
-
// Process returned workflows
|
|
90
|
-
const workflows = Array.isArray(result) ? result : [result];
|
|
91
|
-
|
|
92
|
-
for (const workflow of workflows) {
|
|
93
|
-
// Type guard to check if it's a workflow
|
|
94
|
-
if (workflow && typeof workflow === 'object' && 'id' in workflow) {
|
|
95
|
-
const childWf = workflow as WorkflowClass;
|
|
96
|
-
|
|
97
|
-
// Only attach if not already attached (parent not set by constructor)
|
|
98
|
-
if (!childWf.parent) {
|
|
99
|
-
childWf.parent = wf;
|
|
100
|
-
wf.attachChild(childWf as unknown as WorkflowLike);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// If concurrent option is set and we have multiple workflows, run them in parallel
|
|
106
|
-
if (opts.concurrent && Array.isArray(result)) {
|
|
107
|
-
const runnable = workflows.filter(
|
|
108
|
-
(w): w is WorkflowClass =>
|
|
109
|
-
w && typeof w === 'object' && 'run' in w && typeof w.run === 'function'
|
|
110
|
-
);
|
|
111
|
-
|
|
112
|
-
if (runnable.length > 0) {
|
|
113
|
-
const results = await Promise.allSettled(runnable.map((w) => w.run()));
|
|
114
|
-
|
|
115
|
-
const rejected = results.filter(
|
|
116
|
-
(r): r is PromiseRejectedResult => r.status === 'rejected'
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
if (rejected.length > 0) {
|
|
120
|
-
// Check if error merge strategy is enabled
|
|
121
|
-
if (opts.errorMergeStrategy?.enabled) {
|
|
122
|
-
// Extract WorkflowError objects from rejected promises
|
|
123
|
-
const errors = rejected.map((r) => r.reason as WorkflowError);
|
|
124
|
-
|
|
125
|
-
// Merge errors using custom combine() or default merger
|
|
126
|
-
const mergedError = opts.errorMergeStrategy?.combine
|
|
127
|
-
? opts.errorMergeStrategy.combine(errors)
|
|
128
|
-
: mergeWorkflowErrors(errors, taskName, wf.id, runnable.length);
|
|
129
|
-
|
|
130
|
-
// Emit error event with merged error
|
|
131
|
-
wf.emitEvent({
|
|
132
|
-
type: 'error',
|
|
133
|
-
node: wf.node,
|
|
134
|
-
error: mergedError,
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
// Throw merged error
|
|
138
|
-
throw mergedError;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// Backward compatibility: throw first error
|
|
142
|
-
throw rejected[0].reason;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Emit task end event
|
|
148
|
-
wf.emitEvent({
|
|
149
|
-
type: 'taskEnd',
|
|
150
|
-
node: wf.node,
|
|
151
|
-
task: taskName,
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
return result;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
return taskWrapper;
|
|
158
|
-
};
|
|
159
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { Workflow } from '../core/workflow.js';
|
|
2
|
-
import { Step } from '../decorators/step.js';
|
|
3
|
-
import { Task } from '../decorators/task.js';
|
|
4
|
-
import { ObservedState } from '../decorators/observed-state.js';
|
|
5
|
-
import { TestCycleWorkflow } from './test-cycle-workflow.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Example parent workflow demonstrating TDD orchestration
|
|
9
|
-
*/
|
|
10
|
-
export class TDDOrchestrator extends Workflow {
|
|
11
|
-
@ObservedState()
|
|
12
|
-
cycleCount: number = 0;
|
|
13
|
-
|
|
14
|
-
@ObservedState()
|
|
15
|
-
maxCycles: number = 3;
|
|
16
|
-
|
|
17
|
-
@ObservedState({ redact: true })
|
|
18
|
-
apiKey: string = 'secret-key';
|
|
19
|
-
|
|
20
|
-
@Step({ logStart: true, logFinish: true })
|
|
21
|
-
async setupEnvironment(): Promise<void> {
|
|
22
|
-
this.logger.info('Setting up TDD environment');
|
|
23
|
-
// Simulate environment setup
|
|
24
|
-
await this.delay(50);
|
|
25
|
-
this.logger.debug('Environment ready');
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@Task()
|
|
29
|
-
async runCycle(): Promise<TestCycleWorkflow> {
|
|
30
|
-
this.cycleCount++;
|
|
31
|
-
this.logger.info(`Starting cycle ${this.cycleCount}/${this.maxCycles}`);
|
|
32
|
-
return new TestCycleWorkflow(`Cycle-${this.cycleCount}`, this);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async run(): Promise<void> {
|
|
36
|
-
this.setStatus('running');
|
|
37
|
-
this.logger.info('TDD Orchestrator starting');
|
|
38
|
-
|
|
39
|
-
try {
|
|
40
|
-
await this.setupEnvironment();
|
|
41
|
-
|
|
42
|
-
while (this.cycleCount < this.maxCycles) {
|
|
43
|
-
try {
|
|
44
|
-
const cycle = await this.runCycle();
|
|
45
|
-
await cycle.run();
|
|
46
|
-
this.logger.info(`Cycle ${this.cycleCount} completed successfully`);
|
|
47
|
-
} catch (error) {
|
|
48
|
-
this.logger.warn(`Cycle ${this.cycleCount} failed, continuing...`);
|
|
49
|
-
// In real implementation, analyze error and potentially restart
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
this.setStatus('completed');
|
|
54
|
-
this.logger.info('TDD Orchestrator completed all cycles');
|
|
55
|
-
} catch (error) {
|
|
56
|
-
this.setStatus('failed');
|
|
57
|
-
this.logger.error('TDD Orchestrator failed', { error });
|
|
58
|
-
throw error;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
private delay(ms: number): Promise<void> {
|
|
63
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
64
|
-
}
|
|
65
|
-
}
|