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,943 +0,0 @@
|
|
|
1
|
-
# PRP: Caching, Reflection & Introspection Systems
|
|
2
|
-
|
|
3
|
-
## Phases 3 & 4 Implementation Plan
|
|
4
|
-
|
|
5
|
-
> **PRP**: Product Requirements Package - A comprehensive implementation guide enabling one-pass success
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Pre-Implementation Checklist
|
|
10
|
-
|
|
11
|
-
Before implementing, verify you have:
|
|
12
|
-
- [ ] Read and understood this entire PRP
|
|
13
|
-
- [ ] Read PRPs/PRDs/002-agent-prompt.md (prior phases)
|
|
14
|
-
- [ ] Verified Phase 1 & 2 are complete (Agent, Prompt, Hierarchy integration)
|
|
15
|
-
- [ ] Access to `./` codebase
|
|
16
|
-
- [ ] npm dependencies installed: `@anthropic-ai/sdk`, `zod`
|
|
17
|
-
- [ ] Understanding of existing patterns in `/src/core/agent.ts`, `/src/core/workflow.ts`
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## 1. Goal
|
|
22
|
-
|
|
23
|
-
### Feature Goal
|
|
24
|
-
Implement deterministic response caching, multi-level reflection capabilities, and agent introspection tools to complete the Groundswell orchestration framework per PRD Sections 9, 10, 11, and 12.
|
|
25
|
-
|
|
26
|
-
### Deliverable
|
|
27
|
-
A complete system where:
|
|
28
|
-
1. LLM responses are cached with SHA-256 deterministic keys (PRD Section 9)
|
|
29
|
-
2. Reflection API provides automatic retry with self-correction at workflow, agent, and prompt levels (PRD Section 4.4)
|
|
30
|
-
3. Introspection tools allow agents to inspect/manipulate their hierarchy position (PRD Section 11)
|
|
31
|
-
4. Dynamic workflow/agent/prompt creation and context revision work seamlessly (PRD Section 10)
|
|
32
|
-
5. All 10 canonical examples are implemented (PRD Section 12)
|
|
33
|
-
|
|
34
|
-
### Success Definition
|
|
35
|
-
- [ ] `npm run build` passes with no TypeScript errors
|
|
36
|
-
- [ ] `npm test` passes all new and existing tests
|
|
37
|
-
- [ ] Cache integration reduces redundant API calls in tests
|
|
38
|
-
- [ ] Reflection triggers automatically on step/prompt failures
|
|
39
|
-
- [ ] Agents can use introspection tools to navigate hierarchy
|
|
40
|
-
- [ ] All 10 PRD examples execute successfully
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
## 2. Context
|
|
45
|
-
|
|
46
|
-
### External Documentation
|
|
47
|
-
```yaml
|
|
48
|
-
anthropic_sdk:
|
|
49
|
-
url: "https://github.com/anthropics/anthropic-sdk-typescript"
|
|
50
|
-
purpose: "Tool definitions, message API"
|
|
51
|
-
version: "^0.71.1"
|
|
52
|
-
|
|
53
|
-
lru_cache:
|
|
54
|
-
url: "https://www.npmjs.com/package/lru-cache"
|
|
55
|
-
purpose: "LRU cache implementation with TTL support"
|
|
56
|
-
version: "^10.0.0"
|
|
57
|
-
note: "Zero external dependencies in v10+"
|
|
58
|
-
|
|
59
|
-
node_crypto:
|
|
60
|
-
url: "https://nodejs.org/api/crypto.html"
|
|
61
|
-
purpose: "SHA-256 hashing for cache keys"
|
|
62
|
-
section: "createHash"
|
|
63
|
-
|
|
64
|
-
zod:
|
|
65
|
-
url: "https://zod.dev/"
|
|
66
|
-
purpose: "Schema validation, _def access for hashing"
|
|
67
|
-
version: "^3.23.0"
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### Codebase Context
|
|
71
|
-
```yaml
|
|
72
|
-
existing_patterns:
|
|
73
|
-
- file: "/src/core/agent.ts"
|
|
74
|
-
pattern: "Agent class with prompt() method"
|
|
75
|
-
follow_for: "Cache integration point in executePrompt()"
|
|
76
|
-
line: 171
|
|
77
|
-
|
|
78
|
-
- file: "/src/core/workflow-context.ts"
|
|
79
|
-
pattern: "ReflectionAPIImpl placeholder"
|
|
80
|
-
follow_for: "Full ReflectionAPI implementation"
|
|
81
|
-
line: 24
|
|
82
|
-
|
|
83
|
-
- file: "/src/core/context.ts"
|
|
84
|
-
pattern: "AgentExecutionContext with AsyncLocalStorage"
|
|
85
|
-
follow_for: "Introspection tool handlers accessing context"
|
|
86
|
-
|
|
87
|
-
- file: "/src/types/events.ts"
|
|
88
|
-
pattern: "WorkflowEvent discriminated union"
|
|
89
|
-
follow_for: "Already includes reflectionStart/reflectionEnd types"
|
|
90
|
-
|
|
91
|
-
- file: "/src/core/mcp-handler.ts"
|
|
92
|
-
pattern: "Tool registration and execution"
|
|
93
|
-
follow_for: "Introspection tool registration pattern"
|
|
94
|
-
|
|
95
|
-
related_files:
|
|
96
|
-
- path: "/src/types/workflow-context.ts"
|
|
97
|
-
relationship: "ReflectionAPI interface definition (line 70)"
|
|
98
|
-
|
|
99
|
-
- path: "/src/core/event-tree.ts"
|
|
100
|
-
relationship: "EventTreeHandle for introspection queries"
|
|
101
|
-
|
|
102
|
-
- path: "/src/utils/id.ts"
|
|
103
|
-
relationship: "generateId() for cache key prefixes"
|
|
104
|
-
|
|
105
|
-
naming_conventions:
|
|
106
|
-
files: "kebab-case.ts in appropriate directory"
|
|
107
|
-
classes: "PascalCase (e.g., LRUCache, ReflectionManager)"
|
|
108
|
-
functions: "camelCase (e.g., generateCacheKey, triggerReflection)"
|
|
109
|
-
types: "PascalCase with descriptive suffixes (e.g., CacheConfig, ReflectionEntry)"
|
|
110
|
-
tools: "snake_case for Anthropic tool names (e.g., inspect_current_node)"
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### Technical Constraints
|
|
114
|
-
```yaml
|
|
115
|
-
typescript:
|
|
116
|
-
version: "5.2+"
|
|
117
|
-
config_requirements:
|
|
118
|
-
- "strict: true"
|
|
119
|
-
- "module: NodeNext"
|
|
120
|
-
- "moduleResolution: NodeNext"
|
|
121
|
-
|
|
122
|
-
dependencies:
|
|
123
|
-
required:
|
|
124
|
-
- name: "lru-cache"
|
|
125
|
-
version: "^10.0.0"
|
|
126
|
-
purpose: "LRU cache with size/TTL limits"
|
|
127
|
-
existing:
|
|
128
|
-
- name: "@anthropic-ai/sdk"
|
|
129
|
-
version: "^0.71.1"
|
|
130
|
-
- name: "zod"
|
|
131
|
-
version: "^3.23.0"
|
|
132
|
-
|
|
133
|
-
runtime:
|
|
134
|
-
node_version: "18+"
|
|
135
|
-
target: "ES2022"
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
### Known Gotchas
|
|
139
|
-
```yaml
|
|
140
|
-
pitfalls:
|
|
141
|
-
- issue: "JSON.stringify does not guarantee key order"
|
|
142
|
-
solution: "Use deterministicStringify with sorted keys for cache key generation"
|
|
143
|
-
file: "/plan/P3P4/research/caching-lru.md"
|
|
144
|
-
|
|
145
|
-
- issue: "Zod schemas are functions, cannot serialize directly"
|
|
146
|
-
solution: "Hash schema._def for schema fingerprint in cache key"
|
|
147
|
-
|
|
148
|
-
- issue: "Reflection can infinite loop"
|
|
149
|
-
solution: "Hard limit maxReflectionAttempts to 3, track attempt count"
|
|
150
|
-
|
|
151
|
-
- issue: "AsyncLocalStorage context loss in some async patterns"
|
|
152
|
-
solution: "Always use runInContext() wrapper, test with nested async/await"
|
|
153
|
-
|
|
154
|
-
- issue: "Tool handlers need access to current context"
|
|
155
|
-
solution: "Use getExecutionContext() from context.ts inside tool handlers"
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## 3. Implementation Tasks
|
|
161
|
-
|
|
162
|
-
> Tasks are ordered by dependency. Complete each task fully before moving to the next.
|
|
163
|
-
|
|
164
|
-
### Phase 3: Caching & Reflection Systems
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
### Task P3.1: Cache Key Generation
|
|
169
|
-
**Depends on**: Phase 1 & 2 complete
|
|
170
|
-
|
|
171
|
-
**Input**:
|
|
172
|
-
- Prompt instance with user, data, responseFormat
|
|
173
|
-
- Merged AgentConfig (system, tools, mcps, skills, temperature, model)
|
|
174
|
-
|
|
175
|
-
**Steps**:
|
|
176
|
-
1. Create `/src/cache/cache-key.ts`
|
|
177
|
-
2. Implement `deterministicStringify(value: unknown): string`
|
|
178
|
-
- Sort object keys alphabetically
|
|
179
|
-
- Handle arrays, primitives, null, undefined
|
|
180
|
-
- Detect circular references with WeakSet
|
|
181
|
-
3. Implement `getSchemaHash(schema: z.ZodType): string`
|
|
182
|
-
- Access `schema._def` for internal representation
|
|
183
|
-
- Hash with SHA-256
|
|
184
|
-
4. Implement `generateCacheKey(inputs: CacheKeyInputs): string`
|
|
185
|
-
- Include: user, data, system, model, temperature, maxTokens
|
|
186
|
-
- Include: sorted tool names, sorted mcp names, sorted skill names
|
|
187
|
-
- Include: schemaHash from responseFormat
|
|
188
|
-
- Return 64-character hex SHA-256 digest
|
|
189
|
-
5. Export `CacheKeyInputs` interface and functions
|
|
190
|
-
|
|
191
|
-
**Output**: `/src/cache/cache-key.ts` with deterministic key generation
|
|
192
|
-
|
|
193
|
-
**Validation**:
|
|
194
|
-
```bash
|
|
195
|
-
# Unit test: same input always produces same key
|
|
196
|
-
npm test -- --grep "cache-key"
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
### Task P3.2: LRU Cache Implementation
|
|
202
|
-
**Depends on**: Task P3.1
|
|
203
|
-
|
|
204
|
-
**Input**: Cache interface from PRD Section 9.2
|
|
205
|
-
|
|
206
|
-
**Steps**:
|
|
207
|
-
1. Add `lru-cache@^10.0.0` to package.json dependencies
|
|
208
|
-
2. Create `/src/cache/cache.ts`
|
|
209
|
-
3. Define `CacheConfig` interface:
|
|
210
|
-
```typescript
|
|
211
|
-
interface CacheConfig {
|
|
212
|
-
maxItems?: number; // default: 1000
|
|
213
|
-
maxSizeBytes?: number; // default: 50MB
|
|
214
|
-
defaultTTLMs?: number; // default: 1 hour
|
|
215
|
-
}
|
|
216
|
-
```
|
|
217
|
-
4. Implement `LLMCache` class:
|
|
218
|
-
- Constructor accepting CacheConfig
|
|
219
|
-
- `get(key: string): Promise<T | undefined>`
|
|
220
|
-
- `set(key: string, value: T, ttl?: number): Promise<void>`
|
|
221
|
-
- `bust(key: string): Promise<void>`
|
|
222
|
-
- `bustPrefix(prefix: string): Promise<void>`
|
|
223
|
-
- `metrics(): CacheMetrics`
|
|
224
|
-
5. Implement prefix tracking with Map<string, Set<string>> for bustPrefix
|
|
225
|
-
6. Export singleton `defaultCache` instance
|
|
226
|
-
|
|
227
|
-
**Output**: `/src/cache/cache.ts` with full Cache implementation
|
|
228
|
-
|
|
229
|
-
**Validation**:
|
|
230
|
-
```bash
|
|
231
|
-
npm test -- --grep "LLMCache"
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
### Task P3.3: Cache Integration into Agent
|
|
237
|
-
**Depends on**: Task P3.2
|
|
238
|
-
|
|
239
|
-
**Input**: Agent.executePrompt() method at `/src/core/agent.ts:171`
|
|
240
|
-
|
|
241
|
-
**Steps**:
|
|
242
|
-
1. Import `generateCacheKey` and `defaultCache` in agent.ts
|
|
243
|
-
2. Add cache check at start of `executePrompt()`:
|
|
244
|
-
```typescript
|
|
245
|
-
if (this.config.enableCache && !overrides?.disableCache) {
|
|
246
|
-
const cacheKey = generateCacheKey({...});
|
|
247
|
-
const cached = await defaultCache.get(cacheKey);
|
|
248
|
-
if (cached) {
|
|
249
|
-
// Return cached result
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
```
|
|
253
|
-
3. Add cache set after successful response:
|
|
254
|
-
```typescript
|
|
255
|
-
if (this.config.enableCache && !overrides?.disableCache) {
|
|
256
|
-
await defaultCache.set(cacheKey, result);
|
|
257
|
-
}
|
|
258
|
-
```
|
|
259
|
-
4. Emit cache hit/miss events if in workflow context:
|
|
260
|
-
```typescript
|
|
261
|
-
{ type: 'cacheHit' | 'cacheMiss'; key: string; node: WorkflowNode }
|
|
262
|
-
```
|
|
263
|
-
5. Update `/src/types/events.ts` to add cacheHit/cacheMiss event types
|
|
264
|
-
|
|
265
|
-
**Output**: Agent.prompt() checks and populates cache
|
|
266
|
-
|
|
267
|
-
**Validation**:
|
|
268
|
-
```bash
|
|
269
|
-
# Integration test: second identical prompt returns cached
|
|
270
|
-
npm test -- --grep "agent-cache"
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
### Task P3.4: ReflectionAPI Interface Definition
|
|
276
|
-
**Depends on**: Phase 2 complete
|
|
277
|
-
|
|
278
|
-
**Input**: Placeholder at `/src/core/workflow-context.ts:24`
|
|
279
|
-
|
|
280
|
-
**Steps**:
|
|
281
|
-
1. Create `/src/types/reflection.ts`
|
|
282
|
-
2. Define complete interfaces:
|
|
283
|
-
```typescript
|
|
284
|
-
interface ReflectionConfig {
|
|
285
|
-
enabled: boolean;
|
|
286
|
-
maxAttempts: number; // default: 3
|
|
287
|
-
retryDelayMs?: number; // default: 0
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
interface ReflectionContext {
|
|
291
|
-
level: 'workflow' | 'agent' | 'prompt';
|
|
292
|
-
failedNode: WorkflowNode;
|
|
293
|
-
error: Error;
|
|
294
|
-
attemptNumber: number;
|
|
295
|
-
previousAttempts: ReflectionEntry[];
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
interface ReflectionResult {
|
|
299
|
-
shouldRetry: boolean;
|
|
300
|
-
revisedPromptData?: Record<string, unknown>;
|
|
301
|
-
revisedSystemPrompt?: string;
|
|
302
|
-
reason: string;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
interface ReflectionEntry {
|
|
306
|
-
timestamp: number;
|
|
307
|
-
level: 'workflow' | 'agent' | 'prompt';
|
|
308
|
-
reason: string;
|
|
309
|
-
error: Error;
|
|
310
|
-
resolution: 'retry' | 'skip' | 'abort';
|
|
311
|
-
success: boolean;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
interface ReflectionAPI {
|
|
315
|
-
isEnabled(): boolean;
|
|
316
|
-
triggerReflection(reason?: string): Promise<void>;
|
|
317
|
-
getReflectionHistory(): ReflectionEntry[];
|
|
318
|
-
reflect(context: ReflectionContext): Promise<ReflectionResult>;
|
|
319
|
-
}
|
|
320
|
-
```
|
|
321
|
-
3. Export from `/src/types/index.ts`
|
|
322
|
-
|
|
323
|
-
**Output**: Complete reflection type definitions
|
|
324
|
-
|
|
325
|
-
**Validation**: `npm run build` passes
|
|
326
|
-
|
|
327
|
-
---
|
|
328
|
-
|
|
329
|
-
### Task P3.5: Reflection Implementation
|
|
330
|
-
**Depends on**: Task P3.4
|
|
331
|
-
|
|
332
|
-
**Input**: ReflectionAPI interface, Agent.reflect() method
|
|
333
|
-
|
|
334
|
-
**Steps**:
|
|
335
|
-
1. Create `/src/reflection/reflection.ts`
|
|
336
|
-
2. Implement `ReflectionManager` class:
|
|
337
|
-
- Constructor: `(config: ReflectionConfig, agent?: Agent)`
|
|
338
|
-
- `isEnabled()`: Return config.enabled
|
|
339
|
-
- `reflect(context: ReflectionContext): Promise<ReflectionResult>`
|
|
340
|
-
- Build reflection prompt with error context
|
|
341
|
-
- Call agent.reflect() with reflection prompt
|
|
342
|
-
- Parse response for shouldRetry decision
|
|
343
|
-
- Record entry in history
|
|
344
|
-
- `triggerReflection(reason?: string)`: Emit events, log
|
|
345
|
-
- `getReflectionHistory()`: Return recorded entries
|
|
346
|
-
3. Define reflection prompt template:
|
|
347
|
-
```typescript
|
|
348
|
-
const REFLECTION_PROMPT = `
|
|
349
|
-
A previous operation failed with the following error:
|
|
350
|
-
|
|
351
|
-
Error: {{error.message}}
|
|
352
|
-
Level: {{level}}
|
|
353
|
-
Attempt: {{attemptNumber}} of {{maxAttempts}}
|
|
354
|
-
|
|
355
|
-
Analyze the error and determine:
|
|
356
|
-
1. Can this be retried with modifications?
|
|
357
|
-
2. What changes would help succeed?
|
|
358
|
-
|
|
359
|
-
Respond with JSON: { "shouldRetry": boolean, "reason": string, "revisedPromptData": {...} }
|
|
360
|
-
`;
|
|
361
|
-
```
|
|
362
|
-
4. Emit reflectionStart/reflectionEnd events
|
|
363
|
-
|
|
364
|
-
**Output**: `/src/reflection/reflection.ts` with full implementation
|
|
365
|
-
|
|
366
|
-
**Validation**:
|
|
367
|
-
```bash
|
|
368
|
-
npm test -- --grep "ReflectionManager"
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
---
|
|
372
|
-
|
|
373
|
-
### Task P3.6: Wire Reflection into WorkflowContext
|
|
374
|
-
**Depends on**: Task P3.5
|
|
375
|
-
|
|
376
|
-
**Input**: `/src/core/workflow-context.ts`
|
|
377
|
-
|
|
378
|
-
**Steps**:
|
|
379
|
-
1. Replace `ReflectionAPIImpl` placeholder with real import
|
|
380
|
-
2. Update `WorkflowContextImpl` constructor:
|
|
381
|
-
- Create `ReflectionManager` with workflow's enableReflection config
|
|
382
|
-
3. Update `step()` method to wrap with reflection:
|
|
383
|
-
```typescript
|
|
384
|
-
async step<T>(name: string, fn: () => Promise<T>): Promise<T> {
|
|
385
|
-
let lastError: Error | null = null;
|
|
386
|
-
|
|
387
|
-
for (let attempt = 1; attempt <= this.reflection.maxAttempts; attempt++) {
|
|
388
|
-
try {
|
|
389
|
-
return await this.executeStep(name, fn);
|
|
390
|
-
} catch (error) {
|
|
391
|
-
if (!this.reflection.isEnabled()) throw error;
|
|
392
|
-
|
|
393
|
-
const result = await this.reflection.reflect({
|
|
394
|
-
level: 'workflow',
|
|
395
|
-
failedNode: stepNode,
|
|
396
|
-
error: error as Error,
|
|
397
|
-
attemptNumber: attempt,
|
|
398
|
-
previousAttempts: this.reflection.getReflectionHistory()
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
if (!result.shouldRetry) throw error;
|
|
402
|
-
lastError = error as Error;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
throw lastError;
|
|
407
|
-
}
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
**Output**: Automatic reflection on step failures
|
|
411
|
-
|
|
412
|
-
**Validation**:
|
|
413
|
-
```bash
|
|
414
|
-
npm test -- --grep "workflow-reflection"
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
---
|
|
418
|
-
|
|
419
|
-
### Phase 4: Dynamic Behavior & Introspection
|
|
420
|
-
|
|
421
|
-
---
|
|
422
|
-
|
|
423
|
-
### Task P4.1: Dynamic Factory Functions
|
|
424
|
-
**Depends on**: Phase 3 complete
|
|
425
|
-
|
|
426
|
-
**Input**: Workflow, Agent, Prompt classes
|
|
427
|
-
|
|
428
|
-
**Steps**:
|
|
429
|
-
1. Create `/src/core/factory.ts`
|
|
430
|
-
2. Implement factory functions:
|
|
431
|
-
```typescript
|
|
432
|
-
export function createWorkflow<T>(
|
|
433
|
-
config: WorkflowConfig,
|
|
434
|
-
executor: WorkflowExecutor<T>
|
|
435
|
-
): Workflow<T> {
|
|
436
|
-
return new Workflow(config, executor);
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
export function createAgent(config: AgentConfig): Agent {
|
|
440
|
-
return new Agent(config);
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
export function createPrompt<T>(config: PromptConfig<T>): Prompt<T> {
|
|
444
|
-
return new Prompt(config);
|
|
445
|
-
}
|
|
446
|
-
```
|
|
447
|
-
3. Export from `/src/index.ts`
|
|
448
|
-
|
|
449
|
-
**Output**: Convenience factory functions for dynamic creation
|
|
450
|
-
|
|
451
|
-
**Validation**: `npm run build`
|
|
452
|
-
|
|
453
|
-
---
|
|
454
|
-
|
|
455
|
-
### Task P4.2: Dynamic Context Revision
|
|
456
|
-
**Depends on**: Task P4.1
|
|
457
|
-
|
|
458
|
-
**Input**: WorkflowContext, step() implementation
|
|
459
|
-
|
|
460
|
-
**Steps**:
|
|
461
|
-
1. Add to WorkflowContext interface in `/src/types/workflow-context.ts`:
|
|
462
|
-
```typescript
|
|
463
|
-
replaceLastPromptResult<T>(
|
|
464
|
-
newPrompt: Prompt<T>,
|
|
465
|
-
agent: Agent
|
|
466
|
-
): Promise<T>;
|
|
467
|
-
```
|
|
468
|
-
2. Implement in `WorkflowContextImpl`:
|
|
469
|
-
- Mark previous prompt node as 'revised'
|
|
470
|
-
- Execute new prompt
|
|
471
|
-
- Attach result as sibling (not child)
|
|
472
|
-
- Update event tree
|
|
473
|
-
- Return new result
|
|
474
|
-
3. Emit 'promptRevision' event
|
|
475
|
-
|
|
476
|
-
**Output**: Context revision without tree forking
|
|
477
|
-
|
|
478
|
-
**Validation**:
|
|
479
|
-
```bash
|
|
480
|
-
npm test -- --grep "context-revision"
|
|
481
|
-
```
|
|
482
|
-
|
|
483
|
-
---
|
|
484
|
-
|
|
485
|
-
### Task P4.3: Introspection Tool Definitions
|
|
486
|
-
**Depends on**: P4.1
|
|
487
|
-
|
|
488
|
-
**Input**: PRD Section 11, `/plan/P3P4/research/introspection-tools.md`
|
|
489
|
-
|
|
490
|
-
**Steps**:
|
|
491
|
-
1. Create `/src/tools/introspection.ts`
|
|
492
|
-
2. Define 6 tool interfaces using Anthropic Tool format:
|
|
493
|
-
- `inspect_current_node`: Return current node info
|
|
494
|
-
- `read_ancestor_chain`: Return ancestors up to root
|
|
495
|
-
- `list_siblings_children`: Return siblings or children
|
|
496
|
-
- `inspect_prior_outputs`: Return previous step outputs
|
|
497
|
-
- `inspect_cache_status`: Check cache for prompt hash
|
|
498
|
-
- `request_spawn_workflow`: Request dynamic workflow creation
|
|
499
|
-
3. For each tool, define:
|
|
500
|
-
- Tool definition (name, description, input_schema)
|
|
501
|
-
- Handler function signature
|
|
502
|
-
|
|
503
|
-
**Output**: Tool definitions in `/src/tools/introspection.ts`
|
|
504
|
-
|
|
505
|
-
**Validation**: TypeScript compiles
|
|
506
|
-
|
|
507
|
-
---
|
|
508
|
-
|
|
509
|
-
### Task P4.4: Introspection Tool Handlers
|
|
510
|
-
**Depends on**: Task P4.3
|
|
511
|
-
|
|
512
|
-
**Input**: Tool definitions, AgentExecutionContext
|
|
513
|
-
|
|
514
|
-
**Steps**:
|
|
515
|
-
1. Implement handler for `inspect_current_node`:
|
|
516
|
-
```typescript
|
|
517
|
-
async function handleInspectCurrentNode(): Promise<CurrentNodeInfo> {
|
|
518
|
-
const ctx = getExecutionContext();
|
|
519
|
-
if (!ctx) throw new Error('Not in workflow context');
|
|
520
|
-
|
|
521
|
-
return {
|
|
522
|
-
id: ctx.workflowNode.id,
|
|
523
|
-
name: ctx.workflowNode.name,
|
|
524
|
-
status: ctx.workflowNode.status,
|
|
525
|
-
parentId: ctx.workflowNode.parent?.id,
|
|
526
|
-
parentName: ctx.workflowNode.parent?.name,
|
|
527
|
-
childCount: ctx.workflowNode.children.length,
|
|
528
|
-
depth: calculateDepth(ctx.workflowNode)
|
|
529
|
-
};
|
|
530
|
-
}
|
|
531
|
-
```
|
|
532
|
-
2. Implement remaining handlers similarly
|
|
533
|
-
3. Create tool executor registry
|
|
534
|
-
4. Register handlers with MCPHandler pattern
|
|
535
|
-
|
|
536
|
-
**Output**: Working introspection tool handlers
|
|
537
|
-
|
|
538
|
-
**Validation**:
|
|
539
|
-
```bash
|
|
540
|
-
npm test -- --grep "introspection-tools"
|
|
541
|
-
```
|
|
542
|
-
|
|
543
|
-
---
|
|
544
|
-
|
|
545
|
-
### Task P4.5: Introspection Tools Bundle
|
|
546
|
-
**Depends on**: Task P4.4
|
|
547
|
-
|
|
548
|
-
**Input**: All introspection tool definitions and handlers
|
|
549
|
-
|
|
550
|
-
**Steps**:
|
|
551
|
-
1. Export bundle from `/src/tools/introspection.ts`:
|
|
552
|
-
```typescript
|
|
553
|
-
export const INTROSPECTION_TOOLS: Tool[] = [
|
|
554
|
-
inspectCurrentNodeTool,
|
|
555
|
-
readAncestorChainTool,
|
|
556
|
-
listSiblingsChildrenTool,
|
|
557
|
-
inspectPriorOutputsTool,
|
|
558
|
-
inspectCacheStatusTool,
|
|
559
|
-
requestSpawnWorkflowTool
|
|
560
|
-
];
|
|
561
|
-
|
|
562
|
-
export function registerIntrospectionTools(handler: MCPHandler): void {
|
|
563
|
-
// Register all tool handlers
|
|
564
|
-
}
|
|
565
|
-
```
|
|
566
|
-
2. Export from `/src/index.ts`
|
|
567
|
-
|
|
568
|
-
**Output**: Single import for all introspection tools
|
|
569
|
-
|
|
570
|
-
**Validation**: Import works from main package
|
|
571
|
-
|
|
572
|
-
---
|
|
573
|
-
|
|
574
|
-
### Phase 5: Examples (partial - Agent/Prompt focused)
|
|
575
|
-
|
|
576
|
-
---
|
|
577
|
-
|
|
578
|
-
### Task P5.1: Example 7 - Agent Loops with Observability
|
|
579
|
-
**Depends on**: All Phase 3-4 tasks
|
|
580
|
-
|
|
581
|
-
**Input**: PRD Section 12 item 7
|
|
582
|
-
|
|
583
|
-
**Steps**:
|
|
584
|
-
1. Create `/examples/examples/07-agent-loops.ts`
|
|
585
|
-
2. Implement:
|
|
586
|
-
- Array of items to process
|
|
587
|
-
- for loop with ctx.step() for each item
|
|
588
|
-
- Multiple agents for different item types
|
|
589
|
-
- Full event tree visualization
|
|
590
|
-
- Timing metrics per step
|
|
591
|
-
|
|
592
|
-
**Output**: Working example with observability
|
|
593
|
-
|
|
594
|
-
---
|
|
595
|
-
|
|
596
|
-
### Task P5.2: Example 8 - SDK Features (Tools, MCPs, Hooks)
|
|
597
|
-
**Depends on**: Task P5.1
|
|
598
|
-
|
|
599
|
-
**Input**: PRD Section 12 item 8
|
|
600
|
-
|
|
601
|
-
**Steps**:
|
|
602
|
-
1. Create `/examples/examples/08-sdk-features.ts`
|
|
603
|
-
2. Implement:
|
|
604
|
-
- Custom tool definitions
|
|
605
|
-
- MCP server configuration
|
|
606
|
-
- Pre/Post tool hooks
|
|
607
|
-
- Skills integration
|
|
608
|
-
- Event capture demonstration
|
|
609
|
-
|
|
610
|
-
**Output**: Comprehensive SDK integration example
|
|
611
|
-
|
|
612
|
-
---
|
|
613
|
-
|
|
614
|
-
### Task P5.3: Example 9 - Multi-level Reflection
|
|
615
|
-
**Depends on**: Task P5.2
|
|
616
|
-
|
|
617
|
-
**Input**: PRD Section 12 item 9
|
|
618
|
-
|
|
619
|
-
**Steps**:
|
|
620
|
-
1. Create `/examples/examples/09-reflection.ts`
|
|
621
|
-
2. Implement three scenarios:
|
|
622
|
-
- Workflow-level: step fails, reflection retries
|
|
623
|
-
- Agent-level: prompt fails validation, agent reflects
|
|
624
|
-
- Prompt-level: enableReflection on specific prompt
|
|
625
|
-
3. Show reflection events in tree output
|
|
626
|
-
|
|
627
|
-
**Output**: Multi-level reflection demonstration
|
|
628
|
-
|
|
629
|
-
---
|
|
630
|
-
|
|
631
|
-
### Task P5.4: Example 10 - Introspection Tools Demo
|
|
632
|
-
**Depends on**: Task P5.3
|
|
633
|
-
|
|
634
|
-
**Input**: PRD Section 12 item 10
|
|
635
|
-
|
|
636
|
-
**Steps**:
|
|
637
|
-
1. Create `/examples/examples/10-introspection.ts`
|
|
638
|
-
2. Implement:
|
|
639
|
-
- Agent with all INTROSPECTION_TOOLS
|
|
640
|
-
- Nested workflow structure
|
|
641
|
-
- Prompt asking agent to describe its position
|
|
642
|
-
- Agent using tools to explore hierarchy
|
|
643
|
-
|
|
644
|
-
**Output**: Agent self-awareness demonstration
|
|
645
|
-
|
|
646
|
-
---
|
|
647
|
-
|
|
648
|
-
### Task P5.5: Update Main Exports
|
|
649
|
-
**Depends on**: All prior tasks
|
|
650
|
-
|
|
651
|
-
**Input**: All new classes, types, tools
|
|
652
|
-
|
|
653
|
-
**Steps**:
|
|
654
|
-
1. Update `/src/index.ts` with all new exports:
|
|
655
|
-
```typescript
|
|
656
|
-
// Cache
|
|
657
|
-
export { LLMCache, defaultCache } from './cache/cache.js';
|
|
658
|
-
export { generateCacheKey } from './cache/cache-key.js';
|
|
659
|
-
export type { CacheConfig, CacheMetrics } from './cache/cache.js';
|
|
660
|
-
|
|
661
|
-
// Reflection
|
|
662
|
-
export { ReflectionManager } from './reflection/reflection.js';
|
|
663
|
-
export type {
|
|
664
|
-
ReflectionAPI,
|
|
665
|
-
ReflectionConfig,
|
|
666
|
-
ReflectionEntry
|
|
667
|
-
} from './types/reflection.js';
|
|
668
|
-
|
|
669
|
-
// Introspection
|
|
670
|
-
export { INTROSPECTION_TOOLS, registerIntrospectionTools } from './tools/introspection.js';
|
|
671
|
-
|
|
672
|
-
// Factories
|
|
673
|
-
export { createWorkflow, createAgent, createPrompt } from './core/factory.js';
|
|
674
|
-
```
|
|
675
|
-
2. Update `/src/types/index.ts` with new type exports
|
|
676
|
-
|
|
677
|
-
**Output**: Complete public API
|
|
678
|
-
|
|
679
|
-
**Validation**:
|
|
680
|
-
```bash
|
|
681
|
-
npm run build
|
|
682
|
-
node -e "const g = require('./dist'); console.log(Object.keys(g))"
|
|
683
|
-
```
|
|
684
|
-
|
|
685
|
-
---
|
|
686
|
-
|
|
687
|
-
## 4. Implementation Details
|
|
688
|
-
|
|
689
|
-
### Code Patterns to Follow
|
|
690
|
-
|
|
691
|
-
```typescript
|
|
692
|
-
// Cache key generation pattern (deterministic)
|
|
693
|
-
import { createHash } from 'node:crypto';
|
|
694
|
-
|
|
695
|
-
function generateCacheKey(inputs: CacheKeyInputs): string {
|
|
696
|
-
const normalized = {
|
|
697
|
-
user: inputs.user,
|
|
698
|
-
data: inputs.data,
|
|
699
|
-
system: inputs.system,
|
|
700
|
-
model: inputs.model,
|
|
701
|
-
temperature: inputs.temperature,
|
|
702
|
-
maxTokens: inputs.maxTokens,
|
|
703
|
-
tools: inputs.tools?.map(t => t.name).sort(),
|
|
704
|
-
mcps: inputs.mcps?.map(m => m.name).sort(),
|
|
705
|
-
skills: inputs.skills?.map(s => s.name).sort(),
|
|
706
|
-
schemaHash: getSchemaHash(inputs.responseFormat)
|
|
707
|
-
};
|
|
708
|
-
|
|
709
|
-
return createHash('sha256')
|
|
710
|
-
.update(deterministicStringify(normalized))
|
|
711
|
-
.digest('hex');
|
|
712
|
-
}
|
|
713
|
-
```
|
|
714
|
-
|
|
715
|
-
```typescript
|
|
716
|
-
// Reflection retry pattern
|
|
717
|
-
async function executeWithReflection<T>(
|
|
718
|
-
fn: () => Promise<T>,
|
|
719
|
-
reflection: ReflectionAPI,
|
|
720
|
-
context: Partial<ReflectionContext>
|
|
721
|
-
): Promise<T> {
|
|
722
|
-
const maxAttempts = 3;
|
|
723
|
-
|
|
724
|
-
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
725
|
-
try {
|
|
726
|
-
return await fn();
|
|
727
|
-
} catch (error) {
|
|
728
|
-
if (!reflection.isEnabled() || attempt === maxAttempts) {
|
|
729
|
-
throw error;
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
const result = await reflection.reflect({
|
|
733
|
-
...context,
|
|
734
|
-
error: error as Error,
|
|
735
|
-
attemptNumber: attempt
|
|
736
|
-
} as ReflectionContext);
|
|
737
|
-
|
|
738
|
-
if (!result.shouldRetry) {
|
|
739
|
-
throw error;
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
|
|
744
|
-
throw new Error('Max reflection attempts exceeded');
|
|
745
|
-
}
|
|
746
|
-
```
|
|
747
|
-
|
|
748
|
-
### File Structure
|
|
749
|
-
```
|
|
750
|
-
/src
|
|
751
|
-
├── cache/
|
|
752
|
-
│ ├── cache.ts # LLMCache class
|
|
753
|
-
│ ├── cache-key.ts # Key generation
|
|
754
|
-
│ └── index.ts # Cache exports
|
|
755
|
-
├── reflection/
|
|
756
|
-
│ ├── reflection.ts # ReflectionManager
|
|
757
|
-
│ └── index.ts # Reflection exports
|
|
758
|
-
├── tools/
|
|
759
|
-
│ ├── introspection.ts # Introspection tools
|
|
760
|
-
│ └── index.ts # Tools exports
|
|
761
|
-
├── types/
|
|
762
|
-
│ ├── reflection.ts # NEW: Reflection types
|
|
763
|
-
│ └── ... (existing)
|
|
764
|
-
└── ... (existing)
|
|
765
|
-
|
|
766
|
-
/examples/examples/
|
|
767
|
-
├── 07-agent-loops.ts # NEW
|
|
768
|
-
├── 08-sdk-features.ts # NEW
|
|
769
|
-
├── 09-reflection.ts # NEW
|
|
770
|
-
└── 10-introspection.ts # NEW
|
|
771
|
-
```
|
|
772
|
-
|
|
773
|
-
### Interface Definitions
|
|
774
|
-
```typescript
|
|
775
|
-
// Key new interfaces
|
|
776
|
-
|
|
777
|
-
interface CacheKeyInputs {
|
|
778
|
-
user: string;
|
|
779
|
-
data?: Record<string, unknown>;
|
|
780
|
-
system?: string;
|
|
781
|
-
model: string;
|
|
782
|
-
temperature?: number;
|
|
783
|
-
maxTokens?: number;
|
|
784
|
-
tools?: Tool[];
|
|
785
|
-
mcps?: MCPServer[];
|
|
786
|
-
skills?: Skill[];
|
|
787
|
-
responseFormat: z.ZodType;
|
|
788
|
-
}
|
|
789
|
-
|
|
790
|
-
interface ReflectionAPI {
|
|
791
|
-
isEnabled(): boolean;
|
|
792
|
-
triggerReflection(reason?: string): Promise<void>;
|
|
793
|
-
getReflectionHistory(): ReflectionEntry[];
|
|
794
|
-
reflect(context: ReflectionContext): Promise<ReflectionResult>;
|
|
795
|
-
}
|
|
796
|
-
|
|
797
|
-
type IntrospectionTool = Tool & {
|
|
798
|
-
handler: (input: unknown) => Promise<unknown>;
|
|
799
|
-
};
|
|
800
|
-
```
|
|
801
|
-
|
|
802
|
-
---
|
|
803
|
-
|
|
804
|
-
## 5. Testing Strategy
|
|
805
|
-
|
|
806
|
-
### Unit Tests
|
|
807
|
-
```yaml
|
|
808
|
-
test_files:
|
|
809
|
-
- path: "/src/__tests__/unit/cache-key.test.ts"
|
|
810
|
-
covers:
|
|
811
|
-
- "deterministicStringify produces same output for same input"
|
|
812
|
-
- "getSchemaHash produces consistent hashes"
|
|
813
|
-
- "generateCacheKey is deterministic"
|
|
814
|
-
- "Different inputs produce different keys"
|
|
815
|
-
|
|
816
|
-
- path: "/src/__tests__/unit/cache.test.ts"
|
|
817
|
-
covers:
|
|
818
|
-
- "LRU eviction works correctly"
|
|
819
|
-
- "TTL expiration works"
|
|
820
|
-
- "bustPrefix removes correct entries"
|
|
821
|
-
- "Size limits enforced"
|
|
822
|
-
|
|
823
|
-
- path: "/src/__tests__/unit/reflection.test.ts"
|
|
824
|
-
covers:
|
|
825
|
-
- "ReflectionManager.reflect() builds correct prompt"
|
|
826
|
-
- "History is recorded"
|
|
827
|
-
- "maxAttempts is respected"
|
|
828
|
-
|
|
829
|
-
- path: "/src/__tests__/unit/introspection-tools.test.ts"
|
|
830
|
-
covers:
|
|
831
|
-
- "Each tool handler returns expected format"
|
|
832
|
-
- "Tools work within context"
|
|
833
|
-
- "Tools fail gracefully outside context"
|
|
834
|
-
|
|
835
|
-
test_patterns:
|
|
836
|
-
- "Use vitest describe/it/expect"
|
|
837
|
-
- "Mock Agent for reflection tests"
|
|
838
|
-
- "Use runInContext for introspection tests"
|
|
839
|
-
```
|
|
840
|
-
|
|
841
|
-
### Integration Tests
|
|
842
|
-
```yaml
|
|
843
|
-
scenarios:
|
|
844
|
-
- name: "Cache integration with Agent"
|
|
845
|
-
validates: "Second identical prompt returns cached response"
|
|
846
|
-
file: "/src/__tests__/integration/agent-cache.test.ts"
|
|
847
|
-
|
|
848
|
-
- name: "Reflection in workflow step"
|
|
849
|
-
validates: "Failed step triggers reflection, retry succeeds"
|
|
850
|
-
file: "/src/__tests__/integration/workflow-reflection.test.ts"
|
|
851
|
-
|
|
852
|
-
- name: "Introspection tools in agent"
|
|
853
|
-
validates: "Agent can use tools to explore hierarchy"
|
|
854
|
-
file: "/src/__tests__/integration/introspection.test.ts"
|
|
855
|
-
```
|
|
856
|
-
|
|
857
|
-
### Manual Validation
|
|
858
|
-
```yaml
|
|
859
|
-
steps:
|
|
860
|
-
- action: "Run example 09-reflection.ts"
|
|
861
|
-
expected: "See reflection events in console, retry succeeds"
|
|
862
|
-
command: "npx tsx examples/examples/09-reflection.ts"
|
|
863
|
-
|
|
864
|
-
- action: "Run example 10-introspection.ts"
|
|
865
|
-
expected: "Agent describes its position in hierarchy"
|
|
866
|
-
command: "npx tsx examples/examples/10-introspection.ts"
|
|
867
|
-
```
|
|
868
|
-
|
|
869
|
-
---
|
|
870
|
-
|
|
871
|
-
## 6. Final Validation Checklist
|
|
872
|
-
|
|
873
|
-
### Code Quality
|
|
874
|
-
- [ ] All TypeScript compiles without errors: `npm run build`
|
|
875
|
-
- [ ] No linting warnings: `npm run lint`
|
|
876
|
-
- [ ] Follows existing code patterns (check agent.ts, workflow.ts)
|
|
877
|
-
- [ ] Proper error handling with typed errors
|
|
878
|
-
- [ ] No circular dependencies
|
|
879
|
-
|
|
880
|
-
### Functionality
|
|
881
|
-
- [ ] Cache generates deterministic keys
|
|
882
|
-
- [ ] Cache respects maxItems and maxSize limits
|
|
883
|
-
- [ ] Cache TTL works correctly
|
|
884
|
-
- [ ] Reflection triggers on step failures when enabled
|
|
885
|
-
- [ ] Reflection respects maxAttempts limit
|
|
886
|
-
- [ ] All 6 introspection tools work
|
|
887
|
-
- [ ] Dynamic factories create valid instances
|
|
888
|
-
- [ ] Context revision works without forking tree
|
|
889
|
-
|
|
890
|
-
### Testing
|
|
891
|
-
- [ ] Unit tests pass: `npm test -- --grep "cache|reflection|introspection"`
|
|
892
|
-
- [ ] Integration tests pass: `npm test`
|
|
893
|
-
- [ ] Manual validation with examples complete
|
|
894
|
-
|
|
895
|
-
### Documentation
|
|
896
|
-
- [ ] Code is self-documenting with clear names
|
|
897
|
-
- [ ] Complex logic has comments
|
|
898
|
-
- [ ] Public APIs have JSDoc
|
|
899
|
-
- [ ] Examples have header comments explaining purpose
|
|
900
|
-
|
|
901
|
-
---
|
|
902
|
-
|
|
903
|
-
## 7. "No Prior Knowledge" Test
|
|
904
|
-
|
|
905
|
-
**Validation**: If someone knew nothing about this codebase, would they have everything needed to implement this successfully using only this PRP?
|
|
906
|
-
|
|
907
|
-
- [x] All file paths are absolute and specific
|
|
908
|
-
- [x] All patterns have concrete examples
|
|
909
|
-
- [x] All dependencies are explicitly listed
|
|
910
|
-
- [x] All validation steps are executable
|
|
911
|
-
- [x] No assumed knowledge of codebase internals
|
|
912
|
-
- [x] Research documents provide background context
|
|
913
|
-
|
|
914
|
-
---
|
|
915
|
-
|
|
916
|
-
## Research References
|
|
917
|
-
|
|
918
|
-
See `/plan/P3P4/research/` for detailed research:
|
|
919
|
-
- `caching-lru.md` - LRU cache implementation patterns
|
|
920
|
-
- `reflection-patterns.md` - AI reflection/self-correction patterns
|
|
921
|
-
- `introspection-tools.md` - Tool definitions and security considerations
|
|
922
|
-
|
|
923
|
-
---
|
|
924
|
-
|
|
925
|
-
## Confidence Score: 8/10
|
|
926
|
-
|
|
927
|
-
**Strengths:**
|
|
928
|
-
- Clear existing patterns to follow from Phase 1 & 2
|
|
929
|
-
- Comprehensive research on caching and reflection
|
|
930
|
-
- Specific file locations and code examples
|
|
931
|
-
- Detailed validation steps
|
|
932
|
-
|
|
933
|
-
**Risks:**
|
|
934
|
-
- Reflection prompt effectiveness depends on LLM behavior
|
|
935
|
-
- Introspection tool handlers need careful context access
|
|
936
|
-
- Cache key generation for complex Zod schemas may need iteration
|
|
937
|
-
- Some examples require real API calls (need mocking strategy)
|
|
938
|
-
|
|
939
|
-
**Mitigations:**
|
|
940
|
-
- Provide sensible defaults for reflection prompts
|
|
941
|
-
- Extensive test coverage for edge cases
|
|
942
|
-
- Schema hashing tested with various Zod types
|
|
943
|
-
- Mock Anthropic client for example testing
|