@senpi/runtime 3.0.80 → 3.0.82
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/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/skills-manager/manifest.d.ts.map +1 -1
- package/dist/skills-manager/manifest.js +1 -0
- package/dist/skills-manager/manifest.js.map +1 -1
- package/dist/skills-manager/skills-manifest.json +1 -0
- package/dist/widgets/errors.d.ts +11 -0
- package/dist/widgets/errors.d.ts.map +1 -0
- package/dist/widgets/errors.js +16 -0
- package/dist/widgets/errors.js.map +1 -0
- package/dist/widgets/index.d.ts +32 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +33 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/registry.d.ts +24 -0
- package/dist/widgets/registry.d.ts.map +1 -0
- package/dist/widgets/registry.js +33 -0
- package/dist/widgets/registry.js.map +1 -0
- package/dist/widgets/tool.d.ts +48 -0
- package/dist/widgets/tool.d.ts.map +1 -0
- package/dist/widgets/tool.js +140 -0
- package/dist/widgets/tool.js.map +1 -0
- package/dist/widgets/types.d.ts +53 -0
- package/dist/widgets/types.d.ts.map +1 -0
- package/dist/widgets/types.js +10 -0
- package/dist/widgets/types.js.map +1 -0
- package/dist/widgets/widgets/fund-user-wallet.d.ts +12 -0
- package/dist/widgets/widgets/fund-user-wallet.d.ts.map +1 -0
- package/dist/widgets/widgets/fund-user-wallet.js +38 -0
- package/dist/widgets/widgets/fund-user-wallet.js.map +1 -0
- package/openclaw.plugin.json +13 -1
- package/package.json +1 -1
|
@@ -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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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -57,6 +57,13 @@ export interface SenpiRuntimePluginConfig {
|
|
|
57
57
|
*/
|
|
58
58
|
toolApprovals?: ToolApprovalsMode;
|
|
59
59
|
autoUpdate?: Record<string, unknown>;
|
|
60
|
+
/**
|
|
61
|
+
* Per-widget-type on/off switch for the `show_widget` agent tool, keyed by
|
|
62
|
+
* `widget_type` (see src/widgets/registry.ts). Absent or `true` enables a
|
|
63
|
+
* widget; only an explicit `false` disables it. With every type disabled the
|
|
64
|
+
* tool is not registered at all.
|
|
65
|
+
*/
|
|
66
|
+
widgets?: Record<string, boolean>;
|
|
60
67
|
skillsManager?: {
|
|
61
68
|
enabled?: boolean;
|
|
62
69
|
/**
|
|
@@ -157,6 +164,12 @@ interface PluginApi {
|
|
|
157
164
|
registerGatewayMethod(name: string, handler: (ctx: GatewayRequestCtx) => void | Promise<void>, opts?: {
|
|
158
165
|
scope?: OperatorScope;
|
|
159
166
|
}): void;
|
|
167
|
+
registerTool(tool: (ctx: {
|
|
168
|
+
sessionId?: string;
|
|
169
|
+
}) => unknown, opts?: {
|
|
170
|
+
names?: string[];
|
|
171
|
+
optional?: boolean;
|
|
172
|
+
}): void;
|
|
160
173
|
registerReload?: (registration: {
|
|
161
174
|
restartPrefixes?: string[];
|
|
162
175
|
hotPrefixes?: string[];
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAwCH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAmB3D,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -46,6 +46,7 @@ import { getLogLevel, getLogLevelSource, parseLogLevel, setLogLevel, } from "./u
|
|
|
46
46
|
import { ExternalScannerIngestError, } from "./scanners/external-scanner-receiver.js";
|
|
47
47
|
import { createLogger } from "./utils/logger.js";
|
|
48
48
|
import { registerToolApprovalGate, resolveToolApprovalsMode, } from "./approvals/tool-approval-gate.js";
|
|
49
|
+
import { registerShowWidgetTool } from "./widgets/index.js";
|
|
49
50
|
import { EVENT_NAME, SENPI_ERROR_CODE, eventAttrs, scannerUnwiredErrorCode } from "./utils/event-catalog.js";
|
|
50
51
|
import { emitEvent } from "./actions/event-derivation.js";
|
|
51
52
|
import { buildRuntimeCreatedEvent, buildRuntimeDeletedEvent } from "./runtime/lifecycle-events.js";
|
|
@@ -284,6 +285,22 @@ const senpiRuntimePlugin = {
|
|
|
284
285
|
err: err instanceof Error ? err.message : String(err),
|
|
285
286
|
});
|
|
286
287
|
}
|
|
288
|
+
// show_widget — the agent renders a native card in the Senpi chat clients
|
|
289
|
+
// instead of describing it in text. One tool, one `widget_type` enum
|
|
290
|
+
// generated from src/widgets/registry.ts; the client reads the tool call
|
|
291
|
+
// off the gateway websocket and renders its own component.
|
|
292
|
+
try {
|
|
293
|
+
registerShowWidgetTool({
|
|
294
|
+
api,
|
|
295
|
+
widgetsConfig: config.widgets,
|
|
296
|
+
logger: pluginLogger,
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
pluginLogger.warn("[senpi-runtime] failed to register show_widget tool", {
|
|
301
|
+
err: err instanceof Error ? err.message : String(err),
|
|
302
|
+
});
|
|
303
|
+
}
|
|
287
304
|
const runtimeHandles = new Map();
|
|
288
305
|
let apiHandle;
|
|
289
306
|
// Supervised scanner state — module-scoped so stop() can reach them.
|