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
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
# Bug Fix Research Summary - Hierarchical Workflow Engine
|
|
2
|
-
|
|
3
|
-
**Date:** 2025-01-12
|
|
4
|
-
**Project:** Hierarchical Workflow Engine Bug Fixes
|
|
5
|
-
**Document:** Bug Fix Requirements (Creative PRD Validation Testing)
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Executive Summary
|
|
10
|
-
|
|
11
|
-
This document summarizes the research phase for the Hierarchical Workflow Engine bug fix project. All 9 bugs identified during PRD validation testing have been analyzed, validated against the codebase, and decomposed into atomic implementation tasks.
|
|
12
|
-
|
|
13
|
-
### Key Findings
|
|
14
|
-
|
|
15
|
-
- **All 9 bug report claims VALIDATED** - Code exists exactly as stated in the bug report
|
|
16
|
-
- **344 existing tests** - 100% pass rate maintained throughout bug fixes
|
|
17
|
-
- **4 Phases, 4 Milestones, 11 Tasks, 46 Subtasks** - Complete implementation plan created
|
|
18
|
-
- **Backward compatibility prioritized** - All fixes maintain existing API contracts where possible
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Research Artifacts Created
|
|
23
|
-
|
|
24
|
-
### Architecture Documentation
|
|
25
|
-
|
|
26
|
-
Three comprehensive architecture documents were created in `plan/bugfix/architecture/`:
|
|
27
|
-
|
|
28
|
-
#### 1. codebase_structure.md (14KB)
|
|
29
|
-
**Purpose:** Complete codebase mapping and bug claim validation
|
|
30
|
-
|
|
31
|
-
**Contents:**
|
|
32
|
-
- Directory structure overview
|
|
33
|
-
- Key files and responsibilities
|
|
34
|
-
- Validation of all 7 bug report claims with evidence
|
|
35
|
-
- Decorator system pattern analysis
|
|
36
|
-
- Error class hierarchy
|
|
37
|
-
- Observer pattern implementation
|
|
38
|
-
- Logger architecture details
|
|
39
|
-
- Dual tree architecture explanation
|
|
40
|
-
- Event type catalog
|
|
41
|
-
- Testing strategy overview
|
|
42
|
-
- Dependencies list
|
|
43
|
-
|
|
44
|
-
**Key Validation:** Confirmed all bug report claims are accurate with line numbers and code snippets.
|
|
45
|
-
|
|
46
|
-
#### 2. error_handling_patterns.md (9.6KB)
|
|
47
|
-
**Purpose:** Deep analysis of error handling architecture and Promise.all usage
|
|
48
|
-
|
|
49
|
-
**Contents:**
|
|
50
|
-
- WorkflowError interface structure
|
|
51
|
-
- All Promise.all usage locations (3 found)
|
|
52
|
-
- Step-by-step error propagation flow
|
|
53
|
-
- Why ErrorMergeStrategy exists but isn't used (4 reasons)
|
|
54
|
-
- Recommended Promise.allSettled implementation pattern
|
|
55
|
-
- Production-ready code examples
|
|
56
|
-
- Usage examples for error aggregation
|
|
57
|
-
- Additional findings (error events, state capture, recovery patterns, testing coverage)
|
|
58
|
-
|
|
59
|
-
**Key Finding:** ErrorMergeStrategy is defined but completely unused - requires TaskOptions extension and Promise.allSettled implementation.
|
|
60
|
-
|
|
61
|
-
#### 3. concurrent_execution_best_practices.md (47KB)
|
|
62
|
-
**Purpose:** Research on production workflow engine patterns and best practices
|
|
63
|
-
|
|
64
|
-
**Contents:**
|
|
65
|
-
- Promise.all vs Promise.allSettled technical comparison
|
|
66
|
-
- Production patterns from Temporal.io, AWS Step Functions, Cadence, Apache Airflow
|
|
67
|
-
- 4 error aggregation strategies with analysis
|
|
68
|
-
- Decision framework for fail-fast vs complete-all
|
|
69
|
-
- Strategy selection matrix (10 real-world scenarios)
|
|
70
|
-
- Groundswell-specific recommendations with code examples
|
|
71
|
-
- 4-phase implementation roadmap
|
|
72
|
-
- Complete code examples for WorkflowAggregateError
|
|
73
|
-
|
|
74
|
-
**Key Recommendation:** Default to 'complete-all' strategy for observability, maintain 'fail-fast' as initial default for backward compatibility.
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## Bug Fix Task Breakdown
|
|
79
|
-
|
|
80
|
-
### File: `./bug_fix_tasks.json` (36KB, 436 lines)
|
|
81
|
-
|
|
82
|
-
**Structure:**
|
|
83
|
-
```json
|
|
84
|
-
{
|
|
85
|
-
"backlog": [
|
|
86
|
-
{
|
|
87
|
-
"type": "Phase",
|
|
88
|
-
"id": "P1",
|
|
89
|
-
"title": "Bug Fixes - Hierarchical Workflow Engine",
|
|
90
|
-
"status": "Ready",
|
|
91
|
-
"milestones": [
|
|
92
|
-
{ "type": "Milestone", "id": "P1.M1", ... }, // Critical Fixes
|
|
93
|
-
{ "type": "Milestone", "id": "P1.M2", ... }, // Major Fixes
|
|
94
|
-
{ "type": "Milestone", "id": "P1.M3", ... }, // Minor Fixes
|
|
95
|
-
{ "type": "Milestone", "id": "P1.M4", ... } // Validation
|
|
96
|
-
]
|
|
97
|
-
}
|
|
98
|
-
]
|
|
99
|
-
}
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### Milestone Breakdown
|
|
103
|
-
|
|
104
|
-
#### P1.M1: Critical Fixes - Signature Mismatches (1 Task, 4 Subtasks)
|
|
105
|
-
**Focus:** WorkflowLogger.child() signature mismatch
|
|
106
|
-
|
|
107
|
-
**Task:** Fix WorkflowLogger.child() Signature Mismatch
|
|
108
|
-
- S1: Research PRD specification (1 SP)
|
|
109
|
-
- S2: Update signature to accept Partial<LogEntry> (2 SP)
|
|
110
|
-
- S3: Add tests for new signature (2 SP)
|
|
111
|
-
- S4: Verify backward compatibility (1 SP)
|
|
112
|
-
|
|
113
|
-
**Story Points:** 6
|
|
114
|
-
|
|
115
|
-
**Key Deliverable:** child() accepts Partial<LogEntry> while maintaining backward compatibility with string argument.
|
|
116
|
-
|
|
117
|
-
---
|
|
118
|
-
|
|
119
|
-
#### P1.M2: Major Fixes - Concurrent Execution & Error Handling (3 Tasks, 11 Subtasks)
|
|
120
|
-
**Focus:** Promise.all replacement and ErrorMergeStrategy implementation
|
|
121
|
-
|
|
122
|
-
**Task 1:** Replace Promise.all with Promise.allSettled
|
|
123
|
-
- S1: Analyze current implementation (1 SP)
|
|
124
|
-
- S2: Implement Promise.allSettled (2 SP)
|
|
125
|
-
- S3: Add concurrent failure tests (2 SP)
|
|
126
|
-
- S4: Run full test suite (1 SP)
|
|
127
|
-
|
|
128
|
-
**Task 2:** Implement ErrorMergeStrategy Support
|
|
129
|
-
- S1: Add to TaskOptions interface (1 SP)
|
|
130
|
-
- S2: Implement aggregation logic (2 SP)
|
|
131
|
-
- S3: Create default merger (1 SP)
|
|
132
|
-
- S4: Add tests (2 SP)
|
|
133
|
-
|
|
134
|
-
**Task 3:** Document trackTiming Default
|
|
135
|
-
- S1: Locate PRD section (1 SP)
|
|
136
|
-
- S2: Update documentation (1 SP)
|
|
137
|
-
|
|
138
|
-
**Story Points:** 14
|
|
139
|
-
|
|
140
|
-
**Key Deliverable:** Concurrent tasks use Promise.allSettled with opt-in error aggregation via ErrorMergeStrategy.
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
#### P1.M3: Minor Fixes - Logging & Performance (4 Tasks, 11 Subtasks)
|
|
145
|
-
**Focus:** Observer error handling, performance optimizations, validation
|
|
146
|
-
|
|
147
|
-
**Task 1:** Replace console.error with Logger
|
|
148
|
-
- S1: Find all console.error calls (1 SP)
|
|
149
|
-
- S2: Replace with logger.error (2 SP)
|
|
150
|
-
- S3: Add tests (1 SP)
|
|
151
|
-
|
|
152
|
-
**Task 2:** Optimize Tree Debugger Node Map
|
|
153
|
-
- S1: Analyze onTreeChanged (1 SP)
|
|
154
|
-
- S2: Implement incremental updates (2 SP)
|
|
155
|
-
- S3: Add benchmarks (1 SP)
|
|
156
|
-
|
|
157
|
-
**Task 3:** Add Workflow Name Validation
|
|
158
|
-
- S1: Determine requirements (1 SP)
|
|
159
|
-
- S2: Implement validation (1 SP)
|
|
160
|
-
- S3: Add tests (1 SP)
|
|
161
|
-
|
|
162
|
-
**Task 4:** Consider Exposing isDescendantOf
|
|
163
|
-
- S1: Evaluate use cases (1 SP)
|
|
164
|
-
- S2: Implement if approved (1 SP)
|
|
165
|
-
- S3: Add tests (1 SP)
|
|
166
|
-
|
|
167
|
-
**Story Points:** 14
|
|
168
|
-
|
|
169
|
-
**Key Deliverable:** Observer errors use logger, tree debugger has incremental updates, optional name validation.
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
#### P1.M4: Validation & Documentation (3 Tasks, 7 Subtasks)
|
|
174
|
-
**Focus:** Testing, documentation, and backward compatibility
|
|
175
|
-
|
|
176
|
-
**Task 1:** Run Full Test Suite
|
|
177
|
-
- S1: Execute tests (1 SP)
|
|
178
|
-
- S2: Fix failures (2 SP)
|
|
179
|
-
|
|
180
|
-
**Task 2:** Create Bug Fix Summary
|
|
181
|
-
- S1: Document fixes (2 SP)
|
|
182
|
-
- S2: Update changelog (1 SP)
|
|
183
|
-
|
|
184
|
-
**Task 3:** Verify Backward Compatibility
|
|
185
|
-
- S1: Audit breaking changes (1 SP)
|
|
186
|
-
- S2: Add compatibility tests (2 SP)
|
|
187
|
-
|
|
188
|
-
**Story Points:** 9
|
|
189
|
-
|
|
190
|
-
**Key Deliverable:** All tests pass, complete documentation, backward compatibility verified.
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
## Total Project Metrics
|
|
195
|
-
|
|
196
|
-
- **Total Story Points:** 43
|
|
197
|
-
- **Estimated Effort:** ~2-3 weeks (1 developer)
|
|
198
|
-
- **Critical Issues:** 1 fixed
|
|
199
|
-
- **Major Issues:** 3 fixed
|
|
200
|
-
- **Minor Issues:** 5 fixed (2 evaluated, may not implement)
|
|
201
|
-
- **Test Coverage:** 344+ existing tests maintained
|
|
202
|
-
- **Documentation:** 3 architecture docs (70KB) + task breakdown (36KB)
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## Risk Assessment
|
|
207
|
-
|
|
208
|
-
### High Risk Items
|
|
209
|
-
1. **WorkflowLogger.child() signature change** - Public API change, requires careful backward compatibility
|
|
210
|
-
2. **Promise.all to Promise.allSettled** - Changes concurrent execution semantics, may break existing error handling expectations
|
|
211
|
-
|
|
212
|
-
### Medium Risk Items
|
|
213
|
-
1. **ErrorMergeStrategy implementation** - New feature added to existing codebase, requires thorough testing
|
|
214
|
-
2. **Observer error handling** - Changes internal error flow, may affect debugging workflows
|
|
215
|
-
|
|
216
|
-
### Low Risk Items
|
|
217
|
-
1. **Documentation updates** - No code changes
|
|
218
|
-
2. **Performance optimizations** - Implementation detail, doesn't change behavior
|
|
219
|
-
3. **Validation additions** - Only affects previously invalid inputs
|
|
220
|
-
|
|
221
|
-
---
|
|
222
|
-
|
|
223
|
-
## Migration Considerations
|
|
224
|
-
|
|
225
|
-
### Breaking Changes
|
|
226
|
-
1. **WorkflowLogger.child() signature**
|
|
227
|
-
- Old: `child(parentLogId: string)`
|
|
228
|
-
- New: `child(meta: Partial<LogEntry>)`
|
|
229
|
-
- Migration: String argument still works (backward compatible), but users should migrate to Partial<LogEntry> for new features
|
|
230
|
-
|
|
231
|
-
### Non-Breaking Changes
|
|
232
|
-
1. **Promise.allSettled** - Behavior change but API unchanged
|
|
233
|
-
2. **ErrorMergeStrategy** - Opt-in new feature
|
|
234
|
-
3. **Observer error logging** - Internal implementation detail
|
|
235
|
-
4. **Tree debugger optimization** - Performance improvement, behavior unchanged
|
|
236
|
-
|
|
237
|
-
---
|
|
238
|
-
|
|
239
|
-
## Testing Strategy
|
|
240
|
-
|
|
241
|
-
### Existing Tests
|
|
242
|
-
- **344 tests** - All must continue passing
|
|
243
|
-
- **100% pass rate** - Quality gate for completion
|
|
244
|
-
- **Adversarial tests** - Edge case coverage already exists
|
|
245
|
-
|
|
246
|
-
### New Tests Required
|
|
247
|
-
1. **WorkflowLogger.child()** - 4 test scenarios
|
|
248
|
-
2. **Concurrent failures** - 4 test scenarios
|
|
249
|
-
3. **ErrorMergeStrategy** - 3 test scenarios
|
|
250
|
-
4. **Observer error logging** - 2 test scenarios
|
|
251
|
-
5. **Tree debugger performance** - Benchmark tests
|
|
252
|
-
6. **Name validation** - 3 test scenarios (if implemented)
|
|
253
|
-
7. **Backward compatibility** - Migration path tests
|
|
254
|
-
|
|
255
|
-
### Test Execution
|
|
256
|
-
```bash
|
|
257
|
-
# Run all tests
|
|
258
|
-
npm test
|
|
259
|
-
|
|
260
|
-
# Run specific test suites
|
|
261
|
-
npm test -- logger
|
|
262
|
-
npm test -- concurrent
|
|
263
|
-
npm test -- error-merge
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
---
|
|
267
|
-
|
|
268
|
-
## Implementation Order Recommendation
|
|
269
|
-
|
|
270
|
-
### Phase 1: Critical Fixes (Week 1, Days 1-2)
|
|
271
|
-
1. Fix WorkflowLogger.child() signature
|
|
272
|
-
2. Verify backward compatibility
|
|
273
|
-
3. Update PRD documentation for trackTiming
|
|
274
|
-
|
|
275
|
-
### Phase 2: Major Fixes (Week 1, Days 3-5)
|
|
276
|
-
1. Implement Promise.allSettled
|
|
277
|
-
2. Add ErrorMergeStrategy support
|
|
278
|
-
3. Test concurrent execution scenarios
|
|
279
|
-
|
|
280
|
-
### Phase 3: Minor Fixes (Week 2, Days 1-3)
|
|
281
|
-
1. Replace console.error with logger
|
|
282
|
-
2. Optimize tree debugger
|
|
283
|
-
3. Evaluate name validation and isDescendantOf
|
|
284
|
-
|
|
285
|
-
### Phase 4: Validation (Week 2, Days 4-5)
|
|
286
|
-
1. Full test suite execution
|
|
287
|
-
2. Documentation and changelog
|
|
288
|
-
3. Backward compatibility verification
|
|
289
|
-
|
|
290
|
-
---
|
|
291
|
-
|
|
292
|
-
## Success Criteria
|
|
293
|
-
|
|
294
|
-
### Must Have (Blocking)
|
|
295
|
-
- ✅ All 344 existing tests pass
|
|
296
|
-
- ✅ All critical bugs fixed (child() signature)
|
|
297
|
-
- ✅ All major bugs fixed (Promise.allSettled, ErrorMergeStrategy)
|
|
298
|
-
- ✅ No regressions introduced
|
|
299
|
-
- ✅ Backward compatibility maintained
|
|
300
|
-
|
|
301
|
-
### Should Have (Important)
|
|
302
|
-
- ✅ Observer errors use logger
|
|
303
|
-
- ✅ Tree debugger performance optimized
|
|
304
|
-
- ✅ Complete documentation and changelog
|
|
305
|
-
- ✅ Comprehensive test coverage for new features
|
|
306
|
-
|
|
307
|
-
### Could Have (Nice to Have)
|
|
308
|
-
- ⚠️ Workflow name validation (decision pending)
|
|
309
|
-
- ⚠️ Public isDescendantOf API (decision pending)
|
|
310
|
-
|
|
311
|
-
---
|
|
312
|
-
|
|
313
|
-
## Next Steps
|
|
314
|
-
|
|
315
|
-
1. **Review this research summary** with stakeholders
|
|
316
|
-
2. **Approve task breakdown** in `bug_fix_tasks.json`
|
|
317
|
-
3. **Begin implementation** starting with P1.M1 (Critical Fixes)
|
|
318
|
-
4. **Track progress** using task IDs (e.g., P1.M1.T1.S1)
|
|
319
|
-
5. **Update research docs** if implementation reveals new information
|
|
320
|
-
|
|
321
|
-
---
|
|
322
|
-
|
|
323
|
-
## Appendix: File Locations
|
|
324
|
-
|
|
325
|
-
### Research Documents
|
|
326
|
-
- `plan/bugfix/architecture/codebase_structure.md` - Codebase mapping
|
|
327
|
-
- `plan/bugfix/architecture/error_handling_patterns.md` - Error analysis
|
|
328
|
-
- `plan/bugfix/architecture/concurrent_execution_best_practices.md` - Best practices
|
|
329
|
-
- `plan/bugfix/RESEARCH_SUMMARY.md` - This document
|
|
330
|
-
|
|
331
|
-
### Implementation Artifacts
|
|
332
|
-
- `./bug_fix_tasks.json` - Complete task breakdown (USE THIS FILE)
|
|
333
|
-
|
|
334
|
-
### Source Files Referenced
|
|
335
|
-
- `src/core/logger.ts:84` - child() method
|
|
336
|
-
- `src/decorators/task.ts:112` - Promise.all usage
|
|
337
|
-
- `src/types/error-strategy.ts` - ErrorMergeStrategy interface
|
|
338
|
-
- `src/decorators/step.ts:94` - trackTiming default
|
|
339
|
-
- `src/core/workflow.ts:376,124-139` - Observer errors and getRootObservers
|
|
340
|
-
- `src/debugger/tree-debugger.ts:80-84` - Tree rebuild logic
|
|
341
|
-
|
|
342
|
-
---
|
|
343
|
-
|
|
344
|
-
**Document Status:** ✅ Complete
|
|
345
|
-
**Ready for Implementation:** ✅ Yes
|
|
346
|
-
**Task Breakdown Available:** ✅ Yes (`./bug_fix_tasks.json`)
|
|
@@ -1,311 +0,0 @@
|
|
|
1
|
-
# Codebase Structure Analysis - Hierarchical Workflow Engine
|
|
2
|
-
|
|
3
|
-
## 1. Directory Structure Overview
|
|
4
|
-
|
|
5
|
-
```
|
|
6
|
-
/home/dustin/projects/groundswell/
|
|
7
|
-
├── src/
|
|
8
|
-
│ ├── core/ # Core workflow engine
|
|
9
|
-
│ │ ├── workflow.ts # Main Workflow class
|
|
10
|
-
│ │ ├── logger.ts # WorkflowLogger
|
|
11
|
-
│ │ ├── agent.ts # Agent class
|
|
12
|
-
│ │ ├── prompt.ts # Prompt class
|
|
13
|
-
│ │ ├── context.ts # Execution context
|
|
14
|
-
│ │ ├── workflow-context.ts
|
|
15
|
-
│ │ ├── event-tree.ts # Event tree implementation
|
|
16
|
-
│ │ ├── factory.ts # Factory functions
|
|
17
|
-
│ │ └── mcp-handler.ts # MCP (Model Context Protocol) handler
|
|
18
|
-
│ ├── decorators/ # Decorator implementations
|
|
19
|
-
│ │ ├── step.ts # @Step decorator
|
|
20
|
-
│ │ ├── task.ts # @Task decorator
|
|
21
|
-
│ │ └── observed-state.ts # @ObservedState decorator
|
|
22
|
-
│ ├── types/ # TypeScript type definitions
|
|
23
|
-
│ │ ├── workflow.ts # WorkflowNode, WorkflowStatus
|
|
24
|
-
│ │ ├── error.ts # WorkflowError interface
|
|
25
|
-
│ │ ├── error-strategy.ts # ErrorMergeStrategy
|
|
26
|
-
│ │ ├── observer.ts # WorkflowObserver interface
|
|
27
|
-
│ │ ├── events.ts # WorkflowEvent discriminated union
|
|
28
|
-
│ │ ├── logging.ts # LogEntry, LogLevel
|
|
29
|
-
│ │ ├── decorators.ts # StepOptions, TaskOptions
|
|
30
|
-
│ │ └── index.ts # Type exports
|
|
31
|
-
│ ├── debugger/ # Debugging tools
|
|
32
|
-
│ │ └── tree-debugger.ts # WorkflowTreeDebugger
|
|
33
|
-
│ ├── cache/ # Caching system
|
|
34
|
-
│ │ ├── cache.ts # LLMCache
|
|
35
|
-
│ │ └── cache-key.ts # Cache key generation
|
|
36
|
-
│ ├── reflection/ # Reflection system
|
|
37
|
-
│ │ └── reflection.ts # ReflectionManager
|
|
38
|
-
│ ├── tools/ # Introspection tools
|
|
39
|
-
│ │ └── introspection.ts
|
|
40
|
-
│ ├── utils/ # Utilities
|
|
41
|
-
│ │ ├── id.ts # generateId()
|
|
42
|
-
│ │ └── observable.ts # Observable class
|
|
43
|
-
│ ├── __tests__/ # Test suites
|
|
44
|
-
│ │ ├── unit/
|
|
45
|
-
│ │ ├── integration/
|
|
46
|
-
│ │ └── adversarial/ # Edge case and stress tests
|
|
47
|
-
│ └── index.ts # Main exports
|
|
48
|
-
├── examples/ # Example workflows
|
|
49
|
-
├── docs/ # Documentation
|
|
50
|
-
└── package.json # Project configuration
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## 2. Key Files and Their Responsibilities
|
|
54
|
-
|
|
55
|
-
| File | Responsibility |
|
|
56
|
-
|------|----------------|
|
|
57
|
-
| `src/core/workflow.ts` | Main Workflow class supporting both class-based (subclass with run()) and functional (executor) patterns. Manages parent-child relationships, observers, event emission, and tree structure validation. |
|
|
58
|
-
| `src/core/logger.ts` | WorkflowLogger class that emits log entries to workflow nodes and observers with hierarchical logging support via child() method. |
|
|
59
|
-
| `src/decorators/step.ts` | @Step decorator that wraps methods to emit stepStart/stepEnd events, track timing, handle errors, and optionally snapshot state. |
|
|
60
|
-
| `src/decorators/task.ts` | @Task decorator that wraps methods returning child workflows, automatically attaches them, and supports concurrent execution. |
|
|
61
|
-
| `src/decorators/observed-state.ts` | @ObservedState decorator for marking fields to include in state snapshots with support for redaction and hiding. |
|
|
62
|
-
| `src/debugger/tree-debugger.ts` | WorkflowTreeDebugger observer that builds node lookup maps and renders ASCII tree visualizations. |
|
|
63
|
-
| `src/types/error.ts` | WorkflowError interface containing message, original error, workflowId, stack, state snapshot, and logs. |
|
|
64
|
-
| `src/types/error-strategy.ts` | ErrorMergeStrategy interface for merging multiple errors from concurrent operations. |
|
|
65
|
-
| `src/types/observer.ts` | WorkflowObserver interface defining onLog, onEvent, onStateUpdated, and onTreeChanged methods. |
|
|
66
|
-
| `src/utils/observable.ts` | Lightweight Observable implementation for event streaming with subscription management. |
|
|
67
|
-
| `src/utils/id.ts` | generateId() utility using crypto.randomUUID with timestamp fallback. |
|
|
68
|
-
|
|
69
|
-
## 3. Bug Report Claim Validation
|
|
70
|
-
|
|
71
|
-
| Claim | Location | Status | Evidence |
|
|
72
|
-
|-------|----------|--------|----------|
|
|
73
|
-
| **WorkflowLogger.child() signature** | `src/core/logger.ts:84` | ✅ **CONFIRMED** | Line 84: `child(parentLogId: string): WorkflowLogger {` - Returns new WorkflowLogger with parentLogId passed to constructor |
|
|
74
|
-
| **Concurrent task execution** | `src/decorators/task.ts:112` | ✅ **CONFIRMED** | Line 112: `await Promise.all(runnable.map((w) => w.run()));` - Executes runnable workflows in parallel when `opts.concurrent` is true |
|
|
75
|
-
| **ErrorMergeStrategy definition** | `src/types/error-strategy.ts` | ✅ **CONFIRMED** | File exists with interface defining `enabled: boolean`, `maxMergeDepth?: number`, and `combine?(errors: WorkflowError[]): WorkflowError` |
|
|
76
|
-
| **trackTiming default** | `src/decorators/step.ts:94` | ✅ **CONFIRMED** | Line 94: `if (opts.trackTiming !== false)` - Default is true (timing tracked unless explicitly disabled) |
|
|
77
|
-
| **Observer error handling** | `src/core/workflow.ts:376` | ✅ **CONFIRMED** | Lines 367-377: Observer callbacks wrapped in try-catch with `console.error('Observer onEvent error:', err);` at line 376 |
|
|
78
|
-
| **getRootObservers method** | `src/core/workflow.ts:124-139` | ✅ **CONFIRMED** | Lines 124-139: Private method traversing parent chain with cycle detection using visited Set |
|
|
79
|
-
| **Tree debugger node map** | `src/debugger/tree-debugger.ts:80-84` | ✅ **CONFIRMED** | Lines 80-84: onTreeChanged() clears nodeMap and calls buildNodeMap(root); buildNodeMap() at line 54 uses `this.nodeMap.set(node.id, node);` |
|
|
80
|
-
|
|
81
|
-
**All 7 bug report claims are VALID and the code exists exactly as stated.**
|
|
82
|
-
|
|
83
|
-
## 4. Decorator System Pattern
|
|
84
|
-
|
|
85
|
-
The codebase uses **standard ECMAScript Stage 3 Decorators** (not legacy TypeScript decorators).
|
|
86
|
-
|
|
87
|
-
### Pattern Structure
|
|
88
|
-
|
|
89
|
-
All decorators follow this pattern:
|
|
90
|
-
```typescript
|
|
91
|
-
export function DecoratorName(opts: Options = {}) {
|
|
92
|
-
return function <This, Args extends unknown[], Return>(
|
|
93
|
-
originalMethod: (this: This, ...args: Args) => Promise<Return>,
|
|
94
|
-
context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Promise<Return>>
|
|
95
|
-
) {
|
|
96
|
-
// CRITICAL: Use regular function, not arrow function
|
|
97
|
-
async function wrapper(this: This, ...args: Args): Promise<Return> {
|
|
98
|
-
// Cast to WorkflowLike for accessing workflow properties
|
|
99
|
-
const wf = this as unknown as WorkflowLike;
|
|
100
|
-
|
|
101
|
-
// Pre-processing (emit events, capture start time)
|
|
102
|
-
|
|
103
|
-
const result = await originalMethod.call(this, ...args);
|
|
104
|
-
|
|
105
|
-
// Post-processing (emit events, attach children, etc.)
|
|
106
|
-
|
|
107
|
-
return result;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return wrapper;
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### Key Design Decisions
|
|
116
|
-
|
|
117
|
-
1. **Regular function over arrow functions** - Preserves `this` binding for instance access
|
|
118
|
-
2. **WorkflowLike interface casting** - Enables duck-typing for workflow-like objects
|
|
119
|
-
3. **Lenient validation** - Non-workflow returns are silently skipped rather than throwing
|
|
120
|
-
4. **Event emission pattern** - All decorators emit events via `wf.emitEvent()`
|
|
121
|
-
|
|
122
|
-
## 5. Error Class Hierarchy
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
WorkflowError (interface)
|
|
126
|
-
├── message: string
|
|
127
|
-
├── original: unknown // Original thrown error
|
|
128
|
-
├── workflowId: string // ID where error occurred
|
|
129
|
-
├── stack?: string // Stack trace if available
|
|
130
|
-
├── state: SerializedWorkflowState // State snapshot at error time
|
|
131
|
-
└── logs: LogEntry[] // Logs from failing node
|
|
132
|
-
|
|
133
|
-
ErrorMergeStrategy (interface)
|
|
134
|
-
├── enabled: boolean // Enable error merging (default: false)
|
|
135
|
-
├── maxMergeDepth?: number // Maximum depth to merge errors
|
|
136
|
-
└── combine?(errors: WorkflowError[]): WorkflowError // Custom combiner
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
Error handling flow:
|
|
140
|
-
1. Errors caught in decorator wrappers (@Step, @Task)
|
|
141
|
-
2. Enriched with workflow context (state, logs, workflowId)
|
|
142
|
-
3. Emitted as 'error' events to observers
|
|
143
|
-
4. Re-thrown for upstream handling
|
|
144
|
-
|
|
145
|
-
## 6. Observer Pattern Implementation
|
|
146
|
-
|
|
147
|
-
### Observer Interface
|
|
148
|
-
|
|
149
|
-
```typescript
|
|
150
|
-
interface WorkflowObserver {
|
|
151
|
-
onLog(entry: LogEntry): void;
|
|
152
|
-
onEvent(event: WorkflowEvent): void;
|
|
153
|
-
onStateUpdated(node: WorkflowNode): void;
|
|
154
|
-
onTreeChanged(root: WorkflowNode): void;
|
|
155
|
-
}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### Observer Management
|
|
159
|
-
|
|
160
|
-
- **Registration**: `workflow.addObserver(observer)` - Only allowed on root workflows
|
|
161
|
-
- **Storage**: Private `observers: WorkflowObserver[]` array on root workflow
|
|
162
|
-
- **Propagation**: Child workflows access root observers via `getRootObservers()` method
|
|
163
|
-
- **Error isolation**: All observer callbacks wrapped in try-catch to prevent observer failures from affecting workflow execution
|
|
164
|
-
|
|
165
|
-
### Event Flow
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
Workflow.emitEvent()
|
|
169
|
-
├── Push to node.events array
|
|
170
|
-
├── Get observers via getRootObservers()
|
|
171
|
-
└── For each observer:
|
|
172
|
-
├── Call onEvent(event)
|
|
173
|
-
├── Call onTreeChanged(root) if tree update event
|
|
174
|
-
└── Catch and log errors (console.error)
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
### Key Implementation Details
|
|
178
|
-
|
|
179
|
-
1. **Root-only observers**: Observers can only be added to root workflows (throws error if parent exists)
|
|
180
|
-
2. **Cycle-safe traversal**: `getRootObservers()` uses visited Set to detect circular parent-child relationships
|
|
181
|
-
3. **Lazy initialization**: Logger created with root observers in constructor
|
|
182
|
-
4. **Multiple observer types**: WorkflowTreeDebugger, custom observers can be attached
|
|
183
|
-
|
|
184
|
-
## 7. Logger Architecture
|
|
185
|
-
|
|
186
|
-
### WorkflowLogger Class
|
|
187
|
-
|
|
188
|
-
```typescript
|
|
189
|
-
class WorkflowLogger {
|
|
190
|
-
private readonly parentLogId?: string;
|
|
191
|
-
|
|
192
|
-
constructor(
|
|
193
|
-
private readonly node: WorkflowNode,
|
|
194
|
-
private readonly observers: WorkflowObserver[],
|
|
195
|
-
parentLogId?: string
|
|
196
|
-
)
|
|
197
|
-
|
|
198
|
-
// Logging methods
|
|
199
|
-
debug(message: string, data?: unknown): void
|
|
200
|
-
info(message: string, data?: unknown): void
|
|
201
|
-
warn(message: string, data?: unknown): void
|
|
202
|
-
error(message: string, data?: unknown): void
|
|
203
|
-
|
|
204
|
-
// Hierarchical logging
|
|
205
|
-
child(parentLogId: string): WorkflowLogger
|
|
206
|
-
}
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
### Log Entry Structure
|
|
210
|
-
|
|
211
|
-
```typescript
|
|
212
|
-
interface LogEntry {
|
|
213
|
-
id: string; // Unique identifier
|
|
214
|
-
workflowId: string; // Workflow that created log
|
|
215
|
-
timestamp: number; // Unix timestamp in ms
|
|
216
|
-
level: LogLevel; // 'debug' | 'info' | 'warn' | 'error'
|
|
217
|
-
message: string; // Log message
|
|
218
|
-
data?: unknown; // Optional structured data
|
|
219
|
-
parentLogId?: string; // Parent log ID for hierarchy
|
|
220
|
-
}
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
### Logging Flow
|
|
224
|
-
|
|
225
|
-
1. Log method called → `log(level, message, data)`
|
|
226
|
-
2. LogEntry created with metadata and parentLogId if child logger
|
|
227
|
-
3. Entry pushed to `node.logs` array
|
|
228
|
-
4. All observers notified via `obs.onLog(entry)`
|
|
229
|
-
5. Observer errors caught and logged to console
|
|
230
|
-
|
|
231
|
-
### Key Features
|
|
232
|
-
|
|
233
|
-
- **Hierarchical logging**: `child()` method creates logger with parentLogId reference
|
|
234
|
-
- **Observer broadcast**: All log entries sent to all root observers
|
|
235
|
-
- **Error isolation**: Observer onLog errors don't stop logging
|
|
236
|
-
- **Timestamp tracking**: Automatic timestamp generation
|
|
237
|
-
|
|
238
|
-
## 8. Additional Architecture Patterns
|
|
239
|
-
|
|
240
|
-
### Dual Tree Architecture
|
|
241
|
-
|
|
242
|
-
The codebase maintains **two synchronized tree structures**:
|
|
243
|
-
|
|
244
|
-
1. **Workflow Tree**: `workflow.children` array (Workflow class instances)
|
|
245
|
-
2. **Node Tree**: `node.children` array (WorkflowNode data structures)
|
|
246
|
-
|
|
247
|
-
This 1:1 mirror is maintained in:
|
|
248
|
-
- `attachChild()`: Adds to both trees and sets parent references
|
|
249
|
-
- `detachChild()`: Removes from both trees and clears parent references
|
|
250
|
-
|
|
251
|
-
### Cycle Detection
|
|
252
|
-
|
|
253
|
-
Three methods use visited Set pattern for cycle detection:
|
|
254
|
-
|
|
255
|
-
1. `getRootObservers()` - Lines 124-139
|
|
256
|
-
2. `isDescendantOf()` - Lines 151-169 (private helper for attachChild validation)
|
|
257
|
-
3. `getRoot()` - Lines 175-190
|
|
258
|
-
|
|
259
|
-
All throw `'Circular parent-child relationship detected'` if cycle found.
|
|
260
|
-
|
|
261
|
-
### Event Types
|
|
262
|
-
|
|
263
|
-
The discriminated union includes 17+ event types:
|
|
264
|
-
- Core: childAttached, childDetached, stateSnapshot, stepStart, stepEnd, error, taskStart, taskEnd, treeUpdated
|
|
265
|
-
- Agent: agentPromptStart, agentPromptEnd
|
|
266
|
-
- Tools: toolInvocation, mcpEvent
|
|
267
|
-
- Reflection: reflectionStart, reflectionEnd
|
|
268
|
-
- Cache: cacheHit, cacheMiss
|
|
269
|
-
|
|
270
|
-
## 9. Testing Strategy
|
|
271
|
-
|
|
272
|
-
The test suite is organized into:
|
|
273
|
-
|
|
274
|
-
- **Unit tests**: Individual component testing
|
|
275
|
-
- **Integration tests**: Multi-component workflows
|
|
276
|
-
- **Adversarial tests**: Edge cases, circular references, deep hierarchies, PRD compliance
|
|
277
|
-
|
|
278
|
-
Test coverage includes:
|
|
279
|
-
- Decorator behavior
|
|
280
|
-
- Tree mirroring (workflow/node tree consistency)
|
|
281
|
-
- Reparenting workflows
|
|
282
|
-
- Observer propagation
|
|
283
|
-
- attachChild/detachChild validation
|
|
284
|
-
- Circular reference detection
|
|
285
|
-
- Performance benchmarks (attachChild performance)
|
|
286
|
-
|
|
287
|
-
## 10. Dependencies
|
|
288
|
-
|
|
289
|
-
**Core Runtime**:
|
|
290
|
-
- `@anthropic-ai/sdk` ^0.71.1 - Anthropic Claude API
|
|
291
|
-
- `zod` ^3.23.0 - Schema validation
|
|
292
|
-
- `lru-cache` ^10.4.3 - LLM response caching
|
|
293
|
-
|
|
294
|
-
**Development**:
|
|
295
|
-
- `typescript` ^5.2.0 - Stage 3 decorators support
|
|
296
|
-
- `vitest` ^1.0.0 - Testing framework
|
|
297
|
-
- `tsx` ^4.21.0 - TypeScript execution
|
|
298
|
-
|
|
299
|
-
## Summary
|
|
300
|
-
|
|
301
|
-
The Hierarchical Workflow Engine is a well-architected TypeScript library that provides:
|
|
302
|
-
|
|
303
|
-
1. **Validated bug report claims** - All 7 claims confirmed accurate
|
|
304
|
-
2. **Modern decorator pattern** - ECMAScript Stage 3 decorators with proper `this` preservation
|
|
305
|
-
3. **Robust observer system** - Root-based observer management with error isolation
|
|
306
|
-
4. **Dual tree architecture** - Synchronized workflow and node trees with cycle detection
|
|
307
|
-
5. **Rich error context** - WorkflowError includes state snapshots and logs
|
|
308
|
-
6. **Hierarchical logging** - Parent-child log relationships via child() method
|
|
309
|
-
7. **Comprehensive tooling** - Debugger, caching, reflection, and introspection
|
|
310
|
-
|
|
311
|
-
The codebase demonstrates strong engineering practices with clear separation of concerns, extensive type safety, and thorough test coverage including adversarial test cases.
|