@senpi/runtime 1.0.95-dev.20260408174401
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 +155 -0
- package/dist/actions/close-position/close-position.action.d.ts +16 -0
- package/dist/actions/close-position/close-position.action.d.ts.map +1 -0
- package/dist/actions/close-position/close-position.action.js +220 -0
- package/dist/actions/close-position/close-position.action.js.map +1 -0
- package/dist/actions/decision-engine.d.ts +32 -0
- package/dist/actions/decision-engine.d.ts.map +1 -0
- package/dist/actions/decision-engine.js +103 -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 +16 -0
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -0
- package/dist/actions/open-position/open-position.action.js +278 -0
- package/dist/actions/open-position/open-position.action.js.map +1 -0
- package/dist/actions/position-tracker/position-tracker.action.d.ts +14 -0
- package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -0
- package/dist/actions/position-tracker/position-tracker.action.js +201 -0
- package/dist/actions/position-tracker/position-tracker.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 +27 -0
- package/dist/cli/guide-commands.d.ts.map +1 -0
- package/dist/cli/guide-commands.js +481 -0
- package/dist/cli/guide-commands.js.map +1 -0
- package/dist/cli/senpi-cli-config.d.ts +33 -0
- package/dist/cli/senpi-cli-config.d.ts.map +1 -0
- package/dist/cli/senpi-cli-config.js +130 -0
- package/dist/cli/senpi-cli-config.js.map +1 -0
- package/dist/cli/senpi-commands.d.ts +21 -0
- package/dist/cli/senpi-commands.d.ts.map +1 -0
- package/dist/cli/senpi-commands.js +471 -0
- package/dist/cli/senpi-commands.js.map +1 -0
- package/dist/cli/senpi-config-commands.d.ts +11 -0
- package/dist/cli/senpi-config-commands.d.ts.map +1 -0
- package/dist/cli/senpi-config-commands.js +113 -0
- package/dist/cli/senpi-config-commands.js.map +1 -0
- package/dist/constants/dsl/index.d.ts +62 -0
- package/dist/constants/dsl/index.d.ts.map +1 -0
- package/dist/constants/dsl/index.js +62 -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 +38 -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 +90 -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/scanner-context.provider.d.ts +10 -0
- package/dist/context/providers/scanner-context.provider.d.ts.map +1 -0
- package/dist/context/providers/scanner-context.provider.js +20 -0
- package/dist/context/providers/scanner-context.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 +30 -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 +71 -0
- package/dist/context/providers/strategy.provider.js.map +1 -0
- package/dist/context/types.d.ts +45 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +18 -0
- package/dist/context/types.js.map +1 -0
- package/dist/debug.d.ts +2 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +591 -0
- package/dist/debug.js.map +1 -0
- package/dist/dsl/config/exit-block.d.ts +11 -0
- package/dist/dsl/config/exit-block.d.ts.map +1 -0
- package/dist/dsl/config/exit-block.js +5 -0
- package/dist/dsl/config/exit-block.js.map +1 -0
- package/dist/dsl/config/index.d.ts +8 -0
- package/dist/dsl/config/index.d.ts.map +1 -0
- package/dist/dsl/config/index.js +6 -0
- package/dist/dsl/config/index.js.map +1 -0
- package/dist/dsl/config/parse-phase.d.ts +14 -0
- package/dist/dsl/config/parse-phase.d.ts.map +1 -0
- package/dist/dsl/config/parse-phase.js +78 -0
- package/dist/dsl/config/parse-phase.js.map +1 -0
- package/dist/dsl/config/parse-plugin-config.d.ts +8 -0
- package/dist/dsl/config/parse-plugin-config.d.ts.map +1 -0
- package/dist/dsl/config/parse-plugin-config.js +27 -0
- package/dist/dsl/config/parse-plugin-config.js.map +1 -0
- package/dist/dsl/config/parse-preset.d.ts +7 -0
- package/dist/dsl/config/parse-preset.d.ts.map +1 -0
- package/dist/dsl/config/parse-preset.js +99 -0
- package/dist/dsl/config/parse-preset.js.map +1 -0
- package/dist/dsl/config/parse-tiers.d.ts +7 -0
- package/dist/dsl/config/parse-tiers.d.ts.map +1 -0
- package/dist/dsl/config/parse-tiers.js +31 -0
- package/dist/dsl/config/parse-tiers.js.map +1 -0
- package/dist/dsl/config/parse-timeouts.d.ts +16 -0
- package/dist/dsl/config/parse-timeouts.d.ts.map +1 -0
- package/dist/dsl/config/parse-timeouts.js +75 -0
- package/dist/dsl/config/parse-timeouts.js.map +1 -0
- package/dist/dsl/config/raw-types.d.ts +45 -0
- package/dist/dsl/config/raw-types.d.ts.map +1 -0
- package/dist/dsl/config/raw-types.js +5 -0
- package/dist/dsl/config/raw-types.js.map +1 -0
- package/dist/dsl/config/unknown-keys.d.ts +7 -0
- package/dist/dsl/config/unknown-keys.d.ts.map +1 -0
- package/dist/dsl/config/unknown-keys.js +119 -0
- package/dist/dsl/config/unknown-keys.js.map +1 -0
- package/dist/dsl/config/validation.d.ts +21 -0
- package/dist/dsl/config/validation.d.ts.map +1 -0
- package/dist/dsl/config/validation.js +45 -0
- package/dist/dsl/config/validation.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/exchange-stop.d.ts +16 -0
- package/dist/dsl/engine/exchange-stop.d.ts.map +1 -0
- package/dist/dsl/engine/exchange-stop.js +20 -0
- package/dist/dsl/engine/exchange-stop.js.map +1 -0
- package/dist/dsl/engine/floors.d.ts +32 -0
- package/dist/dsl/engine/floors.d.ts.map +1 -0
- package/dist/dsl/engine/floors.js +115 -0
- package/dist/dsl/engine/floors.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 +7 -0
- package/dist/dsl/engine/index.js.map +1 -0
- package/dist/dsl/engine/round.d.ts +5 -0
- package/dist/dsl/engine/round.d.ts.map +1 -0
- package/dist/dsl/engine/round.js +9 -0
- package/dist/dsl/engine/round.js.map +1 -0
- package/dist/dsl/engine/state-updates.d.ts +8 -0
- package/dist/dsl/engine/state-updates.d.ts.map +1 -0
- package/dist/dsl/engine/state-updates.js +60 -0
- package/dist/dsl/engine/state-updates.js.map +1 -0
- package/dist/dsl/engine/tick.d.ts +6 -0
- package/dist/dsl/engine/tick.d.ts.map +1 -0
- package/dist/dsl/engine/tick.js +174 -0
- package/dist/dsl/engine/tick.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 +116 -0
- package/dist/dsl/events/guards.js.map +1 -0
- package/dist/dsl/events/handlers.d.ts +19 -0
- package/dist/dsl/events/handlers.d.ts.map +1 -0
- package/dist/dsl/events/handlers.js +387 -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/events/initial-state.d.ts +7 -0
- package/dist/dsl/events/initial-state.d.ts.map +1 -0
- package/dist/dsl/events/initial-state.js +96 -0
- package/dist/dsl/events/initial-state.js.map +1 -0
- package/dist/dsl/events/normalize-position-opened.d.ts +10 -0
- package/dist/dsl/events/normalize-position-opened.d.ts.map +1 -0
- package/dist/dsl/events/normalize-position-opened.js +13 -0
- package/dist/dsl/events/normalize-position-opened.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 +37 -0
- package/dist/dsl/index.js.map +1 -0
- package/dist/dsl/monitor/create-monitor.d.ts +24 -0
- package/dist/dsl/monitor/create-monitor.d.ts.map +1 -0
- package/dist/dsl/monitor/create-monitor.js +162 -0
- package/dist/dsl/monitor/create-monitor.js.map +1 -0
- package/dist/dsl/monitor/effective-dex.d.ts +7 -0
- package/dist/dsl/monitor/effective-dex.d.ts.map +1 -0
- package/dist/dsl/monitor/effective-dex.js +11 -0
- package/dist/dsl/monitor/effective-dex.js.map +1 -0
- package/dist/dsl/monitor/exchange-sync.d.ts +16 -0
- package/dist/dsl/monitor/exchange-sync.d.ts.map +1 -0
- package/dist/dsl/monitor/exchange-sync.js +37 -0
- package/dist/dsl/monitor/exchange-sync.js.map +1 -0
- package/dist/dsl/monitor/index.d.ts +6 -0
- package/dist/dsl/monitor/index.d.ts.map +1 -0
- package/dist/dsl/monitor/index.js +5 -0
- package/dist/dsl/monitor/index.js.map +1 -0
- package/dist/dsl/monitor/market-price.d.ts +5 -0
- package/dist/dsl/monitor/market-price.d.ts.map +1 -0
- package/dist/dsl/monitor/market-price.js +24 -0
- package/dist/dsl/monitor/market-price.js.map +1 -0
- package/dist/dsl/monitor/process-one-position.d.ts +19 -0
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -0
- package/dist/dsl/monitor/process-one-position.js +438 -0
- package/dist/dsl/monitor/process-one-position.js.map +1 -0
- package/dist/dsl/notifications/formatter.d.ts +18 -0
- package/dist/dsl/notifications/formatter.d.ts.map +1 -0
- package/dist/dsl/notifications/formatter.js +69 -0
- package/dist/dsl/notifications/formatter.js.map +1 -0
- package/dist/dsl/notifications/index.d.ts +19 -0
- package/dist/dsl/notifications/index.d.ts.map +1 -0
- package/dist/dsl/notifications/index.js +90 -0
- package/dist/dsl/notifications/index.js.map +1 -0
- package/dist/dsl/plugin/index.d.ts +66 -0
- package/dist/dsl/plugin/index.d.ts.map +1 -0
- package/dist/dsl/plugin/index.js +398 -0
- package/dist/dsl/plugin/index.js.map +1 -0
- package/dist/dsl/plugin/options.d.ts +40 -0
- package/dist/dsl/plugin/options.d.ts.map +1 -0
- package/dist/dsl/plugin/options.js +5 -0
- package/dist/dsl/plugin/options.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 +29 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +191 -0
- package/dist/health/index.js.map +1 -0
- package/dist/health/types.d.ts +114 -0
- package/dist/health/types.d.ts.map +1 -0
- package/dist/health/types.js +2 -0
- package/dist/health/types.js.map +1 -0
- package/dist/index.d.ts +102 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +772 -0
- package/dist/index.js.map +1 -0
- package/dist/leverage/max-leverage-cache.d.ts +10 -0
- package/dist/leverage/max-leverage-cache.d.ts.map +1 -0
- package/dist/leverage/max-leverage-cache.js +51 -0
- package/dist/leverage/max-leverage-cache.js.map +1 -0
- package/dist/leverage/resolve-leverage.d.ts +9 -0
- package/dist/leverage/resolve-leverage.d.ts.map +1 -0
- package/dist/leverage/resolve-leverage.js +15 -0
- package/dist/leverage/resolve-leverage.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 +22 -0
- package/dist/runtime/action-registry.js.map +1 -0
- package/dist/runtime/auto-update/command-runner.d.ts +20 -0
- package/dist/runtime/auto-update/command-runner.d.ts.map +1 -0
- package/dist/runtime/auto-update/command-runner.js +54 -0
- package/dist/runtime/auto-update/command-runner.js.map +1 -0
- package/dist/runtime/auto-update/coordinator.d.ts +90 -0
- package/dist/runtime/auto-update/coordinator.d.ts.map +1 -0
- package/dist/runtime/auto-update/coordinator.js +336 -0
- package/dist/runtime/auto-update/coordinator.js.map +1 -0
- package/dist/runtime/auto-update/gateway-restart.d.ts +49 -0
- package/dist/runtime/auto-update/gateway-restart.d.ts.map +1 -0
- package/dist/runtime/auto-update/gateway-restart.js +105 -0
- package/dist/runtime/auto-update/gateway-restart.js.map +1 -0
- package/dist/runtime/auto-update/policy.d.ts +24 -0
- package/dist/runtime/auto-update/policy.d.ts.map +1 -0
- package/dist/runtime/auto-update/policy.js +42 -0
- package/dist/runtime/auto-update/policy.js.map +1 -0
- package/dist/runtime/auto-update/preflight.d.ts +16 -0
- package/dist/runtime/auto-update/preflight.d.ts.map +1 -0
- package/dist/runtime/auto-update/preflight.js +20 -0
- package/dist/runtime/auto-update/preflight.js.map +1 -0
- package/dist/runtime/auto-update/state-store.d.ts +29 -0
- package/dist/runtime/auto-update/state-store.d.ts.map +1 -0
- package/dist/runtime/auto-update/state-store.js +51 -0
- package/dist/runtime/auto-update/state-store.js.map +1 -0
- package/dist/runtime/auto-update/types.d.ts +105 -0
- package/dist/runtime/auto-update/types.d.ts.map +1 -0
- package/dist/runtime/auto-update/types.js +56 -0
- package/dist/runtime/auto-update/types.js.map +1 -0
- package/dist/runtime/auto-update/version-source.d.ts +23 -0
- package/dist/runtime/auto-update/version-source.d.ts.map +1 -0
- package/dist/runtime/auto-update/version-source.js +25 -0
- package/dist/runtime/auto-update/version-source.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 +36 -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 +22 -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 +70 -0
- package/dist/runtime/create-actions.js.map +1 -0
- package/dist/runtime/create-runtime-context.d.ts +35 -0
- package/dist/runtime/create-runtime-context.d.ts.map +1 -0
- package/dist/runtime/create-runtime-context.js +35 -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 +31 -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-runtime-config.d.ts +23 -0
- package/dist/runtime/load-runtime-config.d.ts.map +1 -0
- package/dist/runtime/load-runtime-config.js +176 -0
- package/dist/runtime/load-runtime-config.js.map +1 -0
- package/dist/runtime/map-exit-config.d.ts +11 -0
- package/dist/runtime/map-exit-config.d.ts.map +1 -0
- package/dist/runtime/map-exit-config.js +86 -0
- package/dist/runtime/map-exit-config.js.map +1 -0
- package/dist/runtime/map-strategies-registration.d.ts +14 -0
- package/dist/runtime/map-strategies-registration.d.ts.map +1 -0
- package/dist/runtime/map-strategies-registration.js +44 -0
- package/dist/runtime/map-strategies-registration.js.map +1 -0
- package/dist/runtime/map-strategies.d.ts +14 -0
- package/dist/runtime/map-strategies.d.ts.map +1 -0
- package/dist/runtime/map-strategies.js +64 -0
- package/dist/runtime/map-strategies.js.map +1 -0
- package/dist/runtime/notifications.d.ts +19 -0
- package/dist/runtime/notifications.d.ts.map +1 -0
- package/dist/runtime/notifications.js +88 -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/recipe-version.d.ts +3 -0
- package/dist/runtime/recipe-version.d.ts.map +1 -0
- package/dist/runtime/recipe-version.js +3 -0
- package/dist/runtime/recipe-version.js.map +1 -0
- package/dist/runtime/reconcile-state.d.ts +37 -0
- package/dist/runtime/reconcile-state.d.ts.map +1 -0
- package/dist/runtime/reconcile-state.js +179 -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 +30 -0
- package/dist/runtime/run.d.ts.map +1 -0
- package/dist/runtime/run.js +46 -0
- package/dist/runtime/run.js.map +1 -0
- package/dist/runtime/runtime-config.d.ts +6 -0
- package/dist/runtime/runtime-config.d.ts.map +1 -0
- package/dist/runtime/runtime-config.js +5 -0
- package/dist/runtime/runtime-config.js.map +1 -0
- package/dist/runtime/runtime-schema.d.ts +1859 -0
- package/dist/runtime/runtime-schema.d.ts.map +1 -0
- package/dist/runtime/runtime-schema.js +110 -0
- package/dist/runtime/runtime-schema.js.map +1 -0
- package/dist/runtime/runtime-version.d.ts +19 -0
- package/dist/runtime/runtime-version.d.ts.map +1 -0
- package/dist/runtime/runtime-version.js +29 -0
- package/dist/runtime/runtime-version.js.map +1 -0
- package/dist/runtime/runtime.d.ts +53 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +335 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/scanner-composition.d.ts +23 -0
- package/dist/runtime/scanner-composition.d.ts.map +1 -0
- package/dist/runtime/scanner-composition.js +168 -0
- package/dist/runtime/scanner-composition.js.map +1 -0
- package/dist/runtime/scanner-registry.d.ts +28 -0
- package/dist/runtime/scanner-registry.d.ts.map +1 -0
- package/dist/runtime/scanner-registry.js +114 -0
- package/dist/runtime/scanner-registry.js.map +1 -0
- package/dist/runtime/state-layout.d.ts +50 -0
- package/dist/runtime/state-layout.d.ts.map +1 -0
- package/dist/runtime/state-layout.js +89 -0
- package/dist/runtime/state-layout.js.map +1 -0
- package/dist/runtime/strategy-registry.d.ts +79 -0
- package/dist/runtime/strategy-registry.d.ts.map +1 -0
- package/dist/runtime/strategy-registry.js +265 -0
- package/dist/runtime/strategy-registry.js.map +1 -0
- package/dist/runtime/validate-dsl-position-tracking.d.ts +3 -0
- package/dist/runtime/validate-dsl-position-tracking.d.ts.map +1 -0
- package/dist/runtime/validate-dsl-position-tracking.js +27 -0
- package/dist/runtime/validate-dsl-position-tracking.js.map +1 -0
- package/dist/scanners/__tests__/default-engine-test-composition.d.ts +9 -0
- package/dist/scanners/__tests__/default-engine-test-composition.d.ts.map +1 -0
- package/dist/scanners/__tests__/default-engine-test-composition.js +84 -0
- package/dist/scanners/__tests__/default-engine-test-composition.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/position-tracker-scenarios.d.ts +21 -0
- package/dist/scanners/__tests__/fixtures/position-tracker-scenarios.d.ts.map +1 -0
- package/dist/scanners/__tests__/fixtures/position-tracker-scenarios.js +199 -0
- package/dist/scanners/__tests__/fixtures/position-tracker-scenarios.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 +131 -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/context-source-mapping.d.ts +4 -0
- package/dist/scanners/context-source-mapping.d.ts.map +1 -0
- package/dist/scanners/context-source-mapping.js +10 -0
- package/dist/scanners/context-source-mapping.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 +48 -0
- package/dist/scanners/engine/data-providers.d.ts.map +1 -0
- package/dist/scanners/engine/data-providers.js +28 -0
- package/dist/scanners/engine/data-providers.js.map +1 -0
- package/dist/scanners/engine/engine.d.ts +92 -0
- package/dist/scanners/engine/engine.d.ts.map +1 -0
- package/dist/scanners/engine/engine.js +478 -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 +33 -0
- package/dist/scanners/engine/input-resolver.d.ts.map +1 -0
- package/dist/scanners/engine/input-resolver.js +216 -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 +48 -0
- package/dist/scanners/engine/strategy-registry.d.ts.map +1 -0
- package/dist/scanners/engine/strategy-registry.js +103 -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 +215 -0
- package/dist/scanners/implementations/emerging-movers.d.ts.map +1 -0
- package/dist/scanners/implementations/emerging-movers.js +713 -0
- package/dist/scanners/implementations/emerging-movers.js.map +1 -0
- package/dist/scanners/implementations/index.d.ts +9 -0
- package/dist/scanners/implementations/index.d.ts.map +1 -0
- package/dist/scanners/implementations/index.js +9 -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/liquidation-watchdog.d.ts +66 -0
- package/dist/scanners/implementations/liquidation-watchdog.d.ts.map +1 -0
- package/dist/scanners/implementations/liquidation-watchdog.js +293 -0
- package/dist/scanners/implementations/liquidation-watchdog.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 +205 -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 +132 -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 +71 -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 +445 -0
- package/dist/scanners/implementations/opportunity.js.map +1 -0
- package/dist/scanners/implementations/position-tracker.d.ts +120 -0
- package/dist/scanners/implementations/position-tracker.d.ts.map +1 -0
- package/dist/scanners/implementations/position-tracker.js +360 -0
- package/dist/scanners/implementations/position-tracker.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 +101 -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 +205 -0
- package/dist/scanners/implementations/sm-flip.js.map +1 -0
- package/dist/scanners/index.d.ts +26 -0
- package/dist/scanners/index.d.ts.map +1 -0
- package/dist/scanners/index.js +19 -0
- package/dist/scanners/index.js.map +1 -0
- package/dist/scanners/input-descriptors.d.ts +61 -0
- package/dist/scanners/input-descriptors.d.ts.map +1 -0
- package/dist/scanners/input-descriptors.js +43 -0
- package/dist/scanners/input-descriptors.js.map +1 -0
- package/dist/scanners/prepare-scanner-inputs.d.ts +12 -0
- package/dist/scanners/prepare-scanner-inputs.d.ts.map +1 -0
- package/dist/scanners/prepare-scanner-inputs.js +21 -0
- package/dist/scanners/prepare-scanner-inputs.js.map +1 -0
- package/dist/scanners/protocol/context.d.ts +95 -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 +43 -0
- package/dist/scanners/providers/factory.d.ts.map +1 -0
- package/dist/scanners/providers/factory.js +297 -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 +79 -0
- package/dist/scanners/runtime-module.d.ts.map +1 -0
- package/dist/scanners/runtime-module.js +362 -0
- package/dist/scanners/runtime-module.js.map +1 -0
- package/dist/scanners/scanner-definition.d.ts +81 -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 +35 -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 +48 -0
- package/dist/scripts/run-dsl-standalone-live.d.ts.map +1 -0
- package/dist/scripts/run-dsl-standalone-live.js +531 -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 +264 -0
- package/dist/scripts/run-dsl-standalone-mock.js.map +1 -0
- package/dist/senpi/client.d.ts +99 -0
- package/dist/senpi/client.d.ts.map +1 -0
- package/dist/senpi/client.js +779 -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 +162 -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 +18 -0
- package/dist/state/paths.d.ts.map +1 -0
- package/dist/state/paths.js +51 -0
- package/dist/state/paths.js.map +1 -0
- package/dist/state/state-manager.d.ts +83 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +380 -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 +51 -0
- package/dist/strategy/strategy-state.d.ts.map +1 -0
- package/dist/strategy/strategy-state.js +218 -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 +286 -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 +13 -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 +30 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/hooks.js +18 -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 +18 -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 +106 -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/clearing-house-staleness.d.ts +47 -0
- package/dist/utils/clearing-house-staleness.d.ts.map +1 -0
- package/dist/utils/clearing-house-staleness.js +73 -0
- package/dist/utils/clearing-house-staleness.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 +23 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +97 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/perp-coin.d.ts +19 -0
- package/dist/utils/perp-coin.d.ts.map +1 -0
- package/dist/utils/perp-coin.js +40 -0
- package/dist/utils/perp-coin.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/utils/retry.d.ts +19 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +32 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/version.d.ts +6 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +21 -0
- package/dist/version.js.map +1 -0
- package/examples/.env.example +25 -0
- package/examples/README.md +89 -0
- package/examples/scanners-consumer-quickstart.mjs +134 -0
- package/examples/scanners-emerging-movers-v4.mjs +287 -0
- package/examples/scanners-liquidation-watchdog.mjs +341 -0
- package/examples/scanners-live-mcp.mjs +208 -0
- package/examples/scanners-multi-strategy.mjs +165 -0
- package/examples/scanners-position-tracker-e2e.mjs +225 -0
- package/examples/scanners-scheduled-events.mjs +96 -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 +63 -0
- package/examples/strategies/dsl.yaml +47 -0
- package/examples/strategies/fox-minimal-loosened.yaml +225 -0
- package/examples/strategies/fox-minimal.yaml +220 -0
- package/examples/strategies/minimal.yaml +44 -0
- package/examples/strategies/viper.yaml +59 -0
- package/examples/strategies/wolf.yaml +64 -0
- package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +115 -0
- package/openclaw.plugin.json +67 -0
- package/package.json +53 -0
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* senpi guide subcommands — in-shell reference for @senpi-ai/runtime.
|
|
3
|
+
*
|
|
4
|
+
* All reference text is static string constants. This is intentional: the
|
|
5
|
+
* scanner registry does not expose configSchema or description metadata at
|
|
6
|
+
* runtime (ScannerEngine.list() only returns id/enabled/intervalSeconds).
|
|
7
|
+
*
|
|
8
|
+
* TODO: replace static strings with dynamic registry metadata once
|
|
9
|
+
* ScannerEngine exposes configSchema per scanner type. Relevant type is
|
|
10
|
+
* ScannerRegistrationSummary in src/scanners/engine/engine.ts.
|
|
11
|
+
*/
|
|
12
|
+
const CHANGELOG_URL = "https://github.com/Senpi-ai/senpi-trading-runtime/blob/main/CHANGELOG.md";
|
|
13
|
+
// ── Reference text constants ────────────────────────────────────────────────
|
|
14
|
+
const OVERVIEW_TEXT = (version) => `
|
|
15
|
+
@senpi-ai/runtime v${version}
|
|
16
|
+
|
|
17
|
+
Event-driven automated trading plugin for OpenClaw. Orchestrates scanners,
|
|
18
|
+
LLM-based trade decisions, and a DSL trailing stop-loss exit engine.
|
|
19
|
+
|
|
20
|
+
Flow: Scanner → signal queue → Action (optional LLM) → position → DSL exit
|
|
21
|
+
|
|
22
|
+
Quick commands:
|
|
23
|
+
senpi guide scanners Scanner types and config fields
|
|
24
|
+
senpi guide actions Action types and decision modes
|
|
25
|
+
senpi guide dsl DSL exit: phases, lock modes, tiers, time-based cuts
|
|
26
|
+
senpi dsl positions Active DSL positions (CLI inspection)
|
|
27
|
+
senpi dsl inspect Full DSL state for one asset
|
|
28
|
+
senpi dsl closes Archived closes with reason
|
|
29
|
+
senpi guide examples Print minimal strategy YAML
|
|
30
|
+
senpi guide schema Full YAML schema field reference
|
|
31
|
+
senpi guide version Plugin version and changelog URL
|
|
32
|
+
|
|
33
|
+
Docs: docs/runtime-docs/
|
|
34
|
+
`.trim();
|
|
35
|
+
const SCANNERS_TEXT = `
|
|
36
|
+
Scanner types
|
|
37
|
+
─────────────────────────────────────────────────────────────────────────────
|
|
38
|
+
|
|
39
|
+
emerging_movers
|
|
40
|
+
Watches the Senpi smart-money leaderboard for rank and contribution
|
|
41
|
+
movements. Stateful — compares each scan to stored history.
|
|
42
|
+
Typical interval: 20s–60s
|
|
43
|
+
|
|
44
|
+
Signal types (priority order):
|
|
45
|
+
FIRST_JUMP (score 0.95) 10+ rank jump from deep, first appearance
|
|
46
|
+
CONTRIB_EXPLOSION (score 0.90) 3x+ contribution spike in one scan
|
|
47
|
+
IMMEDIATE_MOVER (score 0.85) 10+ rank jump, token was already tracked
|
|
48
|
+
NEW_ENTRY_DEEP (score 0.80) New entry landing directly in top 20
|
|
49
|
+
DEEP_CLIMBER (score 0.60) Moderate rank gain from a deep position
|
|
50
|
+
|
|
51
|
+
Config fields:
|
|
52
|
+
topN number 50 Track top N by SM contribution
|
|
53
|
+
minRankJump number 5 Min rank improvement for DEEP_CLIMBER
|
|
54
|
+
minTopTradersGain number 0.1 Min contribution threshold
|
|
55
|
+
minScansBeforeSignals number 2 Warm-up scans before emitting signals
|
|
56
|
+
historyLimit number 60 Max history entries per token
|
|
57
|
+
immediateJumpThreshold number 10 Rank jump for IMMEDIATE_MOVER/FIRST_JUMP
|
|
58
|
+
deepClimbRankThreshold number 25 Starting rank for deep-climb detection
|
|
59
|
+
contribExplosionMultiplier number 3.0 Ratio for CONTRIB_EXPLOSION
|
|
60
|
+
firstJumpMinPrevRank number 30 Prev-rank floor for FIRST_JUMP
|
|
61
|
+
|
|
62
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
63
|
+
|
|
64
|
+
momentum
|
|
65
|
+
Emits directional breakout signals based on candle price movement.
|
|
66
|
+
Works best paired with the prescreener scanner.
|
|
67
|
+
Typical interval: 1m
|
|
68
|
+
|
|
69
|
+
Signal types: MOMENTUM_BREAKOUT (LONG or SHORT)
|
|
70
|
+
|
|
71
|
+
Config fields:
|
|
72
|
+
timeframe string "1h" Candle timeframe to analyze
|
|
73
|
+
minMovePct number 1.5 Min price change % to emit a signal
|
|
74
|
+
maxCandidates number 20 Max assets evaluated per scan
|
|
75
|
+
minDayVolume number 1e6 Min 24h volume filter (fallback only)
|
|
76
|
+
minSignalScore number 0.2 Min signal score threshold (0–1)
|
|
77
|
+
requirePrescreened boolean true Only scan assets from the prescreener
|
|
78
|
+
|
|
79
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
80
|
+
|
|
81
|
+
prescreener
|
|
82
|
+
Infrastructure scanner. Ranks liquid instruments by a composite
|
|
83
|
+
liquidity/momentum/OI score and publishes a shared artifact consumed
|
|
84
|
+
by momentum and oi_tracker. Add this scanner before those in your YAML.
|
|
85
|
+
Typical interval: 5m
|
|
86
|
+
|
|
87
|
+
Signal types: none (artifact producer only)
|
|
88
|
+
|
|
89
|
+
Config fields:
|
|
90
|
+
topN number 30 Assets passed through to downstream scanners
|
|
91
|
+
minDayVolume number 1e6 Min 24h notional volume
|
|
92
|
+
minLeverage number 2 Min max-leverage (filters illiquid markets)
|
|
93
|
+
minOpenInterest number 0 Min open interest
|
|
94
|
+
|
|
95
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
96
|
+
|
|
97
|
+
oi_tracker
|
|
98
|
+
Infrastructure scanner. Samples open interest per instrument and writes
|
|
99
|
+
an oi-history artifact. Used by downstream scanners that need OI trend data.
|
|
100
|
+
Typical interval: 1m
|
|
101
|
+
|
|
102
|
+
Signal types: none (artifact producer only)
|
|
103
|
+
|
|
104
|
+
Config fields:
|
|
105
|
+
minDayVolume number 1e6 Min 24h volume; instruments below are skipped
|
|
106
|
+
maxHistory number 60 Max OI snapshots retained per instrument
|
|
107
|
+
|
|
108
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
109
|
+
|
|
110
|
+
position_tracker
|
|
111
|
+
Wallet position monitor: compares clearing-house snapshots and emits lifecycle deltas.
|
|
112
|
+
Use with action POSITION_TRACKER to feed the DSL exit engine.
|
|
113
|
+
Typical interval: 10s–60s
|
|
114
|
+
|
|
115
|
+
Type aliases (same scanner): position-tracker
|
|
116
|
+
|
|
117
|
+
Scanner signal types (signalType per result — not YAML action_type values):
|
|
118
|
+
POSITION_OPENED, POSITION_CLOSED, POSITION_INCREASED,
|
|
119
|
+
POSITION_DECREASED, POSITION_FLIPPED
|
|
120
|
+
Use action_type: POSITION_TRACKER with scanners: […] to handle these for DSL/hooks.
|
|
121
|
+
|
|
122
|
+
Config fields:
|
|
123
|
+
sizeChangeEpsilon number 1e-9 Treat abs(size diff) below this as unchanged (float noise)
|
|
124
|
+
`.trim();
|
|
125
|
+
const ACTIONS_TEXT = `
|
|
126
|
+
Action types
|
|
127
|
+
─────────────────────────────────────────────────────────────────────────────
|
|
128
|
+
|
|
129
|
+
OPEN_POSITION
|
|
130
|
+
Opens a new position on Senpi. Checks slot availability before executing.
|
|
131
|
+
|
|
132
|
+
Required YAML fields:
|
|
133
|
+
action_type OPEN_POSITION
|
|
134
|
+
decision_mode llm | no_decision
|
|
135
|
+
scanners list of scanner names that feed this action
|
|
136
|
+
min_confidence 0–10; signals below this score are skipped
|
|
137
|
+
|
|
138
|
+
Optional fields:
|
|
139
|
+
decision_model Claude model id (required when decision_mode: llm)
|
|
140
|
+
context list of context fields injected into the prompt
|
|
141
|
+
currently supported: signal
|
|
142
|
+
decision_prompt system prompt template; use {{signal}} for signal JSON
|
|
143
|
+
|
|
144
|
+
XYZ DEX (Hyperliquid xyz book): payload may use base + payload.dex "xyz" (e.g. GOLD), or
|
|
145
|
+
xyz:BASE with or without dex set; the DSL layer normalizes to stored state { asset: base, dex }.
|
|
146
|
+
Main book: plain symbols (e.g. BTC). CLOSE_POSITION: same hook shapes; include dex when closing
|
|
147
|
+
xyz-book positions so DSL can resolve state (optional if only one open position matches the base).
|
|
148
|
+
|
|
149
|
+
Decision modes:
|
|
150
|
+
llm Claude evaluates each signal. Prompt receives {{signal}} as JSON.
|
|
151
|
+
Claude must respond with:
|
|
152
|
+
{
|
|
153
|
+
"execute": true | false,
|
|
154
|
+
"actionType": "OPEN_POSITION",
|
|
155
|
+
"confidence": 1–10,
|
|
156
|
+
"reasoning": "one sentence",
|
|
157
|
+
"payload": { "asset": "SOL", "direction": "LONG" | "SHORT" }
|
|
158
|
+
}
|
|
159
|
+
Trades are skipped when execute=false or confidence < min_confidence.
|
|
160
|
+
|
|
161
|
+
no_decision Opens a position for every qualifying signal immediately.
|
|
162
|
+
No LLM call. Use with tight DSL stops to manage risk.
|
|
163
|
+
`.trim();
|
|
164
|
+
const DSL_TEXT = `
|
|
165
|
+
DSL exit engine — two-phase trailing stop-loss (DSL v2)
|
|
166
|
+
─────────────────────────────────────────────────────────────────────────────
|
|
167
|
+
|
|
168
|
+
The DSL monitors open positions on a configurable interval and closes them
|
|
169
|
+
when price breaches the computed floor or when preset time cuts fire.
|
|
170
|
+
Phase 1: max_loss absolute floor + phase1 retrace from high-water; consecutive
|
|
171
|
+
breach counting applies only in phase 1. Phase 2: tier floors from lock_hw_pct
|
|
172
|
+
(% of current high-water ROE); phase 2 begins when price crosses the first
|
|
173
|
+
tier (no phase2_trigger_tier). Optional hard_timeout, weak_peak_cut, and
|
|
174
|
+
dead_weight_cut live on the preset (not nested under phase1). When any of these
|
|
175
|
+
has enabled: true, interval_in_minutes is required (finite number > 0);
|
|
176
|
+
weak_peak_cut also requires min_value (finite ROE % > 0). hard_timeout
|
|
177
|
+
applies only in phase 1: entering phase 2 before the interval elapses cancels it;
|
|
178
|
+
same tick as first tier (phase 2) skips hard_timeout in favor of tier advance.
|
|
179
|
+
dead_weight_cut: stagnation clock resets every tick while current ROE > 0 (mark vs entry);
|
|
180
|
+
after interval_in_minutes with current ROE ≤ 0 on the tick, close with dead_weight_cut.
|
|
181
|
+
|
|
182
|
+
exit:
|
|
183
|
+
engine: dsl
|
|
184
|
+
interval_seconds: 30
|
|
185
|
+
|
|
186
|
+
dsl_preset:
|
|
187
|
+
hard_timeout: ... # optional; same level as phase1 / phase2
|
|
188
|
+
weak_peak_cut: ...
|
|
189
|
+
dead_weight_cut: ...
|
|
190
|
+
phase1: ...
|
|
191
|
+
phase2: ...
|
|
192
|
+
|
|
193
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
194
|
+
Phase 1 — Fixed floor + high-water trailing
|
|
195
|
+
Floor = max(absolute_floor, trailing_floor). Absolute floor from max_loss_pct
|
|
196
|
+
(entry × (1 − max_loss_pct/100/leverage) for LONG). Trailing uses phase1
|
|
197
|
+
retrace_threshold (ROE %) from high-water.
|
|
198
|
+
|
|
199
|
+
phase1:
|
|
200
|
+
# enabled: false # optional; default true — false = skip Phase 1 logic; tiers can still advance
|
|
201
|
+
max_loss_pct: 3.0 # e.g. 3% max loss at 1×
|
|
202
|
+
retrace_threshold: 10 # ROE % retrace from HWM in phase 1 (required when enabled)
|
|
203
|
+
consecutive_breaches_required: 3 # ticks below floor before exit in phase 1 only (required when enabled)
|
|
204
|
+
# Exchange SL in Phase 1: max_loss absolute floor only; tighter engine floors use closePosition.
|
|
205
|
+
|
|
206
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
207
|
+
Phase 2 — Tier floors (no per-tier breaches or retrace YAML)
|
|
208
|
+
Floor = tier floor from lock_hw_pct once the tier is active. Price below
|
|
209
|
+
effective floor closes immediately (no consecutive breach counter in phase 2).
|
|
210
|
+
Exchange SL tracks the full effective floor (editPosition on tier/phase and moves).
|
|
211
|
+
|
|
212
|
+
phase2:
|
|
213
|
+
# enabled: false # optional; default true — false = never enter phase 2
|
|
214
|
+
tiers:
|
|
215
|
+
# trigger_pct = ROE % from entry that activates this tier (strictly increasing list)
|
|
216
|
+
# lock_hw_pct = required; % of current high-water ROE to lock (0–100)
|
|
217
|
+
- { trigger_pct: 10, lock_hw_pct: 50 }
|
|
218
|
+
- { trigger_pct: 20, lock_hw_pct: 70 }
|
|
219
|
+
|
|
220
|
+
Legacy keys removed: phase2_trigger_tier; phase2.retrace_threshold / consecutive_breaches_required;
|
|
221
|
+
tier breaches / retrace; phase1-nested time cuts (use preset hard_timeout / weak_peak_cut / dead_weight_cut).
|
|
222
|
+
|
|
223
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
224
|
+
State and events
|
|
225
|
+
Per-position state under stateDir; on-disk version must match the runtime.
|
|
226
|
+
Close reasons include exchange_sl_hit, hard_timeout, weak_peak_cut, dead_weight_cut, dsl_breach, etc.
|
|
227
|
+
Close reason is preserved on pendingClose retry. DSL bus events: dsl.created, dsl.tier_advanced,
|
|
228
|
+
dsl.sl_updated, dsl.phase_changed, dsl.closed, dsl.deleted, and hook position.closed /
|
|
229
|
+
on_position_increased / on_position_decreased (same hook names as HookSystem.fire).
|
|
230
|
+
|
|
231
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
232
|
+
Commands
|
|
233
|
+
senpi dsl positions List active DSL-tracked positions
|
|
234
|
+
senpi dsl positions --json Output as JSON
|
|
235
|
+
senpi dsl inspect <asset> Full state for one position (e.g. SOL, xyz:GOLD)
|
|
236
|
+
senpi dsl inspect <asset> --json Output full DslState as JSON
|
|
237
|
+
senpi dsl closes List archived closes with reason and PnL
|
|
238
|
+
senpi dsl closes --limit 20 Limit output
|
|
239
|
+
`.trim();
|
|
240
|
+
const SCHEMA_TEXT = `
|
|
241
|
+
YAML schema — top-level keys
|
|
242
|
+
─────────────────────────────────────────────────────────────────────────────
|
|
243
|
+
Key Type Req Description
|
|
244
|
+
name string Yes Recipe name
|
|
245
|
+
version number/string No Recipe version (default: 1). Integer or semver string; major version is the schema version.
|
|
246
|
+
description string No Human-readable description
|
|
247
|
+
strategy object Yes Single strategy config (wallet, budget, slots, etc.)
|
|
248
|
+
scanners array * Scanner definitions (* required when actions
|
|
249
|
+
have OPEN_POSITION or a scanners list)
|
|
250
|
+
actions array No Action definitions
|
|
251
|
+
exit object No Exit / DSL block
|
|
252
|
+
health object No Health check config
|
|
253
|
+
hooks array No Hook definitions
|
|
254
|
+
notifications object No telegram_chat_id; gateway_token optional
|
|
255
|
+
(defaults to OPENCLAW_GATEWAY_TOKEN env).
|
|
256
|
+
Optional dsl_lifecycle (false disables DSL Telegram),
|
|
257
|
+
dsl_notify_sl_updates (true = noisy SL sync)
|
|
258
|
+
advanced object No Extra options
|
|
259
|
+
|
|
260
|
+
strategy
|
|
261
|
+
wallet string Yes Wallet address; supports \${VAR} substitution
|
|
262
|
+
budget number No Total budget
|
|
263
|
+
slots number No Max concurrent positions
|
|
264
|
+
margin_per_slot number No Margin per slot
|
|
265
|
+
trading_risk string No conservative | moderate | aggressive
|
|
266
|
+
enabled boolean No Default true
|
|
267
|
+
|
|
268
|
+
scanners[]
|
|
269
|
+
name string Yes Unique name referenced in actions.scanners
|
|
270
|
+
type string Yes emerging_movers | momentum | prescreener | oi_tracker
|
|
271
|
+
interval string Yes e.g. "30s", "2m", "1h"
|
|
272
|
+
blocked_assets array No
|
|
273
|
+
config object No Scanner-specific config (see: senpi guide scanners)
|
|
274
|
+
advanced object No
|
|
275
|
+
|
|
276
|
+
actions[]
|
|
277
|
+
name string Yes
|
|
278
|
+
action_type string Yes OPEN_POSITION
|
|
279
|
+
decision_mode string Yes llm | no_decision
|
|
280
|
+
decision_model string No Required when decision_mode: llm
|
|
281
|
+
scanners string[] No Scanner names this action listens to
|
|
282
|
+
min_confidence number No 0–10
|
|
283
|
+
context string[] No [signal]
|
|
284
|
+
decision_prompt string No Prompt template with {{signal}}
|
|
285
|
+
params object No
|
|
286
|
+
|
|
287
|
+
exit
|
|
288
|
+
engine string No dsl
|
|
289
|
+
interval_seconds number No Default 30; integer 5–3600 (Zod + DSL parse)
|
|
290
|
+
dsl_preset object No Single exit profile (required to start DslPlugin)
|
|
291
|
+
sm_flip any No Non-DSL exit hook data (allowed; ignored by DSL parse)
|
|
292
|
+
|
|
293
|
+
Preset: max_loss_pct (or phase1.max_loss_pct), phase1 (optional enabled;
|
|
294
|
+
max_loss_pct, retrace_threshold ROE %, consecutive_breaches_required),
|
|
295
|
+
phase2 (optional enabled; tiers only — trigger_pct, lock_hw_pct per row),
|
|
296
|
+
optional hard_timeout / weak_peak_cut / dead_weight_cut at preset root
|
|
297
|
+
(when enabled: true, require interval_in_minutes; weak_peak_cut also min_value).
|
|
298
|
+
phase1.enabled and phase2.enabled cannot both be false. Each tier row:
|
|
299
|
+
lock_hw_pct [0,100]. Unknown keys under exit / presets / phase1 / phase2 / tiers throw
|
|
300
|
+
DslConfigValidationError (UNKNOWN_DSL_CONFIG_KEY) at load. DSL parse also
|
|
301
|
+
enforces strictly increasing trigger_pct per tier list, bounds on
|
|
302
|
+
interval/max_loss/trigger/lock_hw, and integer breach counts; see dsl-reference
|
|
303
|
+
Config validation. See: senpi guide dsl
|
|
304
|
+
|
|
305
|
+
Environment substitution: \${VAR} and \${VAR:-default} resolved at load time.
|
|
306
|
+
`.trim();
|
|
307
|
+
const MINIMAL_YAML = `
|
|
308
|
+
name: minimal
|
|
309
|
+
version: 1.0.0
|
|
310
|
+
description: Watch-only strategy — logs signals, opens no positions.
|
|
311
|
+
|
|
312
|
+
strategy:
|
|
313
|
+
wallet: "\${WALLET_ADDRESS}"
|
|
314
|
+
budget: "0"
|
|
315
|
+
slots: 1
|
|
316
|
+
margin_per_slot: 0
|
|
317
|
+
trading_risk: conservative
|
|
318
|
+
enabled: true
|
|
319
|
+
|
|
320
|
+
scanners:
|
|
321
|
+
- name: emerging_movers
|
|
322
|
+
type: emerging_movers
|
|
323
|
+
interval: 60s
|
|
324
|
+
config:
|
|
325
|
+
topN: 20
|
|
326
|
+
minRankJump: 5
|
|
327
|
+
minScansBeforeSignals: 2
|
|
328
|
+
|
|
329
|
+
actions:
|
|
330
|
+
- name: log_signals
|
|
331
|
+
action_type: OPEN_POSITION
|
|
332
|
+
decision_mode: no_decision
|
|
333
|
+
scanners: [emerging_movers]
|
|
334
|
+
min_confidence: 0
|
|
335
|
+
|
|
336
|
+
exit:
|
|
337
|
+
engine: dsl
|
|
338
|
+
interval_seconds: 60
|
|
339
|
+
dsl_preset:
|
|
340
|
+
phase1:
|
|
341
|
+
consecutive_breaches_required: 3
|
|
342
|
+
max_loss_pct: 5.0
|
|
343
|
+
retrace_threshold: 10
|
|
344
|
+
phase2:
|
|
345
|
+
tiers:
|
|
346
|
+
- { trigger_pct: 1, lock_hw_pct: 50 }
|
|
347
|
+
`.trim();
|
|
348
|
+
export const CHEATSHEET_TEXT = `
|
|
349
|
+
Senpi Plugin Commands Cheatsheet
|
|
350
|
+
================================
|
|
351
|
+
|
|
352
|
+
All CLI commands and gateway methods exposed by @senpi-ai/runtime.
|
|
353
|
+
|
|
354
|
+
CLI Commands
|
|
355
|
+
------------
|
|
356
|
+
All commands are prefixed with: openclaw senpi
|
|
357
|
+
|
|
358
|
+
senpi config — Manage CLI preferences (~/.openclaw/senpi-cli.json)
|
|
359
|
+
config set-chat-id <chatId> Store Telegram chat ID for lifecycle notifications
|
|
360
|
+
config set-senpi-jwt-token <token> Store Senpi MCP JWT (Bearer)
|
|
361
|
+
config set-state-dir <dir> Set base state directory
|
|
362
|
+
config get <key> Print one value (telegram-chat-id | senpi-jwt-token | state-dir)
|
|
363
|
+
config list List all preferences (secrets masked)
|
|
364
|
+
config unset <key> Remove a key
|
|
365
|
+
config reset Clear all preferences
|
|
366
|
+
|
|
367
|
+
senpi runtime — Manage runtimes
|
|
368
|
+
runtime create Add a runtime from a YAML file
|
|
369
|
+
-p, --path <path> Path to strategy YAML file
|
|
370
|
+
-c, --content <yaml> Inline YAML content
|
|
371
|
+
--runtime-id <id> Override auto-derived ID
|
|
372
|
+
runtime delete [id] Remove a runtime
|
|
373
|
+
--id <runtime_id> Delete by runtime ID
|
|
374
|
+
--address <wallet> Delete by wallet address
|
|
375
|
+
runtime list List installed runtimes (id, wallet, source, status)
|
|
376
|
+
|
|
377
|
+
senpi dsl — Inspect DSL exit engine
|
|
378
|
+
dsl positions Active DSL-tracked positions
|
|
379
|
+
-r, --runtime <id> Filter by runtime ID
|
|
380
|
+
-a, --address <addr> Filter by strategy address
|
|
381
|
+
--json Raw JSON output
|
|
382
|
+
dsl inspect <asset> Full DSL state for one position
|
|
383
|
+
-r, --runtime <id> Filter by runtime ID
|
|
384
|
+
-a, --address <addr> Filter by strategy address
|
|
385
|
+
--json Raw JSON output
|
|
386
|
+
dsl closes Archived closes with reason and ROE
|
|
387
|
+
-r, --runtime <id> Filter by runtime ID
|
|
388
|
+
-a, --address <addr> Filter by strategy address
|
|
389
|
+
-l, --limit <n> Max rows
|
|
390
|
+
--json Raw JSON output
|
|
391
|
+
|
|
392
|
+
senpi guide — In-shell reference
|
|
393
|
+
guide Overview and quick commands
|
|
394
|
+
guide scanners Scanner types and config fields
|
|
395
|
+
guide actions Action types and decision modes
|
|
396
|
+
guide dsl DSL exit engine reference
|
|
397
|
+
guide examples Print minimal strategy YAML
|
|
398
|
+
guide schema Full YAML schema field reference
|
|
399
|
+
guide version Plugin version and changelog URL
|
|
400
|
+
|
|
401
|
+
Gateway Methods
|
|
402
|
+
---------------
|
|
403
|
+
Called via: openclaw gateway call <method> --params '<json>'
|
|
404
|
+
Responses: { ok: boolean, payload?: ..., error?: { code, message } }
|
|
405
|
+
|
|
406
|
+
senpi.installRuntime
|
|
407
|
+
Params: runtimeYamlPath (string) OR runtimeYamlContent (string); id (string, optional)
|
|
408
|
+
Success: { id, name, wallet }
|
|
409
|
+
Errors: INVALID_REQUEST (missing YAML, duplicate ID/wallet), UNAVAILABLE (bad YAML, start failure)
|
|
410
|
+
|
|
411
|
+
senpi.listRuntimes
|
|
412
|
+
Params: (none)
|
|
413
|
+
Success: { recipes: [{ id, wallet, source, status }] }
|
|
414
|
+
|
|
415
|
+
senpi.deleteRuntime
|
|
416
|
+
Params: id (string) OR address (string)
|
|
417
|
+
Success: { id }
|
|
418
|
+
Errors: NOT_FOUND, INVALID_REQUEST
|
|
419
|
+
|
|
420
|
+
senpi.listDslPositions
|
|
421
|
+
Params: runtimeId? (string), address? (string)
|
|
422
|
+
Success: { positions: [{ runtimeId, address, asset, direction, entryPrice, lastPrice,
|
|
423
|
+
currentROE, phase, currentTierIndex, floorPrice, currentBreachCount,
|
|
424
|
+
breachesRequired, elapsedMinutes, pendingClose }] }
|
|
425
|
+
|
|
426
|
+
senpi.getDslPositionState
|
|
427
|
+
Params: asset (string, required), runtimeId? (string), address? (string)
|
|
428
|
+
Success: { positions: [{ runtimeId, address, state: <full DslState> }] }
|
|
429
|
+
Errors: INVALID_REQUEST (no asset), NOT_FOUND
|
|
430
|
+
|
|
431
|
+
senpi.listDslArchives
|
|
432
|
+
Params: runtimeId? (string), address? (string), limit? (number)
|
|
433
|
+
Success: { closes: [{ runtimeId, address, asset, direction, entryPrice, lastPrice,
|
|
434
|
+
closeReason, closedAt, peakROE, currentROE, elapsedMinutes, phase }] }
|
|
435
|
+
Close reasons: dsl_breach, hard_timeout, weak_peak_cut, dead_weight_cut, exchange_sl_hit, manual
|
|
436
|
+
|
|
437
|
+
Full cheatsheet with sample responses: docs/plugin-commands-cheatsheet.md
|
|
438
|
+
`.trim();
|
|
439
|
+
/**
|
|
440
|
+
* Register `senpi guide [subcommand]` on the senpi Commander subprogram.
|
|
441
|
+
* @param senpi - the `senpi` Commander command object
|
|
442
|
+
* @param version - plugin version string (from package.json; see `src/version.ts`)
|
|
443
|
+
*/
|
|
444
|
+
export function registerGuideCommands(senpi, version) {
|
|
445
|
+
const guide = senpi.command("guide")
|
|
446
|
+
.description("In-shell reference for @senpi-ai/runtime");
|
|
447
|
+
guide.action(() => {
|
|
448
|
+
process.stdout.write(OVERVIEW_TEXT(version) + "\n");
|
|
449
|
+
});
|
|
450
|
+
guide.command("scanners")
|
|
451
|
+
.description("Scanner types and config fields")
|
|
452
|
+
.action(() => {
|
|
453
|
+
process.stdout.write(SCANNERS_TEXT + "\n");
|
|
454
|
+
});
|
|
455
|
+
guide.command("actions")
|
|
456
|
+
.description("Action types and decision modes")
|
|
457
|
+
.action(() => {
|
|
458
|
+
process.stdout.write(ACTIONS_TEXT + "\n");
|
|
459
|
+
});
|
|
460
|
+
guide.command("dsl")
|
|
461
|
+
.description("DSL exit engine: phases, lock modes, tiers, time-based cuts")
|
|
462
|
+
.action(() => {
|
|
463
|
+
process.stdout.write(DSL_TEXT + "\n");
|
|
464
|
+
});
|
|
465
|
+
guide.command("examples")
|
|
466
|
+
.description("Print minimal strategy YAML to stdout")
|
|
467
|
+
.action(() => {
|
|
468
|
+
process.stdout.write(MINIMAL_YAML + "\n");
|
|
469
|
+
});
|
|
470
|
+
guide.command("schema")
|
|
471
|
+
.description("Full YAML schema field reference")
|
|
472
|
+
.action(() => {
|
|
473
|
+
process.stdout.write(SCHEMA_TEXT + "\n");
|
|
474
|
+
});
|
|
475
|
+
guide.command("version")
|
|
476
|
+
.description("Plugin version and changelog URL")
|
|
477
|
+
.action(() => {
|
|
478
|
+
process.stdout.write(`@senpi-ai/runtime v${version}\n${CHANGELOG_URL}\n`);
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
//# sourceMappingURL=guide-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guide-commands.js","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent Senpi CLI preferences: ~/.openclaw/senpi-cli.json (override via OPENCLAW_SENPI_CLI_CONFIG).
|
|
3
|
+
* Priority when resolving at runtime: plugin config > stored file > env > default (per key).
|
|
4
|
+
*/
|
|
5
|
+
export declare const SENPI_CLI_KEYS: {
|
|
6
|
+
readonly TELEGRAM_CHAT_ID: "telegram-chat-id";
|
|
7
|
+
readonly SENPI_JWT_TOKEN: "senpi-jwt-token";
|
|
8
|
+
readonly STATE_DIR: "state-dir";
|
|
9
|
+
};
|
|
10
|
+
export type SenpiCliKey = (typeof SENPI_CLI_KEYS)[keyof typeof SENPI_CLI_KEYS];
|
|
11
|
+
/** Last 4 chars masked as ••••••••abcd */
|
|
12
|
+
export declare function maskSensitiveValue(value: string): string;
|
|
13
|
+
export declare function formatConfigListValue(key: string, value: string | undefined): string;
|
|
14
|
+
export declare function getSenpiCliConfigPath(): string;
|
|
15
|
+
export declare function readSenpiCliStore(): Record<string, string>;
|
|
16
|
+
export declare function writeSenpiCliStore(store: Record<string, string>): void;
|
|
17
|
+
export declare function setSenpiCliKey(key: string, value: string): void;
|
|
18
|
+
export declare function unsetSenpiCliKey(key: string): void;
|
|
19
|
+
export declare function resetSenpiCliStore(): void;
|
|
20
|
+
/** Telegram lifecycle notifications: stored > TELEGRAM_CHAT_ID > SENPI_LIFECYCLE_TELEGRAM_CHAT_ID */
|
|
21
|
+
export declare function resolveTelegramChatIdFromStore(store: Record<string, string>): string | undefined;
|
|
22
|
+
/** MCP JWT / API key: plugin config > stored > SENPI_API_KEY */
|
|
23
|
+
export declare function resolveSenpiApiKeyFromStore(store: Record<string, string>, configApiKey: string | undefined): string | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Base Senpi state directory (registry root): plugin stateDir > stored > SENPI_STATE_DIR > OpenClaw state/senpi-state > ~/.openclaw/senpi-state
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveSenpiBaseStateDir(options: {
|
|
28
|
+
store: Record<string, string>;
|
|
29
|
+
configStateDir: string | undefined;
|
|
30
|
+
resolveOpenclawStateDir: (() => string) | undefined;
|
|
31
|
+
getDefaultStateDir: () => string;
|
|
32
|
+
}): string;
|
|
33
|
+
//# sourceMappingURL=senpi-cli-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"senpi-cli-config.d.ts","sourceRoot":"","sources":["../../src/cli/senpi-cli-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAI/E,0CAA0C;AAC1C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIpF;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAM9C;AAYD,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAe1D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAItE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI/D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,qGAAqG;AACrG,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,CAQhG;AAED,gEAAgE;AAChE,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,MAAM,GAAG,SAAS,CAQpB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,uBAAuB,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;IACpD,kBAAkB,EAAE,MAAM,MAAM,CAAC;CAClC,GAAG,MAAM,CAaT"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent Senpi CLI preferences: ~/.openclaw/senpi-cli.json (override via OPENCLAW_SENPI_CLI_CONFIG).
|
|
3
|
+
* Priority when resolving at runtime: plugin config > stored file > env > default (per key).
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
6
|
+
import { homedir } from "node:os";
|
|
7
|
+
import { dirname, join } from "node:path";
|
|
8
|
+
export const SENPI_CLI_KEYS = {
|
|
9
|
+
TELEGRAM_CHAT_ID: "telegram-chat-id",
|
|
10
|
+
SENPI_JWT_TOKEN: "senpi-jwt-token",
|
|
11
|
+
STATE_DIR: "state-dir",
|
|
12
|
+
};
|
|
13
|
+
const SENSITIVE_KEYS = new Set([SENPI_CLI_KEYS.SENPI_JWT_TOKEN]);
|
|
14
|
+
/** Last 4 chars masked as ••••••••abcd */
|
|
15
|
+
export function maskSensitiveValue(value) {
|
|
16
|
+
const t = value.trim();
|
|
17
|
+
if (t.length <= 4)
|
|
18
|
+
return t.length > 0 ? "••••" : "(empty)";
|
|
19
|
+
return `••••••••${t.slice(-4)}`;
|
|
20
|
+
}
|
|
21
|
+
export function formatConfigListValue(key, value) {
|
|
22
|
+
if (value === undefined || value.length === 0)
|
|
23
|
+
return "(not set)";
|
|
24
|
+
if (SENSITIVE_KEYS.has(key))
|
|
25
|
+
return maskSensitiveValue(value);
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
export function getSenpiCliConfigPath() {
|
|
29
|
+
const override = process.env.OPENCLAW_SENPI_CLI_CONFIG?.trim();
|
|
30
|
+
if (override)
|
|
31
|
+
return override;
|
|
32
|
+
const home = homedir();
|
|
33
|
+
if (!home)
|
|
34
|
+
return join(process.cwd(), ".openclaw", "senpi-cli.json");
|
|
35
|
+
return join(home, ".openclaw", "senpi-cli.json");
|
|
36
|
+
}
|
|
37
|
+
function expandUserPath(p) {
|
|
38
|
+
const t = p.trim();
|
|
39
|
+
if (t.startsWith("~/") || t === "~") {
|
|
40
|
+
const h = homedir();
|
|
41
|
+
if (!h)
|
|
42
|
+
return t.replace(/^~/, "");
|
|
43
|
+
return t === "~" ? h : join(h, t.slice(2));
|
|
44
|
+
}
|
|
45
|
+
return t;
|
|
46
|
+
}
|
|
47
|
+
export function readSenpiCliStore() {
|
|
48
|
+
const path = getSenpiCliConfigPath();
|
|
49
|
+
if (!existsSync(path))
|
|
50
|
+
return {};
|
|
51
|
+
try {
|
|
52
|
+
const raw = readFileSync(path, "utf8");
|
|
53
|
+
const o = JSON.parse(raw);
|
|
54
|
+
if (!o || typeof o !== "object" || Array.isArray(o))
|
|
55
|
+
return {};
|
|
56
|
+
const out = {};
|
|
57
|
+
for (const [k, v] of Object.entries(o)) {
|
|
58
|
+
if (typeof v === "string" && v.length > 0)
|
|
59
|
+
out[k] = v;
|
|
60
|
+
}
|
|
61
|
+
return out;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return {};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function writeSenpiCliStore(store) {
|
|
68
|
+
const path = getSenpiCliConfigPath();
|
|
69
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
70
|
+
writeFileSync(path, `${JSON.stringify(store, null, 2)}\n`, "utf8");
|
|
71
|
+
}
|
|
72
|
+
export function setSenpiCliKey(key, value) {
|
|
73
|
+
const store = readSenpiCliStore();
|
|
74
|
+
store[key] = value.trim();
|
|
75
|
+
writeSenpiCliStore(store);
|
|
76
|
+
}
|
|
77
|
+
export function unsetSenpiCliKey(key) {
|
|
78
|
+
const store = readSenpiCliStore();
|
|
79
|
+
delete store[key];
|
|
80
|
+
writeSenpiCliStore(store);
|
|
81
|
+
}
|
|
82
|
+
export function resetSenpiCliStore() {
|
|
83
|
+
writeSenpiCliStore({});
|
|
84
|
+
}
|
|
85
|
+
/** Telegram lifecycle notifications: stored > TELEGRAM_CHAT_ID > SENPI_LIFECYCLE_TELEGRAM_CHAT_ID */
|
|
86
|
+
export function resolveTelegramChatIdFromStore(store) {
|
|
87
|
+
const a = store[SENPI_CLI_KEYS.TELEGRAM_CHAT_ID]?.trim();
|
|
88
|
+
if (a)
|
|
89
|
+
return a;
|
|
90
|
+
const e1 = process.env.TELEGRAM_CHAT_ID?.trim();
|
|
91
|
+
if (e1)
|
|
92
|
+
return e1;
|
|
93
|
+
const e2 = process.env.SENPI_LIFECYCLE_TELEGRAM_CHAT_ID?.trim();
|
|
94
|
+
if (e2)
|
|
95
|
+
return e2;
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
/** MCP JWT / API key: plugin config > stored > SENPI_API_KEY */
|
|
99
|
+
export function resolveSenpiApiKeyFromStore(store, configApiKey) {
|
|
100
|
+
const c = configApiKey?.trim();
|
|
101
|
+
if (c)
|
|
102
|
+
return c;
|
|
103
|
+
const s = store[SENPI_CLI_KEYS.SENPI_JWT_TOKEN]?.trim();
|
|
104
|
+
if (s)
|
|
105
|
+
return s;
|
|
106
|
+
const e = process.env.SENPI_API_KEY?.trim();
|
|
107
|
+
if (e)
|
|
108
|
+
return e;
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Base Senpi state directory (registry root): plugin stateDir > stored > SENPI_STATE_DIR > OpenClaw state/senpi-state > ~/.openclaw/senpi-state
|
|
113
|
+
*/
|
|
114
|
+
export function resolveSenpiBaseStateDir(options) {
|
|
115
|
+
const { store, configStateDir, resolveOpenclawStateDir, getDefaultStateDir: defaultDir } = options;
|
|
116
|
+
if (typeof configStateDir === "string" && configStateDir.trim().length > 0) {
|
|
117
|
+
return expandUserPath(configStateDir);
|
|
118
|
+
}
|
|
119
|
+
const stored = store[SENPI_CLI_KEYS.STATE_DIR]?.trim();
|
|
120
|
+
if (stored)
|
|
121
|
+
return expandUserPath(stored);
|
|
122
|
+
const env = process.env.SENPI_STATE_DIR?.trim();
|
|
123
|
+
if (env)
|
|
124
|
+
return expandUserPath(env);
|
|
125
|
+
if (typeof resolveOpenclawStateDir === "function") {
|
|
126
|
+
return join(resolveOpenclawStateDir(), "senpi-state");
|
|
127
|
+
}
|
|
128
|
+
return defaultDir();
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=senpi-cli-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"senpi-cli-config.js","sourceRoot":"","sources":["../../src/cli/senpi-cli-config.ts"],"names":[],"mappings":"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"}
|