@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
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { type MutateConfigFile } from "./gateway-restart.js";
|
|
2
|
+
import type { IdleGateReader } from "./idle-gate.js";
|
|
1
3
|
import { type AutoUpdateCheckNowResult, type AutoUpdateConfig, type AutoUpdateSnapshot } from "./types.js";
|
|
4
|
+
import { type InstallResultsTelemetry } from "./install-results.js";
|
|
2
5
|
import { type VersionSource } from "./version-source.js";
|
|
3
6
|
import { type EventName } from "../../utils/event-catalog.js";
|
|
4
7
|
import type { EventOptions, LogLevel } from "../../utils/logger.js";
|
|
@@ -14,6 +17,31 @@ interface LoggerLike {
|
|
|
14
17
|
error(...args: unknown[]): void;
|
|
15
18
|
event<N extends EventName>(name: N, level: LogLevel, opts: EventOptions<N>): void;
|
|
16
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* How long a requested restart may take to load its target before the
|
|
22
|
+
* awaiting-restart state is treated as failed (the 3.0.171 latch fix). A 10.x
|
|
23
|
+
* restart-to-apply measured about 71 s on Box A, with starts up to 93 s; 30 min
|
|
24
|
+
* leaves room for the gateway's own deferral (forced after 300 s) and a slow
|
|
25
|
+
* offline install.
|
|
26
|
+
*/
|
|
27
|
+
export declare const RESTART_LOAD_TIMEOUT_MS: number;
|
|
28
|
+
/**
|
|
29
|
+
* Restarts requested for one target that may fail to load before the box
|
|
30
|
+
* stops trying that version and waits for a newer one. Bounds the loop of a
|
|
31
|
+
* version that can never install (a blocked scan, a yanked version, a wrapper
|
|
32
|
+
* without the marker step): without it an idle box would restart about every
|
|
33
|
+
* 80 min forever.
|
|
34
|
+
*/
|
|
35
|
+
export declare const MAX_APPLY_ATTEMPTS = 3;
|
|
36
|
+
/**
|
|
37
|
+
* How often a 10.x box that is `pending-idle` re-reads its apply gate (the
|
|
38
|
+
* spread time and the idle gate) between registry polls. The idle gate has no
|
|
39
|
+
* change notification, so the change is caught by this re-read; when the gate
|
|
40
|
+
* opens, an ordinary check runs at once instead of up to one poll interval
|
|
41
|
+
* (60 min by default) later. The re-read itself is local: no registry call,
|
|
42
|
+
* no `onTickComplete`.
|
|
43
|
+
*/
|
|
44
|
+
export declare const PENDING_IDLE_RECHECK_MS: number;
|
|
17
45
|
/** Construction-time options for {@link AutoUpdateCoordinator}. */
|
|
18
46
|
export interface AutoUpdateCoordinatorOptions {
|
|
19
47
|
enabled: boolean;
|
|
@@ -42,6 +70,44 @@ export interface AutoUpdateCoordinatorOptions {
|
|
|
42
70
|
* be added without changing the auto-update internals.
|
|
43
71
|
*/
|
|
44
72
|
onTickComplete?: () => Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* The version the gateway actually loaded (the plugin version at
|
|
75
|
+
* registration). "Applied" is decided only from this, never from the
|
|
76
|
+
* persisted `lastAppliedVersion` alone. Defaults to `currentVersion`.
|
|
77
|
+
*/
|
|
78
|
+
loadedVersion?: string;
|
|
79
|
+
/**
|
|
80
|
+
* OpenClaw host >= 2026.8.1 (R1 `getOpenClawHost().modern`). Switches the
|
|
81
|
+
* apply path to restart-to-apply: no in-process install; wait for the spread
|
|
82
|
+
* offset and an idle moment, write the install marker, and restart through
|
|
83
|
+
* `mutateConfigFile`.
|
|
84
|
+
*/
|
|
85
|
+
modernHost?: boolean;
|
|
86
|
+
/** Modern host: `api.runtime.config.mutateConfigFile`. */
|
|
87
|
+
mutateConfigFile?: MutateConfigFile;
|
|
88
|
+
/** Modern host: live config read (R1 `readLiveHostConfig`). */
|
|
89
|
+
readLiveConfig?: () => unknown;
|
|
90
|
+
/** Modern host: user-activity gate. Without one the box counts as idle (the gateway still defers the restart past running replies). */
|
|
91
|
+
idleGate?: IdleGateReader;
|
|
92
|
+
/** Modern host: stable box identity for the spread offset (the user MID, else a stable instance id). */
|
|
93
|
+
mid?: string;
|
|
94
|
+
/** Clock, for tests. Defaults to `Date.now`. */
|
|
95
|
+
now?: () => number;
|
|
96
|
+
/** `[0, 1)` source for the jitter, for tests. Defaults to `Math.random`. */
|
|
97
|
+
rand?: () => number;
|
|
98
|
+
/** Modern host: `<OPENCLAW_STATE_DIR>/senpi-state/runtime-update.json` (see `update-marker.ts`). */
|
|
99
|
+
updateMarkerPath?: string;
|
|
100
|
+
/**
|
|
101
|
+
* Modern host: `<OPENCLAW_STATE_DIR>/senpi-state/runtime-update-results.json`, the wrapper's
|
|
102
|
+
* install outcomes (see `install-results.ts`). Read once per {@link AutoUpdateCoordinator.start},
|
|
103
|
+
* whether or not auto-update is enabled.
|
|
104
|
+
*/
|
|
105
|
+
installResultsPath?: string;
|
|
106
|
+
/**
|
|
107
|
+
* The emit path the install-results report waits for and flushes (the plugin's OTel SDK).
|
|
108
|
+
* Omitted (tests), events are emitted at once.
|
|
109
|
+
*/
|
|
110
|
+
installResultsTelemetry?: InstallResultsTelemetry;
|
|
45
111
|
}
|
|
46
112
|
/**
|
|
47
113
|
* Central lifecycle manager for the plugin auto-update feature.
|
|
@@ -65,6 +131,8 @@ export declare class AutoUpdateCoordinator {
|
|
|
65
131
|
private readonly versionSource;
|
|
66
132
|
private readonly runUpdateCommand;
|
|
67
133
|
private timer;
|
|
134
|
+
/** 10.x `pending-idle` gate re-read; see {@link PENDING_IDLE_RECHECK_MS}. */
|
|
135
|
+
private idleRecheckTimer;
|
|
68
136
|
private running;
|
|
69
137
|
private stopped;
|
|
70
138
|
private runToken;
|
|
@@ -74,9 +142,64 @@ export declare class AutoUpdateCoordinator {
|
|
|
74
142
|
/** Spec the last resolve used. Seeded in the constructor, so the snapshot
|
|
75
143
|
* reports a line before the first tick. */
|
|
76
144
|
private updateSpec;
|
|
145
|
+
/** Why the modern path is still waiting; reset every tick. See {@link AutoUpdateSnapshot.pendingBlockers}. */
|
|
146
|
+
private pendingBlockers;
|
|
147
|
+
private readonly now;
|
|
148
|
+
private readonly rand;
|
|
149
|
+
private readonly loadedVersion;
|
|
150
|
+
/**
|
|
151
|
+
* 10.x: `<version>|<sorted blockers>` of the last `auto_update.deferred`, so the event fires on
|
|
152
|
+
* entering `pending-idle` and on a change only. Cleared when a tick ends outside `pending-idle` or fails.
|
|
153
|
+
* In memory: a new gateway process reports a wait that is still on once.
|
|
154
|
+
*/
|
|
155
|
+
private lastDeferredKey;
|
|
156
|
+
/** The install-results report the last {@link start} began; see {@link whenInstallResultsReported}. */
|
|
157
|
+
private installResultsReport;
|
|
77
158
|
constructor(options: AutoUpdateCoordinatorOptions);
|
|
78
159
|
/** Run preflight checks, load persisted state, and schedule the first version poll. */
|
|
79
160
|
start(): Promise<void>;
|
|
161
|
+
/**
|
|
162
|
+
* Startup half of the latch fix: compare what this process loaded with what
|
|
163
|
+
* a previous process asked for.
|
|
164
|
+
*
|
|
165
|
+
* When the loaded version reaches the requested restart's target, the update
|
|
166
|
+
* took effect: the pending restart and pending update are cleared, a stale
|
|
167
|
+
* install marker is removed, and on a 10.x host `auto_update.applied` fires
|
|
168
|
+
* (nothing was installed before this boot there). On 5.x `applied` already
|
|
169
|
+
* fired when the restart was requested, so it is not counted twice.
|
|
170
|
+
*
|
|
171
|
+
* A target the loaded version has not reached is left for the tick, which
|
|
172
|
+
* expires it once the request is older than {@link RESTART_LOAD_TIMEOUT_MS}.
|
|
173
|
+
*
|
|
174
|
+
* @returns `updated:<v>` when a requested update is now loaded, else `undefined`.
|
|
175
|
+
*/
|
|
176
|
+
private reconcileLoadedVersion;
|
|
177
|
+
/**
|
|
178
|
+
* Resolves when the install-results report begun by the last {@link start} has finished.
|
|
179
|
+
* `start` does not wait for it: the report waits for the OTel SDK first.
|
|
180
|
+
*/
|
|
181
|
+
whenInstallResultsReported(): Promise<void>;
|
|
182
|
+
/**
|
|
183
|
+
* 10.x: start reporting the wrapper's install outcomes in the background. `liveState` is the
|
|
184
|
+
* running coordinator's state (the ids are saved with it); `null` when auto-update is
|
|
185
|
+
* disabled, which loads only the ids and patches only them.
|
|
186
|
+
*/
|
|
187
|
+
private startInstallResultsReport;
|
|
188
|
+
/**
|
|
189
|
+
* One `auto_update.install_result` per entry not reported before (`install-results.ts`), then
|
|
190
|
+
* the file is deleted. Runs from {@link start}, which only the gateway's plugin service calls,
|
|
191
|
+
* so a CLI process never consumes the file. Never throws: telemetry must not break the
|
|
192
|
+
* coordinator.
|
|
193
|
+
*/
|
|
194
|
+
private reportInstallResults;
|
|
195
|
+
private emitInstallResult;
|
|
196
|
+
/**
|
|
197
|
+
* 10.x: the box waits (`pending-idle:<v>`). `auto_update.deferred` on entering the wait and when
|
|
198
|
+
* the target or the sorted blocker set changes; an unchanged re-check or poll is silent.
|
|
199
|
+
*/
|
|
200
|
+
private noteDeferred;
|
|
201
|
+
/** Remove the install marker; a failure is logged, never thrown (the wrapper deletes it too). */
|
|
202
|
+
private clearMarkerQuietly;
|
|
80
203
|
/** Cancel the next scheduled poll and prevent in-flight ticks from rescheduling. */
|
|
81
204
|
stop(): Promise<void>;
|
|
82
205
|
/** Return the latest point-in-time snapshot for health/state gateway RPCs. */
|
|
@@ -99,6 +222,21 @@ export declare class AutoUpdateCoordinator {
|
|
|
99
222
|
private scheduleNext;
|
|
100
223
|
/** Single poll cycle: run the check, persist state, and schedule the next cycle. */
|
|
101
224
|
private tick;
|
|
225
|
+
/** Re-read the apply gate of a `pending-idle` box after {@link PENDING_IDLE_RECHECK_MS}. */
|
|
226
|
+
private scheduleIdleRecheck;
|
|
227
|
+
private clearIdleRecheck;
|
|
228
|
+
/**
|
|
229
|
+
* Run a check now when the gate that held the pending update has opened,
|
|
230
|
+
* else re-read it again later. A check already in flight re-arms this
|
|
231
|
+
* itself when it ends `pending-idle`.
|
|
232
|
+
*/
|
|
233
|
+
private recheckPendingIdle;
|
|
234
|
+
/**
|
|
235
|
+
* The 10.x apply gate: wait for `eligibleAt` (blocker `spread`), then for an
|
|
236
|
+
* idle box, unless {@link mustForce} applies and every blocker is one the
|
|
237
|
+
* forced restart may override.
|
|
238
|
+
*/
|
|
239
|
+
private applyGate;
|
|
102
240
|
/**
|
|
103
241
|
* Emit a catalogued `auto_update.*` event, guarded so neither a throwing sink nor a bad
|
|
104
242
|
* attribute shape can disturb the tick — telemetry must never break auto-update itself.
|
|
@@ -112,6 +250,69 @@ export declare class AutoUpdateCoordinator {
|
|
|
112
250
|
private resolveUpdateSpec;
|
|
113
251
|
/** Core update logic: fetch latest version, classify, and take action. */
|
|
114
252
|
private runTick;
|
|
253
|
+
/**
|
|
254
|
+
* Whether the restart requested for the persisted target may still land:
|
|
255
|
+
* its request time (the pending restart's, else the last restart trigger,
|
|
256
|
+
* else the last install) is under {@link RESTART_LOAD_TIMEOUT_MS} old. With
|
|
257
|
+
* no time on record the persisted version is not trusted at all.
|
|
258
|
+
*/
|
|
259
|
+
private restartStillPending;
|
|
260
|
+
/**
|
|
261
|
+
* The 5.x latch, as before R2: once this flow installed `latest` (an
|
|
262
|
+
* install or restart time is on record), the box waits for a restart and
|
|
263
|
+
* never runs the in-process install and config-bump restart for that
|
|
264
|
+
* version again, however long it waits. 5.x has no idle gate, so a retry
|
|
265
|
+
* would restart the gateway over an order call or an open approval. A
|
|
266
|
+
* restart trigger that threw is latched too (the warning asks for a manual
|
|
267
|
+
* restart). A persisted applied version with no time at all is still not
|
|
268
|
+
* trusted. 10.x expires its wait after 30 min instead: its retries are
|
|
269
|
+
* idle-gated.
|
|
270
|
+
*/
|
|
271
|
+
private awaitingManualRestart;
|
|
272
|
+
/**
|
|
273
|
+
* {@link MAX_APPLY_ATTEMPTS} restarts for `latest` did not load it. Stop
|
|
274
|
+
* trying this version: no install and no restart until a newer one ships
|
|
275
|
+
* (or a restart loads it some other way). Reported, not thrown, so the poll
|
|
276
|
+
* keeps its normal cadence.
|
|
277
|
+
*/
|
|
278
|
+
private handleParkedUpdate;
|
|
279
|
+
/**
|
|
280
|
+
* The requested update did not load. Drop the awaiting-restart state and the
|
|
281
|
+
* marker, report `auto_update.apply_failed`, and fail this tick (so the
|
|
282
|
+
* backoff applies). The next tick starts over: a new install and restart on
|
|
283
|
+
* 5.x, a new idle-gated restart request on 10.x. The pending update keeps
|
|
284
|
+
* its eligibility time, so the box does not wait out its spread again.
|
|
285
|
+
*
|
|
286
|
+
* @throws Always.
|
|
287
|
+
*/
|
|
288
|
+
private expireUnloadedUpdate;
|
|
289
|
+
/**
|
|
290
|
+
* The OpenClaw 10.x apply path (restart-to-apply). Nothing is installed in
|
|
291
|
+
* this process: 10.10 refuses `plugins update` while the gateway runs.
|
|
292
|
+
*
|
|
293
|
+
* 1. Record the pending update once per episode (`firstSeenAt`,
|
|
294
|
+
* `eligibleAt` = first seen + spread offset + jitter).
|
|
295
|
+
* 2. Before `eligibleAt`, wait (`pending-idle:<v>`, blocker `spread`). After
|
|
296
|
+
* it, continue only when the idle gate says idle, or when
|
|
297
|
+
* {@link mustForce} (24 h past eligibility, inside 03:00–05:00 UTC).
|
|
298
|
+
* 3. Build the exact `<name>@<version>` spec, check restart capability,
|
|
299
|
+
* write the marker, and request the restart through `mutateConfigFile`.
|
|
300
|
+
* 4. A failure at any step clears the marker, reports
|
|
301
|
+
* `auto_update.restart_failed` and fails the tick (backoff; `checkNow`
|
|
302
|
+
* answers `failed`). Waiting for the spread or an idle box is not a failure.
|
|
303
|
+
*/
|
|
304
|
+
private runRestartToApply;
|
|
305
|
+
/** The idle gate's answer; a throwing gate counts as busy. */
|
|
306
|
+
private readIdle;
|
|
307
|
+
/**
|
|
308
|
+
* Clear the marker, report `auto_update.restart_failed` for the 10.x path
|
|
309
|
+
* (snapshot degraded), and fail the tick: no restart was requested, so the
|
|
310
|
+
* tick must not count as a success. The throw makes `tick()` back off and
|
|
311
|
+
* `checkNow()` answer `failed`.
|
|
312
|
+
*
|
|
313
|
+
* @throws Always, with `reason`.
|
|
314
|
+
*/
|
|
315
|
+
private reportModernRestartFailure;
|
|
115
316
|
/**
|
|
116
317
|
* `currentVersion` is a compile-time constant frozen for the life of the
|
|
117
318
|
* process, so it cannot reflect an install that already happened this
|
|
@@ -124,6 +325,8 @@ export declare class AutoUpdateCoordinator {
|
|
|
124
325
|
* so this branch stops being reached on its own.
|
|
125
326
|
*/
|
|
126
327
|
private handleAlreadyAppliedAwaitingRestart;
|
|
328
|
+
/** OpenClaw 10.x refuses `plugins update` while the gateway runs, so a manual instruction says so. */
|
|
329
|
+
private manualUpdateSuffix;
|
|
127
330
|
private isAllowedByPolicy;
|
|
128
331
|
private handleMajorAvailable;
|
|
129
332
|
private logUpdateAvailable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/coordinator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/coordinator.ts"],"names":[],"mappings":"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"}
|