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,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model specification parsing utility
|
|
3
|
+
*
|
|
4
|
+
* Provides parsing and validation of model specification strings
|
|
5
|
+
* per PRD §7.8 (Model & Provider Specification).
|
|
6
|
+
*
|
|
7
|
+
* The provider axis is an OPEN set (PRD §7.8): any non-empty provider string
|
|
8
|
+
* is valid. The harness (pi | claude-code) is NEVER part of the model string —
|
|
9
|
+
* harness-qualified strings (e.g. `pi/anthropic/x`) are rejected.
|
|
10
|
+
*/
|
|
11
|
+
import type { ModelSpec, ModelProviderId } from '../types/harnesses.js';
|
|
12
|
+
/**
|
|
13
|
+
* Parse a model specification string into a ModelSpec object
|
|
14
|
+
*
|
|
15
|
+
* ## Supported Formats
|
|
16
|
+
*
|
|
17
|
+
* ### Qualified Format (provider/model)
|
|
18
|
+
* Explicit provider specification with "/" separator.
|
|
19
|
+
* - Input: `"anthropic/claude-3-5-sonnet"`
|
|
20
|
+
* - Output: `{ provider: 'anthropic', model: 'claude-3-5-sonnet', raw: 'anthropic/claude-3-5-sonnet' }`
|
|
21
|
+
*
|
|
22
|
+
* ### Plain Format (model only)
|
|
23
|
+
* Uses default provider when no provider specified.
|
|
24
|
+
* - Input: `"claude-sonnet-4"` with defaultProvider: `'anthropic'`
|
|
25
|
+
* - Output: `{ provider: 'anthropic', model: 'claude-sonnet-4', raw: 'claude-sonnet-4' }`
|
|
26
|
+
*
|
|
27
|
+
* ## Validation Rules
|
|
28
|
+
*
|
|
29
|
+
* 1. Input cannot be empty or whitespace-only
|
|
30
|
+
* 2. Provider must be a non-empty string (open set — any LLM provider accepted)
|
|
31
|
+
* 3. Model name cannot be empty after provider split
|
|
32
|
+
* 4. Harness-qualified strings (3+ segments, e.g. `pi/anthropic/x`) are REJECTED
|
|
33
|
+
* (PRD §7.8 critical rule: the harness must never appear in the model string)
|
|
34
|
+
* 5. Input is trimmed before parsing, original preserved in `raw` field
|
|
35
|
+
*
|
|
36
|
+
* @param model - Model specification string to parse
|
|
37
|
+
* @param defaultProvider - Default provider to use when none specified (default: 'anthropic')
|
|
38
|
+
* @returns Parsed ModelSpec object with provider, model, and raw string
|
|
39
|
+
* @throws {Error} When model specification is invalid:
|
|
40
|
+
* - Empty or whitespace-only input
|
|
41
|
+
* - Empty provider or model parts
|
|
42
|
+
* - Harness-qualified strings (3+ segments)
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* // Qualified format with known provider
|
|
47
|
+
* const spec1 = parseModelSpec('anthropic/claude-3-5-sonnet');
|
|
48
|
+
* // Returns: { provider: 'anthropic', model: 'claude-3-5-sonnet', raw: 'anthropic/claude-3-5-sonnet' }
|
|
49
|
+
*
|
|
50
|
+
* // Qualified format with custom provider (open set)
|
|
51
|
+
* const spec2 = parseModelSpec('openai/gpt-4o');
|
|
52
|
+
* // Returns: { provider: 'openai', model: 'gpt-4o', raw: 'openai/gpt-4o' }
|
|
53
|
+
*
|
|
54
|
+
* // Plain format — resolved against default provider
|
|
55
|
+
* const spec3 = parseModelSpec('claude-sonnet-4');
|
|
56
|
+
* // Returns: { provider: 'anthropic', model: 'claude-sonnet-4', raw: 'claude-sonnet-4' }
|
|
57
|
+
*
|
|
58
|
+
* // Harness-qualified — REJECTED (PRD §7.8 critical rule)
|
|
59
|
+
* parseModelSpec('pi/anthropic/claude-sonnet-4');
|
|
60
|
+
* // Throws: "Harness must not appear in model string …"
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* @see {@link ModelSpec} for the return type structure
|
|
64
|
+
* @see {@link ModelProviderId} for the open provider set
|
|
65
|
+
*/
|
|
66
|
+
export declare function parseModelSpec(model: string, defaultProvider?: ModelProviderId): ModelSpec;
|
|
67
|
+
/**
|
|
68
|
+
* Format a ModelSpec for a specific target provider
|
|
69
|
+
*
|
|
70
|
+
* ## Behavior
|
|
71
|
+
*
|
|
72
|
+
* ### Same Provider (Pass-Through)
|
|
73
|
+
* When `spec.provider` matches `targetProvider`, returns the model name only.
|
|
74
|
+
*
|
|
75
|
+
* **Example:**
|
|
76
|
+
* - Input: `{ provider: 'anthropic', model: 'claude-3-5-sonnet', raw: 'anthropic/claude-3-5-sonnet' }`, `'anthropic'`
|
|
77
|
+
* - Output: `"claude-3-5-sonnet"`
|
|
78
|
+
*
|
|
79
|
+
* ### Different Providers (Error)
|
|
80
|
+
* When providers differ, throws an error. Cross-provider model translation
|
|
81
|
+
* is not supported in the MVP.
|
|
82
|
+
*
|
|
83
|
+
* @param spec - ModelSpec from parseModelSpec() or Provider.normalizeModel()
|
|
84
|
+
* @param targetProvider - The provider to format the model for
|
|
85
|
+
* @returns Formatted model string for target provider (model name only)
|
|
86
|
+
* @throws {Error} When providers differ with message:
|
|
87
|
+
* "Cannot translate {source}/{model} to {target} provider. Cross-provider model translation is not supported."
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* // Same provider: pass-through
|
|
92
|
+
* const spec = parseModelSpec('anthropic/claude-3-5-sonnet');
|
|
93
|
+
* const model = formatModelForProvider(spec, 'anthropic');
|
|
94
|
+
* console.log(model); // "claude-3-5-sonnet"
|
|
95
|
+
*
|
|
96
|
+
* // Different provider: error
|
|
97
|
+
* try {
|
|
98
|
+
* formatModelForProvider(spec, 'openai');
|
|
99
|
+
* } catch (error) {
|
|
100
|
+
* console.error((error as Error).message);
|
|
101
|
+
* // "Cannot translate anthropic/claude-3-5-sonnet to openai provider. ..."
|
|
102
|
+
* }
|
|
103
|
+
* ```
|
|
104
|
+
*
|
|
105
|
+
* @see {@link parseModelSpec} for creating ModelSpec objects
|
|
106
|
+
* @see {@link ModelSpec} for the input type structure
|
|
107
|
+
* @see {@link ModelProviderId} for the open provider set
|
|
108
|
+
*/
|
|
109
|
+
export declare function formatModelForProvider(spec: ModelSpec, targetProvider: ModelProviderId): string;
|
|
110
|
+
//# sourceMappingURL=model-spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-spec.d.ts","sourceRoot":"","sources":["../../src/utils/model-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,eAAe,GAAE,eAA6B,GAC7C,SAAS,CAiDX;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,SAAS,EACf,cAAc,EAAE,eAAe,GAC9B,MAAM,CAWR"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model specification parsing utility
|
|
3
|
+
*
|
|
4
|
+
* Provides parsing and validation of model specification strings
|
|
5
|
+
* per PRD §7.8 (Model & Provider Specification).
|
|
6
|
+
*
|
|
7
|
+
* The provider axis is an OPEN set (PRD §7.8): any non-empty provider string
|
|
8
|
+
* is valid. The harness (pi | claude-code) is NEVER part of the model string —
|
|
9
|
+
* harness-qualified strings (e.g. `pi/anthropic/x`) are rejected.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Parse a model specification string into a ModelSpec object
|
|
13
|
+
*
|
|
14
|
+
* ## Supported Formats
|
|
15
|
+
*
|
|
16
|
+
* ### Qualified Format (provider/model)
|
|
17
|
+
* Explicit provider specification with "/" separator.
|
|
18
|
+
* - Input: `"anthropic/claude-3-5-sonnet"`
|
|
19
|
+
* - Output: `{ provider: 'anthropic', model: 'claude-3-5-sonnet', raw: 'anthropic/claude-3-5-sonnet' }`
|
|
20
|
+
*
|
|
21
|
+
* ### Plain Format (model only)
|
|
22
|
+
* Uses default provider when no provider specified.
|
|
23
|
+
* - Input: `"claude-sonnet-4"` with defaultProvider: `'anthropic'`
|
|
24
|
+
* - Output: `{ provider: 'anthropic', model: 'claude-sonnet-4', raw: 'claude-sonnet-4' }`
|
|
25
|
+
*
|
|
26
|
+
* ## Validation Rules
|
|
27
|
+
*
|
|
28
|
+
* 1. Input cannot be empty or whitespace-only
|
|
29
|
+
* 2. Provider must be a non-empty string (open set — any LLM provider accepted)
|
|
30
|
+
* 3. Model name cannot be empty after provider split
|
|
31
|
+
* 4. Harness-qualified strings (3+ segments, e.g. `pi/anthropic/x`) are REJECTED
|
|
32
|
+
* (PRD §7.8 critical rule: the harness must never appear in the model string)
|
|
33
|
+
* 5. Input is trimmed before parsing, original preserved in `raw` field
|
|
34
|
+
*
|
|
35
|
+
* @param model - Model specification string to parse
|
|
36
|
+
* @param defaultProvider - Default provider to use when none specified (default: 'anthropic')
|
|
37
|
+
* @returns Parsed ModelSpec object with provider, model, and raw string
|
|
38
|
+
* @throws {Error} When model specification is invalid:
|
|
39
|
+
* - Empty or whitespace-only input
|
|
40
|
+
* - Empty provider or model parts
|
|
41
|
+
* - Harness-qualified strings (3+ segments)
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* // Qualified format with known provider
|
|
46
|
+
* const spec1 = parseModelSpec('anthropic/claude-3-5-sonnet');
|
|
47
|
+
* // Returns: { provider: 'anthropic', model: 'claude-3-5-sonnet', raw: 'anthropic/claude-3-5-sonnet' }
|
|
48
|
+
*
|
|
49
|
+
* // Qualified format with custom provider (open set)
|
|
50
|
+
* const spec2 = parseModelSpec('openai/gpt-4o');
|
|
51
|
+
* // Returns: { provider: 'openai', model: 'gpt-4o', raw: 'openai/gpt-4o' }
|
|
52
|
+
*
|
|
53
|
+
* // Plain format — resolved against default provider
|
|
54
|
+
* const spec3 = parseModelSpec('claude-sonnet-4');
|
|
55
|
+
* // Returns: { provider: 'anthropic', model: 'claude-sonnet-4', raw: 'claude-sonnet-4' }
|
|
56
|
+
*
|
|
57
|
+
* // Harness-qualified — REJECTED (PRD §7.8 critical rule)
|
|
58
|
+
* parseModelSpec('pi/anthropic/claude-sonnet-4');
|
|
59
|
+
* // Throws: "Harness must not appear in model string …"
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @see {@link ModelSpec} for the return type structure
|
|
63
|
+
* @see {@link ModelProviderId} for the open provider set
|
|
64
|
+
*/
|
|
65
|
+
export function parseModelSpec(model, defaultProvider = 'anthropic') {
|
|
66
|
+
// Preserve ORIGINAL (untrimmed) input — existing consumers rely on raw being exact.
|
|
67
|
+
const raw = model;
|
|
68
|
+
// Trim for parsing — raw stays untouched.
|
|
69
|
+
const trimmed = model.trim();
|
|
70
|
+
if (trimmed.length === 0) {
|
|
71
|
+
throw new Error('Model specification cannot be empty. Expected format: "provider/model" or "model"');
|
|
72
|
+
}
|
|
73
|
+
// Split WITHOUT a limit — must observe ALL segments to detect harness-qualified forms.
|
|
74
|
+
const parts = trimmed.split('/');
|
|
75
|
+
if (parts.length === 1) {
|
|
76
|
+
// Plain format — resolve against defaultProvider (open set).
|
|
77
|
+
return { provider: defaultProvider, model: parts[0], raw };
|
|
78
|
+
}
|
|
79
|
+
if (parts.length === 2) {
|
|
80
|
+
const [provider, modelName] = parts;
|
|
81
|
+
if (provider.length === 0) {
|
|
82
|
+
throw new Error(`Invalid model specification: "${trimmed}". ` +
|
|
83
|
+
'Provider cannot be empty. Expected format: "provider/model"');
|
|
84
|
+
}
|
|
85
|
+
if (modelName.length === 0) {
|
|
86
|
+
throw new Error(`Invalid model specification: "${trimmed}". ` +
|
|
87
|
+
'Model name cannot be empty. Expected format: "provider/model"');
|
|
88
|
+
}
|
|
89
|
+
// Open set: ANY non-empty provider string is a valid ModelProviderId (PRD §7.8).
|
|
90
|
+
// No closed-union check — the harness enforces provider constraints at initialize/execute.
|
|
91
|
+
return { provider, model: modelName, raw };
|
|
92
|
+
}
|
|
93
|
+
// parts.length >= 3 → harness-qualified form (e.g. pi/anthropic/x, cc/anthropic/...).
|
|
94
|
+
// PRD §7.8 critical rule: the harness must NEVER appear in the model string.
|
|
95
|
+
throw new Error(`Harness must not appear in model string. ` +
|
|
96
|
+
`Expected format "provider/model" (e.g. "anthropic/claude-sonnet-4-20250514"), got "${raw}".`);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Format a ModelSpec for a specific target provider
|
|
100
|
+
*
|
|
101
|
+
* ## Behavior
|
|
102
|
+
*
|
|
103
|
+
* ### Same Provider (Pass-Through)
|
|
104
|
+
* When `spec.provider` matches `targetProvider`, returns the model name only.
|
|
105
|
+
*
|
|
106
|
+
* **Example:**
|
|
107
|
+
* - Input: `{ provider: 'anthropic', model: 'claude-3-5-sonnet', raw: 'anthropic/claude-3-5-sonnet' }`, `'anthropic'`
|
|
108
|
+
* - Output: `"claude-3-5-sonnet"`
|
|
109
|
+
*
|
|
110
|
+
* ### Different Providers (Error)
|
|
111
|
+
* When providers differ, throws an error. Cross-provider model translation
|
|
112
|
+
* is not supported in the MVP.
|
|
113
|
+
*
|
|
114
|
+
* @param spec - ModelSpec from parseModelSpec() or Provider.normalizeModel()
|
|
115
|
+
* @param targetProvider - The provider to format the model for
|
|
116
|
+
* @returns Formatted model string for target provider (model name only)
|
|
117
|
+
* @throws {Error} When providers differ with message:
|
|
118
|
+
* "Cannot translate {source}/{model} to {target} provider. Cross-provider model translation is not supported."
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```ts
|
|
122
|
+
* // Same provider: pass-through
|
|
123
|
+
* const spec = parseModelSpec('anthropic/claude-3-5-sonnet');
|
|
124
|
+
* const model = formatModelForProvider(spec, 'anthropic');
|
|
125
|
+
* console.log(model); // "claude-3-5-sonnet"
|
|
126
|
+
*
|
|
127
|
+
* // Different provider: error
|
|
128
|
+
* try {
|
|
129
|
+
* formatModelForProvider(spec, 'openai');
|
|
130
|
+
* } catch (error) {
|
|
131
|
+
* console.error((error as Error).message);
|
|
132
|
+
* // "Cannot translate anthropic/claude-3-5-sonnet to openai provider. ..."
|
|
133
|
+
* }
|
|
134
|
+
* ```
|
|
135
|
+
*
|
|
136
|
+
* @see {@link parseModelSpec} for creating ModelSpec objects
|
|
137
|
+
* @see {@link ModelSpec} for the input type structure
|
|
138
|
+
* @see {@link ModelProviderId} for the open provider set
|
|
139
|
+
*/
|
|
140
|
+
export function formatModelForProvider(spec, targetProvider) {
|
|
141
|
+
// Pass-through: same provider
|
|
142
|
+
if (spec.provider === targetProvider) {
|
|
143
|
+
return spec.model;
|
|
144
|
+
}
|
|
145
|
+
// Error: different providers (translation not supported in MVP).
|
|
146
|
+
throw new Error(`Cannot translate ${spec.provider}/${spec.model} to ${targetProvider} provider. ` +
|
|
147
|
+
'Cross-provider model translation is not supported.');
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=model-spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-spec.js","sourceRoot":"","sources":["../../src/utils/model-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,kBAAmC,WAAW;IAE9C,oFAAoF;IACpF,MAAM,GAAG,GAAG,KAAK,CAAC;IAElB,0CAA0C;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,mFAAmF,CACpF,CAAC;IACJ,CAAC;IAED,uFAAuF;IACvF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,6DAA6D;QAC7D,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;QAEpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,iCAAiC,OAAO,KAAK;gBAC7C,6DAA6D,CAC9D,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,iCAAiC,OAAO,KAAK;gBAC7C,+DAA+D,CAChE,CAAC;QACJ,CAAC;QAED,iFAAiF;QACjF,2FAA2F;QAC3F,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAC7C,CAAC;IAED,sFAAsF;IACtF,6EAA6E;IAC7E,MAAM,IAAI,KAAK,CACb,2CAA2C;QAC3C,sFAAsF,GAAG,IAAI,CAC9F,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAe,EACf,cAA+B;IAE/B,8BAA8B;IAC9B,IAAI,IAAI,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,iEAAiE;IACjE,MAAM,IAAI,KAAK,CACb,oBAAoB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,OAAO,cAAc,aAAa;QACjF,oDAAoD,CACrD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight Observable implementation for event streaming
|
|
3
|
+
* No external dependencies
|
|
4
|
+
*/
|
|
5
|
+
export interface Subscription {
|
|
6
|
+
unsubscribe(): void;
|
|
7
|
+
}
|
|
8
|
+
export interface Observer<T> {
|
|
9
|
+
next?: (value: T) => void;
|
|
10
|
+
error?: (error: unknown) => void;
|
|
11
|
+
complete?: () => void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Logger interface for Observable error logging
|
|
15
|
+
* Matches WorkflowLogger.error() signature for compatibility
|
|
16
|
+
*/
|
|
17
|
+
export interface ObservableLogger {
|
|
18
|
+
error(message: string, data?: unknown): void;
|
|
19
|
+
}
|
|
20
|
+
export declare class Observable<T> {
|
|
21
|
+
private subscribers;
|
|
22
|
+
private logger?;
|
|
23
|
+
/**
|
|
24
|
+
* Create a new Observable
|
|
25
|
+
* @param logger Optional logger for error reporting (falls back to console.error)
|
|
26
|
+
*/
|
|
27
|
+
constructor(logger?: ObservableLogger);
|
|
28
|
+
/**
|
|
29
|
+
* Subscribe to this observable
|
|
30
|
+
* @returns Subscription with unsubscribe method
|
|
31
|
+
*/
|
|
32
|
+
subscribe(observer: Observer<T>): Subscription;
|
|
33
|
+
/**
|
|
34
|
+
* Log errors using injected logger or fallback to console.error
|
|
35
|
+
*/
|
|
36
|
+
private logError;
|
|
37
|
+
/**
|
|
38
|
+
* Emit a value to all subscribers
|
|
39
|
+
*/
|
|
40
|
+
next(value: T): void;
|
|
41
|
+
/**
|
|
42
|
+
* Signal an error to all subscribers
|
|
43
|
+
*/
|
|
44
|
+
error(err: unknown): void;
|
|
45
|
+
/**
|
|
46
|
+
* Signal completion to all subscribers
|
|
47
|
+
*/
|
|
48
|
+
complete(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Get current subscriber count
|
|
51
|
+
*/
|
|
52
|
+
get subscriberCount(): number;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=observable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../../src/utils/observable.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9C;AAED,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,MAAM,CAAC,CAAmB;IAElC;;;OAGG;gBACS,MAAM,CAAC,EAAE,gBAAgB;IAIrC;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,YAAY;IAS9C;;OAEG;IACH,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAUpB;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAUzB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAWhB;;OAEG;IACH,IAAI,eAAe,IAAI,MAAM,CAE5B;CACF"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
export class Observable {
|
|
2
|
+
subscribers = new Set();
|
|
3
|
+
logger;
|
|
4
|
+
/**
|
|
5
|
+
* Create a new Observable
|
|
6
|
+
* @param logger Optional logger for error reporting (falls back to console.error)
|
|
7
|
+
*/
|
|
8
|
+
constructor(logger) {
|
|
9
|
+
this.logger = logger;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Subscribe to this observable
|
|
13
|
+
* @returns Subscription with unsubscribe method
|
|
14
|
+
*/
|
|
15
|
+
subscribe(observer) {
|
|
16
|
+
this.subscribers.add(observer);
|
|
17
|
+
return {
|
|
18
|
+
unsubscribe: () => {
|
|
19
|
+
this.subscribers.delete(observer);
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Log errors using injected logger or fallback to console.error
|
|
25
|
+
*/
|
|
26
|
+
logError(message, error) {
|
|
27
|
+
if (this.logger) {
|
|
28
|
+
this.logger.error(message, { error });
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// Fallback for backward compatibility
|
|
32
|
+
console.error(message, error);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Emit a value to all subscribers
|
|
37
|
+
*/
|
|
38
|
+
next(value) {
|
|
39
|
+
for (const subscriber of this.subscribers) {
|
|
40
|
+
try {
|
|
41
|
+
subscriber.next?.(value);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
this.logError('Observable subscriber error', err);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Signal an error to all subscribers
|
|
50
|
+
*/
|
|
51
|
+
error(err) {
|
|
52
|
+
for (const subscriber of this.subscribers) {
|
|
53
|
+
try {
|
|
54
|
+
subscriber.error?.(err);
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
this.logError('Observable error handler failed', e);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Signal completion to all subscribers
|
|
63
|
+
*/
|
|
64
|
+
complete() {
|
|
65
|
+
for (const subscriber of this.subscribers) {
|
|
66
|
+
try {
|
|
67
|
+
subscriber.complete?.();
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
this.logError('Observable complete handler failed', err);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
this.subscribers.clear();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get current subscriber count
|
|
77
|
+
*/
|
|
78
|
+
get subscriberCount() {
|
|
79
|
+
return this.subscribers.size;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=observable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.js","sourceRoot":"","sources":["../../src/utils/observable.ts"],"names":[],"mappings":"AAsBA,MAAM,OAAO,UAAU;IACb,WAAW,GAAqB,IAAI,GAAG,EAAE,CAAC;IAC1C,MAAM,CAAoB;IAElC;;;OAGG;IACH,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,QAAqB;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO;YACL,WAAW,EAAE,GAAG,EAAE;gBAChB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,OAAe,EAAE,KAAc;QAC9C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,KAAQ;QACX,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,QAAQ,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAY;QAChB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC1B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global provider configuration — DEPRECATED shim.
|
|
3
|
+
*
|
|
4
|
+
* @deprecated Since v1.2. All logic has moved to {@link ./harness-config.js}.
|
|
5
|
+
* Use `configureHarnesses` / `getGlobalHarnessConfig` / `resolveHarnessConfig` directly.
|
|
6
|
+
* This module remains only so existing imports (agent.ts, utils/index.ts, tests) keep
|
|
7
|
+
* resolving during the harness-vocabulary migration. Removed when P3.M1 rewires agent.ts.
|
|
8
|
+
*/
|
|
9
|
+
export { configureProviders, getGlobalProviderConfig, resolveProviderConfig, resetGlobalConfig, } from './harness-config.js';
|
|
10
|
+
//# sourceMappingURL=provider-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-config.d.ts","sourceRoot":"","sources":["../../src/utils/provider-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global provider configuration — DEPRECATED shim.
|
|
3
|
+
*
|
|
4
|
+
* @deprecated Since v1.2. All logic has moved to {@link ./harness-config.js}.
|
|
5
|
+
* Use `configureHarnesses` / `getGlobalHarnessConfig` / `resolveHarnessConfig` directly.
|
|
6
|
+
* This module remains only so existing imports (agent.ts, utils/index.ts, tests) keep
|
|
7
|
+
* resolving during the harness-vocabulary migration. Removed when P3.M1 rewires agent.ts.
|
|
8
|
+
*/
|
|
9
|
+
export { configureProviders, getGlobalProviderConfig, resolveProviderConfig, resetGlobalConfig, } from './harness-config.js';
|
|
10
|
+
//# sourceMappingURL=provider-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-config.js","sourceRoot":"","sources":["../../src/utils/provider-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error analysis utilities for step restart decisions
|
|
3
|
+
*
|
|
4
|
+
* Provides pure, side-effect-free functions for analyzing WorkflowError instances
|
|
5
|
+
* to determine if a step should be restarted, with structured restart analysis
|
|
6
|
+
* including reason, suggested action, and success probability estimation.
|
|
7
|
+
*
|
|
8
|
+
* @module restart-analysis
|
|
9
|
+
*/
|
|
10
|
+
import type { WorkflowError } from '../types/error.js';
|
|
11
|
+
import type { RestartAnalysis, ErrorCriterion } from '../types/restart.js';
|
|
12
|
+
/**
|
|
13
|
+
* Transient error codes that typically indicate temporary failures
|
|
14
|
+
*
|
|
15
|
+
* These errors are usually resolved by retrying the operation after a delay.
|
|
16
|
+
* The constant uses const assertion for type safety and better TypeScript inference.
|
|
17
|
+
*
|
|
18
|
+
* **Error Categories:**
|
|
19
|
+
* - `TIMEOUT`: Operation timed out waiting for response
|
|
20
|
+
* - `RATE_LIMIT`: API rate limit exceeded (HTTP 429)
|
|
21
|
+
* - `NETWORK_ERROR`: Network connectivity issues
|
|
22
|
+
* - `SERVICE_UNAVAILABLE`: Service temporarily unavailable (HTTP 503)
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* if (TRANSIENT_ERROR_SET.has('TIMEOUT')) {
|
|
27
|
+
* // This is a transient error, safe to retry
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
declare const TRANSIENT_ERROR_CODES: readonly ["TIMEOUT", "RATE_LIMIT", "NETWORK_ERROR", "SERVICE_UNAVAILABLE"];
|
|
32
|
+
/**
|
|
33
|
+
* Set-based lookup for O(1) transient error code checking
|
|
34
|
+
*
|
|
35
|
+
* Using a Set provides constant-time lookup performance compared to
|
|
36
|
+
* array includes() which is O(n). This is important for hot paths
|
|
37
|
+
* in retry logic.
|
|
38
|
+
*/
|
|
39
|
+
declare const TRANSIENT_ERROR_SET: Set<"TIMEOUT" | "RATE_LIMIT" | "NETWORK_ERROR" | "SERVICE_UNAVAILABLE">;
|
|
40
|
+
/**
|
|
41
|
+
* Analyze a WorkflowError to determine if a step should be restarted
|
|
42
|
+
*
|
|
43
|
+
* This is a pure, side-effect-free function that provides intelligent error
|
|
44
|
+
* analysis for step retry decisions. It returns a structured `RestartAnalysis`
|
|
45
|
+
* object with the restart decision, reasoning, suggested action, and success
|
|
46
|
+
* probability estimation.
|
|
47
|
+
*
|
|
48
|
+
* **Analysis Flow:**
|
|
49
|
+
* 1. Check `error.original?.recoverable` - if `false`, return abort immediately
|
|
50
|
+
* 2. Check if error is transient - if yes, return retry with high probability
|
|
51
|
+
* 3. If `stepOptions.retryOn` provided, iterate through criteria
|
|
52
|
+
* 4. For each criterion, call `matchesCriterion(error, criterion)`
|
|
53
|
+
* 5. If any criterion matches, return restart with analysis
|
|
54
|
+
* 6. Default: return no restart with abort action
|
|
55
|
+
*
|
|
56
|
+
* **Pure Function Guarantee:**
|
|
57
|
+
* - Deterministic: Same input always produces same output
|
|
58
|
+
* - No side effects: Doesn't modify inputs or external state
|
|
59
|
+
* - No external dependencies: Doesn't use Date.now(), Math.random(), etc.
|
|
60
|
+
*
|
|
61
|
+
* @param error - The WorkflowError to analyze
|
|
62
|
+
* @param stepOptions - Optional step configuration with retry criteria
|
|
63
|
+
* @returns Structured restart analysis with decision and reasoning
|
|
64
|
+
*
|
|
65
|
+
* @example Transient error - automatic restart
|
|
66
|
+
* ```ts
|
|
67
|
+
* const error: WorkflowError = {
|
|
68
|
+
* message: 'TIMEOUT',
|
|
69
|
+
* original: new Error('Request timeout'),
|
|
70
|
+
* workflowId: 'wf-123',
|
|
71
|
+
* state: {},
|
|
72
|
+
* logs: []
|
|
73
|
+
* };
|
|
74
|
+
*
|
|
75
|
+
* const analysis = analyzeErrorForRestart(error);
|
|
76
|
+
* // Returns:
|
|
77
|
+
* // {
|
|
78
|
+
* // shouldRestart: true,
|
|
79
|
+
* // reason: 'Transient error detected: TIMEOUT',
|
|
80
|
+
* // suggestedAction: 'retry',
|
|
81
|
+
* // estimatedSuccessProbability: 0.8
|
|
82
|
+
* // }
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* @example Non-recoverable error - abort
|
|
86
|
+
* ```ts
|
|
87
|
+
* const error: WorkflowError = {
|
|
88
|
+
* message: 'Invalid configuration',
|
|
89
|
+
* original: { recoverable: false },
|
|
90
|
+
* workflowId: 'wf-123',
|
|
91
|
+
* state: {},
|
|
92
|
+
* logs: []
|
|
93
|
+
* };
|
|
94
|
+
*
|
|
95
|
+
* const analysis = analyzeErrorForRestart(error);
|
|
96
|
+
* // Returns:
|
|
97
|
+
* // {
|
|
98
|
+
* // shouldRestart: false,
|
|
99
|
+
* // reason: 'Error is marked as non-recoverable: Invalid configuration',
|
|
100
|
+
* // suggestedAction: 'abort',
|
|
101
|
+
* // estimatedSuccessProbability: 0.0
|
|
102
|
+
* // }
|
|
103
|
+
* ```
|
|
104
|
+
*
|
|
105
|
+
* @example Custom retry criteria
|
|
106
|
+
* ```ts
|
|
107
|
+
* const error: WorkflowError = {
|
|
108
|
+
* message: 'ETIMEDOUT',
|
|
109
|
+
* original: new Error('Connection timeout'),
|
|
110
|
+
* workflowId: 'wf-123',
|
|
111
|
+
* state: {},
|
|
112
|
+
* logs: []
|
|
113
|
+
* };
|
|
114
|
+
*
|
|
115
|
+
* const stepOptions = {
|
|
116
|
+
* retryOn: [
|
|
117
|
+
* { code: 'ETIMEDOUT' },
|
|
118
|
+
* { code: /NETWORK_ERROR/ },
|
|
119
|
+
* { recoverable: true }
|
|
120
|
+
* ]
|
|
121
|
+
* };
|
|
122
|
+
*
|
|
123
|
+
* const analysis = analyzeErrorForRestart(error, stepOptions);
|
|
124
|
+
* // Returns:
|
|
125
|
+
* // {
|
|
126
|
+
* // shouldRestart: true,
|
|
127
|
+
* // reason: 'Error matches retry criteria: ETIMEDOUT',
|
|
128
|
+
* // suggestedAction: 'retry',
|
|
129
|
+
* // estimatedSuccessProbability: 0.5
|
|
130
|
+
* // }
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* @example No matching criteria - default abort
|
|
134
|
+
* ```ts
|
|
135
|
+
* const error: WorkflowError = {
|
|
136
|
+
* message: 'AUTH_FAILED',
|
|
137
|
+
* original: new Error('Authentication failed'),
|
|
138
|
+
* workflowId: 'wf-123',
|
|
139
|
+
* state: {},
|
|
140
|
+
* logs: []
|
|
141
|
+
* };
|
|
142
|
+
*
|
|
143
|
+
* const stepOptions = {
|
|
144
|
+
* retryOn: [{ code: 'TIMEOUT' }]
|
|
145
|
+
* };
|
|
146
|
+
*
|
|
147
|
+
* const analysis = analyzeErrorForRestart(error, stepOptions);
|
|
148
|
+
* // Returns:
|
|
149
|
+
* // {
|
|
150
|
+
* // shouldRestart: false,
|
|
151
|
+
* // reason: 'No matching retry criteria for error: AUTH_FAILED',
|
|
152
|
+
* // suggestedAction: 'abort',
|
|
153
|
+
* // estimatedSuccessProbability: 0.0
|
|
154
|
+
* // }
|
|
155
|
+
* ```
|
|
156
|
+
*
|
|
157
|
+
* @remarks
|
|
158
|
+
* **Integration with @Step Decorator:**
|
|
159
|
+
* This function is designed to be used by the @Step decorator's retry loop
|
|
160
|
+
* (src/decorators/step.ts:115-228) to provide structured analysis for
|
|
161
|
+
* stepRetry events.
|
|
162
|
+
*
|
|
163
|
+
* **ErrorCriterion Pattern:**
|
|
164
|
+
* The function follows the existing pattern in src/decorators/step.ts:40-65
|
|
165
|
+
* for matching criteria against errors.
|
|
166
|
+
*
|
|
167
|
+
* **Gotchas:**
|
|
168
|
+
* - WorkflowError doesn't have a 'code' property - uses message as fallback
|
|
169
|
+
* - Always check `typeof criterion === 'function'` FIRST for type safety
|
|
170
|
+
* - Check error.original?.recoverable for recoverable flag
|
|
171
|
+
*
|
|
172
|
+
* @see {@link RestartAnalysis} - Return type structure
|
|
173
|
+
* @see {@link ErrorCriterion} - Retry criterion types
|
|
174
|
+
* @see {@link WorkflowError} - Input error type
|
|
175
|
+
*/
|
|
176
|
+
export declare function analyzeErrorForRestart(error: WorkflowError, stepOptions?: {
|
|
177
|
+
retryOn?: ErrorCriterion[];
|
|
178
|
+
}): RestartAnalysis;
|
|
179
|
+
/**
|
|
180
|
+
* Transient error codes constant
|
|
181
|
+
*
|
|
182
|
+
* Exported for testing and external use. Use TRANSIENT_ERROR_SET
|
|
183
|
+
* for O(1) lookup performance.
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```ts
|
|
187
|
+
* import { TRANSIENT_ERROR_CODES } from './restart-analysis.js';
|
|
188
|
+
*
|
|
189
|
+
* if (TRANSIENT_ERROR_CODES.includes('TIMEOUT')) {
|
|
190
|
+
* // Handle transient error
|
|
191
|
+
* }
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
export { TRANSIENT_ERROR_CODES };
|
|
195
|
+
/**
|
|
196
|
+
* Transient error code set for O(1) lookup
|
|
197
|
+
*
|
|
198
|
+
* Exported for testing and external use. Prefer this over
|
|
199
|
+
* TRANSIENT_ERROR_CODES for performance-critical code.
|
|
200
|
+
*/
|
|
201
|
+
export { TRANSIENT_ERROR_SET };
|
|
202
|
+
//# sourceMappingURL=restart-analysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart-analysis.d.ts","sourceRoot":"","sources":["../../src/utils/restart-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE3E;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,qBAAqB,4EAKjB,CAAC;AAEX;;;;;;GAMG;AACH,QAAA,MAAM,mBAAmB,yEAAiC,CAAC;AAmM3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,EACpB,WAAW,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,cAAc,EAAE,CAAA;CAAE,GAC3C,eAAe,CA2CjB;AAED;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC;;;;;GAKG;AACH,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|