@symerian/symi 2.2.5 → 2.2.7

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 (92) hide show
  1. package/dist/{audio-preflight-Cv9Z1hfd.js → audio-preflight-BGSBr_SJ.js} +4 -4
  2. package/dist/{audio-preflight-BsS_1f9-.js → audio-preflight-CJ3sqM3d.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-Bf5N4gMh.js → chrome-BM8V9EPM.js} +7 -7
  8. package/dist/{chrome-CQNK4Of4.js → chrome-Bs9dOXhy.js} +7 -7
  9. package/dist/control-ui/js/app.js +26 -2
  10. package/dist/control-ui/js/models.js +1 -1
  11. package/dist/control-ui/js/symipulse.js +12 -2
  12. package/dist/{deliver-CeOnWRNZ.js → deliver-Bs6SHLMp.js} +1 -1
  13. package/dist/{deliver-CBVqE05W.js → deliver-Dh5uiYS8.js} +1 -1
  14. package/dist/extensionAPI.js +6 -6
  15. package/dist/{image-Crdjqg8r.js → image-CjO1LLbc.js} +1 -1
  16. package/dist/{image-CAUuNGNO.js → image-CkMDI3pp.js} +1 -1
  17. package/dist/llm-slug-generator.js +6 -6
  18. package/dist/{pi-embedded-C4Cb6hc3.js → pi-embedded-BBROwjX_.js} +16 -16
  19. package/dist/{pi-embedded-Cd7Gd0Am.js → pi-embedded-BkhyOzCD.js} +16 -16
  20. package/dist/{pi-embedded-helpers-B86ZS0eB.js → pi-embedded-helpers-D-cALDuy.js} +4 -4
  21. package/dist/{pi-embedded-helpers-xjO9noTy.js → pi-embedded-helpers-D3O-Jz_G.js} +4 -4
  22. package/dist/plugin-sdk/{accounts-BToL3HlP.js → accounts-BtaOa4z_.js} +1 -1
  23. package/dist/plugin-sdk/{accounts-D9zGZU5t.js → accounts-Ddm33hQm.js} +3 -3
  24. package/dist/plugin-sdk/{accounts-Dtszw3Zn.js → accounts-s-AdhXVR.js} +1 -1
  25. package/dist/plugin-sdk/{active-listener-bEk__wbB.js → active-listener-BXYeALs0.js} +1 -1
  26. package/dist/plugin-sdk/{agent-scope-C3gMMKCU.js → agent-scope-CYYpcO9W.js} +2 -2
  27. package/dist/plugin-sdk/{api-key-rotation-CVBMpnPc.js → api-key-rotation-D_sMvI5W.js} +1 -1
  28. package/dist/plugin-sdk/{audio-preflight-B8X7BvQ5.js → audio-preflight-B53bNKrw.js} +24 -24
  29. package/dist/plugin-sdk/{bindings-BbwoUGPx.js → bindings-C7hRtgYW.js} +2 -2
  30. package/dist/plugin-sdk/{channel-activity-Ji7f0gqq.js → channel-activity-DoC1xtDu.js} +1 -1
  31. package/dist/plugin-sdk/{channel-web-B92UQWLf.js → channel-web-Cx9302Dk.js} +22 -22
  32. package/dist/plugin-sdk/{chrome-DxJPopF7.js → chrome-CvwTnajj.js} +3 -3
  33. package/dist/plugin-sdk/{chunk-jvk9axTQ.js → chunk-Dw2XBYXv.js} +1 -1
  34. package/dist/plugin-sdk/{command-format-DSdvQ_M5.js → command-format-GKSevep4.js} +1 -1
  35. package/dist/plugin-sdk/{commands-registry-CQFbmUMs.js → commands-registry-COIaslGl.js} +4 -4
  36. package/dist/plugin-sdk/{config-B0SemGqU.js → config-BupHDD8z.js} +9 -9
  37. package/dist/plugin-sdk/{deliver-C51eaClJ.js → deliver-BHhsDn1r.js} +10 -10
  38. package/dist/plugin-sdk/{diagnostic-mFf4i4G9.js → diagnostic-05pm5Rxi.js} +1 -1
  39. package/dist/plugin-sdk/{image-VGrV0d09.js → image-C7McqLZm.js} +4 -4
  40. package/dist/plugin-sdk/{image-ops-Bnp6LXEx.js → image-ops-BlQR__MN.js} +1 -1
  41. package/dist/plugin-sdk/index.js +53 -53
  42. package/dist/plugin-sdk/{ir-Fb3qpcis.js → ir-BJ6BHE5b.js} +4 -4
  43. package/dist/plugin-sdk/{local-roots-Ckk1QfzI.js → local-roots-BHLNSI8U.js} +3 -3
  44. package/dist/plugin-sdk/{login-CG8p5_rW.js → login-7FUJ7gj1.js} +7 -7
  45. package/dist/plugin-sdk/{login-qr-buvA9Dp8.js → login-qr-G2RFuX25.js} +9 -9
  46. package/dist/plugin-sdk/{manager-DckktAQ3.js → manager-CBSBFuFz.js} +8 -8
  47. package/dist/plugin-sdk/{manifest-registry-B3ugY9-f.js → manifest-registry-CPnHl_K3.js} +1 -1
  48. package/dist/plugin-sdk/{markdown-tables-Dfaqilz6.js → markdown-tables-BoYFajMu.js} +1 -1
  49. package/dist/plugin-sdk/{message-channel-BdI5Ra9S.js → message-channel-COTAJzHd.js} +1 -1
  50. package/dist/plugin-sdk/{model-selection-OpU8HN50.js → model-selection-CsbEfrS0.js} +4 -4
  51. package/dist/plugin-sdk/{outbound-LqNDFLO5.js → outbound-DfTlVLe_.js} +7 -7
  52. package/dist/plugin-sdk/{outbound-attachment-DnVQfTG2.js → outbound-attachment-CnslKL38.js} +2 -2
  53. package/dist/plugin-sdk/{pi-auth-json-CJk8t14T.js → pi-auth-json-qWi7ZIYV.js} +5 -5
  54. package/dist/plugin-sdk/{pi-embedded-helpers-IkpqVZZa.js → pi-embedded-helpers-D2_EUlJS.js} +17 -17
  55. package/dist/plugin-sdk/{plugins-BbAvhC25.js → plugins-BNByVCIH.js} +4 -4
  56. package/dist/plugin-sdk/{pw-ai-CjPImm6b.js → pw-ai-by2V6Ut8.js} +8 -8
  57. package/dist/plugin-sdk/{qmd-manager-mjKcdwVr.js → qmd-manager-CH0XbIHf.js} +4 -4
  58. package/dist/plugin-sdk/{registry--_pGht6S.js → registry-D0xTnUWt.js} +2 -2
  59. package/dist/plugin-sdk/{replies-BLMuwbVf.js → replies-BvLLzNir.js} +3 -3
  60. package/dist/plugin-sdk/{reply-BS99Apig.js → reply-lfLLqWY9.js} +78 -78
  61. package/dist/plugin-sdk/{reply-prefix-BHuV5t70.js → reply-prefix-uxfMZW4p.js} +1 -1
  62. package/dist/plugin-sdk/{resolve-outbound-target-BkCUbYGV.js → resolve-outbound-target-BiyAyTWz.js} +2 -2
  63. package/dist/plugin-sdk/{resolve-route-D3JH_D2N.js → resolve-route-B3CCBumQ.js} +3 -3
  64. package/dist/plugin-sdk/{retry-ilSJqnz9.js → retry-CwQ_iIj8.js} +1 -1
  65. package/dist/plugin-sdk/{runner-pmvwohi9.js → runner-HhqOfrxW.js} +9 -9
  66. package/dist/plugin-sdk/{send-BinD92v_.js → send-4K8N4DJb.js} +6 -6
  67. package/dist/plugin-sdk/{send-cUp3Bf9t.js → send-B5j6WgU6.js} +10 -10
  68. package/dist/plugin-sdk/{send-D8Zs62CE.js → send-CsZXZn6y.js} +7 -7
  69. package/dist/plugin-sdk/{send-BOrHNGsc.js → send-Dth3Wlbs.js} +10 -10
  70. package/dist/plugin-sdk/{send-DOXV-BQw.js → send-K99kT96d.js} +6 -6
  71. package/dist/plugin-sdk/{session-B0bWB4Wf.js → session-60vHZ7w3.js} +4 -4
  72. package/dist/plugin-sdk/{skill-commands-DCNXVERE.js → skill-commands-ff_01_r3.js} +5 -5
  73. package/dist/plugin-sdk/{skills-B1GeRYlu.js → skills-_yTP47Cd.js} +7 -7
  74. package/dist/plugin-sdk/{sqlite-Cq_7Cg4E.js → sqlite-CxAR5ttJ.js} +1 -1
  75. package/dist/plugin-sdk/{store-Do3t33-c.js → store-BdrNabcU.js} +2 -2
  76. package/dist/plugin-sdk/{subsystem-Coz2AgU8.js → subsystem-B2uDN3TV.js} +1 -1
  77. package/dist/plugin-sdk/{tables-DR0NmBeH.js → tables-DNwXwNFa.js} +1 -1
  78. package/dist/plugin-sdk/{target-errors-B7YyMnIi.js → target-errors-Paro1BjP.js} +2 -2
  79. package/dist/plugin-sdk/{thinking-DCNUIAHY.js → thinking-CXqf7WTe.js} +5 -5
  80. package/dist/plugin-sdk/{tokens-CWMflosr.js → tokens-bC3UVmVH.js} +1 -1
  81. package/dist/plugin-sdk/{tool-images-D7Lno-TE.js → tool-images-HJ2sfZDV.js} +2 -2
  82. package/dist/plugin-sdk/{tool-loop-detection-edmW8ZiF.js → tool-loop-detection-BVA6fax-.js} +2 -2
  83. package/dist/plugin-sdk/web-Z0l0SqtM.js +65 -0
  84. package/dist/plugin-sdk/{whatsapp-actions-Bp33E4JW.js → whatsapp-actions-DEKP4eXk.js} +21 -21
  85. package/dist/{pw-ai-BcniFyZm.js → pw-ai-Bea6vnxP.js} +1 -1
  86. package/dist/{pw-ai-C2hGnRfL.js → pw-ai-U9oqOgyv.js} +1 -1
  87. package/dist/{runner-M7hSmkG1.js → runner-DDAa40wm.js} +1 -1
  88. package/dist/{runner-DFFbD4Jj.js → runner-kv4GI5eX.js} +1 -1
  89. package/dist/{web-0w8t_r2B.js → web-Ck_rAgaX.js} +6 -6
  90. package/dist/{web-UEqiaso9.js → web-CwQfVHEO.js} +6 -6
  91. package/package.json +1 -1
  92. package/dist/plugin-sdk/web-CF79DBe3.js +0 -65
@@ -14,10 +14,10 @@ import "./model-auth-DK43VicI.js";
14
14
  import "./github-copilot-token-C_qUP7p5.js";
15
15
  import "./pi-model-discovery-DaNAekda.js";
16
16
  import "./message-channel-Dz5lr5b0.js";
17
- import "./pi-embedded-helpers-B86ZS0eB.js";
17
+ import "./pi-embedded-helpers-D-cALDuy.js";
18
18
  import "./config-CT6a99bQ.js";
19
19
  import "./manifest-registry-D0IQ3WuX.js";
20
- import "./chrome-CQNK4Of4.js";
20
+ import "./chrome-Bs9dOXhy.js";
21
21
  import "./frontmatter-C_bv_0P8.js";
22
22
  import "./skills-BFekKL7i.js";
23
23
  import "./redact-jSxx6Ep2.js";
@@ -28,10 +28,10 @@ import "./thinking-CdlENGRW.js";
28
28
  import "./accounts-qtxJ-6em.js";
29
29
  import "./paths-DLyHUt31.js";
30
30
  import "./tool-images-DXB7tqWi.js";
31
- import "./image-CAUuNGNO.js";
31
+ import "./image-CkMDI3pp.js";
32
32
  import "./gemini-auth-CdSPHuLl.js";
33
33
  import "./local-roots-DMwIh5cS.js";
34
- import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-M7hSmkG1.js";
34
+ import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-DDAa40wm.js";
35
35
 
36
36
  //#region src/media-understanding/audio-preflight.ts
37
37
  /**
@@ -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-xjO9noTy.js";
15
+ import "./pi-embedded-helpers-D3O-Jz_G.js";
16
16
  import "./config-Btm9gODl.js";
17
17
  import "./manifest-registry-D-mTF1cj.js";
18
- import "./chrome-Bf5N4gMh.js";
18
+ import "./chrome-BM8V9EPM.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-Crdjqg8r.js";
28
+ import "./image-CjO1LLbc.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-DFFbD4Jj.js";
31
+ import { a as resolveMediaAttachmentLocalRoots, n as createMediaAttachmentCache, o as runCapability, r as normalizeMediaAttachments, t as buildProviderRegistry, u as isAudioAttachment } from "./runner-kv4GI5eX.js";
32
32
 
33
33
  //#region src/media-understanding/audio-preflight.ts
34
34
  /**
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.2.5",
3
- "commit": "de4ac563701e1ed1e62516977c8717714dfb4cbc",
4
- "builtAt": "2026-04-09T18:06:28.332Z"
2
+ "version": "2.2.7",
3
+ "commit": "9078105fe602ea2cd2a711af4efa9db14228f80d",
4
+ "builtAt": "2026-04-10T20:06:29.862Z"
5
5
  }
@@ -5,7 +5,7 @@ import { s as resolveAgentWorkspaceDir, t as listAgentIds } from "../../agent-sc
5
5
  import { r as defaultRuntime, t as createSubsystemLogger } from "../../subsystem-Bs9YvKLa.js";
6
6
  import "../../workspace-wAaHI8-5.js";
7
7
  import { n as SILENT_REPLY_TOKEN } from "../../tokens-H1H1LiSQ.js";
8
- import { a as createDefaultDeps, i as agentCommand } from "../../pi-embedded-C4Cb6hc3.js";
8
+ import { a as createDefaultDeps, i as agentCommand } from "../../pi-embedded-BBROwjX_.js";
9
9
  import "../../plugins-DQYI3Fr-.js";
10
10
  import "../../accounts-tNElYrCH.js";
11
11
  import "../../boolean-B8-BqKGQ.js";
@@ -13,7 +13,7 @@ import "../../command-format-BaxDnULz.js";
13
13
  import "../../bindings-B7Ke6LJi.js";
14
14
  import "../../send-Z6uznj5j.js";
15
15
  import "../../send-Dp3_Z9LN.js";
16
- import "../../deliver-CeOnWRNZ.js";
16
+ import "../../deliver-Bs6SHLMp.js";
17
17
  import "../../diagnostic-CI0kRQkt.js";
18
18
  import "../../diagnostic-session-state-Bxo4UHOL.js";
19
19
  import "../../accounts-CWktKM8a.js";
@@ -23,10 +23,10 @@ import "../../model-auth-DK43VicI.js";
23
23
  import "../../github-copilot-token-C_qUP7p5.js";
24
24
  import "../../pi-model-discovery-DaNAekda.js";
25
25
  import "../../message-channel-Dz5lr5b0.js";
26
- import { H as loadSessionStore, K as updateSessionStore, xt as resolveMainSessionKey, yt as resolveAgentMainSessionKey } from "../../pi-embedded-helpers-B86ZS0eB.js";
26
+ import { H as loadSessionStore, K as updateSessionStore, xt as resolveMainSessionKey, yt as resolveAgentMainSessionKey } from "../../pi-embedded-helpers-D-cALDuy.js";
27
27
  import "../../config-CT6a99bQ.js";
28
28
  import "../../manifest-registry-D0IQ3WuX.js";
29
- import "../../chrome-CQNK4Of4.js";
29
+ import "../../chrome-Bs9dOXhy.js";
30
30
  import "../../frontmatter-C_bv_0P8.js";
31
31
  import "../../skills-BFekKL7i.js";
32
32
  import "../../redact-jSxx6Ep2.js";
@@ -37,7 +37,7 @@ import "../../thinking-CdlENGRW.js";
37
37
  import "../../accounts-qtxJ-6em.js";
38
38
  import { s as resolveStorePath } from "../../paths-DLyHUt31.js";
39
39
  import "../../tool-images-DXB7tqWi.js";
40
- import "../../image-CAUuNGNO.js";
40
+ import "../../image-CkMDI3pp.js";
41
41
  import "../../reply-prefix-XlyuyChD.js";
42
42
  import "../../manager-D_LwXbc6.js";
43
43
  import "../../gemini-auth-CdSPHuLl.js";
@@ -51,7 +51,7 @@ import "../../ir-DccrnjsE.js";
51
51
  import "../../render-CDCvpfhh.js";
52
52
  import "../../commands-registry-D7CTCQPm.js";
53
53
  import "../../skill-commands-BJMb_psG.js";
54
- import "../../runner-M7hSmkG1.js";
54
+ import "../../runner-DDAa40wm.js";
55
55
  import "../../fetch-Bso4i15F.js";
56
56
  import "../../channel-activity-CsM_hJ_s.js";
57
57
  import "../../tables-DuZspiBu.js";
@@ -5,7 +5,7 @@ import { s as resolveAgentWorkspaceDir } from "../../agent-scope-BxoUQqgM.js";
5
5
  import { t as createSubsystemLogger } from "../../subsystem-Bs9YvKLa.js";
6
6
  import "../../workspace-wAaHI8-5.js";
7
7
  import "../../tokens-H1H1LiSQ.js";
8
- import "../../pi-embedded-C4Cb6hc3.js";
8
+ import "../../pi-embedded-BBROwjX_.js";
9
9
  import "../../plugins-DQYI3Fr-.js";
10
10
  import "../../accounts-tNElYrCH.js";
11
11
  import "../../boolean-B8-BqKGQ.js";
@@ -13,7 +13,7 @@ import "../../command-format-BaxDnULz.js";
13
13
  import "../../bindings-B7Ke6LJi.js";
14
14
  import "../../send-Z6uznj5j.js";
15
15
  import "../../send-Dp3_Z9LN.js";
16
- import "../../deliver-CeOnWRNZ.js";
16
+ import "../../deliver-Bs6SHLMp.js";
17
17
  import "../../diagnostic-CI0kRQkt.js";
18
18
  import "../../diagnostic-session-state-Bxo4UHOL.js";
19
19
  import "../../accounts-CWktKM8a.js";
@@ -23,10 +23,10 @@ import "../../model-auth-DK43VicI.js";
23
23
  import "../../github-copilot-token-C_qUP7p5.js";
24
24
  import "../../pi-model-discovery-DaNAekda.js";
25
25
  import "../../message-channel-Dz5lr5b0.js";
26
- import { ct as hasInterSessionUserProvenance } from "../../pi-embedded-helpers-B86ZS0eB.js";
26
+ import { ct as hasInterSessionUserProvenance } from "../../pi-embedded-helpers-D-cALDuy.js";
27
27
  import "../../config-CT6a99bQ.js";
28
28
  import "../../manifest-registry-D0IQ3WuX.js";
29
- import "../../chrome-CQNK4Of4.js";
29
+ import "../../chrome-Bs9dOXhy.js";
30
30
  import "../../frontmatter-C_bv_0P8.js";
31
31
  import "../../skills-BFekKL7i.js";
32
32
  import "../../redact-jSxx6Ep2.js";
@@ -37,7 +37,7 @@ import "../../thinking-CdlENGRW.js";
37
37
  import "../../accounts-qtxJ-6em.js";
38
38
  import "../../paths-DLyHUt31.js";
39
39
  import "../../tool-images-DXB7tqWi.js";
40
- import "../../image-CAUuNGNO.js";
40
+ import "../../image-CkMDI3pp.js";
41
41
  import "../../reply-prefix-XlyuyChD.js";
42
42
  import "../../manager-D_LwXbc6.js";
43
43
  import "../../gemini-auth-CdSPHuLl.js";
@@ -51,7 +51,7 @@ import "../../ir-DccrnjsE.js";
51
51
  import "../../render-CDCvpfhh.js";
52
52
  import "../../commands-registry-D7CTCQPm.js";
53
53
  import "../../skill-commands-BJMb_psG.js";
54
- import "../../runner-M7hSmkG1.js";
54
+ import "../../runner-DDAa40wm.js";
55
55
  import "../../fetch-Bso4i15F.js";
56
56
  import "../../channel-activity-CsM_hJ_s.js";
57
57
  import "../../tables-DuZspiBu.js";
@@ -1 +1 @@
1
- d985e199d3c9f3fdab75ee69b73f7ef214fe298ce090b429dd325f2499a519ae
1
+ 889a039ba8a6ee54104b6a256c0df2d65f36d4bffca9428191f3f39ffb7861a2
@@ -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, { WebSocketServer } from "ws";
13
+ import WebSocket$1, { WebSocketServer } from "ws";
14
14
  import { Buffer as Buffer$1 } from "node:buffer";
15
15
 
16
16
  //#region src/browser/constants.ts
@@ -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.OPEN) throw new Error("Chrome extension not connected");
181
+ if (!ws || ws.readyState !== WebSocket$1.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.OPEN) continue;
198
+ if (ws.readyState !== WebSocket$1.OPEN) continue;
199
199
  ws.send(msg);
200
200
  }
201
201
  };
202
202
  const sendResponseToCdp = (ws, res) => {
203
- if (ws.readyState !== WebSocket.OPEN) return;
203
+ if (ws.readyState !== WebSocket$1.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.OPEN) return;
428
+ if (ws.readyState !== WebSocket$1.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(wsUrl, {
746
+ const ws = new WebSocket$1(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(wsUrl, {
1640
+ const ws = new WebSocket$1(wsUrl, {
1641
1641
  handshakeTimeout: timeoutMs,
1642
1642
  ...Object.keys(headers).length ? { headers } : {}
1643
1643
  });
@@ -10,7 +10,7 @@ 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";
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
  });
@@ -572,8 +572,14 @@ function handleGatewayEvent(event) {
572
572
  window.updateLiveThinking(thinkingText);
573
573
  }
574
574
  } else if (p.state === "final") {
575
- // Route heartbeat/symipulse finals to dedicated panel
576
- if (p.isHeartbeat) {
575
+ // Route heartbeat/symipulse finals to dedicated panel.
576
+ // Check server flag first, then fall back to regex classifier for
577
+ // edge cases where the flag is missing (e.g. older gateway versions).
578
+ const finalMsg = p.message?.content ? p.message : { role: "assistant", content: p.message };
579
+ if (
580
+ p.isHeartbeat ||
581
+ (typeof window.isSymipulseMessage === "function" && window.isSymipulseMessage(finalMsg))
582
+ ) {
577
583
  const text = extractText(p.message?.content ?? p.message);
578
584
  if (text && typeof window.appendToSymipulsePanel === "function") {
579
585
  window.appendToSymipulsePanel(text, Date.now());
@@ -581,6 +587,16 @@ function handleGatewayEvent(event) {
581
587
  if (typeof window.setSymipulseLiveDot === "function") {
582
588
  window.setSymipulseLiveDot(false);
583
589
  }
590
+ // Clean up any stream bubble that was opened before detection
591
+ if (streamBubble) {
592
+ streamBubble.closest(".message")?.remove();
593
+ streamBubble = null;
594
+ streamContent = null;
595
+ }
596
+ if (thinkingEl) {
597
+ thinkingEl.remove();
598
+ thinkingEl = null;
599
+ }
584
600
  return;
585
601
  }
586
602
 
@@ -598,6 +614,10 @@ function handleGatewayEvent(event) {
598
614
  enableInput();
599
615
  drainQueue();
600
616
  } else if (p.state === "aborted") {
617
+ // Silently ignore heartbeat aborts — don't touch user-run state
618
+ if (p.isHeartbeat) {
619
+ return;
620
+ }
601
621
  // Clean abort (user-initiated or model decided to stop) — not an error
602
622
  stopElapsedTimer();
603
623
  clearWatchdog();
@@ -619,6 +639,10 @@ function handleGatewayEvent(event) {
619
639
  enableInput();
620
640
  drainQueue();
621
641
  } else if (p.state === "error") {
642
+ // Silently ignore heartbeat errors — don't inject error bubbles for background runs
643
+ if (p.isHeartbeat) {
644
+ return;
645
+ }
622
646
  // Server-reported error — route through unified failure handler
623
647
  handleRunFailure(p.error?.message || "Server reported an error");
624
648
  }
@@ -4,7 +4,7 @@
4
4
  (function () {
5
5
  const MODELS = {
6
6
  local: "ollama/gemma4:31b-128k",
7
- redsand: "redsand/nemotron-3-super-120b",
7
+ redsand: "redsand/gemma-4-31b",
8
8
  api: "anthropic/claude-sonnet-4-6",
9
9
  };
10
10
 
@@ -41,13 +41,23 @@ window.isSymipulseMessage = function (message) {
41
41
  if (/^\s*NO_REPLY\s*$/i.test(txt)) {
42
42
  return true;
43
43
  }
44
- if (/^⚠️.*(heartbeat|Agent failed before reply)/i.test(txt)) {
44
+ // Health warnings broadened to catch ⚠️ with health-check keywords
45
+ if (/^⚠️.*(heartbeat|Agent failed before reply|unreachable|HTTP:\d{3})/i.test(txt)) {
46
+ return true;
47
+ }
48
+ // [quiet window] prefix — heartbeat output during idle periods
49
+ if (/^\[quiet window\]/i.test(txt)) {
50
+ return true;
51
+ }
52
+ // Health log references — "Logged to YYYY-MM-DD.md"
53
+ if (/Logged to \d{4}-\d{2}-\d{2}\.md/i.test(txt)) {
45
54
  return true;
46
55
  }
47
56
  }
48
57
 
49
58
  if (role === "user") {
50
- if (/^Read SYMIPULSE\.md/i.test(txt) || /SYMIPULSE_OK/i.test(txt)) {
59
+ // Removed ^ anchor — plugin context preamble may precede "Read SYMIPULSE.md"
60
+ if (/Read SYMIPULSE\.md/i.test(txt) || /SYMIPULSE_OK/i.test(txt)) {
51
61
  return true;
52
62
  }
53
63
  }
@@ -5,7 +5,7 @@ import { c as getActivePluginRegistry, v as createInternalHookEvent, x as trigge
5
5
  import { t as createSubsystemLogger } from "./subsystem-Bs9YvKLa.js";
6
6
  import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-H1H1LiSQ.js";
7
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-B86ZS0eB.js";
8
+ import { B as resolveMirroredTranscriptText, i as isMessagingToolDuplicate, z as appendAssistantMessageToSessionTranscript } from "./pi-embedded-helpers-D-cALDuy.js";
9
9
  import { d as getChannelDock } from "./thinking-CdlENGRW.js";
10
10
  import { c as resolveChunkMode, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, n as chunkByParagraph } from "./chunk-BW5f05BR.js";
11
11
  import { n as resolveMarkdownTableMode } from "./markdown-tables-iMQQZu4Q.js";
@@ -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-xjO9noTy.js";
8
+ import { B as resolveMirroredTranscriptText, i as isMessagingToolDuplicate, z as appendAssistantMessageToSessionTranscript } from "./pi-embedded-helpers-D3O-Jz_G.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";
@@ -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, t as runEmbeddedPiAgent } from "./pi-embedded-Cd7Gd0Am.js";
10
+ import { D as resolveAgentTimeoutMs, t as runEmbeddedPiAgent } from "./pi-embedded-BkhyOzCD.js";
11
11
  import "./plugins-71oIavrF.js";
12
12
  import "./accounts-DDEyGwby.js";
13
13
  import "./bindings-DYVakimr.js";
14
14
  import "./send-DoiQ-lVY.js";
15
15
  import "./send-C1DE47RQ.js";
16
- import "./deliver-CBVqE05W.js";
16
+ import "./deliver-Dh5uiYS8.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-CdxBNofn.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-xjO9noTy.js";
24
+ import { G as saveSessionStore, H as loadSessionStore } from "./pi-embedded-helpers-D3O-Jz_G.js";
25
25
  import "./config-Btm9gODl.js";
26
26
  import "./manifest-registry-D-mTF1cj.js";
27
- import "./chrome-Bf5N4gMh.js";
27
+ import "./chrome-BM8V9EPM.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-Crdjqg8r.js";
37
+ import "./image-CjO1LLbc.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-DFFbD4Jj.js";
50
+ import "./runner-kv4GI5eX.js";
51
51
  import "./fetch-DtLn7YU3.js";
52
52
  import "./channel-activity-D9q-fIPB.js";
53
53
  import "./tables-COnZ169v.js";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { D as isRecord, I as shortenHomeInString } from "./registry-BhoUuugi.js";
3
3
  import { G as resolveSymiAgentDir, S as getApiKeyForModel, Y as normalizeSecretInput, _ as resolveImplicitBedrockProvider, g as normalizeProviders, v as resolveImplicitCopilotProvider, w as requireApiKey, y as resolveImplicitProviders } from "./model-selection-BQCG9ah0.js";
4
4
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-j5tVLINv.js";
5
- import { N as sanitizeUserFacingText } from "./pi-embedded-helpers-xjO9noTy.js";
5
+ import { N as sanitizeUserFacingText } from "./pi-embedded-helpers-D3O-Jz_G.js";
6
6
  import { n as loadConfig } from "./config-Btm9gODl.js";
7
7
  import { n as redactToolDetail } from "./redact-1NGYV_8p.js";
8
8
  import path from "node:path";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { R as shortenHomeInString, k as isRecord } from "./registry-CK4e9hn8.js";
3
3
  import { B as resolveImplicitCopilotProvider, J as normalizeSecretInput, R as normalizeProviders, V as resolveImplicitProviders, r as requireApiKey, t as getApiKeyForModel, y as resolveSymiAgentDir, z as resolveImplicitBedrockProvider } from "./model-auth-DK43VicI.js";
4
4
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-DaNAekda.js";
5
- import { N as sanitizeUserFacingText } from "./pi-embedded-helpers-B86ZS0eB.js";
5
+ import { N as sanitizeUserFacingText } from "./pi-embedded-helpers-D-cALDuy.js";
6
6
  import { n as loadConfig } from "./config-CT6a99bQ.js";
7
7
  import { n as redactToolDetail } from "./redact-jSxx6Ep2.js";
8
8
  import fs from "node:fs/promises";
@@ -4,7 +4,7 @@ import { c as resolveDefaultAgentId, r as resolveAgentDir, s as resolveAgentWork
4
4
  import "./subsystem-Bs9YvKLa.js";
5
5
  import "./workspace-wAaHI8-5.js";
6
6
  import "./tokens-H1H1LiSQ.js";
7
- import { t as runEmbeddedPiAgent } from "./pi-embedded-C4Cb6hc3.js";
7
+ import { t as runEmbeddedPiAgent } from "./pi-embedded-BBROwjX_.js";
8
8
  import "./plugins-DQYI3Fr-.js";
9
9
  import "./accounts-tNElYrCH.js";
10
10
  import "./boolean-B8-BqKGQ.js";
@@ -12,7 +12,7 @@ import "./command-format-BaxDnULz.js";
12
12
  import "./bindings-B7Ke6LJi.js";
13
13
  import "./send-Z6uznj5j.js";
14
14
  import "./send-Dp3_Z9LN.js";
15
- import "./deliver-CeOnWRNZ.js";
15
+ import "./deliver-Bs6SHLMp.js";
16
16
  import "./diagnostic-CI0kRQkt.js";
17
17
  import "./diagnostic-session-state-Bxo4UHOL.js";
18
18
  import "./accounts-CWktKM8a.js";
@@ -22,10 +22,10 @@ import "./model-auth-DK43VicI.js";
22
22
  import "./github-copilot-token-C_qUP7p5.js";
23
23
  import "./pi-model-discovery-DaNAekda.js";
24
24
  import "./message-channel-Dz5lr5b0.js";
25
- import "./pi-embedded-helpers-B86ZS0eB.js";
25
+ import "./pi-embedded-helpers-D-cALDuy.js";
26
26
  import "./config-CT6a99bQ.js";
27
27
  import "./manifest-registry-D0IQ3WuX.js";
28
- import "./chrome-CQNK4Of4.js";
28
+ import "./chrome-Bs9dOXhy.js";
29
29
  import "./frontmatter-C_bv_0P8.js";
30
30
  import "./skills-BFekKL7i.js";
31
31
  import "./redact-jSxx6Ep2.js";
@@ -36,7 +36,7 @@ import "./thinking-CdlENGRW.js";
36
36
  import "./accounts-qtxJ-6em.js";
37
37
  import "./paths-DLyHUt31.js";
38
38
  import "./tool-images-DXB7tqWi.js";
39
- import "./image-CAUuNGNO.js";
39
+ import "./image-CkMDI3pp.js";
40
40
  import "./reply-prefix-XlyuyChD.js";
41
41
  import "./manager-D_LwXbc6.js";
42
42
  import "./gemini-auth-CdSPHuLl.js";
@@ -50,7 +50,7 @@ import "./ir-DccrnjsE.js";
50
50
  import "./render-CDCvpfhh.js";
51
51
  import "./commands-registry-D7CTCQPm.js";
52
52
  import "./skill-commands-BJMb_psG.js";
53
- import "./runner-M7hSmkG1.js";
53
+ import "./runner-DDAa40wm.js";
54
54
  import "./fetch-Bso4i15F.js";
55
55
  import "./channel-activity-CsM_hJ_s.js";
56
56
  import "./tables-DuZspiBu.js";