groundswell 0.0.2 → 1.0.0
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/LICENSE +21 -0
- package/README.md +26 -9
- package/dist/cache/cache-key.d.ts +86 -0
- package/dist/cache/cache-key.d.ts.map +1 -0
- package/dist/cache/cache-key.js +204 -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 +203 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +833 -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 +127 -0
- package/dist/core/mcp-handler.d.ts.map +1 -0
- package/dist/core/mcp-handler.js +323 -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 +61 -0
- package/dist/core/workflow-context.d.ts.map +1 -0
- package/dist/core/workflow-context.js +358 -0
- package/dist/core/workflow-context.js.map +1 -0
- package/dist/core/workflow.d.ts +543 -0
- package/dist/core/workflow.d.ts.map +1 -0
- package/dist/core/workflow.js +986 -0
- package/dist/core/workflow.js.map +1 -0
- package/dist/debugger/event-replayer.d.ts +422 -0
- package/dist/debugger/event-replayer.d.ts.map +1 -0
- package/dist/debugger/event-replayer.js +639 -0
- package/dist/debugger/event-replayer.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 +240 -0
- package/dist/debugger/tree-debugger.d.ts.map +1 -0
- package/dist/debugger/tree-debugger.js +620 -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 +192 -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/harnesses/claude-code-harness.d.ts +391 -0
- package/dist/harnesses/claude-code-harness.d.ts.map +1 -0
- package/dist/harnesses/claude-code-harness.js +1076 -0
- package/dist/harnesses/claude-code-harness.js.map +1 -0
- package/dist/harnesses/harness-registry.d.ts +440 -0
- package/dist/harnesses/harness-registry.d.ts.map +1 -0
- package/dist/harnesses/harness-registry.js +543 -0
- package/dist/harnesses/harness-registry.js.map +1 -0
- package/dist/harnesses/index.d.ts +12 -0
- package/dist/harnesses/index.d.ts.map +1 -0
- package/dist/harnesses/index.js +11 -0
- package/dist/harnesses/index.js.map +1 -0
- package/dist/harnesses/pi-harness.d.ts +219 -0
- package/dist/harnesses/pi-harness.d.ts.map +1 -0
- package/dist/harnesses/pi-harness.js +676 -0
- package/dist/harnesses/pi-harness.js.map +1 -0
- package/dist/harnesses/pi-schema-converter.d.ts +24 -0
- package/dist/harnesses/pi-schema-converter.d.ts.map +1 -0
- package/dist/harnesses/pi-schema-converter.js +81 -0
- package/dist/harnesses/pi-schema-converter.js.map +1 -0
- package/dist/harnesses/register-defaults.d.ts +24 -0
- package/dist/harnesses/register-defaults.d.ts.map +1 -0
- package/dist/harnesses/register-defaults.js +40 -0
- package/dist/harnesses/register-defaults.js.map +1 -0
- package/dist/harnesses/session-store.d.ts +201 -0
- package/dist/harnesses/session-store.d.ts.map +1 -0
- package/dist/harnesses/session-store.js +254 -0
- package/dist/harnesses/session-store.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -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 +344 -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 +1317 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +423 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/decorators.d.ts +40 -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 +113 -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/harnesses.d.ts +474 -0
- package/dist/types/harnesses.d.ts.map +1 -0
- package/dist/types/harnesses.js +2 -0
- package/dist/types/harnesses.js.map +1 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -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/providers.d.ts +691 -0
- package/dist/types/providers.d.ts.map +1 -0
- package/dist/types/providers.js +14 -0
- package/dist/types/providers.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/restart.d.ts +132 -0
- package/dist/types/restart.d.ts.map +1 -0
- package/dist/types/restart.js +2 -0
- package/dist/types/restart.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/streaming.d.ts +194 -0
- package/dist/types/streaming.d.ts.map +1 -0
- package/dist/types/streaming.js +67 -0
- package/dist/types/streaming.js.map +1 -0
- package/dist/types/workflow-context.d.ts +275 -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/agent-validation.d.ts +88 -0
- package/dist/utils/agent-validation.d.ts.map +1 -0
- package/dist/utils/agent-validation.js +87 -0
- package/dist/utils/agent-validation.js.map +1 -0
- package/dist/utils/delay.d.ts +7 -0
- package/dist/utils/delay.d.ts.map +1 -0
- package/dist/utils/delay.js +9 -0
- package/dist/utils/delay.js.map +1 -0
- package/dist/utils/harness-config.d.ts +180 -0
- package/dist/utils/harness-config.d.ts.map +1 -0
- package/dist/utils/harness-config.js +311 -0
- package/dist/utils/harness-config.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/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +11 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/model-spec.d.ts +110 -0
- package/dist/utils/model-spec.d.ts.map +1 -0
- package/dist/utils/model-spec.js +149 -0
- package/dist/utils/model-spec.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/provider-config.d.ts +10 -0
- package/dist/utils/provider-config.d.ts.map +1 -0
- package/dist/utils/provider-config.js +10 -0
- package/dist/utils/provider-config.js.map +1 -0
- package/dist/utils/restart-analysis.d.ts +202 -0
- package/dist/utils/restart-analysis.d.ts.map +1 -0
- package/dist/utils/restart-analysis.js +426 -0
- package/dist/utils/restart-analysis.js.map +1 -0
- package/dist/utils/session-serialization.d.ts +118 -0
- package/dist/utils/session-serialization.d.ts.map +1 -0
- package/dist/utils/session-serialization.js +217 -0
- package/dist/utils/session-serialization.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 +34 -5
- 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/CHANGELOG.md +0 -188
- 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/index.ts +0 -18
- 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/index.ts +0 -4
- package/src/utils/observable.ts +0 -106
- package/src/utils/workflow-error-utils.ts +0 -56
- package/tsconfig.json +0 -22
- package/vitest.config.ts +0 -16
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { StateFieldMetadata, SerializedWorkflowState } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* @ObservedState decorator
|
|
4
|
+
* Marks a class field for inclusion in state snapshots
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* class MyWorkflow extends Workflow {
|
|
8
|
+
* @ObservedState()
|
|
9
|
+
* currentStep!: string;
|
|
10
|
+
*
|
|
11
|
+
* @ObservedState({ redact: true })
|
|
12
|
+
* sensitiveData!: string;
|
|
13
|
+
*
|
|
14
|
+
* @ObservedState({ hidden: true })
|
|
15
|
+
* internalState!: object;
|
|
16
|
+
* }
|
|
17
|
+
*/
|
|
18
|
+
export declare function ObservedState(meta?: StateFieldMetadata): (_value: undefined, context: ClassFieldDecoratorContext) => void;
|
|
19
|
+
/**
|
|
20
|
+
* Get all observed state from an object instance
|
|
21
|
+
* Applies hidden and redact transformations
|
|
22
|
+
*/
|
|
23
|
+
export declare function getObservedState(obj: object): SerializedWorkflowState;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a field is observed on an object
|
|
26
|
+
*/
|
|
27
|
+
export declare function isFieldObserved(obj: object, fieldName: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Get metadata for a specific field
|
|
30
|
+
*/
|
|
31
|
+
export declare function getFieldMetadata(obj: object, fieldName: string): StateFieldMetadata | undefined;
|
|
32
|
+
//# sourceMappingURL=observed-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observed-state.d.ts","sourceRoot":"","sources":["../../src/decorators/observed-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAQrF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE,kBAAuB,IAEvD,QAAQ,SAAS,EACjB,SAAS,0BAA0B,KAClC,IAAI,CAeR;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CA2BrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAIvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAI/F"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WeakMap storing field metadata keyed by class prototype
|
|
3
|
+
* Structure: Map<propertyKey, StateFieldMetadata>
|
|
4
|
+
*/
|
|
5
|
+
const OBSERVED_STATE_FIELDS = new WeakMap();
|
|
6
|
+
/**
|
|
7
|
+
* @ObservedState decorator
|
|
8
|
+
* Marks a class field for inclusion in state snapshots
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* class MyWorkflow extends Workflow {
|
|
12
|
+
* @ObservedState()
|
|
13
|
+
* currentStep!: string;
|
|
14
|
+
*
|
|
15
|
+
* @ObservedState({ redact: true })
|
|
16
|
+
* sensitiveData!: string;
|
|
17
|
+
*
|
|
18
|
+
* @ObservedState({ hidden: true })
|
|
19
|
+
* internalState!: object;
|
|
20
|
+
* }
|
|
21
|
+
*/
|
|
22
|
+
export function ObservedState(meta = {}) {
|
|
23
|
+
return function (_value, context) {
|
|
24
|
+
const propertyKey = String(context.name);
|
|
25
|
+
// Use addInitializer to register field when class is instantiated
|
|
26
|
+
context.addInitializer(function () {
|
|
27
|
+
const instance = this;
|
|
28
|
+
const proto = Object.getPrototypeOf(instance);
|
|
29
|
+
let map = OBSERVED_STATE_FIELDS.get(proto);
|
|
30
|
+
if (!map) {
|
|
31
|
+
map = new Map();
|
|
32
|
+
OBSERVED_STATE_FIELDS.set(proto, map);
|
|
33
|
+
}
|
|
34
|
+
map.set(propertyKey, meta);
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get all observed state from an object instance
|
|
40
|
+
* Applies hidden and redact transformations
|
|
41
|
+
*/
|
|
42
|
+
export function getObservedState(obj) {
|
|
43
|
+
const proto = Object.getPrototypeOf(obj);
|
|
44
|
+
const map = OBSERVED_STATE_FIELDS.get(proto);
|
|
45
|
+
if (!map) {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
const result = {};
|
|
49
|
+
for (const [key, meta] of map) {
|
|
50
|
+
// Skip hidden fields
|
|
51
|
+
if (meta.hidden) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
let value = obj[key];
|
|
55
|
+
// Redact sensitive fields
|
|
56
|
+
if (meta.redact) {
|
|
57
|
+
value = '***';
|
|
58
|
+
}
|
|
59
|
+
result[key] = value;
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Check if a field is observed on an object
|
|
65
|
+
*/
|
|
66
|
+
export function isFieldObserved(obj, fieldName) {
|
|
67
|
+
const proto = Object.getPrototypeOf(obj);
|
|
68
|
+
const map = OBSERVED_STATE_FIELDS.get(proto);
|
|
69
|
+
return map?.has(fieldName) ?? false;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get metadata for a specific field
|
|
73
|
+
*/
|
|
74
|
+
export function getFieldMetadata(obj, fieldName) {
|
|
75
|
+
const proto = Object.getPrototypeOf(obj);
|
|
76
|
+
const map = OBSERVED_STATE_FIELDS.get(proto);
|
|
77
|
+
return map?.get(fieldName);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=observed-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observed-state.js","sourceRoot":"","sources":["../../src/decorators/observed-state.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,qBAAqB,GAAG,IAAI,OAAO,EAA2C,CAAC;AAErF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAAC,OAA2B,EAAE;IACzD,OAAO,UACL,MAAiB,EACjB,OAAmC;QAEnC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEzC,kEAAkE;QAClE,OAAO,CAAC,cAAc,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAc,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;gBAChB,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAE7C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QAC9B,qBAAqB;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,KAAK,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;QAElD,0BAA0B;QAC1B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,SAAiB;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,SAAiB;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { StepOptions } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* @Step decorator
|
|
4
|
+
* Wraps a method to emit step events, handle errors, and optionally snapshot state
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* class MyWorkflow extends Workflow {
|
|
8
|
+
* @Step({ snapshotState: true, trackTiming: true })
|
|
9
|
+
* async processData() {
|
|
10
|
+
* // ... step logic
|
|
11
|
+
* }
|
|
12
|
+
* }
|
|
13
|
+
*/
|
|
14
|
+
export declare function Step(opts?: StepOptions): <This, Args extends unknown[], Return>(originalMethod: (this: This, ...args: Args) => Promise<Return>, context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Promise<Return>>) => (this: This, ...args: Args) => Promise<Return>;
|
|
15
|
+
//# sourceMappingURL=step.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../../src/decorators/step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAyF,MAAM,mBAAmB,CAAC;AAgB5I;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,CAAC,IAAI,GAAE,WAAgB,IACxB,IAAI,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,EACnD,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,EAC9D,SAAS,2BAA2B,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,YAoCzD,IAAI,WAAW,IAAI,KAAG,OAAO,CAAC,MAAM,CAAC,CA0KzE"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { getObservedState } from './observed-state.js';
|
|
2
|
+
import { runInContext } from '../core/context.js';
|
|
3
|
+
import { generateId, delay } from '../utils/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* @Step decorator
|
|
6
|
+
* Wraps a method to emit step events, handle errors, and optionally snapshot state
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* class MyWorkflow extends Workflow {
|
|
10
|
+
* @Step({ snapshotState: true, trackTiming: true })
|
|
11
|
+
* async processData() {
|
|
12
|
+
* // ... step logic
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
*/
|
|
16
|
+
export function Step(opts = {}) {
|
|
17
|
+
return function (originalMethod, context) {
|
|
18
|
+
const methodName = String(context.name);
|
|
19
|
+
/**
|
|
20
|
+
* Check if an error matches a retry criterion
|
|
21
|
+
* Handles all three ErrorCriterion variants: code, recoverable, and function
|
|
22
|
+
*/
|
|
23
|
+
function matchesCriterion(error, criterion) {
|
|
24
|
+
// CRITICAL: Check typeof first for function type narrowing
|
|
25
|
+
if (typeof criterion === 'function') {
|
|
26
|
+
return criterion(error);
|
|
27
|
+
}
|
|
28
|
+
// Object type checks (type narrowing works after typeof check)
|
|
29
|
+
if ('code' in criterion) {
|
|
30
|
+
const errorCode = error.message;
|
|
31
|
+
return typeof criterion.code === 'string'
|
|
32
|
+
? errorCode === criterion.code
|
|
33
|
+
: criterion.code.test(errorCode);
|
|
34
|
+
}
|
|
35
|
+
if ('recoverable' in criterion) {
|
|
36
|
+
// For recoverable criterion, we check the original error if available
|
|
37
|
+
const original = error.original;
|
|
38
|
+
if (original && 'recoverable' in original) {
|
|
39
|
+
return original.recoverable === criterion.recoverable;
|
|
40
|
+
}
|
|
41
|
+
// If no recoverable field on original error, assume true to allow retry
|
|
42
|
+
return criterion.recoverable;
|
|
43
|
+
}
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
// CRITICAL: Use regular function, not arrow function, to preserve 'this'
|
|
47
|
+
async function stepWrapper(...args) {
|
|
48
|
+
// Cast to WorkflowLike for type safety when accessing workflow properties
|
|
49
|
+
const wf = this;
|
|
50
|
+
const stepName = opts.name ?? methodName;
|
|
51
|
+
const startTime = Date.now();
|
|
52
|
+
// NEW: Initialize retry state
|
|
53
|
+
let retryCount = 0;
|
|
54
|
+
const maxRetries = opts.maxRetries ?? 3;
|
|
55
|
+
// Log start if requested
|
|
56
|
+
if (opts.logStart) {
|
|
57
|
+
wf.logger.info(`STEP START: ${stepName}`);
|
|
58
|
+
}
|
|
59
|
+
// Emit step start event (only once, not on retry)
|
|
60
|
+
wf.emitEvent({
|
|
61
|
+
type: 'stepStart',
|
|
62
|
+
node: wf.node,
|
|
63
|
+
step: stepName,
|
|
64
|
+
});
|
|
65
|
+
// Create step node for hierarchy tracking
|
|
66
|
+
const stepNode = {
|
|
67
|
+
id: generateId(),
|
|
68
|
+
name: stepName,
|
|
69
|
+
parent: wf.node,
|
|
70
|
+
children: [],
|
|
71
|
+
status: 'running',
|
|
72
|
+
logs: [],
|
|
73
|
+
events: [],
|
|
74
|
+
stateSnapshot: null,
|
|
75
|
+
};
|
|
76
|
+
// Create execution context for agent/prompt operations within this step
|
|
77
|
+
const executionContext = {
|
|
78
|
+
workflowNode: stepNode,
|
|
79
|
+
emitEvent: (event) => {
|
|
80
|
+
stepNode.events.push(event);
|
|
81
|
+
wf.emitEvent(event);
|
|
82
|
+
},
|
|
83
|
+
workflowId: wf.id,
|
|
84
|
+
};
|
|
85
|
+
// ============================================================
|
|
86
|
+
// CRITICAL: Retry loop wraps existing try-catch
|
|
87
|
+
// ============================================================
|
|
88
|
+
while (retryCount <= maxRetries) {
|
|
89
|
+
try {
|
|
90
|
+
// Execute the original method within the execution context
|
|
91
|
+
// This allows Agent.prompt() calls to automatically capture events
|
|
92
|
+
const result = await runInContext(executionContext, async () => {
|
|
93
|
+
return originalMethod.call(this, ...args);
|
|
94
|
+
});
|
|
95
|
+
// Update step node status
|
|
96
|
+
stepNode.status = 'completed';
|
|
97
|
+
// Snapshot state if requested
|
|
98
|
+
if (opts.snapshotState) {
|
|
99
|
+
wf.snapshotState();
|
|
100
|
+
}
|
|
101
|
+
// Calculate duration and emit end event
|
|
102
|
+
const duration = Date.now() - startTime;
|
|
103
|
+
if (opts.trackTiming !== false) {
|
|
104
|
+
wf.emitEvent({
|
|
105
|
+
type: 'stepEnd',
|
|
106
|
+
node: wf.node,
|
|
107
|
+
step: stepName,
|
|
108
|
+
duration,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
// Log finish if requested
|
|
112
|
+
if (opts.logFinish) {
|
|
113
|
+
wf.logger.info(`STEP END: ${stepName} (${duration}ms)`);
|
|
114
|
+
}
|
|
115
|
+
// CRITICAL: Exit loop on success
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
// Update step node status
|
|
120
|
+
stepNode.status = 'failed';
|
|
121
|
+
// Create rich error with context
|
|
122
|
+
const error = err;
|
|
123
|
+
const snap = getObservedState(this);
|
|
124
|
+
const workflowError = {
|
|
125
|
+
message: error?.message ?? 'Unknown error',
|
|
126
|
+
original: err,
|
|
127
|
+
workflowId: wf.id,
|
|
128
|
+
stack: error?.stack,
|
|
129
|
+
state: snap,
|
|
130
|
+
logs: [...wf.node.logs],
|
|
131
|
+
};
|
|
132
|
+
// ============================================================
|
|
133
|
+
// CRITICAL: Check if should retry or throw immediately
|
|
134
|
+
// ============================================================
|
|
135
|
+
const shouldAttemptRetry = opts.restartable && retryCount < maxRetries;
|
|
136
|
+
// Check retry criteria if specified
|
|
137
|
+
const matchesRetryCriteria = opts.retryOn
|
|
138
|
+
? opts.retryOn.some(criterion => matchesCriterion(workflowError, criterion))
|
|
139
|
+
: true; // If no criteria specified, retry all errors when restartable
|
|
140
|
+
if (!shouldAttemptRetry || !matchesRetryCriteria) {
|
|
141
|
+
// Emit error event and throw
|
|
142
|
+
wf.emitEvent({
|
|
143
|
+
type: 'error',
|
|
144
|
+
node: wf.node,
|
|
145
|
+
error: workflowError,
|
|
146
|
+
});
|
|
147
|
+
// Re-throw the enriched error
|
|
148
|
+
throw workflowError;
|
|
149
|
+
}
|
|
150
|
+
// ============================================================
|
|
151
|
+
// CRITICAL: Emit retry event and delay before retry
|
|
152
|
+
// ============================================================
|
|
153
|
+
const nextRetryCount = retryCount + 1;
|
|
154
|
+
// Create restart analysis for the retry event
|
|
155
|
+
const analysis = {
|
|
156
|
+
shouldRestart: true,
|
|
157
|
+
reason: `Error matches retry criteria (attempt ${nextRetryCount}/${maxRetries})`,
|
|
158
|
+
suggestedAction: 'retry',
|
|
159
|
+
estimatedSuccessProbability: 0.7,
|
|
160
|
+
};
|
|
161
|
+
// Emit step retry event
|
|
162
|
+
wf.emitEvent({
|
|
163
|
+
type: 'stepRetry',
|
|
164
|
+
node: wf.node,
|
|
165
|
+
stepName: stepName,
|
|
166
|
+
retryCount: nextRetryCount,
|
|
167
|
+
analysis,
|
|
168
|
+
error: workflowError,
|
|
169
|
+
timestamp: Date.now(),
|
|
170
|
+
});
|
|
171
|
+
// Log retry if logging enabled
|
|
172
|
+
if (opts.logStart || opts.logFinish) {
|
|
173
|
+
wf.logger.info(`STEP RETRY: ${stepName} (attempt ${nextRetryCount}/${maxRetries})`);
|
|
174
|
+
}
|
|
175
|
+
// Wait before retry
|
|
176
|
+
const delayMs = opts.retryDelayMs ?? 1000;
|
|
177
|
+
await delay(delayMs);
|
|
178
|
+
// Increment retry count and continue loop
|
|
179
|
+
retryCount = nextRetryCount;
|
|
180
|
+
// Update step node name for retry
|
|
181
|
+
stepNode.name = `${stepName} (retry ${retryCount})`;
|
|
182
|
+
stepNode.status = 'running';
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Should not reach here, but TypeScript needs it
|
|
186
|
+
// This would only happen if loop exits without return or throw
|
|
187
|
+
throw new Error(`Retry loop exited unexpectedly for step ${stepName}`);
|
|
188
|
+
}
|
|
189
|
+
return stepWrapper;
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=step.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step.js","sourceRoot":"","sources":["../../src/decorators/step.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAA8B,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAatD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,IAAI,CAAC,OAAoB,EAAE;IACzC,OAAO,UACL,cAA8D,EAC9D,OAA0F;QAE1F,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAExC;;;WAGG;QACH,SAAS,gBAAgB,CAAC,KAAoB,EAAE,SAAyB;YACvE,2DAA2D;YAC3D,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;gBACpC,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;YAED,+DAA+D;YAC/D,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;gBACxB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC;gBAChC,OAAO,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;oBACvC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI;oBAC9B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC;YAED,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;gBAC/B,sEAAsE;gBACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAA6B,CAAC;gBACrD,IAAI,QAAQ,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;oBAC1C,OAAQ,QAAqC,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW,CAAC;gBACtF,CAAC;gBACD,wEAAwE;gBACxE,OAAO,SAAS,CAAC,WAAW,CAAC;YAC/B,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yEAAyE;QACzE,KAAK,UAAU,WAAW,CAAa,GAAG,IAAU;YAClD,0EAA0E;YAC1E,MAAM,EAAE,GAAG,IAA+B,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,8BAA8B;YAC9B,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;YAExC,yBAAyB;YACzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;YAC5C,CAAC;YAED,kDAAkD;YAClD,EAAE,CAAC,SAAS,CAAC;gBACX,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YAEH,0CAA0C;YAC1C,MAAM,QAAQ,GAAiB;gBAC7B,EAAE,EAAE,UAAU,EAAE;gBAChB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,EAAE,CAAC,IAAI;gBACf,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,EAAE;gBACV,aAAa,EAAE,IAAI;aACpB,CAAC;YAEF,wEAAwE;YACxE,MAAM,gBAAgB,GAA0B;gBAC9C,YAAY,EAAE,QAAQ;gBACtB,SAAS,EAAE,CAAC,KAAoB,EAAE,EAAE;oBAClC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5B,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;gBACD,UAAU,EAAE,EAAE,CAAC,EAAE;aAClB,CAAC;YAEF,+DAA+D;YAC/D,gDAAgD;YAChD,+DAA+D;YAC/D,OAAO,UAAU,IAAI,UAAU,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,2DAA2D;oBAC3D,mEAAmE;oBACnE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;wBAC7D,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;oBAC5C,CAAC,CAAC,CAAC;oBAEH,0BAA0B;oBAC1B,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC;oBAE9B,8BAA8B;oBAC9B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACvB,EAAE,CAAC,aAAa,EAAE,CAAC;oBACrB,CAAC;oBAED,wCAAwC;oBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;oBACxC,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;wBAC/B,EAAE,CAAC,SAAS,CAAC;4BACX,IAAI,EAAE,SAAS;4BACf,IAAI,EAAE,EAAE,CAAC,IAAI;4BACb,IAAI,EAAE,QAAQ;4BACd,QAAQ;yBACT,CAAC,CAAC;oBACL,CAAC;oBAED,0BAA0B;oBAC1B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACnB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,QAAQ,KAAK,QAAQ,KAAK,CAAC,CAAC;oBAC1D,CAAC;oBAED,iCAAiC;oBACjC,OAAO,MAAM,CAAC;gBAEhB,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACtB,0BAA0B;oBAC1B,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC;oBAE3B,iCAAiC;oBACjC,MAAM,KAAK,GAAG,GAAY,CAAC;oBAC3B,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAc,CAAC,CAAC;oBAE9C,MAAM,aAAa,GAAkB;wBACnC,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,eAAe;wBAC1C,QAAQ,EAAE,GAAG;wBACb,UAAU,EAAE,EAAE,CAAC,EAAE;wBACjB,KAAK,EAAE,KAAK,EAAE,KAAK;wBACnB,KAAK,EAAE,IAAI;wBACX,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAe;qBACtC,CAAC;oBAEF,+DAA+D;oBAC/D,uDAAuD;oBACvD,+DAA+D;oBAC/D,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,IAAI,UAAU,GAAG,UAAU,CAAC;oBAEvE,oCAAoC;oBACpC,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO;wBACvC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;wBAC5E,CAAC,CAAC,IAAI,CAAC,CAAE,8DAA8D;oBAEzE,IAAI,CAAC,kBAAkB,IAAI,CAAC,oBAAoB,EAAE,CAAC;wBACjD,6BAA6B;wBAC7B,EAAE,CAAC,SAAS,CAAC;4BACX,IAAI,EAAE,OAAO;4BACb,IAAI,EAAE,EAAE,CAAC,IAAI;4BACb,KAAK,EAAE,aAAa;yBACrB,CAAC,CAAC;wBAEH,8BAA8B;wBAC9B,MAAM,aAAa,CAAC;oBACtB,CAAC;oBAED,+DAA+D;oBAC/D,oDAAoD;oBACpD,+DAA+D;oBAC/D,MAAM,cAAc,GAAG,UAAU,GAAG,CAAC,CAAC;oBAEtC,8CAA8C;oBAC9C,MAAM,QAAQ,GAAoB;wBAChC,aAAa,EAAE,IAAI;wBACnB,MAAM,EAAE,yCAAyC,cAAc,IAAI,UAAU,GAAG;wBAChF,eAAe,EAAE,OAAO;wBACxB,2BAA2B,EAAE,GAAG;qBACjC,CAAC;oBAEF,wBAAwB;oBACxB,EAAE,CAAC,SAAS,CAAC;wBACX,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,EAAE,CAAC,IAAI;wBACb,QAAQ,EAAE,QAAQ;wBAClB,UAAU,EAAE,cAAc;wBAC1B,QAAQ;wBACR,KAAK,EAAE,aAAa;wBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB,CAAC,CAAC;oBAEH,+BAA+B;oBAC/B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACpC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,QAAQ,aAAa,cAAc,IAAI,UAAU,GAAG,CAAC,CAAC;oBACtF,CAAC;oBAED,oBAAoB;oBACpB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;oBAC1C,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;oBAErB,0CAA0C;oBAC1C,UAAU,GAAG,cAAc,CAAC;oBAE5B,kCAAkC;oBAClC,QAAQ,CAAC,IAAI,GAAG,GAAG,QAAQ,WAAW,UAAU,GAAG,CAAC;oBACpD,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC9B,CAAC;YACH,CAAC;YAED,iDAAiD;YACjD,+DAA+D;YAC/D,MAAM,IAAI,KAAK,CAAC,2CAA2C,QAAQ,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { TaskOptions } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* @Task decorator
|
|
4
|
+
* Wraps a method that returns child workflow(s), automatically attaching them
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* class ParentWorkflow extends Workflow {
|
|
8
|
+
* @Task({ concurrent: true })
|
|
9
|
+
* async createChildren(): Promise<ChildWorkflow[]> {
|
|
10
|
+
* return [
|
|
11
|
+
* new ChildWorkflow('child1', this),
|
|
12
|
+
* new ChildWorkflow('child2', this),
|
|
13
|
+
* ];
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* @example Non-workflow return (silently skipped)
|
|
18
|
+
* class MyWorkflow extends Workflow {
|
|
19
|
+
* @Task()
|
|
20
|
+
* async returnsString(): Promise<string> {
|
|
21
|
+
* return 'not a workflow'; // Returned as-is, not attached
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* @example Mixed return (only workflows attached)
|
|
26
|
+
* class MyWorkflow extends Workflow {
|
|
27
|
+
* @Task()
|
|
28
|
+
* async mixedReturn(): Promise<(Workflow | string)[]> {
|
|
29
|
+
* return [
|
|
30
|
+
* new ChildWorkflow('child1', this), // Attached
|
|
31
|
+
* 'some string', // Skipped
|
|
32
|
+
* new ChildWorkflow('child2', this), // Attached
|
|
33
|
+
* ];
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
*
|
|
37
|
+
* Validation Behavior
|
|
38
|
+
*
|
|
39
|
+
* The decorator uses lenient validation for return values:
|
|
40
|
+
* - Workflow objects (with 'id' property) are automatically attached
|
|
41
|
+
* - Non-workflow objects are silently skipped (not attached)
|
|
42
|
+
* - The original return value is always preserved
|
|
43
|
+
*
|
|
44
|
+
* This lenient approach enables:
|
|
45
|
+
* - Duck-typing: Works with workflow-like objects, not just Workflow instances
|
|
46
|
+
* - Flexible signatures: Methods can return any type without breaking
|
|
47
|
+
* - Graceful handling: Edge cases (null, undefined, primitives) don't throw errors
|
|
48
|
+
*/
|
|
49
|
+
export declare function Task(opts?: TaskOptions): <This, Args extends unknown[], Return>(originalMethod: (this: This, ...args: Args) => Promise<Return>, context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Promise<Return>>) => (this: This, ...args: Args) => Promise<Return>;
|
|
50
|
+
//# sourceMappingURL=task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/decorators/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAuE,MAAM,mBAAmB,CAAC;AAkB1H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,IAAI,CAAC,IAAI,GAAE,WAAgB,IACxB,IAAI,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,EACnD,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,EAC9D,SAAS,2BAA2B,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,YAKzD,IAAI,WAAW,IAAI,KAAG,OAAO,CAAC,MAAM,CAAC,CAqFzE"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { mergeWorkflowErrors } from '../utils/workflow-error-utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* @Task decorator
|
|
4
|
+
* Wraps a method that returns child workflow(s), automatically attaching them
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* class ParentWorkflow extends Workflow {
|
|
8
|
+
* @Task({ concurrent: true })
|
|
9
|
+
* async createChildren(): Promise<ChildWorkflow[]> {
|
|
10
|
+
* return [
|
|
11
|
+
* new ChildWorkflow('child1', this),
|
|
12
|
+
* new ChildWorkflow('child2', this),
|
|
13
|
+
* ];
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* @example Non-workflow return (silently skipped)
|
|
18
|
+
* class MyWorkflow extends Workflow {
|
|
19
|
+
* @Task()
|
|
20
|
+
* async returnsString(): Promise<string> {
|
|
21
|
+
* return 'not a workflow'; // Returned as-is, not attached
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* @example Mixed return (only workflows attached)
|
|
26
|
+
* class MyWorkflow extends Workflow {
|
|
27
|
+
* @Task()
|
|
28
|
+
* async mixedReturn(): Promise<(Workflow | string)[]> {
|
|
29
|
+
* return [
|
|
30
|
+
* new ChildWorkflow('child1', this), // Attached
|
|
31
|
+
* 'some string', // Skipped
|
|
32
|
+
* new ChildWorkflow('child2', this), // Attached
|
|
33
|
+
* ];
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
*
|
|
37
|
+
* Validation Behavior
|
|
38
|
+
*
|
|
39
|
+
* The decorator uses lenient validation for return values:
|
|
40
|
+
* - Workflow objects (with 'id' property) are automatically attached
|
|
41
|
+
* - Non-workflow objects are silently skipped (not attached)
|
|
42
|
+
* - The original return value is always preserved
|
|
43
|
+
*
|
|
44
|
+
* This lenient approach enables:
|
|
45
|
+
* - Duck-typing: Works with workflow-like objects, not just Workflow instances
|
|
46
|
+
* - Flexible signatures: Methods can return any type without breaking
|
|
47
|
+
* - Graceful handling: Edge cases (null, undefined, primitives) don't throw errors
|
|
48
|
+
*/
|
|
49
|
+
export function Task(opts = {}) {
|
|
50
|
+
return function (originalMethod, context) {
|
|
51
|
+
const methodName = String(context.name);
|
|
52
|
+
// CRITICAL: Use regular function, not arrow function
|
|
53
|
+
async function taskWrapper(...args) {
|
|
54
|
+
// Cast to WorkflowLike for type safety when accessing workflow properties
|
|
55
|
+
const wf = this;
|
|
56
|
+
const taskName = opts.name ?? methodName;
|
|
57
|
+
// Emit task start event
|
|
58
|
+
wf.emitEvent({
|
|
59
|
+
type: 'taskStart',
|
|
60
|
+
node: wf.node,
|
|
61
|
+
task: taskName,
|
|
62
|
+
});
|
|
63
|
+
// Execute the original method
|
|
64
|
+
const result = await originalMethod.call(this, ...args);
|
|
65
|
+
// Process returned workflows
|
|
66
|
+
const workflows = Array.isArray(result) ? result : [result];
|
|
67
|
+
for (const workflow of workflows) {
|
|
68
|
+
// Type guard to check if it's a workflow
|
|
69
|
+
if (workflow && typeof workflow === 'object' && 'id' in workflow) {
|
|
70
|
+
const childWf = workflow;
|
|
71
|
+
// Only attach if not already attached (parent not set by constructor)
|
|
72
|
+
if (!childWf.parent) {
|
|
73
|
+
childWf.parent = wf;
|
|
74
|
+
wf.attachChild(childWf);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// If concurrent option is set and we have multiple workflows, run them in parallel
|
|
79
|
+
if (opts.concurrent && Array.isArray(result)) {
|
|
80
|
+
const runnable = workflows.filter((w) => w && typeof w === 'object' && 'run' in w && typeof w.run === 'function');
|
|
81
|
+
if (runnable.length > 0) {
|
|
82
|
+
const results = await Promise.allSettled(runnable.map((w) => w.run()));
|
|
83
|
+
const rejected = results.filter((r) => r.status === 'rejected');
|
|
84
|
+
if (rejected.length > 0) {
|
|
85
|
+
// Check if error merge strategy is enabled
|
|
86
|
+
if (opts.errorMergeStrategy?.enabled) {
|
|
87
|
+
// Extract WorkflowError objects from rejected promises
|
|
88
|
+
const errors = rejected.map((r) => r.reason);
|
|
89
|
+
// Merge errors using custom combine() or default merger
|
|
90
|
+
const mergedError = opts.errorMergeStrategy?.combine
|
|
91
|
+
? opts.errorMergeStrategy.combine(errors)
|
|
92
|
+
: mergeWorkflowErrors(errors, taskName, wf.id, runnable.length);
|
|
93
|
+
// Emit error event with merged error
|
|
94
|
+
wf.emitEvent({
|
|
95
|
+
type: 'error',
|
|
96
|
+
node: wf.node,
|
|
97
|
+
error: mergedError,
|
|
98
|
+
});
|
|
99
|
+
// Throw merged error
|
|
100
|
+
throw mergedError;
|
|
101
|
+
}
|
|
102
|
+
// Backward compatibility: throw first error
|
|
103
|
+
throw rejected[0].reason;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Emit task end event
|
|
108
|
+
wf.emitEvent({
|
|
109
|
+
type: 'taskEnd',
|
|
110
|
+
node: wf.node,
|
|
111
|
+
task: taskName,
|
|
112
|
+
});
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
return taskWrapper;
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/decorators/task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/examples/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/examples/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Workflow } from '../core/workflow.js';
|
|
2
|
+
import { TestCycleWorkflow } from './test-cycle-workflow.js';
|
|
3
|
+
/**
|
|
4
|
+
* Example parent workflow demonstrating TDD orchestration
|
|
5
|
+
*/
|
|
6
|
+
export declare class TDDOrchestrator extends Workflow {
|
|
7
|
+
cycleCount: number;
|
|
8
|
+
maxCycles: number;
|
|
9
|
+
apiKey: string;
|
|
10
|
+
setupEnvironment(): Promise<void>;
|
|
11
|
+
runCycle(): Promise<TestCycleWorkflow>;
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
private delay;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=tdd-orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tdd-orchestrator.d.ts","sourceRoot":"","sources":["../../src/examples/tdd-orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAI/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAE3C,UAAU,EAAE,MAAM,CAAK;IAGvB,SAAS,EAAE,MAAM,CAAK;IAGtB,MAAM,EAAE,MAAM,CAAgB;IAGxB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAMtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B1B,OAAO,CAAC,KAAK;CAGd"}
|