@senpi/runtime 3.0.6-dev.runtime-phase-2.20260627082846 → 3.0.6-dev.runtime-phase-2.20260630134307
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/actions/close-position/close-position.action.d.ts.map +1 -1
- package/dist/actions/close-position/close-position.action.js +95 -65
- package/dist/actions/close-position/close-position.action.js.map +1 -1
- package/dist/actions/decision-engine.d.ts.map +1 -1
- package/dist/actions/decision-engine.js +40 -28
- package/dist/actions/decision-engine.js.map +1 -1
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +261 -202
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/dsl/monitor/create-monitor.d.ts +3 -0
- package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
- package/dist/dsl/monitor/create-monitor.js +76 -28
- package/dist/dsl/monitor/create-monitor.js.map +1 -1
- package/dist/dsl/monitor/process-one-position.d.ts +2 -1
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +84 -38
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/dsl/plugin/index.d.ts +2 -0
- package/dist/dsl/plugin/index.d.ts.map +1 -1
- package/dist/dsl/plugin/index.js +6 -2
- package/dist/dsl/plugin/index.js.map +1 -1
- package/dist/dsl/plugin/options.d.ts +3 -0
- package/dist/dsl/plugin/options.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -12
- package/dist/index.js.map +1 -1
- package/dist/runtime/create-actions.d.ts.map +1 -1
- package/dist/runtime/create-actions.js +40 -5
- package/dist/runtime/create-actions.js.map +1 -1
- package/dist/runtime/create-scanner-module.d.ts +2 -1
- package/dist/runtime/create-scanner-module.d.ts.map +1 -1
- package/dist/runtime/create-scanner-module.js +2 -1
- package/dist/runtime/create-scanner-module.js.map +1 -1
- package/dist/runtime/runtime.d.ts +10 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +143 -73
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/scanners/engine/data-providers.d.ts +3 -0
- package/dist/scanners/engine/data-providers.d.ts.map +1 -1
- package/dist/scanners/engine/data-providers.js.map +1 -1
- package/dist/scanners/engine/engine.d.ts +18 -0
- package/dist/scanners/engine/engine.d.ts.map +1 -1
- package/dist/scanners/engine/engine.js +93 -2
- package/dist/scanners/engine/engine.js.map +1 -1
- package/dist/scanners/engine/input-resolver.d.ts.map +1 -1
- package/dist/scanners/engine/input-resolver.js +9 -7
- package/dist/scanners/engine/input-resolver.js.map +1 -1
- package/dist/scanners/runtime-module.d.ts +3 -0
- package/dist/scanners/runtime-module.d.ts.map +1 -1
- package/dist/scanners/runtime-module.js +1 -0
- package/dist/scanners/runtime-module.js.map +1 -1
- package/dist/telemetry/otel-sdk.d.ts +105 -0
- package/dist/telemetry/otel-sdk.d.ts.map +1 -0
- package/dist/telemetry/otel-sdk.js +268 -0
- package/dist/telemetry/otel-sdk.js.map +1 -0
- package/dist/telemetry/trace-identity.d.ts +31 -0
- package/dist/telemetry/trace-identity.d.ts.map +1 -0
- package/dist/telemetry/trace-identity.js +58 -0
- package/dist/telemetry/trace-identity.js.map +1 -0
- package/dist/telemetry/tracing.d.ts +32 -0
- package/dist/telemetry/tracing.d.ts.map +1 -0
- package/dist/telemetry/tracing.js +70 -0
- package/dist/telemetry/tracing.js.map +1 -0
- package/dist/types/scanner.d.ts +2 -0
- package/dist/types/scanner.d.ts.map +1 -1
- package/package.json +6 -2
|
@@ -5,6 +5,7 @@ import type { SenpiClient } from "../../senpi/client.js";
|
|
|
5
5
|
import type { SenpiEventBus } from "../events/index.js";
|
|
6
6
|
import type { StrategyState } from "../../types/strategy.js";
|
|
7
7
|
import type { StateManager } from "../../state/index.js";
|
|
8
|
+
import type { IdentityEnvelope } from "../../recording/identity.js";
|
|
8
9
|
import type { PositionOpenedEvent } from "../../types/dsl/index.js";
|
|
9
10
|
export interface PriceMonitorOptions {
|
|
10
11
|
stateManager: StateManager;
|
|
@@ -32,6 +33,8 @@ export interface PriceMonitorOptions {
|
|
|
32
33
|
reconcileSerialize?: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
33
34
|
/** Called on a successful periodic reconcile to resolve the boot trade-gate if still closed. */
|
|
34
35
|
reconcileGateResolve?: () => void;
|
|
36
|
+
/** Lazy runtime identity builder; used to stamp per-trace identity at the dsl.tick seam. */
|
|
37
|
+
identity?: () => IdentityEnvelope;
|
|
35
38
|
}
|
|
36
39
|
export declare function getAddressesWithUnavailableClearinghouseState(entries: Array<{
|
|
37
40
|
addr: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-monitor.d.ts","sourceRoot":"","sources":["../../../src/dsl/monitor/create-monitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-monitor.d.ts","sourceRoot":"","sources":["../../../src/dsl/monitor/create-monitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAWpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAMpE,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,YAAY,CAAC;IAC3B,6FAA6F;IAC7F,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,EAAE,aAAa,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,6DAA6D;IAC7D,cAAc,CAAC,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;IAC/D,oDAAoD;IACpD,wBAAwB,CAAC,EAAE,OAAO,sBAAsB,EAAE,wBAAwB,CAAC;IACnF;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE;QACjB,aAAa,CAAC,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,cAAc,CAAC,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACvD,CAAC;IACF,iGAAiG;IACjG,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7D,gGAAgG;IAChG,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,gBAAgB,CAAC;CACnC;AAMD,wBAAgB,6CAA6C,CAC3D,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,GAChD,MAAM,EAAE,CAIV;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG;IAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAoR9F"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
import { DSL_EXTERNAL_RETRIES, DSL_EXTERNAL_RETRY_DELAY_MS, } from "../../constants/dsl/index.js";
|
|
5
5
|
import { logger } from "../../utils/logger/dsl.js";
|
|
6
6
|
import { withRetry } from "../../utils/retry.js";
|
|
7
|
+
import { withSpan } from "../../telemetry/tracing.js";
|
|
8
|
+
import { setTraceIdentityAttributes } from "../../telemetry/trace-identity.js";
|
|
7
9
|
import { reconcileStateWithBackend } from "../../runtime/reconcile-state.js";
|
|
8
10
|
import { runReconcile } from "../../runtime/reconcile-run.js";
|
|
9
11
|
import { effectiveDex } from "./effective-dex.js";
|
|
@@ -19,9 +21,36 @@ export function getAddressesWithUnavailableClearinghouseState(entries) {
|
|
|
19
21
|
}
|
|
20
22
|
export function createPriceMonitor(options) {
|
|
21
23
|
const { stateManager, senpiClient, bus, strategyStates, isSlPlacementInProgress, closeOrderType, feeOptimizedLimitOptions, reconcileAdopter, reconcileSerialize, reconcileGateResolve } = options;
|
|
24
|
+
// The identity envelope is immutable per boot, so resolve it once and reuse it across ticks
|
|
25
|
+
// (building it hashes the config — not work to repeat on the per-tick path). The build is
|
|
26
|
+
// guarded: a failing identity builder must never abort a trading tick.
|
|
27
|
+
const buildIdentity = options.identity;
|
|
28
|
+
let identity;
|
|
29
|
+
let identityResolved = false;
|
|
30
|
+
function resolveIdentity() {
|
|
31
|
+
if (!identityResolved) {
|
|
32
|
+
identityResolved = true;
|
|
33
|
+
try {
|
|
34
|
+
identity = buildIdentity?.();
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
logger.warn("[dsl] failed to build trace identity; continuing without it", { err });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return identity;
|
|
41
|
+
}
|
|
22
42
|
async function tick() {
|
|
43
|
+
await withSpan("dsl.tick", {}, async (span) => {
|
|
44
|
+
const id = resolveIdentity();
|
|
45
|
+
if (id)
|
|
46
|
+
await setTraceIdentityAttributes(id);
|
|
47
|
+
await runTick(span);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
async function runTick(span) {
|
|
23
51
|
const tickStartMs = Date.now();
|
|
24
52
|
const tickId = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 23);
|
|
53
|
+
span.setAttribute("senpi.tick.id", tickId);
|
|
25
54
|
const addresses = await stateManager.listStrategyIds();
|
|
26
55
|
const activePositions = [];
|
|
27
56
|
for (const address of addresses) {
|
|
@@ -41,13 +70,13 @@ export function createPriceMonitor(options) {
|
|
|
41
70
|
activePositions: activePositions.map((p) => ({ address: p.address, asset: p.asset, dex: p.dex || "main" })),
|
|
42
71
|
});
|
|
43
72
|
try {
|
|
44
|
-
const clearinghouseResults = await Promise.all(addresses.map(async (addr) => {
|
|
73
|
+
const clearinghouseResults = await withSpan("dsl.clearinghouse", {}, () => Promise.all(addresses.map(async (addr) => {
|
|
45
74
|
const strategyState = strategyStates.get(addr);
|
|
46
75
|
if (!strategyState)
|
|
47
76
|
return { addr, result: undefined };
|
|
48
77
|
const result = await strategyState.fetchClearinghouseState();
|
|
49
78
|
return { addr, result };
|
|
50
|
-
}));
|
|
79
|
+
})));
|
|
51
80
|
const addressesWithUnavailableState = getAddressesWithUnavailableClearinghouseState(clearinghouseResults);
|
|
52
81
|
if (addressesWithUnavailableState.length > 0) {
|
|
53
82
|
logger.warn("[dsl] clearinghouse state unavailable; skipping monitor tick", {
|
|
@@ -80,14 +109,21 @@ export function createPriceMonitor(options) {
|
|
|
80
109
|
if (!strategyState)
|
|
81
110
|
continue; // foreign wallet / no StrategyState in this process → never adopt
|
|
82
111
|
try {
|
|
83
|
-
const { success } = await
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
112
|
+
const { success } = await withSpan("dsl.reconcile", { "senpi.dsl.reconcile.address": address }, async (span) => {
|
|
113
|
+
const result = await runReconcile({
|
|
114
|
+
address,
|
|
115
|
+
strategyState,
|
|
116
|
+
senpi: senpiClient,
|
|
117
|
+
stateManager,
|
|
118
|
+
adopter: reconcileAdopter,
|
|
119
|
+
bus,
|
|
120
|
+
serialize: reconcileSerialize,
|
|
121
|
+
});
|
|
122
|
+
span.setAttribute("senpi.dsl.reconcile.adopted", result.counts.adopted);
|
|
123
|
+
span.setAttribute("senpi.dsl.reconcile.resized", result.counts.resized);
|
|
124
|
+
span.setAttribute("senpi.dsl.reconcile.archived", result.counts.archived);
|
|
125
|
+
span.setAttribute("senpi.dsl.reconcile.success", result.success);
|
|
126
|
+
return result;
|
|
91
127
|
});
|
|
92
128
|
if (success)
|
|
93
129
|
reconcileGateResolve?.();
|
|
@@ -100,11 +136,11 @@ export function createPriceMonitor(options) {
|
|
|
100
136
|
else {
|
|
101
137
|
// Fallback (no adopter wired): legacy archive-only reconcile.
|
|
102
138
|
try {
|
|
103
|
-
await reconcileStateWithBackend(stateManager, senpiClient, addresses, {
|
|
139
|
+
await withSpan("dsl.reconcile", {}, () => reconcileStateWithBackend(stateManager, senpiClient, addresses, {
|
|
104
140
|
bus,
|
|
105
141
|
strategyStates,
|
|
106
142
|
strategyStateOnly: true,
|
|
107
|
-
});
|
|
143
|
+
}));
|
|
108
144
|
}
|
|
109
145
|
catch (e) {
|
|
110
146
|
logger.warn("[dsl] reconcile with backend failed; continuing monitor tick", { tickId, error: e });
|
|
@@ -133,22 +169,27 @@ export function createPriceMonitor(options) {
|
|
|
133
169
|
const pricesStartedAt = Date.now();
|
|
134
170
|
const pricesByDex = new Map();
|
|
135
171
|
const dexesToFetch = ["", "xyz"];
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
172
|
+
// Start the fetches inside the span so their HTTP client spans nest under dsl.prices.
|
|
173
|
+
// Building the promises (which kicks off getMarketPrices) outside would attach those
|
|
174
|
+
// children to whatever span is active at that point instead.
|
|
175
|
+
await withSpan("dsl.prices", {}, async () => {
|
|
176
|
+
const dexFetchPromises = dexesToFetch.map(async (dex) => {
|
|
177
|
+
try {
|
|
178
|
+
const prices = await withRetry(() => senpiClient.getMarketPrices({ dex }), {
|
|
179
|
+
retries: DSL_EXTERNAL_RETRIES,
|
|
180
|
+
delayMs: DSL_EXTERNAL_RETRY_DELAY_MS,
|
|
181
|
+
label: "getMarketPrices",
|
|
182
|
+
onRetry: (attempt, remaining, err) => logger.warn("[dsl] getMarketPrices retry", { dex: dex || "main", attempt, remaining, err }),
|
|
183
|
+
});
|
|
184
|
+
if (prices && Object.keys(prices).length > 0)
|
|
185
|
+
pricesByDex.set(dex, prices);
|
|
186
|
+
}
|
|
187
|
+
catch (e) {
|
|
188
|
+
logger.warn("getMarketPrices failed", { dex: dex || "main", err: e });
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
await Promise.all(dexFetchPromises);
|
|
150
192
|
});
|
|
151
|
-
await Promise.all(dexFetchPromises);
|
|
152
193
|
const pricesEndedAt = Date.now();
|
|
153
194
|
const positionsToProcess = [...byDex.values()].flat();
|
|
154
195
|
const priceSampleForPositions = positionsToProcess.length > 0
|
|
@@ -188,7 +229,12 @@ export function createPriceMonitor(options) {
|
|
|
188
229
|
return;
|
|
189
230
|
const price = marketPriceForAsset(pricesByDex.get(effectiveDex(state)), state.asset);
|
|
190
231
|
const positionStartedAt = Date.now();
|
|
191
|
-
await
|
|
232
|
+
await withSpan("dsl.position", {
|
|
233
|
+
"senpi.tick.id": tickId,
|
|
234
|
+
"senpi.position.id": String(state.positionId ?? state.correlationId),
|
|
235
|
+
"senpi.signal.asset": state.asset,
|
|
236
|
+
"senpi.signal.direction": state.direction,
|
|
237
|
+
}, (span) => processOnePosition(ctx, key, state, price, span));
|
|
192
238
|
// Telemetry-only fire-and-forget: this position's processing window for the dsl.position
|
|
193
239
|
// span. Positions run in parallel, so windows may overlap — that is the honest shape.
|
|
194
240
|
bus.emit("tracking.dsl_position", {
|
|
@@ -206,6 +252,8 @@ export function createPriceMonitor(options) {
|
|
|
206
252
|
await Promise.all(positionPromises);
|
|
207
253
|
});
|
|
208
254
|
await Promise.all(strategyPromises);
|
|
255
|
+
span.setAttribute("senpi.dsl.active_position_count", activePositions.length);
|
|
256
|
+
span.setAttribute("senpi.dsl.positions_processed", positionsToProcess.length);
|
|
209
257
|
const tickDurationMs = Date.now() - tickStartMs;
|
|
210
258
|
tickLog.call(logger, "[dsl] monitor tick complete", {
|
|
211
259
|
tickId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-monitor.js","sourceRoot":"","sources":["../../../src/dsl/monitor/create-monitor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create-monitor.js","sourceRoot":"","sources":["../../../src/dsl/monitor/create-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import type { SenpiEventBus } from "../events/index.js";
|
|
|
5
5
|
import type { StrategyState } from "../../types/strategy.js";
|
|
6
6
|
import type { DslState } from "../../types/dsl/index.js";
|
|
7
7
|
import type { StateManager } from "../../state/index.js";
|
|
8
|
+
import type { Span } from "@opentelemetry/api";
|
|
8
9
|
export interface MonitorProcessContext {
|
|
9
10
|
tickId: string;
|
|
10
11
|
ts: string;
|
|
@@ -18,5 +19,5 @@ export interface MonitorProcessContext {
|
|
|
18
19
|
/** Options for FEE_OPTIMIZED_LIMIT close orders. */
|
|
19
20
|
feeOptimizedLimitOptions?: import("../../senpi/types.js").FeeOptimizedLimitOptions;
|
|
20
21
|
}
|
|
21
|
-
export declare function processOnePosition(ctx: MonitorProcessContext, key: string, state: DslState, price: number | undefined): Promise<void>;
|
|
22
|
+
export declare function processOnePosition(ctx: MonitorProcessContext, key: string, state: DslState, price: number | undefined, span: Span): Promise<void>;
|
|
22
23
|
//# sourceMappingURL=process-one-position.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-one-position.d.ts","sourceRoot":"","sources":["../../../src/dsl/monitor/process-one-position.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"process-one-position.d.ts","sourceRoot":"","sources":["../../../src/dsl/monitor/process-one-position.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAiBzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAgF/C,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,GAAG,EAAE,aAAa,CAAC;IACnB,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,6DAA6D;IAC7D,cAAc,CAAC,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;IAC/D,oDAAoD;IACpD,wBAAwB,CAAC,EAAE,OAAO,sBAAsB,EAAE,wBAAwB,CAAC;CACpF;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,qBAAqB,EAC1B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,CAq2Bf"}
|
|
@@ -5,6 +5,7 @@ import { dslTick, exchangeStopLossTriggerPx } from "../engine/index.js";
|
|
|
5
5
|
import { CLOSE_REASON, MAX_CONSECUTIVE_CLOSE_FAILURES, DSL_EXTERNAL_RETRIES, DSL_EXTERNAL_RETRY_DELAY_MS, DSL_EVENTS, EVENTS, DSL_PRICE_FETCH_FAILURE_WARN_THRESHOLD, DSL_HEARTBEAT_FIRST_HOUR_MS, DSL_HEARTBEAT_INTERVAL_MS, DSL_HEARTBEAT_TIER_SUPPRESS_MS, } from "../../constants/dsl/index.js";
|
|
6
6
|
import { logger } from "../../utils/logger/dsl.js";
|
|
7
7
|
import { withRetry } from "../../utils/retry.js";
|
|
8
|
+
import { withSpan } from "../../telemetry/tracing.js";
|
|
8
9
|
import { effectiveDex } from "./effective-dex.js";
|
|
9
10
|
import { shouldSyncExchangeSl } from "./exchange-sync.js";
|
|
10
11
|
import { mapTiersToEngineConfig, mapEnginePositionToStateFields, parseSlOrderId } from "../engine-client/config-mapping.js";
|
|
@@ -64,7 +65,7 @@ function closedEmitStamps(state, fill = {}) {
|
|
|
64
65
|
...fill,
|
|
65
66
|
};
|
|
66
67
|
}
|
|
67
|
-
export async function processOnePosition(ctx, key, state, price) {
|
|
68
|
+
export async function processOnePosition(ctx, key, state, price, span) {
|
|
68
69
|
const { tickId, ts, now: isoNow, stateManager, strategyStates, bus, isSlPlacementInProgress = () => false } = ctx;
|
|
69
70
|
const strategy = strategyStates.get(state.address);
|
|
70
71
|
if (!strategy) {
|
|
@@ -93,13 +94,15 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
93
94
|
});
|
|
94
95
|
if (state.slOrderId != null) {
|
|
95
96
|
try {
|
|
96
|
-
const status = await withRetry(() => strategy.getOrderStatus(state.slOrderId), {
|
|
97
|
+
const status = await withSpan("dsl.sl_check", {}, () => withRetry(() => strategy.getOrderStatus(state.slOrderId), {
|
|
97
98
|
retries: DSL_EXTERNAL_RETRIES,
|
|
98
99
|
delayMs: DSL_EXTERNAL_RETRY_DELAY_MS,
|
|
99
100
|
label: "getOrderStatus (SL-hit check)",
|
|
100
101
|
onRetry: (attempt, remaining, err) => logger.warn("[dsl] getOrderStatus retry", { asset: state.asset, attempt, remaining, err }),
|
|
101
|
-
});
|
|
102
|
+
}));
|
|
102
103
|
if (status?.filled) {
|
|
104
|
+
span.addEvent("external_close_detected", { source: "sl_order" });
|
|
105
|
+
span.setAttribute("senpi.dsl.close_reason", CLOSE_REASON.EXCHANGE_SL_HIT);
|
|
103
106
|
logger.info("[dsl] exchange SL filled, archiving position", {
|
|
104
107
|
tickId,
|
|
105
108
|
asset: state.asset,
|
|
@@ -148,7 +151,7 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
148
151
|
const closeStartedAt = Date.now();
|
|
149
152
|
let closeAttemptEmitted = false;
|
|
150
153
|
try {
|
|
151
|
-
const closeResult = await withRetry(() => strategy.closePosition(state.asset, closeReasonToUse, state.dex || undefined, {
|
|
154
|
+
const closeResult = await withSpan("dsl.close_attempt", { "senpi.dsl.attempt": next.consecutiveCloseFailures }, () => withRetry(() => strategy.closePosition(state.asset, closeReasonToUse, state.dex || undefined, {
|
|
152
155
|
orderType: ctx.closeOrderType,
|
|
153
156
|
feeOptimizedLimitOptions: ctx.feeOptimizedLimitOptions,
|
|
154
157
|
}), {
|
|
@@ -156,7 +159,7 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
156
159
|
delayMs: DSL_EXTERNAL_RETRY_DELAY_MS,
|
|
157
160
|
label: "closePosition (pendingClose)",
|
|
158
161
|
onRetry: (attempt, remaining, err) => logger.warn("[dsl] closePosition retry", { asset: state.asset, attempt, remaining, err }),
|
|
159
|
-
});
|
|
162
|
+
}));
|
|
160
163
|
// Telemetry-only fire-and-forget: the venue-call window for the dsl.close_attempt span.
|
|
161
164
|
bus.emit("tracking.dsl_close_attempt", {
|
|
162
165
|
tickId,
|
|
@@ -172,6 +175,7 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
172
175
|
timestamp: isoNow(),
|
|
173
176
|
});
|
|
174
177
|
closeAttemptEmitted = true;
|
|
178
|
+
span.setAttribute("senpi.dsl.close_reason", closeReasonToUse);
|
|
175
179
|
const closeFill = parseCloseFillDetail(closeResult);
|
|
176
180
|
logger.info("[dsl] closePosition succeeded, archiving (pendingClose)", {
|
|
177
181
|
tickId,
|
|
@@ -281,6 +285,25 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
281
285
|
return;
|
|
282
286
|
}
|
|
283
287
|
const result = dslTick(state, price, ts);
|
|
288
|
+
if (result.floorChanged) {
|
|
289
|
+
span.addEvent("floorChanged", { "senpi.dsl.floor_price": result.state.floorPrice });
|
|
290
|
+
}
|
|
291
|
+
if (result.phaseChanged) {
|
|
292
|
+
span.addEvent("phaseChanged", { "senpi.dsl.phase": result.newPhase ?? 2 });
|
|
293
|
+
}
|
|
294
|
+
if (result.tierChanged && result.newTierIndex != null) {
|
|
295
|
+
span.addEvent("tier_advanced", { "senpi.dsl.tier_index": result.newTierIndex });
|
|
296
|
+
}
|
|
297
|
+
if ((result.state.currentBreachCount ?? 0) > (state.currentBreachCount ?? 0)) {
|
|
298
|
+
span.addEvent("breach_detected", {
|
|
299
|
+
count: result.state.currentBreachCount,
|
|
300
|
+
required: result.state.breachesRequired,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
span.setAttribute("senpi.dsl.phase", result.state.phase);
|
|
304
|
+
if (result.state.currentTierIndex != null) {
|
|
305
|
+
span.setAttribute("senpi.dsl.tier_index", result.state.currentTierIndex);
|
|
306
|
+
}
|
|
284
307
|
const next = { ...result.state };
|
|
285
308
|
next.consecutiveFetchFailures = 0;
|
|
286
309
|
next.tickCount = (state.tickCount ?? 0) + 1;
|
|
@@ -314,6 +337,8 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
314
337
|
});
|
|
315
338
|
if (result.action === "close") {
|
|
316
339
|
const closeReasonToUse = result.closeReason ?? CLOSE_REASON.DSL_BREACH;
|
|
340
|
+
span.setAttribute("senpi.dsl.current_roe", next.currentROE);
|
|
341
|
+
span.setAttribute("senpi.dsl.floor_price", next.floorPrice);
|
|
317
342
|
if (closeReasonToUse === CLOSE_REASON.DSL_BREACH && next.phase === 2) {
|
|
318
343
|
logger.warn("[dsl] ignoring spurious dsl_breach close in phase 2 (exchange SL should exit)", {
|
|
319
344
|
tickId,
|
|
@@ -333,9 +358,12 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
333
358
|
// If backend owns Phase 2, also delete the position on the backend
|
|
334
359
|
if (next.handoffStatus === "ok" && next.backendDslPositionId && strategy) {
|
|
335
360
|
try {
|
|
336
|
-
await
|
|
337
|
-
|
|
338
|
-
|
|
361
|
+
await withSpan("dsl.handoff", { "senpi.dsl.handoff.op": "delete" }, async (handoffSpan) => {
|
|
362
|
+
await strategy.deleteRatchetStop({
|
|
363
|
+
asset: state.asset,
|
|
364
|
+
dex: state.dex || undefined,
|
|
365
|
+
});
|
|
366
|
+
handoffSpan.setAttribute("senpi.dsl.handoff.status", "ok");
|
|
339
367
|
});
|
|
340
368
|
logger.info("[dsl] deleted backend dsl position (global settings close)", {
|
|
341
369
|
tickId,
|
|
@@ -356,7 +384,7 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
356
384
|
const closeStartedAt = Date.now();
|
|
357
385
|
let closeAttemptEmitted = false;
|
|
358
386
|
try {
|
|
359
|
-
const closeResult = await withRetry(() => strategy.closePosition(state.asset, closeReasonToUse, state.dex || undefined, {
|
|
387
|
+
const closeResult = await withSpan("dsl.close_attempt", { "senpi.dsl.attempt": (next.consecutiveCloseFailures ?? 0) + 1 }, () => withRetry(() => strategy.closePosition(state.asset, closeReasonToUse, state.dex || undefined, {
|
|
360
388
|
orderType: ctx.closeOrderType,
|
|
361
389
|
feeOptimizedLimitOptions: ctx.feeOptimizedLimitOptions,
|
|
362
390
|
}), {
|
|
@@ -364,7 +392,7 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
364
392
|
delayMs: DSL_EXTERNAL_RETRY_DELAY_MS,
|
|
365
393
|
label: "closePosition (dsl breach/timeout)",
|
|
366
394
|
onRetry: (attempt, remaining, err) => logger.warn("[dsl] closePosition retry", { asset: state.asset, attempt, remaining, err }),
|
|
367
|
-
});
|
|
395
|
+
}));
|
|
368
396
|
// Telemetry-only fire-and-forget: the venue-call window for the dsl.close_attempt span.
|
|
369
397
|
// Emitted before any post-venue work (fill parsing) so its outcome reflects the venue call alone.
|
|
370
398
|
bus.emit("tracking.dsl_close_attempt", {
|
|
@@ -393,6 +421,7 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
393
421
|
lastError: String(e),
|
|
394
422
|
lastErrorAt: ts,
|
|
395
423
|
};
|
|
424
|
+
span.addEvent("pendingClose_set", { attempt: pending.consecutiveCloseFailures });
|
|
396
425
|
// Telemetry-only fire-and-forget: the failed venue-call window (dsl.close_attempt, error).
|
|
397
426
|
// Guarded: when the ok emit already fired, the venue call itself succeeded — a later
|
|
398
427
|
// post-venue throw must not be misattributed to the venue.
|
|
@@ -413,6 +442,7 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
413
442
|
});
|
|
414
443
|
}
|
|
415
444
|
if ((pending.consecutiveCloseFailures ?? 0) >= MAX_CONSECUTIVE_CLOSE_FAILURES) {
|
|
445
|
+
span.setAttribute("senpi.dsl.close_reason", CLOSE_REASON.CLOSE_POSITION_FAILED);
|
|
416
446
|
const failedCloseState = { ...pending, active: false, closedAt: isoNow(), closeReason: CLOSE_REASON.CLOSE_POSITION_FAILED };
|
|
417
447
|
const archived = await archiveIfStillActive(stateManager, key, state.address, state.asset, effectiveDex(state), () => failedCloseState, { tickId, skipMessage: "[dsl] skip breach close-fail archive: state already cleared (concurrent close)" });
|
|
418
448
|
if (!archived)
|
|
@@ -446,6 +476,7 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
446
476
|
}
|
|
447
477
|
return;
|
|
448
478
|
}
|
|
479
|
+
span.setAttribute("senpi.dsl.close_reason", closeReasonToUse);
|
|
449
480
|
logger.info("[dsl] closePosition succeeded, archiving (dsl breach/timeout)", {
|
|
450
481
|
tickId,
|
|
451
482
|
asset: state.asset,
|
|
@@ -525,7 +556,7 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
525
556
|
}
|
|
526
557
|
}
|
|
527
558
|
if (next.handoffStatus === "ok" && strategy) {
|
|
528
|
-
await handleHandoffOk(ctx, key, next, state, strategy);
|
|
559
|
+
await handleHandoffOk(ctx, key, next, state, strategy, span);
|
|
529
560
|
return;
|
|
530
561
|
}
|
|
531
562
|
// Catch-up: if position is already in Phase 2 but handoff was never attempted,
|
|
@@ -588,15 +619,20 @@ export async function processOnePosition(ctx, key, state, price) {
|
|
|
588
619
|
const slSyncStartedAt = Date.now();
|
|
589
620
|
let slUpdateEmitted = false;
|
|
590
621
|
try {
|
|
591
|
-
const res = await
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
622
|
+
const res = await withSpan("dsl.sl_update", {}, async (slSpan) => {
|
|
623
|
+
const r = await withRetry(() => strategy.editPosition({
|
|
624
|
+
coin: state.asset,
|
|
625
|
+
dex: state.dex || undefined,
|
|
626
|
+
stopLoss: { triggerPx: exchangeTriggerPx },
|
|
627
|
+
}), {
|
|
628
|
+
retries: DSL_EXTERNAL_RETRIES,
|
|
629
|
+
delayMs: DSL_EXTERNAL_RETRY_DELAY_MS,
|
|
630
|
+
label: "editPosition (SL sync)",
|
|
631
|
+
onRetry: (attempt, remaining, err) => logger.warn("[dsl] editPosition retry", { asset: state.asset, attempt, remaining, err }),
|
|
632
|
+
});
|
|
633
|
+
if (r.slOrderId != null)
|
|
634
|
+
slSpan.setAttribute("senpi.order.id", String(r.slOrderId));
|
|
635
|
+
return r;
|
|
600
636
|
});
|
|
601
637
|
const slSyncEndedAt = Date.now();
|
|
602
638
|
// Telemetry-only fire-and-forget: the venue-call window for the dsl.sl_update span. Emitted
|
|
@@ -765,11 +801,11 @@ async function attemptHandoffRegistration(ctx, key, next, _original, strategy) {
|
|
|
765
801
|
// attempt succeeded but we never persisted "ok"), adopt it instead of
|
|
766
802
|
// sending another addRatchetStop that the backend turns into an EDIT.
|
|
767
803
|
try {
|
|
768
|
-
const existing = await strategy.queryRatchetStops({
|
|
804
|
+
const existing = await withSpan("dsl.handoff", { "senpi.dsl.handoff.op": "register_precheck" }, () => strategy.queryRatchetStops({
|
|
769
805
|
asset: next.asset,
|
|
770
806
|
dex: next.dex || undefined,
|
|
771
807
|
status: "ALL",
|
|
772
|
-
});
|
|
808
|
+
}));
|
|
773
809
|
const active = existing.filter((p) => !BACKEND_TERMINAL_STATUSES.has(p.status));
|
|
774
810
|
if (active.length > 0) {
|
|
775
811
|
const adopted = active[0];
|
|
@@ -802,18 +838,24 @@ async function attemptHandoffRegistration(ctx, key, next, _original, strategy) {
|
|
|
802
838
|
});
|
|
803
839
|
}
|
|
804
840
|
try {
|
|
805
|
-
const result = await
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
841
|
+
const result = await withSpan("dsl.handoff", { "senpi.dsl.handoff.op": "register" }, async (handoffSpan) => {
|
|
842
|
+
const r = await strategy.addRatchetStop({
|
|
843
|
+
asset: next.asset,
|
|
844
|
+
dex: next.dex || undefined,
|
|
845
|
+
direction: next.direction,
|
|
846
|
+
entryPrice: next.entryPrice,
|
|
847
|
+
size: next.size,
|
|
848
|
+
leverage: next.leverage,
|
|
849
|
+
ratchetStopConfig: {
|
|
850
|
+
tiered: {
|
|
851
|
+
tiers: mapTiersToEngineConfig(next.tiers),
|
|
852
|
+
},
|
|
815
853
|
},
|
|
816
|
-
}
|
|
854
|
+
});
|
|
855
|
+
if (r.success && r.position) {
|
|
856
|
+
handoffSpan.setAttribute("senpi.dsl.handoff.status", BACKEND_TERMINAL_STATUSES.has(r.position.status) ? "aborted" : "ok");
|
|
857
|
+
}
|
|
858
|
+
return r;
|
|
817
859
|
});
|
|
818
860
|
if (result.success && result.position) {
|
|
819
861
|
if (BACKEND_TERMINAL_STATUSES.has(result.position.status)) {
|
|
@@ -869,7 +911,7 @@ async function attemptHandoffRegistration(ctx, key, next, _original, strategy) {
|
|
|
869
911
|
});
|
|
870
912
|
}
|
|
871
913
|
}
|
|
872
|
-
async function handleHandoffOk(ctx, key, next, original, strategy) {
|
|
914
|
+
async function handleHandoffOk(ctx, key, next, original, strategy, span) {
|
|
873
915
|
const { tickId, ts, stateManager, bus } = ctx;
|
|
874
916
|
let updated = { ...next };
|
|
875
917
|
// Snapshot pre-merge state so we can detect backend event echoes for tier/SL
|
|
@@ -877,11 +919,11 @@ async function handleHandoffOk(ctx, key, next, original, strategy) {
|
|
|
877
919
|
const prevTierIndex = updated.currentTierIndex;
|
|
878
920
|
const prevSlOrderId = updated.slOrderId;
|
|
879
921
|
try {
|
|
880
|
-
const positions = await strategy.queryRatchetStops({
|
|
922
|
+
const positions = await withSpan("dsl.handoff", { "senpi.dsl.handoff.op": "poll_positions" }, () => strategy.queryRatchetStops({
|
|
881
923
|
asset: original.asset,
|
|
882
924
|
dex: original.dex || undefined,
|
|
883
925
|
status: "ALL",
|
|
884
|
-
});
|
|
926
|
+
}));
|
|
885
927
|
const backendPos = next.backendDslPositionId
|
|
886
928
|
? positions.find((p) => p.id === next.backendDslPositionId) ?? null
|
|
887
929
|
: positions.filter((p) => !BACKEND_TERMINAL_STATUSES.has(p.status)).length === 1
|
|
@@ -906,12 +948,14 @@ async function handleHandoffOk(ctx, key, next, original, strategy) {
|
|
|
906
948
|
}
|
|
907
949
|
else {
|
|
908
950
|
if (BACKEND_TERMINAL_STATUSES.has(backendPos.status)) {
|
|
951
|
+
span.addEvent("external_close_detected", { source: "backend_terminal" });
|
|
909
952
|
logger.info("[dsl] backend reports terminal status, closing position locally", {
|
|
910
953
|
tickId,
|
|
911
954
|
asset: original.asset,
|
|
912
955
|
backendStatus: backendPos.status,
|
|
913
956
|
});
|
|
914
957
|
const closeReason = `backend_${backendPos.status.toLowerCase()}`;
|
|
958
|
+
span.setAttribute("senpi.dsl.close_reason", closeReason);
|
|
915
959
|
const closedState = {
|
|
916
960
|
...updated,
|
|
917
961
|
active: false,
|
|
@@ -952,11 +996,11 @@ async function handleHandoffOk(ctx, key, next, original, strategy) {
|
|
|
952
996
|
try {
|
|
953
997
|
// ASC ordering is required: the cursor advances to the LAST element of the array
|
|
954
998
|
// below, which must be the newest event. Backend default is DESC.
|
|
955
|
-
const events = await strategy.queryRatchetStopEvents({
|
|
999
|
+
const events = await withSpan("dsl.handoff", { "senpi.dsl.handoff.op": "poll_events" }, () => strategy.queryRatchetStopEvents({
|
|
956
1000
|
positionId: updated.backendDslPositionId ?? undefined,
|
|
957
1001
|
since: updated.lastBackendDslTick ?? undefined,
|
|
958
1002
|
sortOrder: "ASC",
|
|
959
|
-
});
|
|
1003
|
+
}));
|
|
960
1004
|
// Filter out events already seen on the previous poll (since may be inclusive)
|
|
961
1005
|
const cursor = updated.lastBackendDslTick;
|
|
962
1006
|
const freshEvents = cursor
|
|
@@ -1037,7 +1081,9 @@ async function handleHandoffOk(ctx, key, next, original, strategy) {
|
|
|
1037
1081
|
});
|
|
1038
1082
|
// Archive local state when backend reports position closed via event stream
|
|
1039
1083
|
if (backendClosed) {
|
|
1084
|
+
span.addEvent("external_close_detected", { source: "backend_terminal" });
|
|
1040
1085
|
const closeReason = backendCloseReason ?? "backend_closed";
|
|
1086
|
+
span.setAttribute("senpi.dsl.close_reason", closeReason);
|
|
1041
1087
|
logger.info("[dsl] backend CLOSED event received, archiving local state", {
|
|
1042
1088
|
tickId,
|
|
1043
1089
|
key,
|