@symerian/symi 2.5.3 → 2.5.4

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 (179) hide show
  1. package/dist/{accounts-ChTFYj8Q.js → accounts-CWktKM8a.js} +1 -1
  2. package/dist/{accounts-CJR8j_Kq.js → accounts-qtxJ-6em.js} +1 -1
  3. package/dist/{accounts-CI6zQTJj.js → accounts-tNElYrCH.js} +14 -14
  4. package/dist/{active-listener-D6sXIjAg.js → active-listener-C9r8ZB9m.js} +1 -1
  5. package/dist/{agent-scope-Bw1Ed8W9.js → agent-scope-BxoUQqgM.js} +3 -3
  6. package/dist/{audio-preflight-CPBOQV4I.js → audio-preflight-C40mKAp7.js} +4 -4
  7. package/dist/{audio-preflight-BkIfnmpi.js → audio-preflight-D02HwB-I.js} +29 -29
  8. package/dist/{bindings-BU2hsBd9.js → bindings-B7Ke6LJi.js} +2 -2
  9. package/dist/build-info.json +3 -3
  10. package/dist/bundled/boot-md/handler.js +53 -53
  11. package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
  12. package/dist/bundled/command-logger/handler.js +1 -1
  13. package/dist/bundled/session-memory/handler.js +53 -53
  14. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  15. package/dist/{channel-activity-C9-gaquj.js → channel-activity-CsM_hJ_s.js} +1 -1
  16. package/dist/{chrome-D2SKJnR7.js → chrome-CDJYxX5a.js} +7 -7
  17. package/dist/{chrome-CxSAp8x3.js → chrome-EyvdASWt.js} +13 -13
  18. package/dist/{chunk-ClbN9Pqy.js → chunk-BW5f05BR.js} +1 -1
  19. package/dist/{command-format-UKHV-j0K.js → command-format-BaxDnULz.js} +1 -1
  20. package/dist/{command-registry-DhvgkMQN.js → command-registry-Be3hDEmx.js} +4 -4
  21. package/dist/{commands-registry-VSmULp-g.js → commands-registry-D7CTCQPm.js} +4 -4
  22. package/dist/{completion-cli-CqHcRASb.js → completion-cli-C3hbO0zE.js} +2 -2
  23. package/dist/{completion-cli-DJ2AgNQF.js → completion-cli-DxditxWW.js} +1 -1
  24. package/dist/{config-eEaJddXj.js → config-DRbjHIwD.js} +12 -12
  25. package/dist/control-ui/js/app.js +2 -1
  26. package/dist/{deliver-C-37cZUe.js → deliver-BH0l3UKW.js} +1 -1
  27. package/dist/{deliver-BA7ZN3iM.js → deliver-D1ZN6-fl.js} +20 -20
  28. package/dist/{diagnostic-C3nsWaw3.js → diagnostic-CI0kRQkt.js} +1 -1
  29. package/dist/{doctor-completion-DD-fb-G8.js → doctor-completion-CRgIetEl.js} +1 -1
  30. package/dist/{doctor-completion-BqOO4r2O.js → doctor-completion-DKL7Fzep.js} +1 -1
  31. package/dist/entry.js +1 -1
  32. package/dist/extensionAPI.js +6 -6
  33. package/dist/{frontmatter-DPlG6yha.js → frontmatter-C_bv_0P8.js} +2 -2
  34. package/dist/{gateway-cli-2R-SuiTy.js → gateway-cli-CEWIFRt0.js} +2 -2
  35. package/dist/{gateway-cli-BVnEz6em.js → gateway-cli-q04qp27D.js} +2 -2
  36. package/dist/{gemini-auth-CF48hUR9.js → gemini-auth-CdSPHuLl.js} +1 -1
  37. package/dist/{github-copilot-token-DJqsJ2-r.js → github-copilot-token-C_qUP7p5.js} +7 -7
  38. package/dist/{glass-ui-ws-C9w0ySFw.js → glass-ui-ws-0yPnNh0o.js} +30 -12
  39. package/dist/{glass-ui-ws-CmDHJq0W.js → glass-ui-ws-DtFvFNZp.js} +30 -12
  40. package/dist/{image-DcpMiprB.js → image-CHzdaNJ4.js} +1 -1
  41. package/dist/{image-BGmVDkkw.js → image-Cp3JDEBB.js} +4 -4
  42. package/dist/{image-ops-S8-8dAhx.js → image-ops-CvJzsyvE.js} +1 -1
  43. package/dist/index.js +1 -1
  44. package/dist/{ir-CbFUkv_T.js → ir-DccrnjsE.js} +4 -4
  45. package/dist/llm-slug-generator.js +53 -53
  46. package/dist/{local-roots-C7OCYACU.js → local-roots-DMwIh5cS.js} +5 -5
  47. package/dist/{login-B8uiUAnV.js → login-CwCoxapk.js} +7 -7
  48. package/dist/{login-qr-CIZk8uKX.js → login-qr-Batf3PT5.js} +12 -12
  49. package/dist/{manager-BoLr3xR_.js → manager-D_LwXbc6.js} +13 -13
  50. package/dist/{manifest-registry-CneMHk0N.js → manifest-registry-D0IQ3WuX.js} +19 -19
  51. package/dist/{markdown-tables-DSHvnTLx.js → markdown-tables-iMQQZu4Q.js} +1 -1
  52. package/dist/{message-channel-DbsRltF2.js → message-channel-Dz5lr5b0.js} +1 -1
  53. package/dist/{model-auth-CwOuTuXl.js → model-auth-DK43VicI.js} +9 -9
  54. package/dist/{onboard-BgoNPLnU.js → onboard-FadtPlJX.js} +1 -1
  55. package/dist/{onboard-CSPuFTdy.js → onboard-Ob6VUhMj.js} +1 -1
  56. package/dist/{onboarding-Dnmpcyzj.js → onboarding-BL5h6kMP.js} +1 -1
  57. package/dist/{onboarding-pxBeD60g.js → onboarding-CeLx4VEB.js} +1 -1
  58. package/dist/{onboarding.finalize-CBTphwf0.js → onboarding.finalize-EOjEh487.js} +4 -4
  59. package/dist/{onboarding.finalize-jsLRDHxC.js → onboarding.finalize-y1rlw-1v.js} +3 -3
  60. package/dist/{outbound-opDNxv-l.js → outbound-D4fN_ZlE.js} +7 -7
  61. package/dist/{outbound-attachment-Co2diKdP.js → outbound-attachment-DjNDa3zn.js} +2 -2
  62. package/dist/{paths-CySxpNhH.js → paths-Cce4PUkG.js} +5 -5
  63. package/dist/{paths-Cb87-LzP.js → paths-DLyHUt31.js} +1 -1
  64. package/dist/{pi-auth-json-DPWPoruO.js → pi-auth-json-0SYBFZTt.js} +8 -8
  65. package/dist/{pi-embedded-DkqIIBK5.js → pi-embedded-Cuoz1LlF.js} +158 -158
  66. package/dist/{pi-embedded-BRw7oe5n.js → pi-embedded-D7S6Iuxk.js} +16 -16
  67. package/dist/{pi-embedded-helpers-DEEaCvEp.js → pi-embedded-helpers-ag2bosuj.js} +52 -52
  68. package/dist/{pi-embedded-helpers-B8kqLWns.js → pi-embedded-helpers-lgx_U5KS.js} +4 -4
  69. package/dist/plugin-sdk/{accounts-BToL3HlP.js → accounts-BtaOa4z_.js} +1 -1
  70. package/dist/plugin-sdk/{accounts-D9zGZU5t.js → accounts-Ddm33hQm.js} +3 -3
  71. package/dist/plugin-sdk/{accounts-Dtszw3Zn.js → accounts-s-AdhXVR.js} +1 -1
  72. package/dist/plugin-sdk/{active-listener-bEk__wbB.js → active-listener-BXYeALs0.js} +1 -1
  73. package/dist/plugin-sdk/{agent-scope-C3gMMKCU.js → agent-scope-CYYpcO9W.js} +2 -2
  74. package/dist/plugin-sdk/{api-key-rotation-CVBMpnPc.js → api-key-rotation-D_sMvI5W.js} +1 -1
  75. package/dist/plugin-sdk/{audio-preflight-DoQQKlxa.js → audio-preflight-VpItkiy3.js} +24 -24
  76. package/dist/plugin-sdk/{bindings-BbwoUGPx.js → bindings-C7hRtgYW.js} +2 -2
  77. package/dist/plugin-sdk/{channel-activity-Ji7f0gqq.js → channel-activity-DoC1xtDu.js} +1 -1
  78. package/dist/plugin-sdk/{channel-web-CDaDQ_94.js → channel-web-CkBYE0D-.js} +22 -22
  79. package/dist/plugin-sdk/{chrome-C7c_0I5M.js → chrome-B7RdxmJ0.js} +3 -3
  80. package/dist/plugin-sdk/{chunk-jvk9axTQ.js → chunk-Dw2XBYXv.js} +1 -1
  81. package/dist/plugin-sdk/{command-format-DSdvQ_M5.js → command-format-GKSevep4.js} +1 -1
  82. package/dist/plugin-sdk/{commands-registry-CQFbmUMs.js → commands-registry-COIaslGl.js} +4 -4
  83. package/dist/plugin-sdk/{config-DDkdiUOR.js → config-KlTNfkFF.js} +9 -9
  84. package/dist/plugin-sdk/{deliver-BZ6iNLl7.js → deliver-BZ99UKQq.js} +10 -10
  85. package/dist/plugin-sdk/{diagnostic-mFf4i4G9.js → diagnostic-05pm5Rxi.js} +1 -1
  86. package/dist/plugin-sdk/{image-BOYy0Ump.js → image-CLOPx7yW.js} +4 -4
  87. package/dist/plugin-sdk/{image-ops-Bnp6LXEx.js → image-ops-BlQR__MN.js} +1 -1
  88. package/dist/plugin-sdk/index.js +53 -53
  89. package/dist/plugin-sdk/{ir-Fb3qpcis.js → ir-BJ6BHE5b.js} +4 -4
  90. package/dist/plugin-sdk/{local-roots-Ckk1QfzI.js → local-roots-BHLNSI8U.js} +3 -3
  91. package/dist/plugin-sdk/{login-Bh3DZPam.js → login-DQMXuxOk.js} +7 -7
  92. package/dist/plugin-sdk/{login-qr-DbR7odSr.js → login-qr-BjVZSoCi.js} +9 -9
  93. package/dist/plugin-sdk/{manager-DckktAQ3.js → manager-CBSBFuFz.js} +8 -8
  94. package/dist/plugin-sdk/{manifest-registry-B3ugY9-f.js → manifest-registry-CPnHl_K3.js} +1 -1
  95. package/dist/plugin-sdk/{markdown-tables-Dfaqilz6.js → markdown-tables-BoYFajMu.js} +1 -1
  96. package/dist/plugin-sdk/{message-channel-BdI5Ra9S.js → message-channel-COTAJzHd.js} +1 -1
  97. package/dist/plugin-sdk/{model-selection-OpU8HN50.js → model-selection-CsbEfrS0.js} +4 -4
  98. package/dist/plugin-sdk/{outbound-rF6G8Xpr.js → outbound-B0e8KdaR.js} +7 -7
  99. package/dist/plugin-sdk/{outbound-attachment-DnVQfTG2.js → outbound-attachment-CnslKL38.js} +2 -2
  100. package/dist/plugin-sdk/{pi-auth-json-CJk8t14T.js → pi-auth-json-qWi7ZIYV.js} +5 -5
  101. package/dist/plugin-sdk/{pi-embedded-helpers-BveUP4hk.js → pi-embedded-helpers-CW630epe.js} +17 -17
  102. package/dist/plugin-sdk/{plugins-BbAvhC25.js → plugins-BNByVCIH.js} +4 -4
  103. package/dist/plugin-sdk/{pw-ai-DjGUsee-.js → pw-ai-CnbPIPY9.js} +8 -8
  104. package/dist/plugin-sdk/{qmd-manager-mjKcdwVr.js → qmd-manager-CH0XbIHf.js} +4 -4
  105. package/dist/plugin-sdk/{registry--_pGht6S.js → registry-D0xTnUWt.js} +2 -2
  106. package/dist/plugin-sdk/{replies-fI39rPGa.js → replies-LLcQL3w6.js} +3 -3
  107. package/dist/plugin-sdk/{reply-BgTxNeXD.js → reply-DCiyoHqU.js} +78 -78
  108. package/dist/plugin-sdk/{reply-prefix-BHuV5t70.js → reply-prefix-uxfMZW4p.js} +1 -1
  109. package/dist/plugin-sdk/{resolve-outbound-target-BkCUbYGV.js → resolve-outbound-target-BiyAyTWz.js} +2 -2
  110. package/dist/plugin-sdk/{resolve-route-D3JH_D2N.js → resolve-route-B3CCBumQ.js} +3 -3
  111. package/dist/plugin-sdk/{retry-ilSJqnz9.js → retry-CwQ_iIj8.js} +1 -1
  112. package/dist/plugin-sdk/{runner-BVqnEfNe.js → runner-CGBT7tgF.js} +9 -9
  113. package/dist/plugin-sdk/{send-BtANzsAo.js → send-B2CEnVLL.js} +6 -6
  114. package/dist/plugin-sdk/{send-BHbXh8Ly.js → send-C5h_YxNb.js} +7 -7
  115. package/dist/plugin-sdk/{send-D6LMZJ_h.js → send-CRsR8-vO.js} +10 -10
  116. package/dist/plugin-sdk/{send-Bxdu6ZZy.js → send-CjOBB3Vo.js} +10 -10
  117. package/dist/plugin-sdk/{send-BMfJIhCk.js → send-pYqe432l.js} +6 -6
  118. package/dist/plugin-sdk/{session-kI0tzViQ.js → session-BsOrxiMj.js} +4 -4
  119. package/dist/plugin-sdk/{skill-commands-DCNXVERE.js → skill-commands-ff_01_r3.js} +5 -5
  120. package/dist/plugin-sdk/{skills-B1GeRYlu.js → skills-_yTP47Cd.js} +7 -7
  121. package/dist/plugin-sdk/{sqlite-Cq_7Cg4E.js → sqlite-CxAR5ttJ.js} +1 -1
  122. package/dist/plugin-sdk/{store-Do3t33-c.js → store-BdrNabcU.js} +2 -2
  123. package/dist/plugin-sdk/{subsystem-Coz2AgU8.js → subsystem-B2uDN3TV.js} +1 -1
  124. package/dist/plugin-sdk/{tables-DR0NmBeH.js → tables-DNwXwNFa.js} +1 -1
  125. package/dist/{target-errors-DyItGyW9.js → plugin-sdk/target-errors-Paro1BjP.js} +2 -2
  126. package/dist/plugin-sdk/{thinking-DCNUIAHY.js → thinking-CXqf7WTe.js} +5 -5
  127. package/dist/{tokens-c_SLAkVb.js → plugin-sdk/tokens-bC3UVmVH.js} +1 -1
  128. package/dist/plugin-sdk/{tool-images-D7Lno-TE.js → tool-images-HJ2sfZDV.js} +2 -2
  129. package/dist/plugin-sdk/{tool-loop-detection-edmW8ZiF.js → tool-loop-detection-BVA6fax-.js} +2 -2
  130. package/dist/plugin-sdk/web-DMTBKWMU.js +65 -0
  131. package/dist/plugin-sdk/{whatsapp-actions-CcBzDuL-.js → whatsapp-actions-DfseosPO.js} +21 -21
  132. package/dist/{plugins-C4C9637U.js → plugins-DQYI3Fr-.js} +9 -9
  133. package/dist/{program-BDQRtHXP.js → program-Dh_NkeL_.js} +2 -2
  134. package/dist/{program-context-DoK7rKBC.js → program-context-C6OueMej.js} +6 -6
  135. package/dist/{prompt-select-styled-MqSvQaDb.js → prompt-select-styled-B_XU_pph.js} +1 -1
  136. package/dist/{prompt-select-styled-B3dTk26Y.js → prompt-select-styled-CmbX-Peb.js} +1 -1
  137. package/dist/{pw-ai-DhwRiS06.js → pw-ai-Ch7liUOW.js} +11 -11
  138. package/dist/{pw-ai-1htA-NnS.js → pw-ai-De-KR9_s.js} +1 -1
  139. package/dist/{qmd-manager-DdZh9PHs.js → qmd-manager-QHUP-_em.js} +7 -7
  140. package/dist/{register.maintenance-B3SsgHO_.js → register.maintenance-CzdnuWVy.js} +5 -5
  141. package/dist/{register.maintenance-BQy8hEp0.js → register.maintenance-aLrIiGjI.js} +4 -4
  142. package/dist/{register.onboard-Cg1itYBF.js → register.onboard-B_0R2fhe.js} +2 -2
  143. package/dist/{register.onboard-kaKkBUpb.js → register.onboard-DY6yrdh6.js} +2 -2
  144. package/dist/{register.setup-BBQtCyWL.js → register.setup-BMEEidVS.js} +2 -2
  145. package/dist/{register.setup-BiBByjTo.js → register.setup-DUBzMFHd.js} +2 -2
  146. package/dist/{register.subclis-B27L2Tlh.js → register.subclis-CWosGlSy.js} +3 -3
  147. package/dist/{registry-DP24za6g.js → registry-CK4e9hn8.js} +17 -17
  148. package/dist/{replies-DpPvWiGF.js → replies-BIX_isV7.js} +3 -3
  149. package/dist/{reply-prefix-CtL0omgM.js → reply-prefix-XlyuyChD.js} +1 -1
  150. package/dist/{resolve-route-BVikmvWO.js → resolve-route-CZ-1eqw0.js} +4 -4
  151. package/dist/{retry-dGG-MbxL.js → retry-Cly39XZB.js} +1 -1
  152. package/dist/{run-main-DqlK3Wy-.js → run-main-ChZAqQNU.js} +3 -3
  153. package/dist/{runner-B_KP4voe.js → runner-D0QUGA_X.js} +9 -9
  154. package/dist/{runner-BcQ0sF9T.js → runner-DUBExAb5.js} +1 -1
  155. package/dist/{send-DeEosX8F.js → send-B1u-LrcS.js} +18 -18
  156. package/dist/{send-DwKJK3sM.js → send-CiTGOvEc.js} +10 -10
  157. package/dist/{send-zSarozV2.js → send-DW96zgDL.js} +6 -6
  158. package/dist/{send-CHEOWVc8.js → send-DeFniOjh.js} +6 -6
  159. package/dist/{send-DbcLJb0P.js → send-WyRqb4WD.js} +7 -7
  160. package/dist/{session-DV1MNlbV.js → session-SM36BTsl.js} +8 -8
  161. package/dist/{skill-commands-D610IKhm.js → skill-commands-BJMb_psG.js} +9 -9
  162. package/dist/{skills-o5WVqM4V.js → skills-BFekKL7i.js} +21 -21
  163. package/dist/{sqlite-6H6Zw1cs.js → sqlite-DRbx2dhW.js} +4 -4
  164. package/dist/{store-vVE6N2mH.js → store-C0wvOkae.js} +2 -2
  165. package/dist/{subsystem-DgpxyDQ_.js → subsystem-Bs9YvKLa.js} +1 -1
  166. package/dist/{tables-BIWsCKXJ.js → tables-DuZspiBu.js} +1 -1
  167. package/dist/{plugin-sdk/target-errors-B7YyMnIi.js → target-errors-Be1SwYlW.js} +2 -2
  168. package/dist/{thinking-Ni0HF-w6.js → thinking-CdlENGRW.js} +5 -5
  169. package/dist/{plugin-sdk/tokens-CWMflosr.js → tokens-H1H1LiSQ.js} +1 -1
  170. package/dist/{tool-images-DBCfXdli.js → tool-images-DXB7tqWi.js} +2 -2
  171. package/dist/{tool-loop-detection-Bbc9OPFR.js → tool-loop-detection-Cs8_HCsx.js} +3 -3
  172. package/dist/{update-cli-4mLsTTm5.js → update-cli-B8TIn1_v.js} +4 -4
  173. package/dist/{update-cli-yJuLaKdL.js → update-cli-_VRN7Kfv.js} +5 -5
  174. package/dist/{web-Nrl97JcY.js → web-DEbB7-Xr.js} +57 -57
  175. package/dist/{web-DrsjOzkW.js → web-ysMm0Pnv.js} +6 -6
  176. package/dist/{whatsapp-actions-oRQjcdQe.js → whatsapp-actions-D1RsnX7P.js} +23 -23
  177. package/dist/{workspace-CbvamIU6.js → workspace-wAaHI8-5.js} +6 -6
  178. package/package.json +1 -1
  179. package/dist/plugin-sdk/web-B6NRKGGa.js +0 -65
@@ -1,12 +1,12 @@
1
- import { S as CONFIG_DIR } from "./registry-DP24za6g.js";
2
- import { t as createSubsystemLogger } from "./subsystem-DgpxyDQ_.js";
3
- import { n as loadConfig } from "./config-eEaJddXj.js";
1
+ import { S as CONFIG_DIR } from "./registry-CK4e9hn8.js";
2
+ import { t as createSubsystemLogger } from "./subsystem-Bs9YvKLa.js";
3
+ import { n as loadConfig } from "./config-DRbjHIwD.js";
4
4
  import { i as isErrno } from "./errors-BoQgnc8X.js";
5
5
  import { a as resolvePinnedHostnameWithPolicy } from "./ssrf-BTMDZjHT.js";
6
6
  import fs from "node:fs/promises";
7
7
  import os from "node:os";
8
8
  import path from "node:path";
9
- import fsSync from "node:fs";
9
+ import fs$1 from "node:fs";
10
10
  import { execFileSync, spawn } from "node:child_process";
11
11
  import net from "node:net";
12
12
  import { createServer } from "node:http";
@@ -1007,7 +1007,7 @@ const CHROMIUM_EXE_NAMES = new Set([
1007
1007
  ]);
1008
1008
  function exists$1(filePath) {
1009
1009
  try {
1010
- return fsSync.existsSync(filePath);
1010
+ return fs$1.existsSync(filePath);
1011
1011
  } catch {
1012
1012
  return false;
1013
1013
  }
@@ -1150,7 +1150,7 @@ function findDesktopFilePath(desktopId) {
1150
1150
  }
1151
1151
  function readDesktopExecLine(desktopPath) {
1152
1152
  try {
1153
- const lines = fsSync.readFileSync(desktopPath, "utf8").split(/\r?\n/);
1153
+ const lines = fs$1.readFileSync(desktopPath, "utf8").split(/\r?\n/);
1154
1154
  for (const line of lines) if (line.startsWith("Exec=")) return line.slice(5).trim();
1155
1155
  } catch {}
1156
1156
  return null;
@@ -1437,8 +1437,8 @@ function decoratedMarkerPath(userDataDir) {
1437
1437
  }
1438
1438
  function safeReadJson(filePath) {
1439
1439
  try {
1440
- if (!fsSync.existsSync(filePath)) return null;
1441
- const raw = fsSync.readFileSync(filePath, "utf-8");
1440
+ if (!fs$1.existsSync(filePath)) return null;
1441
+ const raw = fs$1.readFileSync(filePath, "utf-8");
1442
1442
  const parsed = JSON.parse(raw);
1443
1443
  if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return null;
1444
1444
  return parsed;
@@ -1447,8 +1447,8 @@ function safeReadJson(filePath) {
1447
1447
  }
1448
1448
  }
1449
1449
  function safeWriteJson(filePath, data) {
1450
- fsSync.mkdirSync(path.dirname(filePath), { recursive: true });
1451
- fsSync.writeFileSync(filePath, JSON.stringify(data, null, 2));
1450
+ fs$1.mkdirSync(path.dirname(filePath), { recursive: true });
1451
+ fs$1.writeFileSync(filePath, JSON.stringify(data, null, 2));
1452
1452
  }
1453
1453
  function setDeep(obj, keys, value) {
1454
1454
  let node = obj;
@@ -1575,7 +1575,7 @@ function decorateSymiProfile(userDataDir, opts) {
1575
1575
  }
1576
1576
  safeWriteJson(preferencesPath, prefs);
1577
1577
  try {
1578
- fsSync.writeFileSync(decoratedMarkerPath(userDataDir), `${Date.now()}\n`, "utf-8");
1578
+ fs$1.writeFileSync(decoratedMarkerPath(userDataDir), `${Date.now()}\n`, "utf-8");
1579
1579
  } catch {}
1580
1580
  }
1581
1581
  function ensureProfileCleanExit(userDataDir) {
@@ -1591,7 +1591,7 @@ function ensureProfileCleanExit(userDataDir) {
1591
1591
  const log = createSubsystemLogger("browser").child("chrome");
1592
1592
  function exists(filePath) {
1593
1593
  try {
1594
- return fsSync.existsSync(filePath);
1594
+ return fs$1.existsSync(filePath);
1595
1595
  } catch {
1596
1596
  return false;
1597
1597
  }
@@ -1671,7 +1671,7 @@ async function launchSymiChrome(resolved, profile) {
1671
1671
  const exe = resolveBrowserExecutable(resolved);
1672
1672
  if (!exe) throw new Error("No supported browser found (Chrome/Brave/Edge/Chromium on macOS, Linux, or Windows).");
1673
1673
  const userDataDir = resolveSymiUserDataDir(profile.name);
1674
- fsSync.mkdirSync(userDataDir, { recursive: true });
1674
+ fs$1.mkdirSync(userDataDir, { recursive: true });
1675
1675
  const needsDecorate = !isProfileDecorated(userDataDir, profile.name, (profile.color ?? DEFAULT_SYMI_BROWSER_COLOR).toUpperCase());
1676
1676
  const spawnOnce = () => {
1677
1677
  const args = [
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { p as normalizeAccountId } from "./session-key-BCzIW1Y2.js";
3
- import { t as INTERNAL_MESSAGE_CHANNEL } from "./message-channel-DbsRltF2.js";
3
+ import { t as INTERNAL_MESSAGE_CHANNEL } from "./message-channel-Dz5lr5b0.js";
4
4
 
5
5
  //#region src/markdown/fences.ts
6
6
  function parseFenceSpans(buffer) {
@@ -1,4 +1,4 @@
1
- import { t as createSubsystemLogger } from "./subsystem-DgpxyDQ_.js";
1
+ import { t as createSubsystemLogger } from "./subsystem-Bs9YvKLa.js";
2
2
  import { t as parseBooleanValue } from "./boolean-B8-BqKGQ.js";
3
3
  import path from "node:path";
4
4
 
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { an as getPrimaryCommand, cn as hasHelpOrVersion } from "./entry.js";
3
- import { i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-B27L2Tlh.js";
3
+ import { i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-CWosGlSy.js";
4
4
 
5
5
  //#region src/cli/program/command-registry.ts
6
6
  var command_registry_exports = /* @__PURE__ */ __exportAll({
@@ -22,7 +22,7 @@ const coreEntries = [
22
22
  hasSubcommands: false
23
23
  }],
24
24
  register: async ({ program }) => {
25
- (await import("./register.setup-BBQtCyWL.js")).registerSetupCommand(program);
25
+ (await import("./register.setup-BMEEidVS.js")).registerSetupCommand(program);
26
26
  }
27
27
  },
28
28
  {
@@ -32,7 +32,7 @@ const coreEntries = [
32
32
  hasSubcommands: false
33
33
  }],
34
34
  register: async ({ program }) => {
35
- (await import("./register.onboard-Cg1itYBF.js")).registerOnboardCommand(program);
35
+ (await import("./register.onboard-B_0R2fhe.js")).registerOnboardCommand(program);
36
36
  }
37
37
  },
38
38
  {
@@ -79,7 +79,7 @@ const coreEntries = [
79
79
  }
80
80
  ],
81
81
  register: async ({ program }) => {
82
- (await import("./register.maintenance-B3SsgHO_.js")).registerMaintenanceCommands(program);
82
+ (await import("./register.maintenance-CzdnuWVy.js")).registerMaintenanceCommands(program);
83
83
  }
84
84
  },
85
85
  {
@@ -1,8 +1,8 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { D as escapeRegExp, W as isPlainObject, c as getActivePluginRegistry } from "./registry-DP24za6g.js";
3
- import { r as normalizeChannelId } from "./plugins-C4C9637U.js";
4
- import { G as DEFAULT_MODEL, K as DEFAULT_PROVIDER, M as resolveConfiguredModelRef } from "./model-auth-CwOuTuXl.js";
5
- import { f as listChannelDocks, r as listThinkingLevels } from "./thinking-Ni0HF-w6.js";
2
+ import { D as escapeRegExp, W as isPlainObject, c as getActivePluginRegistry } from "./registry-CK4e9hn8.js";
3
+ import { r as normalizeChannelId } from "./plugins-DQYI3Fr-.js";
4
+ import { G as DEFAULT_MODEL, K as DEFAULT_PROVIDER, M as resolveConfiguredModelRef } from "./model-auth-DK43VicI.js";
5
+ import { f as listChannelDocks, r as listThinkingLevels } from "./thinking-CdlENGRW.js";
6
6
 
7
7
  //#region src/config/commands.ts
8
8
  function resolveAutoDefault(providerId) {
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { Yt as resolveStateDir, l as routeLogsToStderr, nt as pathExists } from "./entry.js";
3
- import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-B27L2Tlh.js";
4
- import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-DhvgkMQN.js";
3
+ import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-CWosGlSy.js";
4
+ import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-Be3hDEmx.js";
5
5
  import { t as getProgramContext } from "./program-context-CqzR_m-7.js";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { g as resolveStateDir } from "./paths-Cqn-zk3M.js";
3
3
  import { h as pathExists } from "./utils-B-0b9bGM.js";
4
4
  import { i as routeLogsToStderr } from "./subsystem-D9vIQve0.js";
5
- import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-DoK7rKBC.js";
5
+ import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-C6OueMej.js";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
8
8
  import fs from "node:fs/promises";
@@ -1,13 +1,13 @@
1
- import { n as resolveConfigPath, r as resolveDefaultConfigCandidates, s as resolveStateDir, u as resolveRequiredHomeDir } from "./paths-CySxpNhH.js";
1
+ import { n as resolveConfigPath, r as resolveDefaultConfigCandidates, s as resolveStateDir, u as resolveRequiredHomeDir } from "./paths-Cce4PUkG.js";
2
2
  import { s as normalizeAgentId, t as DEFAULT_AGENT_ID } from "./session-key-BCzIW1Y2.js";
3
- import { I as resolveUserPath, P as resolveConfigDir, W as isPlainObject$1, k as isRecord, s as normalizeChatChannelId, t as CHANNEL_IDS } from "./registry-DP24za6g.js";
4
- import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-Bw1Ed8W9.js";
5
- import { $ as shouldEnableShellEnvFallback, Q as shouldDeferShellEnvFallback, W as DEFAULT_CONTEXT_TOKENS, X as loadShellEnvFallback, Z as resolveShellEnvFallbackTimeoutMs, j as parseModelRef } from "./model-auth-CwOuTuXl.js";
6
- import { c as resolveMemorySlotDecision, d as isDangerousHostEnvVarName, f as normalizeEnvVarKey, l as isPathInside, o as normalizePluginsConfig, s as resolveEnableState, t as loadPluginManifestRegistry } from "./manifest-registry-CneMHk0N.js";
3
+ import { I as resolveUserPath, P as resolveConfigDir, W as isPlainObject$1, k as isRecord, s as normalizeChatChannelId, t as CHANNEL_IDS } from "./registry-CK4e9hn8.js";
4
+ import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-BxoUQqgM.js";
5
+ import { $ as shouldEnableShellEnvFallback, Q as shouldDeferShellEnvFallback, W as DEFAULT_CONTEXT_TOKENS, X as loadShellEnvFallback, Z as resolveShellEnvFallbackTimeoutMs, j as parseModelRef } from "./model-auth-DK43VicI.js";
6
+ import { c as resolveMemorySlotDecision, d as isDangerousHostEnvVarName, f as normalizeEnvVarKey, l as isPathInside, o as normalizePluginsConfig, s as resolveEnableState, t as loadPluginManifestRegistry } from "./manifest-registry-D0IQ3WuX.js";
7
7
  import { createRequire } from "node:module";
8
8
  import os from "node:os";
9
9
  import path from "node:path";
10
- import fsSync from "node:fs";
10
+ import fs from "node:fs";
11
11
  import JSON5 from "json5";
12
12
  import { isDeepStrictEqual } from "node:util";
13
13
  import crypto from "node:crypto";
@@ -20,7 +20,7 @@ function loadDotEnv(opts) {
20
20
  const quiet = opts?.quiet ?? true;
21
21
  dotenv.config({ quiet });
22
22
  const globalEnvPath = path.join(resolveConfigDir(process.env), ".env");
23
- if (!fsSync.existsSync(globalEnvPath)) return;
23
+ if (!fs.existsSync(globalEnvPath)) return;
24
24
  dotenv.config({
25
25
  quiet,
26
26
  path: globalEnvPath,
@@ -156,7 +156,7 @@ function resolveAgentMaxConcurrent(cfg) {
156
156
  //#endregion
157
157
  //#region src/config/talk.ts
158
158
  function readTalkApiKeyFromProfile(deps = {}) {
159
- const fsImpl = deps.fs ?? fsSync;
159
+ const fsImpl = deps.fs ?? fs;
160
160
  const osImpl = deps.os ?? os;
161
161
  const pathImpl = deps.path ?? path;
162
162
  const home = osImpl.homedir();
@@ -849,7 +849,7 @@ var IncludeProcessor = class IncludeProcessor {
849
849
  const normalized = path.normalize(resolved);
850
850
  if (!isPathInside(this.rootDir, normalized)) throw new ConfigIncludeError(`Include path escapes config directory: ${includePath} (root: ${this.rootDir})`, includePath);
851
851
  try {
852
- const real = fsSync.realpathSync(normalized);
852
+ const real = fs.realpathSync(normalized);
853
853
  if (!isPathInside(this.rootRealDir, real)) throw new ConfigIncludeError(`Include path resolves outside config directory (symlink): ${includePath} (root: ${this.rootDir})`, includePath);
854
854
  } catch (err) {
855
855
  if (err instanceof ConfigIncludeError) throw err;
@@ -885,13 +885,13 @@ var IncludeProcessor = class IncludeProcessor {
885
885
  };
886
886
  function safeRealpath(target) {
887
887
  try {
888
- return fsSync.realpathSync(target);
888
+ return fs.realpathSync(target);
889
889
  } catch {
890
890
  return target;
891
891
  }
892
892
  }
893
893
  const defaultResolver = {
894
- readFile: (p) => fsSync.readFileSync(p, "utf-8"),
894
+ readFile: (p) => fs.readFileSync(p, "utf-8"),
895
895
  parseJson: (raw) => JSON5.parse(raw)
896
896
  };
897
897
  /**
@@ -5583,7 +5583,7 @@ function resolveConfigPathForDeps(deps) {
5583
5583
  }
5584
5584
  function normalizeDeps(overrides = {}) {
5585
5585
  return {
5586
- fs: overrides.fs ?? fsSync,
5586
+ fs: overrides.fs ?? fs,
5587
5587
  json5: overrides.json5 ?? JSON5,
5588
5588
  env: overrides.env ?? process.env,
5589
5589
  homedir: overrides.homedir ?? (() => resolveRequiredHomeDir(overrides.env ?? process.env, os.homedir)),
@@ -31,7 +31,8 @@ let WATCHDOG_MS = 300000; // 300 seconds of silence → failure (profile-overrid
31
31
 
32
32
  // ── Model profile state (updated via "profile" gateway event) ────
33
33
  let activeProfile = null;
34
- const _seenMessageIds = new Set(); // dedup guard for reconnect replays (future)
34
+ // NOTE: Client-side dedup removed server-side per-client seq tracking in
35
+ // glass-ui-ws.ts prevents duplicate broadcasts. See Phase 5 of v3 plan.
35
36
 
36
37
  // ── Utility ───────────────────────────────────────────────────────
37
38
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
@@ -5,7 +5,7 @@ import { c as getActivePluginRegistry, v as createInternalHookEvent, y as trigge
5
5
  import { t as createSubsystemLogger } from "./subsystem-CZixfwU8.js";
6
6
  import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-Cn6drXx2.js";
7
7
  import { r as normalizeChannelId, t as getChannelPlugin } from "./plugins-71oIavrF.js";
8
- import { B as resolveMirroredTranscriptText, i as isMessagingToolDuplicate, z as appendAssistantMessageToSessionTranscript } from "./pi-embedded-helpers-B8kqLWns.js";
8
+ import { B as resolveMirroredTranscriptText, i as isMessagingToolDuplicate, z as appendAssistantMessageToSessionTranscript } from "./pi-embedded-helpers-lgx_U5KS.js";
9
9
  import { d as getChannelDock } from "./thinking-W85Rb32m.js";
10
10
  import { c as resolveChunkMode, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, n as chunkByParagraph } from "./chunk-DTMTDXwE.js";
11
11
  import { n as resolveMarkdownTableMode } from "./markdown-tables-DawaaZEe.js";
@@ -1,18 +1,18 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { s as resolveStateDir } from "./paths-CySxpNhH.js";
2
+ import { s as resolveStateDir } from "./paths-Cce4PUkG.js";
3
3
  import { m as normalizeOptionalAccountId, p as normalizeAccountId } from "./session-key-BCzIW1Y2.js";
4
- import { c as getActivePluginRegistry, v as createInternalHookEvent, x as triggerInternalHook } from "./registry-DP24za6g.js";
5
- import { t as createSubsystemLogger } from "./subsystem-DgpxyDQ_.js";
6
- import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-c_SLAkVb.js";
7
- import { r as normalizeChannelId, t as getChannelPlugin } from "./plugins-C4C9637U.js";
8
- import { B as resolveMirroredTranscriptText, i as isMessagingToolDuplicate, z as appendAssistantMessageToSessionTranscript } from "./pi-embedded-helpers-DEEaCvEp.js";
9
- import { d as getChannelDock } from "./thinking-Ni0HF-w6.js";
10
- import { c as resolveChunkMode, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, n as chunkByParagraph } from "./chunk-ClbN9Pqy.js";
11
- import { n as resolveMarkdownTableMode } from "./markdown-tables-DSHvnTLx.js";
12
- import { t as getAgentScopedMediaLocalRoots } from "./local-roots-C7OCYACU.js";
13
- import { l as markdownToSignalTextChunks, t as sendMessageSignal } from "./send-zSarozV2.js";
4
+ import { c as getActivePluginRegistry, v as createInternalHookEvent, x as triggerInternalHook } from "./registry-CK4e9hn8.js";
5
+ import { t as createSubsystemLogger } from "./subsystem-Bs9YvKLa.js";
6
+ import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-H1H1LiSQ.js";
7
+ import { r as normalizeChannelId, t as getChannelPlugin } from "./plugins-DQYI3Fr-.js";
8
+ import { B as resolveMirroredTranscriptText, i as isMessagingToolDuplicate, z as appendAssistantMessageToSessionTranscript } from "./pi-embedded-helpers-ag2bosuj.js";
9
+ import { d as getChannelDock } from "./thinking-CdlENGRW.js";
10
+ import { c as resolveChunkMode, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, n as chunkByParagraph } from "./chunk-BW5f05BR.js";
11
+ import { n as resolveMarkdownTableMode } from "./markdown-tables-iMQQZu4Q.js";
12
+ import { t as getAgentScopedMediaLocalRoots } from "./local-roots-DMwIh5cS.js";
13
+ import { l as markdownToSignalTextChunks, t as sendMessageSignal } from "./send-DW96zgDL.js";
14
14
  import path from "node:path";
15
- import fsSync from "node:fs";
15
+ import fs from "node:fs";
16
16
  import crypto from "node:crypto";
17
17
 
18
18
  //#region src/plugins/hooks.ts
@@ -721,11 +721,11 @@ function resolveFailedDir(stateDir) {
721
721
  /** Ensure the queue directory (and failed/ subdirectory) exist. */
722
722
  async function ensureQueueDir(stateDir) {
723
723
  const queueDir = resolveQueueDir(stateDir);
724
- await fsSync.promises.mkdir(queueDir, {
724
+ await fs.promises.mkdir(queueDir, {
725
725
  recursive: true,
726
726
  mode: 448
727
727
  });
728
- await fsSync.promises.mkdir(resolveFailedDir(stateDir), {
728
+ await fs.promises.mkdir(resolveFailedDir(stateDir), {
729
729
  recursive: true,
730
730
  mode: 448
731
731
  });
@@ -752,18 +752,18 @@ async function enqueueDelivery(params, stateDir) {
752
752
  const filePath = path.join(queueDir, `${id}.json`);
753
753
  const tmp = `${filePath}.${process.pid}.tmp`;
754
754
  const json = JSON.stringify(entry, null, 2);
755
- await fsSync.promises.writeFile(tmp, json, {
755
+ await fs.promises.writeFile(tmp, json, {
756
756
  encoding: "utf-8",
757
757
  mode: 384
758
758
  });
759
- await fsSync.promises.rename(tmp, filePath);
759
+ await fs.promises.rename(tmp, filePath);
760
760
  return id;
761
761
  }
762
762
  /** Remove a successfully delivered entry from the queue. */
763
763
  async function ackDelivery(id, stateDir) {
764
764
  const filePath = path.join(resolveQueueDir(stateDir), `${id}.json`);
765
765
  try {
766
- await fsSync.promises.unlink(filePath);
766
+ await fs.promises.unlink(filePath);
767
767
  } catch (err) {
768
768
  if ((err && typeof err === "object" && "code" in err ? String(err.code) : null) !== "ENOENT") throw err;
769
769
  }
@@ -771,16 +771,16 @@ async function ackDelivery(id, stateDir) {
771
771
  /** Update a queue entry after a failed delivery attempt. */
772
772
  async function failDelivery(id, error, stateDir) {
773
773
  const filePath = path.join(resolveQueueDir(stateDir), `${id}.json`);
774
- const raw = await fsSync.promises.readFile(filePath, "utf-8");
774
+ const raw = await fs.promises.readFile(filePath, "utf-8");
775
775
  const entry = JSON.parse(raw);
776
776
  entry.retryCount += 1;
777
777
  entry.lastError = error;
778
778
  const tmp = `${filePath}.${process.pid}.tmp`;
779
- await fsSync.promises.writeFile(tmp, JSON.stringify(entry, null, 2), {
779
+ await fs.promises.writeFile(tmp, JSON.stringify(entry, null, 2), {
780
780
  encoding: "utf-8",
781
781
  mode: 384
782
782
  });
783
- await fsSync.promises.rename(tmp, filePath);
783
+ await fs.promises.rename(tmp, filePath);
784
784
  }
785
785
 
786
786
  //#endregion
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { t as createSubsystemLogger } from "./subsystem-DgpxyDQ_.js";
2
+ import { t as createSubsystemLogger } from "./subsystem-Bs9YvKLa.js";
3
3
  import { i as pruneDiagnosticSessionStates, r as getDiagnosticSessionState, t as diagnosticSessionStates } from "./diagnostic-session-state-Bxo4UHOL.js";
4
4
 
5
5
  //#region src/infra/diagnostic-events.ts
@@ -1,7 +1,7 @@
1
1
  import { r as resolveCliName } from "./command-format-BtYOfWxC.js";
2
2
  import { t as resolveSymiPackageRoot } from "./symi-root-BNuQ4lAT.js";
3
3
  import { t as note } from "./note-DDecZomM.js";
4
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-CqHcRASb.js";
4
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-C3hbO0zE.js";
5
5
  import { spawnSync } from "node:child_process";
6
6
  import path from "node:path";
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
2
2
  import { r as resolveCliName } from "./command-format-COaS-S7B.js";
3
3
  import { t as note } from "./note-DeHoW7xO.js";
4
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-DJ2AgNQF.js";
4
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-DxditxWW.js";
5
5
  import path from "node:path";
6
6
  import { spawnSync } from "node:child_process";
7
7
 
package/dist/entry.js CHANGED
@@ -2500,7 +2500,7 @@ if (!ensureExperimentalWarningSuppressed()) {
2500
2500
  applyCliProfileEnv({ profile: parsed.profile });
2501
2501
  process$1.argv = parsed.argv;
2502
2502
  }
2503
- import("./run-main-DqlK3Wy-.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2503
+ import("./run-main-ChZAqQNU.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2504
2504
  console.error("[symi] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
2505
2505
  process$1.exitCode = 1;
2506
2506
  });
@@ -7,13 +7,13 @@ import { a as resolveAgentIdentity } from "./reply-prefix-K_J_nfgx.js";
7
7
  import "./github-copilot-token-BbsJ0Qbo.js";
8
8
  import "./env-CQ_DQOwT.js";
9
9
  import "./tokens-Cn6drXx2.js";
10
- import { D as resolveAgentTimeoutMs, r as runEmbeddedPiAgent } from "./pi-embedded-BRw7oe5n.js";
10
+ import { D as resolveAgentTimeoutMs, r as runEmbeddedPiAgent } from "./pi-embedded-D7S6Iuxk.js";
11
11
  import "./plugins-71oIavrF.js";
12
12
  import "./accounts-DDEyGwby.js";
13
13
  import "./bindings-DYVakimr.js";
14
14
  import "./send-D-hWrHoH.js";
15
15
  import "./send-C1IYd3g7.js";
16
- import "./deliver-C-37cZUe.js";
16
+ import "./deliver-BH0l3UKW.js";
17
17
  import "./diagnostic-D0xmLpej.js";
18
18
  import "./diagnostic-session-state-C1vRJs5w.js";
19
19
  import "./accounts-8zZqL37v.js";
@@ -21,10 +21,10 @@ import "./send-C4Ucr8ep.js";
21
21
  import "./image-ops-ByaQt43P.js";
22
22
  import "./pi-model-discovery-j5tVLINv.js";
23
23
  import "./message-channel-BQINJQIT.js";
24
- import { G as saveSessionStore, H as loadSessionStore } from "./pi-embedded-helpers-B8kqLWns.js";
24
+ import { G as saveSessionStore, H as loadSessionStore } from "./pi-embedded-helpers-lgx_U5KS.js";
25
25
  import "./config-BmV60pPT.js";
26
26
  import "./manifest-registry-D-mTF1cj.js";
27
- import "./chrome-D2SKJnR7.js";
27
+ import "./chrome-CDJYxX5a.js";
28
28
  import "./skills-BNpGMnp-.js";
29
29
  import "./redact-1NGYV_8p.js";
30
30
  import "./errors-CPfngF0S.js";
@@ -34,7 +34,7 @@ import "./thinking-W85Rb32m.js";
34
34
  import "./accounts-DImOt9jX.js";
35
35
  import { n as resolveSessionFilePath, s as resolveStorePath } from "./paths-DkMamAQ-.js";
36
36
  import "./tool-images-ChC2CXaN.js";
37
- import "./image-DcpMiprB.js";
37
+ import "./image-CHzdaNJ4.js";
38
38
  import "./manager-jpn5vRTY.js";
39
39
  import "./gemini-auth-CSlZZ1Pw.js";
40
40
  import "./sqlite-BNh23mUR.js";
@@ -47,7 +47,7 @@ import "./ir-F0moAwIl.js";
47
47
  import "./render-B1VqYyvo.js";
48
48
  import "./commands-registry-C_aYUwpl.js";
49
49
  import "./skill-commands-DklY7Cj7.js";
50
- import "./runner-BcQ0sF9T.js";
50
+ import "./runner-DUBExAb5.js";
51
51
  import "./fetch-DtLn7YU3.js";
52
52
  import "./channel-activity-D9q-fIPB.js";
53
53
  import "./tables-COnZ169v.js";
@@ -1,7 +1,7 @@
1
1
  import { t as parseBooleanValue } from "./boolean-B8-BqKGQ.js";
2
2
  import { n as MANIFEST_KEY, t as LEGACY_MANIFEST_KEYS } from "./legacy-names-BHV4AoFT.js";
3
3
  import path from "node:path";
4
- import fsSync from "node:fs";
4
+ import fs from "node:fs";
5
5
  import JSON5 from "json5";
6
6
  import YAML from "yaml";
7
7
 
@@ -79,7 +79,7 @@ function hasBinary(bin) {
79
79
  for (const part of parts) for (const ext of extensions) {
80
80
  const candidate = path.join(part, bin + ext);
81
81
  try {
82
- fsSync.accessSync(candidate, fsSync.constants.X_OK);
82
+ fs.accessSync(candidate, fs.constants.X_OK);
83
83
  hasBinaryCache.set(bin, true);
84
84
  return true;
85
85
  } catch {}
@@ -134,7 +134,7 @@ import { i as pickGatewaySelfPresence } from "./status-Csa1fdSW.js";
134
134
  import { a as styleHealthChannelLine, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-CGJe8xON.js";
135
135
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-BseSWee1.js";
136
136
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-ZdimP1aU.js";
137
- import { t as runOnboardingWizard } from "./onboarding-Dnmpcyzj.js";
137
+ import { t as runOnboardingWizard } from "./onboarding-BL5h6kMP.js";
138
138
  import { _ as getHandshakeTimeoutMs, a as DEFAULT_ASSISTANT_IDENTITY, b as resolveCronRunLogPath, c as upsertPresence, d as DEDUPE_MAX, f as DEDUPE_TTL_MS, g as TICK_INTERVAL_MS, h as MAX_PAYLOAD_BYTES, i as safeParseJson, l as formatError, m as MAX_BUFFERED_BYTES, n as handleGatewayRequest, o as resolveAssistantIdentity, p as HEALTH_REFRESH_INTERVAL_MS, r as broadcastPresenceSnapshot, s as listSystemPresence, t as coreGatewayHandlers, u as loadVoiceWakeConfig, v as abortChatRunById, x as startGatewayConfigReloader, y as appendCronRunLog } from "./server-methods-CGVoOkf3.js";
139
139
  import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-BBaXO4aV.js";
140
140
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-CzWeiE-Y.js";
@@ -11695,7 +11695,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
11695
11695
  });
11696
11696
  let glassUiBridgeCleanup = null;
11697
11697
  if (!minimalTestGateway) {
11698
- const { createGlassUiBridge } = await import("./glass-ui-ws-CmDHJq0W.js");
11698
+ const { createGlassUiBridge } = await import("./glass-ui-ws-DtFvFNZp.js");
11699
11699
  glassUiBridgeCleanup = createGlassUiBridge({
11700
11700
  wss: glassUiWss,
11701
11701
  context: gatewayRequestContext,
@@ -139,7 +139,7 @@ import { r as pickGatewaySelfPresence } from "./status-Dd3-6fq5.js";
139
139
  import { c as startHeartbeatRunner, i as styleHealthChannelLine, n as getHealthSnapshot, o as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-R_6vQfbY.js";
140
140
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Z947tKLt.js";
141
141
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-CtckACbb.js";
142
- import { t as runOnboardingWizard } from "./onboarding-pxBeD60g.js";
142
+ import { t as runOnboardingWizard } from "./onboarding-CeLx4VEB.js";
143
143
  import { _ as getHandshakeTimeoutMs, a as DEFAULT_ASSISTANT_IDENTITY, b as resolveCronRunLogPath, c as upsertPresence, d as DEDUPE_MAX, f as DEDUPE_TTL_MS, g as TICK_INTERVAL_MS, h as MAX_PAYLOAD_BYTES, i as safeParseJson, l as formatError, m as MAX_BUFFERED_BYTES, n as handleGatewayRequest, o as resolveAssistantIdentity, p as HEALTH_REFRESH_INTERVAL_MS, r as broadcastPresenceSnapshot, s as listSystemPresence, t as coreGatewayHandlers, u as loadVoiceWakeConfig, v as abortChatRunById, x as startGatewayConfigReloader, y as appendCronRunLog } from "./server-methods-B9ZPWP0q.js";
144
144
  import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-CgmHr336.js";
145
145
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-Bv0M7ka7.js";
@@ -11699,7 +11699,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
11699
11699
  });
11700
11700
  let glassUiBridgeCleanup = null;
11701
11701
  if (!minimalTestGateway) {
11702
- const { createGlassUiBridge } = await import("./glass-ui-ws-C9w0ySFw.js");
11702
+ const { createGlassUiBridge } = await import("./glass-ui-ws-0yPnNh0o.js");
11703
11703
  glassUiBridgeCleanup = createGlassUiBridge({
11704
11704
  wss: glassUiWss,
11705
11705
  context: gatewayRequestContext,
@@ -1,4 +1,4 @@
1
- import { A as normalizeProviderId } from "./model-auth-CwOuTuXl.js";
1
+ import { A as normalizeProviderId } from "./model-auth-DK43VicI.js";
2
2
  import { n as formatErrorMessage } from "./errors-BoQgnc8X.js";
3
3
 
4
4
  //#region src/agents/live-auth-keys.ts
@@ -1,13 +1,13 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { s as resolveStateDir } from "./paths-CySxpNhH.js";
2
+ import { s as resolveStateDir } from "./paths-Cce4PUkG.js";
3
3
  import path from "node:path";
4
- import fsSync from "node:fs";
4
+ import fs from "node:fs";
5
5
 
6
6
  //#region src/infra/json-file.ts
7
7
  function loadJsonFile(pathname) {
8
8
  try {
9
- if (!fsSync.existsSync(pathname)) return;
10
- const raw = fsSync.readFileSync(pathname, "utf8");
9
+ if (!fs.existsSync(pathname)) return;
10
+ const raw = fs.readFileSync(pathname, "utf8");
11
11
  return JSON.parse(raw);
12
12
  } catch {
13
13
  return;
@@ -15,12 +15,12 @@ function loadJsonFile(pathname) {
15
15
  }
16
16
  function saveJsonFile(pathname, data) {
17
17
  const dir = path.dirname(pathname);
18
- if (!fsSync.existsSync(dir)) fsSync.mkdirSync(dir, {
18
+ if (!fs.existsSync(dir)) fs.mkdirSync(dir, {
19
19
  recursive: true,
20
20
  mode: 448
21
21
  });
22
- fsSync.writeFileSync(pathname, `${JSON.stringify(data, null, 2)}\n`, "utf8");
23
- fsSync.chmodSync(pathname, 384);
22
+ fs.writeFileSync(pathname, `${JSON.stringify(data, null, 2)}\n`, "utf8");
23
+ fs.chmodSync(pathname, 384);
24
24
  }
25
25
 
26
26
  //#endregion
@@ -155,23 +155,38 @@ function safeSend(ws, data) {
155
155
  }
156
156
  function createGlassUiBridge(opts) {
157
157
  const { wss, context, extraHandlers, onBroadcast } = opts;
158
- const browserClients = /* @__PURE__ */ new Set();
159
- function broadcastToBrowsers(msg) {
160
- for (const client of browserClients) safeSend(client, msg);
158
+ const browserClients = /* @__PURE__ */ new Map();
159
+ let broadcastSeq = 0;
160
+ function broadcastToBrowsers(msg, seq) {
161
+ for (const [, state] of browserClients) {
162
+ if (seq <= state.lastBroadcastSeq) continue;
163
+ state.lastBroadcastSeq = seq;
164
+ safeSend(state.ws, msg);
165
+ }
161
166
  }
162
167
  const broadcastUnsub = onBroadcast((event, payload) => {
168
+ broadcastSeq++;
169
+ const seq = broadcastSeq;
163
170
  if (event === "chat") broadcastToBrowsers({
164
171
  type: "chat",
165
- payload
166
- });
172
+ payload,
173
+ _seq: seq
174
+ }, seq);
167
175
  else if (event === "agent") broadcastToBrowsers({
168
176
  type: "agent",
169
- payload
170
- });
177
+ payload,
178
+ _seq: seq
179
+ }, seq);
171
180
  else if (event === "subagent") broadcastToBrowsers({
172
181
  type: "subagent",
173
- payload
174
- });
182
+ payload,
183
+ _seq: seq
184
+ }, seq);
185
+ else if (event === "profile") broadcastToBrowsers({
186
+ type: "profile",
187
+ payload,
188
+ _seq: seq
189
+ }, seq);
175
190
  });
176
191
  /** Dispatch an RPC method through the gateway's internal handler. */
177
192
  async function dispatchRpc(method, params) {
@@ -215,7 +230,10 @@ function createGlassUiBridge(opts) {
215
230
  } catch {}
216
231
  }
217
232
  wss.on("connection", (ws) => {
218
- browserClients.add(ws);
233
+ browserClients.set(ws, {
234
+ ws,
235
+ lastBroadcastSeq: broadcastSeq
236
+ });
219
237
  safeSend(ws, {
220
238
  type: "status",
221
239
  connected: true
@@ -297,8 +315,8 @@ function createGlassUiBridge(opts) {
297
315
  });
298
316
  return () => {
299
317
  broadcastUnsub();
300
- for (const client of browserClients) try {
301
- client.close();
318
+ for (const [, state] of browserClients) try {
319
+ state.ws.close();
302
320
  } catch {}
303
321
  browserClients.clear();
304
322
  };