@senpi/trading-recipe 1.0.27 → 1.0.28
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/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +28 -22
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/constants/dsl/index.d.ts +2 -2
- package/dist/constants/dsl/index.d.ts.map +1 -1
- package/dist/constants/dsl/index.js +2 -2
- package/dist/constants/dsl/index.js.map +1 -1
- package/dist/dsl/config/index.d.ts +5 -4
- package/dist/dsl/config/index.d.ts.map +1 -1
- package/dist/dsl/config/index.js +157 -81
- package/dist/dsl/config/index.js.map +1 -1
- 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/engine/index.d.ts.map +1 -1
- package/dist/dsl/engine/index.js +30 -39
- package/dist/dsl/engine/index.js.map +1 -1
- package/dist/dsl/events/handlers.d.ts.map +1 -1
- package/dist/dsl/events/handlers.js +29 -14
- package/dist/dsl/events/handlers.js.map +1 -1
- package/dist/dsl/index.d.ts +2 -2
- package/dist/dsl/index.d.ts.map +1 -1
- package/dist/dsl/index.js +1 -1
- package/dist/dsl/index.js.map +1 -1
- package/dist/dsl/monitor/index.d.ts.map +1 -1
- package/dist/dsl/monitor/index.js +21 -12
- package/dist/dsl/monitor/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/load-trading-recipe.js +1 -1
- package/dist/runtime/map-exit-config.d.ts.map +1 -1
- package/dist/runtime/map-exit-config.js +14 -10
- package/dist/runtime/map-exit-config.js.map +1 -1
- package/dist/runtime/trading-recipe-schema.d.ts +4320 -3456
- package/dist/runtime/trading-recipe-schema.d.ts.map +1 -1
- package/dist/runtime/trading-recipe-schema.js +10 -3
- package/dist/runtime/trading-recipe-schema.js.map +1 -1
- package/dist/scripts/run-dsl-standalone-live.js +12 -2
- package/dist/scripts/run-dsl-standalone-live.js.map +1 -1
- package/dist/scripts/run-dsl-standalone-mock.js +12 -2
- package/dist/scripts/run-dsl-standalone-mock.js.map +1 -1
- package/dist/types/dsl/index.d.ts +19 -21
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/examples/strategies/dsl-showcase.yaml +2 -2
- package/examples/strategies/fox-minimal-loosened.yaml +9 -6
- package/examples/strategies/fox-minimal.yaml +1 -1
- package/examples/strategies/minimal.yaml +1 -1
- package/examples/strategies/viper.yaml +5 -5
- package/examples/strategies/wolf.yaml +1 -1
- package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +7 -7
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsTH,kFAAkF;AAClF,UAAU,gBAAgB;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC9D,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;CACxF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,MAAM,GACd,IAAI,CA2CN"}
|
|
@@ -141,9 +141,9 @@ DSL exit engine — two-phase trailing stop-loss
|
|
|
141
141
|
─────────────────────────────────────────────────────────────────────────────
|
|
142
142
|
|
|
143
143
|
The DSL monitors open positions on a configurable interval and closes them
|
|
144
|
-
when price breaches the computed floor.
|
|
145
|
-
|
|
146
|
-
|
|
144
|
+
when price breaches the computed floor. Tier floors use lock_hw_pct (% of
|
|
145
|
+
current high-water ROE); the floor trails every tick in phase 2. Phase 1
|
|
146
|
+
adds max_loss + phase1 retrace from high-water; optional time-based cuts.
|
|
147
147
|
|
|
148
148
|
exit:
|
|
149
149
|
engine: dsl
|
|
@@ -151,21 +151,22 @@ exit:
|
|
|
151
151
|
|
|
152
152
|
dsl_presets:
|
|
153
153
|
<preset_name>:
|
|
154
|
-
lock_mode: pctOfHighWater # or fixed_roe; YAML accepts snake_case
|
|
155
154
|
phase1: ...
|
|
156
155
|
phase2_trigger_tier: 0
|
|
157
156
|
phase2: ...
|
|
158
157
|
|
|
159
158
|
──────────────────────────────────────────────────────────────────────────────
|
|
160
|
-
Phase 1 — Fixed floor +
|
|
159
|
+
Phase 1 — Fixed floor + high-water trailing (separate from phase 2)
|
|
161
160
|
Active from entry until the tier at phase2_trigger_tier is crossed.
|
|
162
161
|
Floor = max(absolute_floor, trailing_floor). Absolute floor from max_loss_pct
|
|
163
162
|
(entry × (1 − max_loss_pct/100/leverage) for LONG). Trailing uses phase1
|
|
164
|
-
|
|
163
|
+
retrace_threshold (ROE %) from high-water — set explicitly; not inferred from tiers.
|
|
165
164
|
|
|
166
165
|
phase1:
|
|
166
|
+
# enabled: false # optional; default true — false = skip Phase 1 floor/cuts; start in phase 2 (HW retrace only until tiers)
|
|
167
167
|
max_loss_pct: 3.0 # e.g. 3% max loss at 1×
|
|
168
|
-
|
|
168
|
+
retrace_threshold: 10 # ROE % retrace from HWM in phase 1 (required when enabled)
|
|
169
|
+
consecutive_breaches_required: 3 # ticks below floor before exit (required when enabled)
|
|
169
170
|
# Optional time-based cuts (each: enabled, interval_in_minutes):
|
|
170
171
|
# hard_timeout, weak_peak_cut (min_value ROE %), dead_weight_cut
|
|
171
172
|
|
|
@@ -178,18 +179,19 @@ Phase 2 — Tiers + trailing floor (high-water retrace)
|
|
|
178
179
|
phase2_trigger_tier: 0
|
|
179
180
|
|
|
180
181
|
phase2:
|
|
181
|
-
|
|
182
|
-
|
|
182
|
+
# enabled: false # optional; default true — false = never switch to phase 2; tiers still apply in phase 1
|
|
183
|
+
retrace_threshold: 1.5 # default ROE % retrace from HWM (required when phase 2 used)
|
|
184
|
+
consecutive_breaches_required: 1 # required (per-tier breaches still required on each tier)
|
|
183
185
|
|
|
184
186
|
tiers:
|
|
185
187
|
# trigger_pct = ROE % from entry that activates this tier
|
|
186
|
-
# lock_hw_pct = % of high-water ROE to lock (
|
|
187
|
-
#
|
|
188
|
+
# lock_hw_pct = required; % of current high-water ROE to lock (0–100); floor trails every tick in phase 2
|
|
189
|
+
# breaches = required on every tier (consecutive breach ticks before exit)
|
|
188
190
|
# retrace = ROE % retrace for this tier (overrides retrace_threshold)
|
|
189
|
-
- { trigger_pct: 10, lock_hw_pct: 50 }
|
|
190
|
-
- { trigger_pct: 20, lock_hw_pct: 70 }
|
|
191
|
-
- { trigger_pct: 30, lock_hw_pct: 73, retrace: 1.2 }
|
|
192
|
-
- { trigger_pct: 50, lock_hw_pct: 80, retrace: 1.0 }
|
|
191
|
+
- { trigger_pct: 10, lock_hw_pct: 50, breaches: 1 }
|
|
192
|
+
- { trigger_pct: 20, lock_hw_pct: 70, breaches: 1 }
|
|
193
|
+
- { trigger_pct: 30, lock_hw_pct: 73, retrace: 1.2, breaches: 1 }
|
|
194
|
+
- { trigger_pct: 50, lock_hw_pct: 80, retrace: 1.0, breaches: 1 }
|
|
193
195
|
|
|
194
196
|
──────────────────────────────────────────────────────────────────────────────
|
|
195
197
|
State and events
|
|
@@ -243,14 +245,18 @@ actions[]
|
|
|
243
245
|
|
|
244
246
|
exit
|
|
245
247
|
engine string No dsl
|
|
246
|
-
interval_seconds number No Default 30 (
|
|
248
|
+
interval_seconds number No Default 30; integer 5–3600 (Zod + DSL parse)
|
|
247
249
|
dsl_presets object No Presets keyed by name (preferred)
|
|
248
250
|
dsl object No Legacy alias for dsl_presets
|
|
249
251
|
|
|
250
|
-
Preset:
|
|
251
|
-
consecutive_breaches_required
|
|
252
|
-
|
|
253
|
-
|
|
252
|
+
Preset: phase1 (optional enabled; max_loss_pct, retrace_threshold ROE %,
|
|
253
|
+
consecutive_breaches_required; optional time cuts), phase2_trigger_tier
|
|
254
|
+
(required int ≥ 0), phase2 (optional enabled; retrace_threshold ROE %,
|
|
255
|
+
consecutive_breaches_required, tiers). phase1.enabled and phase2.enabled
|
|
256
|
+
cannot both be false. Each tier must include lock_hw_pct [0,100] and breaches
|
|
257
|
+
(≥ 1). DSL parse enforces strictly increasing trigger_pct per tier list,
|
|
258
|
+
bounds on interval/max_loss/trigger/lock_hw, and integer breach counts; see
|
|
259
|
+
dsl-reference Config validation. See: senpi guide dsl
|
|
254
260
|
|
|
255
261
|
Environment substitution: \${VAR} and \${VAR:-default} resolved at load time.
|
|
256
262
|
`.trim();
|
|
@@ -289,16 +295,16 @@ exit:
|
|
|
289
295
|
interval_seconds: 60
|
|
290
296
|
dsl_presets:
|
|
291
297
|
default:
|
|
292
|
-
lock_mode: pctOfHighWater
|
|
293
298
|
phase1:
|
|
294
299
|
consecutive_breaches_required: 3
|
|
295
300
|
max_loss_pct: 5.0
|
|
301
|
+
retrace_threshold: 10
|
|
296
302
|
phase2_trigger_tier: 0
|
|
297
303
|
phase2:
|
|
298
304
|
retrace_threshold: 1.5
|
|
299
305
|
consecutive_breaches_required: 1
|
|
300
306
|
tiers:
|
|
301
|
-
- { trigger_pct: 1, lock_hw_pct: 50 }
|
|
307
|
+
- { trigger_pct: 1, lock_hw_pct: 50, breaches: 1 }
|
|
302
308
|
`.trim();
|
|
303
309
|
/**
|
|
304
310
|
* Register `senpi guide [subcommand]` on the senpi Commander subprogram.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide-commands.js","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,aAAa,GACjB,0EAA0E,CAAC;AAE7E,+EAA+E;AAE/E,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC;yBAClB,OAAO;;;;;;;;;;;;;;;;CAgB/B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwErB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCpB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,QAAQ,GAAG
|
|
1
|
+
{"version":3,"file":"guide-commands.js","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,aAAa,GACjB,0EAA0E,CAAC;AAE7E,+EAA+E;AAE/E,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC;yBAClB,OAAO;;;;;;;;;;;;;;;;CAgB/B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwErB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCpB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DhB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DnB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CpB,CAAC,IAAI,EAAE,CAAC;AAYT;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAuB,EACvB,OAAe;IAEf,MAAM,KAAK,GAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAsB;SACvD,WAAW,CAAC,8CAA8C,CAAC,CAAC;IAE/D,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,UAAU,CAAsB;SAC5C,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,SAAS,CAAsB;SAC3C,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,KAAK,CAAsB;SACvC,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,UAAU,CAAsB;SAC5C,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAsB;SAC1C,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,SAAS,CAAsB;SAC3C,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,OAAO,KAAK,aAAa,IAAI,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -36,6 +36,8 @@ export declare const CLOSE_REASON: {
|
|
|
36
36
|
};
|
|
37
37
|
export type CloseReason = (typeof CLOSE_REASON)[keyof typeof CLOSE_REASON];
|
|
38
38
|
export declare const MIN_INTERVAL_SECONDS = 5;
|
|
39
|
+
/** Upper bound for `exit.interval_seconds` (validation spec). */
|
|
40
|
+
export declare const MAX_INTERVAL_SECONDS = 3600;
|
|
39
41
|
export declare const DEFAULT_INTERVAL_MS = 30000;
|
|
40
42
|
export declare const MAX_CONSECUTIVE_CLOSE_FAILURES = 3;
|
|
41
43
|
/** Number of retries for DSL SenpiClient calls (total attempts = retries + 1). */
|
|
@@ -43,7 +45,5 @@ export declare const DSL_EXTERNAL_RETRIES = 2;
|
|
|
43
45
|
/** Delay in ms between retries for DSL SenpiClient calls. */
|
|
44
46
|
export declare const DSL_EXTERNAL_RETRY_DELAY_MS = 500;
|
|
45
47
|
export declare const MCP_TOOL_PREFIX = "senpi.";
|
|
46
|
-
export declare const PHASE1_DEFAULT_BREACHES = 3;
|
|
47
|
-
export declare const PHASE2_DEFAULT_BREACHES = 1;
|
|
48
48
|
export declare const PRICE_DECIMALS = 4;
|
|
49
49
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/constants/dsl/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,uBAAuB,EAAG,UAAmB,CAAC;AAE3D,8EAA8E;AAC9E,eAAO,MAAM,MAAM;;;;CAIT,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;;;CAQb,CAAC;AAEX,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,8EAA8E;AAC9E,eAAO,MAAM,YAAY;;;;;;;IAOvB,oCAAoC;;IAEpC,0EAA0E;;IAE1E,oEAAoE;;CAE5D,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAC3E,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,6DAA6D;AAC7D,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,eAAe,WAAW,CAAC;AACxC,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/constants/dsl/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,uBAAuB,EAAG,UAAmB,CAAC;AAE3D,8EAA8E;AAC9E,eAAO,MAAM,MAAM;;;;CAIT,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;;;CAQb,CAAC;AAEX,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,8EAA8E;AAC9E,eAAO,MAAM,YAAY;;;;;;;IAOvB,oCAAoC;;IAEpC,0EAA0E;;IAE1E,oEAAoE;;CAE5D,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAC3E,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,6DAA6D;AAC7D,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,eAAe,WAAW,CAAC;AACxC,eAAO,MAAM,cAAc,IAAI,CAAC"}
|
|
@@ -36,6 +36,8 @@ export const CLOSE_REASON = {
|
|
|
36
36
|
DEAD_WEIGHT_CUT: "dead_weight_cut",
|
|
37
37
|
};
|
|
38
38
|
export const MIN_INTERVAL_SECONDS = 5;
|
|
39
|
+
/** Upper bound for `exit.interval_seconds` (validation spec). */
|
|
40
|
+
export const MAX_INTERVAL_SECONDS = 3600;
|
|
39
41
|
export const DEFAULT_INTERVAL_MS = 30_000;
|
|
40
42
|
export const MAX_CONSECUTIVE_CLOSE_FAILURES = 3;
|
|
41
43
|
/** Number of retries for DSL SenpiClient calls (total attempts = retries + 1). */
|
|
@@ -43,7 +45,5 @@ export const DSL_EXTERNAL_RETRIES = 2;
|
|
|
43
45
|
/** Delay in ms between retries for DSL SenpiClient calls. */
|
|
44
46
|
export const DSL_EXTERNAL_RETRY_DELAY_MS = 500;
|
|
45
47
|
export const MCP_TOOL_PREFIX = "senpi.";
|
|
46
|
-
export const PHASE1_DEFAULT_BREACHES = 3;
|
|
47
|
-
export const PHASE2_DEFAULT_BREACHES = 1;
|
|
48
48
|
export const PRICE_DECIMALS = 4;
|
|
49
49
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/constants/dsl/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAmB,CAAC;AAE3D,8EAA8E;AAC9E,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,eAAe,EAAE,UAAU,CAAC,kBAAkB;IAC9C,eAAe,EAAE,UAAU,CAAC,kBAAkB;IAC9C,gBAAgB,EAAE,UAAU,CAAC,mBAAmB;CACxC,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO,EAAE,aAAa;IACtB,aAAa,EAAE,mBAAmB;IAClC,aAAa,EAAE,mBAAmB;IAClC,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,YAAY;IACpB,aAAa,EAAE,mBAAmB;IAClC,gBAAgB,EAAE,sBAAsB;CAChC,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,qBAAqB,EAAE,uBAAuB;IAC9C,oCAAoC;IACpC,cAAc,EAAE,gBAAgB;IAChC,0EAA0E;IAC1E,aAAa,EAAE,eAAe;IAC9B,oEAAoE;IACpE,eAAe,EAAE,iBAAiB;CAC1B,CAAC;AAGX,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAChD,kFAAkF;AAClF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AACxC,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/constants/dsl/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAmB,CAAC;AAE3D,8EAA8E;AAC9E,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,eAAe,EAAE,UAAU,CAAC,kBAAkB;IAC9C,eAAe,EAAE,UAAU,CAAC,kBAAkB;IAC9C,gBAAgB,EAAE,UAAU,CAAC,mBAAmB;CACxC,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO,EAAE,aAAa;IACtB,aAAa,EAAE,mBAAmB;IAClC,aAAa,EAAE,mBAAmB;IAClC,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,YAAY;IACpB,aAAa,EAAE,mBAAmB;IAClC,gBAAgB,EAAE,sBAAsB;CAChC,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,qBAAqB,EAAE,uBAAuB;IAC9C,oCAAoC;IACpC,cAAc,EAAE,gBAAgB;IAChC,0EAA0E;IAC1E,aAAa,EAAE,eAAe;IAC9B,oEAAoE;IACpE,eAAe,EAAE,iBAAiB;CAC1B,CAAC;AAGX,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAChD,kFAAkF;AAClF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Config parsing and validation from playbook exit block.
|
|
3
3
|
*/
|
|
4
4
|
import type { DslPluginConfig } from "../../types/dsl/index.js";
|
|
5
|
+
export type { DslValidationIssue, DslValidationIssueCode } from "./validation.js";
|
|
6
|
+
export { DslConfigValidationError, dslValidationIssue } from "./validation.js";
|
|
5
7
|
export interface ExitBlockConfig {
|
|
6
8
|
engine?: string;
|
|
7
9
|
interval_seconds?: number;
|
|
@@ -14,13 +16,10 @@ interface RawPreset {
|
|
|
14
16
|
phase1?: RawPhase1;
|
|
15
17
|
phase2_trigger_tier?: number;
|
|
16
18
|
phase2?: RawPhase2;
|
|
17
|
-
lock_mode?: string;
|
|
18
19
|
}
|
|
19
20
|
interface RawTier {
|
|
20
21
|
trigger_pct?: number;
|
|
21
22
|
triggerPct?: number;
|
|
22
|
-
lock_pct?: number;
|
|
23
|
-
lockPct?: number;
|
|
24
23
|
lock_hw_pct?: number;
|
|
25
24
|
lockHwPct?: number;
|
|
26
25
|
breaches?: number;
|
|
@@ -31,6 +30,8 @@ interface RawPhase1 {
|
|
|
31
30
|
consecutiveBreachesRequired?: number;
|
|
32
31
|
consecutive_breaches_required?: number;
|
|
33
32
|
max_loss_pct?: number;
|
|
33
|
+
retraceThreshold?: number;
|
|
34
|
+
retrace_threshold?: number;
|
|
34
35
|
hard_timeout?: {
|
|
35
36
|
enabled?: boolean;
|
|
36
37
|
interval_in_minutes?: number;
|
|
@@ -49,11 +50,11 @@ interface RawPhase2 {
|
|
|
49
50
|
enabled?: boolean;
|
|
50
51
|
retraceThreshold?: number;
|
|
51
52
|
retrace_threshold?: number;
|
|
53
|
+
retrace_from_hw?: number;
|
|
52
54
|
consecutiveBreachesRequired?: number;
|
|
53
55
|
consecutive_breaches_required?: number;
|
|
54
56
|
tiers?: RawTier[];
|
|
55
57
|
}
|
|
56
58
|
export declare function parseDslPluginConfig(raw: ExitBlockConfig): DslPluginConfig;
|
|
57
59
|
export declare function getDefaultIntervalMs(): number;
|
|
58
|
-
export {};
|
|
59
60
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EAMhB,MAAM,0BAA0B,CAAC;AAYlC,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACzC;AAED,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,UAAU,OAAO;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,aAAa,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF,eAAe,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,UAAU,SAAS;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AA+UD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CAmB1E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
|
package/dist/dsl/config/index.js
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Config parsing and validation from playbook exit block.
|
|
3
3
|
*/
|
|
4
|
-
import { MIN_INTERVAL_SECONDS, DEFAULT_INTERVAL_MS } from "../../constants/dsl/index.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const v = raw?.toLowerCase();
|
|
8
|
-
if (v === "fixed_roe" || v === "fixedroe")
|
|
9
|
-
return "fixedRoe";
|
|
10
|
-
if (v === "pct_of_high_water" || v === "pctofhighwater")
|
|
11
|
-
return "pctOfHighWater";
|
|
12
|
-
return "pctOfHighWater";
|
|
13
|
-
}
|
|
4
|
+
import { MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS, DEFAULT_INTERVAL_MS, } from "../../constants/dsl/index.js";
|
|
5
|
+
import { DslConfigValidationError, dslValidationIssue, validateIntervalSeconds, } from "./validation.js";
|
|
6
|
+
export { DslConfigValidationError, dslValidationIssue } from "./validation.js";
|
|
14
7
|
/** Clamp interval to at least minIntervalMinutes (cron run interval). */
|
|
15
8
|
function clampInterval(intervalInMinutes, minIntervalMinutes) {
|
|
16
9
|
return Math.max(intervalInMinutes, minIntervalMinutes);
|
|
@@ -40,33 +33,121 @@ function parsePhase1DeadWeightCut(raw, minIntervalMinutes) {
|
|
|
40
33
|
return undefined;
|
|
41
34
|
return { enabled: true, intervalInMinutes };
|
|
42
35
|
}
|
|
43
|
-
function
|
|
36
|
+
function readPhase1(presetName, phase1, presetMaxLossPct) {
|
|
37
|
+
if (!phase1 || typeof phase1 !== "object") {
|
|
38
|
+
throw new Error(`preset "${presetName}": phase1 is required with max_loss_pct, retrace_threshold, consecutive_breaches_required`);
|
|
39
|
+
}
|
|
40
|
+
const phase1Enabled = phase1.enabled !== false;
|
|
41
|
+
if (!phase1Enabled) {
|
|
42
|
+
const maxLossPct = Number(phase1.max_loss_pct ?? presetMaxLossPct ?? 1);
|
|
43
|
+
if (!(maxLossPct > 0) || maxLossPct > 100) {
|
|
44
|
+
throw new DslConfigValidationError([
|
|
45
|
+
dslValidationIssue("INVALID_MAX_LOSS_PCT", !(maxLossPct > 0)
|
|
46
|
+
? "max_loss_pct must be > 0 when phase1.enabled is false"
|
|
47
|
+
: "max_loss_pct must be <= 100", `dsl_presets.${presetName}.phase1.max_loss_pct`),
|
|
48
|
+
]);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
maxLossPct,
|
|
52
|
+
retraceThreshold: 1,
|
|
53
|
+
phase1Breaches: 1,
|
|
54
|
+
phase1Enabled: false,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const maxLossPct = Number(phase1.max_loss_pct ?? presetMaxLossPct);
|
|
58
|
+
if (!(maxLossPct > 0) || maxLossPct > 100) {
|
|
59
|
+
throw new DslConfigValidationError([
|
|
60
|
+
dslValidationIssue("INVALID_MAX_LOSS_PCT", !(maxLossPct > 0)
|
|
61
|
+
? "phase1.max_loss_pct is required and must be > 0 (or set preset max_loss_pct)"
|
|
62
|
+
: "phase1.max_loss_pct must be <= 100", `dsl_presets.${presetName}.phase1.max_loss_pct`),
|
|
63
|
+
]);
|
|
64
|
+
}
|
|
65
|
+
const retraceThreshold = Number(phase1.retrace_threshold ?? phase1.retraceThreshold);
|
|
66
|
+
if (!(retraceThreshold > 0)) {
|
|
67
|
+
throw new DslConfigValidationError([
|
|
68
|
+
dslValidationIssue("INVALID_RETRACE_THRESHOLD", "phase1.retrace_threshold is required and must be > 0 (ROE %)", `dsl_presets.${presetName}.phase1.retrace_threshold`),
|
|
69
|
+
]);
|
|
70
|
+
}
|
|
71
|
+
const phase1Breaches = Number(phase1.consecutive_breaches_required ?? phase1.consecutiveBreachesRequired);
|
|
72
|
+
if (!Number.isFinite(phase1Breaches) || phase1Breaches < 1 || !Number.isInteger(phase1Breaches)) {
|
|
73
|
+
throw new DslConfigValidationError([
|
|
74
|
+
dslValidationIssue("INVALID_CONSECUTIVE_BREACHES", "phase1.consecutive_breaches_required must be an integer >= 1", `dsl_presets.${presetName}.phase1.consecutive_breaches_required`),
|
|
75
|
+
]);
|
|
76
|
+
}
|
|
77
|
+
return { maxLossPct, retraceThreshold, phase1Breaches, phase1Enabled: true };
|
|
78
|
+
}
|
|
79
|
+
function readPhase2Scalars(presetName, phase2, requireTiersArray) {
|
|
80
|
+
if (!phase2 || typeof phase2 !== "object") {
|
|
81
|
+
throw new Error(`preset "${presetName}": phase2 is required`);
|
|
82
|
+
}
|
|
83
|
+
const phase2Enabled = phase2.enabled !== false;
|
|
84
|
+
const phase2RetraceRaw = Number(phase2.retrace_threshold ?? phase2.retraceThreshold ?? phase2.retrace_from_hw);
|
|
85
|
+
const phase2BreachesRaw = Number(phase2.consecutive_breaches_required ?? phase2.consecutiveBreachesRequired);
|
|
86
|
+
if (!phase2Enabled) {
|
|
87
|
+
const phase2Retrace = phase2RetraceRaw > 0 ? phase2RetraceRaw : 1;
|
|
88
|
+
if (Number.isFinite(phase2BreachesRaw) &&
|
|
89
|
+
phase2BreachesRaw >= 1 &&
|
|
90
|
+
!Number.isInteger(phase2BreachesRaw)) {
|
|
91
|
+
throw new DslConfigValidationError([
|
|
92
|
+
dslValidationIssue("INVALID_CONSECUTIVE_BREACHES", "phase2.consecutive_breaches_required must be an integer >= 1", `dsl_presets.${presetName}.phase2.consecutive_breaches_required`),
|
|
93
|
+
]);
|
|
94
|
+
}
|
|
95
|
+
const phase2Breaches = Number.isFinite(phase2BreachesRaw) && phase2BreachesRaw >= 1 ? phase2BreachesRaw : 1;
|
|
96
|
+
if (requireTiersArray &&
|
|
97
|
+
(!Array.isArray(phase2.tiers) || phase2.tiers.length === 0)) {
|
|
98
|
+
throw new Error(`preset "${presetName}": phase2.tiers must be a non-empty array`);
|
|
99
|
+
}
|
|
100
|
+
return { phase2Retrace, phase2Breaches, phase2Enabled: false };
|
|
101
|
+
}
|
|
102
|
+
const phase2Retrace = phase2RetraceRaw;
|
|
103
|
+
if (!(phase2Retrace > 0)) {
|
|
104
|
+
throw new DslConfigValidationError([
|
|
105
|
+
dslValidationIssue("INVALID_RETRACE_THRESHOLD", "phase2.retrace_threshold is required and must be > 0 (ROE %)", `dsl_presets.${presetName}.phase2.retrace_threshold`),
|
|
106
|
+
]);
|
|
107
|
+
}
|
|
108
|
+
const phase2Breaches = phase2BreachesRaw;
|
|
109
|
+
if (!Number.isFinite(phase2Breaches) || phase2Breaches < 1 || !Number.isInteger(phase2Breaches)) {
|
|
110
|
+
throw new DslConfigValidationError([
|
|
111
|
+
dslValidationIssue("INVALID_CONSECUTIVE_BREACHES", "phase2.consecutive_breaches_required must be an integer >= 1", `dsl_presets.${presetName}.phase2.consecutive_breaches_required`),
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
if (requireTiersArray &&
|
|
115
|
+
(!Array.isArray(phase2.tiers) || phase2.tiers.length === 0)) {
|
|
116
|
+
throw new Error(`preset "${presetName}": phase2.tiers must be a non-empty array`);
|
|
117
|
+
}
|
|
118
|
+
return { phase2Retrace, phase2Breaches, phase2Enabled: true };
|
|
119
|
+
}
|
|
120
|
+
function readPhase2TriggerTier(presetName, raw) {
|
|
121
|
+
if (typeof raw !== "number" || !Number.isInteger(raw) || raw < 0) {
|
|
122
|
+
throw new DslConfigValidationError([
|
|
123
|
+
dslValidationIssue("INVALID_PHASE2_TRIGGER_TIER", "phase2_trigger_tier is required and must be an integer >= 0", `dsl_presets.${presetName}.phase2_trigger_tier`),
|
|
124
|
+
]);
|
|
125
|
+
}
|
|
126
|
+
return raw;
|
|
127
|
+
}
|
|
128
|
+
function parseTier(presetName, raw, tierIndex, tiersPathForErrors) {
|
|
129
|
+
const path = (field) => `dsl_presets.${presetName}.${tiersPathForErrors}[${tierIndex}].${field}`;
|
|
44
130
|
const triggerPct = Number(raw.trigger_pct ?? raw.triggerPct);
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
if (
|
|
53
|
-
throw new
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
throw new Error("tier breaches must be >= 1");
|
|
131
|
+
const lockHwPct = Number(raw.lock_hw_pct ?? raw.lockHwPct);
|
|
132
|
+
const breaches = Number(raw.breaches);
|
|
133
|
+
if (!(triggerPct > 0) || triggerPct > 100) {
|
|
134
|
+
throw new DslConfigValidationError([
|
|
135
|
+
dslValidationIssue("INVALID_TRIGGER_PCT", "trigger_pct must be > 0 and <= 100", path("trigger_pct")),
|
|
136
|
+
]);
|
|
137
|
+
}
|
|
138
|
+
if (!Number.isFinite(lockHwPct) || lockHwPct < 0 || lockHwPct > 100) {
|
|
139
|
+
throw new DslConfigValidationError([
|
|
140
|
+
dslValidationIssue("INVALID_LOCK_HW_PCT", "lock_hw_pct is required and must be in [0, 100]", path("lock_hw_pct")),
|
|
141
|
+
]);
|
|
142
|
+
}
|
|
143
|
+
if (!Number.isFinite(breaches) || breaches < 1 || !Number.isInteger(breaches)) {
|
|
144
|
+
throw new DslConfigValidationError([
|
|
145
|
+
dslValidationIssue("INVALID_BREACHES", "breaches must be an integer >= 1", path("breaches")),
|
|
146
|
+
]);
|
|
147
|
+
}
|
|
63
148
|
const retraceRaw = raw.retrace ?? raw.retraceFromHW;
|
|
64
149
|
const retraceFromHW = typeof retraceRaw === "number" && retraceRaw > 0 ? retraceRaw : undefined;
|
|
65
|
-
const tier = { triggerPct, breaches, ...(retraceFromHW != null && { retraceFromHW }) };
|
|
66
|
-
if (lockPct != null)
|
|
67
|
-
tier.lockPct = lockPct;
|
|
68
|
-
if (lockHwPct != null)
|
|
69
|
-
tier.lockHwPct = lockHwPct;
|
|
150
|
+
const tier = { triggerPct, lockHwPct, breaches, ...(retraceFromHW != null && { retraceFromHW }) };
|
|
70
151
|
return tier;
|
|
71
152
|
}
|
|
72
153
|
function parsePreset(name, raw, minIntervalMinutes = 0) {
|
|
@@ -78,63 +159,62 @@ function parsePreset(name, raw, minIntervalMinutes = 0) {
|
|
|
78
159
|
if (!Array.isArray(tiersRaw) || tiersRaw.length === 0) {
|
|
79
160
|
throw new Error(`preset "${name}" must have tiers or phase2.tiers`);
|
|
80
161
|
}
|
|
81
|
-
const tiers = tiersRaw.map((t) => parseTier(t));
|
|
162
|
+
const tiers = tiersRaw.map((t, i) => parseTier(name, t, i, "tiers"));
|
|
82
163
|
for (let i = 1; i < tiers.length; i++) {
|
|
83
164
|
if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
|
|
84
165
|
throw new Error(`preset "${name}": tiers must be sorted ascending by trigger_pct`);
|
|
85
166
|
}
|
|
86
167
|
}
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
168
|
+
const p1 = readPhase1(name, raw.phase1, raw.max_loss_pct);
|
|
169
|
+
const p2 = readPhase2Scalars(name, raw.phase2, false);
|
|
170
|
+
if (!p1.phase1Enabled && !p2.phase2Enabled) {
|
|
171
|
+
throw new Error(`preset "${name}": phase1.enabled and phase2.enabled cannot both be false (at least one phase must be active)`);
|
|
172
|
+
}
|
|
173
|
+
const phase2TriggerTier = readPhase2TriggerTier(name, raw.phase2_trigger_tier);
|
|
174
|
+
const phase1HardTimeout = parsePhase1HardTimeout(raw.phase1?.hard_timeout, minIntervalMinutes);
|
|
175
|
+
const phase1WeakPeakCut = parsePhase1WeakPeakCut(raw.phase1?.weak_peak_cut, minIntervalMinutes);
|
|
176
|
+
const phase1DeadWeightCut = parsePhase1DeadWeightCut(raw.phase1?.dead_weight_cut, minIntervalMinutes);
|
|
177
|
+
return {
|
|
178
|
+
tiers,
|
|
179
|
+
maxLossPct: p1.maxLossPct,
|
|
180
|
+
phase1Enabled: p1.phase1Enabled,
|
|
181
|
+
phase2Enabled: p2.phase2Enabled,
|
|
182
|
+
phase1RetraceThreshold: p1.retraceThreshold,
|
|
183
|
+
phase1BreachesRequired: p1.phase1Breaches,
|
|
184
|
+
phase2RetraceFromHW: p2.phase2Retrace,
|
|
185
|
+
phase2BreachesRequired: p2.phase2Breaches,
|
|
186
|
+
phase2TriggerTier,
|
|
187
|
+
...(phase1HardTimeout && { phase1HardTimeout }),
|
|
188
|
+
...(phase1WeakPeakCut && { phase1WeakPeakCut }),
|
|
189
|
+
...(phase1DeadWeightCut && { phase1DeadWeightCut }),
|
|
190
|
+
};
|
|
92
191
|
}
|
|
93
192
|
function parsePresetPhaseFormat(name, raw, minIntervalMinutes = 0) {
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
? phase2.consecutive_breaches_required
|
|
102
|
-
: 1;
|
|
103
|
-
const tiers = phase2.tiers.map((t) => parseTier(t, phase2BreachesDefault));
|
|
193
|
+
const p1 = readPhase1(name, raw.phase1, raw.max_loss_pct);
|
|
194
|
+
const p2 = readPhase2Scalars(name, raw.phase2, true);
|
|
195
|
+
if (!p1.phase1Enabled && !p2.phase2Enabled) {
|
|
196
|
+
throw new Error(`preset "${name}": phase1.enabled and phase2.enabled cannot both be false (at least one phase must be active)`);
|
|
197
|
+
}
|
|
198
|
+
const phase2TriggerTier = readPhase2TriggerTier(name, raw.phase2_trigger_tier);
|
|
199
|
+
const tiers = raw.phase2.tiers.map((t, i) => parseTier(name, t, i, "phase2.tiers"));
|
|
104
200
|
for (let i = 1; i < tiers.length; i++) {
|
|
105
201
|
if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
|
|
106
202
|
throw new Error(`preset "${name}": phase2.tiers must be sorted ascending by trigger_pct`);
|
|
107
203
|
}
|
|
108
204
|
}
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
throw new Error(`preset "${name}": phase1.max_loss_pct or max_loss_pct must be > 0`);
|
|
113
|
-
}
|
|
114
|
-
const phase2TriggerTier = typeof raw.phase2_trigger_tier === "number" ? raw.phase2_trigger_tier : 0;
|
|
115
|
-
const phase2Retrace = typeof phase2.retraceThreshold === "number"
|
|
116
|
-
? phase2.retraceThreshold
|
|
117
|
-
: typeof phase2.retrace_threshold === "number"
|
|
118
|
-
? phase2.retrace_threshold
|
|
119
|
-
: undefined;
|
|
120
|
-
const phase1Breaches = typeof phase1?.consecutiveBreachesRequired === "number"
|
|
121
|
-
? phase1.consecutiveBreachesRequired
|
|
122
|
-
: typeof phase1?.consecutive_breaches_required === "number"
|
|
123
|
-
? phase1.consecutive_breaches_required
|
|
124
|
-
: undefined;
|
|
125
|
-
const phase2Breaches = phase2BreachesDefault;
|
|
126
|
-
const lockMode = parseLockMode(raw.lock_mode);
|
|
127
|
-
const phase1HardTimeout = parsePhase1HardTimeout(phase1?.hard_timeout, minIntervalMinutes);
|
|
128
|
-
const phase1WeakPeakCut = parsePhase1WeakPeakCut(phase1?.weak_peak_cut, minIntervalMinutes);
|
|
129
|
-
const phase1DeadWeightCut = parsePhase1DeadWeightCut(phase1?.dead_weight_cut, minIntervalMinutes);
|
|
205
|
+
const phase1HardTimeout = parsePhase1HardTimeout(raw.phase1?.hard_timeout, minIntervalMinutes);
|
|
206
|
+
const phase1WeakPeakCut = parsePhase1WeakPeakCut(raw.phase1?.weak_peak_cut, minIntervalMinutes);
|
|
207
|
+
const phase1DeadWeightCut = parsePhase1DeadWeightCut(raw.phase1?.dead_weight_cut, minIntervalMinutes);
|
|
130
208
|
return {
|
|
131
209
|
tiers,
|
|
132
|
-
maxLossPct,
|
|
210
|
+
maxLossPct: p1.maxLossPct,
|
|
211
|
+
phase1Enabled: p1.phase1Enabled,
|
|
212
|
+
phase2Enabled: p2.phase2Enabled,
|
|
213
|
+
phase1RetraceThreshold: p1.retraceThreshold,
|
|
214
|
+
phase1BreachesRequired: p1.phase1Breaches,
|
|
215
|
+
phase2RetraceFromHW: p2.phase2Retrace,
|
|
216
|
+
phase2BreachesRequired: p2.phase2Breaches,
|
|
133
217
|
phase2TriggerTier,
|
|
134
|
-
phase2RetraceFromHW: phase2Retrace,
|
|
135
|
-
phase1BreachesRequired: phase1Breaches,
|
|
136
|
-
phase2BreachesRequired: phase2Breaches,
|
|
137
|
-
lockMode,
|
|
138
218
|
...(phase1HardTimeout && { phase1HardTimeout }),
|
|
139
219
|
...(phase1WeakPeakCut && { phase1WeakPeakCut }),
|
|
140
220
|
...(phase1DeadWeightCut && { phase1DeadWeightCut }),
|
|
@@ -142,11 +222,7 @@ function parsePresetPhaseFormat(name, raw, minIntervalMinutes = 0) {
|
|
|
142
222
|
}
|
|
143
223
|
export function parseDslPluginConfig(raw) {
|
|
144
224
|
const intervalSeconds = raw.interval_seconds ?? 30;
|
|
145
|
-
|
|
146
|
-
!Number.isInteger(intervalSeconds) ||
|
|
147
|
-
intervalSeconds < MIN_INTERVAL_SECONDS) {
|
|
148
|
-
throw new Error(`interval_seconds must be a positive integer >= ${MIN_INTERVAL_SECONDS}, got: ${String(raw.interval_seconds)}`);
|
|
149
|
-
}
|
|
225
|
+
validateIntervalSeconds(intervalSeconds, MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS);
|
|
150
226
|
const intervalMs = intervalSeconds * 1000;
|
|
151
227
|
const minIntervalMinutes = intervalMs / 60_000;
|
|
152
228
|
const presetsRaw = raw.dsl_presets ?? {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exit DSL validation: interval bounds and structured errors for primitive field checks.
|
|
3
|
+
*/
|
|
4
|
+
export type DslValidationIssueCode = "INVALID_INTERVAL_SECONDS" | "INVALID_MAX_LOSS_PCT" | "INVALID_RETRACE_THRESHOLD" | "INVALID_TRIGGER_PCT" | "INVALID_LOCK_HW_PCT" | "INVALID_BREACHES" | "INVALID_CONSECUTIVE_BREACHES" | "INVALID_PHASE2_TRIGGER_TIER";
|
|
5
|
+
export interface DslValidationIssue {
|
|
6
|
+
code: DslValidationIssueCode;
|
|
7
|
+
message: string;
|
|
8
|
+
path: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class DslConfigValidationError extends Error {
|
|
11
|
+
readonly issues: DslValidationIssue[];
|
|
12
|
+
constructor(issues: DslValidationIssue[]);
|
|
13
|
+
toJSON(): {
|
|
14
|
+
issues: DslValidationIssue[];
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** Build a single validation issue (for callers outside this module). */
|
|
18
|
+
export declare function dslValidationIssue(code: DslValidationIssueCode, message: string, path: string): DslValidationIssue;
|
|
19
|
+
/** interval_seconds: integer in [minSeconds, maxSeconds]. */
|
|
20
|
+
export declare function validateIntervalSeconds(intervalSeconds: number, minSeconds: number, maxSeconds: number): void;
|
|
21
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,sBAAsB,GAC9B,0BAA0B,GAC1B,sBAAsB,GACtB,2BAA2B,GAC3B,qBAAqB,GACrB,qBAAqB,GACrB,kBAAkB,GAClB,8BAA8B,GAC9B,6BAA6B,CAAC;AAElC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;gBAE1B,MAAM,EAAE,kBAAkB,EAAE;IAWxC,MAAM,IAAI;QAAE,MAAM,EAAE,kBAAkB,EAAE,CAAA;KAAE;CAG3C;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,sBAAsB,EAC5B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,kBAAkB,CAEpB;AAgBD,6DAA6D;AAC7D,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,IAAI,CAyBN"}
|