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
|
@@ -0,0 +1,877 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep Analysis Tests
|
|
3
|
+
* These tests probe deeper into edge cases, error scenarios, and potential bugs
|
|
4
|
+
*/
|
|
5
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
6
|
+
var useValue = arguments.length > 2;
|
|
7
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
8
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
9
|
+
}
|
|
10
|
+
return useValue ? value : void 0;
|
|
11
|
+
};
|
|
12
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
13
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
14
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
15
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
16
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
17
|
+
var _, done = false;
|
|
18
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
19
|
+
var context = {};
|
|
20
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
21
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
22
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
23
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
24
|
+
if (kind === "accessor") {
|
|
25
|
+
if (result === void 0) continue;
|
|
26
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
27
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
28
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
29
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
30
|
+
}
|
|
31
|
+
else if (_ = accept(result)) {
|
|
32
|
+
if (kind === "field") initializers.unshift(_);
|
|
33
|
+
else descriptor[key] = _;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
37
|
+
done = true;
|
|
38
|
+
};
|
|
39
|
+
import { describe, it, expect } from 'vitest';
|
|
40
|
+
import { Workflow, Step, Task, ObservedState } from '../../index.js';
|
|
41
|
+
import { WorkflowTreeDebugger } from '../../debugger/tree-debugger.js';
|
|
42
|
+
describe('Deep Analysis Tests', () => {
|
|
43
|
+
describe('Observable Edge Cases', () => {
|
|
44
|
+
it('should handle Observable.subscribe with empty observer object', async () => {
|
|
45
|
+
class TestWorkflow extends Workflow {
|
|
46
|
+
async run() {
|
|
47
|
+
this.emitEvent({ type: 'stepStart', node: this.node, step: 'test' });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const workflow = new TestWorkflow();
|
|
51
|
+
const debuggerInstance = new WorkflowTreeDebugger(workflow);
|
|
52
|
+
// Subscribe with empty observer - should not crash
|
|
53
|
+
debuggerInstance.events.subscribe({});
|
|
54
|
+
await workflow.run();
|
|
55
|
+
});
|
|
56
|
+
it('should handle Observable.unsubscribe during event emission', async () => {
|
|
57
|
+
class TestWorkflow extends Workflow {
|
|
58
|
+
async run() {
|
|
59
|
+
for (let i = 0; i < 10; i++) {
|
|
60
|
+
this.emitEvent({ type: 'stepStart', node: this.node, step: `step-${i}` });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const workflow = new TestWorkflow();
|
|
65
|
+
const debuggerInstance = new WorkflowTreeDebugger(workflow);
|
|
66
|
+
let count = 0;
|
|
67
|
+
const subscription = debuggerInstance.events.subscribe({
|
|
68
|
+
next: () => {
|
|
69
|
+
count++;
|
|
70
|
+
if (count === 5) {
|
|
71
|
+
subscription.unsubscribe();
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
await workflow.run();
|
|
76
|
+
// Should have received 5 events before unsubscribing
|
|
77
|
+
expect(count).toBe(5);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe('WorkflowLogger Edge Cases', () => {
|
|
81
|
+
it('should handle logger.child() with empty parentLogId', async () => {
|
|
82
|
+
class TestWorkflow extends Workflow {
|
|
83
|
+
async run() {
|
|
84
|
+
const childLogger = this.logger.child('');
|
|
85
|
+
childLogger.info('Child log with empty parent');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const workflow = new TestWorkflow();
|
|
89
|
+
await workflow.run();
|
|
90
|
+
expect(workflow.node.logs.length).toBe(1);
|
|
91
|
+
// Empty string is passed through as parentLogId
|
|
92
|
+
expect(workflow.node.logs[0].parentLogId).toBeUndefined();
|
|
93
|
+
});
|
|
94
|
+
it('should handle logger with very long messages', async () => {
|
|
95
|
+
class TestWorkflow extends Workflow {
|
|
96
|
+
async run() {
|
|
97
|
+
const longMessage = 'A'.repeat(10000);
|
|
98
|
+
this.logger.info(longMessage);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const workflow = new TestWorkflow();
|
|
102
|
+
await workflow.run();
|
|
103
|
+
expect(workflow.node.logs[0].message.length).toBe(10000);
|
|
104
|
+
});
|
|
105
|
+
it('should handle logger with special characters in data', async () => {
|
|
106
|
+
class TestWorkflow extends Workflow {
|
|
107
|
+
async run() {
|
|
108
|
+
this.logger.info('Test', {
|
|
109
|
+
null: null,
|
|
110
|
+
undefined: undefined,
|
|
111
|
+
circular: { self: null },
|
|
112
|
+
function: () => { },
|
|
113
|
+
symbol: Symbol('test'),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const workflow = new TestWorkflow();
|
|
118
|
+
// Should not throw
|
|
119
|
+
await workflow.run();
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
describe('Step Decorator Edge Cases', () => {
|
|
123
|
+
it('should handle @Step on synchronous method that returns Promise', async () => {
|
|
124
|
+
let TestWorkflow = (() => {
|
|
125
|
+
let _classSuper = Workflow;
|
|
126
|
+
let _instanceExtraInitializers = [];
|
|
127
|
+
let _testStep_decorators;
|
|
128
|
+
return class TestWorkflow extends _classSuper {
|
|
129
|
+
static {
|
|
130
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
131
|
+
_testStep_decorators = [Step()];
|
|
132
|
+
__esDecorate(this, null, _testStep_decorators, { kind: "method", name: "testStep", static: false, private: false, access: { has: obj => "testStep" in obj, get: obj => obj.testStep }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
133
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
134
|
+
}
|
|
135
|
+
async testStep() {
|
|
136
|
+
return Promise.resolve('done');
|
|
137
|
+
}
|
|
138
|
+
async run() {
|
|
139
|
+
return this.testStep();
|
|
140
|
+
}
|
|
141
|
+
constructor() {
|
|
142
|
+
super(...arguments);
|
|
143
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
})();
|
|
147
|
+
const workflow = new TestWorkflow();
|
|
148
|
+
const result = await workflow.run();
|
|
149
|
+
expect(result).toBe('done');
|
|
150
|
+
});
|
|
151
|
+
it('should handle @Step that returns undefined', async () => {
|
|
152
|
+
let TestWorkflow = (() => {
|
|
153
|
+
let _classSuper = Workflow;
|
|
154
|
+
let _instanceExtraInitializers = [];
|
|
155
|
+
let _testStep_decorators;
|
|
156
|
+
return class TestWorkflow extends _classSuper {
|
|
157
|
+
static {
|
|
158
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
159
|
+
_testStep_decorators = [Step()];
|
|
160
|
+
__esDecorate(this, null, _testStep_decorators, { kind: "method", name: "testStep", static: false, private: false, access: { has: obj => "testStep" in obj, get: obj => obj.testStep }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
161
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
162
|
+
}
|
|
163
|
+
async testStep() {
|
|
164
|
+
// No return
|
|
165
|
+
}
|
|
166
|
+
async run() {
|
|
167
|
+
return this.testStep();
|
|
168
|
+
}
|
|
169
|
+
constructor() {
|
|
170
|
+
super(...arguments);
|
|
171
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
})();
|
|
175
|
+
const workflow = new TestWorkflow();
|
|
176
|
+
const result = await workflow.run();
|
|
177
|
+
expect(result).toBeUndefined();
|
|
178
|
+
});
|
|
179
|
+
it('should handle @Step that throws non-Error', async () => {
|
|
180
|
+
let TestWorkflow = (() => {
|
|
181
|
+
let _classSuper = Workflow;
|
|
182
|
+
let _instanceExtraInitializers = [];
|
|
183
|
+
let _testStep_decorators;
|
|
184
|
+
return class TestWorkflow extends _classSuper {
|
|
185
|
+
static {
|
|
186
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
187
|
+
_testStep_decorators = [Step()];
|
|
188
|
+
__esDecorate(this, null, _testStep_decorators, { kind: "method", name: "testStep", static: false, private: false, access: { has: obj => "testStep" in obj, get: obj => obj.testStep }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
189
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
190
|
+
}
|
|
191
|
+
async testStep() {
|
|
192
|
+
throw 'string error';
|
|
193
|
+
}
|
|
194
|
+
async run() {
|
|
195
|
+
try {
|
|
196
|
+
await this.testStep();
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
// Non-Error throws get wrapped with 'Unknown error' message
|
|
200
|
+
// but the original is preserved
|
|
201
|
+
expect(err.message).toBe('Unknown error');
|
|
202
|
+
expect(err.original).toBe('string error');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
constructor() {
|
|
206
|
+
super(...arguments);
|
|
207
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
})();
|
|
211
|
+
const workflow = new TestWorkflow();
|
|
212
|
+
await workflow.run();
|
|
213
|
+
});
|
|
214
|
+
it('should handle @Step that throws null', async () => {
|
|
215
|
+
let TestWorkflow = (() => {
|
|
216
|
+
let _classSuper = Workflow;
|
|
217
|
+
let _instanceExtraInitializers = [];
|
|
218
|
+
let _testStep_decorators;
|
|
219
|
+
return class TestWorkflow extends _classSuper {
|
|
220
|
+
static {
|
|
221
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
222
|
+
_testStep_decorators = [Step()];
|
|
223
|
+
__esDecorate(this, null, _testStep_decorators, { kind: "method", name: "testStep", static: false, private: false, access: { has: obj => "testStep" in obj, get: obj => obj.testStep }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
224
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
225
|
+
}
|
|
226
|
+
async testStep() {
|
|
227
|
+
throw null;
|
|
228
|
+
}
|
|
229
|
+
async run() {
|
|
230
|
+
try {
|
|
231
|
+
await this.testStep();
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
expect(err).not.toBeNull();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
constructor() {
|
|
238
|
+
super(...arguments);
|
|
239
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
})();
|
|
243
|
+
const workflow = new TestWorkflow();
|
|
244
|
+
await workflow.run();
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
describe('Task Decorator Edge Cases', () => {
|
|
248
|
+
it('should handle @Task that returns primitive value', async () => {
|
|
249
|
+
let TestWorkflow = (() => {
|
|
250
|
+
let _classSuper = Workflow;
|
|
251
|
+
let _instanceExtraInitializers = [];
|
|
252
|
+
let _returnsString_decorators;
|
|
253
|
+
return class TestWorkflow extends _classSuper {
|
|
254
|
+
static {
|
|
255
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
256
|
+
_returnsString_decorators = [Task()];
|
|
257
|
+
__esDecorate(this, null, _returnsString_decorators, { kind: "method", name: "returnsString", static: false, private: false, access: { has: obj => "returnsString" in obj, get: obj => obj.returnsString }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
258
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
259
|
+
}
|
|
260
|
+
async returnsString() {
|
|
261
|
+
return 'not a workflow';
|
|
262
|
+
}
|
|
263
|
+
async run() {
|
|
264
|
+
return this.returnsString();
|
|
265
|
+
}
|
|
266
|
+
constructor() {
|
|
267
|
+
super(...arguments);
|
|
268
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
})();
|
|
272
|
+
const workflow = new TestWorkflow();
|
|
273
|
+
const result = await workflow.run();
|
|
274
|
+
expect(result).toBe('not a workflow');
|
|
275
|
+
expect(workflow.children.length).toBe(0);
|
|
276
|
+
});
|
|
277
|
+
it('should handle @Task that returns number', async () => {
|
|
278
|
+
let TestWorkflow = (() => {
|
|
279
|
+
let _classSuper = Workflow;
|
|
280
|
+
let _instanceExtraInitializers = [];
|
|
281
|
+
let _returnsNumber_decorators;
|
|
282
|
+
return class TestWorkflow extends _classSuper {
|
|
283
|
+
static {
|
|
284
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
285
|
+
_returnsNumber_decorators = [Task()];
|
|
286
|
+
__esDecorate(this, null, _returnsNumber_decorators, { kind: "method", name: "returnsNumber", static: false, private: false, access: { has: obj => "returnsNumber" in obj, get: obj => obj.returnsNumber }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
287
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
288
|
+
}
|
|
289
|
+
async returnsNumber() {
|
|
290
|
+
return 42;
|
|
291
|
+
}
|
|
292
|
+
async run() {
|
|
293
|
+
return this.returnsNumber();
|
|
294
|
+
}
|
|
295
|
+
constructor() {
|
|
296
|
+
super(...arguments);
|
|
297
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
})();
|
|
301
|
+
const workflow = new TestWorkflow();
|
|
302
|
+
const result = await workflow.run();
|
|
303
|
+
expect(result).toBe(42);
|
|
304
|
+
});
|
|
305
|
+
it('should handle @Task that returns object with id property (duck typing)', async () => {
|
|
306
|
+
let TestWorkflow = (() => {
|
|
307
|
+
let _classSuper = Workflow;
|
|
308
|
+
let _instanceExtraInitializers = [];
|
|
309
|
+
let _returnsDuck_decorators;
|
|
310
|
+
return class TestWorkflow extends _classSuper {
|
|
311
|
+
static {
|
|
312
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
313
|
+
_returnsDuck_decorators = [Task()];
|
|
314
|
+
__esDecorate(this, null, _returnsDuck_decorators, { kind: "method", name: "returnsDuck", static: false, private: false, access: { has: obj => "returnsDuck" in obj, get: obj => obj.returnsDuck }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
315
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
316
|
+
}
|
|
317
|
+
async returnsDuck() {
|
|
318
|
+
return { id: 'duck-123', name: 'Duck' };
|
|
319
|
+
}
|
|
320
|
+
async run() {
|
|
321
|
+
return this.returnsDuck();
|
|
322
|
+
}
|
|
323
|
+
constructor() {
|
|
324
|
+
super(...arguments);
|
|
325
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
})();
|
|
329
|
+
const workflow = new TestWorkflow();
|
|
330
|
+
const result = await workflow.run();
|
|
331
|
+
// Duck typing - objects with 'id' property get parent attached
|
|
332
|
+
// The returned object is mutated to have a parent property
|
|
333
|
+
expect(result.id).toBe('duck-123');
|
|
334
|
+
expect(result.name).toBe('Duck');
|
|
335
|
+
expect(result.parent).toBeDefined();
|
|
336
|
+
// Duck typing treats it as a workflow and attaches it
|
|
337
|
+
expect(workflow.children.length).toBe(1);
|
|
338
|
+
});
|
|
339
|
+
it('should handle @Task with concurrent on single non-workflow', async () => {
|
|
340
|
+
let TestWorkflow = (() => {
|
|
341
|
+
let _classSuper = Workflow;
|
|
342
|
+
let _instanceExtraInitializers = [];
|
|
343
|
+
let _returnsString_decorators;
|
|
344
|
+
return class TestWorkflow extends _classSuper {
|
|
345
|
+
static {
|
|
346
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
347
|
+
_returnsString_decorators = [Task({ concurrent: true })];
|
|
348
|
+
__esDecorate(this, null, _returnsString_decorators, { kind: "method", name: "returnsString", static: false, private: false, access: { has: obj => "returnsString" in obj, get: obj => obj.returnsString }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
349
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
350
|
+
}
|
|
351
|
+
async returnsString() {
|
|
352
|
+
return 'not a workflow';
|
|
353
|
+
}
|
|
354
|
+
async run() {
|
|
355
|
+
return this.returnsString();
|
|
356
|
+
}
|
|
357
|
+
constructor() {
|
|
358
|
+
super(...arguments);
|
|
359
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
})();
|
|
363
|
+
const workflow = new TestWorkflow();
|
|
364
|
+
const result = await workflow.run();
|
|
365
|
+
expect(result).toBe('not a workflow');
|
|
366
|
+
});
|
|
367
|
+
it('should handle @Task with concurrent: true but no run method', async () => {
|
|
368
|
+
class ChildWorkflow extends Workflow {
|
|
369
|
+
}
|
|
370
|
+
let ParentWorkflow = (() => {
|
|
371
|
+
let _classSuper = Workflow;
|
|
372
|
+
let _instanceExtraInitializers = [];
|
|
373
|
+
let _spawnChild_decorators;
|
|
374
|
+
return class ParentWorkflow extends _classSuper {
|
|
375
|
+
static {
|
|
376
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
377
|
+
_spawnChild_decorators = [Task({ concurrent: true })];
|
|
378
|
+
__esDecorate(this, null, _spawnChild_decorators, { kind: "method", name: "spawnChild", static: false, private: false, access: { has: obj => "spawnChild" in obj, get: obj => obj.spawnChild }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
379
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
380
|
+
}
|
|
381
|
+
async spawnChild() {
|
|
382
|
+
return new ChildWorkflow('Child', this);
|
|
383
|
+
}
|
|
384
|
+
async run() {
|
|
385
|
+
// Child will be attached but running it will throw
|
|
386
|
+
return this.spawnChild();
|
|
387
|
+
}
|
|
388
|
+
constructor() {
|
|
389
|
+
super(...arguments);
|
|
390
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
})();
|
|
394
|
+
const workflow = new ParentWorkflow();
|
|
395
|
+
await workflow.run();
|
|
396
|
+
// Child should still be attached
|
|
397
|
+
expect(workflow.children.length).toBe(1);
|
|
398
|
+
});
|
|
399
|
+
});
|
|
400
|
+
describe('ObservedState Edge Cases', () => {
|
|
401
|
+
it('should handle undefined value in observed state', async () => {
|
|
402
|
+
let TestWorkflow = (() => {
|
|
403
|
+
let _classSuper = Workflow;
|
|
404
|
+
let _undefinedField_decorators;
|
|
405
|
+
let _undefinedField_initializers = [];
|
|
406
|
+
let _undefinedField_extraInitializers = [];
|
|
407
|
+
return class TestWorkflow extends _classSuper {
|
|
408
|
+
static {
|
|
409
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
410
|
+
_undefinedField_decorators = [ObservedState()];
|
|
411
|
+
__esDecorate(null, null, _undefinedField_decorators, { kind: "field", name: "undefinedField", static: false, private: false, access: { has: obj => "undefinedField" in obj, get: obj => obj.undefinedField, set: (obj, value) => { obj.undefinedField = value; } }, metadata: _metadata }, _undefinedField_initializers, _undefinedField_extraInitializers);
|
|
412
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
413
|
+
}
|
|
414
|
+
undefinedField = __runInitializers(this, _undefinedField_initializers, undefined);
|
|
415
|
+
async run() {
|
|
416
|
+
this.snapshotState();
|
|
417
|
+
return this.node.stateSnapshot;
|
|
418
|
+
}
|
|
419
|
+
constructor() {
|
|
420
|
+
super(...arguments);
|
|
421
|
+
__runInitializers(this, _undefinedField_extraInitializers);
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
})();
|
|
425
|
+
const workflow = new TestWorkflow();
|
|
426
|
+
const snapshot = await workflow.run();
|
|
427
|
+
expect(snapshot?.undefinedField).toBeUndefined();
|
|
428
|
+
});
|
|
429
|
+
it('should handle circular reference in observed state', async () => {
|
|
430
|
+
let TestWorkflow = (() => {
|
|
431
|
+
let _classSuper = Workflow;
|
|
432
|
+
let _circular_decorators;
|
|
433
|
+
let _circular_initializers = [];
|
|
434
|
+
let _circular_extraInitializers = [];
|
|
435
|
+
return class TestWorkflow extends _classSuper {
|
|
436
|
+
static {
|
|
437
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
438
|
+
_circular_decorators = [ObservedState()];
|
|
439
|
+
__esDecorate(null, null, _circular_decorators, { kind: "field", name: "circular", static: false, private: false, access: { has: obj => "circular" in obj, get: obj => obj.circular, set: (obj, value) => { obj.circular = value; } }, metadata: _metadata }, _circular_initializers, _circular_extraInitializers);
|
|
440
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
441
|
+
}
|
|
442
|
+
circular = __runInitializers(this, _circular_initializers, {});
|
|
443
|
+
async run() {
|
|
444
|
+
this.circular.self = this.circular;
|
|
445
|
+
this.snapshotState();
|
|
446
|
+
return this.node.stateSnapshot;
|
|
447
|
+
}
|
|
448
|
+
constructor() {
|
|
449
|
+
super(...arguments);
|
|
450
|
+
__runInitializers(this, _circular_extraInitializers);
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
})();
|
|
454
|
+
const workflow = new TestWorkflow();
|
|
455
|
+
// Should not crash
|
|
456
|
+
await workflow.run();
|
|
457
|
+
});
|
|
458
|
+
it('should handle deeply nested object in observed state', async () => {
|
|
459
|
+
let TestWorkflow = (() => {
|
|
460
|
+
let _classSuper = Workflow;
|
|
461
|
+
let _nested_decorators;
|
|
462
|
+
let _nested_initializers = [];
|
|
463
|
+
let _nested_extraInitializers = [];
|
|
464
|
+
return class TestWorkflow extends _classSuper {
|
|
465
|
+
static {
|
|
466
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
467
|
+
_nested_decorators = [ObservedState()];
|
|
468
|
+
__esDecorate(null, null, _nested_decorators, { kind: "field", name: "nested", static: false, private: false, access: { has: obj => "nested" in obj, get: obj => obj.nested, set: (obj, value) => { obj.nested = value; } }, metadata: _metadata }, _nested_initializers, _nested_extraInitializers);
|
|
469
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
470
|
+
}
|
|
471
|
+
nested = __runInitializers(this, _nested_initializers, { level: 1 });
|
|
472
|
+
async run() {
|
|
473
|
+
for (let i = 2; i <= 100; i++) {
|
|
474
|
+
this.nested = { level: i, child: this.nested };
|
|
475
|
+
}
|
|
476
|
+
this.snapshotState();
|
|
477
|
+
return this.node.stateSnapshot;
|
|
478
|
+
}
|
|
479
|
+
constructor() {
|
|
480
|
+
super(...arguments);
|
|
481
|
+
__runInitializers(this, _nested_extraInitializers);
|
|
482
|
+
}
|
|
483
|
+
};
|
|
484
|
+
})();
|
|
485
|
+
const workflow = new TestWorkflow();
|
|
486
|
+
const snapshot = await workflow.run();
|
|
487
|
+
expect(snapshot?.nested).toBeDefined();
|
|
488
|
+
});
|
|
489
|
+
});
|
|
490
|
+
describe('Workflow Construction Edge Cases', () => {
|
|
491
|
+
it('should handle Workflow with no arguments', async () => {
|
|
492
|
+
class TestWorkflow extends Workflow {
|
|
493
|
+
async run() {
|
|
494
|
+
return 'done';
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
const workflow = new TestWorkflow();
|
|
498
|
+
expect(workflow.node.name).toBe('TestWorkflow');
|
|
499
|
+
expect(workflow.parent).toBeNull();
|
|
500
|
+
});
|
|
501
|
+
it('should handle Workflow with only parent argument', async () => {
|
|
502
|
+
class ChildWorkflow extends Workflow {
|
|
503
|
+
async run() {
|
|
504
|
+
return 'done';
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
class ParentWorkflow extends Workflow {
|
|
508
|
+
async run() {
|
|
509
|
+
const child = new ChildWorkflow(undefined, this);
|
|
510
|
+
expect(child.parent).toBe(this);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
const workflow = new ParentWorkflow();
|
|
514
|
+
await workflow.run();
|
|
515
|
+
});
|
|
516
|
+
it('should handle functional workflow pattern', async () => {
|
|
517
|
+
const workflow = new Workflow({ name: 'FunctionalWorkflow' }, async (ctx) => {
|
|
518
|
+
await ctx.step('test', async () => {
|
|
519
|
+
return 'done';
|
|
520
|
+
});
|
|
521
|
+
});
|
|
522
|
+
const result = await workflow.run();
|
|
523
|
+
expect(result).toBeDefined();
|
|
524
|
+
});
|
|
525
|
+
});
|
|
526
|
+
describe('Tree Debugger Edge Cases', () => {
|
|
527
|
+
it('should handle toTreeString on deep hierarchy', async () => {
|
|
528
|
+
// Create a root workflow with deep children
|
|
529
|
+
class RootWorkflow extends Workflow {
|
|
530
|
+
async run() {
|
|
531
|
+
return 'done';
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
const root = new RootWorkflow();
|
|
535
|
+
let lastWorkflow = root;
|
|
536
|
+
// Build deep hierarchy
|
|
537
|
+
for (let i = 0; i < 20; i++) {
|
|
538
|
+
const ChildWorkflow = class extends Workflow {
|
|
539
|
+
async run() {
|
|
540
|
+
return 'done';
|
|
541
|
+
}
|
|
542
|
+
};
|
|
543
|
+
const child = new ChildWorkflow(`Workflow-${i}`, lastWorkflow);
|
|
544
|
+
await child.run();
|
|
545
|
+
lastWorkflow = child;
|
|
546
|
+
}
|
|
547
|
+
// Create debugger on the root
|
|
548
|
+
const debuggerInstance = new WorkflowTreeDebugger(root);
|
|
549
|
+
const treeString = debuggerInstance.toTreeString();
|
|
550
|
+
expect(treeString.length).toBeGreaterThan(0);
|
|
551
|
+
expect(treeString.split('\n').length).toBeGreaterThan(20);
|
|
552
|
+
});
|
|
553
|
+
it('should handle toLogString on workflow with no logs', async () => {
|
|
554
|
+
class TestWorkflow extends Workflow {
|
|
555
|
+
async run() {
|
|
556
|
+
// No logs
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
const workflow = new TestWorkflow();
|
|
560
|
+
await workflow.run();
|
|
561
|
+
const debuggerInstance = new WorkflowTreeDebugger(workflow);
|
|
562
|
+
const logString = debuggerInstance.toLogString();
|
|
563
|
+
expect(typeof logString).toBe('string');
|
|
564
|
+
});
|
|
565
|
+
it('should handle getNode on non-existent ID', async () => {
|
|
566
|
+
class TestWorkflow extends Workflow {
|
|
567
|
+
async run() {
|
|
568
|
+
return 'done';
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
const workflow = new TestWorkflow();
|
|
572
|
+
const debuggerInstance = new WorkflowTreeDebugger(workflow);
|
|
573
|
+
const node = debuggerInstance.getNode('non-existent-id');
|
|
574
|
+
expect(node).toBeUndefined();
|
|
575
|
+
});
|
|
576
|
+
it('should handle getStats on complex tree', async () => {
|
|
577
|
+
let ChildWorkflow = (() => {
|
|
578
|
+
let _classSuper = Workflow;
|
|
579
|
+
let _instanceExtraInitializers = [];
|
|
580
|
+
let _step_decorators;
|
|
581
|
+
return class ChildWorkflow extends _classSuper {
|
|
582
|
+
static {
|
|
583
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
584
|
+
_step_decorators = [Step()];
|
|
585
|
+
__esDecorate(this, null, _step_decorators, { kind: "method", name: "step", static: false, private: false, access: { has: obj => "step" in obj, get: obj => obj.step }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
586
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
587
|
+
}
|
|
588
|
+
async step() {
|
|
589
|
+
this.logger.info('Child log');
|
|
590
|
+
return 'done';
|
|
591
|
+
}
|
|
592
|
+
async run() {
|
|
593
|
+
return this.step();
|
|
594
|
+
}
|
|
595
|
+
constructor() {
|
|
596
|
+
super(...arguments);
|
|
597
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
598
|
+
}
|
|
599
|
+
};
|
|
600
|
+
})();
|
|
601
|
+
let ParentWorkflow = (() => {
|
|
602
|
+
let _classSuper = Workflow;
|
|
603
|
+
let _instanceExtraInitializers = [];
|
|
604
|
+
let _spawnChildren_decorators;
|
|
605
|
+
return class ParentWorkflow extends _classSuper {
|
|
606
|
+
static {
|
|
607
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
608
|
+
_spawnChildren_decorators = [Task({ concurrent: true })];
|
|
609
|
+
__esDecorate(this, null, _spawnChildren_decorators, { kind: "method", name: "spawnChildren", static: false, private: false, access: { has: obj => "spawnChildren" in obj, get: obj => obj.spawnChildren }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
610
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
611
|
+
}
|
|
612
|
+
async spawnChildren() {
|
|
613
|
+
return [
|
|
614
|
+
new ChildWorkflow('Child1', this),
|
|
615
|
+
new ChildWorkflow('Child2', this),
|
|
616
|
+
new ChildWorkflow('Child3', this),
|
|
617
|
+
];
|
|
618
|
+
}
|
|
619
|
+
async run() {
|
|
620
|
+
await this.spawnChildren();
|
|
621
|
+
await Promise.all(this.children.map(c => c.run()));
|
|
622
|
+
}
|
|
623
|
+
constructor() {
|
|
624
|
+
super(...arguments);
|
|
625
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
626
|
+
}
|
|
627
|
+
};
|
|
628
|
+
})();
|
|
629
|
+
const workflow = new ParentWorkflow();
|
|
630
|
+
await workflow.run();
|
|
631
|
+
const debuggerInstance = new WorkflowTreeDebugger(workflow);
|
|
632
|
+
const stats = debuggerInstance.getStats();
|
|
633
|
+
expect(stats.totalNodes).toBe(4); // 1 parent + 3 children
|
|
634
|
+
expect(stats.totalLogs).toBeGreaterThan(0);
|
|
635
|
+
expect(stats.totalEvents).toBeGreaterThan(0);
|
|
636
|
+
expect(stats.byStatus).toBeDefined();
|
|
637
|
+
});
|
|
638
|
+
});
|
|
639
|
+
describe('Event Propagation Edge Cases', () => {
|
|
640
|
+
it('should handle events emitted during observer callback', async () => {
|
|
641
|
+
class TestWorkflow extends Workflow {
|
|
642
|
+
async run() {
|
|
643
|
+
let callCount = 0;
|
|
644
|
+
this.addObserver({
|
|
645
|
+
onLog: () => { },
|
|
646
|
+
onEvent: () => {
|
|
647
|
+
callCount++;
|
|
648
|
+
// Emit another event during callback
|
|
649
|
+
if (callCount === 1) {
|
|
650
|
+
this.emitEvent({ type: 'stepStart', node: this.node, step: 'nested' });
|
|
651
|
+
}
|
|
652
|
+
},
|
|
653
|
+
onStateUpdated: () => { },
|
|
654
|
+
onTreeChanged: () => { },
|
|
655
|
+
});
|
|
656
|
+
this.emitEvent({ type: 'stepStart', node: this.node, step: 'initial' });
|
|
657
|
+
expect(callCount).toBeGreaterThanOrEqual(1);
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
const workflow = new TestWorkflow();
|
|
661
|
+
await workflow.run();
|
|
662
|
+
});
|
|
663
|
+
it('should handle multiple observers with different behaviors', async () => {
|
|
664
|
+
class TestWorkflow extends Workflow {
|
|
665
|
+
async run() {
|
|
666
|
+
const results = {};
|
|
667
|
+
this.addObserver({
|
|
668
|
+
onLog: () => { results.observer1 = (results.observer1 || 0) + 1; },
|
|
669
|
+
onEvent: () => { results.observer1 = (results.observer1 || 0) + 1; },
|
|
670
|
+
onStateUpdated: () => { },
|
|
671
|
+
onTreeChanged: () => { },
|
|
672
|
+
});
|
|
673
|
+
this.addObserver({
|
|
674
|
+
onLog: () => { results.observer2 = (results.observer2 || 0) + 1; },
|
|
675
|
+
onEvent: () => { results.observer2 = (results.observer2 || 0) + 1; },
|
|
676
|
+
onStateUpdated: () => { },
|
|
677
|
+
onTreeChanged: () => { },
|
|
678
|
+
});
|
|
679
|
+
this.emitEvent({ type: 'stepStart', node: this.node, step: 'test' });
|
|
680
|
+
expect(results.observer1).toBeGreaterThan(0);
|
|
681
|
+
expect(results.observer2).toBeGreaterThan(0);
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
const workflow = new TestWorkflow();
|
|
685
|
+
await workflow.run();
|
|
686
|
+
});
|
|
687
|
+
});
|
|
688
|
+
describe('State Transition Edge Cases', () => {
|
|
689
|
+
it('should handle status changes during execution', async () => {
|
|
690
|
+
class TestWorkflow extends Workflow {
|
|
691
|
+
async run() {
|
|
692
|
+
expect(this.status).toBe('idle');
|
|
693
|
+
this.setStatus('running');
|
|
694
|
+
expect(this.status).toBe('running');
|
|
695
|
+
this.setStatus('completed');
|
|
696
|
+
expect(this.status).toBe('completed');
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
const workflow = new TestWorkflow();
|
|
700
|
+
await workflow.run();
|
|
701
|
+
});
|
|
702
|
+
it('should handle invalid status values', async () => {
|
|
703
|
+
class TestWorkflow extends Workflow {
|
|
704
|
+
async run() {
|
|
705
|
+
// TypeScript should prevent this at compile time, but let's test runtime
|
|
706
|
+
this.setStatus('invalid');
|
|
707
|
+
// Status should be set (no validation at runtime)
|
|
708
|
+
expect(this.status).toBe('invalid');
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
const workflow = new TestWorkflow();
|
|
712
|
+
await workflow.run();
|
|
713
|
+
});
|
|
714
|
+
});
|
|
715
|
+
describe('Child Attachment Edge Cases', () => {
|
|
716
|
+
it('should prevent attaching the same child twice', async () => {
|
|
717
|
+
class ChildWorkflow extends Workflow {
|
|
718
|
+
async run() {
|
|
719
|
+
return 'done';
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
class ParentWorkflow extends Workflow {
|
|
723
|
+
async run() {
|
|
724
|
+
const child = new ChildWorkflow('Child', this);
|
|
725
|
+
// Try to attach again
|
|
726
|
+
expect(() => {
|
|
727
|
+
this.attachChild(child);
|
|
728
|
+
}).toThrow('Child already attached');
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
const workflow = new ParentWorkflow();
|
|
732
|
+
await workflow.run();
|
|
733
|
+
});
|
|
734
|
+
it('should handle child with parent set in constructor', async () => {
|
|
735
|
+
class ChildWorkflow extends Workflow {
|
|
736
|
+
async run() {
|
|
737
|
+
return 'done';
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
class ParentWorkflow extends Workflow {
|
|
741
|
+
async run() {
|
|
742
|
+
const child = new ChildWorkflow('Child', this);
|
|
743
|
+
// Child should already be attached
|
|
744
|
+
expect(this.children.length).toBe(1);
|
|
745
|
+
expect(this.children[0]).toBe(child);
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
const workflow = new ParentWorkflow();
|
|
749
|
+
await workflow.run();
|
|
750
|
+
});
|
|
751
|
+
});
|
|
752
|
+
describe('Memory and Resource Edge Cases', () => {
|
|
753
|
+
it('should handle rapid workflow creation and destruction', async () => {
|
|
754
|
+
class TestWorkflow extends Workflow {
|
|
755
|
+
async run() {
|
|
756
|
+
return 'done';
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
for (let i = 0; i < 100; i++) {
|
|
760
|
+
const workflow = new TestWorkflow(`Workflow-${i}`);
|
|
761
|
+
await workflow.run();
|
|
762
|
+
}
|
|
763
|
+
// If we got here without crashing, memory management is reasonable
|
|
764
|
+
expect(true).toBe(true);
|
|
765
|
+
});
|
|
766
|
+
it('should handle many observers on single workflow', async () => {
|
|
767
|
+
class TestWorkflow extends Workflow {
|
|
768
|
+
async run() {
|
|
769
|
+
this.emitEvent({ type: 'stepStart', node: this.node, step: 'test' });
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
const workflow = new TestWorkflow();
|
|
773
|
+
// Add 100 observers
|
|
774
|
+
for (let i = 0; i < 100; i++) {
|
|
775
|
+
workflow.addObserver({
|
|
776
|
+
onLog: () => { },
|
|
777
|
+
onEvent: () => { },
|
|
778
|
+
onStateUpdated: () => { },
|
|
779
|
+
onTreeChanged: () => { },
|
|
780
|
+
});
|
|
781
|
+
}
|
|
782
|
+
await workflow.run();
|
|
783
|
+
// Should complete without issues
|
|
784
|
+
expect(true).toBe(true);
|
|
785
|
+
});
|
|
786
|
+
});
|
|
787
|
+
describe('Error Recovery Edge Cases', () => {
|
|
788
|
+
it('should handle error in @Step followed by another @Step', async () => {
|
|
789
|
+
let TestWorkflow = (() => {
|
|
790
|
+
let _classSuper = Workflow;
|
|
791
|
+
let _instanceExtraInitializers = [];
|
|
792
|
+
let _failingStep_decorators;
|
|
793
|
+
let _successStep_decorators;
|
|
794
|
+
return class TestWorkflow extends _classSuper {
|
|
795
|
+
static {
|
|
796
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
797
|
+
_failingStep_decorators = [Step()];
|
|
798
|
+
_successStep_decorators = [Step()];
|
|
799
|
+
__esDecorate(this, null, _failingStep_decorators, { kind: "method", name: "failingStep", static: false, private: false, access: { has: obj => "failingStep" in obj, get: obj => obj.failingStep }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
800
|
+
__esDecorate(this, null, _successStep_decorators, { kind: "method", name: "successStep", static: false, private: false, access: { has: obj => "successStep" in obj, get: obj => obj.successStep }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
801
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
802
|
+
}
|
|
803
|
+
async failingStep() {
|
|
804
|
+
throw new Error('Failed');
|
|
805
|
+
}
|
|
806
|
+
async successStep() {
|
|
807
|
+
return 'success';
|
|
808
|
+
}
|
|
809
|
+
async run() {
|
|
810
|
+
try {
|
|
811
|
+
await this.failingStep();
|
|
812
|
+
}
|
|
813
|
+
catch (err) {
|
|
814
|
+
// Expected
|
|
815
|
+
}
|
|
816
|
+
return await this.successStep();
|
|
817
|
+
}
|
|
818
|
+
constructor() {
|
|
819
|
+
super(...arguments);
|
|
820
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
821
|
+
}
|
|
822
|
+
};
|
|
823
|
+
})();
|
|
824
|
+
const workflow = new TestWorkflow();
|
|
825
|
+
const result = await workflow.run();
|
|
826
|
+
expect(result).toBe('success');
|
|
827
|
+
});
|
|
828
|
+
it('should handle multiple sequential errors', async () => {
|
|
829
|
+
let TestWorkflow = (() => {
|
|
830
|
+
let _classSuper = Workflow;
|
|
831
|
+
let _instanceExtraInitializers = [];
|
|
832
|
+
let _errorStep1_decorators;
|
|
833
|
+
let _errorStep2_decorators;
|
|
834
|
+
return class TestWorkflow extends _classSuper {
|
|
835
|
+
static {
|
|
836
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
837
|
+
_errorStep1_decorators = [Step()];
|
|
838
|
+
_errorStep2_decorators = [Step()];
|
|
839
|
+
__esDecorate(this, null, _errorStep1_decorators, { kind: "method", name: "errorStep1", static: false, private: false, access: { has: obj => "errorStep1" in obj, get: obj => obj.errorStep1 }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
840
|
+
__esDecorate(this, null, _errorStep2_decorators, { kind: "method", name: "errorStep2", static: false, private: false, access: { has: obj => "errorStep2" in obj, get: obj => obj.errorStep2 }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
841
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
842
|
+
}
|
|
843
|
+
async errorStep1() {
|
|
844
|
+
throw new Error('Error 1');
|
|
845
|
+
}
|
|
846
|
+
async errorStep2() {
|
|
847
|
+
throw new Error('Error 2');
|
|
848
|
+
}
|
|
849
|
+
async run() {
|
|
850
|
+
try {
|
|
851
|
+
await this.errorStep1();
|
|
852
|
+
}
|
|
853
|
+
catch (err) {
|
|
854
|
+
// Expected
|
|
855
|
+
}
|
|
856
|
+
try {
|
|
857
|
+
await this.errorStep2();
|
|
858
|
+
}
|
|
859
|
+
catch (err) {
|
|
860
|
+
// Expected
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
constructor() {
|
|
864
|
+
super(...arguments);
|
|
865
|
+
__runInitializers(this, _instanceExtraInitializers);
|
|
866
|
+
}
|
|
867
|
+
};
|
|
868
|
+
})();
|
|
869
|
+
const workflow = new TestWorkflow();
|
|
870
|
+
await workflow.run();
|
|
871
|
+
// Should have multiple error events
|
|
872
|
+
const errorEvents = workflow.node.events.filter(e => e.type === 'error');
|
|
873
|
+
expect(errorEvents.length).toBe(2);
|
|
874
|
+
});
|
|
875
|
+
});
|
|
876
|
+
});
|
|
877
|
+
//# sourceMappingURL=deep-analysis.test.js.map
|