@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,36 @@
|
|
|
1
|
+
/** An unended money call is dropped after 15 min (approval timeout plus the MCP call deadline, with headroom). */
|
|
2
|
+
export declare const MONEY_CALL_STALE_MS: number;
|
|
3
|
+
/** Open money calls, keyed by tool call id (or run + name when the host gives no id). */
|
|
4
|
+
export declare class MoneyCallTracker {
|
|
5
|
+
private readonly staleMs;
|
|
6
|
+
private readonly open;
|
|
7
|
+
private seq;
|
|
8
|
+
/**
|
|
9
|
+
* @param staleMs - Age at which an unended call is dropped.
|
|
10
|
+
*/
|
|
11
|
+
constructor(staleMs?: number);
|
|
12
|
+
/** Records a call under `key`. A key already open gets a numbered twin, so neither is lost. */
|
|
13
|
+
begin(key: string, now: number): void;
|
|
14
|
+
/** Ends the oldest open call under `key` (or its numbered twins). Unknown keys are ignored. */
|
|
15
|
+
end(key: string): void;
|
|
16
|
+
/** Ends every open call whose key starts with `prefix` (a dispatcher's inner calls). */
|
|
17
|
+
endPrefix(prefix: string): void;
|
|
18
|
+
/** Calls still open at `now`; stale ones are dropped first. */
|
|
19
|
+
count(now: number): number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Feeds `tracker` from `before_tool_call` / `after_tool_call` for the tools
|
|
23
|
+
* `isMoneyTool` accepts (bare names; the runtime passes `isMoneyCallTool`,
|
|
24
|
+
* the approval manifest's trade tools plus `ORDER_CALL_TOOLS`).
|
|
25
|
+
*/
|
|
26
|
+
export declare function registerMoneyCallHooks(params: {
|
|
27
|
+
api: {
|
|
28
|
+
on(hookName: string, handler: (...args: unknown[]) => unknown, opts?: {
|
|
29
|
+
priority?: number;
|
|
30
|
+
}): void;
|
|
31
|
+
};
|
|
32
|
+
tracker: MoneyCallTracker;
|
|
33
|
+
isMoneyTool: (bare: string) => boolean;
|
|
34
|
+
now?: () => number;
|
|
35
|
+
}): void;
|
|
36
|
+
//# sourceMappingURL=money-call-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"money-call-tracker.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/money-call-tracker.ts"],"names":[],"mappings":"AAuBA,kHAAkH;AAClH,eAAO,MAAM,mBAAmB,QAAc,CAAC;AAE/C,yFAAyF;AACzF,qBAAa,gBAAgB;IAOf,OAAO,CAAC,QAAQ,CAAC,OAAO;IANpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,OAAO,CAAC,GAAG,CAAK;IAEhB;;OAEG;gBAC0B,OAAO,SAAsB;IAE1D,+FAA+F;IAC/F,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKrC,+FAA+F;IAC/F,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAUtB,wFAAwF;IACxF,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM/B,+DAA+D;IAC/D,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;CAM3B;AA2BD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,GAAG,EAAE;QAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,CAAC;IAC5G,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,IAAI,CA8BP"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Money calls in flight on every route, for the self-update idle gate (R2).
|
|
3
|
+
*
|
|
4
|
+
* `senpiOrderCallsInFlight` (`senpi/client.ts`) counts only the runtime's own
|
|
5
|
+
* in-process MCP calls. The agent's `senpi__*` calls go through the gateway's
|
|
6
|
+
* MCP client, directly or through the 10.x dispatcher, and that counter never
|
|
7
|
+
* sees them. Every one of those calls passes `before_tool_call` and
|
|
8
|
+
* `after_tool_call`, so the hooks are where they are counted: a call starts at
|
|
9
|
+
* `before_tool_call` (approval wait included) and ends at its
|
|
10
|
+
* `after_tool_call`, or at its 10.x dispatcher's `after_tool_call` when the
|
|
11
|
+
* inner one never fires (the same case `span-hooks.ts` closes inner spans
|
|
12
|
+
* for: the dispatcher awaited the inner call, so it is over). An entry with
|
|
13
|
+
* no end is dropped after {@link MONEY_CALL_STALE_MS}, so a lost hook cannot
|
|
14
|
+
* pin the box busy.
|
|
15
|
+
*
|
|
16
|
+
* Handlers return nothing and never throw: this is an observer, not a gate.
|
|
17
|
+
*/
|
|
18
|
+
import { matchSenpiTool } from "../../approvals/tool-approval-gate.js";
|
|
19
|
+
import { sanitizeToolCallIdPart } from "../../telemetry/spans/span-hooks.js";
|
|
20
|
+
/** The 10.x tool-search dispatchers that run an inner tool (`dispatch_action` on 10.10, `tool_call` on 10.4). */
|
|
21
|
+
const DISPATCHER_TOOLS = new Set(["dispatch_action", "tool_call"]);
|
|
22
|
+
/** An unended money call is dropped after 15 min (approval timeout plus the MCP call deadline, with headroom). */
|
|
23
|
+
export const MONEY_CALL_STALE_MS = 15 * 60_000;
|
|
24
|
+
/** Open money calls, keyed by tool call id (or run + name when the host gives no id). */
|
|
25
|
+
export class MoneyCallTracker {
|
|
26
|
+
staleMs;
|
|
27
|
+
open = new Map();
|
|
28
|
+
seq = 0;
|
|
29
|
+
/**
|
|
30
|
+
* @param staleMs - Age at which an unended call is dropped.
|
|
31
|
+
*/
|
|
32
|
+
constructor(staleMs = MONEY_CALL_STALE_MS) {
|
|
33
|
+
this.staleMs = staleMs;
|
|
34
|
+
}
|
|
35
|
+
/** Records a call under `key`. A key already open gets a numbered twin, so neither is lost. */
|
|
36
|
+
begin(key, now) {
|
|
37
|
+
const k = this.open.has(key) ? `${key}#${++this.seq}` : key;
|
|
38
|
+
this.open.set(k, now);
|
|
39
|
+
}
|
|
40
|
+
/** Ends the oldest open call under `key` (or its numbered twins). Unknown keys are ignored. */
|
|
41
|
+
end(key) {
|
|
42
|
+
if (this.open.delete(key))
|
|
43
|
+
return;
|
|
44
|
+
for (const k of this.open.keys()) {
|
|
45
|
+
if (k.startsWith(`${key}#`)) {
|
|
46
|
+
this.open.delete(k);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Ends every open call whose key starts with `prefix` (a dispatcher's inner calls). */
|
|
52
|
+
endPrefix(prefix) {
|
|
53
|
+
for (const k of [...this.open.keys()]) {
|
|
54
|
+
if (k.startsWith(prefix))
|
|
55
|
+
this.open.delete(k);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** Calls still open at `now`; stale ones are dropped first. */
|
|
59
|
+
count(now) {
|
|
60
|
+
for (const [k, startedAt] of this.open) {
|
|
61
|
+
if (now - startedAt >= this.staleMs)
|
|
62
|
+
this.open.delete(k);
|
|
63
|
+
}
|
|
64
|
+
return this.open.size;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function rec(value) {
|
|
68
|
+
return value && typeof value === "object" ? value : undefined;
|
|
69
|
+
}
|
|
70
|
+
function nonEmpty(value) {
|
|
71
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The bare Senpi tool a hook event names, when it is a money tool; else `null`.
|
|
75
|
+
*/
|
|
76
|
+
function moneyToolOf(event, isMoneyTool) {
|
|
77
|
+
const bare = matchSenpiTool(rec(event)?.toolName ?? rec(event)?.name);
|
|
78
|
+
return bare && isMoneyTool(bare) ? bare : null;
|
|
79
|
+
}
|
|
80
|
+
/** Tool call id, else `<session>:<run>:<tool>`. */
|
|
81
|
+
function callKey(event, ctx, bare) {
|
|
82
|
+
const e = rec(event);
|
|
83
|
+
const c = rec(ctx);
|
|
84
|
+
const id = nonEmpty(e?.toolCallId) ?? nonEmpty(c?.toolCallId);
|
|
85
|
+
if (id)
|
|
86
|
+
return `id:${id}`;
|
|
87
|
+
return `run:${nonEmpty(c?.sessionKey) ?? ""}:${nonEmpty(e?.runId) ?? nonEmpty(c?.runId) ?? ""}:${bare}`;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Feeds `tracker` from `before_tool_call` / `after_tool_call` for the tools
|
|
91
|
+
* `isMoneyTool` accepts (bare names; the runtime passes `isMoneyCallTool`,
|
|
92
|
+
* the approval manifest's trade tools plus `ORDER_CALL_TOOLS`).
|
|
93
|
+
*/
|
|
94
|
+
export function registerMoneyCallHooks(params) {
|
|
95
|
+
const { api, tracker, isMoneyTool } = params;
|
|
96
|
+
const now = params.now ?? Date.now;
|
|
97
|
+
api.on("before_tool_call", (event, ctx) => {
|
|
98
|
+
try {
|
|
99
|
+
const bare = moneyToolOf(event, isMoneyTool);
|
|
100
|
+
if (bare)
|
|
101
|
+
tracker.begin(callKey(event, ctx, bare), now());
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Never disturb a tool call.
|
|
105
|
+
}
|
|
106
|
+
return undefined;
|
|
107
|
+
});
|
|
108
|
+
api.on("after_tool_call", (event, ctx) => {
|
|
109
|
+
try {
|
|
110
|
+
const e = rec(event);
|
|
111
|
+
const name = nonEmpty(e?.toolName) ?? nonEmpty(e?.name);
|
|
112
|
+
const outerId = nonEmpty(e?.toolCallId) ?? nonEmpty(rec(ctx)?.toolCallId);
|
|
113
|
+
// The inner call a 10.x dispatcher runs is `tool_call:<sanitized outer id>:…`
|
|
114
|
+
// (10.10 `tool-search-runtime.ts:406-410`); a late inner after_tool_call is then a no-op.
|
|
115
|
+
if (name && DISPATCHER_TOOLS.has(name) && outerId) {
|
|
116
|
+
tracker.endPrefix(`id:tool_call:${sanitizeToolCallIdPart(outerId)}:`);
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
const bare = moneyToolOf(event, isMoneyTool);
|
|
120
|
+
if (bare)
|
|
121
|
+
tracker.end(callKey(event, ctx, bare));
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Never disturb a tool call.
|
|
125
|
+
}
|
|
126
|
+
return undefined;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=money-call-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"money-call-tracker.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/money-call-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feeds the self-update {@link UpdateIdleGate} from OpenClaw hooks and agent
|
|
3
|
+
* events (R2). Kept apart from `idle-gate.ts` so the gate itself stays pure
|
|
4
|
+
* and host-neutral.
|
|
5
|
+
*
|
|
6
|
+
* Sources, as on OpenClaw 2026.10.10-beta.3:
|
|
7
|
+
* - `before_prompt_build` hook context (`PluginHookAgentContext`: `runId`,
|
|
8
|
+
* `sessionKey`, `trigger`, `inputProvenance`) classifies a run; lifecycle
|
|
9
|
+
* `start` events carry no trigger (`src/plugins/hook-agent-context.types.ts`);
|
|
10
|
+
* - `api.runtime.events.onAgentEvent` lifecycle `start` / `end` / `error`
|
|
11
|
+
* (`src/infra/agent-events.ts`) and the `agent_end` hook end a run;
|
|
12
|
+
* - `message_received` (fired for webchat `chat.send` through
|
|
13
|
+
* dispatch-from-config) marks a user message;
|
|
14
|
+
* - `subagent_spawned` (ctx `requesterSessionKey`, `childSessionKey`) and
|
|
15
|
+
* `subagent_ended` (event `targetSessionKey`) track a user run's subagents.
|
|
16
|
+
*
|
|
17
|
+
* Every handler swallows its own errors: an idle-gate bug must never disturb
|
|
18
|
+
* a turn. A missed event errs toward idle only through the gate's own 2 h
|
|
19
|
+
* stale drop; the 15 min recent-message rule still covers an unclassified run.
|
|
20
|
+
*/
|
|
21
|
+
import type { UpdateIdleGate } from "./idle-gate.js";
|
|
22
|
+
/** The slice of the plugin API the registration needs. */
|
|
23
|
+
export interface IdleGateHookApi {
|
|
24
|
+
on(hookName: string, handler: (...args: unknown[]) => unknown, opts?: {
|
|
25
|
+
priority?: number;
|
|
26
|
+
}): void;
|
|
27
|
+
/** `full` for the live gateway registry; 10.x also registers in non-full modes (`discovery`, `tool-discovery`, …). */
|
|
28
|
+
registrationMode?: unknown;
|
|
29
|
+
runtime?: {
|
|
30
|
+
events?: {
|
|
31
|
+
onAgentEvent?: (listener: (event: unknown) => void) => unknown;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
interface LoggerLike {
|
|
36
|
+
warn(message: string): void;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Registers the hooks and the agent-event listener that feed `gate`.
|
|
40
|
+
*
|
|
41
|
+
* @returns Whether the lifecycle listener was attached (`false` on a host
|
|
42
|
+
* without `runtime.events.onAgentEvent`, where runs start at
|
|
43
|
+
* classification and end at `agent_end`, and `false` for a non-full
|
|
44
|
+
* registration: 10.10 re-registers plugins in `tool-discovery` mode inside
|
|
45
|
+
* the gateway process (`tools.catalog`), and that throwaway registration
|
|
46
|
+
* must not replace the live gate's process-wide listener).
|
|
47
|
+
*/
|
|
48
|
+
export declare function registerIdleGateHooks(params: {
|
|
49
|
+
api: IdleGateHookApi;
|
|
50
|
+
gate: UpdateIdleGate;
|
|
51
|
+
logger?: LoggerLike;
|
|
52
|
+
now?: () => number;
|
|
53
|
+
}): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* The box identity the update spread hashes. Stable across restarts and the
|
|
56
|
+
* same for every process on the box:
|
|
57
|
+
* 1. the `sub` claim of the Senpi auth token (the user);
|
|
58
|
+
* 2. its `senpi_user_id` claim;
|
|
59
|
+
* 3. `RAILWAY_SERVICE_ID` (the box's Railway service);
|
|
60
|
+
* 4. the hostname.
|
|
61
|
+
* The telemetry `PROCESS_INSTANCE_ID` is not used: it is random per process,
|
|
62
|
+
* so the box would draw a new slot on every restart.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveUpdateMid(params: {
|
|
65
|
+
token?: string;
|
|
66
|
+
env: NodeJS.ProcessEnv;
|
|
67
|
+
hostname: () => string;
|
|
68
|
+
}): string;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=register-idle-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-idle-gate.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/register-idle-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnG,sHAAsH;IACtH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE;YACP,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,OAAO,CAAC;SAChE,CAAC;KACH,CAAC;CACH;AAED,UAAU,UAAU;IAClB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AASD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,GAAG,EAAE,eAAe,CAAC;IACrB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,OAAO,CAyEV;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,MAAM,CAAC;CACxB,GAAG,MAAM,CAYT"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/** The lifecycle listener's unsubscribe handle from the last registration in this process. */
|
|
2
|
+
let previousUnsubscribe;
|
|
3
|
+
function rec(value) {
|
|
4
|
+
return value && typeof value === "object" ? value : undefined;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Registers the hooks and the agent-event listener that feed `gate`.
|
|
8
|
+
*
|
|
9
|
+
* @returns Whether the lifecycle listener was attached (`false` on a host
|
|
10
|
+
* without `runtime.events.onAgentEvent`, where runs start at
|
|
11
|
+
* classification and end at `agent_end`, and `false` for a non-full
|
|
12
|
+
* registration: 10.10 re-registers plugins in `tool-discovery` mode inside
|
|
13
|
+
* the gateway process (`tools.catalog`), and that throwaway registration
|
|
14
|
+
* must not replace the live gate's process-wide listener).
|
|
15
|
+
*/
|
|
16
|
+
export function registerIdleGateHooks(params) {
|
|
17
|
+
const { api, gate, logger } = params;
|
|
18
|
+
const now = params.now ?? Date.now;
|
|
19
|
+
const guard = (name, fn) => {
|
|
20
|
+
try {
|
|
21
|
+
fn();
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
logger?.warn(`[senpi-auto-update] idle gate ${name} handler failed | err=${error instanceof Error ? error.message : String(error)}`);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
api.on("before_prompt_build", (_event, ctx) => {
|
|
28
|
+
guard("before_prompt_build", () => {
|
|
29
|
+
const c = rec(ctx);
|
|
30
|
+
if (!c)
|
|
31
|
+
return;
|
|
32
|
+
gate.onRunClassified(c.runId, { trigger: c.trigger, inputProvenanceKind: rec(c.inputProvenance)?.kind, sessionKey: c.sessionKey }, now());
|
|
33
|
+
});
|
|
34
|
+
return undefined;
|
|
35
|
+
});
|
|
36
|
+
api.on("agent_end", (_event, ctx) => {
|
|
37
|
+
guard("agent_end", () => gate.onRunEnd(rec(ctx)?.runId, now()));
|
|
38
|
+
});
|
|
39
|
+
api.on("message_received", () => {
|
|
40
|
+
guard("message_received", () => gate.onUserMessage(now()));
|
|
41
|
+
});
|
|
42
|
+
api.on("subagent_spawned", (event, ctx) => {
|
|
43
|
+
guard("subagent_spawned", () => {
|
|
44
|
+
const e = rec(event);
|
|
45
|
+
const c = rec(ctx);
|
|
46
|
+
gate.onSubagentSpawned({
|
|
47
|
+
childSessionKey: c?.childSessionKey ?? e?.childSessionKey,
|
|
48
|
+
requesterSessionKey: c?.requesterSessionKey ?? rec(e?.requester)?.sessionKey,
|
|
49
|
+
}, now());
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
api.on("subagent_ended", (event, ctx) => {
|
|
53
|
+
guard("subagent_ended", () => gate.onSubagentEnded(rec(event)?.targetSessionKey ?? rec(ctx)?.childSessionKey, now()));
|
|
54
|
+
});
|
|
55
|
+
const onAgentEvent = api.runtime?.events?.onAgentEvent;
|
|
56
|
+
if (typeof onAgentEvent !== "function")
|
|
57
|
+
return false;
|
|
58
|
+
if (api.registrationMode !== undefined && api.registrationMode !== "full")
|
|
59
|
+
return false;
|
|
60
|
+
// A second registration in the same process replaces the first listener.
|
|
61
|
+
if (typeof previousUnsubscribe === "function") {
|
|
62
|
+
try {
|
|
63
|
+
previousUnsubscribe();
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// ignore
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
previousUnsubscribe = onAgentEvent((event) => {
|
|
70
|
+
guard("lifecycle", () => {
|
|
71
|
+
const e = rec(event);
|
|
72
|
+
if (!e || e.stream !== "lifecycle")
|
|
73
|
+
return;
|
|
74
|
+
const phase = rec(e.data)?.phase;
|
|
75
|
+
if (phase === "start")
|
|
76
|
+
gate.onRunStart(e.runId, e.sessionKey, now());
|
|
77
|
+
else if (phase === "end" || phase === "error")
|
|
78
|
+
gate.onRunEnd(e.runId, now());
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The box identity the update spread hashes. Stable across restarts and the
|
|
85
|
+
* same for every process on the box:
|
|
86
|
+
* 1. the `sub` claim of the Senpi auth token (the user);
|
|
87
|
+
* 2. its `senpi_user_id` claim;
|
|
88
|
+
* 3. `RAILWAY_SERVICE_ID` (the box's Railway service);
|
|
89
|
+
* 4. the hostname.
|
|
90
|
+
* The telemetry `PROCESS_INSTANCE_ID` is not used: it is random per process,
|
|
91
|
+
* so the box would draw a new slot on every restart.
|
|
92
|
+
*/
|
|
93
|
+
export function resolveUpdateMid(params) {
|
|
94
|
+
const claims = decodeJwtClaims(params.token);
|
|
95
|
+
for (const value of [claims?.sub, claims?.senpi_user_id]) {
|
|
96
|
+
if ((typeof value === "string" && value.length > 0) || typeof value === "number")
|
|
97
|
+
return String(value);
|
|
98
|
+
}
|
|
99
|
+
const service = params.env.RAILWAY_SERVICE_ID;
|
|
100
|
+
if (typeof service === "string" && service.length > 0)
|
|
101
|
+
return service;
|
|
102
|
+
try {
|
|
103
|
+
return params.hostname();
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return "";
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** The payload of a JWT, unverified; `undefined` for anything that is not one. */
|
|
110
|
+
function decodeJwtClaims(token) {
|
|
111
|
+
if (typeof token !== "string")
|
|
112
|
+
return undefined;
|
|
113
|
+
const payload = token.split(".")[1];
|
|
114
|
+
if (!payload)
|
|
115
|
+
return undefined;
|
|
116
|
+
try {
|
|
117
|
+
return rec(JSON.parse(Buffer.from(payload, "base64url").toString("utf8")));
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=register-idle-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-idle-gate.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/register-idle-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installs `packageName` through `openclaw plugins update`. OpenClaw 5.x only.
|
|
3
|
+
*
|
|
4
|
+
* On an OpenClaw 10.x host it refuses before running anything: 10.10 refuses
|
|
5
|
+
* `plugins update` while the gateway runs ("Plugin updates require the Gateway
|
|
6
|
+
* to be stopped", `openclaw-worktrees/v2026.10.10-beta.3/src/cli/plugins-update-command.ts`)
|
|
7
|
+
* and its consent prompt needs a TTY, so the call could only fail. The 10.x
|
|
8
|
+
* path is restart-to-apply: the coordinator writes the install marker and the
|
|
9
|
+
* senpi-agent wrapper installs with the gateway down. The coordinator does not
|
|
10
|
+
* call this on a modern host; the guard keeps any other caller honest.
|
|
11
|
+
*
|
|
12
|
+
* @throws When the spec is unsafe, on a 10.x host, or when the command fails.
|
|
13
|
+
*/
|
|
1
14
|
export declare function runOpenClawPluginsUpdate(packageName: string): Promise<void>;
|
|
2
15
|
//# sourceMappingURL=run-update-command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-update-command.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/run-update-command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-update-command.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/run-update-command.ts"],"names":[],"mappings":"AA6BA;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* consistent with the version-source poll ensures the install and the version
|
|
10
10
|
* check follow the same npm package and the same release line.
|
|
11
11
|
*/
|
|
12
|
+
import { getOpenClawHost } from "../../host/openclaw-host.js";
|
|
12
13
|
import { runCommand } from "./command-runner.js";
|
|
13
14
|
/**
|
|
14
15
|
* Conservative npm spec pattern: `<name>` or `<name>@<selector>`.
|
|
@@ -23,7 +24,24 @@ import { runCommand } from "./command-runner.js";
|
|
|
23
24
|
* here is also a spec `openclaw plugins update` can resolve.
|
|
24
25
|
*/
|
|
25
26
|
const SAFE_NPM_NAME = /^(?:@[A-Za-z0-9._-]+\/)?[A-Za-z0-9._-]+(?:@[A-Za-z0-9][A-Za-z0-9._-]*)?$/;
|
|
27
|
+
/**
|
|
28
|
+
* Installs `packageName` through `openclaw plugins update`. OpenClaw 5.x only.
|
|
29
|
+
*
|
|
30
|
+
* On an OpenClaw 10.x host it refuses before running anything: 10.10 refuses
|
|
31
|
+
* `plugins update` while the gateway runs ("Plugin updates require the Gateway
|
|
32
|
+
* to be stopped", `openclaw-worktrees/v2026.10.10-beta.3/src/cli/plugins-update-command.ts`)
|
|
33
|
+
* and its consent prompt needs a TTY, so the call could only fail. The 10.x
|
|
34
|
+
* path is restart-to-apply: the coordinator writes the install marker and the
|
|
35
|
+
* senpi-agent wrapper installs with the gateway down. The coordinator does not
|
|
36
|
+
* call this on a modern host; the guard keeps any other caller honest.
|
|
37
|
+
*
|
|
38
|
+
* @throws When the spec is unsafe, on a 10.x host, or when the command fails.
|
|
39
|
+
*/
|
|
26
40
|
export async function runOpenClawPluginsUpdate(packageName) {
|
|
41
|
+
if (getOpenClawHost()?.modern) {
|
|
42
|
+
throw new Error("runOpenClawPluginsUpdate: OpenClaw 10.x refuses plugins update while the gateway runs; " +
|
|
43
|
+
"the runtime applies updates by restart-to-apply (install marker + gateway restart)");
|
|
44
|
+
}
|
|
27
45
|
if (!SAFE_NPM_NAME.test(packageName)) {
|
|
28
46
|
throw new Error(`runOpenClawPluginsUpdate: unsafe package name ${JSON.stringify(packageName)}`);
|
|
29
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-update-command.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/run-update-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,aAAa,GACjB,0EAA0E,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,WAAmB;IAEnB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,iDAAiD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,2EAA2E;IAC3E,2EAA2E;IAC3E,qEAAqE;IACrE,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,IAAI,EACJ,CAAC,KAAK,EAAE,kCAAkC,WAAW,GAAG,CAAC,EACzD,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,MAAM,CAAC,MAAM,IAAI,4CAA4C,MAAM,CAAC,IAAI,EAAE,CAC3E,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"run-update-command.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/run-update-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,aAAa,GACjB,0EAA0E,CAAC;AAE7E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,WAAmB;IAEnB,IAAI,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,yFAAyF;YACvF,oFAAoF,CACvF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,iDAAiD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,2EAA2E;IAC3E,2EAA2E;IAC3E,qEAAqE;IACrE,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,IAAI,EACJ,CAAC,KAAK,EAAE,kCAAkC,WAAW,GAAG,CAAC,EACzD,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,MAAM,CAAC,MAAM,IAAI,4CAA4C,MAAM,CAAC,IAAI,EAAE,CAC3E,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -22,7 +22,20 @@ export declare class AutoUpdateStateStore {
|
|
|
22
22
|
* be read or parsed (e.g. corruption, permission error).
|
|
23
23
|
*/
|
|
24
24
|
load(currentVersion: string, effectiveMode: AutoUpdateMode): Promise<AutoUpdateState>;
|
|
25
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Set some fields of the persisted state and leave every other field as it is on disk. For a
|
|
27
|
+
* coordinator that never loaded the full state (auto-update disabled), so it rewrites only
|
|
28
|
+
* what it owns. Not for use while a running coordinator also saves: it reads, then writes.
|
|
29
|
+
* A missing or unparsable file is replaced by an object holding only `fields`; a throw means
|
|
30
|
+
* nothing was written.
|
|
31
|
+
*/
|
|
32
|
+
patch(fields: Partial<AutoUpdateState>): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Atomically write the state to disk (temp file, then rename), creating the
|
|
35
|
+
* directory if needed. A process killed mid-write (a gateway restart lands
|
|
36
|
+
* right after a save) leaves the previous file, not a truncated one that
|
|
37
|
+
* would load as defaults and lose the restart retry cap.
|
|
38
|
+
*/
|
|
26
39
|
save(state: AutoUpdateState): Promise<void>;
|
|
27
40
|
}
|
|
28
41
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/state-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAEpB,iFAAiF;AACjF,UAAU,UAAU;IAClB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAI7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAJ1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGf,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,UAAU,YAAA;IAKtC;;;;;;;OAOG;IACG,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAmB3F,
|
|
1
|
+
{"version":3,"file":"state-store.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/state-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAEpB,iFAAiF;AACjF,UAAU,UAAU;IAClB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAI7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAJ1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGf,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,UAAU,YAAA;IAKtC;;;;;;;OAOG;IACG,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAmB3F;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5D;;;;;OAKG;IACG,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAWlD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
1
|
+
import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { AUTO_UPDATE_STATE_FILE, createDefaultAutoUpdateState, } from "./types.js";
|
|
4
4
|
/**
|
|
@@ -42,10 +42,44 @@ export class AutoUpdateStateStore {
|
|
|
42
42
|
return createDefaultAutoUpdateState(currentVersion, effectiveMode);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Set some fields of the persisted state and leave every other field as it is on disk. For a
|
|
47
|
+
* coordinator that never loaded the full state (auto-update disabled), so it rewrites only
|
|
48
|
+
* what it owns. Not for use while a running coordinator also saves: it reads, then writes.
|
|
49
|
+
* A missing or unparsable file is replaced by an object holding only `fields`; a throw means
|
|
50
|
+
* nothing was written.
|
|
51
|
+
*/
|
|
52
|
+
async patch(fields) {
|
|
53
|
+
let current = {};
|
|
54
|
+
try {
|
|
55
|
+
const parsed = JSON.parse(await readFile(this.filePath, "utf8"));
|
|
56
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed))
|
|
57
|
+
current = parsed;
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
const isNotFound = err instanceof Error && "code" in err && err.code === "ENOENT";
|
|
61
|
+
if (!isNotFound && !(err instanceof SyntaxError))
|
|
62
|
+
throw err;
|
|
63
|
+
}
|
|
64
|
+
await this.save({ ...current, ...fields });
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Atomically write the state to disk (temp file, then rename), creating the
|
|
68
|
+
* directory if needed. A process killed mid-write (a gateway restart lands
|
|
69
|
+
* right after a save) leaves the previous file, not a truncated one that
|
|
70
|
+
* would load as defaults and lose the restart retry cap.
|
|
71
|
+
*/
|
|
46
72
|
async save(state) {
|
|
47
73
|
await mkdir(dirname(this.filePath), { recursive: true });
|
|
48
|
-
|
|
74
|
+
const tmp = `${this.filePath}.${process.pid}.${Date.now()}.tmp`;
|
|
75
|
+
try {
|
|
76
|
+
await writeFile(tmp, JSON.stringify(state, null, 2), "utf8");
|
|
77
|
+
await rename(tmp, this.filePath);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
await rm(tmp, { force: true }).catch(() => undefined);
|
|
81
|
+
throw err;
|
|
82
|
+
}
|
|
49
83
|
}
|
|
50
84
|
}
|
|
51
85
|
//# sourceMappingURL=state-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-store.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/state-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"state-store.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/state-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,6 +49,51 @@ export interface AutoUpdateState {
|
|
|
49
49
|
restartCapabilityMode?: string;
|
|
50
50
|
lastRestartTriggerAt?: string;
|
|
51
51
|
lastRestartTriggerMode?: string;
|
|
52
|
+
/**
|
|
53
|
+
* OpenClaw 10.x only: the update this box is waiting to apply. `firstSeenAt` and `eligibleAt`
|
|
54
|
+
* are set once per pending episode (the spread offset plus jitter is drawn once), so the box
|
|
55
|
+
* does not lose its place when a newer version ships during the wait.
|
|
56
|
+
*/
|
|
57
|
+
pendingUpdate?: AutoUpdatePendingUpdate;
|
|
58
|
+
/**
|
|
59
|
+
* The restart requested for an update, on both hosts. Its `requestedAt` is what the latch fix
|
|
60
|
+
* measures: a restart that has not loaded `toVersion` within 30 min is treated as failed.
|
|
61
|
+
* Cleared at the boot whose loaded version reaches `toVersion`.
|
|
62
|
+
*/
|
|
63
|
+
pendingRestart?: AutoUpdatePendingRestart;
|
|
64
|
+
/**
|
|
65
|
+
* Restarts for `version` that expired without loading it. At
|
|
66
|
+
* `MAX_APPLY_ATTEMPTS` the coordinator stops trying that version until a
|
|
67
|
+
* newer one ships. Cleared when the loaded version reaches it.
|
|
68
|
+
*/
|
|
69
|
+
applyFailures?: {
|
|
70
|
+
version: string;
|
|
71
|
+
count: number;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* OpenClaw 10.x: ids of the wrapper install results already reported as
|
|
75
|
+
* `auto_update.install_result` (the last 50, oldest first), so a results
|
|
76
|
+
* file whose delete failed is not reported twice (`install-results.ts`).
|
|
77
|
+
*/
|
|
78
|
+
reportedInstallResultIds?: string[];
|
|
79
|
+
}
|
|
80
|
+
/** See {@link AutoUpdateState.pendingUpdate}. */
|
|
81
|
+
export interface AutoUpdatePendingUpdate {
|
|
82
|
+
version: string;
|
|
83
|
+
/** ISO time a version newer than the loaded one was first seen in this episode. */
|
|
84
|
+
firstSeenAt: string;
|
|
85
|
+
/** ISO time the box may first apply: `firstSeenAt + spreadOffsetMs(mid) + jitter`. */
|
|
86
|
+
eligibleAt: string;
|
|
87
|
+
}
|
|
88
|
+
/** See {@link AutoUpdateState.pendingRestart}. */
|
|
89
|
+
export interface AutoUpdatePendingRestart {
|
|
90
|
+
/** Loaded version when the restart was requested. */
|
|
91
|
+
fromVersion: string;
|
|
92
|
+
toVersion: string;
|
|
93
|
+
/** ISO time of the restart request. */
|
|
94
|
+
requestedAt: string;
|
|
95
|
+
/** `restart-to-apply` on 10.x; the gateway reload mode (`hybrid`, `restart`) on 5.x. */
|
|
96
|
+
mode: string;
|
|
52
97
|
}
|
|
53
98
|
/**
|
|
54
99
|
* Result of the preflight environment check performed before the first poll.
|
|
@@ -91,6 +136,12 @@ export interface AutoUpdateSnapshot {
|
|
|
91
136
|
restartCapabilityReasons: string[];
|
|
92
137
|
lastRestartTriggerAt: string | null;
|
|
93
138
|
lastRestartTriggerMode: string | null;
|
|
139
|
+
/**
|
|
140
|
+
* OpenClaw 10.x only: why the pending update has not been applied yet, while `lastAction` is
|
|
141
|
+
* `pending-idle:<v>`. `spread` while the box waits for its offset; otherwise the idle gate's
|
|
142
|
+
* blockers (`user-run`, `user-queued`, `approval`, `order`, `recent-message`). Empty otherwise.
|
|
143
|
+
*/
|
|
144
|
+
pendingBlockers: string[];
|
|
94
145
|
}
|
|
95
146
|
/**
|
|
96
147
|
* Why a forced {@link AutoUpdateCoordinator.checkNow} call did or did not run a cycle.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/types.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;AAE1D,oFAAoF;AACpF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAElE,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,cAAc,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,yEAAyE;IACzE,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6FAA6F;IAC7F,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,cAAc,CAAC;IAC9B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runtime/auto-update/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/runtime/auto-update/types.ts"],"names":[],"mappings":"AA2KA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAE/D,SAAS,MAAM,CAAC,KAAc,EAAE,QAAiB;IAC/C,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,QAAgB;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChF,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,GAAG,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;IACvE,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;QAClC,IAAI;QACJ,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;QAC7E,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;QAC9E,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;QACxC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;QACxC,2BAA2B;QAC3B,UAAU,EAAE,KAAK;QACjB,qBAAqB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC;QACjF,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QAC7E,kBAAkB,EAAE,OAAO,GAAG,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;KACpG,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,cAAsB,EACtB,aAA6B;IAE7B,OAAO;QACL,sBAAsB,EAAE,cAAc;QACtC,qBAAqB,EAAE,cAAc;QACrC,aAAa,EAAE,EAAE;QACjB,mBAAmB,EAAE,CAAC;QACtB,aAAa;QACb,iBAAiB,EAAE,SAAS;QAC5B,wBAAwB,EAAE,EAAE;KAC7B,CAAC;AACJ,CAAC"}
|