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,170 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { Workflow, WorkflowTreeDebugger } from '../../index.js';
|
|
3
|
-
|
|
4
|
-
class IncrementalTestWorkflow extends Workflow {
|
|
5
|
-
async run(): Promise<void> {
|
|
6
|
-
this.setStatus('completed');
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
describe('Incremental Node Map Updates', () => {
|
|
11
|
-
it('childDetached removes entire subtree (node + descendants)', () => {
|
|
12
|
-
const root = new IncrementalTestWorkflow('Root');
|
|
13
|
-
const child1 = new IncrementalTestWorkflow('Child1', root);
|
|
14
|
-
const grandchild = new IncrementalTestWorkflow('Grandchild', child1);
|
|
15
|
-
const child2 = new IncrementalTestWorkflow('Child2', root);
|
|
16
|
-
|
|
17
|
-
const debugger_ = new WorkflowTreeDebugger(root);
|
|
18
|
-
|
|
19
|
-
// Verify all nodes are initially in the map
|
|
20
|
-
expect(debugger_.getNode(root.id)).toBe(root.getNode());
|
|
21
|
-
expect(debugger_.getNode(child1.id)).toBe(child1.getNode());
|
|
22
|
-
expect(debugger_.getNode(grandchild.id)).toBe(grandchild.getNode());
|
|
23
|
-
expect(debugger_.getNode(child2.id)).toBe(child2.getNode());
|
|
24
|
-
expect(debugger_.getStats().totalNodes).toBe(4);
|
|
25
|
-
|
|
26
|
-
// Detach child1 (should remove child1 + grandchild)
|
|
27
|
-
root.detachChild(child1);
|
|
28
|
-
|
|
29
|
-
// Verify child1 and grandchild are removed
|
|
30
|
-
expect(debugger_.getNode(child1.id)).toBeUndefined();
|
|
31
|
-
expect(debugger_.getNode(grandchild.id)).toBeUndefined();
|
|
32
|
-
|
|
33
|
-
// Verify root and child2 are still present
|
|
34
|
-
expect(debugger_.getNode(root.id)).toBe(root.getNode());
|
|
35
|
-
expect(debugger_.getNode(child2.id)).toBe(child2.getNode());
|
|
36
|
-
|
|
37
|
-
// Verify total node count decreased by 2
|
|
38
|
-
expect(debugger_.getStats().totalNodes).toBe(2);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('childDetached on already-removed node is no-op', () => {
|
|
42
|
-
const root = new IncrementalTestWorkflow('Root');
|
|
43
|
-
const child1 = new IncrementalTestWorkflow('Child1', root);
|
|
44
|
-
const grandchild = new IncrementalTestWorkflow('Grandchild', child1);
|
|
45
|
-
|
|
46
|
-
const debugger_ = new WorkflowTreeDebugger(root);
|
|
47
|
-
expect(debugger_.getStats().totalNodes).toBe(3);
|
|
48
|
-
|
|
49
|
-
// Detach child1
|
|
50
|
-
root.detachChild(child1);
|
|
51
|
-
expect(debugger_.getStats().totalNodes).toBe(1);
|
|
52
|
-
expect(debugger_.getNode(child1.id)).toBeUndefined();
|
|
53
|
-
expect(debugger_.getNode(grandchild.id)).toBeUndefined();
|
|
54
|
-
|
|
55
|
-
// Simulate the edge case where nodeMap still has orphaned nodes
|
|
56
|
-
// by directly removing a node that was never properly attached
|
|
57
|
-
// This tests the removeSubtreeNodes() no-op behavior
|
|
58
|
-
const orphanId = 'nonexistent-node';
|
|
59
|
-
expect(debugger_.getNode(orphanId)).toBeUndefined();
|
|
60
|
-
|
|
61
|
-
// Calling removeSubtreeNodes on a non-existent node should be safe
|
|
62
|
-
// We can't call detachChild twice because it throws, but we can
|
|
63
|
-
// verify the nodeMap state is consistent
|
|
64
|
-
expect(debugger_.getStats().totalNodes).toBe(1);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
it('childAttached adds subtree (verify existing behavior)', () => {
|
|
68
|
-
const root = new IncrementalTestWorkflow('Root');
|
|
69
|
-
|
|
70
|
-
const debugger_ = new WorkflowTreeDebugger(root);
|
|
71
|
-
expect(debugger_.getStats().totalNodes).toBe(1);
|
|
72
|
-
|
|
73
|
-
// Attach a child with its own subtree
|
|
74
|
-
const child1 = new IncrementalTestWorkflow('Child1', root);
|
|
75
|
-
const grandchild = new IncrementalTestWorkflow('Grandchild', child1);
|
|
76
|
-
|
|
77
|
-
// Verify all nodes are in the map
|
|
78
|
-
expect(debugger_.getNode(root.id)).toBe(root.getNode());
|
|
79
|
-
expect(debugger_.getNode(child1.id)).toBe(child1.getNode());
|
|
80
|
-
expect(debugger_.getNode(grandchild.id)).toBe(grandchild.getNode());
|
|
81
|
-
expect(debugger_.getStats().totalNodes).toBe(3);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it('onTreeChanged does not rebuild map', () => {
|
|
85
|
-
const root = new IncrementalTestWorkflow('Root');
|
|
86
|
-
const child1 = new IncrementalTestWorkflow('Child1', root);
|
|
87
|
-
const grandchild = new IncrementalTestWorkflow('Grandchild', child1);
|
|
88
|
-
const child2 = new IncrementalTestWorkflow('Child2', root);
|
|
89
|
-
|
|
90
|
-
const debugger_ = new WorkflowTreeDebugger(root);
|
|
91
|
-
|
|
92
|
-
// Get reference to the nodeMap (we'll check it's the same object)
|
|
93
|
-
const nodeMapBefore = debugger_.getStats();
|
|
94
|
-
|
|
95
|
-
// Detach child1
|
|
96
|
-
root.detachChild(child1);
|
|
97
|
-
|
|
98
|
-
// Verify map was updated incrementally (nodes removed)
|
|
99
|
-
expect(debugger_.getStats().totalNodes).toBe(2);
|
|
100
|
-
expect(debugger_.getNode(child1.id)).toBeUndefined();
|
|
101
|
-
expect(debugger_.getNode(grandchild.id)).toBeUndefined();
|
|
102
|
-
|
|
103
|
-
// Verify remaining nodes are still accessible
|
|
104
|
-
expect(debugger_.getNode(root.id)).toBe(root.getNode());
|
|
105
|
-
expect(debugger_.getNode(child2.id)).toBe(child2.getNode());
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it('multiple rapid attach/detach operations work correctly', () => {
|
|
109
|
-
const root = new IncrementalTestWorkflow('Root');
|
|
110
|
-
const child1 = new IncrementalTestWorkflow('Child1', root);
|
|
111
|
-
const child2 = new IncrementalTestWorkflow('Child2', root);
|
|
112
|
-
const grandchild1 = new IncrementalTestWorkflow('Grandchild1', child1);
|
|
113
|
-
const grandchild2 = new IncrementalTestWorkflow('Grandchild2', child1);
|
|
114
|
-
|
|
115
|
-
const debugger_ = new WorkflowTreeDebugger(root);
|
|
116
|
-
expect(debugger_.getStats().totalNodes).toBe(5);
|
|
117
|
-
|
|
118
|
-
// Detach child1 (removes child1 + 2 grandchildren)
|
|
119
|
-
root.detachChild(child1);
|
|
120
|
-
expect(debugger_.getStats().totalNodes).toBe(2);
|
|
121
|
-
|
|
122
|
-
// Attach a new child
|
|
123
|
-
const child3 = new IncrementalTestWorkflow('Child3', root);
|
|
124
|
-
expect(debugger_.getStats().totalNodes).toBe(3);
|
|
125
|
-
expect(debugger_.getNode(child3.id)).toBe(child3.getNode());
|
|
126
|
-
|
|
127
|
-
// Detach child2
|
|
128
|
-
root.detachChild(child2);
|
|
129
|
-
expect(debugger_.getStats().totalNodes).toBe(2);
|
|
130
|
-
|
|
131
|
-
// Verify final state
|
|
132
|
-
expect(debugger_.getNode(root.id)).toBe(root.getNode());
|
|
133
|
-
expect(debugger_.getNode(child3.id)).toBe(child3.getNode());
|
|
134
|
-
expect(debugger_.getNode(child1.id)).toBeUndefined();
|
|
135
|
-
expect(debugger_.getNode(child2.id)).toBeUndefined();
|
|
136
|
-
expect(debugger_.getNode(grandchild1.id)).toBeUndefined();
|
|
137
|
-
expect(debugger_.getNode(grandchild2.id)).toBeUndefined();
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it('detaching node with many descendants removes all', () => {
|
|
141
|
-
const root = new IncrementalTestWorkflow('Root');
|
|
142
|
-
|
|
143
|
-
// Build a deep subtree
|
|
144
|
-
const child1 = new IncrementalTestWorkflow('Child1', root);
|
|
145
|
-
let current = child1;
|
|
146
|
-
const descendants: IncrementalTestWorkflow[] = [];
|
|
147
|
-
for (let i = 0; i < 10; i++) {
|
|
148
|
-
const descendant = new IncrementalTestWorkflow(`Descendant${i}`, current);
|
|
149
|
-
descendants.push(descendant);
|
|
150
|
-
current = descendant;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
const debugger_ = new WorkflowTreeDebugger(root);
|
|
154
|
-
// Total: 1 root + 1 child1 + 10 descendants = 12 nodes
|
|
155
|
-
expect(debugger_.getStats().totalNodes).toBe(12);
|
|
156
|
-
|
|
157
|
-
// Detach child1 (should remove child1 + all 10 descendants)
|
|
158
|
-
root.detachChild(child1);
|
|
159
|
-
|
|
160
|
-
// Verify all were removed
|
|
161
|
-
expect(debugger_.getStats().totalNodes).toBe(1);
|
|
162
|
-
expect(debugger_.getNode(child1.id)).toBeUndefined();
|
|
163
|
-
for (const descendant of descendants) {
|
|
164
|
-
expect(debugger_.getNode(descendant.id)).toBeUndefined();
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Verify root is still there
|
|
168
|
-
expect(debugger_.getNode(root.id)).toBe(root.getNode());
|
|
169
|
-
});
|
|
170
|
-
});
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { Workflow, WorkflowTreeDebugger } from '../../index.js';
|
|
3
|
-
|
|
4
|
-
class DebugTestWorkflow extends Workflow {
|
|
5
|
-
async run(): Promise<void> {
|
|
6
|
-
this.setStatus('completed');
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
describe('WorkflowTreeDebugger', () => {
|
|
11
|
-
it('should render tree string', () => {
|
|
12
|
-
const wf = new DebugTestWorkflow('Root');
|
|
13
|
-
const debugger_ = new WorkflowTreeDebugger(wf);
|
|
14
|
-
|
|
15
|
-
const tree = debugger_.toTreeString();
|
|
16
|
-
expect(tree).toContain('Root');
|
|
17
|
-
expect(tree).toContain('[idle]');
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it('should show child nodes in tree', () => {
|
|
21
|
-
const parent = new DebugTestWorkflow('Parent');
|
|
22
|
-
const child1 = new DebugTestWorkflow('Child1', parent);
|
|
23
|
-
const child2 = new DebugTestWorkflow('Child2', parent);
|
|
24
|
-
|
|
25
|
-
const debugger_ = new WorkflowTreeDebugger(parent);
|
|
26
|
-
const tree = debugger_.toTreeString();
|
|
27
|
-
|
|
28
|
-
expect(tree).toContain('Parent');
|
|
29
|
-
expect(tree).toContain('Child1');
|
|
30
|
-
expect(tree).toContain('Child2');
|
|
31
|
-
expect(tree).toContain('├──');
|
|
32
|
-
expect(tree).toContain('└──');
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('should find node by ID', () => {
|
|
36
|
-
const parent = new DebugTestWorkflow('Parent');
|
|
37
|
-
const child = new DebugTestWorkflow('Child', parent);
|
|
38
|
-
|
|
39
|
-
const debugger_ = new WorkflowTreeDebugger(parent);
|
|
40
|
-
|
|
41
|
-
expect(debugger_.getNode(parent.id)).toBe(parent.getNode());
|
|
42
|
-
expect(debugger_.getNode(child.id)).toBe(child.getNode());
|
|
43
|
-
expect(debugger_.getNode('nonexistent')).toBeUndefined();
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('should collect logs from all nodes', async () => {
|
|
47
|
-
const parent = new DebugTestWorkflow('Parent');
|
|
48
|
-
const child = new DebugTestWorkflow('Child', parent);
|
|
49
|
-
|
|
50
|
-
const debugger_ = new WorkflowTreeDebugger(parent);
|
|
51
|
-
|
|
52
|
-
// Add some logs manually
|
|
53
|
-
parent.getNode().logs.push({
|
|
54
|
-
id: '1',
|
|
55
|
-
workflowId: parent.id,
|
|
56
|
-
timestamp: Date.now(),
|
|
57
|
-
level: 'info',
|
|
58
|
-
message: 'Parent log',
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
child.getNode().logs.push({
|
|
62
|
-
id: '2',
|
|
63
|
-
workflowId: child.id,
|
|
64
|
-
timestamp: Date.now(),
|
|
65
|
-
level: 'info',
|
|
66
|
-
message: 'Child log',
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
const logString = debugger_.toLogString();
|
|
70
|
-
expect(logString).toContain('Parent log');
|
|
71
|
-
expect(logString).toContain('Child log');
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it('should return stats', () => {
|
|
75
|
-
const parent = new DebugTestWorkflow('Parent');
|
|
76
|
-
new DebugTestWorkflow('Child1', parent);
|
|
77
|
-
new DebugTestWorkflow('Child2', parent);
|
|
78
|
-
|
|
79
|
-
const debugger_ = new WorkflowTreeDebugger(parent);
|
|
80
|
-
const stats = debugger_.getStats();
|
|
81
|
-
|
|
82
|
-
expect(stats.totalNodes).toBe(3);
|
|
83
|
-
expect(stats.byStatus.idle).toBe(3);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { mergeWorkflowErrors } from '../../../utils/workflow-error-utils.js';
|
|
3
|
-
import type { WorkflowError } from '../../../types/error.js';
|
|
4
|
-
|
|
5
|
-
describe('mergeWorkflowErrors', () => {
|
|
6
|
-
// Helper function to create a mock WorkflowError
|
|
7
|
-
function createMockWorkflowError(overrides?: Partial<WorkflowError>): WorkflowError {
|
|
8
|
-
return {
|
|
9
|
-
message: 'Test error',
|
|
10
|
-
original: new Error('Original error'),
|
|
11
|
-
workflowId: 'wf-test-123',
|
|
12
|
-
stack: 'Error: Test error\n at test.ts:10:15',
|
|
13
|
-
state: { key: 'value' },
|
|
14
|
-
logs: [
|
|
15
|
-
{
|
|
16
|
-
id: 'log-1',
|
|
17
|
-
workflowId: 'wf-test-123',
|
|
18
|
-
timestamp: Date.now(),
|
|
19
|
-
level: 'error',
|
|
20
|
-
message: 'Test log message',
|
|
21
|
-
},
|
|
22
|
-
],
|
|
23
|
-
...overrides,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
it('should return a single error when merging one error', () => {
|
|
28
|
-
const error = createMockWorkflowError({ workflowId: 'wf-1' });
|
|
29
|
-
const result = mergeWorkflowErrors([error], 'testTask', 'parent-wf', 1);
|
|
30
|
-
|
|
31
|
-
expect(result.message).toBe("1 of 1 concurrent child workflows failed in task 'testTask'");
|
|
32
|
-
expect(result.workflowId).toBe('parent-wf');
|
|
33
|
-
expect(result.logs).toEqual(error.logs);
|
|
34
|
-
expect(result.stack).toBe(error.stack);
|
|
35
|
-
expect(result.state).toEqual(error.state);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('should aggregate multiple errors with unique workflow IDs', () => {
|
|
39
|
-
const error1 = createMockWorkflowError({
|
|
40
|
-
message: 'Error 1',
|
|
41
|
-
workflowId: 'wf-1',
|
|
42
|
-
stack: 'stack 1',
|
|
43
|
-
state: { key1: 'value1' },
|
|
44
|
-
logs: [{ id: 'log-1', workflowId: 'wf-1', timestamp: 1000, level: 'error', message: 'Log 1' }],
|
|
45
|
-
});
|
|
46
|
-
const error2 = createMockWorkflowError({
|
|
47
|
-
message: 'Error 2',
|
|
48
|
-
workflowId: 'wf-2',
|
|
49
|
-
stack: 'stack 2',
|
|
50
|
-
state: { key2: 'value2' },
|
|
51
|
-
logs: [{ id: 'log-2', workflowId: 'wf-2', timestamp: 2000, level: 'error', message: 'Log 2' }],
|
|
52
|
-
});
|
|
53
|
-
const error3 = createMockWorkflowError({
|
|
54
|
-
message: 'Error 3',
|
|
55
|
-
workflowId: 'wf-3',
|
|
56
|
-
stack: 'stack 3',
|
|
57
|
-
state: { key3: 'value3' },
|
|
58
|
-
logs: [{ id: 'log-3', workflowId: 'wf-3', timestamp: 3000, level: 'error', message: 'Log 3' }],
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
const result = mergeWorkflowErrors([error1, error2, error3], 'concurrentTask', 'parent-wf', 5);
|
|
62
|
-
|
|
63
|
-
expect(result.message).toBe("3 of 5 concurrent child workflows failed in task 'concurrentTask'");
|
|
64
|
-
expect(result.workflowId).toBe('parent-wf');
|
|
65
|
-
expect(result.stack).toBe('stack 1'); // First error's stack
|
|
66
|
-
expect(result.state).toEqual({ key1: 'value1' }); // First error's state
|
|
67
|
-
expect(result.logs).toHaveLength(3); // All logs aggregated
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it('should deduplicate workflow IDs when errors have duplicate IDs', () => {
|
|
71
|
-
const error1 = createMockWorkflowError({ workflowId: 'wf-dup' });
|
|
72
|
-
const error2 = createMockWorkflowError({ workflowId: 'wf-dup' });
|
|
73
|
-
const error3 = createMockWorkflowError({ workflowId: 'wf-unique' });
|
|
74
|
-
|
|
75
|
-
const result = mergeWorkflowErrors([error1, error2, error3], 'testTask', 'parent-wf', 4);
|
|
76
|
-
|
|
77
|
-
// Access the metadata from original field
|
|
78
|
-
const metadata = result.original as {
|
|
79
|
-
name: string;
|
|
80
|
-
message: string;
|
|
81
|
-
errors: WorkflowError[];
|
|
82
|
-
totalChildren: number;
|
|
83
|
-
failedChildren: number;
|
|
84
|
-
failedWorkflowIds: string[];
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
expect(metadata.failedWorkflowIds).toEqual(['wf-dup', 'wf-unique']);
|
|
88
|
-
expect(metadata.failedWorkflowIds).toHaveLength(2); // Deduplicated
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('should flatten logs arrays from all errors using flatMap', () => {
|
|
92
|
-
const error1 = createMockWorkflowError({
|
|
93
|
-
workflowId: 'wf-1',
|
|
94
|
-
logs: [
|
|
95
|
-
{ id: 'log-1', workflowId: 'wf-1', timestamp: 1000, level: 'info', message: 'Log 1.1' },
|
|
96
|
-
{ id: 'log-2', workflowId: 'wf-1', timestamp: 2000, level: 'info', message: 'Log 1.2' },
|
|
97
|
-
],
|
|
98
|
-
});
|
|
99
|
-
const error2 = createMockWorkflowError({
|
|
100
|
-
workflowId: 'wf-2',
|
|
101
|
-
logs: [
|
|
102
|
-
{ id: 'log-3', workflowId: 'wf-2', timestamp: 3000, level: 'error', message: 'Log 2.1' },
|
|
103
|
-
{ id: 'log-4', workflowId: 'wf-2', timestamp: 4000, level: 'error', message: 'Log 2.2' },
|
|
104
|
-
],
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
const result = mergeWorkflowErrors([error1, error2], 'testTask', 'parent-wf', 2);
|
|
108
|
-
|
|
109
|
-
expect(result.logs).toHaveLength(4);
|
|
110
|
-
expect(result.logs[0].message).toBe('Log 1.1');
|
|
111
|
-
expect(result.logs[1].message).toBe('Log 1.2');
|
|
112
|
-
expect(result.logs[2].message).toBe('Log 2.1');
|
|
113
|
-
expect(result.logs[3].message).toBe('Log 2.2');
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('should use first error stack trace', () => {
|
|
117
|
-
const error1 = createMockWorkflowError({ stack: 'First stack trace' });
|
|
118
|
-
const error2 = createMockWorkflowError({ stack: 'Second stack trace' });
|
|
119
|
-
const error3 = createMockWorkflowError({ stack: 'Third stack trace' });
|
|
120
|
-
|
|
121
|
-
const result = mergeWorkflowErrors([error1, error2, error3], 'testTask', 'parent-wf', 3);
|
|
122
|
-
|
|
123
|
-
expect(result.stack).toBe('First stack trace');
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it('should use first error state', () => {
|
|
127
|
-
const error1 = createMockWorkflowError({ state: { first: 'state1' } });
|
|
128
|
-
const error2 = createMockWorkflowError({ state: { second: 'state2' } });
|
|
129
|
-
|
|
130
|
-
const result = mergeWorkflowErrors([error1, error2], 'testTask', 'parent-wf', 2);
|
|
131
|
-
|
|
132
|
-
expect(result.state).toEqual({ first: 'state1' });
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
it('should use empty object when first error has no state', () => {
|
|
136
|
-
const error1 = createMockWorkflowError({ state: undefined as any });
|
|
137
|
-
const error2 = createMockWorkflowError({ state: { hasState: 'yes' } });
|
|
138
|
-
|
|
139
|
-
const result = mergeWorkflowErrors([error1, error2], 'testTask', 'parent-wf', 2);
|
|
140
|
-
|
|
141
|
-
expect(result.state).toEqual({});
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
it('should handle undefined stack trace gracefully', () => {
|
|
145
|
-
const error1 = createMockWorkflowError({ stack: undefined });
|
|
146
|
-
const error2 = createMockWorkflowError({ stack: 'Has stack' });
|
|
147
|
-
|
|
148
|
-
const result = mergeWorkflowErrors([error1, error2], 'testTask', 'parent-wf', 2);
|
|
149
|
-
|
|
150
|
-
expect(result.stack).toBeUndefined();
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
it('should include metadata in original field', () => {
|
|
154
|
-
const error1 = createMockWorkflowError({ workflowId: 'wf-1' });
|
|
155
|
-
const error2 = createMockWorkflowError({ workflowId: 'wf-2' });
|
|
156
|
-
const error3 = createMockWorkflowError({ workflowId: 'wf-3' });
|
|
157
|
-
|
|
158
|
-
const result = mergeWorkflowErrors([error1, error2, error3], 'concurrentTask', 'parent-wf', 5);
|
|
159
|
-
|
|
160
|
-
const metadata = result.original as {
|
|
161
|
-
name: string;
|
|
162
|
-
message: string;
|
|
163
|
-
errors: WorkflowError[];
|
|
164
|
-
totalChildren: number;
|
|
165
|
-
failedChildren: number;
|
|
166
|
-
failedWorkflowIds: string[];
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
expect(metadata.name).toBe('WorkflowAggregateError');
|
|
170
|
-
expect(metadata.message).toBe("3 of 5 concurrent child workflows failed in task 'concurrentTask'");
|
|
171
|
-
expect(metadata.errors).toEqual([error1, error2, error3]);
|
|
172
|
-
expect(metadata.totalChildren).toBe(5);
|
|
173
|
-
expect(metadata.failedChildren).toBe(3);
|
|
174
|
-
expect(metadata.failedWorkflowIds).toEqual(['wf-1', 'wf-2', 'wf-3']);
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
it('should handle empty logs array', () => {
|
|
178
|
-
const error1 = createMockWorkflowError({ logs: [] });
|
|
179
|
-
const error2 = createMockWorkflowError({ logs: [] });
|
|
180
|
-
|
|
181
|
-
const result = mergeWorkflowErrors([error1, error2], 'testTask', 'parent-wf', 2);
|
|
182
|
-
|
|
183
|
-
expect(result.logs).toEqual([]);
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
it('should include task name in message', () => {
|
|
187
|
-
const error = createMockWorkflowError();
|
|
188
|
-
const result = mergeWorkflowErrors([error], 'myCustomTask', 'parent-wf', 1);
|
|
189
|
-
|
|
190
|
-
expect(result.message).toContain("task 'myCustomTask'");
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
it('should include correct counts in message', () => {
|
|
194
|
-
const errors = Array.from({ length: 3 }, (_, i) =>
|
|
195
|
-
createMockWorkflowError({ workflowId: `wf-${i}` })
|
|
196
|
-
);
|
|
197
|
-
|
|
198
|
-
const result = mergeWorkflowErrors(errors, 'testTask', 'parent-wf', 10);
|
|
199
|
-
|
|
200
|
-
expect(result.message).toBe("3 of 10 concurrent child workflows failed in task 'testTask'");
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
it('should preserve parent workflow ID', () => {
|
|
204
|
-
const error = createMockWorkflowError({ workflowId: 'child-123' });
|
|
205
|
-
const result = mergeWorkflowErrors([error], 'testTask', 'parent-abc', 1);
|
|
206
|
-
|
|
207
|
-
expect(result.workflowId).toBe('parent-abc');
|
|
208
|
-
});
|
|
209
|
-
});
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { Workflow, WorkflowObserver, WorkflowEvent } from '../../index.js';
|
|
3
|
-
|
|
4
|
-
class SimpleWorkflow extends Workflow {
|
|
5
|
-
async run(): Promise<string> {
|
|
6
|
-
this.setStatus('running');
|
|
7
|
-
this.setStatus('completed');
|
|
8
|
-
return 'done';
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
describe('Workflow.detachChild()', () => {
|
|
13
|
-
it('should remove child from parent.children array', () => {
|
|
14
|
-
// Arrange: Create parent with child
|
|
15
|
-
const parent = new SimpleWorkflow('Parent');
|
|
16
|
-
const child = new SimpleWorkflow('Child', parent);
|
|
17
|
-
|
|
18
|
-
// Assert: Verify child is in parent.children
|
|
19
|
-
expect(parent.children).toContain(child);
|
|
20
|
-
|
|
21
|
-
// Act: Call detachChild (will fail - method doesn't exist)
|
|
22
|
-
parent.detachChild(child);
|
|
23
|
-
|
|
24
|
-
// Assert: Verify child removed from parent.children
|
|
25
|
-
expect(parent.children).not.toContain(child);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('should clear child.parent to null', () => {
|
|
29
|
-
// Arrange: Create parent with child
|
|
30
|
-
const parent = new SimpleWorkflow('Parent');
|
|
31
|
-
const child = new SimpleWorkflow('Child', parent);
|
|
32
|
-
|
|
33
|
-
// Assert: Verify child.parent is set
|
|
34
|
-
expect(child.parent).toBe(parent);
|
|
35
|
-
|
|
36
|
-
// Act: Call detachChild
|
|
37
|
-
parent.detachChild(child);
|
|
38
|
-
|
|
39
|
-
// Assert: Verify child.parent is null
|
|
40
|
-
expect(child.parent).toBeNull();
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('should remove child.node from parent.node.children array', () => {
|
|
44
|
-
// Arrange: Create parent with child
|
|
45
|
-
const parent = new SimpleWorkflow('Parent');
|
|
46
|
-
const child = new SimpleWorkflow('Child', parent);
|
|
47
|
-
|
|
48
|
-
// Assert: Verify child.node is in parent.node.children
|
|
49
|
-
expect(parent.getNode().children).toContain(child.getNode());
|
|
50
|
-
|
|
51
|
-
// Act: Call detachChild
|
|
52
|
-
parent.detachChild(child);
|
|
53
|
-
|
|
54
|
-
// Assert: Verify child.node removed from parent.node.children
|
|
55
|
-
expect(parent.getNode().children).not.toContain(child.getNode());
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('should emit childDetached event with correct payload', () => {
|
|
59
|
-
// Arrange: Create parent with observer
|
|
60
|
-
const parent = new SimpleWorkflow('Parent');
|
|
61
|
-
const events: WorkflowEvent[] = [];
|
|
62
|
-
|
|
63
|
-
const observer: WorkflowObserver = {
|
|
64
|
-
onLog: () => {},
|
|
65
|
-
onEvent: (event) => events.push(event),
|
|
66
|
-
onStateUpdated: () => {},
|
|
67
|
-
onTreeChanged: () => {},
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
parent.addObserver(observer);
|
|
71
|
-
|
|
72
|
-
// Act: Create child (triggers attachChild event), then detach
|
|
73
|
-
const child = new SimpleWorkflow('Child', parent);
|
|
74
|
-
events.length = 0; // Clear attachChild events
|
|
75
|
-
|
|
76
|
-
parent.detachChild(child);
|
|
77
|
-
|
|
78
|
-
// Assert: Verify childDetached event was emitted
|
|
79
|
-
const detachEvent = events.find((e) => e.type === 'childDetached');
|
|
80
|
-
expect(detachEvent).toBeDefined();
|
|
81
|
-
|
|
82
|
-
// Assert: Verify event payload (with type guard for discriminated union)
|
|
83
|
-
expect(detachEvent?.type === 'childDetached' && detachEvent.parentId).toBe(parent.id);
|
|
84
|
-
expect(detachEvent?.type === 'childDetached' && detachEvent.childId).toBe(child.id);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('should throw error when child is not attached to parent', () => {
|
|
88
|
-
// Arrange: Create parent and child separately (no attachment)
|
|
89
|
-
const parent = new SimpleWorkflow('Parent');
|
|
90
|
-
const child = new SimpleWorkflow('Child');
|
|
91
|
-
|
|
92
|
-
// Assert: Verify child is NOT in parent.children
|
|
93
|
-
expect(parent.children).not.toContain(child);
|
|
94
|
-
|
|
95
|
-
// Act & Assert: Calling detachChild should throw error
|
|
96
|
-
expect(() => parent.detachChild(child)).toThrow(
|
|
97
|
-
/not attached/i
|
|
98
|
-
);
|
|
99
|
-
});
|
|
100
|
-
});
|