@senpi/trading-runtime 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/README.md +117 -0
- package/dist/actions/decision-engine.d.ts +28 -0
- package/dist/actions/decision-engine.d.ts.map +1 -0
- package/dist/actions/decision-engine.js +65 -0
- package/dist/actions/decision-engine.js.map +1 -0
- package/dist/actions/llm-decision/anthropic-llm-decision.d.ts +12 -0
- package/dist/actions/llm-decision/anthropic-llm-decision.d.ts.map +1 -0
- package/dist/actions/llm-decision/anthropic-llm-decision.js +74 -0
- package/dist/actions/llm-decision/anthropic-llm-decision.js.map +1 -0
- package/dist/actions/llm-decision/factory.d.ts +17 -0
- package/dist/actions/llm-decision/factory.d.ts.map +1 -0
- package/dist/actions/llm-decision/factory.js +29 -0
- package/dist/actions/llm-decision/factory.js.map +1 -0
- package/dist/actions/llm-decision/index.d.ts +8 -0
- package/dist/actions/llm-decision/index.d.ts.map +1 -0
- package/dist/actions/llm-decision/index.js +5 -0
- package/dist/actions/llm-decision/index.js.map +1 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts +14 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.js +58 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -0
- package/dist/actions/llm-decision/shared.d.ts +41 -0
- package/dist/actions/llm-decision/shared.d.ts.map +1 -0
- package/dist/actions/llm-decision/shared.js +117 -0
- package/dist/actions/llm-decision/shared.js.map +1 -0
- package/dist/actions/open-position/open-position.action.d.ts +15 -0
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -0
- package/dist/actions/open-position/open-position.action.js +302 -0
- package/dist/actions/open-position/open-position.action.js.map +1 -0
- package/dist/actions/types.d.ts +123 -0
- package/dist/actions/types.d.ts.map +1 -0
- package/dist/actions/types.js +3 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/cli/guide-commands.d.ts +26 -0
- package/dist/cli/guide-commands.d.ts.map +1 -0
- package/dist/cli/guide-commands.js +332 -0
- package/dist/cli/guide-commands.js.map +1 -0
- package/dist/cli/senpi-commands.d.ts +22 -0
- package/dist/cli/senpi-commands.d.ts.map +1 -0
- package/dist/cli/senpi-commands.js +138 -0
- package/dist/cli/senpi-commands.js.map +1 -0
- package/dist/constants/dsl/index.d.ts +39 -0
- package/dist/constants/dsl/index.d.ts.map +1 -0
- package/dist/constants/dsl/index.js +39 -0
- package/dist/constants/dsl/index.js.map +1 -0
- package/dist/context/context-builder.d.ts +14 -0
- package/dist/context/context-builder.d.ts.map +1 -0
- package/dist/context/context-builder.js +36 -0
- package/dist/context/context-builder.js.map +1 -0
- package/dist/context/index.d.ts +5 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +5 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/interpolate.d.ts +6 -0
- package/dist/context/interpolate.d.ts.map +1 -0
- package/dist/context/interpolate.js +15 -0
- package/dist/context/interpolate.js.map +1 -0
- package/dist/context/providers/asset-trend.provider.d.ts +42 -0
- package/dist/context/providers/asset-trend.provider.d.ts.map +1 -0
- package/dist/context/providers/asset-trend.provider.js +94 -0
- package/dist/context/providers/asset-trend.provider.js.map +1 -0
- package/dist/context/providers/index.d.ts +5 -0
- package/dist/context/providers/index.d.ts.map +1 -0
- package/dist/context/providers/index.js +5 -0
- package/dist/context/providers/index.js.map +1 -0
- package/dist/context/providers/regime.provider.d.ts +14 -0
- package/dist/context/providers/regime.provider.d.ts.map +1 -0
- package/dist/context/providers/regime.provider.js +29 -0
- package/dist/context/providers/regime.provider.js.map +1 -0
- package/dist/context/providers/signal.provider.d.ts +11 -0
- package/dist/context/providers/signal.provider.d.ts.map +1 -0
- package/dist/context/providers/signal.provider.js +27 -0
- package/dist/context/providers/signal.provider.js.map +1 -0
- package/dist/context/providers/strategy.provider.d.ts +14 -0
- package/dist/context/providers/strategy.provider.d.ts.map +1 -0
- package/dist/context/providers/strategy.provider.js +68 -0
- package/dist/context/providers/strategy.provider.js.map +1 -0
- package/dist/context/types.d.ts +30 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +2 -0
- package/dist/context/types.js.map +1 -0
- package/dist/dsl/config/index.d.ts +43 -0
- package/dist/dsl/config/index.d.ts.map +1 -0
- package/dist/dsl/config/index.js +108 -0
- package/dist/dsl/config/index.js.map +1 -0
- package/dist/dsl/constants/index.d.ts +3 -0
- package/dist/dsl/constants/index.d.ts.map +1 -0
- package/dist/dsl/constants/index.js +3 -0
- package/dist/dsl/constants/index.js.map +1 -0
- package/dist/dsl/engine/index.d.ts +7 -0
- package/dist/dsl/engine/index.d.ts.map +1 -0
- package/dist/dsl/engine/index.js +123 -0
- package/dist/dsl/engine/index.js.map +1 -0
- package/dist/dsl/events/bus-types.d.ts +7 -0
- package/dist/dsl/events/bus-types.d.ts.map +1 -0
- package/dist/dsl/events/bus-types.js +6 -0
- package/dist/dsl/events/bus-types.js.map +1 -0
- package/dist/dsl/events/guards.d.ts +17 -0
- package/dist/dsl/events/guards.d.ts.map +1 -0
- package/dist/dsl/events/guards.js +94 -0
- package/dist/dsl/events/guards.js.map +1 -0
- package/dist/dsl/events/handlers.d.ts +15 -0
- package/dist/dsl/events/handlers.d.ts.map +1 -0
- package/dist/dsl/events/handlers.js +229 -0
- package/dist/dsl/events/handlers.js.map +1 -0
- package/dist/dsl/events/index.d.ts +4 -0
- package/dist/dsl/events/index.d.ts.map +1 -0
- package/dist/dsl/events/index.js +4 -0
- package/dist/dsl/events/index.js.map +1 -0
- package/dist/dsl/index.d.ts +13 -0
- package/dist/dsl/index.d.ts.map +1 -0
- package/dist/dsl/index.js +35 -0
- package/dist/dsl/index.js.map +1 -0
- package/dist/dsl/monitor/index.d.ts +18 -0
- package/dist/dsl/monitor/index.d.ts.map +1 -0
- package/dist/dsl/monitor/index.js +296 -0
- package/dist/dsl/monitor/index.js.map +1 -0
- package/dist/dsl/plugin/index.d.ts +29 -0
- package/dist/dsl/plugin/index.d.ts.map +1 -0
- package/dist/dsl/plugin/index.js +85 -0
- package/dist/dsl/plugin/index.js.map +1 -0
- package/dist/dsl/types/index.d.ts +3 -0
- package/dist/dsl/types/index.d.ts.map +1 -0
- package/dist/dsl/types/index.js +3 -0
- package/dist/dsl/types/index.js.map +1 -0
- package/dist/health/index.d.ts +9 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +9 -0
- package/dist/health/index.js.map +1 -0
- package/dist/index.d.ts +94 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +218 -0
- package/dist/index.js.map +1 -0
- package/dist/risk/index.d.ts +9 -0
- package/dist/risk/index.d.ts.map +1 -0
- package/dist/risk/index.js +9 -0
- package/dist/risk/index.js.map +1 -0
- package/dist/runtime/action-registry.d.ts +12 -0
- package/dist/runtime/action-registry.d.ts.map +1 -0
- package/dist/runtime/action-registry.js +18 -0
- package/dist/runtime/action-registry.js.map +1 -0
- package/dist/runtime/build-action-scan-payload.d.ts +20 -0
- package/dist/runtime/build-action-scan-payload.d.ts.map +1 -0
- package/dist/runtime/build-action-scan-payload.js +52 -0
- package/dist/runtime/build-action-scan-payload.js.map +1 -0
- package/dist/runtime/bus.d.ts +6 -0
- package/dist/runtime/bus.d.ts.map +1 -0
- package/dist/runtime/bus.js +19 -0
- package/dist/runtime/bus.js.map +1 -0
- package/dist/runtime/create-action-context.d.ts +34 -0
- package/dist/runtime/create-action-context.d.ts.map +1 -0
- package/dist/runtime/create-action-context.js +22 -0
- package/dist/runtime/create-action-context.js.map +1 -0
- package/dist/runtime/create-actions.d.ts +30 -0
- package/dist/runtime/create-actions.d.ts.map +1 -0
- package/dist/runtime/create-actions.js +78 -0
- package/dist/runtime/create-actions.js.map +1 -0
- package/dist/runtime/create-runtime-context.d.ts +33 -0
- package/dist/runtime/create-runtime-context.d.ts.map +1 -0
- package/dist/runtime/create-runtime-context.js +32 -0
- package/dist/runtime/create-runtime-context.js.map +1 -0
- package/dist/runtime/create-scanner-module.d.ts +14 -0
- package/dist/runtime/create-scanner-module.d.ts.map +1 -0
- package/dist/runtime/create-scanner-module.js +26 -0
- package/dist/runtime/create-scanner-module.js.map +1 -0
- package/dist/runtime/create-scanner-providers-for-run.d.ts +20 -0
- package/dist/runtime/create-scanner-providers-for-run.d.ts.map +1 -0
- package/dist/runtime/create-scanner-providers-for-run.js +34 -0
- package/dist/runtime/create-scanner-providers-for-run.js.map +1 -0
- package/dist/runtime/default-state-dir.d.ts +10 -0
- package/dist/runtime/default-state-dir.d.ts.map +1 -0
- package/dist/runtime/default-state-dir.js +22 -0
- package/dist/runtime/default-state-dir.js.map +1 -0
- package/dist/runtime/env-resolve.d.ts +17 -0
- package/dist/runtime/env-resolve.d.ts.map +1 -0
- package/dist/runtime/env-resolve.js +45 -0
- package/dist/runtime/env-resolve.js.map +1 -0
- package/dist/runtime/hook-system.d.ts +7 -0
- package/dist/runtime/hook-system.d.ts.map +1 -0
- package/dist/runtime/hook-system.js +16 -0
- package/dist/runtime/hook-system.js.map +1 -0
- package/dist/runtime/index.d.ts +37 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +26 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/load-trading-strategy.d.ts +18 -0
- package/dist/runtime/load-trading-strategy.d.ts.map +1 -0
- package/dist/runtime/load-trading-strategy.js +51 -0
- package/dist/runtime/load-trading-strategy.js.map +1 -0
- package/dist/runtime/map-exit-config.d.ts +12 -0
- package/dist/runtime/map-exit-config.d.ts.map +1 -0
- package/dist/runtime/map-exit-config.js +89 -0
- package/dist/runtime/map-exit-config.js.map +1 -0
- package/dist/runtime/map-strategies-registration.d.ts +12 -0
- package/dist/runtime/map-strategies-registration.d.ts.map +1 -0
- package/dist/runtime/map-strategies-registration.js +52 -0
- package/dist/runtime/map-strategies-registration.js.map +1 -0
- package/dist/runtime/map-strategies.d.ts +12 -0
- package/dist/runtime/map-strategies.d.ts.map +1 -0
- package/dist/runtime/map-strategies.js +46 -0
- package/dist/runtime/map-strategies.js.map +1 -0
- package/dist/runtime/notifications.d.ts +10 -0
- package/dist/runtime/notifications.d.ts.map +1 -0
- package/dist/runtime/notifications.js +14 -0
- package/dist/runtime/notifications.js.map +1 -0
- package/dist/runtime/parse-interval.d.ts +11 -0
- package/dist/runtime/parse-interval.d.ts.map +1 -0
- package/dist/runtime/parse-interval.js +35 -0
- package/dist/runtime/parse-interval.js.map +1 -0
- package/dist/runtime/reconcile-state.d.ts +25 -0
- package/dist/runtime/reconcile-state.d.ts.map +1 -0
- package/dist/runtime/reconcile-state.js +114 -0
- package/dist/runtime/reconcile-state.js.map +1 -0
- package/dist/runtime/risk-guard.d.ts +6 -0
- package/dist/runtime/risk-guard.d.ts.map +1 -0
- package/dist/runtime/risk-guard.js +14 -0
- package/dist/runtime/risk-guard.js.map +1 -0
- package/dist/runtime/run.d.ts +21 -0
- package/dist/runtime/run.d.ts.map +1 -0
- package/dist/runtime/run.js +43 -0
- package/dist/runtime/run.js.map +1 -0
- package/dist/runtime/runtime.d.ts +40 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +249 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/scanner-registry.d.ts +22 -0
- package/dist/runtime/scanner-registry.d.ts.map +1 -0
- package/dist/runtime/scanner-registry.js +72 -0
- package/dist/runtime/scanner-registry.js.map +1 -0
- package/dist/runtime/strategy-registry.d.ts +49 -0
- package/dist/runtime/strategy-registry.d.ts.map +1 -0
- package/dist/runtime/strategy-registry.js +150 -0
- package/dist/runtime/strategy-registry.js.map +1 -0
- package/dist/runtime/trading-strategy-config.d.ts +6 -0
- package/dist/runtime/trading-strategy-config.d.ts.map +1 -0
- package/dist/runtime/trading-strategy-config.js +5 -0
- package/dist/runtime/trading-strategy-config.js.map +1 -0
- package/dist/runtime/trading-strategy-schema.d.ts +19757 -0
- package/dist/runtime/trading-strategy-schema.d.ts.map +1 -0
- package/dist/runtime/trading-strategy-schema.js +107 -0
- package/dist/runtime/trading-strategy-schema.js.map +1 -0
- package/dist/scanners/__tests__/fixtures/index.d.ts +3 -0
- package/dist/scanners/__tests__/fixtures/index.d.ts.map +1 -0
- package/dist/scanners/__tests__/fixtures/index.js +3 -0
- package/dist/scanners/__tests__/fixtures/index.js.map +1 -0
- package/dist/scanners/__tests__/fixtures/scan-results.d.ts +23 -0
- package/dist/scanners/__tests__/fixtures/scan-results.d.ts.map +1 -0
- package/dist/scanners/__tests__/fixtures/scan-results.js +128 -0
- package/dist/scanners/__tests__/fixtures/scan-results.js.map +1 -0
- package/dist/scanners/__tests__/fixtures/signals.d.ts +18 -0
- package/dist/scanners/__tests__/fixtures/signals.d.ts.map +1 -0
- package/dist/scanners/__tests__/fixtures/signals.js +84 -0
- package/dist/scanners/__tests__/fixtures/signals.js.map +1 -0
- package/dist/scanners/__tests__/test-helpers.d.ts +4 -0
- package/dist/scanners/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/scanners/__tests__/test-helpers.js +23 -0
- package/dist/scanners/__tests__/test-helpers.js.map +1 -0
- package/dist/scanners/artifacts.d.ts +119 -0
- package/dist/scanners/artifacts.d.ts.map +1 -0
- package/dist/scanners/artifacts.js +72 -0
- package/dist/scanners/artifacts.js.map +1 -0
- package/dist/scanners/create-scanner.d.ts +13 -0
- package/dist/scanners/create-scanner.d.ts.map +1 -0
- package/dist/scanners/create-scanner.js +11 -0
- package/dist/scanners/create-scanner.js.map +1 -0
- package/dist/scanners/engine/config-validator.d.ts +7 -0
- package/dist/scanners/engine/config-validator.d.ts.map +1 -0
- package/dist/scanners/engine/config-validator.js +16 -0
- package/dist/scanners/engine/config-validator.js.map +1 -0
- package/dist/scanners/engine/data-providers.d.ts +43 -0
- package/dist/scanners/engine/data-providers.d.ts.map +1 -0
- package/dist/scanners/engine/data-providers.js +8 -0
- package/dist/scanners/engine/data-providers.js.map +1 -0
- package/dist/scanners/engine/engine.d.ts +76 -0
- package/dist/scanners/engine/engine.d.ts.map +1 -0
- package/dist/scanners/engine/engine.js +399 -0
- package/dist/scanners/engine/engine.js.map +1 -0
- package/dist/scanners/engine/index.d.ts +9 -0
- package/dist/scanners/engine/index.d.ts.map +1 -0
- package/dist/scanners/engine/index.js +7 -0
- package/dist/scanners/engine/index.js.map +1 -0
- package/dist/scanners/engine/input-resolver.d.ts +21 -0
- package/dist/scanners/engine/input-resolver.d.ts.map +1 -0
- package/dist/scanners/engine/input-resolver.js +140 -0
- package/dist/scanners/engine/input-resolver.js.map +1 -0
- package/dist/scanners/engine/lifecycle.d.ts +21 -0
- package/dist/scanners/engine/lifecycle.d.ts.map +1 -0
- package/dist/scanners/engine/lifecycle.js +2 -0
- package/dist/scanners/engine/lifecycle.js.map +1 -0
- package/dist/scanners/engine/result-builder.d.ts +30 -0
- package/dist/scanners/engine/result-builder.d.ts.map +1 -0
- package/dist/scanners/engine/result-builder.js +129 -0
- package/dist/scanners/engine/result-builder.js.map +1 -0
- package/dist/scanners/engine/strategy-registry.d.ts +45 -0
- package/dist/scanners/engine/strategy-registry.d.ts.map +1 -0
- package/dist/scanners/engine/strategy-registry.js +93 -0
- package/dist/scanners/engine/strategy-registry.js.map +1 -0
- package/dist/scanners/events.d.ts +41 -0
- package/dist/scanners/events.d.ts.map +1 -0
- package/dist/scanners/events.js +33 -0
- package/dist/scanners/events.js.map +1 -0
- package/dist/scanners/implementations/emerging-movers.d.ts +212 -0
- package/dist/scanners/implementations/emerging-movers.d.ts.map +1 -0
- package/dist/scanners/implementations/emerging-movers.js +702 -0
- package/dist/scanners/implementations/emerging-movers.js.map +1 -0
- package/dist/scanners/implementations/index.d.ts +8 -0
- package/dist/scanners/implementations/index.d.ts.map +1 -0
- package/dist/scanners/implementations/index.js +8 -0
- package/dist/scanners/implementations/index.js.map +1 -0
- package/dist/scanners/implementations/indicators.d.ts +40 -0
- package/dist/scanners/implementations/indicators.d.ts.map +1 -0
- package/dist/scanners/implementations/indicators.js +114 -0
- package/dist/scanners/implementations/indicators.js.map +1 -0
- package/dist/scanners/implementations/market-regime.d.ts +52 -0
- package/dist/scanners/implementations/market-regime.d.ts.map +1 -0
- package/dist/scanners/implementations/market-regime.js +201 -0
- package/dist/scanners/implementations/market-regime.js.map +1 -0
- package/dist/scanners/implementations/momentum.d.ts +21 -0
- package/dist/scanners/implementations/momentum.d.ts.map +1 -0
- package/dist/scanners/implementations/momentum.js +128 -0
- package/dist/scanners/implementations/momentum.js.map +1 -0
- package/dist/scanners/implementations/oi-tracker.d.ts +13 -0
- package/dist/scanners/implementations/oi-tracker.d.ts.map +1 -0
- package/dist/scanners/implementations/oi-tracker.js +67 -0
- package/dist/scanners/implementations/oi-tracker.js.map +1 -0
- package/dist/scanners/implementations/opportunity.d.ts +104 -0
- package/dist/scanners/implementations/opportunity.d.ts.map +1 -0
- package/dist/scanners/implementations/opportunity.js +441 -0
- package/dist/scanners/implementations/opportunity.js.map +1 -0
- package/dist/scanners/implementations/prescreener.d.ts +20 -0
- package/dist/scanners/implementations/prescreener.d.ts.map +1 -0
- package/dist/scanners/implementations/prescreener.js +97 -0
- package/dist/scanners/implementations/prescreener.js.map +1 -0
- package/dist/scanners/implementations/sm-flip.d.ts +43 -0
- package/dist/scanners/implementations/sm-flip.d.ts.map +1 -0
- package/dist/scanners/implementations/sm-flip.js +200 -0
- package/dist/scanners/implementations/sm-flip.js.map +1 -0
- package/dist/scanners/index.d.ts +24 -0
- package/dist/scanners/index.d.ts.map +1 -0
- package/dist/scanners/index.js +17 -0
- package/dist/scanners/index.js.map +1 -0
- package/dist/scanners/input-descriptors.d.ts +49 -0
- package/dist/scanners/input-descriptors.d.ts.map +1 -0
- package/dist/scanners/input-descriptors.js +35 -0
- package/dist/scanners/input-descriptors.js.map +1 -0
- package/dist/scanners/protocol/context.d.ts +71 -0
- package/dist/scanners/protocol/context.d.ts.map +1 -0
- package/dist/scanners/protocol/context.js +2 -0
- package/dist/scanners/protocol/context.js.map +1 -0
- package/dist/scanners/protocol/hooks.d.ts +18 -0
- package/dist/scanners/protocol/hooks.d.ts.map +1 -0
- package/dist/scanners/protocol/hooks.js +12 -0
- package/dist/scanners/protocol/hooks.js.map +1 -0
- package/dist/scanners/protocol/index.d.ts +5 -0
- package/dist/scanners/protocol/index.d.ts.map +1 -0
- package/dist/scanners/protocol/index.js +2 -0
- package/dist/scanners/protocol/index.js.map +1 -0
- package/dist/scanners/protocol/scanner.d.ts +47 -0
- package/dist/scanners/protocol/scanner.d.ts.map +1 -0
- package/dist/scanners/protocol/scanner.js +2 -0
- package/dist/scanners/protocol/scanner.js.map +1 -0
- package/dist/scanners/providers/adapter.d.ts +23 -0
- package/dist/scanners/providers/adapter.d.ts.map +1 -0
- package/dist/scanners/providers/adapter.js +227 -0
- package/dist/scanners/providers/adapter.js.map +1 -0
- package/dist/scanners/providers/cache.d.ts +20 -0
- package/dist/scanners/providers/cache.d.ts.map +1 -0
- package/dist/scanners/providers/cache.js +61 -0
- package/dist/scanners/providers/cache.js.map +1 -0
- package/dist/scanners/providers/client.d.ts +53 -0
- package/dist/scanners/providers/client.d.ts.map +1 -0
- package/dist/scanners/providers/client.js +174 -0
- package/dist/scanners/providers/client.js.map +1 -0
- package/dist/scanners/providers/factory.d.ts +42 -0
- package/dist/scanners/providers/factory.d.ts.map +1 -0
- package/dist/scanners/providers/factory.js +156 -0
- package/dist/scanners/providers/factory.js.map +1 -0
- package/dist/scanners/providers/types.d.ts +61 -0
- package/dist/scanners/providers/types.d.ts.map +1 -0
- package/dist/scanners/providers/types.js +6 -0
- package/dist/scanners/providers/types.js.map +1 -0
- package/dist/scanners/runtime-module.d.ts +54 -0
- package/dist/scanners/runtime-module.d.ts.map +1 -0
- package/dist/scanners/runtime-module.js +94 -0
- package/dist/scanners/runtime-module.js.map +1 -0
- package/dist/scanners/scanner-definition.d.ts +58 -0
- package/dist/scanners/scanner-definition.d.ts.map +1 -0
- package/dist/scanners/scanner-definition.js +19 -0
- package/dist/scanners/scanner-definition.js.map +1 -0
- package/dist/scanners/schema-utils.d.ts +6 -0
- package/dist/scanners/schema-utils.d.ts.map +1 -0
- package/dist/scanners/schema-utils.js +14 -0
- package/dist/scanners/schema-utils.js.map +1 -0
- package/dist/scanners/score-utils.d.ts +19 -0
- package/dist/scanners/score-utils.d.ts.map +1 -0
- package/dist/scanners/score-utils.js +47 -0
- package/dist/scanners/score-utils.js.map +1 -0
- package/dist/scanners/store/fs-utils.d.ts +12 -0
- package/dist/scanners/store/fs-utils.d.ts.map +1 -0
- package/dist/scanners/store/fs-utils.js +47 -0
- package/dist/scanners/store/fs-utils.js.map +1 -0
- package/dist/scanners/store/index.d.ts +5 -0
- package/dist/scanners/store/index.d.ts.map +1 -0
- package/dist/scanners/store/index.js +5 -0
- package/dist/scanners/store/index.js.map +1 -0
- package/dist/scanners/store/runtime-store.d.ts +50 -0
- package/dist/scanners/store/runtime-store.d.ts.map +1 -0
- package/dist/scanners/store/runtime-store.js +91 -0
- package/dist/scanners/store/runtime-store.js.map +1 -0
- package/dist/scanners/store/shared-artifact-store.d.ts +31 -0
- package/dist/scanners/store/shared-artifact-store.d.ts.map +1 -0
- package/dist/scanners/store/shared-artifact-store.js +89 -0
- package/dist/scanners/store/shared-artifact-store.js.map +1 -0
- package/dist/scanners/store/signal-store.d.ts +36 -0
- package/dist/scanners/store/signal-store.d.ts.map +1 -0
- package/dist/scanners/store/signal-store.js +135 -0
- package/dist/scanners/store/signal-store.js.map +1 -0
- package/dist/scanners/types.d.ts +115 -0
- package/dist/scanners/types.d.ts.map +1 -0
- package/dist/scanners/types.js +3 -0
- package/dist/scanners/types.js.map +1 -0
- package/dist/scripts/run-dsl-standalone-live.d.ts +27 -0
- package/dist/scripts/run-dsl-standalone-live.d.ts.map +1 -0
- package/dist/scripts/run-dsl-standalone-live.js +207 -0
- package/dist/scripts/run-dsl-standalone-live.js.map +1 -0
- package/dist/scripts/run-dsl-standalone-mock.d.ts +13 -0
- package/dist/scripts/run-dsl-standalone-mock.d.ts.map +1 -0
- package/dist/scripts/run-dsl-standalone-mock.js +255 -0
- package/dist/scripts/run-dsl-standalone-mock.js.map +1 -0
- package/dist/senpi/client.d.ts +70 -0
- package/dist/senpi/client.d.ts.map +1 -0
- package/dist/senpi/client.js +482 -0
- package/dist/senpi/client.js.map +1 -0
- package/dist/senpi/constants.d.ts +7 -0
- package/dist/senpi/constants.d.ts.map +1 -0
- package/dist/senpi/constants.js +7 -0
- package/dist/senpi/constants.js.map +1 -0
- package/dist/senpi/index.d.ts +3 -0
- package/dist/senpi/index.d.ts.map +1 -0
- package/dist/senpi/index.js +2 -0
- package/dist/senpi/index.js.map +1 -0
- package/dist/senpi/types.d.ts +132 -0
- package/dist/senpi/types.d.ts.map +1 -0
- package/dist/senpi/types.js +3 -0
- package/dist/senpi/types.js.map +1 -0
- package/dist/state/index.d.ts +3 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +3 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/paths.d.ts +8 -0
- package/dist/state/paths.d.ts.map +1 -0
- package/dist/state/paths.js +19 -0
- package/dist/state/paths.js.map +1 -0
- package/dist/state/state-manager.d.ts +56 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +213 -0
- package/dist/state/state-manager.js.map +1 -0
- package/dist/strategy/index.d.ts +2 -0
- package/dist/strategy/index.d.ts.map +1 -0
- package/dist/strategy/index.js +2 -0
- package/dist/strategy/index.js.map +1 -0
- package/dist/strategy/strategy-state.d.ts +47 -0
- package/dist/strategy/strategy-state.d.ts.map +1 -0
- package/dist/strategy/strategy-state.js +179 -0
- package/dist/strategy/strategy-state.js.map +1 -0
- package/dist/types/action.d.ts +15 -0
- package/dist/types/action.d.ts.map +1 -0
- package/dist/types/action.js +2 -0
- package/dist/types/action.js.map +1 -0
- package/dist/types/dsl/index.d.ts +156 -0
- package/dist/types/dsl/index.d.ts.map +1 -0
- package/dist/types/dsl/index.js +5 -0
- package/dist/types/dsl/index.js.map +1 -0
- package/dist/types/event-bus.d.ts +11 -0
- package/dist/types/event-bus.d.ts.map +1 -0
- package/dist/types/event-bus.js +6 -0
- package/dist/types/event-bus.js.map +1 -0
- package/dist/types/hooks.d.ts +27 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/hooks.js +15 -0
- package/dist/types/hooks.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/notification.d.ts +4 -0
- package/dist/types/notification.d.ts.map +1 -0
- package/dist/types/notification.js +3 -0
- package/dist/types/notification.js.map +1 -0
- package/dist/types/runtime.d.ts +16 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/runtime.js +2 -0
- package/dist/types/runtime.js.map +1 -0
- package/dist/types/scanner.d.ts +59 -0
- package/dist/types/scanner.d.ts.map +1 -0
- package/dist/types/scanner.js +13 -0
- package/dist/types/scanner.js.map +1 -0
- package/dist/types/strategy.d.ts +97 -0
- package/dist/types/strategy.d.ts.map +1 -0
- package/dist/types/strategy.js +2 -0
- package/dist/types/strategy.js.map +1 -0
- package/dist/utils/logger/dsl.d.ts +8 -0
- package/dist/utils/logger/dsl.d.ts.map +1 -0
- package/dist/utils/logger/dsl.js +7 -0
- package/dist/utils/logger/dsl.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +65 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/response.d.ts +14 -0
- package/dist/utils/response.d.ts.map +1 -0
- package/dist/utils/response.js +44 -0
- package/dist/utils/response.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/examples/.env.example +15 -0
- package/examples/README.md +75 -0
- package/examples/scanners-consumer-quickstart.mjs +134 -0
- package/examples/scanners-emerging-movers-v4.mjs +285 -0
- package/examples/scanners-live-mcp.mjs +208 -0
- package/examples/scanners-multi-strategy.mjs +165 -0
- package/examples/scanners-scheduled-events.mjs +95 -0
- package/examples/scanners-senpi-provider-client.mjs +182 -0
- package/examples/scanners-single-strategy.mjs +198 -0
- package/examples/strategies/README.md +45 -0
- package/examples/strategies/dsl-showcase.yaml +62 -0
- package/examples/strategies/fox.yaml +55 -0
- package/examples/strategies/minimal.yaml +41 -0
- package/examples/strategies/viper.yaml +63 -0
- package/examples/strategies/wolf.yaml +60 -0
- package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +111 -0
- package/openclaw.plugin.json +15 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-builder.js","sourceRoot":"","sources":["../../src/context/context-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,+EAA+E;AAE/E,MAAM,OAAO,qBAAqB;IACxB,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEvD,QAAQ,CAAC,QAAyB;QAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,KAAK,CACT,OAAuB,EACvB,OAA+B;QAE/B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAU,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAU,CAAC;QACxE,CAAC,CAAC,CACH,CAAC;QACF,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF;AAED,+EAA+E;AAE/E,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { ContextEntry, ContextProviderRequest, ContextProvider, ContextBuilder, } from "./types.js";
|
|
2
|
+
export { RuntimeContextBuilder, createContextBuilder } from "./context-builder.js";
|
|
3
|
+
export { interpolatePrompt } from "./interpolate.js";
|
|
4
|
+
export { signalProvider, strategyProvider } from "./providers/index.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// ─── Context Module ─────────────────────────────────────────────────────────
|
|
2
|
+
export { RuntimeContextBuilder, createContextBuilder } from "./context-builder.js";
|
|
3
|
+
export { interpolatePrompt } from "./interpolate.js";
|
|
4
|
+
export { signalProvider, strategyProvider } from "./providers/index.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAS/E,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replace {{variable}} placeholders in a prompt template with values from context.
|
|
3
|
+
* Unresolved variables (no matching key or null value) are left as-is.
|
|
4
|
+
*/
|
|
5
|
+
export declare function interpolatePrompt(template: string, context: Record<string, unknown>): string;
|
|
6
|
+
//# sourceMappingURL=interpolate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/context/interpolate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CASR"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Replace {{variable}} placeholders in a prompt template with values from context.
|
|
3
|
+
* Unresolved variables (no matching key or null value) are left as-is.
|
|
4
|
+
*/
|
|
5
|
+
export function interpolatePrompt(template, context) {
|
|
6
|
+
return template.replace(/\{\{(\w+)\}\}/g, (match, key) => {
|
|
7
|
+
if (key in context && context[key] != null) {
|
|
8
|
+
return typeof context[key] === "string"
|
|
9
|
+
? context[key]
|
|
10
|
+
: JSON.stringify(context[key], null, 2);
|
|
11
|
+
}
|
|
12
|
+
return match;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=interpolate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../../src/context/interpolate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,OAAgC;IAEhC,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QAC/D,IAAI,GAAG,IAAI,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAC3C,OAAO,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ;gBACrC,CAAC,CAAE,OAAO,CAAC,GAAG,CAAY;gBAC1B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ContextProvider } from "../types.js";
|
|
2
|
+
/** Asset-level trend direction. */
|
|
3
|
+
export declare enum AssetTrend {
|
|
4
|
+
UP = "UP",
|
|
5
|
+
DOWN = "DOWN",
|
|
6
|
+
NEUTRAL = "NEUTRAL"
|
|
7
|
+
}
|
|
8
|
+
/** Trend classification for one asset. */
|
|
9
|
+
export interface AssetTrendResult {
|
|
10
|
+
asset: string;
|
|
11
|
+
assetTrend: AssetTrend;
|
|
12
|
+
trendStrength: number;
|
|
13
|
+
timeframe: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Computes trend direction from raw OHLCV candle data.
|
|
17
|
+
*
|
|
18
|
+
* Uses EMA 8/21 crossover and price-vs-EMA position to determine direction.
|
|
19
|
+
* Returns trend classification with strength (0-1).
|
|
20
|
+
*/
|
|
21
|
+
export declare function computeTrend(candles: Array<{
|
|
22
|
+
close: number;
|
|
23
|
+
high: number;
|
|
24
|
+
low: number;
|
|
25
|
+
}>, emaFast?: number, emaSlow?: number): {
|
|
26
|
+
trend: AssetTrend;
|
|
27
|
+
strength: number;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Asset trend context provider.
|
|
31
|
+
*
|
|
32
|
+
* Extracts the signal asset from the triggering event, fetches 1h candle
|
|
33
|
+
* data via the Senpi MCP client, and computes the asset's local trend
|
|
34
|
+
* direction using EMA crossover analysis.
|
|
35
|
+
*
|
|
36
|
+
* entry.value is ignored — this provider always analyzes the signal's asset.
|
|
37
|
+
*
|
|
38
|
+
* Returns null if candle data cannot be fetched or the signal asset
|
|
39
|
+
* cannot be determined.
|
|
40
|
+
*/
|
|
41
|
+
export declare const assetTrendProvider: ContextProvider;
|
|
42
|
+
//# sourceMappingURL=asset-trend.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-trend.provider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/asset-trend.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAIrB,mCAAmC;AACnC,oBAAY,UAAU;IACpB,EAAE,OAAO;IACT,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5D,OAAO,SAAI,EACX,OAAO,SAAK,GACX;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAkCzC;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,EAAE,eA2ChC,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { computeEma } from "../../scanners/implementations/indicators.js";
|
|
2
|
+
/** Asset-level trend direction. */
|
|
3
|
+
export var AssetTrend;
|
|
4
|
+
(function (AssetTrend) {
|
|
5
|
+
AssetTrend["UP"] = "UP";
|
|
6
|
+
AssetTrend["DOWN"] = "DOWN";
|
|
7
|
+
AssetTrend["NEUTRAL"] = "NEUTRAL";
|
|
8
|
+
})(AssetTrend || (AssetTrend = {}));
|
|
9
|
+
/**
|
|
10
|
+
* Computes trend direction from raw OHLCV candle data.
|
|
11
|
+
*
|
|
12
|
+
* Uses EMA 8/21 crossover and price-vs-EMA position to determine direction.
|
|
13
|
+
* Returns trend classification with strength (0-1).
|
|
14
|
+
*/
|
|
15
|
+
export function computeTrend(candles, emaFast = 8, emaSlow = 21) {
|
|
16
|
+
if (candles.length < emaSlow + 1) {
|
|
17
|
+
return { trend: AssetTrend.NEUTRAL, strength: 0 };
|
|
18
|
+
}
|
|
19
|
+
const closes = candles.map((c) => c.close);
|
|
20
|
+
const emaF = computeEma(closes, emaFast);
|
|
21
|
+
const emaS = computeEma(closes, emaSlow);
|
|
22
|
+
const lastFast = emaF[emaF.length - 1];
|
|
23
|
+
const lastSlow = emaS[emaS.length - 1];
|
|
24
|
+
const lastClose = closes[closes.length - 1];
|
|
25
|
+
let score = 0;
|
|
26
|
+
// EMA crossover
|
|
27
|
+
if (lastFast > lastSlow)
|
|
28
|
+
score += 0.4;
|
|
29
|
+
else if (lastFast < lastSlow)
|
|
30
|
+
score -= 0.4;
|
|
31
|
+
// Price above/below slow EMA
|
|
32
|
+
if (lastClose > lastSlow)
|
|
33
|
+
score += 0.3;
|
|
34
|
+
else if (lastClose < lastSlow)
|
|
35
|
+
score -= 0.3;
|
|
36
|
+
// EMA spread magnitude (normalized by price)
|
|
37
|
+
const spread = Math.abs(lastFast - lastSlow) / lastSlow;
|
|
38
|
+
score += Math.sign(lastFast - lastSlow) * Math.min(spread * 10, 0.3);
|
|
39
|
+
const clamped = Math.max(-1, Math.min(1, score));
|
|
40
|
+
const strength = Math.abs(clamped);
|
|
41
|
+
const trend = clamped > 0.15 ? AssetTrend.UP : clamped < -0.15 ? AssetTrend.DOWN : AssetTrend.NEUTRAL;
|
|
42
|
+
return { trend, strength };
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Asset trend context provider.
|
|
46
|
+
*
|
|
47
|
+
* Extracts the signal asset from the triggering event, fetches 1h candle
|
|
48
|
+
* data via the Senpi MCP client, and computes the asset's local trend
|
|
49
|
+
* direction using EMA crossover analysis.
|
|
50
|
+
*
|
|
51
|
+
* entry.value is ignored — this provider always analyzes the signal's asset.
|
|
52
|
+
*
|
|
53
|
+
* Returns null if candle data cannot be fetched or the signal asset
|
|
54
|
+
* cannot be determined.
|
|
55
|
+
*/
|
|
56
|
+
export const assetTrendProvider = {
|
|
57
|
+
type: "asset-trend",
|
|
58
|
+
async resolve(request, _entry) {
|
|
59
|
+
// Extract signal asset from the triggering event
|
|
60
|
+
const scanResult = request.event.data?.scanResult;
|
|
61
|
+
const signal = scanResult?.signals?.[0];
|
|
62
|
+
if (!signal?.asset)
|
|
63
|
+
return null;
|
|
64
|
+
const asset = signal.asset;
|
|
65
|
+
// Fetch candle data via scanner module's underlying providers
|
|
66
|
+
// or from the event's scan result metadata
|
|
67
|
+
if (!request.readSharedArtifact) {
|
|
68
|
+
// Without artifact access, try to compute from event metadata
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
// The asset-trend provider needs candle data. Since context providers
|
|
72
|
+
// don't have direct access to candle providers, we return the asset
|
|
73
|
+
// information for the LLM to consider along with the signal metadata.
|
|
74
|
+
// The actual trend computation happens when candle data is available
|
|
75
|
+
// through the scanner module's signal metadata.
|
|
76
|
+
//
|
|
77
|
+
// If the signal has marketRegime metadata, use it as a proxy.
|
|
78
|
+
const meta = signal.meta;
|
|
79
|
+
if (meta?.marketRegime) {
|
|
80
|
+
return {
|
|
81
|
+
asset,
|
|
82
|
+
marketRegime: meta.marketRegime,
|
|
83
|
+
signalDirection: signal.direction,
|
|
84
|
+
signalScore: signal.score,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
asset,
|
|
89
|
+
signalDirection: signal.direction,
|
|
90
|
+
signalScore: signal.score,
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=asset-trend.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-trend.provider.js","sourceRoot":"","sources":["../../../src/context/providers/asset-trend.provider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAE1E,mCAAmC;AACnC,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,uBAAS,CAAA;IACT,2BAAa,CAAA;IACb,iCAAmB,CAAA;AACrB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAUD;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,OAA4D,EAC5D,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,EAAE;IAEZ,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE5C,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,gBAAgB;IAChB,IAAI,QAAQ,GAAG,QAAQ;QAAE,KAAK,IAAI,GAAG,CAAC;SACjC,IAAI,QAAQ,GAAG,QAAQ;QAAE,KAAK,IAAI,GAAG,CAAC;IAE3C,6BAA6B;IAC7B,IAAI,SAAS,GAAG,QAAQ;QAAE,KAAK,IAAI,GAAG,CAAC;SAClC,IAAI,SAAS,GAAG,QAAQ;QAAE,KAAK,IAAI,GAAG,CAAC;IAE5C,6CAA6C;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC;IACxD,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;IAErE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAEnC,MAAM,KAAK,GACT,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;IAE1F,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,IAAI,EAAE,aAAa;IAEnB,KAAK,CAAC,OAAO,CAAC,OAA+B,EAAE,MAAoB;QACjE,iDAAiD;QACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,UAE1B,CAAC;QACd,MAAM,MAAM,GAAG,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAuB,CAAC;QAC9D,IAAI,CAAC,MAAM,EAAE,KAAK;YAAE,OAAO,IAAI,CAAC;QAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAE3B,8DAA8D;QAC9D,2CAA2C;QAC3C,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAChC,8DAA8D;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sEAAsE;QACtE,oEAAoE;QACpE,sEAAsE;QACtE,qEAAqE;QACrE,gDAAgD;QAChD,EAAE;QACF,8DAA8D;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,IAA2C,CAAC;QAChE,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;YACvB,OAAO;gBACL,KAAK;gBACL,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,eAAe,EAAE,MAAM,CAAC,SAAS;gBACjC,WAAW,EAAE,MAAM,CAAC,KAAK;aAC1B,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK;YACL,eAAe,EAAE,MAAM,CAAC,SAAS;YACjC,WAAW,EAAE,MAAM,CAAC,KAAK;SAC1B,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { signalProvider } from "./signal.provider.js";
|
|
2
|
+
export { strategyProvider } from "./strategy.provider.js";
|
|
3
|
+
export { regimeProvider } from "./regime.provider.js";
|
|
4
|
+
export { assetTrendProvider, AssetTrend, type AssetTrendResult } from "./asset-trend.provider.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { signalProvider } from "./signal.provider.js";
|
|
2
|
+
export { strategyProvider } from "./strategy.provider.js";
|
|
3
|
+
export { regimeProvider } from "./regime.provider.js";
|
|
4
|
+
export { assetTrendProvider, AssetTrend } from "./asset-trend.provider.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/context/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAyB,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ContextProvider } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Market regime context provider.
|
|
4
|
+
*
|
|
5
|
+
* Loads the `market-regime` shared artifact published by the market-regime
|
|
6
|
+
* scanner. Returns the current regime classification for use in action
|
|
7
|
+
* decision prompts and directional gating.
|
|
8
|
+
*
|
|
9
|
+
* entry.value is ignored — this provider always returns the current regime.
|
|
10
|
+
*
|
|
11
|
+
* Requires `readSharedArtifact` on the request. Returns null if unavailable.
|
|
12
|
+
*/
|
|
13
|
+
export declare const regimeProvider: ContextProvider;
|
|
14
|
+
//# sourceMappingURL=regime.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regime.provider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/regime.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAGrB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,EAAE,eAoB5B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Market regime context provider.
|
|
3
|
+
*
|
|
4
|
+
* Loads the `market-regime` shared artifact published by the market-regime
|
|
5
|
+
* scanner. Returns the current regime classification for use in action
|
|
6
|
+
* decision prompts and directional gating.
|
|
7
|
+
*
|
|
8
|
+
* entry.value is ignored — this provider always returns the current regime.
|
|
9
|
+
*
|
|
10
|
+
* Requires `readSharedArtifact` on the request. Returns null if unavailable.
|
|
11
|
+
*/
|
|
12
|
+
export const regimeProvider = {
|
|
13
|
+
type: "regime",
|
|
14
|
+
async resolve(request, _entry) {
|
|
15
|
+
if (!request.readSharedArtifact || !request.address)
|
|
16
|
+
return null;
|
|
17
|
+
const artifact = await request.readSharedArtifact(request.address, "market-regime");
|
|
18
|
+
if (!artifact)
|
|
19
|
+
return null;
|
|
20
|
+
return {
|
|
21
|
+
regime: artifact.regime,
|
|
22
|
+
confidence: artifact.confidence,
|
|
23
|
+
btcBias: artifact.btcBias,
|
|
24
|
+
ethBias: artifact.ethBias,
|
|
25
|
+
timestamp: artifact.timestamp,
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=regime.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regime.provider.js","sourceRoot":"","sources":["../../../src/context/providers/regime.provider.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,IAAI,EAAE,QAAQ;IAEd,KAAK,CAAC,OAAO,CAAC,OAA+B,EAAE,MAAoB;QACjE,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAEjE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAC/C,OAAO,CAAC,OAAO,EACf,eAAe,CAChB,CAAC;QACF,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ContextProvider } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Signal context provider.
|
|
4
|
+
* Resolves scanner signals by scanner name via ScannerRuntimeModule.
|
|
5
|
+
*
|
|
6
|
+
* entry.value = scanner name (e.g. "emerging_movers", "oi_tracker")
|
|
7
|
+
* Uses scannerModule.querySignals() to get any scanner's latest signals.
|
|
8
|
+
* Falls back to event's scanResult when scannerModule is not available.
|
|
9
|
+
*/
|
|
10
|
+
export declare const signalProvider: ContextProvider;
|
|
11
|
+
//# sourceMappingURL=signal.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.provider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/signal.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAwC,MAAM,aAAa,CAAC;AAGzF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,EAAE,eAkB5B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal context provider.
|
|
3
|
+
* Resolves scanner signals by scanner name via ScannerRuntimeModule.
|
|
4
|
+
*
|
|
5
|
+
* entry.value = scanner name (e.g. "emerging_movers", "oi_tracker")
|
|
6
|
+
* Uses scannerModule.querySignals() to get any scanner's latest signals.
|
|
7
|
+
* Falls back to event's scanResult when scannerModule is not available.
|
|
8
|
+
*/
|
|
9
|
+
export const signalProvider = {
|
|
10
|
+
type: "signal",
|
|
11
|
+
async resolve(request, entry) {
|
|
12
|
+
// Prefer scannerModule for cross-scanner access
|
|
13
|
+
if (request.scannerModule) {
|
|
14
|
+
const signals = await request.scannerModule.querySignals({
|
|
15
|
+
scannerId: entry.value,
|
|
16
|
+
address: request.address,
|
|
17
|
+
});
|
|
18
|
+
return signals?.length ? signals : null;
|
|
19
|
+
}
|
|
20
|
+
// Fallback: extract from the triggering event's scanResult
|
|
21
|
+
const scanResult = request.event.data.scanResult;
|
|
22
|
+
if (!scanResult?.signals?.length)
|
|
23
|
+
return null;
|
|
24
|
+
return scanResult.signals;
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=signal.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.provider.js","sourceRoot":"","sources":["../../../src/context/providers/signal.provider.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,IAAI,EAAE,QAAQ;IAEd,KAAK,CAAC,OAAO,CAAC,OAA+B,EAAE,KAAmB;QAChE,gDAAgD;QAChD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC;gBACvD,SAAS,EAAE,KAAK,CAAC,KAAK;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;YACH,OAAO,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,CAAC;QAED,2DAA2D;QAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAA+C,CAAC;QACtF,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC;QAC9C,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ContextProvider } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Strategy context provider.
|
|
4
|
+
* Resolves strategy data slices from the live StrategyState.
|
|
5
|
+
*
|
|
6
|
+
* entry.value selects the data slice:
|
|
7
|
+
* "open_positions" → clearinghouse positions (fetched if needed)
|
|
8
|
+
* "clearinghouse" → account value, margin, unrealizedPnl, withdrawable
|
|
9
|
+
* "past_trades" → recent closed trades
|
|
10
|
+
* "open_orders" → open orders
|
|
11
|
+
* "details" → strategy details (name, status, PnL)
|
|
12
|
+
*/
|
|
13
|
+
export declare const strategyProvider: ContextProvider;
|
|
14
|
+
//# sourceMappingURL=strategy.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy.provider.d.ts","sourceRoot":"","sources":["../../../src/context/providers/strategy.provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAwC,MAAM,aAAa,CAAC;AAEzF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAAE,eA4D9B,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy context provider.
|
|
3
|
+
* Resolves strategy data slices from the live StrategyState.
|
|
4
|
+
*
|
|
5
|
+
* entry.value selects the data slice:
|
|
6
|
+
* "open_positions" → clearinghouse positions (fetched if needed)
|
|
7
|
+
* "clearinghouse" → account value, margin, unrealizedPnl, withdrawable
|
|
8
|
+
* "past_trades" → recent closed trades
|
|
9
|
+
* "open_orders" → open orders
|
|
10
|
+
* "details" → strategy details (name, status, PnL)
|
|
11
|
+
*/
|
|
12
|
+
export const strategyProvider = {
|
|
13
|
+
type: "strategy",
|
|
14
|
+
async resolve(request, entry) {
|
|
15
|
+
const state = request.strategyState;
|
|
16
|
+
if (!state)
|
|
17
|
+
return null;
|
|
18
|
+
switch (entry.value) {
|
|
19
|
+
case "open_positions": {
|
|
20
|
+
let positions = state.getOpenPositions();
|
|
21
|
+
if (!positions) {
|
|
22
|
+
const ch = await state.fetchClearinghouseState();
|
|
23
|
+
positions = ch?.positions;
|
|
24
|
+
}
|
|
25
|
+
return positions ?? null;
|
|
26
|
+
}
|
|
27
|
+
case "clearinghouse": {
|
|
28
|
+
let ch = state.getClearinghouseState();
|
|
29
|
+
if (!ch) {
|
|
30
|
+
ch = await state.fetchClearinghouseState();
|
|
31
|
+
}
|
|
32
|
+
if (!ch)
|
|
33
|
+
return null;
|
|
34
|
+
return {
|
|
35
|
+
accountValue: ch.accountValue,
|
|
36
|
+
totalMarginUsed: ch.totalMarginUsed,
|
|
37
|
+
totalUnrealizedPnl: ch.totalUnrealizedPnl,
|
|
38
|
+
totalNtlPos: ch.totalNtlPos,
|
|
39
|
+
withdrawable: ch.withdrawable,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
case "past_trades": {
|
|
43
|
+
let trades = state.getPastTrades();
|
|
44
|
+
if (!trades) {
|
|
45
|
+
trades = await state.fetchPastTrades();
|
|
46
|
+
}
|
|
47
|
+
return trades ?? null;
|
|
48
|
+
}
|
|
49
|
+
case "open_orders": {
|
|
50
|
+
let orders = state.getOpenOrders();
|
|
51
|
+
if (!orders) {
|
|
52
|
+
orders = await state.fetchOpenOrders();
|
|
53
|
+
}
|
|
54
|
+
return orders ?? null;
|
|
55
|
+
}
|
|
56
|
+
case "details": {
|
|
57
|
+
let details = state.getDetails();
|
|
58
|
+
if (!details) {
|
|
59
|
+
details = await state.fetchDetails();
|
|
60
|
+
}
|
|
61
|
+
return details ?? null;
|
|
62
|
+
}
|
|
63
|
+
default:
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=strategy.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy.provider.js","sourceRoot":"","sources":["../../../src/context/providers/strategy.provider.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,IAAI,EAAE,UAAU;IAEhB,KAAK,CAAC,OAAO,CAAC,OAA+B,EAAE,KAAmB;QAChE,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,IAAI,SAAS,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBACzC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,uBAAuB,EAAE,CAAC;oBACjD,SAAS,GAAG,EAAE,EAAE,SAAS,CAAC;gBAC5B,CAAC;gBACD,OAAO,SAAS,IAAI,IAAI,CAAC;YAC3B,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,IAAI,EAAE,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;gBACvC,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,EAAE,GAAG,MAAM,KAAK,CAAC,uBAAuB,EAAE,CAAC;gBAC7C,CAAC;gBACD,IAAI,CAAC,EAAE;oBAAE,OAAO,IAAI,CAAC;gBACrB,OAAO;oBACL,YAAY,EAAE,EAAE,CAAC,YAAY;oBAC7B,eAAe,EAAE,EAAE,CAAC,eAAe;oBACnC,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;oBACzC,WAAW,EAAE,EAAE,CAAC,WAAW;oBAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;iBAC9B,CAAC;YACJ,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAC;gBACzC,CAAC;gBACD,OAAO,MAAM,IAAI,IAAI,CAAC;YACxB,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAC;gBACzC,CAAC;gBACD,OAAO,MAAM,IAAI,IAAI,CAAC;YACxB,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;gBACjC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;gBACvC,CAAC;gBACD,OAAO,OAAO,IAAI,IAAI,CAAC;YACzB,CAAC;YAED;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { HookEvent } from "../types/hooks.js";
|
|
2
|
+
import type { StrategyState } from "../types/strategy.js";
|
|
3
|
+
import type { ScannerRuntimeModule } from "../scanners/runtime-module.js";
|
|
4
|
+
/** Single context entry from YAML — always an object with type + value. */
|
|
5
|
+
export interface ContextEntry {
|
|
6
|
+
type: string;
|
|
7
|
+
value: string;
|
|
8
|
+
}
|
|
9
|
+
/** Reads a shared artifact by key for the given strategy address. */
|
|
10
|
+
export type SharedArtifactReader = <T = unknown>(address: string, key: string) => Promise<T | null>;
|
|
11
|
+
/** Request passed to every context provider. */
|
|
12
|
+
export interface ContextProviderRequest {
|
|
13
|
+
event: HookEvent;
|
|
14
|
+
address?: string;
|
|
15
|
+
strategyState?: StrategyState;
|
|
16
|
+
scannerModule?: ScannerRuntimeModule;
|
|
17
|
+
/** Optional reader for scanner shared artifacts (e.g., market-regime). */
|
|
18
|
+
readSharedArtifact?: SharedArtifactReader;
|
|
19
|
+
}
|
|
20
|
+
/** A typed resolver that produces context data. */
|
|
21
|
+
export interface ContextProvider {
|
|
22
|
+
readonly type: string;
|
|
23
|
+
resolve(request: ContextProviderRequest, entry: ContextEntry): Promise<unknown>;
|
|
24
|
+
}
|
|
25
|
+
/** Builds combined context record from multiple providers. */
|
|
26
|
+
export interface ContextBuilder {
|
|
27
|
+
register(provider: ContextProvider): void;
|
|
28
|
+
build(entries: ContextEntry[], request: ContextProviderRequest): Promise<Record<string, unknown>>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qEAAqE;AACrE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,GAAG,OAAO,EAC7C,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAEvB,gDAAgD;AAChD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;CAC3C;AAED,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACjF;AAED,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IAC1C,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/context/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config parsing and validation from playbook exit block.
|
|
3
|
+
*/
|
|
4
|
+
import type { DslPluginConfig } from "../../types/dsl/index.js";
|
|
5
|
+
export interface ExitBlockConfig {
|
|
6
|
+
engine?: string;
|
|
7
|
+
interval_seconds?: number;
|
|
8
|
+
preset?: string;
|
|
9
|
+
dsl_presets?: Record<string, RawPreset>;
|
|
10
|
+
}
|
|
11
|
+
interface RawPreset {
|
|
12
|
+
tiers?: RawTier[];
|
|
13
|
+
max_loss_pct?: number;
|
|
14
|
+
phase1?: RawPhase1;
|
|
15
|
+
phase2_trigger_tier?: number;
|
|
16
|
+
phase2?: RawPhase2;
|
|
17
|
+
}
|
|
18
|
+
interface RawTier {
|
|
19
|
+
trigger_pct?: number;
|
|
20
|
+
triggerPct?: number;
|
|
21
|
+
lock_pct?: number;
|
|
22
|
+
lockPct?: number;
|
|
23
|
+
breaches?: number;
|
|
24
|
+
retrace?: number;
|
|
25
|
+
}
|
|
26
|
+
interface RawPhase1 {
|
|
27
|
+
enabled?: boolean;
|
|
28
|
+
consecutiveBreachesRequired?: number;
|
|
29
|
+
consecutive_breaches_required?: number;
|
|
30
|
+
max_loss_pct?: number;
|
|
31
|
+
}
|
|
32
|
+
interface RawPhase2 {
|
|
33
|
+
enabled?: boolean;
|
|
34
|
+
retraceThreshold?: number;
|
|
35
|
+
retrace_threshold?: number;
|
|
36
|
+
consecutiveBreachesRequired?: number;
|
|
37
|
+
consecutive_breaches_required?: number;
|
|
38
|
+
tiers?: RawTier[];
|
|
39
|
+
}
|
|
40
|
+
export declare function parseDslPluginConfig(raw: ExitBlockConfig): DslPluginConfig;
|
|
41
|
+
export declare function getDefaultIntervalMs(): number;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAA4B,MAAM,0BAA0B,CAAC;AAG1F,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACzC;AAED,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,UAAU,OAAO;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAoFD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CA0B1E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config parsing and validation from playbook exit block.
|
|
3
|
+
*/
|
|
4
|
+
import { MIN_INTERVAL_SECONDS, DEFAULT_INTERVAL_MS } from "../../constants/dsl/index.js";
|
|
5
|
+
function parseTier(raw, defaultBreaches = 1) {
|
|
6
|
+
const triggerPct = Number(raw.trigger_pct ?? raw.triggerPct);
|
|
7
|
+
const lockPct = Number(raw.lock_pct ?? raw.lockPct);
|
|
8
|
+
const breaches = Number(raw.breaches) || defaultBreaches;
|
|
9
|
+
if (!(triggerPct > 0))
|
|
10
|
+
throw new Error("tier trigger_pct must be > 0");
|
|
11
|
+
if (!(lockPct > 0 && lockPct <= 100))
|
|
12
|
+
throw new Error("tier lock_pct must be in (0, 100]");
|
|
13
|
+
if (!(breaches >= 1))
|
|
14
|
+
throw new Error("tier breaches must be >= 1");
|
|
15
|
+
const retraceRaw = raw.retrace ?? raw.retraceFromHW;
|
|
16
|
+
const retraceFromHW = typeof retraceRaw === "number" && retraceRaw > 0 ? retraceRaw : undefined;
|
|
17
|
+
return { triggerPct, lockPct, breaches, ...(retraceFromHW != null && { retraceFromHW }) };
|
|
18
|
+
}
|
|
19
|
+
function parsePreset(name, raw) {
|
|
20
|
+
const hasPhase2Tiers = raw.phase2?.tiers && Array.isArray(raw.phase2.tiers) && raw.phase2.tiers.length > 0;
|
|
21
|
+
if (hasPhase2Tiers) {
|
|
22
|
+
return parsePresetPhaseFormat(name, raw);
|
|
23
|
+
}
|
|
24
|
+
const tiersRaw = raw.tiers;
|
|
25
|
+
if (!Array.isArray(tiersRaw) || tiersRaw.length === 0) {
|
|
26
|
+
throw new Error(`preset "${name}" must have tiers or phase2.tiers`);
|
|
27
|
+
}
|
|
28
|
+
const tiers = tiersRaw.map((t) => parseTier(t));
|
|
29
|
+
for (let i = 1; i < tiers.length; i++) {
|
|
30
|
+
if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
|
|
31
|
+
throw new Error(`preset "${name}": tiers must be sorted ascending by trigger_pct`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const maxLossPct = Number(raw.max_loss_pct);
|
|
35
|
+
if (!(maxLossPct > 0))
|
|
36
|
+
throw new Error(`preset "${name}": max_loss_pct must be > 0`);
|
|
37
|
+
return { tiers, maxLossPct };
|
|
38
|
+
}
|
|
39
|
+
function parsePresetPhaseFormat(name, raw) {
|
|
40
|
+
const phase2 = raw.phase2;
|
|
41
|
+
if (!phase2?.tiers || !Array.isArray(phase2.tiers) || phase2.tiers.length === 0) {
|
|
42
|
+
throw new Error(`preset "${name}": phase2.tiers must be a non-empty array`);
|
|
43
|
+
}
|
|
44
|
+
const phase2BreachesDefault = typeof phase2.consecutiveBreachesRequired === "number"
|
|
45
|
+
? phase2.consecutiveBreachesRequired
|
|
46
|
+
: typeof phase2.consecutive_breaches_required === "number"
|
|
47
|
+
? phase2.consecutive_breaches_required
|
|
48
|
+
: 1;
|
|
49
|
+
const tiers = phase2.tiers.map((t) => parseTier(t, phase2BreachesDefault));
|
|
50
|
+
for (let i = 1; i < tiers.length; i++) {
|
|
51
|
+
if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
|
|
52
|
+
throw new Error(`preset "${name}": phase2.tiers must be sorted ascending by trigger_pct`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const phase1 = raw.phase1;
|
|
56
|
+
const maxLossPct = Number(phase1?.max_loss_pct ?? raw.max_loss_pct);
|
|
57
|
+
if (!(maxLossPct > 0)) {
|
|
58
|
+
throw new Error(`preset "${name}": phase1.max_loss_pct or max_loss_pct must be > 0`);
|
|
59
|
+
}
|
|
60
|
+
const phase2TriggerTier = typeof raw.phase2_trigger_tier === "number" ? raw.phase2_trigger_tier : 0;
|
|
61
|
+
const phase2Retrace = typeof phase2.retraceThreshold === "number"
|
|
62
|
+
? phase2.retraceThreshold
|
|
63
|
+
: typeof phase2.retrace_threshold === "number"
|
|
64
|
+
? phase2.retrace_threshold
|
|
65
|
+
: undefined;
|
|
66
|
+
const phase1Breaches = typeof phase1?.consecutiveBreachesRequired === "number"
|
|
67
|
+
? phase1.consecutiveBreachesRequired
|
|
68
|
+
: typeof phase1?.consecutive_breaches_required === "number"
|
|
69
|
+
? phase1.consecutive_breaches_required
|
|
70
|
+
: undefined;
|
|
71
|
+
const phase2Breaches = phase2BreachesDefault;
|
|
72
|
+
return {
|
|
73
|
+
tiers,
|
|
74
|
+
maxLossPct,
|
|
75
|
+
phase2TriggerTier,
|
|
76
|
+
phase2RetraceFromHW: phase2Retrace,
|
|
77
|
+
phase1BreachesRequired: phase1Breaches,
|
|
78
|
+
phase2BreachesRequired: phase2Breaches,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export function parseDslPluginConfig(raw) {
|
|
82
|
+
const intervalSeconds = raw.interval_seconds ?? 30;
|
|
83
|
+
if (typeof intervalSeconds !== "number" ||
|
|
84
|
+
!Number.isInteger(intervalSeconds) ||
|
|
85
|
+
intervalSeconds < MIN_INTERVAL_SECONDS) {
|
|
86
|
+
throw new Error(`interval_seconds must be a positive integer >= ${MIN_INTERVAL_SECONDS}, got: ${String(raw.interval_seconds)}`);
|
|
87
|
+
}
|
|
88
|
+
const intervalMs = intervalSeconds * 1000;
|
|
89
|
+
const presetsRaw = raw.dsl_presets ?? {};
|
|
90
|
+
const presets = {};
|
|
91
|
+
for (const [name, p] of Object.entries(presetsRaw)) {
|
|
92
|
+
if (p && typeof p === "object")
|
|
93
|
+
presets[name] = parsePreset(name, p);
|
|
94
|
+
}
|
|
95
|
+
const presetKeys = Object.keys(presets);
|
|
96
|
+
if (presetKeys.length === 0) {
|
|
97
|
+
throw new Error("At least one dsl_presets entry is required");
|
|
98
|
+
}
|
|
99
|
+
const preset = typeof raw.preset === "string" ? raw.preset : presetKeys[0];
|
|
100
|
+
if (!presets[preset]) {
|
|
101
|
+
throw new Error(`Preset "${preset}" not found in dsl_presets`);
|
|
102
|
+
}
|
|
103
|
+
return { intervalMs, preset, presets };
|
|
104
|
+
}
|
|
105
|
+
export function getDefaultIntervalMs() {
|
|
106
|
+
return DEFAULT_INTERVAL_MS;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=index.js.map
|