@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.
Files changed (66) hide show
  1. package/dist/actions/close-position/close-position.action.d.ts.map +1 -1
  2. package/dist/actions/close-position/close-position.action.js +95 -65
  3. package/dist/actions/close-position/close-position.action.js.map +1 -1
  4. package/dist/actions/decision-engine.d.ts.map +1 -1
  5. package/dist/actions/decision-engine.js +40 -28
  6. package/dist/actions/decision-engine.js.map +1 -1
  7. package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
  8. package/dist/actions/open-position/open-position.action.js +261 -202
  9. package/dist/actions/open-position/open-position.action.js.map +1 -1
  10. package/dist/dsl/monitor/create-monitor.d.ts +3 -0
  11. package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
  12. package/dist/dsl/monitor/create-monitor.js +76 -28
  13. package/dist/dsl/monitor/create-monitor.js.map +1 -1
  14. package/dist/dsl/monitor/process-one-position.d.ts +2 -1
  15. package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
  16. package/dist/dsl/monitor/process-one-position.js +84 -38
  17. package/dist/dsl/monitor/process-one-position.js.map +1 -1
  18. package/dist/dsl/plugin/index.d.ts +2 -0
  19. package/dist/dsl/plugin/index.d.ts.map +1 -1
  20. package/dist/dsl/plugin/index.js +6 -2
  21. package/dist/dsl/plugin/index.js.map +1 -1
  22. package/dist/dsl/plugin/options.d.ts +3 -0
  23. package/dist/dsl/plugin/options.d.ts.map +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +7 -12
  26. package/dist/index.js.map +1 -1
  27. package/dist/runtime/create-actions.d.ts.map +1 -1
  28. package/dist/runtime/create-actions.js +40 -5
  29. package/dist/runtime/create-actions.js.map +1 -1
  30. package/dist/runtime/create-scanner-module.d.ts +2 -1
  31. package/dist/runtime/create-scanner-module.d.ts.map +1 -1
  32. package/dist/runtime/create-scanner-module.js +2 -1
  33. package/dist/runtime/create-scanner-module.js.map +1 -1
  34. package/dist/runtime/runtime.d.ts +10 -0
  35. package/dist/runtime/runtime.d.ts.map +1 -1
  36. package/dist/runtime/runtime.js +143 -73
  37. package/dist/runtime/runtime.js.map +1 -1
  38. package/dist/scanners/engine/data-providers.d.ts +3 -0
  39. package/dist/scanners/engine/data-providers.d.ts.map +1 -1
  40. package/dist/scanners/engine/data-providers.js.map +1 -1
  41. package/dist/scanners/engine/engine.d.ts +18 -0
  42. package/dist/scanners/engine/engine.d.ts.map +1 -1
  43. package/dist/scanners/engine/engine.js +93 -2
  44. package/dist/scanners/engine/engine.js.map +1 -1
  45. package/dist/scanners/engine/input-resolver.d.ts.map +1 -1
  46. package/dist/scanners/engine/input-resolver.js +9 -7
  47. package/dist/scanners/engine/input-resolver.js.map +1 -1
  48. package/dist/scanners/runtime-module.d.ts +3 -0
  49. package/dist/scanners/runtime-module.d.ts.map +1 -1
  50. package/dist/scanners/runtime-module.js +1 -0
  51. package/dist/scanners/runtime-module.js.map +1 -1
  52. package/dist/telemetry/otel-sdk.d.ts +105 -0
  53. package/dist/telemetry/otel-sdk.d.ts.map +1 -0
  54. package/dist/telemetry/otel-sdk.js +268 -0
  55. package/dist/telemetry/otel-sdk.js.map +1 -0
  56. package/dist/telemetry/trace-identity.d.ts +31 -0
  57. package/dist/telemetry/trace-identity.d.ts.map +1 -0
  58. package/dist/telemetry/trace-identity.js +58 -0
  59. package/dist/telemetry/trace-identity.js.map +1 -0
  60. package/dist/telemetry/tracing.d.ts +32 -0
  61. package/dist/telemetry/tracing.d.ts.map +1 -0
  62. package/dist/telemetry/tracing.js +70 -0
  63. package/dist/telemetry/tracing.js.map +1 -0
  64. package/dist/types/scanner.d.ts +2 -0
  65. package/dist/types/scanner.d.ts.map +1 -1
  66. 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;AASzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAKpE,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;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,CA0N9F"}
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 runReconcile({
84
- address,
85
- strategyState,
86
- senpi: senpiClient,
87
- stateManager,
88
- adopter: reconcileAdopter,
89
- bus,
90
- serialize: reconcileSerialize,
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
- const dexFetchPromises = dexesToFetch.map(async (dex) => {
137
- try {
138
- const prices = await withRetry(() => senpiClient.getMarketPrices({ dex }), {
139
- retries: DSL_EXTERNAL_RETRIES,
140
- delayMs: DSL_EXTERNAL_RETRY_DELAY_MS,
141
- label: "getMarketPrices",
142
- onRetry: (attempt, remaining, err) => logger.warn("[dsl] getMarketPrices retry", { dex: dex || "main", attempt, remaining, err }),
143
- });
144
- if (prices && Object.keys(prices).length > 0)
145
- pricesByDex.set(dex, prices);
146
- }
147
- catch (e) {
148
- logger.warn("getMarketPrices failed", { dex: dex || "main", err: e });
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 processOnePosition(ctx, key, state, price);
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;AA+FzD,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,GACxB,OAAO,CAAC,IAAI,CAAC,CAmzBf"}
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 strategy.deleteRatchetStop({
337
- asset: state.asset,
338
- dex: state.dex || undefined,
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 withRetry(() => strategy.editPosition({
592
- coin: state.asset,
593
- dex: state.dex || undefined,
594
- stopLoss: { triggerPx: exchangeTriggerPx },
595
- }), {
596
- retries: DSL_EXTERNAL_RETRIES,
597
- delayMs: DSL_EXTERNAL_RETRY_DELAY_MS,
598
- label: "editPosition (SL sync)",
599
- onRetry: (attempt, remaining, err) => logger.warn("[dsl] editPosition retry", { asset: state.asset, attempt, remaining, err }),
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 strategy.addRatchetStop({
806
- asset: next.asset,
807
- dex: next.dex || undefined,
808
- direction: next.direction,
809
- entryPrice: next.entryPrice,
810
- size: next.size,
811
- leverage: next.leverage,
812
- ratchetStopConfig: {
813
- tiered: {
814
- tiers: mapTiersToEngineConfig(next.tiers),
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,