@senpi/runtime 3.0.81 → 3.0.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/actions/decision-engine.d.ts +16 -0
  2. package/dist/actions/decision-engine.d.ts.map +1 -1
  3. package/dist/actions/decision-engine.js +137 -1
  4. package/dist/actions/decision-engine.js.map +1 -1
  5. package/dist/cli/guide-commands.d.ts.map +1 -1
  6. package/dist/cli/guide-commands.js +33 -0
  7. package/dist/cli/guide-commands.js.map +1 -1
  8. package/dist/cli/senpi-commands.d.ts.map +1 -1
  9. package/dist/cli/senpi-commands.js +12 -0
  10. package/dist/cli/senpi-commands.js.map +1 -1
  11. package/dist/cli/update-command.d.ts +70 -0
  12. package/dist/cli/update-command.d.ts.map +1 -0
  13. package/dist/cli/update-command.js +132 -0
  14. package/dist/cli/update-command.js.map +1 -0
  15. package/dist/dsl/plugin/index.d.ts +35 -1
  16. package/dist/dsl/plugin/index.d.ts.map +1 -1
  17. package/dist/dsl/plugin/index.js +62 -7
  18. package/dist/dsl/plugin/index.js.map +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +87 -6
  21. package/dist/index.js.map +1 -1
  22. package/dist/runtime/effective-config.d.ts +67 -0
  23. package/dist/runtime/effective-config.d.ts.map +1 -0
  24. package/dist/runtime/effective-config.js +324 -0
  25. package/dist/runtime/effective-config.js.map +1 -0
  26. package/dist/runtime/lifecycle-events.d.ts +19 -0
  27. package/dist/runtime/lifecycle-events.d.ts.map +1 -1
  28. package/dist/runtime/lifecycle-events.js +27 -0
  29. package/dist/runtime/lifecycle-events.js.map +1 -1
  30. package/dist/runtime/rebuild-errors.d.ts +26 -0
  31. package/dist/runtime/rebuild-errors.d.ts.map +1 -0
  32. package/dist/runtime/rebuild-errors.js +36 -0
  33. package/dist/runtime/rebuild-errors.js.map +1 -0
  34. package/dist/runtime/run.d.ts +10 -0
  35. package/dist/runtime/run.d.ts.map +1 -1
  36. package/dist/runtime/run.js +13 -1
  37. package/dist/runtime/run.js.map +1 -1
  38. package/dist/runtime/runtime.d.ts +99 -1
  39. package/dist/runtime/runtime.d.ts.map +1 -1
  40. package/dist/runtime/runtime.js +321 -127
  41. package/dist/runtime/runtime.js.map +1 -1
  42. package/dist/runtime/update-apply-deps.d.ts +43 -0
  43. package/dist/runtime/update-apply-deps.d.ts.map +1 -0
  44. package/dist/runtime/update-apply-deps.js +62 -0
  45. package/dist/runtime/update-apply-deps.js.map +1 -0
  46. package/dist/runtime/update-handler.d.ts +158 -0
  47. package/dist/runtime/update-handler.d.ts.map +1 -0
  48. package/dist/runtime/update-handler.js +252 -0
  49. package/dist/runtime/update-handler.js.map +1 -0
  50. package/dist/runtime/update-plan.d.ts +60 -0
  51. package/dist/runtime/update-plan.d.ts.map +1 -0
  52. package/dist/runtime/update-plan.js +164 -0
  53. package/dist/runtime/update-plan.js.map +1 -0
  54. package/dist/runtime/update-register.d.ts +72 -0
  55. package/dist/runtime/update-register.d.ts.map +1 -0
  56. package/dist/runtime/update-register.js +146 -0
  57. package/dist/runtime/update-register.js.map +1 -0
  58. package/dist/runtime/update-report.d.ts +93 -0
  59. package/dist/runtime/update-report.d.ts.map +1 -0
  60. package/dist/runtime/update-report.js +133 -0
  61. package/dist/runtime/update-report.js.map +1 -0
  62. package/dist/skills-manager/manifest.d.ts.map +1 -1
  63. package/dist/skills-manager/manifest.js +1 -0
  64. package/dist/skills-manager/manifest.js.map +1 -1
  65. package/dist/skills-manager/skills-manifest.json +1 -0
  66. package/dist/utils/event-catalog.d.ts +26 -0
  67. package/dist/utils/event-catalog.d.ts.map +1 -1
  68. package/dist/utils/event-catalog.js +1 -0
  69. package/dist/utils/event-catalog.js.map +1 -1
  70. package/dist/widgets/errors.d.ts +3 -15
  71. package/dist/widgets/errors.d.ts.map +1 -1
  72. package/dist/widgets/errors.js +3 -20
  73. package/dist/widgets/errors.js.map +1 -1
  74. package/dist/widgets/index.d.ts +3 -10
  75. package/dist/widgets/index.d.ts.map +1 -1
  76. package/dist/widgets/index.js +3 -6
  77. package/dist/widgets/index.js.map +1 -1
  78. package/dist/widgets/registry.d.ts.map +1 -1
  79. package/dist/widgets/registry.js +10 -3
  80. package/dist/widgets/registry.js.map +1 -1
  81. package/dist/widgets/tool.d.ts +6 -9
  82. package/dist/widgets/tool.d.ts.map +1 -1
  83. package/dist/widgets/tool.js +37 -147
  84. package/dist/widgets/tool.js.map +1 -1
  85. package/dist/widgets/types.d.ts +20 -58
  86. package/dist/widgets/types.d.ts.map +1 -1
  87. package/dist/widgets/types.js +4 -4
  88. package/dist/widgets/widgets/fund-user-wallet.d.ts +4 -5
  89. package/dist/widgets/widgets/fund-user-wallet.d.ts.map +1 -1
  90. package/dist/widgets/widgets/fund-user-wallet.js +27 -67
  91. package/dist/widgets/widgets/fund-user-wallet.js.map +1 -1
  92. package/openclaw.plugin.json +1 -4
  93. package/package.json +2 -3
  94. package/dist/widgets/strategy-lookup.d.ts +0 -39
  95. package/dist/widgets/strategy-lookup.d.ts.map +0 -1
  96. package/dist/widgets/strategy-lookup.js +0 -70
  97. package/dist/widgets/strategy-lookup.js.map +0 -1
  98. package/dist/widgets/widgets/fund-strategy-wallet.d.ts +0 -13
  99. package/dist/widgets/widgets/fund-strategy-wallet.d.ts.map +0 -1
  100. package/dist/widgets/widgets/fund-strategy-wallet.js +0 -139
  101. package/dist/widgets/widgets/fund-strategy-wallet.js.map +0 -1
  102. package/skills/senpi-widgets/SKILL.md +0 -167
@@ -0,0 +1,324 @@
1
+ /**
2
+ * What a recipe actually does, as opposed to what it says.
3
+ *
4
+ * Several fields in this schema are authored in good faith and then have no effect, or a different
5
+ * effect than the number written down. There is no single mechanism to blame — the causes are
6
+ * scattered across unrelated subsystems and each is locally reasonable:
7
+ *
8
+ * - **Precedence chains.** Margin resolves `margin_pct` → `margin_per_slot` → `budget / slots`;
9
+ * leverage resolves `default_leverage` → `maxLeverage × multiplier(trading_risk)`. Both are
10
+ * first-match-wins, so a field below the winning branch is inert. Setting `trading_risk` on a
11
+ * recipe that also sets `default_leverage` changes nothing, and nothing says so.
12
+ * - **Silent clamps.** `clampInterval` raises every time-based cut to the DSL tick cadence;
13
+ * `timeout_seconds` defaults to `interval_seconds`. Both are `Math.max`/`??` with no warning.
14
+ * - **Dead fields.** `strategy.enabled` is parsed, mapped onto `StrategyConfig`, and read by
15
+ * nothing.
16
+ *
17
+ * The individual fixes are cheap but numerous, and each new one adds another place to forget. One
18
+ * report that states the effective value and names what was masked kills the whole class at once,
19
+ * which is why this exists as a resolver rather than as ten scattered warnings.
20
+ *
21
+ * ## Pure by construction
22
+ *
23
+ * Nothing here reads the network, the venue, or disk. Rules that genuinely depend on live data —
24
+ * `margin_pct` is a percentage of *withdrawable*, `default_leverage` is clamped by the venue's
25
+ * per-asset maximum — are reported as the RULE that will apply, never as a number this function
26
+ * cannot know. A note that invented a dollar figure from a stale balance would be worse than no
27
+ * note at all.
28
+ */
29
+ function isRecord(v) {
30
+ return v !== null && typeof v === "object" && !Array.isArray(v);
31
+ }
32
+ function num(v) {
33
+ return typeof v === "number" && Number.isFinite(v) ? v : undefined;
34
+ }
35
+ /**
36
+ * `budget` as the runtime actually reads it. Mirrors `coerceNumber` in `map-strategies.ts`, which
37
+ * parses numeric STRINGS — and `budget` is the only field where that matters, because it is absent
38
+ * from `strategyEntrySchema` and so arrives unvalidated. Every other numeric here is `z.number()`,
39
+ * so a string never reaches this module.
40
+ *
41
+ * Quoted YAML scalars and `${BUDGET}` env substitution both produce strings, so treating them as
42
+ * unparseable would make this module state a falsehood on entirely ordinary input.
43
+ */
44
+ function budgetAsRuntimeReadsIt(v) {
45
+ if (typeof v === "number" && Number.isFinite(v))
46
+ return v;
47
+ if (typeof v === "string") {
48
+ const n = Number(v);
49
+ if (Number.isFinite(n))
50
+ return n;
51
+ }
52
+ return undefined;
53
+ }
54
+ /** A time-based cut only exists when it is explicitly enabled — `parseHardTimeout` and its siblings
55
+ * return `undefined` for a block without a truthy `enabled`, so a disabled block is not clamped and
56
+ * must not be reported as though it were. */
57
+ function enabledCut(raw) {
58
+ // Falsiness, not identity: `dsl_preset` is `z.record(z.string(), z.unknown())` and the unknown-key
59
+ // check inspects names only, so `enabled: "yes"` validates and the parser (`!raw?.enabled`) builds
60
+ // the cut. Testing `=== true` here would silently under-report exactly those recipes.
61
+ return isRecord(raw) && !!raw.enabled ? raw : undefined;
62
+ }
63
+ function strategyNotes(config, notes) {
64
+ const s = config.strategy;
65
+ const defaultLeverage = num(s.default_leverage);
66
+ const marginPct = num(s.margin_pct);
67
+ const marginPerSlot = num(s.margin_per_slot);
68
+ const budget = budgetAsRuntimeReadsIt(s.budget);
69
+ const slots = num(s.slots);
70
+ // ── leverage chain: default_leverage > maxLeverage × multiplier(trading_risk) ──
71
+ if (defaultLeverage !== undefined) {
72
+ for (const field of ["trading_risk", "leverage_multipliers"]) {
73
+ if (s[field] === undefined)
74
+ continue;
75
+ notes.push({
76
+ yamlPath: `strategy.${field}`,
77
+ kind: "masked",
78
+ authored: s[field],
79
+ supersededBy: "strategy.default_leverage",
80
+ detail: `\`default_leverage: ${defaultLeverage}\` is set, so leverage resolves from it directly and ` +
81
+ `\`${field}\` is never consulted. Remove \`default_leverage\` to let the risk multiplier apply.`,
82
+ });
83
+ }
84
+ notes.push({
85
+ yamlPath: "strategy.default_leverage",
86
+ kind: "resolved",
87
+ authored: defaultLeverage,
88
+ detail: `Unless a signal carries its own leverage — which wins outright — positions open at ` +
89
+ `${defaultLeverage}×, clamped into [1, the venue's per-asset maximum] (that maximum falls ` +
90
+ `back to 20 when the instrument cache cannot be read).`,
91
+ });
92
+ if (defaultLeverage < 1) {
93
+ notes.push({
94
+ yamlPath: "strategy.default_leverage",
95
+ kind: "clamped",
96
+ authored: defaultLeverage,
97
+ effective: 1,
98
+ detail: "Leverage is floored at 1×, so a zero or negative value opens positions at 1×.",
99
+ });
100
+ }
101
+ }
102
+ else if (s.trading_risk !== undefined || s.leverage_multipliers !== undefined) {
103
+ // An unrecognised trading_risk falls back to "moderate", so the effective tier is not always
104
+ // the authored one.
105
+ const effectiveRisk = typeof s.trading_risk === "string" &&
106
+ ["conservative", "moderate", "aggressive"].includes(s.trading_risk)
107
+ ? s.trading_risk
108
+ : "moderate";
109
+ notes.push({
110
+ yamlPath: "strategy.trading_risk",
111
+ kind: "resolved",
112
+ authored: s.trading_risk,
113
+ effective: effectiveRisk,
114
+ detail: "No `default_leverage`, so — unless a signal carries its own leverage, which wins outright — " +
115
+ `leverage is the venue's per-asset maximum times the \`${effectiveRisk}\` multiplier, floored ` +
116
+ "to an integer and clamped to at least 1.",
117
+ });
118
+ if (isRecord(s.leverage_multipliers) && s.leverage_multipliers[effectiveRisk] === undefined) {
119
+ notes.push({
120
+ yamlPath: "strategy.leverage_multipliers",
121
+ kind: "masked",
122
+ authored: s.leverage_multipliers,
123
+ supersededBy: "strategy.trading_risk",
124
+ detail: `None of the authored multipliers is keyed \`${effectiveRisk}\`, the tier actually in effect, ` +
125
+ "so the built-in default for that tier applies and these values are never read.",
126
+ });
127
+ }
128
+ }
129
+ // ── margin chain: signal marginPct > margin_pct > margin_per_slot > budget / slots ──
130
+ if (marginPct !== undefined && marginPerSlot !== undefined) {
131
+ notes.push({
132
+ yamlPath: "strategy.margin_per_slot",
133
+ kind: "masked",
134
+ authored: marginPerSlot,
135
+ supersededBy: "strategy.margin_pct",
136
+ detail: `\`margin_pct: ${marginPct}\` outranks \`margin_per_slot\` whenever withdrawable balance is ` +
137
+ `readable and above zero. NOT unconditional: with the account fully deployed, sizing falls ` +
138
+ `through to the fixed $${marginPerSlot} — so this field does nothing most of the time and ` +
139
+ `everything at the margin.`,
140
+ });
141
+ }
142
+ if (marginPct !== undefined) {
143
+ notes.push({
144
+ yamlPath: "strategy.margin_pct",
145
+ kind: "resolved",
146
+ authored: marginPct,
147
+ detail: `Unless a signal carries its own \`marginPct\` — which wins outright — each position uses ` +
148
+ `${marginPct}% of **withdrawable balance** at the moment it opens; not ${marginPct}% of ` +
149
+ `budget. Where withdrawable is unreadable or zero, sizing falls to the next branch.`,
150
+ });
151
+ if (slots !== undefined && slots > 1 && marginPct * slots > 100) {
152
+ notes.push({
153
+ yamlPath: "strategy.margin_pct",
154
+ kind: "resolved",
155
+ authored: marginPct,
156
+ detail: `\`margin_pct\` × \`slots\` = ${marginPct * slots}%, over 100%. Later slots may fail to open ` +
157
+ `for insufficient withdrawable balance.`,
158
+ });
159
+ }
160
+ }
161
+ else if (marginPerSlot !== undefined) {
162
+ notes.push({
163
+ yamlPath: "strategy.margin_per_slot",
164
+ kind: "resolved",
165
+ authored: marginPerSlot,
166
+ detail: `Each position uses a fixed $${marginPerSlot} of margin.`,
167
+ });
168
+ }
169
+ else if (budget !== undefined && budget > 0) {
170
+ // `coerceNumber(slots) || 1` — absent, zero, or unparseable all become ONE slot, so the whole
171
+ // budget rides on a single position. That is the most extreme instance of this trap and the
172
+ // one a reader is least likely to expect.
173
+ const effectiveSlots = slots !== undefined && slots > 0 ? slots : 1;
174
+ notes.push({
175
+ yamlPath: "strategy.slots",
176
+ kind: "resolved",
177
+ authored: slots,
178
+ effective: budget / effectiveSlots,
179
+ detail: `No \`margin_pct\` or \`margin_per_slot\`, so sizing falls back to \`budget / slots\` = ` +
180
+ `$${budget / effectiveSlots} per position` +
181
+ (slots === undefined || slots <= 0
182
+ ? " — and with no usable `slots` the runtime uses 1, so the entire budget rides on a single position."
183
+ : ". **`slots` is therefore a sizing input**: lowering it raises the size of each position."),
184
+ });
185
+ }
186
+ // `budget` is absent from `strategyEntrySchema` (which is `.passthrough()`), so a typo is not a
187
+ // schema error — it is read through `coerceNumber`, which yields 0 for anything unparseable.
188
+ if (s.budget !== undefined && budget === undefined) {
189
+ notes.push({
190
+ yamlPath: "strategy.budget",
191
+ kind: "clamped",
192
+ authored: s.budget,
193
+ effective: 0,
194
+ detail: "`budget` is not declared in the schema, so an unparseable value is not a validation error — " +
195
+ "it becomes 0. That disables the `budget / slots` sizing fallback and zeroes the USD " +
196
+ "daily-loss limit derived from it.",
197
+ });
198
+ }
199
+ if (s.enabled !== undefined) {
200
+ notes.push({
201
+ yamlPath: "strategy.enabled",
202
+ kind: "inert",
203
+ authored: s.enabled,
204
+ detail: "`strategy.enabled` is parsed and mapped onto the strategy config, but no code reads it.",
205
+ });
206
+ }
207
+ }
208
+ function exitNotes(config, notes) {
209
+ const exit = config.exit;
210
+ if (!isRecord(exit))
211
+ return;
212
+ const orderType = typeof exit.order_type === "string" ? exit.order_type : undefined;
213
+ if (exit.fee_optimized_limit_options !== undefined && orderType !== "FEE_OPTIMIZED_LIMIT") {
214
+ notes.push({
215
+ yamlPath: "exit.fee_optimized_limit_options",
216
+ kind: "masked",
217
+ authored: exit.fee_optimized_limit_options,
218
+ supersededBy: "exit.order_type",
219
+ detail: `\`order_type\` is ${orderType ?? "MARKET (the default)"}, so the fee-optimized options are ` +
220
+ "ignored entirely.",
221
+ });
222
+ }
223
+ // Every time-based cut is raised to the DSL poll cadence at parse time, silently. A cut shorter
224
+ // than one tick could not fire on schedule, so the clamp is right — but the recipe then says a
225
+ // number the engine will never use.
226
+ const intervalSeconds = num(exit.interval_seconds) ?? 30;
227
+ const minIntervalMinutes = intervalSeconds / 60;
228
+ const preset = exit.dsl_preset;
229
+ if (!isRecord(preset))
230
+ return;
231
+ for (const cut of ["hard_timeout", "weak_peak_cut", "dead_weight_cut"]) {
232
+ const block = enabledCut(preset[cut]);
233
+ if (!block)
234
+ continue;
235
+ const authored = num(block.interval_in_minutes);
236
+ if (authored === undefined || authored >= minIntervalMinutes)
237
+ continue;
238
+ notes.push({
239
+ yamlPath: `exit.dsl_preset.${cut}.interval_in_minutes`,
240
+ kind: "clamped",
241
+ authored,
242
+ effective: minIntervalMinutes,
243
+ detail: `Raised to ${minIntervalMinutes} minutes to match \`exit.interval_seconds: ${intervalSeconds}\` — ` +
244
+ `a cut shorter than one exit tick cannot fire on schedule. Lower \`interval_seconds\` to make ` +
245
+ `${authored} minutes achievable.`,
246
+ });
247
+ }
248
+ }
249
+ /**
250
+ * `decision_mode: none` — the default — makes an entry/exit action inert in its entirety.
251
+ *
252
+ * `NoDecisionStrategy.decide` returns `execute: false` unconditionally, and both position actions
253
+ * skip on `!decision.execute`. `createActions` defaults the mode to `"none"`, so an OPEN_POSITION
254
+ * that simply omits `decision_mode` never opens anything — and takes `min_confidence`,
255
+ * `decision_prompt`, `decision_model` and `context` down with it, since none is ever reached.
256
+ *
257
+ * This is larger than every other note in this module: not a field doing nothing, but an action.
258
+ */
259
+ function actionNotes(config, notes) {
260
+ const TRADING = new Set(["OPEN_POSITION", "CLOSE_POSITION"]);
261
+ (config.actions ?? []).forEach((action, index) => {
262
+ const raw = action;
263
+ if (!TRADING.has(String(raw.action_type)))
264
+ return;
265
+ const mode = raw.decision_mode === undefined ? "none (by omission)" : String(raw.decision_mode);
266
+ if (raw.decision_mode !== undefined && raw.decision_mode !== "none")
267
+ return;
268
+ notes.push({
269
+ yamlPath: `actions.${index}.decision_mode`,
270
+ kind: "inert",
271
+ authored: raw.decision_mode,
272
+ detail: `\`${String(raw.name)}\` is ${String(raw.action_type)} with decision_mode ${mode}, and the ` +
273
+ "engine returns execute: false unconditionally in that mode — so this action never trades. " +
274
+ "Set `decision_mode: rule` (or `llm`) to make it act.",
275
+ });
276
+ for (const dependent of ["min_confidence", "decision_prompt", "decision_model", "context"]) {
277
+ if (raw[dependent] === undefined)
278
+ continue;
279
+ notes.push({
280
+ yamlPath: `actions.${index}.${dependent}`,
281
+ kind: "masked",
282
+ authored: raw[dependent],
283
+ supersededBy: `actions.${index}.decision_mode`,
284
+ detail: `Never reached: the action does not trade under decision_mode ${mode}.`,
285
+ });
286
+ }
287
+ });
288
+ }
289
+ function scannerNotes(config, notes) {
290
+ (config.scanners ?? []).forEach((scanner, index) => {
291
+ const raw = scanner;
292
+ if (raw.type !== "external_scanner")
293
+ return;
294
+ const interval = num(raw.interval_seconds);
295
+ if (raw.timeout_seconds === undefined && interval !== undefined) {
296
+ notes.push({
297
+ yamlPath: `scanners.${index}.timeout_seconds`,
298
+ kind: "defaulted",
299
+ effective: interval,
300
+ detail: `No \`timeout_seconds\`, so each tick of \`${String(raw.name)}\` gets \`interval_seconds\` ` +
301
+ `(${interval}s) as its wall-clock budget. Raising the interval also raises the timeout.`,
302
+ });
303
+ }
304
+ });
305
+ }
306
+ /**
307
+ * Every place this recipe's effective behaviour differs from its authored text.
308
+ *
309
+ * An empty `notes` array means every field is doing what it says — which is worth reporting as
310
+ * such, not as silence.
311
+ */
312
+ export function resolveEffectiveConfig(config) {
313
+ const notes = [];
314
+ strategyNotes(config, notes);
315
+ actionNotes(config, notes);
316
+ exitNotes(config, notes);
317
+ scannerNotes(config, notes);
318
+ return { notes };
319
+ }
320
+ /** Notes that mean a field the author wrote is doing nothing at all. */
321
+ export function ineffectiveNotes(effective) {
322
+ return effective.notes.filter((n) => n.kind === "masked" || n.kind === "inert");
323
+ }
324
+ //# sourceMappingURL=effective-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-config.js","sourceRoot":"","sources":["../../src/runtime/effective-config.ts"],"names":[],"mappings":"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"}
@@ -79,6 +79,25 @@ export interface RuntimeDeletedInput {
79
79
  * (which emits no `runtime.stopped`) is still observable.
80
80
  */
81
81
  export declare function buildRuntimeDeletedEvent(input: RuntimeDeletedInput): EmittableEvent<typeof EVENT_NAME.runtimeDeleted>;
82
+ export interface RuntimeUpdatedInput {
83
+ readonly runtimeId: string;
84
+ readonly address?: string;
85
+ /** Raw, pre-env-resolution config of the NEW recipe — hashed the same way `runtime.started` does. */
86
+ readonly unresolvedConfig?: Record<string, unknown>;
87
+ /** Raw, pre-env-resolution config of the recipe being replaced. */
88
+ readonly previousUnresolvedConfig?: Record<string, unknown>;
89
+ readonly exitPresetChanged: boolean;
90
+ readonly openPositions: number;
91
+ readonly slots?: number;
92
+ }
93
+ /**
94
+ * `runtime.updated` — a running strategy was swapped onto a new recipe in place.
95
+ *
96
+ * The body leads with the fact that most often surprises the person reading it back: an exit change
97
+ * does not reach positions that were already open, because each carries a snapshot of the preset it
98
+ * was opened under.
99
+ */
100
+ export declare function buildRuntimeUpdatedEvent(input: RuntimeUpdatedInput): EmittableEvent<typeof EVENT_NAME.runtimeUpdated>;
82
101
  /** `runtime.paused` — a risk gate tripped a running→paused transition. WARN. */
83
102
  export declare function buildRuntimePausedEvent(gateId: string | undefined, gateName: string | undefined, reason: string | undefined, address?: string): EmittableEvent<typeof EVENT_NAME.runtimePaused>;
84
103
  /** `runtime.resumed` — a previously-tripped risk gate cleared, re-arming a paused→running transition. */
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-events.d.ts","sourceRoot":"","sources":["../../src/runtime/lifecycle-events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle-events.d.ts","sourceRoot":"","sources":["../../src/runtime/lifecycle-events.ts"],"names":[],"mappings":"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"}
@@ -170,6 +170,33 @@ export function buildRuntimeDeletedEvent(input) {
170
170
  }),
171
171
  };
172
172
  }
173
+ /**
174
+ * `runtime.updated` — a running strategy was swapped onto a new recipe in place.
175
+ *
176
+ * The body leads with the fact that most often surprises the person reading it back: an exit change
177
+ * does not reach positions that were already open, because each carries a snapshot of the preset it
178
+ * was opened under.
179
+ */
180
+ export function buildRuntimeUpdatedEvent(input) {
181
+ const carried = input.exitPresetChanged && input.openPositions > 0
182
+ ? ` — new exits apply to new entries only; ${input.openPositions} open position(s) keep theirs`
183
+ : "";
184
+ return {
185
+ name: EVENT_NAME.runtimeUpdated,
186
+ level: "info",
187
+ body: `Runtime updated: ${input.runtimeId}${carried}`,
188
+ attributes: eventAttrs({
189
+ "senpi.runtime.id": input.runtimeId,
190
+ // Addresses are case-insensitive; lowercase to match the identity join key.
191
+ "senpi.strategy.address": input.address ? input.address.toLowerCase() : undefined,
192
+ "senpi.config.hash": computeConfigHash(input.unresolvedConfig),
193
+ "senpi.config.hash_previous": computeConfigHash(input.previousUnresolvedConfig),
194
+ "senpi.runtime.exit_preset_changed": input.exitPresetChanged,
195
+ "senpi.runtime.open_positions": input.openPositions,
196
+ "senpi.runtime.slots": input.slots,
197
+ }),
198
+ };
199
+ }
173
200
  /** `runtime.paused` — a risk gate tripped a running→paused transition. WARN. */
174
201
  export function buildRuntimePausedEvent(gateId, gateName, reason, address) {
175
202
  const label = gateName ?? gateId ?? "gate";
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle-events.js","sourceRoot":"","sources":["../../src/runtime/lifecycle-events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle-events.js","sourceRoot":"","sources":["../../src/runtime/lifecycle-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The one outcome of an in-place update that a caller must not treat as a plain failure.
3
+ *
4
+ * `rebuildComponents` does all of its fallible work before tearing anything down, and keeps a
5
+ * rollback to the previous recipe as a backstop. Almost every failure therefore ends with the
6
+ * runtime healthy on its old configuration — a failed update, nothing more.
7
+ *
8
+ * This error means the backstop ALSO failed: the new recipe would not build, and neither would the
9
+ * one that was running a moment ago. The wallet still holds whatever positions it held, and nothing
10
+ * is watching them — no scanners, no exit engine, no stop being maintained. It is the single state
11
+ * the update verb exists to avoid, and it needs a human, so it is a distinct type rather than a
12
+ * message a caller has to pattern-match.
13
+ */
14
+ export declare class RuntimeRebuildRollbackFailedError extends Error {
15
+ readonly code = "E_UPDATE_ROLLBACK_FAILED";
16
+ /** Wallet whose book is now unmanaged. Named so an operator can act without reading a log. */
17
+ readonly address: string;
18
+ /** Why the new recipe failed to build. */
19
+ readonly rebuildError: unknown;
20
+ /** Why the previous recipe could not be restored. */
21
+ readonly rollbackError: unknown;
22
+ constructor(address: string, rebuildError: unknown, rollbackError: unknown);
23
+ }
24
+ /** True when a thrown value is the unmanaged-book outcome above. */
25
+ export declare function isRollbackFailure(err: unknown): err is RuntimeRebuildRollbackFailedError;
26
+ //# sourceMappingURL=rebuild-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rebuild-errors.d.ts","sourceRoot":"","sources":["../../src/runtime/rebuild-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,qBAAa,iCAAkC,SAAQ,KAAK;IAC1D,QAAQ,CAAC,IAAI,8BAA8B;IAC3C,8FAA8F;IAC9F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO;CAW3E;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,iCAAiC,CAExF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The one outcome of an in-place update that a caller must not treat as a plain failure.
3
+ *
4
+ * `rebuildComponents` does all of its fallible work before tearing anything down, and keeps a
5
+ * rollback to the previous recipe as a backstop. Almost every failure therefore ends with the
6
+ * runtime healthy on its old configuration — a failed update, nothing more.
7
+ *
8
+ * This error means the backstop ALSO failed: the new recipe would not build, and neither would the
9
+ * one that was running a moment ago. The wallet still holds whatever positions it held, and nothing
10
+ * is watching them — no scanners, no exit engine, no stop being maintained. It is the single state
11
+ * the update verb exists to avoid, and it needs a human, so it is a distinct type rather than a
12
+ * message a caller has to pattern-match.
13
+ */
14
+ export class RuntimeRebuildRollbackFailedError extends Error {
15
+ code = "E_UPDATE_ROLLBACK_FAILED";
16
+ /** Wallet whose book is now unmanaged. Named so an operator can act without reading a log. */
17
+ address;
18
+ /** Why the new recipe failed to build. */
19
+ rebuildError;
20
+ /** Why the previous recipe could not be restored. */
21
+ rollbackError;
22
+ constructor(address, rebuildError, rollbackError) {
23
+ super(`Runtime for ${address} is DOWN: the updated recipe failed to build and the previous one ` +
24
+ `could not be restored. Open positions on this wallet are not being managed — no exit ` +
25
+ `engine is running. Restart the runtime, and check the wallet's positions at the venue.`);
26
+ this.name = "RuntimeRebuildRollbackFailedError";
27
+ this.address = address;
28
+ this.rebuildError = rebuildError;
29
+ this.rollbackError = rollbackError;
30
+ }
31
+ }
32
+ /** True when a thrown value is the unmanaged-book outcome above. */
33
+ export function isRollbackFailure(err) {
34
+ return err instanceof RuntimeRebuildRollbackFailedError;
35
+ }
36
+ //# sourceMappingURL=rebuild-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rebuild-errors.js","sourceRoot":"","sources":["../../src/runtime/rebuild-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,iCAAkC,SAAQ,KAAK;IACjD,IAAI,GAAG,0BAA0B,CAAC;IAC3C,8FAA8F;IACrF,OAAO,CAAS;IACzB,0CAA0C;IACjC,YAAY,CAAU;IAC/B,qDAAqD;IAC5C,aAAa,CAAU;IAEhC,YAAY,OAAe,EAAE,YAAqB,EAAE,aAAsB;QACxE,KAAK,CACH,eAAe,OAAO,oEAAoE;YACxF,uFAAuF;YACvF,wFAAwF,CAC3F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAC;QAChD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAED,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,GAAG,YAAY,iCAAiC,CAAC;AAC1D,CAAC"}
@@ -9,6 +9,7 @@ import type { ScannerSupervisionSource } from "../scanners/supervision.js";
9
9
  import type { DslPlugin } from "../dsl/plugin/index.js";
10
10
  import type { ActionExecutionRecord, ActionFilter, ActionLatestState, ReadActionHistoryOptions } from "../actions/store/index.js";
11
11
  import type { AuditQueryArgs, AuditQueryResult } from "./audit-query.types.js";
12
+ import type { RuntimeConfig } from "./runtime-schema.js";
12
13
  export interface RunOptions {
13
14
  fromPath?: boolean;
14
15
  stateDir?: string;
@@ -25,6 +26,15 @@ export interface RunOptions {
25
26
  export interface RuntimeHandle {
26
27
  stop(): Promise<void>;
27
28
  dsl: DslPlugin | null;
29
+ /**
30
+ * Swap this runtime onto a new recipe in place, without restarting it.
31
+ *
32
+ * State on disk survives — DSL position files, scanner stores, action history — which is the
33
+ * entire reason an update is worth having over a delete-and-recreate. Throws if the new recipe
34
+ * cannot be built; the runtime rolls itself back to the previous one first, except in the case
35
+ * that raises `RuntimeRebuildRollbackFailedError`.
36
+ */
37
+ applyUpdatedConfig(next: RuntimeConfig): Promise<void>;
28
38
  /** Wallet address from the recipe's strategy block. */
29
39
  wallet: string;
30
40
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,19 @@ export async function run(recipePathOrContent, options) {
32
32
  async stop() {
33
33
  await runtime.stop();
34
34
  },
35
- dsl: runtime.dsl,
35
+ // A getter, not a value. `Runtime.dsl` is itself a getter over `this.dslPlugin`, so reading it
36
+ // once here froze whichever plugin existed at start() into the handle forever. Every other
37
+ // member of this object already delegates live; `dsl` was the one that did not, and it is the
38
+ // one a rebuild replaces — `rebuildComponents` assigns a NEW `dslPlugin` after stopping the old
39
+ // one, which left `handle.dsl` pointing at a stopped plugin. `senpi.update` reads open positions
40
+ // through exactly that path (`handle?.dsl?.listActiveDslStates()`), so a plan taken after an
41
+ // apply would report the dead plugin's book.
42
+ get dsl() {
43
+ return runtime.dsl;
44
+ },
45
+ applyUpdatedConfig(next) {
46
+ return runtime.rebuildComponents(next);
47
+ },
36
48
  wallet: config.strategy?.wallet ?? "",
37
49
  ingestExternalScannerData(request) {
38
50
  return runtime.ingestExternalScannerData(request);
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAyJvC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,mBAA2B,EAC3B,OAAoB;IAEpB,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,MAAM,wBAAwB,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnH,MAAM,QAAQ,GACZ,CAAC,OAAO,OAAO,EAAE,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpE,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAC/B,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE;QAClC,QAAQ;QACR,YAAY;QACZ,MAAM;QACN,gBAAgB,EAAE,OAAO,EAAE,gBAAgB;QAC3C,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,gBAAgB;KACjB,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;QACrC,yBAAyB,CACvB,OAAqC;YAErC,OAAO,OAAO,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;QACD,0BAA0B,CACxB,WAAmB,EACnB,KAA8D;YAE9D,OAAO,OAAO,CAAC,0BAA0B,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QACD,uBAAuB,CAAC,MAAgC;YACtD,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,eAAe;YACnB,OAAO,OAAO,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC;QACD,KAAK,CAAC,cAAc;YAClB,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC;QAClC,CAAC;QACD,6BAA6B;YAC3B,OAAO,OAAO,CAAC,6BAA6B,EAAE,CAAC;QACjD,CAAC;QACD,UAAU,CACR,IAAoB,EACpB,IAA+B;YAE/B,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,mBAAmB;YACjB,OAAO,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvC,CAAC;QACD,aAAa;YACX,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC;QACjC,CAAC;QACD,sBAAsB,CACpB,MAAqB;YAErB,OAAO,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QACD,oBAAoB,CAClB,OAAe,EACf,UAAkB;YAElB,OAAO,OAAO,CAAC,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3D,CAAC;QACD,yBAAyB,CACvB,OAAe,EACf,UAAkB,EAClB,IAA+B;YAE/B,OAAO,OAAO,CAAC,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACtE,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAkKvC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,mBAA2B,EAC3B,OAAoB;IAEpB,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,MAAM,wBAAwB,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnH,MAAM,QAAQ,GACZ,CAAC,OAAO,OAAO,EAAE,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpE,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAC/B,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE;QAClC,QAAQ;QACR,YAAY;QACZ,MAAM;QACN,gBAAgB,EAAE,OAAO,EAAE,gBAAgB;QAC3C,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,gBAAgB;KACjB,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,+FAA+F;QAC/F,2FAA2F;QAC3F,8FAA8F;QAC9F,gGAAgG;QAChG,iGAAiG;QACjG,6FAA6F;QAC7F,6CAA6C;QAC7C,IAAI,GAAG;YACL,OAAO,OAAO,CAAC,GAAG,CAAC;QACrB,CAAC;QACD,kBAAkB,CAAC,IAAmB;YACpC,OAAO,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;QACrC,yBAAyB,CACvB,OAAqC;YAErC,OAAO,OAAO,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;QACD,0BAA0B,CACxB,WAAmB,EACnB,KAA8D;YAE9D,OAAO,OAAO,CAAC,0BAA0B,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QACD,uBAAuB,CAAC,MAAgC;YACtD,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,eAAe;YACnB,OAAO,OAAO,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC;QACD,KAAK,CAAC,cAAc;YAClB,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC;QAClC,CAAC;QACD,6BAA6B;YAC3B,OAAO,OAAO,CAAC,6BAA6B,EAAE,CAAC;QACjD,CAAC;QACD,UAAU,CACR,IAAoB,EACpB,IAA+B;YAE/B,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,mBAAmB;YACjB,OAAO,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvC,CAAC;QACD,aAAa;YACX,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC;QACjC,CAAC;QACD,sBAAsB,CACpB,MAAqB;YAErB,OAAO,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QACD,oBAAoB,CAClB,OAAe,EACf,UAAkB;YAElB,OAAO,OAAO,CAAC,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3D,CAAC;QACD,yBAAyB,CACvB,OAAe,EACf,UAAkB,EAClB,IAA+B;YAE/B,OAAO,OAAO,CAAC,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACtE,CAAC;KACF,CAAC;AACJ,CAAC"}