@senpi/trading-recipe 1.0.70 → 1.0.71
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 +1 -1
- package/dist/actions/close-position/close-position.action.js +4 -4
- package/dist/actions/close-position/close-position.action.js.map +1 -1
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +4 -5
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/actions/types.d.ts +1 -1
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/cli/guide-commands.d.ts +1 -0
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +102 -12
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/cli/senpi-commands.d.ts.map +1 -1
- package/dist/cli/senpi-commands.js +27 -10
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/dsl/plugin/index.d.ts.map +1 -1
- package/dist/dsl/plugin/index.js +3 -4
- package/dist/dsl/plugin/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +72 -15
- package/dist/index.js.map +1 -1
- package/dist/runtime/build-action-scan-payload.d.ts +4 -4
- package/dist/runtime/build-action-scan-payload.d.ts.map +1 -1
- package/dist/runtime/build-action-scan-payload.js +15 -19
- package/dist/runtime/build-action-scan-payload.js.map +1 -1
- package/dist/runtime/create-action-context.d.ts +3 -3
- package/dist/runtime/create-action-context.d.ts.map +1 -1
- package/dist/runtime/create-action-context.js +5 -5
- package/dist/runtime/create-action-context.js.map +1 -1
- package/dist/runtime/create-actions.d.ts +1 -1
- package/dist/runtime/create-actions.d.ts.map +1 -1
- package/dist/runtime/create-actions.js +2 -3
- package/dist/runtime/create-actions.js.map +1 -1
- package/dist/runtime/create-runtime-context.d.ts +12 -12
- package/dist/runtime/create-runtime-context.d.ts.map +1 -1
- package/dist/runtime/create-runtime-context.js +15 -13
- package/dist/runtime/create-runtime-context.js.map +1 -1
- package/dist/runtime/create-scanner-module.d.ts +1 -1
- package/dist/runtime/create-scanner-module.js +4 -4
- package/dist/runtime/create-scanner-module.js.map +1 -1
- package/dist/runtime/index.d.ts +4 -4
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +3 -3
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/load-trading-recipe.d.ts +2 -2
- package/dist/runtime/load-trading-recipe.d.ts.map +1 -1
- package/dist/runtime/load-trading-recipe.js +22 -10
- package/dist/runtime/load-trading-recipe.js.map +1 -1
- package/dist/runtime/map-strategies-registration.d.ts +6 -4
- package/dist/runtime/map-strategies-registration.d.ts.map +1 -1
- package/dist/runtime/map-strategies-registration.js +14 -22
- package/dist/runtime/map-strategies-registration.js.map +1 -1
- package/dist/runtime/map-strategies.d.ts +6 -4
- package/dist/runtime/map-strategies.d.ts.map +1 -1
- package/dist/runtime/map-strategies.js +42 -44
- package/dist/runtime/map-strategies.js.map +1 -1
- package/dist/runtime/recipe-version.d.ts +15 -0
- package/dist/runtime/recipe-version.d.ts.map +1 -0
- package/dist/runtime/recipe-version.js +25 -0
- package/dist/runtime/recipe-version.js.map +1 -0
- package/dist/runtime/reconcile-state.d.ts +1 -1
- package/dist/runtime/reconcile-state.js +1 -1
- package/dist/runtime/run.d.ts +2 -0
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +1 -0
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/runtime.d.ts +3 -4
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +16 -38
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/state-layout.d.ts +48 -0
- package/dist/runtime/state-layout.d.ts.map +1 -0
- package/dist/runtime/state-layout.js +87 -0
- package/dist/runtime/state-layout.js.map +1 -0
- package/dist/runtime/strategy-registry.d.ts +17 -0
- package/dist/runtime/strategy-registry.d.ts.map +1 -1
- package/dist/runtime/strategy-registry.js +32 -0
- package/dist/runtime/strategy-registry.js.map +1 -1
- package/dist/runtime/trading-recipe-schema.d.ts +16 -634
- package/dist/runtime/trading-recipe-schema.d.ts.map +1 -1
- package/dist/runtime/trading-recipe-schema.js +3 -9
- package/dist/runtime/trading-recipe-schema.js.map +1 -1
- package/dist/scanners/engine/engine.d.ts.map +1 -1
- package/dist/scanners/engine/engine.js +0 -7
- package/dist/scanners/engine/engine.js.map +1 -1
- package/dist/scanners/runtime-module.d.ts +5 -6
- package/dist/scanners/runtime-module.d.ts.map +1 -1
- package/dist/scanners/runtime-module.js +7 -10
- package/dist/scanners/runtime-module.js.map +1 -1
- package/dist/scripts/run-dsl-standalone-live.js +5 -7
- package/dist/scripts/run-dsl-standalone-live.js.map +1 -1
- package/dist/scripts/run-dsl-standalone-mock.js +3 -4
- package/dist/scripts/run-dsl-standalone-mock.js.map +1 -1
- package/dist/types/runtime.d.ts +1 -1
- package/dist/types/runtime.d.ts.map +1 -1
- package/examples/strategies/dsl-showcase.yaml +8 -3
- package/examples/strategies/dsl.yaml +4 -5
- package/examples/strategies/fox-minimal-loosened.yaml +8 -9
- package/examples/strategies/fox-minimal.yaml +8 -9
- package/examples/strategies/minimal.yaml +7 -8
- package/examples/strategies/viper.yaml +7 -8
- package/examples/strategies/wolf.yaml +7 -8
- package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +9 -10
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Build RuntimeContext for actions:
|
|
2
|
+
* Build RuntimeContext for actions: strategyState with live StrategyStateImpl from SenpiClient.
|
|
3
3
|
*/
|
|
4
4
|
import type { StrategyConfig, StrategyState } from "../types/strategy.js";
|
|
5
5
|
import type { RuntimeContext } from "../types/runtime.js";
|
|
@@ -9,14 +9,6 @@ import type { ContextBuilder } from "../context/types.js";
|
|
|
9
9
|
import type { NotificationService } from "../types/notification.js";
|
|
10
10
|
import type { ScannerRuntimeModule } from "../scanners/runtime-module.js";
|
|
11
11
|
import type { MaxLeverageCache } from "../leverage/max-leverage-cache.js";
|
|
12
|
-
export interface GetUsedSlotsByStrategy {
|
|
13
|
-
getUsedSlotsByStrategy(addresses: string[]): Promise<Record<string, number>>;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Build a Map of address → StrategyState for RuntimeContext.
|
|
17
|
-
* Each entry is a live StrategyStateImpl backed by SenpiClient.
|
|
18
|
-
*/
|
|
19
|
-
export declare function createStrategyStatesMap(strategiesMap: Map<string, StrategyConfig>, stateManager: GetUsedSlotsByStrategy, senpi: SenpiClient): Map<string, StrategyState>;
|
|
20
12
|
export interface CreateRuntimeContextDeps {
|
|
21
13
|
senpi: SenpiClient;
|
|
22
14
|
hookSystem: HookSystem;
|
|
@@ -24,12 +16,20 @@ export interface CreateRuntimeContextDeps {
|
|
|
24
16
|
contextBuilder: ContextBuilder;
|
|
25
17
|
riskGuard: RiskGuard;
|
|
26
18
|
notifications: NotificationService;
|
|
27
|
-
stateManager: GetUsedSlotsByStrategy;
|
|
28
19
|
scannerModule?: ScannerRuntimeModule;
|
|
29
20
|
maxLeverageCache: MaxLeverageCache;
|
|
30
21
|
}
|
|
31
22
|
/**
|
|
32
|
-
* Build
|
|
23
|
+
* Build a live StrategyState from a StrategyConfig and SenpiClient.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createStrategyState(strategyConfig: StrategyConfig, senpi: SenpiClient): StrategyState;
|
|
26
|
+
/**
|
|
27
|
+
* Build a single-entry Map<address, StrategyState> from a StrategyConfig.
|
|
28
|
+
* Used by DSL plugin and standalone scripts that need a Map interface.
|
|
29
|
+
*/
|
|
30
|
+
export declare function createStrategyStatesMap(strategyConfig: StrategyConfig, senpi: SenpiClient): Map<string, StrategyState>;
|
|
31
|
+
/**
|
|
32
|
+
* Build RuntimeContext from strategy config and deps. Used by createActions to pass into action factories.
|
|
33
33
|
*/
|
|
34
|
-
export declare function createRuntimeContext(
|
|
34
|
+
export declare function createRuntimeContext(strategyConfig: StrategyConfig, deps: CreateRuntimeContextDeps): RuntimeContext;
|
|
35
35
|
//# sourceMappingURL=create-runtime-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-runtime-context.d.ts","sourceRoot":"","sources":["../../src/runtime/create-runtime-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"create-runtime-context.d.ts","sourceRoot":"","sources":["../../src/runtime/create-runtime-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,mBAAmB,CAAC;IACnC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,WAAW,GACjB,aAAa,CAEf;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,WAAW,GACjB,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAE5B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,wBAAwB,GAC7B,cAAc,CAahB"}
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Build RuntimeContext for actions:
|
|
2
|
+
* Build RuntimeContext for actions: strategyState with live StrategyStateImpl from SenpiClient.
|
|
3
3
|
*/
|
|
4
4
|
import { StrategyStateImpl } from "../strategy/strategy-state.js";
|
|
5
5
|
/**
|
|
6
|
-
* Build a
|
|
7
|
-
* Each entry is a live StrategyStateImpl backed by SenpiClient.
|
|
6
|
+
* Build a live StrategyState from a StrategyConfig and SenpiClient.
|
|
8
7
|
*/
|
|
9
|
-
export function
|
|
10
|
-
|
|
11
|
-
for (const [key, config] of strategiesMap) {
|
|
12
|
-
out.set(key, new StrategyStateImpl(config, senpi));
|
|
13
|
-
}
|
|
14
|
-
return out;
|
|
8
|
+
export function createStrategyState(strategyConfig, senpi) {
|
|
9
|
+
return new StrategyStateImpl(strategyConfig, senpi);
|
|
15
10
|
}
|
|
16
11
|
/**
|
|
17
|
-
* Build
|
|
12
|
+
* Build a single-entry Map<address, StrategyState> from a StrategyConfig.
|
|
13
|
+
* Used by DSL plugin and standalone scripts that need a Map interface.
|
|
18
14
|
*/
|
|
19
|
-
export function
|
|
20
|
-
|
|
15
|
+
export function createStrategyStatesMap(strategyConfig, senpi) {
|
|
16
|
+
return new Map([[strategyConfig.address, createStrategyState(strategyConfig, senpi)]]);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build RuntimeContext from strategy config and deps. Used by createActions to pass into action factories.
|
|
20
|
+
*/
|
|
21
|
+
export function createRuntimeContext(strategyConfig, deps) {
|
|
22
|
+
const strategyState = createStrategyState(strategyConfig, deps.senpi);
|
|
21
23
|
return {
|
|
22
24
|
senpi: deps.senpi,
|
|
23
25
|
hookSystem: deps.hookSystem,
|
|
@@ -25,7 +27,7 @@ export function createRuntimeContext(strategiesMap, deps) {
|
|
|
25
27
|
contextBuilder: deps.contextBuilder,
|
|
26
28
|
riskGuard: deps.riskGuard,
|
|
27
29
|
notifications: deps.notifications,
|
|
28
|
-
|
|
30
|
+
strategyState,
|
|
29
31
|
scannerModule: deps.scannerModule,
|
|
30
32
|
maxLeverageCache: deps.maxLeverageCache,
|
|
31
33
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-runtime-context.js","sourceRoot":"","sources":["../../src/runtime/create-runtime-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"create-runtime-context.js","sourceRoot":"","sources":["../../src/runtime/create-runtime-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAalE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,cAA8B,EAC9B,KAAkB;IAElB,OAAO,IAAI,iBAAiB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,cAA8B,EAC9B,KAAkB;IAElB,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,cAA8B,EAC9B,IAA8B;IAE9B,MAAM,aAAa,GAAG,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,aAAa;QACb,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -8,7 +8,7 @@ import type { TradingRecipeConfig } from "./trading-recipe-config.js";
|
|
|
8
8
|
/**
|
|
9
9
|
* Builds the standalone scanner runtime module from parsed trading recipe config.
|
|
10
10
|
* Scanner registrations are normalized into factories so YAML-level ids and
|
|
11
|
-
* optional config overrides become
|
|
11
|
+
* optional config overrides become strategy-scoped scanner instances.
|
|
12
12
|
*/
|
|
13
13
|
export declare function createScannerModuleFromTradingRecipe(config: TradingRecipeConfig, stateDir: string, providers?: ScannerDataProviders, logger?: ScannerLogger): ReturnType<typeof createScannerRuntimeModule>;
|
|
14
14
|
//# sourceMappingURL=create-scanner-module.d.ts.map
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { createScannerRuntimeModule } from "../scanners/runtime-module.js";
|
|
5
5
|
import { prepareScannerInputs } from "../scanners/prepare-scanner-inputs.js";
|
|
6
|
-
import {
|
|
6
|
+
import { resolveStrategyRegistration } from "./map-strategies-registration.js";
|
|
7
7
|
import { ScannerRegistry } from "./scanner-registry.js";
|
|
8
8
|
import { buildScannerComposition } from "./scanner-composition.js";
|
|
9
9
|
/**
|
|
10
10
|
* Builds the standalone scanner runtime module from parsed trading recipe config.
|
|
11
11
|
* Scanner registrations are normalized into factories so YAML-level ids and
|
|
12
|
-
* optional config overrides become
|
|
12
|
+
* optional config overrides become strategy-scoped scanner instances.
|
|
13
13
|
*/
|
|
14
14
|
export function createScannerModuleFromTradingRecipe(config, stateDir, providers, logger) {
|
|
15
|
-
const
|
|
15
|
+
const strategy = resolveStrategyRegistration(config);
|
|
16
16
|
const scanners = [];
|
|
17
17
|
for (const sc of config.scanners ?? []) {
|
|
18
18
|
scanners.push(ScannerRegistry.createScanner(sc.type, sc.name, sc.config, sc.depends_on));
|
|
@@ -21,7 +21,7 @@ export function createScannerModuleFromTradingRecipe(config, stateDir, providers
|
|
|
21
21
|
const composition = buildScannerComposition(config, preparedScanners.map((scanner) => scanner.definition), logger);
|
|
22
22
|
return createScannerRuntimeModule({
|
|
23
23
|
stateDir,
|
|
24
|
-
|
|
24
|
+
strategy,
|
|
25
25
|
scanners: preparedScanners.map((scanner) => scanner.factory),
|
|
26
26
|
composition,
|
|
27
27
|
providers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-scanner-module.js","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAE7E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create-scanner-module.js","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAE7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;;GAIG;AACH,MAAM,UAAU,oCAAoC,CAClD,MAA2B,EAC3B,QAAgB,EAChB,SAAgC,EAChC,MAAsB;IAEtB,MAAM,QAAQ,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACvC,QAAQ,CAAC,IAAI,CACX,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,CAC1E,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,uBAAuB,CACzC,MAAM,EACN,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EACrD,MAAM,CACP,CAAC;IACF,OAAO,0BAA0B,CAAC;QAChC,QAAQ;QACR,QAAQ;QACR,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;QAC5D,WAAW;QACX,SAAS;QACT,MAAM;KACP,CAAC,CAAC;AACL,CAAC"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -13,8 +13,8 @@ export type { TradingRecipeConfig, TradingRecipeStrategy, TradingRecipeScanner,
|
|
|
13
13
|
export { tradingRecipeConfigSchema } from "./trading-recipe-config.js";
|
|
14
14
|
export { resolveEnvInString, resolveEnvInObject } from "./env-resolve.js";
|
|
15
15
|
export { parseInterval } from "./parse-interval.js";
|
|
16
|
-
export { mapStrategiesToConfig } from "./map-strategies.js";
|
|
17
|
-
export { mapStrategiesToScannerRegistration } from "./map-strategies-registration.js";
|
|
16
|
+
export { resolveStrategyConfig, mapStrategiesToConfig } from "./map-strategies.js";
|
|
17
|
+
export { resolveStrategyRegistration, mapStrategiesToScannerRegistration } from "./map-strategies-registration.js";
|
|
18
18
|
export { mapTradingRecipeExitToDslConfig } from "./map-exit-config.js";
|
|
19
19
|
export { ScannerRegistry } from "./scanner-registry.js";
|
|
20
20
|
export { ActionRegistry } from "./action-registry.js";
|
|
@@ -30,8 +30,8 @@ export type { NotificationServiceOptions } from "./notifications.js";
|
|
|
30
30
|
export { createScannerModuleFromTradingRecipe } from "./create-scanner-module.js";
|
|
31
31
|
export { createActionContext } from "./create-action-context.js";
|
|
32
32
|
export type { CreateActionContextDeps } from "./create-action-context.js";
|
|
33
|
-
export { createRuntimeContext,
|
|
34
|
-
export type { CreateRuntimeContextDeps
|
|
33
|
+
export { createRuntimeContext, createStrategyState } from "./create-runtime-context.js";
|
|
34
|
+
export type { CreateRuntimeContextDeps } from "./create-runtime-context.js";
|
|
35
35
|
export { createActions } from "./create-actions.js";
|
|
36
36
|
export type { CreateActionsOptions, CreateActionsResult, ActionWithMeta } from "./create-actions.js";
|
|
37
37
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,YAAY,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC;AACjG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC3J,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,YAAY,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC;AACjG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC3J,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,2BAA2B,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AACnH,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,YAAY,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACvI,YAAY,EAAE,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,oCAAoC,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACxF,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/runtime/index.js
CHANGED
|
@@ -8,8 +8,8 @@ export { Runtime } from "./runtime.js";
|
|
|
8
8
|
export { tradingRecipeConfigSchema } from "./trading-recipe-config.js";
|
|
9
9
|
export { resolveEnvInString, resolveEnvInObject } from "./env-resolve.js";
|
|
10
10
|
export { parseInterval } from "./parse-interval.js";
|
|
11
|
-
export { mapStrategiesToConfig } from "./map-strategies.js";
|
|
12
|
-
export { mapStrategiesToScannerRegistration } from "./map-strategies-registration.js";
|
|
11
|
+
export { resolveStrategyConfig, mapStrategiesToConfig } from "./map-strategies.js";
|
|
12
|
+
export { resolveStrategyRegistration, mapStrategiesToScannerRegistration } from "./map-strategies-registration.js";
|
|
13
13
|
export { mapTradingRecipeExitToDslConfig } from "./map-exit-config.js";
|
|
14
14
|
export { ScannerRegistry } from "./scanner-registry.js";
|
|
15
15
|
export { ActionRegistry } from "./action-registry.js";
|
|
@@ -21,6 +21,6 @@ export { createRiskGuard } from "./risk-guard.js";
|
|
|
21
21
|
export { createNotificationService } from "./notifications.js";
|
|
22
22
|
export { createScannerModuleFromTradingRecipe } from "./create-scanner-module.js";
|
|
23
23
|
export { createActionContext } from "./create-action-context.js";
|
|
24
|
-
export { createRuntimeContext,
|
|
24
|
+
export { createRuntimeContext, createStrategyState } from "./create-runtime-context.js";
|
|
25
25
|
export { createActions } from "./create-actions.js";
|
|
26
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAErF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAErF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,2BAA2B,EAAE,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AACnH,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEvI,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,oCAAoC,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAExF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -9,9 +9,9 @@ export interface LoadTradingRecipeOptions {
|
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
11
|
* Minimal valid YAML structure shown in validation errors so users can fix their file.
|
|
12
|
-
* Keep this in sync with tradingRecipeConfigSchema (name +
|
|
12
|
+
* Keep this in sync with tradingRecipeConfigSchema (name + strategy with wallet).
|
|
13
13
|
*/
|
|
14
|
-
export declare const MINIMAL_RECIPE_YAML_SAMPLE = "# Required: name and
|
|
14
|
+
export declare const MINIMAL_RECIPE_YAML_SAMPLE = "# Required: name and a strategy with a wallet\nname: my-recipe\n# version: 1 # optional; defaults to current (1). Supports integer or semver string.\nstrategy:\n wallet: \"your-wallet-address\"\n # optional: budget, slots, enabled, etc.\n\n# Optional: scanners, actions, exit. Run: openclaw senpi guide examples\n";
|
|
15
15
|
/**
|
|
16
16
|
* Load trading recipe from a file path or YAML string.
|
|
17
17
|
* - If fromPath is true, pathOrContent is a file path.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-trading-recipe.d.ts","sourceRoot":"","sources":["../../src/runtime/load-trading-recipe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"load-trading-recipe.d.ts","sourceRoot":"","sources":["../../src/runtime/load-trading-recipe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAKjG,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,iUAQtC,CAAC;AAwFF;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CA4E9B"}
|
|
@@ -10,16 +10,17 @@ import { DslConfigValidationError, parseDslPluginConfig } from "../dsl/config/in
|
|
|
10
10
|
import { tradingRecipeConfigSchema } from "./trading-recipe-schema.js";
|
|
11
11
|
import { resolveEnvInObject } from "./env-resolve.js";
|
|
12
12
|
import { mapTradingRecipeExitToDslConfig } from "./map-exit-config.js";
|
|
13
|
+
import { CURRENT_RECIPE_VERSION, SUPPORTED_RECIPE_VERSIONS, extractMajorVersion } from "./recipe-version.js";
|
|
13
14
|
/**
|
|
14
15
|
* Minimal valid YAML structure shown in validation errors so users can fix their file.
|
|
15
|
-
* Keep this in sync with tradingRecipeConfigSchema (name +
|
|
16
|
+
* Keep this in sync with tradingRecipeConfigSchema (name + strategy with wallet).
|
|
16
17
|
*/
|
|
17
|
-
export const MINIMAL_RECIPE_YAML_SAMPLE = `# Required: name and
|
|
18
|
+
export const MINIMAL_RECIPE_YAML_SAMPLE = `# Required: name and a strategy with a wallet
|
|
18
19
|
name: my-recipe
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
# version: 1 # optional; defaults to current (1). Supports integer or semver string.
|
|
21
|
+
strategy:
|
|
22
|
+
wallet: "your-wallet-address"
|
|
23
|
+
# optional: budget, slots, enabled, etc.
|
|
23
24
|
|
|
24
25
|
# Optional: scanners, actions, exit. Run: openclaw senpi guide examples
|
|
25
26
|
`;
|
|
@@ -30,9 +31,9 @@ const HINTS = [
|
|
|
30
31
|
hint: "Each context entry must match one supported shape. Supported built-in types are signal, context, strategy, and asset-trend. Scanner-derived entries use scanner: '...' and must reference a scanner name from your scanners block; strategy and asset-trend entries use value: '...'.",
|
|
31
32
|
},
|
|
32
33
|
{
|
|
33
|
-
pathMatch: /^
|
|
34
|
+
pathMatch: /^strategy\.wallet$|\.strategy\.wallet$/,
|
|
34
35
|
messageMatch: /Expected string|Required|min/,
|
|
35
|
-
hint: "
|
|
36
|
+
hint: "strategy must have wallet as a string (e.g. wallet: \"0x...\" or wallet: \"your-address\").",
|
|
36
37
|
},
|
|
37
38
|
{
|
|
38
39
|
pathMatch: /\.scanners(\.\d+)?(\.|$)/,
|
|
@@ -98,7 +99,7 @@ function formatZodError(message, issues) {
|
|
|
98
99
|
const msg = clarifyMessage(i);
|
|
99
100
|
return ` • ${pathLabel}: ${msg}`;
|
|
100
101
|
});
|
|
101
|
-
const pathTip = "Tip: Paths use dot notation; a number is the 0-based index (e.g.
|
|
102
|
+
const pathTip = "Tip: Paths use dot notation; a number is the 0-based index (e.g. strategy.wallet = wallet address, actions.0 = first action).";
|
|
102
103
|
return `${message}\n${lines.join("\n")}\n\n${pathTip}\n\nExample of required structure:\n${MINIMAL_RECIPE_YAML_SAMPLE}`;
|
|
103
104
|
}
|
|
104
105
|
/**
|
|
@@ -125,13 +126,24 @@ export async function loadTradingRecipe(pathOrContent, options) {
|
|
|
125
126
|
throw new Error(`Invalid YAML syntax. Please check indentation, colons, and quotes.\nDetails: ${detail}\n\nExample of valid structure:\n${MINIMAL_RECIPE_YAML_SAMPLE}`);
|
|
126
127
|
}
|
|
127
128
|
if (raw === null || raw === undefined || typeof raw !== "object") {
|
|
128
|
-
throw new Error("The YAML file must define an object (e.g. name and
|
|
129
|
+
throw new Error("The YAML file must define an object (e.g. name and strategy at the top level).\n\nExample of required structure:\n" +
|
|
129
130
|
MINIMAL_RECIPE_YAML_SAMPLE);
|
|
130
131
|
}
|
|
131
132
|
const resolved = resolveEnvInObject(raw);
|
|
133
|
+
if ("strategies" in resolved) {
|
|
134
|
+
throw new Error("'strategies' (plural) is no longer supported. Use 'strategy' (singular) with a single wallet.\n" +
|
|
135
|
+
"See: openclaw senpi guide schema\n\n" +
|
|
136
|
+
"Example of required structure:\n" +
|
|
137
|
+
MINIMAL_RECIPE_YAML_SAMPLE);
|
|
138
|
+
}
|
|
132
139
|
const result = tradingRecipeConfigSchema.safeParse(resolved);
|
|
133
140
|
if (result.success) {
|
|
134
141
|
const cfg = result.data;
|
|
142
|
+
const major = extractMajorVersion(cfg.version);
|
|
143
|
+
if (!SUPPORTED_RECIPE_VERSIONS.includes(major)) {
|
|
144
|
+
throw new Error(`Unsupported version: ${cfg.version ?? "(none)"} (major: ${major}). Supported major versions: ${SUPPORTED_RECIPE_VERSIONS.join(", ")}.\n` +
|
|
145
|
+
`Omit version to use the current default (${CURRENT_RECIPE_VERSION}).`);
|
|
146
|
+
}
|
|
135
147
|
const exit = cfg.exit;
|
|
136
148
|
if (exit && typeof exit === "object") {
|
|
137
149
|
const dslPreset = exit.dsl_preset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-trading-recipe.js","sourceRoot":"","sources":["../../src/runtime/load-trading-recipe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAiB,MAAM,KAAK,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,yBAAyB,EAA4B,MAAM,4BAA4B,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"load-trading-recipe.js","sourceRoot":"","sources":["../../src/runtime/load-trading-recipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* One registration per strategy; id = wallet, name = strategy key.
|
|
2
|
+
* Resolve recipe `strategy` to a single StrategyRegistration for the scanner module.
|
|
4
3
|
*/
|
|
5
4
|
import type { StrategyRegistration } from "../scanners/types.js";
|
|
6
5
|
import type { TradingRecipeConfig } from "./trading-recipe-schema.js";
|
|
7
6
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* Resolve config.strategy to a single StrategyRegistration for the scanner runtime module.
|
|
8
|
+
* id is resolved wallet; name is the recipe name (config.name).
|
|
9
|
+
* Throws if wallet is missing.
|
|
10
10
|
*/
|
|
11
|
+
export declare function resolveStrategyRegistration(config: TradingRecipeConfig): StrategyRegistration;
|
|
12
|
+
/** @deprecated Use resolveStrategyRegistration instead. */
|
|
11
13
|
export declare function mapStrategiesToScannerRegistration(config: TradingRecipeConfig): StrategyRegistration[];
|
|
12
14
|
//# sourceMappingURL=map-strategies-registration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-strategies-registration.d.ts","sourceRoot":"","sources":["../../src/runtime/map-strategies-registration.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"map-strategies-registration.d.ts","sourceRoot":"","sources":["../../src/runtime/map-strategies-registration.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAyBtE;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,CAM7F;AAED,2DAA2D;AAC3D,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,EAAE,CAEtG"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* One registration per strategy; id = wallet, name = strategy key.
|
|
2
|
+
* Resolve recipe `strategy` to a single StrategyRegistration for the scanner module.
|
|
4
3
|
*/
|
|
5
4
|
import { parseInterval } from "./parse-interval.js";
|
|
6
5
|
function buildScannerOverrides(config) {
|
|
@@ -26,27 +25,20 @@ function buildScannerOverrides(config) {
|
|
|
26
25
|
return Object.keys(overrides).length > 0 ? overrides : undefined;
|
|
27
26
|
}
|
|
28
27
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
28
|
+
* Resolve config.strategy to a single StrategyRegistration for the scanner runtime module.
|
|
29
|
+
* id is resolved wallet; name is the recipe name (config.name).
|
|
30
|
+
* Throws if wallet is missing.
|
|
31
31
|
*/
|
|
32
|
-
export function
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
if (!
|
|
36
|
-
|
|
32
|
+
export function resolveStrategyRegistration(config) {
|
|
33
|
+
const entry = config.strategy;
|
|
34
|
+
const id = typeof entry.wallet === "string" ? entry.wallet.trim() : "";
|
|
35
|
+
if (!id)
|
|
36
|
+
throw new Error("strategy.wallet is required");
|
|
37
37
|
const scannerOverrides = buildScannerOverrides(config);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
continue;
|
|
44
|
-
registrations.push({
|
|
45
|
-
id,
|
|
46
|
-
name: strategyName,
|
|
47
|
-
scannerOverrides,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
return registrations;
|
|
38
|
+
return { id, name: config.name, scannerOverrides };
|
|
39
|
+
}
|
|
40
|
+
/** @deprecated Use resolveStrategyRegistration instead. */
|
|
41
|
+
export function mapStrategiesToScannerRegistration(config) {
|
|
42
|
+
return [resolveStrategyRegistration(config)];
|
|
51
43
|
}
|
|
52
44
|
//# sourceMappingURL=map-strategies-registration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-strategies-registration.js","sourceRoot":"","sources":["../../src/runtime/map-strategies-registration.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"map-strategies-registration.js","sourceRoot":"","sources":["../../src/runtime/map-strategies-registration.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,SAAS,qBAAqB,CAAC,MAA2B;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACvC,MAAM,SAAS,GAAmE,EAAE,CAAC;IACrF,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAmD,EAAE,CAAC;QACjE,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,KAAK,CAAC,eAAe,GAAG,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5B,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAC3B,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAA2B;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC9B,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC;AACrD,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,kCAAkC,CAAC,MAA2B;IAC5E,OAAO,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Resolve recipe `strategy` to a single StrategyConfig.
|
|
3
3
|
* Address = wallet (env-resolved). Coerces budget and numeric fields from strings.
|
|
4
4
|
*/
|
|
5
5
|
import type { StrategyConfig } from "../types/strategy.js";
|
|
6
6
|
import type { TradingRecipeConfig } from "./trading-recipe-schema.js";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* Resolve config.strategy to a single StrategyConfig.
|
|
9
|
+
* Throws if wallet is missing (schema already enforces this, but guards against runtime misuse).
|
|
10
10
|
*/
|
|
11
|
-
export declare function
|
|
11
|
+
export declare function resolveStrategyConfig(recipeConfig: TradingRecipeConfig): StrategyConfig;
|
|
12
|
+
/** @deprecated Use resolveStrategyConfig instead. */
|
|
13
|
+
export declare function mapStrategiesToConfig(recipeConfig: TradingRecipeConfig): Map<string, StrategyConfig>;
|
|
12
14
|
//# sourceMappingURL=map-strategies.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-strategies.d.ts","sourceRoot":"","sources":["../../src/runtime/map-strategies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAatE;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"map-strategies.d.ts","sourceRoot":"","sources":["../../src/runtime/map-strategies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAatE;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,mBAAmB,GAAG,cAAc,CAsCvF;AAED,qDAAqD;AACrD,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAGpG"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Resolve recipe `strategy` to a single StrategyConfig.
|
|
3
3
|
* Address = wallet (env-resolved). Coerces budget and numeric fields from strings.
|
|
4
4
|
*/
|
|
5
5
|
const VALID_TRADING_RISKS = ['conservative', 'moderate', 'aggressive'];
|
|
@@ -14,53 +14,51 @@ function coerceNumber(v) {
|
|
|
14
14
|
return 0;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* Resolve config.strategy to a single StrategyConfig.
|
|
18
|
+
* Throws if wallet is missing (schema already enforces this, but guards against runtime misuse).
|
|
19
19
|
*/
|
|
20
|
-
export function
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
if (!
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const lm = entry.leverage_multipliers;
|
|
49
|
-
const multipliers = {};
|
|
50
|
-
for (const key of VALID_TRADING_RISKS) {
|
|
51
|
-
if (typeof lm[key] === "number") {
|
|
52
|
-
multipliers[key] = lm[key];
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
if (Object.keys(multipliers).length > 0) {
|
|
56
|
-
config.leverageMultipliers = multipliers;
|
|
20
|
+
export function resolveStrategyConfig(recipeConfig) {
|
|
21
|
+
const entry = recipeConfig.strategy;
|
|
22
|
+
const address = typeof entry.wallet === "string" ? entry.wallet.trim() : "";
|
|
23
|
+
if (!address) {
|
|
24
|
+
throw new Error("strategy.wallet is required");
|
|
25
|
+
}
|
|
26
|
+
const rawRisk = typeof entry.trading_risk === "string" ? entry.trading_risk : "";
|
|
27
|
+
const tradingRisk = VALID_TRADING_RISKS.includes(rawRisk)
|
|
28
|
+
? rawRisk
|
|
29
|
+
: 'moderate';
|
|
30
|
+
const strategyConfig = {
|
|
31
|
+
address,
|
|
32
|
+
budget: coerceNumber(entry.budget),
|
|
33
|
+
slots: coerceNumber(entry.slots) || 1,
|
|
34
|
+
tradingRisk,
|
|
35
|
+
};
|
|
36
|
+
if (typeof entry.margin_per_slot === "number" || (typeof entry.margin_per_slot === "string" && entry.margin_per_slot !== "")) {
|
|
37
|
+
strategyConfig.marginPerSlot = coerceNumber(entry.margin_per_slot);
|
|
38
|
+
}
|
|
39
|
+
if (typeof entry.default_leverage === "number") {
|
|
40
|
+
strategyConfig.defaultLeverage = entry.default_leverage;
|
|
41
|
+
}
|
|
42
|
+
if (entry.leverage_multipliers != null && typeof entry.leverage_multipliers === "object") {
|
|
43
|
+
const lm = entry.leverage_multipliers;
|
|
44
|
+
const multipliers = {};
|
|
45
|
+
for (const key of VALID_TRADING_RISKS) {
|
|
46
|
+
if (typeof lm[key] === "number") {
|
|
47
|
+
multipliers[key] = lm[key];
|
|
57
48
|
}
|
|
58
49
|
}
|
|
59
|
-
if (
|
|
60
|
-
|
|
50
|
+
if (Object.keys(multipliers).length > 0) {
|
|
51
|
+
strategyConfig.leverageMultipliers = multipliers;
|
|
61
52
|
}
|
|
62
|
-
map.set(address, config);
|
|
63
53
|
}
|
|
64
|
-
|
|
54
|
+
if (typeof entry.enabled === "boolean") {
|
|
55
|
+
strategyConfig.enabled = entry.enabled;
|
|
56
|
+
}
|
|
57
|
+
return strategyConfig;
|
|
58
|
+
}
|
|
59
|
+
/** @deprecated Use resolveStrategyConfig instead. */
|
|
60
|
+
export function mapStrategiesToConfig(recipeConfig) {
|
|
61
|
+
const config = resolveStrategyConfig(recipeConfig);
|
|
62
|
+
return new Map([[config.address, config]]);
|
|
65
63
|
}
|
|
66
64
|
//# sourceMappingURL=map-strategies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-strategies.js","sourceRoot":"","sources":["../../src/runtime/map-strategies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,mBAAmB,GAAkB,CAAC,cAAc,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AAEtF,SAAS,YAAY,CAAC,CAAU;IAC9B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"map-strategies.js","sourceRoot":"","sources":["../../src/runtime/map-strategies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML recipe version constants.
|
|
3
|
+
* The `version` field in a trading recipe YAML controls which structural shape is accepted.
|
|
4
|
+
* Increment CURRENT_RECIPE_VERSION when a breaking structural change is introduced
|
|
5
|
+
* and add the new version to SUPPORTED_RECIPE_VERSIONS.
|
|
6
|
+
*/
|
|
7
|
+
export declare const CURRENT_RECIPE_VERSION = 1;
|
|
8
|
+
export declare const SUPPORTED_RECIPE_VERSIONS: readonly number[];
|
|
9
|
+
/**
|
|
10
|
+
* Extract the major (structural) version from the YAML `version` field.
|
|
11
|
+
* Accepts an integer (e.g. `1`), a semver-like string (e.g. `"1.6.0"` → `1`),
|
|
12
|
+
* or undefined/null (defaults to CURRENT_RECIPE_VERSION).
|
|
13
|
+
*/
|
|
14
|
+
export declare function extractMajorVersion(version: string | number | undefined | null): number;
|
|
15
|
+
//# sourceMappingURL=recipe-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe-version.d.ts","sourceRoot":"","sources":["../../src/runtime/recipe-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAAQ,CAAC;AAEhE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAUvF"}
|