@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
|
@@ -0,0 +1,25 @@
|
|
|
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 const CURRENT_RECIPE_VERSION = 1;
|
|
8
|
+
export const SUPPORTED_RECIPE_VERSIONS = [1];
|
|
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 function extractMajorVersion(version) {
|
|
15
|
+
if (version == null)
|
|
16
|
+
return CURRENT_RECIPE_VERSION;
|
|
17
|
+
if (typeof version === "number")
|
|
18
|
+
return version;
|
|
19
|
+
const match = version.match(/^(\d+)/);
|
|
20
|
+
if (!match) {
|
|
21
|
+
throw new Error(`Cannot parse version "${version}". Expected an integer (e.g. 1) or semver string (e.g. "1.0.0").`);
|
|
22
|
+
}
|
|
23
|
+
return parseInt(match[1], 10);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=recipe-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe-version.js","sourceRoot":"","sources":["../../src/runtime/recipe-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,yBAAyB,GAAsB,CAAC,CAAC,CAAC,CAAC;AAEhE;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA2C;IAC7E,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,sBAAsB,CAAC;IACnD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,yBAAyB,OAAO,kEAAkE,CACnG,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -30,7 +30,7 @@ export interface ReconcileOptions {
|
|
|
30
30
|
*
|
|
31
31
|
* Call after hydrate() in Runtime.start() and periodically from the DSL monitor tick.
|
|
32
32
|
*
|
|
33
|
-
* @param
|
|
33
|
+
* @param addresses - strategy addresses to reconcile
|
|
34
34
|
* @param options - optional bus to emit POSITION_CLOSED when archiving (e.g. from monitor)
|
|
35
35
|
*/
|
|
36
36
|
export declare function reconcileStateWithBackend(stateManager: StateManager, senpi: SenpiClient, addressesOrStrategiesMap: string[] | Map<string, StrategyConfig>, options?: ReconcileOptions): Promise<void>;
|
|
@@ -56,7 +56,7 @@ async function resolveMissingPositionCloseReason(senpi, state, strategyState, st
|
|
|
56
56
|
*
|
|
57
57
|
* Call after hydrate() in Runtime.start() and periodically from the DSL monitor tick.
|
|
58
58
|
*
|
|
59
|
-
* @param
|
|
59
|
+
* @param addresses - strategy addresses to reconcile
|
|
60
60
|
* @param options - optional bus to emit POSITION_CLOSED when archiving (e.g. from monitor)
|
|
61
61
|
*/
|
|
62
62
|
export async function reconcileStateWithBackend(stateManager, senpi, addressesOrStrategiesMap, options) {
|
package/dist/runtime/run.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ export interface RunOptions {
|
|
|
15
15
|
export interface RuntimeHandle {
|
|
16
16
|
stop(): Promise<void>;
|
|
17
17
|
dsl: DslPlugin | null;
|
|
18
|
+
/** Wallet address from the recipe's strategy block. */
|
|
19
|
+
wallet: string;
|
|
18
20
|
getHealthStatus(): Promise<RuntimeHealthStatus | null>;
|
|
19
21
|
getSystemState(): Promise<RuntimeSystemState | null>;
|
|
20
22
|
/** Cancel exchange SLs and archive DSL state for all strategies before deleting a recipe. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKxD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IACtB,eAAe,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IACvD,cAAc,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACrD,6FAA6F;IAC7F,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,wBAAsB,GAAG,CACvB,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKxD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IACtB,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IAEf,eAAe,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IACvD,cAAc,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACrD,6FAA6F;IAC7F,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,wBAAsB,GAAG,CACvB,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,aAAa,CAAC,CAmCxB"}
|
package/dist/runtime/run.js
CHANGED
package/dist/runtime/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAsBvC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,mBAA2B,EAC3B,OAAoB;IAEpB,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1E,MAAM,QAAQ,GACZ,CAAC,OAAO,OAAO,EAAE,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpE,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAC/B,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE;QAClC,QAAQ;QACR,YAAY;QACZ,MAAM;QACN,gBAAgB,EAAE,OAAO,EAAE,gBAAgB;KAC5C,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;QACrC,KAAK,CAAC,eAAe;YACnB,OAAO,OAAO,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC;QACD,KAAK,CAAC,cAAc;YAClB,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC;QAClC,CAAC;QACD,4BAA4B;YAC1B,OAAO,OAAO,CAAC,4BAA4B,EAAE,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -30,8 +30,7 @@ export declare class Runtime {
|
|
|
30
30
|
private signalConsumerStopped;
|
|
31
31
|
private signalConsumerDone;
|
|
32
32
|
private runActionsForSignal;
|
|
33
|
-
private
|
|
34
|
-
private strategyStates;
|
|
33
|
+
private strategyConfig;
|
|
35
34
|
/** Stored so we can call off() in stop() and avoid retaining Runtime via scanner EventEmitter. */
|
|
36
35
|
private onScannerRunComplete;
|
|
37
36
|
constructor(config: TradingRecipeConfig, options: RuntimeOptions);
|
|
@@ -40,10 +39,10 @@ export declare class Runtime {
|
|
|
40
39
|
getSystemState(): Promise<RuntimeSystemState | null>;
|
|
41
40
|
start(): Promise<void>;
|
|
42
41
|
/**
|
|
43
|
-
* Cancel exchange SLs and archive DSL state for
|
|
42
|
+
* Cancel exchange SLs and archive DSL state for the strategy, then log removal.
|
|
44
43
|
*/
|
|
45
44
|
removeStrategy(address: string): Promise<void>;
|
|
46
|
-
/** Tear down DSL for
|
|
45
|
+
/** Tear down DSL for the recipe strategy before deleting the recipe (gateway / CLI). */
|
|
47
46
|
teardownDslForRecipeDeletion(): Promise<void>;
|
|
48
47
|
/**
|
|
49
48
|
* Single consumer: process one scanner:run:complete at a time so slot counts stay correct.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAItE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAyBjF,OAAO,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAItE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAyBjF,OAAO,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAOrE,OAAO,KAAK,EAEV,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAI5B,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAOD,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,GAAG,CAAiB;IAC5B,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAuB;IAExC,4FAA4F;IAC5F,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,kBAAkB,CAA8B;IACxD,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,cAAc,CAAkB;IAExC,kGAAkG;IAClG,OAAO,CAAC,oBAAoB,CAA0D;gBAE1E,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,cAAc;IAKhE,IAAI,GAAG,IAAI,cAAc,GAAG,IAAI,CAE/B;IAEK,eAAe,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAItD,cAAc,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6J5B;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpD,wFAAwF;IAClF,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;YACW,iBAAiB;IA2CzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA+B5B"}
|
package/dist/runtime/runtime.js
CHANGED
|
@@ -9,11 +9,11 @@ import { StateManager } from "../state/index.js";
|
|
|
9
9
|
import { createContextBuilder } from "../context/index.js";
|
|
10
10
|
import { createRiskGuard } from "./risk-guard.js";
|
|
11
11
|
import { createNotificationService } from "./notifications.js";
|
|
12
|
-
import {
|
|
12
|
+
import { resolveStrategyConfig } from "./map-strategies.js";
|
|
13
13
|
import { mapTradingRecipeExitToDslConfig } from "./map-exit-config.js";
|
|
14
14
|
import { buildActionScanPayload } from "./build-action-scan-payload.js";
|
|
15
15
|
import { createScannerModuleFromTradingRecipe } from "./create-scanner-module.js";
|
|
16
|
-
import { createRuntimeContext } from "./create-runtime-context.js";
|
|
16
|
+
import { createRuntimeContext, createStrategyStatesMap } from "./create-runtime-context.js";
|
|
17
17
|
import { createActions } from "./create-actions.js";
|
|
18
18
|
import { validateDslPositionTracking } from "./validate-dsl-position-tracking.js";
|
|
19
19
|
import { ScannerRegistry } from "./scanner-registry.js";
|
|
@@ -23,6 +23,7 @@ import { createHealthStateModule, } from "../health/index.js";
|
|
|
23
23
|
import { DslPlugin as DslPluginClass } from "../dsl/plugin/index.js";
|
|
24
24
|
import { HOOK_EVENT } from "../types/hooks.js";
|
|
25
25
|
import { MaxLeverageCache } from "../leverage/max-leverage-cache.js";
|
|
26
|
+
import { buildStateLayout } from "./state-layout.js";
|
|
26
27
|
import { createLogger } from "../utils/logger.js";
|
|
27
28
|
const logger = createLogger("[senpi-core][runtime]");
|
|
28
29
|
export class Runtime {
|
|
@@ -43,8 +44,7 @@ export class Runtime {
|
|
|
43
44
|
signalConsumerStopped = false;
|
|
44
45
|
signalConsumerDone = null;
|
|
45
46
|
runActionsForSignal;
|
|
46
|
-
|
|
47
|
-
strategyStates;
|
|
47
|
+
strategyConfig;
|
|
48
48
|
/** Stored so we can call off() in stop() and avoid retaining Runtime via scanner EventEmitter. */
|
|
49
49
|
onScannerRunComplete = null;
|
|
50
50
|
constructor(config, options) {
|
|
@@ -96,10 +96,10 @@ export class Runtime {
|
|
|
96
96
|
await senpi.connect();
|
|
97
97
|
}
|
|
98
98
|
this.senpi = senpi;
|
|
99
|
-
this.
|
|
99
|
+
this.strategyConfig = resolveStrategyConfig(this.config);
|
|
100
100
|
try {
|
|
101
101
|
const { reconcileStateWithBackend } = await import("./reconcile-state.js");
|
|
102
|
-
await reconcileStateWithBackend(this.stateManager, senpi, this.
|
|
102
|
+
await reconcileStateWithBackend(this.stateManager, senpi, [this.strategyConfig.address]);
|
|
103
103
|
}
|
|
104
104
|
catch (err) {
|
|
105
105
|
logger.warn("reconcile after hydrate failed, continuing", { err });
|
|
@@ -112,13 +112,14 @@ export class Runtime {
|
|
|
112
112
|
mcpTransport: this.options.mcpTransport,
|
|
113
113
|
});
|
|
114
114
|
logger.info("Runtime.start() creating scanner module");
|
|
115
|
+
const layout = buildStateLayout(stateDir);
|
|
115
116
|
// Augment caller-supplied providers with StateManager-backed DSL state access
|
|
116
117
|
const augmentedProviders = {
|
|
117
118
|
...scannerProviders,
|
|
118
119
|
getDslStatesForStrategy: scannerProviders?.getDslStatesForStrategy
|
|
119
120
|
?? (async (address) => this.stateManager.listDslStates(address)),
|
|
120
121
|
};
|
|
121
|
-
this.scannerModule = createScannerModuleFromTradingRecipe(this.config,
|
|
122
|
+
this.scannerModule = createScannerModuleFromTradingRecipe(this.config, layout.scannerRoot, augmentedProviders);
|
|
122
123
|
logger.info("Runtime.start() scanner module created, calling start()");
|
|
123
124
|
// Pre-load max leverage cache (non-blocking — log warning on failure)
|
|
124
125
|
const maxLeverageCache = new MaxLeverageCache(senpi);
|
|
@@ -129,18 +130,16 @@ export class Runtime {
|
|
|
129
130
|
logger.warn("failed to pre-load max leverage cache, will retry on first use", { err });
|
|
130
131
|
}
|
|
131
132
|
// Build RuntimeContext once per trading recipe and reuse for all actions.
|
|
132
|
-
const runtimeContext = createRuntimeContext(this.
|
|
133
|
+
const runtimeContext = createRuntimeContext(this.strategyConfig, {
|
|
133
134
|
senpi,
|
|
134
135
|
hookSystem: this.hookSystem,
|
|
135
136
|
llmDecision,
|
|
136
137
|
contextBuilder,
|
|
137
138
|
riskGuard,
|
|
138
139
|
notifications,
|
|
139
|
-
stateManager: this.stateManager,
|
|
140
140
|
scannerModule: this.scannerModule,
|
|
141
141
|
maxLeverageCache,
|
|
142
142
|
});
|
|
143
|
-
this.strategyStates = runtimeContext.strategyStates;
|
|
144
143
|
const { runActionsForSignal } = createActions(this.config, {
|
|
145
144
|
bus: this.bus,
|
|
146
145
|
senpi,
|
|
@@ -163,7 +162,7 @@ export class Runtime {
|
|
|
163
162
|
stateDir,
|
|
164
163
|
stateManager: this.stateManager,
|
|
165
164
|
senpiClient: senpi,
|
|
166
|
-
strategyStates:
|
|
165
|
+
strategyStates: createStrategyStatesMap(this.strategyConfig, senpi),
|
|
167
166
|
notifications: dslNotificationsDisabled ? undefined : notifications,
|
|
168
167
|
notifySlUpdates: dslNotifySlUpdates,
|
|
169
168
|
strategyName: this.config.name,
|
|
@@ -183,13 +182,6 @@ export class Runtime {
|
|
|
183
182
|
},
|
|
184
183
|
});
|
|
185
184
|
this.onScannerRunComplete = (event) => {
|
|
186
|
-
logger.info("scanner:run:complete received, enqueuing", {
|
|
187
|
-
address: event.result.address,
|
|
188
|
-
scannerId: event.result.scannerId,
|
|
189
|
-
status: event.result.status,
|
|
190
|
-
signalCount: event.result.signals.length,
|
|
191
|
-
queueDepth: this.signalQueue.length + 1,
|
|
192
|
-
});
|
|
193
185
|
this.signalQueue.push({ result: event.result });
|
|
194
186
|
if (this.signalQueueWait) {
|
|
195
187
|
const w = this.signalQueueWait;
|
|
@@ -212,22 +204,17 @@ export class Runtime {
|
|
|
212
204
|
this.started = true;
|
|
213
205
|
}
|
|
214
206
|
/**
|
|
215
|
-
* Cancel exchange SLs and archive DSL state for
|
|
207
|
+
* Cancel exchange SLs and archive DSL state for the strategy, then log removal.
|
|
216
208
|
*/
|
|
217
209
|
async removeStrategy(address) {
|
|
218
210
|
if (this.dslPlugin) {
|
|
219
211
|
await this.dslPlugin.deleteDslsForStrategy(address);
|
|
220
212
|
}
|
|
221
|
-
this.strategiesMap.delete(address);
|
|
222
|
-
this.strategyStates.delete(address);
|
|
223
213
|
logger.info("[runtime] strategy removed", { address });
|
|
224
214
|
}
|
|
225
|
-
/** Tear down DSL for
|
|
215
|
+
/** Tear down DSL for the recipe strategy before deleting the recipe (gateway / CLI). */
|
|
226
216
|
async teardownDslForRecipeDeletion() {
|
|
227
|
-
|
|
228
|
-
for (const address of addresses) {
|
|
229
|
-
await this.removeStrategy(address);
|
|
230
|
-
}
|
|
217
|
+
await this.removeStrategy(this.strategyConfig.address);
|
|
231
218
|
}
|
|
232
219
|
/**
|
|
233
220
|
* Single consumer: process one scanner:run:complete at a time so slot counts stay correct.
|
|
@@ -246,13 +233,8 @@ export class Runtime {
|
|
|
246
233
|
if (!item)
|
|
247
234
|
continue;
|
|
248
235
|
try {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
scannerId: item.result.scannerId,
|
|
252
|
-
signalCount: item.result.signals.length,
|
|
253
|
-
});
|
|
254
|
-
const usedSlotsByStrategy = await this.stateManager.getUsedSlotsByStrategy(Array.from(this.strategiesMap.keys()));
|
|
255
|
-
const payload = buildActionScanPayload(item.result, this.strategiesMap, {
|
|
236
|
+
const usedSlotsByStrategy = await this.stateManager.getUsedSlotsByStrategy([this.strategyConfig.address]);
|
|
237
|
+
const payload = buildActionScanPayload(item.result, this.strategyConfig, {
|
|
256
238
|
usedSlotsByStrategy,
|
|
257
239
|
address: item.result.address,
|
|
258
240
|
});
|
|
@@ -263,17 +245,13 @@ export class Runtime {
|
|
|
263
245
|
data: payload,
|
|
264
246
|
timestamp: new Date().toISOString(),
|
|
265
247
|
};
|
|
266
|
-
logger.info("emitting ON_SIGNAL_DETECTED, dispatching to actions", {
|
|
267
|
-
address: item.result.address,
|
|
268
|
-
scannerId: item.result.scannerId,
|
|
269
|
-
});
|
|
270
248
|
this.bus.emit(HOOK_EVENT.ON_SIGNAL_DETECTED, hookEvent);
|
|
271
249
|
await this.runActionsForSignal(hookEvent);
|
|
272
250
|
}
|
|
273
251
|
catch (err) {
|
|
274
252
|
const message = err instanceof Error ? err.message : String(err);
|
|
275
253
|
const stack = err instanceof Error ? err.stack : undefined;
|
|
276
|
-
|
|
254
|
+
console.error("[senpi-recipe] signal processing error", message, stack ?? "");
|
|
277
255
|
this.bus.emit("signal_processing_error", {
|
|
278
256
|
error: err,
|
|
279
257
|
address: item.result.address,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical state-directory layout helpers and archive operations.
|
|
3
|
+
*
|
|
4
|
+
* The runtime uses these to build deterministic per-recipe state paths
|
|
5
|
+
* and to archive state directories when recipes are deleted.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Describes the explicit paths the runtime provides to each component.
|
|
9
|
+
* Components must store their state only within the path they receive.
|
|
10
|
+
*/
|
|
11
|
+
export interface StateLayout {
|
|
12
|
+
/** Recipe state root (e.g. `<baseStateDir>/<recipeId>-<wallet>`). */
|
|
13
|
+
root: string;
|
|
14
|
+
/** Root passed to scanner stores (same as `root` today; scanners add `strategies/<wallet>/...` internally). */
|
|
15
|
+
scannerRoot: string;
|
|
16
|
+
/** Root passed to StateManager / DslPlugin (same as `root`; they add `<wallet>/dsl-*` internally). */
|
|
17
|
+
dslRoot: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build the per-recipe state directory path.
|
|
21
|
+
* Convention: `<baseStateDir>/<recipeId>-<wallet>`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildRecipeStateDir(baseStateDir: string, recipeId: string, wallet: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Build a `StateLayout` from a recipe's state directory.
|
|
26
|
+
* Currently all roots resolve to the same directory; kept explicit so
|
|
27
|
+
* a future version can split them without changing call-sites.
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildStateLayout(recipeStateDir: string): StateLayout;
|
|
30
|
+
export interface ArchiveEntry {
|
|
31
|
+
path: string;
|
|
32
|
+
recipeId: string;
|
|
33
|
+
wallet: string;
|
|
34
|
+
timestamp: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Archive a recipe's state directory by moving it into the archives folder.
|
|
38
|
+
* Target: `<archiveBaseDir>/<recipeId>-<wallet>-<timestamp>/`.
|
|
39
|
+
* Falls back to recursive copy + remove when `rename` fails (cross-device).
|
|
40
|
+
* Returns the archive destination path.
|
|
41
|
+
*/
|
|
42
|
+
export declare function archiveStateDir(recipeStateDir: string, archiveBaseDir: string, recipeId: string, wallet: string): Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* List archived recipe state directories, sorted newest-first.
|
|
45
|
+
* Parses directory names matching `<recipeId>-<wallet>-<timestamp>`.
|
|
46
|
+
*/
|
|
47
|
+
export declare function listArchives(archiveBaseDir: string): Promise<ArchiveEntry[]>;
|
|
48
|
+
//# sourceMappingURL=state-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-layout.d.ts","sourceRoot":"","sources":["../../src/runtime/state-layout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,+GAA+G;IAC/G,WAAW,EAAE,MAAM,CAAC;IACpB,sGAAsG;IACtG,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAElG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,CAMpE;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAajB;AAID;;;GAGG;AACH,wBAAsB,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAgClF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical state-directory layout helpers and archive operations.
|
|
3
|
+
*
|
|
4
|
+
* The runtime uses these to build deterministic per-recipe state paths
|
|
5
|
+
* and to archive state directories when recipes are deleted.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { mkdir, rename, readdir, cp, rm, stat } from "node:fs/promises";
|
|
9
|
+
/**
|
|
10
|
+
* Build the per-recipe state directory path.
|
|
11
|
+
* Convention: `<baseStateDir>/<recipeId>-<wallet>`.
|
|
12
|
+
*/
|
|
13
|
+
export function buildRecipeStateDir(baseStateDir, recipeId, wallet) {
|
|
14
|
+
return join(baseStateDir, `${recipeId}-${wallet}`);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build a `StateLayout` from a recipe's state directory.
|
|
18
|
+
* Currently all roots resolve to the same directory; kept explicit so
|
|
19
|
+
* a future version can split them without changing call-sites.
|
|
20
|
+
*/
|
|
21
|
+
export function buildStateLayout(recipeStateDir) {
|
|
22
|
+
return {
|
|
23
|
+
root: recipeStateDir,
|
|
24
|
+
scannerRoot: recipeStateDir,
|
|
25
|
+
dslRoot: recipeStateDir,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Archive a recipe's state directory by moving it into the archives folder.
|
|
30
|
+
* Target: `<archiveBaseDir>/<recipeId>-<wallet>-<timestamp>/`.
|
|
31
|
+
* Falls back to recursive copy + remove when `rename` fails (cross-device).
|
|
32
|
+
* Returns the archive destination path.
|
|
33
|
+
*/
|
|
34
|
+
export async function archiveStateDir(recipeStateDir, archiveBaseDir, recipeId, wallet) {
|
|
35
|
+
await mkdir(archiveBaseDir, { recursive: true });
|
|
36
|
+
const ts = Date.now();
|
|
37
|
+
const archiveName = `${recipeId}-${wallet}-${ts}`;
|
|
38
|
+
const dest = join(archiveBaseDir, archiveName);
|
|
39
|
+
try {
|
|
40
|
+
await rename(recipeStateDir, dest);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
await cp(recipeStateDir, dest, { recursive: true });
|
|
44
|
+
await rm(recipeStateDir, { recursive: true, force: true });
|
|
45
|
+
}
|
|
46
|
+
return dest;
|
|
47
|
+
}
|
|
48
|
+
const ARCHIVE_DIR_PATTERN = /^(.+)-([^-]+-[^-]+)$/;
|
|
49
|
+
/**
|
|
50
|
+
* List archived recipe state directories, sorted newest-first.
|
|
51
|
+
* Parses directory names matching `<recipeId>-<wallet>-<timestamp>`.
|
|
52
|
+
*/
|
|
53
|
+
export async function listArchives(archiveBaseDir) {
|
|
54
|
+
let entries;
|
|
55
|
+
try {
|
|
56
|
+
entries = await readdir(archiveBaseDir);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return [];
|
|
60
|
+
}
|
|
61
|
+
const results = [];
|
|
62
|
+
for (const name of entries) {
|
|
63
|
+
const fullPath = join(archiveBaseDir, name);
|
|
64
|
+
let info;
|
|
65
|
+
try {
|
|
66
|
+
info = await stat(fullPath);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (!info.isDirectory())
|
|
72
|
+
continue;
|
|
73
|
+
const m = ARCHIVE_DIR_PATTERN.exec(name);
|
|
74
|
+
if (!m)
|
|
75
|
+
continue;
|
|
76
|
+
const [, recipeId, walletAndTs] = m;
|
|
77
|
+
const tsDash = walletAndTs.lastIndexOf("-");
|
|
78
|
+
const wallet = walletAndTs.slice(0, tsDash);
|
|
79
|
+
const ts = Number(walletAndTs.slice(tsDash + 1));
|
|
80
|
+
if (!Number.isFinite(ts) || ts <= 0)
|
|
81
|
+
continue;
|
|
82
|
+
results.push({ path: fullPath, recipeId, wallet, timestamp: ts });
|
|
83
|
+
}
|
|
84
|
+
results.sort((a, b) => b.timestamp - a.timestamp);
|
|
85
|
+
return results;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=state-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-layout.js","sourceRoot":"","sources":["../../src/runtime/state-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,10 @@ export interface InstalledRecipeEntry {
|
|
|
8
8
|
id: string;
|
|
9
9
|
tradingRecipeYamlPath?: string;
|
|
10
10
|
tradingRecipeYamlContent?: string;
|
|
11
|
+
/** Major version extracted from YAML version field at install time. */
|
|
12
|
+
schemaVersion?: number;
|
|
13
|
+
/** Wallet address from strategy.wallet, stored at install time. */
|
|
14
|
+
wallet?: string;
|
|
11
15
|
}
|
|
12
16
|
export interface InstalledRecipesRegistry {
|
|
13
17
|
version: number;
|
|
@@ -21,8 +25,17 @@ export type InstalledStrategiesRegistry = InstalledRecipesRegistry;
|
|
|
21
25
|
* Sanitize a string for use as registry id: replace non-alphanumeric with underscore, truncate.
|
|
22
26
|
*/
|
|
23
27
|
export declare function sanitizeId(candidate: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Derive a human-readable, globally-unique recipe id from the YAML name and wallet.
|
|
30
|
+
* Format: `<slugified-name>-<4-char hash>` (e.g. "fox-strategy-a7k2").
|
|
31
|
+
* The hash is derived from name + wallet + timestamp + monotonic counter,
|
|
32
|
+
* so re-creating a recipe with the same name always produces a distinct id
|
|
33
|
+
* (no archive collisions).
|
|
34
|
+
*/
|
|
35
|
+
export declare function deriveRecipeId(name: string, wallet: string): string;
|
|
24
36
|
/**
|
|
25
37
|
* Derive default id from file path (basename without extension).
|
|
38
|
+
* @deprecated Prefer deriveRecipeId(name, wallet) which uses the YAML name field.
|
|
26
39
|
*/
|
|
27
40
|
export declare function deriveIdFromPath(filePath: string, existingIds: string[]): string;
|
|
28
41
|
/**
|
|
@@ -52,4 +65,8 @@ export declare function validateEntry(entry: InstalledRecipeEntry): {
|
|
|
52
65
|
* Check if an id is already present in the registry.
|
|
53
66
|
*/
|
|
54
67
|
export declare function hasId(registry: InstalledRecipesRegistry, id: string): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Find a registry entry by wallet address.
|
|
70
|
+
*/
|
|
71
|
+
export declare function findByWallet(registry: InstalledRecipesRegistry, wallet: string): InstalledRecipeEntry | undefined;
|
|
55
72
|
//# sourceMappingURL=strategy-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategy-registry.d.ts","sourceRoot":"","sources":["../../src/runtime/strategy-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"strategy-registry.d.ts","sourceRoot":"","sources":["../../src/runtime/strategy-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAG1D,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,2CAA2C;AAC3C,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAE1D,+CAA+C;AAC/C,MAAM,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AAoCnE;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKpD;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAYnE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAYhF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAShE;AA2BD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAiDtF;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAiBtG;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,wBAAwB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEjH"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Source of truth for what the plugin should run; read on boot, updated by CLI/RPC install/uninstall.
|
|
4
4
|
* Migrates from installed_strategies.json on first read if present.
|
|
5
5
|
*/
|
|
6
|
+
import { createHash } from "node:crypto";
|
|
6
7
|
import { readFile, writeFile, rename, mkdir } from "node:fs/promises";
|
|
7
8
|
import { join } from "node:path";
|
|
8
9
|
import { createLogger } from "../utils/logger.js";
|
|
@@ -58,8 +59,30 @@ export function sanitizeId(candidate) {
|
|
|
58
59
|
out = out.slice(0, ID_MAX_LENGTH);
|
|
59
60
|
return out || "recipe";
|
|
60
61
|
}
|
|
62
|
+
let _idSeq = 0;
|
|
63
|
+
/**
|
|
64
|
+
* Derive a human-readable, globally-unique recipe id from the YAML name and wallet.
|
|
65
|
+
* Format: `<slugified-name>-<4-char hash>` (e.g. "fox-strategy-a7k2").
|
|
66
|
+
* The hash is derived from name + wallet + timestamp + monotonic counter,
|
|
67
|
+
* so re-creating a recipe with the same name always produces a distinct id
|
|
68
|
+
* (no archive collisions).
|
|
69
|
+
*/
|
|
70
|
+
export function deriveRecipeId(name, wallet) {
|
|
71
|
+
const slug = name
|
|
72
|
+
.toLowerCase()
|
|
73
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
74
|
+
.replace(/(^-|-$)/g, "");
|
|
75
|
+
const hash = createHash("sha256")
|
|
76
|
+
.update(`${name}:${wallet}:${Date.now()}:${++_idSeq}`)
|
|
77
|
+
.digest("hex")
|
|
78
|
+
.slice(0, 4);
|
|
79
|
+
const base = slug || "recipe";
|
|
80
|
+
const id = `${base}-${hash}`;
|
|
81
|
+
return id.length > ID_MAX_LENGTH ? id.slice(0, ID_MAX_LENGTH) : id;
|
|
82
|
+
}
|
|
61
83
|
/**
|
|
62
84
|
* Derive default id from file path (basename without extension).
|
|
85
|
+
* @deprecated Prefer deriveRecipeId(name, wallet) which uses the YAML name field.
|
|
63
86
|
*/
|
|
64
87
|
export function deriveIdFromPath(filePath, existingIds) {
|
|
65
88
|
const base = filePath.split(/[/\\]/).pop() ?? "";
|
|
@@ -101,6 +124,8 @@ function parseRecipesFromRaw(obj) {
|
|
|
101
124
|
id: rawEntry.id,
|
|
102
125
|
tradingRecipeYamlPath: typeof rawEntry.tradingRecipeYamlPath === "string" ? rawEntry.tradingRecipeYamlPath : undefined,
|
|
103
126
|
tradingRecipeYamlContent: typeof rawEntry.tradingRecipeYamlContent === "string" ? rawEntry.tradingRecipeYamlContent : undefined,
|
|
127
|
+
schemaVersion: typeof rawEntry.schemaVersion === "number" ? rawEntry.schemaVersion : undefined,
|
|
128
|
+
wallet: typeof rawEntry.wallet === "string" ? rawEntry.wallet : undefined,
|
|
104
129
|
};
|
|
105
130
|
if (!isIdSafe(entry.id)) {
|
|
106
131
|
logger.warn("recipe registry skip unsafe id", { id: entry.id });
|
|
@@ -150,6 +175,7 @@ export async function readRegistry(stateDir) {
|
|
|
150
175
|
id: item.id,
|
|
151
176
|
tradingRecipeYamlPath: typeof item.tradingStrategyYamlPath === "string" ? item.tradingStrategyYamlPath : undefined,
|
|
152
177
|
tradingRecipeYamlContent: typeof item.tradingStrategyYamlContent === "string" ? item.tradingStrategyYamlContent : undefined,
|
|
178
|
+
schemaVersion: 1,
|
|
153
179
|
});
|
|
154
180
|
}
|
|
155
181
|
await writeRegistry(stateDir, { version: CURRENT_VERSION, recipes: valid });
|
|
@@ -207,4 +233,10 @@ export function validateEntry(entry) {
|
|
|
207
233
|
export function hasId(registry, id) {
|
|
208
234
|
return registry.recipes.some((e) => e.id === id);
|
|
209
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* Find a registry entry by wallet address.
|
|
238
|
+
*/
|
|
239
|
+
export function findByWallet(registry, wallet) {
|
|
240
|
+
return registry.recipes.find((e) => e.wallet === wallet);
|
|
241
|
+
}
|
|
210
242
|
//# sourceMappingURL=strategy-registry.js.map
|