@senpi/runtime 3.0.118 → 3.0.122
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/action-events.d.ts +7 -21
- package/dist/actions/action-events.d.ts.map +1 -1
- package/dist/actions/action-events.js +26 -54
- package/dist/actions/action-events.js.map +1 -1
- package/dist/actions/action-runtime-module.d.ts.map +1 -1
- package/dist/actions/action-runtime-module.js +7 -38
- package/dist/actions/action-runtime-module.js.map +1 -1
- package/dist/actions/close-position/close-position.action.d.ts.map +1 -1
- package/dist/actions/close-position/close-position.action.js +15 -122
- 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 +2 -15
- package/dist/actions/decision-engine.js.map +1 -1
- package/dist/actions/event-derivation.d.ts +2 -71
- package/dist/actions/event-derivation.d.ts.map +1 -1
- package/dist/actions/event-derivation.js +8 -251
- package/dist/actions/event-derivation.js.map +1 -1
- package/dist/actions/open-position/open-position.action.d.ts +2 -17
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +56 -162
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/actions/position-tracker/position-tracker.action.d.ts +1 -2
- package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -1
- package/dist/actions/position-tracker/position-tracker.action.js +17 -62
- package/dist/actions/position-tracker/position-tracker.action.js.map +1 -1
- package/dist/actions/store/types.d.ts +2 -9
- package/dist/actions/store/types.d.ts.map +1 -1
- package/dist/actions/store/types.js.map +1 -1
- package/dist/actions/types.d.ts +0 -13
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js +0 -13
- package/dist/actions/types.js.map +1 -1
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +16 -11
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/constants/dsl/index.d.ts +17 -6
- package/dist/constants/dsl/index.d.ts.map +1 -1
- package/dist/constants/dsl/index.js +17 -6
- package/dist/constants/dsl/index.js.map +1 -1
- package/dist/dsl/engine/floors.d.ts +25 -1
- package/dist/dsl/engine/floors.d.ts.map +1 -1
- package/dist/dsl/engine/floors.js +38 -6
- package/dist/dsl/engine/floors.js.map +1 -1
- package/dist/dsl/engine/index.d.ts +1 -1
- package/dist/dsl/engine/index.d.ts.map +1 -1
- package/dist/dsl/engine/index.js +1 -1
- package/dist/dsl/engine/index.js.map +1 -1
- package/dist/dsl/engine/round.d.ts +22 -2
- package/dist/dsl/engine/round.d.ts.map +1 -1
- package/dist/dsl/engine/round.js +78 -5
- package/dist/dsl/engine/round.js.map +1 -1
- package/dist/dsl/engine/tick.d.ts.map +1 -1
- package/dist/dsl/engine/tick.js +31 -16
- package/dist/dsl/engine/tick.js.map +1 -1
- package/dist/dsl/engine-client/event-mapping.d.ts.map +1 -1
- package/dist/dsl/engine-client/event-mapping.js +0 -14
- package/dist/dsl/engine-client/event-mapping.js.map +1 -1
- package/dist/dsl/events/build-closed-event.d.ts +1 -16
- package/dist/dsl/events/build-closed-event.d.ts.map +1 -1
- package/dist/dsl/events/build-closed-event.js +0 -6
- package/dist/dsl/events/build-closed-event.js.map +1 -1
- package/dist/dsl/events/handlers.d.ts +0 -7
- package/dist/dsl/events/handlers.d.ts.map +1 -1
- package/dist/dsl/events/handlers.js +7 -37
- package/dist/dsl/events/handlers.js.map +1 -1
- package/dist/dsl/events/initial-state.d.ts +1 -1
- package/dist/dsl/events/initial-state.d.ts.map +1 -1
- package/dist/dsl/events/initial-state.js +4 -7
- package/dist/dsl/events/initial-state.js.map +1 -1
- package/dist/dsl/monitor/create-monitor.d.ts +2 -6
- package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
- package/dist/dsl/monitor/create-monitor.js +9 -15
- package/dist/dsl/monitor/create-monitor.js.map +1 -1
- package/dist/dsl/monitor/dsl-failure-events.d.ts +0 -2
- package/dist/dsl/monitor/dsl-failure-events.d.ts.map +1 -1
- package/dist/dsl/monitor/dsl-failure-events.js +1 -2
- package/dist/dsl/monitor/dsl-failure-events.js.map +1 -1
- package/dist/dsl/monitor/exchange-sync.d.ts +8 -3
- package/dist/dsl/monitor/exchange-sync.d.ts.map +1 -1
- package/dist/dsl/monitor/exchange-sync.js +16 -4
- package/dist/dsl/monitor/exchange-sync.js.map +1 -1
- package/dist/dsl/monitor/process-one-position.d.ts +0 -1
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +113 -62
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/dsl/plugin/index.d.ts +10 -12
- package/dist/dsl/plugin/index.d.ts.map +1 -1
- package/dist/dsl/plugin/index.js +14 -12
- package/dist/dsl/plugin/index.js.map +1 -1
- package/dist/health/types.d.ts +0 -13
- package/dist/health/types.d.ts.map +1 -1
- package/dist/health/types.js +0 -12
- package/dist/health/types.js.map +1 -1
- package/dist/index.d.ts +4 -27
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +206 -257
- package/dist/index.js.map +1 -1
- package/dist/runtime/action-registry.d.ts.map +1 -1
- package/dist/runtime/action-registry.js +3 -4
- package/dist/runtime/action-registry.js.map +1 -1
- package/dist/runtime/boot-skip.d.ts +73 -0
- package/dist/runtime/boot-skip.d.ts.map +1 -0
- package/dist/runtime/boot-skip.js +113 -0
- package/dist/runtime/boot-skip.js.map +1 -0
- package/dist/runtime/create-runtime-context.d.ts +2 -0
- package/dist/runtime/create-runtime-context.d.ts.map +1 -1
- package/dist/runtime/create-runtime-context.js +1 -0
- package/dist/runtime/create-runtime-context.js.map +1 -1
- package/dist/runtime/domain-events.d.ts.map +1 -1
- package/dist/runtime/domain-events.js +0 -7
- package/dist/runtime/domain-events.js.map +1 -1
- package/dist/runtime/lifecycle-events.d.ts +43 -10
- package/dist/runtime/lifecycle-events.d.ts.map +1 -1
- package/dist/runtime/lifecycle-events.js +83 -12
- package/dist/runtime/lifecycle-events.js.map +1 -1
- package/dist/runtime/lifecycle-reaper.d.ts +202 -0
- package/dist/runtime/lifecycle-reaper.d.ts.map +1 -0
- package/dist/runtime/lifecycle-reaper.js +390 -0
- package/dist/runtime/lifecycle-reaper.js.map +1 -0
- package/dist/runtime/reconcile-run.d.ts +3 -13
- package/dist/runtime/reconcile-run.d.ts.map +1 -1
- package/dist/runtime/reconcile-run.js +3 -4
- package/dist/runtime/reconcile-run.js.map +1 -1
- package/dist/runtime/reconcile-state.d.ts +0 -8
- package/dist/runtime/reconcile-state.d.ts.map +1 -1
- package/dist/runtime/reconcile-state.js +1 -4
- package/dist/runtime/reconcile-state.js.map +1 -1
- package/dist/runtime/run.d.ts +5 -1
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +1 -0
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/runtime-schema.js +3 -3
- package/dist/runtime/runtime-schema.js.map +1 -1
- package/dist/runtime/runtime.d.ts +2 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +4 -27
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.d.ts +0 -13
- package/dist/runtime/supervisor/long-running-supervisor.d.ts.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js +0 -1
- package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
- package/dist/runtime/update-apply-deps.d.ts +23 -2
- package/dist/runtime/update-apply-deps.d.ts.map +1 -1
- package/dist/runtime/update-apply-deps.js +11 -5
- package/dist/runtime/update-apply-deps.js.map +1 -1
- package/dist/runtime/validate-dsl-position-tracking.d.ts.map +1 -1
- package/dist/runtime/validate-dsl-position-tracking.js +1 -2
- package/dist/runtime/validate-dsl-position-tracking.js.map +1 -1
- package/dist/runtime-api/handlers/ingest-signals.d.ts.map +1 -1
- package/dist/runtime-api/handlers/ingest-signals.js +0 -1
- package/dist/runtime-api/handlers/ingest-signals.js.map +1 -1
- package/dist/runtime-api/handlers/types.d.ts +0 -5
- package/dist/runtime-api/handlers/types.d.ts.map +1 -1
- package/dist/runtime-api/intake/intake-events.d.ts +1 -1
- package/dist/runtime-api/intake/intake-events.d.ts.map +1 -1
- package/dist/runtime-api/intake/intake-events.js +3 -9
- package/dist/runtime-api/intake/intake-events.js.map +1 -1
- package/dist/runtime-api/intake/intake-mount.d.ts.map +1 -1
- package/dist/runtime-api/intake/intake-mount.js +19 -4
- package/dist/runtime-api/intake/intake-mount.js.map +1 -1
- package/dist/runtime-api/intake/process-error-post.d.ts +1 -6
- package/dist/runtime-api/intake/process-error-post.d.ts.map +1 -1
- package/dist/runtime-api/intake/process-error-post.js +1 -5
- package/dist/runtime-api/intake/process-error-post.js.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.d.ts +1 -7
- package/dist/runtime-api/intake/process-signal-post.d.ts.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.js +0 -5
- package/dist/runtime-api/intake/process-signal-post.js.map +1 -1
- package/dist/runtime-api/intake/scaffold-error-router.js.map +1 -1
- package/dist/runtime-api/intake/scanner-launcher.d.ts.map +1 -1
- package/dist/runtime-api/intake/scanner-launcher.js +0 -15
- package/dist/runtime-api/intake/scanner-launcher.js.map +1 -1
- package/dist/runtime-api/intake/types.d.ts +0 -55
- package/dist/runtime-api/intake/types.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.d.ts +0 -2
- package/dist/runtime-api/routes/signals.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.js +1 -5
- package/dist/runtime-api/routes/signals.js.map +1 -1
- package/dist/runtime-api/routes/signals.schema.d.ts +0 -43
- package/dist/runtime-api/routes/signals.schema.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.schema.js +0 -43
- package/dist/runtime-api/routes/signals.schema.js.map +1 -1
- package/dist/runtime-api/server.d.ts +1 -7
- package/dist/runtime-api/server.d.ts.map +1 -1
- package/dist/runtime-api/server.js +0 -1
- package/dist/runtime-api/server.js.map +1 -1
- package/dist/scanners/engine/engine.d.ts +1 -22
- package/dist/scanners/engine/engine.d.ts.map +1 -1
- package/dist/scanners/engine/engine.js +11 -78
- package/dist/scanners/engine/engine.js.map +1 -1
- package/dist/scanners/engine/lifecycle.d.ts +1 -7
- package/dist/scanners/engine/lifecycle.d.ts.map +1 -1
- package/dist/scanners/events.d.ts +0 -4
- package/dist/scanners/events.d.ts.map +1 -1
- package/dist/scanners/events.js +0 -2
- package/dist/scanners/events.js.map +1 -1
- package/dist/scanners/external/scaffold/delivery.py +25 -194
- package/dist/scanners/external/scaffold/scaffold.py +31 -172
- package/dist/scanners/external/scaffold/senpi_mcp.py +8 -150
- package/dist/scanners/external-scanner-receiver.d.ts +0 -17
- package/dist/scanners/external-scanner-receiver.d.ts.map +1 -1
- package/dist/scanners/external-scanner-receiver.js +0 -8
- package/dist/scanners/external-scanner-receiver.js.map +1 -1
- package/dist/scanners/runtime-module.d.ts +0 -1
- package/dist/scanners/runtime-module.d.ts.map +1 -1
- package/dist/scanners/runtime-module.js +9 -66
- package/dist/scanners/runtime-module.js.map +1 -1
- package/dist/skills-manager/manifest.d.ts.map +1 -1
- package/dist/skills-manager/manifest.js +1 -0
- package/dist/skills-manager/manifest.js.map +1 -1
- package/dist/skills-manager/skills-manifest.json +1 -0
- package/dist/telemetry/attributes.d.ts +0 -20
- package/dist/telemetry/attributes.d.ts.map +1 -1
- package/dist/telemetry/attributes.js +0 -24
- package/dist/telemetry/attributes.js.map +1 -1
- package/dist/telemetry/event-builders.d.ts +6 -81
- package/dist/telemetry/event-builders.d.ts.map +1 -1
- package/dist/telemetry/event-builders.js +17 -141
- package/dist/telemetry/event-builders.js.map +1 -1
- package/dist/telemetry/event-store.d.ts +0 -6
- package/dist/telemetry/event-store.d.ts.map +1 -1
- package/dist/telemetry/event-store.js +8 -12
- package/dist/telemetry/event-store.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +2 -14
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +4 -19
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/telemetry/spans/redact-pii.d.ts.map +1 -1
- package/dist/telemetry/spans/redact-pii.js +2 -18
- package/dist/telemetry/spans/redact-pii.js.map +1 -1
- package/dist/telemetry/tracing.d.ts +0 -9
- package/dist/telemetry/tracing.d.ts.map +1 -1
- package/dist/telemetry/tracing.js +0 -36
- package/dist/telemetry/tracing.js.map +1 -1
- package/dist/types/dsl/index.d.ts +1 -12
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/types/runtime.d.ts +8 -0
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/types/scanner.d.ts +0 -15
- package/dist/types/scanner.d.ts.map +1 -1
- package/dist/utils/event-catalog.d.ts +91 -166
- package/dist/utils/event-catalog.d.ts.map +1 -1
- package/dist/utils/event-catalog.js +13 -18
- package/dist/utils/event-catalog.js.map +1 -1
- package/dist/utils/keyed-mutex.d.ts +3 -2
- package/dist/utils/keyed-mutex.d.ts.map +1 -1
- package/dist/utils/keyed-mutex.js +3 -2
- package/dist/utils/keyed-mutex.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -4
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/validate/recipe-checks.d.ts.map +1 -1
- package/dist/validate/recipe-checks.js +2 -2
- package/dist/validate/recipe-checks.js.map +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/dist/actions/skipped-signal-results.d.ts +0 -25
- package/dist/actions/skipped-signal-results.d.ts.map +0 -1
- package/dist/actions/skipped-signal-results.js +0 -71
- package/dist/actions/skipped-signal-results.js.map +0 -1
- package/dist/runtime-api/intake/ingest-request.d.ts +0 -17
- package/dist/runtime-api/intake/ingest-request.d.ts.map +0 -1
- package/dist/runtime-api/intake/ingest-request.js +0 -34
- package/dist/runtime-api/intake/ingest-request.js.map +0 -1
- package/dist/runtime-api/intake/scaffold-tick-router.d.ts +0 -39
- package/dist/runtime-api/intake/scaffold-tick-router.d.ts.map +0 -1
- package/dist/runtime-api/intake/scaffold-tick-router.js +0 -122
- package/dist/runtime-api/intake/scaffold-tick-router.js.map +0 -1
- package/dist/scanners/external/scaffold/tick_facts.py +0 -130
- package/dist/scanners/external/scaffold/ulid.py +0 -58
- package/dist/telemetry/live-telemetry.d.ts +0 -238
- package/dist/telemetry/live-telemetry.d.ts.map +0 -1
- package/dist/telemetry/live-telemetry.js +0 -853
- package/dist/telemetry/live-telemetry.js.map +0 -1
- package/dist/telemetry/scanner-stats.d.ts +0 -143
- package/dist/telemetry/scanner-stats.d.ts.map +0 -1
- package/dist/telemetry/scanner-stats.js +0 -426
- package/dist/telemetry/scanner-stats.js.map +0 -1
- package/dist/telemetry/scanner-tick-feed.d.ts +0 -87
- package/dist/telemetry/scanner-tick-feed.d.ts.map +0 -1
- package/dist/telemetry/scanner-tick-feed.js +0 -48
- package/dist/telemetry/scanner-tick-feed.js.map +0 -1
- package/dist/telemetry/strategy-topology.d.ts +0 -99
- package/dist/telemetry/strategy-topology.d.ts.map +0 -1
- package/dist/telemetry/strategy-topology.js +0 -93
- package/dist/telemetry/strategy-topology.js.map +0 -1
- package/dist/telemetry/telemetry-publisher.d.ts +0 -63
- package/dist/telemetry/telemetry-publisher.d.ts.map +0 -1
- package/dist/telemetry/telemetry-publisher.js +0 -229
- package/dist/telemetry/telemetry-publisher.js.map +0 -1
- package/dist/telemetry/tick-frame.d.ts +0 -212
- package/dist/telemetry/tick-frame.d.ts.map +0 -1
- package/dist/telemetry/tick-frame.js +0 -421
- package/dist/telemetry/tick-frame.js.map +0 -1
- package/dist/telemetry/timeline-buffer.d.ts +0 -95
- package/dist/telemetry/timeline-buffer.d.ts.map +0 -1
- package/dist/telemetry/timeline-buffer.js +0 -237
- package/dist/telemetry/timeline-buffer.js.map +0 -1
- package/dist/utils/telemetry-required-log.d.ts +0 -60
- package/dist/utils/telemetry-required-log.d.ts.map +0 -1
- package/dist/utils/telemetry-required-log.js +0 -105
- package/dist/utils/telemetry-required-log.js.map +0 -1
- package/dist/utils/ulid.d.ts +0 -9
- package/dist/utils/ulid.d.ts.map +0 -1
- package/dist/utils/ulid.js +0 -43
- package/dist/utils/ulid.js.map +0 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Effective floor, tier floors, and ROE/price helpers for dslTick.
|
|
3
3
|
*/
|
|
4
4
|
import { createLogger } from "../../utils/logger.js";
|
|
5
|
-
import {
|
|
5
|
+
import { roundProtectiveLevel } from "./round.js";
|
|
6
6
|
const log = createLogger("[senpi-core][dsl-floors]");
|
|
7
7
|
/** ROE % at given price. */
|
|
8
8
|
export function computeCurrentROE(state, price) {
|
|
@@ -14,8 +14,8 @@ export function computeCurrentROE(state, price) {
|
|
|
14
14
|
export function roeToPriceFloor(state, floorRoe) {
|
|
15
15
|
const pct = floorRoe / 100 / state.leverage;
|
|
16
16
|
if (state.direction === "LONG")
|
|
17
|
-
return
|
|
18
|
-
return
|
|
17
|
+
return roundProtectiveLevel(state.entryPrice * (1 + pct), state.direction);
|
|
18
|
+
return roundProtectiveLevel(state.entryPrice * (1 - pct), state.direction);
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* Tier floor: % of current high-water ROE (`lock_hw_pct`).
|
|
@@ -47,8 +47,8 @@ export function phase1TrailingFloor(state) {
|
|
|
47
47
|
const retraceRoePct = state.phase1.retraceThreshold;
|
|
48
48
|
const retracePrice = retraceRoePct / 100 / state.leverage;
|
|
49
49
|
if (state.direction === "LONG")
|
|
50
|
-
return
|
|
51
|
-
return
|
|
50
|
+
return roundProtectiveLevel(hw * (1 - retracePrice), state.direction);
|
|
51
|
+
return roundProtectiveLevel(hw * (1 + retracePrice), state.direction);
|
|
52
52
|
}
|
|
53
53
|
/** Phase 1 max-loss + trailing. When phase1 is disabled, only the absolute (max-loss) floor applies until tiers engage. */
|
|
54
54
|
export function phase1BaseFloor(state) {
|
|
@@ -79,7 +79,39 @@ export function isBreach(state, price) {
|
|
|
79
79
|
return price <= state.floorPrice;
|
|
80
80
|
return price >= state.floorPrice;
|
|
81
81
|
}
|
|
82
|
-
/**
|
|
82
|
+
/**
|
|
83
|
+
* Does the runtime's LAST KNOWN exchange stop sit at or beyond the floor, so that the venue —
|
|
84
|
+
* not the runtime — is the thing that should exit this position?
|
|
85
|
+
*
|
|
86
|
+
* This reads two locally cached fields and never asks the venue itself. What keeps them honest
|
|
87
|
+
* is the monitor's top-of-tick order-status check, which runs before this and clears both when
|
|
88
|
+
* the venue reports the stop gone (cancelled or rejected). The residual is a status neither the
|
|
89
|
+
* live set nor the gone set recognises: that fails open and leaves the cache as it was, so this
|
|
90
|
+
* still answers "we believe a stop is resting there" rather than "one is".
|
|
91
|
+
*
|
|
92
|
+
* **Phase 2 only, and that gate is load-bearing.** In phase 1 the exchange stop is only the
|
|
93
|
+
* `max_loss_pct` absolute floor (`exchangeStopLossTriggerPx`), which equals `floorPrice` for as
|
|
94
|
+
* long as the trailing floor has not risen above it — so without the gate this would answer
|
|
95
|
+
* "resting" on an ordinary phase-1 position and silently disable the breach close, which is the
|
|
96
|
+
* exit path that works today.
|
|
97
|
+
*
|
|
98
|
+
* `handoffStatus === "ok"` is deliberately not a second, independent answer: both sites that
|
|
99
|
+
* flip a position to `"ok"` mirror the backend's `activeSLOrderId` into `slOrderId` and its
|
|
100
|
+
* `tierFloorPrice` into `lastSyncedFloorPrice` as they do so, and `handleHandoffOk` re-mirrors
|
|
101
|
+
* on every subsequent poll — so this one predicate already covers backend-owned positions, and
|
|
102
|
+
* it must, because `dsl-engine` cannot close a position at all. The mirror on the registration
|
|
103
|
+
* tick is load-bearing: this predicate runs before `handleHandoffOk` in the tick.
|
|
104
|
+
*/
|
|
105
|
+
export function hasRestingStopAtFloor(state) {
|
|
106
|
+
if (state.phase !== 2)
|
|
107
|
+
return false;
|
|
108
|
+
if (state.slOrderId == null || state.lastSyncedFloorPrice == null)
|
|
109
|
+
return false;
|
|
110
|
+
return state.direction === "LONG"
|
|
111
|
+
? state.lastSyncedFloorPrice >= state.floorPrice
|
|
112
|
+
: state.lastSyncedFloorPrice <= state.floorPrice;
|
|
113
|
+
}
|
|
114
|
+
/** Consecutive breaches before exit, in either phase (tier-level overrides removed in v2). */
|
|
83
115
|
export function resolveBreachesRequired(state) {
|
|
84
116
|
return state.phase1.consecutiveBreachesRequired;
|
|
85
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floors.js","sourceRoot":"","sources":["../../../src/dsl/engine/floors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"floors.js","sourceRoot":"","sources":["../../../src/dsl/engine/floors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pure DSL engine: rounding, state machine tick, exchange SL policy.
|
|
3
3
|
*/
|
|
4
|
-
export {
|
|
4
|
+
export { roundProtectiveLevel } from "./round.js";
|
|
5
5
|
export { dslTick } from "./tick.js";
|
|
6
6
|
export { exchangeStopLossTriggerPx } from "./exchange-stop.js";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/engine/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/engine/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/dsl/engine/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pure DSL engine: rounding, state machine tick, exchange SL policy.
|
|
3
3
|
*/
|
|
4
|
-
export {
|
|
4
|
+
export { roundProtectiveLevel } from "./round.js";
|
|
5
5
|
export { dslTick } from "./tick.js";
|
|
6
6
|
export { exchangeStopLossTriggerPx } from "./exchange-stop.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/engine/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/engine/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Rounding for DSL protective price levels (stops).
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Round a protective price level onto Hyperliquid's price grid, biased AWAY from the mark.
|
|
6
|
+
*
|
|
7
|
+
* A LONG's stop sits below the mark so it rounds down; a SHORT's sits above so it rounds up.
|
|
8
|
+
* THIS service's rounding may then only ever loosen a stop, never tighten it and never move it
|
|
9
|
+
* across the mark: the trading engine rejects `slTriggerPrice >= currentPrice` for a LONG (and
|
|
10
|
+
* `<=` for a SHORT) as "would execute immediately", and a rejected stop leaves the position with
|
|
11
|
+
* no exchange-side protection at all.
|
|
12
|
+
*
|
|
13
|
+
* It is not an end-to-end guarantee. The trading engine re-rounds what we send with
|
|
14
|
+
* `roundToDecimals(price, 6 - szDecimals)`, which is round-to-NEAREST (`utils.go:133-136`), so
|
|
15
|
+
* for an asset whose `szDecimals` forces fewer than 6 decimals it can still move a LONG floor
|
|
16
|
+
* back up by half a venue tick. Reading per-asset `szDecimals` is what would close that; until
|
|
17
|
+
* then the residual degrades to a rejection, which the phase-2 breach path now turns into an
|
|
18
|
+
* exit rather than a silent no-stop.
|
|
19
|
+
*
|
|
20
|
+
* Non-finite, zero and negative inputs are returned unchanged — there is no meaningful grid
|
|
21
|
+
* for them, and silently manufacturing a level would be worse than passing the caller's own
|
|
22
|
+
* value through to its validation.
|
|
23
|
+
*/
|
|
24
|
+
export declare function roundProtectiveLevel(value: number, direction: "LONG" | "SHORT"): number;
|
|
5
25
|
//# sourceMappingURL=round.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round.d.ts","sourceRoot":"","sources":["../../../src/dsl/engine/round.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"round.d.ts","sourceRoot":"","sources":["../../../src/dsl/engine/round.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoDH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAIvF"}
|
package/dist/dsl/engine/round.js
CHANGED
|
@@ -1,9 +1,82 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Rounding for DSL protective price levels (stops).
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
/** Hyperliquid's price rule: significant figures, then a per-asset decimal cap. */
|
|
5
|
+
const SIG_FIGS = 5;
|
|
6
|
+
/**
|
|
7
|
+
* `6 - szDecimals` is the perp decimal cap; 6 is its loosest value and the runtime has no
|
|
8
|
+
* per-asset `szDecimals`, so this is the tightest bound we can assert without one.
|
|
9
|
+
*/
|
|
10
|
+
const MAX_DECIMALS = 6;
|
|
11
|
+
/** Decimal exponent of `value`, read off its shortest exponential form so no rounding can bump it. */
|
|
12
|
+
function decimalExponent(value) {
|
|
13
|
+
const s = value.toExponential();
|
|
14
|
+
return Number(s.slice(s.indexOf("e") + 1));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Quantise to `SIG_FIGS`, biased away from the mark.
|
|
18
|
+
*
|
|
19
|
+
* `Number(value.toPrecision(n))` is used rather than `Math.floor(value * 10 ** k)` because the
|
|
20
|
+
* latter carries binary floating-point artifacts (`8.29 * 1e4 === 82899.99999999999`) that
|
|
21
|
+
* silently drift the level by a tick. `toPrecision` gives the NEAREST grid value; we step one
|
|
22
|
+
* unit in the last place only when that landed on the wrong side.
|
|
23
|
+
*/
|
|
24
|
+
function toSignificantFigures(value, roundDown) {
|
|
25
|
+
const nearest = Number(value.toPrecision(SIG_FIGS));
|
|
26
|
+
if (nearest === value)
|
|
27
|
+
return value;
|
|
28
|
+
const ulp = 10 ** (decimalExponent(value) - (SIG_FIGS - 1));
|
|
29
|
+
if (roundDown && nearest > value)
|
|
30
|
+
return Number((nearest - ulp).toPrecision(SIG_FIGS));
|
|
31
|
+
if (!roundDown && nearest < value)
|
|
32
|
+
return Number((nearest + ulp).toPrecision(SIG_FIGS));
|
|
33
|
+
return nearest;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Quantise to `MAX_DECIMALS`, biased away from the mark. Same nearest-then-step approach.
|
|
37
|
+
*
|
|
38
|
+
* Below the 1e-6 grid there is no representable protective level at all: rounding down gives 0,
|
|
39
|
+
* which is no stop, and rounding up gives 1e-6, which for a SHORT can sit multiples above the
|
|
40
|
+
* level asked for. Both are worse than passing the significant-figure value through and letting
|
|
41
|
+
* the venue's own validation answer. No Hyperliquid perp trades there, so this is a deliberate
|
|
42
|
+
* decision about an unreachable input rather than a supported price range — and it is why the
|
|
43
|
+
* "at most 6 decimals" guarantee is stated for inputs at or above 1e-6.
|
|
44
|
+
*/
|
|
45
|
+
function toMaxDecimals(value, roundDown) {
|
|
46
|
+
const scale = 10 ** MAX_DECIMALS;
|
|
47
|
+
if (value < 1 / scale)
|
|
48
|
+
return value;
|
|
49
|
+
let units = Math.round(Number(value.toFixed(MAX_DECIMALS)) * scale);
|
|
50
|
+
if (roundDown && units / scale > value)
|
|
51
|
+
units -= 1;
|
|
52
|
+
if (!roundDown && units / scale < value)
|
|
53
|
+
units += 1;
|
|
54
|
+
return units / scale;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Round a protective price level onto Hyperliquid's price grid, biased AWAY from the mark.
|
|
58
|
+
*
|
|
59
|
+
* A LONG's stop sits below the mark so it rounds down; a SHORT's sits above so it rounds up.
|
|
60
|
+
* THIS service's rounding may then only ever loosen a stop, never tighten it and never move it
|
|
61
|
+
* across the mark: the trading engine rejects `slTriggerPrice >= currentPrice` for a LONG (and
|
|
62
|
+
* `<=` for a SHORT) as "would execute immediately", and a rejected stop leaves the position with
|
|
63
|
+
* no exchange-side protection at all.
|
|
64
|
+
*
|
|
65
|
+
* It is not an end-to-end guarantee. The trading engine re-rounds what we send with
|
|
66
|
+
* `roundToDecimals(price, 6 - szDecimals)`, which is round-to-NEAREST (`utils.go:133-136`), so
|
|
67
|
+
* for an asset whose `szDecimals` forces fewer than 6 decimals it can still move a LONG floor
|
|
68
|
+
* back up by half a venue tick. Reading per-asset `szDecimals` is what would close that; until
|
|
69
|
+
* then the residual degrades to a rejection, which the phase-2 breach path now turns into an
|
|
70
|
+
* exit rather than a silent no-stop.
|
|
71
|
+
*
|
|
72
|
+
* Non-finite, zero and negative inputs are returned unchanged — there is no meaningful grid
|
|
73
|
+
* for them, and silently manufacturing a level would be worse than passing the caller's own
|
|
74
|
+
* value through to its validation.
|
|
75
|
+
*/
|
|
76
|
+
export function roundProtectiveLevel(value, direction) {
|
|
77
|
+
if (!Number.isFinite(value) || value <= 0)
|
|
78
|
+
return value;
|
|
79
|
+
const roundDown = direction === "LONG";
|
|
80
|
+
return toMaxDecimals(toSignificantFigures(value, roundDown), roundDown);
|
|
8
81
|
}
|
|
9
82
|
//# sourceMappingURL=round.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round.js","sourceRoot":"","sources":["../../../src/dsl/engine/round.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"round.js","sourceRoot":"","sources":["../../../src/dsl/engine/round.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,mFAAmF;AACnF,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,sGAAsG;AACtG,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;IAChC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAAC,KAAa,EAAE,SAAkB;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,SAAS,IAAI,OAAO,GAAG,KAAK;QAAE,OAAO,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,IAAI,CAAC,SAAS,IAAI,OAAO,GAAG,KAAK;QAAE,OAAO,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,aAAa,CAAC,KAAa,EAAE,SAAkB;IACtD,MAAM,KAAK,GAAG,EAAE,IAAI,YAAY,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IACpE,IAAI,SAAS,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK;QAAE,KAAK,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,SAAS,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK;QAAE,KAAK,IAAI,CAAC,CAAC;IACpD,OAAO,KAAK,GAAG,KAAK,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,SAA2B;IAC7E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,SAAS,GAAG,SAAS,KAAK,MAAM,CAAC;IACvC,OAAO,aAAa,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tick.d.ts","sourceRoot":"","sources":["../../../src/dsl/engine/tick.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"tick.d.ts","sourceRoot":"","sources":["../../../src/dsl/engine/tick.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAgBxE,wBAAgB,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAwNlF"}
|
package/dist/dsl/engine/tick.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Pure DSL tick: state + price → next state and actions.
|
|
3
3
|
*/
|
|
4
4
|
import { CLOSE_REASON } from "../../constants/dsl/index.js";
|
|
5
|
-
import { computeCurrentROE, computeTierFloor, effectiveFloor, isBreach, resolveBreachesRequired, tierIndexFromPrice, } from "./floors.js";
|
|
5
|
+
import { computeCurrentROE, computeTierFloor, effectiveFloor, hasRestingStopAtFloor, isBreach, resolveBreachesRequired, tierIndexFromPrice, } from "./floors.js";
|
|
6
6
|
import { updateHighWater, writeDerivedFields } from "./state-updates.js";
|
|
7
7
|
import { createLogger } from "../../utils/logger.js";
|
|
8
8
|
const log = createLogger("[senpi-core][dsl-tick]");
|
|
@@ -25,23 +25,38 @@ export function dslTick(state, price, now) {
|
|
|
25
25
|
let closeReason;
|
|
26
26
|
const newTierIndexForBreach = tierIndexFromPrice(next, price);
|
|
27
27
|
const prevTierIndexForBreach = next.currentTierIndex ?? -1;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
28
|
+
// Breach detection runs in BOTH phases. In phase 2 the exchange stop is normally what exits,
|
|
29
|
+
// but a stop the venue rejected (a level rounded onto the mark, say) leaves the floor on the
|
|
30
|
+
// wrong side of the mark with nothing resting behind it — which is a breach by definition, and
|
|
31
|
+
// dsl-engine cannot close a position, so the runtime is the only thing that can. This sits
|
|
32
|
+
// ahead of the `handoffStatus === "ok"` early return so a backend-owned position surfaces a
|
|
33
|
+
// breach too; `consecutiveBreachesRequired` still gives a resting stop time to fill first.
|
|
34
|
+
//
|
|
35
|
+
// The breach is COUNTED either way; only the close is withheld when a stop is already resting
|
|
36
|
+
// at the floor. Raising a close there would return at the `action === "close"` early return
|
|
37
|
+
// below, which skips the time cuts, the tier advance and the floor recompute — and the whole
|
|
38
|
+
// downstream half of the monitor tick, SL sync and heartbeat included — on every tick the mark
|
|
39
|
+
// spends at or under the floor. A stale `slOrderId` (a stop cancelled at the venue is never
|
|
40
|
+
// cleared, since the tick's `getOrderStatus` check only clears on `filled`) would then take
|
|
41
|
+
// `hard_timeout` down with it.
|
|
42
|
+
if (isBreach(next, price)) {
|
|
43
|
+
const breachesRequired = resolveBreachesRequired(next);
|
|
44
|
+
// Clamped at the threshold. In phase 1 the close bounded this; in phase 2 a withheld close
|
|
45
|
+
// does not, and an unbounded counter renders as `18432/1` in `senpi dsl` and fires the
|
|
46
|
+
// `breach_detected` span event on every tick it grows.
|
|
47
|
+
const newCount = Math.min((next.currentBreachCount ?? 0) + 1, breachesRequired);
|
|
48
|
+
next = { ...next, currentBreachCount: newCount };
|
|
49
|
+
if (newCount >= breachesRequired && !hasRestingStopAtFloor(next)) {
|
|
50
|
+
action = "close";
|
|
51
|
+
closeReason = CLOSE_REASON.DSL_BREACH;
|
|
52
|
+
next = { ...next, floorPrice: prevFloorPrice };
|
|
43
53
|
}
|
|
44
54
|
}
|
|
55
|
+
else {
|
|
56
|
+
const advancingTier = newTierIndexForBreach > prevTierIndexForBreach;
|
|
57
|
+
if (!advancingTier)
|
|
58
|
+
next = { ...next, currentBreachCount: 0 };
|
|
59
|
+
}
|
|
45
60
|
if (action === "none") {
|
|
46
61
|
const currentROE = computeCurrentROE(next, price);
|
|
47
62
|
if (next.hardTimeout?.enabled) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tick.js","sourceRoot":"","sources":["../../../src/dsl/engine/tick.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,GAAG,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;AAEnD,MAAM,UAAU,OAAO,CAAC,KAAe,EAAE,KAAa,EAAE,GAAW;IACjE,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC;IACxC,IAAI,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAE9C,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,iBAAiB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAChF,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC;IAChD,CAAC;IACD,oGAAoG;IACpG,gGAAgG;IAChG,mGAAmG;IACnG,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;QACzD,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,sBAAsB,EAAE,GAAG,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAEjC,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,MAAM,GAA4B,MAAM,CAAC;IAC7C,IAAI,WAA+B,CAAC;IAEpC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9D,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;IAE3D,
|
|
1
|
+
{"version":3,"file":"tick.js","sourceRoot":"","sources":["../../../src/dsl/engine/tick.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,QAAQ,EACR,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,GAAG,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;AAEnD,MAAM,UAAU,OAAO,CAAC,KAAe,EAAE,KAAa,EAAE,GAAW;IACjE,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC;IACxC,IAAI,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAE9C,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,iBAAiB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAChF,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC;IAChD,CAAC;IACD,oGAAoG;IACpG,gGAAgG;IAChG,mGAAmG;IACnG,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;QACzD,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,sBAAsB,EAAE,GAAG,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAEjC,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,MAAM,GAA4B,MAAM,CAAC;IAC7C,IAAI,WAA+B,CAAC;IAEpC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9D,MAAM,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;IAE3D,6FAA6F;IAC7F,6FAA6F;IAC7F,+FAA+F;IAC/F,2FAA2F;IAC3F,4FAA4F;IAC5F,2FAA2F;IAC3F,EAAE;IACF,8FAA8F;IAC9F,4FAA4F;IAC5F,6FAA6F;IAC7F,+FAA+F;IAC/F,4FAA4F;IAC5F,4FAA4F;IAC5F,+BAA+B;IAC/B,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACvD,2FAA2F;QAC3F,uFAAuF;QACvF,uDAAuD;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAChF,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC;QACjD,IAAI,QAAQ,IAAI,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,MAAM,GAAG,OAAO,CAAC;YACjB,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC;YACtC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,GAAG,qBAAqB,GAAG,sBAAsB,CAAC;QACrE,IAAI,CAAC,aAAa;YAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAElD,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;YAC9B,mFAAmF;YACnF,uDAAuD;YACvD,MAAM,wBAAwB,GAC5B,IAAI,CAAC,KAAK,KAAK,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK;gBAC7B,qBAAqB,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC9B,MAAM,OAAO,GACX,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC;gBACrF,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC;oBAClD,MAAM,GAAG,OAAO,CAAC;oBACjB,WAAW,GAAG,YAAY,CAAC,YAAY,CAAC;gBAC1C,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;YACrD,MAAM,OAAO,GACX,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC;YACvF,IAAI,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;gBACvE,MAAM,GAAG,OAAO,CAAC;gBACjB,WAAW,GAAG,YAAY,CAAC,eAAe,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;YACnD,MAAM,OAAO,GACX,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC;YACrF,MAAM,YAAY,GAChB,SAAS,KAAK,MAAM;gBAClB,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU;gBACvC,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;YACzC,IACE,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB;gBAC7C,YAAY;gBACZ,IAAI,CAAC,OAAO,GAAG,MAAM;gBACrB,UAAU,GAAG,IAAI,CAAC,OAAO,EACzB,CAAC;gBACD,MAAM,GAAG,OAAO,CAAC;gBACjB,WAAW,GAAG,YAAY,CAAC,aAAa,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,WAAW,IAAI,IAAI,EAAE,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC;QACxD,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,OAAO;YACf,aAAa,EAAE,SAAS;YACxB,YAAY,EAAE,SAAS;YACvB,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,IAAI;YACX,YAAY;YACZ,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,qBAAqB,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAC5C,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;IAE1B,IAAI,YAAY,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,WAAW,GAAG,IAAI,CAAC;QACnB,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,UAAU,GACd,IAAI,CAAC,SAAS,KAAK,MAAM;YACvB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC/B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpC,IAAI,GAAG;YACL,GAAG,IAAI;YACP,gBAAgB,EAAE,YAAY;YAC9B,cAAc,EAAE,SAAS;YACzB,UAAU;YACV,SAAS,EAAE,GAAG;SACf,CAAC;QACF,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACtD,YAAY,GAAG,IAAI,CAAC;YACpB,QAAQ,GAAG,CAAC,CAAC;YACb,IAAI,GAAG;gBACL,GAAG,IAAI;gBACP,KAAK,EAAE,CAAC;gBACR,UAAU,EAAE,GAAG;gBACf,kBAAkB,EAAE,CAAC;gBACrB,UAAU,EAAE,IAAI,CAAC,cAAc;gBAC/B,aAAa,EAAE,SAAS;aACzB,CAAC;YACF,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QAChC,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC;QACxD,OAAO;YACL,WAAW;YACX,YAAY;YACZ,MAAM,EAAE,MAAM;YACd,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YACvD,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;YACpD,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YAC7C,KAAK,EAAE,IAAI;YACX,YAAY;SACb,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACzE,GAAG,CAAC,KAAK,CAAC,uEAAuE,EAAE;gBACjF,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;aAC/B,CAAC,CAAC;YACH,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC/E,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;YACtC,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACnE,MAAM,SAAS,GACb,IAAI,CAAC,cAAc,KAAK,CAAC;gBACvB,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM;oBACzB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC;oBAC7C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACpD,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;YAC9C,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;YACtC,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACxC,CAAC;IAED,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC;IAExD,OAAO;QACL,WAAW;QACX,YAAY;QACZ,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QACtE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QACpD,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC7C,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,YAAY,IAAI,WAAW,IAAI,YAAY;KAC1D,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-mapping.d.ts","sourceRoot":"","sources":["../../../src/dsl/engine-client/event-mapping.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,wFAAwF;IACxF,aAAa,EAAE,MAAM,CAAC;IACtB,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,aAAa,EAAE,uBAAuB,CAAC;IACvC,qGAAqG;IACrG,cAAc,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAC3C;
|
|
1
|
+
{"version":3,"file":"event-mapping.d.ts","sourceRoot":"","sources":["../../../src/dsl/engine-client/event-mapping.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,wFAAwF;IACxF,aAAa,EAAE,MAAM,CAAC;IACtB,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,aAAa,EAAE,uBAAuB,CAAC;IACvC,qGAAqG;IACrG,cAAc,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAC3C;AAkBD,iFAAiF;AACjF,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,aAAa,GACrB,cAAc,GAAG,IAAI,CA6FvB"}
|
|
@@ -15,17 +15,6 @@ function pickString(details, ...keys) {
|
|
|
15
15
|
}
|
|
16
16
|
return null;
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Provenance for a mapped event: the backend acted, and this is its own stamp of when. The stamp
|
|
20
|
-
* comes off the wire, so it is checked here; an unusable one drops out on its own and never costs
|
|
21
|
-
* the source, which is known from the call site rather than from the payload.
|
|
22
|
-
*/
|
|
23
|
-
function backendProvenance(createdAt) {
|
|
24
|
-
return {
|
|
25
|
-
__dslSource: "backend",
|
|
26
|
-
...(typeof createdAt === "string" && createdAt.length > 0 ? { __backendEventAt: createdAt } : {}),
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
18
|
/** Returns null for informational events or when required fields are missing. */
|
|
30
19
|
export function mapBackendEventToBusEvent(event, context) {
|
|
31
20
|
const details = event.details;
|
|
@@ -53,7 +42,6 @@ export function mapBackendEventToBusEvent(event, context) {
|
|
|
53
42
|
__positionId: context.positionId ?? context.correlationId,
|
|
54
43
|
timestamp: ts,
|
|
55
44
|
...(context.tierEnrichment ?? {}),
|
|
56
|
-
...backendProvenance(ts),
|
|
57
45
|
},
|
|
58
46
|
};
|
|
59
47
|
}
|
|
@@ -87,7 +75,6 @@ export function mapBackendEventToBusEvent(event, context) {
|
|
|
87
75
|
entryPrice: context.tierEnrichment?.entryPrice,
|
|
88
76
|
correlationId: context.correlationId,
|
|
89
77
|
timestamp: ts,
|
|
90
|
-
...backendProvenance(ts),
|
|
91
78
|
},
|
|
92
79
|
};
|
|
93
80
|
}
|
|
@@ -109,7 +96,6 @@ export function mapBackendEventToBusEvent(event, context) {
|
|
|
109
96
|
triggerReason: context.triggerReason,
|
|
110
97
|
__positionId: context.positionId ?? context.correlationId,
|
|
111
98
|
timestamp: ts,
|
|
112
|
-
...backendProvenance(ts),
|
|
113
99
|
},
|
|
114
100
|
};
|
|
115
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-mapping.js","sourceRoot":"","sources":["../../../src/dsl/engine-client/event-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAyC1D,SAAS,UAAU,CAAC,OAAgC,EAAE,GAAG,IAAc;IACrE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,OAAgC,EAAE,GAAG,IAAc;IACrE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"event-mapping.js","sourceRoot":"","sources":["../../../src/dsl/engine-client/event-mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build {@link DslClosedEvent} payloads from a full {@link DslState} snapshot at close time.
|
|
3
3
|
*/
|
|
4
|
-
import type { DslClosedEvent,
|
|
4
|
+
import type { DslClosedEvent, DslState } from "../../types/dsl/index.js";
|
|
5
5
|
export interface BuildDslClosedEventOptions {
|
|
6
6
|
reason: string;
|
|
7
7
|
closeReason: string;
|
|
8
8
|
timestamp: string;
|
|
9
|
-
/** The monitor tick emitting the close; omitted by a caller that has no tick in hand. */
|
|
10
|
-
tickId?: string;
|
|
11
|
-
/**
|
|
12
|
-
* Which side produced this transition: our own monitor tick, or a relay of one the backend made.
|
|
13
|
-
* Omitted by a caller that cannot attribute the close. It does NOT say whose stop was protecting
|
|
14
|
-
* the position — a close our poll detected is `runtime` even when the backend placed the stop
|
|
15
|
-
* that fired. The preceding `dsl.sl_updated` answers that.
|
|
16
|
-
*/
|
|
17
|
-
source?: DslEventSource;
|
|
18
|
-
/**
|
|
19
|
-
* The backend's own stamp of when it acted, on a backend-sourced close. Loosely typed because it
|
|
20
|
-
* reaches this builder from a wire payload; anything but a non-empty string drops out, and it
|
|
21
|
-
* drops out on its own — a stamp we cannot use never costs the source beside it.
|
|
22
|
-
*/
|
|
23
|
-
backendEventAt?: unknown;
|
|
24
9
|
}
|
|
25
10
|
/**
|
|
26
11
|
* Maps archived/live state to the bus `dsl.closed` payload (including fields for notification formatting
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-closed-event.d.ts","sourceRoot":"","sources":["../../../src/dsl/events/build-closed-event.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"build-closed-event.d.ts","sourceRoot":"","sources":["../../../src/dsl/events/build-closed-event.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzE,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,0BAA0B,GAC/B,cAAc,CAsBhB"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build {@link DslClosedEvent} payloads from a full {@link DslState} snapshot at close time.
|
|
3
3
|
*/
|
|
4
|
-
import { PAYLOAD_KEY } from "../../utils/event-catalog.js";
|
|
5
4
|
/**
|
|
6
5
|
* Maps archived/live state to the bus `dsl.closed` payload (including fields for notification formatting
|
|
7
6
|
* and deferred trade-history enrichment).
|
|
@@ -16,11 +15,6 @@ export function buildDslClosedEventFromState(state, opts) {
|
|
|
16
15
|
closeReason: opts.closeReason,
|
|
17
16
|
triggerReason: state.triggerReason,
|
|
18
17
|
__positionId: state.positionId ?? state.correlationId,
|
|
19
|
-
[PAYLOAD_KEY.tickId]: opts.tickId,
|
|
20
|
-
__dslSource: opts.source,
|
|
21
|
-
...(typeof opts.backendEventAt === "string" && opts.backendEventAt.length > 0
|
|
22
|
-
? { __backendEventAt: opts.backendEventAt }
|
|
23
|
-
: {}),
|
|
24
18
|
timestamp: opts.timestamp,
|
|
25
19
|
direction: state.direction,
|
|
26
20
|
entryPrice: state.entryPrice,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-closed-event.js","sourceRoot":"","sources":["../../../src/dsl/events/build-closed-event.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"build-closed-event.js","sourceRoot":"","sources":["../../../src/dsl/events/build-closed-event.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAAe,EACf,IAAgC;IAEhC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;QACpB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,YAAY,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,aAAa;QACrD,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM;QACN,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -20,13 +20,6 @@ export interface HandlePositionOpenedOpts {
|
|
|
20
20
|
* on a flip (favorable polarity inverts).
|
|
21
21
|
*/
|
|
22
22
|
carryNotifiedStop?: NotifiedStopCarry;
|
|
23
|
-
/**
|
|
24
|
-
* The tick that observed the change, for a caller that normalizes its payload before re-entering
|
|
25
|
-
* the open path — the rebuild shapes (increase/decrease/flip) have no room for the id, so it is
|
|
26
|
-
* read from the original payload and passed here instead. The monitor-driven reconcile passes its
|
|
27
|
-
* tick here too; the boot reconcile runs before any tick exists and passes none.
|
|
28
|
-
*/
|
|
29
|
-
tickId?: string;
|
|
30
23
|
}
|
|
31
24
|
export declare function createEventHandlers(config: DslPluginConfig, stateManager: StateManager, strategyStates: Map<string, StrategyState>, bus: SenpiEventBus, _baseDir: string): {
|
|
32
25
|
handlePositionOpened: (payload: unknown, triggerReason?: DslCreatedTriggerReason, opts?: HandlePositionOpenedOpts) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/dsl/events/handlers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EAGf,uBAAuB,EACvB,mBAAmB,EAGpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAqBzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/dsl/events/handlers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EAGf,uBAAuB,EACvB,mBAAmB,EAGpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAqBzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAsC5D,MAAM,WAAW,wBAAwB;IACvC,kGAAkG;IAClG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,MAAM,GACf;IACD,oBAAoB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpI,oBAAoB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,uBAAuB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,uBAAuB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,2FAA2F;IAC3F,qBAAqB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,uBAAuB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAClD;;;;OAIG;IACH,aAAa,EAAE,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG;;;;OAIG;IACH,cAAc,EAAE,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,wBAAwB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClG,CAmmBA"}
|