@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.
- package/dist/actions/decision-engine.d.ts +16 -0
- package/dist/actions/decision-engine.d.ts.map +1 -1
- package/dist/actions/decision-engine.js +137 -1
- package/dist/actions/decision-engine.js.map +1 -1
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +33 -0
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/cli/senpi-commands.d.ts.map +1 -1
- package/dist/cli/senpi-commands.js +12 -0
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/cli/update-command.d.ts +70 -0
- package/dist/cli/update-command.d.ts.map +1 -0
- package/dist/cli/update-command.js +132 -0
- package/dist/cli/update-command.js.map +1 -0
- package/dist/dsl/plugin/index.d.ts +35 -1
- package/dist/dsl/plugin/index.d.ts.map +1 -1
- package/dist/dsl/plugin/index.js +62 -7
- package/dist/dsl/plugin/index.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +87 -6
- package/dist/index.js.map +1 -1
- package/dist/runtime/effective-config.d.ts +67 -0
- package/dist/runtime/effective-config.d.ts.map +1 -0
- package/dist/runtime/effective-config.js +324 -0
- package/dist/runtime/effective-config.js.map +1 -0
- package/dist/runtime/lifecycle-events.d.ts +19 -0
- package/dist/runtime/lifecycle-events.d.ts.map +1 -1
- package/dist/runtime/lifecycle-events.js +27 -0
- package/dist/runtime/lifecycle-events.js.map +1 -1
- package/dist/runtime/rebuild-errors.d.ts +26 -0
- package/dist/runtime/rebuild-errors.d.ts.map +1 -0
- package/dist/runtime/rebuild-errors.js +36 -0
- package/dist/runtime/rebuild-errors.js.map +1 -0
- package/dist/runtime/run.d.ts +10 -0
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +13 -1
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/runtime.d.ts +99 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +321 -127
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/update-apply-deps.d.ts +43 -0
- package/dist/runtime/update-apply-deps.d.ts.map +1 -0
- package/dist/runtime/update-apply-deps.js +62 -0
- package/dist/runtime/update-apply-deps.js.map +1 -0
- package/dist/runtime/update-handler.d.ts +158 -0
- package/dist/runtime/update-handler.d.ts.map +1 -0
- package/dist/runtime/update-handler.js +252 -0
- package/dist/runtime/update-handler.js.map +1 -0
- package/dist/runtime/update-plan.d.ts +60 -0
- package/dist/runtime/update-plan.d.ts.map +1 -0
- package/dist/runtime/update-plan.js +164 -0
- package/dist/runtime/update-plan.js.map +1 -0
- package/dist/runtime/update-register.d.ts +72 -0
- package/dist/runtime/update-register.d.ts.map +1 -0
- package/dist/runtime/update-register.js +146 -0
- package/dist/runtime/update-register.js.map +1 -0
- package/dist/runtime/update-report.d.ts +93 -0
- package/dist/runtime/update-report.d.ts.map +1 -0
- package/dist/runtime/update-report.js +133 -0
- package/dist/runtime/update-report.js.map +1 -0
- package/dist/skills-manager/manifest.d.ts.map +1 -1
- package/dist/skills-manager/manifest.js +1 -0
- package/dist/skills-manager/manifest.js.map +1 -1
- package/dist/skills-manager/skills-manifest.json +1 -0
- package/dist/utils/event-catalog.d.ts +26 -0
- package/dist/utils/event-catalog.d.ts.map +1 -1
- package/dist/utils/event-catalog.js +1 -0
- package/dist/utils/event-catalog.js.map +1 -1
- package/dist/widgets/errors.d.ts +3 -15
- package/dist/widgets/errors.d.ts.map +1 -1
- package/dist/widgets/errors.js +3 -20
- package/dist/widgets/errors.js.map +1 -1
- package/dist/widgets/index.d.ts +3 -10
- package/dist/widgets/index.d.ts.map +1 -1
- package/dist/widgets/index.js +3 -6
- package/dist/widgets/index.js.map +1 -1
- package/dist/widgets/registry.d.ts.map +1 -1
- package/dist/widgets/registry.js +10 -3
- package/dist/widgets/registry.js.map +1 -1
- package/dist/widgets/tool.d.ts +6 -9
- package/dist/widgets/tool.d.ts.map +1 -1
- package/dist/widgets/tool.js +37 -147
- package/dist/widgets/tool.js.map +1 -1
- package/dist/widgets/types.d.ts +20 -58
- package/dist/widgets/types.d.ts.map +1 -1
- package/dist/widgets/types.js +4 -4
- package/dist/widgets/widgets/fund-user-wallet.d.ts +4 -5
- package/dist/widgets/widgets/fund-user-wallet.d.ts.map +1 -1
- package/dist/widgets/widgets/fund-user-wallet.js +27 -67
- package/dist/widgets/widgets/fund-user-wallet.js.map +1 -1
- package/openclaw.plugin.json +1 -4
- package/package.json +2 -3
- package/dist/widgets/strategy-lookup.d.ts +0 -39
- package/dist/widgets/strategy-lookup.d.ts.map +0 -1
- package/dist/widgets/strategy-lookup.js +0 -70
- package/dist/widgets/strategy-lookup.js.map +0 -1
- package/dist/widgets/widgets/fund-strategy-wallet.d.ts +0 -13
- package/dist/widgets/widgets/fund-strategy-wallet.d.ts.map +0 -1
- package/dist/widgets/widgets/fund-strategy-wallet.js +0 -139
- package/dist/widgets/widgets/fund-strategy-wallet.js.map +0 -1
- package/skills/senpi-widgets/SKILL.md +0 -167
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import type { ActionDecision, ActionType, DecisionMode, HookEvent, LlmDecision } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Renders a machine signal type as plain-language attribution (notifications
|
|
4
|
+
* 2.10, Jason 2026-08-13): `EXTERNAL_STARLING_SCANNER` must never reach a
|
|
5
|
+
* user's card — but the user should still learn WHICH of their scanners acted.
|
|
6
|
+
*
|
|
7
|
+
* The EXTERNAL_* token space is unbounded — it is minted from the user's own
|
|
8
|
+
* scanner id (`EXTERNAL_${id.toUpperCase()}`, external-scanner.ts) — so this
|
|
9
|
+
* must be a derivation, not a lookup: strip the prefix, de-snake, lowercase,
|
|
10
|
+
* drop trailing "scanner"/"signals" noise words, and phrase it as
|
|
11
|
+
* "Signal from your <name> scanner". Internal types come from the closed map
|
|
12
|
+
* above; an unlisted internal type de-snakes to "<words> signal" so a new
|
|
13
|
+
* scanner added without a map entry still renders as words, never as a token.
|
|
14
|
+
*/
|
|
15
|
+
export declare function friendlySignalAttribution(signalType: string): string;
|
|
2
16
|
export interface DecisionRequest {
|
|
3
17
|
prompt?: string;
|
|
4
18
|
context: Record<string, unknown>;
|
|
@@ -23,6 +37,8 @@ export declare class LlmDecisionStrategy implements DecisionStrategy {
|
|
|
23
37
|
}
|
|
24
38
|
export declare class RuleDecisionStrategy implements DecisionStrategy {
|
|
25
39
|
readonly mode: DecisionMode;
|
|
40
|
+
private warnedMissingReason;
|
|
41
|
+
private resolveReason;
|
|
26
42
|
decide(request: DecisionRequest): Promise<ActionDecision>;
|
|
27
43
|
}
|
|
28
44
|
export declare class NoDecisionStrategy implements DecisionStrategy {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-engine.d.ts","sourceRoot":"","sources":["../../src/actions/decision-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EAGZ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"decision-engine.d.ts","sourceRoot":"","sources":["../../src/actions/decision-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EAGZ,MAAM,YAAY,CAAC;AA4FpB;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAuBpE;AAID,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC3D;AAID,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAA6C;IAE/D,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAIpC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;CAOpF;AAID,qBAAa,mBAAoB,YAAW,gBAAgB;IAG9C,OAAO,CAAC,WAAW;IAF/B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAS;gBAEhB,WAAW,EAAE,WAAW;IAEtC,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;CAoDhE;AAID,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAU;IAIrC,OAAO,CAAC,mBAAmB,CAAqB;IAEhD,OAAO,CAAC,aAAa;IAoBf,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;CA0ChE;AAID,qBAAa,kBAAmB,YAAW,gBAAgB;IACzD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAU;IAE/B,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;CAShE"}
|
|
@@ -1,4 +1,122 @@
|
|
|
1
1
|
import { withSpan } from '../telemetry/tracing.js';
|
|
2
|
+
import { createLogger } from '../utils/logger.js';
|
|
3
|
+
const logger = createLogger('[actions][decision-engine]');
|
|
4
|
+
// The resolved per-signal reason lands on a user-facing card via
|
|
5
|
+
// createPosition({ reason }); nothing downstream bounds its length.
|
|
6
|
+
const MAX_REASON_LENGTH = 300;
|
|
7
|
+
const REASON_ELLIPSIS = '…';
|
|
8
|
+
function hardCutReason(text) {
|
|
9
|
+
let cut = text.slice(0, MAX_REASON_LENGTH - REASON_ELLIPSIS.length);
|
|
10
|
+
// Never end on a lone high surrogate (a split emoji renders as junk).
|
|
11
|
+
const last = cut.charCodeAt(cut.length - 1);
|
|
12
|
+
if (last >= 0xd800 && last <= 0xdbff) {
|
|
13
|
+
cut = cut.slice(0, -1);
|
|
14
|
+
}
|
|
15
|
+
return cut + REASON_ELLIPSIS;
|
|
16
|
+
}
|
|
17
|
+
function capReason(text) {
|
|
18
|
+
return text.length <= MAX_REASON_LENGTH ? text : hardCutReason(text);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Joins factor tokens keeping a greedy in-order prefix of whole tokens within
|
|
22
|
+
* the cap — dropping trailing tokens beats cutting one mid-way.
|
|
23
|
+
*/
|
|
24
|
+
function joinReasonTokens(tokens) {
|
|
25
|
+
let out = '';
|
|
26
|
+
for (const token of tokens) {
|
|
27
|
+
const candidate = out ? `${out}, ${token}` : token;
|
|
28
|
+
if (candidate.length + REASON_ELLIPSIS.length > MAX_REASON_LENGTH) {
|
|
29
|
+
return out ? out + REASON_ELLIPSIS : hardCutReason(token);
|
|
30
|
+
}
|
|
31
|
+
out = candidate;
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolves the human-readable trade rationale from signal metadata, or
|
|
37
|
+
* undefined when nothing usable was sent.
|
|
38
|
+
*
|
|
39
|
+
* `reason` (singular, non-empty string) is the internal single-reason contract
|
|
40
|
+
* (e.g. liquidation-watchdog) and wins; anything else falls through to
|
|
41
|
+
* `reasons` — the external producers' contract: an array of factor tokens
|
|
42
|
+
* whose members are untrusted (the wire schema only checks Array.isArray), so
|
|
43
|
+
* only non-empty trimmed strings are kept. A bare non-empty string under
|
|
44
|
+
* `reasons` is accepted too.
|
|
45
|
+
*/
|
|
46
|
+
function resolveSignalReason(meta) {
|
|
47
|
+
const single = meta?.reason;
|
|
48
|
+
if (typeof single === 'string' && single.trim().length > 0) {
|
|
49
|
+
return capReason(single.trim());
|
|
50
|
+
}
|
|
51
|
+
const many = meta?.reasons;
|
|
52
|
+
if (typeof many === 'string' && many.trim().length > 0) {
|
|
53
|
+
return capReason(many.trim());
|
|
54
|
+
}
|
|
55
|
+
if (Array.isArray(many)) {
|
|
56
|
+
const tokens = many
|
|
57
|
+
.filter((member) => typeof member === 'string')
|
|
58
|
+
.map((member) => member.trim())
|
|
59
|
+
.filter((member) => member.length > 0);
|
|
60
|
+
if (tokens.length > 0) {
|
|
61
|
+
return joinReasonTokens(tokens);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Internal signal types with product-approved wording. A closed set — every
|
|
68
|
+
* literal in src/scanners that can reach a rule decision. Anything unlisted
|
|
69
|
+
* (including every EXTERNAL_*) goes through the generic derivation below.
|
|
70
|
+
*/
|
|
71
|
+
const INTERNAL_SIGNAL_ATTRIBUTION = {
|
|
72
|
+
MOMENTUM: 'Momentum signal',
|
|
73
|
+
MOMENTUM_BREAKOUT: 'Momentum breakout signal',
|
|
74
|
+
EMERGING_MOVER: 'Emerging mover signal',
|
|
75
|
+
FUNDING_ARB: 'Funding arbitrage signal',
|
|
76
|
+
OI_TRACKER: 'Open-interest signal',
|
|
77
|
+
MARKET_REGIME: 'Market regime signal',
|
|
78
|
+
OPPORTUNITY: 'Opportunity signal',
|
|
79
|
+
PRESCREENER: 'Prescreener signal',
|
|
80
|
+
};
|
|
81
|
+
/** Trailing tokens that add nothing once the phrase already says "scanner". */
|
|
82
|
+
const ATTRIBUTION_NOISE_WORDS = new Set(['scanner', 'scanners', 'signal', 'signals']);
|
|
83
|
+
/**
|
|
84
|
+
* Renders a machine signal type as plain-language attribution (notifications
|
|
85
|
+
* 2.10, Jason 2026-08-13): `EXTERNAL_STARLING_SCANNER` must never reach a
|
|
86
|
+
* user's card — but the user should still learn WHICH of their scanners acted.
|
|
87
|
+
*
|
|
88
|
+
* The EXTERNAL_* token space is unbounded — it is minted from the user's own
|
|
89
|
+
* scanner id (`EXTERNAL_${id.toUpperCase()}`, external-scanner.ts) — so this
|
|
90
|
+
* must be a derivation, not a lookup: strip the prefix, de-snake, lowercase,
|
|
91
|
+
* drop trailing "scanner"/"signals" noise words, and phrase it as
|
|
92
|
+
* "Signal from your <name> scanner". Internal types come from the closed map
|
|
93
|
+
* above; an unlisted internal type de-snakes to "<words> signal" so a new
|
|
94
|
+
* scanner added without a map entry still renders as words, never as a token.
|
|
95
|
+
*/
|
|
96
|
+
export function friendlySignalAttribution(signalType) {
|
|
97
|
+
const mapped = INTERNAL_SIGNAL_ATTRIBUTION[signalType];
|
|
98
|
+
if (mapped !== undefined) {
|
|
99
|
+
return mapped;
|
|
100
|
+
}
|
|
101
|
+
const isExternal = signalType.startsWith('EXTERNAL_');
|
|
102
|
+
const body = isExternal ? signalType.slice('EXTERNAL_'.length) : signalType;
|
|
103
|
+
const words = body
|
|
104
|
+
.split(/[^a-zA-Z0-9]+/)
|
|
105
|
+
.filter((w) => w.length > 0)
|
|
106
|
+
.map((w) => w.toLowerCase());
|
|
107
|
+
while (words.length > 0 && ATTRIBUTION_NOISE_WORDS.has(words[words.length - 1])) {
|
|
108
|
+
words.pop();
|
|
109
|
+
}
|
|
110
|
+
if (isExternal) {
|
|
111
|
+
// "Signal from your scanner" (nameless) still beats any token.
|
|
112
|
+
return words.length > 0 ? `Signal from your ${words.join(' ')} scanner` : 'Signal from your scanner';
|
|
113
|
+
}
|
|
114
|
+
if (words.length === 0) {
|
|
115
|
+
return 'Automated signal';
|
|
116
|
+
}
|
|
117
|
+
const phrase = words.join(' ');
|
|
118
|
+
return `${phrase.charAt(0).toUpperCase()}${phrase.slice(1)} signal`;
|
|
119
|
+
}
|
|
2
120
|
// ─── Decision Engine ────────────────────────────────────────────────────────
|
|
3
121
|
export class DecisionEngine {
|
|
4
122
|
strategies = new Map();
|
|
@@ -69,6 +187,24 @@ export class LlmDecisionStrategy {
|
|
|
69
187
|
// ─── Rule Decision Strategy ─────────────────────────────────────────────────
|
|
70
188
|
export class RuleDecisionStrategy {
|
|
71
189
|
mode = 'rule';
|
|
190
|
+
// One WARN per signalType: this sits in the per-signal decision path and
|
|
191
|
+
// would otherwise fire on every tick of a reason-less producer.
|
|
192
|
+
warnedMissingReason = new Set();
|
|
193
|
+
resolveReason(signal) {
|
|
194
|
+
const resolved = resolveSignalReason(signal.meta);
|
|
195
|
+
if (resolved !== undefined) {
|
|
196
|
+
return resolved;
|
|
197
|
+
}
|
|
198
|
+
if (!this.warnedMissingReason.has(signal.signalType)) {
|
|
199
|
+
this.warnedMissingReason.add(signal.signalType);
|
|
200
|
+
logger.warn('signal carried no usable meta.reason/meta.reasons; user-facing rationale degrades to a generic scanner attribution', undefined, { signalType: signal.signalType, scannerId: signal.scannerId, asset: signal.asset });
|
|
201
|
+
}
|
|
202
|
+
// Never the raw token (notifications 2.10): this string IS the Why line on
|
|
203
|
+
// the user's open card, and `EXTERNAL_STARLING_SCANNER` is debug-speak the
|
|
204
|
+
// master spec (§2.4) forbids. The WARN above keeps the machine token
|
|
205
|
+
// observable; the card gets attribution a human can read.
|
|
206
|
+
return friendlySignalAttribution(signal.signalType);
|
|
207
|
+
}
|
|
72
208
|
async decide(request) {
|
|
73
209
|
const scanResult = request.event?.data?.scanResult;
|
|
74
210
|
const signals = (scanResult?.signals ?? []).filter((s) => s.asset && s.asset.length > 0);
|
|
@@ -96,7 +232,7 @@ export class RuleDecisionStrategy {
|
|
|
96
232
|
direction: s.direction,
|
|
97
233
|
score: s.score,
|
|
98
234
|
signalType: s.signalType,
|
|
99
|
-
reason:
|
|
235
|
+
reason: this.resolveReason(s),
|
|
100
236
|
dex: s.meta?.dex,
|
|
101
237
|
// Canonical per-signal sizing/leverage flow to the open action.
|
|
102
238
|
...(s.marginPct != null ? { marginPct: s.marginPct } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-engine.js","sourceRoot":"","sources":["../../src/actions/decision-engine.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"decision-engine.js","sourceRoot":"","sources":["../../src/actions/decision-engine.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;AAgdH,eAAO,MAAM,eAAe,QAyUpB,CAAC;AAIT,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"}
|
|
@@ -25,6 +25,7 @@ Quick commands:
|
|
|
25
25
|
senpi guide dsl DSL exit: phases, lock modes, tiers, time-based cuts
|
|
26
26
|
senpi validate <pkg> Prove a strategy runs before funding it (static → import → live)
|
|
27
27
|
senpi deploy -p <pkg> Take a proven package live: create+fund → install → observe it running
|
|
28
|
+
senpi update <pkg> Change a LIVE strategy's recipe in place — plans by default, --apply commits
|
|
28
29
|
senpi scanner Per-scanner health: runs, errors, liveness, "(no signals yet)" flag
|
|
29
30
|
senpi events Local domain-event log — the trade narrative
|
|
30
31
|
senpi explain <asset> Stitch one asset's position lifecycle from the event log
|
|
@@ -561,6 +562,38 @@ senpi runtime — Manage runtimes
|
|
|
561
562
|
with dsl null means a DSL exit is CONFIGURED with no ladder
|
|
562
563
|
running — only a non-null dsl proves a stop is enforced
|
|
563
564
|
|
|
565
|
+
senpi update — Change a running strategy's recipe in place
|
|
566
|
+
openclaw senpi update <pkg> # PLAN: what would change, and what it would leave alone
|
|
567
|
+
openclaw senpi update <pkg> --apply # commit it
|
|
568
|
+
--id <runtime_id> Which runtime; required when more than one is installed
|
|
569
|
+
--address <wallet> Alternative to --id
|
|
570
|
+
--content <yaml> Recipe text instead of a path (--dir sets the scanner root)
|
|
571
|
+
--json The report as one JSON document on stdout
|
|
572
|
+
--apply Actually change it. Without this the verb only plans.
|
|
573
|
+
--code-only Assert ONLY scanner code changed; refuses if the recipe
|
|
574
|
+
changed too. An apply reloads scanner code either way —
|
|
575
|
+
this is the guard that the edit you are shipping is the
|
|
576
|
+
edit you meant to.
|
|
577
|
+
|
|
578
|
+
It plans by default and always will — there is no --dry-run whose default flips later. Keeps
|
|
579
|
+
every piece of state a delete-and-recreate would destroy: DSL position files, scanner stores,
|
|
580
|
+
action history. That is the whole reason to prefer it over tearing a runtime down and standing a
|
|
581
|
+
fresh one up on a funded wallet, which abandons the stops the strategy has already promised.
|
|
582
|
+
|
|
583
|
+
Forward-only. A new exit preset governs NEW entries; every open position keeps a snapshot of the
|
|
584
|
+
preset it was opened under, and no update reaches it. To move an open position onto new exits,
|
|
585
|
+
close and re-open it. The plan says so, and names the positions.
|
|
586
|
+
|
|
587
|
+
Refused outright (nothing changes): a changed strategy.wallet (a different deployment — the old
|
|
588
|
+
wallet's positions would be left with nothing managing them), a renamed or reordered scanner
|
|
589
|
+
(external scanner state is keyed by NAME and INDEX together, so both matter; APPENDING at
|
|
590
|
+
the end is fine), and a changed action_type under a stable name. An --apply also requires a
|
|
591
|
+
passing proof, exactly as deploy does: run 'senpi validate <pkg>' first.
|
|
592
|
+
|
|
593
|
+
Exit codes: 0 planned/applied · 1 FAILED DURING APPLY · 2 refused, nothing changed · 3 bad
|
|
594
|
+
invocation. 1 and 2 are not interchangeable — 2 means the runtime was never touched, 1 means it
|
|
595
|
+
was and may not be where you left it. Read the message before retrying.
|
|
596
|
+
|
|
564
597
|
senpi validate — Prove a strategy can execute BEFORE it is funded
|
|
565
598
|
validate [target] Package dir, recipe file, or scanner dir (default: cwd)
|
|
566
599
|
--stage <stage> static | import | live (default live; each includes the prior)
|
|
@@ -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;qBACtB,OAAO
|
|
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;qBACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;CAyB3B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoIrB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CpB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0FhB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+GnB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCpB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyU9B,CAAC,IAAI,EAAE,CAAC;AAYT;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAuB,EACvB,OAAe;IAEf,MAAM,KAAK,GAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAsB;SACvD,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAE3D,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,UAAU,CAAsB;SAC5C,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,SAAS,CAAsB;SAC3C,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,KAAK,CAAsB;SACvC,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,UAAU,CAAsB;SAC5C,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAsB;SAC1C,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,SAAS,CAAsB;SAC3C,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,OAAO,KAAK,aAAa,IAAI,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -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;AAoBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAe/D;;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,CAmyCN;AAwaD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAWvE;AAmDD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CASjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAW3E;AA8HD,kEAAkE;AAClE,UAAU,gBAAgB;IACxB,uGAAuG;IACvG,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GAAG;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,EAC1C,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAC1B,gBAAgB,CAAC;IACpB,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"}
|
|
@@ -14,6 +14,7 @@ import { registerSenpiConfigCommands } from "./senpi-config-commands.js";
|
|
|
14
14
|
import { exitCodeForDeploy, renderDeploySnapshot } from "./deploy-render.js";
|
|
15
15
|
import { isRefusalMessage } from "../deploy/taxonomy.js";
|
|
16
16
|
import { registerValidateCommand } from "./validate-command.js";
|
|
17
|
+
import { registerUpdateCommand } from "./update-command.js";
|
|
17
18
|
import { VERSION } from "../version.js";
|
|
18
19
|
/**
|
|
19
20
|
* Write a --json response document straight to the stdout stream. Never console.log here:
|
|
@@ -39,6 +40,17 @@ export function registerSenpiCli(program) {
|
|
|
39
40
|
});
|
|
40
41
|
registerSenpiConfigCommands(senpi);
|
|
41
42
|
registerValidateCommand(senpi);
|
|
43
|
+
registerUpdateCommand(senpi, {
|
|
44
|
+
callGateway: (method, params) => callGatewayJson(method, params) ?? undefined,
|
|
45
|
+
resolvePath: (p) => path.resolve(process.cwd(), p),
|
|
46
|
+
dirname: (p) => path.dirname(p),
|
|
47
|
+
readFile: (p) => readFileSync(p, "utf8"),
|
|
48
|
+
out: (line) => console.log(line),
|
|
49
|
+
err: (line) => console.error(line),
|
|
50
|
+
setExitCode: (code) => {
|
|
51
|
+
process.exitCode = code;
|
|
52
|
+
},
|
|
53
|
+
});
|
|
42
54
|
registerDeployCommands(senpi);
|
|
43
55
|
const runtime = senpi.command("runtime");
|
|
44
56
|
runtime.description("Manage runtimes");
|