openclaw 2026.2.23-beta.1 → 2026.2.23

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.
Files changed (27) hide show
  1. package/CHANGELOG.md +7 -7
  2. package/dist/{audio-preflight-Co0omL5v.js → audio-preflight-C61PUPM0.js} +4 -4
  3. package/dist/{audio-preflight-D-OLTVr9.js → audio-preflight-X172w-u4.js} +4 -4
  4. package/dist/build-info.json +3 -3
  5. package/dist/bundled/boot-md/handler.js +6 -6
  6. package/dist/bundled/session-memory/handler.js +6 -6
  7. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  8. package/dist/{chrome-Bgt6MwLo.js → chrome-C8Z3qDom.js} +9 -9
  9. package/dist/{chrome-j8n4RCAx.js → chrome-D5YOyhL2.js} +9 -9
  10. package/dist/{deliver-DMSXRVHA.js → deliver-B2A1_Ib0.js} +1 -1
  11. package/dist/{deliver-BHbS7MPi.js → deliver-i_F6aUuX.js} +1 -1
  12. package/dist/extensionAPI.js +6 -6
  13. package/dist/{image-CBCiUR7E.js → image-Bwz7k77z.js} +1 -1
  14. package/dist/{image-C3Y2REz9.js → image-D9XRntUA.js} +1 -1
  15. package/dist/llm-slug-generator.js +6 -6
  16. package/dist/{pi-embedded-CV53eKpr.js → pi-embedded-54x4PM3A.js} +17 -17
  17. package/dist/{pi-embedded-lyna_bRo.js → pi-embedded-CWNyms-S.js} +17 -17
  18. package/dist/{pi-embedded-helpers-ABBMCQ4Q.js → pi-embedded-helpers-BdkmD3wR.js} +4 -4
  19. package/dist/{pi-embedded-helpers-DyYgf00n.js → pi-embedded-helpers-BxjDtTSD.js} +4 -4
  20. package/dist/{pw-ai-Cb0QMSLC.js → pw-ai-BZWA5N2u.js} +1 -1
  21. package/dist/{pw-ai-C5oON0ec.js → pw-ai-ByboTZko.js} +1 -1
  22. package/dist/{runner-RETaennS.js → runner-Bb2G1wrS.js} +1 -1
  23. package/dist/{runner-9rrQ3leQ.js → runner-yC0M8vBa.js} +1 -1
  24. package/dist/{web-CsipiksP.js → web-CeLmpXQ6.js} +6 -6
  25. package/dist/{web-BUqAGSJX.js → web-Cnqp8qkz.js} +6 -6
  26. package/docs/reference/prompt-caching.md +4 -0
  27. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -12,6 +12,8 @@ Docs: https://docs.openclaw.ai
12
12
  ### Changes
13
13
 
14
14
  - Subagents/Sessions: add `agents.defaults.subagents.runTimeoutSeconds` so `sessions_spawn` can inherit a configurable default timeout when the tool call omits `runTimeoutSeconds` (unset remains `0`, meaning no timeout). (#24594) Thanks @mitchmcalister.
15
+ - Config/Kilo Gateway: Kilo provider flow now surfaces an updated list of models. (#24921) thanks @gumadeiras.
16
+ - Auto-reply/Abort shortcuts: expand standalone stop phrases (`stop openclaw`, `stop action`, `stop run`, `stop agent`, `please stop`, and related variants) and accept trailing punctuation (for example `STOP OPENCLAW!!!`) so emergency stop messages are caught more reliably.
15
17
 
16
18
  ### Fixes
17
19
 
@@ -35,7 +37,6 @@ Docs: https://docs.openclaw.ai
35
37
  - WhatsApp/Auto-reply: send only final payloads to WhatsApp, suppress tool/block payload leakage (reasoning/thinking), and force block streaming off for WhatsApp dispatch so final-only delivery cannot cause silent turns. (#24962) Thanks @SidQin-cyber.
36
38
  - Channels/Reasoning: suppress reasoning/thinking payload segments in the shared channel dispatch path so non-Telegram channels (including WhatsApp and Web) no longer emit internal reasoning blocks as user-visible replies. (#24991) Thanks @stakeswky.
37
39
  - Discord/Reasoning: suppress reasoning/thinking-only payload blocks from Discord delivery output. (#24969)
38
- - Auto-reply/Abort shortcuts: expand standalone stop phrases (`stop openclaw`, `stop action`, `stop run`, `stop agent`, `please stop`, and related variants) and accept trailing punctuation (for example `STOP OPENCLAW!!!`) so emergency stop messages are caught more reliably.
39
40
  - WhatsApp/DM routing: only update main-session last-route state when DM traffic is bound to the main session, preserving isolated `dmScope` routing. (#24949) Thanks @kevinWangSheng.
40
41
  - WhatsApp/Access control: honor `selfChatMode` in inbound access-control checks. (#24738)
41
42
  - WhatsApp/Logging: redact outbound recipient identifiers in WhatsApp outbound + heartbeat logs and remove message/poll preview text from those log lines. (#24980) Thanks @coygeek.
@@ -51,7 +52,6 @@ Docs: https://docs.openclaw.ai
51
52
  - Sessions/Reasoning: persist `reasoningLevel: "off"` explicitly instead of deleting it so session overrides survive patch/update flows. (#24406, #24559)
52
53
  - Cron/Isolated sessions: use full prompt mode for isolated cron runs so skills/extensions are available during cron execution. (#24944)
53
54
  - Synology Chat/Webhooks: deregister stale webhook routes before re-registering on channel restart to prevent duplicate route handling. (#24971)
54
- - Config/Kilo Gateway: Kilo provider flow now surfaces an updated list of models. (#24921) thanks @gumadeiras.
55
55
  - Plugins/Config: use plugin manifest `id` (instead of npm package name) for config entry keys so plugin settings stay bound correctly. (#24796)
56
56
  - Plugins/Config schema: support legacy plugin schemas without `toJSONSchema()` by falling back to permissive object schema generation. (#24933) Thanks @pandego.
57
57
  - Gateway/Prompt builder: safely extract text from mixed content arrays when assembling prompts to avoid malformed prompt payloads. (#24946)
@@ -68,7 +68,7 @@ Docs: https://docs.openclaw.ai
68
68
  - Infra/Windows TOCTOU: handle Windows `dev=0` edge cases in same-file identity checks. (#24939)
69
69
  - Exec/Bash tools: clamp poll sleep duration to non-negative values in process polling loops. (#24889)
70
70
 
71
- ## 2026.2.23 (Unreleased)
71
+ ## 2026.2.23
72
72
 
73
73
  ### Changes
74
74
 
@@ -77,6 +77,10 @@ Docs: https://docs.openclaw.ai
77
77
  - Docs/Prompt caching: add a dedicated prompt-caching reference covering `cacheRetention`, per-agent `params` merge precedence, Bedrock/OpenRouter behavior, and cache-ttl + heartbeat tuning. Thanks @svenssonaxel.
78
78
  - Gateway/HTTP security headers: add optional `gateway.http.securityHeaders.strictTransportSecurity` support to emit `Strict-Transport-Security` for direct HTTPS deployments, with runtime wiring, validation, tests, and hardening docs.
79
79
  - Sessions/Cron: harden session maintenance with `openclaw sessions cleanup`, per-agent store targeting, disk-budget controls (`session.maintenance.maxDiskBytes` / `highWaterBytes`), and safer transcript/archive cleanup + run-log retention behavior. (#24753) thanks @gumadeiras.
80
+ - Tools/web_search: add `provider: "kimi"` (Moonshot) support with key/config schema wiring and a corrected two-step `$web_search` tool flow that echoes tool results before final synthesis, including citation extraction from search results. (#16616, #18822) Thanks @adshine.
81
+ - Media understanding/Video: add a native Moonshot video provider and include Moonshot in auto video key detection, plus refactor video execution to honor `entry/config/provider` baseUrl+header precedence (matching audio behavior). (#12063) Thanks @xiaoyaner0201.
82
+ - Agents/Config: support per-agent `params` overrides merged on top of model defaults (including `cacheRetention`) so mixed-traffic agents can tune cache behavior independently. (#17470, #17112) Thanks @rrenamed.
83
+ - Agents/Bootstrap: cache bootstrap file snapshots per session key and clear them on session reset/delete, reducing prompt-cache invalidations from in-session `AGENTS.md`/`MEMORY.md` writes. (#22220) Thanks @anisoptera.
80
84
 
81
85
  ### Breaking
82
86
 
@@ -88,8 +92,6 @@ Docs: https://docs.openclaw.ai
88
92
  - Tests/Vitest: tier local parallel worker defaults by host memory, keep gateway serial by default on non-high-memory hosts, and document a low-profile fallback command for memory-constrained land/gate runs to prevent local OOMs. (#24719) Thanks @ngutman.
89
93
  - WhatsApp/Group policy: fix `groupAllowFrom` sender filtering when `groupPolicy: "allowlist"` is set without explicit `groups` — previously all group messages were blocked even for allowlisted senders. (#24670)
90
94
  - Agents/Context pruning: extend `cache-ttl` eligibility to Moonshot/Kimi and ZAI/GLM providers (including OpenRouter model refs), so `contextPruning.mode: "cache-ttl"` is no longer silently skipped for those sessions. (#24497) Thanks @lailoo.
91
- - Tools/web_search: add `provider: "kimi"` (Moonshot) support with key/config schema wiring and a corrected two-step `$web_search` tool flow that echoes tool results before final synthesis, including citation extraction from search results. (#16616, #18822) Thanks @adshine.
92
- - Media understanding/Video: add a native Moonshot video provider and include Moonshot in auto video key detection, plus refactor video execution to honor `entry/config/provider` baseUrl+header precedence (matching audio behavior). (#12063) Thanks @xiaoyaner0201.
93
95
  - Doctor/Memory: query gateway-side default-agent memory embedding readiness during `openclaw doctor` (instead of inferring from generic gateway health), and warn when the gateway memory probe is unavailable or not ready while keeping `openclaw configure` remediation guidance. (#22327) thanks @therk.
94
96
  - Sessions/Store: canonicalize inbound mixed-case session keys for metadata and route updates, and migrate legacy case-variant entries to a single lowercase key to prevent duplicate sessions and missing TUI/WebUI history. (#9561) Thanks @hillghost86.
95
97
  - Telegram/Reactions: soft-fail reaction action errors (policy/token/emoji/API), accept snake_case `message_id`, and fallback to inbound message-id context when explicit `messageId` is omitted so DM reactions stay stable without regeneration loops. (#20236, #21001) Thanks @PeterShanxin and @vincentkoc.
@@ -101,8 +103,6 @@ Docs: https://docs.openclaw.ai
101
103
  - Agents/Compaction: pass `agentDir` into manual `/compact` command runs so compaction auth/profile resolution stays scoped to the active agent. (#24133) thanks @Glucksberg.
102
104
  - Agents/Compaction: pass model metadata through the embedded runtime so safeguard summarization can run when `ctx.model` is unavailable, avoiding repeated `"Summary unavailable due to context limits"` fallback summaries. (#3479) Thanks @battman21, @hanxiao and @vincentkoc.
103
105
  - Agents/Compaction: cancel safeguard compaction when summary generation cannot run (missing model/API key or summarization failure), preserving history instead of truncating to fallback `"Summary unavailable"` text. (#10711) Thanks @DukeDeSouth and @vincentkoc.
104
- - Agents/Config: support per-agent `params` overrides merged on top of model defaults (including `cacheRetention`) so mixed-traffic agents can tune cache behavior independently. (#17470, #17112) Thanks @rrenamed.
105
- - Agents/Bootstrap: cache bootstrap file snapshots per session key and clear them on session reset/delete, reducing prompt-cache invalidations from in-session `AGENTS.md`/`MEMORY.md` writes. (#22220) Thanks @anisoptera.
106
106
  - Agents/Tools: make `session_status` read transcript-derived usage mid-turn and tail-read session logs for cache-aware context reporting without full-log scans. (#22387) Thanks @1ucian.
107
107
  - Agents/Overflow: detect additional provider context-overflow error shapes (including `input length` + `max_tokens` exceed-context variants) so failures route through compaction/recovery paths instead of leaking raw provider errors to users. (#9951) Thanks @echoVic and @Glucksberg.
108
108
  - Agents/Overflow: add Chinese context-overflow pattern detection in `isContextOverflowError` so localized provider errors route through overflow recovery paths. (#22855) Thanks @Clawborn.
@@ -11,11 +11,11 @@ import "./accounts-cIBPf9IB.js";
11
11
  import "./image-ops-CUmS__96.js";
12
12
  import "./pi-model-discovery-DaNAekda.js";
13
13
  import "./message-channel-BTrsc2pw.js";
14
- import "./pi-embedded-helpers-DyYgf00n.js";
14
+ import "./pi-embedded-helpers-BxjDtTSD.js";
15
15
  import "./config-Brd46Xc7.js";
16
16
  import "./manifest-registry-nhWIJO2d.js";
17
17
  import "./dock-RaNO1LM5.js";
18
- import "./chrome-Bgt6MwLo.js";
18
+ import "./chrome-C8Z3qDom.js";
19
19
  import "./ssrf-ueWxHyi3.js";
20
20
  import "./skills-DCqTXQZl.js";
21
21
  import "./redact-CP9noGXi.js";
@@ -26,11 +26,11 @@ import "./accounts-ru--5lJj.js";
26
26
  import "./paths-DbuO2gD6.js";
27
27
  import "./tool-images-BRXaNmBZ.js";
28
28
  import "./thinking-ZaPrKXBc.js";
29
- import "./image-CBCiUR7E.js";
29
+ import "./image-Bwz7k77z.js";
30
30
  import "./gemini-auth-Cg8dT8ZL.js";
31
31
  import "./fetch-guard-B6-u0qUc.js";
32
32
  import "./local-roots-B9aqyKN_.js";
33
- import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-9rrQ3leQ.js";
33
+ import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-yC0M8vBa.js";
34
34
 
35
35
  //#region src/media-understanding/audio-preflight.ts
36
36
  /**
@@ -13,11 +13,11 @@ import "./accounts-Ci-FogVD.js";
13
13
  import "./image-ops-DR7iVy0X.js";
14
14
  import "./pi-model-discovery-C-yOXpma.js";
15
15
  import "./message-channel-NXidGUO7.js";
16
- import "./pi-embedded-helpers-ABBMCQ4Q.js";
16
+ import "./pi-embedded-helpers-BdkmD3wR.js";
17
17
  import "./config-DvUlTmaK.js";
18
18
  import "./manifest-registry-DARtGCWp.js";
19
19
  import "./dock-Devv97xs.js";
20
- import "./chrome-j8n4RCAx.js";
20
+ import "./chrome-D5YOyhL2.js";
21
21
  import "./ssrf-BM54dmk8.js";
22
22
  import "./frontmatter-CYyVkHva.js";
23
23
  import "./skills-DOKat65v.js";
@@ -29,11 +29,11 @@ import "./accounts-DKYigdEx.js";
29
29
  import "./paths-CLWDvYDE.js";
30
30
  import "./tool-images-DeM5viPH.js";
31
31
  import "./thinking-CJoHneR6.js";
32
- import "./image-C3Y2REz9.js";
32
+ import "./image-D9XRntUA.js";
33
33
  import "./gemini-auth-DejNVJue.js";
34
34
  import "./fetch-guard-Diq4wbzK.js";
35
35
  import "./local-roots-DS-8ZE_B.js";
36
- import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-RETaennS.js";
36
+ import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-Bb2G1wrS.js";
37
37
 
38
38
  //#region src/media-understanding/audio-preflight.ts
39
39
  /**
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026.2.23-beta.1",
3
- "commit": "fd10286819b3826659ebc14dc5063295b8036090",
4
- "builtAt": "2026-02-24T04:55:29.899Z"
2
+ "version": "2026.2.23",
3
+ "commit": "b817600533129771ace2801d7c05901c7f850fb8",
4
+ "builtAt": "2026-02-24T05:39:56.522Z"
5
5
  }
@@ -8,13 +8,13 @@ import "../../github-copilot-token-BkwQAVvU.js";
8
8
  import "../../env-Bw45uydv.js";
9
9
  import "../../boolean-mcn6kL0s.js";
10
10
  import { n as SILENT_REPLY_TOKEN } from "../../tokens-BLlPaiD5.js";
11
- import { a as createDefaultDeps, i as agentCommand } from "../../pi-embedded-CV53eKpr.js";
11
+ import { a as createDefaultDeps, i as agentCommand } from "../../pi-embedded-54x4PM3A.js";
12
12
  import "../../plugins-BlRpkhyC.js";
13
13
  import "../../accounts-CxYlEftx.js";
14
14
  import "../../bindings-BCOutV7A.js";
15
15
  import "../../send-BF8QfC--.js";
16
16
  import "../../send-CBl-cFHi.js";
17
- import "../../deliver-BHbS7MPi.js";
17
+ import "../../deliver-i_F6aUuX.js";
18
18
  import "../../diagnostic-D_de7-KX.js";
19
19
  import "../../diagnostic-session-state-C0Sxjfox.js";
20
20
  import "../../accounts-Ci-FogVD.js";
@@ -22,11 +22,11 @@ import "../../send-BEnRshK8.js";
22
22
  import "../../image-ops-DR7iVy0X.js";
23
23
  import "../../pi-model-discovery-C-yOXpma.js";
24
24
  import "../../message-channel-NXidGUO7.js";
25
- import "../../pi-embedded-helpers-ABBMCQ4Q.js";
25
+ import "../../pi-embedded-helpers-BdkmD3wR.js";
26
26
  import "../../config-DvUlTmaK.js";
27
27
  import "../../manifest-registry-DARtGCWp.js";
28
28
  import "../../dock-Devv97xs.js";
29
- import "../../chrome-j8n4RCAx.js";
29
+ import "../../chrome-D5YOyhL2.js";
30
30
  import "../../ssrf-BM54dmk8.js";
31
31
  import "../../frontmatter-CYyVkHva.js";
32
32
  import "../../skills-DOKat65v.js";
@@ -38,7 +38,7 @@ import "../../accounts-DKYigdEx.js";
38
38
  import { l as resolveStorePath } from "../../paths-CLWDvYDE.js";
39
39
  import "../../tool-images-DeM5viPH.js";
40
40
  import "../../thinking-CJoHneR6.js";
41
- import "../../image-C3Y2REz9.js";
41
+ import "../../image-D9XRntUA.js";
42
42
  import "../../reply-prefix-Cha4QN8H.js";
43
43
  import "../../manager-DkvrfiWy.js";
44
44
  import "../../gemini-auth-DejNVJue.js";
@@ -53,7 +53,7 @@ import "../../ir-DQn3JpQE.js";
53
53
  import "../../render-loap2gRq.js";
54
54
  import "../../commands-registry-CclRtEXd.js";
55
55
  import "../../skill-commands-6qLPyery.js";
56
- import "../../runner-RETaennS.js";
56
+ import "../../runner-Bb2G1wrS.js";
57
57
  import "../../fetch-CSgvhNYZ.js";
58
58
  import "../../channel-activity-mEN8_E9p.js";
59
59
  import "../../tables-DV7HmexJ.js";
@@ -8,13 +8,13 @@ import "../../github-copilot-token-BkwQAVvU.js";
8
8
  import "../../env-Bw45uydv.js";
9
9
  import "../../boolean-mcn6kL0s.js";
10
10
  import "../../tokens-BLlPaiD5.js";
11
- import "../../pi-embedded-CV53eKpr.js";
11
+ import "../../pi-embedded-54x4PM3A.js";
12
12
  import "../../plugins-BlRpkhyC.js";
13
13
  import "../../accounts-CxYlEftx.js";
14
14
  import "../../bindings-BCOutV7A.js";
15
15
  import "../../send-BF8QfC--.js";
16
16
  import "../../send-CBl-cFHi.js";
17
- import "../../deliver-BHbS7MPi.js";
17
+ import "../../deliver-i_F6aUuX.js";
18
18
  import "../../diagnostic-D_de7-KX.js";
19
19
  import "../../diagnostic-session-state-C0Sxjfox.js";
20
20
  import "../../accounts-Ci-FogVD.js";
@@ -22,11 +22,11 @@ import "../../send-BEnRshK8.js";
22
22
  import "../../image-ops-DR7iVy0X.js";
23
23
  import "../../pi-model-discovery-C-yOXpma.js";
24
24
  import "../../message-channel-NXidGUO7.js";
25
- import "../../pi-embedded-helpers-ABBMCQ4Q.js";
25
+ import "../../pi-embedded-helpers-BdkmD3wR.js";
26
26
  import "../../config-DvUlTmaK.js";
27
27
  import "../../manifest-registry-DARtGCWp.js";
28
28
  import "../../dock-Devv97xs.js";
29
- import "../../chrome-j8n4RCAx.js";
29
+ import "../../chrome-D5YOyhL2.js";
30
30
  import "../../ssrf-BM54dmk8.js";
31
31
  import "../../frontmatter-CYyVkHva.js";
32
32
  import "../../skills-DOKat65v.js";
@@ -38,7 +38,7 @@ import "../../accounts-DKYigdEx.js";
38
38
  import "../../paths-CLWDvYDE.js";
39
39
  import "../../tool-images-DeM5viPH.js";
40
40
  import "../../thinking-CJoHneR6.js";
41
- import "../../image-C3Y2REz9.js";
41
+ import "../../image-D9XRntUA.js";
42
42
  import "../../reply-prefix-Cha4QN8H.js";
43
43
  import "../../manager-DkvrfiWy.js";
44
44
  import "../../gemini-auth-DejNVJue.js";
@@ -53,7 +53,7 @@ import "../../ir-DQn3JpQE.js";
53
53
  import "../../render-loap2gRq.js";
54
54
  import "../../commands-registry-CclRtEXd.js";
55
55
  import "../../skill-commands-6qLPyery.js";
56
- import "../../runner-RETaennS.js";
56
+ import "../../runner-Bb2G1wrS.js";
57
57
  import "../../fetch-CSgvhNYZ.js";
58
58
  import "../../channel-activity-mEN8_E9p.js";
59
59
  import "../../tables-DV7HmexJ.js";
@@ -1 +1 @@
1
- 3f7cd758093e0d9cdcc2f06d59f858f76b47dbfce6d5dfa89d56eaabc00df183
1
+ 4a4c90c6369093d1497053162e671adc83d3e94dc59a94ed6160bc0b11e9dc2a
@@ -10,7 +10,7 @@ import { execFileSync, spawn } from "node:child_process";
10
10
  import { createHmac } from "node:crypto";
11
11
  import net from "node:net";
12
12
  import { createServer } from "node:http";
13
- import WebSocket, { WebSocketServer } from "ws";
13
+ import WebSocket$1, { WebSocketServer } from "ws";
14
14
  import { Buffer as Buffer$1 } from "node:buffer";
15
15
 
16
16
  //#region src/browser/constants.ts
@@ -196,12 +196,12 @@ async function ensureChromeExtensionRelayServer(opts) {
196
196
  let extensionWs = null;
197
197
  const cdpClients = /* @__PURE__ */ new Set();
198
198
  const connectedTargets = /* @__PURE__ */ new Map();
199
- const extensionConnected = () => extensionWs?.readyState === WebSocket.OPEN;
199
+ const extensionConnected = () => extensionWs?.readyState === WebSocket$1.OPEN;
200
200
  const pendingExtension = /* @__PURE__ */ new Map();
201
201
  let nextExtensionId = 1;
202
202
  const sendToExtension = async (payload) => {
203
203
  const ws = extensionWs;
204
- if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
204
+ if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
205
205
  ws.send(JSON.stringify(payload));
206
206
  return await new Promise((resolve, reject) => {
207
207
  const timer = setTimeout(() => {
@@ -218,12 +218,12 @@ async function ensureChromeExtensionRelayServer(opts) {
218
218
  const broadcastToCdpClients = (evt) => {
219
219
  const msg = JSON.stringify(evt);
220
220
  for (const ws of cdpClients) {
221
- if (ws.readyState !== WebSocket.OPEN) continue;
221
+ if (ws.readyState !== WebSocket$1.OPEN) continue;
222
222
  ws.send(msg);
223
223
  }
224
224
  };
225
225
  const sendResponseToCdp = (ws, res) => {
226
- if (ws.readyState !== WebSocket.OPEN) return;
226
+ if (ws.readyState !== WebSocket$1.OPEN) return;
227
227
  ws.send(JSON.stringify(res));
228
228
  };
229
229
  const ensureTargetEventsForClient = (ws, mode) => {
@@ -401,7 +401,7 @@ async function ensureChromeExtensionRelayServer(opts) {
401
401
  rejectUpgrade(socket, 409, "Extension already connected");
402
402
  return;
403
403
  }
404
- if (extensionWs && extensionWs.readyState !== WebSocket.OPEN) {
404
+ if (extensionWs && extensionWs.readyState !== WebSocket$1.OPEN) {
405
405
  try {
406
406
  extensionWs.terminate();
407
407
  } catch {}
@@ -432,7 +432,7 @@ async function ensureChromeExtensionRelayServer(opts) {
432
432
  wssExtension.on("connection", (ws) => {
433
433
  extensionWs = ws;
434
434
  const ping = setInterval(() => {
435
- if (ws.readyState !== WebSocket.OPEN) return;
435
+ if (ws.readyState !== WebSocket$1.OPEN) return;
436
436
  ws.send(JSON.stringify({ method: "ping" }));
437
437
  }, 5e3);
438
438
  ws.on("message", (data) => {
@@ -762,7 +762,7 @@ async function fetchOk(url, timeoutMs = 1500, init) {
762
762
  }
763
763
  async function withCdpSocket(wsUrl, fn, opts) {
764
764
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
765
- const ws = new WebSocket(wsUrl, {
765
+ const ws = new WebSocket$1(wsUrl, {
766
766
  handshakeTimeout: typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : 5e3,
767
767
  ...Object.keys(headers).length ? { headers } : {}
768
768
  });
@@ -1681,7 +1681,7 @@ async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
1681
1681
  async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
1682
1682
  return await new Promise((resolve) => {
1683
1683
  const headers = getHeadersWithAuth(wsUrl);
1684
- const ws = new WebSocket(wsUrl, {
1684
+ const ws = new WebSocket$1(wsUrl, {
1685
1685
  handshakeTimeout: timeoutMs,
1686
1686
  ...Object.keys(headers).length ? { headers } : {}
1687
1687
  });
@@ -10,7 +10,7 @@ import { execFileSync, spawn } from "node:child_process";
10
10
  import { createHmac } from "node:crypto";
11
11
  import net from "node:net";
12
12
  import { createServer } from "node:http";
13
- import WebSocket$1, { WebSocketServer } from "ws";
13
+ import WebSocket, { WebSocketServer } from "ws";
14
14
  import { Buffer as Buffer$1 } from "node:buffer";
15
15
 
16
16
  //#region src/browser/constants.ts
@@ -196,12 +196,12 @@ async function ensureChromeExtensionRelayServer(opts) {
196
196
  let extensionWs = null;
197
197
  const cdpClients = /* @__PURE__ */ new Set();
198
198
  const connectedTargets = /* @__PURE__ */ new Map();
199
- const extensionConnected = () => extensionWs?.readyState === WebSocket$1.OPEN;
199
+ const extensionConnected = () => extensionWs?.readyState === WebSocket.OPEN;
200
200
  const pendingExtension = /* @__PURE__ */ new Map();
201
201
  let nextExtensionId = 1;
202
202
  const sendToExtension = async (payload) => {
203
203
  const ws = extensionWs;
204
- if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
204
+ if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
205
205
  ws.send(JSON.stringify(payload));
206
206
  return await new Promise((resolve, reject) => {
207
207
  const timer = setTimeout(() => {
@@ -218,12 +218,12 @@ async function ensureChromeExtensionRelayServer(opts) {
218
218
  const broadcastToCdpClients = (evt) => {
219
219
  const msg = JSON.stringify(evt);
220
220
  for (const ws of cdpClients) {
221
- if (ws.readyState !== WebSocket$1.OPEN) continue;
221
+ if (ws.readyState !== WebSocket.OPEN) continue;
222
222
  ws.send(msg);
223
223
  }
224
224
  };
225
225
  const sendResponseToCdp = (ws, res) => {
226
- if (ws.readyState !== WebSocket$1.OPEN) return;
226
+ if (ws.readyState !== WebSocket.OPEN) return;
227
227
  ws.send(JSON.stringify(res));
228
228
  };
229
229
  const ensureTargetEventsForClient = (ws, mode) => {
@@ -401,7 +401,7 @@ async function ensureChromeExtensionRelayServer(opts) {
401
401
  rejectUpgrade(socket, 409, "Extension already connected");
402
402
  return;
403
403
  }
404
- if (extensionWs && extensionWs.readyState !== WebSocket$1.OPEN) {
404
+ if (extensionWs && extensionWs.readyState !== WebSocket.OPEN) {
405
405
  try {
406
406
  extensionWs.terminate();
407
407
  } catch {}
@@ -432,7 +432,7 @@ async function ensureChromeExtensionRelayServer(opts) {
432
432
  wssExtension.on("connection", (ws) => {
433
433
  extensionWs = ws;
434
434
  const ping = setInterval(() => {
435
- if (ws.readyState !== WebSocket$1.OPEN) return;
435
+ if (ws.readyState !== WebSocket.OPEN) return;
436
436
  ws.send(JSON.stringify({ method: "ping" }));
437
437
  }, 5e3);
438
438
  ws.on("message", (data) => {
@@ -762,7 +762,7 @@ async function fetchOk(url, timeoutMs = 1500, init) {
762
762
  }
763
763
  async function withCdpSocket(wsUrl, fn, opts) {
764
764
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
765
- const ws = new WebSocket$1(wsUrl, {
765
+ const ws = new WebSocket(wsUrl, {
766
766
  handshakeTimeout: typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : 5e3,
767
767
  ...Object.keys(headers).length ? { headers } : {}
768
768
  });
@@ -1681,7 +1681,7 @@ async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
1681
1681
  async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
1682
1682
  return await new Promise((resolve) => {
1683
1683
  const headers = getHeadersWithAuth(wsUrl);
1684
- const ws = new WebSocket$1(wsUrl, {
1684
+ const ws = new WebSocket(wsUrl, {
1685
1685
  handshakeTimeout: timeoutMs,
1686
1686
  ...Object.keys(headers).length ? { headers } : {}
1687
1687
  });
@@ -5,7 +5,7 @@ import { m as normalizeOptionalAccountId, p as normalizeAccountId } from "./sess
5
5
  import { i as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-DcXIijvb.js";
6
6
  import { r as normalizeChannelId, t as getChannelPlugin } from "./plugins-YwGWnhQE.js";
7
7
  import { n as generateSecureUuid } from "./secure-random-D7Pne8Yn.js";
8
- import { i as isMessagingToolDuplicate } from "./pi-embedded-helpers-DyYgf00n.js";
8
+ import { i as isMessagingToolDuplicate } from "./pi-embedded-helpers-BxjDtTSD.js";
9
9
  import { t as getChannelDock } from "./dock-RaNO1LM5.js";
10
10
  import { E as parseInlineDirectives, a as resolveMirroredTranscriptText, i as appendAssistantMessageToSessionTranscript } from "./sessions-RdMA_tth.js";
11
11
  import { c as resolveChunkMode, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, n as chunkByParagraph } from "./chunk-B7GhqBPV.js";
@@ -5,7 +5,7 @@ import { m as normalizeOptionalAccountId, p as normalizeAccountId } from "./sess
5
5
  import { i as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-BLlPaiD5.js";
6
6
  import { r as normalizeChannelId, t as getChannelPlugin } from "./plugins-BlRpkhyC.js";
7
7
  import { n as generateSecureUuid } from "./secure-random-faWesvBQ.js";
8
- import { i as isMessagingToolDuplicate } from "./pi-embedded-helpers-ABBMCQ4Q.js";
8
+ import { i as isMessagingToolDuplicate } from "./pi-embedded-helpers-BdkmD3wR.js";
9
9
  import { t as getChannelDock } from "./dock-Devv97xs.js";
10
10
  import { T as parseInlineDirectives, a as resolveMirroredTranscriptText, i as appendAssistantMessageToSessionTranscript } from "./sessions-BiWBZ-uj.js";
11
11
  import { c as resolveChunkMode, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, n as chunkByParagraph } from "./chunk-BK8T_RCs.js";
@@ -6,13 +6,13 @@ import { a as resolveAgentIdentity } from "./reply-prefix-zbMt2YLP.js";
6
6
  import "./github-copilot-token-D8k4aAom.js";
7
7
  import "./env-DC7b5MnK.js";
8
8
  import "./tokens-DcXIijvb.js";
9
- import { A as resolveAgentTimeoutMs, t as runEmbeddedPiAgent } from "./pi-embedded-lyna_bRo.js";
9
+ import { A as resolveAgentTimeoutMs, t as runEmbeddedPiAgent } from "./pi-embedded-CWNyms-S.js";
10
10
  import "./plugins-YwGWnhQE.js";
11
11
  import "./accounts-DvzTPeU9.js";
12
12
  import "./bindings-oW5ZqVhx.js";
13
13
  import "./send-BNm6G6BO.js";
14
14
  import "./send-DvIuJV-e.js";
15
- import "./deliver-DMSXRVHA.js";
15
+ import "./deliver-B2A1_Ib0.js";
16
16
  import "./diagnostic-Cvpy6jbf.js";
17
17
  import "./diagnostic-session-state-Bu3E4Enn.js";
18
18
  import "./accounts-cIBPf9IB.js";
@@ -20,11 +20,11 @@ import "./send-DwWUQXIX.js";
20
20
  import "./image-ops-CUmS__96.js";
21
21
  import "./pi-model-discovery-DaNAekda.js";
22
22
  import "./message-channel-BTrsc2pw.js";
23
- import "./pi-embedded-helpers-DyYgf00n.js";
23
+ import "./pi-embedded-helpers-BxjDtTSD.js";
24
24
  import "./config-Brd46Xc7.js";
25
25
  import "./manifest-registry-nhWIJO2d.js";
26
26
  import "./dock-RaNO1LM5.js";
27
- import "./chrome-Bgt6MwLo.js";
27
+ import "./chrome-C8Z3qDom.js";
28
28
  import "./ssrf-ueWxHyi3.js";
29
29
  import "./skills-DCqTXQZl.js";
30
30
  import "./redact-CP9noGXi.js";
@@ -35,7 +35,7 @@ import "./accounts-ru--5lJj.js";
35
35
  import { l as resolveStorePath, r as resolveSessionFilePath } from "./paths-DbuO2gD6.js";
36
36
  import "./tool-images-BRXaNmBZ.js";
37
37
  import "./thinking-ZaPrKXBc.js";
38
- import "./image-CBCiUR7E.js";
38
+ import "./image-Bwz7k77z.js";
39
39
  import "./manager-gAWsC5kd.js";
40
40
  import "./gemini-auth-Cg8dT8ZL.js";
41
41
  import "./fetch-guard-B6-u0qUc.js";
@@ -49,7 +49,7 @@ import "./ir-DgX2oDXm.js";
49
49
  import "./render-DwEu-aCr.js";
50
50
  import "./commands-registry-B_AT3YGB.js";
51
51
  import "./skill-commands-Ba2LNVnK.js";
52
- import "./runner-9rrQ3leQ.js";
52
+ import "./runner-yC0M8vBa.js";
53
53
  import "./fetch-BBHdHnVe.js";
54
54
  import "./channel-activity-Dyv8T9R5.js";
55
55
  import "./tables-WfvRFaDH.js";
@@ -3,7 +3,7 @@ import { N as resolveAgentModelFallbackValues, P as resolveAgentModelPrimaryValu
3
3
  import { A as isRecord, z as shortenHomeInString } from "./subsystem-n4tSscKk.js";
4
4
  import { C as getApiKeyForModel, T as requireApiKey, X as resolveOpenClawAgentDir, _ as normalizeProviders, b as resolveImplicitProviders, et as normalizeSecretInput, v as resolveImplicitBedrockProvider, y as resolveImplicitCopilotProvider } from "./model-selection-DDLFzohK.js";
5
5
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-DaNAekda.js";
6
- import { N as sanitizeUserFacingText } from "./pi-embedded-helpers-DyYgf00n.js";
6
+ import { N as sanitizeUserFacingText } from "./pi-embedded-helpers-BxjDtTSD.js";
7
7
  import { n as loadConfig } from "./config-Brd46Xc7.js";
8
8
  import { n as redactToolDetail } from "./redact-CP9noGXi.js";
9
9
  import path from "node:path";
@@ -3,7 +3,7 @@ import { h as resolveAgentModelPrimaryValue, m as resolveAgentModelFallbackValue
3
3
  import { A as isRecord, z as shortenHomeInString } from "./subsystem-BoKOAh1n.js";
4
4
  import { C as getApiKeyForModel, T as requireApiKey, X as resolveOpenClawAgentDir, _ as normalizeProviders, b as resolveImplicitProviders, et as normalizeSecretInput, v as resolveImplicitBedrockProvider, y as resolveImplicitCopilotProvider } from "./model-selection-B5NjONwE.js";
5
5
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-C-yOXpma.js";
6
- import { N as sanitizeUserFacingText } from "./pi-embedded-helpers-ABBMCQ4Q.js";
6
+ import { N as sanitizeUserFacingText } from "./pi-embedded-helpers-BdkmD3wR.js";
7
7
  import { n as loadConfig } from "./config-DvUlTmaK.js";
8
8
  import { n as redactToolDetail } from "./redact-C_vdZ7-E.js";
9
9
  import fs from "node:fs/promises";
@@ -7,13 +7,13 @@ import "./github-copilot-token-BkwQAVvU.js";
7
7
  import "./env-Bw45uydv.js";
8
8
  import "./boolean-mcn6kL0s.js";
9
9
  import "./tokens-BLlPaiD5.js";
10
- import { t as runEmbeddedPiAgent } from "./pi-embedded-CV53eKpr.js";
10
+ import { t as runEmbeddedPiAgent } from "./pi-embedded-54x4PM3A.js";
11
11
  import "./plugins-BlRpkhyC.js";
12
12
  import "./accounts-CxYlEftx.js";
13
13
  import "./bindings-BCOutV7A.js";
14
14
  import "./send-BF8QfC--.js";
15
15
  import "./send-CBl-cFHi.js";
16
- import "./deliver-BHbS7MPi.js";
16
+ import "./deliver-i_F6aUuX.js";
17
17
  import "./diagnostic-D_de7-KX.js";
18
18
  import "./diagnostic-session-state-C0Sxjfox.js";
19
19
  import "./accounts-Ci-FogVD.js";
@@ -21,11 +21,11 @@ import "./send-BEnRshK8.js";
21
21
  import "./image-ops-DR7iVy0X.js";
22
22
  import "./pi-model-discovery-C-yOXpma.js";
23
23
  import "./message-channel-NXidGUO7.js";
24
- import "./pi-embedded-helpers-ABBMCQ4Q.js";
24
+ import "./pi-embedded-helpers-BdkmD3wR.js";
25
25
  import "./config-DvUlTmaK.js";
26
26
  import "./manifest-registry-DARtGCWp.js";
27
27
  import "./dock-Devv97xs.js";
28
- import "./chrome-j8n4RCAx.js";
28
+ import "./chrome-D5YOyhL2.js";
29
29
  import "./ssrf-BM54dmk8.js";
30
30
  import "./frontmatter-CYyVkHva.js";
31
31
  import "./skills-DOKat65v.js";
@@ -37,7 +37,7 @@ import "./accounts-DKYigdEx.js";
37
37
  import "./paths-CLWDvYDE.js";
38
38
  import "./tool-images-DeM5viPH.js";
39
39
  import "./thinking-CJoHneR6.js";
40
- import "./image-C3Y2REz9.js";
40
+ import "./image-D9XRntUA.js";
41
41
  import "./reply-prefix-Cha4QN8H.js";
42
42
  import "./manager-DkvrfiWy.js";
43
43
  import "./gemini-auth-DejNVJue.js";
@@ -52,7 +52,7 @@ import "./ir-DQn3JpQE.js";
52
52
  import "./render-loap2gRq.js";
53
53
  import "./commands-registry-CclRtEXd.js";
54
54
  import "./skill-commands-6qLPyery.js";
55
- import "./runner-RETaennS.js";
55
+ import "./runner-Bb2G1wrS.js";
56
56
  import "./fetch-CSgvhNYZ.js";
57
57
  import "./channel-activity-mEN8_E9p.js";
58
58
  import "./tables-DV7HmexJ.js";
@@ -16,7 +16,7 @@ import { t as normalizeChatType } from "./chat-type-C4pAlbsI.js";
16
16
  import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-BF8QfC--.js";
17
17
  import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-CBl-cFHi.js";
18
18
  import { n as generateSecureUuid, t as generateSecureToken } from "./secure-random-faWesvBQ.js";
19
- import { S as initializeGlobalHookRunner, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as splitMediaFromOutput, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, x as getGlobalHookRunner, y as parseReplyDirectives } from "./deliver-BHbS7MPi.js";
19
+ import { S as initializeGlobalHookRunner, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as splitMediaFromOutput, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, x as getGlobalHookRunner, y as parseReplyDirectives } from "./deliver-i_F6aUuX.js";
20
20
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-D_de7-KX.js";
21
21
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-C0Sxjfox.js";
22
22
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-Ci-FogVD.js";
@@ -24,11 +24,11 @@ import { $ as getPairingAdapter, A as extractTelegramLocation, B as normalizeAll
24
24
  import { d as detectMime, f as extensionForMime, g as isGifMedia, h as isAudioFileName, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-DR7iVy0X.js";
25
25
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-C-yOXpma.js";
26
26
  import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-NXidGUO7.js";
27
- import { $ as mergeAlsoAllowPolicy, A as isTransientHttpError, B as resolveProfile, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as resolveSandboxContext, G as resolveBrowserControlAuth, H as resolveExistingPathsWithinRoot, I as resolveSandboxRuntimeStatus, J as resolveSandboxConfigForAgent, K as resolveGatewayCredentialsFromConfig, L as createBrowserRouteContext, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as ensureSandboxWorkspaceForSession, Q as expandPolicyWithPluginGroups, R as registerBrowserRoutes, S as isCompactionFailureError, T as isFailoverErrorMessage, U as getBridgeAuthForPort, V as DEFAULT_UPLOAD_DIR, W as ensureBrowserControlAuth, X as buildPluginToolGroups, Y as applyOwnerOnlyToolPolicy, Z as collectExplicitAllowlist, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, at as matchesAnyGlobPattern, b as isBillingAssistantError, c as extractToolCallsFromAssistant, ct as resolveBootstrapMaxChars, d as downgradeOpenAIReasoningBlocks, et as stripPluginOnlyAllowlist, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, it as compileGlobPatterns, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, lt as resolveBootstrapTotalMaxChars, m as classifyFailoverReason, n as validateGeminiTurns, nt as normalizeToolName, o as normalizeTextForComparison, ot as buildBootstrapContextFiles, p as BILLING_ERROR_USER_MESSAGE, q as trimToUndefined$1, r as pickFallbackThinkingLevel, rt as resolveToolProfilePolicy, s as sanitizeSessionMessagesImages, st as ensureSessionHeader, t as validateAnthropicTurns, tt as expandToolGroups, u as sanitizeToolCallIdsForCloudCodeAssist, ut as sanitizeGoogleTurnOrdering, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError, z as resolveBrowserConfig } from "./pi-embedded-helpers-ABBMCQ4Q.js";
27
+ import { $ as mergeAlsoAllowPolicy, A as isTransientHttpError, B as resolveProfile, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as resolveSandboxContext, G as resolveBrowserControlAuth, H as resolveExistingPathsWithinRoot, I as resolveSandboxRuntimeStatus, J as resolveSandboxConfigForAgent, K as resolveGatewayCredentialsFromConfig, L as createBrowserRouteContext, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as ensureSandboxWorkspaceForSession, Q as expandPolicyWithPluginGroups, R as registerBrowserRoutes, S as isCompactionFailureError, T as isFailoverErrorMessage, U as getBridgeAuthForPort, V as DEFAULT_UPLOAD_DIR, W as ensureBrowserControlAuth, X as buildPluginToolGroups, Y as applyOwnerOnlyToolPolicy, Z as collectExplicitAllowlist, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, at as matchesAnyGlobPattern, b as isBillingAssistantError, c as extractToolCallsFromAssistant, ct as resolveBootstrapMaxChars, d as downgradeOpenAIReasoningBlocks, et as stripPluginOnlyAllowlist, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, it as compileGlobPatterns, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, lt as resolveBootstrapTotalMaxChars, m as classifyFailoverReason, n as validateGeminiTurns, nt as normalizeToolName, o as normalizeTextForComparison, ot as buildBootstrapContextFiles, p as BILLING_ERROR_USER_MESSAGE, q as trimToUndefined$1, r as pickFallbackThinkingLevel, rt as resolveToolProfilePolicy, s as sanitizeSessionMessagesImages, st as ensureSessionHeader, t as validateAnthropicTurns, tt as expandToolGroups, u as sanitizeToolCallIdsForCloudCodeAssist, ut as sanitizeGoogleTurnOrdering, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError, z as resolveBrowserConfig } from "./pi-embedded-helpers-BdkmD3wR.js";
28
28
  import { $ as resolveSafeBinProfiles, A as parseConfigPath, B as splitCommandChain, C as isSupportedLocalAvatarExtension, D as setConfigOverride, E as resetConfigOverrides, F as normalizeTrustedSafeBinDirs, G as extractShellWrapperInlineCommand, H as matchAllowlist, I as validateSafeBinArgv, J as unwrapKnownDispatchWrapperInvocation, K as isDispatchWrapperExecutable, L as analyzeShellCommand, M as unsetConfigValueAtPath, N as getTrustedSafeBinDirs, O as unsetConfigOverride, P as isTrustedSafeBinPath, Q as normalizeSafeBinProfileFixtures, R as buildEnforcedShellCommand, S as isPathWithinRoot, T as getConfigOverrides, U as resolveAllowlistCandidatePath, V as DEFAULT_SAFE_BINS, W as resolveCommandResolutionFromArgv, X as splitShellArgs, Y as unwrapKnownShellMultiplexerInvocation, Z as SAFE_BIN_PROFILES, _ as parseDurationMs, a as resolveConfigSnapshotHash, b as isAvatarDataUrl, c as TELEGRAM_COMMAND_NAME_PATTERN, ct as VERSION, et as isSafeExecutableValue, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, it as resolveSlackStreamingMode, j as setConfigValueAtPath, k as getConfigValueAtPath, l as normalizeTelegramCommandName, lt as resolveOwnerDisplaySetting, m as resolveIMessageAttachmentRoots, n as loadConfig, nt as resolveDiscordPreviewStreamMode, o as writeConfigFile, ot as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, q as isShellWrapperExecutable, r as readConfigFileSnapshot, rt as resolveSlackNativeStreaming, s as validateConfigObjectWithPlugins, st as resolveAgentMaxConcurrent, tt as mapStreamingModeToSlackLegacyDraftStreamMode, u as resolveTelegramCustomCommands, w as validateJsonSchemaValue, x as isAvatarHttpUrl, y as AVATAR_MAX_BYTES, z as isWindowsPlatform } from "./config-DvUlTmaK.js";
29
29
  import { a as applyTestPluginDefaults, c as resolveMemorySlotDecision, i as safeStatSync, n as discoverOpenClawPlugins, o as normalizePluginsConfig, r as isPathInside, s as resolveEffectiveEnableState, t as loadPluginManifestRegistry, u as isPathInsideWithRealpath } from "./manifest-registry-DARtGCWp.js";
30
30
  import { a as resolveChannelGroupRequireMention, c as normalizeHyphenSlug, i as resolveChannelGroupPolicy, l as normalizeStringEntries, n as listChannelDocks, o as resolveChannelGroupToolsPolicy, r as normalizeSignalMessagingTarget, s as normalizeAtHashSlug, t as getChannelDock, u as normalizeStringEntriesLower } from "./dock-Devv97xs.js";
31
- import { E as isSecureWebSocketUrl, S as ensureChromeExtensionRelayServer, T as isLoopbackHost, k as DEFAULT_AI_SNAPSHOT_MAX_CHARS, w as rawDataToString } from "./chrome-j8n4RCAx.js";
31
+ import { E as isSecureWebSocketUrl, S as ensureChromeExtensionRelayServer, T as isLoopbackHost, k as DEFAULT_AI_SNAPSHOT_MAX_CHARS, w as rawDataToString } from "./chrome-D5YOyhL2.js";
32
32
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-BM54dmk8.js";
33
33
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-DOKat65v.js";
34
34
  import { r as compileSafeRegex, t as redactSensitiveText } from "./redact-C_vdZ7-E.js";
@@ -41,7 +41,7 @@ import { a as resolveSessionTranscriptPath, c as resolveSessionTranscriptsDirFor
41
41
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-BtNd-j6q.js";
42
42
  import { a as canonicalizeBase64, i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, o as estimateBase64DecodedBytes, r as sanitizeToolResultImages } from "./tool-images-DeM5viPH.js";
43
43
  import { a as normalizeReasoningLevel, c as normalizeVerboseLevel, i as normalizeElevatedLevel, l as resolveResponseUsageMode, n as formatXHighModelHint, o as normalizeThinkLevel, s as normalizeUsageDisplay, t as formatThinkingLevels, u as supportsXHighThinking } from "./thinking-CJoHneR6.js";
44
- import { C as extractTextFromChatContent, S as isInsideCode, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, w as ensureOpenClawModelsJson, x as findCodeRegions, y as resolveToolDisplay } from "./image-C3Y2REz9.js";
44
+ import { C as extractTextFromChatContent, S as isInsideCode, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, w as ensureOpenClawModelsJson, x as findCodeRegions, y as resolveToolDisplay } from "./image-D9XRntUA.js";
45
45
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-Cha4QN8H.js";
46
46
  import { n as resolveMemorySearchConfig } from "./manager-DkvrfiWy.js";
47
47
  import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-DwuL9y6C.js";
@@ -56,7 +56,7 @@ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-DQn3JpQE.js";
56
56
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-CclRtEXd.js";
57
57
  import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-6qLPyery.js";
58
58
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-3RiUKgll.js";
59
- import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-RETaennS.js";
59
+ import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-Bb2G1wrS.js";
60
60
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-CSgvhNYZ.js";
61
61
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-CA97QrJY.js";
62
62
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-mEN8_E9p.js";
@@ -86,7 +86,7 @@ import { EdgeTTS } from "node-edge-tts";
86
86
  import AjvPkg from "ajv";
87
87
  import { createServer } from "node:http";
88
88
  import { ProxyAgent, fetch as fetch$1 } from "undici";
89
- import WebSocket$1, { WebSocket } from "ws";
89
+ import WebSocket, { WebSocket as WebSocket$1 } from "ws";
90
90
  import { Buffer as Buffer$1 } from "node:buffer";
91
91
  import { createJiti } from "jiti";
92
92
  import { Type } from "@sinclair/typebox";
@@ -6234,7 +6234,7 @@ var GatewayClient = class {
6234
6234
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
6235
6235
  });
6236
6236
  }
6237
- this.ws = new WebSocket(url, wsOptions);
6237
+ this.ws = new WebSocket$1(url, wsOptions);
6238
6238
  this.ws.on("open", () => {
6239
6239
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
6240
6240
  const tlsError = this.validateTlsFingerprint();
@@ -6426,7 +6426,7 @@ var GatewayClient = class {
6426
6426
  const connectChallengeTimeoutMs = typeof rawConnectDelayMs === "number" && Number.isFinite(rawConnectDelayMs) ? Math.max(250, Math.min(1e4, rawConnectDelayMs)) : 2e3;
6427
6427
  if (this.connectTimer) clearTimeout(this.connectTimer);
6428
6428
  this.connectTimer = setTimeout(() => {
6429
- if (this.connectSent || this.ws?.readyState !== WebSocket.OPEN) return;
6429
+ if (this.connectSent || this.ws?.readyState !== WebSocket$1.OPEN) return;
6430
6430
  this.opts.onConnectError?.(/* @__PURE__ */ new Error("gateway connect challenge timeout"));
6431
6431
  this.ws?.close(1008, "connect challenge timeout");
6432
6432
  }, connectChallengeTimeoutMs);
@@ -6468,7 +6468,7 @@ var GatewayClient = class {
6468
6468
  return null;
6469
6469
  }
6470
6470
  async request(method, params, opts) {
6471
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
6471
+ if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
6472
6472
  const id = randomUUID();
6473
6473
  const frame = {
6474
6474
  type: "req",
@@ -7768,7 +7768,7 @@ async function routeReply(params) {
7768
7768
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7769
7769
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7770
7770
  try {
7771
- const { deliverOutboundPayloads } = await import("./deliver-BHbS7MPi.js").then((n) => n.n);
7771
+ const { deliverOutboundPayloads } = await import("./deliver-i_F6aUuX.js").then((n) => n.n);
7772
7772
  return {
7773
7773
  ok: true,
7774
7774
  messageId: (await deliverOutboundPayloads({
@@ -41729,7 +41729,7 @@ async function deliverSessionMaintenanceWarning(params) {
41729
41729
  return;
41730
41730
  }
41731
41731
  try {
41732
- const { deliverOutboundPayloads } = await import("./deliver-BHbS7MPi.js").then((n) => n.n);
41732
+ const { deliverOutboundPayloads } = await import("./deliver-i_F6aUuX.js").then((n) => n.n);
41733
41733
  await deliverOutboundPayloads({
41734
41734
  cfg: params.cfg,
41735
41735
  channel,
@@ -45248,7 +45248,7 @@ async function describeStickerImage(params) {
45248
45248
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
45249
45249
  try {
45250
45250
  const buffer = await fs.readFile(imagePath);
45251
- const { describeImageWithModel } = await import("./image-C3Y2REz9.js").then((n) => n.n);
45251
+ const { describeImageWithModel } = await import("./image-D9XRntUA.js").then((n) => n.n);
45252
45252
  return (await describeImageWithModel({
45253
45253
  buffer,
45254
45254
  fileName: "sticker.webp",
@@ -47835,7 +47835,7 @@ async function preflightDiscordMessage(params) {
47835
47835
  let preflightTranscript;
47836
47836
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
47837
47837
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
47838
- const { transcribeFirstAudio } = await import("./audio-preflight-D-OLTVr9.js");
47838
+ const { transcribeFirstAudio } = await import("./audio-preflight-X172w-u4.js");
47839
47839
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
47840
47840
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
47841
47841
  ctx: {
@@ -51914,7 +51914,7 @@ function createOutboundSendDepsFromCliSource(deps) {
51914
51914
  function createDefaultDeps() {
51915
51915
  return {
51916
51916
  sendMessageWhatsApp: async (...args) => {
51917
- const { sendMessageWhatsApp } = await import("./web-BUqAGSJX.js");
51917
+ const { sendMessageWhatsApp } = await import("./web-Cnqp8qkz.js");
51918
51918
  return await sendMessageWhatsApp(...args);
51919
51919
  },
51920
51920
  sendMessageTelegram: async (...args) => {
@@ -54853,7 +54853,7 @@ function createDiscordGatewayPlugin(params) {
54853
54853
  super(options);
54854
54854
  }
54855
54855
  createWebSocket(url) {
54856
- return new WebSocket$1(url, { agent });
54856
+ return new WebSocket(url, { agent });
54857
54857
  }
54858
54858
  }
54859
54859
  return new ProxyGatewayPlugin();
@@ -65347,7 +65347,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
65347
65347
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
65348
65348
  let preflightTranscript;
65349
65349
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
65350
- const { transcribeFirstAudio } = await import("./audio-preflight-D-OLTVr9.js");
65350
+ const { transcribeFirstAudio } = await import("./audio-preflight-X172w-u4.js");
65351
65351
  preflightTranscript = await transcribeFirstAudio({
65352
65352
  ctx: {
65353
65353
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -67703,7 +67703,7 @@ function loadWebLoginQr() {
67703
67703
  return webLoginQrPromise;
67704
67704
  }
67705
67705
  function loadWebChannel() {
67706
- webChannelPromise ??= import("./web-BUqAGSJX.js");
67706
+ webChannelPromise ??= import("./web-Cnqp8qkz.js");
67707
67707
  return webChannelPromise;
67708
67708
  }
67709
67709
  function loadWhatsAppActions() {
@@ -15,7 +15,7 @@ import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
15
15
  import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-BNm6G6BO.js";
16
16
  import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-DvIuJV-e.js";
17
17
  import { n as generateSecureUuid, t as generateSecureToken } from "./secure-random-D7Pne8Yn.js";
18
- import { S as initializeGlobalHookRunner, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as splitMediaFromOutput, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, x as getGlobalHookRunner, y as parseReplyDirectives } from "./deliver-DMSXRVHA.js";
18
+ import { S as initializeGlobalHookRunner, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as splitMediaFromOutput, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, x as getGlobalHookRunner, y as parseReplyDirectives } from "./deliver-B2A1_Ib0.js";
19
19
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-Cvpy6jbf.js";
20
20
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-Bu3E4Enn.js";
21
21
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-cIBPf9IB.js";
@@ -23,11 +23,11 @@ import { $ as getPairingAdapter, A as extractTelegramLocation, B as normalizeAll
23
23
  import { d as detectMime, f as extensionForMime, g as isGifMedia, h as isAudioFileName, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-CUmS__96.js";
24
24
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-DaNAekda.js";
25
25
  import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-BTrsc2pw.js";
26
- import { $ as mergeAlsoAllowPolicy, A as isTransientHttpError, B as resolveProfile, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as resolveSandboxContext, G as resolveBrowserControlAuth, H as resolveExistingPathsWithinRoot, I as resolveSandboxRuntimeStatus, J as resolveSandboxConfigForAgent, K as resolveGatewayCredentialsFromConfig, L as createBrowserRouteContext, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as ensureSandboxWorkspaceForSession, Q as expandPolicyWithPluginGroups, R as registerBrowserRoutes, S as isCompactionFailureError, T as isFailoverErrorMessage, U as getBridgeAuthForPort, V as DEFAULT_UPLOAD_DIR, W as ensureBrowserControlAuth, X as buildPluginToolGroups, Y as applyOwnerOnlyToolPolicy, Z as collectExplicitAllowlist, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, at as matchesAnyGlobPattern, b as isBillingAssistantError, c as extractToolCallsFromAssistant, ct as resolveBootstrapMaxChars, d as downgradeOpenAIReasoningBlocks, et as stripPluginOnlyAllowlist, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, it as compileGlobPatterns, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, lt as resolveBootstrapTotalMaxChars, m as classifyFailoverReason, n as validateGeminiTurns, nt as normalizeToolName, o as normalizeTextForComparison, ot as buildBootstrapContextFiles, p as BILLING_ERROR_USER_MESSAGE, q as trimToUndefined$1, r as pickFallbackThinkingLevel, rt as resolveToolProfilePolicy, s as sanitizeSessionMessagesImages, st as ensureSessionHeader, t as validateAnthropicTurns, tt as expandToolGroups, u as sanitizeToolCallIdsForCloudCodeAssist, ut as sanitizeGoogleTurnOrdering, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError, z as resolveBrowserConfig } from "./pi-embedded-helpers-DyYgf00n.js";
26
+ import { $ as mergeAlsoAllowPolicy, A as isTransientHttpError, B as resolveProfile, C as isContextOverflowError, D as isRateLimitAssistantError, E as isLikelyContextOverflowError, F as resolveSandboxContext, G as resolveBrowserControlAuth, H as resolveExistingPathsWithinRoot, I as resolveSandboxRuntimeStatus, J as resolveSandboxConfigForAgent, K as resolveGatewayCredentialsFromConfig, L as createBrowserRouteContext, M as parseImageSizeError, N as sanitizeUserFacingText, O as isRawApiErrorPayload, P as ensureSandboxWorkspaceForSession, Q as expandPolicyWithPluginGroups, R as registerBrowserRoutes, S as isCompactionFailureError, T as isFailoverErrorMessage, U as getBridgeAuthForPort, V as DEFAULT_UPLOAD_DIR, W as ensureBrowserControlAuth, X as buildPluginToolGroups, Y as applyOwnerOnlyToolPolicy, Z as collectExplicitAllowlist, _ as formatRawAssistantErrorForUi, a as isMessagingToolDuplicateNormalized, at as matchesAnyGlobPattern, b as isBillingAssistantError, c as extractToolCallsFromAssistant, ct as resolveBootstrapMaxChars, d as downgradeOpenAIReasoningBlocks, et as stripPluginOnlyAllowlist, f as isGoogleModelApi, g as formatBillingErrorMessage, h as formatAssistantErrorText, it as compileGlobPatterns, j as parseImageDimensionError, k as isTimeoutErrorMessage, l as extractToolResultId, lt as resolveBootstrapTotalMaxChars, m as classifyFailoverReason, n as validateGeminiTurns, nt as normalizeToolName, o as normalizeTextForComparison, ot as buildBootstrapContextFiles, p as BILLING_ERROR_USER_MESSAGE, q as trimToUndefined$1, r as pickFallbackThinkingLevel, rt as resolveToolProfilePolicy, s as sanitizeSessionMessagesImages, st as ensureSessionHeader, t as validateAnthropicTurns, tt as expandToolGroups, u as sanitizeToolCallIdsForCloudCodeAssist, ut as sanitizeGoogleTurnOrdering, v as getApiErrorPayloadFingerprint, w as isFailoverAssistantError, x as isCloudCodeAssistFormatError, y as isAuthAssistantError, z as resolveBrowserConfig } from "./pi-embedded-helpers-BxjDtTSD.js";
27
27
  import { $ as resolveSafeBinProfiles, A as parseConfigPath, B as splitCommandChain, C as isSupportedLocalAvatarExtension, D as setConfigOverride, E as resetConfigOverrides, F as normalizeTrustedSafeBinDirs, G as extractShellWrapperInlineCommand, H as matchAllowlist, I as validateSafeBinArgv, J as unwrapKnownDispatchWrapperInvocation, K as isDispatchWrapperExecutable, L as analyzeShellCommand, M as unsetConfigValueAtPath, N as getTrustedSafeBinDirs, O as unsetConfigOverride, P as isTrustedSafeBinPath, Q as normalizeSafeBinProfileFixtures, R as buildEnforcedShellCommand, S as isPathWithinRoot, T as getConfigOverrides, U as resolveAllowlistCandidatePath, V as DEFAULT_SAFE_BINS, W as resolveCommandResolutionFromArgv, X as splitShellArgs, Y as unwrapKnownShellMultiplexerInvocation, Z as SAFE_BIN_PROFILES, _ as parseDurationMs, a as resolveConfigSnapshotHash, b as isAvatarDataUrl, c as TELEGRAM_COMMAND_NAME_PATTERN, ct as VERSION, et as isSafeExecutableValue, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, it as resolveSlackStreamingMode, j as setConfigValueAtPath, k as getConfigValueAtPath, l as normalizeTelegramCommandName, lt as resolveOwnerDisplaySetting, m as resolveIMessageAttachmentRoots, n as loadConfig, nt as resolveDiscordPreviewStreamMode, o as writeConfigFile, ot as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, q as isShellWrapperExecutable, r as readConfigFileSnapshot, rt as resolveSlackNativeStreaming, s as validateConfigObjectWithPlugins, st as resolveAgentMaxConcurrent, tt as mapStreamingModeToSlackLegacyDraftStreamMode, u as resolveTelegramCustomCommands, w as validateJsonSchemaValue, x as isAvatarHttpUrl, y as AVATAR_MAX_BYTES, z as isWindowsPlatform } from "./config-Brd46Xc7.js";
28
28
  import { c as normalizePluginsConfig, f as isPathInsideWithRealpath, i as safeStatSync, l as resolveEffectiveEnableState, n as discoverOpenClawPlugins, r as isPathInside, s as applyTestPluginDefaults, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-nhWIJO2d.js";
29
29
  import { a as resolveChannelGroupRequireMention, c as normalizeHyphenSlug, i as resolveChannelGroupPolicy, l as normalizeStringEntries, n as listChannelDocks, o as resolveChannelGroupToolsPolicy, r as normalizeSignalMessagingTarget, s as normalizeAtHashSlug, t as getChannelDock, u as normalizeStringEntriesLower } from "./dock-RaNO1LM5.js";
30
- import { E as isSecureWebSocketUrl, S as ensureChromeExtensionRelayServer, T as isLoopbackHost, k as DEFAULT_AI_SNAPSHOT_MAX_CHARS, w as rawDataToString } from "./chrome-Bgt6MwLo.js";
30
+ import { E as isSecureWebSocketUrl, S as ensureChromeExtensionRelayServer, T as isLoopbackHost, k as DEFAULT_AI_SNAPSHOT_MAX_CHARS, w as rawDataToString } from "./chrome-C8Z3qDom.js";
31
31
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-ueWxHyi3.js";
32
32
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-DCqTXQZl.js";
33
33
  import { r as compileSafeRegex, t as redactSensitiveText } from "./redact-CP9noGXi.js";
@@ -40,7 +40,7 @@ import { a as resolveSessionTranscriptPath, c as resolveSessionTranscriptsDirFor
40
40
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-DDYvbmRV.js";
41
41
  import { a as canonicalizeBase64, i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, o as estimateBase64DecodedBytes, r as sanitizeToolResultImages } from "./tool-images-BRXaNmBZ.js";
42
42
  import { a as normalizeReasoningLevel, c as normalizeVerboseLevel, i as normalizeElevatedLevel, l as resolveResponseUsageMode, n as formatXHighModelHint, o as normalizeThinkLevel, s as normalizeUsageDisplay, t as formatThinkingLevels, u as supportsXHighThinking } from "./thinking-ZaPrKXBc.js";
43
- import { C as extractTextFromChatContent, S as isInsideCode, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, w as ensureOpenClawModelsJson, x as findCodeRegions, y as resolveToolDisplay } from "./image-CBCiUR7E.js";
43
+ import { C as extractTextFromChatContent, S as isInsideCode, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, w as ensureOpenClawModelsJson, x as findCodeRegions, y as resolveToolDisplay } from "./image-Bwz7k77z.js";
44
44
  import { n as resolveMemorySearchConfig } from "./manager-gAWsC5kd.js";
45
45
  import { n as fetchWithTimeout, t as bindAbortRelay } from "./fetch-timeout-O8zj7G_z.js";
46
46
  import { t as fetchWithSsrFGuard } from "./fetch-guard-B6-u0qUc.js";
@@ -54,7 +54,7 @@ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-DgX2oDXm.js";
54
54
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-B_AT3YGB.js";
55
55
  import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-Ba2LNVnK.js";
56
56
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-CQ0kI7S3.js";
57
- import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-9rrQ3leQ.js";
57
+ import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-yC0M8vBa.js";
58
58
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-BBHdHnVe.js";
59
59
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-BGS2SHjF.js";
60
60
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-Dyv8T9R5.js";
@@ -84,7 +84,7 @@ import { EdgeTTS } from "node-edge-tts";
84
84
  import AjvPkg from "ajv";
85
85
  import { createServer } from "node:http";
86
86
  import { ProxyAgent, fetch as fetch$1 } from "undici";
87
- import WebSocket, { WebSocket as WebSocket$1 } from "ws";
87
+ import WebSocket$1, { WebSocket } from "ws";
88
88
  import { Buffer as Buffer$1 } from "node:buffer";
89
89
  import { createJiti } from "jiti";
90
90
  import { Type } from "@sinclair/typebox";
@@ -6232,7 +6232,7 @@ var GatewayClient = class {
6232
6232
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
6233
6233
  });
6234
6234
  }
6235
- this.ws = new WebSocket$1(url, wsOptions);
6235
+ this.ws = new WebSocket(url, wsOptions);
6236
6236
  this.ws.on("open", () => {
6237
6237
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
6238
6238
  const tlsError = this.validateTlsFingerprint();
@@ -6424,7 +6424,7 @@ var GatewayClient = class {
6424
6424
  const connectChallengeTimeoutMs = typeof rawConnectDelayMs === "number" && Number.isFinite(rawConnectDelayMs) ? Math.max(250, Math.min(1e4, rawConnectDelayMs)) : 2e3;
6425
6425
  if (this.connectTimer) clearTimeout(this.connectTimer);
6426
6426
  this.connectTimer = setTimeout(() => {
6427
- if (this.connectSent || this.ws?.readyState !== WebSocket$1.OPEN) return;
6427
+ if (this.connectSent || this.ws?.readyState !== WebSocket.OPEN) return;
6428
6428
  this.opts.onConnectError?.(/* @__PURE__ */ new Error("gateway connect challenge timeout"));
6429
6429
  this.ws?.close(1008, "connect challenge timeout");
6430
6430
  }, connectChallengeTimeoutMs);
@@ -6466,7 +6466,7 @@ var GatewayClient = class {
6466
6466
  return null;
6467
6467
  }
6468
6468
  async request(method, params, opts) {
6469
- if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
6469
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
6470
6470
  const id = randomUUID();
6471
6471
  const frame = {
6472
6472
  type: "req",
@@ -7766,7 +7766,7 @@ async function routeReply(params) {
7766
7766
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7767
7767
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7768
7768
  try {
7769
- const { deliverOutboundPayloads } = await import("./deliver-DMSXRVHA.js").then((n) => n.n);
7769
+ const { deliverOutboundPayloads } = await import("./deliver-B2A1_Ib0.js").then((n) => n.n);
7770
7770
  return {
7771
7771
  ok: true,
7772
7772
  messageId: (await deliverOutboundPayloads({
@@ -41727,7 +41727,7 @@ async function deliverSessionMaintenanceWarning(params) {
41727
41727
  return;
41728
41728
  }
41729
41729
  try {
41730
- const { deliverOutboundPayloads } = await import("./deliver-DMSXRVHA.js").then((n) => n.n);
41730
+ const { deliverOutboundPayloads } = await import("./deliver-B2A1_Ib0.js").then((n) => n.n);
41731
41731
  await deliverOutboundPayloads({
41732
41732
  cfg: params.cfg,
41733
41733
  channel,
@@ -45246,7 +45246,7 @@ async function describeStickerImage(params) {
45246
45246
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
45247
45247
  try {
45248
45248
  const buffer = await fs$1.readFile(imagePath);
45249
- const { describeImageWithModel } = await import("./image-CBCiUR7E.js").then((n) => n.n);
45249
+ const { describeImageWithModel } = await import("./image-Bwz7k77z.js").then((n) => n.n);
45250
45250
  return (await describeImageWithModel({
45251
45251
  buffer,
45252
45252
  fileName: "sticker.webp",
@@ -47833,7 +47833,7 @@ async function preflightDiscordMessage(params) {
47833
47833
  let preflightTranscript;
47834
47834
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
47835
47835
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
47836
- const { transcribeFirstAudio } = await import("./audio-preflight-Co0omL5v.js");
47836
+ const { transcribeFirstAudio } = await import("./audio-preflight-C61PUPM0.js");
47837
47837
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
47838
47838
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
47839
47839
  ctx: {
@@ -51912,7 +51912,7 @@ function createOutboundSendDepsFromCliSource(deps) {
51912
51912
  function createDefaultDeps() {
51913
51913
  return {
51914
51914
  sendMessageWhatsApp: async (...args) => {
51915
- const { sendMessageWhatsApp } = await import("./web-CsipiksP.js");
51915
+ const { sendMessageWhatsApp } = await import("./web-CeLmpXQ6.js");
51916
51916
  return await sendMessageWhatsApp(...args);
51917
51917
  },
51918
51918
  sendMessageTelegram: async (...args) => {
@@ -54851,7 +54851,7 @@ function createDiscordGatewayPlugin(params) {
54851
54851
  super(options);
54852
54852
  }
54853
54853
  createWebSocket(url) {
54854
- return new WebSocket(url, { agent });
54854
+ return new WebSocket$1(url, { agent });
54855
54855
  }
54856
54856
  }
54857
54857
  return new ProxyGatewayPlugin();
@@ -65345,7 +65345,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
65345
65345
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
65346
65346
  let preflightTranscript;
65347
65347
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
65348
- const { transcribeFirstAudio } = await import("./audio-preflight-Co0omL5v.js");
65348
+ const { transcribeFirstAudio } = await import("./audio-preflight-C61PUPM0.js");
65349
65349
  preflightTranscript = await transcribeFirstAudio({
65350
65350
  ctx: {
65351
65351
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -67701,7 +67701,7 @@ function loadWebLoginQr() {
67701
67701
  return webLoginQrPromise;
67702
67702
  }
67703
67703
  function loadWebChannel() {
67704
- webChannelPromise ??= import("./web-CsipiksP.js");
67704
+ webChannelPromise ??= import("./web-CeLmpXQ6.js");
67705
67705
  return webChannelPromise;
67706
67706
  }
67707
67707
  function loadWhatsAppActions() {
@@ -8,7 +8,7 @@ import { t as parseBooleanValue } from "./boolean-mcn6kL0s.js";
8
8
  import { t as generateSecureToken } from "./secure-random-faWesvBQ.js";
9
9
  import { c as SafeOpenError, i as getImageMetadata, l as openFileWithinRoot, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-DR7iVy0X.js";
10
10
  import { n as loadConfig, o as writeConfigFile, t as createConfigIO } from "./config-DvUlTmaK.js";
11
- import { A as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, C as stopChromeExtensionRelayServer, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_OPENCLAW_BROWSER_COLOR, N as DEFAULT_OPENCLAW_BROWSER_ENABLED, O as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, P as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, S as ensureChromeExtensionRelayServer, T as isLoopbackHost, _ as appendCdpPath, a as resolveOpenClawUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as withBrowserNavigationPolicy, h as assertBrowserNavigationResultAllowed, i as launchOpenClawChrome, j as DEFAULT_BROWSER_EVALUATE_ENABLED, k as DEFAULT_AI_SNAPSHOT_MAX_CHARS, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopOpenClawChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchJson, y as fetchOk } from "./chrome-j8n4RCAx.js";
11
+ import { A as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, C as stopChromeExtensionRelayServer, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_OPENCLAW_BROWSER_COLOR, N as DEFAULT_OPENCLAW_BROWSER_ENABLED, O as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, P as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, S as ensureChromeExtensionRelayServer, T as isLoopbackHost, _ as appendCdpPath, a as resolveOpenClawUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as withBrowserNavigationPolicy, h as assertBrowserNavigationResultAllowed, i as launchOpenClawChrome, j as DEFAULT_BROWSER_EVALUATE_ENABLED, k as DEFAULT_AI_SNAPSHOT_MAX_CHARS, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopOpenClawChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchJson, y as fetchOk } from "./chrome-D5YOyhL2.js";
12
12
  import { t as SsrFBlockedError } from "./ssrf-BM54dmk8.js";
13
13
  import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-DOKat65v.js";
14
14
  import { n as isPathInside, t as isNotFoundPathError } from "./path-guards-5uqoMz3B.js";
@@ -1204,7 +1204,7 @@ function isModuleNotFoundError(err) {
1204
1204
  }
1205
1205
  async function loadPwAiModule(mode) {
1206
1206
  try {
1207
- return await import("./pw-ai-C5oON0ec.js");
1207
+ return await import("./pw-ai-ByboTZko.js");
1208
1208
  } catch (err) {
1209
1209
  if (mode === "soft") return null;
1210
1210
  if (isModuleNotFoundError(err)) return null;
@@ -3786,11 +3786,11 @@ function createProfileContext(opts, profile) {
3786
3786
  const userDataDir = resolveOpenClawUserDataDir(profile.name);
3787
3787
  const profileState = getProfileState();
3788
3788
  if (await isHttpReachable(300) && !profileState.running) try {
3789
- await (await import("./pw-ai-C5oON0ec.js")).closePlaywrightBrowserConnection();
3789
+ await (await import("./pw-ai-ByboTZko.js")).closePlaywrightBrowserConnection();
3790
3790
  } catch {}
3791
3791
  if (profileState.running) await stopRunningBrowser();
3792
3792
  try {
3793
- await (await import("./pw-ai-C5oON0ec.js")).closePlaywrightBrowserConnection();
3793
+ await (await import("./pw-ai-ByboTZko.js")).closePlaywrightBrowserConnection();
3794
3794
  } catch {}
3795
3795
  if (!fs$1.existsSync(userDataDir)) return {
3796
3796
  moved: false,
@@ -6,7 +6,7 @@ import { n as parseBooleanValue, r as formatCliCommand } from "./env-DC7b5MnK.js
6
6
  import { t as generateSecureToken } from "./secure-random-D7Pne8Yn.js";
7
7
  import { c as SafeOpenError, i as getImageMetadata, l as openFileWithinRoot, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-CUmS__96.js";
8
8
  import { n as loadConfig, o as writeConfigFile, t as createConfigIO } from "./config-Brd46Xc7.js";
9
- import { A as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, C as stopChromeExtensionRelayServer, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_OPENCLAW_BROWSER_COLOR, N as DEFAULT_OPENCLAW_BROWSER_ENABLED, O as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, P as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, S as ensureChromeExtensionRelayServer, T as isLoopbackHost, _ as appendCdpPath, a as resolveOpenClawUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as withBrowserNavigationPolicy, h as assertBrowserNavigationResultAllowed, i as launchOpenClawChrome, j as DEFAULT_BROWSER_EVALUATE_ENABLED, k as DEFAULT_AI_SNAPSHOT_MAX_CHARS, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopOpenClawChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchJson, y as fetchOk } from "./chrome-Bgt6MwLo.js";
9
+ import { A as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, C as stopChromeExtensionRelayServer, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_OPENCLAW_BROWSER_COLOR, N as DEFAULT_OPENCLAW_BROWSER_ENABLED, O as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, P as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, S as ensureChromeExtensionRelayServer, T as isLoopbackHost, _ as appendCdpPath, a as resolveOpenClawUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as withBrowserNavigationPolicy, h as assertBrowserNavigationResultAllowed, i as launchOpenClawChrome, j as DEFAULT_BROWSER_EVALUATE_ENABLED, k as DEFAULT_AI_SNAPSHOT_MAX_CHARS, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopOpenClawChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchJson, y as fetchOk } from "./chrome-C8Z3qDom.js";
10
10
  import { t as SsrFBlockedError } from "./ssrf-ueWxHyi3.js";
11
11
  import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-DCqTXQZl.js";
12
12
  import { n as isPathInside, t as isNotFoundPathError } from "./path-guards-B5JHXmzV.js";
@@ -1202,7 +1202,7 @@ function isModuleNotFoundError(err) {
1202
1202
  }
1203
1203
  async function loadPwAiModule(mode) {
1204
1204
  try {
1205
- return await import("./pw-ai-Cb0QMSLC.js");
1205
+ return await import("./pw-ai-BZWA5N2u.js");
1206
1206
  } catch (err) {
1207
1207
  if (mode === "soft") return null;
1208
1208
  if (isModuleNotFoundError(err)) return null;
@@ -3784,11 +3784,11 @@ function createProfileContext(opts, profile) {
3784
3784
  const userDataDir = resolveOpenClawUserDataDir(profile.name);
3785
3785
  const profileState = getProfileState();
3786
3786
  if (await isHttpReachable(300) && !profileState.running) try {
3787
- await (await import("./pw-ai-Cb0QMSLC.js")).closePlaywrightBrowserConnection();
3787
+ await (await import("./pw-ai-BZWA5N2u.js")).closePlaywrightBrowserConnection();
3788
3788
  } catch {}
3789
3789
  if (profileState.running) await stopRunningBrowser();
3790
3790
  try {
3791
- await (await import("./pw-ai-Cb0QMSLC.js")).closePlaywrightBrowserConnection();
3791
+ await (await import("./pw-ai-BZWA5N2u.js")).closePlaywrightBrowserConnection();
3792
3792
  } catch {}
3793
3793
  if (!fs.existsSync(userDataDir)) return {
3794
3794
  moved: false,
@@ -6,7 +6,7 @@ import "./github-copilot-token-D8k4aAom.js";
6
6
  import { r as formatCliCommand } from "./env-DC7b5MnK.js";
7
7
  import "./config-Brd46Xc7.js";
8
8
  import "./manifest-registry-nhWIJO2d.js";
9
- import { _ as appendCdpPath, b as getHeadersWithAuth, d as normalizeCdpWsUrl, g as withBrowserNavigationPolicy, h as assertBrowserNavigationResultAllowed, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, v as fetchJson, x as withCdpSocket } from "./chrome-Bgt6MwLo.js";
9
+ import { _ as appendCdpPath, b as getHeadersWithAuth, d as normalizeCdpWsUrl, g as withBrowserNavigationPolicy, h as assertBrowserNavigationResultAllowed, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, v as fetchJson, x as withCdpSocket } from "./chrome-C8Z3qDom.js";
10
10
  import "./ssrf-ueWxHyi3.js";
11
11
  import "./redact-CP9noGXi.js";
12
12
  import { n as formatErrorMessage } from "./errors-COPNX9uN.js";
@@ -8,7 +8,7 @@ import { n as formatCliCommand } from "./env-Bw45uydv.js";
8
8
  import "./boolean-mcn6kL0s.js";
9
9
  import "./config-DvUlTmaK.js";
10
10
  import "./manifest-registry-DARtGCWp.js";
11
- import { _ as appendCdpPath, b as getHeadersWithAuth, d as normalizeCdpWsUrl, g as withBrowserNavigationPolicy, h as assertBrowserNavigationResultAllowed, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, v as fetchJson, x as withCdpSocket } from "./chrome-j8n4RCAx.js";
11
+ import { _ as appendCdpPath, b as getHeadersWithAuth, d as normalizeCdpWsUrl, g as withBrowserNavigationPolicy, h as assertBrowserNavigationResultAllowed, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, v as fetchJson, x as withCdpSocket } from "./chrome-D5YOyhL2.js";
12
12
  import "./ssrf-BM54dmk8.js";
13
13
  import "./redact-C_vdZ7-E.js";
14
14
  import { n as formatErrorMessage } from "./errors-BggFlOL1.js";
@@ -5,7 +5,7 @@ import { E as resolveApiKeyForProvider, T as requireApiKey, X as resolveOpenClaw
5
5
  import { t as normalizeChatType } from "./chat-type-C4pAlbsI.js";
6
6
  import { _ as kindFromMime, d as detectMime, h as isAudioFileName, p as getFileExtension } from "./image-ops-DR7iVy0X.js";
7
7
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-DvUlTmaK.js";
8
- import { t as describeImageWithModel, w as ensureOpenClawModelsJson } from "./image-C3Y2REz9.js";
8
+ import { t as describeImageWithModel, w as ensureOpenClawModelsJson } from "./image-D9XRntUA.js";
9
9
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-DejNVJue.js";
10
10
  import { n as fetchWithTimeout } from "./fetch-timeout-DwuL9y6C.js";
11
11
  import { t as fetchWithSsrFGuard } from "./fetch-guard-Diq4wbzK.js";
@@ -4,7 +4,7 @@ import { E as resolveApiKeyForProvider, T as requireApiKey, X as resolveOpenClaw
4
4
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
5
5
  import { _ as kindFromMime, d as detectMime, h as isAudioFileName, p as getFileExtension } from "./image-ops-CUmS__96.js";
6
6
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-Brd46Xc7.js";
7
- import { t as describeImageWithModel, w as ensureOpenClawModelsJson } from "./image-CBCiUR7E.js";
7
+ import { t as describeImageWithModel, w as ensureOpenClawModelsJson } from "./image-Bwz7k77z.js";
8
8
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-Cg8dT8ZL.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-O8zj7G_z.js";
10
10
  import { t as fetchWithSsrFGuard } from "./fetch-guard-B6-u0qUc.js";
@@ -7,13 +7,13 @@ import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createR
7
7
  import "./github-copilot-token-D8k4aAom.js";
8
8
  import { r as formatCliCommand } from "./env-DC7b5MnK.js";
9
9
  import "./tokens-DcXIijvb.js";
10
- import { C as formatInboundEnvelope, D as buildMentionRegexes, E as shouldComputeCommandAuthorized, O as normalizeMentionText, S as resolveInboundDebounceMs, T as hasControlCommand, _ as normalizeGroupActivation, a as resolveMentionGating, b as enqueueSystemEvent, c as recordPendingHistoryEntryIfEnabled, d as warnMissingProviderGroupPolicyFallbackOnce, f as shouldAckReactionForWhatsApp, g as getReplyFromConfig, h as createDedupeCache, i as buildPairingReply, l as resolveDefaultGroupPolicy, n as computeBackoff, o as DEFAULT_GROUP_HISTORY_LIMIT, p as dispatchReplyWithBufferedBlockDispatcher, r as sleepWithAbort, s as buildHistoryContextFromEntries, u as resolveOpenProviderRuntimeGroupPolicy, v as parseActivationCommand, w as resolveEnvelopeFormatOptions, x as createInboundDebouncer, y as formatDurationPrecise } from "./pi-embedded-lyna_bRo.js";
10
+ import { C as formatInboundEnvelope, D as buildMentionRegexes, E as shouldComputeCommandAuthorized, O as normalizeMentionText, S as resolveInboundDebounceMs, T as hasControlCommand, _ as normalizeGroupActivation, a as resolveMentionGating, b as enqueueSystemEvent, c as recordPendingHistoryEntryIfEnabled, d as warnMissingProviderGroupPolicyFallbackOnce, f as shouldAckReactionForWhatsApp, g as getReplyFromConfig, h as createDedupeCache, i as buildPairingReply, l as resolveDefaultGroupPolicy, n as computeBackoff, o as DEFAULT_GROUP_HISTORY_LIMIT, p as dispatchReplyWithBufferedBlockDispatcher, r as sleepWithAbort, s as buildHistoryContextFromEntries, u as resolveOpenProviderRuntimeGroupPolicy, v as parseActivationCommand, w as resolveEnvelopeFormatOptions, x as createInboundDebouncer, y as formatDurationPrecise } from "./pi-embedded-CWNyms-S.js";
11
11
  import "./plugins-YwGWnhQE.js";
12
12
  import { i as logWebSelfId, l as readWebSelfId, n as WA_WEB_AUTH_DIR, p as webAuthExists, r as getWebAuthAgeMs, s as pickWebChannel, t as resolveWhatsAppAccount } from "./accounts-DvzTPeU9.js";
13
13
  import "./bindings-oW5ZqVhx.js";
14
14
  import "./send-BNm6G6BO.js";
15
15
  import "./send-DvIuJV-e.js";
16
- import "./deliver-DMSXRVHA.js";
16
+ import "./deliver-B2A1_Ib0.js";
17
17
  import "./diagnostic-Cvpy6jbf.js";
18
18
  import "./diagnostic-session-state-Bu3E4Enn.js";
19
19
  import "./accounts-cIBPf9IB.js";
@@ -21,11 +21,11 @@ import { G as formatLocationText, J as readChannelAllowFromStore, K as toLocatio
21
21
  import "./image-ops-CUmS__96.js";
22
22
  import "./pi-model-discovery-DaNAekda.js";
23
23
  import "./message-channel-BTrsc2pw.js";
24
- import "./pi-embedded-helpers-DyYgf00n.js";
24
+ import "./pi-embedded-helpers-BxjDtTSD.js";
25
25
  import { n as loadConfig } from "./config-Brd46Xc7.js";
26
26
  import "./manifest-registry-nhWIJO2d.js";
27
27
  import { a as resolveChannelGroupRequireMention, i as resolveChannelGroupPolicy } from "./dock-RaNO1LM5.js";
28
- import "./chrome-Bgt6MwLo.js";
28
+ import "./chrome-C8Z3qDom.js";
29
29
  import "./ssrf-ueWxHyi3.js";
30
30
  import "./skills-DCqTXQZl.js";
31
31
  import "./redact-CP9noGXi.js";
@@ -36,7 +36,7 @@ import "./accounts-ru--5lJj.js";
36
36
  import { l as resolveStorePath } from "./paths-DbuO2gD6.js";
37
37
  import "./tool-images-BRXaNmBZ.js";
38
38
  import "./thinking-ZaPrKXBc.js";
39
- import "./image-CBCiUR7E.js";
39
+ import "./image-Bwz7k77z.js";
40
40
  import "./manager-gAWsC5kd.js";
41
41
  import "./gemini-auth-Cg8dT8ZL.js";
42
42
  import "./fetch-guard-B6-u0qUc.js";
@@ -51,7 +51,7 @@ import "./render-DwEu-aCr.js";
51
51
  import "./commands-registry-B_AT3YGB.js";
52
52
  import "./skill-commands-Ba2LNVnK.js";
53
53
  import { t as finalizeInboundContext } from "./inbound-context-CQ0kI7S3.js";
54
- import { p as registerUnhandledRejectionHandler } from "./runner-9rrQ3leQ.js";
54
+ import { p as registerUnhandledRejectionHandler } from "./runner-yC0M8vBa.js";
55
55
  import "./fetch-BBHdHnVe.js";
56
56
  import { n as recordChannelActivity } from "./channel-activity-Dyv8T9R5.js";
57
57
  import { t as convertMarkdownTables } from "./tables-WfvRFaDH.js";
@@ -8,13 +8,13 @@ import "./github-copilot-token-BkwQAVvU.js";
8
8
  import { n as formatCliCommand } from "./env-Bw45uydv.js";
9
9
  import "./boolean-mcn6kL0s.js";
10
10
  import "./tokens-BLlPaiD5.js";
11
- import { A as normalizeMentionText, C as createInboundDebouncer, D as hasControlCommand, E as resolveEnvelopeFormatOptions, O as shouldComputeCommandAuthorized, S as enqueueSystemEvent, T as formatInboundEnvelope, _ as createDedupeCache, b as parseActivationCommand, c as DEFAULT_GROUP_HISTORY_LIMIT, d as resolveDefaultGroupPolicy, f as resolveOpenProviderRuntimeGroupPolicy, h as dispatchReplyWithBufferedBlockDispatcher, k as buildMentionRegexes, l as buildHistoryContextFromEntries, m as shouldAckReactionForWhatsApp, n as computeBackoff, o as buildPairingReply, p as warnMissingProviderGroupPolicyFallbackOnce, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as getReplyFromConfig, w as resolveInboundDebounceMs, x as formatDurationPrecise, y as normalizeGroupActivation } from "./pi-embedded-CV53eKpr.js";
11
+ import { A as normalizeMentionText, C as createInboundDebouncer, D as hasControlCommand, E as resolveEnvelopeFormatOptions, O as shouldComputeCommandAuthorized, S as enqueueSystemEvent, T as formatInboundEnvelope, _ as createDedupeCache, b as parseActivationCommand, c as DEFAULT_GROUP_HISTORY_LIMIT, d as resolveDefaultGroupPolicy, f as resolveOpenProviderRuntimeGroupPolicy, h as dispatchReplyWithBufferedBlockDispatcher, k as buildMentionRegexes, l as buildHistoryContextFromEntries, m as shouldAckReactionForWhatsApp, n as computeBackoff, o as buildPairingReply, p as warnMissingProviderGroupPolicyFallbackOnce, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as getReplyFromConfig, w as resolveInboundDebounceMs, x as formatDurationPrecise, y as normalizeGroupActivation } from "./pi-embedded-54x4PM3A.js";
12
12
  import "./plugins-BlRpkhyC.js";
13
13
  import { i as logWebSelfId, l as readWebSelfId, n as WA_WEB_AUTH_DIR, p as webAuthExists, r as getWebAuthAgeMs, s as pickWebChannel, t as resolveWhatsAppAccount } from "./accounts-CxYlEftx.js";
14
14
  import "./bindings-BCOutV7A.js";
15
15
  import "./send-BF8QfC--.js";
16
16
  import "./send-CBl-cFHi.js";
17
- import "./deliver-BHbS7MPi.js";
17
+ import "./deliver-i_F6aUuX.js";
18
18
  import "./diagnostic-D_de7-KX.js";
19
19
  import "./diagnostic-session-state-C0Sxjfox.js";
20
20
  import "./accounts-Ci-FogVD.js";
@@ -22,11 +22,11 @@ import { G as formatLocationText, J as readChannelAllowFromStore, K as toLocatio
22
22
  import "./image-ops-DR7iVy0X.js";
23
23
  import "./pi-model-discovery-C-yOXpma.js";
24
24
  import "./message-channel-NXidGUO7.js";
25
- import "./pi-embedded-helpers-ABBMCQ4Q.js";
25
+ import "./pi-embedded-helpers-BdkmD3wR.js";
26
26
  import { n as loadConfig } from "./config-DvUlTmaK.js";
27
27
  import "./manifest-registry-DARtGCWp.js";
28
28
  import { a as resolveChannelGroupRequireMention, i as resolveChannelGroupPolicy } from "./dock-Devv97xs.js";
29
- import "./chrome-j8n4RCAx.js";
29
+ import "./chrome-D5YOyhL2.js";
30
30
  import "./ssrf-BM54dmk8.js";
31
31
  import "./frontmatter-CYyVkHva.js";
32
32
  import "./skills-DOKat65v.js";
@@ -38,7 +38,7 @@ import "./accounts-DKYigdEx.js";
38
38
  import { l as resolveStorePath } from "./paths-CLWDvYDE.js";
39
39
  import "./tool-images-DeM5viPH.js";
40
40
  import "./thinking-CJoHneR6.js";
41
- import "./image-C3Y2REz9.js";
41
+ import "./image-D9XRntUA.js";
42
42
  import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createReplyPrefixOptions } from "./reply-prefix-Cha4QN8H.js";
43
43
  import "./manager-DkvrfiWy.js";
44
44
  import "./gemini-auth-DejNVJue.js";
@@ -54,7 +54,7 @@ import "./render-loap2gRq.js";
54
54
  import "./commands-registry-CclRtEXd.js";
55
55
  import "./skill-commands-6qLPyery.js";
56
56
  import { t as finalizeInboundContext } from "./inbound-context-3RiUKgll.js";
57
- import { p as registerUnhandledRejectionHandler } from "./runner-RETaennS.js";
57
+ import { p as registerUnhandledRejectionHandler } from "./runner-Bb2G1wrS.js";
58
58
  import "./fetch-CSgvhNYZ.js";
59
59
  import { n as recordChannelActivity } from "./channel-activity-mEN8_E9p.js";
60
60
  import { t as convertMarkdownTables } from "./tables-DV7HmexJ.js";
@@ -9,6 +9,10 @@ read_when:
9
9
 
10
10
  # Prompt caching
11
11
 
12
+ Prompt caching means the model provider can reuse unchanged prompt prefixes (usually system/developer instructions and other stable context) across turns instead of re-processing them every time. The first matching request writes cache tokens (`cacheWrite`), and later matching requests can read them back (`cacheRead`).
13
+
14
+ Why this matters: lower token cost, faster responses, and more predictable performance for long-running sessions. Without caching, repeated prompts pay the full prompt cost on every turn even when most input did not change.
15
+
12
16
  This page covers all cache-related knobs that affect prompt reuse and token cost.
13
17
 
14
18
  For Anthropic pricing details, see:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openclaw",
3
- "version": "2026.2.23-beta.1",
3
+ "version": "2026.2.23",
4
4
  "description": "Multi-channel AI gateway with extensible messaging integrations",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/openclaw/openclaw#readme",