wednesdayai 0.4.12-dev.704 → 0.4.12-dev.705

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 (190) hide show
  1. package/README.md +17 -37
  2. package/dist/{agent-turn-runner-DqMoXRuU.js → agent-turn-runner-BpzPb_LQ.js} +3 -3
  3. package/dist/{agent-turn-runner-B-7YUyze.js → agent-turn-runner-CLScSQoW.js} +3 -3
  4. package/dist/{audio-preflight--JCKSyRB.js → audio-preflight-BXfuOHLv.js} +5 -5
  5. package/dist/{audio-preflight-BXVADGV1.js → audio-preflight-D9KtmJay.js} +5 -5
  6. package/dist/{audio-transcription-runner-DOckW8KR.js → audio-transcription-runner-BA6t6iSO.js} +1 -1
  7. package/dist/{audio-transcription-runner-rzX-3s-8.js → audio-transcription-runner-CdwSTFuT.js} +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/bundled/boot-md/handler.js +12 -12
  10. package/dist/bundled/session-journal/handler.js +12 -12
  11. package/dist/bundled/session-memory/handler.js +12 -12
  12. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  13. package/dist/{chrome-NdTR0Suj.js → chrome-CGClRujb.js} +8 -8
  14. package/dist/{chrome-BWMtx0mE.js → chrome-CTyhKrVS.js} +8 -8
  15. package/dist/{command-queue-9A3kOAZN.js → command-queue-DKPv7dYN.js} +1 -1
  16. package/dist/{command-queue-BG3CzKrI.js → command-queue-o1awgKih.js} +1 -1
  17. package/dist/{deliver-Co_a29nB.js → deliver-Bs58Ncxn.js} +1 -1
  18. package/dist/{deliver-BdqSGMEa.js → deliver-DrmyBByg.js} +1 -1
  19. package/dist/{diagnostic-Cfb2ONnX.js → diagnostic-Ba0VUozS.js} +1 -1
  20. package/dist/{diagnostic-BwoKR7Xi.js → diagnostic-DmBrpD9P.js} +1 -1
  21. package/dist/extensionAPI.js +12 -12
  22. package/dist/llm-slug-generator.js +12 -12
  23. package/dist/{pi-embedded-B8eDIvpq.js → pi-embedded-Cklnkha9.js} +28 -28
  24. package/dist/{pi-embedded-tUqWFr9c.js → pi-embedded-DHw7Di5R.js} +28 -28
  25. package/dist/{pi-embedded-helpers-BvZj1LkK.js → pi-embedded-helpers-4qLKF7Ti.js} +3 -3
  26. package/dist/{pi-embedded-helpers-BKVOw8ZC.js → pi-embedded-helpers-DYlkCsNL.js} +3 -3
  27. package/dist/{pi-embedded-utils-BgW57VPl.js → pi-embedded-utils-CHJI4-m4.js} +1 -1
  28. package/dist/{pi-embedded-utils-dzSLPKQ1.js → pi-embedded-utils-DGuyV3oI.js} +1 -1
  29. package/dist/plugin-sdk/{agent-scope-CEEynY4W.js → agent-scope-BeUdw1gJ.js} +2 -2
  30. package/dist/plugin-sdk/agent-turn-execute-CJ36gcjc.js +61 -0
  31. package/dist/plugin-sdk/{agent-turn-runner-CS_9t8FO.js → agent-turn-runner-C9Ll5QSC.js} +6 -6
  32. package/dist/plugin-sdk/{api-key-rotation-C-kEOoei.js → api-key-rotation-CXgGGVWn.js} +2 -2
  33. package/dist/plugin-sdk/{audio-preflight-DKGcwiIP.js → audio-preflight-DwOfW2wS.js} +22 -22
  34. package/dist/plugin-sdk/{audio-transcription-runner-C6_AucCP.js → audio-transcription-runner-JGf9MAOA.js} +11 -11
  35. package/dist/plugin-sdk/{auth-profiles-BqSPZl3H.js → auth-profiles-C_lsRyPw.js} +5 -5
  36. package/dist/plugin-sdk/{channel-activity-BuWLq6ts.js → channel-activity-UKizAHW8.js} +3 -3
  37. package/dist/plugin-sdk/{chrome-nWku6ryP.js → chrome-a1SYKLWC.js} +4 -4
  38. package/dist/plugin-sdk/{chunk-HpUuRSbr.js → chunk-DaqKWnuH.js} +4 -4
  39. package/dist/plugin-sdk/{command-queue-CZblXUNl.js → command-queue-D38UhuK9.js} +2 -2
  40. package/dist/plugin-sdk/{commands-registry-C5lbBMQS.js → commands-registry-BMtROFJo.js} +3 -3
  41. package/dist/plugin-sdk/{deliver-BmNkbjkg.js → deliver-BwrjhyjB.js} +11 -11
  42. package/dist/plugin-sdk/deliver-Cs4Z-yfq.js +32 -0
  43. package/dist/plugin-sdk/{diagnostic-DqBP7fk9.js → diagnostic-mAxbFQHT.js} +7 -7
  44. package/dist/plugin-sdk/{diagnostic-session-state-ZELApkcq.js → diagnostic-session-state-CxVUBLHW.js} +1 -1
  45. package/dist/plugin-sdk/{fetch-CbHYT-hn.js → fetch-BKb3qUv8.js} +1 -1
  46. package/dist/plugin-sdk/{fetch-Cb4UmAkA.js → fetch-DBpdlEqi.js} +7 -7
  47. package/dist/plugin-sdk/{fetch-guard-Cbfi49RA.js → fetch-guard-DlWfki0g.js} +4 -4
  48. package/dist/plugin-sdk/{fetch-timeout-C_ox1u3l.js → fetch-timeout-Bftlxkgu.js} +1 -1
  49. package/dist/plugin-sdk/{fs-safe-5miLMTNQ.js → fs-safe-MgrkXibA.js} +3 -3
  50. package/dist/plugin-sdk/{image-ops-beo_JiSv.js → image-ops-Ds3TYUBA.js} +1 -1
  51. package/dist/plugin-sdk/{inbound-context-DVane3Zi.js → inbound-context-B6ovxuzF.js} +1 -1
  52. package/dist/plugin-sdk/{ir-CG1ZJvEL.js → ir-CwFlacLK.js} +5 -5
  53. package/dist/plugin-sdk/{logger-DjkYAAwO.js → logger-COjxz0oP.js} +1 -1
  54. package/dist/plugin-sdk/manager-BMV4GnjN.js +16 -0
  55. package/dist/plugin-sdk/{manager-BLjtt5-a.js → manager-MhRo_Y53.js} +8 -8
  56. package/dist/plugin-sdk/{markdown-tables-UtpXDc0t.js → markdown-tables-C9S5LJE6.js} +3 -3
  57. package/dist/plugin-sdk/{outbound-attachment-BJBF5SSr.js → outbound-attachment-CUXAsLsK.js} +2 -2
  58. package/dist/plugin-sdk/{outbound-message-hooks-D3KenJeF.js → outbound-message-hooks-Bg-e0wJT.js} +2 -2
  59. package/dist/plugin-sdk/{path-alias-guards-CfZ68Gx1.js → path-alias-guards-BsvpbjFQ.js} +1 -1
  60. package/dist/plugin-sdk/{pi-embedded-helpers-qFbUJ-VN.js → pi-embedded-helpers-B035viJt.js} +11 -11
  61. package/dist/plugin-sdk/{pi-embedded-utils-BfL7nQ-7.js → pi-embedded-utils-Ckrw1zyA.js} +3 -3
  62. package/dist/plugin-sdk/{pi-model-discovery-FLUIEwh4.js → pi-model-discovery-DoON6s_y.js} +2 -2
  63. package/dist/plugin-sdk/provider-dispatcher-DNwnSw41.js +61 -0
  64. package/dist/plugin-sdk/provider-image-DXbrbBES.js +22 -0
  65. package/dist/plugin-sdk/{provider-image-BPSs4wqU.js → provider-image-JOxAggPa.js} +5 -5
  66. package/dist/plugin-sdk/provider-media-understanding.js +7 -7
  67. package/dist/plugin-sdk/{proxy-C18DroLg.js → proxy-CJSKrzHc.js} +2 -2
  68. package/dist/plugin-sdk/{proxy-env-Dof0ndb_.js → proxy-env-Bi6F7qH_.js} +2 -2
  69. package/dist/plugin-sdk/{proxy-fetch-D7HnSmzd.js → proxy-fetch-BVHQlQ0b.js} +1 -1
  70. package/dist/plugin-sdk/{pw-ai-0mmw3fTw.js → pw-ai-BtJHSLu5.js} +10 -10
  71. package/dist/plugin-sdk/{qmd-manager-FOnSMxsG.js → qmd-manager-Yj4sdDks.js} +8 -8
  72. package/dist/plugin-sdk/{query-expansion-DsO05YlE.js → query-expansion-6YaEe4is.js} +3 -3
  73. package/dist/plugin-sdk/{recorder-5bzf6ySQ.js → recorder-DCKCn66f.js} +4 -4
  74. package/dist/plugin-sdk/{redact-Cys_2lrs.js → redact-Bi7p4BwQ.js} +1 -1
  75. package/dist/plugin-sdk/{registry-MeZym4lM.js → registry-BAGNI7rT.js} +7 -7
  76. package/dist/plugin-sdk/replies-Be239YFg.js +25 -0
  77. package/dist/plugin-sdk/{replies-DkvzoPb0.js → replies-QdHoPz--.js} +4 -4
  78. package/dist/plugin-sdk/{reply-directives-CNkQ10XJ.js → reply-directives-B_Ac2F5C.js} +2 -2
  79. package/dist/plugin-sdk/{reply-prefix-p0F2JPGu.js → reply-prefix-BicsLWcm.js} +2 -2
  80. package/dist/plugin-sdk/{resolve-route-DeggwjWG.js → resolve-route-D628GK2e.js} +5 -5
  81. package/dist/plugin-sdk/{run-with-concurrency-ILVrq3D3.js → run-with-concurrency-jmsjZzF_.js} +1 -1
  82. package/dist/plugin-sdk/{runs-CfIZFuVN.js → runs-CK-hc7Zt.js} +8 -8
  83. package/dist/plugin-sdk/runs-vOx1d_ks.js +25 -0
  84. package/dist/plugin-sdk/{send-BzYNrJe2.js → send-B185UKV9.js} +14 -14
  85. package/dist/plugin-sdk/{send-TkRZ83nq.js → send-BWpmSHCb.js} +8 -8
  86. package/dist/plugin-sdk/{send-VImHlXZJ.js → send-BZmyU4ku.js} +9 -9
  87. package/dist/plugin-sdk/send-BbBjb8Y6.js +27 -0
  88. package/dist/plugin-sdk/send-BeGT-pg6.js +23 -0
  89. package/dist/plugin-sdk/{send-11C4Ciys.js → send-CJaXVbN1.js} +6 -6
  90. package/dist/plugin-sdk/{send-DoNV4ASm.js → send-D2YHGuuw.js} +7 -7
  91. package/dist/plugin-sdk/{send-CMdCjWsm.js → send-DpOu5jYA.js} +20 -20
  92. package/dist/plugin-sdk/send-j6u0up7Q.js +24 -0
  93. package/dist/plugin-sdk/send-mvIDllNB.js +25 -0
  94. package/dist/plugin-sdk/{session-meta-g4bndbGh.js → session-meta-sdu80P7z.js} +3 -3
  95. package/dist/plugin-sdk/{skill-commands-D6cK0kno.js → skill-commands-DslzFiF-.js} +6 -6
  96. package/dist/plugin-sdk/{skills-DYR5x5Gr.js → skills-CK4ps21y.js} +6 -6
  97. package/dist/plugin-sdk/{store-Cy3Dzpbu.js → store-B3fH9LYD.js} +2 -2
  98. package/dist/plugin-sdk/subagent-registry-dkpySBIy.js +61 -0
  99. package/dist/plugin-sdk/{subsystem-BJwpOj_m.js → subsystem-rgYCdGI1.js} +4 -4
  100. package/dist/plugin-sdk/{tables-DBa8HzDM.js → tables-CWATSMdp.js} +1 -1
  101. package/dist/plugin-sdk/testing.js +55 -55
  102. package/dist/plugin-sdk/{tokens-BZ4pmyi4.js → tokens-DTNAbGed.js} +1 -1
  103. package/dist/plugin-sdk/{tool-loop-detection-O55eXW7t.js → tool-loop-detection-hidML3Zn.js} +1 -1
  104. package/dist/plugin-sdk/{tools-Bx_bU8Ko.js → tools-BYRFeM5o.js} +93 -93
  105. package/dist/plugin-sdk/{user-run-recording-DepmpAdE.js → user-run-recording-DBN9MLgl.js} +3 -3
  106. package/dist/{provider-image-BqxdhC84.js → provider-image-BfLbSFcG.js} +1 -1
  107. package/dist/{provider-image-Cn_5jslf.js → provider-image-CtDp01Fm.js} +1 -1
  108. package/dist/{pw-ai-DTklTcfl.js → pw-ai-5UgHGA7x.js} +1 -1
  109. package/dist/{pw-ai-CZUfhsmk.js → pw-ai-Dmtqq3b6.js} +1 -1
  110. package/dist/{runs-B5jL-JGA.js → runs-BKXuFolN.js} +3 -3
  111. package/dist/{runs-vS0SOF8v.js → runs-Dgl9DXVG.js} +3 -3
  112. package/dist/{send-Bo-flx6B.js → send-BWsYS2bT.js} +1 -1
  113. package/dist/{send-BRRJAJM9.js → send-C6j-WuJq.js} +1 -1
  114. package/extensions/acpx/package.json +1 -1
  115. package/extensions/anthropic/package.json +1 -1
  116. package/extensions/bifrost/package.json +1 -1
  117. package/extensions/bluebubbles/package.json +1 -1
  118. package/extensions/copilot-proxy/package.json +1 -1
  119. package/extensions/deepgram/package.json +1 -1
  120. package/extensions/deepinfra/package.json +1 -1
  121. package/extensions/diagnostics-otel/package.json +1 -1
  122. package/extensions/diffs/package.json +1 -1
  123. package/extensions/discord/package.json +1 -1
  124. package/extensions/dream-cycle/package.json +1 -1
  125. package/extensions/elevenlabs/package.json +1 -1
  126. package/extensions/feishu/package.json +1 -1
  127. package/extensions/gemini-search/package.json +1 -1
  128. package/extensions/google/package.json +1 -1
  129. package/extensions/google-gemini-cli-auth/package.json +1 -1
  130. package/extensions/googlechat/package.json +1 -1
  131. package/extensions/grok-search/package.json +1 -1
  132. package/extensions/groq/package.json +1 -1
  133. package/extensions/imessage/package.json +1 -1
  134. package/extensions/irc/package.json +1 -1
  135. package/extensions/kimi-search/package.json +1 -1
  136. package/extensions/learning-core/index.ts +1 -1
  137. package/extensions/learning-core/package.json +1 -1
  138. package/extensions/learning-core/src/learning-schema.test.ts +1 -1
  139. package/extensions/learning-core/src/types.ts +1 -1
  140. package/extensions/line/package.json +1 -1
  141. package/extensions/llm-task/package.json +1 -1
  142. package/extensions/lobster/package.json +1 -1
  143. package/extensions/matrix/CHANGELOG.md +1 -1
  144. package/extensions/matrix/package.json +1 -1
  145. package/extensions/mattermost/package.json +1 -1
  146. package/extensions/memory-core/package.json +1 -1
  147. package/extensions/memory-lancedb/package.json +1 -1
  148. package/extensions/minimax/package.json +1 -1
  149. package/extensions/minimax-portal-auth/package.json +1 -1
  150. package/extensions/mistral/package.json +1 -1
  151. package/extensions/moonshot/package.json +1 -1
  152. package/extensions/msteams/CHANGELOG.md +1 -1
  153. package/extensions/msteams/package.json +1 -1
  154. package/extensions/nextcloud-talk/package.json +1 -1
  155. package/extensions/nostr/CHANGELOG.md +1 -1
  156. package/extensions/nostr/package.json +1 -1
  157. package/extensions/open-prose/package.json +1 -1
  158. package/extensions/openai/package.json +1 -1
  159. package/extensions/openai-realtime/package.json +1 -1
  160. package/extensions/openrouter/package.json +1 -1
  161. package/extensions/perplexity-search/package.json +1 -1
  162. package/extensions/searxng-search/package.json +1 -1
  163. package/extensions/signal/package.json +1 -1
  164. package/extensions/slack/package.json +1 -1
  165. package/extensions/synology-chat/package.json +1 -1
  166. package/extensions/telegram/package.json +1 -1
  167. package/extensions/tlon/package.json +1 -1
  168. package/extensions/twitch/CHANGELOG.md +1 -1
  169. package/extensions/twitch/package.json +1 -1
  170. package/extensions/voice-call/CHANGELOG.md +1 -1
  171. package/extensions/voice-call/package.json +1 -1
  172. package/extensions/whatsapp/package.json +1 -1
  173. package/extensions/zai/package.json +1 -1
  174. package/extensions/zalo/CHANGELOG.md +1 -1
  175. package/extensions/zalo/package.json +1 -1
  176. package/extensions/zalouser/CHANGELOG.md +1 -1
  177. package/extensions/zalouser/package.json +1 -1
  178. package/package.json +1 -1
  179. package/dist/plugin-sdk/agent-turn-execute-B6RKsZU3.js +0 -61
  180. package/dist/plugin-sdk/deliver-D7FDyEYC.js +0 -32
  181. package/dist/plugin-sdk/manager-Rskloqo2.js +0 -16
  182. package/dist/plugin-sdk/provider-dispatcher-B0eRZ0GX.js +0 -61
  183. package/dist/plugin-sdk/provider-image-CoUtlZPn.js +0 -22
  184. package/dist/plugin-sdk/replies-BUH8kIfV.js +0 -25
  185. package/dist/plugin-sdk/runs--99AlLJ4.js +0 -25
  186. package/dist/plugin-sdk/send-BSMWkFUt.js +0 -24
  187. package/dist/plugin-sdk/send-BxpmMyy_.js +0 -25
  188. package/dist/plugin-sdk/send-CR06c-zQ.js +0 -23
  189. package/dist/plugin-sdk/send-sS36OO9x.js +0 -27
  190. package/dist/plugin-sdk/subagent-registry-BaawB60T.js +0 -61
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  > **Tagline: Make it yours.**
8
8
 
9
9
  <p align="center">
10
- <img src="docs/assets/wednesdayai-logo-text.png" alt="WednesdayAI" width="500">
10
+ <img src="https://docs.wednesdayai.dev/assets/logo-light.svg" alt="WednesdayAI" width="500">
11
11
  </p>
12
12
 
13
13
  <p align="center">
@@ -15,10 +15,9 @@
15
15
  </p>
16
16
 
17
17
  <p align="center">
18
- <a href="https://github.com/expansionx/wednesdayai-core/actions/workflows/ci.yml?branch=main"><img src="https://img.shields.io/github/actions/workflow/status/expansionx/wednesdayai-core/ci.yml?branch=main&style=for-the-badge" alt="CI status"></a>
19
- <a href="https://github.com/expansionx/wednesdayai-core/releases"><img src="https://img.shields.io/github/v/release/expansionx/wednesdayai-core?include_prereleases&style=for-the-badge" alt="GitHub release"></a>
18
+ <a href="https://www.npmjs.com/package/wednesdayai"><img src="https://img.shields.io/npm/v/wednesdayai?style=for-the-badge&color=6366f1" alt="npm version"></a>
20
19
  <a href="https://discord.gg/wednesdayai"><img src="https://img.shields.io/discord/1456350064065904867?label=Discord&logo=discord&logoColor=white&color=6366f1&style=for-the-badge" alt="Discord"></a>
21
- <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge&color=6366f1" alt="MIT License"></a>
20
+ <img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge&color=6366f1" alt="MIT License">
22
21
  </p>
23
22
 
24
23
  ---
@@ -42,22 +41,6 @@ We did too. So we forked from `v2026.3.2` — the last truly stable release —
42
41
  - ✅ **Local-first** — your data, your machine, your rules
43
42
  - ✅ **Cloud-ready** — same contracts support single-user and multi-tenant
44
43
 
45
- ### Install in 3 commands
46
-
47
- ```bash
48
- # 1. Clone
49
- git clone https://github.com/expansionx/wednesdayai-core.git && cd wednesdayai-core
50
-
51
- # 2. Configure
52
- cp config.example.json config.json
53
- # Edit config.json with your model provider and API keys
54
-
55
- # 3. Run
56
- npm install && npm start
57
- ```
58
-
59
- That's it. No wizard required. No upstream surprises.
60
-
61
44
  ---
62
45
 
63
46
  ## What Makes WednesdayAI Different
@@ -101,7 +84,7 @@ Full channel docs: [docs.wednesdayai.dev/admin/channels](https://docs.wednesdaya
101
84
 
102
85
  ### Prerequisites
103
86
 
104
- - Node.js ≥ 22
87
+ - Node.js ≥ 24
105
88
  - Git
106
89
 
107
90
  ### Recommended Install
@@ -130,25 +113,13 @@ wednesdayai agent --message "Ship checklist" --thinking high
130
113
 
131
114
  [Full getting started guide](https://docs.wednesdayai.dev/users/start/getting-started)
132
115
 
116
+ Switch release channels: `wednesdayai update --channel stable|beta|dev`
117
+
133
118
  ---
134
119
 
135
120
  ## Development
136
121
 
137
- ```bash
138
- git clone https://github.com/expansionx/wednesdayai-core.git
139
- cd wednesdayai-core
140
-
141
- pnpm install
142
- pnpm ui:build
143
- pnpm build
144
-
145
- pnpm wednesdayai onboard --install-daemon
146
-
147
- # Dev loop (auto-reload on TS changes)
148
- pnpm gateway:watch
149
- ```
150
-
151
- Switch channels: `wednesdayai update --channel stable|beta|dev`
122
+ Set up a dev environment and send a PR: [Contributing](https://docs.wednesdayai.dev/developers/contributing).
152
123
 
153
124
  ---
154
125
 
@@ -162,6 +133,16 @@ Switch channels: `wednesdayai update --channel stable|beta|dev`
162
133
  - [Discord Community](https://discord.gg/wednesdayai)
163
134
  - [Product Naming](https://docs.wednesdayai.dev/developers/product-naming)
164
135
 
136
+ ### Developer docs
137
+
138
+ - [Contributing](https://docs.wednesdayai.dev/developers/contributing): workflow, dev setup, PR gate
139
+ - [Coding style](https://docs.wednesdayai.dev/developers/contributing/coding-style)
140
+ - [Testing](https://docs.wednesdayai.dev/developers/contributing/testing)
141
+ - [Secure development](https://docs.wednesdayai.dev/developers/contributing/secure-development)
142
+ - [Performance](https://docs.wednesdayai.dev/developers/contributing/performance)
143
+ - [Documentation](https://docs.wednesdayai.dev/developers/contributing/documentation)
144
+ - [Release](https://docs.wednesdayai.dev/developers/contributing/release)
145
+
165
146
  ---
166
147
 
167
148
  ## Commercial Offerings
@@ -181,7 +162,6 @@ Interested? [Get in touch](mailto:hello@expansionx.com.au).
181
162
  - 💬 [Discord](https://discord.gg/wednesdayai)
182
163
  - 🐛 [Issues](https://github.com/expansionx/wednesdayai-core/issues)
183
164
  - 📝 [Contributing Guide](https://docs.wednesdayai.dev/developers/contributing)
184
- - 🧭 [Development Principles](https://docs.wednesdayai.dev/developers/overview#design-principles)
185
165
 
186
166
  WednesdayAI is maintained by [ExpansionX Partners Pty Ltd](https://www.expansionx.com.au) and the open-source community.
187
167
 
@@ -178,7 +178,7 @@ function mergeDelayedAgentTurn(sessionKey, matches, merge) {
178
178
  return true;
179
179
  }
180
180
  async function defaultExecute(claim) {
181
- const { runMainAgentTurn } = await import("./pi-embedded-B8eDIvpq.js").then((n) => n.o);
181
+ const { runMainAgentTurn } = await import("./pi-embedded-Cklnkha9.js").then((n) => n.o);
182
182
  return runMainAgentTurn(claim.message.payload);
183
183
  }
184
184
  async function armIdleWaiter(sessionKey, backbone, opts) {
@@ -190,7 +190,7 @@ async function armIdleWaiter(sessionKey, backbone, opts) {
190
190
  startedAt: opts?.startedAt ?? Date.now()
191
191
  };
192
192
  waiters.set(sessionKey, handle);
193
- const { getQueueSize } = await import("./command-queue-BG3CzKrI.js").then((n) => n.r);
193
+ const { getQueueSize } = await import("./command-queue-o1awgKih.js").then((n) => n.r);
194
194
  if (handle.cancelled || closing) return;
195
195
  const release = (force = false) => {
196
196
  releaseDelayedAgentTurns(backboneBySession.get(sessionKey) ?? backbone, sessionKey, force ? { force: true } : void 0);
@@ -212,7 +212,7 @@ async function armIdleWaiter(sessionKey, backbone, opts) {
212
212
  }
213
213
  async function enqueueAgentTurn(backbone, payload, opts) {
214
214
  if (!payload.jobId.trim() || !payload.runId.trim()) throw new Error("agent-turn enqueue requires jobId and runId");
215
- const isBusy = opts?.isSessionBusy ? opts.isSessionBusy() : (await import("./command-queue-BG3CzKrI.js").then((n) => n.r)).getQueueSize(CommandLane.Main) > 0;
215
+ const isBusy = opts?.isSessionBusy ? opts.isSessionBusy() : (await import("./command-queue-o1awgKih.js").then((n) => n.r)).getQueueSize(CommandLane.Main) > 0;
216
216
  const policy = payload.busy ?? "skip";
217
217
  const id = agentTurnIdempotencyKey(payload);
218
218
  if (isBusy && policy === "skip") return `${id}:skipped`;
@@ -178,7 +178,7 @@ function mergeDelayedAgentTurn(sessionKey, matches, merge) {
178
178
  return true;
179
179
  }
180
180
  async function defaultExecute(claim) {
181
- const { runMainAgentTurn } = await import("./pi-embedded-tUqWFr9c.js").then((n) => n.i);
181
+ const { runMainAgentTurn } = await import("./pi-embedded-DHw7Di5R.js").then((n) => n.i);
182
182
  return runMainAgentTurn(claim.message.payload);
183
183
  }
184
184
  async function armIdleWaiter(sessionKey, backbone, opts) {
@@ -190,7 +190,7 @@ async function armIdleWaiter(sessionKey, backbone, opts) {
190
190
  startedAt: opts?.startedAt ?? Date.now()
191
191
  };
192
192
  waiters.set(sessionKey, handle);
193
- const { getQueueSize } = await import("./command-queue-9A3kOAZN.js").then((n) => n.r);
193
+ const { getQueueSize } = await import("./command-queue-DKPv7dYN.js").then((n) => n.r);
194
194
  if (handle.cancelled || closing) return;
195
195
  const release = (force = false) => {
196
196
  releaseDelayedAgentTurns(backboneBySession.get(sessionKey) ?? backbone, sessionKey, force ? { force: true } : void 0);
@@ -212,7 +212,7 @@ async function armIdleWaiter(sessionKey, backbone, opts) {
212
212
  }
213
213
  async function enqueueAgentTurn(backbone, payload, opts) {
214
214
  if (!payload.jobId.trim() || !payload.runId.trim()) throw new Error("agent-turn enqueue requires jobId and runId");
215
- const isBusy = opts?.isSessionBusy ? opts.isSessionBusy() : (await import("./command-queue-9A3kOAZN.js").then((n) => n.r)).getQueueSize(CommandLane.Main) > 0;
215
+ const isBusy = opts?.isSessionBusy ? opts.isSessionBusy() : (await import("./command-queue-DKPv7dYN.js").then((n) => n.r)).getQueueSize(CommandLane.Main) > 0;
216
216
  const policy = payload.busy ?? "skip";
217
217
  const id = agentTurnIdempotencyKey(payload);
218
218
  if (isBusy && policy === "skip") return `${id}:skipped`;
@@ -10,8 +10,8 @@ import "./run-with-concurrency-VoSJL2UI.js";
10
10
  import "./redact-D8fpDrdk.js";
11
11
  import "./image-ops-pgAg_j4y.js";
12
12
  import "./pi-model-discovery-C3dMscCT.js";
13
- import "./pi-embedded-helpers-BKVOw8ZC.js";
14
- import "./chrome-NdTR0Suj.js";
13
+ import "./pi-embedded-helpers-DYlkCsNL.js";
14
+ import "./chrome-CGClRujb.js";
15
15
  import "./frontmatter-Cw33lRgS.js";
16
16
  import "./skills-C-1FVOPz.js";
17
17
  import "./path-alias-guards-y8gxUSMu.js";
@@ -19,13 +19,13 @@ import "./proxy-env-BBllD0qI.js";
19
19
  import "./fs-safe-BNnzOM9C.js";
20
20
  import "./store-q3G7wCsG.js";
21
21
  import "./thinking-CwmtMy_H.js";
22
- import "./provider-image-BqxdhC84.js";
23
- import { b as isAudioAttachment, g as listAudioAttachments, h as findCarriedTranscript, i as normalizeMediaAttachments, m as audioOrdinalOf, o as resolveMediaAttachmentLocalRoots, t as runAudioTranscription } from "./audio-transcription-runner-DOckW8KR.js";
22
+ import "./provider-image-BfLbSFcG.js";
23
+ import { b as isAudioAttachment, g as listAudioAttachments, h as findCarriedTranscript, i as normalizeMediaAttachments, m as audioOrdinalOf, o as resolveMediaAttachmentLocalRoots, t as runAudioTranscription } from "./audio-transcription-runner-BA6t6iSO.js";
24
24
  import "./fetch-DvY0ue_6.js";
25
25
  import "./fetch-guard-ri_5BFBs.js";
26
26
  import "./proxy-fetch-C4a8MwFs.js";
27
27
  import "./api-key-rotation-C04Xj5nW.js";
28
- import "./pi-embedded-utils-dzSLPKQ1.js";
28
+ import "./pi-embedded-utils-DGuyV3oI.js";
29
29
 
30
30
  //#region src/media-understanding/audio-preflight.ts
31
31
  /**
@@ -8,21 +8,21 @@ import "./run-with-concurrency-B6da8eZU.js";
8
8
  import "./redact-DbgJD0JZ.js";
9
9
  import "./image-ops-B06vFlU8.js";
10
10
  import "./pi-model-discovery-CcbW2IAR.js";
11
- import "./pi-embedded-helpers-BvZj1LkK.js";
12
- import "./chrome-BWMtx0mE.js";
11
+ import "./pi-embedded-helpers-4qLKF7Ti.js";
12
+ import "./chrome-CTyhKrVS.js";
13
13
  import "./skills-Ka1jnMtm.js";
14
14
  import "./path-alias-guards-C6VPEcOr.js";
15
15
  import "./proxy-env-CN44KnoG.js";
16
16
  import "./fs-safe-ZV-z8lDX.js";
17
17
  import "./store-D0mxlHp1.js";
18
18
  import "./thinking-BOHpxvdU.js";
19
- import "./provider-image-Cn_5jslf.js";
20
- import { b as isAudioAttachment, g as listAudioAttachments, h as findCarriedTranscript, i as normalizeMediaAttachments, m as audioOrdinalOf, o as resolveMediaAttachmentLocalRoots, t as runAudioTranscription } from "./audio-transcription-runner-rzX-3s-8.js";
19
+ import "./provider-image-CtDp01Fm.js";
20
+ import { b as isAudioAttachment, g as listAudioAttachments, h as findCarriedTranscript, i as normalizeMediaAttachments, m as audioOrdinalOf, o as resolveMediaAttachmentLocalRoots, t as runAudioTranscription } from "./audio-transcription-runner-CdwSTFuT.js";
21
21
  import "./fetch-BIqtrGsq.js";
22
22
  import "./fetch-guard-BG1XdICd.js";
23
23
  import "./proxy-fetch-BEd2aTrF.js";
24
24
  import "./api-key-rotation-CRYeqQTt.js";
25
- import "./pi-embedded-utils-BgW57VPl.js";
25
+ import "./pi-embedded-utils-CHJI4-m4.js";
26
26
 
27
27
  //#region src/media-understanding/audio-preflight.ts
28
28
  /**
@@ -5,7 +5,7 @@ import { A as requireApiKey, J as loadConfig, Xa as resolveOpenClawAgentDir, Zt
5
5
  import { r as normalizeChatType } from "./conversation-label-BnH5Yy9T.js";
6
6
  import { c as detectMime, f as isAudioFileName, m as kindFromMime, u as getFileExtension } from "./image-ops-pgAg_j4y.js";
7
7
  import { t as resolveNetworkSsrFPolicy } from "./ssrf-config-CNiEVKpL.js";
8
- import { c as ensureOpenClawModelsJson, t as describeImageWithModel } from "./provider-image-BqxdhC84.js";
8
+ import { c as ensureOpenClawModelsJson, t as describeImageWithModel } from "./provider-image-BfLbSFcG.js";
9
9
  import { a as getDefaultMediaLocalRoots, n as fetchRemoteMedia, t as MediaFetchError } from "./fetch-DvY0ue_6.js";
10
10
  import { n as fetchWithTimeout } from "./fetch-timeout-BfPtlUW6.js";
11
11
  import { t as fetchWithSsrFGuard } from "./fetch-guard-ri_5BFBs.js";
@@ -4,7 +4,7 @@ import { A as requireApiKey, J as loadConfig, Qt as getActivePluginRegistry, at
4
4
  import { r as normalizeChatType } from "./conversation-label-CrORLc0j.js";
5
5
  import { c as detectMime, f as isAudioFileName, m as kindFromMime, u as getFileExtension } from "./image-ops-B06vFlU8.js";
6
6
  import { t as resolveNetworkSsrFPolicy } from "./ssrf-config-BBUduvL1.js";
7
- import { c as ensureOpenClawModelsJson, t as describeImageWithModel } from "./provider-image-Cn_5jslf.js";
7
+ import { c as ensureOpenClawModelsJson, t as describeImageWithModel } from "./provider-image-CtDp01Fm.js";
8
8
  import { a as getDefaultMediaLocalRoots, n as fetchRemoteMedia, t as MediaFetchError } from "./fetch-BIqtrGsq.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-ijQXfnJ1.js";
10
10
  import { t as fetchWithSsrFGuard } from "./fetch-guard-BG1XdICd.js";
@@ -1,7 +1,7 @@
1
1
  {
2
- "version": "0.4.12-dev.704+c95d316f6",
3
- "commit": "c95d316f61e9d868a3f60eeb6acbab6b94e80e9c",
2
+ "version": "0.4.12-dev.705+998bdf349",
3
+ "commit": "998bdf3496f872279b9c02ef1260e62dfbf107a6",
4
4
  "channel": "dev",
5
5
  "forkBase": "openclaw@2026.3.2",
6
- "builtAt": "2026-10-01T10:58:35.826Z"
6
+ "builtAt": "2026-10-02T02:58:12.119Z"
7
7
  }
@@ -9,19 +9,19 @@ import { i as isGatewayStartupEvent } from "../../legacy-names-DFLXH7MA.js";
9
9
  import { p as resolveStorePath } from "../../run-with-concurrency-VoSJL2UI.js";
10
10
  import "../../send-D8garnHE.js";
11
11
  import "../../send-C0_Cahgz.js";
12
- import { n as agentCommand, r as createDefaultDeps } from "../../pi-embedded-B8eDIvpq.js";
13
- import "../../agent-turn-runner-DqMoXRuU.js";
12
+ import { n as agentCommand, r as createDefaultDeps } from "../../pi-embedded-Cklnkha9.js";
13
+ import "../../agent-turn-runner-BpzPb_LQ.js";
14
14
  import { n as SILENT_REPLY_TOKEN } from "../../tokens-iu44eB15.js";
15
15
  import "../../outbound-message-hooks-ClZq2IiI.js";
16
- import "../../diagnostic-BwoKR7Xi.js";
16
+ import "../../diagnostic-DmBrpD9P.js";
17
17
  import "../../diagnostic-session-state-Bnyx-w0F.js";
18
18
  import "../../redact-D8fpDrdk.js";
19
- import "../../command-queue-BG3CzKrI.js";
20
- import "../../send-BRRJAJM9.js";
19
+ import "../../command-queue-o1awgKih.js";
20
+ import "../../send-C6j-WuJq.js";
21
21
  import "../../image-ops-pgAg_j4y.js";
22
22
  import "../../pi-model-discovery-C3dMscCT.js";
23
- import "../../pi-embedded-helpers-BKVOw8ZC.js";
24
- import "../../chrome-NdTR0Suj.js";
23
+ import "../../pi-embedded-helpers-DYlkCsNL.js";
24
+ import "../../chrome-CGClRujb.js";
25
25
  import "../../frontmatter-Cw33lRgS.js";
26
26
  import "../../skills-C-1FVOPz.js";
27
27
  import "../../path-alias-guards-y8gxUSMu.js";
@@ -29,13 +29,13 @@ import "../../proxy-env-BBllD0qI.js";
29
29
  import "../../fs-safe-BNnzOM9C.js";
30
30
  import "../../store-q3G7wCsG.js";
31
31
  import "../../thinking-CwmtMy_H.js";
32
- import "../../provider-image-BqxdhC84.js";
33
- import "../../audio-transcription-runner-DOckW8KR.js";
32
+ import "../../provider-image-BfLbSFcG.js";
33
+ import "../../audio-transcription-runner-BA6t6iSO.js";
34
34
  import "../../fetch-DvY0ue_6.js";
35
35
  import "../../fetch-guard-ri_5BFBs.js";
36
36
  import "../../proxy-fetch-C4a8MwFs.js";
37
37
  import "../../api-key-rotation-C04Xj5nW.js";
38
- import "../../pi-embedded-utils-dzSLPKQ1.js";
38
+ import "../../pi-embedded-utils-DGuyV3oI.js";
39
39
  import "../../reply-prefix-r6A18fKP.js";
40
40
  import "../../chunk-odx78Acg.js";
41
41
  import "../../markdown-tables-D6t-eoFa.js";
@@ -43,8 +43,8 @@ import "../../ir-BHU3uh9A.js";
43
43
  import "../../render-BZdJrUxT.js";
44
44
  import "../../commands-registry-BEs7FrhT.js";
45
45
  import "../../skill-commands-DycP7LkE.js";
46
- import "../../runs-vS0SOF8v.js";
47
- import "../../deliver-BdqSGMEa.js";
46
+ import "../../runs-Dgl9DXVG.js";
47
+ import "../../deliver-DrmyBByg.js";
48
48
  import "../../recorder-BESd9rZt.js";
49
49
  import "../../fetch-D61IHNsz.js";
50
50
  import "../../channel-activity-BVqxcijC.js";
@@ -9,19 +9,19 @@ import "../../legacy-names-DFLXH7MA.js";
9
9
  import "../../run-with-concurrency-VoSJL2UI.js";
10
10
  import "../../send-D8garnHE.js";
11
11
  import "../../send-C0_Cahgz.js";
12
- import { t as runEmbeddedPiAgent } from "../../pi-embedded-B8eDIvpq.js";
13
- import "../../agent-turn-runner-DqMoXRuU.js";
12
+ import { t as runEmbeddedPiAgent } from "../../pi-embedded-Cklnkha9.js";
13
+ import "../../agent-turn-runner-BpzPb_LQ.js";
14
14
  import "../../tokens-iu44eB15.js";
15
15
  import "../../outbound-message-hooks-ClZq2IiI.js";
16
- import "../../diagnostic-BwoKR7Xi.js";
16
+ import "../../diagnostic-DmBrpD9P.js";
17
17
  import "../../diagnostic-session-state-Bnyx-w0F.js";
18
18
  import "../../redact-D8fpDrdk.js";
19
- import "../../command-queue-BG3CzKrI.js";
20
- import "../../send-BRRJAJM9.js";
19
+ import "../../command-queue-o1awgKih.js";
20
+ import "../../send-C6j-WuJq.js";
21
21
  import "../../image-ops-pgAg_j4y.js";
22
22
  import "../../pi-model-discovery-C3dMscCT.js";
23
- import "../../pi-embedded-helpers-BKVOw8ZC.js";
24
- import "../../chrome-NdTR0Suj.js";
23
+ import "../../pi-embedded-helpers-DYlkCsNL.js";
24
+ import "../../chrome-CGClRujb.js";
25
25
  import "../../frontmatter-Cw33lRgS.js";
26
26
  import "../../skills-C-1FVOPz.js";
27
27
  import "../../path-alias-guards-y8gxUSMu.js";
@@ -29,13 +29,13 @@ import "../../proxy-env-BBllD0qI.js";
29
29
  import { c as writeFileWithinRoot } from "../../fs-safe-BNnzOM9C.js";
30
30
  import "../../store-q3G7wCsG.js";
31
31
  import "../../thinking-CwmtMy_H.js";
32
- import "../../provider-image-BqxdhC84.js";
33
- import "../../audio-transcription-runner-DOckW8KR.js";
32
+ import "../../provider-image-BfLbSFcG.js";
33
+ import "../../audio-transcription-runner-BA6t6iSO.js";
34
34
  import "../../fetch-DvY0ue_6.js";
35
35
  import "../../fetch-guard-ri_5BFBs.js";
36
36
  import "../../proxy-fetch-C4a8MwFs.js";
37
37
  import "../../api-key-rotation-C04Xj5nW.js";
38
- import "../../pi-embedded-utils-dzSLPKQ1.js";
38
+ import "../../pi-embedded-utils-DGuyV3oI.js";
39
39
  import "../../reply-prefix-r6A18fKP.js";
40
40
  import "../../chunk-odx78Acg.js";
41
41
  import "../../markdown-tables-D6t-eoFa.js";
@@ -43,8 +43,8 @@ import "../../ir-BHU3uh9A.js";
43
43
  import "../../render-BZdJrUxT.js";
44
44
  import "../../commands-registry-BEs7FrhT.js";
45
45
  import "../../skill-commands-DycP7LkE.js";
46
- import "../../runs-vS0SOF8v.js";
47
- import "../../deliver-BdqSGMEa.js";
46
+ import "../../runs-Dgl9DXVG.js";
47
+ import "../../deliver-DrmyBByg.js";
48
48
  import "../../recorder-BESd9rZt.js";
49
49
  import "../../fetch-D61IHNsz.js";
50
50
  import "../../channel-activity-BVqxcijC.js";
@@ -9,19 +9,19 @@ import "../../legacy-names-DFLXH7MA.js";
9
9
  import { r as isPrimarySessionTranscriptFileName } from "../../run-with-concurrency-VoSJL2UI.js";
10
10
  import "../../send-D8garnHE.js";
11
11
  import "../../send-C0_Cahgz.js";
12
- import "../../pi-embedded-B8eDIvpq.js";
13
- import "../../agent-turn-runner-DqMoXRuU.js";
12
+ import "../../pi-embedded-Cklnkha9.js";
13
+ import "../../agent-turn-runner-BpzPb_LQ.js";
14
14
  import "../../tokens-iu44eB15.js";
15
15
  import "../../outbound-message-hooks-ClZq2IiI.js";
16
- import "../../diagnostic-BwoKR7Xi.js";
16
+ import "../../diagnostic-DmBrpD9P.js";
17
17
  import "../../diagnostic-session-state-Bnyx-w0F.js";
18
18
  import "../../redact-D8fpDrdk.js";
19
- import "../../command-queue-BG3CzKrI.js";
20
- import "../../send-BRRJAJM9.js";
19
+ import "../../command-queue-o1awgKih.js";
20
+ import "../../send-C6j-WuJq.js";
21
21
  import "../../image-ops-pgAg_j4y.js";
22
22
  import "../../pi-model-discovery-C3dMscCT.js";
23
- import "../../pi-embedded-helpers-BKVOw8ZC.js";
24
- import "../../chrome-NdTR0Suj.js";
23
+ import "../../pi-embedded-helpers-DYlkCsNL.js";
24
+ import "../../chrome-CGClRujb.js";
25
25
  import "../../frontmatter-Cw33lRgS.js";
26
26
  import "../../skills-C-1FVOPz.js";
27
27
  import "../../path-alias-guards-y8gxUSMu.js";
@@ -29,13 +29,13 @@ import "../../proxy-env-BBllD0qI.js";
29
29
  import { c as writeFileWithinRoot } from "../../fs-safe-BNnzOM9C.js";
30
30
  import "../../store-q3G7wCsG.js";
31
31
  import "../../thinking-CwmtMy_H.js";
32
- import "../../provider-image-BqxdhC84.js";
33
- import "../../audio-transcription-runner-DOckW8KR.js";
32
+ import "../../provider-image-BfLbSFcG.js";
33
+ import "../../audio-transcription-runner-BA6t6iSO.js";
34
34
  import "../../fetch-DvY0ue_6.js";
35
35
  import "../../fetch-guard-ri_5BFBs.js";
36
36
  import "../../proxy-fetch-C4a8MwFs.js";
37
37
  import "../../api-key-rotation-C04Xj5nW.js";
38
- import "../../pi-embedded-utils-dzSLPKQ1.js";
38
+ import "../../pi-embedded-utils-DGuyV3oI.js";
39
39
  import "../../reply-prefix-r6A18fKP.js";
40
40
  import "../../chunk-odx78Acg.js";
41
41
  import "../../markdown-tables-D6t-eoFa.js";
@@ -43,8 +43,8 @@ import "../../ir-BHU3uh9A.js";
43
43
  import "../../render-BZdJrUxT.js";
44
44
  import "../../commands-registry-BEs7FrhT.js";
45
45
  import "../../skill-commands-DycP7LkE.js";
46
- import "../../runs-vS0SOF8v.js";
47
- import "../../deliver-BdqSGMEa.js";
46
+ import "../../runs-Dgl9DXVG.js";
47
+ import "../../deliver-DrmyBByg.js";
48
48
  import "../../recorder-BESd9rZt.js";
49
49
  import "../../fetch-D61IHNsz.js";
50
50
  import "../../channel-activity-BVqxcijC.js";
@@ -1 +1 @@
1
- 16d59de2334f600a5ce703bf23c079303be23808e0576c4714da5667b802abf3
1
+ d8e0bc0014d0c13dd6662d35db242ee6c9c9ae87508f9d916c7a71090fb6f2c6
@@ -11,7 +11,7 @@ import { createHmac } from "node:crypto";
11
11
  import net from "node:net";
12
12
  import http, { createServer } from "node:http";
13
13
  import https from "node:https";
14
- import WebSocket$1, { WebSocketServer } from "ws";
14
+ import WebSocket, { WebSocketServer } from "ws";
15
15
  import { Buffer as Buffer$1 } from "node:buffer";
16
16
 
17
17
  //#region src/browser/constants.ts
@@ -647,7 +647,7 @@ async function ensureChromeExtensionRelayServer(opts) {
647
647
  let extensionWs = null;
648
648
  const cdpClients = /* @__PURE__ */ new Set();
649
649
  const connectedTargets = /* @__PURE__ */ new Map();
650
- const extensionConnected = () => extensionWs?.readyState === WebSocket$1.OPEN;
650
+ const extensionConnected = () => extensionWs?.readyState === WebSocket.OPEN;
651
651
  const hasConnectedTargets = () => connectedTargets.size > 0;
652
652
  let extensionDisconnectCleanupTimer = null;
653
653
  const extensionReconnectWaiters = /* @__PURE__ */ new Set();
@@ -699,7 +699,7 @@ async function ensureChromeExtensionRelayServer(opts) {
699
699
  let nextExtensionId = 1;
700
700
  const sendToExtension = async (payload) => {
701
701
  const ws = extensionWs;
702
- if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
702
+ if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
703
703
  ws.send(JSON.stringify(payload));
704
704
  return await new Promise((resolve, reject) => {
705
705
  const timer = setTimeout(() => {
@@ -716,12 +716,12 @@ async function ensureChromeExtensionRelayServer(opts) {
716
716
  const broadcastToCdpClients = (evt) => {
717
717
  const msg = JSON.stringify(evt);
718
718
  for (const ws of cdpClients) {
719
- if (ws.readyState !== WebSocket$1.OPEN) continue;
719
+ if (ws.readyState !== WebSocket.OPEN) continue;
720
720
  ws.send(msg);
721
721
  }
722
722
  };
723
723
  const sendResponseToCdp = (ws, res) => {
724
- if (ws.readyState !== WebSocket$1.OPEN) return;
724
+ if (ws.readyState !== WebSocket.OPEN) return;
725
725
  ws.send(JSON.stringify(res));
726
726
  };
727
727
  const dropConnectedTargetSession = (sessionId) => {
@@ -975,7 +975,7 @@ async function ensureChromeExtensionRelayServer(opts) {
975
975
  rejectUpgrade(socket, 401, "Unauthorized");
976
976
  return;
977
977
  }
978
- if (extensionWs && extensionWs.readyState !== WebSocket$1.OPEN) {
978
+ if (extensionWs && extensionWs.readyState !== WebSocket.OPEN) {
979
979
  try {
980
980
  extensionWs.terminate();
981
981
  } catch {}
@@ -1008,7 +1008,7 @@ async function ensureChromeExtensionRelayServer(opts) {
1008
1008
  clearExtensionDisconnectCleanupTimer();
1009
1009
  flushExtensionReconnectWaiters(true);
1010
1010
  const ping = setInterval(() => {
1011
- if (ws.readyState !== WebSocket$1.OPEN) return;
1011
+ if (ws.readyState !== WebSocket.OPEN) return;
1012
1012
  ws.send(JSON.stringify({ method: "ping" }));
1013
1013
  }, 5e3);
1014
1014
  ws.on("message", (data) => {
@@ -1364,7 +1364,7 @@ function openCdpWebSocket(wsUrl, opts) {
1364
1364
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
1365
1365
  const handshakeTimeoutMs = typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : CDP_WS_HANDSHAKE_TIMEOUT_MS;
1366
1366
  const agent = getDirectAgentForCdp(wsUrl);
1367
- return new WebSocket$1(wsUrl, {
1367
+ return new WebSocket(wsUrl, {
1368
1368
  handshakeTimeout: handshakeTimeoutMs,
1369
1369
  ...Object.keys(headers).length ? { headers } : {},
1370
1370
  ...agent ? { agent } : {}
@@ -11,7 +11,7 @@ import { createHmac } from "node:crypto";
11
11
  import net from "node:net";
12
12
  import http, { createServer } from "node:http";
13
13
  import https from "node:https";
14
- import WebSocket$1, { WebSocketServer } from "ws";
14
+ import WebSocket, { WebSocketServer } from "ws";
15
15
  import { Buffer as Buffer$1 } from "node:buffer";
16
16
 
17
17
  //#region src/browser/constants.ts
@@ -647,7 +647,7 @@ async function ensureChromeExtensionRelayServer(opts) {
647
647
  let extensionWs = null;
648
648
  const cdpClients = /* @__PURE__ */ new Set();
649
649
  const connectedTargets = /* @__PURE__ */ new Map();
650
- const extensionConnected = () => extensionWs?.readyState === WebSocket$1.OPEN;
650
+ const extensionConnected = () => extensionWs?.readyState === WebSocket.OPEN;
651
651
  const hasConnectedTargets = () => connectedTargets.size > 0;
652
652
  let extensionDisconnectCleanupTimer = null;
653
653
  const extensionReconnectWaiters = /* @__PURE__ */ new Set();
@@ -699,7 +699,7 @@ async function ensureChromeExtensionRelayServer(opts) {
699
699
  let nextExtensionId = 1;
700
700
  const sendToExtension = async (payload) => {
701
701
  const ws = extensionWs;
702
- if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
702
+ if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
703
703
  ws.send(JSON.stringify(payload));
704
704
  return await new Promise((resolve, reject) => {
705
705
  const timer = setTimeout(() => {
@@ -716,12 +716,12 @@ async function ensureChromeExtensionRelayServer(opts) {
716
716
  const broadcastToCdpClients = (evt) => {
717
717
  const msg = JSON.stringify(evt);
718
718
  for (const ws of cdpClients) {
719
- if (ws.readyState !== WebSocket$1.OPEN) continue;
719
+ if (ws.readyState !== WebSocket.OPEN) continue;
720
720
  ws.send(msg);
721
721
  }
722
722
  };
723
723
  const sendResponseToCdp = (ws, res) => {
724
- if (ws.readyState !== WebSocket$1.OPEN) return;
724
+ if (ws.readyState !== WebSocket.OPEN) return;
725
725
  ws.send(JSON.stringify(res));
726
726
  };
727
727
  const dropConnectedTargetSession = (sessionId) => {
@@ -975,7 +975,7 @@ async function ensureChromeExtensionRelayServer(opts) {
975
975
  rejectUpgrade(socket, 401, "Unauthorized");
976
976
  return;
977
977
  }
978
- if (extensionWs && extensionWs.readyState !== WebSocket$1.OPEN) {
978
+ if (extensionWs && extensionWs.readyState !== WebSocket.OPEN) {
979
979
  try {
980
980
  extensionWs.terminate();
981
981
  } catch {}
@@ -1008,7 +1008,7 @@ async function ensureChromeExtensionRelayServer(opts) {
1008
1008
  clearExtensionDisconnectCleanupTimer();
1009
1009
  flushExtensionReconnectWaiters(true);
1010
1010
  const ping = setInterval(() => {
1011
- if (ws.readyState !== WebSocket$1.OPEN) return;
1011
+ if (ws.readyState !== WebSocket.OPEN) return;
1012
1012
  ws.send(JSON.stringify({ method: "ping" }));
1013
1013
  }, 5e3);
1014
1014
  ws.on("message", (data) => {
@@ -1364,7 +1364,7 @@ function openCdpWebSocket(wsUrl, opts) {
1364
1364
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
1365
1365
  const handshakeTimeoutMs = typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : CDP_WS_HANDSHAKE_TIMEOUT_MS;
1366
1366
  const agent = getDirectAgentForCdp(wsUrl);
1367
- return new WebSocket$1(wsUrl, {
1367
+ return new WebSocket(wsUrl, {
1368
1368
  handshakeTimeout: handshakeTimeoutMs,
1369
1369
  ...Object.keys(headers).length ? { headers } : {},
1370
1370
  ...agent ? { agent } : {}
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { a as logLaneTaskCompleted, i as logLaneEnqueue, r as logLaneDequeue, t as diag } from "./diagnostic-Cfb2ONnX.js";
2
+ import { a as logLaneTaskCompleted, i as logLaneEnqueue, r as logLaneDequeue, t as diag } from "./diagnostic-Ba0VUozS.js";
3
3
  import { t as CommandLane } from "./lanes-DBBnME5O.js";
4
4
 
5
5
  //#region src/process/command-queue.ts
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { a as logLaneTaskCompleted, i as logLaneEnqueue, r as logLaneDequeue, t as diag } from "./diagnostic-BwoKR7Xi.js";
2
+ import { a as logLaneTaskCompleted, i as logLaneEnqueue, r as logLaneDequeue, t as diag } from "./diagnostic-DmBrpD9P.js";
3
3
  import { t as CommandLane } from "./lanes-DTaUAkeG.js";
4
4
 
5
5
  //#region src/process/command-queue.ts
@@ -5,7 +5,7 @@ import { t as createSubsystemLogger } from "./subsystem-CdS2B7jt.js";
5
5
  import { $n as resolveMirroredTranscriptText, Bn as parseInlineDirectives, Qn as appendAssistantMessageToSessionTranscript, Qt as getActivePluginRegistry, Xr as getChannelDock, Yr as normalizeChannelId, en as getActivePluginRegistryVersion, qr as getChannelPlugin } from "./model-selection-Cd0R62vH.js";
6
6
  import { n as generateSecureUuid } from "./secure-random-CXrBi7Jq.js";
7
7
  import { n as createMessageSentEmitter, t as applyMessageSendingHook, u as getGlobalHookRunner } from "./outbound-message-hooks-BvyiXrg0.js";
8
- import { i as isMessagingToolDuplicate } from "./pi-embedded-helpers-BvZj1LkK.js";
8
+ import { i as isMessagingToolDuplicate } from "./pi-embedded-helpers-4qLKF7Ti.js";
9
9
  import { h as hasErrnoCode } from "./proxy-env-CN44KnoG.js";
10
10
  import { i as getAgentScopedMediaLocalRoots } from "./fetch-BIqtrGsq.js";
11
11
  import { c as resolveChunkDelivery, d as resolveTextChunkLimit, i as chunkMarkdownTextWithMode, n as chunkByParagraph } from "./chunk-C_i5apVn.js";
@@ -5,7 +5,7 @@ import { F as normalizeAccountId, I as normalizeOptionalAccountId } from "./work
5
5
  import { $t as getActivePluginRegistryVersion, Gr as normalizeChannelId, In as parseInlineDirectives, Jn as appendAssistantMessageToSessionTranscript, Kr as getChannelDock, Ur as getChannelPlugin, Yn as resolveMirroredTranscriptText, Zt as getActivePluginRegistry } from "./model-selection-DhXu1Q4_.js";
6
6
  import { n as generateSecureUuid } from "./secure-random-BDA1WAvZ.js";
7
7
  import { n as createMessageSentEmitter, t as applyMessageSendingHook, u as getGlobalHookRunner } from "./outbound-message-hooks-ClZq2IiI.js";
8
- import { i as isMessagingToolDuplicate } from "./pi-embedded-helpers-BKVOw8ZC.js";
8
+ import { i as isMessagingToolDuplicate } from "./pi-embedded-helpers-DYlkCsNL.js";
9
9
  import { h as hasErrnoCode } from "./proxy-env-BBllD0qI.js";
10
10
  import { i as getAgentScopedMediaLocalRoots } from "./fetch-DvY0ue_6.js";
11
11
  import { c as resolveChunkDelivery, d as resolveTextChunkLimit, i as chunkMarkdownTextWithMode, n as chunkByParagraph } from "./chunk-odx78Acg.js";
@@ -836,7 +836,7 @@ function startDiagnosticHeartbeat(config) {
836
836
  if (ageMs > stuckSessionAbortMs && state.queueDepth > 0 && !state.capturedEnd && !state.abortDispatched && state.sessionId) {
837
837
  state.abortDispatched = true;
838
838
  diag.warn(`stuck-session abort: sessionId=${state.sessionId} progressAge=${Math.round(ageMs / 1e3)}s threshold=${Math.round(stuckSessionAbortMs / 1e3)}s queueDepth=${state.queueDepth}`);
839
- import("./runs-B5jL-JGA.js").then((n) => n.o).then(({ abortEmbeddedPiRun }) => {
839
+ import("./runs-BKXuFolN.js").then((n) => n.o).then(({ abortEmbeddedPiRun }) => {
840
840
  if (state.sessionId && state.abortDispatched) abortEmbeddedPiRun(state.sessionId);
841
841
  }).catch((err) => {
842
842
  diag.warn(`stuck-session abort import failed: ${String(err)}`);
@@ -836,7 +836,7 @@ function startDiagnosticHeartbeat(config) {
836
836
  if (ageMs > stuckSessionAbortMs && state.queueDepth > 0 && !state.capturedEnd && !state.abortDispatched && state.sessionId) {
837
837
  state.abortDispatched = true;
838
838
  diag.warn(`stuck-session abort: sessionId=${state.sessionId} progressAge=${Math.round(ageMs / 1e3)}s threshold=${Math.round(stuckSessionAbortMs / 1e3)}s queueDepth=${state.queueDepth}`);
839
- import("./runs-vS0SOF8v.js").then((n) => n.o).then(({ abortEmbeddedPiRun }) => {
839
+ import("./runs-Dgl9DXVG.js").then((n) => n.o).then(({ abortEmbeddedPiRun }) => {
840
840
  if (state.sessionId && state.abortDispatched) abortEmbeddedPiRun(state.sessionId);
841
841
  }).catch((err) => {
842
842
  diag.warn(`stuck-session abort import failed: ${String(err)}`);