@senpi/trading-recipe 1.0.42 → 1.0.44

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 (126) hide show
  1. package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -1
  2. package/dist/actions/position-tracker/position-tracker.action.js +15 -14
  3. package/dist/actions/position-tracker/position-tracker.action.js.map +1 -1
  4. package/dist/cli/guide-commands.d.ts.map +1 -1
  5. package/dist/cli/guide-commands.js +63 -62
  6. package/dist/cli/guide-commands.js.map +1 -1
  7. package/dist/constants/dsl/index.d.ts +11 -7
  8. package/dist/constants/dsl/index.d.ts.map +1 -1
  9. package/dist/constants/dsl/index.js +11 -7
  10. package/dist/constants/dsl/index.js.map +1 -1
  11. package/dist/dsl/config/exit-block.d.ts +2 -0
  12. package/dist/dsl/config/exit-block.d.ts.map +1 -1
  13. package/dist/dsl/config/parse-phase.d.ts +0 -3
  14. package/dist/dsl/config/parse-phase.d.ts.map +1 -1
  15. package/dist/dsl/config/parse-phase.js +12 -45
  16. package/dist/dsl/config/parse-phase.js.map +1 -1
  17. package/dist/dsl/config/parse-plugin-config.d.ts.map +1 -1
  18. package/dist/dsl/config/parse-plugin-config.js +28 -4
  19. package/dist/dsl/config/parse-plugin-config.js.map +1 -1
  20. package/dist/dsl/config/parse-preset.d.ts.map +1 -1
  21. package/dist/dsl/config/parse-preset.js +36 -22
  22. package/dist/dsl/config/parse-preset.js.map +1 -1
  23. package/dist/dsl/config/parse-tiers.d.ts.map +1 -1
  24. package/dist/dsl/config/parse-tiers.js +11 -10
  25. package/dist/dsl/config/parse-tiers.js.map +1 -1
  26. package/dist/dsl/config/parse-timeouts.d.ts +11 -6
  27. package/dist/dsl/config/parse-timeouts.d.ts.map +1 -1
  28. package/dist/dsl/config/parse-timeouts.js +4 -4
  29. package/dist/dsl/config/parse-timeouts.js.map +1 -1
  30. package/dist/dsl/config/raw-types.d.ts +14 -18
  31. package/dist/dsl/config/raw-types.d.ts.map +1 -1
  32. package/dist/dsl/config/unknown-keys.d.ts +1 -5
  33. package/dist/dsl/config/unknown-keys.d.ts.map +1 -1
  34. package/dist/dsl/config/unknown-keys.js +42 -26
  35. package/dist/dsl/config/unknown-keys.js.map +1 -1
  36. package/dist/dsl/config/validation.d.ts +1 -1
  37. package/dist/dsl/config/validation.d.ts.map +1 -1
  38. package/dist/dsl/config/validation.js.map +1 -1
  39. package/dist/dsl/engine/exchange-stop.d.ts +2 -3
  40. package/dist/dsl/engine/exchange-stop.d.ts.map +1 -1
  41. package/dist/dsl/engine/exchange-stop.js +2 -3
  42. package/dist/dsl/engine/exchange-stop.js.map +1 -1
  43. package/dist/dsl/engine/floors.d.ts +3 -5
  44. package/dist/dsl/engine/floors.d.ts.map +1 -1
  45. package/dist/dsl/engine/floors.js +14 -31
  46. package/dist/dsl/engine/floors.js.map +1 -1
  47. package/dist/dsl/engine/state-updates.d.ts.map +1 -1
  48. package/dist/dsl/engine/state-updates.js +2 -2
  49. package/dist/dsl/engine/state-updates.js.map +1 -1
  50. package/dist/dsl/engine/tick.d.ts.map +1 -1
  51. package/dist/dsl/engine/tick.js +66 -52
  52. package/dist/dsl/engine/tick.js.map +1 -1
  53. package/dist/dsl/events/handlers.d.ts +5 -2
  54. package/dist/dsl/events/handlers.d.ts.map +1 -1
  55. package/dist/dsl/events/handlers.js +117 -9
  56. package/dist/dsl/events/handlers.js.map +1 -1
  57. package/dist/dsl/events/initial-state.d.ts +0 -2
  58. package/dist/dsl/events/initial-state.d.ts.map +1 -1
  59. package/dist/dsl/events/initial-state.js +8 -20
  60. package/dist/dsl/events/initial-state.js.map +1 -1
  61. package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
  62. package/dist/dsl/monitor/create-monitor.js +11 -13
  63. package/dist/dsl/monitor/create-monitor.js.map +1 -1
  64. package/dist/dsl/monitor/exchange-sync.js +2 -2
  65. package/dist/dsl/monitor/exchange-sync.js.map +1 -1
  66. package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
  67. package/dist/dsl/monitor/process-one-position.js +20 -10
  68. package/dist/dsl/monitor/process-one-position.js.map +1 -1
  69. package/dist/dsl/plugin/index.d.ts +3 -2
  70. package/dist/dsl/plugin/index.d.ts.map +1 -1
  71. package/dist/dsl/plugin/index.js +45 -128
  72. package/dist/dsl/plugin/index.js.map +1 -1
  73. package/dist/dsl/plugin/options.d.ts +0 -2
  74. package/dist/dsl/plugin/options.d.ts.map +1 -1
  75. package/dist/runtime/create-runtime-context.d.ts +1 -1
  76. package/dist/runtime/create-runtime-context.d.ts.map +1 -1
  77. package/dist/runtime/load-trading-recipe.js +1 -1
  78. package/dist/runtime/load-trading-recipe.js.map +1 -1
  79. package/dist/runtime/map-exit-config.d.ts +2 -2
  80. package/dist/runtime/map-exit-config.d.ts.map +1 -1
  81. package/dist/runtime/map-exit-config.js +28 -19
  82. package/dist/runtime/map-exit-config.js.map +1 -1
  83. package/dist/runtime/reconcile-state.d.ts.map +1 -1
  84. package/dist/runtime/reconcile-state.js +36 -33
  85. package/dist/runtime/reconcile-state.js.map +1 -1
  86. package/dist/runtime/runtime.js +1 -1
  87. package/dist/runtime/runtime.js.map +1 -1
  88. package/dist/runtime/trading-recipe-schema.d.ts +5722 -5770
  89. package/dist/runtime/trading-recipe-schema.d.ts.map +1 -1
  90. package/dist/runtime/trading-recipe-schema.js +14 -8
  91. package/dist/runtime/trading-recipe-schema.js.map +1 -1
  92. package/dist/scanners/__tests__/fixtures/strategy-monitor-scenarios.d.ts.map +1 -1
  93. package/dist/scanners/__tests__/fixtures/strategy-monitor-scenarios.js +1 -0
  94. package/dist/scanners/__tests__/fixtures/strategy-monitor-scenarios.js.map +1 -1
  95. package/dist/scanners/implementations/strategy-monitor.d.ts +2 -0
  96. package/dist/scanners/implementations/strategy-monitor.d.ts.map +1 -1
  97. package/dist/scanners/implementations/strategy-monitor.js +8 -0
  98. package/dist/scanners/implementations/strategy-monitor.js.map +1 -1
  99. package/dist/scanners/providers/factory.js +9 -5
  100. package/dist/scanners/providers/factory.js.map +1 -1
  101. package/dist/scripts/run-dsl-standalone-live.js +10 -17
  102. package/dist/scripts/run-dsl-standalone-live.js.map +1 -1
  103. package/dist/scripts/run-dsl-standalone-mock.js +10 -17
  104. package/dist/scripts/run-dsl-standalone-mock.js.map +1 -1
  105. package/dist/state/state-manager.d.ts +33 -15
  106. package/dist/state/state-manager.d.ts.map +1 -1
  107. package/dist/state/state-manager.js +196 -99
  108. package/dist/state/state-manager.js.map +1 -1
  109. package/dist/strategy/strategy-state.js +8 -5
  110. package/dist/strategy/strategy-state.js.map +1 -1
  111. package/dist/types/action.d.ts +1 -1
  112. package/dist/types/action.d.ts.map +1 -1
  113. package/dist/types/dsl/index.d.ts +41 -27
  114. package/dist/types/dsl/index.d.ts.map +1 -1
  115. package/dist/types/strategy.d.ts +1 -0
  116. package/dist/types/strategy.d.ts.map +1 -1
  117. package/examples/strategies/dsl-showcase.yaml +25 -26
  118. package/examples/strategies/dsl.yaml +13 -17
  119. package/examples/strategies/fox-minimal-loosened.yaml +23 -17
  120. package/examples/strategies/fox-minimal.yaml +13 -17
  121. package/examples/strategies/minimal.yaml +13 -17
  122. package/examples/strategies/viper.yaml +13 -17
  123. package/examples/strategies/wolf.yaml +22 -20
  124. package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +15 -19
  125. package/openclaw.plugin.json +1 -1
  126. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"position-tracker.action.d.ts","sourceRoot":"","sources":["../../../src/actions/position-tracker/position-tracker.action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,SAAS,EAGV,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAsJ7D,qBAAa,qBAAsB,YAAW,MAAM;IAMhD,OAAO,CAAC,OAAO;IALjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAG,kBAAkB,CAAU;gBAGhD,MAAM,EAAE,YAAY,EACZ,OAAO,EAAE,cAAc;IAK3B,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IA+DrD,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,IAAI;CAGb;AAID,eAAO,MAAM,sBAAsB,EAAE,aACO,CAAC;AAE7C,eAAO,MAAM,uBAAuB,EAAE,cAYrC,CAAC"}
1
+ {"version":3,"file":"position-tracker.action.d.ts","sourceRoot":"","sources":["../../../src/actions/position-tracker/position-tracker.action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,SAAS,EAGV,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA0J7D,qBAAa,qBAAsB,YAAW,MAAM;IAMhD,OAAO,CAAC,OAAO;IALjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAG,kBAAkB,CAAU;gBAGhD,MAAM,EAAE,YAAY,EACZ,OAAO,EAAE,cAAc;IAK3B,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IA+DrD,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,IAAI;CAGb;AAID,eAAO,MAAM,sBAAsB,EAAE,aACO,CAAC;AAE7C,eAAO,MAAM,uBAAuB,EAAE,cAYrC,CAAC"}
@@ -17,6 +17,18 @@ function dexField(dex) {
17
17
  const normalized = normalizeDex(dex);
18
18
  return normalized != null ? { dex: normalized } : {};
19
19
  }
20
+ function currentPositionFields(snapshot) {
21
+ return {
22
+ asset: snapshot.asset,
23
+ direction: snapshot.direction,
24
+ entryPrice: snapshot.entryPrice,
25
+ size: snapshot.size,
26
+ leverage: snapshot.leverage,
27
+ leverageType: snapshot.leverageType,
28
+ margin: snapshot.margin,
29
+ ...dexField(snapshot.dex),
30
+ };
31
+ }
20
32
  function mapPositionOpened(meta, address) {
21
33
  const { current } = meta;
22
34
  if (!current)
@@ -24,13 +36,8 @@ function mapPositionOpened(meta, address) {
24
36
  return {
25
37
  type: HOOK_EVENT.ON_POSITION_OPENED,
26
38
  data: {
27
- asset: current.asset,
28
- direction: current.direction,
29
- entryPrice: current.entryPrice,
30
- size: current.size,
31
- leverage: current.leverage,
32
39
  wallet: address,
33
- ...dexField(current.dex),
40
+ ...currentPositionFields(current),
34
41
  },
35
42
  };
36
43
  }
@@ -61,8 +68,7 @@ function mapPositionFlipped(meta, address) {
61
68
  szi: signedSize(current),
62
69
  entryPx: String(current.entryPrice),
63
70
  wallet: address,
64
- leverage: current.leverage,
65
- ...dexField(current.dex),
71
+ ...currentPositionFields(current),
66
72
  },
67
73
  };
68
74
  }
@@ -81,13 +87,8 @@ function mapPositionSizeChanged(hookType, meta, address) {
81
87
  return {
82
88
  type: hookType,
83
89
  data: {
84
- asset: current.asset,
85
- direction: current.direction,
86
- entryPrice: current.entryPrice,
87
- size: current.size,
88
- leverage: current.leverage,
89
90
  wallet: address,
90
- ...dexField(current.dex),
91
+ ...currentPositionFields(current),
91
92
  previousEntryPrice: previous.entryPrice,
92
93
  previousSize: previous.size,
93
94
  sizeDelta: current.size - previous.size,
@@ -1 +1 @@
1
- {"version":3,"file":"position-tracker.action.js","sourceRoot":"","sources":["../../../src/actions/position-tracker/position-tracker.action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"position-tracker.action.js","sourceRoot":"","sources":["../../../src/actions/position-tracker/position-tracker.action.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA8UH,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;AA+UH,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"}
@@ -145,70 +145,74 @@ Decision modes:
145
145
  No LLM call. Use with tight DSL stops to manage risk.
146
146
  `.trim();
147
147
  const DSL_TEXT = `
148
- DSL exit engine — two-phase trailing stop-loss
148
+ DSL exit engine — two-phase trailing stop-loss (DSL v2)
149
149
  ─────────────────────────────────────────────────────────────────────────────
150
150
 
151
151
  The DSL monitors open positions on a configurable interval and closes them
152
- when price breaches the computed floor. Tier floors use lock_hw_pct (% of
153
- current high-water ROE); the floor trails every tick in phase 2. Phase 1
154
- adds max_loss + phase1 retrace from high-water; optional time-based cuts.
152
+ when price breaches the computed floor or when preset time cuts fire.
153
+ Phase 1: max_loss absolute floor + phase1 retrace from high-water; consecutive
154
+ breach counting applies only in phase 1. Phase 2: tier floors from lock_hw_pct
155
+ (% of current high-water ROE); phase 2 begins when price crosses the first
156
+ tier (no phase2_trigger_tier). Optional hard_timeout, weak_peak_cut, and
157
+ dead_weight_cut live on the preset (not nested under phase1). hard_timeout
158
+ applies only in phase 1: entering phase 2 before the interval elapses cancels it;
159
+ same tick as first tier (phase 2) skips hard_timeout in favor of tier advance.
155
160
 
156
161
  exit:
157
162
  engine: dsl
158
- interval_seconds: 30 # how often the price monitor runs
159
-
160
- dsl_presets:
161
- <preset_name>:
162
- phase1: ...
163
- phase2_trigger_tier: 0
164
- phase2: ...
163
+ interval_seconds: 30
164
+
165
+ # Recommended: one flat preset (no nested map name).
166
+ dsl_preset:
167
+ hard_timeout: ... # optional; same level as phase1 / phase2
168
+ weak_peak_cut: ...
169
+ dead_weight_cut: ...
170
+ phase1: ...
171
+ phase2: ...
172
+
173
+ # Alternative: multiple named presets (set exit.preset when 2+ keys).
174
+ # dsl_presets:
175
+ # dsl: { phase1: ..., phase2: ... }
176
+ # aggressive: { ... }
177
+ # preset: dsl
165
178
 
166
179
  ──────────────────────────────────────────────────────────────────────────────
167
- Phase 1 — Fixed floor + high-water trailing (separate from phase 2)
168
- Active from entry until the tier at phase2_trigger_tier is crossed.
180
+ Phase 1 — Fixed floor + high-water trailing
169
181
  Floor = max(absolute_floor, trailing_floor). Absolute floor from max_loss_pct
170
182
  (entry × (1 − max_loss_pct/100/leverage) for LONG). Trailing uses phase1
171
- retrace_threshold (ROE %) from high-water — set explicitly; not inferred from tiers.
183
+ retrace_threshold (ROE %) from high-water.
172
184
 
173
185
  phase1:
174
- # enabled: false # optional; default true — false = skip Phase 1 floor/cuts; start in phase 2 (HW retrace only until tiers)
186
+ # enabled: false # optional; default true — false = skip Phase 1 logic; tiers can still advance
175
187
  max_loss_pct: 3.0 # e.g. 3% max loss at 1×
176
188
  retrace_threshold: 10 # ROE % retrace from HWM in phase 1 (required when enabled)
177
- consecutive_breaches_required: 3 # ticks below floor before exit (required when enabled)
178
- # Exchange SL in Phase 1 only: max_loss absolute floor; retrace/tier-tight exits use closePosition.
179
- # Optional time-based cuts (each: enabled, interval_in_minutes):
180
- # hard_timeout, weak_peak_cut (min_value ROE %), dead_weight_cut
189
+ consecutive_breaches_required: 3 # ticks below floor before exit in phase 1 only (required when enabled)
190
+ # Exchange SL in Phase 1: max_loss absolute floor only; tighter engine floors use closePosition.
181
191
 
182
192
  ──────────────────────────────────────────────────────────────────────────────
183
- Phase 2 — Tiers + trailing floor (high-water retrace)
184
- Starts when price reaches the tier at phase2_trigger_tier (0 = first tier; must be < number of tiers).
185
- Floor = max(tier_floor, trailing_floor). Retrace values are ROE %; the
186
- engine divides by leverage for price (e.g. 1.5% ROE at 10× = 0.15% below HW).
187
- Exchange SL: full effective floor is kept on the exchange (editPosition syncs tier/phase
188
- and floor moves). This absolute-only Phase 1 rule does not apply in Phase 2.
189
-
190
- phase2_trigger_tier: 0
193
+ Phase 2 — Tier floors (no per-tier breaches or retrace YAML)
194
+ Floor = tier floor from lock_hw_pct once the tier is active. Price below
195
+ effective floor closes immediately (no consecutive breach counter in phase 2).
196
+ Exchange SL tracks the full effective floor (editPosition on tier/phase and moves).
191
197
 
192
198
  phase2:
193
- # enabled: false # optional; default true — false = never switch to phase 2; tiers still apply in phase 1
194
- retrace_threshold: 1.5 # default ROE % retrace from HWM (required when phase 2 used)
195
- consecutive_breaches_required: 1 # required (per-tier breaches still required on each tier)
196
-
199
+ # enabled: false # optional; default true — false = never enter phase 2
197
200
  tiers:
198
- # trigger_pct = ROE % from entry that activates this tier
199
- # lock_hw_pct = required; % of current high-water ROE to lock (0–100); floor trails every tick in phase 2
200
- # breaches = required on every tier (consecutive breach ticks before exit)
201
- # retrace = ROE % retrace for this tier (overrides retrace_threshold)
202
- - { trigger_pct: 10, lock_hw_pct: 50, breaches: 1 }
203
- - { trigger_pct: 20, lock_hw_pct: 70, breaches: 1 }
204
- - { trigger_pct: 30, lock_hw_pct: 73, retrace: 1.2, breaches: 1 }
205
- - { trigger_pct: 50, lock_hw_pct: 80, retrace: 1.0, breaches: 1 }
201
+ # trigger_pct = ROE % from entry that activates this tier (strictly increasing list)
202
+ # lock_hw_pct = required; % of current high-water ROE to lock (0–100)
203
+ - { trigger_pct: 10, lock_hw_pct: 50 }
204
+ - { trigger_pct: 20, lock_hw_pct: 70 }
205
+
206
+ Legacy keys removed: phase2_trigger_tier; phase2.retrace_threshold / consecutive_breaches_required;
207
+ tier breaches / retrace; phase1-nested time cuts (use preset hard_timeout / weak_peak_cut / dead_weight_cut).
206
208
 
207
209
  ──────────────────────────────────────────────────────────────────────────────
208
210
  State and events
209
- Per-position state at {stateDir}/strategies/{id}/... . Close reason preserved
210
- on pendingClose retry (phase1_timeout, weak_peak_cut, dead_weight_cut, dsl_breach).
211
- Events: dsl.created, dsl.tier_advanced, dsl.sl_updated, dsl.phase_changed, position.closed
211
+ Per-position state under stateDir; on-disk version must match the runtime.
212
+ Close reasons include exchange_sl_hit, hard_timeout, weak_peak_cut, dead_weight_cut, dsl_breach, etc.
213
+ Close reason is preserved on pendingClose retry. DSL bus events: dsl.created, dsl.tier_advanced,
214
+ dsl.sl_updated, dsl.phase_changed, dsl.closed, dsl.deleted, and hook position.closed /
215
+ position.increased / position.decreased.
212
216
 
213
217
  ──────────────────────────────────────────────────────────────────────────────
214
218
  Commands
@@ -266,17 +270,18 @@ actions[]
266
270
  exit
267
271
  engine string No dsl
268
272
  interval_seconds number No Default 30; integer 5–3600 (Zod + DSL parse)
269
- preset string No Default preset name (first dsl_presets key if omitted)
270
- dsl_presets object No Presets keyed by name (preferred)
273
+ dsl_preset object No Single exit profile (preferred). Mutually exclusive with dsl_presets / dsl
274
+ preset string No Required when dsl_presets has 2+ keys; with dsl_preset defaults to dsl
275
+ dsl_presets object No Named preset map (advanced; use exit.preset to choose)
271
276
  dsl object No Legacy alias for dsl_presets
272
277
  sm_flip any No Non-DSL exit hook data (allowed; ignored by DSL parse)
273
278
 
274
- Preset: phase1 (optional enabled; max_loss_pct, retrace_threshold ROE %,
275
- consecutive_breaches_required; optional time cuts), phase2_trigger_tier
276
- (required int 0 and < tier count), phase2 (optional enabled; retrace_threshold ROE %,
277
- consecutive_breaches_required, tiers). phase1.enabled and phase2.enabled
278
- cannot both be false. Each tier must include lock_hw_pct [0,100] and breaches
279
- (≥ 1). Unknown keys under exit / presets / phase1 / phase2 / tiers throw
279
+ Preset: max_loss_pct (or phase1.max_loss_pct), phase1 (optional enabled;
280
+ max_loss_pct, retrace_threshold ROE %, consecutive_breaches_required),
281
+ phase2 (optional enabled; tiers only trigger_pct, lock_hw_pct per row),
282
+ optional hard_timeout / weak_peak_cut / dead_weight_cut at preset root.
283
+ phase1.enabled and phase2.enabled cannot both be false. Each tier row:
284
+ lock_hw_pct [0,100]. Unknown keys under exit / presets / phase1 / phase2 / tiers throw
280
285
  DslConfigValidationError (UNKNOWN_DSL_CONFIG_KEY) at load. DSL parse also
281
286
  enforces strictly increasing trigger_pct per tier list, bounds on
282
287
  interval/max_loss/trigger/lock_hw, and integer breach counts; see dsl-reference
@@ -317,18 +322,14 @@ actions:
317
322
  exit:
318
323
  engine: dsl
319
324
  interval_seconds: 60
320
- dsl_presets:
321
- default:
322
- phase1:
323
- consecutive_breaches_required: 3
324
- max_loss_pct: 5.0
325
- retrace_threshold: 10
326
- phase2_trigger_tier: 0
327
- phase2:
328
- retrace_threshold: 1.5
329
- consecutive_breaches_required: 1
330
- tiers:
331
- - { trigger_pct: 1, lock_hw_pct: 50, breaches: 1 }
325
+ dsl_preset:
326
+ phase1:
327
+ consecutive_breaches_required: 3
328
+ max_loss_pct: 5.0
329
+ retrace_threshold: 10
330
+ phase2:
331
+ tiers:
332
+ - { trigger_pct: 1, lock_hw_pct: 50 }
332
333
  `.trim();
333
334
  /**
334
335
  * 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":"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"}
1
+ {"version":3,"file":"guide-commands.js","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,13 @@
2
2
  * Centralized constants for the DSL feature.
3
3
  */
4
4
  export declare const COMPONENT_TYPE_EXIT_DSL: "exit/dsl";
5
- /** DSL subscribes to the same hook event names as the rest of the runtime. */
5
+ /** DSL subscribes to the same hook event names as the rest of the runtime, plus size-change events. */
6
6
  export declare const EVENTS: {
7
7
  readonly POSITION_OPENED: "on_position_opened";
8
8
  readonly POSITION_CLOSED: "on_position_closed";
9
9
  readonly POSITION_FLIPPED: "on_position_flipped";
10
+ readonly POSITION_INCREASED: "position.increased";
11
+ readonly POSITION_DECREASED: "position.decreased";
10
12
  };
11
13
  export declare const DSL_EVENTS: {
12
14
  readonly CREATED: "dsl.created";
@@ -16,23 +18,25 @@ export declare const DSL_EVENTS: {
16
18
  readonly CLOSED: "dsl.closed";
17
19
  readonly CLOSE_PENDING: "dsl.close_pending";
18
20
  readonly SETTINGS_UPDATED: "dsl.settings_updated";
21
+ readonly DELETED: "dsl.deleted";
19
22
  };
20
23
  export declare const DEFAULT_STATE_DIR = ".dsl-state";
21
- export declare const DSL_STATE_VERSION = 2;
24
+ /** On-disk DSL state schema version (v1 = DSL engine v2; no migration from older files). */
25
+ export declare const DSL_STATE_VERSION = 1;
22
26
  /** Close reasons for DSL state (closeReason) and position.closed (reason). */
23
27
  export declare const CLOSE_REASON: {
24
28
  readonly MANUAL_CLOSE: "manual_close";
25
29
  readonly CLOSED_EXTERNALLY: "closed_externally";
26
- readonly SL_HIT: "sl_hit";
30
+ readonly EXCHANGE_SL_HIT: "exchange_sl_hit";
27
31
  readonly DSL_BREACH: "dsl_breach";
28
32
  readonly FLIPPED: "flipped";
29
33
  readonly CLOSE_POSITION_FAILED: "close_position_failed";
30
- /** Phase 1 hard timeout elapsed. */
31
- readonly PHASE1_TIMEOUT: "phase1_timeout";
32
- /** Phase 1 weak peak cut (peak ROE below minValue and current < peak). */
34
+ readonly HARD_TIMEOUT: "hard_timeout";
33
35
  readonly WEAK_PEAK_CUT: "weak_peak_cut";
34
- /** Phase 1 dead weight cut (never gone positive after interval). */
35
36
  readonly DEAD_WEIGHT_CUT: "dead_weight_cut";
37
+ readonly POSITION_INCREASED: "position_increased";
38
+ readonly POSITION_DECREASED: "position_decreased";
39
+ readonly DSL_DELETED: "dsl_deleted";
36
40
  };
37
41
  export type CloseReason = (typeof CLOSE_REASON)[keyof typeof CLOSE_REASON];
38
42
  export declare const MIN_INTERVAL_SECONDS = 5;
@@ -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,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAChD,mFAAmF;AACnF,eAAO,MAAM,sCAAsC,IAAI,CAAC;AACxD,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"}
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,uGAAuG;AACvG,eAAO,MAAM,MAAM;;;;;;CAMT,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;;;;CASb,CAAC;AAEX,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,8EAA8E;AAC9E,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAaf,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,mFAAmF;AACnF,eAAO,MAAM,sCAAsC,IAAI,CAAC;AACxD,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"}
@@ -3,11 +3,13 @@
3
3
  */
4
4
  import { HOOK_EVENT } from "../../types/hooks.js";
5
5
  export const COMPONENT_TYPE_EXIT_DSL = "exit/dsl";
6
- /** DSL subscribes to the same hook event names as the rest of the runtime. */
6
+ /** DSL subscribes to the same hook event names as the rest of the runtime, plus size-change events. */
7
7
  export const EVENTS = {
8
8
  POSITION_OPENED: HOOK_EVENT.ON_POSITION_OPENED,
9
9
  POSITION_CLOSED: HOOK_EVENT.ON_POSITION_CLOSED,
10
10
  POSITION_FLIPPED: HOOK_EVENT.ON_POSITION_FLIPPED,
11
+ POSITION_INCREASED: "position.increased",
12
+ POSITION_DECREASED: "position.decreased",
11
13
  };
12
14
  export const DSL_EVENTS = {
13
15
  CREATED: "dsl.created",
@@ -17,23 +19,25 @@ export const DSL_EVENTS = {
17
19
  CLOSED: "dsl.closed",
18
20
  CLOSE_PENDING: "dsl.close_pending",
19
21
  SETTINGS_UPDATED: "dsl.settings_updated",
22
+ DELETED: "dsl.deleted",
20
23
  };
21
24
  export const DEFAULT_STATE_DIR = ".dsl-state";
22
- export const DSL_STATE_VERSION = 2;
25
+ /** On-disk DSL state schema version (v1 = DSL engine v2; no migration from older files). */
26
+ export const DSL_STATE_VERSION = 1;
23
27
  /** Close reasons for DSL state (closeReason) and position.closed (reason). */
24
28
  export const CLOSE_REASON = {
25
29
  MANUAL_CLOSE: "manual_close",
26
30
  CLOSED_EXTERNALLY: "closed_externally",
27
- SL_HIT: "sl_hit",
31
+ EXCHANGE_SL_HIT: "exchange_sl_hit",
28
32
  DSL_BREACH: "dsl_breach",
29
33
  FLIPPED: "flipped",
30
34
  CLOSE_POSITION_FAILED: "close_position_failed",
31
- /** Phase 1 hard timeout elapsed. */
32
- PHASE1_TIMEOUT: "phase1_timeout",
33
- /** Phase 1 weak peak cut (peak ROE below minValue and current < peak). */
35
+ HARD_TIMEOUT: "hard_timeout",
34
36
  WEAK_PEAK_CUT: "weak_peak_cut",
35
- /** Phase 1 dead weight cut (never gone positive after interval). */
36
37
  DEAD_WEIGHT_CUT: "dead_weight_cut",
38
+ POSITION_INCREASED: "position_increased",
39
+ POSITION_DECREASED: "position_decreased",
40
+ DSL_DELETED: "dsl_deleted",
37
41
  };
38
42
  export const MIN_INTERVAL_SECONDS = 5;
39
43
  /** Upper bound for `exit.interval_seconds` (validation spec). */
@@ -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,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,mFAAmF;AACnF,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC;AACxD,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"}
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,uGAAuG;AACvG,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,eAAe,EAAE,UAAU,CAAC,kBAAkB;IAC9C,eAAe,EAAE,UAAU,CAAC,kBAAkB;IAC9C,gBAAgB,EAAE,UAAU,CAAC,mBAAmB;IAChD,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;CAChC,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;IACxC,OAAO,EAAE,aAAa;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAC9C,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,qBAAqB,EAAE,uBAAuB;IAC9C,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,iBAAiB;IAClC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,WAAW,EAAE,aAAa;CAClB,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,mFAAmF;AACnF,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,CAAC;AACxD,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"}
@@ -6,6 +6,8 @@ export interface ExitBlockConfig {
6
6
  engine?: string;
7
7
  interval_seconds?: number;
8
8
  preset?: string;
9
+ /** Single preset; normalized to dsl_presets.dsl before parse (mutually exclusive with non-empty dsl_presets). */
10
+ dsl_preset?: RawPreset;
9
11
  dsl_presets?: Record<string, RawPreset>;
10
12
  }
11
13
  //# sourceMappingURL=exit-block.d.ts.map
@@ -1 +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"}
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,iHAAiH;IACjH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACzC"}
@@ -9,9 +9,6 @@ export declare function readPhase1(presetName: string, phase1: RawPhase1 | undef
9
9
  phase1Enabled: boolean;
10
10
  };
11
11
  export declare function readPhase2Scalars(presetName: string, phase2: RawPhase2 | undefined, requireTiersArray: boolean): {
12
- phase2Retrace: number;
13
- phase2Breaches: number;
14
12
  phase2Enabled: boolean;
15
13
  };
16
- export declare function readPhase2TriggerTier(presetName: string, raw: number | undefined, tiersLength: number): number;
17
14
  //# sourceMappingURL=parse-phase.d.ts.map
@@ -1 +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,CACnC,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,WAAW,EAAE,MAAM,GAClB,MAAM,CAuBR"}
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,CA8DlG;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,iBAAiB,EAAE,OAAO,GACzB;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,CA2B5B"}
@@ -50,56 +50,23 @@ export function readPhase2Scalars(presetName, phase2, requireTiersArray) {
50
50
  throw new Error(`preset "${presetName}": phase2 is required`);
51
51
  }
52
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)) {
53
+ const legacyKeys = [
54
+ "retrace_threshold",
55
+ "retraceThreshold",
56
+ "retrace_from_hw",
57
+ "consecutive_breaches_required",
58
+ "consecutiveBreachesRequired",
59
+ ];
60
+ for (const k of legacyKeys) {
61
+ if (phase2[k] != null) {
60
62
  throw new DslConfigValidationError([
61
- dslValidationIssue("INVALID_CONSECUTIVE_BREACHES", "phase2.consecutive_breaches_required must be an integer >= 1", `dsl_presets.${presetName}.phase2.consecutive_breaches_required`),
63
+ dslValidationIssue("LEGACY_PHASE2_FIELD", `phase2.${k} is no longer supported (phase 2 is exchange-SL driven; remove retrace and breach fields)`, `dsl_presets.${presetName}.phase2.${k}`),
62
64
  ]);
63
65
  }
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
66
  }
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)) {
67
+ if (requireTiersArray && (!Array.isArray(phase2.tiers) || phase2.tiers.length === 0)) {
85
68
  throw new Error(`preset "${presetName}": phase2.tiers must be a non-empty array`);
86
69
  }
87
- return { phase2Retrace, phase2Breaches, phase2Enabled: true };
88
- }
89
- export function readPhase2TriggerTier(presetName, raw, tiersLength) {
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
- if (tiersLength < 1) {
96
- throw new Error(`preset "${presetName}": cannot validate phase2_trigger_tier without tiers`);
97
- }
98
- if (raw >= tiersLength) {
99
- throw new DslConfigValidationError([
100
- dslValidationIssue("INVALID_PHASE2_TRIGGER_TIER", `phase2_trigger_tier must be less than the number of tiers (${tiersLength})`, `dsl_presets.${presetName}.phase2_trigger_tier`),
101
- ]);
102
- }
103
- return raw;
70
+ return { phase2Enabled };
104
71
  }
105
72
  //# sourceMappingURL=parse-phase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-phase.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-phase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-phase.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-phase.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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;AA2BvD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,eAAe,CA2B1E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
@@ -5,13 +5,33 @@ import { MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS, DEFAULT_INTERVAL_MS, } from
5
5
  import { validateIntervalSeconds } from "./validation.js";
6
6
  import { parsePreset } from "./parse-preset.js";
7
7
  import { validateExitBlockConfigUnknownKeys } from "./unknown-keys.js";
8
+ function normalizeExitBlockConfig(raw) {
9
+ const r = raw;
10
+ const single = r.dsl_preset;
11
+ const map = r.dsl_presets;
12
+ if (single != null && typeof single === "object" && !Array.isArray(single)) {
13
+ if (map != null && typeof map === "object" && Object.keys(map).length > 0) {
14
+ throw new Error("exit.dsl_preset and exit.dsl_presets cannot both be set; use one or the other");
15
+ }
16
+ const presetName = typeof raw.preset === "string" && raw.preset.length > 0 ? raw.preset : "dsl";
17
+ const out = {
18
+ ...raw,
19
+ dsl_presets: { [presetName]: single },
20
+ preset: presetName,
21
+ };
22
+ delete out.dsl_preset;
23
+ return out;
24
+ }
25
+ return raw;
26
+ }
8
27
  export function parseDslPluginConfig(raw) {
9
- validateExitBlockConfigUnknownKeys(raw);
10
- const intervalSeconds = raw.interval_seconds ?? 30;
28
+ const normalized = normalizeExitBlockConfig(raw);
29
+ validateExitBlockConfigUnknownKeys(normalized);
30
+ const intervalSeconds = normalized.interval_seconds ?? 30;
11
31
  validateIntervalSeconds(intervalSeconds, MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS);
12
32
  const intervalMs = intervalSeconds * 1000;
13
33
  const minIntervalMinutes = intervalMs / 60_000;
14
- const presetsRaw = raw.dsl_presets ?? {};
34
+ const presetsRaw = normalized.dsl_presets ?? {};
15
35
  const presets = {};
16
36
  for (const [name, p] of Object.entries(presetsRaw)) {
17
37
  if (p && typeof p === "object")
@@ -21,7 +41,11 @@ export function parseDslPluginConfig(raw) {
21
41
  if (presetKeys.length === 0) {
22
42
  throw new Error("At least one dsl_presets entry is required");
23
43
  }
24
- const preset = typeof raw.preset === "string" ? raw.preset : presetKeys[0];
44
+ if (presetKeys.length > 1 && typeof normalized.preset !== "string") {
45
+ throw new Error(`exit.preset is required when dsl_presets has more than one entry (keys: ${presetKeys.join(", ")}). ` +
46
+ `Set preset: "<name>" to select one, or use a single canonical preset key (recommended: dsl).`);
47
+ }
48
+ const preset = typeof normalized.preset === "string" ? normalized.preset : presetKeys[0];
25
49
  if (!presets[preset]) {
26
50
  throw new Error(`Preset "${preset}" not found in dsl_presets`);
27
51
  }
@@ -1 +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"}
1
+ {"version":3,"file":"parse-plugin-config.js","sourceRoot":"","sources":["../../../src/dsl/config/parse-plugin-config.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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;AAKhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA2ChD,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,SAAS,EACd,kBAAkB,GAAE,MAAU,GAC7B,eAAe,CAqCjB"}