@senpi/trading-recipe 1.0.40 → 1.0.42
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/position-tracker/position-tracker.action.d.ts +14 -0
- package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -0
- package/dist/actions/position-tracker/position-tracker.action.js +199 -0
- package/dist/actions/position-tracker/position-tracker.action.js.map +1 -0
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +12 -0
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/cli/senpi-commands.d.ts +2 -1
- package/dist/cli/senpi-commands.d.ts.map +1 -1
- package/dist/cli/senpi-commands.js +203 -1
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/dsl/index.d.ts +1 -1
- package/dist/dsl/index.d.ts.map +1 -1
- package/dist/dsl/index.js.map +1 -1
- package/dist/dsl/plugin/index.d.ts +21 -0
- package/dist/dsl/plugin/index.d.ts.map +1 -1
- package/dist/dsl/plugin/index.js +127 -4
- package/dist/dsl/plugin/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +92 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/action-registry.d.ts.map +1 -1
- package/dist/runtime/action-registry.js +2 -0
- package/dist/runtime/action-registry.js.map +1 -1
- package/dist/runtime/run.d.ts +2 -0
- 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.d.ts +2 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +3 -0
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/trading-recipe-schema.d.ts +96 -96
- package/dist/types/dsl/index.d.ts +36 -0
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +2 -0
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/hooks.js +2 -0
- package/dist/types/hooks.js.map +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Action, ActionConfig, ActionFactory, ActionManifest, ActionResult, HookEvent } from '../types.js';
|
|
2
|
+
import type { RuntimeContext } from '../../types/runtime.js';
|
|
3
|
+
export declare class PositionTrackerAction implements Action {
|
|
4
|
+
private context;
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly actionType: "POSITION_TRACKER";
|
|
7
|
+
constructor(config: ActionConfig, context: RuntimeContext);
|
|
8
|
+
handle(event: HookEvent): Promise<ActionResult>;
|
|
9
|
+
private extractSignals;
|
|
10
|
+
private skip;
|
|
11
|
+
}
|
|
12
|
+
export declare const positionTrackerFactory: ActionFactory;
|
|
13
|
+
export declare const positionTrackerManifest: ActionManifest;
|
|
14
|
+
//# sourceMappingURL=position-tracker.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"position-tracker.action.d.ts","sourceRoot":"","sources":["../../../src/actions/position-tracker/position-tracker.action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,SAAS,EAGV,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAsJ7D,qBAAa,qBAAsB,YAAW,MAAM;IAMhD,OAAO,CAAC,OAAO;IALjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAG,kBAAkB,CAAU;gBAGhD,MAAM,EAAE,YAAY,EACZ,OAAO,EAAE,cAAc;IAK3B,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IA+DrD,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,IAAI;CAGb;AAID,eAAO,MAAM,sBAAsB,EAAE,aACO,CAAC;AAE7C,eAAO,MAAM,uBAAuB,EAAE,cAYrC,CAAC"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { HOOK_EVENT } from '../../types/hooks.js';
|
|
2
|
+
import { createLogger } from '../../utils/logger.js';
|
|
3
|
+
const logger = createLogger('[actions][position-tracker]');
|
|
4
|
+
// ─── Pure helpers ────────────────────────────────────────────────────────────
|
|
5
|
+
/** Normalize dex: "main" → undefined (DSL convention). */
|
|
6
|
+
function normalizeDex(dex) {
|
|
7
|
+
if (!dex || dex === 'main')
|
|
8
|
+
return undefined;
|
|
9
|
+
return dex;
|
|
10
|
+
}
|
|
11
|
+
/** Signed size string: positive for LONG, negative for SHORT. */
|
|
12
|
+
function signedSize(snapshot) {
|
|
13
|
+
return String(snapshot.direction === 'SHORT' ? -snapshot.size : snapshot.size);
|
|
14
|
+
}
|
|
15
|
+
/** Optionally include dex in event data only when present. */
|
|
16
|
+
function dexField(dex) {
|
|
17
|
+
const normalized = normalizeDex(dex);
|
|
18
|
+
return normalized != null ? { dex: normalized } : {};
|
|
19
|
+
}
|
|
20
|
+
function mapPositionOpened(meta, address) {
|
|
21
|
+
const { current } = meta;
|
|
22
|
+
if (!current)
|
|
23
|
+
return null;
|
|
24
|
+
return {
|
|
25
|
+
type: HOOK_EVENT.ON_POSITION_OPENED,
|
|
26
|
+
data: {
|
|
27
|
+
asset: current.asset,
|
|
28
|
+
direction: current.direction,
|
|
29
|
+
entryPrice: current.entryPrice,
|
|
30
|
+
size: current.size,
|
|
31
|
+
leverage: current.leverage,
|
|
32
|
+
wallet: address,
|
|
33
|
+
...dexField(current.dex),
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function mapPositionClosed(meta, address) {
|
|
38
|
+
const { previous } = meta;
|
|
39
|
+
if (!previous)
|
|
40
|
+
return null;
|
|
41
|
+
return {
|
|
42
|
+
type: HOOK_EVENT.ON_POSITION_CLOSED,
|
|
43
|
+
data: {
|
|
44
|
+
asset: previous.asset,
|
|
45
|
+
wallet: address,
|
|
46
|
+
reason: 'position_tracker',
|
|
47
|
+
closeReason: 'POSITION_CLOSED',
|
|
48
|
+
...dexField(previous.dex),
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function mapPositionFlipped(meta, address) {
|
|
53
|
+
const { previous, current } = meta;
|
|
54
|
+
if (!previous || !current)
|
|
55
|
+
return null;
|
|
56
|
+
return {
|
|
57
|
+
type: HOOK_EVENT.ON_POSITION_FLIPPED,
|
|
58
|
+
data: {
|
|
59
|
+
asset: previous.asset,
|
|
60
|
+
coin: current.asset,
|
|
61
|
+
szi: signedSize(current),
|
|
62
|
+
entryPx: String(current.entryPrice),
|
|
63
|
+
wallet: address,
|
|
64
|
+
leverage: current.leverage,
|
|
65
|
+
...dexField(current.dex),
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Map a size-change delta (increased or decreased) to a hook event.
|
|
71
|
+
*
|
|
72
|
+
* Both snapshots are required so the DSL handler can compare previous vs
|
|
73
|
+
* current values and decide how to recalculate floors. The data shape is
|
|
74
|
+
* intentionally explicit about what changed: `previousEntryPrice`,
|
|
75
|
+
* `previousSize`, and `sizeDelta` let the handler avoid re-diffing.
|
|
76
|
+
*/
|
|
77
|
+
function mapPositionSizeChanged(hookType, meta, address) {
|
|
78
|
+
const { previous, current } = meta;
|
|
79
|
+
if (!previous || !current)
|
|
80
|
+
return null;
|
|
81
|
+
return {
|
|
82
|
+
type: hookType,
|
|
83
|
+
data: {
|
|
84
|
+
asset: current.asset,
|
|
85
|
+
direction: current.direction,
|
|
86
|
+
entryPrice: current.entryPrice,
|
|
87
|
+
size: current.size,
|
|
88
|
+
leverage: current.leverage,
|
|
89
|
+
wallet: address,
|
|
90
|
+
...dexField(current.dex),
|
|
91
|
+
previousEntryPrice: previous.entryPrice,
|
|
92
|
+
previousSize: previous.size,
|
|
93
|
+
sizeDelta: current.size - previous.size,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function mapPositionIncreased(meta, address) {
|
|
98
|
+
return mapPositionSizeChanged(HOOK_EVENT.ON_POSITION_INCREASED, meta, address);
|
|
99
|
+
}
|
|
100
|
+
function mapPositionDecreased(meta, address) {
|
|
101
|
+
return mapPositionSizeChanged(HOOK_EVENT.ON_POSITION_DECREASED, meta, address);
|
|
102
|
+
}
|
|
103
|
+
/** Delta type → mapper lookup. Unsupported types are simply absent. */
|
|
104
|
+
const deltaMappers = {
|
|
105
|
+
POSITION_OPENED: mapPositionOpened,
|
|
106
|
+
POSITION_CLOSED: mapPositionClosed,
|
|
107
|
+
POSITION_FLIPPED: mapPositionFlipped,
|
|
108
|
+
POSITION_INCREASED: mapPositionIncreased,
|
|
109
|
+
POSITION_DECREASED: mapPositionDecreased,
|
|
110
|
+
};
|
|
111
|
+
// ─── Position Tracker Action ────────────────────────────────────────────────
|
|
112
|
+
export class PositionTrackerAction {
|
|
113
|
+
context;
|
|
114
|
+
name;
|
|
115
|
+
actionType = 'POSITION_TRACKER';
|
|
116
|
+
constructor(config, context) {
|
|
117
|
+
this.context = context;
|
|
118
|
+
this.name = config.name;
|
|
119
|
+
}
|
|
120
|
+
async handle(event) {
|
|
121
|
+
if (event.type !== HOOK_EVENT.ON_SIGNAL_DETECTED) {
|
|
122
|
+
return this.skip('invalid_event_type', 'Ignored: wrong event type');
|
|
123
|
+
}
|
|
124
|
+
const signals = this.extractSignals(event);
|
|
125
|
+
if (signals.length === 0) {
|
|
126
|
+
return this.skip('no_signals', 'No signals to process');
|
|
127
|
+
}
|
|
128
|
+
let firedCount = 0;
|
|
129
|
+
let skippedCount = 0;
|
|
130
|
+
let failedCount = 0;
|
|
131
|
+
for (const signal of signals) {
|
|
132
|
+
const mapper = deltaMappers[signal.signalType];
|
|
133
|
+
if (!mapper) {
|
|
134
|
+
logger.info('skipping unsupported delta type', { signalType: signal.signalType, asset: signal.asset });
|
|
135
|
+
skippedCount++;
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const meta = signal.meta;
|
|
139
|
+
if (!meta) {
|
|
140
|
+
logger.warn('signal missing meta', { signalType: signal.signalType, asset: signal.asset });
|
|
141
|
+
skippedCount++;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const mapped = mapper(meta, event.address);
|
|
145
|
+
if (!mapped) {
|
|
146
|
+
logger.warn('signal missing required snapshot', { signalType: signal.signalType, asset: signal.asset });
|
|
147
|
+
skippedCount++;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
logger.info(`firing ${mapped.type}`, { asset: signal.asset });
|
|
152
|
+
await this.context.hookSystem.fire({
|
|
153
|
+
type: mapped.type,
|
|
154
|
+
tradingRecipeName: event.tradingRecipeName,
|
|
155
|
+
address: event.address,
|
|
156
|
+
data: mapped.data,
|
|
157
|
+
timestamp: new Date().toISOString(),
|
|
158
|
+
});
|
|
159
|
+
firedCount++;
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
failedCount++;
|
|
163
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
164
|
+
logger.error('failed to fire hook event', { signalType: signal.signalType, asset: signal.asset, err: message });
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
const success = failedCount === 0;
|
|
168
|
+
return {
|
|
169
|
+
success,
|
|
170
|
+
action_type: this.actionType,
|
|
171
|
+
summary: `Tracked: ${firedCount} fired, ${skippedCount} skipped, ${failedCount} failed`,
|
|
172
|
+
data: { firedCount, skippedCount, failedCount },
|
|
173
|
+
...(failedCount > 0 ? { error: `${failedCount} hook event(s) failed to fire` } : {}),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
extractSignals(event) {
|
|
177
|
+
const scanResult = event.data?.scanResult;
|
|
178
|
+
return scanResult?.signals ?? [];
|
|
179
|
+
}
|
|
180
|
+
skip(reason, summary) {
|
|
181
|
+
return { success: true, action_type: this.actionType, summary, skipped: true, skipReason: reason };
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// ─── Factory & Manifest ─────────────────────────────────────────────────────
|
|
185
|
+
export const positionTrackerFactory = (config, context) => new PositionTrackerAction(config, context);
|
|
186
|
+
export const positionTrackerManifest = {
|
|
187
|
+
type: 'action/POSITION_TRACKER',
|
|
188
|
+
name: 'Position Tracker',
|
|
189
|
+
description: 'Translates strategy-monitor position deltas into DSL hook events',
|
|
190
|
+
eventsConsumed: [HOOK_EVENT.ON_SIGNAL_DETECTED],
|
|
191
|
+
eventsEmitted: [
|
|
192
|
+
HOOK_EVENT.ON_POSITION_OPENED,
|
|
193
|
+
HOOK_EVENT.ON_POSITION_CLOSED,
|
|
194
|
+
HOOK_EVENT.ON_POSITION_FLIPPED,
|
|
195
|
+
HOOK_EVENT.ON_POSITION_INCREASED,
|
|
196
|
+
HOOK_EVENT.ON_POSITION_DECREASED,
|
|
197
|
+
],
|
|
198
|
+
};
|
|
199
|
+
//# sourceMappingURL=position-tracker.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"position-tracker.action.js","sourceRoot":"","sources":["../../../src/actions/position-tracker/position-tracker.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA8UH,kFAAkF;AAClF,UAAU,gBAAgB;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC9D,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;CACxF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,MAAM,GACd,IAAI,CA2CN"}
|
|
@@ -23,6 +23,9 @@ Quick commands:
|
|
|
23
23
|
senpi guide scanners Scanner types and config fields
|
|
24
24
|
senpi guide actions Action types and decision modes
|
|
25
25
|
senpi guide dsl DSL exit: phases, lock modes, tiers, time-based cuts
|
|
26
|
+
senpi dsl positions Active DSL positions (CLI inspection)
|
|
27
|
+
senpi dsl inspect Full DSL state for one asset
|
|
28
|
+
senpi dsl closes Archived closes with reason
|
|
26
29
|
senpi guide examples Print minimal strategy YAML
|
|
27
30
|
senpi guide schema Full YAML schema field reference
|
|
28
31
|
senpi guide version Plugin version and changelog URL
|
|
@@ -206,6 +209,15 @@ State and events
|
|
|
206
209
|
Per-position state at {stateDir}/strategies/{id}/... . Close reason preserved
|
|
207
210
|
on pendingClose retry (phase1_timeout, weak_peak_cut, dead_weight_cut, dsl_breach).
|
|
208
211
|
Events: dsl.created, dsl.tier_advanced, dsl.sl_updated, dsl.phase_changed, position.closed
|
|
212
|
+
|
|
213
|
+
──────────────────────────────────────────────────────────────────────────────
|
|
214
|
+
Commands
|
|
215
|
+
senpi dsl positions List active DSL-tracked positions
|
|
216
|
+
senpi dsl positions --json Output as JSON
|
|
217
|
+
senpi dsl inspect <asset> Full state for one position (e.g. SOL, xyz:GOLD)
|
|
218
|
+
senpi dsl inspect <asset> --json Output full DslState as JSON
|
|
219
|
+
senpi dsl closes List archived closes with reason and PnL
|
|
220
|
+
senpi dsl closes --limit 20 Limit output
|
|
209
221
|
`.trim();
|
|
210
222
|
const SCHEMA_TEXT = `
|
|
211
223
|
YAML schema — top-level keys
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide-commands.js","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,aAAa,GACjB,0EAA0E,CAAC;AAE7E,+EAA+E;AAE/E,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC;yBAClB,OAAO
|
|
1
|
+
{"version":3,"file":"guide-commands.js","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,10 @@ export declare function registerSenpiCli(program: {
|
|
|
12
12
|
interface CommanderCommand {
|
|
13
13
|
command(name: string, desc?: string): CommanderCommand;
|
|
14
14
|
description(desc: string): CommanderCommand;
|
|
15
|
+
argument(name: string, description?: string): CommanderCommand;
|
|
15
16
|
option(flags: string, description?: string): CommanderCommand;
|
|
16
17
|
requiredOption(flags: string, description?: string): CommanderCommand;
|
|
17
|
-
action(fn: (opts: Record<string, unknown>) => void | Promise<void>): CommanderCommand;
|
|
18
|
+
action(fn: ((opts: Record<string, unknown>) => void | Promise<void>) | ((arg: string, opts: Record<string, unknown>) => void | Promise<void>)): CommanderCommand;
|
|
18
19
|
}
|
|
19
20
|
export {};
|
|
20
21
|
//# sourceMappingURL=senpi-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"senpi-commands.d.ts","sourceRoot":"","sources":["../../src/cli/senpi-commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"senpi-commands.d.ts","sourceRoot":"","sources":["../../src/cli/senpi-commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE;IAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,gBAAgB,GAAG,OAAO,CAAA;CAAE,GAChF,IAAI,CAkXN;AAkBD,kEAAkE;AAClE,UAAU,gBAAgB;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC/D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC9D,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACtE,MAAM,CACJ,EAAE,EACE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GACzD,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GACzE,gBAAgB,CAAC;CACrB"}
|
|
@@ -13,7 +13,7 @@ import { VERSION } from "../version.js";
|
|
|
13
13
|
*/
|
|
14
14
|
export function registerSenpiCli(program) {
|
|
15
15
|
const senpi = program.command("senpi");
|
|
16
|
-
senpi.description("Senpi trading recipe: trading-recipe create
|
|
16
|
+
senpi.description("Senpi trading recipe: trading-recipe create/list/delete; dsl positions/inspect/closes; config");
|
|
17
17
|
registerSenpiConfigCommands(senpi);
|
|
18
18
|
const tradingRecipe = senpi.command("trading-recipe");
|
|
19
19
|
tradingRecipe.description("Manage trading recipes");
|
|
@@ -112,6 +112,208 @@ export function registerSenpiCli(program) {
|
|
|
112
112
|
console.log(`${r.id}\t\t${r.source ?? "(inline)"}\t\t${r.status ?? "—"}`);
|
|
113
113
|
}
|
|
114
114
|
});
|
|
115
|
+
const dsl = senpi.command("dsl");
|
|
116
|
+
dsl.description("Inspect DSL exit engine state (active positions, inspect, archives)");
|
|
117
|
+
dsl
|
|
118
|
+
.command("positions")
|
|
119
|
+
.description("List active DSL-tracked positions across running recipes")
|
|
120
|
+
.option("-r, --recipe <id>", "Filter by recipe id")
|
|
121
|
+
.option("-a, --address <addr>", "Filter by strategy address")
|
|
122
|
+
.option("--json", "Print raw JSON from the gateway")
|
|
123
|
+
.action(async (opts) => {
|
|
124
|
+
const params = {};
|
|
125
|
+
if (typeof opts.recipe === "string" && opts.recipe.length > 0)
|
|
126
|
+
params.recipeId = opts.recipe;
|
|
127
|
+
if (typeof opts.address === "string" && opts.address.length > 0)
|
|
128
|
+
params.address = opts.address;
|
|
129
|
+
const result = spawnSync(process.argv[0], [process.argv[1], "gateway", "call", "senpi.listDslPositions", "--json", "--params", JSON.stringify(params)], { stdio: ["inherit", "pipe", "inherit"], cwd: process.cwd(), encoding: "utf8" });
|
|
130
|
+
if (result.status !== 0) {
|
|
131
|
+
process.exitCode = result.status ?? 1;
|
|
132
|
+
console.error("\nTip: If the gateway is not running, start it with: openclaw gateway run");
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
let data;
|
|
136
|
+
try {
|
|
137
|
+
data = JSON.parse(result.stdout ?? "{}");
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
process.stdout.write(result.stdout ?? "");
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const inner = (data.payload ?? data);
|
|
144
|
+
const positions = (inner.positions ?? []);
|
|
145
|
+
if (opts.json) {
|
|
146
|
+
console.log(JSON.stringify({ ok: data.ok, positions }, null, 2));
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (positions.length === 0) {
|
|
150
|
+
console.log("No active DSL positions.");
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
console.log("Recipe\tAddress\tAsset\tDir\tEntry\tLast\tROE%\tPhase\tTier\tFloor\tBreaches\tElapsed");
|
|
154
|
+
for (const p of positions) {
|
|
155
|
+
const addr = truncateAddr(p.address);
|
|
156
|
+
const tier = p.currentTierIndex === null || p.currentTierIndex === undefined ? "-" : String(p.currentTierIndex);
|
|
157
|
+
const roe = typeof p.currentROE === "number" && Number.isFinite(p.currentROE)
|
|
158
|
+
? `${p.currentROE.toFixed(1)}%`
|
|
159
|
+
: "—";
|
|
160
|
+
const elapsed = typeof p.elapsedMinutes === "number" && Number.isFinite(p.elapsedMinutes)
|
|
161
|
+
? `${Math.round(p.elapsedMinutes)}m`
|
|
162
|
+
: "—";
|
|
163
|
+
console.log([
|
|
164
|
+
p.recipeId,
|
|
165
|
+
addr,
|
|
166
|
+
p.asset,
|
|
167
|
+
p.direction,
|
|
168
|
+
String(p.entryPrice),
|
|
169
|
+
String(p.lastPrice),
|
|
170
|
+
roe,
|
|
171
|
+
String(p.phase),
|
|
172
|
+
tier,
|
|
173
|
+
String(p.floorPrice),
|
|
174
|
+
`${p.currentBreachCount}/${p.breachesRequired}`,
|
|
175
|
+
elapsed,
|
|
176
|
+
].join("\t"));
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
dsl
|
|
180
|
+
.command("inspect")
|
|
181
|
+
.description("Show full DSL state for an open position by asset symbol")
|
|
182
|
+
.argument("<asset>", "Asset (e.g. SOL, BTC, xyz:GOLD)")
|
|
183
|
+
.option("-r, --recipe <id>", "Filter by recipe id")
|
|
184
|
+
.option("-a, --address <addr>", "Filter by strategy address")
|
|
185
|
+
.option("--json", "Print raw JSON from the gateway")
|
|
186
|
+
.action(async (asset, opts) => {
|
|
187
|
+
const params = { asset };
|
|
188
|
+
if (typeof opts.recipe === "string" && opts.recipe.length > 0)
|
|
189
|
+
params.recipeId = opts.recipe;
|
|
190
|
+
if (typeof opts.address === "string" && opts.address.length > 0)
|
|
191
|
+
params.address = opts.address;
|
|
192
|
+
const result = spawnSync(process.argv[0], [process.argv[1], "gateway", "call", "senpi.getDslPositionState", "--json", "--params", JSON.stringify(params)], { stdio: ["inherit", "pipe", "inherit"], cwd: process.cwd(), encoding: "utf8" });
|
|
193
|
+
if (result.status !== 0) {
|
|
194
|
+
process.exitCode = result.status ?? 1;
|
|
195
|
+
console.error("\nTip: If the gateway is not running, start it with: openclaw gateway run");
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
let data;
|
|
199
|
+
try {
|
|
200
|
+
data = JSON.parse(result.stdout ?? "{}");
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
process.stdout.write(result.stdout ?? "");
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (data.ok === false) {
|
|
207
|
+
const err = data.error;
|
|
208
|
+
console.error(err?.message ?? "Request failed.");
|
|
209
|
+
process.exitCode = 1;
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
const inner = (data.payload ?? data);
|
|
213
|
+
const rows = (inner.positions ?? []);
|
|
214
|
+
if (opts.json) {
|
|
215
|
+
console.log(JSON.stringify({ ok: true, positions: rows }, null, 2));
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
for (const row of rows) {
|
|
219
|
+
const s = row.state;
|
|
220
|
+
const w = truncateAddr(s.wallet);
|
|
221
|
+
console.log(`Position: ${s.asset} ${s.direction} (recipe: ${row.recipeId}, wallet: ${w})`);
|
|
222
|
+
console.log(`Entry: ${s.entryPrice} | Last: ${s.lastPrice} | Size: ${s.size} | Leverage: ${s.leverage}x`);
|
|
223
|
+
console.log(`High Water: ${s.highWaterPrice} (${s.hwTimestamp}) | HW ROE: ${fmtPct(s.highWaterRoe)}`);
|
|
224
|
+
console.log(`Phase: ${s.phase} (since ${s.phaseSince}) | Tier: ${s.currentTierIndex ?? "—"} of ${s.tiers.length} (since ${s.tierSince ?? "—"})`);
|
|
225
|
+
console.log(`Floor: ${s.floorPrice} | Tier Floor: ${s.tierFloorPrice} | Trailing Floor: ${s.trailingFloor}`);
|
|
226
|
+
console.log(`Current ROE: ${fmtPct(s.currentROE)} | Peak ROE: ${fmtPct(s.peakROE)} | Retrace: ${fmtPct(s.retracePct)}`);
|
|
227
|
+
console.log(`Breaches: ${s.currentBreachCount}/${s.breachesRequired} | Distance to Floor: ${fmtPct(s.distancePct)} | Next tier ROE: ${s.distanceToNextTierPct == null ? "—" : fmtPct(s.distanceToNextTierPct)}`);
|
|
228
|
+
console.log(`Exchange SL: ${s.lastSyncedFloorPrice ?? "—"} (synced ${s.slOrderIdUpdatedAt ?? "—"}) | SL Order: ${s.slOrderId ?? "—"}`);
|
|
229
|
+
console.log(`Ticks: ${s.tickCount} | Elapsed: ${s.elapsedMinutes}m | Created: ${s.createdAt}`);
|
|
230
|
+
if (rows.length > 1)
|
|
231
|
+
console.log("");
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
dsl
|
|
235
|
+
.command("closes")
|
|
236
|
+
.description("List archived (closed) DSL positions with reason and ROE")
|
|
237
|
+
.option("-r, --recipe <id>", "Filter by recipe id")
|
|
238
|
+
.option("-a, --address <addr>", "Filter by strategy address")
|
|
239
|
+
.option("-l, --limit <n>", "Max rows after merge")
|
|
240
|
+
.option("--json", "Print raw JSON from the gateway")
|
|
241
|
+
.action(async (opts) => {
|
|
242
|
+
const params = {};
|
|
243
|
+
if (typeof opts.recipe === "string" && opts.recipe.length > 0)
|
|
244
|
+
params.recipeId = opts.recipe;
|
|
245
|
+
if (typeof opts.address === "string" && opts.address.length > 0)
|
|
246
|
+
params.address = opts.address;
|
|
247
|
+
if (typeof opts.limit === "string" && opts.limit.length > 0) {
|
|
248
|
+
const n = Number.parseInt(opts.limit, 10);
|
|
249
|
+
if (Number.isFinite(n))
|
|
250
|
+
params.limit = n;
|
|
251
|
+
}
|
|
252
|
+
const result = spawnSync(process.argv[0], [process.argv[1], "gateway", "call", "senpi.listDslArchives", "--json", "--params", JSON.stringify(params)], { stdio: ["inherit", "pipe", "inherit"], cwd: process.cwd(), encoding: "utf8" });
|
|
253
|
+
if (result.status !== 0) {
|
|
254
|
+
process.exitCode = result.status ?? 1;
|
|
255
|
+
console.error("\nTip: If the gateway is not running, start it with: openclaw gateway run");
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
let data;
|
|
259
|
+
try {
|
|
260
|
+
data = JSON.parse(result.stdout ?? "{}");
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
process.stdout.write(result.stdout ?? "");
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
const inner = (data.payload ?? data);
|
|
267
|
+
const closes = (inner.closes ?? []);
|
|
268
|
+
if (opts.json) {
|
|
269
|
+
console.log(JSON.stringify({ ok: data.ok, closes }, null, 2));
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (closes.length === 0) {
|
|
273
|
+
console.log("No archived DSL closes.");
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
console.log("Recipe\tAddress\tAsset\tDir\tEntry\tLast\tROE%\tReason\tPhase\tTier\tClosed At\tElapsed");
|
|
277
|
+
for (const c of closes) {
|
|
278
|
+
const addr = truncateAddr(c.address);
|
|
279
|
+
const roe = typeof c.currentROE === "number" && Number.isFinite(c.currentROE)
|
|
280
|
+
? `${c.currentROE.toFixed(1)}%`
|
|
281
|
+
: "—";
|
|
282
|
+
const tier = c.currentTierIndex === null || c.currentTierIndex === undefined ? "-" : String(c.currentTierIndex);
|
|
283
|
+
const elapsed = typeof c.elapsedMinutes === "number" && Number.isFinite(c.elapsedMinutes)
|
|
284
|
+
? `${Math.round(c.elapsedMinutes)}m`
|
|
285
|
+
: "—";
|
|
286
|
+
console.log([
|
|
287
|
+
c.recipeId,
|
|
288
|
+
addr,
|
|
289
|
+
c.asset,
|
|
290
|
+
c.direction,
|
|
291
|
+
String(c.entryPrice),
|
|
292
|
+
String(c.lastPrice),
|
|
293
|
+
roe,
|
|
294
|
+
c.closeReason,
|
|
295
|
+
String(c.phase),
|
|
296
|
+
tier,
|
|
297
|
+
c.closedAt,
|
|
298
|
+
elapsed,
|
|
299
|
+
].join("\t"));
|
|
300
|
+
}
|
|
301
|
+
});
|
|
115
302
|
registerGuideCommands(senpi, VERSION);
|
|
116
303
|
}
|
|
304
|
+
function truncateAddr(addr) {
|
|
305
|
+
const trimmed = addr.trim();
|
|
306
|
+
if (!trimmed) {
|
|
307
|
+
return "";
|
|
308
|
+
}
|
|
309
|
+
if (trimmed.length <= 14) {
|
|
310
|
+
return trimmed;
|
|
311
|
+
}
|
|
312
|
+
return `${trimmed.slice(0, 6)}...${trimmed.slice(-4)}`;
|
|
313
|
+
}
|
|
314
|
+
function fmtPct(n) {
|
|
315
|
+
if (n == null || !Number.isFinite(n))
|
|
316
|
+
return "—";
|
|
317
|
+
return `${n.toFixed(2)}%`;
|
|
318
|
+
}
|
|
117
319
|
//# sourceMappingURL=senpi-commands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"senpi-commands.js","sourceRoot":"","sources":["../../src/cli/senpi-commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"senpi-commands.js","sourceRoot":"","sources":["../../src/cli/senpi-commands.ts"],"names":[],"mappings":"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"}
|
package/dist/dsl/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { SenpiEventBus } from "./events/index.js";
|
|
|
6
6
|
export declare function initDsl(bus: SenpiEventBus): void;
|
|
7
7
|
export { DslPlugin } from "./plugin/index.js";
|
|
8
8
|
export { logger as dslLogger, setLogLevel as setDslLogLevel } from "../utils/logger/dsl.js";
|
|
9
|
-
export type { DslPluginConfig, DslState, DslTickResult } from "../types/dsl/index.js";
|
|
9
|
+
export type { DslArchivedClose, DslPluginConfig, DslPositionSummary, DslState, DslTickResult, } from "../types/dsl/index.js";
|
|
10
10
|
export { parseDslPluginConfig, DslConfigValidationError, dslValidationIssue } from "./config/index.js";
|
|
11
11
|
export type { ExitBlockConfig, DslValidationIssue, DslValidationIssueCode } from "./config/index.js";
|
|
12
12
|
export { EVENTS, DSL_EVENTS } from "../constants/dsl/index.js";
|
package/dist/dsl/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dsl/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA0BvD,wBAAgB,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAGhD;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5F,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dsl/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA0BvD,wBAAgB,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAGhD;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5F,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvG,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/dsl/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dsl/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAExF,SAAS,eAAe,CAAC,GAAkB;IACzC,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE;QACjC,IAAI,EAAE,uBAAuB;QAC7B,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,CAAC,MAAe,EAAE,CAAgB,EAAE,EAAE,CAC7C,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAqD,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC7F,QAAQ,EAAE;YACR,cAAc,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,gBAAgB,CAAC;YACzF,aAAa,EAAE;gBACb,UAAU,CAAC,OAAO;gBAClB,UAAU,CAAC,aAAa;gBACxB,UAAU,CAAC,aAAa;gBACxB,UAAU,CAAC,UAAU;gBACrB,UAAU,CAAC,aAAa;gBACxB,MAAM,CAAC,eAAe;gBACtB,UAAU,CAAC,gBAAgB;aAC5B;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAkB;IACxC,eAAe,CAAC,GAAG,CAAC,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dsl/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAExF,SAAS,eAAe,CAAC,GAAkB;IACzC,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE;QACjC,IAAI,EAAE,uBAAuB;QAC7B,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,CAAC,MAAe,EAAE,CAAgB,EAAE,EAAE,CAC7C,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAqD,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC7F,QAAQ,EAAE;YACR,cAAc,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,gBAAgB,CAAC;YACzF,aAAa,EAAE;gBACb,UAAU,CAAC,OAAO;gBAClB,UAAU,CAAC,aAAa;gBACxB,UAAU,CAAC,aAAa;gBACxB,UAAU,CAAC,UAAU;gBACrB,UAAU,CAAC,aAAa;gBACxB,MAAM,CAAC,eAAe;gBACtB,UAAU,CAAC,gBAAgB;aAC5B;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAkB;IACxC,eAAe,CAAC,GAAG,CAAC,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAQ5F,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvG,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* DslPlugin: lifecycle, event wiring, price monitor (DSL feature of senpi core).
|
|
3
3
|
*/
|
|
4
|
+
import type { DslArchivedClose, DslPositionSummary, DslState } from "../../types/dsl/index.js";
|
|
4
5
|
import type { DslPluginOptions } from "./options.js";
|
|
5
6
|
export type { DslPluginOptions } from "./options.js";
|
|
6
7
|
export declare class DslPlugin {
|
|
@@ -9,11 +10,31 @@ export declare class DslPlugin {
|
|
|
9
10
|
private readonly stateManager;
|
|
10
11
|
private readonly senpiClient;
|
|
11
12
|
private readonly ownSenpiClient;
|
|
13
|
+
private readonly baseDir;
|
|
12
14
|
private stateDirLock;
|
|
13
15
|
private priceMonitorHandle;
|
|
14
16
|
private priceMonitorStopped;
|
|
15
17
|
private constructor();
|
|
18
|
+
private static dslStateToPositionSummary;
|
|
19
|
+
private static dslStateToArchivedClose;
|
|
16
20
|
static create(options: DslPluginOptions): Promise<DslPlugin>;
|
|
21
|
+
/** Active DSL positions for this recipe state dir (no recipeId). */
|
|
22
|
+
listActivePositions(): DslPositionSummary[];
|
|
23
|
+
getPositionState(address: string, asset: string): DslState | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* First active DSL state matching asset across strategy addresses (normalized match via StateManager).
|
|
26
|
+
*/
|
|
27
|
+
findPositionByAsset(asset: string): {
|
|
28
|
+
address: string;
|
|
29
|
+
state: DslState;
|
|
30
|
+
} | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Archived closes under this recipe baseDir. Optional per-recipe limit; gateway merges globally.
|
|
33
|
+
*/
|
|
34
|
+
listArchivedCloses(options?: {
|
|
35
|
+
address?: string;
|
|
36
|
+
limit?: number;
|
|
37
|
+
}): Promise<DslArchivedClose[]>;
|
|
17
38
|
stop(): void;
|
|
18
39
|
private releaseStateDirLock;
|
|
19
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/plugin/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dsl/plugin/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EACV,gBAAgB,EAEhB,kBAAkB,EAClB,QAAQ,EACT,MAAM,0BAA0B,CAAC;AAMlC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAuFrD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO;IAkBP,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAoBxC,OAAO,CAAC,MAAM,CAAC,uBAAuB;WAoBzB,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAiElE,oEAAoE;IACpE,mBAAmB,IAAI,kBAAkB,EAAE;IAU3C,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAItE;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAA;KAAE,GAAG,SAAS;IAQpF;;OAEG;IACG,kBAAkB,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAmDrG,IAAI,IAAI,IAAI;YAgBE,mBAAmB;CAKlC"}
|