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,265 +0,0 @@
|
|
|
1
|
-
# External Best Practices for Workflow Name Validation
|
|
2
|
-
|
|
3
|
-
## Industry Standards Comparison
|
|
4
|
-
|
|
5
|
-
### 1. Kubernetes Naming Standards
|
|
6
|
-
**Source:** [Kubernetes Documentation - Names](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/)
|
|
7
|
-
|
|
8
|
-
| Requirement | Value |
|
|
9
|
-
|-------------|-------|
|
|
10
|
-
| Max Length | 253 characters |
|
|
11
|
-
| Allowed Characters | Lowercase alphanumeric, `-`, `.` |
|
|
12
|
-
| Must Start/End With | Alphanumeric |
|
|
13
|
-
| Pattern | `[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*` |
|
|
14
|
-
| Rule | Must be valid DNS subdomain name |
|
|
15
|
-
|
|
16
|
-
### 2. Apache Airflow DAG Naming
|
|
17
|
-
**Source:** [Airflow DAG Documentation](https://airflow.apache.org/docs/apache-airflow/stable/concepts/dags.html)
|
|
18
|
-
|
|
19
|
-
| Requirement | Value |
|
|
20
|
-
|-------------|-------|
|
|
21
|
-
| Characters | Alphanumeric, underscores only |
|
|
22
|
-
| Spaces | Not allowed |
|
|
23
|
-
| Pattern | `^[a-zA-Z0-9_]+$` |
|
|
24
|
-
| Uniqueness | Required across all DAGs |
|
|
25
|
-
| Case | Case-sensitive |
|
|
26
|
-
| File Naming | Must match Python module naming (no hyphens) |
|
|
27
|
-
|
|
28
|
-
### 3. AWS Step Functions State Machine Names
|
|
29
|
-
**Source:** [AWS Step Functions Documentation](https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-state-machine-structure.html)
|
|
30
|
-
|
|
31
|
-
| Requirement | Value |
|
|
32
|
-
|-------------|-------|
|
|
33
|
-
| Min Length | 1 character |
|
|
34
|
-
| Max Length | 80 characters |
|
|
35
|
-
| Allowed Characters | Alphanumeric, hyphens, underscores |
|
|
36
|
-
| Pattern | `^[a-zA-Z0-9_-]+$` |
|
|
37
|
-
| Uniqueness | Required within account/region |
|
|
38
|
-
| Case | Case-insensitive |
|
|
39
|
-
|
|
40
|
-
### 4. GitHub Actions Workflow Names
|
|
41
|
-
**Source:** [GitHub Actions Documentation](https://docs.github.com/en/actions/using-workflows)
|
|
42
|
-
|
|
43
|
-
| Requirement | Value |
|
|
44
|
-
|-------------|-------|
|
|
45
|
-
| Characters | Most printable characters allowed |
|
|
46
|
-
| Purpose | Display name for UI |
|
|
47
|
-
| Format | String value in YAML |
|
|
48
|
-
| Fallback | Uses filename if name omitted |
|
|
49
|
-
|
|
50
|
-
### 5. Temporal Workflow Names
|
|
51
|
-
**Source:** [Temporal TypeScript Documentation](https://docs.temporal.io/docs/typescript/workflows)
|
|
52
|
-
|
|
53
|
-
| Requirement | Value |
|
|
54
|
-
|-------------|-------|
|
|
55
|
-
| Pattern | Valid TypeScript identifier |
|
|
56
|
-
| Regex | `^[a-zA-Z_$][a-zA-Z0-9_$]*$` |
|
|
57
|
-
| Convention | PascalCase or camelCase |
|
|
58
|
-
| Uniqueness | Scoped to namespace/task queue |
|
|
59
|
-
|
|
60
|
-
## Common Validation Patterns
|
|
61
|
-
|
|
62
|
-
### Pattern 1: Strict Identifier (Kubernetes-style)
|
|
63
|
-
```typescript
|
|
64
|
-
const STRICT_IDENTIFIER = /^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$/;
|
|
65
|
-
|
|
66
|
-
function validateStrict(name: string): boolean {
|
|
67
|
-
return (
|
|
68
|
-
name.length >= 1 &&
|
|
69
|
-
name.length <= 253 &&
|
|
70
|
-
STRICT_IDENTIFIER.test(name)
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Pattern 2: Alphanumeric with Underscores (Airflow-style)
|
|
76
|
-
```typescript
|
|
77
|
-
const SNAKE_CASE_IDENTIFIER = /^[a-zA-Z0-9_]+$/;
|
|
78
|
-
|
|
79
|
-
function validateSnakeCase(name: string): boolean {
|
|
80
|
-
return name.length > 0 && SNAKE_CASE_IDENTIFIER.test(name);
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### Pattern 3: Flexible Identifier (AWS-style)
|
|
85
|
-
```typescript
|
|
86
|
-
const FLEXIBLE_IDENTIFIER = /^[a-zA-Z0-9_-]+$/;
|
|
87
|
-
|
|
88
|
-
function validateFlexible(name: string): boolean {
|
|
89
|
-
return (
|
|
90
|
-
name.length >= 1 &&
|
|
91
|
-
name.length <= 80 &&
|
|
92
|
-
FLEXIBLE_IDENTIFIER.test(name)
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### Pattern 4: TypeScript/JavaScript Identifier
|
|
98
|
-
```typescript
|
|
99
|
-
const JS_IDENTIFIER = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
|
|
100
|
-
|
|
101
|
-
function validateJSIdentifier(name: string): boolean {
|
|
102
|
-
return JS_IDENTIFIER.test(name);
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
## Best Practice Summary
|
|
107
|
-
|
|
108
|
-
### Length Limits
|
|
109
|
-
| System | Min | Max | Recommendation for Groundswell |
|
|
110
|
-
|--------|-----|-----|--------------------------------|
|
|
111
|
-
| Kubernetes | 1 | 253 | |
|
|
112
|
-
| Airflow | - | - | |
|
|
113
|
-
| AWS | 1 | 80 | **1-100** (reasonable balance) |
|
|
114
|
-
| GitHub | - | - | |
|
|
115
|
-
|
|
116
|
-
### Character Sets
|
|
117
|
-
| System | Characters | Restrictiveness |
|
|
118
|
-
|--------|------------|-----------------|
|
|
119
|
-
| Kubernetes | `[a-z0-9.-]` | Most restrictive |
|
|
120
|
-
| Airflow | `[a-zA-Z0-9_]` | Moderate |
|
|
121
|
-
| AWS | `[a-zA-Z0-9_-]` | Moderate |
|
|
122
|
-
| GitHub | Most printable | Permissive |
|
|
123
|
-
| Temporal | `[a-zA-Z0-9_$]` | Language-specific |
|
|
124
|
-
|
|
125
|
-
### Common Rules Across All Systems
|
|
126
|
-
|
|
127
|
-
1. **Non-empty:** All systems require at least 1 character
|
|
128
|
-
2. **No spaces:** Spaces are universally rejected
|
|
129
|
-
3. **ASCII-only:** Unicode not typically allowed
|
|
130
|
-
4. **Uniqueness:** Required within appropriate scope
|
|
131
|
-
5. **No reserved words:** System keywords avoided
|
|
132
|
-
|
|
133
|
-
## TypeScript Implementation Patterns
|
|
134
|
-
|
|
135
|
-
### Basic Validation Function
|
|
136
|
-
```typescript
|
|
137
|
-
interface ValidationResult {
|
|
138
|
-
valid: boolean;
|
|
139
|
-
error?: string;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
function validateWorkflowName(name: unknown): ValidationResult {
|
|
143
|
-
// Type check
|
|
144
|
-
if (typeof name !== 'string') {
|
|
145
|
-
return { valid: false, error: 'Workflow name must be a string' };
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// Empty check
|
|
149
|
-
if (name.length === 0) {
|
|
150
|
-
return { valid: false, error: 'Workflow name cannot be empty' };
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// Whitespace check
|
|
154
|
-
if (name.trim().length === 0) {
|
|
155
|
-
return { valid: false, error: 'Workflow name cannot be whitespace only' };
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// Length check
|
|
159
|
-
if (name.length > 100) {
|
|
160
|
-
return { valid: false, error: 'Workflow name cannot exceed 100 characters' };
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return { valid: true };
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Branded Type Pattern (Type-safe)
|
|
168
|
-
```typescript
|
|
169
|
-
// Type for validated workflow names
|
|
170
|
-
type WorkflowName = string & { readonly __brand: unique symbol };
|
|
171
|
-
|
|
172
|
-
function toWorkflowName(name: unknown): WorkflowName {
|
|
173
|
-
const result = validateWorkflowName(name);
|
|
174
|
-
if (!result.valid) {
|
|
175
|
-
throw new Error(result.error);
|
|
176
|
-
}
|
|
177
|
-
return name as WorkflowName;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// Usage in Workflow class
|
|
181
|
-
class Workflow {
|
|
182
|
-
constructor(name: WorkflowName | string) {
|
|
183
|
-
// If passed as string, validate
|
|
184
|
-
const validated = typeof name === 'string' ? toWorkflowName(name) : name;
|
|
185
|
-
this.node = { name: validated, ... };
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### Regex-based Validation
|
|
191
|
-
```typescript
|
|
192
|
-
// Recommended pattern for Groundswell
|
|
193
|
-
const WORKFLOW_NAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9_-]*[a-zA-Z0-9]$/;
|
|
194
|
-
|
|
195
|
-
// Or simpler: just ensure non-empty with no control characters
|
|
196
|
-
const SIMPLE_PATTERN = /^[^\x00-\x1F\x7F]+$/;
|
|
197
|
-
|
|
198
|
-
function validateWithPattern(name: string): boolean {
|
|
199
|
-
return (
|
|
200
|
-
name.length >= 1 &&
|
|
201
|
-
name.length <= 100 &&
|
|
202
|
-
SIMPLE_PATTERN.test(name)
|
|
203
|
-
);
|
|
204
|
-
}
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
## Recommendation for Groundswell
|
|
208
|
-
|
|
209
|
-
Based on industry standards and codebase patterns:
|
|
210
|
-
|
|
211
|
-
### Option A: Minimal Validation (Recommended for initial implementation)
|
|
212
|
-
```typescript
|
|
213
|
-
// Rules:
|
|
214
|
-
// 1. Must be a string
|
|
215
|
-
// 2. Must be non-empty after trimming
|
|
216
|
-
// 3. No length limit (or very generous limit)
|
|
217
|
-
|
|
218
|
-
function validateWorkflowName(name: unknown): string {
|
|
219
|
-
if (typeof name !== 'string') {
|
|
220
|
-
throw new Error('Workflow name must be a string');
|
|
221
|
-
}
|
|
222
|
-
if (name.trim().length === 0) {
|
|
223
|
-
throw new Error('Workflow name cannot be empty or whitespace only');
|
|
224
|
-
}
|
|
225
|
-
return name.trim();
|
|
226
|
-
}
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
### Option B: Moderate Validation (Follows AWS/Airflow style)
|
|
230
|
-
```typescript
|
|
231
|
-
// Rules:
|
|
232
|
-
// 1. Non-empty string
|
|
233
|
-
// 2. 1-100 characters
|
|
234
|
-
// 3. Alphanumeric, hyphens, underscores only
|
|
235
|
-
// 4. Must start/end with alphanumeric
|
|
236
|
-
|
|
237
|
-
const WORKFLOW_NAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9_-]*[a-zA-Z0-9]$/;
|
|
238
|
-
|
|
239
|
-
function validateWorkflowName(name: unknown): string {
|
|
240
|
-
if (typeof name !== 'string') {
|
|
241
|
-
throw new Error('Workflow name must be a string');
|
|
242
|
-
}
|
|
243
|
-
const trimmed = name.trim();
|
|
244
|
-
if (trimmed.length === 0 || trimmed.length > 100) {
|
|
245
|
-
throw new Error('Workflow name must be 1-100 characters');
|
|
246
|
-
}
|
|
247
|
-
if (!WORKFLOW_NAME_PATTERN.test(trimmed)) {
|
|
248
|
-
throw new Error(
|
|
249
|
-
'Workflow name must contain only alphanumeric characters, hyphens, and underscores, ' +
|
|
250
|
-
'and must start and end with an alphanumeric character'
|
|
251
|
-
);
|
|
252
|
-
}
|
|
253
|
-
return trimmed;
|
|
254
|
-
}
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
## External References
|
|
258
|
-
|
|
259
|
-
| System | Documentation URL |
|
|
260
|
-
|--------|-------------------|
|
|
261
|
-
| Kubernetes Names | https://kubernetes.io/docs/concepts/overview/working-with-objects/names/ |
|
|
262
|
-
| Apache Airflow DAGs | https://airflow.apache.org/docs/apache-airflow/stable/concepts/dags.html |
|
|
263
|
-
| AWS Step Functions | https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-state-machine-structure.html |
|
|
264
|
-
| GitHub Actions | https://docs.github.com/en/actions/using-workflows |
|
|
265
|
-
| Temporal Workflows | https://docs.temporal.io/docs/typescript/workflows |
|
package/plan/001_d3bb02af4886/bugfix/001_e8e04329daf3/docs/P1M3T3S1/research/validation_patterns.md
DELETED
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
# Validation Patterns in Groundswell Codebase
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
This document catalogs validation patterns used throughout the Groundswell codebase to inform the implementation of workflow name validation.
|
|
6
|
-
|
|
7
|
-
## Parameter Validation Patterns
|
|
8
|
-
|
|
9
|
-
### Pattern 1: Required Context Validation
|
|
10
|
-
**File:** `src/context.ts:42-51`
|
|
11
|
-
|
|
12
|
-
```typescript
|
|
13
|
-
export function requireExecutionContext(
|
|
14
|
-
operation: string
|
|
15
|
-
): AgentExecutionContext {
|
|
16
|
-
const context = executionContext.getStore();
|
|
17
|
-
if (!context) {
|
|
18
|
-
throw new Error(
|
|
19
|
-
`${operation} called outside of workflow context. ` +
|
|
20
|
-
`Agent/Prompt operations must be executed within a workflow step.`
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
return context;
|
|
24
|
-
}
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
**Key Characteristics:**
|
|
28
|
-
- Null/undefined check with `!context`
|
|
29
|
-
- Descriptive error message with context
|
|
30
|
-
- Includes operation name in error
|
|
31
|
-
- Suggests remedy ("must be executed within...")
|
|
32
|
-
|
|
33
|
-
### Pattern 2: Unique Registration Validation
|
|
34
|
-
**File:** `src/core/mcp-handler.ts:62-67`
|
|
35
|
-
|
|
36
|
-
```typescript
|
|
37
|
-
public registerServer(server: MCPServer): void {
|
|
38
|
-
if (this.servers.has(server.name)) {
|
|
39
|
-
throw new Error(`MCP server '${server.name}' is already registered`);
|
|
40
|
-
}
|
|
41
|
-
this.servers.set(server.name, server);
|
|
42
|
-
}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
**Key Characteristics:**
|
|
46
|
-
- Pre-operation validation check
|
|
47
|
-
- Uses `has()` to check existence
|
|
48
|
-
- Error includes the conflicting value
|
|
49
|
-
- Specific error message for clarity
|
|
50
|
-
|
|
51
|
-
### Pattern 3: Circular Reference Detection
|
|
52
|
-
**File:** `src/core/workflow.ts:186-191`
|
|
53
|
-
|
|
54
|
-
```typescript
|
|
55
|
-
if (visited.has(current)) {
|
|
56
|
-
throw new Error('Circular parent-child relationship detected');
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**Key Characteristics:**
|
|
61
|
-
- Cycle detection using Set
|
|
62
|
-
- Concise error message
|
|
63
|
-
- Uses generic error type (not custom)
|
|
64
|
-
|
|
65
|
-
### Pattern 4: Parent Validation with Detailed Error
|
|
66
|
-
**File:** `src/core/workflow.ts:272-279`
|
|
67
|
-
|
|
68
|
-
```typescript
|
|
69
|
-
if (child.parent !== null && child.parent !== this) {
|
|
70
|
-
const errorMessage =
|
|
71
|
-
`Child '${child.node.name}' already has a parent '${child.parent.node.name}'. ` +
|
|
72
|
-
`A workflow can only have one parent. ` +
|
|
73
|
-
`Use detachChild() on '${child.parent.node.name}' first if you need to reparent.`;
|
|
74
|
-
console.error(errorMessage);
|
|
75
|
-
throw new Error(errorMessage);
|
|
76
|
-
}
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
**Key Characteristics:**
|
|
80
|
-
- Multi-line error message for clarity
|
|
81
|
-
- Includes actual values (names)
|
|
82
|
-
- Explains the constraint
|
|
83
|
-
- Provides actionable guidance
|
|
84
|
-
- Logs to console.error before throwing
|
|
85
|
-
|
|
86
|
-
### Pattern 5: Input Existence Check
|
|
87
|
-
**File:** `src/core/workflow.ts:320-323`
|
|
88
|
-
|
|
89
|
-
```typescript
|
|
90
|
-
if (!childOrName) {
|
|
91
|
-
throw new Error('Child workflow or name is required');
|
|
92
|
-
}
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
**Key Characteristics:**
|
|
96
|
-
- Simple existence check
|
|
97
|
-
- Clear error message
|
|
98
|
-
- Uses negated condition
|
|
99
|
-
|
|
100
|
-
## Test Patterns for Validation
|
|
101
|
-
|
|
102
|
-
### Pattern 1: TDD-style Error Testing
|
|
103
|
-
**File:** `src/__tests__/adversarial/circular-reference.test.ts:23-29`
|
|
104
|
-
|
|
105
|
-
```typescript
|
|
106
|
-
it('should throw when attaching immediate parent as child', () => {
|
|
107
|
-
const parent = new SimpleWorkflow('Parent');
|
|
108
|
-
const child = new SimpleWorkflow('Child', parent);
|
|
109
|
-
|
|
110
|
-
expect(() => child.attachChild(parent)).toThrow(/circular|cycle|ancestor/i);
|
|
111
|
-
});
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
**Key Characteristics:**
|
|
115
|
-
- Setup with valid state
|
|
116
|
-
- Test the invalid operation
|
|
117
|
-
- Use regex to match error message keywords
|
|
118
|
-
- Case-insensitive matching
|
|
119
|
-
|
|
120
|
-
### Pattern 2: Specific Error Message Testing
|
|
121
|
-
**File:** `src/__tests__/unit/workflow-detachChild.test.ts:22-26`
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
it('should throw error when child is not attached to parent', () => {
|
|
125
|
-
const parent = new SimpleWorkflow('Parent');
|
|
126
|
-
const child = new SimpleWorkflow('Child');
|
|
127
|
-
|
|
128
|
-
expect(() => parent.detachChild(child)).toThrow(/not attached/i);
|
|
129
|
-
});
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
**Key Characteristics:**
|
|
133
|
-
- Minimal setup
|
|
134
|
-
- Direct test of error condition
|
|
135
|
-
- Specific error message assertion
|
|
136
|
-
|
|
137
|
-
### Pattern 3: Constructor Parameter Testing
|
|
138
|
-
**File:** `src/__tests__/unit/workflow.test.ts:20-28`
|
|
139
|
-
|
|
140
|
-
```typescript
|
|
141
|
-
it('should use class name as default workflow name', () => {
|
|
142
|
-
const wf = new SimpleWorkflow();
|
|
143
|
-
expect(wf.getNode().name).toBe('SimpleWorkflow');
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
it('should use custom name when provided', () => {
|
|
147
|
-
const wf = new SimpleWorkflow('CustomName');
|
|
148
|
-
expect(wf.getNode().name).toBe('CustomName');
|
|
149
|
-
});
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
**Key Characteristics:**
|
|
153
|
-
- Tests both default and custom behavior
|
|
154
|
-
- Clear expected values
|
|
155
|
-
- Uses getter method (`getNode()`)
|
|
156
|
-
- Separate tests for each case
|
|
157
|
-
|
|
158
|
-
### Pattern 4: Edge Case Testing
|
|
159
|
-
**File:** `src/__tests__/adversarial/edge-case.test.ts:107-117`
|
|
160
|
-
|
|
161
|
-
```typescript
|
|
162
|
-
it('should handle empty string workflow name', async () => {
|
|
163
|
-
const workflow = new TestWorkflow('');
|
|
164
|
-
expect(workflow.node.name).toBe('');
|
|
165
|
-
await workflow.run();
|
|
166
|
-
});
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
**Key Characteristics:**
|
|
170
|
-
- Tests boundary condition
|
|
171
|
-
- Tests both property and execution
|
|
172
|
-
- Async test when execution is involved
|
|
173
|
-
|
|
174
|
-
## Error Message Patterns
|
|
175
|
-
|
|
176
|
-
### Descriptive Error Format
|
|
177
|
-
```typescript
|
|
178
|
-
// Pattern: {What} {Why} {Context} {Guidance}
|
|
179
|
-
throw new Error(
|
|
180
|
-
`${operation} called outside of workflow context. ` +
|
|
181
|
-
`Agent/Prompt operations must be executed within a workflow step.`
|
|
182
|
-
);
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
### Value-Including Error Format
|
|
186
|
-
```typescript
|
|
187
|
-
// Pattern: Include the actual invalid value in quotes
|
|
188
|
-
throw new Error(`MCP server '${server.name}' is already registered`);
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### Multi-Line Guidance Format
|
|
192
|
-
```typescript
|
|
193
|
-
// Pattern: Explain the constraint + provide action
|
|
194
|
-
const errorMessage =
|
|
195
|
-
`Child '${child.node.name}' already has a parent '${child.parent.node.name}'. ` +
|
|
196
|
-
`A workflow can only have one parent. ` +
|
|
197
|
-
`Use detachChild() on '${child.parent.node.name}' first if you need to reparent.`;
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
## Implementation Recommendations
|
|
201
|
-
|
|
202
|
-
### Validation Function Pattern
|
|
203
|
-
Based on codebase patterns, workflow name validation should:
|
|
204
|
-
|
|
205
|
-
```typescript
|
|
206
|
-
// Location: In Workflow constructor, after config is set
|
|
207
|
-
private validateName(name: unknown): string {
|
|
208
|
-
// Type check (Pattern from requireExecutionContext)
|
|
209
|
-
if (typeof name !== 'string') {
|
|
210
|
-
throw new Error(`Workflow name must be a string, received ${typeof name}`);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// Empty check (Pattern from registerServer)
|
|
214
|
-
if (name.trim().length === 0) {
|
|
215
|
-
throw new Error('Workflow name cannot be empty or whitespace only');
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
// Optional: Length check
|
|
219
|
-
if (name.length > 100) {
|
|
220
|
-
throw new Error('Workflow name cannot exceed 100 characters');
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
return name;
|
|
224
|
-
}
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
### Test Pattern to Follow
|
|
228
|
-
```typescript
|
|
229
|
-
describe('Workflow Name Validation', () => {
|
|
230
|
-
// Test empty string
|
|
231
|
-
it('should reject empty string name', () => {
|
|
232
|
-
expect(() => new SimpleWorkflow(''))
|
|
233
|
-
.toThrow(/cannot be empty|whitespace only/i);
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
// Test whitespace only
|
|
237
|
-
it('should reject whitespace-only name', () => {
|
|
238
|
-
expect(() => new SimpleWorkflow(' '))
|
|
239
|
-
.toThrow(/whitespace only/i);
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
// Test valid name still works
|
|
243
|
-
it('should accept valid name', () => {
|
|
244
|
-
const wf = new SimpleWorkflow('ValidWorkflow');
|
|
245
|
-
expect(wf.node.name).toBe('ValidWorkflow');
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
// Test default class name still works
|
|
249
|
-
it('should use class name when not provided', () => {
|
|
250
|
-
const wf = new SimpleWorkflow();
|
|
251
|
-
expect(wf.node.name).toBe('SimpleWorkflow');
|
|
252
|
-
});
|
|
253
|
-
});
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
## Key Gotchas
|
|
257
|
-
|
|
258
|
-
1. **No custom error classes:** Codebase uses standard `Error` - follow this pattern
|
|
259
|
-
2. **Error messages include values:** Always include the invalid value in quotes
|
|
260
|
-
3. **Console.error before throw:** Some places log before throwing (Pattern 4)
|
|
261
|
-
4. **Regex matching in tests:** Use case-insensitive regex with keywords
|
|
262
|
-
5. **Separate test files:** Validation tests go in adversarial/ or unit/ directory
|
|
263
|
-
|
|
264
|
-
## Files to Reference for Implementation
|
|
265
|
-
|
|
266
|
-
| Purpose | File | Lines |
|
|
267
|
-
|---------|------|-------|
|
|
268
|
-
| Constructor location | src/core/workflow.ts | 83-108 |
|
|
269
|
-
| Validation examples | src/context.ts | 42-51 |
|
|
270
|
-
| Error examples | src/core/workflow.ts | 272-279 |
|
|
271
|
-
| Test patterns | src/__tests__/adversarial/ | Various |
|
|
272
|
-
| Existing name tests | src/__tests__/unit/workflow.test.ts | 20-28 |
|
|
273
|
-
| Current empty name test | src/__tests__/adversarial/edge-case.test.ts | 107-117 |
|