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,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session serialization utilities
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
* @remarks
|
|
6
|
+
* Provides safe serialization/deserialization of SessionState objects
|
|
7
|
+
* containing SDK message types with circular reference handling.
|
|
8
|
+
*
|
|
9
|
+
* Handles edge cases including:
|
|
10
|
+
* - Circular references from application code
|
|
11
|
+
* - Non-serializable values (functions, Symbols)
|
|
12
|
+
* - Unknown type fields in SDK messages
|
|
13
|
+
* - Type validation during deserialization
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { serializeSession, deserializeSession } from 'groundswell';
|
|
18
|
+
*
|
|
19
|
+
* const state: SessionState = { history: [], lastResult: null };
|
|
20
|
+
* const json = serializeSession(state);
|
|
21
|
+
* const restored = deserializeSession(json);
|
|
22
|
+
* console.log(restored); // { history: [], lastResult: null }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Error thrown when session serialization fails
|
|
27
|
+
*
|
|
28
|
+
* @remarks
|
|
29
|
+
* Provides detailed error context for debugging serialization issues.
|
|
30
|
+
* Includes the property path and value that caused the failure.
|
|
31
|
+
*
|
|
32
|
+
* @public
|
|
33
|
+
*/
|
|
34
|
+
export class SessionSerializationError extends Error {
|
|
35
|
+
path;
|
|
36
|
+
value;
|
|
37
|
+
/**
|
|
38
|
+
* Creates a new SessionSerializationError
|
|
39
|
+
*
|
|
40
|
+
* @param message - Human-readable error message
|
|
41
|
+
* @param path - Property path where the error occurred (e.g., "history.0.tool_use_result")
|
|
42
|
+
* @param value - The value that caused the serialization failure
|
|
43
|
+
*/
|
|
44
|
+
constructor(message, path, value) {
|
|
45
|
+
super(message);
|
|
46
|
+
this.path = path;
|
|
47
|
+
this.value = value;
|
|
48
|
+
this.name = "SessionSerializationError";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Creates a custom replacer function for JSON.stringify
|
|
53
|
+
*
|
|
54
|
+
* @remarks
|
|
55
|
+
* The replacer handles non-serializable values and circular references:
|
|
56
|
+
* - Functions become `[Function:name]` strings
|
|
57
|
+
* - Symbols become `[Symbol:description]` strings
|
|
58
|
+
* - Circular references become `[Circular:key]` strings
|
|
59
|
+
* - Undefined becomes null (JSON-compatible)
|
|
60
|
+
* - Uses WeakSet for circular reference tracking to avoid memory leaks
|
|
61
|
+
*
|
|
62
|
+
* @returns A replacer function for use with JSON.stringify
|
|
63
|
+
*
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
function createReplacer() {
|
|
67
|
+
const seen = new WeakSet();
|
|
68
|
+
return (key, value) => {
|
|
69
|
+
// CRITICAL: Check circular references FIRST
|
|
70
|
+
// Using WeakSet allows garbage collection of tracked objects
|
|
71
|
+
if (typeof value === "object" && value !== null) {
|
|
72
|
+
if (seen.has(value)) {
|
|
73
|
+
return `[Circular:${key}]`;
|
|
74
|
+
}
|
|
75
|
+
seen.add(value);
|
|
76
|
+
}
|
|
77
|
+
// Handle functions - cannot be serialized to JSON
|
|
78
|
+
if (typeof value === "function") {
|
|
79
|
+
return `[Function:${value.name || "anonymous"}]`;
|
|
80
|
+
}
|
|
81
|
+
// Handle symbols - cannot be serialized to JSON
|
|
82
|
+
if (typeof value === "symbol") {
|
|
83
|
+
return `[Symbol:${value.description || "unknown"}]`;
|
|
84
|
+
}
|
|
85
|
+
// Handle undefined - becomes null in JSON
|
|
86
|
+
if (value === undefined) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return value;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Type guard for validating SessionState structure
|
|
94
|
+
*
|
|
95
|
+
* @remarks
|
|
96
|
+
* Validates that the parsed object has the required structure
|
|
97
|
+
* for a SessionState. Performs runtime type checking to ensure
|
|
98
|
+
* data integrity during deserialization.
|
|
99
|
+
*
|
|
100
|
+
* @param value - The value to validate
|
|
101
|
+
* @returns True if the value is a valid SessionState structure
|
|
102
|
+
*
|
|
103
|
+
* @internal
|
|
104
|
+
*/
|
|
105
|
+
function isValidSessionState(value) {
|
|
106
|
+
// Check if value is an object
|
|
107
|
+
if (typeof value !== "object" || value === null) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
const obj = value;
|
|
111
|
+
// Check for required history property
|
|
112
|
+
if (!("history" in obj) || !Array.isArray(obj.history)) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
// Check for required lastResult property
|
|
116
|
+
if (!("lastResult" in obj)) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
// lastResult can be null or an object
|
|
120
|
+
if (obj.lastResult !== null && typeof obj.lastResult !== "object") {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Serialize a SessionState to JSON string
|
|
127
|
+
*
|
|
128
|
+
* @remarks
|
|
129
|
+
* Converts a SessionState object to a JSON string with special handling
|
|
130
|
+
* for non-serializable values and circular references. The resulting JSON
|
|
131
|
+
* is pretty-printed with 2-space indentation for readability.
|
|
132
|
+
*
|
|
133
|
+
* Handles edge cases from SDK message types:
|
|
134
|
+
* - `SDKUserMessage.tool_use_result` (unknown type)
|
|
135
|
+
* - `SDKResultMessage.result` (unknown type)
|
|
136
|
+
* - `SDKResultMessage.structured_output` (unknown type)
|
|
137
|
+
*
|
|
138
|
+
* Throws {@link SessionSerializationError} if serialization fails,
|
|
139
|
+
* with contextual information about the failure.
|
|
140
|
+
*
|
|
141
|
+
* @param state - The session state to serialize
|
|
142
|
+
* @returns JSON string representation of the session
|
|
143
|
+
* @throws {SessionSerializationError} If serialization fails
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```ts
|
|
147
|
+
* import { serializeSession, deserializeSession } from 'groundswell';
|
|
148
|
+
*
|
|
149
|
+
* const state: SessionState = {
|
|
150
|
+
* history: [],
|
|
151
|
+
* lastResult: null
|
|
152
|
+
* };
|
|
153
|
+
*
|
|
154
|
+
* const json = serializeSession(state);
|
|
155
|
+
* console.log(json); // Pretty-printed JSON string
|
|
156
|
+
*
|
|
157
|
+
* // Round-trip serialization
|
|
158
|
+
* const restored = deserializeSession(json);
|
|
159
|
+
* expect(restored).toEqual(state);
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
export function serializeSession(state) {
|
|
163
|
+
try {
|
|
164
|
+
const replacer = createReplacer();
|
|
165
|
+
// Pretty-print with 2-space indentation (matches session-store.ts pattern)
|
|
166
|
+
return JSON.stringify(state, replacer, 2);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
throw new SessionSerializationError(`Failed to serialize session: ${error instanceof Error ? error.message : "Unknown error"}`, "root", state);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Reconstruct a SessionState from JSON string
|
|
174
|
+
*
|
|
175
|
+
* @remarks
|
|
176
|
+
* Parses a JSON string and validates that it has the correct SessionState
|
|
177
|
+
* structure. Performs runtime type validation to ensure data integrity
|
|
178
|
+
* and catch corrupted or malformed session data early.
|
|
179
|
+
*
|
|
180
|
+
* Throws {@link SessionSerializationError} if deserialization fails or
|
|
181
|
+
* if the data doesn't match the expected SessionState structure.
|
|
182
|
+
*
|
|
183
|
+
* @param data - JSON string representation of the session
|
|
184
|
+
* @returns Reconstructed SessionState object
|
|
185
|
+
* @throws {SessionSerializationError} If deserialization fails or data is invalid
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```ts
|
|
189
|
+
* import { serializeSession, deserializeSession } from 'groundswell';
|
|
190
|
+
*
|
|
191
|
+
* const state: SessionState = {
|
|
192
|
+
* history: [],
|
|
193
|
+
* lastResult: null
|
|
194
|
+
* };
|
|
195
|
+
*
|
|
196
|
+
* const json = serializeSession(state);
|
|
197
|
+
* const restored = deserializeSession(json);
|
|
198
|
+
*
|
|
199
|
+
* // Round-trip equality test
|
|
200
|
+
* expect(restored.history).toEqual(state.history);
|
|
201
|
+
* expect(restored.lastResult).toEqual(state.lastResult);
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
export function deserializeSession(data) {
|
|
205
|
+
try {
|
|
206
|
+
const parsed = JSON.parse(data);
|
|
207
|
+
// CRITICAL: Validate structure before returning
|
|
208
|
+
if (!isValidSessionState(parsed)) {
|
|
209
|
+
throw new Error("Invalid session state structure: missing or malformed required properties");
|
|
210
|
+
}
|
|
211
|
+
return parsed;
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
throw new SessionSerializationError(`Failed to deserialize session: ${error instanceof Error ? error.message : "Unknown error"}`, "root", data);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=session-serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-serialization.js","sourceRoot":"","sources":["../../src/utils/session-serialization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH;;;;;;;;GAQG;AACH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAUhC;IACA;IAVlB;;;;;;OAMG;IACH,YACE,OAAe,EACC,IAAY,EACZ,KAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;QACZ,UAAK,GAAL,KAAK,CAAS;QAG9B,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU,CAAC;IAEnC,OAAO,CAAC,GAAW,EAAE,KAAc,EAAW,EAAE;QAC9C,4CAA4C;QAC5C,6DAA6D;QAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,OAAO,aAAa,GAAG,GAAG,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;QAED,kDAAkD;QAClD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,aAAa,KAAK,CAAC,IAAI,IAAI,WAAW,GAAG,CAAC;QACnD,CAAC;QAED,gDAAgD;QAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,WAAW,KAAK,CAAC,WAAW,IAAI,SAAS,GAAG,CAAC;QACtD,CAAC;QAED,0CAA0C;QAC1C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,mBAAmB,CAAC,KAAc;IACzC,8BAA8B;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,KAAgC,CAAC;IAE7C,sCAAsC;IACtC,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yCAAyC;IACzC,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sCAAsC;IACtC,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAmB;IAClD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,2EAA2E;QAC3E,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,yBAAyB,CACjC,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAC1F,MAAM,EACN,KAAK,CACN,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhC,gDAAgD;QAChD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QAED,OAAO,MAAsB,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,yBAAyB,CACjC,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAC5F,MAAM,EACN,IAAI,CACL,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { WorkflowError } from '../types/error.js';
|
|
2
|
+
/**
|
|
3
|
+
* Merge multiple WorkflowError objects into a single aggregated error.
|
|
4
|
+
*
|
|
5
|
+
* This is the default merger used when errorMergeStrategy is enabled for concurrent tasks.
|
|
6
|
+
* It aggregates information from all errors to provide a comprehensive view of failures.
|
|
7
|
+
*
|
|
8
|
+
* @param errors - Array of WorkflowError objects to merge
|
|
9
|
+
* @param taskName - Name of the task that spawned the concurrent workflows
|
|
10
|
+
* @param parentWorkflowId - ID of the parent workflow
|
|
11
|
+
* @param totalChildren - Total number of child workflows that were spawned
|
|
12
|
+
* @returns A merged WorkflowError containing aggregated information
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const errors: WorkflowError[] = [error1, error2, error3];
|
|
17
|
+
* const merged = mergeWorkflowErrors(errors, 'myTask', 'parent-123', 5);
|
|
18
|
+
* // Returns: WorkflowError with message "3 of 5 concurrent child workflows failed in task 'myTask'"
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function mergeWorkflowErrors(errors: WorkflowError[], taskName: string, parentWorkflowId: string, totalChildren: number): WorkflowError;
|
|
22
|
+
//# sourceMappingURL=workflow-error-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-error-utils.d.ts","sourceRoot":"","sources":["../../src/utils/workflow-error-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EAAE,EACvB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,GACpB,aAAa,CA4Bf"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge multiple WorkflowError objects into a single aggregated error.
|
|
3
|
+
*
|
|
4
|
+
* This is the default merger used when errorMergeStrategy is enabled for concurrent tasks.
|
|
5
|
+
* It aggregates information from all errors to provide a comprehensive view of failures.
|
|
6
|
+
*
|
|
7
|
+
* @param errors - Array of WorkflowError objects to merge
|
|
8
|
+
* @param taskName - Name of the task that spawned the concurrent workflows
|
|
9
|
+
* @param parentWorkflowId - ID of the parent workflow
|
|
10
|
+
* @param totalChildren - Total number of child workflows that were spawned
|
|
11
|
+
* @returns A merged WorkflowError containing aggregated information
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const errors: WorkflowError[] = [error1, error2, error3];
|
|
16
|
+
* const merged = mergeWorkflowErrors(errors, 'myTask', 'parent-123', 5);
|
|
17
|
+
* // Returns: WorkflowError with message "3 of 5 concurrent child workflows failed in task 'myTask'"
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export function mergeWorkflowErrors(errors, taskName, parentWorkflowId, totalChildren) {
|
|
21
|
+
// Create merged error message
|
|
22
|
+
const message = `${errors.length} of ${totalChildren} concurrent child workflows failed in task '${taskName}'`;
|
|
23
|
+
// Get all unique workflow IDs that failed
|
|
24
|
+
const failedWorkflowIds = [...new Set(errors.map((e) => e.workflowId))];
|
|
25
|
+
// Aggregate all logs
|
|
26
|
+
const allLogs = errors.flatMap((e) => e.logs);
|
|
27
|
+
// Create merged WorkflowError
|
|
28
|
+
const mergedError = {
|
|
29
|
+
message,
|
|
30
|
+
original: {
|
|
31
|
+
name: 'WorkflowAggregateError',
|
|
32
|
+
message,
|
|
33
|
+
errors,
|
|
34
|
+
totalChildren,
|
|
35
|
+
failedChildren: errors.length,
|
|
36
|
+
failedWorkflowIds,
|
|
37
|
+
},
|
|
38
|
+
workflowId: parentWorkflowId,
|
|
39
|
+
stack: errors[0]?.stack, // Use first error's stack trace
|
|
40
|
+
state: errors[0]?.state || {}, // Use first error's state
|
|
41
|
+
logs: allLogs,
|
|
42
|
+
};
|
|
43
|
+
return mergedError;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=workflow-error-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-error-utils.js","sourceRoot":"","sources":["../../src/utils/workflow-error-utils.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAuB,EACvB,QAAgB,EAChB,gBAAwB,EACxB,aAAqB;IAErB,8BAA8B;IAC9B,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,OAAO,aAAa,+CAA+C,QAAQ,GAAG,CAAC;IAE/G,0CAA0C;IAC1C,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAExE,qBAAqB;IACrB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE9C,8BAA8B;IAC9B,MAAM,WAAW,GAAkB;QACjC,OAAO;QACP,QAAQ,EAAE;YACR,IAAI,EAAE,wBAAwB;YAC9B,OAAO;YACP,MAAM;YACN,aAAa;YACb,cAAc,EAAE,MAAM,CAAC,MAAM;YAC7B,iBAAiB;SACP;QACZ,UAAU,EAAE,gBAAgB;QAC5B,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,gCAAgC;QACzD,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAK,EAA8B,EAAE,0BAA0B;QACtF,IAAI,EAAE,OAAO;KACd,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "groundswell",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"url": "https://github.com/groundswell-ai/groundswell",
|
|
5
5
|
"description": "Hierarchical workflow orchestration engine with full observability",
|
|
6
6
|
"keywords": [
|
|
@@ -23,6 +23,9 @@
|
|
|
23
23
|
"main": "./dist/index.js",
|
|
24
24
|
"module": "./dist/index.js",
|
|
25
25
|
"types": "./dist/index.d.ts",
|
|
26
|
+
"publishConfig": {
|
|
27
|
+
"access": "public"
|
|
28
|
+
},
|
|
26
29
|
"exports": {
|
|
27
30
|
".": {
|
|
28
31
|
"import": "./dist/index.js",
|
|
@@ -46,20 +49,46 @@
|
|
|
46
49
|
"start:reflection": "tsx examples/examples/09-reflection.ts",
|
|
47
50
|
"start:introspection": "tsx examples/examples/10-introspection.ts",
|
|
48
51
|
"start:reparenting": "tsx examples/examples/11-reparenting-workflows.ts",
|
|
52
|
+
"start:harness-basic": "tsx examples/harnesses/01-basic-harness-usage.ts",
|
|
53
|
+
"start:harness-config": "tsx examples/harnesses/02-harness-configuration.ts",
|
|
54
|
+
"start:harness-switching": "tsx examples/harnesses/03-harness-switching.ts",
|
|
55
|
+
"start:harness-scenarios": "tsx examples/harnesses/04-multi-provider-scenarios.ts",
|
|
56
|
+
"start:harness-sessions": "tsx examples/harnesses/05-harness-sessions.ts",
|
|
57
|
+
"start:harness-features": "tsx examples/harnesses/06-harness-with-mcp-skills.ts",
|
|
58
|
+
"start:ink": "tsx examples/examples/ink-debugger-hello.tsx",
|
|
49
59
|
"generate:llms": "npx tsx scripts/generate-llms-full.ts"
|
|
50
60
|
},
|
|
51
61
|
"dependencies": {
|
|
52
|
-
"@anthropic-ai/sdk": "^0.
|
|
62
|
+
"@anthropic-ai/claude-agent-sdk": "^0.1.0",
|
|
63
|
+
"@earendil-works/pi-coding-agent": "^0.79.8",
|
|
64
|
+
"ink": "^6.6.0",
|
|
53
65
|
"lru-cache": "^10.4.3",
|
|
54
|
-
"
|
|
66
|
+
"react": "^19.0.0",
|
|
67
|
+
"zod": "^3.23.0",
|
|
68
|
+
"zod-to-json-schema": "^3.23.0"
|
|
55
69
|
},
|
|
56
70
|
"devDependencies": {
|
|
71
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
72
|
+
"@semantic-release/commit-analyzer": "^13.0.0",
|
|
73
|
+
"@semantic-release/git": "^10.0.1",
|
|
74
|
+
"@semantic-release/github": "^12.0.0",
|
|
75
|
+
"@semantic-release/npm": "^13.0.0",
|
|
76
|
+
"@semantic-release/release-notes-generator": "^14.0.0",
|
|
57
77
|
"@types/node": "^20.0.0",
|
|
78
|
+
"@types/react": "^19.2.9",
|
|
79
|
+
"@vitest/coverage-v8": "^1.6.1",
|
|
80
|
+
"ink-testing-library": "^4.0.0",
|
|
81
|
+
"markdownlint-cli": "^0.47.0",
|
|
82
|
+
"semantic-release": "^25.0.0",
|
|
58
83
|
"tsx": "^4.21.0",
|
|
59
84
|
"typescript": "^5.2.0",
|
|
60
85
|
"vitest": "^1.0.0"
|
|
61
86
|
},
|
|
62
87
|
"engines": {
|
|
63
|
-
"node": ">=
|
|
64
|
-
}
|
|
88
|
+
"node": ">=22.19"
|
|
89
|
+
},
|
|
90
|
+
"files": [
|
|
91
|
+
"dist",
|
|
92
|
+
"LICENSE"
|
|
93
|
+
]
|
|
65
94
|
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
# Create BASE PRP
|
|
2
|
-
|
|
3
|
-
## Feature: $ARGUMENTS or $(tsk next) subtask
|
|
4
|
-
|
|
5
|
-
## PRP Creation Mission
|
|
6
|
-
|
|
7
|
-
Create a comprehensive PRP that enables **one-pass implementation success** through systematic research and context curation.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
**Critical Understanding**:
|
|
11
|
-
You must start by reading and understanding the prp concepts plan/README.md
|
|
12
|
-
Be aware that the executing AI agent only receives:
|
|
13
|
-
- The PRP content you create
|
|
14
|
-
- Its training data knowledge
|
|
15
|
-
- Access to codebase files (but needs guidance on which ones)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
**Therefore**: Your research and context curation directly determines implementation success. Incomplete context = implementation failure.
|
|
19
|
-
|
|
20
|
-
## Research Process
|
|
21
|
-
|
|
22
|
-
> During the research process, create clear tasks and spawn as many agents and subagents as needed using the batch tools. The deeper research we do here the better the PRP will be. We optimize for chance of success, not for speed.
|
|
23
|
-
|
|
24
|
-
1. **Codebase Analysis in depth**
|
|
25
|
-
- Create clear todos and spawn subagents to search the codebase for similar features/patterns. Think hard and plan your approach
|
|
26
|
-
- Identify all the necessary files to reference in the PRP
|
|
27
|
-
- Note all existing conventions to follow
|
|
28
|
-
- Check existing test patterns for validation approach, if none are found plan to find a new one
|
|
29
|
-
- Use the batch tools to spawn subagents to search the codebase for similar features/patterns
|
|
30
|
-
|
|
31
|
-
2. **Internal Research at scale**
|
|
32
|
-
- Use relevant research and plan information in the `plan/M#P#T#S#` directory according to the current subtask
|
|
33
|
-
- Consider the scope of the subtask within the overall PRD. Respect the boundaries of scope of implementation for this task. Ensure cohesion across
|
|
34
|
-
previously completed tasks and guard against harming future task completion in your plan
|
|
35
|
-
|
|
36
|
-
2. **External Research at scale**
|
|
37
|
-
- Create clear todos and spawn subagents with instructions to do deep research for similar features/patterns online and include urls to documentation and examples
|
|
38
|
-
- Library documentation (include specific URLs)
|
|
39
|
-
- Store all research in plans/\[M#P#T#S#]/research according to the current task and reference critical pieces of documentation in the PRP with clear
|
|
40
|
-
reasoning and instructions
|
|
41
|
-
- Implementation examples (GitHub/StackOverflow/blogs)
|
|
42
|
-
- New validation approach none found in existing codebase and user confirms they would like one added
|
|
43
|
-
- Best practices and common pitfalls found during research
|
|
44
|
-
- Use the batch tools to spawn subagents to search for similar features/patterns online and include urls to documentation and examples
|
|
45
|
-
|
|
46
|
-
3. **User Clarification**
|
|
47
|
-
- Ask for clarification if you need it
|
|
48
|
-
- If no testing framework is found, ask the user if they would like to set one up
|
|
49
|
-
- If a fundamental misalignemnt of objectives across tasks is detected, halt and produce a thorough explanation of the problem at a 10th grade level
|
|
50
|
-
|
|
51
|
-
## PRP Generation Process
|
|
52
|
-
|
|
53
|
-
### Step 1: Choose Template
|
|
54
|
-
|
|
55
|
-
Use `plan/templates/prp_base.md` as your template structure - it contains all necessary sections and formatting.
|
|
56
|
-
|
|
57
|
-
### Step 2: Context Completeness Validation
|
|
58
|
-
|
|
59
|
-
Before writing, apply the **"No Prior Knowledge" test** from the template:
|
|
60
|
-
_"If someone knew nothing about this codebase, would they have everything needed to implement this successfully?"_
|
|
61
|
-
|
|
62
|
-
### Step 3: Research Integration
|
|
63
|
-
|
|
64
|
-
Transform your research findings into the template sections:
|
|
65
|
-
|
|
66
|
-
**Goal Section**: Use research to define specific, measurable Feature Goal and concrete Deliverable
|
|
67
|
-
**Context Section**: Populate YAML structure with your research findings - specific URLs, file patterns, gotchas
|
|
68
|
-
**Implementation Tasks**: Create dependency-ordered tasks using information-dense keywords from codebase analysis
|
|
69
|
-
**Validation Gates**: Use project-specific validation commands that you've verified work in this codebase
|
|
70
|
-
|
|
71
|
-
### Step 4: Information Density Standards
|
|
72
|
-
|
|
73
|
-
Ensure every reference is **specific and actionable**:
|
|
74
|
-
|
|
75
|
-
- URLs include section anchors, not just domain names
|
|
76
|
-
- File references include specific patterns to follow, not generic mentions
|
|
77
|
-
- Task specifications include exact naming conventions and placement
|
|
78
|
-
- Validation commands are project-specific and executable
|
|
79
|
-
|
|
80
|
-
### Step 5: ULTRATHINK Before Writing
|
|
81
|
-
|
|
82
|
-
After research completion, create comprehensive PRP writing plan using TodoWrite tool:
|
|
83
|
-
|
|
84
|
-
- Plan how to structure each template section with your research findings
|
|
85
|
-
- Identify gaps that need additional research
|
|
86
|
-
- Create systematic approach to filling template with actionable context
|
|
87
|
-
|
|
88
|
-
## Output
|
|
89
|
-
|
|
90
|
-
Store the PRP at `plan/M#P#T#S#/PRP.md`
|
|
91
|
-
Store documentation at `plan/M#P#T#S#/research/`
|
|
92
|
-
|
|
93
|
-
## PRP Quality Gates
|
|
94
|
-
|
|
95
|
-
### Context Completeness Check
|
|
96
|
-
|
|
97
|
-
- [ ] Passes "No Prior Knowledge" test from template
|
|
98
|
-
- [ ] All YAML references are specific and accessible
|
|
99
|
-
- [ ] Implementation tasks include exact naming and placement guidance
|
|
100
|
-
- [ ] Validation commands are project-specific and verified working
|
|
101
|
-
|
|
102
|
-
### Template Structure Compliance
|
|
103
|
-
|
|
104
|
-
- [ ] All required template sections completed
|
|
105
|
-
- [ ] Goal section has specific Feature Goal, Deliverable, Success Definition
|
|
106
|
-
- [ ] Implementation Tasks follow dependency ordering
|
|
107
|
-
- [ ] Final Validation Checklist is comprehensive
|
|
108
|
-
|
|
109
|
-
### Information Density Standards
|
|
110
|
-
|
|
111
|
-
- [ ] No generic references - all are specific and actionable
|
|
112
|
-
- [ ] File patterns point at specific examples to follow
|
|
113
|
-
- [ ] URLs include section anchors for exact guidance
|
|
114
|
-
- [ ] Task specifications use information-dense keywords from codebase
|
|
115
|
-
|
|
116
|
-
## Success Metrics
|
|
117
|
-
|
|
118
|
-
**Confidence Score**: Rate 1-10 for one-pass implementation success likelihood
|
|
119
|
-
|
|
120
|
-
**Validation**: The completed PRP should enable an AI agent unfamiliar with the codebase to implement the feature successfully using only the PRP content and codebase access.
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# Execute BASE PRP
|
|
2
|
-
|
|
3
|
-
## PRP File: $ARGUMENTS or $(tsk next) subtask information located at plans/M#P#T#S#/PRP.md
|
|
4
|
-
|
|
5
|
-
## Mission: One-Pass Implementation Success
|
|
6
|
-
|
|
7
|
-
PRPs enable working code on the first attempt through:
|
|
8
|
-
|
|
9
|
-
- **Context Completeness**: Everything needed, nothing guessed
|
|
10
|
-
- **Progressive Validation**: 4-level gates catch errors early
|
|
11
|
-
- **Pattern Consistency**: Follow existing codebase approaches
|
|
12
|
-
- Read PRPs/README.md to understand PRP concepts
|
|
13
|
-
|
|
14
|
-
**Your Goal**: Transform the PRP into working code that passes all validation gates.
|
|
15
|
-
|
|
16
|
-
## Execution Process
|
|
17
|
-
|
|
18
|
-
1. **Load PRP**
|
|
19
|
-
- Read the specified PRP file completely
|
|
20
|
-
- Absorb all context, patterns, requirements and gather codebase intelligence
|
|
21
|
-
- Use the provided documentation references and file patterns, consume the right documentation before the appropriate todo/task
|
|
22
|
-
- Trust the PRP's context and guidance - it's designed for one-pass success
|
|
23
|
-
- If needed do additional codebase exploration and research as needed
|
|
24
|
-
|
|
25
|
-
2. **ULTRATHINK & Plan**
|
|
26
|
-
- Create comprehensive implementation plan following the PRP's task order
|
|
27
|
-
- Break down into clear todos using TodoWrite tool
|
|
28
|
-
- Use subagents for parallel work when beneficial (always create prp inspired prompts for subagents when used)
|
|
29
|
-
- Follow the patterns referenced in the PRP
|
|
30
|
-
- Use specific file paths, class names, and method signatures from PRP context
|
|
31
|
-
- Never guess - always verify the codebase patterns and examples referenced in the PRP yourself
|
|
32
|
-
|
|
33
|
-
3. **Execute Implementation**
|
|
34
|
-
- Follow the PRP's Implementation Tasks sequence, add more detail as needed, especially when using subagents
|
|
35
|
-
- Use the patterns and examples referenced in the PRP
|
|
36
|
-
- Create files in locations specified by the desired codebase tree
|
|
37
|
-
- Apply naming conventions from the task specifications and CLAUDE.md
|
|
38
|
-
|
|
39
|
-
4. **Progressive Validation**
|
|
40
|
-
|
|
41
|
-
**Execute the level validation system from the PRP:**
|
|
42
|
-
- **Level 1**: Run syntax & style validation commands from PRP
|
|
43
|
-
- **Level 2**: Execute unit test validation from PRP
|
|
44
|
-
- **Level 3**: Run integration testing commands from PRP
|
|
45
|
-
- **Level 4**: Execute specified validation from PRP
|
|
46
|
-
|
|
47
|
-
**Each level must pass before proceeding to the next.**
|
|
48
|
-
|
|
49
|
-
5. **Completion Verification**
|
|
50
|
-
- Work through the Final Validation Checklist in the PRP
|
|
51
|
-
- Verify all Success Criteria from the "What" section are met
|
|
52
|
-
- Confirm all Anti-Patterns were avoided
|
|
53
|
-
- Implementation is ready and working
|
|
54
|
-
|
|
55
|
-
**Failure Protocol**: When validation fails, use the patterns and gotchas from the PRP to fix issues, then re-run validation until passing.
|
|
56
|
-
|
|
57
|
-
If a fundamental issue with the plan is found, halt and produce a thorough explanation of the problem at a 10th grade level.
|
|
58
|
-
|
|
59
|
-
Strictly output your results in this JSON format:
|
|
60
|
-
|
|
61
|
-
```json
|
|
62
|
-
{
|
|
63
|
-
"result": "success" | "error" | "issue",
|
|
64
|
-
"message": "Detailed explanation of the issue"
|
|
65
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
Act as a Lead Technical Architect and Project Management Synthesizer. You have already convened a panel of senior specialists (Security, DevOps, Backend, Frontend, and QA) who hold adversarial views on scope and complexity. Your job is not to output their debate, but to output their rigorous, unified consensus on how to decompose the attached PRD.
|
|
2
|
-
|
|
3
|
-
Your Primary Goal: Assess the PRD to determine its hierarchy (Phase > Milestone > Task > Subtask) and decompose it into atomic, coherent work units.
|
|
4
|
-
|
|
5
|
-
Hierarchy Definitions:
|
|
6
|
-
|
|
7
|
-
Phase: Project-scope goals (e.g., MVP, V1.0). Weeks to months of effort.
|
|
8
|
-
|
|
9
|
-
Milestone: Key objectives within a Phase. 1 to 12 weeks of effort.
|
|
10
|
-
|
|
11
|
-
Task: Complete features within a Milestone. Days to weeks of effort.
|
|
12
|
-
|
|
13
|
-
Subtask: Atomic implementation steps. 0.5, 1, or 2 Story Points (SP). Max 2 SP per subtask.
|
|
14
|
-
|
|
15
|
-
Critical Constraints & Standard of Work (SOW):
|
|
16
|
-
|
|
17
|
-
Coherence & Continuity (Priority):
|
|
18
|
-
|
|
19
|
-
You must ensure architectural flow. Subtasks must not exist in a vacuum.
|
|
20
|
-
|
|
21
|
-
If Subtask A defines a data schema, Subtask B must explicitly be told to consume that specific schema.
|
|
22
|
-
|
|
23
|
-
Reference specific file paths, variable names, or API endpoints within the context_scope to ensure the implementing agent follows the chain of logic.
|
|
24
|
-
|
|
25
|
-
Implicit TDD & Quality:
|
|
26
|
-
|
|
27
|
-
Do not create subtasks for "Write Tests."
|
|
28
|
-
|
|
29
|
-
Assume every subtask implies: "Write the failing test, implement the code, pass the test."
|
|
30
|
-
|
|
31
|
-
Code is not complete without tests.
|
|
32
|
-
|
|
33
|
-
The "Context Scope" Blinder:
|
|
34
|
-
|
|
35
|
-
For every Subtask, the context_scope must be a strict set of instructions for a developer who cannot see the rest of the project.
|
|
36
|
-
|
|
37
|
-
It must define Inputs (what data/interfaces are available from previous subtasks) and Outputs (what exact interface this subtask exposes).
|
|
38
|
-
|
|
39
|
-
It must explicitly state Mocking Strategies to keep the subtask isolated.
|
|
40
|
-
|
|
41
|
-
Process:
|
|
42
|
-
|
|
43
|
-
Analyze the attached or referenced PRD.
|
|
44
|
-
|
|
45
|
-
Determine the highest level of scope (Phase, Milestone, or Task) this PRD represents.
|
|
46
|
-
|
|
47
|
-
Decompose strictly downwards to the Subtask level.
|
|
48
|
-
|
|
49
|
-
Output Format:
|
|
50
|
-
Output only a JSON object. No conversational text.
|
|
51
|
-
|
|
52
|
-
```json
|
|
53
|
-
{
|
|
54
|
-
"backlog": [
|
|
55
|
-
{
|
|
56
|
-
"type": "Phase",
|
|
57
|
-
"id": "P[#]",
|
|
58
|
-
"title": "Phase Title",
|
|
59
|
-
"status": "Planned | Researching | Ready | Implementing | Complete | Failed",
|
|
60
|
-
"description": "High level goal.",
|
|
61
|
-
"milestones": [
|
|
62
|
-
{
|
|
63
|
-
"type": "Milestone",
|
|
64
|
-
"id": "P[#].M[#]",
|
|
65
|
-
"title": "Milestone Title",
|
|
66
|
-
"status": "Planned",
|
|
67
|
-
"description": "Key objective.",
|
|
68
|
-
"tasks": [
|
|
69
|
-
{
|
|
70
|
-
"type": "Task",
|
|
71
|
-
"id": "P[#].M[#].T[#]",
|
|
72
|
-
"title": "Task Title",
|
|
73
|
-
"status": "Planned",
|
|
74
|
-
"description": "Feature definition.",
|
|
75
|
-
"subtasks": [
|
|
76
|
-
{
|
|
77
|
-
"type": "Subtask",
|
|
78
|
-
"id": "P[#].M[#].T[#].S[#]",
|
|
79
|
-
"title": "Subtask Title",
|
|
80
|
-
"status": "Planned",
|
|
81
|
-
"story_points": 1,
|
|
82
|
-
"dependencies": ["ID of prerequisite subtask"],
|
|
83
|
-
"context_scope": "CONTRACT DEFINITION:\n1. INPUT: [Specific data structure/variable] from [Dependency ID].\n2. LOGIC: Implement [PRD Section X] logic. Mock [Service Y] for isolation.\n3. OUTPUT: Return [Result Object/Interface] for consumption by [Next Subtask ID]."
|
|
84
|
-
}
|
|
85
|
-
]
|
|
86
|
-
}
|
|
87
|
-
]
|
|
88
|
-
}
|
|
89
|
-
]
|
|
90
|
-
}
|
|
91
|
-
]
|
|
92
|
-
}
|
|
93
|
-
```
|
|
94
|
-
|