@senpi/runtime 3.0.69 → 3.0.70
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/dsl/notifications/floor-store.d.ts.map +1 -1
- package/dist/dsl/notifications/floor-store.js +34 -5
- package/dist/dsl/notifications/floor-store.js.map +1 -1
- package/dist/dsl/notifications/index.d.ts +18 -1
- package/dist/dsl/notifications/index.d.ts.map +1 -1
- package/dist/dsl/notifications/index.js +76 -11
- package/dist/dsl/notifications/index.js.map +1 -1
- package/dist/dsl/notifications/stop-raise-debounce.d.ts +109 -0
- package/dist/dsl/notifications/stop-raise-debounce.d.ts.map +1 -0
- package/dist/dsl/notifications/stop-raise-debounce.js +196 -0
- package/dist/dsl/notifications/stop-raise-debounce.js.map +1 -0
- package/dist/types/dsl/index.d.ts +14 -0
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floor-store.d.ts","sourceRoot":"","sources":["../../../src/dsl/notifications/floor-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAcxD,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,YAAY,GAAG,qBAAqB,
|
|
1
|
+
{"version":3,"file":"floor-store.d.ts","sourceRoot":"","sources":["../../../src/dsl/notifications/floor-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAcxD,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,YAAY,GAAG,qBAAqB,CAgE7F"}
|
|
@@ -25,7 +25,20 @@ export function createDslNotifiedFloorStore(stateManager) {
|
|
|
25
25
|
const state = await stateManager.getDslStateByAsset(ev.address, ev.asset);
|
|
26
26
|
return state?.active ? state.lastNotifiedStopFloor : undefined;
|
|
27
27
|
},
|
|
28
|
-
|
|
28
|
+
// Announced-state snapshot for the stop-trail debounce (notifications 2.6):
|
|
29
|
+
// the floor plus the cooldown anchor and the breakeven latch, so the cadence
|
|
30
|
+
// survives rebuilds and restarts alongside the baseline itself.
|
|
31
|
+
async getNotifiedStopMeta(ev) {
|
|
32
|
+
const state = await stateManager.getDslStateByAsset(ev.address, ev.asset);
|
|
33
|
+
if (!state?.active)
|
|
34
|
+
return undefined;
|
|
35
|
+
return {
|
|
36
|
+
floor: state.lastNotifiedStopFloor,
|
|
37
|
+
atMs: state.lastNotifiedStopAtMs,
|
|
38
|
+
breakevenAnnounced: state.stopBreakevenAnnounced,
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
async stampNotifiedStopFloor(ev, floor, direction, meta) {
|
|
29
42
|
if (!Number.isFinite(floor))
|
|
30
43
|
return;
|
|
31
44
|
// Resolve the row first (events carry no dex), then RMW under its own key
|
|
@@ -39,16 +52,32 @@ export function createDslNotifiedFloorStore(stateManager) {
|
|
|
39
52
|
if (!current?.active)
|
|
40
53
|
return;
|
|
41
54
|
const next = advanceFavorably(current.lastNotifiedStopFloor, floor, direction);
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
|
|
55
|
+
// The debounce meta only ever moves forward: the cooldown anchor takes the
|
|
56
|
+
// newest timestamp and the breakeven latch never un-latches.
|
|
57
|
+
const nextAtMs = meta?.atMs !== undefined && Number.isFinite(meta.atMs)
|
|
58
|
+
? Math.max(current.lastNotifiedStopAtMs ?? 0, meta.atMs)
|
|
59
|
+
: current.lastNotifiedStopAtMs;
|
|
60
|
+
const nextBreakeven = (current.stopBreakevenAnnounced ?? false) || (meta?.breakevenAnnounced ?? false);
|
|
61
|
+
// Skip the write when nothing would move (a retreat with no meta change) —
|
|
62
|
+
// avoids churning the state file on every re-anchor.
|
|
63
|
+
if (next === current.lastNotifiedStopFloor &&
|
|
64
|
+
nextAtMs === current.lastNotifiedStopAtMs &&
|
|
65
|
+
nextBreakeven === (current.stopBreakevenAnnounced ?? false)) {
|
|
45
66
|
return;
|
|
46
|
-
|
|
67
|
+
}
|
|
68
|
+
await stateManager.set(key, {
|
|
69
|
+
...current,
|
|
70
|
+
lastNotifiedStopFloor: next,
|
|
71
|
+
lastNotifiedStopAtMs: nextAtMs,
|
|
72
|
+
stopBreakevenAnnounced: nextBreakeven,
|
|
73
|
+
});
|
|
47
74
|
logger.debug("[dsl-notifications] stamped lastNotifiedStopFloor", {
|
|
48
75
|
address: resolved.address,
|
|
49
76
|
asset: resolved.asset,
|
|
50
77
|
floor: next,
|
|
51
78
|
direction,
|
|
79
|
+
atMs: nextAtMs,
|
|
80
|
+
breakevenAnnounced: nextBreakeven,
|
|
52
81
|
});
|
|
53
82
|
});
|
|
54
83
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floor-store.js","sourceRoot":"","sources":["../../../src/dsl/notifications/floor-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,MAAM,MAAM,GAAG,YAAY,CAAC,iCAAiC,CAAC,CAAC;AAE/D,uFAAuF;AACvF,SAAS,gBAAgB,CACvB,IAAwB,EACxB,KAAa,EACb,SAA2B;IAE3B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,YAA0B;IACpE,OAAO;QACL,KAAK,CAAC,wBAAwB,CAAC,EAAE;YAC/B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;YAC1E,OAAO,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,CAAC;QAED,KAAK,CAAC,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"floor-store.js","sourceRoot":"","sources":["../../../src/dsl/notifications/floor-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { SenpiEventBus } from "../events/index.js";
|
|
5
5
|
import type { NotificationPayload, NotificationService } from "../../types/notification.js";
|
|
6
|
+
import { type NotifiedStopMeta } from "./stop-raise-debounce.js";
|
|
6
7
|
export interface DslNotificationSubscriber {
|
|
7
8
|
dispose(): void;
|
|
8
9
|
}
|
|
@@ -23,11 +24,27 @@ export interface DslNotifiedFloorStore {
|
|
|
23
24
|
/**
|
|
24
25
|
* Record `floor` as announced, advancing the persisted baseline favorably only
|
|
25
26
|
* (higher LONG / lower SHORT). A no-op when it would retreat the baseline.
|
|
27
|
+
*
|
|
28
|
+
* `meta` (notifications 2.6) carries the debounce bookkeeping stamped with the
|
|
29
|
+
* same announcement: the cooldown anchor and the breakeven latch. Optional so
|
|
30
|
+
* pre-2.6 store implementations (and test fakes) remain valid.
|
|
26
31
|
*/
|
|
27
32
|
stampNotifiedStopFloor(ev: {
|
|
28
33
|
address: string;
|
|
29
34
|
asset: string;
|
|
30
|
-
}, floor: number, direction: "LONG" | "SHORT"
|
|
35
|
+
}, floor: number, direction: "LONG" | "SHORT", meta?: {
|
|
36
|
+
atMs?: number;
|
|
37
|
+
breakevenAnnounced?: boolean;
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Full announced-state snapshot for the debounce gate (floor + cooldown anchor
|
|
41
|
+
* + breakeven latch). Optional: a store without it degrades to the floor-only
|
|
42
|
+
* read and the debounce seeds its timing in-memory.
|
|
43
|
+
*/
|
|
44
|
+
getNotifiedStopMeta?(ev: {
|
|
45
|
+
address: string;
|
|
46
|
+
asset: string;
|
|
47
|
+
}): Promise<NotifiedStopMeta | undefined>;
|
|
31
48
|
}
|
|
32
49
|
export declare function createDslNotificationSubscriber(bus: SenpiEventBus, notifier: NotificationService, store?: DslNotifiedFloorStore): DslNotificationSubscriber;
|
|
33
50
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/notifications/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAoB,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/notifications/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAoB,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAgB9G,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAelC,MAAM,WAAW,yBAAyB;IACxC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAClC,IAAI,CAWN;AAoFD;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,wBAAwB,CAAC,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9F;;;;;;;OAOG;IACH,sBAAsB,CACpB,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EACtC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAAG,OAAO,EAC3B,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE,GACrD,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB;;;;OAIG;IACH,mBAAmB,CAAC,CAAC,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;CACrG;AAqCD,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,CAAC,EAAE,qBAAqB,GAC5B,yBAAyB,CAkO3B"}
|
|
@@ -7,6 +7,7 @@ import { randomUUID } from "node:crypto";
|
|
|
7
7
|
import { formatDslCreated, formatDslTierAdvanced, formatDslSlUpdated, } from "./formatter.js";
|
|
8
8
|
import { RaiseCorrelator, raiseKey } from "./raise-correlator.js";
|
|
9
9
|
import { StopRaiseRatchet } from "./stop-raise-ratchet.js";
|
|
10
|
+
import { StopRaiseDebounce, debounceConfig, } from "./stop-raise-debounce.js";
|
|
10
11
|
/**
|
|
11
12
|
* Baseline key for the favorable-floor ratchet. Prefer the instance-scoped
|
|
12
13
|
* `correlationId` (fresh per DSL rebuild → auto-resets the baseline); fall back
|
|
@@ -116,6 +117,14 @@ function beatsPersistedFloor(floor, baseline, direction) {
|
|
|
116
117
|
return floor < baseline;
|
|
117
118
|
return true;
|
|
118
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Event timestamp as epoch ms for the debounce cooldown anchor; falls back to
|
|
122
|
+
* the wall clock when the ISO string is unparsable (never NaN into state).
|
|
123
|
+
*/
|
|
124
|
+
function eventMs(timestamp) {
|
|
125
|
+
const ms = Date.parse(timestamp);
|
|
126
|
+
return Number.isFinite(ms) ? ms : Date.now();
|
|
127
|
+
}
|
|
119
128
|
/** Ensures formatter + notify never throw back into `bus.emit` (would break DSL callers). */
|
|
120
129
|
function runNotificationHandler(fn) {
|
|
121
130
|
try {
|
|
@@ -130,11 +139,11 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
|
|
|
130
139
|
safeNotify(notifier, input);
|
|
131
140
|
}
|
|
132
141
|
/** Fire-and-forget persisted-baseline stamp; never throws back into a handler. */
|
|
133
|
-
function stampFloor(ev, floor, direction) {
|
|
142
|
+
function stampFloor(ev, floor, direction, meta) {
|
|
134
143
|
if (store === undefined || (direction !== "LONG" && direction !== "SHORT"))
|
|
135
144
|
return;
|
|
136
145
|
void store
|
|
137
|
-
.stampNotifiedStopFloor(ev, floor, direction)
|
|
146
|
+
.stampNotifiedStopFloor(ev, floor, direction, meta)
|
|
138
147
|
.catch((err) => logger.warn("[dsl-notifications] failed to stamp lastNotifiedStopFloor", { err }));
|
|
139
148
|
}
|
|
140
149
|
// PF-2: a single DSL raise must yield EITHER "Profit locked" OR "Stop raised",
|
|
@@ -150,6 +159,13 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
|
|
|
150
159
|
// Sits alongside the PF-2 correlator; the two gates are independent (this one
|
|
151
160
|
// is additional).
|
|
152
161
|
const stopRaiseRatchet = new StopRaiseRatchet();
|
|
162
|
+
// Gate 4 (notifications 2.6): materiality + cooldown on top of the genuine-raise
|
|
163
|
+
// gates. On a trending winner every 30s re-quote is a GENUINE raise, so gates
|
|
164
|
+
// 1–3 alone let a push through per re-quote (~120/hour worst case). This gate
|
|
165
|
+
// announces only the first raise, a breakeven cross, a ≥threshold ROE step, or
|
|
166
|
+
// a cooldown flush. Flag-gated (DSL_STOP_RAISE_DEBOUNCE, default off): when the
|
|
167
|
+
// flag is off it is never consulted and behaviour is identical to today.
|
|
168
|
+
const stopRaiseDebounce = new StopRaiseDebounce();
|
|
153
169
|
// DSL attached at position open → "DSL activated". Gated to fresh opens only:
|
|
154
170
|
// resize/flip/rebuild (position_increased/decreased/flipped/adopted) re-emit
|
|
155
171
|
// dsl.created for bookkeeping but must not re-announce activation.
|
|
@@ -181,8 +197,15 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
|
|
|
181
197
|
}));
|
|
182
198
|
// Announcing this locked floor advances the persisted baseline, so the
|
|
183
199
|
// paired (correlator-suppressed) SL and any later re-anchor at/below it
|
|
184
|
-
// cannot re-fire as a fresh raise across a rebuild or restart.
|
|
185
|
-
|
|
200
|
+
// cannot re-fire as a fresh raise across a rebuild or restart. It also
|
|
201
|
+
// resets the debounce cooldown: a profit-lock announces the same
|
|
202
|
+
// real-world progress a stop-raise would, and a positive lock means the
|
|
203
|
+
// stop cleared entry, so the breakeven latch is set with it.
|
|
204
|
+
stopRaiseDebounce.recordAnnounced(key, ev.newFloorPrice, true);
|
|
205
|
+
stampFloor({ address: ev.address, asset: ev.asset }, ev.newFloorPrice, ev.direction, {
|
|
206
|
+
atMs: eventMs(ev.timestamp),
|
|
207
|
+
breakevenAnnounced: true,
|
|
208
|
+
});
|
|
186
209
|
}
|
|
187
210
|
else {
|
|
188
211
|
// Else branch: nothing locked ("+$0.00"). Suppress the Profit-locked
|
|
@@ -195,14 +218,48 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
|
|
|
195
218
|
});
|
|
196
219
|
};
|
|
197
220
|
/** Emit the "Stop raised" notification and stamp the persisted announced floor. */
|
|
198
|
-
function sendStopRaise(ev) {
|
|
221
|
+
function sendStopRaise(ev, breakevenAnnounced) {
|
|
199
222
|
const copy = formatDslSlUpdated(ev);
|
|
200
223
|
// The SL-updated event carries no book, so the seed omits `dex`.
|
|
201
224
|
notify(buildOpenablePayload(copy, "DSL_STOP_RAISE", ev.address, ev.timestamp, ev.asset, undefined, {
|
|
202
225
|
uniqueKeys: [stopRaiseUniqueKey(ev)],
|
|
203
226
|
idempotencyKey: stopRaiseUniqueKey(ev),
|
|
204
227
|
}));
|
|
205
|
-
|
|
228
|
+
stopRaiseDebounce.recordAnnounced(raiseKey(ev), ev.newSLPrice, breakevenAnnounced);
|
|
229
|
+
stampFloor({ address: ev.address, asset: ev.asset }, ev.newSLPrice, ev.direction, {
|
|
230
|
+
atMs: eventMs(ev.timestamp),
|
|
231
|
+
breakevenAnnounced,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Gate 4 (notifications 2.6): judge a genuine raise for materiality. Returns
|
|
236
|
+
* `{ deliver, breakevenAnnounced }`; with the flag off it is a constant pass so
|
|
237
|
+
* behaviour is byte-identical to pre-2.6.
|
|
238
|
+
*/
|
|
239
|
+
function judgeMateriality(ev, persisted) {
|
|
240
|
+
if (!debounceConfig().enabled || ev.direction === undefined) {
|
|
241
|
+
return { deliver: true, breakevenAnnounced: false };
|
|
242
|
+
}
|
|
243
|
+
const verdict = stopRaiseDebounce.evaluate(raiseKey(ev), {
|
|
244
|
+
newSLPrice: ev.newSLPrice,
|
|
245
|
+
direction: ev.direction,
|
|
246
|
+
entryPrice: ev.entryPrice,
|
|
247
|
+
leverage: ev.leverage,
|
|
248
|
+
}, persisted);
|
|
249
|
+
if (verdict.announce) {
|
|
250
|
+
logger.debug("[dsl-notifications] stop-raise materiality passed", {
|
|
251
|
+
asset: ev.asset,
|
|
252
|
+
reason: verdict.reason,
|
|
253
|
+
newSLPrice: ev.newSLPrice,
|
|
254
|
+
});
|
|
255
|
+
return { deliver: true, breakevenAnnounced: verdict.breakevenAnnounced };
|
|
256
|
+
}
|
|
257
|
+
logger.debug("[dsl-notifications] stop-raise suppressed: immaterial trail step", {
|
|
258
|
+
asset: ev.asset,
|
|
259
|
+
newSLPrice: ev.newSLPrice,
|
|
260
|
+
detail: verdict.suppressDetail,
|
|
261
|
+
});
|
|
262
|
+
return { deliver: false, breakevenAnnounced: verdict.breakevenAnnounced };
|
|
206
263
|
}
|
|
207
264
|
const onSlUpdated = (e) => {
|
|
208
265
|
runNotificationHandler(() => {
|
|
@@ -226,10 +283,13 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
|
|
|
226
283
|
});
|
|
227
284
|
return;
|
|
228
285
|
}
|
|
229
|
-
// The in-memory ratchet passed. Without a persisted store, deliver
|
|
230
|
-
//
|
|
286
|
+
// The in-memory ratchet passed. Without a persisted store, deliver on the
|
|
287
|
+
// in-memory debounce alone — with the flag off this is exactly the
|
|
288
|
+
// pre-baseline behavior (fully synchronous).
|
|
231
289
|
if (store === undefined) {
|
|
232
|
-
|
|
290
|
+
const verdict = judgeMateriality(ev, undefined);
|
|
291
|
+
if (verdict.deliver)
|
|
292
|
+
sendStopRaise(ev, verdict.breakevenAnnounced);
|
|
233
293
|
return;
|
|
234
294
|
}
|
|
235
295
|
// With a store, add a cross-rebuild/restart gate: the in-memory ratchet
|
|
@@ -238,7 +298,10 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
|
|
|
238
298
|
// MORE favorable than the last floor we actually ANNOUNCED (persisted).
|
|
239
299
|
void (async () => {
|
|
240
300
|
try {
|
|
241
|
-
const
|
|
301
|
+
const meta = store.getNotifiedStopMeta
|
|
302
|
+
? await store.getNotifiedStopMeta({ address: ev.address, asset: ev.asset })
|
|
303
|
+
: undefined;
|
|
304
|
+
const baseline = meta?.floor ?? (await store.getLastNotifiedStopFloor({ address: ev.address, asset: ev.asset }));
|
|
242
305
|
if (!beatsPersistedFloor(ev.newSLPrice, baseline, ev.direction)) {
|
|
243
306
|
logger.debug("[dsl-notifications] stop-raise suppressed: not beyond persisted announced floor", {
|
|
244
307
|
asset: ev.asset,
|
|
@@ -248,7 +311,9 @@ export function createDslNotificationSubscriber(bus, notifier, store) {
|
|
|
248
311
|
});
|
|
249
312
|
return;
|
|
250
313
|
}
|
|
251
|
-
|
|
314
|
+
const verdict = judgeMateriality(ev, meta ?? { floor: baseline });
|
|
315
|
+
if (verdict.deliver)
|
|
316
|
+
sendStopRaise(ev, verdict.breakevenAnnounced);
|
|
252
317
|
}
|
|
253
318
|
catch (err) {
|
|
254
319
|
logger.warn("[dsl-notifications] persisted stop-raise gate error (delivering isolated)", { err });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/notifications/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dsl/notifications/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,iBAAiB,EACjB,cAAc,GAEf,MAAM,0BAA0B,CAAC;AAElC;;;;;GAKG;AACH,SAAS,UAAU,CAAC,EAAqB;IACvC,IAAI,EAAE,CAAC,aAAa,IAAI,IAAI,IAAI,EAAE,CAAC,aAAa,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC,aAAa,CAAC;IACjF,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC,iCAAiC,CAAC,CAAC;AAM/D,MAAM,UAAU,UAAU,CACxB,QAA6B,EAC7B,KAAmC;IAEnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,MAAM,IAAI,IAAI,IAAI,OAAQ,MAA4B,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/E,KAAM,MAAwB,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CACpD,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,oBAAoB,CAC3B,IAAsB,EACtB,OAAe,EACf,OAA2B,EAC3B,SAAiB,EACjB,KAAc,EACd,GAAY,EACZ,MAAyD;IAEzD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;IAC3B,+EAA+E;IAC/E,gFAAgF;IAChF,gFAAgF;IAChF,oCAAoC;IACpC,MAAM,YAAY,GAAG,MAAM;QACzB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE;QAC1E,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,qBAAqB,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,4EAA4E;IAC5E,uDAAuD;IACvD,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,6FAA6F,EAAE;YACzG,OAAO;SACR,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO;QACL,OAAO;QACP,gBAAgB,EAAE,IAAI;QACtB,OAAO;QACP,IAAI;QACJ,qBAAqB;QACrB,GAAG,YAAY;QACf,OAAO,EAAE;YACP,cAAc,EAAE,UAAU,EAAE;YAC5B,OAAO;YACP,SAAS;YACT,OAAO;YACP,KAAK;YACL,GAAG;YACH,WAAW,EAAE,OAAO;SACrB;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,EAAqB;IAC/C,+EAA+E;IAC/E,iEAAiE;IACjE,OAAO,kBAAkB,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;AAC5F,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,EAAwB;IACnD,OAAO,mBAAmB,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC;AAC/G,CAAC;AAkCD;;;;;GAKG;AACH,SAAS,mBAAmB,CAC1B,KAAa,EACb,QAA4B,EAC5B,SAAuC;IAEvC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,KAAK,GAAG,QAAQ,CAAC;IAClD,IAAI,SAAS,KAAK,OAAO;QAAE,OAAO,KAAK,GAAG,QAAQ,CAAC;IACnD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,SAAiB;IAChC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/C,CAAC;AAED,6FAA6F;AAC7F,SAAS,sBAAsB,CAAC,EAAc;IAC5C,IAAI,CAAC;QACH,EAAE,EAAE,CAAC;IACP,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,uDAAuD,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,GAAkB,EAClB,QAA6B,EAC7B,KAA6B;IAE7B,SAAS,MAAM,CAAC,KAAmC;QACjD,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,kFAAkF;IAClF,SAAS,UAAU,CACjB,EAAsC,EACtC,KAAa,EACb,SAAuC,EACvC,IAAsD;QAEtD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,CAAC;YAAE,OAAO;QACnF,KAAK,KAAK;aACP,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC;aAClD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CACtB,MAAM,CAAC,IAAI,CAAC,2DAA2D,EAAE,EAAE,GAAG,EAAE,CAAC,CAClF,CAAC;IACN,CAAC;IAED,+EAA+E;IAC/E,8EAA8E;IAC9E,4EAA4E;IAC5E,sEAAsE;IACtE,8EAA8E;IAC9E,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,+EAA+E;IAC/E,8EAA8E;IAC9E,yEAAyE;IACzE,+EAA+E;IAC/E,8EAA8E;IAC9E,kBAAkB;IAClB,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAEhD,iFAAiF;IACjF,8EAA8E;IAC9E,8EAA8E;IAC9E,+EAA+E;IAC/E,gFAAgF;IAChF,yEAAyE;IACzE,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAElD,8EAA8E;IAC9E,6EAA6E;IAC7E,mEAAmE;IACnE,MAAM,SAAS,GAAG,CAAC,CAAU,EAAE,EAAE;QAC/B,sBAAsB,CAAC,GAAG,EAAE;YAC1B,MAAM,EAAE,GAAG,CAAoB,CAAC;YAChC,IAAI,EAAE,CAAC,aAAa,KAAK,iBAAiB,EAAE,CAAC;gBAC3C,MAAM,CAAC,KAAK,CAAC,2DAA2D,EAAE;oBACxE,KAAK,EAAE,EAAE,CAAC,KAAK;oBACf,aAAa,EAAE,EAAE,CAAC,aAAa;iBAChC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAClC,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAClG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,cAAc,GAAG,CAAC,CAAU,EAAE,EAAE;QACpC,sBAAsB,CAAC,GAAG,EAAE;YAC1B,MAAM,EAAE,GAAG,CAAyB,CAAC;YACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YACzB,qFAAqF;YACrF,IAAI,CAAC,EAAE,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,UAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;gBACvC,MAAM,CACJ,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE;oBACxF,UAAU,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;oBACrC,cAAc,EAAE,mBAAmB,CAAC,EAAE,CAAC;iBACxC,CAAC,CACH,CAAC;gBACF,uEAAuE;gBACvE,wEAAwE;gBACxE,uEAAuE;gBACvE,iEAAiE;gBACjE,wEAAwE;gBACxE,6DAA6D;gBAC7D,iBAAiB,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBAC/D,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,SAAS,EAAE;oBACnF,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;oBAC3B,kBAAkB,EAAE,IAAI;iBACzB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,qEAAqE;gBACrE,qEAAqE;gBACrE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtB,MAAM,CAAC,KAAK,CAAC,4EAA4E,EAAE;oBACzF,KAAK,EAAE,EAAE,CAAC,KAAK;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,mFAAmF;IACnF,SAAS,aAAa,CAAC,EAAqB,EAAE,kBAA2B;QACvE,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACpC,iEAAiE;QACjE,MAAM,CACJ,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE;YAC1F,UAAU,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YACpC,cAAc,EAAE,kBAAkB,CAAC,EAAE,CAAC;SACvC,CAAC,CACH,CAAC;QACF,iBAAiB,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QACnF,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,EAAE;YAChF,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC;YAC3B,kBAAkB;SACnB,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,SAAS,gBAAgB,CACvB,EAAqB,EACrB,SAAuC;QAEvC,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CACxC,QAAQ,CAAC,EAAE,CAAC,EACZ;YACE,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,QAAQ,EAAE,EAAE,CAAC,QAAQ;SACtB,EACD,SAAS,CACV,CAAC;QACF,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,KAAK,CAAC,mDAAmD,EAAE;gBAChE,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,UAAU,EAAE,EAAE,CAAC,UAAU;aAC1B,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC3E,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,kEAAkE,EAAE;YAC/E,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,MAAM,EAAE,OAAO,CAAC,cAAc;SAC/B,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,CAAU,EAAE,EAAE;QACjC,sBAAsB,CAAC,GAAG,EAAE;YAC1B,MAAM,EAAE,GAAG,CAAsB,CAAC;YAClC,wEAAwE;YACxE,0EAA0E;YAC1E,qEAAqE;YACrE,kCAAkC;YAClC,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;YAC9F,IAAI,UAAU,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,KAAK,CAAC,kFAAkF,EAAE;oBAC/F,KAAK,EAAE,EAAE,CAAC,KAAK;iBAChB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,CAAC,KAAK,CAAC,8EAA8E,EAAE;oBAC3F,KAAK,EAAE,EAAE,CAAC,KAAK;oBACf,UAAU,EAAE,EAAE,CAAC,UAAU;oBACzB,SAAS,EAAE,EAAE,CAAC,SAAS;iBACxB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,0EAA0E;YAC1E,mEAAmE;YACnE,6CAA6C;YAC7C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBAChD,IAAI,OAAO,CAAC,OAAO;oBAAE,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACnE,OAAO;YACT,CAAC;YACD,wEAAwE;YACxE,2EAA2E;YAC3E,0EAA0E;YAC1E,wEAAwE;YACxE,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,IAAI,CAAC;oBACH,MAAM,IAAI,GAAiC,KAAK,CAAC,mBAAmB;wBAClE,CAAC,CAAC,MAAM,KAAK,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;wBAC3E,CAAC,CAAC,SAAS,CAAC;oBACd,MAAM,QAAQ,GACZ,IAAI,EAAE,KAAK,IAAI,CAAC,MAAM,KAAK,CAAC,wBAAwB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAClG,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;wBAChE,MAAM,CAAC,KAAK,CAAC,iFAAiF,EAAE;4BAC9F,KAAK,EAAE,EAAE,CAAC,KAAK;4BACf,UAAU,EAAE,EAAE,CAAC,UAAU;4BACzB,QAAQ;4BACR,SAAS,EAAE,EAAE,CAAC,SAAS;yBACxB,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAClE,IAAI,OAAO,CAAC,OAAO;wBAAE,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACrE,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,2EAA2E,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBACpG,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,oEAAoE;IACpE,mEAAmE;IACnE,2EAA2E;IAC3E,2EAA2E;IAC3E,yEAAyE;IACzE,WAAW;IAEX,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACjD,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAE3C,OAAO;QACL,OAAO;YACL,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACvC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YAClD,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Materiality + cooldown gate for "Stop raised" (notifications 2.6) — Gate 4.
|
|
3
|
+
*
|
|
4
|
+
* The three existing gates (RaiseCorrelator, StopRaiseRatchet, persisted
|
|
5
|
+
* announced-floor) all answer "is this a REAL raise?". On a trending winner every
|
|
6
|
+
* 30s re-quote IS a real raise (~0.15% price / ~0.75% ROE per step on the reported
|
|
7
|
+
* $SPCX 5× case), so every one of them notified: 4 pushes in 4 minutes, worst case
|
|
8
|
+
* ~120/hour on a single winning position. This gate answers the question none of
|
|
9
|
+
* them asked: "is it worth a push?"
|
|
10
|
+
*
|
|
11
|
+
* The ticket's whitelist is literal — "only emit a push on a material stop
|
|
12
|
+
* event": Phase-1 armed, breakeven cross, tier upgrade, or a ≥threshold move,
|
|
13
|
+
* plus a per-position cooldown/rate-limit. Armed and tier upgrades have their
|
|
14
|
+
* own subtypes (DSL_ACTIVATED / DSL_PROFIT_LOCK), so this gate announces a
|
|
15
|
+
* genuine raise in exactly two cases:
|
|
16
|
+
*
|
|
17
|
+
* 1. BREAKEVEN CROSS — the stop crosses entry (ROE-at-stop turns positive):
|
|
18
|
+
* "you can no longer lose on this trade". Fires once per instance
|
|
19
|
+
* (latched), immediately — it is its own whitelist entry, so the cooldown
|
|
20
|
+
* does not apply to it.
|
|
21
|
+
* 2. MATERIAL STEP, RATE-LIMITED — ROE-at-stop improved by
|
|
22
|
+
* ≥ DSL_STOP_RAISE_MIN_ROE_STEP_PCT (default 5 ROE points ≈ "another 5% of
|
|
23
|
+
* margin locked") since the last announced floor, AND
|
|
24
|
+
* ≥ DSL_STOP_RAISE_COOLDOWN_S (default 900s) since the last announcement.
|
|
25
|
+
* The threshold defines material; the cooldown hard-caps the rate at one
|
|
26
|
+
* trail push per position per window (worst case 4/hour). ROE-based so
|
|
27
|
+
* leverage does not change the cadence; price-% fallback when
|
|
28
|
+
* entry/leverage are unavailable.
|
|
29
|
+
*
|
|
30
|
+
* Everything else stays silent — including the first raise of a fresh instance
|
|
31
|
+
* (the armed notification already covered "a stop exists") and sub-threshold
|
|
32
|
+
* drift, however long it accumulates. Batching is free: a push announces the
|
|
33
|
+
* CURRENT floor, so every suppressed micro-step is summarized by the next
|
|
34
|
+
* announcement.
|
|
35
|
+
*
|
|
36
|
+
* Suppression NEVER advances the announced baseline — only announcements do
|
|
37
|
+
* (mirroring the stamp-on-send semantics of the persisted floor store). That is
|
|
38
|
+
* what makes accumulated micro-steps eventually cross the threshold.
|
|
39
|
+
*
|
|
40
|
+
* The gate is flag-gated (DSL_STOP_RAISE_DEBOUNCE, default OFF): flag off means
|
|
41
|
+
* `evaluate` is never called and behaviour is byte-identical to today. Env is
|
|
42
|
+
* read call-time so tests and fleet config can flip it without re-imports.
|
|
43
|
+
*/
|
|
44
|
+
/** Call-time env config (mirrors the whyLine/enrichment convention). */
|
|
45
|
+
export declare function debounceConfig(): {
|
|
46
|
+
enabled: boolean;
|
|
47
|
+
minRoeStepPct: number;
|
|
48
|
+
minPriceStepPct: number;
|
|
49
|
+
cooldownMs: number;
|
|
50
|
+
};
|
|
51
|
+
/** Announced-state snapshot persisted alongside the floor (see floor-store). */
|
|
52
|
+
export interface NotifiedStopMeta {
|
|
53
|
+
floor?: number;
|
|
54
|
+
atMs?: number;
|
|
55
|
+
breakevenAnnounced?: boolean;
|
|
56
|
+
}
|
|
57
|
+
export type AnnounceReason = "breakeven" | "material-step";
|
|
58
|
+
export interface DebounceVerdict {
|
|
59
|
+
announce: boolean;
|
|
60
|
+
reason: AnnounceReason | null;
|
|
61
|
+
/** Human-readable suppression detail for the debug log. */
|
|
62
|
+
suppressDetail?: string;
|
|
63
|
+
/** Latch value to stamp with the announcement (true once the stop clears entry). */
|
|
64
|
+
breakevenAnnounced: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface StopRaiseDebounceOptions {
|
|
67
|
+
now?: () => number;
|
|
68
|
+
ttlMs?: number;
|
|
69
|
+
maxEntries?: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* In-memory announced-state per position instance (same keying, TTL and LRU
|
|
73
|
+
* discipline as StopRaiseRatchet). The persisted meta, when available, seeds a
|
|
74
|
+
* missing entry so restarts/rebuilds do not reset the cadence.
|
|
75
|
+
*/
|
|
76
|
+
export declare class StopRaiseDebounce {
|
|
77
|
+
private readonly entries;
|
|
78
|
+
private readonly now;
|
|
79
|
+
private readonly ttlMs;
|
|
80
|
+
private readonly maxEntries;
|
|
81
|
+
constructor(opts?: StopRaiseDebounceOptions);
|
|
82
|
+
/**
|
|
83
|
+
* Judge a genuine raise (gates 1–3 already passed) for materiality. Does NOT
|
|
84
|
+
* mutate the announced baseline — call {@link recordAnnounced} after actually
|
|
85
|
+
* sending. `persisted` (when the caller has a store) seeds a missing in-memory
|
|
86
|
+
* entry so the cadence survives restarts.
|
|
87
|
+
*/
|
|
88
|
+
evaluate(key: string, ev: {
|
|
89
|
+
newSLPrice: number;
|
|
90
|
+
direction: "LONG" | "SHORT";
|
|
91
|
+
entryPrice?: number;
|
|
92
|
+
leverage?: number;
|
|
93
|
+
}, persisted: NotifiedStopMeta | undefined): DebounceVerdict;
|
|
94
|
+
/**
|
|
95
|
+
* Commit an announcement: advance the announced floor/timestamp and the
|
|
96
|
+
* breakeven latch. Also called for "Profit locked" announcements — a tier
|
|
97
|
+
* upgrade announces the same real-world progress, so it resets the trail
|
|
98
|
+
* cooldown (and a lock > 0 implies the stop cleared entry).
|
|
99
|
+
*/
|
|
100
|
+
recordAnnounced(key: string, floor: number, breakevenAnnounced: boolean): void;
|
|
101
|
+
/** Test/observability helper. */
|
|
102
|
+
size(): number;
|
|
103
|
+
/** Refresh recency; drop an idle-expired entry. Returns the live entry, if any. */
|
|
104
|
+
private touch;
|
|
105
|
+
private write;
|
|
106
|
+
}
|
|
107
|
+
/** Shared logger handle so the caller's suppress log matches the module family. */
|
|
108
|
+
export declare const debounceLogger: import("../../utils/logger.js").Logger;
|
|
109
|
+
//# sourceMappingURL=stop-raise-debounce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop-raise-debounce.d.ts","sourceRoot":"","sources":["../../../src/dsl/notifications/stop-raise-debounce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAOH,wEAAwE;AACxE,wBAAgB,cAAc,IAAI;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB,CAWA;AAED,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,eAAe,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAWD,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,IAAI,CAAC,EAAE,wBAAwB;IAM3C;;;;;OAKG;IACH,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,EAAE,EAAE;QACF,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,EACD,SAAS,EAAE,gBAAgB,GAAG,SAAS,GACtC,eAAe;IA6ElB;;;;;OAKG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,GAAG,IAAI;IAU9E,iCAAiC;IACjC,IAAI,IAAI,MAAM;IAId,mFAAmF;IACnF,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,KAAK;CAQd;AAED,mFAAmF;AACnF,eAAO,MAAM,cAAc,wCAAS,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Materiality + cooldown gate for "Stop raised" (notifications 2.6) — Gate 4.
|
|
3
|
+
*
|
|
4
|
+
* The three existing gates (RaiseCorrelator, StopRaiseRatchet, persisted
|
|
5
|
+
* announced-floor) all answer "is this a REAL raise?". On a trending winner every
|
|
6
|
+
* 30s re-quote IS a real raise (~0.15% price / ~0.75% ROE per step on the reported
|
|
7
|
+
* $SPCX 5× case), so every one of them notified: 4 pushes in 4 minutes, worst case
|
|
8
|
+
* ~120/hour on a single winning position. This gate answers the question none of
|
|
9
|
+
* them asked: "is it worth a push?"
|
|
10
|
+
*
|
|
11
|
+
* The ticket's whitelist is literal — "only emit a push on a material stop
|
|
12
|
+
* event": Phase-1 armed, breakeven cross, tier upgrade, or a ≥threshold move,
|
|
13
|
+
* plus a per-position cooldown/rate-limit. Armed and tier upgrades have their
|
|
14
|
+
* own subtypes (DSL_ACTIVATED / DSL_PROFIT_LOCK), so this gate announces a
|
|
15
|
+
* genuine raise in exactly two cases:
|
|
16
|
+
*
|
|
17
|
+
* 1. BREAKEVEN CROSS — the stop crosses entry (ROE-at-stop turns positive):
|
|
18
|
+
* "you can no longer lose on this trade". Fires once per instance
|
|
19
|
+
* (latched), immediately — it is its own whitelist entry, so the cooldown
|
|
20
|
+
* does not apply to it.
|
|
21
|
+
* 2. MATERIAL STEP, RATE-LIMITED — ROE-at-stop improved by
|
|
22
|
+
* ≥ DSL_STOP_RAISE_MIN_ROE_STEP_PCT (default 5 ROE points ≈ "another 5% of
|
|
23
|
+
* margin locked") since the last announced floor, AND
|
|
24
|
+
* ≥ DSL_STOP_RAISE_COOLDOWN_S (default 900s) since the last announcement.
|
|
25
|
+
* The threshold defines material; the cooldown hard-caps the rate at one
|
|
26
|
+
* trail push per position per window (worst case 4/hour). ROE-based so
|
|
27
|
+
* leverage does not change the cadence; price-% fallback when
|
|
28
|
+
* entry/leverage are unavailable.
|
|
29
|
+
*
|
|
30
|
+
* Everything else stays silent — including the first raise of a fresh instance
|
|
31
|
+
* (the armed notification already covered "a stop exists") and sub-threshold
|
|
32
|
+
* drift, however long it accumulates. Batching is free: a push announces the
|
|
33
|
+
* CURRENT floor, so every suppressed micro-step is summarized by the next
|
|
34
|
+
* announcement.
|
|
35
|
+
*
|
|
36
|
+
* Suppression NEVER advances the announced baseline — only announcements do
|
|
37
|
+
* (mirroring the stamp-on-send semantics of the persisted floor store). That is
|
|
38
|
+
* what makes accumulated micro-steps eventually cross the threshold.
|
|
39
|
+
*
|
|
40
|
+
* The gate is flag-gated (DSL_STOP_RAISE_DEBOUNCE, default OFF): flag off means
|
|
41
|
+
* `evaluate` is never called and behaviour is byte-identical to today. Env is
|
|
42
|
+
* read call-time so tests and fleet config can flip it without re-imports.
|
|
43
|
+
*/
|
|
44
|
+
import { createLogger } from "../../utils/logger.js";
|
|
45
|
+
import { RATCHET_IDLE_TTL_MS, RATCHET_MAX_ENTRIES } from "./stop-raise-ratchet.js";
|
|
46
|
+
const logger = createLogger("[senpi-core][dsl-notifications]");
|
|
47
|
+
/** Call-time env config (mirrors the whyLine/enrichment convention). */
|
|
48
|
+
export function debounceConfig() {
|
|
49
|
+
const num = (raw, fallback) => {
|
|
50
|
+
const v = Number(raw);
|
|
51
|
+
return Number.isFinite(v) && v > 0 ? v : fallback;
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
enabled: process.env.DSL_STOP_RAISE_DEBOUNCE === "true",
|
|
55
|
+
minRoeStepPct: num(process.env.DSL_STOP_RAISE_MIN_ROE_STEP_PCT, 5),
|
|
56
|
+
minPriceStepPct: num(process.env.DSL_STOP_RAISE_MIN_PRICE_STEP_PCT, 1),
|
|
57
|
+
cooldownMs: num(process.env.DSL_STOP_RAISE_COOLDOWN_S, 900) * 1_000,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* In-memory announced-state per position instance (same keying, TTL and LRU
|
|
62
|
+
* discipline as StopRaiseRatchet). The persisted meta, when available, seeds a
|
|
63
|
+
* missing entry so restarts/rebuilds do not reset the cadence.
|
|
64
|
+
*/
|
|
65
|
+
export class StopRaiseDebounce {
|
|
66
|
+
entries = new Map();
|
|
67
|
+
now;
|
|
68
|
+
ttlMs;
|
|
69
|
+
maxEntries;
|
|
70
|
+
constructor(opts) {
|
|
71
|
+
this.now = opts?.now ?? Date.now;
|
|
72
|
+
this.ttlMs = opts?.ttlMs ?? RATCHET_IDLE_TTL_MS;
|
|
73
|
+
this.maxEntries = opts?.maxEntries ?? RATCHET_MAX_ENTRIES;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Judge a genuine raise (gates 1–3 already passed) for materiality. Does NOT
|
|
77
|
+
* mutate the announced baseline — call {@link recordAnnounced} after actually
|
|
78
|
+
* sending. `persisted` (when the caller has a store) seeds a missing in-memory
|
|
79
|
+
* entry so the cadence survives restarts.
|
|
80
|
+
*/
|
|
81
|
+
evaluate(key, ev, persisted) {
|
|
82
|
+
const cfg = debounceConfig();
|
|
83
|
+
const nowMs = this.now();
|
|
84
|
+
const mem = this.touch(key, nowMs);
|
|
85
|
+
const baselineFloor = mem?.floor ?? persisted?.floor;
|
|
86
|
+
const lastAtMs = mem?.atMs ?? persisted?.atMs;
|
|
87
|
+
const latched = (mem?.breakevenAnnounced ?? false) || (persisted?.breakevenAnnounced ?? false);
|
|
88
|
+
// ROE-at-stop (sign only needs entry; magnitude needs leverage too).
|
|
89
|
+
const entryUsable = typeof ev.entryPrice === "number" && Number.isFinite(ev.entryPrice) && ev.entryPrice > 0;
|
|
90
|
+
const stopAboveEntry = entryUsable
|
|
91
|
+
? ev.direction === "LONG"
|
|
92
|
+
? ev.newSLPrice > ev.entryPrice
|
|
93
|
+
: ev.newSLPrice < ev.entryPrice
|
|
94
|
+
: false;
|
|
95
|
+
const breakevenNext = latched || stopAboveEntry;
|
|
96
|
+
// First raise of a fresh instance: seed the measuring baseline SILENTLY.
|
|
97
|
+
// The ticket's whitelist has no "trailing started" event — the armed
|
|
98
|
+
// notification already said a stop exists — so the first raise anchors the
|
|
99
|
+
// threshold and says nothing. (In-memory until the first announcement
|
|
100
|
+
// persists a floor; after a restart the seed re-anchors on the next raise,
|
|
101
|
+
// which can only delay a push, never duplicate one.) The breakeven latch
|
|
102
|
+
// seeds too: a stop that was NEVER below entry has no cross to announce.
|
|
103
|
+
if (baselineFloor === undefined) {
|
|
104
|
+
this.write(key, {
|
|
105
|
+
floor: ev.newSLPrice,
|
|
106
|
+
atMs: undefined,
|
|
107
|
+
breakevenAnnounced: breakevenNext,
|
|
108
|
+
touchedAtMs: nowMs,
|
|
109
|
+
});
|
|
110
|
+
return {
|
|
111
|
+
announce: false,
|
|
112
|
+
reason: null,
|
|
113
|
+
suppressDetail: "baseline seeded (first raise of the instance)",
|
|
114
|
+
breakevenAnnounced: breakevenNext,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// 1. Breakeven cross: its own whitelist entry — fires once, immediately,
|
|
118
|
+
// regardless of step size or cooldown.
|
|
119
|
+
if (!latched && stopAboveEntry) {
|
|
120
|
+
return { announce: true, reason: "breakeven", breakevenAnnounced: true };
|
|
121
|
+
}
|
|
122
|
+
// 2. Material step AND cooldown elapsed. The threshold defines material,
|
|
123
|
+
// the cooldown hard-caps the rate; sub-threshold drift never announces.
|
|
124
|
+
const leverageUsable = typeof ev.leverage === "number" && Number.isFinite(ev.leverage) && ev.leverage > 0;
|
|
125
|
+
const priceDelta = Math.abs(ev.newSLPrice - baselineFloor);
|
|
126
|
+
let material;
|
|
127
|
+
let stepDetail;
|
|
128
|
+
if (entryUsable && leverageUsable) {
|
|
129
|
+
const roeStepPct = (priceDelta / ev.entryPrice) * ev.leverage * 100;
|
|
130
|
+
material = roeStepPct >= cfg.minRoeStepPct;
|
|
131
|
+
stepDetail = `roeStep=${roeStepPct.toFixed(2)}% (min ${cfg.minRoeStepPct}%)`;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
const priceStepPct = baselineFloor > 0 ? (priceDelta / baselineFloor) * 100 : Number.POSITIVE_INFINITY;
|
|
135
|
+
material = priceStepPct >= cfg.minPriceStepPct;
|
|
136
|
+
stepDetail = `priceStep=${priceStepPct.toFixed(3)}% (min ${cfg.minPriceStepPct}%, roe basis unavailable)`;
|
|
137
|
+
}
|
|
138
|
+
const coolingDown = lastAtMs !== undefined && nowMs - lastAtMs < cfg.cooldownMs;
|
|
139
|
+
if (material && !coolingDown) {
|
|
140
|
+
return { announce: true, reason: "material-step", breakevenAnnounced: breakevenNext };
|
|
141
|
+
}
|
|
142
|
+
const sinceS = lastAtMs === undefined ? -1 : Math.round((nowMs - lastAtMs) / 1_000);
|
|
143
|
+
return {
|
|
144
|
+
announce: false,
|
|
145
|
+
reason: null,
|
|
146
|
+
suppressDetail: `${stepDetail}${material ? " [met, cooling down]" : ""}, sinceLastAnnounce=${sinceS}s (cooldown ${Math.round(cfg.cooldownMs / 1_000)}s)`,
|
|
147
|
+
breakevenAnnounced: breakevenNext,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Commit an announcement: advance the announced floor/timestamp and the
|
|
152
|
+
* breakeven latch. Also called for "Profit locked" announcements — a tier
|
|
153
|
+
* upgrade announces the same real-world progress, so it resets the trail
|
|
154
|
+
* cooldown (and a lock > 0 implies the stop cleared entry).
|
|
155
|
+
*/
|
|
156
|
+
recordAnnounced(key, floor, breakevenAnnounced) {
|
|
157
|
+
const nowMs = this.now();
|
|
158
|
+
this.write(key, {
|
|
159
|
+
floor,
|
|
160
|
+
atMs: nowMs,
|
|
161
|
+
breakevenAnnounced,
|
|
162
|
+
touchedAtMs: nowMs,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/** Test/observability helper. */
|
|
166
|
+
size() {
|
|
167
|
+
return this.entries.size;
|
|
168
|
+
}
|
|
169
|
+
/** Refresh recency; drop an idle-expired entry. Returns the live entry, if any. */
|
|
170
|
+
touch(key, nowMs) {
|
|
171
|
+
const entry = this.entries.get(key);
|
|
172
|
+
if (!entry)
|
|
173
|
+
return undefined;
|
|
174
|
+
if (nowMs - entry.touchedAtMs > this.ttlMs) {
|
|
175
|
+
this.entries.delete(key);
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
entry.touchedAtMs = nowMs;
|
|
179
|
+
// Delete-then-set keeps LRU ordering (map head = least recently touched).
|
|
180
|
+
this.entries.delete(key);
|
|
181
|
+
this.entries.set(key, entry);
|
|
182
|
+
return entry;
|
|
183
|
+
}
|
|
184
|
+
write(key, entry) {
|
|
185
|
+
if (!this.entries.has(key) && this.entries.size >= this.maxEntries) {
|
|
186
|
+
const oldest = this.entries.keys().next().value;
|
|
187
|
+
if (oldest !== undefined)
|
|
188
|
+
this.entries.delete(oldest);
|
|
189
|
+
}
|
|
190
|
+
this.entries.delete(key);
|
|
191
|
+
this.entries.set(key, entry);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/** Shared logger handle so the caller's suppress log matches the module family. */
|
|
195
|
+
export const debounceLogger = logger;
|
|
196
|
+
//# sourceMappingURL=stop-raise-debounce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop-raise-debounce.js","sourceRoot":"","sources":["../../../src/dsl/notifications/stop-raise-debounce.ts"],"names":[],"mappings":"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"}
|
|
@@ -166,6 +166,20 @@ export interface DslState {
|
|
|
166
166
|
* favorable polarity inverts). See {@link ../dsl/notifications/index.ts}.
|
|
167
167
|
*/
|
|
168
168
|
lastNotifiedStopFloor?: number;
|
|
169
|
+
/**
|
|
170
|
+
* Wall-clock (epoch ms) of the last "Stop raised" / "Profit locked"
|
|
171
|
+
* announcement — the cooldown anchor for the stop-trail debounce
|
|
172
|
+
* (notifications 2.6). Stamped in the same locked RMW as the floor.
|
|
173
|
+
*/
|
|
174
|
+
lastNotifiedStopAtMs?: number;
|
|
175
|
+
/**
|
|
176
|
+
* Breakeven latch (notifications 2.6): true once a stop at/above entry (below,
|
|
177
|
+
* for a SHORT) has been announced for this position, so the "you can no longer
|
|
178
|
+
* lose" moment fires exactly once. A rebuilt position already past breakeven
|
|
179
|
+
* never re-crosses, so the latch needs no explicit reset; a direction flip
|
|
180
|
+
* resets it alongside the floor.
|
|
181
|
+
*/
|
|
182
|
+
stopBreakevenAnnounced?: boolean;
|
|
169
183
|
}
|
|
170
184
|
export type HandoffStatus = "pending" | "ok" | "aborted";
|
|
171
185
|
export type DslTickAction = "none" | "close";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/dsl/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/dsl/index.ts"],"names":[],"mappings":"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"}
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "runtime",
|
|
3
3
|
"name": "Senpi Runtime",
|
|
4
4
|
"description": "Senpi runtime plugin for OpenClaw. Orchestrates scanners, LLM-based trade decisions, and a DSL trailing stop-loss exit engine.",
|
|
5
|
-
"version": "3.0.
|
|
5
|
+
"version": "3.0.70",
|
|
6
6
|
"commandAliases": [
|
|
7
7
|
{
|
|
8
8
|
"name": "senpi"
|