@senpi/runtime 3.0.173 → 3.0.181
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/close-position/close-position.action.d.ts.map +1 -1
- package/dist/actions/close-position/close-position.action.js +48 -3
- package/dist/actions/close-position/close-position.action.js.map +1 -1
- 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/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +42 -6
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/actions/open-position/resolve-margin.d.ts +1 -1
- package/dist/actions/open-position/resolve-margin.d.ts.map +1 -1
- package/dist/actions/open-position/resolve-margin.js +7 -0
- package/dist/actions/open-position/resolve-margin.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/manifest.d.ts.map +1 -1
- package/dist/approvals/manifest.js +0 -5
- package/dist/approvals/manifest.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 -21
- package/dist/approvals/tool-approval-gate.js.map +1 -1
- package/dist/approvals/tool-approvals-manifest.json +0 -2
- 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 +43 -8
- 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 +91 -12
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/constants/dsl/index.d.ts +2 -0
- package/dist/constants/dsl/index.d.ts.map +1 -1
- package/dist/constants/dsl/index.js +2 -0
- package/dist/constants/dsl/index.js.map +1 -1
- package/dist/constants/order-types.d.ts.map +1 -1
- package/dist/constants/order-types.js +4 -1
- package/dist/constants/order-types.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/messages.d.ts +15 -1
- package/dist/deploy/messages.d.ts.map +1 -1
- package/dist/deploy/messages.js +78 -0
- package/dist/deploy/messages.js.map +1 -1
- package/dist/deploy/orchestrator.d.ts +11 -1
- package/dist/deploy/orchestrator.d.ts.map +1 -1
- package/dist/deploy/orchestrator.js +111 -15
- package/dist/deploy/orchestrator.js.map +1 -1
- package/dist/deploy/register.d.ts +18 -0
- package/dist/deploy/register.d.ts.map +1 -1
- package/dist/deploy/register.js +93 -2
- package/dist/deploy/register.js.map +1 -1
- package/dist/dsl/engine/exchange-stop.d.ts +21 -1
- package/dist/dsl/engine/exchange-stop.d.ts.map +1 -1
- package/dist/dsl/engine/exchange-stop.js +27 -1
- package/dist/dsl/engine/exchange-stop.js.map +1 -1
- package/dist/dsl/engine/floors.d.ts +2 -1
- package/dist/dsl/engine/floors.d.ts.map +1 -1
- package/dist/dsl/engine/floors.js +2 -1
- package/dist/dsl/engine/floors.js.map +1 -1
- package/dist/dsl/engine/index.d.ts +1 -1
- package/dist/dsl/engine/index.d.ts.map +1 -1
- package/dist/dsl/engine/index.js +1 -1
- package/dist/dsl/engine/index.js.map +1 -1
- package/dist/dsl/engine/tick.d.ts.map +1 -1
- package/dist/dsl/engine/tick.js +4 -3
- package/dist/dsl/engine/tick.js.map +1 -1
- package/dist/dsl/events/handlers.d.ts +7 -3
- package/dist/dsl/events/handlers.d.ts.map +1 -1
- package/dist/dsl/events/handlers.js +10 -4
- package/dist/dsl/events/handlers.js.map +1 -1
- package/dist/dsl/events/initial-state.d.ts.map +1 -1
- package/dist/dsl/events/initial-state.js +2 -0
- package/dist/dsl/events/initial-state.js.map +1 -1
- package/dist/dsl/monitor/exchange-sync.d.ts +1 -0
- package/dist/dsl/monitor/exchange-sync.d.ts.map +1 -1
- package/dist/dsl/monitor/exchange-sync.js +7 -14
- package/dist/dsl/monitor/exchange-sync.js.map +1 -1
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +108 -17
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/dsl/notifications/formatter.d.ts +2 -1
- package/dist/dsl/notifications/formatter.d.ts.map +1 -1
- package/dist/dsl/notifications/formatter.js +18 -1
- package/dist/dsl/notifications/formatter.js.map +1 -1
- package/dist/health/types.d.ts +6 -1
- package/dist/health/types.d.ts.map +1 -1
- package/dist/health/types.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 +318 -38
- package/dist/index.js.map +1 -1
- package/dist/leverage/max-leverage-cache.d.ts +25 -0
- package/dist/leverage/max-leverage-cache.d.ts.map +1 -1
- package/dist/leverage/max-leverage-cache.js +77 -0
- package/dist/leverage/max-leverage-cache.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/create-scanner-module.d.ts +1 -1
- package/dist/runtime/create-scanner-module.d.ts.map +1 -1
- package/dist/runtime/create-scanner-module.js +2 -1
- package/dist/runtime/create-scanner-module.js.map +1 -1
- 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/runtime/lifecycle-events.d.ts +1 -1
- package/dist/runtime/lifecycle-events.d.ts.map +1 -1
- package/dist/runtime/lifecycle-events.js +10 -1
- package/dist/runtime/lifecycle-events.js.map +1 -1
- package/dist/runtime/runtime-descriptor.d.ts +11 -2
- package/dist/runtime/runtime-descriptor.d.ts.map +1 -1
- package/dist/runtime/runtime-descriptor.js +11 -2
- package/dist/runtime/runtime-descriptor.js.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +4 -3
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/strategy-lifecycle.js +1 -1
- package/dist/runtime/strategy-lifecycle.js.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
- package/dist/runtime-api/intake/acceptance-record.d.ts +17 -3
- package/dist/runtime-api/intake/acceptance-record.d.ts.map +1 -1
- package/dist/runtime-api/intake/acceptance-record.js +57 -32
- package/dist/runtime-api/intake/acceptance-record.js.map +1 -1
- package/dist/runtime-api/intake/intake-events.d.ts +6 -5
- package/dist/runtime-api/intake/intake-events.d.ts.map +1 -1
- package/dist/runtime-api/intake/intake-events.js +9 -3
- package/dist/runtime-api/intake/intake-events.js.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.d.ts +1 -1
- package/dist/runtime-api/intake/process-signal-post.d.ts.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.js +34 -31
- package/dist/runtime-api/intake/process-signal-post.js.map +1 -1
- package/dist/runtime-api/intake/scaffold-error-router.d.ts +8 -0
- package/dist/runtime-api/intake/scaffold-error-router.d.ts.map +1 -1
- package/dist/runtime-api/intake/scaffold-error-router.js +9 -0
- package/dist/runtime-api/intake/scaffold-error-router.js.map +1 -1
- package/dist/runtime-api/intake/types.d.ts +9 -0
- package/dist/runtime-api/intake/types.d.ts.map +1 -1
- package/dist/runtime-api/intake/types.js +5 -1
- package/dist/runtime-api/intake/types.js.map +1 -1
- package/dist/runtime-api/routes/signals.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.js +25 -1
- package/dist/runtime-api/routes/signals.js.map +1 -1
- package/dist/runtime-api/routes/signals.schema.d.ts +2 -0
- package/dist/runtime-api/routes/signals.schema.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.schema.js +4 -0
- package/dist/runtime-api/routes/signals.schema.js.map +1 -1
- package/dist/scanners/engine/data-providers.d.ts +6 -0
- package/dist/scanners/engine/data-providers.d.ts.map +1 -1
- package/dist/scanners/engine/data-providers.js.map +1 -1
- package/dist/scanners/engine/engine.d.ts +9 -0
- package/dist/scanners/engine/engine.d.ts.map +1 -1
- package/dist/scanners/engine/engine.js +29 -6
- package/dist/scanners/engine/engine.js.map +1 -1
- package/dist/scanners/external/scaffold/ctx.py +55 -1
- package/dist/scanners/external/scaffold/delivery.py +92 -28
- package/dist/scanners/external/scaffold/preflight.py +1 -1
- package/dist/scanners/external/scaffold/scaffold.py +75 -2
- package/dist/scanners/runtime-module.d.ts +2 -0
- package/dist/scanners/runtime-module.d.ts.map +1 -1
- package/dist/scanners/runtime-module.js +14 -0
- package/dist/scanners/runtime-module.js.map +1 -1
- package/dist/senpi/client.d.ts +36 -1
- package/dist/senpi/client.d.ts.map +1 -1
- package/dist/senpi/client.js +100 -8
- package/dist/senpi/client.js.map +1 -1
- package/dist/senpi/types.d.ts +54 -2
- package/dist/senpi/types.d.ts.map +1 -1
- package/dist/telemetry/metrics.d.ts +15 -1
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +25 -1
- 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/types/dsl/index.d.ts +4 -0
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/utils/event-catalog.d.ts +141 -10
- package/dist/utils/event-catalog.d.ts.map +1 -1
- package/dist/utils/event-catalog.js +23 -1
- package/dist/utils/event-catalog.js.map +1 -1
- package/dist/utils/perp-coin.d.ts.map +1 -1
- package/dist/utils/perp-coin.js +2 -1
- package/dist/utils/perp-coin.js.map +1 -1
- package/dist/utils/resolve-order-type.d.ts.map +1 -1
- package/dist/utils/resolve-order-type.js +5 -1
- package/dist/utils/resolve-order-type.js.map +1 -1
- package/dist/validate/codes.d.ts +2 -0
- package/dist/validate/codes.d.ts.map +1 -1
- package/dist/validate/codes.js +6 -0
- package/dist/validate/codes.js.map +1 -1
- package/dist/validate/index.d.ts +1 -1
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +1 -1
- package/dist/validate/index.js.map +1 -1
- package/dist/validate/recipe-checks.d.ts +7 -0
- package/dist/validate/recipe-checks.d.ts.map +1 -1
- package/dist/validate/recipe-checks.js +18 -0
- package/dist/validate/recipe-checks.js.map +1 -1
- package/dist/validate/recipe.d.ts.map +1 -1
- package/dist/validate/recipe.js +2 -1
- package/dist/validate/recipe.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/examples/strategies/README.md +2 -1
- package/examples/strategies/iguana/README.md +3 -3
- package/examples/strategies/raptor/README.md +3 -3
- 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"}
|
|
@@ -17,5 +17,5 @@ import type { RuntimeConfig } from "./runtime-config.js";
|
|
|
17
17
|
* synthesized as `{ fields: signal_data_schema }` + `outputs: {signals: true,
|
|
18
18
|
* context: false}`.
|
|
19
19
|
*/
|
|
20
|
-
export declare function createScannerModuleFromRuntimeConfig(config: RuntimeConfig, stateDir: string, providers?: ScannerDataProviders, logger?: ScannerLogger, identity?: () => IdentityEnvelope): ReturnType<typeof createScannerRuntimeModule>;
|
|
20
|
+
export declare function createScannerModuleFromRuntimeConfig(config: RuntimeConfig, stateDir: string, providers?: ScannerDataProviders, logger?: ScannerLogger, identity?: () => IdentityEnvelope, canonicalCoin?: (asset: string, dex?: string) => string): ReturnType<typeof createScannerRuntimeModule>;
|
|
21
21
|
//# sourceMappingURL=create-scanner-module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-scanner-module.d.ts","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,oBAAoB,EAChC,MAAM,CAAC,EAAE,aAAa,EACtB,QAAQ,CAAC,EAAE,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"create-scanner-module.d.ts","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,oBAAoB,EAChC,MAAM,CAAC,EAAE,aAAa,EACtB,QAAQ,CAAC,EAAE,MAAM,gBAAgB,EACjC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,GACtD,UAAU,CAAC,OAAO,0BAA0B,CAAC,CA4C/C"}
|
|
@@ -17,7 +17,7 @@ import { buildScannerComposition } from "./scanner-composition.js";
|
|
|
17
17
|
* synthesized as `{ fields: signal_data_schema }` + `outputs: {signals: true,
|
|
18
18
|
* context: false}`.
|
|
19
19
|
*/
|
|
20
|
-
export function createScannerModuleFromRuntimeConfig(config, stateDir, providers, logger, identity) {
|
|
20
|
+
export function createScannerModuleFromRuntimeConfig(config, stateDir, providers, logger, identity, canonicalCoin) {
|
|
21
21
|
const strategy = resolveStrategyRegistration(config);
|
|
22
22
|
const scanners = [];
|
|
23
23
|
for (const sc of config.scanners ?? []) {
|
|
@@ -47,6 +47,7 @@ export function createScannerModuleFromRuntimeConfig(config, stateDir, providers
|
|
|
47
47
|
providers,
|
|
48
48
|
logger,
|
|
49
49
|
identity,
|
|
50
|
+
canonicalCoin,
|
|
50
51
|
});
|
|
51
52
|
}
|
|
52
53
|
//# sourceMappingURL=create-scanner-module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-scanner-module.js","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAE7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oCAAoC,CAClD,MAAqB,EACrB,QAAgB,EAChB,SAAgC,EAChC,MAAsB,EACtB,QAAiC;
|
|
1
|
+
{"version":3,"file":"create-scanner-module.js","sourceRoot":"","sources":["../../src/runtime/create-scanner-module.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAE7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oCAAoC,CAClD,MAAqB,EACrB,QAAgB,EAChB,SAAgC,EAChC,MAAsB,EACtB,QAAiC,EACjC,aAAuD;IAEvD,MAAM,QAAQ,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACvC,yEAAyE;QACzE,+EAA+E;QAC/E,8EAA8E;QAC9E,8EAA8E;QAC9E,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,KAAK,kBAAkB,CAAC;QAClD,MAAM,cAAc,GAAG,UAAU;YAC/B,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,kBAAkB,IAAI,EAAE,EAAE;YACzC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;QACd,QAAQ,CAAC,IAAI,CACX,eAAe,CAAC,aAAa,CAC3B,EAAE,CAAC,IAAI,EACP,EAAE,CAAC,IAAI,EACP,cAAc,EACd,EAAE,CAAC,UAAU,EACb,UAAU;YACR,CAAC,CAAC;gBACE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC1C,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,gBAAgB,EAAE,EAAE,CAAC,kBAAkB;aACxC;YACH,CAAC,CAAC,SAAS,CACd,CACF,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,uBAAuB,CACzC,MAAM,EACN,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EACrD,MAAM,CACP,CAAC;IACF,OAAO,0BAA0B,CAAC;QAChC,QAAQ;QACR,QAAQ;QACR,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;QAC5D,WAAW;QACX,SAAS;QACT,MAAM;QACN,QAAQ;QACR,aAAa;KACd,CAAC,CAAC;AACL,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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAIH,uEAAuE;AACvE,MAAM,CAAN,IAAY,iBA4CX;AA5CD,WAAY,iBAAiB;IAC3B,8EAA8E;IAC9E,kEAA6C,CAAA;IAC7C,2EAA2E;IAC3E,+DAA0C,CAAA;IAC1C,mFAAmF;IACnF,sEAAiD,CAAA;IACjD,mFAAmF;IACnF,uDAAkC,CAAA;IAClC,uEAAuE;IACvE,0EAAqD,CAAA;IACrD,wEAAwE;IACxE,0DAAqC,CAAA;IACrC;;;;;OAKG;IACH,2EAAsD,CAAA;IACtD,qFAAqF;IACrF,oEAA+C,CAAA;IAC/C,4FAA4F;IAC5F,wDAAmC,CAAA;IACnC,gFAAgF;IAChF,wDAAmC,CAAA;IACnC,+DAA+D;IAC/D,8DAAyC,CAAA;IACzC,6EAA6E;IAC7E,qDAAgC,CAAA;IAChC,wFAAwF;IACxF,wCAAmB,CAAA;IACnB,yFAAyF;IACzF,4EAAuD,CAAA;IACvD,gFAAgF;IAChF,oEAA+C,CAAA;IAC/C,kFAAkF;IAClF,4EAAuD,CAAA;IACvD,yFAAyF;IACzF,kEAA6C,CAAA;IAC7C,0DAA0D;IAC1D,+DAA0C,CAAA;IAC1C,qFAAqF;IACrF,wCAAmB,CAAA;AACrB,CAAC,EA5CW,iBAAiB,KAAjB,iBAAiB,QA4C5B;AAsBD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAkC;IACjE,6EAA6E;IAC7E;QACE,IAAI,EAAE,iBAAiB,CAAC,mBAAmB;QAC3C,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,qDAAqD,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,SAAS,EAAE,KAAK;KACjB;IACD;QACE,IAAI,EAAE,iBAAiB,CAAC,kBAAkB;QAC1C,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oFAAoF,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1G,SAAS,EAAE,KAAK;KACjB;IACD;QACE,IAAI,EAAE,iBAAiB,CAAC,qBAAqB;QAC7C,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,SAAS,EAAE,KAAK;KACjB;IAED,6EAA6E;IAC7E;QACE,IAAI,EAAE,iBAAiB,CAAC,cAAc;QACtC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,SAAS,EAAE,KAAK;KACjB;IACD;QACE,IAAI,EAAE,iBAAiB,CAAC,uBAAuB;QAC/C,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,uEAAuE,CAAC;QAC9F,SAAS,EAAE,KAAK;KACjB;IACD;QACE,IAAI,EAAE,iBAAiB,CAAC,eAAe;QACvC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,uFAAuF,CAAC;QAC9G,SAAS,EAAE,KAAK;KACjB;IACD;QACE,2EAA2E;QAC3E,yEAAyE;QACzE,uEAAuE;QACvE,IAAI,EAAE,iBAAiB,CAAC,uBAAuB;QAC/C,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,uEAAuE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7F,SAAS,EAAE,KAAK;KACjB;IACD;QACE,IAAI,EAAE,iBAAiB,CAAC,oBAAoB;QAC5C,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kCAAkC,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,SAAS,EAAE,KAAK;KACjB;IAED,6EAA6E;IAC7E;QACE,0EAA0E;QAC1E,IAAI,EAAE,iBAAiB,CAAC,cAAc;QACtC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,SAAS,EAAE,IAAI;KAChB;IACD;QACE,gFAAgF;QAChF,IAAI,EAAE,iBAAiB,CAAC,cAAc;QACtC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,SAAS,EAAE,KAAK;KACjB;IACD;QACE,8DAA8D;QAC9D,IAAI,EAAE,iBAAiB,CAAC,iBAAiB;QACzC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,2CAA2C,CAAC;QAClE,SAAS,EAAE,KAAK;KACjB;IAED,6EAA6E;IAC7E;QACE,IAAI,EAAE,iBAAiB,CAAC,oBAAoB;QAC5C,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,8DAA8D,CAAC;QACrF,SAAS,EAAE,KAAK;KACjB;IACD;QACE,IAAI,EAAE,iBAAiB,CAAC,wBAAwB;QAChD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,iFAAiF,CAAC;QACxG,SAAS,EAAE,KAAK;KACjB;IAED,6EAA6E;IAC7E;QACE,IAAI,EAAE,iBAAiB,CAAC,wBAAwB;QAChD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kCAAkC,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,SAAS,EAAE,KAAK;KACjB;IACD;QACE,IAAI,EAAE,iBAAiB,CAAC,mBAAmB;QAC3C,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,SAAS,EAAE,KAAK;KACjB;IAED,6EAA6E;IAC7E;QACE,0EAA0E;QAC1E,4EAA4E;QAC5E,IAAI,EAAE,iBAAiB,CAAC,OAAO;QAC/B,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CACX,gGAAgG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1G,SAAS,EAAE,KAAK;KACjB;IACD;QACE,2EAA2E;QAC3E,8DAA8D;QAC9D,IAAI,EAAE,iBAAiB,CAAC,aAAa;QACrC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CACX,CAAC,kCAAkC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,8CAA8C,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtG,gCAAgC,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC,mCAAmC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,SAAS,EAAE,IAAI;KAChB;IACD;QACE,0EAA0E;QAC1E,qDAAqD;QACrD,IAAI,EAAE,iBAAiB,CAAC,kBAAkB;QAC1C,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kCAAkC,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,SAAS,EAAE,KAAK;KACjB;CACO,CAAC;AAUX;;;;;;;;;;;;GAYG;AACH,MAAM,sBAAsB,GAAmC,IAAI,GAAG,CAAC;IACrE,iBAAiB,CAAC,OAAO;IACzB,iBAAiB,CAAC,kBAAkB;CACrC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAuB,EAAE,SAAkB;IAC7E,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,CAAC;IACzD,OAAO,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAkD;IACvF,SAAS,EAAE;QACT,QAAQ,EAAE,sDAAsD;QAChE,KAAK,EACH,kFAAkF;YAClF,2CAA2C;KAC9C;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,yCAAyC;QACnD,KAAK,EACH,+EAA+E;YAC/E,wDAAwD;KAC3D;CACF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,MAAM,GAAG,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAEnF,KAAK,MAAM,KAAK,IAAI,oBAAoB,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,SAAS;QAChC,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,WAAW,EAAE,0BAA0B,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;SAChG,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,iBAAiB,CAAC,OAAO;QAC/B,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,0BAA0B,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK;KACrG,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC"}
|
|
@@ -133,7 +133,7 @@ export interface RuntimeUpdatedInput {
|
|
|
133
133
|
*/
|
|
134
134
|
export declare function buildRuntimeUpdatedEvent(input: RuntimeUpdatedInput): EmittableEvent<typeof EVENT_NAME.runtimeUpdated>;
|
|
135
135
|
/** `runtime.paused` — a risk gate tripped a running→paused transition. WARN. */
|
|
136
|
-
export declare function buildRuntimePausedEvent(gateId: string | undefined, gateName: string | undefined, reason: string | undefined, address?: string): EmittableEvent<typeof EVENT_NAME.runtimePaused>;
|
|
136
|
+
export declare function buildRuntimePausedEvent(gateId: string | undefined, gateName: string | undefined, reason: string | undefined, address?: string, metrics?: Readonly<Record<string, unknown>> | null): EmittableEvent<typeof EVENT_NAME.runtimePaused>;
|
|
137
137
|
/** `runtime.resumed` — a previously-tripped risk gate cleared, re-arming a paused→running transition. */
|
|
138
138
|
export declare function buildRuntimeResumedEvent(gateId: string | undefined, gateName: string | undefined, address?: string): EmittableEvent<typeof EVENT_NAME.runtimeResumed>;
|
|
139
139
|
export interface QueueBackpressureInput {
|
|
@@ -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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"}
|
|
@@ -247,8 +247,13 @@ export function buildRuntimeUpdatedEvent(input) {
|
|
|
247
247
|
};
|
|
248
248
|
}
|
|
249
249
|
/** `runtime.paused` — a risk gate tripped a running→paused transition. WARN. */
|
|
250
|
-
export function buildRuntimePausedEvent(gateId, gateName, reason, address) {
|
|
250
|
+
export function buildRuntimePausedEvent(gateId, gateName, reason, address, metrics) {
|
|
251
251
|
const label = gateName ?? gateId ?? "gate";
|
|
252
|
+
// The gate's own metrics, not a re-read. Only finite numbers are stamped; any other value is dropped.
|
|
253
|
+
const num = (key) => {
|
|
254
|
+
const v = metrics?.[key];
|
|
255
|
+
return typeof v === "number" && Number.isFinite(v) ? v : undefined;
|
|
256
|
+
};
|
|
252
257
|
return {
|
|
253
258
|
name: EVENT_NAME.runtimePaused,
|
|
254
259
|
level: "warn",
|
|
@@ -257,6 +262,10 @@ export function buildRuntimePausedEvent(gateId, gateName, reason, address) {
|
|
|
257
262
|
"senpi.strategy.address": address,
|
|
258
263
|
"senpi.gate.id": gateId,
|
|
259
264
|
"senpi.gate.name": gateName,
|
|
265
|
+
"senpi.gate.entries_today": num("entriesToday"),
|
|
266
|
+
"senpi.gate.max_entries_per_day": num("maxEntriesPerDay"),
|
|
267
|
+
"senpi.gate.open_entries_today": num("openEntriesToday"),
|
|
268
|
+
"senpi.gate.closed_entries_today": num("closedEntriesToday"),
|
|
260
269
|
}),
|
|
261
270
|
};
|
|
262
271
|
}
|