@senpi/trading-recipe 1.0.29 → 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.
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +7 -3
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/dsl/config/parse-plugin-config.d.ts.map +1 -1
- package/dist/dsl/config/parse-plugin-config.js +2 -0
- package/dist/dsl/config/parse-plugin-config.js.map +1 -1
- package/dist/dsl/config/unknown-keys.d.ts +11 -0
- package/dist/dsl/config/unknown-keys.d.ts.map +1 -0
- package/dist/dsl/config/unknown-keys.js +156 -0
- package/dist/dsl/config/unknown-keys.js.map +1 -0
- package/dist/dsl/config/validation.d.ts +1 -1
- package/dist/dsl/config/validation.d.ts.map +1 -1
- package/dist/dsl/config/validation.js.map +1 -1
- package/dist/runtime/map-exit-config.d.ts.map +1 -1
- package/dist/runtime/map-exit-config.js +4 -0
- package/dist/runtime/map-exit-config.js.map +1 -1
- package/dist/runtime/trading-recipe-schema.d.ts +0 -144
- package/dist/runtime/trading-recipe-schema.d.ts.map +1 -1
- package/dist/runtime/trading-recipe-schema.js +0 -1
- package/dist/runtime/trading-recipe-schema.js.map +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;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"}
|
|
@@ -249,17 +249,21 @@ actions[]
|
|
|
249
249
|
exit
|
|
250
250
|
engine string No dsl
|
|
251
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)
|
|
252
253
|
dsl_presets object No Presets keyed by name (preferred)
|
|
253
254
|
dsl object No Legacy alias for dsl_presets
|
|
255
|
+
sm_flip any No Non-DSL exit hook data (allowed; ignored by DSL parse)
|
|
254
256
|
|
|
255
257
|
Preset: phase1 (optional enabled; max_loss_pct, retrace_threshold ROE %,
|
|
256
258
|
consecutive_breaches_required; optional time cuts), phase2_trigger_tier
|
|
257
259
|
(required int ≥ 0), phase2 (optional enabled; retrace_threshold ROE %,
|
|
258
260
|
consecutive_breaches_required, tiers). phase1.enabled and phase2.enabled
|
|
259
261
|
cannot both be false. Each tier must include lock_hw_pct [0,100] and breaches
|
|
260
|
-
(≥ 1).
|
|
261
|
-
|
|
262
|
-
|
|
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
|
|
263
267
|
|
|
264
268
|
Environment substitution: \${VAR} and \${VAR:-default} resolved at load time.
|
|
265
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEhB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,WAAW,GAAG
|
|
1
|
+
{"version":3,"file":"guide-commands.js","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,aAAa,GACjB,0EAA0E,CAAC;AAE7E,+EAA+E;AAE/E,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC;yBAClB,OAAO;;;;;;;;;;;;;;;;CAgB/B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwErB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCpB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
@@ -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;
|
|
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"}
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
import { MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS, DEFAULT_INTERVAL_MS, } from "../../constants/dsl/index.js";
|
|
5
5
|
import { validateIntervalSeconds } from "./validation.js";
|
|
6
6
|
import { parsePreset } from "./parse-preset.js";
|
|
7
|
+
import { validateExitBlockConfigUnknownKeys } from "./unknown-keys.js";
|
|
7
8
|
export function parseDslPluginConfig(raw) {
|
|
9
|
+
validateExitBlockConfigUnknownKeys(raw);
|
|
8
10
|
const intervalSeconds = raw.interval_seconds ?? 30;
|
|
9
11
|
validateIntervalSeconds(intervalSeconds, MIN_INTERVAL_SECONDS, MAX_INTERVAL_SECONDS);
|
|
10
12
|
const intervalMs = intervalSeconds * 1000;
|
|
@@ -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;
|
|
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,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reject unknown keys in exit / DSL YAML so typos are not silently ignored.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Validate raw `exit:` from the trading recipe (before map strips keys).
|
|
6
|
+
* Validates every preset map present (`dsl_presets` and/or `dsl`) so typos are caught even when one block is shadowed by the other at runtime.
|
|
7
|
+
*/
|
|
8
|
+
export declare function validateRawExitBlockAndPresetsUnknownKeys(exit: Record<string, unknown>): void;
|
|
9
|
+
/** Validate ExitBlockConfig for parseDslPluginConfig (normalized dsl_presets only). */
|
|
10
|
+
export declare function validateExitBlockConfigUnknownKeys(raw: Record<string, unknown>): void;
|
|
11
|
+
//# sourceMappingURL=unknown-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unknown-keys.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/unknown-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoJH;;;GAGG;AACH,wBAAgB,yCAAyC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAoB7F;AAED,uFAAuF;AACvF,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAcrF"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reject unknown keys in exit / DSL YAML so typos are not silently ignored.
|
|
3
|
+
*/
|
|
4
|
+
import { DslConfigValidationError, dslValidationIssue, } from "./validation.js";
|
|
5
|
+
/** Keys allowed on the trading recipe `exit:` object (YAML). */
|
|
6
|
+
const EXIT_RECIPE_KEYS = new Set([
|
|
7
|
+
"engine",
|
|
8
|
+
"interval_seconds",
|
|
9
|
+
"preset",
|
|
10
|
+
"dsl_presets",
|
|
11
|
+
"dsl",
|
|
12
|
+
"sm_flip",
|
|
13
|
+
]);
|
|
14
|
+
/** Keys allowed on ExitBlockConfig passed to parseDslPluginConfig (post-map). */
|
|
15
|
+
const EXIT_BLOCK_CONFIG_KEYS = new Set([
|
|
16
|
+
"engine",
|
|
17
|
+
"interval_seconds",
|
|
18
|
+
"preset",
|
|
19
|
+
"dsl_presets",
|
|
20
|
+
]);
|
|
21
|
+
const PRESET_KEYS = new Set([
|
|
22
|
+
"tiers",
|
|
23
|
+
"max_loss_pct",
|
|
24
|
+
"phase1",
|
|
25
|
+
"phase2_trigger_tier",
|
|
26
|
+
"phase2",
|
|
27
|
+
]);
|
|
28
|
+
const PHASE1_KEYS = new Set([
|
|
29
|
+
"enabled",
|
|
30
|
+
"consecutive_breaches_required",
|
|
31
|
+
"consecutiveBreachesRequired",
|
|
32
|
+
"max_loss_pct",
|
|
33
|
+
"retrace_threshold",
|
|
34
|
+
"retraceThreshold",
|
|
35
|
+
"hard_timeout",
|
|
36
|
+
"weak_peak_cut",
|
|
37
|
+
"dead_weight_cut",
|
|
38
|
+
]);
|
|
39
|
+
const PHASE2_KEYS = new Set([
|
|
40
|
+
"enabled",
|
|
41
|
+
"retrace_threshold",
|
|
42
|
+
"retraceThreshold",
|
|
43
|
+
"retrace_from_hw",
|
|
44
|
+
"consecutive_breaches_required",
|
|
45
|
+
"consecutiveBreachesRequired",
|
|
46
|
+
"tiers",
|
|
47
|
+
]);
|
|
48
|
+
const TIER_KEYS = new Set([
|
|
49
|
+
"trigger_pct",
|
|
50
|
+
"triggerPct",
|
|
51
|
+
"lock_hw_pct",
|
|
52
|
+
"lockHwPct",
|
|
53
|
+
"breaches",
|
|
54
|
+
"retrace",
|
|
55
|
+
"retraceFromHW",
|
|
56
|
+
]);
|
|
57
|
+
const HARD_TIMEOUT_KEYS = new Set(["enabled", "interval_in_minutes"]);
|
|
58
|
+
const WEAK_PEAK_KEYS = new Set(["enabled", "interval_in_minutes", "min_value"]);
|
|
59
|
+
const DEAD_WEIGHT_KEYS = new Set(["enabled", "interval_in_minutes"]);
|
|
60
|
+
function isPlainObject(v) {
|
|
61
|
+
return v != null && typeof v === "object" && !Array.isArray(v);
|
|
62
|
+
}
|
|
63
|
+
function unknownKeyList(obj, allowed) {
|
|
64
|
+
return Object.keys(obj).filter((k) => !allowed.has(k));
|
|
65
|
+
}
|
|
66
|
+
function addUnknownKeyIssues(issues, unknownKeys, pathPrefix) {
|
|
67
|
+
for (const key of unknownKeys) {
|
|
68
|
+
issues.push(dslValidationIssue("UNKNOWN_DSL_CONFIG_KEY", `unknown key "${key}" (check spelling; DSL ignores unrecognized fields)`, pathPrefix ? `${pathPrefix}.${key}` : key));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function validateTierAtPath(basePath, row, issues) {
|
|
72
|
+
if (!isPlainObject(row))
|
|
73
|
+
return;
|
|
74
|
+
addUnknownKeyIssues(issues, unknownKeyList(row, TIER_KEYS), basePath);
|
|
75
|
+
}
|
|
76
|
+
function validatePhase1AtPath(basePath, phase1, issues) {
|
|
77
|
+
if (!isPlainObject(phase1))
|
|
78
|
+
return;
|
|
79
|
+
addUnknownKeyIssues(issues, unknownKeyList(phase1, PHASE1_KEYS), basePath);
|
|
80
|
+
if (isPlainObject(phase1.hard_timeout)) {
|
|
81
|
+
addUnknownKeyIssues(issues, unknownKeyList(phase1.hard_timeout, HARD_TIMEOUT_KEYS), `${basePath}.hard_timeout`);
|
|
82
|
+
}
|
|
83
|
+
if (isPlainObject(phase1.weak_peak_cut)) {
|
|
84
|
+
addUnknownKeyIssues(issues, unknownKeyList(phase1.weak_peak_cut, WEAK_PEAK_KEYS), `${basePath}.weak_peak_cut`);
|
|
85
|
+
}
|
|
86
|
+
if (isPlainObject(phase1.dead_weight_cut)) {
|
|
87
|
+
addUnknownKeyIssues(issues, unknownKeyList(phase1.dead_weight_cut, DEAD_WEIGHT_KEYS), `${basePath}.dead_weight_cut`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function validatePhase2AtPath(basePath, phase2, issues) {
|
|
91
|
+
if (!isPlainObject(phase2))
|
|
92
|
+
return;
|
|
93
|
+
addUnknownKeyIssues(issues, unknownKeyList(phase2, PHASE2_KEYS), basePath);
|
|
94
|
+
const tiers = phase2.tiers;
|
|
95
|
+
if (Array.isArray(tiers)) {
|
|
96
|
+
tiers.forEach((row, i) => {
|
|
97
|
+
validateTierAtPath(`${basePath}.tiers[${i}]`, row, issues);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function validatePresetObject(presetPath, raw, issues) {
|
|
102
|
+
addUnknownKeyIssues(issues, unknownKeyList(raw, PRESET_KEYS), presetPath);
|
|
103
|
+
validatePhase1AtPath(`${presetPath}.phase1`, raw.phase1, issues);
|
|
104
|
+
validatePhase2AtPath(`${presetPath}.phase2`, raw.phase2, issues);
|
|
105
|
+
const tiers = raw.tiers;
|
|
106
|
+
if (Array.isArray(tiers)) {
|
|
107
|
+
tiers.forEach((row, i) => {
|
|
108
|
+
validateTierAtPath(`${presetPath}.tiers[${i}]`, row, issues);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Validate raw `exit:` from the trading recipe (before map strips keys).
|
|
114
|
+
* Validates every preset map present (`dsl_presets` and/or `dsl`) so typos are caught even when one block is shadowed by the other at runtime.
|
|
115
|
+
*/
|
|
116
|
+
export function validateRawExitBlockAndPresetsUnknownKeys(exit) {
|
|
117
|
+
const issues = [];
|
|
118
|
+
addUnknownKeyIssues(issues, unknownKeyList(exit, EXIT_RECIPE_KEYS), "exit");
|
|
119
|
+
if (exit.dsl_presets != null && isPlainObject(exit.dsl_presets)) {
|
|
120
|
+
for (const name of Object.keys(exit.dsl_presets)) {
|
|
121
|
+
const p = exit.dsl_presets[name];
|
|
122
|
+
if (!isPlainObject(p))
|
|
123
|
+
continue;
|
|
124
|
+
validatePresetObject(`exit.dsl_presets.${name}`, p, issues);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (exit.dsl != null && isPlainObject(exit.dsl)) {
|
|
128
|
+
for (const name of Object.keys(exit.dsl)) {
|
|
129
|
+
const p = exit.dsl[name];
|
|
130
|
+
if (!isPlainObject(p))
|
|
131
|
+
continue;
|
|
132
|
+
validatePresetObject(`exit.dsl.${name}`, p, issues);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (issues.length > 0) {
|
|
136
|
+
throw new DslConfigValidationError(issues);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/** Validate ExitBlockConfig for parseDslPluginConfig (normalized dsl_presets only). */
|
|
140
|
+
export function validateExitBlockConfigUnknownKeys(raw) {
|
|
141
|
+
const issues = [];
|
|
142
|
+
addUnknownKeyIssues(issues, unknownKeyList(raw, EXIT_BLOCK_CONFIG_KEYS), "exit");
|
|
143
|
+
const presets = raw.dsl_presets;
|
|
144
|
+
if (presets != null && isPlainObject(presets)) {
|
|
145
|
+
for (const name of Object.keys(presets)) {
|
|
146
|
+
const p = presets[name];
|
|
147
|
+
if (!isPlainObject(p))
|
|
148
|
+
continue;
|
|
149
|
+
validatePresetObject(`exit.dsl_presets.${name}`, p, issues);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (issues.length > 0) {
|
|
153
|
+
throw new DslConfigValidationError(issues);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=unknown-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unknown-keys.js","sourceRoot":"","sources":["../../../src/dsl/config/unknown-keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Exit DSL validation: interval bounds and structured errors for primitive field checks.
|
|
3
3
|
*/
|
|
4
|
-
export type DslValidationIssueCode = "INVALID_INTERVAL_SECONDS" | "INVALID_MAX_LOSS_PCT" | "INVALID_RETRACE_THRESHOLD" | "INVALID_TRIGGER_PCT" | "INVALID_LOCK_HW_PCT" | "INVALID_BREACHES" | "INVALID_CONSECUTIVE_BREACHES" | "INVALID_PHASE2_TRIGGER_TIER";
|
|
4
|
+
export type DslValidationIssueCode = "INVALID_INTERVAL_SECONDS" | "INVALID_MAX_LOSS_PCT" | "INVALID_RETRACE_THRESHOLD" | "INVALID_TRIGGER_PCT" | "INVALID_LOCK_HW_PCT" | "INVALID_BREACHES" | "INVALID_CONSECUTIVE_BREACHES" | "INVALID_PHASE2_TRIGGER_TIER" | "UNKNOWN_DSL_CONFIG_KEY";
|
|
5
5
|
export interface DslValidationIssue {
|
|
6
6
|
code: DslValidationIssueCode;
|
|
7
7
|
message: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,sBAAsB,GAC9B,0BAA0B,GAC1B,sBAAsB,GACtB,2BAA2B,GAC3B,qBAAqB,GACrB,qBAAqB,GACrB,kBAAkB,GAClB,8BAA8B,GAC9B,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/dsl/config/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,sBAAsB,GAC9B,0BAA0B,GAC1B,sBAAsB,GACtB,2BAA2B,GAC3B,qBAAqB,GACrB,qBAAqB,GACrB,kBAAkB,GAClB,8BAA8B,GAC9B,6BAA6B,GAC7B,wBAAwB,CAAC;AAE7B,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;gBAE1B,MAAM,EAAE,kBAAkB,EAAE;IAWxC,MAAM,IAAI;QAAE,MAAM,EAAE,kBAAkB,EAAE,CAAA;KAAE;CAG3C;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,sBAAsB,EAC5B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,kBAAkB,CAEpB;AAgBD,6DAA6D;AAC7D,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,IAAI,CAyBN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/dsl/config/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/dsl/config/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,MAAM,CAAuB;IAEtC,YAAY,MAA4B;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,OAAO,GACX,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK;YAC1B,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,GAAG;YACnD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACjC,CAAC;CACF;AAED,yEAAyE;AACzE,MAAM,UAAU,kBAAkB,CAChC,IAA4B,EAC5B,OAAe,EACf,IAAY;IAEZ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,KAAK,CACZ,IAA4B,EAC5B,OAAe,EACf,IAAY;IAEZ,OAAO,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,aAAa,CAAC,MAA4B;IACjD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,uBAAuB,CACrC,eAAuB,EACvB,UAAkB,EAClB,UAAkB;IAElB,MAAM,IAAI,GAAG,uBAAuB,CAAC;IACrC,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,IACE,OAAO,eAAe,KAAK,QAAQ;QACnC,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC;QAClC,eAAe,GAAG,UAAU,EAC5B,CAAC;QACD,MAAM,CAAC,IAAI,CACT,KAAK,CACH,0BAA0B,EAC1B,yBAAyB,UAAU,EAAE,EACrC,IAAI,CACL,CACF,CAAC;IACJ,CAAC;SAAM,IAAI,eAAe,GAAG,UAAU,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CACT,KAAK,CACH,0BAA0B,EAC1B,cAAc,UAAU,EAAE,EAC1B,IAAI,CACL,CACF,CAAC;IACJ,CAAC;IACD,aAAa,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-exit-config.d.ts","sourceRoot":"","sources":["../../src/runtime/map-exit-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"map-exit-config.d.ts","sourceRoot":"","sources":["../../src/runtime/map-exit-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AA2GpE;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,GAAG,eAAe,CAuBpG"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Map trading recipe exit (dsl_presets or dsl) to DSL plugin ExitBlockConfig.
|
|
3
3
|
* Prefers exit.dsl_presets; falls back to exit.dsl. Passes engine and interval_seconds.
|
|
4
4
|
*/
|
|
5
|
+
import { validateRawExitBlockAndPresetsUnknownKeys } from "../dsl/config/unknown-keys.js";
|
|
5
6
|
function deriveMaxLossPct(preset) {
|
|
6
7
|
const n = preset.max_loss_pct;
|
|
7
8
|
if (typeof n === "number" && n > 0)
|
|
@@ -71,6 +72,9 @@ function buildPreset(name, rawObj, source) {
|
|
|
71
72
|
* Uses exit.dsl_presets if present, else exit.dsl. Passes exit.interval_seconds and exit.engine.
|
|
72
73
|
*/
|
|
73
74
|
export function mapTradingRecipeExitToDslConfig(exit) {
|
|
75
|
+
if (exit != null && typeof exit === "object") {
|
|
76
|
+
validateRawExitBlockAndPresetsUnknownKeys(exit);
|
|
77
|
+
}
|
|
74
78
|
const presetsSource = exit?.dsl_presets ?? exit?.dsl;
|
|
75
79
|
const sourceKey = exit?.dsl_presets != null ? "dsl_presets" : "dsl";
|
|
76
80
|
if (!presetsSource || typeof presetsSource !== "object") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-exit-config.js","sourceRoot":"","sources":["../../src/runtime/map-exit-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"map-exit-config.js","sourceRoot":"","sources":["../../src/runtime/map-exit-config.ts"],"names":[],"mappings":"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"}
|