@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,97 @@
|
|
|
1
|
+
import type { CreatePositionRequest, CreatePositionResult, EditPositionResult } from "../senpi/types.js";
|
|
2
|
+
/** Strategy configuration. Address is the strategy identifier (platform id). */
|
|
3
|
+
export interface StrategyConfig {
|
|
4
|
+
address: string;
|
|
5
|
+
budget: number;
|
|
6
|
+
slots: number;
|
|
7
|
+
tradingRisk: string;
|
|
8
|
+
marginPerSlot?: number;
|
|
9
|
+
defaultLeverage?: number;
|
|
10
|
+
dailyLossLimit?: number;
|
|
11
|
+
dsl?: Record<string, unknown>;
|
|
12
|
+
guardRails?: Record<string, unknown>;
|
|
13
|
+
enabled?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** Account-level + position data from strategy_get_clearinghouse_state (single MCP call). */
|
|
16
|
+
export interface ClearinghouseState {
|
|
17
|
+
accountValue: number;
|
|
18
|
+
totalMarginUsed: number;
|
|
19
|
+
totalUnrealizedPnl: number;
|
|
20
|
+
totalNtlPos: number;
|
|
21
|
+
withdrawable: number;
|
|
22
|
+
positions: OpenPosition[];
|
|
23
|
+
}
|
|
24
|
+
export interface OpenPosition {
|
|
25
|
+
coin: string;
|
|
26
|
+
dex: string;
|
|
27
|
+
szi: number;
|
|
28
|
+
entryPx: number;
|
|
29
|
+
leverage: number;
|
|
30
|
+
unrealizedPnl: number;
|
|
31
|
+
marginUsed: number;
|
|
32
|
+
liquidationPx: number | null;
|
|
33
|
+
returnOnEquity: number;
|
|
34
|
+
}
|
|
35
|
+
export interface PastTrade {
|
|
36
|
+
coin: string;
|
|
37
|
+
direction: 'LONG' | 'SHORT';
|
|
38
|
+
entryPx: number;
|
|
39
|
+
closePx: number;
|
|
40
|
+
szi: number;
|
|
41
|
+
realizedPnl: number;
|
|
42
|
+
closedTime: number;
|
|
43
|
+
openTime: number;
|
|
44
|
+
totalFees: number;
|
|
45
|
+
}
|
|
46
|
+
export interface OpenOrder {
|
|
47
|
+
orderId: number;
|
|
48
|
+
coin: string;
|
|
49
|
+
side: 'BUY' | 'SELL';
|
|
50
|
+
size: number;
|
|
51
|
+
price: number;
|
|
52
|
+
orderType: string;
|
|
53
|
+
status: string;
|
|
54
|
+
timestamp: number;
|
|
55
|
+
}
|
|
56
|
+
export interface StrategyDetails {
|
|
57
|
+
strategyId: string;
|
|
58
|
+
name: string;
|
|
59
|
+
status: string;
|
|
60
|
+
traderAddress: string;
|
|
61
|
+
initialBudget: number;
|
|
62
|
+
totalPnl: number;
|
|
63
|
+
pnlPercentage: number;
|
|
64
|
+
createdAt: string;
|
|
65
|
+
}
|
|
66
|
+
/** Runtime strategy state. Address is the strategy identifier and equals config.address. */
|
|
67
|
+
export interface StrategyState {
|
|
68
|
+
readonly address: string;
|
|
69
|
+
readonly config: StrategyConfig;
|
|
70
|
+
getClearinghouseState(): ClearinghouseState | undefined;
|
|
71
|
+
getOpenPositions(): OpenPosition[] | undefined;
|
|
72
|
+
getPastTrades(): PastTrade[] | undefined;
|
|
73
|
+
getOpenOrders(): OpenOrder[] | undefined;
|
|
74
|
+
getAvailableSlots(): number;
|
|
75
|
+
getDetails(): StrategyDetails | undefined;
|
|
76
|
+
fetchClearinghouseState(): Promise<ClearinghouseState | undefined>;
|
|
77
|
+
fetchPastTrades(opts?: {
|
|
78
|
+
limit?: number;
|
|
79
|
+
offset?: number;
|
|
80
|
+
sort_by?: string;
|
|
81
|
+
sort_direction?: string;
|
|
82
|
+
}): Promise<PastTrade[] | undefined>;
|
|
83
|
+
fetchOpenOrders(): Promise<OpenOrder[] | undefined>;
|
|
84
|
+
fetchDetails(): Promise<StrategyDetails | undefined>;
|
|
85
|
+
refresh(): Promise<void>;
|
|
86
|
+
cancelOrder(orderId: number): Promise<unknown>;
|
|
87
|
+
closePosition(coin: string, reason: string, dex?: string): Promise<unknown>;
|
|
88
|
+
createPosition(params: CreatePositionRequest): Promise<CreatePositionResult>;
|
|
89
|
+
editPosition(payload: {
|
|
90
|
+
coin: string;
|
|
91
|
+
dex?: string;
|
|
92
|
+
stopLoss?: {
|
|
93
|
+
triggerPx: number;
|
|
94
|
+
};
|
|
95
|
+
}): Promise<EditPositionResult>;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy.d.ts","sourceRoot":"","sources":["../../src/types/strategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy.js","sourceRoot":"","sources":["../../src/types/strategy.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSL logger instance. DSL code imports from here.
|
|
3
|
+
*/
|
|
4
|
+
import { type LogLevel } from "../logger.js";
|
|
5
|
+
export type { LogLevel };
|
|
6
|
+
export { setLogLevel } from "../logger.js";
|
|
7
|
+
export declare const logger: import("../logger.js").Logger;
|
|
8
|
+
//# sourceMappingURL=dsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl.d.ts","sourceRoot":"","sources":["../../../src/utils/logger/dsl.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE3D,YAAY,EAAE,QAAQ,EAAE,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,eAAO,MAAM,MAAM,+BAAoC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl.js","sourceRoot":"","sources":["../../../src/utils/logger/dsl.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAiB,MAAM,cAAc,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared structured logger factory. Components create a logger with a namespace.
|
|
3
|
+
*/
|
|
4
|
+
export type LogLevel = "debug" | "info" | "warn" | "error";
|
|
5
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
6
|
+
export interface Logger {
|
|
7
|
+
debug(message: string, meta?: unknown): void;
|
|
8
|
+
info(message: string, meta?: unknown): void;
|
|
9
|
+
warn(message: string, meta?: unknown): void;
|
|
10
|
+
error(message: string, meta?: unknown): void;
|
|
11
|
+
}
|
|
12
|
+
export declare function createLogger(namespace: string): Logger;
|
|
13
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAW3D,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAMD,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9C;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAuCtD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared structured logger factory. Components create a logger with a namespace.
|
|
3
|
+
*/
|
|
4
|
+
const levelOrder = {
|
|
5
|
+
debug: 0,
|
|
6
|
+
info: 1,
|
|
7
|
+
warn: 2,
|
|
8
|
+
error: 3,
|
|
9
|
+
};
|
|
10
|
+
let minLevel = "info";
|
|
11
|
+
export function setLogLevel(level) {
|
|
12
|
+
minLevel = level;
|
|
13
|
+
}
|
|
14
|
+
function shouldLog(level) {
|
|
15
|
+
return levelOrder[level] >= levelOrder[minLevel];
|
|
16
|
+
}
|
|
17
|
+
export function createLogger(namespace) {
|
|
18
|
+
return {
|
|
19
|
+
debug(message, meta) {
|
|
20
|
+
if (!shouldLog("debug"))
|
|
21
|
+
return;
|
|
22
|
+
const prefix = `${namespace} [debug]`;
|
|
23
|
+
if (meta !== undefined) {
|
|
24
|
+
console.log(prefix, message, meta);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
console.log(prefix, message);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
info(message, meta) {
|
|
31
|
+
if (!shouldLog("info"))
|
|
32
|
+
return;
|
|
33
|
+
const prefix = `${namespace} [info]`;
|
|
34
|
+
if (meta !== undefined) {
|
|
35
|
+
console.log(prefix, message, meta);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
console.log(prefix, message);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
warn(message, meta) {
|
|
42
|
+
if (!shouldLog("warn"))
|
|
43
|
+
return;
|
|
44
|
+
const prefix = `${namespace} [warn]`;
|
|
45
|
+
if (meta !== undefined) {
|
|
46
|
+
console.warn(prefix, message, meta);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
console.warn(prefix, message);
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
error(message, meta) {
|
|
53
|
+
if (!shouldLog("error"))
|
|
54
|
+
return;
|
|
55
|
+
const prefix = `${namespace} [error]`;
|
|
56
|
+
if (meta !== undefined) {
|
|
57
|
+
console.error(prefix, message, meta);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.error(prefix, message);
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,UAAU,GAA6B;IAC3C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,IAAI,QAAQ,GAAa,MAAM,CAAC;AAEhC,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,QAAQ,GAAG,KAAK,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAAC,KAAe;IAChC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AASD,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,OAAO;QACL,KAAK,CAAC,OAAe,EAAE,IAAc;YACnC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO;YAChC,MAAM,MAAM,GAAG,GAAG,SAAS,UAAU,CAAC;YACtC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAe,EAAE,IAAc;YAClC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAAE,OAAO;YAC/B,MAAM,MAAM,GAAG,GAAG,SAAS,SAAS,CAAC;YACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAe,EAAE,IAAc;YAClC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAAE,OAAO;YAC/B,MAAM,MAAM,GAAG,GAAG,SAAS,SAAS,CAAC;YACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,OAAe,EAAE,IAAc;YACnC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO;YAChC,MAAM,MAAM,GAAG,GAAG,SAAS,UAAU,CAAC;YACtC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared response helpers: envelope unwrapping and type coercion.
|
|
3
|
+
* Used by senpi client, LLM decision, and scanner adapters.
|
|
4
|
+
*/
|
|
5
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
6
|
+
/**
|
|
7
|
+
* Unwraps `{ success, data }` envelopes when present.
|
|
8
|
+
* When inner data is a record, preserves top-level success/error/message on it so callers do not lose them.
|
|
9
|
+
* Non-envelope payloads are returned unchanged.
|
|
10
|
+
*/
|
|
11
|
+
export declare function unwrapEnvelope<T>(input: unknown): T | unknown;
|
|
12
|
+
export declare function asString(value: unknown): string | null;
|
|
13
|
+
export declare function asNumber(value: unknown): number | null;
|
|
14
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,GAAG,OAAO,CAa7D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAOtD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared response helpers: envelope unwrapping and type coercion.
|
|
3
|
+
* Used by senpi client, LLM decision, and scanner adapters.
|
|
4
|
+
*/
|
|
5
|
+
export function isRecord(value) {
|
|
6
|
+
return typeof value === "object" && value !== null;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Unwraps `{ success, data }` envelopes when present.
|
|
10
|
+
* When inner data is a record, preserves top-level success/error/message on it so callers do not lose them.
|
|
11
|
+
* Non-envelope payloads are returned unchanged.
|
|
12
|
+
*/
|
|
13
|
+
export function unwrapEnvelope(input) {
|
|
14
|
+
if (!isRecord(input))
|
|
15
|
+
return input;
|
|
16
|
+
const maybeEnvelope = input;
|
|
17
|
+
if (typeof maybeEnvelope.success !== "boolean" || !("data" in maybeEnvelope)) {
|
|
18
|
+
return input;
|
|
19
|
+
}
|
|
20
|
+
const inner = maybeEnvelope.data;
|
|
21
|
+
if (!isRecord(inner))
|
|
22
|
+
return inner;
|
|
23
|
+
const out = { ...inner };
|
|
24
|
+
if (typeof maybeEnvelope.error === "string" && !("error" in out))
|
|
25
|
+
out.error = maybeEnvelope.error;
|
|
26
|
+
if (typeof maybeEnvelope.message === "string" && !("message" in out))
|
|
27
|
+
out.message = maybeEnvelope.message;
|
|
28
|
+
if (!("success" in out))
|
|
29
|
+
out.success = maybeEnvelope.success;
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
export function asString(value) {
|
|
33
|
+
return typeof value === "string" ? value : null;
|
|
34
|
+
}
|
|
35
|
+
export function asNumber(value) {
|
|
36
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
37
|
+
return value;
|
|
38
|
+
if (typeof value === "string") {
|
|
39
|
+
const n = Number(value);
|
|
40
|
+
return Number.isFinite(n) ? n : null;
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAI,KAAc;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,aAAa,GAAG,KAAgF,CAAC;IACvG,IAAI,OAAO,aAAa,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,EAAE,CAAC;QAC7E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAU,CAAC;IACxC,MAAM,GAAG,GAAG,EAAE,GAAG,KAAK,EAA6B,CAAC;IACpD,IAAI,OAAO,aAAa,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC;QAAE,GAAG,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;IAClG,IAAI,OAAO,aAAa,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC;QAAE,GAAG,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;IAC1G,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC;QAAE,GAAG,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;IAC7D,OAAO,GAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Environment variables for @senpi/trading-runtime
|
|
2
|
+
# Copy to .env and fill in values.
|
|
3
|
+
|
|
4
|
+
# Required for live trading
|
|
5
|
+
SENPI_API_KEY=
|
|
6
|
+
|
|
7
|
+
# Wallet address used in strategy YAML templates (referenced as ${WALLET_ADDRESS})
|
|
8
|
+
WALLET_ADDRESS=
|
|
9
|
+
|
|
10
|
+
# Optional: directory for DSL position state files
|
|
11
|
+
# Default: ~/.openclaw/senpi-state
|
|
12
|
+
DSL_STATE_DIR=
|
|
13
|
+
|
|
14
|
+
# MCP server URL — only change for non-prod testing
|
|
15
|
+
# SENPI_MCP_URL=https://mcp.prod.senpi.ai/mcp
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Scanners Module Examples
|
|
2
|
+
|
|
3
|
+
These examples are real clients of the standalone scanners module.
|
|
4
|
+
|
|
5
|
+
If you are integrating the module as a consumer for the first time, start with `scanners-consumer-quickstart.mjs`.
|
|
6
|
+
|
|
7
|
+
Each example imports from a built `dist/` entrypoint, so build first:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm run build
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Run examples:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
node examples/scanners-single-strategy.mjs
|
|
17
|
+
node examples/scanners-multi-strategy.mjs
|
|
18
|
+
node examples/scanners-scheduled-events.mjs
|
|
19
|
+
node examples/scanners-senpi-provider-client.mjs
|
|
20
|
+
node examples/scanners-consumer-quickstart.mjs
|
|
21
|
+
node examples/scanners-emerging-movers-v4.mjs
|
|
22
|
+
|
|
23
|
+
# Requires env vars (see below)
|
|
24
|
+
node examples/scanners-live-mcp.mjs
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
What each example demonstrates:
|
|
28
|
+
|
|
29
|
+
1. `scanners-consumer-quickstart.mjs`
|
|
30
|
+
- Smallest consumer-oriented setup
|
|
31
|
+
- Which imports to use
|
|
32
|
+
- Required `createScannerRuntimeModule(...)` options
|
|
33
|
+
- Manual `runOnce(...)` flow and `querySignals(...)`
|
|
34
|
+
|
|
35
|
+
2. `scanners-single-strategy.mjs`
|
|
36
|
+
- One strategy with `prescreener`, `oi-tracker`, `momentum`, `emerging-movers`
|
|
37
|
+
- Manual `runOnce` flow and signal query
|
|
38
|
+
|
|
39
|
+
3. `scanners-multi-strategy.mjs`
|
|
40
|
+
- Two strategies sharing scanner ids
|
|
41
|
+
- Different scanner configs per strategy and isolated outputs
|
|
42
|
+
|
|
43
|
+
4. `scanners-scheduled-events.mjs`
|
|
44
|
+
- Interval-driven execution with `start()` / `stop()`
|
|
45
|
+
- Pub/sub lifecycle events (`start`, `complete`, `skip`, `error`)
|
|
46
|
+
|
|
47
|
+
5. `scanners-senpi-provider-client.mjs`
|
|
48
|
+
- Uses `createSenpiScannerProviders(...)` with a **mock** `callTool` client
|
|
49
|
+
- Demonstrates provider wiring for `prescreener`, `momentum`, and `emerging-movers`
|
|
50
|
+
|
|
51
|
+
6. `scanners-emerging-movers-v4.mjs`
|
|
52
|
+
- Showcases all five v4 signal types: FIRST_JUMP, CONTRIB_EXPLOSION, IMMEDIATE_MOVER, NEW_ENTRY_DEEP, DEEP_CLIMBER
|
|
53
|
+
- Simulates a 50-token SM leaderboard evolving over 4 scans
|
|
54
|
+
- Production-like v4 config with all detection thresholds
|
|
55
|
+
- Prints signals with priority, reasons, factors, and summary breakdown
|
|
56
|
+
|
|
57
|
+
7. `scanners-live-mcp.mjs`
|
|
58
|
+
- Connects to the **real Senpi MCP server** using `@modelcontextprotocol/sdk`
|
|
59
|
+
- Bridges `Client.callTool` → `SenpiToolClient` interface
|
|
60
|
+
- Runs all four scanners against live market data and prints results
|
|
61
|
+
- Requires env vars:
|
|
62
|
+
```bash
|
|
63
|
+
export SENPI_API_KEY="your-api-key"
|
|
64
|
+
export SENPI_MCP_URL="https://mcp.prod.senpi.ai/mcp"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Strategy YAML templates
|
|
68
|
+
|
|
69
|
+
See [`strategies/`](./strategies/README.md) for production-ready YAML
|
|
70
|
+
configs you can copy, fill in your wallet address, and load directly:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
openclaw senpi trading-strategy create -p examples/strategies/wolf.yaml
|
|
74
|
+
```
|
|
75
|
+
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import {
|
|
5
|
+
createScannerRuntimeModule,
|
|
6
|
+
momentumScanner,
|
|
7
|
+
prescreenerScanner,
|
|
8
|
+
} from "../dist/index.js";
|
|
9
|
+
|
|
10
|
+
function createInstruments() {
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
name: "BTC",
|
|
14
|
+
isDelisted: false,
|
|
15
|
+
maxLeverage: 10,
|
|
16
|
+
context: {
|
|
17
|
+
markPx: 105,
|
|
18
|
+
prevDayPx: 100,
|
|
19
|
+
midPx: 105,
|
|
20
|
+
dayNtlVlm: 80_000_000,
|
|
21
|
+
openInterest: 2_000_000_000,
|
|
22
|
+
funding: 0.001,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: "ETH",
|
|
27
|
+
isDelisted: false,
|
|
28
|
+
maxLeverage: 8,
|
|
29
|
+
context: {
|
|
30
|
+
markPx: 101,
|
|
31
|
+
prevDayPx: 100,
|
|
32
|
+
midPx: 101,
|
|
33
|
+
dayNtlVlm: 40_000_000,
|
|
34
|
+
openInterest: 1_000_000_000,
|
|
35
|
+
funding: 0.001,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function createCandles() {
|
|
42
|
+
return {
|
|
43
|
+
BTC: {
|
|
44
|
+
candles: {
|
|
45
|
+
"1h": [
|
|
46
|
+
{ timestamp: 1, open: 100, high: 102, low: 99, close: 100, volume: 1000 },
|
|
47
|
+
{ timestamp: 2, open: 100, high: 106, low: 100, close: 105, volume: 1400 },
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
ETH: {
|
|
52
|
+
candles: {
|
|
53
|
+
"1h": [
|
|
54
|
+
{ timestamp: 1, open: 100, high: 101, low: 99, close: 100, volume: 900 },
|
|
55
|
+
{ timestamp: 2, open: 100, high: 101, low: 99, close: 100.2, volume: 920 },
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async function main() {
|
|
63
|
+
const stateDir = await mkdtemp(join(tmpdir(), "scanners-consumer-quickstart-"));
|
|
64
|
+
|
|
65
|
+
// Required pieces:
|
|
66
|
+
// - stateDir
|
|
67
|
+
// - at least one strategy
|
|
68
|
+
// - scanner factories
|
|
69
|
+
// - provider functions required by those scanners
|
|
70
|
+
const scannerModule = createScannerRuntimeModule({
|
|
71
|
+
stateDir,
|
|
72
|
+
strategies: [
|
|
73
|
+
{
|
|
74
|
+
id: "alpha",
|
|
75
|
+
name: "Alpha",
|
|
76
|
+
scannerOverrides: {
|
|
77
|
+
momentum: {
|
|
78
|
+
config: {
|
|
79
|
+
timeframe: "1h",
|
|
80
|
+
minMovePct: 1.5,
|
|
81
|
+
maxCandidates: 20,
|
|
82
|
+
minDayVolume: 1_000_000,
|
|
83
|
+
minSignalScore: 0.2,
|
|
84
|
+
requirePrescreened: true,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
scanners: [prescreenerScanner, momentumScanner],
|
|
91
|
+
providers: {
|
|
92
|
+
getInstruments: async () => createInstruments(),
|
|
93
|
+
getCandles: async () => createCandles(),
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
scannerModule.on("scanner:run:complete", (event) => {
|
|
98
|
+
console.log(
|
|
99
|
+
"complete:",
|
|
100
|
+
event.scannerId,
|
|
101
|
+
"status=",
|
|
102
|
+
event.result.status,
|
|
103
|
+
"signals=",
|
|
104
|
+
event.result.signals.length,
|
|
105
|
+
);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
// Manual operation
|
|
110
|
+
await scannerModule.runOnce("alpha", "prescreener");
|
|
111
|
+
await scannerModule.runOnce("alpha", "momentum");
|
|
112
|
+
|
|
113
|
+
const signals = await scannerModule.querySignals({
|
|
114
|
+
strategyId: "alpha",
|
|
115
|
+
scannerId: "momentum",
|
|
116
|
+
limit: 10,
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
console.log("persisted momentum signals =", signals.length);
|
|
120
|
+
|
|
121
|
+
// Scheduled operation is also available:
|
|
122
|
+
// await scannerModule.start();
|
|
123
|
+
// ...
|
|
124
|
+
// await scannerModule.stop();
|
|
125
|
+
} finally {
|
|
126
|
+
await scannerModule.stop();
|
|
127
|
+
await rm(stateDir, { recursive: true, force: true });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
main().catch((error) => {
|
|
132
|
+
console.error(error);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
});
|