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,723 +0,0 @@
|
|
|
1
|
-
# TypeScript Error Handling Best Practices Research
|
|
2
|
-
|
|
3
|
-
## Executive Summary
|
|
4
|
-
|
|
5
|
-
This document compiles research findings on TypeScript error handling best practices, with specific focus on:
|
|
6
|
-
1. Error state capture patterns in async/try-catch contexts
|
|
7
|
-
2. Proper object state capture in error handlers
|
|
8
|
-
3. Error enrichment patterns in TypeScript
|
|
9
|
-
4. Common gotchas when using 'this' in catch blocks
|
|
10
|
-
5. WeakMap-based state capture considerations
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## 1. Error State Capture Patterns in Async/Try-Catch Contexts
|
|
15
|
-
|
|
16
|
-
### Key Resources
|
|
17
|
-
|
|
18
|
-
1. **[A guide to async/await in TypeScript](https://blog.logrocket.com/async-await-typescript/)** - LogRocket Blog (Updated January 2025)
|
|
19
|
-
- **Section: Error handling with try/catch**
|
|
20
|
-
- **Section: Error handling using higher-order functions**
|
|
21
|
-
- Comprehensive coverage of async/await error handling patterns
|
|
22
|
-
|
|
23
|
-
2. **[TypeScript Error Handling: Tips and Best Practices](https://hupp.tech/blog/typescript/typescript-error-handling-tips-and-best-practices/)** - Hupp Technologies (April 7, 2025)
|
|
24
|
-
- **Section: Use try…catch Blocks Wisely**
|
|
25
|
-
- Modern TypeScript error handling approaches
|
|
26
|
-
|
|
27
|
-
3. **[Control flow and error handling - JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling)** - MDN Web Docs
|
|
28
|
-
- **Section: try...catch statements**
|
|
29
|
-
- Official documentation on error handling constructs
|
|
30
|
-
|
|
31
|
-
### Best Practices for State Capture in Async Contexts
|
|
32
|
-
|
|
33
|
-
#### 1.1 Local Error Handling Pattern
|
|
34
|
-
|
|
35
|
-
```typescript
|
|
36
|
-
async function fetchData(url: string): Promise<void> {
|
|
37
|
-
try {
|
|
38
|
-
const response = await fetch(url);
|
|
39
|
-
if (!response.ok) {
|
|
40
|
-
throw new Error(`HTTP Error: ${response.status}`);
|
|
41
|
-
}
|
|
42
|
-
const data = await response.json();
|
|
43
|
-
console.log(data);
|
|
44
|
-
} catch (error) {
|
|
45
|
-
console.error('Error fetching data:', error);
|
|
46
|
-
// State is captured locally in the error handler
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
**Key Principles:**
|
|
52
|
-
- Handle errors locally within the function where they occur
|
|
53
|
-
- Allow functions to fail gracefully without crashing the application
|
|
54
|
-
- Capture context-specific state in the catch block
|
|
55
|
-
|
|
56
|
-
#### 1.2 Higher-Order Function Pattern for State Capture
|
|
57
|
-
|
|
58
|
-
```typescript
|
|
59
|
-
// Wrapper function that preserves state context
|
|
60
|
-
function handleAsyncErrors<T extends (...args: any[]) => Promise<any>>(
|
|
61
|
-
asyncFn: T,
|
|
62
|
-
...args: Parameters<T>
|
|
63
|
-
): Promise<ReturnType<T> | null> {
|
|
64
|
-
try {
|
|
65
|
-
return await asyncFn(...args);
|
|
66
|
-
} catch (error) {
|
|
67
|
-
console.error(`Error in ${asyncFn.name}:`, error);
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Usage preserves state context
|
|
73
|
-
const safeFetchEmployees = (url: string) => handleAsyncErrors(fetchEmployees, url);
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
**Benefits:**
|
|
77
|
-
- Centralizes error handling logic
|
|
78
|
-
- Preserves state context through closure
|
|
79
|
-
- Reduces code duplication
|
|
80
|
-
- Maintains type safety
|
|
81
|
-
|
|
82
|
-
#### 1.3 State Preservation in Sequential Operations
|
|
83
|
-
|
|
84
|
-
```typescript
|
|
85
|
-
const runAsyncFunctions = async () => {
|
|
86
|
-
try {
|
|
87
|
-
const employees = await fetchAllEmployees(baseApi);
|
|
88
|
-
// State is preserved between operations
|
|
89
|
-
Promise.all(
|
|
90
|
-
employees.map(async user => {
|
|
91
|
-
const userName = await fetchEmployee(userApi, user.id);
|
|
92
|
-
const emails = generateEmail(userName.name);
|
|
93
|
-
return emails;
|
|
94
|
-
})
|
|
95
|
-
);
|
|
96
|
-
} catch (error) {
|
|
97
|
-
console.log(error);
|
|
98
|
-
// Error has access to all state in the try block's scope
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## 2. Object State Capture in Error Handlers
|
|
106
|
-
|
|
107
|
-
### Key Resources
|
|
108
|
-
|
|
109
|
-
1. **[Custom errors, extending Error](https://javascript.info/custom-errors)** - JavaScript.info
|
|
110
|
-
- **Section: Extending Error**
|
|
111
|
-
- **Section: Further inheritance**
|
|
112
|
-
- Comprehensive guide on custom error classes with state
|
|
113
|
-
|
|
114
|
-
2. **[Error - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)** - MDN Web Docs
|
|
115
|
-
- **Section: Custom error types**
|
|
116
|
-
- **Section: Differentiate between similar errors**
|
|
117
|
-
- Official documentation on error object patterns
|
|
118
|
-
|
|
119
|
-
### Best Practices for Capturing Object State
|
|
120
|
-
|
|
121
|
-
#### 2.1 Custom Error Classes with State
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
class ValidationError extends Error {
|
|
125
|
-
constructor(message: string) {
|
|
126
|
-
super(message);
|
|
127
|
-
this.name = 'ValidationError';
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
class PropertyRequiredError extends ValidationError {
|
|
132
|
-
constructor(property: string) {
|
|
133
|
-
super("No property: " + property);
|
|
134
|
-
this.name = 'PropertyRequiredError';
|
|
135
|
-
this.property = property; // State captured in error object
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Usage
|
|
140
|
-
try {
|
|
141
|
-
if (!user.age) {
|
|
142
|
-
throw new PropertyRequiredError("age"); // State captured at throw site
|
|
143
|
-
}
|
|
144
|
-
} catch (err) {
|
|
145
|
-
if (err instanceof PropertyRequiredError) {
|
|
146
|
-
console.error("Invalid data:", err.message);
|
|
147
|
-
console.error("Missing property:", err.property); // Access captured state
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
#### 2.2 Error Enrichment with Context
|
|
153
|
-
|
|
154
|
-
```typescript
|
|
155
|
-
class ContextualError extends Error {
|
|
156
|
-
public context: Record<string, any>;
|
|
157
|
-
|
|
158
|
-
constructor(message: string, context: Record<string, any>) {
|
|
159
|
-
super(message);
|
|
160
|
-
this.name = 'ContextualError';
|
|
161
|
-
this.context = context; // Capture arbitrary state
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// Usage
|
|
166
|
-
try {
|
|
167
|
-
performOperation();
|
|
168
|
-
} catch (error) {
|
|
169
|
-
throw new ContextualError('Operation failed', {
|
|
170
|
-
originalError: error,
|
|
171
|
-
userId: user.id,
|
|
172
|
-
timestamp: Date.now(),
|
|
173
|
-
operationState: { /* ... */ }
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
#### 2.3 Using the 'cause' Property (Modern Approach)
|
|
179
|
-
|
|
180
|
-
```typescript
|
|
181
|
-
// Error cause chain
|
|
182
|
-
try {
|
|
183
|
-
doFailSomeWay();
|
|
184
|
-
} catch (err) {
|
|
185
|
-
throw new Error("Failed in some way", { cause: err });
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
try {
|
|
189
|
-
doFailAnotherWay();
|
|
190
|
-
} catch (err) {
|
|
191
|
-
throw new Error("Failed in another way", { cause: err });
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// Accessing the cause chain
|
|
195
|
-
try {
|
|
196
|
-
doWork();
|
|
197
|
-
} catch (err) {
|
|
198
|
-
switch (err.message) {
|
|
199
|
-
case "Failed in some way":
|
|
200
|
-
handleFailSomeWay(err.cause);
|
|
201
|
-
break;
|
|
202
|
-
case "Failed in another way":
|
|
203
|
-
handleFailAnotherWay(err.cause);
|
|
204
|
-
break;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## 3. Error Enrichment Patterns in TypeScript
|
|
212
|
-
|
|
213
|
-
### Key Resources
|
|
214
|
-
|
|
215
|
-
1. **[Handling errors like a pro in TypeScript](https://engineering.udacity.com/handling-errors-like-a-pro-in-typescript-d7a314ad4991)** - Udacity Engineering
|
|
216
|
-
- Focus on functional error handling with Result Pattern
|
|
217
|
-
- Transform error handling from exceptions to predictable patterns
|
|
218
|
-
|
|
219
|
-
2. **[Error Handling in TypeScript: Best Practices](https://medium.com/@arreyetta/error-handling-in-typescript-best-practices-80cdfe6d06db)** - Medium
|
|
220
|
-
- Custom error types and type-safe error objects
|
|
221
|
-
- Safe and predictable error handling approaches
|
|
222
|
-
|
|
223
|
-
3. **[The 5 Commandments of Clean Error Handling in TypeScript](https://backstage.orus.eu/the-5-commandments-of-clean-error-handling-in-typescript/)**
|
|
224
|
-
- Make sure Errors are Errors (extend Error class)
|
|
225
|
-
- Don't lose your stack trace
|
|
226
|
-
- Use constant error messages
|
|
227
|
-
- Provide the right amount of context
|
|
228
|
-
|
|
229
|
-
### Error Enrichment Techniques
|
|
230
|
-
|
|
231
|
-
#### 3.1 Base Error Class Pattern
|
|
232
|
-
|
|
233
|
-
```typescript
|
|
234
|
-
class MyError extends Error {
|
|
235
|
-
constructor(message: string) {
|
|
236
|
-
super(message);
|
|
237
|
-
this.name = this.constructor.name; // Automatic name assignment
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
class ValidationError extends MyError {
|
|
242
|
-
constructor(message: string) {
|
|
243
|
-
super(message);
|
|
244
|
-
// Name automatically set to 'ValidationError'
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
#### 3.2 Wrapper Exception Pattern
|
|
250
|
-
|
|
251
|
-
```typescript
|
|
252
|
-
class ReadError extends Error {
|
|
253
|
-
constructor(message: string, cause: Error) {
|
|
254
|
-
super(message);
|
|
255
|
-
this.cause = cause;
|
|
256
|
-
this.name = 'ReadError';
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
function readUser(json: string) {
|
|
261
|
-
let user;
|
|
262
|
-
|
|
263
|
-
try {
|
|
264
|
-
user = JSON.parse(json);
|
|
265
|
-
} catch (err) {
|
|
266
|
-
if (err instanceof SyntaxError) {
|
|
267
|
-
throw new ReadError("Syntax Error", err); // Wrap low-level error
|
|
268
|
-
} else {
|
|
269
|
-
throw err;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
try {
|
|
274
|
-
validateUser(user);
|
|
275
|
-
} catch (err) {
|
|
276
|
-
if (err instanceof ValidationError) {
|
|
277
|
-
throw new ReadError("Validation Error", err); // Wrap and enrich
|
|
278
|
-
} else {
|
|
279
|
-
throw err;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
#### 3.3 Result Type Pattern (Functional Approach)
|
|
286
|
-
|
|
287
|
-
```typescript
|
|
288
|
-
type Result<T, E = Error> =
|
|
289
|
-
| { success: true; data: T }
|
|
290
|
-
| { success: false; error: E };
|
|
291
|
-
|
|
292
|
-
function performTask(): Result<number, string> {
|
|
293
|
-
if (Math.random() > 0.5) {
|
|
294
|
-
return { success: true, data: 42 };
|
|
295
|
-
} else {
|
|
296
|
-
return { success: false, error: 'Task failed' };
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
// Usage
|
|
301
|
-
const result = performTask();
|
|
302
|
-
if (result.success) {
|
|
303
|
-
console.log('Data:', result.data);
|
|
304
|
-
} else {
|
|
305
|
-
console.error('Error:', result.error);
|
|
306
|
-
}
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
#### 3.4 Union Types for Error Responses
|
|
310
|
-
|
|
311
|
-
```typescript
|
|
312
|
-
type Result<T> = { success: true; data: T } | { success: false; error: string };
|
|
313
|
-
|
|
314
|
-
function performTask(): Result<number> {
|
|
315
|
-
if (Math.random() > 0.5) {
|
|
316
|
-
return { success: true, data: 42 };
|
|
317
|
-
} else {
|
|
318
|
-
return { success: false, error: 'Task failed' };
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
const result = performTask();
|
|
323
|
-
if (result.success) {
|
|
324
|
-
console.log('Data:', result.data);
|
|
325
|
-
} else {
|
|
326
|
-
console.error('Error:', result.error);
|
|
327
|
-
}
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
---
|
|
331
|
-
|
|
332
|
-
## 4. Common Gotchas with 'this' in Catch Blocks
|
|
333
|
-
|
|
334
|
-
### Key Resources
|
|
335
|
-
|
|
336
|
-
1. **[Can you bind 'this' in an arrow function?](https://stackoverflow.com/questions/33308121/can-you-bind-this-in-an-arrow-function)** - Stack Overflow
|
|
337
|
-
- Cannot rebind `this` in an arrow function
|
|
338
|
-
- Always defined as the context in which it was defined
|
|
339
|
-
|
|
340
|
-
2. **[Arrow function expressions - JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)** - MDN Web Docs
|
|
341
|
-
- **Section: Lexical this**
|
|
342
|
-
- Arrow functions have semantic differences and deliberate limitations
|
|
343
|
-
|
|
344
|
-
3. **[Access "this" in a Promise's Catch Block](https://www.pluralsight.com/resources/blog/guides/access-this-in-a-promises-catch-block)** - Pluralsight
|
|
345
|
-
- Using arrow functions to access `this` in catch blocks
|
|
346
|
-
- Context preservation patterns
|
|
347
|
-
|
|
348
|
-
### Common Pitfalls and Solutions
|
|
349
|
-
|
|
350
|
-
#### 4.1 Traditional Function in Catch Block (Problematic)
|
|
351
|
-
|
|
352
|
-
```typescript
|
|
353
|
-
class MyClass {
|
|
354
|
-
private value: number = 42;
|
|
355
|
-
|
|
356
|
-
async methodWithError() {
|
|
357
|
-
try {
|
|
358
|
-
await someAsyncOperation();
|
|
359
|
-
} catch (error) {
|
|
360
|
-
// PROBLEM: 'this' may not be what you expect
|
|
361
|
-
function handleError() {
|
|
362
|
-
console.log(this.value); // undefined or wrong context
|
|
363
|
-
}
|
|
364
|
-
handleError();
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
#### 4.2 Arrow Function Solution (Lexical this)
|
|
371
|
-
|
|
372
|
-
```typescript
|
|
373
|
-
class MyClass {
|
|
374
|
-
private value: number = 42;
|
|
375
|
-
|
|
376
|
-
async methodWithError() {
|
|
377
|
-
try {
|
|
378
|
-
await someAsyncOperation();
|
|
379
|
-
} catch (error) {
|
|
380
|
-
// SOLUTION: Arrow function preserves lexical 'this'
|
|
381
|
-
const handleError = () => {
|
|
382
|
-
console.log(this.value); // 42 - correct context
|
|
383
|
-
};
|
|
384
|
-
handleError();
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
#### 4.3 Promise Catch with Arrow Function
|
|
391
|
-
|
|
392
|
-
```typescript
|
|
393
|
-
class MyClass {
|
|
394
|
-
private data: string = "important";
|
|
395
|
-
|
|
396
|
-
methodWithPromise() {
|
|
397
|
-
Promise.resolve()
|
|
398
|
-
.then(() => {
|
|
399
|
-
console.log(this.data); // Works - arrow function preserves 'this'
|
|
400
|
-
})
|
|
401
|
-
.catch((error) => {
|
|
402
|
-
console.error(error); // 'this' is still preserved
|
|
403
|
-
console.log(this.data); // Works - arrow function in catch
|
|
404
|
-
});
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
#### 4.4 Manual Binding Alternative
|
|
410
|
-
|
|
411
|
-
```typescript
|
|
412
|
-
class MyClass {
|
|
413
|
-
private value: number = 42;
|
|
414
|
-
|
|
415
|
-
async methodWithError() {
|
|
416
|
-
try {
|
|
417
|
-
await someAsyncOperation();
|
|
418
|
-
} catch (error) {
|
|
419
|
-
// ALTERNATIVE: Manually bind 'this'
|
|
420
|
-
function handleError(this: MyClass) {
|
|
421
|
-
console.log(this.value); // 42 - explicit binding
|
|
422
|
-
}
|
|
423
|
-
handleError.call(this);
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
```
|
|
428
|
-
|
|
429
|
-
#### 4.5 Async Method Context Preservation
|
|
430
|
-
|
|
431
|
-
```typescript
|
|
432
|
-
class Service {
|
|
433
|
-
private serviceName: string = "MyService";
|
|
434
|
-
|
|
435
|
-
async execute() {
|
|
436
|
-
try {
|
|
437
|
-
await this riskyOperation();
|
|
438
|
-
} catch (error) {
|
|
439
|
-
// 'this' is preserved in async method catch blocks
|
|
440
|
-
console.error(`Error in ${this.serviceName}:`, error);
|
|
441
|
-
this.logError(error); // 'this' works correctly
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
private async riskyOperation() {
|
|
446
|
-
// ...
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
private logError(error: any) {
|
|
450
|
-
// ...
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
### Key Takeaways for 'this' in Error Handlers
|
|
456
|
-
|
|
457
|
-
1. **Arrow functions preserve lexical `this`** - They inherit `this` from their surrounding scope
|
|
458
|
-
2. **Traditional functions create new `this` context** - They have their own dynamic `this` binding
|
|
459
|
-
3. **Async methods preserve `this`** - The async/await pattern maintains class instance context
|
|
460
|
-
4. **Arrow functions cannot be rebound** - Using `.bind()`, `.call()`, or `.apply()` has no effect
|
|
461
|
-
5. **Prefer arrow functions in catch blocks** - When you need access to class instance state
|
|
462
|
-
|
|
463
|
-
---
|
|
464
|
-
|
|
465
|
-
## 5. WeakMap-Based State Capture Considerations
|
|
466
|
-
|
|
467
|
-
### Key Resources
|
|
468
|
-
|
|
469
|
-
1. **[WeakMap - JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap)** - MDN Web Docs
|
|
470
|
-
- **Section: Description**
|
|
471
|
-
- Keys must be objects (not primitives)
|
|
472
|
-
- Holds weak references to keys
|
|
473
|
-
- Allows garbage collection when keys are no longer referenced
|
|
474
|
-
|
|
475
|
-
2. **Gradual typing research papers** - WeakMap mentioned as primitive for ES6
|
|
476
|
-
- Helps "sidestep problems" in gradual typing scenarios
|
|
477
|
-
- Useful for handling type system limitations
|
|
478
|
-
|
|
479
|
-
### WeakMap Characteristics for State Capture
|
|
480
|
-
|
|
481
|
-
```typescript
|
|
482
|
-
// WeakMap for state capture
|
|
483
|
-
const observedState = new WeakMap<object, any>();
|
|
484
|
-
|
|
485
|
-
function captureState(obj: object, state: any) {
|
|
486
|
-
observedState.set(obj, state);
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
function getObservedState(obj: object): any | undefined {
|
|
490
|
-
return observedState.get(obj);
|
|
491
|
-
}
|
|
492
|
-
```
|
|
493
|
-
|
|
494
|
-
### Benefits of WeakMap for Error State Capture
|
|
495
|
-
|
|
496
|
-
1. **Automatic Memory Management**
|
|
497
|
-
- Objects can be garbage collected when no longer referenced
|
|
498
|
-
- Prevents memory leaks in long-running applications
|
|
499
|
-
- Ideal for temporary error state associations
|
|
500
|
-
|
|
501
|
-
2. **Privacy**
|
|
502
|
-
- WeakMap entries are not enumerable
|
|
503
|
-
- Provides true private data storage
|
|
504
|
-
- Cannot be accessed through reflection
|
|
505
|
-
|
|
506
|
-
3. **No Memory Leak Risk**
|
|
507
|
-
- Unlike regular Map, WeakMap doesn't prevent garbage collection
|
|
508
|
-
- Safe to use for associating error metadata with objects
|
|
509
|
-
|
|
510
|
-
### Common Use Cases
|
|
511
|
-
|
|
512
|
-
```typescript
|
|
513
|
-
// 1. Caching computed error state
|
|
514
|
-
const errorCache = new WeakMap<object, ErrorState>();
|
|
515
|
-
|
|
516
|
-
function getErrorState(obj: object): ErrorState {
|
|
517
|
-
let state = errorCache.get(obj);
|
|
518
|
-
if (!state) {
|
|
519
|
-
state = computeErrorState(obj);
|
|
520
|
-
errorCache.set(obj, state);
|
|
521
|
-
}
|
|
522
|
-
return state;
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
// 2. DOM node metadata storage
|
|
526
|
-
const nodeErrors = new WeakMap<Element, ErrorInfo>();
|
|
527
|
-
|
|
528
|
-
function trackNodeError(element: Element, error: Error) {
|
|
529
|
-
nodeErrors.set(element, {
|
|
530
|
-
message: error.message,
|
|
531
|
-
timestamp: Date.now(),
|
|
532
|
-
stack: error.stack
|
|
533
|
-
});
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
// 3. Instance-private error data
|
|
537
|
-
class MyClass {
|
|
538
|
-
private errors = new WeakMap<object, ErrorDetails>();
|
|
539
|
-
|
|
540
|
-
addError(target: object, details: ErrorDetails) {
|
|
541
|
-
this.errors.set(target, details);
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
```
|
|
545
|
-
|
|
546
|
-
### Potential Gotchas
|
|
547
|
-
|
|
548
|
-
1. **Keys must be objects** - Primitives cannot be used as WeakMap keys
|
|
549
|
-
2. **No size property** - Cannot determine how many entries exist
|
|
550
|
-
3. **Not iterable** - Cannot use for...of or spread operator
|
|
551
|
-
4. **No clear() method** - Must manually remove entries
|
|
552
|
-
5. **Weak references** - Entries can disappear unexpectedly during garbage collection
|
|
553
|
-
|
|
554
|
-
### Best Practices for WeakMap in Error Handling
|
|
555
|
-
|
|
556
|
-
```typescript
|
|
557
|
-
// GOOD: WeakMap for temporary error state
|
|
558
|
-
class ErrorTracker {
|
|
559
|
-
private state = new WeakMap<object, ErrorContext>();
|
|
560
|
-
|
|
561
|
-
capture(obj: object, context: ErrorContext) {
|
|
562
|
-
this.state.set(obj, context);
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
getError(obj: object): ErrorContext | undefined {
|
|
566
|
-
return this.state.get(obj);
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
// GOOD: Automatic cleanup when objects are garbage collected
|
|
571
|
-
const errorMetadata = new WeakMap<object, ErrorMetadata>();
|
|
572
|
-
|
|
573
|
-
function attachErrorMetadata(obj: object, metadata: ErrorMetadata) {
|
|
574
|
-
// Metadata automatically cleaned up when obj is garbage collected
|
|
575
|
-
errorMetadata.set(obj, metadata);
|
|
576
|
-
}
|
|
577
|
-
|
|
578
|
-
// AVOID: Using WeakMap when you need persistent state
|
|
579
|
-
// Use regular Map instead if state must persist
|
|
580
|
-
```
|
|
581
|
-
|
|
582
|
-
---
|
|
583
|
-
|
|
584
|
-
## 6. Production-Ready Error Handling Patterns
|
|
585
|
-
|
|
586
|
-
### Key Resources
|
|
587
|
-
|
|
588
|
-
1. **[TypeScript Error Handling: Tips and Best Practices](https://hupp.tech/blog/typescript/typescript-error-handling-tips-and-best-practices/)** - Hupp Technologies
|
|
589
|
-
- **Section: Implement Centralized Error Handling**
|
|
590
|
-
- **Section: Integrate Error Monitoring Tools**
|
|
591
|
-
|
|
592
|
-
### Centralized Error Handling
|
|
593
|
-
|
|
594
|
-
```typescript
|
|
595
|
-
// Express middleware example
|
|
596
|
-
import express, { Request, Response, NextFunction } from 'express';
|
|
597
|
-
|
|
598
|
-
const app = express();
|
|
599
|
-
|
|
600
|
-
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
|
|
601
|
-
console.error('Error:', err.message);
|
|
602
|
-
res.status(500).json({ error: err.message });
|
|
603
|
-
});
|
|
604
|
-
```
|
|
605
|
-
|
|
606
|
-
### Error Monitoring Integration
|
|
607
|
-
|
|
608
|
-
```typescript
|
|
609
|
-
import * as Sentry from '@sentry/node';
|
|
610
|
-
|
|
611
|
-
Sentry.init({ dsn: 'your-dsn' });
|
|
612
|
-
|
|
613
|
-
try {
|
|
614
|
-
// Risky operation
|
|
615
|
-
} catch (error) {
|
|
616
|
-
Sentry.captureException(error);
|
|
617
|
-
console.error('Error captured:', error);
|
|
618
|
-
}
|
|
619
|
-
```
|
|
620
|
-
|
|
621
|
-
### Exhaustive Error Handling with 'never'
|
|
622
|
-
|
|
623
|
-
```typescript
|
|
624
|
-
type AppError = ValidationError | SyntaxError;
|
|
625
|
-
|
|
626
|
-
function handleAppError(error: AppError): void {
|
|
627
|
-
switch (error.name) {
|
|
628
|
-
case 'ValidationError':
|
|
629
|
-
console.error('Validation error:', error.message);
|
|
630
|
-
break;
|
|
631
|
-
case 'SyntaxError':
|
|
632
|
-
console.error('Syntax error:', error.message);
|
|
633
|
-
break;
|
|
634
|
-
default:
|
|
635
|
-
const exhaustiveCheck: never = error;
|
|
636
|
-
throw new Error(`Unhandled error: ${exhaustiveCheck}`);
|
|
637
|
-
}
|
|
638
|
-
}
|
|
639
|
-
```
|
|
640
|
-
|
|
641
|
-
---
|
|
642
|
-
|
|
643
|
-
## 7. Summary of Key Findings
|
|
644
|
-
|
|
645
|
-
### Error State Capture Patterns
|
|
646
|
-
- **Local error handling** in async functions preserves state context
|
|
647
|
-
- **Higher-order functions** provide centralized state preservation
|
|
648
|
-
- **Sequential operations** maintain state through try-catch scope
|
|
649
|
-
- **WeakMap** offers automatic cleanup for temporary error state
|
|
650
|
-
|
|
651
|
-
### Object State Capture Best Practices
|
|
652
|
-
- **Custom error classes** capture state at throw site
|
|
653
|
-
- **Error enrichment** via context properties and cause chains
|
|
654
|
-
- **Wrapper exceptions** transform low-level errors into high-level ones
|
|
655
|
-
- **Result types** provide functional alternative to exceptions
|
|
656
|
-
|
|
657
|
-
### 'this' Context in Catch Blocks
|
|
658
|
-
- **Arrow functions** preserve lexical `this` binding
|
|
659
|
-
- **Traditional functions** create new `this` context (gotcha!)
|
|
660
|
-
- **Async methods** maintain class instance context
|
|
661
|
-
- **Manual binding** available via `.call()` or `.apply()`
|
|
662
|
-
|
|
663
|
-
### WeakMap Considerations
|
|
664
|
-
- **Automatic garbage collection** prevents memory leaks
|
|
665
|
-
- **Object-only keys** restrict usage patterns
|
|
666
|
-
- **Non-enumerable** entries provide privacy
|
|
667
|
-
- **No iteration methods** limit debugging capabilities
|
|
668
|
-
- **Ideal for temporary error metadata** associations
|
|
669
|
-
|
|
670
|
-
### Modern TypeScript Patterns (2025)
|
|
671
|
-
- **Result/Either pattern** gaining popularity as alternative to try-catch
|
|
672
|
-
- **Union types** for explicit error handling
|
|
673
|
-
- **never type** for exhaustive error checking
|
|
674
|
-
- **Error cause property** for error chaining
|
|
675
|
-
- **Functional error handling** complementing traditional exceptions
|
|
676
|
-
|
|
677
|
-
---
|
|
678
|
-
|
|
679
|
-
## 8. Actionable Recommendations
|
|
680
|
-
|
|
681
|
-
1. **Use arrow functions in catch blocks** when you need access to class instance state
|
|
682
|
-
2. **Implement custom error classes** to capture context-specific state
|
|
683
|
-
3. **Consider WeakMap** for temporary error state that should be garbage collected
|
|
684
|
-
4. **Use the cause property** for error enrichment and chaining
|
|
685
|
-
5. **Implement centralized error handling** to reduce code duplication
|
|
686
|
-
6. **Integrate error monitoring** tools for production debugging
|
|
687
|
-
7. **Consider Result types** for functional error handling patterns
|
|
688
|
-
8. **Use never type** to ensure exhaustive error handling
|
|
689
|
-
|
|
690
|
-
---
|
|
691
|
-
|
|
692
|
-
## Sources
|
|
693
|
-
|
|
694
|
-
### Primary Documentation
|
|
695
|
-
- [Error - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)
|
|
696
|
-
- [Control flow and error handling - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling)
|
|
697
|
-
- [Custom errors, extending Error - JavaScript.info](https://javascript.info/custom-errors)
|
|
698
|
-
- [Arrow function expressions - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)
|
|
699
|
-
|
|
700
|
-
### TypeScript-Specific Resources
|
|
701
|
-
- [TypeScript Error Handling: Tips and Best Practices - Hupp Technologies](https://hupp.tech/blog/typescript/typescript-error-handling-tips-and-best-practices/)
|
|
702
|
-
- [A guide to async/await in TypeScript - LogRocket Blog](https://blog.logrocket.com/async-await-typescript/)
|
|
703
|
-
- [How to use a try-catch block in TypeScript - Convex](https://www.convex.dev/typescript/best-practices/error-handling-debugging/typescript-try-catch)
|
|
704
|
-
|
|
705
|
-
### Error Enrichment Patterns
|
|
706
|
-
- [Handling errors like a pro in TypeScript - Udacity Engineering](https://engineering.udacity.com/handling-errors-like-a-pro-in-typescript-d7a314ad4991)
|
|
707
|
-
- [Error Handling in TypeScript: Best Practices - Medium](https://medium.com/@arreyetta/error-handling-in-typescript-best-practices-80cdfe6d06db)
|
|
708
|
-
- [The 5 Commandments of Clean Error Handling in TypeScript](https://backstage.orus.eu/the-5-commandments-of-clean-error-handling-in-typescript/)
|
|
709
|
-
|
|
710
|
-
### 'this' Context Resources
|
|
711
|
-
- [Can you bind 'this' in an arrow function? - Stack Overflow](https://stackoverflow.com/questions/33308121/can-you-bind-this-in-an-arrow-function)
|
|
712
|
-
- [Access "this" in a Promise's Catch Block - Pluralsight](https://www.pluralsight.com/resources/blog/guides/access-this-in-a-promises-catch-block)
|
|
713
|
-
- [this - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this)
|
|
714
|
-
|
|
715
|
-
### Modern Patterns (2024-2025)
|
|
716
|
-
- [I Stopped Using Try-Catch in TypeScript and You Should Too - UserJot](https://userjot.com/blog/typescript-error-handling-return-vs-throw)
|
|
717
|
-
- [No more Try/Catch: a better way to handle errors in TypeScript - Dev.to](https://dev.to/noah-00/no-more-trycatch-a-better-way-to-handle-errors-in-typescript-5hbd)
|
|
718
|
-
- [Async/Await and Error Handling - JavaScript Plain English](https://javascript.plainenglish.io/should-you-use-try-catch-with-async-await-let-me-clear-this-up-78a13aa10568)
|
|
719
|
-
|
|
720
|
-
---
|
|
721
|
-
|
|
722
|
-
*Research compiled on January 10, 2026*
|
|
723
|
-
*Focus: TypeScript error handling best practices for async contexts, state capture, and WeakMap usage*
|