@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.
Files changed (55) hide show
  1. package/dist/cli/guide-commands.d.ts.map +1 -1
  2. package/dist/cli/guide-commands.js +28 -22
  3. package/dist/cli/guide-commands.js.map +1 -1
  4. package/dist/constants/dsl/index.d.ts +2 -2
  5. package/dist/constants/dsl/index.d.ts.map +1 -1
  6. package/dist/constants/dsl/index.js +2 -2
  7. package/dist/constants/dsl/index.js.map +1 -1
  8. package/dist/dsl/config/index.d.ts +5 -4
  9. package/dist/dsl/config/index.d.ts.map +1 -1
  10. package/dist/dsl/config/index.js +157 -81
  11. package/dist/dsl/config/index.js.map +1 -1
  12. package/dist/dsl/config/validation.d.ts +21 -0
  13. package/dist/dsl/config/validation.d.ts.map +1 -0
  14. package/dist/dsl/config/validation.js +45 -0
  15. package/dist/dsl/config/validation.js.map +1 -0
  16. package/dist/dsl/engine/index.d.ts.map +1 -1
  17. package/dist/dsl/engine/index.js +30 -39
  18. package/dist/dsl/engine/index.js.map +1 -1
  19. package/dist/dsl/events/handlers.d.ts.map +1 -1
  20. package/dist/dsl/events/handlers.js +29 -14
  21. package/dist/dsl/events/handlers.js.map +1 -1
  22. package/dist/dsl/index.d.ts +2 -2
  23. package/dist/dsl/index.d.ts.map +1 -1
  24. package/dist/dsl/index.js +1 -1
  25. package/dist/dsl/index.js.map +1 -1
  26. package/dist/dsl/monitor/index.d.ts.map +1 -1
  27. package/dist/dsl/monitor/index.js +21 -12
  28. package/dist/dsl/monitor/index.js.map +1 -1
  29. package/dist/index.d.ts +2 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/runtime/load-trading-recipe.js +1 -1
  34. package/dist/runtime/map-exit-config.d.ts.map +1 -1
  35. package/dist/runtime/map-exit-config.js +14 -10
  36. package/dist/runtime/map-exit-config.js.map +1 -1
  37. package/dist/runtime/trading-recipe-schema.d.ts +4320 -3456
  38. package/dist/runtime/trading-recipe-schema.d.ts.map +1 -1
  39. package/dist/runtime/trading-recipe-schema.js +10 -3
  40. package/dist/runtime/trading-recipe-schema.js.map +1 -1
  41. package/dist/scripts/run-dsl-standalone-live.js +12 -2
  42. package/dist/scripts/run-dsl-standalone-live.js.map +1 -1
  43. package/dist/scripts/run-dsl-standalone-mock.js +12 -2
  44. package/dist/scripts/run-dsl-standalone-mock.js.map +1 -1
  45. package/dist/types/dsl/index.d.ts +19 -21
  46. package/dist/types/dsl/index.d.ts.map +1 -1
  47. package/examples/strategies/dsl-showcase.yaml +2 -2
  48. package/examples/strategies/fox-minimal-loosened.yaml +9 -6
  49. package/examples/strategies/fox-minimal.yaml +1 -1
  50. package/examples/strategies/minimal.yaml +1 -1
  51. package/examples/strategies/viper.yaml +5 -5
  52. package/examples/strategies/wolf.yaml +1 -1
  53. package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +7 -7
  54. package/openclaw.plugin.json +1 -1
  55. 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;AAgTH,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"}
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. Supports lock_mode (pctOfHighWater
145
- or fixedRoe), Phase 1 fixed + trailing floor, Phase 2 tiers, and optional
146
- Phase 1 time-based cuts (hard_timeout, weak_peak_cut, dead_weight_cut).
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 + optional trailing
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
- retraceThreshold (ROE %) so the floor can rise with high-water.
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
- consecutive_breaches_required: 3 # ticks below floor before exit
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
- retrace_threshold: 1.5 # default ROE % retrace from HWM
182
- consecutive_breaches_required: 1
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 (pctOfHighWater); floor trails every tick
187
- # lock_pct = % of (entry→HW) range to lock (fixedRoe); floor fixed at tier trigger
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 (min 5)
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: lock_mode (pctOfHighWater | fixedRoe), phase1 (max_loss_pct,
251
- consecutive_breaches_required, optional hard_timeout/weak_peak_cut/dead_weight_cut),
252
- phase2_trigger_tier, phase2 (retrace_threshold ROE %, tiers with trigger_pct,
253
- lock_hw_pct or lock_pct; tier retrace = ROE %). See: senpi guide dsl
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DhB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDnB,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"}
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,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,cAAc,IAAI,CAAC"}
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,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC"}
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,EAEV,eAAe,EAMhB,MAAM,0BAA0B,CAAC;AAWlC,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;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,OAAO;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,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,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,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AA0JD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CA2B1E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
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"}
@@ -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
- /** Parse lock_mode from config (accepts snake_case from YAML or camelCase). Default pctOfHighWater. */
6
- function parseLockMode(raw) {
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 parseTier(raw, defaultBreaches = 1) {
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 lockPctRaw = raw.lock_pct ?? raw.lockPct;
46
- const lockHwPctRaw = raw.lock_hw_pct ?? raw.lockHwPct;
47
- const lockPct = lockPctRaw != null ? Number(lockPctRaw) : undefined;
48
- const lockHwPct = lockHwPctRaw != null ? Number(lockHwPctRaw) : undefined;
49
- const breaches = Number(raw.breaches) || defaultBreaches;
50
- if (!(triggerPct > 0))
51
- throw new Error("tier trigger_pct must be > 0");
52
- if (lockPct == null && lockHwPct == null) {
53
- throw new Error("tier must have either lock_pct or lock_hw_pct");
54
- }
55
- if (lockPct != null && (!(lockPct > 0) || lockPct > 100)) {
56
- throw new Error("tier lock_pct must be in (0, 100]");
57
- }
58
- if (lockHwPct != null && (lockHwPct < 0 || lockHwPct > 100)) {
59
- throw new Error("tier lock_hw_pct must be in [0, 100]");
60
- }
61
- if (!(breaches >= 1))
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 maxLossPct = Number(raw.max_loss_pct);
88
- if (!(maxLossPct > 0))
89
- throw new Error(`preset "${name}": max_loss_pct must be > 0`);
90
- const lockMode = parseLockMode(raw.lock_mode);
91
- return { tiers, maxLossPct, lockMode };
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 phase2 = raw.phase2;
95
- if (!phase2?.tiers || !Array.isArray(phase2.tiers) || phase2.tiers.length === 0) {
96
- throw new Error(`preset "${name}": phase2.tiers must be a non-empty array`);
97
- }
98
- const phase2BreachesDefault = typeof phase2.consecutiveBreachesRequired === "number"
99
- ? phase2.consecutiveBreachesRequired
100
- : typeof phase2.consecutive_breaches_required === "number"
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 phase1 = raw.phase1;
110
- const maxLossPct = Number(phase1?.max_loss_pct ?? raw.max_loss_pct);
111
- if (!(maxLossPct > 0)) {
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
- if (typeof intervalSeconds !== "number" ||
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"}