@senpi/runtime 3.0.180 → 3.0.182
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/llm-decision/openclaw-llm-decision.d.ts +8 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.js +56 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -1
- package/dist/approvals/approval-store.d.ts +37 -7
- package/dist/approvals/approval-store.d.ts.map +1 -1
- package/dist/approvals/approval-store.js +127 -23
- package/dist/approvals/approval-store.js.map +1 -1
- package/dist/approvals/telemetry.d.ts +27 -3
- package/dist/approvals/telemetry.d.ts.map +1 -1
- package/dist/approvals/telemetry.js +8 -4
- package/dist/approvals/telemetry.js.map +1 -1
- package/dist/approvals/tool-approval-gate.d.ts +79 -0
- package/dist/approvals/tool-approval-gate.d.ts.map +1 -1
- package/dist/approvals/tool-approval-gate.js +184 -15
- package/dist/approvals/tool-approval-gate.js.map +1 -1
- package/dist/approvals/turn-context.d.ts +271 -0
- package/dist/approvals/turn-context.d.ts.map +1 -0
- package/dist/approvals/turn-context.js +551 -0
- package/dist/approvals/turn-context.js.map +1 -0
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +17 -3
- 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 +71 -4
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/deploy/job.d.ts +32 -0
- package/dist/deploy/job.d.ts.map +1 -1
- package/dist/deploy/job.js +72 -7
- package/dist/deploy/job.js.map +1 -1
- package/dist/deploy/register.d.ts +11 -0
- package/dist/deploy/register.d.ts.map +1 -1
- package/dist/deploy/register.js +84 -2
- package/dist/deploy/register.js.map +1 -1
- package/dist/host/openclaw-host.d.ts +138 -0
- package/dist/host/openclaw-host.d.ts.map +1 -0
- package/dist/host/openclaw-host.js +177 -0
- package/dist/host/openclaw-host.js.map +1 -0
- package/dist/index.d.ts +46 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +220 -12
- package/dist/index.js.map +1 -1
- package/dist/runtime/auto-update/coordinator.d.ts +203 -0
- package/dist/runtime/auto-update/coordinator.d.ts.map +1 -1
- package/dist/runtime/auto-update/coordinator.js +621 -12
- package/dist/runtime/auto-update/coordinator.js.map +1 -1
- package/dist/runtime/auto-update/gateway-restart.d.ts +60 -1
- package/dist/runtime/auto-update/gateway-restart.d.ts.map +1 -1
- package/dist/runtime/auto-update/gateway-restart.js +95 -21
- package/dist/runtime/auto-update/gateway-restart.js.map +1 -1
- package/dist/runtime/auto-update/idle-gate.d.ts +139 -0
- package/dist/runtime/auto-update/idle-gate.d.ts.map +1 -0
- package/dist/runtime/auto-update/idle-gate.js +217 -0
- package/dist/runtime/auto-update/idle-gate.js.map +1 -0
- package/dist/runtime/auto-update/install-results.d.ts +130 -0
- package/dist/runtime/auto-update/install-results.d.ts.map +1 -0
- package/dist/runtime/auto-update/install-results.js +264 -0
- package/dist/runtime/auto-update/install-results.js.map +1 -0
- package/dist/runtime/auto-update/money-call-tracker.d.ts +36 -0
- package/dist/runtime/auto-update/money-call-tracker.d.ts.map +1 -0
- package/dist/runtime/auto-update/money-call-tracker.js +129 -0
- package/dist/runtime/auto-update/money-call-tracker.js.map +1 -0
- package/dist/runtime/auto-update/register-idle-gate.d.ts +70 -0
- package/dist/runtime/auto-update/register-idle-gate.d.ts.map +1 -0
- package/dist/runtime/auto-update/register-idle-gate.js +123 -0
- package/dist/runtime/auto-update/register-idle-gate.js.map +1 -0
- package/dist/runtime/auto-update/run-update-command.d.ts +13 -0
- package/dist/runtime/auto-update/run-update-command.d.ts.map +1 -1
- package/dist/runtime/auto-update/run-update-command.js +18 -0
- package/dist/runtime/auto-update/run-update-command.js.map +1 -1
- package/dist/runtime/auto-update/state-store.d.ts +14 -1
- package/dist/runtime/auto-update/state-store.d.ts.map +1 -1
- package/dist/runtime/auto-update/state-store.js +37 -3
- package/dist/runtime/auto-update/state-store.js.map +1 -1
- package/dist/runtime/auto-update/types.d.ts +51 -0
- package/dist/runtime/auto-update/types.d.ts.map +1 -1
- package/dist/runtime/auto-update/types.js.map +1 -1
- package/dist/runtime/auto-update/update-marker.d.ts +95 -0
- package/dist/runtime/auto-update/update-marker.d.ts.map +1 -0
- package/dist/runtime/auto-update/update-marker.js +185 -0
- package/dist/runtime/auto-update/update-marker.js.map +1 -0
- package/dist/runtime/auto-update/update-schedule.d.ts +57 -0
- package/dist/runtime/auto-update/update-schedule.d.ts.map +1 -0
- package/dist/runtime/auto-update/update-schedule.js +75 -0
- package/dist/runtime/auto-update/update-schedule.js.map +1 -0
- package/dist/runtime/decision-errors.d.ts +7 -0
- package/dist/runtime/decision-errors.d.ts.map +1 -1
- package/dist/runtime/decision-errors.js +15 -0
- package/dist/runtime/decision-errors.js.map +1 -1
- package/dist/senpi/client.d.ts +25 -0
- package/dist/senpi/client.d.ts.map +1 -1
- package/dist/senpi/client.js +56 -0
- package/dist/senpi/client.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +14 -0
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +24 -0
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/telemetry/otel-sdk.d.ts +12 -0
- package/dist/telemetry/otel-sdk.d.ts.map +1 -1
- package/dist/telemetry/otel-sdk.js +47 -1
- package/dist/telemetry/otel-sdk.js.map +1 -1
- package/dist/telemetry/spans/span-hooks.d.ts +18 -1
- package/dist/telemetry/spans/span-hooks.d.ts.map +1 -1
- package/dist/telemetry/spans/span-hooks.js +306 -96
- package/dist/telemetry/spans/span-hooks.js.map +1 -1
- package/dist/telemetry/tool-plane.d.ts +2 -0
- package/dist/telemetry/tool-plane.d.ts.map +1 -1
- package/dist/telemetry/tool-plane.js +1 -0
- package/dist/telemetry/tool-plane.js.map +1 -1
- package/dist/tool-surface/crib-cache.d.ts +21 -0
- package/dist/tool-surface/crib-cache.d.ts.map +1 -0
- package/dist/tool-surface/crib-cache.js +54 -0
- package/dist/tool-surface/crib-cache.js.map +1 -0
- package/dist/tool-surface/crib-hook.d.ts +78 -0
- package/dist/tool-surface/crib-hook.d.ts.map +1 -0
- package/dist/tool-surface/crib-hook.js +217 -0
- package/dist/tool-surface/crib-hook.js.map +1 -0
- package/dist/tool-surface/crib-sheet.d.ts +56 -0
- package/dist/tool-surface/crib-sheet.d.ts.map +1 -0
- package/dist/tool-surface/crib-sheet.js +129 -0
- package/dist/tool-surface/crib-sheet.js.map +1 -0
- package/dist/tool-surface/mcp-tool-source.d.ts +64 -0
- package/dist/tool-surface/mcp-tool-source.d.ts.map +1 -0
- package/dist/tool-surface/mcp-tool-source.js +189 -0
- package/dist/tool-surface/mcp-tool-source.js.map +1 -0
- package/dist/utils/event-catalog.d.ts +117 -5
- package/dist/utils/event-catalog.d.ts.map +1 -1
- package/dist/utils/event-catalog.js +19 -0
- package/dist/utils/event-catalog.js.map +1 -1
- package/dist/widgets/tool.d.ts +9 -0
- package/dist/widgets/tool.d.ts.map +1 -1
- package/dist/widgets/tool.js +1 -0
- package/dist/widgets/tool.js.map +1 -1
- package/openclaw.plugin.json +11 -1
- package/package.json +5 -2
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/** Marker file name under `<OPENCLAW_STATE_DIR>/senpi-state/`. */
|
|
2
|
+
export declare const UPDATE_MARKER_FILE = "runtime-update.json";
|
|
3
|
+
/**
|
|
4
|
+
* The runtime-update marker schema, version 1.
|
|
5
|
+
*
|
|
6
|
+
* - Location: `$OPENCLAW_STATE_DIR/senpi-state/runtime-update.json`
|
|
7
|
+
* (`/data/.openclaw/senpi-state/runtime-update.json` on the senpi-agent image).
|
|
8
|
+
* - Encoding: one UTF-8 JSON object, written atomically (temp file in the same
|
|
9
|
+
* directory, then rename).
|
|
10
|
+
* - Fields, all strings:
|
|
11
|
+
* - `spec` (required): `<npm name>@<exact version>`. The name is one of
|
|
12
|
+
* `allowedNames` (the runtime's two npm names) and matches `nameRe`
|
|
13
|
+
* (optional `@scope/`, then a name; each part starts with a letter or
|
|
14
|
+
* digit, so it can never read as a CLI option); the version equals
|
|
15
|
+
* `targetVersion`. Never a bare name, a dist-tag or a range.
|
|
16
|
+
* - `targetVersion` (required): exact semver, matching `versionRe`.
|
|
17
|
+
* - `requestedAt` (required): RFC 3339 UTC timestamp (`Z` suffix), with or
|
|
18
|
+
* without fractional seconds: `2026-10-24T03:10:00Z` and
|
|
19
|
+
* `2026-10-24T03:10:00.000Z` are both valid.
|
|
20
|
+
* - `schemaVersion` (optional number): absent means 1. A reader refuses any
|
|
21
|
+
* other value. A writer of version 1 may omit it; a breaking change bumps
|
|
22
|
+
* it and must be rolled out to readers first.
|
|
23
|
+
* - Readers ignore fields they do not know. A marker that fails validation
|
|
24
|
+
* is refused (never installed), and the wrapper deletes it.
|
|
25
|
+
*/
|
|
26
|
+
export declare const RUNTIME_UPDATE_MARKER_SCHEMA: {
|
|
27
|
+
readonly schemaVersion: 1;
|
|
28
|
+
readonly path: "senpi-state/runtime-update.json";
|
|
29
|
+
readonly required: readonly ["spec", "targetVersion", "requestedAt"];
|
|
30
|
+
readonly optional: readonly ["schemaVersion"];
|
|
31
|
+
readonly allowedNames: readonly ["@senpi-ai/runtime", "@senpi/runtime"];
|
|
32
|
+
readonly nameRe: RegExp;
|
|
33
|
+
readonly versionRe: RegExp;
|
|
34
|
+
readonly requestedAtRe: RegExp;
|
|
35
|
+
};
|
|
36
|
+
/** The marker's content (schema version 1; see {@link RUNTIME_UPDATE_MARKER_SCHEMA}). */
|
|
37
|
+
export interface RuntimeUpdateMarker {
|
|
38
|
+
/** `<npm name>@<exact version>`, for example `@senpi-ai/runtime@3.0.180`. */
|
|
39
|
+
spec: string;
|
|
40
|
+
/** The exact version in `spec`. */
|
|
41
|
+
targetVersion: string;
|
|
42
|
+
/** RFC 3339 UTC time the update was requested. */
|
|
43
|
+
requestedAt: string;
|
|
44
|
+
/** Absent or 1. */
|
|
45
|
+
schemaVersion?: 1;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Where the marker lives for a given OpenClaw state dir.
|
|
49
|
+
*
|
|
50
|
+
* @param openclawStateDir - `api.runtime.state.resolveStateDir()` (the
|
|
51
|
+
* gateway's `OPENCLAW_STATE_DIR`), not the runtime's own configurable base
|
|
52
|
+
* state dir: the wrapper reads a fixed path.
|
|
53
|
+
*/
|
|
54
|
+
export declare function resolveUpdateMarkerPath(openclawStateDir: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* Builds the exact `<name>@<version>` spec for the marker from the spec the
|
|
57
|
+
* updater polled (a name, or a name with a dist-tag) and the version it found.
|
|
58
|
+
*
|
|
59
|
+
* This is the shell boundary on the wrapper side, so it refuses anything
|
|
60
|
+
* outside the safe charset rather than escaping it.
|
|
61
|
+
*
|
|
62
|
+
* @throws When the name is not a safe npm name or the version is not exact.
|
|
63
|
+
*/
|
|
64
|
+
export declare function buildExactUpdateSpec(specOrName: string, version: string): string;
|
|
65
|
+
/** Result of {@link parseUpdateMarker}. */
|
|
66
|
+
export type ParsedUpdateMarker = {
|
|
67
|
+
ok: true;
|
|
68
|
+
marker: RuntimeUpdateMarker;
|
|
69
|
+
} | {
|
|
70
|
+
ok: false;
|
|
71
|
+
reason: string;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Validates a parsed JSON value against {@link RUNTIME_UPDATE_MARKER_SCHEMA}.
|
|
75
|
+
*
|
|
76
|
+
* @returns The marker with only the known fields, or the first reason it is refused.
|
|
77
|
+
*/
|
|
78
|
+
export declare function parseUpdateMarker(value: unknown): ParsedUpdateMarker;
|
|
79
|
+
/**
|
|
80
|
+
* Writes the marker atomically (temp file in the same dir, then rename), so the
|
|
81
|
+
* wrapper never reads a half-written file.
|
|
82
|
+
*
|
|
83
|
+
* @throws When the marker fails {@link parseUpdateMarker}, or on a
|
|
84
|
+
* filesystem error. Nothing is left behind on a validation failure.
|
|
85
|
+
*/
|
|
86
|
+
export declare function writeUpdateMarker(path: string, marker: RuntimeUpdateMarker): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Reads the marker.
|
|
89
|
+
*
|
|
90
|
+
* @returns The marker, or `null` when it is missing, unreadable or malformed.
|
|
91
|
+
*/
|
|
92
|
+
export declare function readUpdateMarker(path: string): Promise<RuntimeUpdateMarker | null>;
|
|
93
|
+
/** Deletes the marker. A missing marker is not an error. */
|
|
94
|
+
export declare function clearUpdateMarker(path: string): Promise<void>;
|
|
95
|
+
//# sourceMappingURL=update-marker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-marker.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/update-marker.ts"],"names":[],"mappings":"AAwBA,kEAAkE;AAClE,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;CAS/B,CAAC;AAEX,yFAAyF;AACzF,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,aAAa,CAAC,EAAE,CAAC,CAAC;CACnB;AAKD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAExE;AAWD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAehF;AAED,2CAA2C;AAC3C,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAgCpE;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAehG;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAOxF;AAED,4DAA4D;AAC5D,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The runtime-update marker: the hand-off from the runtime to the senpi-agent
|
|
3
|
+
* wrapper on OpenClaw 10.x (R2 ↔ A12).
|
|
4
|
+
*
|
|
5
|
+
* 10.10 refuses `openclaw plugins update` while the gateway runs, and the
|
|
6
|
+
* runtime runs inside the gateway, so it cannot install its own update. It
|
|
7
|
+
* writes this marker, then asks the gateway to restart. Before every gateway
|
|
8
|
+
* spawn the wrapper reads the marker, runs
|
|
9
|
+
* `openclaw plugins update <spec> --accept-capabilities` with the gateway down,
|
|
10
|
+
* and deletes the marker whatever the outcome.
|
|
11
|
+
*
|
|
12
|
+
* This module is the one source of truth for the marker's schema
|
|
13
|
+
* ({@link RUNTIME_UPDATE_MARKER_SCHEMA}, enforced by {@link parseUpdateMarker}).
|
|
14
|
+
* Every writer and reader follows it: this runtime (R2), the operator tool
|
|
15
|
+
* `railway-runtime-update --via-marker` (personal-agents-ops), and the
|
|
16
|
+
* senpi-agent wrapper (A12).
|
|
17
|
+
*
|
|
18
|
+
* `spec` is always the exact version the updater checked, never a bare name
|
|
19
|
+
* or a dist-tag: a bare-name update moves the install record to the dist-tag,
|
|
20
|
+
* so "what was checked" would stop being "what was installed".
|
|
21
|
+
*/
|
|
22
|
+
import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
23
|
+
import { dirname, join } from "node:path";
|
|
24
|
+
/** Marker file name under `<OPENCLAW_STATE_DIR>/senpi-state/`. */
|
|
25
|
+
export const UPDATE_MARKER_FILE = "runtime-update.json";
|
|
26
|
+
/**
|
|
27
|
+
* The runtime-update marker schema, version 1.
|
|
28
|
+
*
|
|
29
|
+
* - Location: `$OPENCLAW_STATE_DIR/senpi-state/runtime-update.json`
|
|
30
|
+
* (`/data/.openclaw/senpi-state/runtime-update.json` on the senpi-agent image).
|
|
31
|
+
* - Encoding: one UTF-8 JSON object, written atomically (temp file in the same
|
|
32
|
+
* directory, then rename).
|
|
33
|
+
* - Fields, all strings:
|
|
34
|
+
* - `spec` (required): `<npm name>@<exact version>`. The name is one of
|
|
35
|
+
* `allowedNames` (the runtime's two npm names) and matches `nameRe`
|
|
36
|
+
* (optional `@scope/`, then a name; each part starts with a letter or
|
|
37
|
+
* digit, so it can never read as a CLI option); the version equals
|
|
38
|
+
* `targetVersion`. Never a bare name, a dist-tag or a range.
|
|
39
|
+
* - `targetVersion` (required): exact semver, matching `versionRe`.
|
|
40
|
+
* - `requestedAt` (required): RFC 3339 UTC timestamp (`Z` suffix), with or
|
|
41
|
+
* without fractional seconds: `2026-10-24T03:10:00Z` and
|
|
42
|
+
* `2026-10-24T03:10:00.000Z` are both valid.
|
|
43
|
+
* - `schemaVersion` (optional number): absent means 1. A reader refuses any
|
|
44
|
+
* other value. A writer of version 1 may omit it; a breaking change bumps
|
|
45
|
+
* it and must be rolled out to readers first.
|
|
46
|
+
* - Readers ignore fields they do not know. A marker that fails validation
|
|
47
|
+
* is refused (never installed), and the wrapper deletes it.
|
|
48
|
+
*/
|
|
49
|
+
export const RUNTIME_UPDATE_MARKER_SCHEMA = {
|
|
50
|
+
schemaVersion: 1,
|
|
51
|
+
path: "senpi-state/runtime-update.json",
|
|
52
|
+
required: ["spec", "targetVersion", "requestedAt"],
|
|
53
|
+
optional: ["schemaVersion"],
|
|
54
|
+
allowedNames: ["@senpi-ai/runtime", "@senpi/runtime"],
|
|
55
|
+
nameRe: /^(?:@[A-Za-z0-9][A-Za-z0-9._-]*\/)?[A-Za-z0-9][A-Za-z0-9._-]*$/,
|
|
56
|
+
versionRe: /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,
|
|
57
|
+
requestedAtRe: /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?Z$/,
|
|
58
|
+
};
|
|
59
|
+
const SAFE_NPM_NAME = RUNTIME_UPDATE_MARKER_SCHEMA.nameRe;
|
|
60
|
+
const EXACT_VERSION = RUNTIME_UPDATE_MARKER_SCHEMA.versionRe;
|
|
61
|
+
/**
|
|
62
|
+
* Where the marker lives for a given OpenClaw state dir.
|
|
63
|
+
*
|
|
64
|
+
* @param openclawStateDir - `api.runtime.state.resolveStateDir()` (the
|
|
65
|
+
* gateway's `OPENCLAW_STATE_DIR`), not the runtime's own configurable base
|
|
66
|
+
* state dir: the wrapper reads a fixed path.
|
|
67
|
+
*/
|
|
68
|
+
export function resolveUpdateMarkerPath(openclawStateDir) {
|
|
69
|
+
return join(openclawStateDir, "senpi-state", UPDATE_MARKER_FILE);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The npm name in a spec: `@senpi/runtime@dev` → `@senpi/runtime`.
|
|
73
|
+
* Returns the input unchanged when it carries no selector.
|
|
74
|
+
*/
|
|
75
|
+
function packageNameOf(specOrName) {
|
|
76
|
+
const at = specOrName.indexOf("@", specOrName.startsWith("@") ? 1 : 0);
|
|
77
|
+
return at === -1 ? specOrName : specOrName.slice(0, at);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Builds the exact `<name>@<version>` spec for the marker from the spec the
|
|
81
|
+
* updater polled (a name, or a name with a dist-tag) and the version it found.
|
|
82
|
+
*
|
|
83
|
+
* This is the shell boundary on the wrapper side, so it refuses anything
|
|
84
|
+
* outside the safe charset rather than escaping it.
|
|
85
|
+
*
|
|
86
|
+
* @throws When the name is not a safe npm name or the version is not exact.
|
|
87
|
+
*/
|
|
88
|
+
export function buildExactUpdateSpec(specOrName, version) {
|
|
89
|
+
const name = packageNameOf(specOrName.trim());
|
|
90
|
+
if (!SAFE_NPM_NAME.test(name) || (name.startsWith("@") && !name.includes("/"))) {
|
|
91
|
+
throw new Error(`runtime update marker: unsafe package name ${JSON.stringify(name)}`);
|
|
92
|
+
}
|
|
93
|
+
if (!RUNTIME_UPDATE_MARKER_SCHEMA.allowedNames.includes(name)) {
|
|
94
|
+
throw new Error(`runtime update marker: package ${JSON.stringify(name)} is not a runtime package ` +
|
|
95
|
+
`(${RUNTIME_UPDATE_MARKER_SCHEMA.allowedNames.join(", ")})`);
|
|
96
|
+
}
|
|
97
|
+
if (!EXACT_VERSION.test(version)) {
|
|
98
|
+
throw new Error(`runtime update marker: version ${JSON.stringify(version)} is not an exact semver version`);
|
|
99
|
+
}
|
|
100
|
+
return `${name}@${version}`;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Validates a parsed JSON value against {@link RUNTIME_UPDATE_MARKER_SCHEMA}.
|
|
104
|
+
*
|
|
105
|
+
* @returns The marker with only the known fields, or the first reason it is refused.
|
|
106
|
+
*/
|
|
107
|
+
export function parseUpdateMarker(value) {
|
|
108
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
109
|
+
return { ok: false, reason: "marker is not a JSON object" };
|
|
110
|
+
}
|
|
111
|
+
const m = value;
|
|
112
|
+
if (m.schemaVersion !== undefined && m.schemaVersion !== 1) {
|
|
113
|
+
return { ok: false, reason: `unsupported schemaVersion ${JSON.stringify(m.schemaVersion)}` };
|
|
114
|
+
}
|
|
115
|
+
for (const field of RUNTIME_UPDATE_MARKER_SCHEMA.required) {
|
|
116
|
+
if (typeof m[field] !== "string")
|
|
117
|
+
return { ok: false, reason: `${field} is missing or not a string` };
|
|
118
|
+
}
|
|
119
|
+
const spec = m.spec;
|
|
120
|
+
const targetVersion = m.targetVersion;
|
|
121
|
+
const requestedAt = m.requestedAt;
|
|
122
|
+
if (!EXACT_VERSION.test(targetVersion)) {
|
|
123
|
+
return { ok: false, reason: `targetVersion ${JSON.stringify(targetVersion)} is not an exact semver version` };
|
|
124
|
+
}
|
|
125
|
+
let expected;
|
|
126
|
+
try {
|
|
127
|
+
expected = buildExactUpdateSpec(spec, targetVersion);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
return { ok: false, reason: error instanceof Error ? error.message : String(error) };
|
|
131
|
+
}
|
|
132
|
+
if (expected !== spec) {
|
|
133
|
+
return { ok: false, reason: `spec ${JSON.stringify(spec)} is not exactly <name>@${targetVersion}` };
|
|
134
|
+
}
|
|
135
|
+
if (!RUNTIME_UPDATE_MARKER_SCHEMA.requestedAtRe.test(requestedAt) || !Number.isFinite(Date.parse(requestedAt))) {
|
|
136
|
+
return { ok: false, reason: `requestedAt ${JSON.stringify(requestedAt)} is not an RFC 3339 UTC timestamp` };
|
|
137
|
+
}
|
|
138
|
+
const marker = { spec, targetVersion, requestedAt };
|
|
139
|
+
if (m.schemaVersion === 1)
|
|
140
|
+
marker.schemaVersion = 1;
|
|
141
|
+
return { ok: true, marker };
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Writes the marker atomically (temp file in the same dir, then rename), so the
|
|
145
|
+
* wrapper never reads a half-written file.
|
|
146
|
+
*
|
|
147
|
+
* @throws When the marker fails {@link parseUpdateMarker}, or on a
|
|
148
|
+
* filesystem error. Nothing is left behind on a validation failure.
|
|
149
|
+
*/
|
|
150
|
+
export async function writeUpdateMarker(path, marker) {
|
|
151
|
+
const parsed = parseUpdateMarker(marker);
|
|
152
|
+
if (!parsed.ok) {
|
|
153
|
+
throw new Error(`runtime update marker: refusing to write it: ${parsed.reason}`);
|
|
154
|
+
}
|
|
155
|
+
const body = JSON.stringify(parsed.marker, null, 2);
|
|
156
|
+
await mkdir(dirname(path), { recursive: true });
|
|
157
|
+
const tmp = `${path}.${process.pid}.${Date.now()}.tmp`;
|
|
158
|
+
try {
|
|
159
|
+
await writeFile(tmp, body, "utf8");
|
|
160
|
+
await rename(tmp, path);
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
await rm(tmp, { force: true }).catch(() => undefined);
|
|
164
|
+
throw err;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Reads the marker.
|
|
169
|
+
*
|
|
170
|
+
* @returns The marker, or `null` when it is missing, unreadable or malformed.
|
|
171
|
+
*/
|
|
172
|
+
export async function readUpdateMarker(path) {
|
|
173
|
+
try {
|
|
174
|
+
const parsed = parseUpdateMarker(JSON.parse(await readFile(path, "utf8")));
|
|
175
|
+
return parsed.ok ? parsed.marker : null;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/** Deletes the marker. A missing marker is not an error. */
|
|
182
|
+
export async function clearUpdateMarker(path) {
|
|
183
|
+
await rm(path, { force: true });
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=update-marker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-marker.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/update-marker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* When a box may apply a runtime update on OpenClaw 10.x (R2).
|
|
3
|
+
*
|
|
4
|
+
* A fleet that restarts together hits the npm registry, LiteLLM and the
|
|
5
|
+
* bridge's reconnect and repair paths at once (the orchestrator's repair
|
|
6
|
+
* limiter is 1/min per user). So each box waits a deterministic offset derived
|
|
7
|
+
* from its MID within a 6 h window, plus ±10 min of jitter, after it first sees
|
|
8
|
+
* a new version. If it never finds an idle moment, it forces the update 24 h
|
|
9
|
+
* after it became eligible, inside a fixed 03:00–05:00 UTC quiet window. Even
|
|
10
|
+
* the forced path goes through the gateway's own restart deferral, so a reply
|
|
11
|
+
* in progress still finishes.
|
|
12
|
+
*
|
|
13
|
+
* Every function here is pure.
|
|
14
|
+
*/
|
|
15
|
+
/** Width of the per-box spread window. */
|
|
16
|
+
export declare const UPDATE_SPREAD_WINDOW_MS: number;
|
|
17
|
+
/** Half-width of the random jitter added to the spread. */
|
|
18
|
+
export declare const UPDATE_JITTER_MS: number;
|
|
19
|
+
/** How long after eligibility a busy box waits before the update is forced. */
|
|
20
|
+
export declare const UPDATE_MAX_DEFERRAL_MS: number;
|
|
21
|
+
/** Quiet window start, UTC hour (inclusive). */
|
|
22
|
+
export declare const UPDATE_QUIET_START_HOUR_UTC = 3;
|
|
23
|
+
/** Quiet window end, UTC hour (exclusive). */
|
|
24
|
+
export declare const UPDATE_QUIET_END_HOUR_UTC = 5;
|
|
25
|
+
/**
|
|
26
|
+
* 32-bit FNV-1a over the UTF-8 bytes of `input`.
|
|
27
|
+
*
|
|
28
|
+
* @returns An unsigned 32-bit integer.
|
|
29
|
+
*/
|
|
30
|
+
export declare function fnv1a32(input: string): number;
|
|
31
|
+
/**
|
|
32
|
+
* The box's deterministic delay inside the spread window: `fnv1a32(mid) mod 6 h`.
|
|
33
|
+
*
|
|
34
|
+
* @param mid - The box's stable identity (the user MID, else a stable instance id).
|
|
35
|
+
*/
|
|
36
|
+
export declare function spreadOffsetMs(mid: string): number;
|
|
37
|
+
/**
|
|
38
|
+
* Random jitter uniform in `[-10 min, +10 min)`.
|
|
39
|
+
*
|
|
40
|
+
* @param rand - A `[0, 1)` source (`Math.random` in production; fixed in tests).
|
|
41
|
+
*/
|
|
42
|
+
export declare function jitterMs(rand: () => number): number;
|
|
43
|
+
/**
|
|
44
|
+
* When the box may first apply an update it saw at `firstSeenAt`:
|
|
45
|
+
* `firstSeenAt + spreadOffsetMs(mid) + jitter`. The caller computes it once
|
|
46
|
+
* per pending update and persists it, so the jitter does not move between
|
|
47
|
+
* ticks.
|
|
48
|
+
*/
|
|
49
|
+
export declare function eligibleAt(firstSeenAt: number, mid: string, rand: () => number): number;
|
|
50
|
+
/** Whether `now` falls inside the 03:00–05:00 UTC quiet window. */
|
|
51
|
+
export declare function isInQuietWindow(now: number): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Whether a busy box must update anyway: at least 24 h past `eligibleAtMs`
|
|
54
|
+
* **and** inside the quiet window.
|
|
55
|
+
*/
|
|
56
|
+
export declare function mustForce(now: number, eligibleAtMs: number): boolean;
|
|
57
|
+
//# sourceMappingURL=update-schedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-schedule.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/update-schedule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,0CAA0C;AAC1C,eAAO,MAAM,uBAAuB,QAAkB,CAAC;AACvD,2DAA2D;AAC3D,eAAO,MAAM,gBAAgB,QAAc,CAAC;AAC5C,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,QAAmB,CAAC;AACvD,gDAAgD;AAChD,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,8CAA8C;AAC9C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO7C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,MAAM,GAAG,MAAM,CAEvF;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAEpE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* When a box may apply a runtime update on OpenClaw 10.x (R2).
|
|
3
|
+
*
|
|
4
|
+
* A fleet that restarts together hits the npm registry, LiteLLM and the
|
|
5
|
+
* bridge's reconnect and repair paths at once (the orchestrator's repair
|
|
6
|
+
* limiter is 1/min per user). So each box waits a deterministic offset derived
|
|
7
|
+
* from its MID within a 6 h window, plus ±10 min of jitter, after it first sees
|
|
8
|
+
* a new version. If it never finds an idle moment, it forces the update 24 h
|
|
9
|
+
* after it became eligible, inside a fixed 03:00–05:00 UTC quiet window. Even
|
|
10
|
+
* the forced path goes through the gateway's own restart deferral, so a reply
|
|
11
|
+
* in progress still finishes.
|
|
12
|
+
*
|
|
13
|
+
* Every function here is pure.
|
|
14
|
+
*/
|
|
15
|
+
/** Width of the per-box spread window. */
|
|
16
|
+
export const UPDATE_SPREAD_WINDOW_MS = 6 * 60 * 60_000;
|
|
17
|
+
/** Half-width of the random jitter added to the spread. */
|
|
18
|
+
export const UPDATE_JITTER_MS = 10 * 60_000;
|
|
19
|
+
/** How long after eligibility a busy box waits before the update is forced. */
|
|
20
|
+
export const UPDATE_MAX_DEFERRAL_MS = 24 * 60 * 60_000;
|
|
21
|
+
/** Quiet window start, UTC hour (inclusive). */
|
|
22
|
+
export const UPDATE_QUIET_START_HOUR_UTC = 3;
|
|
23
|
+
/** Quiet window end, UTC hour (exclusive). */
|
|
24
|
+
export const UPDATE_QUIET_END_HOUR_UTC = 5;
|
|
25
|
+
/**
|
|
26
|
+
* 32-bit FNV-1a over the UTF-8 bytes of `input`.
|
|
27
|
+
*
|
|
28
|
+
* @returns An unsigned 32-bit integer.
|
|
29
|
+
*/
|
|
30
|
+
export function fnv1a32(input) {
|
|
31
|
+
let hash = 0x811c9dc5;
|
|
32
|
+
for (const byte of Buffer.from(input, "utf8")) {
|
|
33
|
+
hash ^= byte;
|
|
34
|
+
hash = Math.imul(hash, 0x01000193);
|
|
35
|
+
}
|
|
36
|
+
return hash >>> 0;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The box's deterministic delay inside the spread window: `fnv1a32(mid) mod 6 h`.
|
|
40
|
+
*
|
|
41
|
+
* @param mid - The box's stable identity (the user MID, else a stable instance id).
|
|
42
|
+
*/
|
|
43
|
+
export function spreadOffsetMs(mid) {
|
|
44
|
+
return fnv1a32(mid) % UPDATE_SPREAD_WINDOW_MS;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Random jitter uniform in `[-10 min, +10 min)`.
|
|
48
|
+
*
|
|
49
|
+
* @param rand - A `[0, 1)` source (`Math.random` in production; fixed in tests).
|
|
50
|
+
*/
|
|
51
|
+
export function jitterMs(rand) {
|
|
52
|
+
return Math.round((rand() * 2 - 1) * UPDATE_JITTER_MS);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* When the box may first apply an update it saw at `firstSeenAt`:
|
|
56
|
+
* `firstSeenAt + spreadOffsetMs(mid) + jitter`. The caller computes it once
|
|
57
|
+
* per pending update and persists it, so the jitter does not move between
|
|
58
|
+
* ticks.
|
|
59
|
+
*/
|
|
60
|
+
export function eligibleAt(firstSeenAt, mid, rand) {
|
|
61
|
+
return firstSeenAt + spreadOffsetMs(mid) + jitterMs(rand);
|
|
62
|
+
}
|
|
63
|
+
/** Whether `now` falls inside the 03:00–05:00 UTC quiet window. */
|
|
64
|
+
export function isInQuietWindow(now) {
|
|
65
|
+
const hour = new Date(now).getUTCHours();
|
|
66
|
+
return hour >= UPDATE_QUIET_START_HOUR_UTC && hour < UPDATE_QUIET_END_HOUR_UTC;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Whether a busy box must update anyway: at least 24 h past `eligibleAtMs`
|
|
70
|
+
* **and** inside the quiet window.
|
|
71
|
+
*/
|
|
72
|
+
export function mustForce(now, eligibleAtMs) {
|
|
73
|
+
return now >= eligibleAtMs + UPDATE_MAX_DEFERRAL_MS && isInQuietWindow(now);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=update-schedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-schedule.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/update-schedule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;AACvD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAC;AAC5C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;AACvD,gDAAgD;AAChD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAC7C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QAC9C,IAAI,IAAI,IAAI,CAAC;QACb,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,GAAW,EAAE,IAAkB;IAC7E,OAAO,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,IAAI,IAAI,2BAA2B,IAAI,IAAI,GAAG,yBAAyB,CAAC;AACjF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,YAAoB;IACzD,OAAO,GAAG,IAAI,YAAY,GAAG,sBAAsB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -68,6 +68,13 @@ export declare enum DecisionErrorCode {
|
|
|
68
68
|
ProviderModelUnresolved = "PROVIDER_MODEL_UNRESOLVED",
|
|
69
69
|
/** Resolved model is not on the gateway's `allowedModels` allowlist. */
|
|
70
70
|
ModelNotAllowed = "MODEL_NOT_ALLOWED",
|
|
71
|
+
/**
|
|
72
|
+
* OpenClaw 10.x refuses a `provider`/`model` in an llm-task call unless
|
|
73
|
+
* `plugins.entries.llm-task.llm.allowModelOverride` is `true`. The gateway
|
|
74
|
+
* masks the refusal as a generic 500, so the runtime raises this itself
|
|
75
|
+
* before the call (`OpenClawLlmDecision.decide` preflight).
|
|
76
|
+
*/
|
|
77
|
+
ModelOverrideNotAllowed = "MODEL_OVERRIDE_NOT_ALLOWED",
|
|
71
78
|
/** Context/payload passed to `llm-task` was not JSON-serializable — internal bug. */
|
|
72
79
|
InputNotSerializable = "INPUT_NOT_SERIALIZABLE",
|
|
73
80
|
/** Provider responded but produced no text (safety filter / refusal / empty completion). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-errors.d.ts","sourceRoot":"","sources":["../../src/runtime/decision-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,uEAAuE;AACvE,oBAAY,iBAAiB;IAC3B,8EAA8E;IAC9E,mBAAmB,0BAA0B;IAC7C,2EAA2E;IAC3E,kBAAkB,wBAAwB;IAC1C,mFAAmF;IACnF,qBAAqB,4BAA4B;IACjD,mFAAmF;IACnF,cAAc,oBAAoB;IAClC,uEAAuE;IACvE,uBAAuB,8BAA8B;IACrD,wEAAwE;IACxE,eAAe,sBAAsB;IACrC,qFAAqF;IACrF,oBAAoB,2BAA2B;IAC/C,4FAA4F;IAC5F,cAAc,qBAAqB;IACnC,gFAAgF;IAChF,cAAc,qBAAqB;IACnC,+DAA+D;IAC/D,iBAAiB,wBAAwB;IACzC,6EAA6E;IAC7E,aAAa,mBAAmB;IAChC,wFAAwF;IACxF,OAAO,YAAY;IACnB,yFAAyF;IACzF,wBAAwB,+BAA+B;IACvD,gFAAgF;IAChF,oBAAoB,2BAA2B;IAC/C,kFAAkF;IAClF,wBAAwB,+BAA+B;IACvD,yFAAyF;IACzF,mBAAmB,0BAA0B;IAC7C,0DAA0D;IAC1D,kBAAkB,wBAAwB;IAC1C,qFAAqF;IACrF,OAAO,YAAY;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,iBAAiB,CAAC;IACxB,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;IACnB,qGAAqG;IACrG,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+CAA+C;AAC/C,UAAU,kBAAkB;IAC1B,IAAI,EAAE,iBAAiB,CAAC;IACxB;;;OAGG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,gBAAgB,GAAG,OAAO,GAAG,IAAI,CAAC;IAC1D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,kBAAkB,
|
|
1
|
+
{"version":3,"file":"decision-errors.d.ts","sourceRoot":"","sources":["../../src/runtime/decision-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,uEAAuE;AACvE,oBAAY,iBAAiB;IAC3B,8EAA8E;IAC9E,mBAAmB,0BAA0B;IAC7C,2EAA2E;IAC3E,kBAAkB,wBAAwB;IAC1C,mFAAmF;IACnF,qBAAqB,4BAA4B;IACjD,mFAAmF;IACnF,cAAc,oBAAoB;IAClC,uEAAuE;IACvE,uBAAuB,8BAA8B;IACrD,wEAAwE;IACxE,eAAe,sBAAsB;IACrC;;;;;OAKG;IACH,uBAAuB,+BAA+B;IACtD,qFAAqF;IACrF,oBAAoB,2BAA2B;IAC/C,4FAA4F;IAC5F,cAAc,qBAAqB;IACnC,gFAAgF;IAChF,cAAc,qBAAqB;IACnC,+DAA+D;IAC/D,iBAAiB,wBAAwB;IACzC,6EAA6E;IAC7E,aAAa,mBAAmB;IAChC,wFAAwF;IACxF,OAAO,YAAY;IACnB,yFAAyF;IACzF,wBAAwB,+BAA+B;IACvD,gFAAgF;IAChF,oBAAoB,2BAA2B;IAC/C,kFAAkF;IAClF,wBAAwB,+BAA+B;IACvD,yFAAyF;IACzF,mBAAmB,0BAA0B;IAC7C,0DAA0D;IAC1D,kBAAkB,wBAAwB;IAC1C,qFAAqF;IACrF,OAAO,YAAY;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,iBAAiB,CAAC;IACxB,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;IACnB,qGAAqG;IACrG,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+CAA+C;AAC/C,UAAU,kBAAkB;IAC1B,IAAI,EAAE,iBAAiB,CAAC;IACxB;;;OAGG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,gBAAgB,GAAG,OAAO,GAAG,IAAI,CAAC;IAC1D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,kBAAkB,EAuHpD,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,WAAW,CAAC;AAoB5D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,GAAG,mBAAmB,CAGpG;AAED;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,CAapF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB,CAiBjF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGhE"}
|
|
@@ -68,6 +68,13 @@ export var DecisionErrorCode;
|
|
|
68
68
|
DecisionErrorCode["ProviderModelUnresolved"] = "PROVIDER_MODEL_UNRESOLVED";
|
|
69
69
|
/** Resolved model is not on the gateway's `allowedModels` allowlist. */
|
|
70
70
|
DecisionErrorCode["ModelNotAllowed"] = "MODEL_NOT_ALLOWED";
|
|
71
|
+
/**
|
|
72
|
+
* OpenClaw 10.x refuses a `provider`/`model` in an llm-task call unless
|
|
73
|
+
* `plugins.entries.llm-task.llm.allowModelOverride` is `true`. The gateway
|
|
74
|
+
* masks the refusal as a generic 500, so the runtime raises this itself
|
|
75
|
+
* before the call (`OpenClawLlmDecision.decide` preflight).
|
|
76
|
+
*/
|
|
77
|
+
DecisionErrorCode["ModelOverrideNotAllowed"] = "MODEL_OVERRIDE_NOT_ALLOWED";
|
|
71
78
|
/** Context/payload passed to `llm-task` was not JSON-serializable — internal bug. */
|
|
72
79
|
DecisionErrorCode["InputNotSerializable"] = "INPUT_NOT_SERIALIZABLE";
|
|
73
80
|
/** Provider responded but produced no text (safety filter / refusal / empty completion). */
|
|
@@ -133,6 +140,14 @@ export const DECISION_ERROR_TABLE = [
|
|
|
133
140
|
match: (s) => s.match(/Model not allowed by llm-task plugin config:\s*([^.]+)\.\s*Allowed models:\s*([^"}]+)/),
|
|
134
141
|
retryable: false,
|
|
135
142
|
},
|
|
143
|
+
{
|
|
144
|
+
// The runtime's own 10.x preflight text, and the host's sentence in case a
|
|
145
|
+
// host ever surfaces it (10.10 masks it behind "tool execution failed").
|
|
146
|
+
// Above ProviderError: a rejection wrapper must not make it retryable.
|
|
147
|
+
code: DecisionErrorCode.ModelOverrideNotAllowed,
|
|
148
|
+
match: (s) => /llm-task model override not allowed|cannot override the target model/i.test(s),
|
|
149
|
+
retryable: false,
|
|
150
|
+
},
|
|
136
151
|
{
|
|
137
152
|
code: DecisionErrorCode.InputNotSerializable,
|
|
138
153
|
match: (s) => /input must be JSON-serializable/i.test(s),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-errors.js","sourceRoot":"","sources":["../../src/runtime/decision-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAIH,uEAAuE;AACvE,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"decision-errors.js","sourceRoot":"","sources":["../../src/runtime/decision-errors.ts"],"names":[],"mappings":"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"}
|
package/dist/senpi/client.d.ts
CHANGED
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
import type { McpTransport, SenpiClientConfig, CreatePositionRequest, CreatePositionResult, EditPositionResult, OrderStatus, GetPositionResult, OpenPosition, GetStrategyResult, GetOpenOrdersResult, GetTraderHistoryOptions, TraderHistoryEntry, GetTraderStateOptions, TraderStateResult, StrategyFundResult, CreateCustomStrategyParams, CreateCustomStrategyResult, StrategyMetadataPatch, StrategyMetadataPatchResult, PortfolioPayload, ClosePositionsRequest, GetPnlHistoryOptions, ListStrategiesFilters, StrategySummary, StrategyLimits, RatchetStopPosition, RatchetStopEvent, AddRatchetStopInput, EditRatchetStopInput, DeleteRatchetStopInput, QueryRatchetStopsInput, QueryRatchetStopEventsInput } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* MCP tools that move money or change protection: place, change or close an
|
|
4
|
+
* order or position, create and fund a strategy wallet, fund or withdraw,
|
|
5
|
+
* add, move or delete a stop. While one
|
|
6
|
+
* of these is in flight the box is not idle for a self-update restart
|
|
7
|
+
* (`runtime/auto-update/idle-gate.ts`): a restart mid-call would leave the
|
|
8
|
+
* caller without the outcome.
|
|
9
|
+
*/
|
|
10
|
+
export declare const ORDER_CALL_TOOLS: ReadonlySet<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Whether a bare Senpi tool name moves money or changes protection, for the
|
|
13
|
+
* self-update idle gate: {@link ORDER_CALL_TOOLS} plus every trade tool in the
|
|
14
|
+
* approval manifest (`approvals/tool-approvals-manifest.json`). One set for
|
|
15
|
+
* both counters, the in-process {@link senpiOrderCallsInFlight} and the agent's
|
|
16
|
+
* hook-counted calls, so a money tool added to the manifest is never missed by
|
|
17
|
+
* one of them. The explicit list keeps counting a tool even if the manifest
|
|
18
|
+
* stops gating it.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isMoneyCallTool(bare: string): boolean;
|
|
21
|
+
/** Order/close MCP calls currently in flight across every `SenpiClient` in this process. */
|
|
22
|
+
export declare function senpiOrderCallsInFlight(): number;
|
|
2
23
|
/**
|
|
3
24
|
* Typed error thrown by `SenpiClient` mutation methods when the response
|
|
4
25
|
* reports a failure at either layer (outer MCP envelope or inner engine
|
|
@@ -112,11 +133,15 @@ export declare class SenpiClient {
|
|
|
112
133
|
disconnect(): Promise<void>;
|
|
113
134
|
/**
|
|
114
135
|
* Wrap each Senpi MCP call in an on-site `tools/call` span (`mcp.*` + `gen_ai.tool.*`).
|
|
136
|
+
* Money calls ({@link isMoneyCallTool}) also count in
|
|
137
|
+
* {@link senpiOrderCallsInFlight} while they run.
|
|
115
138
|
* `withSpan` uses `startActiveSpan`, so it nests under the active trading waterfall and
|
|
116
139
|
* the auto-instrumented `POST /mcp` span nests under it; identity reuses the async-context
|
|
117
140
|
* bag (same source as the logger and trading spans).
|
|
118
141
|
*/
|
|
119
142
|
private callTool;
|
|
143
|
+
/** The span-wrapped body of {@link callTool}. */
|
|
144
|
+
private callToolSpan;
|
|
120
145
|
private callToolInner;
|
|
121
146
|
/**
|
|
122
147
|
* Run an MCP `audit_query` and return the unwrapped response payload.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/senpi/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/senpi/client.ts"],"names":[],"mappings":"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"}
|