@symerian/symi 2.6.35 → 2.6.36

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 (133) hide show
  1. package/dist/{audio-preflight-C40mKAp7.js → audio-preflight-CPBOQV4I.js} +4 -4
  2. package/dist/{audio-preflight-BVaaZWkg.js → audio-preflight-DHTaS5U1.js} +4 -4
  3. package/dist/build-info.json +3 -3
  4. package/dist/bundled/boot-md/handler.js +6 -6
  5. package/dist/bundled/session-memory/handler.js +6 -6
  6. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  7. package/dist/{chrome-CDJYxX5a.js → chrome-D2SKJnR7.js} +7 -7
  8. package/dist/{chrome-DkaXoP36.js → chrome-DYZwl5Gv.js} +7 -7
  9. package/dist/control-ui/css/style.css +81 -0
  10. package/dist/control-ui/index.html +2 -2
  11. package/dist/control-ui/js/menu.js +38 -30
  12. package/dist/control-ui/js/settings.js +166 -2
  13. package/dist/{deliver-BH0l3UKW.js → deliver-C-37cZUe.js} +1 -1
  14. package/dist/{deliver-C46-vyqg.js → deliver-dODxSv3b.js} +1 -1
  15. package/dist/extensionAPI.js +6 -6
  16. package/dist/{image-CuzFLQWC.js → image-CXu8W39c.js} +1 -1
  17. package/dist/{image-CHzdaNJ4.js → image-DcpMiprB.js} +1 -1
  18. package/dist/llm-slug-generator.js +6 -6
  19. package/dist/{pi-embedded-helpers-lgx_U5KS.js → pi-embedded-helpers-B8kqLWns.js} +4 -4
  20. package/dist/{pi-embedded-helpers-CfqDGQ9J.js → pi-embedded-helpers-pubKo8HQ.js} +4 -4
  21. package/dist/{pi-embedded-CziuxRtW.js → pi-embedded-liyRigX2.js} +16 -16
  22. package/dist/plugin-sdk/{accounts-BtaOa4z_.js → accounts-BToL3HlP.js} +1 -1
  23. package/dist/plugin-sdk/{accounts-Ddm33hQm.js → accounts-D9zGZU5t.js} +3 -3
  24. package/dist/plugin-sdk/{accounts-s-AdhXVR.js → accounts-Dtszw3Zn.js} +1 -1
  25. package/dist/plugin-sdk/{active-listener-BXYeALs0.js → active-listener-bEk__wbB.js} +1 -1
  26. package/dist/plugin-sdk/{agent-scope-CYYpcO9W.js → agent-scope-C3gMMKCU.js} +2 -2
  27. package/dist/plugin-sdk/{api-key-rotation-D_sMvI5W.js → api-key-rotation-CVBMpnPc.js} +1 -1
  28. package/dist/plugin-sdk/{audio-preflight-VpItkiy3.js → audio-preflight-DoQQKlxa.js} +24 -24
  29. package/dist/plugin-sdk/{bindings-C7hRtgYW.js → bindings-BbwoUGPx.js} +2 -2
  30. package/dist/plugin-sdk/{channel-activity-DoC1xtDu.js → channel-activity-Ji7f0gqq.js} +1 -1
  31. package/dist/plugin-sdk/{channel-web-D4P9MkFu.js → channel-web-CP1OgJFj.js} +22 -22
  32. package/dist/plugin-sdk/{chrome-B7RdxmJ0.js → chrome-C7c_0I5M.js} +3 -3
  33. package/dist/plugin-sdk/{chunk-Dw2XBYXv.js → chunk-jvk9axTQ.js} +1 -1
  34. package/dist/plugin-sdk/{command-format-GKSevep4.js → command-format-DSdvQ_M5.js} +1 -1
  35. package/dist/plugin-sdk/{commands-registry-COIaslGl.js → commands-registry-CQFbmUMs.js} +4 -4
  36. package/dist/plugin-sdk/{config-KlTNfkFF.js → config-DDkdiUOR.js} +9 -9
  37. package/dist/plugin-sdk/{deliver-BZ99UKQq.js → deliver-BZ6iNLl7.js} +10 -10
  38. package/dist/plugin-sdk/{diagnostic-05pm5Rxi.js → diagnostic-mFf4i4G9.js} +1 -1
  39. package/dist/plugin-sdk/{image-CLOPx7yW.js → image-BOYy0Ump.js} +4 -4
  40. package/dist/plugin-sdk/{image-ops-BlQR__MN.js → image-ops-Bnp6LXEx.js} +1 -1
  41. package/dist/plugin-sdk/index.js +53 -53
  42. package/dist/plugin-sdk/{ir-BJ6BHE5b.js → ir-Fb3qpcis.js} +4 -4
  43. package/dist/plugin-sdk/{local-roots-BHLNSI8U.js → local-roots-Ckk1QfzI.js} +3 -3
  44. package/dist/plugin-sdk/{login-DQMXuxOk.js → login-Bh3DZPam.js} +7 -7
  45. package/dist/plugin-sdk/{login-qr-BjVZSoCi.js → login-qr-DbR7odSr.js} +9 -9
  46. package/dist/plugin-sdk/{manager-CBSBFuFz.js → manager-DckktAQ3.js} +8 -8
  47. package/dist/plugin-sdk/{manifest-registry-CPnHl_K3.js → manifest-registry-B3ugY9-f.js} +1 -1
  48. package/dist/plugin-sdk/{markdown-tables-BoYFajMu.js → markdown-tables-Dfaqilz6.js} +1 -1
  49. package/dist/plugin-sdk/{message-channel-COTAJzHd.js → message-channel-BdI5Ra9S.js} +1 -1
  50. package/dist/plugin-sdk/{model-selection-CsbEfrS0.js → model-selection-OpU8HN50.js} +4 -4
  51. package/dist/plugin-sdk/{outbound-attachment-CnslKL38.js → outbound-attachment-DnVQfTG2.js} +2 -2
  52. package/dist/plugin-sdk/{outbound-B0e8KdaR.js → outbound-rF6G8Xpr.js} +7 -7
  53. package/dist/plugin-sdk/{pi-auth-json-qWi7ZIYV.js → pi-auth-json-CJk8t14T.js} +5 -5
  54. package/dist/plugin-sdk/{pi-embedded-helpers-CW630epe.js → pi-embedded-helpers-BveUP4hk.js} +17 -17
  55. package/dist/plugin-sdk/{plugins-BNByVCIH.js → plugins-BbAvhC25.js} +4 -4
  56. package/dist/plugin-sdk/{pw-ai-CnbPIPY9.js → pw-ai-DjGUsee-.js} +8 -8
  57. package/dist/plugin-sdk/{qmd-manager-CH0XbIHf.js → qmd-manager-mjKcdwVr.js} +4 -4
  58. package/dist/plugin-sdk/{registry-D0xTnUWt.js → registry--_pGht6S.js} +2 -2
  59. package/dist/plugin-sdk/{replies-LLcQL3w6.js → replies-fI39rPGa.js} +3 -3
  60. package/dist/plugin-sdk/{reply-BVs4oalQ.js → reply-CBkEQFTX.js} +78 -78
  61. package/dist/plugin-sdk/{reply-prefix-uxfMZW4p.js → reply-prefix-BHuV5t70.js} +1 -1
  62. package/dist/plugin-sdk/{resolve-outbound-target-BiyAyTWz.js → resolve-outbound-target-BkCUbYGV.js} +2 -2
  63. package/dist/plugin-sdk/{resolve-route-B3CCBumQ.js → resolve-route-D3JH_D2N.js} +3 -3
  64. package/dist/plugin-sdk/{retry-CwQ_iIj8.js → retry-ilSJqnz9.js} +1 -1
  65. package/dist/plugin-sdk/{runner-CGBT7tgF.js → runner-BVqnEfNe.js} +9 -9
  66. package/dist/plugin-sdk/{send-C5h_YxNb.js → send-BHbXh8Ly.js} +7 -7
  67. package/dist/plugin-sdk/{send-pYqe432l.js → send-BMfJIhCk.js} +6 -6
  68. package/dist/plugin-sdk/{send-B2CEnVLL.js → send-BtANzsAo.js} +6 -6
  69. package/dist/plugin-sdk/{send-CjOBB3Vo.js → send-Bxdu6ZZy.js} +10 -10
  70. package/dist/plugin-sdk/{send-CRsR8-vO.js → send-D6LMZJ_h.js} +10 -10
  71. package/dist/plugin-sdk/{session-BsOrxiMj.js → session-kI0tzViQ.js} +4 -4
  72. package/dist/plugin-sdk/{skill-commands-ff_01_r3.js → skill-commands-DCNXVERE.js} +5 -5
  73. package/dist/plugin-sdk/{skills-_yTP47Cd.js → skills-B1GeRYlu.js} +7 -7
  74. package/dist/plugin-sdk/{sqlite-CxAR5ttJ.js → sqlite-Cq_7Cg4E.js} +1 -1
  75. package/dist/plugin-sdk/{store-BdrNabcU.js → store-Do3t33-c.js} +2 -2
  76. package/dist/plugin-sdk/{subsystem-B2uDN3TV.js → subsystem-Coz2AgU8.js} +1 -1
  77. package/dist/plugin-sdk/{tables-DNwXwNFa.js → tables-DR0NmBeH.js} +1 -1
  78. package/dist/plugin-sdk/{target-errors-Paro1BjP.js → target-errors-B7YyMnIi.js} +2 -2
  79. package/dist/plugin-sdk/{thinking-CXqf7WTe.js → thinking-DCNUIAHY.js} +5 -5
  80. package/dist/plugin-sdk/{tokens-bC3UVmVH.js → tokens-CWMflosr.js} +1 -1
  81. package/dist/plugin-sdk/{tool-images-HJ2sfZDV.js → tool-images-D7Lno-TE.js} +2 -2
  82. package/dist/plugin-sdk/{tool-loop-detection-at_K42K7.js → tool-loop-detection-DU5sTIKg.js} +2 -2
  83. package/dist/plugin-sdk/web-CId35Am_.js +65 -0
  84. package/dist/plugin-sdk/{whatsapp-actions-DfseosPO.js → whatsapp-actions-CcBzDuL-.js} +21 -21
  85. package/dist/{pw-ai-De-KR9_s.js → pw-ai-1htA-NnS.js} +1 -1
  86. package/dist/{pw-ai-m0mj2KWK.js → pw-ai-B5asscAD.js} +1 -1
  87. package/dist/{runner-DUBExAb5.js → runner-BcQ0sF9T.js} +1 -1
  88. package/dist/{runner-CU9l0uJh.js → runner-WAG0M5s9.js} +1 -1
  89. package/dist/{unified-runner-Di5Ca6mo.js → unified-runner-Dy2eq7ZO.js} +16 -16
  90. package/dist/{web-BTiGD3po.js → web-8YLJpHFc.js} +6 -6
  91. package/dist/{web-B3oyGSBx.js → web-CP9nUIj0.js} +6 -6
  92. package/extensions/bluebubbles/package.json +1 -1
  93. package/extensions/copilot-proxy/package.json +1 -1
  94. package/extensions/diagnostics-otel/package.json +1 -1
  95. package/extensions/discord/package.json +1 -1
  96. package/extensions/feishu/package.json +1 -1
  97. package/extensions/google-antigravity-auth/package.json +1 -1
  98. package/extensions/google-gemini-cli-auth/package.json +1 -1
  99. package/extensions/googlechat/package.json +1 -1
  100. package/extensions/imessage/package.json +1 -1
  101. package/extensions/irc/package.json +1 -1
  102. package/extensions/learning-loop/package.json +1 -1
  103. package/extensions/line/package.json +1 -1
  104. package/extensions/llm-task/package.json +1 -1
  105. package/extensions/matrix/CHANGELOG.md +6 -0
  106. package/extensions/matrix/package.json +1 -1
  107. package/extensions/mattermost/package.json +1 -1
  108. package/extensions/memory-core/package.json +1 -1
  109. package/extensions/memory-lancedb/package.json +1 -1
  110. package/extensions/minimax-portal-auth/package.json +1 -1
  111. package/extensions/msteams/CHANGELOG.md +6 -0
  112. package/extensions/msteams/package.json +1 -1
  113. package/extensions/nextcloud-talk/package.json +1 -1
  114. package/extensions/nostr/CHANGELOG.md +6 -0
  115. package/extensions/nostr/package.json +1 -1
  116. package/extensions/open-prose/package.json +1 -1
  117. package/extensions/outlook/package.json +1 -1
  118. package/extensions/pipeline/package.json +1 -1
  119. package/extensions/signal/package.json +1 -1
  120. package/extensions/slack/package.json +1 -1
  121. package/extensions/telegram/package.json +1 -1
  122. package/extensions/tlon/package.json +1 -1
  123. package/extensions/twitch/CHANGELOG.md +6 -0
  124. package/extensions/twitch/package.json +1 -1
  125. package/extensions/voice-call/CHANGELOG.md +6 -0
  126. package/extensions/voice-call/package.json +1 -1
  127. package/extensions/whatsapp/package.json +1 -1
  128. package/extensions/zalo/CHANGELOG.md +6 -0
  129. package/extensions/zalo/package.json +1 -1
  130. package/extensions/zalouser/CHANGELOG.md +6 -0
  131. package/extensions/zalouser/package.json +1 -1
  132. package/package.json +1 -1
  133. package/dist/plugin-sdk/web-DiQTcviv.js +0 -65
@@ -12,10 +12,10 @@ import "./accounts-8zZqL37v.js";
12
12
  import "./image-ops-ByaQt43P.js";
13
13
  import "./pi-model-discovery-j5tVLINv.js";
14
14
  import "./message-channel-BQINJQIT.js";
15
- import "./pi-embedded-helpers-lgx_U5KS.js";
15
+ import "./pi-embedded-helpers-B8kqLWns.js";
16
16
  import "./config-BmV60pPT.js";
17
17
  import "./manifest-registry-D-mTF1cj.js";
18
- import "./chrome-CDJYxX5a.js";
18
+ import "./chrome-D2SKJnR7.js";
19
19
  import "./skills-BNpGMnp-.js";
20
20
  import "./redact-1NGYV_8p.js";
21
21
  import "./errors-CPfngF0S.js";
@@ -25,10 +25,10 @@ import "./thinking-W85Rb32m.js";
25
25
  import "./accounts-DImOt9jX.js";
26
26
  import "./paths-DkMamAQ-.js";
27
27
  import "./tool-images-ChC2CXaN.js";
28
- import "./image-CHzdaNJ4.js";
28
+ import "./image-DcpMiprB.js";
29
29
  import "./gemini-auth-CSlZZ1Pw.js";
30
30
  import "./local-roots-CC8jiKDk.js";
31
- import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-DUBExAb5.js";
31
+ import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-BcQ0sF9T.js";
32
32
 
33
33
  //#region src/media-understanding/audio-preflight.ts
34
34
  /**
@@ -8,10 +8,10 @@ import "./auth-profiles-DdK1Hxaa.js";
8
8
  import "./env-BDXYbTKj.js";
9
9
  import "./github-copilot-token-cCYzSU9h.js";
10
10
  import "./boolean-CE7i9tBR.js";
11
- import "./pi-embedded-helpers-CfqDGQ9J.js";
11
+ import "./pi-embedded-helpers-pubKo8HQ.js";
12
12
  import "./config-5SdHIcHU.js";
13
13
  import "./manifest-registry-yb7sAlu4.js";
14
- import "./chrome-DkaXoP36.js";
14
+ import "./chrome-DYZwl5Gv.js";
15
15
  import "./frontmatter-CTR5f_Ez.js";
16
16
  import "./skills-Bs0AW1g3.js";
17
17
  import "./redact-BDMXB06K.js";
@@ -27,11 +27,11 @@ import "./accounts-3dCrO3oZ.js";
27
27
  import "./accounts-BuZxOb3B.js";
28
28
  import "./bindings-BsHoBLIE.js";
29
29
  import "./tool-images-SqqWIT22.js";
30
- import "./image-CuzFLQWC.js";
30
+ import "./image-CXu8W39c.js";
31
31
  import "./pi-model-discovery-Bv5YDJc8.js";
32
32
  import "./gemini-auth-Dy12ZAH3.js";
33
33
  import "./local-roots-DhZz0Ybs.js";
34
- import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-CU9l0uJh.js";
34
+ import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-WAG0M5s9.js";
35
35
 
36
36
  //#region src/media-understanding/audio-preflight.ts
37
37
  /**
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.6.35",
3
- "commit": "ace47bc3a15ad94ac64e4d89650c364288d335b3",
4
- "builtAt": "2026-04-16T23:04:14.025Z"
2
+ "version": "2.6.36",
3
+ "commit": "9f0f53a63d5a1be363a731a539bcf97b7b647b85",
4
+ "builtAt": "2026-04-16T23:15:06.577Z"
5
5
  }
@@ -4,16 +4,16 @@ import { b as isGatewayStartupEvent } from "../../registry-DYq1AYOv.js";
4
4
  import { s as resolveAgentWorkspaceDir, t as listAgentIds } from "../../agent-scope-CpEJ0B88.js";
5
5
  import { r as defaultRuntime, t as createSubsystemLogger } from "../../subsystem-BjyjJF-d.js";
6
6
  import "../../workspace-DscDraUb.js";
7
- import { a as createDefaultDeps, i as agentCommand } from "../../unified-runner-Di5Ca6mo.js";
7
+ import { a as createDefaultDeps, i as agentCommand } from "../../unified-runner-Dy2eq7ZO.js";
8
8
  import { s as resolveStorePath } from "../../paths-CbQV9WEg.js";
9
9
  import "../../auth-profiles-DdK1Hxaa.js";
10
10
  import "../../env-BDXYbTKj.js";
11
11
  import "../../github-copilot-token-cCYzSU9h.js";
12
12
  import "../../boolean-CE7i9tBR.js";
13
- import { H as loadSessionStore, K as updateSessionStore, xt as resolveMainSessionKey, yt as resolveAgentMainSessionKey } from "../../pi-embedded-helpers-CfqDGQ9J.js";
13
+ import { H as loadSessionStore, K as updateSessionStore, xt as resolveMainSessionKey, yt as resolveAgentMainSessionKey } from "../../pi-embedded-helpers-pubKo8HQ.js";
14
14
  import "../../config-5SdHIcHU.js";
15
15
  import "../../manifest-registry-yb7sAlu4.js";
16
- import "../../chrome-DkaXoP36.js";
16
+ import "../../chrome-DYZwl5Gv.js";
17
17
  import "../../frontmatter-CTR5f_Ez.js";
18
18
  import "../../skills-Bs0AW1g3.js";
19
19
  import "../../redact-BDMXB06K.js";
@@ -31,10 +31,10 @@ import "../../bindings-BsHoBLIE.js";
31
31
  import "../../send-CVMyYPQw.js";
32
32
  import "../../send-CvhXrdgS.js";
33
33
  import "../../tool-images-SqqWIT22.js";
34
- import "../../deliver-C46-vyqg.js";
34
+ import "../../deliver-dODxSv3b.js";
35
35
  import "../../diagnostic-rPhsBoZz.js";
36
36
  import "../../diagnostic-session-state-Zw87xFym.js";
37
- import "../../image-CuzFLQWC.js";
37
+ import "../../image-CXu8W39c.js";
38
38
  import { n as SILENT_REPLY_TOKEN } from "../../tokens-Bux9Y_xD.js";
39
39
  import "../../send-DYj_o4_F.js";
40
40
  import "../../pi-model-discovery-Bv5YDJc8.js";
@@ -50,7 +50,7 @@ import "../../local-roots-DhZz0Ybs.js";
50
50
  import "../../ir-CTiz95Vb.js";
51
51
  import "../../render-CDCvpfhh.js";
52
52
  import "../../commands-registry-Bfc7Uz0o.js";
53
- import "../../runner-CU9l0uJh.js";
53
+ import "../../runner-WAG0M5s9.js";
54
54
  import "../../skill-commands-DcVwOafC.js";
55
55
  import "../../fetch-Bso4i15F.js";
56
56
  import "../../channel-activity-B6G1jnQT.js";
@@ -4,16 +4,16 @@ import "../../registry-DYq1AYOv.js";
4
4
  import { s as resolveAgentWorkspaceDir } from "../../agent-scope-CpEJ0B88.js";
5
5
  import { t as createSubsystemLogger } from "../../subsystem-BjyjJF-d.js";
6
6
  import "../../workspace-DscDraUb.js";
7
- import "../../unified-runner-Di5Ca6mo.js";
7
+ import "../../unified-runner-Dy2eq7ZO.js";
8
8
  import "../../paths-CbQV9WEg.js";
9
9
  import "../../auth-profiles-DdK1Hxaa.js";
10
10
  import "../../env-BDXYbTKj.js";
11
11
  import "../../github-copilot-token-cCYzSU9h.js";
12
12
  import "../../boolean-CE7i9tBR.js";
13
- import { ct as hasInterSessionUserProvenance } from "../../pi-embedded-helpers-CfqDGQ9J.js";
13
+ import { ct as hasInterSessionUserProvenance } from "../../pi-embedded-helpers-pubKo8HQ.js";
14
14
  import "../../config-5SdHIcHU.js";
15
15
  import "../../manifest-registry-yb7sAlu4.js";
16
- import "../../chrome-DkaXoP36.js";
16
+ import "../../chrome-DYZwl5Gv.js";
17
17
  import "../../frontmatter-CTR5f_Ez.js";
18
18
  import "../../skills-Bs0AW1g3.js";
19
19
  import "../../redact-BDMXB06K.js";
@@ -31,10 +31,10 @@ import "../../bindings-BsHoBLIE.js";
31
31
  import "../../send-CVMyYPQw.js";
32
32
  import "../../send-CvhXrdgS.js";
33
33
  import "../../tool-images-SqqWIT22.js";
34
- import "../../deliver-C46-vyqg.js";
34
+ import "../../deliver-dODxSv3b.js";
35
35
  import "../../diagnostic-rPhsBoZz.js";
36
36
  import "../../diagnostic-session-state-Zw87xFym.js";
37
- import "../../image-CuzFLQWC.js";
37
+ import "../../image-CXu8W39c.js";
38
38
  import "../../tokens-Bux9Y_xD.js";
39
39
  import "../../send-DYj_o4_F.js";
40
40
  import "../../pi-model-discovery-Bv5YDJc8.js";
@@ -50,7 +50,7 @@ import "../../local-roots-DhZz0Ybs.js";
50
50
  import "../../ir-CTiz95Vb.js";
51
51
  import "../../render-CDCvpfhh.js";
52
52
  import "../../commands-registry-Bfc7Uz0o.js";
53
- import "../../runner-CU9l0uJh.js";
53
+ import "../../runner-WAG0M5s9.js";
54
54
  import "../../skill-commands-DcVwOafC.js";
55
55
  import "../../fetch-Bso4i15F.js";
56
56
  import "../../channel-activity-B6G1jnQT.js";
@@ -1 +1 @@
1
- 96edf5ff2c7c1f9ee2f72b644c1629da8922c673856e252cce5045e5ede21dc0
1
+ 069f2e12db644f2dbd8ce402192d6a6a79eca04d1bc02e3ff08a8fea377f2458
@@ -10,7 +10,7 @@ import fs$1 from "node:fs/promises";
10
10
  import { execFileSync, spawn } from "node:child_process";
11
11
  import net from "node:net";
12
12
  import { createServer } from "node:http";
13
- import WebSocket$1, { WebSocketServer } from "ws";
13
+ import WebSocket, { WebSocketServer } from "ws";
14
14
  import { Buffer as Buffer$1 } from "node:buffer";
15
15
 
16
16
  //#region src/browser/constants.ts
@@ -178,7 +178,7 @@ async function ensureChromeExtensionRelayServer(opts) {
178
178
  let nextExtensionId = 1;
179
179
  const sendToExtension = async (payload) => {
180
180
  const ws = extensionWs;
181
- if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
181
+ if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
182
182
  ws.send(JSON.stringify(payload));
183
183
  return await new Promise((resolve, reject) => {
184
184
  const timer = setTimeout(() => {
@@ -195,12 +195,12 @@ async function ensureChromeExtensionRelayServer(opts) {
195
195
  const broadcastToCdpClients = (evt) => {
196
196
  const msg = JSON.stringify(evt);
197
197
  for (const ws of cdpClients) {
198
- if (ws.readyState !== WebSocket$1.OPEN) continue;
198
+ if (ws.readyState !== WebSocket.OPEN) continue;
199
199
  ws.send(msg);
200
200
  }
201
201
  };
202
202
  const sendResponseToCdp = (ws, res) => {
203
- if (ws.readyState !== WebSocket$1.OPEN) return;
203
+ if (ws.readyState !== WebSocket.OPEN) return;
204
204
  ws.send(JSON.stringify(res));
205
205
  };
206
206
  const ensureTargetEventsForClient = (ws, mode) => {
@@ -425,7 +425,7 @@ async function ensureChromeExtensionRelayServer(opts) {
425
425
  wssExtension.on("connection", (ws) => {
426
426
  extensionWs = ws;
427
427
  const ping = setInterval(() => {
428
- if (ws.readyState !== WebSocket$1.OPEN) return;
428
+ if (ws.readyState !== WebSocket.OPEN) return;
429
429
  ws.send(JSON.stringify({ method: "ping" }));
430
430
  }, 5e3);
431
431
  ws.on("message", (data) => {
@@ -743,7 +743,7 @@ async function fetchOk(url, timeoutMs = 1500, init) {
743
743
  }
744
744
  async function withCdpSocket(wsUrl, fn, opts) {
745
745
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
746
- const ws = new WebSocket$1(wsUrl, {
746
+ const ws = new WebSocket(wsUrl, {
747
747
  handshakeTimeout: typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : 5e3,
748
748
  ...Object.keys(headers).length ? { headers } : {}
749
749
  });
@@ -1637,7 +1637,7 @@ async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
1637
1637
  async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
1638
1638
  return await new Promise((resolve) => {
1639
1639
  const headers = getHeadersWithAuth(wsUrl);
1640
- const ws = new WebSocket$1(wsUrl, {
1640
+ const ws = new WebSocket(wsUrl, {
1641
1641
  handshakeTimeout: timeoutMs,
1642
1642
  ...Object.keys(headers).length ? { headers } : {}
1643
1643
  });
@@ -10,7 +10,7 @@ import fs$1 from "node:fs/promises";
10
10
  import { execFileSync, spawn } from "node:child_process";
11
11
  import net from "node:net";
12
12
  import { createServer } from "node:http";
13
- import WebSocket$1, { WebSocketServer } from "ws";
13
+ import WebSocket, { WebSocketServer } from "ws";
14
14
  import { Buffer as Buffer$1 } from "node:buffer";
15
15
 
16
16
  //#region src/browser/constants.ts
@@ -178,7 +178,7 @@ async function ensureChromeExtensionRelayServer(opts) {
178
178
  let nextExtensionId = 1;
179
179
  const sendToExtension = async (payload) => {
180
180
  const ws = extensionWs;
181
- if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
181
+ if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
182
182
  ws.send(JSON.stringify(payload));
183
183
  return await new Promise((resolve, reject) => {
184
184
  const timer = setTimeout(() => {
@@ -195,12 +195,12 @@ async function ensureChromeExtensionRelayServer(opts) {
195
195
  const broadcastToCdpClients = (evt) => {
196
196
  const msg = JSON.stringify(evt);
197
197
  for (const ws of cdpClients) {
198
- if (ws.readyState !== WebSocket$1.OPEN) continue;
198
+ if (ws.readyState !== WebSocket.OPEN) continue;
199
199
  ws.send(msg);
200
200
  }
201
201
  };
202
202
  const sendResponseToCdp = (ws, res) => {
203
- if (ws.readyState !== WebSocket$1.OPEN) return;
203
+ if (ws.readyState !== WebSocket.OPEN) return;
204
204
  ws.send(JSON.stringify(res));
205
205
  };
206
206
  const ensureTargetEventsForClient = (ws, mode) => {
@@ -425,7 +425,7 @@ async function ensureChromeExtensionRelayServer(opts) {
425
425
  wssExtension.on("connection", (ws) => {
426
426
  extensionWs = ws;
427
427
  const ping = setInterval(() => {
428
- if (ws.readyState !== WebSocket$1.OPEN) return;
428
+ if (ws.readyState !== WebSocket.OPEN) return;
429
429
  ws.send(JSON.stringify({ method: "ping" }));
430
430
  }, 5e3);
431
431
  ws.on("message", (data) => {
@@ -743,7 +743,7 @@ async function fetchOk(url, timeoutMs = 1500, init) {
743
743
  }
744
744
  async function withCdpSocket(wsUrl, fn, opts) {
745
745
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
746
- const ws = new WebSocket$1(wsUrl, {
746
+ const ws = new WebSocket(wsUrl, {
747
747
  handshakeTimeout: typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : 5e3,
748
748
  ...Object.keys(headers).length ? { headers } : {}
749
749
  });
@@ -1637,7 +1637,7 @@ async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
1637
1637
  async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
1638
1638
  return await new Promise((resolve) => {
1639
1639
  const headers = getHeadersWithAuth(wsUrl);
1640
- const ws = new WebSocket$1(wsUrl, {
1640
+ const ws = new WebSocket(wsUrl, {
1641
1641
  handshakeTimeout: timeoutMs,
1642
1642
  ...Object.keys(headers).length ? { headers } : {}
1643
1643
  });
@@ -3448,6 +3448,87 @@ body {
3448
3448
  color: rgba(255, 255, 255, 0.3);
3449
3449
  }
3450
3450
 
3451
+ /* ══════════════════════════════════════════════════════════════════════
3452
+ DATA CARDS — used by generic RPC panels (Overview, Channels, etc.)
3453
+ ══════════════════════════════════════════════════════════════════════ */
3454
+
3455
+ .data-card {
3456
+ border: 1px solid rgba(255, 255, 255, 0.06);
3457
+ border-radius: 8px;
3458
+ margin-bottom: 8px;
3459
+ overflow: hidden;
3460
+ transition: border-color 0.15s;
3461
+ }
3462
+ .data-card:hover {
3463
+ border-color: rgba(255, 255, 255, 0.1);
3464
+ }
3465
+
3466
+ .data-card-header {
3467
+ display: flex;
3468
+ align-items: center;
3469
+ gap: 8px;
3470
+ padding: 10px 14px;
3471
+ background: rgba(255, 255, 255, 0.02);
3472
+ font-family: var(--font-mono);
3473
+ font-size: 12px;
3474
+ font-weight: 600;
3475
+ color: var(--accent-cyan);
3476
+ letter-spacing: 0.03em;
3477
+ }
3478
+
3479
+ .data-card-badge {
3480
+ font-size: 9px;
3481
+ padding: 1px 6px;
3482
+ border-radius: 4px;
3483
+ background: rgba(0, 212, 255, 0.1);
3484
+ border: 1px solid rgba(0, 212, 255, 0.2);
3485
+ color: rgba(0, 212, 255, 0.7);
3486
+ letter-spacing: 0.06em;
3487
+ }
3488
+
3489
+ .data-card-row {
3490
+ display: flex;
3491
+ align-items: baseline;
3492
+ gap: 12px;
3493
+ padding: 5px 14px;
3494
+ font-family: var(--font-mono);
3495
+ font-size: 11px;
3496
+ line-height: 1.6;
3497
+ border-top: 1px solid rgba(255, 255, 255, 0.03);
3498
+ }
3499
+ .data-card-row:first-child {
3500
+ border-top: none;
3501
+ }
3502
+
3503
+ .data-card-label {
3504
+ color: rgba(255, 255, 255, 0.5);
3505
+ flex-shrink: 0;
3506
+ min-width: 100px;
3507
+ max-width: 200px;
3508
+ overflow: hidden;
3509
+ text-overflow: ellipsis;
3510
+ white-space: nowrap;
3511
+ }
3512
+
3513
+ .data-card-value {
3514
+ color: rgba(255, 255, 255, 0.75);
3515
+ word-break: break-all;
3516
+ flex: 1;
3517
+ min-width: 0;
3518
+ }
3519
+
3520
+ .data-card-inline {
3521
+ display: flex;
3522
+ align-items: baseline;
3523
+ gap: 12px;
3524
+ padding: 8px 14px;
3525
+ font-family: var(--font-mono);
3526
+ font-size: 11px;
3527
+ border: 1px solid rgba(255, 255, 255, 0.04);
3528
+ border-radius: 6px;
3529
+ margin-bottom: 4px;
3530
+ }
3531
+
3451
3532
  /* ══════════════════════════════════════════════════════════════════════
3452
3533
  DEBUG PANEL
3453
3534
  ══════════════════════════════════════════════════════════════════════ */
@@ -697,7 +697,7 @@
697
697
  <!-- ── Page Navigation Overlay ──────────────────────────────────── -->
698
698
  <div class="page-overlay" id="page-overlay" aria-hidden="true">
699
699
  <div class="page-overlay-header">
700
- <button class="page-back-btn" id="page-back-btn" title="Back to chat">
700
+ <button class="page-back-btn" id="page-back-btn" title="Back to menu">
701
701
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none">
702
702
  <path
703
703
  d="M19 12H5M5 12l7-7M5 12l7 7"
@@ -707,7 +707,7 @@
707
707
  stroke-linejoin="round"
708
708
  />
709
709
  </svg>
710
- <span>Chat</span>
710
+ <span>Menu</span>
711
711
  </button>
712
712
  <span class="page-overlay-title" id="page-overlay-title"></span>
713
713
  <a
@@ -132,9 +132,11 @@ function onOverlayKey(e) {
132
132
  }
133
133
  }
134
134
 
135
- document
136
- .querySelector("body > .page-overlay #page-back-btn")
137
- ?.addEventListener("click", closePageOverlay);
135
+ document.querySelector("body > .page-overlay #page-back-btn")?.addEventListener("click", () => {
136
+ // Go back to the menu instead of closing everything
137
+ closePageOverlay();
138
+ openMenu();
139
+ });
138
140
 
139
141
  // ── Item routing ──────────────────────────────────────────────────────────────
140
142
  // Page display names (mapped from the menu item text)
@@ -153,13 +155,38 @@ const PAGE_NAMES = {
153
155
  "/logs": "Logs",
154
156
  };
155
157
 
156
- // Settings pages rendered natively (no iframe)
157
- const NATIVE_SETTINGS = {
158
+ // All internal pages rendered natively (no iframe)
159
+ const NATIVE_PAGES = {
160
+ "/overview": "overview",
161
+ "/channels": "channels",
162
+ "/instances": "instances",
163
+ "/sessions": "sessions",
164
+ "/usage": "usage",
165
+ "/cron": "cron",
166
+ "/agents": "agents",
167
+ "/skills": "skills",
168
+ "/nodes": "nodes",
158
169
  "/config": "config",
159
170
  "/debug": "debug",
160
171
  "/logs": "logs",
161
172
  };
162
173
 
174
+ function openNativePage(pageName, pageKey) {
175
+ if (window.closeNativeSettings) {
176
+ window.closeNativeSettings();
177
+ }
178
+ getPageTitle().textContent = pageName.toUpperCase();
179
+ getPagePopoutBtn().style.display = "none";
180
+ getPageFrame().style.display = "none";
181
+ overlayIsOpen = true;
182
+ getPageOverlay().classList.add("open");
183
+ getPageOverlay().setAttribute("aria-hidden", "false");
184
+ document.addEventListener("keydown", onOverlayKey);
185
+ if (window.openNativeSettings) {
186
+ window.openNativeSettings(pageKey);
187
+ }
188
+ }
189
+
163
190
  document.querySelectorAll(".cmd-item[data-href]").forEach((item) => {
164
191
  item.addEventListener("click", (e) => {
165
192
  e.preventDefault();
@@ -167,7 +194,6 @@ document.querySelectorAll(".cmd-item[data-href]").forEach((item) => {
167
194
 
168
195
  if (href === "#chat") {
169
196
  closeMenu();
170
- // Close native settings if open
171
197
  if (window.closeNativeSettings) {
172
198
  window.closeNativeSettings();
173
199
  }
@@ -175,41 +201,23 @@ document.querySelectorAll(".cmd-item[data-href]").forEach((item) => {
175
201
  return;
176
202
  }
177
203
 
178
- // Check if this is a native settings page
204
+ // Internal pages rendered natively
179
205
  if (href.includes("127.0.0.1:18789")) {
180
206
  let pathname = "/";
181
207
  try {
182
208
  pathname = new URL(href).pathname;
183
209
  } catch {}
184
210
 
185
- const nativePage = NATIVE_SETTINGS[pathname];
186
- if (nativePage && window.openNativeSettings) {
187
- const pageName = PAGE_NAMES[pathname] ?? "Settings";
211
+ const pageKey = NATIVE_PAGES[pathname];
212
+ if (pageKey) {
213
+ const pageName = PAGE_NAMES[pathname] ?? "Page";
188
214
  closeMenu();
189
- // Use the page overlay shell (header with back/title) but native content
190
- getPageTitle().textContent = pageName.toUpperCase();
191
- getPagePopoutBtn().style.display = "none";
192
- getPageFrame().style.display = "none";
193
- overlayIsOpen = true;
194
- getPageOverlay().classList.add("open");
195
- getPageOverlay().setAttribute("aria-hidden", "false");
196
- document.addEventListener("keydown", onOverlayKey);
197
- window.openNativeSettings(nativePage);
215
+ openNativePage(pageName, pageKey);
198
216
  return;
199
217
  }
200
-
201
- // Other standard UI pages → open in the page overlay iframe
202
- let pageName = item.querySelector(".cmd-item-name")?.textContent ?? "Page";
203
- try {
204
- const parsed = new URL(href);
205
- pageName = PAGE_NAMES[parsed.pathname] ?? pageName;
206
- } catch {}
207
- closeMenu();
208
- openPageOverlay(pageName, href);
209
- return;
210
218
  }
211
219
 
212
- // Fallback: external links still open in new tab
220
+ // External links open in new tab
213
221
  window.open(href, "_blank", "noopener");
214
222
  closeMenu();
215
223
  });