@methodts/runtime 0.1.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/dist/__fixtures__/executor-fixtures.d.ts +10 -0
- package/dist/__fixtures__/executor-fixtures.d.ts.map +1 -0
- package/dist/__fixtures__/executor-fixtures.js +36 -0
- package/dist/__fixtures__/executor-fixtures.js.map +1 -0
- package/dist/architecture.test.d.ts +2 -0
- package/dist/architecture.test.d.ts.map +1 -0
- package/dist/architecture.test.js +143 -0
- package/dist/architecture.test.js.map +1 -0
- package/dist/config/cost-governor-config.d.ts +40 -0
- package/dist/config/cost-governor-config.d.ts.map +1 -0
- package/dist/config/cost-governor-config.js +48 -0
- package/dist/config/cost-governor-config.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/sessions-config.d.ts +29 -0
- package/dist/config/sessions-config.d.ts.map +1 -0
- package/dist/config/sessions-config.js +37 -0
- package/dist/config/sessions-config.js.map +1 -0
- package/dist/config/strategies-config.d.ts +38 -0
- package/dist/config/strategies-config.d.ts.map +1 -0
- package/dist/config/strategies-config.js +41 -0
- package/dist/config/strategies-config.js.map +1 -0
- package/dist/cost-governor/backpressure-queue.d.ts +20 -0
- package/dist/cost-governor/backpressure-queue.d.ts.map +1 -0
- package/dist/cost-governor/backpressure-queue.js +78 -0
- package/dist/cost-governor/backpressure-queue.js.map +1 -0
- package/dist/cost-governor/backpressure-queue.test.d.ts +2 -0
- package/dist/cost-governor/backpressure-queue.test.d.ts.map +1 -0
- package/dist/cost-governor/backpressure-queue.test.js +48 -0
- package/dist/cost-governor/backpressure-queue.test.js.map +1 -0
- package/dist/cost-governor/cost-events.d.ts +65 -0
- package/dist/cost-governor/cost-events.d.ts.map +1 -0
- package/dist/cost-governor/cost-events.js +48 -0
- package/dist/cost-governor/cost-events.js.map +1 -0
- package/dist/cost-governor/cost-governor-app-id.test.d.ts +19 -0
- package/dist/cost-governor/cost-governor-app-id.test.d.ts.map +1 -0
- package/dist/cost-governor/cost-governor-app-id.test.js +201 -0
- package/dist/cost-governor/cost-governor-app-id.test.js.map +1 -0
- package/dist/cost-governor/cost-oracle-impl.d.ts +19 -0
- package/dist/cost-governor/cost-oracle-impl.d.ts.map +1 -0
- package/dist/cost-governor/cost-oracle-impl.js +52 -0
- package/dist/cost-governor/cost-oracle-impl.js.map +1 -0
- package/dist/cost-governor/estimator.d.ts +22 -0
- package/dist/cost-governor/estimator.d.ts.map +1 -0
- package/dist/cost-governor/estimator.js +119 -0
- package/dist/cost-governor/estimator.js.map +1 -0
- package/dist/cost-governor/estimator.test.d.ts +2 -0
- package/dist/cost-governor/estimator.test.d.ts.map +1 -0
- package/dist/cost-governor/estimator.test.js +141 -0
- package/dist/cost-governor/estimator.test.js.map +1 -0
- package/dist/cost-governor/index.d.ts +75 -0
- package/dist/cost-governor/index.d.ts.map +1 -0
- package/dist/cost-governor/index.js +120 -0
- package/dist/cost-governor/index.js.map +1 -0
- package/dist/cost-governor/observations-store.d.ts +49 -0
- package/dist/cost-governor/observations-store.d.ts.map +1 -0
- package/dist/cost-governor/observations-store.js +179 -0
- package/dist/cost-governor/observations-store.js.map +1 -0
- package/dist/cost-governor/observations-store.test.d.ts +2 -0
- package/dist/cost-governor/observations-store.test.d.ts.map +1 -0
- package/dist/cost-governor/observations-store.test.js +191 -0
- package/dist/cost-governor/observations-store.test.js.map +1 -0
- package/dist/cost-governor/percentile.d.ts +17 -0
- package/dist/cost-governor/percentile.d.ts.map +1 -0
- package/dist/cost-governor/percentile.js +33 -0
- package/dist/cost-governor/percentile.js.map +1 -0
- package/dist/cost-governor/percentile.test.d.ts +2 -0
- package/dist/cost-governor/percentile.test.d.ts.map +1 -0
- package/dist/cost-governor/percentile.test.js +46 -0
- package/dist/cost-governor/percentile.test.js.map +1 -0
- package/dist/cost-governor/rate-governor-impl.d.ts +73 -0
- package/dist/cost-governor/rate-governor-impl.d.ts.map +1 -0
- package/dist/cost-governor/rate-governor-impl.js +148 -0
- package/dist/cost-governor/rate-governor-impl.js.map +1 -0
- package/dist/cost-governor/signature-builder.d.ts +22 -0
- package/dist/cost-governor/signature-builder.d.ts.map +1 -0
- package/dist/cost-governor/signature-builder.js +43 -0
- package/dist/cost-governor/signature-builder.js.map +1 -0
- package/dist/cost-governor/signature-builder.test.d.ts +2 -0
- package/dist/cost-governor/signature-builder.test.d.ts.map +1 -0
- package/dist/cost-governor/signature-builder.test.js +58 -0
- package/dist/cost-governor/signature-builder.test.js.map +1 -0
- package/dist/cost-governor/token-bucket.d.ts +57 -0
- package/dist/cost-governor/token-bucket.d.ts.map +1 -0
- package/dist/cost-governor/token-bucket.js +109 -0
- package/dist/cost-governor/token-bucket.js.map +1 -0
- package/dist/cost-governor/token-bucket.test.d.ts +2 -0
- package/dist/cost-governor/token-bucket.test.d.ts.map +1 -0
- package/dist/cost-governor/token-bucket.test.js +67 -0
- package/dist/cost-governor/token-bucket.test.js.map +1 -0
- package/dist/dlq/cortex-dlq-observer.d.ts +22 -0
- package/dist/dlq/cortex-dlq-observer.d.ts.map +1 -0
- package/dist/dlq/cortex-dlq-observer.js +29 -0
- package/dist/dlq/cortex-dlq-observer.js.map +1 -0
- package/dist/dlq/dlq-observer.test.d.ts +8 -0
- package/dist/dlq/dlq-observer.test.d.ts.map +1 -0
- package/dist/dlq/dlq-observer.test.js +103 -0
- package/dist/dlq/dlq-observer.test.js.map +1 -0
- package/dist/dlq/index.d.ts +6 -0
- package/dist/dlq/index.d.ts.map +1 -0
- package/dist/dlq/index.js +6 -0
- package/dist/dlq/index.js.map +1 -0
- package/dist/event-bus/adapters.d.ts +50 -0
- package/dist/event-bus/adapters.d.ts.map +1 -0
- package/dist/event-bus/adapters.js +51 -0
- package/dist/event-bus/adapters.js.map +1 -0
- package/dist/event-bus/adapters.test.d.ts +5 -0
- package/dist/event-bus/adapters.test.d.ts.map +1 -0
- package/dist/event-bus/adapters.test.js +73 -0
- package/dist/event-bus/adapters.test.js.map +1 -0
- package/dist/event-bus/agent-event-adapter.d.ts +22 -0
- package/dist/event-bus/agent-event-adapter.d.ts.map +1 -0
- package/dist/event-bus/agent-event-adapter.js +49 -0
- package/dist/event-bus/agent-event-adapter.js.map +1 -0
- package/dist/event-bus/agent-event-adapter.test.d.ts +5 -0
- package/dist/event-bus/agent-event-adapter.test.d.ts.map +1 -0
- package/dist/event-bus/agent-event-adapter.test.js +170 -0
- package/dist/event-bus/agent-event-adapter.test.js.map +1 -0
- package/dist/event-bus/channel-sink.d.ts +71 -0
- package/dist/event-bus/channel-sink.d.ts.map +1 -0
- package/dist/event-bus/channel-sink.js +159 -0
- package/dist/event-bus/channel-sink.js.map +1 -0
- package/dist/event-bus/channel-sink.test.d.ts +5 -0
- package/dist/event-bus/channel-sink.test.d.ts.map +1 -0
- package/dist/event-bus/channel-sink.test.js +234 -0
- package/dist/event-bus/channel-sink.test.js.map +1 -0
- package/dist/event-bus/event-types.snapshot.test.d.ts +27 -0
- package/dist/event-bus/event-types.snapshot.test.d.ts.map +1 -0
- package/dist/event-bus/event-types.snapshot.test.js +165 -0
- package/dist/event-bus/event-types.snapshot.test.js.map +1 -0
- package/dist/event-bus/genesis-sink.d.ts +55 -0
- package/dist/event-bus/genesis-sink.d.ts.map +1 -0
- package/dist/event-bus/genesis-sink.js +141 -0
- package/dist/event-bus/genesis-sink.js.map +1 -0
- package/dist/event-bus/genesis-sink.test.d.ts +5 -0
- package/dist/event-bus/genesis-sink.test.d.ts.map +1 -0
- package/dist/event-bus/genesis-sink.test.js +160 -0
- package/dist/event-bus/genesis-sink.test.js.map +1 -0
- package/dist/event-bus/in-memory-event-bus.d.ts +60 -0
- package/dist/event-bus/in-memory-event-bus.d.ts.map +1 -0
- package/dist/event-bus/in-memory-event-bus.js +274 -0
- package/dist/event-bus/in-memory-event-bus.js.map +1 -0
- package/dist/event-bus/in-memory-event-bus.test.d.ts +5 -0
- package/dist/event-bus/in-memory-event-bus.test.d.ts.map +1 -0
- package/dist/event-bus/in-memory-event-bus.test.js +457 -0
- package/dist/event-bus/in-memory-event-bus.test.js.map +1 -0
- package/dist/event-bus/index.d.ts +22 -0
- package/dist/event-bus/index.d.ts.map +1 -0
- package/dist/event-bus/index.js +17 -0
- package/dist/event-bus/index.js.map +1 -0
- package/dist/event-bus/persistence-sink.d.ts +74 -0
- package/dist/event-bus/persistence-sink.d.ts.map +1 -0
- package/dist/event-bus/persistence-sink.js +193 -0
- package/dist/event-bus/persistence-sink.js.map +1 -0
- package/dist/event-bus/persistence-sink.test.d.ts +6 -0
- package/dist/event-bus/persistence-sink.test.d.ts.map +1 -0
- package/dist/event-bus/persistence-sink.test.js +319 -0
- package/dist/event-bus/persistence-sink.test.js.map +1 -0
- package/dist/event-bus/session-checkpoint-sink.d.ts +91 -0
- package/dist/event-bus/session-checkpoint-sink.d.ts.map +1 -0
- package/dist/event-bus/session-checkpoint-sink.js +107 -0
- package/dist/event-bus/session-checkpoint-sink.js.map +1 -0
- package/dist/event-bus/session-checkpoint-sink.test.d.ts +5 -0
- package/dist/event-bus/session-checkpoint-sink.test.d.ts.map +1 -0
- package/dist/event-bus/session-checkpoint-sink.test.js +215 -0
- package/dist/event-bus/session-checkpoint-sink.test.js.map +1 -0
- package/dist/event-bus/webhook-connector.d.ts +59 -0
- package/dist/event-bus/webhook-connector.d.ts.map +1 -0
- package/dist/event-bus/webhook-connector.js +191 -0
- package/dist/event-bus/webhook-connector.js.map +1 -0
- package/dist/event-bus/webhook-connector.test.d.ts +5 -0
- package/dist/event-bus/webhook-connector.test.d.ts.map +1 -0
- package/dist/event-bus/webhook-connector.test.js +214 -0
- package/dist/event-bus/webhook-connector.test.js.map +1 -0
- package/dist/executors/cortex-job-backed-executor.d.ts +137 -0
- package/dist/executors/cortex-job-backed-executor.d.ts.map +1 -0
- package/dist/executors/cortex-job-backed-executor.js +441 -0
- package/dist/executors/cortex-job-backed-executor.js.map +1 -0
- package/dist/executors/cortex-job-backed-executor.test.d.ts +13 -0
- package/dist/executors/cortex-job-backed-executor.test.d.ts.map +1 -0
- package/dist/executors/cortex-job-backed-executor.test.js +303 -0
- package/dist/executors/cortex-job-backed-executor.test.js.map +1 -0
- package/dist/executors/index.d.ts +9 -0
- package/dist/executors/index.d.ts.map +1 -0
- package/dist/executors/index.js +9 -0
- package/dist/executors/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/ports/checkpoint-sink.d.ts +69 -0
- package/dist/ports/checkpoint-sink.d.ts.map +1 -0
- package/dist/ports/checkpoint-sink.js +16 -0
- package/dist/ports/checkpoint-sink.js.map +1 -0
- package/dist/ports/checkpoint.d.ts +68 -0
- package/dist/ports/checkpoint.d.ts.map +1 -0
- package/dist/ports/checkpoint.js +14 -0
- package/dist/ports/checkpoint.js.map +1 -0
- package/dist/ports/continuation-envelope-cross-app.test.d.ts +10 -0
- package/dist/ports/continuation-envelope-cross-app.test.d.ts.map +1 -0
- package/dist/ports/continuation-envelope-cross-app.test.js +95 -0
- package/dist/ports/continuation-envelope-cross-app.test.js.map +1 -0
- package/dist/ports/continuation-envelope.d.ts +199 -0
- package/dist/ports/continuation-envelope.d.ts.map +1 -0
- package/dist/ports/continuation-envelope.js +69 -0
- package/dist/ports/continuation-envelope.js.map +1 -0
- package/dist/ports/conversation.d.ts +64 -0
- package/dist/ports/conversation.d.ts.map +1 -0
- package/dist/ports/conversation.js +19 -0
- package/dist/ports/conversation.js.map +1 -0
- package/dist/ports/cost-oracle.d.ts +26 -0
- package/dist/ports/cost-oracle.d.ts.map +1 -0
- package/dist/ports/cost-oracle.js +9 -0
- package/dist/ports/cost-oracle.js.map +1 -0
- package/dist/ports/cross-app-invoker.d.ts +198 -0
- package/dist/ports/cross-app-invoker.d.ts.map +1 -0
- package/dist/ports/cross-app-invoker.js +157 -0
- package/dist/ports/cross-app-invoker.js.map +1 -0
- package/dist/ports/dlq-observer.d.ts +40 -0
- package/dist/ports/dlq-observer.d.ts.map +1 -0
- package/dist/ports/dlq-observer.js +20 -0
- package/dist/ports/dlq-observer.js.map +1 -0
- package/dist/ports/event-bus.d.ts +169 -0
- package/dist/ports/event-bus.d.ts.map +1 -0
- package/dist/ports/event-bus.js +20 -0
- package/dist/ports/event-bus.js.map +1 -0
- package/dist/ports/event-reader.d.ts +21 -0
- package/dist/ports/event-reader.d.ts.map +1 -0
- package/dist/ports/event-reader.js +12 -0
- package/dist/ports/event-reader.js.map +1 -0
- package/dist/ports/event-rotator.d.ts +39 -0
- package/dist/ports/event-rotator.d.ts.map +1 -0
- package/dist/ports/event-rotator.js +15 -0
- package/dist/ports/event-rotator.js.map +1 -0
- package/dist/ports/file-system.d.ts +48 -0
- package/dist/ports/file-system.d.ts.map +1 -0
- package/dist/ports/file-system.js +10 -0
- package/dist/ports/file-system.js.map +1 -0
- package/dist/ports/historical-observations.d.ts +39 -0
- package/dist/ports/historical-observations.d.ts.map +1 -0
- package/dist/ports/historical-observations.js +12 -0
- package/dist/ports/historical-observations.js.map +1 -0
- package/dist/ports/in-memory-source.d.ts +46 -0
- package/dist/ports/in-memory-source.d.ts.map +1 -0
- package/dist/ports/in-memory-source.js +69 -0
- package/dist/ports/in-memory-source.js.map +1 -0
- package/dist/ports/index.d.ts +32 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +10 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/job-backed-executor.d.ts +139 -0
- package/dist/ports/job-backed-executor.d.ts.map +1 -0
- package/dist/ports/job-backed-executor.js +56 -0
- package/dist/ports/job-backed-executor.js.map +1 -0
- package/dist/ports/methodology-source.d.ts +95 -0
- package/dist/ports/methodology-source.d.ts.map +1 -0
- package/dist/ports/methodology-source.js +26 -0
- package/dist/ports/methodology-source.js.map +1 -0
- package/dist/ports/native-session-discovery.d.ts +20 -0
- package/dist/ports/native-session-discovery.d.ts.map +1 -0
- package/dist/ports/native-session-discovery.js +13 -0
- package/dist/ports/native-session-discovery.js.map +1 -0
- package/dist/ports/projection-store.d.ts +48 -0
- package/dist/ports/projection-store.d.ts.map +1 -0
- package/dist/ports/projection-store.js +17 -0
- package/dist/ports/projection-store.js.map +1 -0
- package/dist/ports/projection.d.ts +29 -0
- package/dist/ports/projection.d.ts.map +1 -0
- package/dist/ports/projection.js +13 -0
- package/dist/ports/projection.js.map +1 -0
- package/dist/ports/rate-governor.d.ts +17 -0
- package/dist/ports/rate-governor.d.ts.map +1 -0
- package/dist/ports/rate-governor.js +11 -0
- package/dist/ports/rate-governor.js.map +1 -0
- package/dist/ports/schedule-client.d.ts +29 -0
- package/dist/ports/schedule-client.d.ts.map +1 -0
- package/dist/ports/schedule-client.js +2 -0
- package/dist/ports/schedule-client.js.map +1 -0
- package/dist/ports/session-pool.d.ts +162 -0
- package/dist/ports/session-pool.d.ts.map +1 -0
- package/dist/ports/session-pool.js +21 -0
- package/dist/ports/session-pool.js.map +1 -0
- package/dist/ports/session-store-errors.d.ts +22 -0
- package/dist/ports/session-store-errors.d.ts.map +1 -0
- package/dist/ports/session-store-errors.js +29 -0
- package/dist/ports/session-store-errors.js.map +1 -0
- package/dist/ports/session-store-types.d.ts +132 -0
- package/dist/ports/session-store-types.d.ts.map +1 -0
- package/dist/ports/session-store-types.js +14 -0
- package/dist/ports/session-store-types.js.map +1 -0
- package/dist/ports/session-store.d.ts +69 -0
- package/dist/ports/session-store.d.ts.map +1 -0
- package/dist/ports/session-store.js +23 -0
- package/dist/ports/session-store.js.map +1 -0
- package/dist/ports/yaml-loader.d.ts +15 -0
- package/dist/ports/yaml-loader.d.ts.map +1 -0
- package/dist/ports/yaml-loader.js +13 -0
- package/dist/ports/yaml-loader.js.map +1 -0
- package/dist/scheduling/index.d.ts +6 -0
- package/dist/scheduling/index.d.ts.map +1 -0
- package/dist/scheduling/index.js +6 -0
- package/dist/scheduling/index.js.map +1 -0
- package/dist/scheduling/scheduled-pact.d.ts +97 -0
- package/dist/scheduling/scheduled-pact.d.ts.map +1 -0
- package/dist/scheduling/scheduled-pact.js +89 -0
- package/dist/scheduling/scheduled-pact.js.map +1 -0
- package/dist/sessions/__tests__/cognitive-modules.test.d.ts +10 -0
- package/dist/sessions/__tests__/cognitive-modules.test.d.ts.map +1 -0
- package/dist/sessions/__tests__/cognitive-modules.test.js +535 -0
- package/dist/sessions/__tests__/cognitive-modules.test.js.map +1 -0
- package/dist/sessions/__tests__/cognitive-provider.test.d.ts +13 -0
- package/dist/sessions/__tests__/cognitive-provider.test.d.ts.map +1 -0
- package/dist/sessions/__tests__/cognitive-provider.test.js +331 -0
- package/dist/sessions/__tests__/cognitive-provider.test.js.map +1 -0
- package/dist/sessions/__tests__/cognitive-sink.test.d.ts +19 -0
- package/dist/sessions/__tests__/cognitive-sink.test.d.ts.map +1 -0
- package/dist/sessions/__tests__/cognitive-sink.test.js +334 -0
- package/dist/sessions/__tests__/cognitive-sink.test.js.map +1 -0
- package/dist/sessions/__tests__/runtime-tools.test.d.ts +2 -0
- package/dist/sessions/__tests__/runtime-tools.test.d.ts.map +1 -0
- package/dist/sessions/__tests__/runtime-tools.test.js +83 -0
- package/dist/sessions/__tests__/runtime-tools.test.js.map +1 -0
- package/dist/sessions/auto-retro.d.ts +29 -0
- package/dist/sessions/auto-retro.d.ts.map +1 -0
- package/dist/sessions/auto-retro.js +181 -0
- package/dist/sessions/auto-retro.js.map +1 -0
- package/dist/sessions/auto-retro.test.d.ts +2 -0
- package/dist/sessions/auto-retro.test.d.ts.map +1 -0
- package/dist/sessions/auto-retro.test.js +361 -0
- package/dist/sessions/auto-retro.test.js.map +1 -0
- package/dist/sessions/channels.d.ts +55 -0
- package/dist/sessions/channels.d.ts.map +1 -0
- package/dist/sessions/channels.js +118 -0
- package/dist/sessions/channels.js.map +1 -0
- package/dist/sessions/channels.test.d.ts +2 -0
- package/dist/sessions/channels.test.d.ts.map +1 -0
- package/dist/sessions/channels.test.js +285 -0
- package/dist/sessions/channels.test.js.map +1 -0
- package/dist/sessions/cognitive-modules.d.ts +100 -0
- package/dist/sessions/cognitive-modules.d.ts.map +1 -0
- package/dist/sessions/cognitive-modules.js +458 -0
- package/dist/sessions/cognitive-modules.js.map +1 -0
- package/dist/sessions/cognitive-provider.d.ts +42 -0
- package/dist/sessions/cognitive-provider.d.ts.map +1 -0
- package/dist/sessions/cognitive-provider.js +208 -0
- package/dist/sessions/cognitive-provider.js.map +1 -0
- package/dist/sessions/cognitive-sink.d.ts +73 -0
- package/dist/sessions/cognitive-sink.d.ts.map +1 -0
- package/dist/sessions/cognitive-sink.js +154 -0
- package/dist/sessions/cognitive-sink.js.map +1 -0
- package/dist/sessions/diagnostics.d.ts +70 -0
- package/dist/sessions/diagnostics.d.ts.map +1 -0
- package/dist/sessions/diagnostics.js +129 -0
- package/dist/sessions/diagnostics.js.map +1 -0
- package/dist/sessions/diagnostics.test.d.ts +2 -0
- package/dist/sessions/diagnostics.test.d.ts.map +1 -0
- package/dist/sessions/diagnostics.test.js +135 -0
- package/dist/sessions/diagnostics.test.js.map +1 -0
- package/dist/sessions/index.d.ts +32 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +33 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/pool.d.ts +218 -0
- package/dist/sessions/pool.d.ts.map +1 -0
- package/dist/sessions/pool.js +991 -0
- package/dist/sessions/pool.js.map +1 -0
- package/dist/sessions/pool.test.d.ts +2 -0
- package/dist/sessions/pool.test.d.ts.map +1 -0
- package/dist/sessions/pool.test.js +633 -0
- package/dist/sessions/pool.test.js.map +1 -0
- package/dist/sessions/print-session.d.ts +142 -0
- package/dist/sessions/print-session.d.ts.map +1 -0
- package/dist/sessions/print-session.js +325 -0
- package/dist/sessions/print-session.js.map +1 -0
- package/dist/sessions/print-session.test.d.ts +2 -0
- package/dist/sessions/print-session.test.d.ts.map +1 -0
- package/dist/sessions/print-session.test.js +418 -0
- package/dist/sessions/print-session.test.js.map +1 -0
- package/dist/sessions/runtime-tools.d.ts +22 -0
- package/dist/sessions/runtime-tools.d.ts.map +1 -0
- package/dist/sessions/runtime-tools.js +162 -0
- package/dist/sessions/runtime-tools.js.map +1 -0
- package/dist/sessions/scope-hook.d.ts +77 -0
- package/dist/sessions/scope-hook.d.ts.map +1 -0
- package/dist/sessions/scope-hook.js +323 -0
- package/dist/sessions/scope-hook.js.map +1 -0
- package/dist/sessions/scope-hook.test.d.ts +2 -0
- package/dist/sessions/scope-hook.test.d.ts.map +1 -0
- package/dist/sessions/scope-hook.test.js +249 -0
- package/dist/sessions/scope-hook.test.js.map +1 -0
- package/dist/sessions/session-store/checkpoint-sink-impl.d.ts +16 -0
- package/dist/sessions/session-store/checkpoint-sink-impl.d.ts.map +1 -0
- package/dist/sessions/session-store/checkpoint-sink-impl.js +191 -0
- package/dist/sessions/session-store/checkpoint-sink-impl.js.map +1 -0
- package/dist/sessions/session-store/checkpoint-sink-impl.test.d.ts +5 -0
- package/dist/sessions/session-store/checkpoint-sink-impl.test.d.ts.map +1 -0
- package/dist/sessions/session-store/checkpoint-sink-impl.test.js +137 -0
- package/dist/sessions/session-store/checkpoint-sink-impl.test.js.map +1 -0
- package/dist/sessions/session-store/conformance.d.ts +59 -0
- package/dist/sessions/session-store/conformance.d.ts.map +1 -0
- package/dist/sessions/session-store/conformance.js +172 -0
- package/dist/sessions/session-store/conformance.js.map +1 -0
- package/dist/sessions/session-store/conformance.test.d.ts +7 -0
- package/dist/sessions/session-store/conformance.test.d.ts.map +1 -0
- package/dist/sessions/session-store/conformance.test.js +22 -0
- package/dist/sessions/session-store/conformance.test.js.map +1 -0
- package/dist/sessions/session-store/in-memory-session-store.d.ts +23 -0
- package/dist/sessions/session-store/in-memory-session-store.d.ts.map +1 -0
- package/dist/sessions/session-store/in-memory-session-store.js +197 -0
- package/dist/sessions/session-store/in-memory-session-store.js.map +1 -0
- package/dist/sessions/session-store/in-memory-session-store.test.d.ts +6 -0
- package/dist/sessions/session-store/in-memory-session-store.test.d.ts.map +1 -0
- package/dist/sessions/session-store/in-memory-session-store.test.js +183 -0
- package/dist/sessions/session-store/in-memory-session-store.test.js.map +1 -0
- package/dist/sessions/session-store/index.d.ts +20 -0
- package/dist/sessions/session-store/index.d.ts.map +1 -0
- package/dist/sessions/session-store/index.js +15 -0
- package/dist/sessions/session-store/index.js.map +1 -0
- package/dist/sessions/session-store/resume.d.ts +88 -0
- package/dist/sessions/session-store/resume.d.ts.map +1 -0
- package/dist/sessions/session-store/resume.js +96 -0
- package/dist/sessions/session-store/resume.js.map +1 -0
- package/dist/sessions/session-store/resume.test.d.ts +5 -0
- package/dist/sessions/session-store/resume.test.d.ts.map +1 -0
- package/dist/sessions/session-store/resume.test.js +119 -0
- package/dist/sessions/session-store/resume.test.js.map +1 -0
- package/dist/sessions/spawn-queue.d.ts +28 -0
- package/dist/sessions/spawn-queue.d.ts.map +1 -0
- package/dist/sessions/spawn-queue.js +63 -0
- package/dist/sessions/spawn-queue.js.map +1 -0
- package/dist/sessions/spawn-queue.test.d.ts +2 -0
- package/dist/sessions/spawn-queue.test.d.ts.map +1 -0
- package/dist/sessions/spawn-queue.test.js +65 -0
- package/dist/sessions/spawn-queue.test.js.map +1 -0
- package/dist/sessions/types.d.ts +16 -0
- package/dist/sessions/types.d.ts.map +1 -0
- package/dist/sessions/types.js +11 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/sessions/worktree-stale.test.d.ts +2 -0
- package/dist/sessions/worktree-stale.test.d.ts.map +1 -0
- package/dist/sessions/worktree-stale.test.js +468 -0
- package/dist/sessions/worktree-stale.test.js.map +1 -0
- package/dist/strategy/artifact-store.d.ts +12 -0
- package/dist/strategy/artifact-store.d.ts.map +1 -0
- package/dist/strategy/artifact-store.js +12 -0
- package/dist/strategy/artifact-store.js.map +1 -0
- package/dist/strategy/artifact-store.test.d.ts +2 -0
- package/dist/strategy/artifact-store.test.d.ts.map +1 -0
- package/dist/strategy/artifact-store.test.js +170 -0
- package/dist/strategy/artifact-store.test.js.map +1 -0
- package/dist/strategy/context-load-executor.d.ts +23 -0
- package/dist/strategy/context-load-executor.d.ts.map +1 -0
- package/dist/strategy/context-load-executor.js +87 -0
- package/dist/strategy/context-load-executor.js.map +1 -0
- package/dist/strategy/context-load-executor.test.d.ts +16 -0
- package/dist/strategy/context-load-executor.test.d.ts.map +1 -0
- package/dist/strategy/context-load-executor.test.js +158 -0
- package/dist/strategy/context-load-executor.test.js.map +1 -0
- package/dist/strategy/cortex-cross-app-invoker.stub.d.ts +65 -0
- package/dist/strategy/cortex-cross-app-invoker.stub.d.ts.map +1 -0
- package/dist/strategy/cortex-cross-app-invoker.stub.js +68 -0
- package/dist/strategy/cortex-cross-app-invoker.stub.js.map +1 -0
- package/dist/strategy/cross-app-node-executor.d.ts +54 -0
- package/dist/strategy/cross-app-node-executor.d.ts.map +1 -0
- package/dist/strategy/cross-app-node-executor.js +98 -0
- package/dist/strategy/cross-app-node-executor.js.map +1 -0
- package/dist/strategy/cross-app-node-executor.test.d.ts +13 -0
- package/dist/strategy/cross-app-node-executor.test.d.ts.map +1 -0
- package/dist/strategy/cross-app-node-executor.test.js +160 -0
- package/dist/strategy/cross-app-node-executor.test.js.map +1 -0
- package/dist/strategy/gates.d.ts +13 -0
- package/dist/strategy/gates.d.ts.map +1 -0
- package/dist/strategy/gates.js +13 -0
- package/dist/strategy/gates.js.map +1 -0
- package/dist/strategy/gates.test.d.ts +2 -0
- package/dist/strategy/gates.test.d.ts.map +1 -0
- package/dist/strategy/gates.test.js +299 -0
- package/dist/strategy/gates.test.js.map +1 -0
- package/dist/strategy/human-approval-resolver.d.ts +23 -0
- package/dist/strategy/human-approval-resolver.d.ts.map +1 -0
- package/dist/strategy/human-approval-resolver.js +94 -0
- package/dist/strategy/human-approval-resolver.js.map +1 -0
- package/dist/strategy/human-approval-resolver.test.d.ts +16 -0
- package/dist/strategy/human-approval-resolver.test.d.ts.map +1 -0
- package/dist/strategy/human-approval-resolver.test.js +200 -0
- package/dist/strategy/human-approval-resolver.test.js.map +1 -0
- package/dist/strategy/in-process-cross-app-invoker.d.ts +105 -0
- package/dist/strategy/in-process-cross-app-invoker.d.ts.map +1 -0
- package/dist/strategy/in-process-cross-app-invoker.js +206 -0
- package/dist/strategy/in-process-cross-app-invoker.js.map +1 -0
- package/dist/strategy/in-process-cross-app-invoker.test.d.ts +15 -0
- package/dist/strategy/in-process-cross-app-invoker.test.d.ts.map +1 -0
- package/dist/strategy/in-process-cross-app-invoker.test.js +190 -0
- package/dist/strategy/in-process-cross-app-invoker.test.js.map +1 -0
- package/dist/strategy/index.d.ts +29 -0
- package/dist/strategy/index.d.ts.map +1 -0
- package/dist/strategy/index.js +29 -0
- package/dist/strategy/index.js.map +1 -0
- package/dist/strategy/pacta-strategy.d.ts +97 -0
- package/dist/strategy/pacta-strategy.d.ts.map +1 -0
- package/dist/strategy/pacta-strategy.js +117 -0
- package/dist/strategy/pacta-strategy.js.map +1 -0
- package/dist/strategy/pacta-strategy.test.d.ts +2 -0
- package/dist/strategy/pacta-strategy.test.d.ts.map +1 -0
- package/dist/strategy/pacta-strategy.test.js +234 -0
- package/dist/strategy/pacta-strategy.test.js.map +1 -0
- package/dist/strategy/retro-generator.d.ts +18 -0
- package/dist/strategy/retro-generator.d.ts.map +1 -0
- package/dist/strategy/retro-generator.js +22 -0
- package/dist/strategy/retro-generator.js.map +1 -0
- package/dist/strategy/retro-writer.d.ts +25 -0
- package/dist/strategy/retro-writer.d.ts.map +1 -0
- package/dist/strategy/retro-writer.js +65 -0
- package/dist/strategy/retro-writer.js.map +1 -0
- package/dist/strategy/strategy-executor.d.ts +39 -0
- package/dist/strategy/strategy-executor.d.ts.map +1 -0
- package/dist/strategy/strategy-executor.js +253 -0
- package/dist/strategy/strategy-executor.js.map +1 -0
- package/dist/strategy/strategy-executor.test.d.ts +8 -0
- package/dist/strategy/strategy-executor.test.d.ts.map +1 -0
- package/dist/strategy/strategy-executor.test.js +1301 -0
- package/dist/strategy/strategy-executor.test.js.map +1 -0
- package/dist/strategy/strategy-parser.d.ts +30 -0
- package/dist/strategy/strategy-parser.d.ts.map +1 -0
- package/dist/strategy/strategy-parser.js +30 -0
- package/dist/strategy/strategy-parser.js.map +1 -0
- package/dist/strategy/sub-strategy-source.d.ts +27 -0
- package/dist/strategy/sub-strategy-source.d.ts.map +1 -0
- package/dist/strategy/sub-strategy-source.js +77 -0
- package/dist/strategy/sub-strategy-source.js.map +1 -0
- package/dist/strategy/types.d.ts +12 -0
- package/dist/strategy/types.d.ts.map +1 -0
- package/dist/strategy/types.js +9 -0
- package/dist/strategy/types.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
import { describe, it } from 'node:test';
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
4
|
+
import { evaluateGateExpression, evaluateGate, buildRetryFeedback, getDefaultRetries, getDefaultTimeout, } from './gates.js';
|
|
5
|
+
// ── Helpers ──────────────────────────────────────────────────────
|
|
6
|
+
function makeContext(overrides = {}) {
|
|
7
|
+
return {
|
|
8
|
+
output: { tests_passed: true, sections: ['intro', 'body'], score: 85 },
|
|
9
|
+
artifacts: { plan: { steps: ['a', 'b'] }, sections: ['s1', 's2', 's3'] },
|
|
10
|
+
execution_metadata: {
|
|
11
|
+
num_turns: 5,
|
|
12
|
+
cost_usd: 0.42,
|
|
13
|
+
tool_call_count: 12,
|
|
14
|
+
duration_ms: 15000,
|
|
15
|
+
},
|
|
16
|
+
...overrides,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function makeGate(overrides = {}) {
|
|
20
|
+
return {
|
|
21
|
+
type: 'algorithmic',
|
|
22
|
+
check: 'output.tests_passed === true',
|
|
23
|
+
max_retries: 3,
|
|
24
|
+
timeout_ms: 5000,
|
|
25
|
+
...overrides,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// ── Expression Evaluator Tests ──────────────────────────────────
|
|
29
|
+
describe('evaluateGateExpression', () => {
|
|
30
|
+
it('passes on simple truthy expression', async () => {
|
|
31
|
+
const ctx = makeContext();
|
|
32
|
+
const result = await evaluateGateExpression('output.tests_passed === true', ctx);
|
|
33
|
+
assert.equal(result.passed, true);
|
|
34
|
+
assert.ok(result.reason.includes('truthy'));
|
|
35
|
+
});
|
|
36
|
+
it('fails on simple falsy expression', async () => {
|
|
37
|
+
const ctx = makeContext({ output: { tests_passed: false } });
|
|
38
|
+
const result = await evaluateGateExpression('output.tests_passed === true', ctx);
|
|
39
|
+
assert.equal(result.passed, false);
|
|
40
|
+
assert.ok(result.reason.includes('falsy'));
|
|
41
|
+
});
|
|
42
|
+
it('evaluates expressions accessing artifacts', async () => {
|
|
43
|
+
const ctx = makeContext();
|
|
44
|
+
const result = await evaluateGateExpression('artifacts.sections.length >= 1', ctx);
|
|
45
|
+
assert.equal(result.passed, true);
|
|
46
|
+
});
|
|
47
|
+
it('evaluates expressions accessing execution_metadata', async () => {
|
|
48
|
+
const ctx = makeContext();
|
|
49
|
+
const result = await evaluateGateExpression('execution_metadata.num_turns > 0', ctx);
|
|
50
|
+
assert.equal(result.passed, true);
|
|
51
|
+
});
|
|
52
|
+
it('returns failed with error message on syntax error', async () => {
|
|
53
|
+
const ctx = makeContext();
|
|
54
|
+
const result = await evaluateGateExpression('output.tests_passed ===', ctx);
|
|
55
|
+
assert.equal(result.passed, false);
|
|
56
|
+
assert.ok(result.reason.startsWith('Expression error:'));
|
|
57
|
+
});
|
|
58
|
+
it('returns failed (not throws) when accessing undefined property', async () => {
|
|
59
|
+
const ctx = makeContext();
|
|
60
|
+
// output.nonexistent is undefined, .length on undefined throws
|
|
61
|
+
const result = await evaluateGateExpression('output.nonexistent.length > 0', ctx);
|
|
62
|
+
assert.equal(result.passed, false);
|
|
63
|
+
assert.ok(result.reason.startsWith('Expression error:'));
|
|
64
|
+
});
|
|
65
|
+
it('cannot access process (sandbox)', async () => {
|
|
66
|
+
const ctx = makeContext();
|
|
67
|
+
const result = await evaluateGateExpression('typeof process !== "undefined"', ctx);
|
|
68
|
+
assert.equal(result.passed, false, 'process should be undefined in sandbox');
|
|
69
|
+
});
|
|
70
|
+
it('cannot access require (sandbox)', async () => {
|
|
71
|
+
const ctx = makeContext();
|
|
72
|
+
const result = await evaluateGateExpression('typeof require !== "undefined"', ctx);
|
|
73
|
+
assert.equal(result.passed, false, 'require should be undefined in sandbox');
|
|
74
|
+
});
|
|
75
|
+
it('cannot access globalThis (sandbox)', async () => {
|
|
76
|
+
const ctx = makeContext();
|
|
77
|
+
const result = await evaluateGateExpression('typeof globalThis !== "undefined"', ctx);
|
|
78
|
+
assert.equal(result.passed, false, 'globalThis should be undefined in sandbox');
|
|
79
|
+
});
|
|
80
|
+
it('cannot use Function constructor (sandbox)', async () => {
|
|
81
|
+
const ctx = makeContext();
|
|
82
|
+
const result = await evaluateGateExpression('typeof Function !== "undefined"', ctx);
|
|
83
|
+
assert.equal(result.passed, false, 'Function should be undefined in sandbox');
|
|
84
|
+
});
|
|
85
|
+
it('context objects are frozen (cannot be mutated by expression)', async () => {
|
|
86
|
+
const ctx = makeContext();
|
|
87
|
+
// The expression attempts to mutate output — in non-strict mode, assignment
|
|
88
|
+
// to a frozen property silently fails (doesn't throw), but the mutation
|
|
89
|
+
// does not take effect. The critical invariant is that the original context
|
|
90
|
+
// is not mutated.
|
|
91
|
+
const result = await evaluateGateExpression('(() => { output.injected = true; return output.injected; })()', ctx);
|
|
92
|
+
// output.injected was never set (frozen object ignores writes),
|
|
93
|
+
// so output.injected is still undefined → falsy
|
|
94
|
+
assert.equal(result.passed, false, 'frozen object should not accept mutations');
|
|
95
|
+
// Verify the original context was not mutated
|
|
96
|
+
assert.equal(ctx.output.injected, undefined);
|
|
97
|
+
});
|
|
98
|
+
it('handles complex boolean expressions', async () => {
|
|
99
|
+
const ctx = makeContext();
|
|
100
|
+
const result = await evaluateGateExpression('output.score >= 80 && execution_metadata.cost_usd < 1.0', ctx);
|
|
101
|
+
assert.equal(result.passed, true);
|
|
102
|
+
});
|
|
103
|
+
it('handles expression returning 0 as falsy', async () => {
|
|
104
|
+
const ctx = makeContext({ output: { count: 0 } });
|
|
105
|
+
const result = await evaluateGateExpression('output.count', ctx);
|
|
106
|
+
assert.equal(result.passed, false);
|
|
107
|
+
});
|
|
108
|
+
it('handles expression returning non-empty string as truthy', async () => {
|
|
109
|
+
const ctx = makeContext({ output: { status: 'ok' } });
|
|
110
|
+
const result = await evaluateGateExpression('output.status', ctx);
|
|
111
|
+
assert.equal(result.passed, true);
|
|
112
|
+
});
|
|
113
|
+
it('times out on long-running expression', async () => {
|
|
114
|
+
const ctx = makeContext();
|
|
115
|
+
// Use a very short timeout to trigger the timeout path.
|
|
116
|
+
// The expression itself uses a while loop to waste time,
|
|
117
|
+
// but since new Function is synchronous, we rely on the
|
|
118
|
+
// race: the timeout fires before the microtask resolves.
|
|
119
|
+
// With 1ms timeout, Promise.race should pick the timeout.
|
|
120
|
+
const result = await evaluateGateExpression(
|
|
121
|
+
// This expression is fast but we race with a 1ms timer
|
|
122
|
+
'true', ctx, 1);
|
|
123
|
+
// Either result is valid — the expression might win the race or the timeout might.
|
|
124
|
+
// What matters is we get a result and don't hang.
|
|
125
|
+
assert.ok(typeof result.passed === 'boolean');
|
|
126
|
+
assert.ok(typeof result.reason === 'string');
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
// ── Gate Evaluation Tests ───────────────────────────────────────
|
|
130
|
+
describe('evaluateGate', () => {
|
|
131
|
+
it('algorithmic gate passes when expression is true', async () => {
|
|
132
|
+
const gate = makeGate({ check: 'output.tests_passed === true' });
|
|
133
|
+
const ctx = makeContext();
|
|
134
|
+
const result = await evaluateGate(gate, 'gate-1', ctx);
|
|
135
|
+
assert.equal(result.gate_id, 'gate-1');
|
|
136
|
+
assert.equal(result.type, 'algorithmic');
|
|
137
|
+
assert.equal(result.passed, true);
|
|
138
|
+
assert.ok(result.reason.includes('truthy'));
|
|
139
|
+
assert.equal(result.feedback, undefined);
|
|
140
|
+
});
|
|
141
|
+
it('algorithmic gate fails when expression is false', async () => {
|
|
142
|
+
const gate = makeGate({ check: 'output.tests_passed === true' });
|
|
143
|
+
const ctx = makeContext({ output: { tests_passed: false } });
|
|
144
|
+
const result = await evaluateGate(gate, 'gate-2', ctx);
|
|
145
|
+
assert.equal(result.gate_id, 'gate-2');
|
|
146
|
+
assert.equal(result.type, 'algorithmic');
|
|
147
|
+
assert.equal(result.passed, false);
|
|
148
|
+
assert.ok(result.reason.includes('falsy'));
|
|
149
|
+
assert.ok(result.feedback, 'failed gate should include feedback');
|
|
150
|
+
assert.ok(result.feedback.includes(gate.check));
|
|
151
|
+
});
|
|
152
|
+
it('observation gate evaluates against execution_metadata', async () => {
|
|
153
|
+
const gate = makeGate({
|
|
154
|
+
type: 'observation',
|
|
155
|
+
check: 'execution_metadata.num_turns > 0 && execution_metadata.cost_usd < 1.0',
|
|
156
|
+
});
|
|
157
|
+
const ctx = makeContext();
|
|
158
|
+
const result = await evaluateGate(gate, 'obs-gate-1', ctx);
|
|
159
|
+
assert.equal(result.gate_id, 'obs-gate-1');
|
|
160
|
+
assert.equal(result.type, 'observation');
|
|
161
|
+
assert.equal(result.passed, true);
|
|
162
|
+
});
|
|
163
|
+
it('observation gate fails on metadata violation', async () => {
|
|
164
|
+
const gate = makeGate({
|
|
165
|
+
type: 'observation',
|
|
166
|
+
check: 'execution_metadata.cost_usd < 0.10',
|
|
167
|
+
});
|
|
168
|
+
const ctx = makeContext(); // cost_usd is 0.42
|
|
169
|
+
const result = await evaluateGate(gate, 'obs-gate-2', ctx);
|
|
170
|
+
assert.equal(result.type, 'observation');
|
|
171
|
+
assert.equal(result.passed, false);
|
|
172
|
+
assert.ok(result.feedback);
|
|
173
|
+
});
|
|
174
|
+
it('human approval gate always returns not passed with suspension message', async () => {
|
|
175
|
+
const gate = makeGate({
|
|
176
|
+
type: 'human_approval',
|
|
177
|
+
check: 'true', // expression is irrelevant for human_approval
|
|
178
|
+
});
|
|
179
|
+
const ctx = makeContext();
|
|
180
|
+
const result = await evaluateGate(gate, 'human-gate-1', ctx);
|
|
181
|
+
assert.equal(result.gate_id, 'human-gate-1');
|
|
182
|
+
assert.equal(result.type, 'human_approval');
|
|
183
|
+
assert.equal(result.passed, false);
|
|
184
|
+
assert.equal(result.reason, 'Awaiting human approval');
|
|
185
|
+
assert.ok(result.feedback);
|
|
186
|
+
assert.ok(result.feedback.includes('human approval required'));
|
|
187
|
+
});
|
|
188
|
+
it('human approval gate ignores check expression', async () => {
|
|
189
|
+
const gate = makeGate({
|
|
190
|
+
type: 'human_approval',
|
|
191
|
+
check: 'this would cause a syntax error if evaluated!!!',
|
|
192
|
+
});
|
|
193
|
+
const ctx = makeContext();
|
|
194
|
+
// Should not throw — the expression is never evaluated
|
|
195
|
+
const result = await evaluateGate(gate, 'human-gate-2', ctx);
|
|
196
|
+
assert.equal(result.passed, false);
|
|
197
|
+
assert.equal(result.reason, 'Awaiting human approval');
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
// ── Retry Feedback Tests ────────────────────────────────────────
|
|
201
|
+
describe('buildRetryFeedback', () => {
|
|
202
|
+
it('generates correct retry prompt format', () => {
|
|
203
|
+
const gate = makeGate({ check: 'output.tests_passed === true' });
|
|
204
|
+
const result = {
|
|
205
|
+
gate_id: 'gate-1',
|
|
206
|
+
type: 'algorithmic',
|
|
207
|
+
passed: false,
|
|
208
|
+
reason: 'Expression evaluated to falsy',
|
|
209
|
+
feedback: 'Gate check failed: output.tests_passed === true — Expression evaluated to falsy',
|
|
210
|
+
};
|
|
211
|
+
const text = buildRetryFeedback(gate, result, 1, 3);
|
|
212
|
+
assert.ok(text.includes('GATE FAILURE — Retry 1/3'));
|
|
213
|
+
assert.ok(text.includes('Gate: output.tests_passed === true'));
|
|
214
|
+
assert.ok(text.includes('Result: FAILED — Expression evaluated to falsy'));
|
|
215
|
+
assert.ok(text.includes('Previous attempt feedback:'));
|
|
216
|
+
assert.ok(text.includes('Please address the gate failure and try again.'));
|
|
217
|
+
});
|
|
218
|
+
it('includes attempt number and max retries', () => {
|
|
219
|
+
const gate = makeGate();
|
|
220
|
+
const result = {
|
|
221
|
+
gate_id: 'g',
|
|
222
|
+
type: 'algorithmic',
|
|
223
|
+
passed: false,
|
|
224
|
+
reason: 'failed',
|
|
225
|
+
};
|
|
226
|
+
const text = buildRetryFeedback(gate, result, 2, 5);
|
|
227
|
+
assert.ok(text.includes('Retry 2/5'));
|
|
228
|
+
});
|
|
229
|
+
it('includes gate check expression', () => {
|
|
230
|
+
const gate = makeGate({ check: 'artifacts.plan.steps.length > 3' });
|
|
231
|
+
const result = {
|
|
232
|
+
gate_id: 'g',
|
|
233
|
+
type: 'algorithmic',
|
|
234
|
+
passed: false,
|
|
235
|
+
reason: 'nope',
|
|
236
|
+
};
|
|
237
|
+
const text = buildRetryFeedback(gate, result, 1, 3);
|
|
238
|
+
assert.ok(text.includes('Gate: artifacts.plan.steps.length > 3'));
|
|
239
|
+
});
|
|
240
|
+
it('includes failure reason', () => {
|
|
241
|
+
const gate = makeGate();
|
|
242
|
+
const result = {
|
|
243
|
+
gate_id: 'g',
|
|
244
|
+
type: 'algorithmic',
|
|
245
|
+
passed: false,
|
|
246
|
+
reason: 'Expression error: some_var is not defined',
|
|
247
|
+
};
|
|
248
|
+
const text = buildRetryFeedback(gate, result, 1, 3);
|
|
249
|
+
assert.ok(text.includes('Result: FAILED — Expression error: some_var is not defined'));
|
|
250
|
+
});
|
|
251
|
+
it('handles missing feedback gracefully', () => {
|
|
252
|
+
const gate = makeGate();
|
|
253
|
+
const result = {
|
|
254
|
+
gate_id: 'g',
|
|
255
|
+
type: 'algorithmic',
|
|
256
|
+
passed: false,
|
|
257
|
+
reason: 'falsy',
|
|
258
|
+
// No feedback property
|
|
259
|
+
};
|
|
260
|
+
const text = buildRetryFeedback(gate, result, 1, 2);
|
|
261
|
+
assert.ok(text.includes('Previous attempt feedback: none'));
|
|
262
|
+
});
|
|
263
|
+
it('includes provided feedback', () => {
|
|
264
|
+
const gate = makeGate();
|
|
265
|
+
const result = {
|
|
266
|
+
gate_id: 'g',
|
|
267
|
+
type: 'algorithmic',
|
|
268
|
+
passed: false,
|
|
269
|
+
reason: 'falsy',
|
|
270
|
+
feedback: 'Tests are failing in module X',
|
|
271
|
+
};
|
|
272
|
+
const text = buildRetryFeedback(gate, result, 1, 2);
|
|
273
|
+
assert.ok(text.includes('Previous attempt feedback: Tests are failing in module X'));
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
// ── Default Values Tests ────────────────────────────────────────
|
|
277
|
+
describe('getDefaultRetries', () => {
|
|
278
|
+
it('returns 3 for algorithmic gates', () => {
|
|
279
|
+
assert.equal(getDefaultRetries('algorithmic'), 3);
|
|
280
|
+
});
|
|
281
|
+
it('returns 2 for observation gates', () => {
|
|
282
|
+
assert.equal(getDefaultRetries('observation'), 2);
|
|
283
|
+
});
|
|
284
|
+
it('returns 0 for human_approval gates', () => {
|
|
285
|
+
assert.equal(getDefaultRetries('human_approval'), 0);
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
describe('getDefaultTimeout', () => {
|
|
289
|
+
it('returns 5000 for algorithmic gates', () => {
|
|
290
|
+
assert.equal(getDefaultTimeout('algorithmic'), 5000);
|
|
291
|
+
});
|
|
292
|
+
it('returns 5000 for observation gates', () => {
|
|
293
|
+
assert.equal(getDefaultTimeout('observation'), 5000);
|
|
294
|
+
});
|
|
295
|
+
it('returns 5000 for human_approval gates', () => {
|
|
296
|
+
assert.equal(getDefaultTimeout('human_approval'), 5000);
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
//# sourceMappingURL=gates.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gates.test.js","sourceRoot":"","sources":["../../src/strategy/gates.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventBusHumanApprovalResolver — EventBus-backed HumanApprovalResolver port.
|
|
3
|
+
*
|
|
4
|
+
* Implements the HumanApprovalResolver port from @methodts/methodts.
|
|
5
|
+
* When a human_approval gate fires:
|
|
6
|
+
* 1. Emits strategy.gate.awaiting_approval on the EventBus (dashboard picks it up)
|
|
7
|
+
* 2. Subscribes to strategy.gate.approval_response waiting for matching execution_id + gate_id
|
|
8
|
+
* 3. Returns the decision (approved/rejected) with optional feedback
|
|
9
|
+
* 4. Resolves with { approved: false, feedback: "...timed out" } after ctx.timeout_ms
|
|
10
|
+
*
|
|
11
|
+
* Transport-agnostic: depends only on EventBus port — no HTTP, WebSocket, or fs imports.
|
|
12
|
+
*
|
|
13
|
+
* PRD-057 / S2 §3.2 / C2: moved from @methodts/bridge/domains/strategies/
|
|
14
|
+
* (renamed from `BridgeHumanApprovalResolver` → `EventBusHumanApprovalResolver`).
|
|
15
|
+
*/
|
|
16
|
+
import type { HumanApprovalResolver, HumanApprovalContext, HumanApprovalDecision } from '@methodts/methodts/strategy/dag-types.js';
|
|
17
|
+
import type { EventBus } from '../ports/event-bus.js';
|
|
18
|
+
export declare class EventBusHumanApprovalResolver implements HumanApprovalResolver {
|
|
19
|
+
private readonly eventBus;
|
|
20
|
+
constructor(eventBus: EventBus);
|
|
21
|
+
requestApproval(ctx: HumanApprovalContext): Promise<HumanApprovalDecision>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=human-approval-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"human-approval-resolver.d.ts","sourceRoot":"","sources":["../../src/strategy/human-approval-resolver.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACnI,OAAO,KAAK,EAAE,QAAQ,EAA4E,MAAM,uBAAuB,CAAC;AAEhI,qBAAa,6BAA8B,YAAW,qBAAqB;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAEzC,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAgFjF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* EventBusHumanApprovalResolver — EventBus-backed HumanApprovalResolver port.
|
|
4
|
+
*
|
|
5
|
+
* Implements the HumanApprovalResolver port from @methodts/methodts.
|
|
6
|
+
* When a human_approval gate fires:
|
|
7
|
+
* 1. Emits strategy.gate.awaiting_approval on the EventBus (dashboard picks it up)
|
|
8
|
+
* 2. Subscribes to strategy.gate.approval_response waiting for matching execution_id + gate_id
|
|
9
|
+
* 3. Returns the decision (approved/rejected) with optional feedback
|
|
10
|
+
* 4. Resolves with { approved: false, feedback: "...timed out" } after ctx.timeout_ms
|
|
11
|
+
*
|
|
12
|
+
* Transport-agnostic: depends only on EventBus port — no HTTP, WebSocket, or fs imports.
|
|
13
|
+
*
|
|
14
|
+
* PRD-057 / S2 §3.2 / C2: moved from @methodts/bridge/domains/strategies/
|
|
15
|
+
* (renamed from `BridgeHumanApprovalResolver` → `EventBusHumanApprovalResolver`).
|
|
16
|
+
*/
|
|
17
|
+
export class EventBusHumanApprovalResolver {
|
|
18
|
+
eventBus;
|
|
19
|
+
constructor(eventBus) {
|
|
20
|
+
this.eventBus = eventBus;
|
|
21
|
+
}
|
|
22
|
+
async requestApproval(ctx) {
|
|
23
|
+
return new Promise((resolve) => {
|
|
24
|
+
let settled = false;
|
|
25
|
+
// Subscribe to approval response events before emitting the request
|
|
26
|
+
// to avoid a race where the response arrives before we're subscribed.
|
|
27
|
+
const subscription = this.eventBus.subscribe({ domain: 'strategy', type: 'gate.approval_response' }, (event) => {
|
|
28
|
+
if (settled)
|
|
29
|
+
return;
|
|
30
|
+
const payload = event.payload;
|
|
31
|
+
if (payload.execution_id !== ctx.execution_id ||
|
|
32
|
+
payload.gate_id !== ctx.gate_id) {
|
|
33
|
+
// Not for us — continue waiting
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
settled = true;
|
|
37
|
+
clearTimeout(timeoutHandle);
|
|
38
|
+
subscription.unsubscribe();
|
|
39
|
+
const decision = payload.decision;
|
|
40
|
+
if (decision === 'approved') {
|
|
41
|
+
resolve({ approved: true });
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// 'rejected' or 'changes_requested' both map to approved: false
|
|
45
|
+
resolve({
|
|
46
|
+
approved: false,
|
|
47
|
+
feedback: payload.feedback,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
// Set up timeout before emitting so it's active even if emit is slow
|
|
52
|
+
const timeoutHandle = setTimeout(() => {
|
|
53
|
+
if (settled)
|
|
54
|
+
return;
|
|
55
|
+
settled = true;
|
|
56
|
+
subscription.unsubscribe();
|
|
57
|
+
resolve({
|
|
58
|
+
approved: false,
|
|
59
|
+
feedback: 'Human approval timed out',
|
|
60
|
+
});
|
|
61
|
+
}, ctx.timeout_ms);
|
|
62
|
+
// Ensure the timer doesn't keep the process alive if the server exits
|
|
63
|
+
if (timeoutHandle && typeof timeoutHandle === 'object' && 'unref' in timeoutHandle) {
|
|
64
|
+
timeoutHandle.unref();
|
|
65
|
+
}
|
|
66
|
+
// Emit the awaiting_approval event to notify the dashboard
|
|
67
|
+
const awaitingPayload = {
|
|
68
|
+
strategy_id: ctx.strategy_id,
|
|
69
|
+
execution_id: ctx.execution_id,
|
|
70
|
+
gate_id: ctx.gate_id,
|
|
71
|
+
node_id: ctx.node_id,
|
|
72
|
+
artifact_markdown: ctx.artifact_markdown ?? '',
|
|
73
|
+
artifact_type: ctx.artifact_type ?? 'custom',
|
|
74
|
+
timeout_ms: ctx.timeout_ms,
|
|
75
|
+
};
|
|
76
|
+
try {
|
|
77
|
+
this.eventBus.emit({
|
|
78
|
+
version: 1,
|
|
79
|
+
domain: 'strategy',
|
|
80
|
+
type: 'gate.awaiting_approval',
|
|
81
|
+
severity: 'info',
|
|
82
|
+
payload: awaitingPayload,
|
|
83
|
+
source: 'runtime/strategy/human-approval-resolver',
|
|
84
|
+
correlationId: ctx.execution_id,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Emit failure must not abort the wait — the subscription is still active
|
|
89
|
+
// and can still receive a response if another code path delivers it.
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=human-approval-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"human-approval-resolver.js","sourceRoot":"","sources":["../../src/strategy/human-approval-resolver.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC;;;;;;;;;;;;;;GAcG;AAKH,MAAM,OAAO,6BAA6B;IACX;IAA7B,YAA6B,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEnD,KAAK,CAAC,eAAe,CAAC,GAAyB;QAC7C,OAAO,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,EAAE;YACpD,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,oEAAoE;YACpE,sEAAsE;YACtE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC1C,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,wBAAwB,EAAE,EACtD,CAAC,KAAK,EAAE,EAAE;gBACR,IAAI,OAAO;oBAAE,OAAO;gBAEpB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAuD,CAAC;gBAC9E,IACE,OAAO,CAAC,YAAY,KAAK,GAAG,CAAC,YAAY;oBACzC,OAAO,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,EAC/B,CAAC;oBACD,gCAAgC;oBAChC,OAAO;gBACT,CAAC;gBAED,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC5B,YAAY,CAAC,WAAW,EAAE,CAAC;gBAE3B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;gBAClC,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;oBAC5B,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,gEAAgE;oBAChE,OAAO,CAAC;wBACN,QAAQ,EAAE,KAAK;wBACf,QAAQ,EAAE,OAAO,CAAC,QAAQ;qBAC3B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CACF,CAAC;YAEF,qEAAqE;YACrE,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;gBACpC,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,CAAC,WAAW,EAAE,CAAC;gBAC3B,OAAO,CAAC;oBACN,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,0BAA0B;iBACrC,CAAC,CAAC;YACL,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;YAEnB,sEAAsE;YACtE,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;gBAClF,aAAgC,CAAC,KAAK,EAAE,CAAC;YAC5C,CAAC;YAED,2DAA2D;YAC3D,MAAM,eAAe,GAAwC;gBAC3D,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;gBAC9C,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,QAAQ;gBAC5C,UAAU,EAAE,GAAG,CAAC,UAAU;aAC3B,CAAC;YAEF,IAAI,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjB,OAAO,EAAE,CAAC;oBACV,MAAM,EAAE,UAAU;oBAClB,IAAI,EAAE,wBAAwB;oBAC9B,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,eAAqD;oBAC9D,MAAM,EAAE,0CAA0C;oBAClD,aAAa,EAAE,GAAG,CAAC,YAAY;iBAChC,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,0EAA0E;gBAC1E,qEAAqE;YACvE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventBusHumanApprovalResolver — Unit tests (F-L-1).
|
|
3
|
+
*
|
|
4
|
+
* Validates the EventBus-backed approval resolution logic:
|
|
5
|
+
* - Matching response resolves approved
|
|
6
|
+
* - Rejection with feedback
|
|
7
|
+
* - Timeout fires when no response arrives
|
|
8
|
+
* - Mismatched execution_id is ignored (falls through to timeout)
|
|
9
|
+
* - Emit failure does not abort the subscription wait
|
|
10
|
+
*
|
|
11
|
+
* PRD-057 / S2 §3.2 / C2: moved from @methodts/bridge/domains/strategies/.
|
|
12
|
+
* The test uses a tiny inline EventBus so it stays runnable without
|
|
13
|
+
* depending on @methodts/runtime/event-bus (which lands in C3).
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=human-approval-resolver.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"human-approval-resolver.test.d.ts","sourceRoot":"","sources":["../../src/strategy/human-approval-resolver.test.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG"}
|