@senpi/trading-recipe 1.0.50 → 1.0.52
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 +17 -0
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/debug.js +590 -38
- package/dist/debug.js.map +1 -1
- package/dist/runtime/scanner-registry.d.ts.map +1 -1
- package/dist/runtime/scanner-registry.js +3 -0
- package/dist/runtime/scanner-registry.js.map +1 -1
- package/examples/strategies/dsl-showcase.yaml +2 -2
- 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;AAyVH,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"}
|
|
@@ -104,6 +104,23 @@ oi_tracker
|
|
|
104
104
|
Config fields:
|
|
105
105
|
minDayVolume number 1e6 Min 24h volume; instruments below are skipped
|
|
106
106
|
maxHistory number 60 Max OI snapshots retained per instrument
|
|
107
|
+
|
|
108
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
109
|
+
|
|
110
|
+
strategy_monitor
|
|
111
|
+
Wallet position monitor: compares clearing-house snapshots and emits lifecycle deltas.
|
|
112
|
+
Use with action POSITION_TRACKER to feed the DSL exit engine.
|
|
113
|
+
Typical interval: 10s–60s
|
|
114
|
+
|
|
115
|
+
Type aliases (same scanner): strategy-monitor, position_tracker, position-tracker
|
|
116
|
+
|
|
117
|
+
Scanner signal types (signalType per result — not YAML action_type values):
|
|
118
|
+
POSITION_OPENED, POSITION_CLOSED, POSITION_INCREASED,
|
|
119
|
+
POSITION_DECREASED, POSITION_FLIPPED
|
|
120
|
+
Use action_type: POSITION_TRACKER with scanners: […] to handle these for DSL/hooks.
|
|
121
|
+
|
|
122
|
+
Config fields:
|
|
123
|
+
sizeChangeEpsilon number 1e-9 Treat abs(size diff) below this as unchanged (float noise)
|
|
107
124
|
`.trim();
|
|
108
125
|
const ACTIONS_TEXT = `
|
|
109
126
|
Action types
|
|
@@ -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;;;;;;;;;;;;;;;;;;;CAmB/B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"guide-commands.js","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"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"}
|
package/dist/debug.js
CHANGED
|
@@ -1,39 +1,591 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
1
|
+
// /**
|
|
2
|
+
// * DSL-only tick simulation — does NOT start Runtime, OpenClaw, scanners, actions, or the price monitor.
|
|
3
|
+
// * It runs the same pure engine the plugin uses: preset from `exitBlock` below → synthetic `position.opened`
|
|
4
|
+
// * payloads → `buildInitialState` + repeated `dslTick(price, time)` over `DSL_DEBUG_PRICES` (or a scaled default path).
|
|
5
|
+
// *
|
|
6
|
+
// * Run: `npm run debug` or `npm run debug:dsl`
|
|
7
|
+
// *
|
|
8
|
+
// * How it lines up with production:
|
|
9
|
+
// * - Full runtime would bus.emit `position.opened` then the DSL plugin polls prices and calls `dslTick` each interval.
|
|
10
|
+
// * - One-shot mode: hand-feed prices from DSL_DEBUG_PRICES (or a short default path).
|
|
11
|
+
// * - Continuous mode: see DSL_DEBUG_CONTINUOUS below (live MCP prices or repeating synth path).
|
|
12
|
+
// *
|
|
13
|
+
// * Steps in this script:
|
|
14
|
+
// * 1. Read DSL_POSITION_WALLET + DSL_POSITION_ASSETS (or DSL_POSITION_COIN).
|
|
15
|
+
// * 2. Optional clearing-house fetch: getClearingHouseState + openPositionsFromClearingHouseState (or offline SZI/entry env).
|
|
16
|
+
// * 3. Match interest tickers to open rows via normalizeDslCoinDex; build PositionOpenedEvent per match.
|
|
17
|
+
// * 4. Run dslTick demo per event (filter with DSL_DEBUG_INTEREST).
|
|
18
|
+
// *
|
|
19
|
+
// * Edit `exitBlock` to mirror your skills YAML `exit` / `dsl_preset` (or keep this minimal preset for quick checks).
|
|
20
|
+
// *
|
|
21
|
+
// * Required:
|
|
22
|
+
// * DSL_POSITION_WALLET
|
|
23
|
+
// * DSL_POSITION_ASSETS (e.g. BTC,SOL,xyz:CL) or DSL_POSITION_COIN
|
|
24
|
+
// * SENPI_API_KEY (for clearing house)
|
|
25
|
+
// *
|
|
26
|
+
// * Optional:
|
|
27
|
+
// * DSL_POSITION_ADDRESS (defaults to wallet)
|
|
28
|
+
// * DSL_POSITION_DEX — applied when normalizing plain tickers from the interest list (e.g. all on xyz)
|
|
29
|
+
// * DSL_POSITION_LEVERAGE — overrides clearing leverage on emitted events when set
|
|
30
|
+
// * DSL_PRESET, DSL_STATE_DIR (logged only)
|
|
31
|
+
// * DSL_DEBUG_PRICES — comma-separated absolute prices for the tick path
|
|
32
|
+
// * DSL_DEBUG_INTEREST — when multiple matches, raw substring to pick one interest label for tick demo only
|
|
33
|
+
// *
|
|
34
|
+
// * Continuous (no full Runtime; still DSL-only):
|
|
35
|
+
// * DSL_DEBUG_CONTINUOUS=live — poll market_get_prices on interval (needs SENPI_API_KEY + connect); same idea as the
|
|
36
|
+
// * DSL price monitor. Stops when all demo positions hit dslTick close or on SIGINT/SIGTERM.
|
|
37
|
+
// * DSL_DEBUG_CONTINUOUS=synth|loop — repeat the synthetic price path forever (offline OK); pause between ticks
|
|
38
|
+
// * DSL_DEBUG_SYNTH_TICK_MS (default 1000), pause between cycles DSL_DEBUG_LOOP_PAUSE_MS (default uses preset interval).
|
|
39
|
+
// * DSL_DEBUG_INTERVAL_MS — override poll interval for live mode (ms, min 500); default exitBlock interval_seconds.
|
|
40
|
+
// *
|
|
41
|
+
// * Offline / CI: single interest + DSL_POSITION_SZI + DSL_POSITION_ENTRY_PX (no API). Use DSL_DEBUG_CONTINUOUS=synth
|
|
42
|
+
// * for a non-ending synth loop.
|
|
43
|
+
// */
|
|
44
|
+
export {};
|
|
45
|
+
// import "dotenv/config";
|
|
46
|
+
// import { parseDslPluginConfig, DslConfigValidationError } from "./dsl/config/index.js";
|
|
47
|
+
// import { dslTick } from "./dsl/engine/index.js";
|
|
48
|
+
// import { buildInitialState, phase1FloorFromPreset } from "./dsl/events/initial-state.js";
|
|
49
|
+
// import { marketPriceForAsset } from "./dsl/monitor/market-price.js";
|
|
50
|
+
// import {
|
|
51
|
+
// SenpiClient,
|
|
52
|
+
// } from "./senpi/client.js";
|
|
53
|
+
// import type { OpenPosition } from "./senpi/types.js";
|
|
54
|
+
// import { normalizeDslCoinDex } from "./utils/perp-coin.js";
|
|
55
|
+
// import type { DslPluginConfig, DslState, PositionOpenedEvent } from "./types/dsl/index.js";
|
|
56
|
+
// /** Exit block passed to parseDslPluginConfig — drives phase1/phase2 for dslTick only. */
|
|
57
|
+
// const exitBlock = {
|
|
58
|
+
// interval_seconds: 30,
|
|
59
|
+
// dsl_preset: {
|
|
60
|
+
// phase1: {
|
|
61
|
+
// enabled: true,
|
|
62
|
+
// max_loss_pct: 5,
|
|
63
|
+
// retrace_threshold: 7,
|
|
64
|
+
// consecutive_breaches_required: 3,
|
|
65
|
+
// },
|
|
66
|
+
// phase2: {
|
|
67
|
+
// enabled: true,
|
|
68
|
+
// tiers: [
|
|
69
|
+
// { trigger_pct: 5, lock_hw_pct: 40 },
|
|
70
|
+
// { trigger_pct: 12, lock_hw_pct: 55 },
|
|
71
|
+
// { trigger_pct: 15, lock_hw_pct: 75 },
|
|
72
|
+
// { trigger_pct: 20, lock_hw_pct: 85 },
|
|
73
|
+
// ],
|
|
74
|
+
// },
|
|
75
|
+
// },
|
|
76
|
+
// };
|
|
77
|
+
// /** Relative price path for a notional entry of 100 (scaled to real entry when DSL_DEBUG_PRICES unset). */
|
|
78
|
+
// const DEFAULT_TICKS: Array<{ price: number; now: string }> = [
|
|
79
|
+
// { price: 100, now: "2025-01-15T12:00:00.000Z" },
|
|
80
|
+
// { price: 105, now: "2025-01-15T12:01:00.000Z" },
|
|
81
|
+
// { price: 110, now: "2025-01-15T12:02:00.000Z" },
|
|
82
|
+
// { price: 103, now: "2025-01-15T12:03:00.000Z" },
|
|
83
|
+
// { price: 100, now: "2025-01-15T12:04:00.000Z" },
|
|
84
|
+
// ];
|
|
85
|
+
// function parseAssetsFromEnv(): string[] {
|
|
86
|
+
// const multi = process.env.DSL_POSITION_ASSETS?.trim();
|
|
87
|
+
// if (multi) {
|
|
88
|
+
// return multi
|
|
89
|
+
// .split(/[,;\s]+/)
|
|
90
|
+
// .map((s) => s.trim())
|
|
91
|
+
// .filter((s) => s.length > 0);
|
|
92
|
+
// }
|
|
93
|
+
// const single = process.env.DSL_POSITION_COIN?.trim();
|
|
94
|
+
// return single ? [single] : [];
|
|
95
|
+
// }
|
|
96
|
+
// /** Dedupe interest list by normalized (coin, dex) bucket. */
|
|
97
|
+
// function dedupeInterestSlots(raw: string[], globalDex: string): Array<{ coin: string; dex: string; label: string }> {
|
|
98
|
+
// const seen = new Set<string>();
|
|
99
|
+
// const out: Array<{ coin: string; dex: string; label: string }> = [];
|
|
100
|
+
// for (const label of raw) {
|
|
101
|
+
// const n = normalizeDslCoinDex(label, globalDex);
|
|
102
|
+
// const key = `${n.coin.toUpperCase()}|${n.dex}`;
|
|
103
|
+
// if (seen.has(key)) continue;
|
|
104
|
+
// seen.add(key);
|
|
105
|
+
// out.push({ coin: n.coin, dex: n.dex, label });
|
|
106
|
+
// }
|
|
107
|
+
// return out;
|
|
108
|
+
// }
|
|
109
|
+
// function slotKey(coin: string, dex: string): string {
|
|
110
|
+
// const n = normalizeDslCoinDex(coin, dex);
|
|
111
|
+
// return `${n.coin.toUpperCase()}|${n.dex}`;
|
|
112
|
+
// }
|
|
113
|
+
// function sleep(ms: number): Promise<void> {
|
|
114
|
+
// return new Promise((resolve) => setTimeout(resolve, ms));
|
|
115
|
+
// }
|
|
116
|
+
// /** off | live (MCP prices) | synth (repeat DSL_DEBUG_PRICES / default path) */
|
|
117
|
+
// function parseContinuousMode(): "off" | "live" | "synth" {
|
|
118
|
+
// const v = process.env.DSL_DEBUG_CONTINUOUS?.trim().toLowerCase();
|
|
119
|
+
// if (!v || v === "0" || v === "false" || v === "off") return "off";
|
|
120
|
+
// if (v === "synth" || v === "loop") return "synth";
|
|
121
|
+
// if (v === "1" || v === "true" || v === "live") return "live";
|
|
122
|
+
// console.warn(`[debug] Unknown DSL_DEBUG_CONTINUOUS="${process.env.DSL_DEBUG_CONTINUOUS}"; treating as live`);
|
|
123
|
+
// return "live";
|
|
124
|
+
// }
|
|
125
|
+
// function parsePositiveIntEnv(name: string, defaultMs: number): number {
|
|
126
|
+
// const raw = process.env[name]?.trim();
|
|
127
|
+
// if (raw == null || raw === "") return defaultMs;
|
|
128
|
+
// const n = Number(raw);
|
|
129
|
+
// if (!Number.isFinite(n) || n < 0) return defaultMs;
|
|
130
|
+
// return Math.floor(n);
|
|
131
|
+
// }
|
|
132
|
+
// function resolveTickSequence(entryPx: number): Array<{ price: number; now: string }> {
|
|
133
|
+
// const raw = process.env.DSL_DEBUG_PRICES?.trim();
|
|
134
|
+
// if (raw) {
|
|
135
|
+
// const prices = raw
|
|
136
|
+
// .split(/[,;\s]+/)
|
|
137
|
+
// .map((s) => Number(s.trim()))
|
|
138
|
+
// .filter((n) => Number.isFinite(n));
|
|
139
|
+
// if (prices.length === 0) {
|
|
140
|
+
// console.warn("[debug] DSL_DEBUG_PRICES empty or invalid; scaling default profile to entry");
|
|
141
|
+
// } else {
|
|
142
|
+
// const base = Date.parse("2025-01-15T12:00:00.000Z");
|
|
143
|
+
// return prices.map((price, i) => ({
|
|
144
|
+
// price,
|
|
145
|
+
// now: new Date(base + i * 60_000).toISOString(),
|
|
146
|
+
// }));
|
|
147
|
+
// }
|
|
148
|
+
// }
|
|
149
|
+
// const ref = 100;
|
|
150
|
+
// if (!Number.isFinite(entryPx) || entryPx <= 0) return DEFAULT_TICKS;
|
|
151
|
+
// return DEFAULT_TICKS.map((t) => ({
|
|
152
|
+
// price: (entryPx * t.price) / ref,
|
|
153
|
+
// now: t.now,
|
|
154
|
+
// }));
|
|
155
|
+
// }
|
|
156
|
+
// /** Shape the same event DSL handlers expect; dex/coin match on-disk state keys. */
|
|
157
|
+
// function positionOpenedFromOpenRow(
|
|
158
|
+
// pluginConfig: DslPluginConfig,
|
|
159
|
+
// address: string,
|
|
160
|
+
// wallet: string,
|
|
161
|
+
// row: OpenPosition
|
|
162
|
+
// ): PositionOpenedEvent | null {
|
|
163
|
+
// if (row.szi == null || row.entryPx == null) return null;
|
|
164
|
+
// const leverageStr = process.env.DSL_POSITION_LEVERAGE?.trim();
|
|
165
|
+
// let leverage: number;
|
|
166
|
+
// if (leverageStr && Number.isFinite(Number(leverageStr))) {
|
|
167
|
+
// leverage = Number(leverageStr);
|
|
168
|
+
// } else if (row.leverage != null && Number.isFinite(row.leverage)) {
|
|
169
|
+
// leverage = row.leverage;
|
|
170
|
+
// } else {
|
|
171
|
+
// leverage = 1;
|
|
172
|
+
// }
|
|
173
|
+
// const presetName = process.env.DSL_PRESET?.trim() || pluginConfig.preset;
|
|
174
|
+
// const { coin, dex } = normalizeDslCoinDex(row.coin, row.dex ?? "");
|
|
175
|
+
// return {
|
|
176
|
+
// address,
|
|
177
|
+
// wallet,
|
|
178
|
+
// dex,
|
|
179
|
+
// preset: presetName,
|
|
180
|
+
// coin,
|
|
181
|
+
// szi: String(row.szi),
|
|
182
|
+
// entryPx: String(row.entryPx),
|
|
183
|
+
// leverage,
|
|
184
|
+
// };
|
|
185
|
+
// }
|
|
186
|
+
// /**
|
|
187
|
+
// * Match interest list to clearing-house opens (one MCP read). Warns on interest with no position.
|
|
188
|
+
// */
|
|
189
|
+
// function matchInterestToOpens(
|
|
190
|
+
// interest: Array<{ coin: string; dex: string; label: string }>,
|
|
191
|
+
// opens: OpenPosition[]
|
|
192
|
+
// ): { matched: Array<{ slot: (typeof interest)[0]; row: OpenPosition }>; unusedOpens: OpenPosition[] } {
|
|
193
|
+
// const openByKey = new Map<string, OpenPosition[]>();
|
|
194
|
+
// for (const row of opens) {
|
|
195
|
+
// const k = slotKey(row.coin, row.dex ?? "");
|
|
196
|
+
// const list = openByKey.get(k);
|
|
197
|
+
// if (list) list.push(row);
|
|
198
|
+
// else openByKey.set(k, [row]);
|
|
199
|
+
// }
|
|
200
|
+
// const matched: Array<{ slot: (typeof interest)[0]; row: OpenPosition }> = [];
|
|
201
|
+
// for (const slot of interest) {
|
|
202
|
+
// const k = slotKey(slot.coin, slot.dex);
|
|
203
|
+
// const bucket = openByKey.get(k);
|
|
204
|
+
// const row = bucket?.shift();
|
|
205
|
+
// if (!row) {
|
|
206
|
+
// console.warn(
|
|
207
|
+
// `[debug] No open position for interest "${slot.label}" (${slot.coin}, dex="${slot.dex || ""}")`
|
|
208
|
+
// );
|
|
209
|
+
// continue;
|
|
210
|
+
// }
|
|
211
|
+
// matched.push({ slot, row });
|
|
212
|
+
// }
|
|
213
|
+
// const matchedSet = new Set(matched.map((m) => m.row));
|
|
214
|
+
// const unusedOpens = opens.filter((o) => !matchedSet.has(o));
|
|
215
|
+
// return { matched, unusedOpens };
|
|
216
|
+
// }
|
|
217
|
+
// async function buildOpenedEventsFromClearing(
|
|
218
|
+
// pluginConfig: DslPluginConfig,
|
|
219
|
+
// address: string,
|
|
220
|
+
// wallet: string,
|
|
221
|
+
// interest: Array<{ coin: string; dex: string; label: string }>,
|
|
222
|
+
// senpi: SenpiClient
|
|
223
|
+
// ): Promise<PositionOpenedEvent[]> {
|
|
224
|
+
// const state = await senpi.getClearingHouseState(wallet);
|
|
225
|
+
// if (state == null) {
|
|
226
|
+
// console.error("[debug] Clearing house state null; no open positions.");
|
|
227
|
+
// process.exit(1);
|
|
228
|
+
// }
|
|
229
|
+
// if (!clearingHouseStateLooksParsable(state)) {
|
|
230
|
+
// console.error(
|
|
231
|
+
// "[debug] Clearing house response shape not recognized (expected main/xyz assetPositions or a positions array). Keys:",
|
|
232
|
+
// Object.keys(state)
|
|
233
|
+
// );
|
|
234
|
+
// process.exit(1);
|
|
235
|
+
// }
|
|
236
|
+
// const opens = openPositionsFromClearingHouseState(state);
|
|
237
|
+
// const { matched, unusedOpens } = matchInterestToOpens(interest, opens);
|
|
238
|
+
// if (unusedOpens.length > 0 && interest.length <= 3) {
|
|
239
|
+
// console.log(
|
|
240
|
+
// "[debug] Other open positions (not in interest list):",
|
|
241
|
+
// unusedOpens.map((o) => ({
|
|
242
|
+
// coin: o.coin,
|
|
243
|
+
// dex: o.dex ?? "",
|
|
244
|
+
// szi: o.szi,
|
|
245
|
+
// entryPx: o.entryPx,
|
|
246
|
+
// }))
|
|
247
|
+
// );
|
|
248
|
+
// } else if (unusedOpens.length > 0) {
|
|
249
|
+
// console.log(`[debug] ${unusedOpens.length} open position(s) not listed in DSL_POSITION_ASSETS (omit detail)`);
|
|
250
|
+
// }
|
|
251
|
+
// const events: PositionOpenedEvent[] = [];
|
|
252
|
+
// for (const { row } of matched) {
|
|
253
|
+
// const ev = positionOpenedFromOpenRow(pluginConfig, address, wallet, row);
|
|
254
|
+
// if (ev) events.push(ev);
|
|
255
|
+
// }
|
|
256
|
+
// if (events.length === 0) {
|
|
257
|
+
// console.error(
|
|
258
|
+
// "[debug] No position.opened payloads: nothing in clearing house matched DSL_POSITION_ASSETS."
|
|
259
|
+
// );
|
|
260
|
+
// process.exit(1);
|
|
261
|
+
// }
|
|
262
|
+
// return events;
|
|
263
|
+
// }
|
|
264
|
+
// function manualOpenedEvent(
|
|
265
|
+
// pluginConfig: DslPluginConfig,
|
|
266
|
+
// address: string,
|
|
267
|
+
// wallet: string,
|
|
268
|
+
// slot: { coin: string; dex: string; label: string },
|
|
269
|
+
// szi: string,
|
|
270
|
+
// entryPx: string
|
|
271
|
+
// ): PositionOpenedEvent {
|
|
272
|
+
// const leverageStr = process.env.DSL_POSITION_LEVERAGE?.trim();
|
|
273
|
+
// const leverage =
|
|
274
|
+
// leverageStr && Number.isFinite(Number(leverageStr)) ? Number(leverageStr) : 1;
|
|
275
|
+
// const presetName = process.env.DSL_PRESET?.trim() || pluginConfig.preset;
|
|
276
|
+
// return {
|
|
277
|
+
// address,
|
|
278
|
+
// wallet,
|
|
279
|
+
// dex: slot.dex,
|
|
280
|
+
// preset: presetName,
|
|
281
|
+
// coin: slot.coin,
|
|
282
|
+
// szi,
|
|
283
|
+
// entryPx,
|
|
284
|
+
// leverage,
|
|
285
|
+
// };
|
|
286
|
+
// }
|
|
287
|
+
// async function resolveOpenedEvents(
|
|
288
|
+
// pluginConfig: DslPluginConfig
|
|
289
|
+
// ): Promise<{ events: PositionOpenedEvent[]; senpi: SenpiClient | null }> {
|
|
290
|
+
// const wallet = process.env.DSL_POSITION_WALLET?.trim();
|
|
291
|
+
// const globalDex = process.env.DSL_POSITION_DEX?.trim() ?? "";
|
|
292
|
+
// const rawList = parseAssetsFromEnv();
|
|
293
|
+
// const interest = dedupeInterestSlots(rawList, globalDex);
|
|
294
|
+
// if (!wallet || interest.length === 0) {
|
|
295
|
+
// console.error("[debug] Set DSL_POSITION_WALLET and DSL_POSITION_ASSETS (or DSL_POSITION_COIN).");
|
|
296
|
+
// process.exit(1);
|
|
297
|
+
// }
|
|
298
|
+
// const address = process.env.DSL_POSITION_ADDRESS?.trim() || wallet;
|
|
299
|
+
// const sziEnv = process.env.DSL_POSITION_SZI?.trim();
|
|
300
|
+
// const entryPxEnv = process.env.DSL_POSITION_ENTRY_PX?.trim();
|
|
301
|
+
// const hasManual =
|
|
302
|
+
// sziEnv != null && sziEnv !== "" && entryPxEnv != null && entryPxEnv !== "";
|
|
303
|
+
// if (interest.length > 1 && hasManual) {
|
|
304
|
+
// console.error(
|
|
305
|
+
// "[debug] DSL_POSITION_SZI / DSL_POSITION_ENTRY_PX only allowed with a single interest ticker."
|
|
306
|
+
// );
|
|
307
|
+
// process.exit(1);
|
|
308
|
+
// }
|
|
309
|
+
// if (hasManual) {
|
|
310
|
+
// return {
|
|
311
|
+
// events: [manualOpenedEvent(pluginConfig, address, wallet, interest[0]!, sziEnv, entryPxEnv)],
|
|
312
|
+
// senpi: null,
|
|
313
|
+
// };
|
|
314
|
+
// }
|
|
315
|
+
// const apiKey = process.env.SENPI_API_KEY?.trim();
|
|
316
|
+
// if (!apiKey) {
|
|
317
|
+
// console.error(
|
|
318
|
+
// "[debug] Set SENPI_API_KEY to load positions from clearing house, or use DSL_POSITION_SZI + DSL_POSITION_ENTRY_PX (single ticker)."
|
|
319
|
+
// );
|
|
320
|
+
// process.exit(1);
|
|
321
|
+
// }
|
|
322
|
+
// const senpi = new SenpiClient({ apiKey });
|
|
323
|
+
// await senpi.connect();
|
|
324
|
+
// const events = await buildOpenedEventsFromClearing(pluginConfig, address, wallet, interest, senpi);
|
|
325
|
+
// return { events, senpi };
|
|
326
|
+
// }
|
|
327
|
+
// function canonicalLabel(e: PositionOpenedEvent): string {
|
|
328
|
+
// return e.dex === "xyz" ? `xyz:${e.coin}` : e.coin;
|
|
329
|
+
// }
|
|
330
|
+
// function pickEventsForTickDemo(events: PositionOpenedEvent[]): PositionOpenedEvent[] {
|
|
331
|
+
// const filter = process.env.DSL_DEBUG_INTEREST?.trim();
|
|
332
|
+
// if (!filter || events.length <= 1) return events;
|
|
333
|
+
// const hit = events.filter(
|
|
334
|
+
// (e) =>
|
|
335
|
+
// e.coin.includes(filter) ||
|
|
336
|
+
// `${e.coin}|${e.dex}`.includes(filter) ||
|
|
337
|
+
// canonicalLabel(e).includes(filter)
|
|
338
|
+
// );
|
|
339
|
+
// if (hit.length === 0) {
|
|
340
|
+
// console.warn(`[debug] DSL_DEBUG_INTEREST="${filter}" matched nothing; running all ${events.length} event(s).`);
|
|
341
|
+
// return events;
|
|
342
|
+
// }
|
|
343
|
+
// if (hit.length === 1) return hit;
|
|
344
|
+
// console.warn(`[debug] DSL_DEBUG_INTEREST="${filter}" matched multiple; using first match.`);
|
|
345
|
+
// return [hit[0]!];
|
|
346
|
+
// }
|
|
347
|
+
// function logTick(i: number, price: number, result: ReturnType<typeof dslTick>): void {
|
|
348
|
+
// const s = result.state;
|
|
349
|
+
// console.log(
|
|
350
|
+
// [
|
|
351
|
+
// `[${i}] price=${price}`,
|
|
352
|
+
// `action=${result.action}`,
|
|
353
|
+
// `phase=${s.phase}`,
|
|
354
|
+
// `tierIndex=${s.currentTierIndex ?? "null"}`,
|
|
355
|
+
// `floor=${s.floorPrice}`,
|
|
356
|
+
// `hw=${s.highWaterPrice}`,
|
|
357
|
+
// `roe%=${s.currentROE.toFixed(4)}`,
|
|
358
|
+
// `retrace%=${s.retracePct.toFixed(4)}`,
|
|
359
|
+
// result.phaseChanged ? "phaseChanged" : "",
|
|
360
|
+
// result.tierChanged ? "tierChanged" : "",
|
|
361
|
+
// result.closeReason ? `closeReason=${result.closeReason}` : "",
|
|
362
|
+
// ]
|
|
363
|
+
// .filter(Boolean)
|
|
364
|
+
// .join(" | ")
|
|
365
|
+
// );
|
|
366
|
+
// }
|
|
367
|
+
// function createDslStateFromOpened(
|
|
368
|
+
// opened: PositionOpenedEvent,
|
|
369
|
+
// preset: DslPluginConfig["presets"][string]
|
|
370
|
+
// ): DslState {
|
|
371
|
+
// const entryPrice = parseFloat(String(opened.entryPx));
|
|
372
|
+
// const direction = parseFloat(String(opened.szi)) > 0 ? "LONG" : "SHORT";
|
|
373
|
+
// const lev = opened.leverage ?? 1;
|
|
374
|
+
// const phase1Floor = phase1FloorFromPreset(entryPrice, direction, preset.maxLossPct, lev);
|
|
375
|
+
// return buildInitialState(opened, preset, phase1Floor);
|
|
376
|
+
// }
|
|
377
|
+
// async function runContinuousLiveDemo(
|
|
378
|
+
// pluginConfig: DslPluginConfig,
|
|
379
|
+
// sessions: Array<{ opened: PositionOpenedEvent; preset: DslPluginConfig["presets"][string] }>,
|
|
380
|
+
// senpi: SenpiClient
|
|
381
|
+
// ): Promise<void> {
|
|
382
|
+
// const intervalRaw = process.env.DSL_DEBUG_INTERVAL_MS?.trim();
|
|
383
|
+
// const parsedInterval =
|
|
384
|
+
// intervalRaw && Number.isFinite(Number(intervalRaw)) ? Number(intervalRaw) : pluginConfig.intervalMs;
|
|
385
|
+
// const intervalMs = Math.max(500, Math.floor(parsedInterval));
|
|
386
|
+
// const runners = sessions.map((s) => ({
|
|
387
|
+
// ...s,
|
|
388
|
+
// state: createDslStateFromOpened(s.opened, s.preset),
|
|
389
|
+
// stopped: false,
|
|
390
|
+
// tickIndex: 0,
|
|
391
|
+
// }));
|
|
392
|
+
// let running = true;
|
|
393
|
+
// const stop = (): void => {
|
|
394
|
+
// running = false;
|
|
395
|
+
// console.log("\n[debug] Continuous live: stopping (signal)…");
|
|
396
|
+
// };
|
|
397
|
+
// process.on("SIGINT", stop);
|
|
398
|
+
// process.on("SIGTERM", stop);
|
|
399
|
+
// console.log(
|
|
400
|
+
// `[debug] Continuous LIVE: market_get_prices every ${intervalMs}ms, ${runners.length} position(s). Ctrl+C to stop.`
|
|
401
|
+
// );
|
|
402
|
+
// while (running) {
|
|
403
|
+
// const ts = new Date().toISOString();
|
|
404
|
+
// const pricesByDex = new Map<string, Record<string, number>>();
|
|
405
|
+
// for (const dex of ["", "xyz"] as const) {
|
|
406
|
+
// try {
|
|
407
|
+
// const p = await senpi.getMarketPrices({ dex });
|
|
408
|
+
// if (p && Object.keys(p).length > 0) pricesByDex.set(dex, p);
|
|
409
|
+
// } catch (err) {
|
|
410
|
+
// console.warn(`[debug] getMarketPrices dex=${dex === "" ? "main" : dex} failed`, err);
|
|
411
|
+
// }
|
|
412
|
+
// }
|
|
413
|
+
// for (const r of runners) {
|
|
414
|
+
// if (r.stopped || !running) continue;
|
|
415
|
+
// const dexKey = r.opened.dex ?? "";
|
|
416
|
+
// const prices = pricesByDex.get(dexKey);
|
|
417
|
+
// const price = marketPriceForAsset(prices, r.opened.coin);
|
|
418
|
+
// if (price == null) {
|
|
419
|
+
// console.warn(
|
|
420
|
+
// `[debug] #${r.tickIndex} no price for ${canonicalLabel(r.opened)} (dex=${dexKey === "" ? "main" : dexKey})`
|
|
421
|
+
// );
|
|
422
|
+
// continue;
|
|
423
|
+
// }
|
|
424
|
+
// const result = dslTick(r.state, price, ts);
|
|
425
|
+
// logTick(r.tickIndex, price, result);
|
|
426
|
+
// r.tickIndex += 1;
|
|
427
|
+
// r.state = result.state;
|
|
428
|
+
// if (result.action === "close") {
|
|
429
|
+
// console.log(
|
|
430
|
+
// `[debug] dsl close ${canonicalLabel(r.opened)} closeReason=${result.closeReason ?? "(none)"}`
|
|
431
|
+
// );
|
|
432
|
+
// r.stopped = true;
|
|
433
|
+
// }
|
|
434
|
+
// }
|
|
435
|
+
// if (runners.every((r) => r.stopped)) {
|
|
436
|
+
// console.log("[debug] Continuous live: all positions closed.");
|
|
437
|
+
// break;
|
|
438
|
+
// }
|
|
439
|
+
// await sleep(intervalMs);
|
|
440
|
+
// }
|
|
441
|
+
// process.off("SIGINT", stop);
|
|
442
|
+
// process.off("SIGTERM", stop);
|
|
443
|
+
// }
|
|
444
|
+
// async function runContinuousSynthDemo(
|
|
445
|
+
// opened: PositionOpenedEvent,
|
|
446
|
+
// preset: DslPluginConfig["presets"][string],
|
|
447
|
+
// pluginConfig: DslPluginConfig
|
|
448
|
+
// ): Promise<void> {
|
|
449
|
+
// const tickGapMs = Math.max(0, parsePositiveIntEnv("DSL_DEBUG_SYNTH_TICK_MS", 1000));
|
|
450
|
+
// const pauseBetweenCyclesMs = Math.max(
|
|
451
|
+
// 0,
|
|
452
|
+
// parsePositiveIntEnv("DSL_DEBUG_LOOP_PAUSE_MS", pluginConfig.intervalMs)
|
|
453
|
+
// );
|
|
454
|
+
// const entryPrice = parseFloat(String(opened.entryPx));
|
|
455
|
+
// const TICKS = resolveTickSequence(entryPrice);
|
|
456
|
+
// let running = true;
|
|
457
|
+
// const stop = (): void => {
|
|
458
|
+
// running = false;
|
|
459
|
+
// console.log("\n[debug] Continuous synth: stopping (signal)…");
|
|
460
|
+
// };
|
|
461
|
+
// process.on("SIGINT", stop);
|
|
462
|
+
// process.on("SIGTERM", stop);
|
|
463
|
+
// console.log(
|
|
464
|
+
// `[debug] Continuous SYNTH: ${TICKS.length} step(s) per cycle, ${tickGapMs}ms between steps, ${pauseBetweenCyclesMs}ms between cycles. Ctrl+C to stop.`
|
|
465
|
+
// );
|
|
466
|
+
// console.log("[debug] dslTick synth for:", canonicalLabel(opened), {
|
|
467
|
+
// dex: opened.dex || "(empty)",
|
|
468
|
+
// entryPx: opened.entryPx,
|
|
469
|
+
// szi: opened.szi,
|
|
470
|
+
// });
|
|
471
|
+
// let cycle = 0;
|
|
472
|
+
// while (running) {
|
|
473
|
+
// cycle += 1;
|
|
474
|
+
// console.log(`--- synth cycle ${cycle} ---`);
|
|
475
|
+
// let state = createDslStateFromOpened(opened, preset);
|
|
476
|
+
// for (let i = 0; i < TICKS.length && running; i++) {
|
|
477
|
+
// const step = TICKS[i];
|
|
478
|
+
// if (!step) break;
|
|
479
|
+
// const { price, now } = step;
|
|
480
|
+
// const result = dslTick(state, price, now);
|
|
481
|
+
// logTick(i, price, result);
|
|
482
|
+
// state = result.state;
|
|
483
|
+
// if (result.action === "close") {
|
|
484
|
+
// console.log("[debug] synth cycle: closed mid-sequence; starting next cycle after pause.");
|
|
485
|
+
// break;
|
|
486
|
+
// }
|
|
487
|
+
// if (tickGapMs > 0) await sleep(tickGapMs);
|
|
488
|
+
// }
|
|
489
|
+
// if (!running) break;
|
|
490
|
+
// if (pauseBetweenCyclesMs > 0) await sleep(pauseBetweenCyclesMs);
|
|
491
|
+
// }
|
|
492
|
+
// process.off("SIGINT", stop);
|
|
493
|
+
// process.off("SIGTERM", stop);
|
|
494
|
+
// }
|
|
495
|
+
// function runTickDemo(
|
|
496
|
+
// opened: PositionOpenedEvent,
|
|
497
|
+
// preset: DslPluginConfig["presets"][string]
|
|
498
|
+
// ): void {
|
|
499
|
+
// let state: DslState = createDslStateFromOpened(opened, preset);
|
|
500
|
+
// const entryPrice = parseFloat(String(opened.entryPx));
|
|
501
|
+
// const direction = parseFloat(String(opened.szi)) > 0 ? "LONG" : "SHORT";
|
|
502
|
+
// const TICKS = resolveTickSequence(entryPrice);
|
|
503
|
+
// console.log("[debug] dslTick demo for:", canonicalLabel(opened), {
|
|
504
|
+
// dex: opened.dex || "(empty)",
|
|
505
|
+
// entryPx: opened.entryPx,
|
|
506
|
+
// szi: opened.szi,
|
|
507
|
+
// leverage: opened.leverage,
|
|
508
|
+
// direction,
|
|
509
|
+
// initialFloor: state.floorPrice,
|
|
510
|
+
// });
|
|
511
|
+
// console.log("--- ticks ---");
|
|
512
|
+
// for (let i = 0; i < TICKS.length; i++) {
|
|
513
|
+
// const step = TICKS[i];
|
|
514
|
+
// if (!step) break;
|
|
515
|
+
// const { price, now } = step;
|
|
516
|
+
// const result = dslTick(state, price, now);
|
|
517
|
+
// logTick(i, price, result);
|
|
518
|
+
// state = result.state;
|
|
519
|
+
// if (result.action === "close") {
|
|
520
|
+
// console.log("Stopped after close.");
|
|
521
|
+
// break;
|
|
522
|
+
// }
|
|
523
|
+
// }
|
|
524
|
+
// console.log("--- final snapshot ---", {
|
|
525
|
+
// coin: opened.coin,
|
|
526
|
+
// phase: state.phase,
|
|
527
|
+
// currentTierIndex: state.currentTierIndex,
|
|
528
|
+
// floorPrice: state.floorPrice,
|
|
529
|
+
// highWaterPrice: state.highWaterPrice,
|
|
530
|
+
// });
|
|
531
|
+
// }
|
|
532
|
+
// async function main(): Promise<void> {
|
|
533
|
+
// let senpi: SenpiClient | null = null;
|
|
534
|
+
// try {
|
|
535
|
+
// const continuous = parseContinuousMode();
|
|
536
|
+
// console.log(
|
|
537
|
+
// `[debug] DSL-only: dslTick (no full Runtime). Preset from exitBlock. Continuous=${continuous} (set DSL_DEBUG_CONTINUOUS=live|synth to poll/repeat).`
|
|
538
|
+
// );
|
|
539
|
+
// const pluginConfig = parseDslPluginConfig(exitBlock);
|
|
540
|
+
// const { events, senpi: client } = await resolveOpenedEvents(pluginConfig);
|
|
541
|
+
// senpi = client;
|
|
542
|
+
// const presetKey = process.env.DSL_PRESET?.trim() || pluginConfig.preset;
|
|
543
|
+
// const preset = pluginConfig.presets[presetKey];
|
|
544
|
+
// if (!preset) {
|
|
545
|
+
// console.error(
|
|
546
|
+
// `[debug] Unknown preset "${presetKey}". Keys: ${Object.keys(pluginConfig.presets).join(", ")}`
|
|
547
|
+
// );
|
|
548
|
+
// process.exit(1);
|
|
549
|
+
// }
|
|
550
|
+
// const stateDir = process.env.DSL_STATE_DIR?.trim();
|
|
551
|
+
// if (stateDir) {
|
|
552
|
+
// console.log("[debug] DSL_STATE_DIR (not written in this script):", stateDir);
|
|
553
|
+
// }
|
|
554
|
+
// console.log("[debug] Clearing → position.opened payloads (emit these to start DSL tracking):");
|
|
555
|
+
// for (const ev of events) {
|
|
556
|
+
// console.log(JSON.stringify({ event: "position.opened", payload: ev }));
|
|
557
|
+
// }
|
|
558
|
+
// const forDemo = pickEventsForTickDemo(events);
|
|
559
|
+
// console.log(
|
|
560
|
+
// "[debug] Parsed plugin config:",
|
|
561
|
+
// { intervalMs: pluginConfig.intervalMs, preset: pluginConfig.preset },
|
|
562
|
+
// forDemo.length < events.length ? `(tick demo: ${forDemo.length} of ${events.length})` : ""
|
|
563
|
+
// );
|
|
564
|
+
// for (const opened of forDemo) {
|
|
565
|
+
// const pk = opened.preset ?? pluginConfig.preset;
|
|
566
|
+
// const pr = pluginConfig.presets[pk];
|
|
567
|
+
// if (!pr) {
|
|
568
|
+
// console.error(`[debug] Unknown preset on event: ${pk}`);
|
|
569
|
+
// process.exit(1);
|
|
570
|
+
// }
|
|
571
|
+
// console.log("");
|
|
572
|
+
// runTickDemo(opened, pr);
|
|
573
|
+
// }
|
|
574
|
+
// } catch (e) {
|
|
575
|
+
// if (e instanceof DslConfigValidationError) {
|
|
576
|
+
// console.error("Validation failed:");
|
|
577
|
+
// for (const issue of e.issues) {
|
|
578
|
+
// console.error(` [${issue.code}] ${issue.message} at ${issue.path}`);
|
|
579
|
+
// }
|
|
580
|
+
// } else {
|
|
581
|
+
// console.error(e);
|
|
582
|
+
// }
|
|
583
|
+
// process.exitCode = 1;
|
|
584
|
+
// } finally {
|
|
585
|
+
// if (senpi) {
|
|
586
|
+
// await senpi.disconnect().catch(() => {});
|
|
587
|
+
// }
|
|
588
|
+
// }
|
|
589
|
+
// }
|
|
590
|
+
// void main();
|
|
39
591
|
//# sourceMappingURL=debug.js.map
|
package/dist/debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAAA,MAAM;AACN,2GAA2G;AAC3G,+GAA+G;AAC/G,0HAA0H;AAC1H,KAAK;AACL,iDAAiD;AACjD,KAAK;AACL,sCAAsC;AACtC,2HAA2H;AAC3H,0FAA0F;AAC1F,oGAAoG;AACpG,KAAK;AACL,2BAA2B;AAC3B,iFAAiF;AACjF,iIAAiI;AACjI,4GAA4G;AAC5G,uEAAuE;AACvE,KAAK;AACL,uHAAuH;AACvH,KAAK;AACL,eAAe;AACf,2BAA2B;AAC3B,sEAAsE;AACtE,0CAA0C;AAC1C,KAAK;AACL,eAAe;AACf,iDAAiD;AACjD,0GAA0G;AAC1G,sFAAsF;AACtF,+CAA+C;AAC/C,4EAA4E;AAC5E,+GAA+G;AAC/G,KAAK;AACL,mDAAmD;AACnD,wHAAwH;AACxH,kGAAkG;AAClG,mHAAmH;AACnH,8HAA8H;AAC9H,uHAAuH;AACvH,KAAK;AACL,uHAAuH;AACvH,oCAAoC;AACpC,MAAM;;AAEN,0BAA0B;AAC1B,0FAA0F;AAC1F,mDAAmD;AACnD,4FAA4F;AAC5F,uEAAuE;AACvE,WAAW;AACX,iBAAiB;AACjB,8BAA8B;AAC9B,wDAAwD;AACxD,8DAA8D;AAC9D,8FAA8F;AAE9F,4FAA4F;AAC5F,sBAAsB;AACtB,0BAA0B;AAC1B,kBAAkB;AAClB,gBAAgB;AAChB,uBAAuB;AACvB,yBAAyB;AACzB,8BAA8B;AAC9B,0CAA0C;AAC1C,SAAS;AACT,gBAAgB;AAChB,uBAAuB;AACvB,iBAAiB;AACjB,+CAA+C;AAC/C,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AAEL,6GAA6G;AAC7G,iEAAiE;AACjE,qDAAqD;AACrD,qDAAqD;AACrD,qDAAqD;AACrD,qDAAqD;AACrD,qDAAqD;AACrD,KAAK;AAEL,4CAA4C;AAC5C,2DAA2D;AAC3D,iBAAiB;AACjB,mBAAmB;AACnB,0BAA0B;AAC1B,8BAA8B;AAC9B,sCAAsC;AACtC,MAAM;AACN,0DAA0D;AAC1D,mCAAmC;AACnC,IAAI;AAEJ,gEAAgE;AAChE,wHAAwH;AACxH,oCAAoC;AACpC,yEAAyE;AACzE,+BAA+B;AAC/B,uDAAuD;AACvD,sDAAsD;AACtD,mCAAmC;AACnC,qBAAqB;AACrB,qDAAqD;AACrD,MAAM;AACN,gBAAgB;AAChB,IAAI;AAEJ,wDAAwD;AACxD,8CAA8C;AAC9C,+CAA+C;AAC/C,IAAI;AAEJ,8CAA8C;AAC9C,8DAA8D;AAC9D,IAAI;AAEJ,kFAAkF;AAClF,6DAA6D;AAC7D,sEAAsE;AACtE,uEAAuE;AACvE,uDAAuD;AACvD,kEAAkE;AAClE,kHAAkH;AAClH,mBAAmB;AACnB,IAAI;AAEJ,0EAA0E;AAC1E,2CAA2C;AAC3C,qDAAqD;AACrD,2BAA2B;AAC3B,wDAAwD;AACxD,0BAA0B;AAC1B,IAAI;AAEJ,yFAAyF;AACzF,sDAAsD;AACtD,eAAe;AACf,yBAAyB;AACzB,0BAA0B;AAC1B,sCAAsC;AACtC,4CAA4C;AAC5C,iCAAiC;AACjC,qGAAqG;AACrG,eAAe;AACf,6DAA6D;AAC7D,2CAA2C;AAC3C,iBAAiB;AACjB,0DAA0D;AAC1D,aAAa;AACb,QAAQ;AACR,MAAM;AACN,qBAAqB;AACrB,yEAAyE;AACzE,uCAAuC;AACvC,wCAAwC;AACxC,kBAAkB;AAClB,SAAS;AACT,IAAI;AAEJ,sFAAsF;AACtF,sCAAsC;AACtC,mCAAmC;AACnC,qBAAqB;AACrB,oBAAoB;AACpB,sBAAsB;AACtB,kCAAkC;AAClC,6DAA6D;AAC7D,mEAAmE;AACnE,0BAA0B;AAC1B,+DAA+D;AAC/D,sCAAsC;AACtC,wEAAwE;AACxE,+BAA+B;AAC/B,aAAa;AACb,oBAAoB;AACpB,MAAM;AACN,8EAA8E;AAC9E,wEAAwE;AACxE,aAAa;AACb,eAAe;AACf,cAAc;AACd,WAAW;AACX,0BAA0B;AAC1B,YAAY;AACZ,4BAA4B;AAC5B,oCAAoC;AACpC,gBAAgB;AAChB,OAAO;AACP,IAAI;AAEJ,MAAM;AACN,qGAAqG;AACrG,MAAM;AACN,iCAAiC;AACjC,mEAAmE;AACnE,0BAA0B;AAC1B,0GAA0G;AAC1G,yDAAyD;AACzD,+BAA+B;AAC/B,kDAAkD;AAClD,qCAAqC;AACrC,gCAAgC;AAChC,oCAAoC;AACpC,MAAM;AAEN,kFAAkF;AAClF,mCAAmC;AACnC,8CAA8C;AAC9C,uCAAuC;AACvC,mCAAmC;AACnC,kBAAkB;AAClB,sBAAsB;AACtB,0GAA0G;AAC1G,WAAW;AACX,kBAAkB;AAClB,QAAQ;AACR,mCAAmC;AACnC,MAAM;AAEN,2DAA2D;AAC3D,iEAAiE;AACjE,qCAAqC;AACrC,IAAI;AAEJ,gDAAgD;AAChD,mCAAmC;AACnC,qBAAqB;AACrB,oBAAoB;AACpB,mEAAmE;AACnE,uBAAuB;AACvB,sCAAsC;AACtC,6DAA6D;AAC7D,yBAAyB;AACzB,8EAA8E;AAC9E,uBAAuB;AACvB,MAAM;AACN,mDAAmD;AACnD,qBAAqB;AACrB,+HAA+H;AAC/H,2BAA2B;AAC3B,SAAS;AACT,uBAAuB;AACvB,MAAM;AACN,8DAA8D;AAC9D,4EAA4E;AAC5E,0DAA0D;AAC1D,mBAAmB;AACnB,gEAAgE;AAChE,kCAAkC;AAClC,wBAAwB;AACxB,4BAA4B;AAC5B,sBAAsB;AACtB,8BAA8B;AAC9B,YAAY;AACZ,SAAS;AACT,yCAAyC;AACzC,qHAAqH;AACrH,MAAM;AAEN,8CAA8C;AAC9C,qCAAqC;AACrC,gFAAgF;AAChF,+BAA+B;AAC/B,MAAM;AAEN,+BAA+B;AAC/B,qBAAqB;AACrB,sGAAsG;AACtG,SAAS;AACT,uBAAuB;AACvB,MAAM;AACN,mBAAmB;AACnB,IAAI;AAEJ,8BAA8B;AAC9B,mCAAmC;AACnC,qBAAqB;AACrB,oBAAoB;AACpB,wDAAwD;AACxD,iBAAiB;AACjB,oBAAoB;AACpB,2BAA2B;AAC3B,mEAAmE;AACnE,qBAAqB;AACrB,qFAAqF;AACrF,8EAA8E;AAC9E,aAAa;AACb,eAAe;AACf,cAAc;AACd,qBAAqB;AACrB,0BAA0B;AAC1B,uBAAuB;AACvB,WAAW;AACX,eAAe;AACf,gBAAgB;AAChB,OAAO;AACP,IAAI;AAEJ,sCAAsC;AACtC,kCAAkC;AAClC,6EAA6E;AAC7E,4DAA4D;AAC5D,kEAAkE;AAClE,0CAA0C;AAC1C,8DAA8D;AAE9D,4CAA4C;AAC5C,wGAAwG;AACxG,uBAAuB;AACvB,MAAM;AAEN,wEAAwE;AACxE,yDAAyD;AACzD,kEAAkE;AAClE,sBAAsB;AACtB,kFAAkF;AAElF,4CAA4C;AAC5C,qBAAqB;AACrB,uGAAuG;AACvG,SAAS;AACT,uBAAuB;AACvB,MAAM;AAEN,qBAAqB;AACrB,eAAe;AACf,sGAAsG;AACtG,qBAAqB;AACrB,SAAS;AACT,MAAM;AAEN,sDAAsD;AACtD,mBAAmB;AACnB,qBAAqB;AACrB,4IAA4I;AAC5I,SAAS;AACT,uBAAuB;AACvB,MAAM;AAEN,+CAA+C;AAC/C,2BAA2B;AAC3B,wGAAwG;AACxG,8BAA8B;AAC9B,IAAI;AAEJ,4DAA4D;AAC5D,uDAAuD;AACvD,IAAI;AAEJ,yFAAyF;AACzF,2DAA2D;AAC3D,sDAAsD;AACtD,+BAA+B;AAC/B,aAAa;AACb,mCAAmC;AACnC,iDAAiD;AACjD,2CAA2C;AAC3C,OAAO;AACP,4BAA4B;AAC5B,sHAAsH;AACtH,qBAAqB;AACrB,MAAM;AACN,sCAAsC;AACtC,iGAAiG;AACjG,sBAAsB;AACtB,IAAI;AAEJ,yFAAyF;AACzF,4BAA4B;AAC5B,iBAAiB;AACjB,QAAQ;AACR,iCAAiC;AACjC,mCAAmC;AACnC,4BAA4B;AAC5B,qDAAqD;AACrD,iCAAiC;AACjC,kCAAkC;AAClC,2CAA2C;AAC3C,+CAA+C;AAC/C,mDAAmD;AACnD,iDAAiD;AACjD,uEAAuE;AACvE,QAAQ;AACR,yBAAyB;AACzB,qBAAqB;AACrB,OAAO;AACP,IAAI;AAEJ,qCAAqC;AACrC,iCAAiC;AACjC,+CAA+C;AAC/C,gBAAgB;AAChB,2DAA2D;AAC3D,6EAA6E;AAC7E,sCAAsC;AACtC,8FAA8F;AAC9F,2DAA2D;AAC3D,IAAI;AAEJ,wCAAwC;AACxC,mCAAmC;AACnC,kGAAkG;AAClG,uBAAuB;AACvB,qBAAqB;AACrB,mEAAmE;AACnE,2BAA2B;AAC3B,2GAA2G;AAC3G,kEAAkE;AAElE,2CAA2C;AAC3C,YAAY;AACZ,2DAA2D;AAC3D,sBAAsB;AACtB,oBAAoB;AACpB,SAAS;AAET,wBAAwB;AACxB,+BAA+B;AAC/B,uBAAuB;AACvB,oEAAoE;AACpE,OAAO;AACP,gCAAgC;AAChC,iCAAiC;AAEjC,iBAAiB;AACjB,yHAAyH;AACzH,OAAO;AAEP,sBAAsB;AACtB,2CAA2C;AAC3C,qEAAqE;AACrE,gDAAgD;AAChD,cAAc;AACd,0DAA0D;AAC1D,uEAAuE;AACvE,wBAAwB;AACxB,gGAAgG;AAChG,UAAU;AACV,QAAQ;AAER,iCAAiC;AACjC,6CAA6C;AAC7C,2CAA2C;AAC3C,gDAAgD;AAChD,kEAAkE;AAClE,6BAA6B;AAC7B,wBAAwB;AACxB,wHAAwH;AACxH,aAAa;AACb,oBAAoB;AACpB,UAAU;AACV,oDAAoD;AACpD,6CAA6C;AAC7C,0BAA0B;AAC1B,gCAAgC;AAChC,yCAAyC;AACzC,uBAAuB;AACvB,0GAA0G;AAC1G,aAAa;AACb,4BAA4B;AAC5B,UAAU;AACV,QAAQ;AAER,6CAA6C;AAC7C,uEAAuE;AACvE,eAAe;AACf,QAAQ;AAER,+BAA+B;AAC/B,MAAM;AAEN,iCAAiC;AACjC,kCAAkC;AAClC,IAAI;AAEJ,yCAAyC;AACzC,iCAAiC;AACjC,gDAAgD;AAChD,kCAAkC;AAClC,qBAAqB;AACrB,yFAAyF;AACzF,2CAA2C;AAC3C,SAAS;AACT,8EAA8E;AAC9E,OAAO;AACP,2DAA2D;AAC3D,mDAAmD;AAEnD,wBAAwB;AACxB,+BAA+B;AAC/B,uBAAuB;AACvB,qEAAqE;AACrE,OAAO;AACP,gCAAgC;AAChC,iCAAiC;AAEjC,iBAAiB;AACjB,6JAA6J;AAC7J,OAAO;AACP,wEAAwE;AACxE,oCAAoC;AACpC,+BAA+B;AAC/B,uBAAuB;AACvB,QAAQ;AAER,mBAAmB;AACnB,sBAAsB;AACtB,kBAAkB;AAClB,mDAAmD;AACnD,4DAA4D;AAC5D,0DAA0D;AAC1D,+BAA+B;AAC/B,0BAA0B;AAC1B,qCAAqC;AACrC,mDAAmD;AACnD,mCAAmC;AACnC,8BAA8B;AAC9B,yCAAyC;AACzC,qGAAqG;AACrG,iBAAiB;AACjB,UAAU;AACV,mDAAmD;AACnD,QAAQ;AACR,2BAA2B;AAC3B,uEAAuE;AACvE,MAAM;AAEN,iCAAiC;AACjC,kCAAkC;AAClC,IAAI;AAEJ,wBAAwB;AACxB,iCAAiC;AACjC,+CAA+C;AAC/C,YAAY;AACZ,oEAAoE;AACpE,2DAA2D;AAC3D,6EAA6E;AAC7E,mDAAmD;AAEnD,uEAAuE;AACvE,oCAAoC;AACpC,+BAA+B;AAC/B,uBAAuB;AACvB,iCAAiC;AACjC,iBAAiB;AACjB,sCAAsC;AACtC,QAAQ;AACR,kCAAkC;AAElC,6CAA6C;AAC7C,6BAA6B;AAC7B,wBAAwB;AACxB,mCAAmC;AACnC,iDAAiD;AACjD,iCAAiC;AACjC,4BAA4B;AAC5B,uCAAuC;AACvC,6CAA6C;AAC7C,eAAe;AACf,QAAQ;AACR,MAAM;AAEN,4CAA4C;AAC5C,yBAAyB;AACzB,0BAA0B;AAC1B,gDAAgD;AAChD,oCAAoC;AACpC,4CAA4C;AAC5C,QAAQ;AACR,IAAI;AAEJ,yCAAyC;AACzC,0CAA0C;AAC1C,UAAU;AACV,gDAAgD;AAChD,mBAAmB;AACnB,6JAA6J;AAC7J,SAAS;AACT,4DAA4D;AAC5D,iFAAiF;AACjF,sBAAsB;AAEtB,+EAA+E;AAC/E,sDAAsD;AACtD,qBAAqB;AACrB,uBAAuB;AACvB,yGAAyG;AACzG,WAAW;AACX,yBAAyB;AACzB,QAAQ;AAER,0DAA0D;AAC1D,sBAAsB;AACtB,sFAAsF;AACtF,QAAQ;AAER,sGAAsG;AACtG,iCAAiC;AACjC,gFAAgF;AAChF,QAAQ;AAER,qDAAqD;AACrD,mBAAmB;AACnB,yCAAyC;AACzC,8EAA8E;AAC9E,mGAAmG;AACnG,SAAS;AAET,sCAAsC;AACtC,yDAAyD;AACzD,6CAA6C;AAC7C,mBAAmB;AACnB,mEAAmE;AACnE,2BAA2B;AAC3B,UAAU;AACV,yBAAyB;AACzB,iCAAiC;AACjC,QAAQ;AACR,kBAAkB;AAClB,mDAAmD;AACnD,6CAA6C;AAC7C,wCAAwC;AACxC,gFAAgF;AAChF,UAAU;AACV,eAAe;AACf,0BAA0B;AAC1B,QAAQ;AACR,4BAA4B;AAC5B,gBAAgB;AAChB,mBAAmB;AACnB,kDAAkD;AAClD,QAAQ;AACR,MAAM;AACN,IAAI;AAEJ,eAAe"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner-registry.d.ts","sourceRoot":"","sources":["../../src/runtime/scanner-registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAc/D,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAIrD,gEAAgE;AAChE,iBAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAE7D;AAED,oFAAoF;AACpF,iBAAS,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAErD;AAED;;;;GAIG;AACH,iBAAS,aAAa,CACpB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,OAAO,EACzB,SAAS,CAAC,EAAE,KAAK,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACxC,CAAC,GACD,cAAc,CAqBhB;
|
|
1
|
+
{"version":3,"file":"scanner-registry.d.ts","sourceRoot":"","sources":["../../src/runtime/scanner-registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAc/D,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAIrD,gEAAgE;AAChE,iBAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAE7D;AAED,oFAAoF;AACpF,iBAAS,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAErD;AAED;;;;GAIG;AACH,iBAAS,aAAa,CACpB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,OAAO,EACzB,SAAS,CAAC,EAAE,KAAK,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACxC,CAAC,GACD,cAAc,CAqBhB;AAuFD,eAAO,MAAM,eAAe;;;;CAI3B,CAAC"}
|
|
@@ -106,6 +106,9 @@ register("sm-flip", smFlipScanner);
|
|
|
106
106
|
register("opportunity", opportunityScanner);
|
|
107
107
|
register("strategy_monitor", strategyMonitorScanner);
|
|
108
108
|
register("strategy-monitor", strategyMonitorScanner);
|
|
109
|
+
/** Aliases documented for POSITION_TRACKER recipes — same implementation as strategy_monitor. */
|
|
110
|
+
register("position_tracker", strategyMonitorScanner);
|
|
111
|
+
register("position-tracker", strategyMonitorScanner);
|
|
109
112
|
export const ScannerRegistry = {
|
|
110
113
|
register,
|
|
111
114
|
get,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner-registry.js","sourceRoot":"","sources":["../../src/runtime/scanner-registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scanner-registry.js","sourceRoot":"","sources":["../../src/runtime/scanner-registry.ts"],"names":[],"mappings":"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"}
|
package/openclaw.plugin.json
CHANGED