@senpi/trading-recipe 1.0.28 → 1.0.30

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 (114) hide show
  1. package/dist/cli/guide-commands.d.ts.map +1 -1
  2. package/dist/cli/guide-commands.js +10 -3
  3. package/dist/cli/guide-commands.js.map +1 -1
  4. package/dist/dsl/config/exit-block.d.ts +11 -0
  5. package/dist/dsl/config/exit-block.d.ts.map +1 -0
  6. package/dist/dsl/config/exit-block.js +5 -0
  7. package/dist/dsl/config/exit-block.js.map +1 -0
  8. package/dist/dsl/config/index.d.ts +4 -56
  9. package/dist/dsl/config/index.d.ts.map +1 -1
  10. package/dist/dsl/config/index.js +3 -244
  11. package/dist/dsl/config/index.js.map +1 -1
  12. package/dist/dsl/config/parse-phase.d.ts +17 -0
  13. package/dist/dsl/config/parse-phase.d.ts.map +1 -0
  14. package/dist/dsl/config/parse-phase.js +97 -0
  15. package/dist/dsl/config/parse-phase.js.map +1 -0
  16. package/dist/dsl/config/parse-plugin-config.d.ts +8 -0
  17. package/dist/dsl/config/parse-plugin-config.d.ts.map +1 -0
  18. package/dist/dsl/config/parse-plugin-config.js +33 -0
  19. package/dist/dsl/config/parse-plugin-config.js.map +1 -0
  20. package/dist/dsl/config/parse-preset.d.ts +7 -0
  21. package/dist/dsl/config/parse-preset.d.ts.map +1 -0
  22. package/dist/dsl/config/parse-preset.js +77 -0
  23. package/dist/dsl/config/parse-preset.js.map +1 -0
  24. package/dist/dsl/config/parse-tiers.d.ts +7 -0
  25. package/dist/dsl/config/parse-tiers.d.ts.map +1 -0
  26. package/dist/dsl/config/parse-tiers.js +30 -0
  27. package/dist/dsl/config/parse-tiers.js.map +1 -0
  28. package/dist/dsl/config/parse-timeouts.d.ts +11 -0
  29. package/dist/dsl/config/parse-timeouts.d.ts.map +1 -0
  30. package/dist/dsl/config/parse-timeouts.js +33 -0
  31. package/dist/dsl/config/parse-timeouts.js.map +1 -0
  32. package/dist/dsl/config/raw-types.d.ts +49 -0
  33. package/dist/dsl/config/raw-types.d.ts.map +1 -0
  34. package/dist/dsl/config/raw-types.js +5 -0
  35. package/dist/dsl/config/raw-types.js.map +1 -0
  36. package/dist/dsl/config/unknown-keys.d.ts +11 -0
  37. package/dist/dsl/config/unknown-keys.d.ts.map +1 -0
  38. package/dist/dsl/config/unknown-keys.js +156 -0
  39. package/dist/dsl/config/unknown-keys.js.map +1 -0
  40. package/dist/dsl/config/validation.d.ts +1 -1
  41. package/dist/dsl/config/validation.d.ts.map +1 -1
  42. package/dist/dsl/config/validation.js.map +1 -1
  43. package/dist/dsl/engine/exchange-stop.d.ts +17 -0
  44. package/dist/dsl/engine/exchange-stop.d.ts.map +1 -0
  45. package/dist/dsl/engine/exchange-stop.js +21 -0
  46. package/dist/dsl/engine/exchange-stop.js.map +1 -0
  47. package/dist/dsl/engine/floors.d.ts +26 -0
  48. package/dist/dsl/engine/floors.d.ts.map +1 -0
  49. package/dist/dsl/engine/floors.js +114 -0
  50. package/dist/dsl/engine/floors.js.map +1 -0
  51. package/dist/dsl/engine/index.d.ts +4 -4
  52. package/dist/dsl/engine/index.d.ts.map +1 -1
  53. package/dist/dsl/engine/index.js +4 -298
  54. package/dist/dsl/engine/index.js.map +1 -1
  55. package/dist/dsl/engine/round.d.ts +5 -0
  56. package/dist/dsl/engine/round.d.ts.map +1 -0
  57. package/dist/dsl/engine/round.js +9 -0
  58. package/dist/dsl/engine/round.js.map +1 -0
  59. package/dist/dsl/engine/state-updates.d.ts +8 -0
  60. package/dist/dsl/engine/state-updates.d.ts.map +1 -0
  61. package/dist/dsl/engine/state-updates.js +55 -0
  62. package/dist/dsl/engine/state-updates.js.map +1 -0
  63. package/dist/dsl/engine/tick.d.ts +6 -0
  64. package/dist/dsl/engine/tick.d.ts.map +1 -0
  65. package/dist/dsl/engine/tick.js +140 -0
  66. package/dist/dsl/engine/tick.js.map +1 -0
  67. package/dist/dsl/events/handlers.d.ts.map +1 -1
  68. package/dist/dsl/events/handlers.js +2 -99
  69. package/dist/dsl/events/handlers.js.map +1 -1
  70. package/dist/dsl/events/initial-state.d.ts +9 -0
  71. package/dist/dsl/events/initial-state.d.ts.map +1 -0
  72. package/dist/dsl/events/initial-state.js +106 -0
  73. package/dist/dsl/events/initial-state.js.map +1 -0
  74. package/dist/dsl/monitor/create-monitor.d.ts +16 -0
  75. package/dist/dsl/monitor/create-monitor.d.ts.map +1 -0
  76. package/dist/dsl/monitor/create-monitor.js +129 -0
  77. package/dist/dsl/monitor/create-monitor.js.map +1 -0
  78. package/dist/dsl/monitor/effective-dex.d.ts +7 -0
  79. package/dist/dsl/monitor/effective-dex.d.ts.map +1 -0
  80. package/dist/dsl/monitor/effective-dex.js +11 -0
  81. package/dist/dsl/monitor/effective-dex.js.map +1 -0
  82. package/dist/dsl/monitor/exchange-sync.d.ts +12 -0
  83. package/dist/dsl/monitor/exchange-sync.d.ts.map +1 -0
  84. package/dist/dsl/monitor/exchange-sync.js +25 -0
  85. package/dist/dsl/monitor/exchange-sync.js.map +1 -0
  86. package/dist/dsl/monitor/index.d.ts +3 -15
  87. package/dist/dsl/monitor/index.d.ts.map +1 -1
  88. package/dist/dsl/monitor/index.js +2 -448
  89. package/dist/dsl/monitor/index.js.map +1 -1
  90. package/dist/dsl/monitor/process-one-position.d.ts +17 -0
  91. package/dist/dsl/monitor/process-one-position.d.ts.map +1 -0
  92. package/dist/dsl/monitor/process-one-position.js +331 -0
  93. package/dist/dsl/monitor/process-one-position.js.map +1 -0
  94. package/dist/dsl/plugin/index.d.ts +2 -13
  95. package/dist/dsl/plugin/index.d.ts.map +1 -1
  96. package/dist/dsl/plugin/index.js.map +1 -1
  97. package/dist/dsl/plugin/options.d.ts +17 -0
  98. package/dist/dsl/plugin/options.d.ts.map +1 -0
  99. package/dist/dsl/plugin/options.js +5 -0
  100. package/dist/dsl/plugin/options.js.map +1 -0
  101. package/dist/runtime/map-exit-config.d.ts.map +1 -1
  102. package/dist/runtime/map-exit-config.js +4 -0
  103. package/dist/runtime/map-exit-config.js.map +1 -1
  104. package/dist/runtime/trading-recipe-schema.d.ts +0 -144
  105. package/dist/runtime/trading-recipe-schema.d.ts.map +1 -1
  106. package/dist/runtime/trading-recipe-schema.js +0 -1
  107. package/dist/runtime/trading-recipe-schema.js.map +1 -1
  108. package/dist/senpi/client.d.ts +2 -1
  109. package/dist/senpi/client.d.ts.map +1 -1
  110. package/dist/senpi/client.js +7 -9
  111. package/dist/senpi/client.js.map +1 -1
  112. package/examples/strategies/fox-minimal-loosened.yaml +1 -1
  113. package/openclaw.plugin.json +1 -1
  114. 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;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"}
1
+ {"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA6TH,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"}
@@ -167,6 +167,7 @@ Phase 1 — Fixed floor + high-water trailing (separate from phase 2)
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
169
  consecutive_breaches_required: 3 # ticks below floor before exit (required when enabled)
170
+ # Exchange SL in Phase 1 only: max_loss absolute floor; retrace/tier-tight exits use closePosition.
170
171
  # Optional time-based cuts (each: enabled, interval_in_minutes):
171
172
  # hard_timeout, weak_peak_cut (min_value ROE %), dead_weight_cut
172
173
 
@@ -175,6 +176,8 @@ Phase 2 — Tiers + trailing floor (high-water retrace)
175
176
  Starts when price reaches the tier at phase2_trigger_tier (0 = first tier).
176
177
  Floor = max(tier_floor, trailing_floor). Retrace values are ROE %; the
177
178
  engine divides by leverage for price (e.g. 1.5% ROE at 10× = 0.15% below HW).
179
+ Exchange SL: full effective floor is kept on the exchange (editPosition syncs tier/phase
180
+ and floor moves). This absolute-only Phase 1 rule does not apply in Phase 2.
178
181
 
179
182
  phase2_trigger_tier: 0
180
183
 
@@ -246,17 +249,21 @@ actions[]
246
249
  exit
247
250
  engine string No dsl
248
251
  interval_seconds number No Default 30; integer 5–3600 (Zod + DSL parse)
252
+ preset string No Default preset name (first dsl_presets key if omitted)
249
253
  dsl_presets object No Presets keyed by name (preferred)
250
254
  dsl object No Legacy alias for dsl_presets
255
+ sm_flip any No Non-DSL exit hook data (allowed; ignored by DSL parse)
251
256
 
252
257
  Preset: phase1 (optional enabled; max_loss_pct, retrace_threshold ROE %,
253
258
  consecutive_breaches_required; optional time cuts), phase2_trigger_tier
254
259
  (required int ≥ 0), phase2 (optional enabled; retrace_threshold ROE %,
255
260
  consecutive_breaches_required, tiers). phase1.enabled and phase2.enabled
256
261
  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
262
+ (≥ 1). Unknown keys under exit / presets / phase1 / phase2 / tiers throw
263
+ DslConfigValidationError (UNKNOWN_DSL_CONFIG_KEY) at load. DSL parse also
264
+ enforces strictly increasing trigger_pct per tier list, bounds on
265
+ interval/max_loss/trigger/lock_hw, and integer breach counts; see dsl-reference
266
+ Config validation. See: senpi guide dsl
260
267
 
261
268
  Environment substitution: \${VAR} and \${VAR:-default} resolved at load time.
262
269
  `.trim();
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEhB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEnB,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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Top-level exit block shape from skills YAML (before parseDslPluginConfig).
3
+ */
4
+ import type { RawPreset } from "./raw-types.js";
5
+ export interface ExitBlockConfig {
6
+ engine?: string;
7
+ interval_seconds?: number;
8
+ preset?: string;
9
+ dsl_presets?: Record<string, RawPreset>;
10
+ }
11
+ //# sourceMappingURL=exit-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-block.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/exit-block.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Top-level exit block shape from skills YAML (before parseDslPluginConfig).
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=exit-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-block.js","sourceRoot":"","sources":["../../../src/dsl/config/exit-block.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,60 +1,8 @@
1
1
  /**
2
- * Config parsing and validation from playbook exit block.
2
+ * Exit DSL config: YAML shapes, validation, and parseDslPluginConfig.
3
3
  */
4
- import type { DslPluginConfig } from "../../types/dsl/index.js";
4
+ export type { ExitBlockConfig } from "./exit-block.js";
5
5
  export type { DslValidationIssue, DslValidationIssueCode } from "./validation.js";
6
- export { DslConfigValidationError, dslValidationIssue } from "./validation.js";
7
- export interface ExitBlockConfig {
8
- engine?: string;
9
- interval_seconds?: number;
10
- preset?: string;
11
- dsl_presets?: Record<string, RawPreset>;
12
- }
13
- interface RawPreset {
14
- tiers?: RawTier[];
15
- max_loss_pct?: number;
16
- phase1?: RawPhase1;
17
- phase2_trigger_tier?: number;
18
- phase2?: RawPhase2;
19
- }
20
- interface RawTier {
21
- trigger_pct?: number;
22
- triggerPct?: number;
23
- lock_hw_pct?: number;
24
- lockHwPct?: number;
25
- breaches?: number;
26
- retrace?: number;
27
- }
28
- interface RawPhase1 {
29
- enabled?: boolean;
30
- consecutiveBreachesRequired?: number;
31
- consecutive_breaches_required?: number;
32
- max_loss_pct?: number;
33
- retraceThreshold?: number;
34
- retrace_threshold?: number;
35
- hard_timeout?: {
36
- enabled?: boolean;
37
- interval_in_minutes?: number;
38
- };
39
- weak_peak_cut?: {
40
- enabled?: boolean;
41
- interval_in_minutes?: number;
42
- min_value?: number;
43
- };
44
- dead_weight_cut?: {
45
- enabled?: boolean;
46
- interval_in_minutes?: number;
47
- };
48
- }
49
- interface RawPhase2 {
50
- enabled?: boolean;
51
- retraceThreshold?: number;
52
- retrace_threshold?: number;
53
- retrace_from_hw?: number;
54
- consecutiveBreachesRequired?: number;
55
- consecutive_breaches_required?: number;
56
- tiers?: RawTier[];
57
- }
58
- export declare function parseDslPluginConfig(raw: ExitBlockConfig): DslPluginConfig;
59
- export declare function getDefaultIntervalMs(): number;
6
+ export { DslConfigValidationError, dslValidationIssue, validateIntervalSeconds } from "./validation.js";
7
+ export { parseDslPluginConfig, getDefaultIntervalMs } from "./parse-plugin-config.js";
60
8
  //# 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,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
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACxG,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,247 +1,6 @@
1
1
  /**
2
- * Config parsing and validation from playbook exit block.
2
+ * Exit DSL config: YAML shapes, validation, and parseDslPluginConfig.
3
3
  */
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";
7
- /** Clamp interval to at least minIntervalMinutes (cron run interval). */
8
- function clampInterval(intervalInMinutes, minIntervalMinutes) {
9
- return Math.max(intervalInMinutes, minIntervalMinutes);
10
- }
11
- function parsePhase1HardTimeout(raw, minIntervalMinutes) {
12
- if (!raw?.enabled)
13
- return undefined;
14
- const intervalInMinutes = clampInterval(Number(raw.interval_in_minutes), minIntervalMinutes);
15
- if (!(intervalInMinutes > 0))
16
- return undefined;
17
- return { enabled: true, intervalInMinutes };
18
- }
19
- function parsePhase1WeakPeakCut(raw, minIntervalMinutes) {
20
- if (!raw?.enabled)
21
- return undefined;
22
- const intervalInMinutes = clampInterval(Number(raw.interval_in_minutes), minIntervalMinutes);
23
- if (!(intervalInMinutes > 0))
24
- return undefined;
25
- const minValue = typeof raw.min_value === "number" ? raw.min_value : 3.0;
26
- return { enabled: true, intervalInMinutes, minValue };
27
- }
28
- function parsePhase1DeadWeightCut(raw, minIntervalMinutes) {
29
- if (!raw?.enabled)
30
- return undefined;
31
- const intervalInMinutes = clampInterval(Number(raw.interval_in_minutes), minIntervalMinutes);
32
- if (!(intervalInMinutes > 0))
33
- return undefined;
34
- return { enabled: true, intervalInMinutes };
35
- }
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}`;
130
- const triggerPct = Number(raw.trigger_pct ?? raw.triggerPct);
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
- }
148
- const retraceRaw = raw.retrace ?? raw.retraceFromHW;
149
- const retraceFromHW = typeof retraceRaw === "number" && retraceRaw > 0 ? retraceRaw : undefined;
150
- const tier = { triggerPct, lockHwPct, breaches, ...(retraceFromHW != null && { retraceFromHW }) };
151
- return tier;
152
- }
153
- function parsePreset(name, raw, minIntervalMinutes = 0) {
154
- const hasPhase2Tiers = raw.phase2?.tiers && Array.isArray(raw.phase2.tiers) && raw.phase2.tiers.length > 0;
155
- if (hasPhase2Tiers) {
156
- return parsePresetPhaseFormat(name, raw, minIntervalMinutes);
157
- }
158
- const tiersRaw = raw.tiers;
159
- if (!Array.isArray(tiersRaw) || tiersRaw.length === 0) {
160
- throw new Error(`preset "${name}" must have tiers or phase2.tiers`);
161
- }
162
- const tiers = tiersRaw.map((t, i) => parseTier(name, t, i, "tiers"));
163
- for (let i = 1; i < tiers.length; i++) {
164
- if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
165
- throw new Error(`preset "${name}": tiers must be sorted ascending by trigger_pct`);
166
- }
167
- }
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
- };
191
- }
192
- function parsePresetPhaseFormat(name, raw, minIntervalMinutes = 0) {
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"));
200
- for (let i = 1; i < tiers.length; i++) {
201
- if (tiers[i].triggerPct <= tiers[i - 1].triggerPct) {
202
- throw new Error(`preset "${name}": phase2.tiers must be sorted ascending by trigger_pct`);
203
- }
204
- }
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);
208
- return {
209
- tiers,
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,
217
- phase2TriggerTier,
218
- ...(phase1HardTimeout && { phase1HardTimeout }),
219
- ...(phase1WeakPeakCut && { phase1WeakPeakCut }),
220
- ...(phase1DeadWeightCut && { phase1DeadWeightCut }),
221
- };
222
- }
223
- export function parseDslPluginConfig(raw) {
224
- const intervalSeconds = raw.interval_seconds ?? 30;
225
- validateIntervalSeconds(intervalSeconds, MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS);
226
- const intervalMs = intervalSeconds * 1000;
227
- const minIntervalMinutes = intervalMs / 60_000;
228
- const presetsRaw = raw.dsl_presets ?? {};
229
- const presets = {};
230
- for (const [name, p] of Object.entries(presetsRaw)) {
231
- if (p && typeof p === "object")
232
- presets[name] = parsePreset(name, p, minIntervalMinutes);
233
- }
234
- const presetKeys = Object.keys(presets);
235
- if (presetKeys.length === 0) {
236
- throw new Error("At least one dsl_presets entry is required");
237
- }
238
- const preset = typeof raw.preset === "string" ? raw.preset : presetKeys[0];
239
- if (!presets[preset]) {
240
- throw new Error(`Preset "${preset}" not found in dsl_presets`);
241
- }
242
- return { intervalMs, preset, presets };
243
- }
244
- export function getDefaultIntervalMs() {
245
- return DEFAULT_INTERVAL_MS;
246
- }
4
+ export { DslConfigValidationError, dslValidationIssue, validateIntervalSeconds } from "./validation.js";
5
+ export { parseDslPluginConfig, getDefaultIntervalMs } from "./parse-plugin-config.js";
247
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAgD/E,yEAAyE;AACzE,SAAS,aAAa,CACpB,iBAAyB,EACzB,kBAA0B;IAE1B,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,sBAAsB,CAC7B,GAA8B,EAC9B,kBAA0B;IAE1B,IAAI,CAAC,GAAG,EAAE,OAAO;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC7F,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,sBAAsB,CAC7B,GAA+B,EAC/B,kBAA0B;IAE1B,IAAI,CAAC,GAAG,EAAE,OAAO;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC7F,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,wBAAwB,CAC/B,GAAiC,EACjC,kBAA0B;IAE1B,IAAI,CAAC,GAAG,EAAE,OAAO;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC7F,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,UAAU,CACjB,UAAkB,EAClB,MAA6B,EAC7B,gBAAoC;IAEpC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,WAAW,UAAU,2FAA2F,CACjH,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC;IAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,gBAAgB,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;YAC1C,MAAM,IAAI,wBAAwB,CAAC;gBACjC,kBAAkB,CAChB,sBAAsB,EACtB,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;oBACf,CAAC,CAAC,uDAAuD;oBACzD,CAAC,CAAC,6BAA6B,EACjC,eAAe,UAAU,sBAAsB,CAChD;aACF,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,UAAU;YACV,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,CAAC;YACjB,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,gBAAgB,CAAC,CAAC;IACnE,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QAC1C,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,sBAAsB,EACtB,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;gBACf,CAAC,CAAC,8EAA8E;gBAChF,CAAC,CAAC,oCAAoC,EACxC,eAAe,UAAU,sBAAsB,CAChD;SACF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,gBAAgB,GAAG,MAAM,CAC7B,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,gBAAgB,CACpD,CAAC;IACF,IAAI,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,2BAA2B,EAC3B,8DAA8D,EAC9D,eAAe,UAAU,2BAA2B,CACrD;SACF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,cAAc,GAAG,MAAM,CAC3B,MAAM,CAAC,6BAA6B,IAAI,MAAM,CAAC,2BAA2B,CAC3E,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,8BAA8B,EAC9B,8DAA8D,EAC9D,eAAe,UAAU,uCAAuC,CACjE;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,iBAAiB,CACxB,UAAkB,EAClB,MAA6B,EAC7B,iBAA0B;IAE1B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,uBAAuB,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC;IAC/C,MAAM,gBAAgB,GAAG,MAAM,CAC7B,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,eAAe,CAC9E,CAAC;IACF,MAAM,iBAAiB,GAAG,MAAM,CAC9B,MAAM,CAAC,6BAA6B,IAAI,MAAM,CAAC,2BAA2B,CAC3E,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,aAAa,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,IACE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAClC,iBAAiB,IAAI,CAAC;YACtB,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,EACpC,CAAC;YACD,MAAM,IAAI,wBAAwB,CAAC;gBACjC,kBAAkB,CAChB,8BAA8B,EAC9B,8DAA8D,EAC9D,eAAe,UAAU,uCAAuC,CACjE;aACF,CAAC,CAAC;QACL,CAAC;QACD,MAAM,cAAc,GAClB,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,IACE,iBAAiB;YACjB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAC3D,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,2CAA2C,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC;IACvC,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,2BAA2B,EAC3B,8DAA8D,EAC9D,eAAe,UAAU,2BAA2B,CACrD;SACF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,cAAc,GAAG,iBAAiB,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,8BAA8B,EAC9B,8DAA8D,EAC9D,eAAe,UAAU,uCAAuC,CACjE;SACF,CAAC,CAAC;IACL,CAAC;IACD,IACE,iBAAiB;QACjB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAC3D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,2CAA2C,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAkB,EAAE,GAAuB;IACxE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,6BAA6B,EAC7B,6DAA6D,EAC7D,eAAe,UAAU,sBAAsB,CAChD;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAChB,UAAkB,EAClB,GAAY,EACZ,SAAiB,EACjB,kBAA0B;IAE1B,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAC7B,eAAe,UAAU,IAAI,kBAAkB,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;IAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QAC1C,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,qBAAqB,EACrB,oCAAoC,EACpC,IAAI,CAAC,aAAa,CAAC,CACpB;SACF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;QACpE,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,qBAAqB,EACrB,iDAAiD,EACjD,IAAI,CAAC,aAAa,CAAC,CACpB;SACF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,wBAAwB,CAAC;YACjC,kBAAkB,CAChB,kBAAkB,EAClB,kCAAkC,EAClC,IAAI,CAAC,UAAU,CAAC,CACjB;SACF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,IAAK,GAA+B,CAAC,aAAa,CAAC;IACjF,MAAM,aAAa,GACjB,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,IAAI,GAAY,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IAC3G,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAClB,IAAY,EACZ,GAAc,EACd,qBAA6B,CAAC;IAE9B,MAAM,cAAc,GAClB,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEtF,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;IAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,mCAAmC,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,UAAU,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,kDAAkD,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,+FAA+F,CAC/G,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC/E,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAC/F,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;IAChG,MAAM,mBAAmB,GAAG,wBAAwB,CAClD,GAAG,CAAC,MAAM,EAAE,eAAe,EAC3B,kBAAkB,CACnB,CAAC;IAEF,OAAO;QACL,KAAK;QACL,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,sBAAsB,EAAE,EAAE,CAAC,gBAAgB;QAC3C,sBAAsB,EAAE,EAAE,CAAC,cAAc;QACzC,mBAAmB,EAAE,EAAE,CAAC,aAAa;QACrC,sBAAsB,EAAE,EAAE,CAAC,cAAc;QACzC,iBAAiB;QACjB,GAAG,CAAC,iBAAiB,IAAI,EAAE,iBAAiB,EAAE,CAAC;QAC/C,GAAG,CAAC,iBAAiB,IAAI,EAAE,iBAAiB,EAAE,CAAC;QAC/C,GAAG,CAAC,mBAAmB,IAAI,EAAE,mBAAmB,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAY,EACZ,GAAc,EACd,qBAA6B,CAAC;IAE9B,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,+FAA+F,CAC/G,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,GAAG,CAAC,MAAO,CAAC,KAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IACtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,UAAU,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,yDAAyD,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAC/F,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;IAChG,MAAM,mBAAmB,GAAG,wBAAwB,CAClD,GAAG,CAAC,MAAM,EAAE,eAAe,EAC3B,kBAAkB,CACnB,CAAC;IAEF,OAAO;QACL,KAAK;QACL,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,sBAAsB,EAAE,EAAE,CAAC,gBAAgB;QAC3C,sBAAsB,EAAE,EAAE,CAAC,cAAc;QACzC,mBAAmB,EAAE,EAAE,CAAC,aAAa;QACrC,sBAAsB,EAAE,EAAE,CAAC,cAAc;QACzC,iBAAiB;QACjB,GAAG,CAAC,iBAAiB,IAAI,EAAE,iBAAiB,EAAE,CAAC;QAC/C,GAAG,CAAC,iBAAiB,IAAI,EAAE,iBAAiB,EAAE,CAAC;QAC/C,GAAG,CAAC,mBAAmB,IAAI,EAAE,mBAAmB,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAoB;IACvD,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;IACnD,uBAAuB,CAAC,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;IACrF,MAAM,UAAU,GAAG,eAAe,GAAG,IAAI,CAAC;IAC1C,MAAM,kBAAkB,GAAG,UAAU,GAAG,MAAM,CAAC;IAC/C,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IACzC,MAAM,OAAO,GAAoC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,4BAA4B,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACxG,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Phase 1 / phase 2 scalar parsing and validation from raw preset YAML.
3
+ */
4
+ import type { RawPhase1, RawPhase2 } from "./raw-types.js";
5
+ export declare function readPhase1(presetName: string, phase1: RawPhase1 | undefined, presetMaxLossPct: number | undefined): {
6
+ maxLossPct: number;
7
+ retraceThreshold: number;
8
+ phase1Breaches: number;
9
+ phase1Enabled: boolean;
10
+ };
11
+ export declare function readPhase2Scalars(presetName: string, phase2: RawPhase2 | undefined, requireTiersArray: boolean): {
12
+ phase2Retrace: number;
13
+ phase2Breaches: number;
14
+ phase2Enabled: boolean;
15
+ };
16
+ export declare function readPhase2TriggerTier(presetName: string, raw: number | undefined): number;
17
+ //# sourceMappingURL=parse-phase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-phase.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/parse-phase.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3D,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,gBAAgB,EAAE,MAAM,GAAG,SAAS,GACnC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAgElG;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,iBAAiB,EAAE,OAAO,GACzB;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAiE3E;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAWzF"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Phase 1 / phase 2 scalar parsing and validation from raw preset YAML.
3
+ */
4
+ import { DslConfigValidationError, dslValidationIssue } from "./validation.js";
5
+ export function readPhase1(presetName, phase1, presetMaxLossPct) {
6
+ if (!phase1 || typeof phase1 !== "object") {
7
+ throw new Error(`preset "${presetName}": phase1 is required with max_loss_pct, retrace_threshold, consecutive_breaches_required`);
8
+ }
9
+ const phase1Enabled = phase1.enabled !== false;
10
+ if (!phase1Enabled) {
11
+ const maxLossPct = Number(phase1.max_loss_pct ?? presetMaxLossPct ?? 1);
12
+ if (!(maxLossPct > 0) || maxLossPct > 100) {
13
+ throw new DslConfigValidationError([
14
+ dslValidationIssue("INVALID_MAX_LOSS_PCT", !(maxLossPct > 0)
15
+ ? "max_loss_pct must be > 0 when phase1.enabled is false"
16
+ : "max_loss_pct must be <= 100", `dsl_presets.${presetName}.phase1.max_loss_pct`),
17
+ ]);
18
+ }
19
+ return {
20
+ maxLossPct,
21
+ retraceThreshold: 1,
22
+ phase1Breaches: 1,
23
+ phase1Enabled: false,
24
+ };
25
+ }
26
+ const maxLossPct = Number(phase1.max_loss_pct ?? presetMaxLossPct);
27
+ if (!(maxLossPct > 0) || maxLossPct > 100) {
28
+ throw new DslConfigValidationError([
29
+ dslValidationIssue("INVALID_MAX_LOSS_PCT", !(maxLossPct > 0)
30
+ ? "phase1.max_loss_pct is required and must be > 0 (or set preset max_loss_pct)"
31
+ : "phase1.max_loss_pct must be <= 100", `dsl_presets.${presetName}.phase1.max_loss_pct`),
32
+ ]);
33
+ }
34
+ const retraceThreshold = Number(phase1.retrace_threshold ?? phase1.retraceThreshold);
35
+ if (!(retraceThreshold > 0)) {
36
+ throw new DslConfigValidationError([
37
+ dslValidationIssue("INVALID_RETRACE_THRESHOLD", "phase1.retrace_threshold is required and must be > 0 (ROE %)", `dsl_presets.${presetName}.phase1.retrace_threshold`),
38
+ ]);
39
+ }
40
+ const phase1Breaches = Number(phase1.consecutive_breaches_required ?? phase1.consecutiveBreachesRequired);
41
+ if (!Number.isFinite(phase1Breaches) || phase1Breaches < 1 || !Number.isInteger(phase1Breaches)) {
42
+ throw new DslConfigValidationError([
43
+ dslValidationIssue("INVALID_CONSECUTIVE_BREACHES", "phase1.consecutive_breaches_required must be an integer >= 1", `dsl_presets.${presetName}.phase1.consecutive_breaches_required`),
44
+ ]);
45
+ }
46
+ return { maxLossPct, retraceThreshold, phase1Breaches, phase1Enabled: true };
47
+ }
48
+ export function readPhase2Scalars(presetName, phase2, requireTiersArray) {
49
+ if (!phase2 || typeof phase2 !== "object") {
50
+ throw new Error(`preset "${presetName}": phase2 is required`);
51
+ }
52
+ const phase2Enabled = phase2.enabled !== false;
53
+ const phase2RetraceRaw = Number(phase2.retrace_threshold ?? phase2.retraceThreshold ?? phase2.retrace_from_hw);
54
+ const phase2BreachesRaw = Number(phase2.consecutive_breaches_required ?? phase2.consecutiveBreachesRequired);
55
+ if (!phase2Enabled) {
56
+ const phase2Retrace = phase2RetraceRaw > 0 ? phase2RetraceRaw : 1;
57
+ if (Number.isFinite(phase2BreachesRaw) &&
58
+ phase2BreachesRaw >= 1 &&
59
+ !Number.isInteger(phase2BreachesRaw)) {
60
+ throw new DslConfigValidationError([
61
+ dslValidationIssue("INVALID_CONSECUTIVE_BREACHES", "phase2.consecutive_breaches_required must be an integer >= 1", `dsl_presets.${presetName}.phase2.consecutive_breaches_required`),
62
+ ]);
63
+ }
64
+ const phase2Breaches = Number.isFinite(phase2BreachesRaw) && phase2BreachesRaw >= 1 ? phase2BreachesRaw : 1;
65
+ if (requireTiersArray &&
66
+ (!Array.isArray(phase2.tiers) || phase2.tiers.length === 0)) {
67
+ throw new Error(`preset "${presetName}": phase2.tiers must be a non-empty array`);
68
+ }
69
+ return { phase2Retrace, phase2Breaches, phase2Enabled: false };
70
+ }
71
+ const phase2Retrace = phase2RetraceRaw;
72
+ if (!(phase2Retrace > 0)) {
73
+ throw new DslConfigValidationError([
74
+ dslValidationIssue("INVALID_RETRACE_THRESHOLD", "phase2.retrace_threshold is required and must be > 0 (ROE %)", `dsl_presets.${presetName}.phase2.retrace_threshold`),
75
+ ]);
76
+ }
77
+ const phase2Breaches = phase2BreachesRaw;
78
+ if (!Number.isFinite(phase2Breaches) || phase2Breaches < 1 || !Number.isInteger(phase2Breaches)) {
79
+ throw new DslConfigValidationError([
80
+ dslValidationIssue("INVALID_CONSECUTIVE_BREACHES", "phase2.consecutive_breaches_required must be an integer >= 1", `dsl_presets.${presetName}.phase2.consecutive_breaches_required`),
81
+ ]);
82
+ }
83
+ if (requireTiersArray &&
84
+ (!Array.isArray(phase2.tiers) || phase2.tiers.length === 0)) {
85
+ throw new Error(`preset "${presetName}": phase2.tiers must be a non-empty array`);
86
+ }
87
+ return { phase2Retrace, phase2Breaches, phase2Enabled: true };
88
+ }
89
+ export function readPhase2TriggerTier(presetName, raw) {
90
+ if (typeof raw !== "number" || !Number.isInteger(raw) || raw < 0) {
91
+ throw new DslConfigValidationError([
92
+ dslValidationIssue("INVALID_PHASE2_TRIGGER_TIER", "phase2_trigger_tier is required and must be an integer >= 0", `dsl_presets.${presetName}.phase2_trigger_tier`),
93
+ ]);
94
+ }
95
+ return raw;
96
+ }
97
+ //# sourceMappingURL=parse-phase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-phase.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-phase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parse full exit block into runtime DslPluginConfig.
3
+ */
4
+ import type { DslPluginConfig } from "../../types/dsl/index.js";
5
+ import type { ExitBlockConfig } from "./exit-block.js";
6
+ export declare function parseDslPluginConfig(raw: ExitBlockConfig): DslPluginConfig;
7
+ export declare function getDefaultIntervalMs(): number;
8
+ //# sourceMappingURL=parse-plugin-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-plugin-config.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/parse-plugin-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,0BAA0B,CAAC;AAOjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIvD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CAoB1E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Parse full exit block into runtime DslPluginConfig.
3
+ */
4
+ import { MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS, DEFAULT_INTERVAL_MS, } from "../../constants/dsl/index.js";
5
+ import { validateIntervalSeconds } from "./validation.js";
6
+ import { parsePreset } from "./parse-preset.js";
7
+ import { validateExitBlockConfigUnknownKeys } from "./unknown-keys.js";
8
+ export function parseDslPluginConfig(raw) {
9
+ validateExitBlockConfigUnknownKeys(raw);
10
+ const intervalSeconds = raw.interval_seconds ?? 30;
11
+ validateIntervalSeconds(intervalSeconds, MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS);
12
+ const intervalMs = intervalSeconds * 1000;
13
+ const minIntervalMinutes = intervalMs / 60_000;
14
+ const presetsRaw = raw.dsl_presets ?? {};
15
+ const presets = {};
16
+ for (const [name, p] of Object.entries(presetsRaw)) {
17
+ if (p && typeof p === "object")
18
+ presets[name] = parsePreset(name, p, minIntervalMinutes);
19
+ }
20
+ const presetKeys = Object.keys(presets);
21
+ if (presetKeys.length === 0) {
22
+ throw new Error("At least one dsl_presets entry is required");
23
+ }
24
+ const preset = typeof raw.preset === "string" ? raw.preset : presetKeys[0];
25
+ if (!presets[preset]) {
26
+ throw new Error(`Preset "${preset}" not found in dsl_presets`);
27
+ }
28
+ return { intervalMs, preset, presets };
29
+ }
30
+ export function getDefaultIntervalMs() {
31
+ return DEFAULT_INTERVAL_MS;
32
+ }
33
+ //# sourceMappingURL=parse-plugin-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-plugin-config.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-plugin-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,kCAAkC,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,UAAU,oBAAoB,CAAC,GAAoB;IACvD,kCAAkC,CAAC,GAA8B,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;IACnD,uBAAuB,CAAC,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;IACrF,MAAM,UAAU,GAAG,eAAe,GAAG,IAAI,CAAC;IAC1C,MAAM,kBAAkB,GAAG,UAAU,GAAG,MAAM,CAAC;IAC/C,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IACzC,MAAM,OAAO,GAAoC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,4BAA4B,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Full preset parsing: tiers + phase1/phase2 (legacy tiers vs phase2.tiers layouts).
3
+ */
4
+ import type { DslPresetConfig } from "../../types/dsl/index.js";
5
+ import type { RawPreset } from "./raw-types.js";
6
+ export declare function parsePreset(name: string, raw: RawPreset, minIntervalMinutes?: number): DslPresetConfig;
7
+ //# sourceMappingURL=parse-preset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-preset.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/parse-preset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,SAAS,EACd,kBAAkB,GAAE,MAAU,GAC7B,eAAe,CA+CjB"}