@symerian/symi 3.3.2 → 3.3.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 (114) hide show
  1. package/dist/{agent-BED0HDsS.js → agent-9zPi5Bip.js} +1 -1
  2. package/dist/{agent-pDOR_idq.js → agent-M9EC02CI.js} +1 -1
  3. package/dist/{agents-mZX2a3hp.js → agents-CW9uf_n0.js} +2 -2
  4. package/dist/{auth-choice-BgCnInKE.js → auth-choice-Bio1-QUP.js} +1 -1
  5. package/dist/{auth-choice-nKtOJ3wF.js → auth-choice-DS5oaUTz.js} +1 -1
  6. package/dist/{banner-C2jUZyMq.js → banner-0vT1O9w2.js} +1 -1
  7. package/dist/build-info.json +3 -3
  8. package/dist/bundled/boot-md/handler.js +4 -4
  9. package/dist/bundled/session-memory/handler.js +4 -4
  10. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  11. package/dist/{channel-options-DBKd8H2k.js → channel-options-CcGtiy0Q.js} +1 -1
  12. package/dist/{channel-options-DRzIcaL1.js → channel-options-DZ17japQ.js} +1 -1
  13. package/dist/{channels-cli-CxUB3oX1.js → channels-cli-BSvEpjOV.js} +7 -7
  14. package/dist/{channels-cli-CdfROBlW.js → channels-cli-DxSXTCCh.js} +7 -7
  15. package/dist/{chrome-CejiigNy.js → chrome-C9mX2mtt.js} +7 -7
  16. package/dist/{chrome-b556dOQ6.js → chrome-CQnRgvJz.js} +7 -7
  17. package/dist/{cli-CzEP9cIM.js → cli-CHk4wR-F.js} +4 -4
  18. package/dist/{cli-DWcoPSRG.js → cli-Dn9ylBb2.js} +4 -4
  19. package/dist/{command-registry-5O5dCHsD.js → command-registry-UxY6jjeo.js} +10 -10
  20. package/dist/{completion-cli-D4wYjxBG.js → completion-cli-DebZ6nSb.js} +1 -1
  21. package/dist/{completion-cli-DqrFJhG4.js → completion-cli-m9L2Gv9t.js} +2 -2
  22. package/dist/{config-cli-BE2vvf40.js → config-cli-D4_gO3Pd.js} +1 -1
  23. package/dist/{config-cli-CfA5xnD-.js → config-cli-D9YdRiN2.js} +1 -1
  24. package/dist/{configure-CPY4n9mx.js → configure-BXjJQG1p.js} +2 -2
  25. package/dist/{configure-DYDsHAWF.js → configure-D9NeIMjP.js} +2 -2
  26. package/dist/control-ui/css/style.css +0 -100
  27. package/dist/control-ui/index.html +0 -13
  28. package/dist/control-ui/js/app.js +7 -104
  29. package/dist/control-ui/js/render.js +0 -5
  30. package/dist/{deliver-i5knkyHl.js → deliver-DSMNXd9k.js} +4 -4
  31. package/dist/{deliver-BY0HHHHB.js → deliver-DSv-Z24A.js} +4 -4
  32. package/dist/{doctor-completion-DkwAZ_yS.js → doctor-completion--AgLv0kV.js} +1 -1
  33. package/dist/{doctor-completion-C6M7eRb_.js → doctor-completion-D1ImH_eM.js} +1 -1
  34. package/dist/entry.js +1 -1
  35. package/dist/extensionAPI.js +4 -4
  36. package/dist/{gateway-cli-Dm5RZoKM.js → gateway-cli-5KVJJGFm.js} +10 -10
  37. package/dist/{gateway-cli-K_XVNWQc.js → gateway-cli-BjGvnfU3.js} +10 -10
  38. package/dist/{glass-ui-ws-BbsrTxei.js → glass-ui-ws-CwJdwqn6.js} +8 -8
  39. package/dist/{glass-ui-ws-B_7JgOGU.js → glass-ui-ws-f_OPXcN2.js} +8 -8
  40. package/dist/{hooks-cli-D5S_h70_.js → hooks-cli-BfVq5C1p.js} +5 -5
  41. package/dist/{hooks-cli-DyiztpNG.js → hooks-cli-CQ6rF_LQ.js} +5 -5
  42. package/dist/index.js +8 -8
  43. package/dist/llm-slug-generator.js +4 -4
  44. package/dist/{manager-TrK63P2M.js → manager-BI8o6AGu.js} +1 -1
  45. package/dist/{manager-BTtaJXdu.js → manager-BQ5Wl5r-.js} +1 -1
  46. package/dist/{manager-ue49bRVP.js → manager-BUS2wGkQ.js} +1 -1
  47. package/dist/{manager-BT2SbOdg.js → manager-D_AVoLu8.js} +1 -1
  48. package/dist/{memory-Czxk_hJw.js → memory-2OKjMT7V.js} +2 -2
  49. package/dist/{memory-DJN1Q1jq.js → memory-CMKSFx1T.js} +2 -2
  50. package/dist/{memory-cli-B-nQp5HP.js → memory-cli-CmPcKzGZ.js} +2 -2
  51. package/dist/{memory-cli-C9ZqpaaB.js → memory-cli-rdfaJrCS.js} +2 -2
  52. package/dist/{models-oqT-RVMM.js → models-DRtgYyTB.js} +2 -2
  53. package/dist/{models-cli-D8rsqzuW.js → models-cli-183sPHZO.js} +5 -5
  54. package/dist/{models-cli-CuHQFbs7.js → models-cli-DN2zTFw9.js} +6 -6
  55. package/dist/{onboard-BICXrIV1.js → onboard-CPHA8CdV.js} +1 -1
  56. package/dist/{onboard-D-xPcbdk.js → onboard-bTgNnEHK.js} +1 -1
  57. package/dist/{onboard-channels-CiLPgwMl.js → onboard-channels-B_iyN1qL.js} +1 -1
  58. package/dist/{onboard-channels-IZ52XV8A.js → onboard-channels-D5ugcgBE.js} +1 -1
  59. package/dist/{onboarding-BmB9v20h.js → onboarding-D2SLzcWH.js} +3 -3
  60. package/dist/{onboarding-B-jxZvC2.js → onboarding-ii3ok0Ih.js} +3 -3
  61. package/dist/{onboarding.finalize-BejpUEVe.js → onboarding.finalize-DOHv_Xe8.js} +3 -3
  62. package/dist/{onboarding.finalize-DufFKTf4.js → onboarding.finalize-g-_d-wVY.js} +4 -4
  63. package/dist/{pi-embedded-DoWU3tbW.js → pi-embedded-CvGL6bij.js} +36 -36
  64. package/dist/{plugin-registry-BybhOEu2.js → plugin-registry-DSG-0min.js} +1 -1
  65. package/dist/{plugin-registry-CFRFz2CF.js → plugin-registry-Dl3HqI5J.js} +1 -1
  66. package/dist/plugin-sdk/agents/{symipulse-timeout.d.ts → idle-timeout.d.ts} +3 -3
  67. package/dist/plugin-sdk/index.js +6 -6
  68. package/dist/{plugins-cli-D9jv4SGt.js → plugins-cli-CEj-qNus.js} +5 -5
  69. package/dist/{plugins-cli-Dw_F4XTt.js → plugins-cli-CUTyMzoz.js} +5 -5
  70. package/dist/{program-BijlJds3.js → program-CjZ65fN4.js} +10 -10
  71. package/dist/{program-context-f_krhr6H.js → program-context-GaV454D6.js} +18 -18
  72. package/dist/{prompt-select-styled-D4Dl6PAx.js → prompt-select-styled-BkowcFQR.js} +4 -4
  73. package/dist/{prompt-select-styled-wUs9hOXT.js → prompt-select-styled-CwXc8EFB.js} +4 -4
  74. package/dist/{provider-auth-helpers-Dqg9CSy6.js → provider-auth-helpers-Bo1_RSEb.js} +1 -1
  75. package/dist/{provider-auth-helpers-B0LgxUJm.js → provider-auth-helpers-CRobCJR_.js} +1 -1
  76. package/dist/{push-apns-DBG95KxK.js → push-apns-BBym2pAw.js} +1 -1
  77. package/dist/{push-apns-C8U43QIp.js → push-apns-Bv16DYOL.js} +1 -1
  78. package/dist/{pw-ai-BFZrohva.js → pw-ai-B3qisJP1.js} +1 -1
  79. package/dist/{pw-ai-BHSw4eGG.js → pw-ai-GICi0s74.js} +1 -1
  80. package/dist/{register.agent-BQa36aBT.js → register.agent-QXqsCc-q.js} +9 -9
  81. package/dist/{register.agent-B0UZREcL.js → register.agent-z4GJgPr-.js} +8 -8
  82. package/dist/{register.configure-DXxKMVFv.js → register.configure-CYXErdjF.js} +8 -8
  83. package/dist/{register.configure-C2da871z.js → register.configure-DaMmDTaj.js} +8 -8
  84. package/dist/{register.maintenance-DUuHNER1.js → register.maintenance-CBGhJ5R9.js} +9 -9
  85. package/dist/{register.maintenance-CU2sJOVr.js → register.maintenance-CcWTycM4.js} +8 -8
  86. package/dist/{register.message-DIDXm7JJ.js → register.message-Bcvdcd3v.js} +5 -5
  87. package/dist/{register.message-zAQ9mzwS.js → register.message-EMkIi8Ga.js} +5 -5
  88. package/dist/{register.onboard-BQrBlJMk.js → register.onboard-CtcLKgR4.js} +2 -2
  89. package/dist/{register.onboard-xApCQkav.js → register.onboard-lmLaYYZl.js} +2 -2
  90. package/dist/{register.setup-CfJlyVIU.js → register.setup-Cu8R_HaH.js} +2 -2
  91. package/dist/{register.setup-C3DgnQee.js → register.setup-D47FYXH2.js} +2 -2
  92. package/dist/{register.status-health-sessions-D7eQHV4A.js → register.status-health-sessions--q6ddHX9.js} +3 -3
  93. package/dist/{register.status-health-sessions-CZKtQH3R.js → register.status-health-sessions-B9CINBWm.js} +3 -3
  94. package/dist/{register.subclis-DBKLQ-vk.js → register.subclis-CHTY5PYx.js} +9 -9
  95. package/dist/{run-main-C_9MD69x.js → run-main-Bzub4qvZ.js} +17 -17
  96. package/dist/{server-methods-B4kcazJq.js → server-methods-C2UnIkWU.js} +6 -6
  97. package/dist/{server-methods-BLH71I9g.js → server-methods-THO5vDXZ.js} +6 -6
  98. package/dist/{server-node-events-DO4ug_A0.js → server-node-events-j4AWHS1m.js} +6 -6
  99. package/dist/{server-node-events-BercSdmp.js → server-node-events-mBi614x_.js} +6 -6
  100. package/dist/{status-uVc7h7PN.js → status-BtAHzMLu.js} +1 -1
  101. package/dist/{status-DA_sl7Yp.js → status-BuHx0FXI.js} +1 -1
  102. package/dist/{status-BdrH4P1l.js → status-FKqnkO3K.js} +1 -1
  103. package/dist/{status-3CIcz22o.js → status-MkJRgsTJ.js} +1 -1
  104. package/dist/{subagent-registry-CgZDo35C.js → subagent-registry-B1RgR3-0.js} +29 -29
  105. package/dist/{synthesis-DmdaBp-J.js → synthesis-BEaISjwW.js} +4 -4
  106. package/dist/{synthesis-DwfzSD3_.js → synthesis-BSUjIY0v.js} +4 -4
  107. package/dist/{synthesis-w1oM0_-6.js → synthesis-BtlmxJ7w.js} +4 -4
  108. package/dist/{synthesis-B_K7BSX3.js → synthesis-DsYfiC2s.js} +4 -4
  109. package/dist/{unified-runner-BPgxfuKU.js → unified-runner-BPyxPZv9.js} +36 -36
  110. package/dist/{unified-runner-DzycRpag.js → unified-runner-Bn9vq7Zy.js} +29 -29
  111. package/dist/{update-cli-C4I2k2u9.js → update-cli-BXtHo0ox.js} +9 -9
  112. package/dist/{update-cli-DYYKfrbM.js → update-cli-DLx7LNVB.js} +8 -8
  113. package/package.json +1 -1
  114. package/dist/control-ui/js/symipulse.js +0 -154
@@ -5484,106 +5484,6 @@ body {
5484
5484
  padding: 2px 0 0;
5485
5485
  }
5486
5486
 
5487
- /* ── Symipulse Panel ────────────────────────────────────────────── */
5488
- .symipulse-panel {
5489
- cursor: pointer;
5490
- transition:
5491
- max-height 0.3s ease,
5492
- border-color 0.3s;
5493
- }
5494
-
5495
- .symipulse-feed {
5496
- max-height: 3.2em;
5497
- overflow: hidden;
5498
- transition: max-height 0.3s ease;
5499
- font-size: 11px;
5500
- line-height: 1.5;
5501
- color: var(--text-dim);
5502
- font-family: var(--font-mono);
5503
- }
5504
-
5505
- .symipulse-panel.expanded .symipulse-feed {
5506
- max-height: 300px;
5507
- overflow-y: auto;
5508
- scrollbar-width: thin;
5509
- scrollbar-color: rgba(0, 212, 255, 0.2) transparent;
5510
- }
5511
- .symipulse-panel.expanded .symipulse-feed::-webkit-scrollbar {
5512
- width: 3px;
5513
- }
5514
- .symipulse-panel.expanded .symipulse-feed::-webkit-scrollbar-track {
5515
- background: transparent;
5516
- }
5517
- .symipulse-panel.expanded .symipulse-feed::-webkit-scrollbar-thumb {
5518
- background: rgba(0, 212, 255, 0.2);
5519
- border-radius: 2px;
5520
- }
5521
-
5522
- .symipulse-entry {
5523
- padding: 3px 0;
5524
- border-bottom: 1px solid rgba(255, 255, 255, 0.04);
5525
- white-space: nowrap;
5526
- overflow: hidden;
5527
- text-overflow: ellipsis;
5528
- display: flex;
5529
- align-items: baseline;
5530
- gap: 6px;
5531
- }
5532
- .symipulse-entry:last-child {
5533
- border-bottom: none;
5534
- }
5535
-
5536
- .symipulse-entry-time {
5537
- color: var(--text-muted);
5538
- font-size: 10px;
5539
- flex-shrink: 0;
5540
- }
5541
-
5542
- .symipulse-entry-text {
5543
- overflow: hidden;
5544
- text-overflow: ellipsis;
5545
- white-space: nowrap;
5546
- color: var(--text-dim);
5547
- }
5548
-
5549
- .symipulse-panel.expanded .symipulse-entry {
5550
- white-space: normal;
5551
- word-break: break-word;
5552
- }
5553
- .symipulse-panel.expanded .symipulse-entry-text {
5554
- white-space: normal;
5555
- overflow: visible;
5556
- }
5557
-
5558
- .symipulse-live-dot {
5559
- display: inline-block;
5560
- width: 6px;
5561
- height: 6px;
5562
- border-radius: 50%;
5563
- background: var(--accent-green);
5564
- margin-left: 6px;
5565
- vertical-align: middle;
5566
- opacity: 0;
5567
- transition: opacity 0.3s ease;
5568
- }
5569
- .symipulse-live-dot.active {
5570
- opacity: 1;
5571
- animation: pulse 1.2s ease-in-out infinite;
5572
- }
5573
-
5574
- .symipulse-empty {
5575
- display: flex;
5576
- align-items: center;
5577
- justify-content: center;
5578
- padding: 10px 0;
5579
- color: var(--text-dim);
5580
- }
5581
- .symipulse-empty-text {
5582
- font-size: 11px;
5583
- font-family: var(--font-mono);
5584
- opacity: 0.5;
5585
- }
5586
-
5587
5487
  /* ── Lazy-load sentinel ──────────────────────────────────────────── */
5588
5488
  .load-more-sentinel {
5589
5489
  text-align: center;
@@ -325,18 +325,6 @@
325
325
  <div class="debug-entries" id="debug-panel-entries"></div>
326
326
  </div>
327
327
 
328
- <!-- Symipulse Panel -->
329
- <div class="glass-panel symipulse-panel" id="symipulse-panel">
330
- <div class="panel-label">
331
- SYMIPULSE
332
- <span class="symipulse-live-dot" id="symipulse-live-dot"></span>
333
- </div>
334
- <div class="symipulse-feed" id="symipulse-feed">
335
- <div class="symipulse-empty" id="symipulse-empty">
336
- <div class="symipulse-empty-text">No heartbeats yet</div>
337
- </div>
338
- </div>
339
- </div>
340
328
  </aside>
341
329
 
342
330
  <!-- Response waterfall area -->
@@ -1049,7 +1037,6 @@
1049
1037
  <script src="js/metrics.js"></script>
1050
1038
  <script src="js/gateway.js"></script>
1051
1039
  <script src="js/render.js"></script>
1052
- <script src="js/symipulse.js"></script>
1053
1040
  <script src="js/app.js"></script>
1054
1041
  <script src="js/settings.js"></script>
1055
1042
  <script src="js/menu.js"></script>
@@ -378,13 +378,10 @@ function renderHistory(messages) {
378
378
  feedCache.save(messages);
379
379
  }
380
380
 
381
- // Clear reasoning + symipulse panels in sync with the feed — prevents double-entries on reconnect
381
+ // Clear reasoning panel in sync with the feed — prevents double-entries on reconnect
382
382
  if (typeof window.clearReasoningPanel === "function") {
383
383
  window.clearReasoningPanel();
384
384
  }
385
- if (typeof window.clearSymipulsePanel === "function") {
386
- window.clearSymipulsePanel();
387
- }
388
385
  responseArea.innerHTML = "";
389
386
  responseArea.prepend(loadMoreSentinel);
390
387
  for (const m of messages) {
@@ -414,21 +411,6 @@ function renderHistory(messages) {
414
411
  continue;
415
412
  }
416
413
 
417
- // Route symipulse messages to dedicated Symipulse Panel
418
- if (typeof window.isSymipulseMessage === "function" && window.isSymipulseMessage(m)) {
419
- const txt = Array.isArray(m.content)
420
- ? m.content
421
- .filter((b) => b.type === "text")
422
- .map((b) => b.text ?? "")
423
- .join("")
424
- .trim()
425
- : extractText(m.content).trim();
426
- if (txt && typeof window.appendToSymipulsePanel === "function") {
427
- window.appendToSymipulsePanel(txt, m.timestamp);
428
- }
429
- continue;
430
- }
431
-
432
414
  // Route plugin context user messages to Reasoning Panel
433
415
  if (m.role === "user") {
434
416
  const txt = Array.isArray(m.content)
@@ -550,20 +532,6 @@ async function loadMoreHistory() {
550
532
  if (m.role === "system") {
551
533
  continue;
552
534
  }
553
- // Route symipulse messages to dedicated Symipulse Panel
554
- if (typeof window.isSymipulseMessage === "function" && window.isSymipulseMessage(m)) {
555
- const txt = Array.isArray(m.content)
556
- ? m.content
557
- .filter((b) => b.type === "text")
558
- .map((b) => b.text ?? "")
559
- .join("")
560
- .trim()
561
- : extractText(m.content).trim();
562
- if (txt && typeof window.appendToSymipulsePanel === "function") {
563
- window.appendToSymipulsePanel(txt, m.timestamp);
564
- }
565
- continue;
566
- }
567
535
 
568
536
  // Route plugin context & verification user messages to Reasoning Panel
569
537
  if (m.role === "user") {
@@ -639,19 +607,11 @@ function handleGatewayEvent(event) {
639
607
  if (event.event === "agent") {
640
608
  const a = event.payload;
641
609
  if (a) {
642
- // Skip heartbeat agent events — background maintenance runs should not
643
- // trigger the working indicator or arm the watchdog. Without this guard,
644
- // heartbeat tool events (exec, read) arm the watchdog, and when the
645
- // heartbeat completes its "final" is routed to the symipulse panel
646
- // without clearing the indicator — leaving the orb stuck in "working".
647
- if (a.isHeartbeat) {
648
- return;
649
- }
650
610
  // Cross-session filter: agent events for OTHER sessions (cron-fired
651
611
  // channel runs, slack/msteams inbound, scheduled jobs) must not arm the
652
- // user's watchdog. Without this guard, every background non-heartbeat
653
- // run resets the watchdog and produces phantom "Run timed out" warnings
654
- // when no follow-up event arrives within WATCHDOG_MS.
612
+ // user's watchdog. Without this guard, every background run resets the
613
+ // watchdog and produces phantom "Run timed out" warnings when no
614
+ // follow-up event arrives within WATCHDOG_MS.
655
615
  if (a.sessionKey && a.sessionKey !== window.SESSION_KEY) {
656
616
  return;
657
617
  }
@@ -703,18 +663,12 @@ function handleGatewayEvent(event) {
703
663
  return;
704
664
  }
705
665
 
706
- // Heartbeat events must never touch the user's watchdog or stream state.
707
- // Even though chat:final/error/aborted handlers below have their own
708
- // heartbeat early-returns, this top-level guard prevents Path A from
709
- // re-arming the watchdog on heartbeat-tagged deltas/finals.
710
- if (p.isHeartbeat) {
711
- // Fall through to the per-state branches below so heartbeat finals can
712
- // still be routed to the symipulse panel — but skip the watchdog re-arm.
713
- } else if (p.runId && currentRunId && p.runId !== currentRunId) {
666
+ if (p.runId && currentRunId && p.runId !== currentRunId) {
714
667
  // Cross-run chat event (e.g. cron-fired channel run, chat.injectMessage,
715
668
  // late event from a finished run). Not relevant to the user's active turn.
716
669
  return;
717
- } else if (isStreaming) {
670
+ }
671
+ if (isStreaming) {
718
672
  // Any chat event for our session and our run proves the agent is alive —
719
673
  // reset watchdog.
720
674
  armWatchdog();
@@ -728,9 +682,6 @@ function handleGatewayEvent(event) {
728
682
 
729
683
  // Handle "thinking" state broadcast from gateway (agent started processing)
730
684
  if (p.state === "thinking") {
731
- if (p.isHeartbeat) {
732
- return; // Heartbeat thinking events never touch user UI
733
- }
734
685
  if (p.runId && currentRunId && p.runId !== currentRunId) {
735
686
  return; // Cross-run thinking event
736
687
  }
@@ -744,18 +695,6 @@ function handleGatewayEvent(event) {
744
695
  }
745
696
 
746
697
  if (p.state === "delta") {
747
- // Route heartbeat/symipulse deltas to dedicated panel
748
- if (p.isHeartbeat) {
749
- const text = extractText(p.message);
750
- if (text && typeof window.appendToSymipulsePanel === "function") {
751
- window.appendToSymipulsePanel(text, Date.now());
752
- }
753
- if (typeof window.setSymipulseLiveDot === "function") {
754
- window.setSymipulseLiveDot(true);
755
- }
756
- return;
757
- }
758
-
759
698
  // Capture runId on first delta so abort can target the exact run
760
699
  if (p.runId && !currentRunId) {
761
700
  currentRunId = p.runId;
@@ -782,34 +721,6 @@ function handleGatewayEvent(event) {
782
721
  window.updateLiveThinking(thinkingText);
783
722
  }
784
723
  } else if (p.state === "final") {
785
- // Route heartbeat/symipulse finals to dedicated panel.
786
- // Check server flag first, then fall back to regex classifier for
787
- // edge cases where the flag is missing (e.g. older gateway versions).
788
- const finalMsg = p.message?.content ? p.message : { role: "assistant", content: p.message };
789
- if (
790
- p.isHeartbeat ||
791
- (typeof window.isSymipulseMessage === "function" && window.isSymipulseMessage(finalMsg))
792
- ) {
793
- const text = extractText(p.message?.content ?? p.message);
794
- if (text && typeof window.appendToSymipulsePanel === "function") {
795
- window.appendToSymipulsePanel(text, Date.now());
796
- }
797
- if (typeof window.setSymipulseLiveDot === "function") {
798
- window.setSymipulseLiveDot(false);
799
- }
800
- // Clean up any stream bubble that was opened before detection
801
- if (streamBubble) {
802
- streamBubble.closest(".message")?.remove();
803
- streamBubble = null;
804
- streamContent = null;
805
- }
806
- if (thinkingEl) {
807
- thinkingEl.remove();
808
- thinkingEl = null;
809
- }
810
- return;
811
- }
812
-
813
724
  stopElapsedTimer();
814
725
  clearWatchdog();
815
726
  if (typeof window.closeLiveThinking === "function") {
@@ -864,10 +775,6 @@ function handleGatewayEvent(event) {
864
775
  enableInput();
865
776
  drainQueue();
866
777
  } else if (p.state === "aborted") {
867
- // Silently ignore heartbeat aborts — don't touch user-run state
868
- if (p.isHeartbeat) {
869
- return;
870
- }
871
778
  // Clean abort (user-initiated or model decided to stop) — not an error
872
779
  stopElapsedTimer();
873
780
  clearWatchdog();
@@ -890,10 +797,6 @@ function handleGatewayEvent(event) {
890
797
  enableInput();
891
798
  drainQueue();
892
799
  } else if (p.state === "error") {
893
- // Silently ignore heartbeat errors — don't inject error bubbles for background runs
894
- if (p.isHeartbeat) {
895
- return;
896
- }
897
800
  // Server-reported error — route through unified failure handler.
898
801
  // The gateway emits the diagnostic at top-level `errorMessage`
899
802
  // (camelCase); fall back to nested `error.message` for forward-compat
@@ -777,11 +777,6 @@ window.renderMessage = function (message) {
777
777
  .trim()
778
778
  : extractText(content).trim();
779
779
 
780
- // Symipulse messages → routed to Symipulse Panel by caller; guard here as safety net
781
- if (typeof window.isSymipulseMessage === "function" && window.isSymipulseMessage(message)) {
782
- return null;
783
- }
784
-
785
780
  // NOTE: Monologue suppression moved server-side to OutputNormalizer.
786
781
 
787
782
  // Plugin context messages (e.g. "[Outlook 365] Not connected...")
@@ -9,7 +9,7 @@ import { t as normalizeChatType } from "./chat-type-C_KiWNAH.js";
9
9
  import { r as normalizeChannelId, t as getChannelPlugin } from "./plugins-Cp39v6b_.js";
10
10
  import { _ as listDeliverableMessageChannels, c as resolveChunkMode, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, n as chunkByParagraph, v as normalizeMessageChannel } from "./chunk-BjnT3w_x.js";
11
11
  import { c as loadConfig, d as writeConfigFile, m as parseDurationMs, p as parseByteSize, s as createConfigIO, t as SsrFBlockedError } from "./ssrf-BJZIZ4yo.js";
12
- import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-b556dOQ6.js";
12
+ import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-CQnRgvJz.js";
13
13
  import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-xmXjOnAV.js";
14
14
  import { n as formatErrorMessage, t as extractErrorCode } from "./errors-C6sHIFo_.js";
15
15
  import { C as openFileWithinRoot, S as SafeOpenError, a as IMAGE_REDUCE_QUALITY_STEPS, c as getImageMetadata, d as resizeToJpeg, f as detectMime, n as isSilentReplyText, o as buildImageResizeSideGrid, p as extensionForMime, r as getAgentScopedMediaLocalRoots, t as SILENT_REPLY_TOKEN } from "./tokens-CJgPtOxz.js";
@@ -1329,7 +1329,7 @@ function isModuleNotFoundError(err) {
1329
1329
  }
1330
1330
  async function loadPwAiModule(mode) {
1331
1331
  try {
1332
- return await import("./pw-ai-BFZrohva.js");
1332
+ return await import("./pw-ai-B3qisJP1.js");
1333
1333
  } catch (err) {
1334
1334
  if (mode === "soft") return null;
1335
1335
  if (isModuleNotFoundError(err)) return null;
@@ -3926,11 +3926,11 @@ function createProfileContext(opts, profile) {
3926
3926
  const userDataDir = resolveSymiUserDataDir(profile.name);
3927
3927
  const profileState = getProfileState();
3928
3928
  if (await isHttpReachable(300) && !profileState.running) try {
3929
- await (await import("./pw-ai-BFZrohva.js")).closePlaywrightBrowserConnection();
3929
+ await (await import("./pw-ai-B3qisJP1.js")).closePlaywrightBrowserConnection();
3930
3930
  } catch {}
3931
3931
  if (profileState.running) await stopRunningBrowser();
3932
3932
  try {
3933
- await (await import("./pw-ai-BFZrohva.js")).closePlaywrightBrowserConnection();
3933
+ await (await import("./pw-ai-B3qisJP1.js")).closePlaywrightBrowserConnection();
3934
3934
  } catch {}
3935
3935
  if (!fs.existsSync(userDataDir)) return {
3936
3936
  moved: false,
@@ -8,7 +8,7 @@ import { _ as runExec, a as DEFAULT_SYMICORE_FILENAME, c as DEFAULT_USER_FILENAM
8
8
  import { g as isPidAlive, h as resolveProcessScopedMap, tt as formatCliCommand } from "./auth-profiles-duUuQXeC.js";
9
9
  import { t as parseBooleanValue } from "./boolean-mcn6kL0s.js";
10
10
  import { c as loadConfig, d as writeConfigFile, m as parseDurationMs, p as parseByteSize, s as createConfigIO, t as SsrFBlockedError } from "./ssrf-Dcgaqg3U.js";
11
- import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-CejiigNy.js";
11
+ import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-C9mX2mtt.js";
12
12
  import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-D0k4o0Ez.js";
13
13
  import { n as formatErrorMessage, t as extractErrorCode } from "./errors-BkfLlDKo.js";
14
14
  import { b as SafeOpenError, d as extensionForMime, i as buildImageResizeSideGrid, l as resizeToJpeg, o as getImageMetadata, r as IMAGE_REDUCE_QUALITY_STEPS, t as getAgentScopedMediaLocalRoots, u as detectMime, x as openFileWithinRoot } from "./local-roots-WWcVq0Ma.js";
@@ -938,7 +938,7 @@ function isModuleNotFoundError(err) {
938
938
  }
939
939
  async function loadPwAiModule(mode) {
940
940
  try {
941
- return await import("./pw-ai-BHSw4eGG.js");
941
+ return await import("./pw-ai-GICi0s74.js");
942
942
  } catch (err) {
943
943
  if (mode === "soft") return null;
944
944
  if (isModuleNotFoundError(err)) return null;
@@ -3535,11 +3535,11 @@ function createProfileContext(opts, profile) {
3535
3535
  const userDataDir = resolveSymiUserDataDir(profile.name);
3536
3536
  const profileState = getProfileState();
3537
3537
  if (await isHttpReachable(300) && !profileState.running) try {
3538
- await (await import("./pw-ai-BHSw4eGG.js")).closePlaywrightBrowserConnection();
3538
+ await (await import("./pw-ai-GICi0s74.js")).closePlaywrightBrowserConnection();
3539
3539
  } catch {}
3540
3540
  if (profileState.running) await stopRunningBrowser();
3541
3541
  try {
3542
- await (await import("./pw-ai-BHSw4eGG.js")).closePlaywrightBrowserConnection();
3542
+ await (await import("./pw-ai-GICi0s74.js")).closePlaywrightBrowserConnection();
3543
3543
  } catch {}
3544
3544
  if (!fs.existsSync(userDataDir)) return {
3545
3545
  moved: false,
@@ -1,7 +1,7 @@
1
1
  import { r as resolveCliName } from "./command-format-Xm6vX3qJ.js";
2
2
  import { t as resolveSymiPackageRoot } from "./symi-root-CK6iELVh.js";
3
3
  import { t as note } from "./note-DKRm9hYC.js";
4
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-DqrFJhG4.js";
4
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-m9L2Gv9t.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 { r as resolveCliName } from "./command-format-BvAkTjTI.js";
2
2
  import { t as resolveSymiPackageRoot } from "./symi-root-DueRHNOE.js";
3
3
  import { t as note } from "./note-CHrtEumO.js";
4
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-D4wYjxBG.js";
4
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-DebZ6nSb.js";
5
5
  import path from "node:path";
6
6
  import { spawnSync } from "node:child_process";
7
7
 
package/dist/entry.js CHANGED
@@ -2312,7 +2312,7 @@ if (!ensureExperimentalWarningSuppressed()) {
2312
2312
  applyCliProfileEnv({ profile: parsed.profile });
2313
2313
  process$1.argv = parsed.argv;
2314
2314
  }
2315
- import("./run-main-C_9MD69x.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2315
+ import("./run-main-Bzub4qvZ.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2316
2316
  console.error("[symi] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
2317
2317
  process$1.exitCode = 1;
2318
2318
  });
@@ -7,21 +7,21 @@ import { a as resolveAgentIdentity } from "./reply-prefix-BqgLflxO.js";
7
7
  import "./github-copilot-token-BbsJ0Qbo.js";
8
8
  import "./plugins-Cp39v6b_.js";
9
9
  import "./replies-BeK3uuQ8.js";
10
- import { a as resolveAgentTimeoutMs, r as runEmbeddedPiAgent } from "./pi-embedded-DoWU3tbW.js";
11
- import { $ as loadSessionStore, nt as saveSessionStore } from "./deliver-i5knkyHl.js";
10
+ import { a as resolveAgentTimeoutMs, r as runEmbeddedPiAgent } from "./pi-embedded-CvGL6bij.js";
11
+ import { $ as loadSessionStore, nt as saveSessionStore } from "./deliver-DSMNXd9k.js";
12
12
  import "./diagnostic-BvZmqxYI.js";
13
13
  import "./diagnostic-session-state-CWtaDOiK.js";
14
14
  import "./chunk-BjnT3w_x.js";
15
15
  import "./ssrf-BJZIZ4yo.js";
16
16
  import "./manifest-registry-BV_2TbGz.js";
17
- import "./chrome-b556dOQ6.js";
17
+ import "./chrome-CQnRgvJz.js";
18
18
  import "./skills-xmXjOnAV.js";
19
19
  import "./redact-ojHFHOAb.js";
20
20
  import "./errors-C6sHIFo_.js";
21
21
  import "./tokens-CJgPtOxz.js";
22
22
  import "./thinking-BKsvyjWX.js";
23
23
  import { n as resolveSessionFilePath, s as resolveStorePath } from "./paths-N698mtPE.js";
24
- import "./manager-ue49bRVP.js";
24
+ import "./manager-BUS2wGkQ.js";
25
25
  import "./sqlite-jFnvSfLz.js";
26
26
  import "./markdown-tables-BtWlyyt1.js";
27
27
  import "./commands-registry-BO62ZyK2.js";
@@ -1,4 +1,4 @@
1
- import { $t as getAgentRunContext, B as normalizeOptionalText, Bt as countActiveRunsForSession, Cn as classifyOutboundMessage, Ct as DEFAULT_INPUT_IMAGE_MIMES, D as resolveOutboundSessionRoute, Dt as extractImageContentFromSource, En as runWithModelFallback, Et as extractFileContentFromSource, G as hasLegacyDeliveryHints, Gt as resolveAgentTimeoutMs, H as normalizeRequiredName, Ht as listDescendantRunsForRequester, K as stripLegacyDeliveryFields, Kt as runSubagentAnnounceFlow, L as inferLegacyName, M as resetDirectoryCache, O as resolveOutboundTarget, Ot as normalizeMimeList, P as normalizeHttpWebhookUrl, Q as isExternalHookSession, Qt as emitAgentEvent, R as normalizeOptionalAgentId, S as createSymiTools, Sn as CommandLane, St as DEFAULT_INPUT_IMAGE_MAX_BYTES, Tt as DEFAULT_INPUT_TIMEOUT_MS, U as migrateLegacyCronPayload, V as normalizePayloadToSystemText, Vt as initSubagentRegistry, W as buildDeliveryFromLegacyPayload, X as detectSuspiciousPatterns, Y as buildSafeExternalPrompt, Z as getHookType, Zt as clearAgentRunContext, _n as getActiveTaskCount, a as getPluginToolMeta, at as markGatewaySigusr1RestartHandled, bn as setCommandLaneConcurrency, c as handleSlackHttpRequest, cn as ToolInputError, ct as setPreRestartDeferralCheck, d as buildHistoryContextFromEntries, dn as resolveUserTimeFormat, en as onAgentEvent, fn as resolveUserTimezone, h as getTotalPendingReplies, in as getActiveEmbeddedRunCount, it as isGatewaySigusr1RestartExternallyAllowed, k as resolveSessionDeliveryTarget, kt as resolveInputFileLimits, l as readJsonBodyWithLimit, n as applyToolPolicyPipeline, nt as deferGatewayRestartUntilIdle, qt as readLatestAssistantReply, r as buildDefaultToolPolicyPipelineSteps, rt as emitGatewayRestart, s as loadSymiPlugins, sn as registerUnhandledRejectionHandler, st as setGatewaySigusr1RestartPolicy, t as runAgentTurn, tn as registerAgentRunContext, tt as consumeGatewaySigusr1RestartAuthorization, u as requestBodyErrorToText, un as formatUserTime, vn as getTotalQueueSize, w as resolveAnnounceTargetFromKey, wn as resolveModelProfile, wt as DEFAULT_INPUT_MAX_REDIRECTS, xn as waitForActiveTasks, yn as resetAllLanes, z as normalizeOptionalSessionKey, zt as countActiveDescendantRuns } from "./unified-runner-DzycRpag.js";
1
+ import { $t as getAgentRunContext, B as normalizeOptionalText, Bt as countActiveRunsForSession, Cn as classifyOutboundMessage, Ct as DEFAULT_INPUT_IMAGE_MIMES, D as resolveOutboundSessionRoute, Dt as extractImageContentFromSource, En as runWithModelFallback, Et as extractFileContentFromSource, G as hasLegacyDeliveryHints, Gt as resolveAgentTimeoutMs, H as normalizeRequiredName, Ht as listDescendantRunsForRequester, K as stripLegacyDeliveryFields, Kt as runSubagentAnnounceFlow, L as inferLegacyName, M as resetDirectoryCache, O as resolveOutboundTarget, Ot as normalizeMimeList, P as normalizeHttpWebhookUrl, Q as isExternalHookSession, Qt as emitAgentEvent, R as normalizeOptionalAgentId, S as createSymiTools, Sn as CommandLane, St as DEFAULT_INPUT_IMAGE_MAX_BYTES, Tt as DEFAULT_INPUT_TIMEOUT_MS, U as migrateLegacyCronPayload, V as normalizePayloadToSystemText, Vt as initSubagentRegistry, W as buildDeliveryFromLegacyPayload, X as detectSuspiciousPatterns, Y as buildSafeExternalPrompt, Z as getHookType, Zt as clearAgentRunContext, _n as getActiveTaskCount, a as getPluginToolMeta, at as markGatewaySigusr1RestartHandled, bn as setCommandLaneConcurrency, c as handleSlackHttpRequest, cn as ToolInputError, ct as setPreRestartDeferralCheck, d as buildHistoryContextFromEntries, dn as resolveUserTimeFormat, en as onAgentEvent, fn as resolveUserTimezone, h as getTotalPendingReplies, in as getActiveEmbeddedRunCount, it as isGatewaySigusr1RestartExternallyAllowed, k as resolveSessionDeliveryTarget, kt as resolveInputFileLimits, l as readJsonBodyWithLimit, n as applyToolPolicyPipeline, nt as deferGatewayRestartUntilIdle, qt as readLatestAssistantReply, r as buildDefaultToolPolicyPipelineSteps, rt as emitGatewayRestart, s as loadSymiPlugins, sn as registerUnhandledRejectionHandler, st as setGatewaySigusr1RestartPolicy, t as runAgentTurn, tn as registerAgentRunContext, tt as consumeGatewaySigusr1RestartAuthorization, u as requestBodyErrorToText, un as formatUserTime, vn as getTotalQueueSize, w as resolveAnnounceTargetFromKey, wn as resolveModelProfile, wt as DEFAULT_INPUT_MAX_REDIRECTS, xn as waitForActiveTasks, yn as resetAllLanes, z as normalizeOptionalSessionKey, zt as countActiveDescendantRuns } from "./unified-runner-Bn9vq7Zy.js";
2
2
  import { A as isRich, E as setVerbose, H as createInternalHookEvent, M as getChildLogger, N as getLogger, P as getResolvedLoggerSettings, U as registerInternalHook, V as clearInternalHooks, W as triggerInternalHook, j as theme, k as colorize, m as createEmptyPluginRegistry, r as DEFAULT_CHAT_CHANNEL } from "./registry-DKJLAPDB.js";
3
3
  import { _ as expandHomePrefix, g as resolveStateDir, i as isNixMode, l as resolveGatewayLockDir, o as resolveConfigPath, r as STATE_DIR, t as CONFIG_PATH, u as resolveGatewayPort } from "./paths-BSzKwaxE.js";
4
4
  import { h as resolveUserPath, s as ensureDir, t as CONFIG_DIR, v as shortenHomePath, x as truncateUtf16Safe } from "./utils-BU8jVQFM.js";
@@ -52,8 +52,8 @@ import { c as hasNonzeroUsage, s as deriveSessionTotalTokens } from "./session-c
52
52
  import { C as enqueueSystemEvent, a as loadCombinedSessionStoreForGateway, f as formatRestartSentinelMessage, i as listSessionsFromStore, m as summarizeRestartSentinel, o as loadSessionEntry, u as consumeRestartSentinel, x as lookupContextTokens } from "./session-utils-0F9pB5d6.js";
53
53
  import { r as getMachineDisplayName } from "./with-timeout-C0UtpXBj.js";
54
54
  import { a as resolveAgentIdentity } from "./reply-prefix-xaWqfM9m.js";
55
- import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-Czxk_hJw.js";
56
- import { c as resolveMemorySearchConfig } from "./manager-BTtaJXdu.js";
55
+ import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-2OKjMT7V.js";
56
+ import { c as resolveMemorySearchConfig } from "./manager-BQ5Wl5r-.js";
57
57
  import "./sqlite-DBEvS-Ne.js";
58
58
  import "./chunk-DQGU0F8t.js";
59
59
  import "./markdown-tables-GTLvbzuR.js";
@@ -84,7 +84,7 @@ import { t as formatDocsLink } from "./links-CSaUKNKm.js";
84
84
  import { n as runCommandWithRuntime } from "./cli-utils-CX1oQ81G.js";
85
85
  import { t as formatHelpExamples } from "./help-format-BI_G2p1e.js";
86
86
  import { n as withProgress } from "./progress-CyPyGCDn.js";
87
- import "./memory-cli-B-nQp5HP.js";
87
+ import "./memory-cli-CmPcKzGZ.js";
88
88
  import "./logging-B5YNzZB9.js";
89
89
  import "./replies-P7jbK6Bo.js";
90
90
  import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, r as resolveEffectiveToolPolicy } from "./pi-tools.policy-BBHbN8Nh.js";
@@ -116,15 +116,15 @@ import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } fr
116
116
  import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-DmYHvtn2.js";
117
117
  import { c as resolveNodeCommandAllowlist, l as probeGateway, n as DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./audit-B_HL4UJ_.js";
118
118
  import { t as discoverGatewayBeacons } from "./bonjour-discovery-CU1mz7AC.js";
119
- import { r as pickGatewaySelfPresence } from "./status-DA_sl7Yp.js";
119
+ import { r as pickGatewaySelfPresence } from "./status-BuHx0FXI.js";
120
120
  import { i as styleHealthChannelLine, n as getHealthSnapshot, t as formatHealthChannelLines } from "./health-BdxlhiXA.js";
121
121
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-DUhvOLUL.js";
122
122
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-CZxZhEXr.js";
123
- import { t as runOnboardingWizard } from "./onboarding-BmB9v20h.js";
124
- import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-B4kcazJq.js";
125
- import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-DBG95KxK.js";
123
+ import { t as runOnboardingWizard } from "./onboarding-D2SLzcWH.js";
124
+ import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-C2UnIkWU.js";
125
+ import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-BBym2pAw.js";
126
126
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-D5G00y8h.js";
127
- import { a as getCliSessionId, o as setCliSessionId, s as runCliAgent, t as agentCommand } from "./agent-pDOR_idq.js";
127
+ import { a as getCliSessionId, o as setCliSessionId, s as runCliAgent, t as agentCommand } from "./agent-M9EC02CI.js";
128
128
  import { t as createOutboundSendDeps } from "./outbound-send-deps-BpziI1pC.js";
129
129
  import { s as loadAgentIdentityFromWorkspace } from "./agents.config-B_LFeRQS.js";
130
130
  import "./dm-policy-shared-C1TQOlkZ.js";
@@ -12063,7 +12063,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
12063
12063
  });
12064
12064
  let glassUiBridgeCleanup = null;
12065
12065
  if (!minimalTestGateway) {
12066
- const { createGlassUiBridge } = await import("./glass-ui-ws-BbsrTxei.js");
12066
+ const { createGlassUiBridge } = await import("./glass-ui-ws-CwJdwqn6.js");
12067
12067
  glassUiBridgeCleanup = createGlassUiBridge({
12068
12068
  wss: glassUiWss,
12069
12069
  context: gatewayRequestContext,
@@ -22,7 +22,7 @@ import "./pairing-token-Bnr7QjVF.js";
22
22
  import { t as safeEqualSecret } from "./secret-equal-CbntzRkh.js";
23
23
  import { a as isValidIPv4, c as resolveClientIp, d as resolveHostName, f as rawDataToString, i as isTrustedProxyAddress, l as resolveGatewayBindHost, n as isLoopbackHost, o as normalizeHostHeader, t as isLoopbackAddress, u as resolveGatewayListenHosts } from "./net-DZ5Ayk-W.js";
24
24
  import { n as pickPrimaryTailnetIPv4, r as pickPrimaryTailnetIPv6 } from "./tailnet-Cmumpn76.js";
25
- import { Cn as getAgentRunContext, Ct as emitGatewayRestart, D as getActiveEmbeddedRunCount, Dt as setGatewaySigusr1RestartPolicy, F as createSymiTools, Gt as DEFAULT_INPUT_IMAGE_MAX_BYTES, H as resolveOutboundTarget, J as runWithModelFallback, Jt as DEFAULT_INPUT_TIMEOUT_MS, K as resetDirectoryCache, Kt as DEFAULT_INPUT_IMAGE_MIMES, L as readLatestAssistantReply, M as resolveModelProfile, Ot as setPreRestartDeferralCheck, Q as normalizeHttpWebhookUrl, Qt as resolveInputFileLimits, R as resolveAnnounceTargetFromKey, S as getTotalPendingReplies, Sn as emitAgentEvent, St as deferGatewayRestartUntilIdle, T as runAgentTurn, Tn as registerAgentRunContext, Tt as markGatewaySigusr1RestartHandled, U as resolveSessionDeliveryTarget, V as resolveOutboundSessionRoute, Wt as registerUnhandledRejectionHandler, Xt as extractImageContentFromSource, Yt as extractFileContentFromSource, Zt as normalizeMimeList, _ as requestBodyErrorToText, _n as resetAllLanes, at as normalizePayloadToSystemText, bn as CommandLane, cn as ToolInputError, ct as buildDeliveryFromLegacyPayload, dn as resolveUserTimeFormat, en as resolveAgentTimeoutMs, f as getPluginToolMeta, fn as resolveUserTimezone, g as readJsonBodyWithLimit, gn as getTotalQueueSize, gt as isExternalHookSession, h as handleSlackHttpRequest, hn as getActiveTaskCount, ht as getHookType, i as listDescendantRunsForRequester, it as normalizeOptionalText, j as classifyOutboundMessage, l as applyToolPolicyPipeline, lt as hasLegacyDeliveryHints, m as loadSymiPlugins, mt as detectSuspiciousPatterns, n as countActiveRunsForSession, nt as normalizeOptionalAgentId, ot as normalizeRequiredName, pt as buildSafeExternalPrompt, qt as DEFAULT_INPUT_MAX_REDIRECTS, r as initSubagentRegistry, rt as normalizeOptionalSessionKey, s as runSubagentAnnounceFlow, st as migrateLegacyCronPayload, t as countActiveDescendantRuns, tt as inferLegacyName, u as buildDefaultToolPolicyPipelineSteps, un as formatUserTime, ut as stripLegacyDeliveryFields, v as buildHistoryContextFromEntries, vn as setCommandLaneConcurrency, wn as onAgentEvent, wt as isGatewaySigusr1RestartExternallyAllowed, xn as clearAgentRunContext, xt as consumeGatewaySigusr1RestartAuthorization, yn as waitForActiveTasks } from "./subagent-registry-CgZDo35C.js";
25
+ import { Cn as getAgentRunContext, Ct as emitGatewayRestart, D as getActiveEmbeddedRunCount, Dt as setGatewaySigusr1RestartPolicy, F as createSymiTools, Gt as DEFAULT_INPUT_IMAGE_MAX_BYTES, H as resolveOutboundTarget, J as runWithModelFallback, Jt as DEFAULT_INPUT_TIMEOUT_MS, K as resetDirectoryCache, Kt as DEFAULT_INPUT_IMAGE_MIMES, L as readLatestAssistantReply, M as resolveModelProfile, Ot as setPreRestartDeferralCheck, Q as normalizeHttpWebhookUrl, Qt as resolveInputFileLimits, R as resolveAnnounceTargetFromKey, S as getTotalPendingReplies, Sn as emitAgentEvent, St as deferGatewayRestartUntilIdle, T as runAgentTurn, Tn as registerAgentRunContext, Tt as markGatewaySigusr1RestartHandled, U as resolveSessionDeliveryTarget, V as resolveOutboundSessionRoute, Wt as registerUnhandledRejectionHandler, Xt as extractImageContentFromSource, Yt as extractFileContentFromSource, Zt as normalizeMimeList, _ as requestBodyErrorToText, _n as resetAllLanes, at as normalizePayloadToSystemText, bn as CommandLane, cn as ToolInputError, ct as buildDeliveryFromLegacyPayload, dn as resolveUserTimeFormat, en as resolveAgentTimeoutMs, f as getPluginToolMeta, fn as resolveUserTimezone, g as readJsonBodyWithLimit, gn as getTotalQueueSize, gt as isExternalHookSession, h as handleSlackHttpRequest, hn as getActiveTaskCount, ht as getHookType, i as listDescendantRunsForRequester, it as normalizeOptionalText, j as classifyOutboundMessage, l as applyToolPolicyPipeline, lt as hasLegacyDeliveryHints, m as loadSymiPlugins, mt as detectSuspiciousPatterns, n as countActiveRunsForSession, nt as normalizeOptionalAgentId, ot as normalizeRequiredName, pt as buildSafeExternalPrompt, qt as DEFAULT_INPUT_MAX_REDIRECTS, r as initSubagentRegistry, rt as normalizeOptionalSessionKey, s as runSubagentAnnounceFlow, st as migrateLegacyCronPayload, t as countActiveDescendantRuns, tt as inferLegacyName, u as buildDefaultToolPolicyPipelineSteps, un as formatUserTime, ut as stripLegacyDeliveryFields, v as buildHistoryContextFromEntries, vn as setCommandLaneConcurrency, wn as onAgentEvent, wt as isGatewaySigusr1RestartExternallyAllowed, xn as clearAgentRunContext, xt as consumeGatewaySigusr1RestartAuthorization, yn as waitForActiveTasks } from "./subagent-registry-B1RgR3-0.js";
26
26
  import { D as resolveSessionResetPolicy, F as resolveMainSessionKey, H as cleanStaleLockFiles, I as resolveMainSessionKeyFromConfig, K as mergeDeliveryContext, M as canonicalizeMainSessionAlias, N as resolveAgentMainSessionKey, T as evaluateSessionFreshness, W as deliveryContextFromSession, d as updateSessionStore, n as parseSessionThreadInfo, o as loadSessionStore } from "./sessions-7jk0D1BI.js";
27
27
  import { n as listChannelPlugins, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-Bq-Msc8Z.js";
28
28
  import "./send-CLJ2KPVT.js";
@@ -50,8 +50,8 @@ import { c as resolveStorePath, i as resolveSessionTranscriptPath, s as resolveS
50
50
  import { d as supportsXHighThinking, l as normalizeVerboseLevel, s as normalizeThinkLevel } from "./thinking-BDh5LPh-.js";
51
51
  import "./models-config-BfmuswQ_.js";
52
52
  import { a as resolveAgentIdentity } from "./reply-prefix-CRdCnS44.js";
53
- import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-DJN1Q1jq.js";
54
- import { c as resolveMemorySearchConfig } from "./manager-TrK63P2M.js";
53
+ import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-CMKSFx1T.js";
54
+ import { c as resolveMemorySearchConfig } from "./manager-BI8o6AGu.js";
55
55
  import "./sqlite-l3CZYU6t.js";
56
56
  import "./chunk-BySyfaEr.js";
57
57
  import "./markdown-tables-CCOfinlW.js";
@@ -82,7 +82,7 @@ import { t as formatDocsLink } from "./links-Db3Rw0Tg.js";
82
82
  import { n as runCommandWithRuntime } from "./cli-utils-BqMwAlgf.js";
83
83
  import { t as formatHelpExamples } from "./help-format-DbbIlOje.js";
84
84
  import { n as withProgress } from "./progress-C4ck6JXh.js";
85
- import "./memory-cli-C9ZqpaaB.js";
85
+ import "./memory-cli-rdfaJrCS.js";
86
86
  import "./logging-D0L9TWhE.js";
87
87
  import "./replies-BOy28KVL.js";
88
88
  import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, r as resolveEffectiveToolPolicy } from "./pi-tools.policy-D-WJTlz8.js";
@@ -109,17 +109,17 @@ import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } fr
109
109
  import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-DP6YX7_w.js";
110
110
  import { c as resolveNodeCommandAllowlist, l as probeGateway, n as DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./audit-DEXQlMwn.js";
111
111
  import { t as discoverGatewayBeacons } from "./bonjour-discovery-BTpm6P8H.js";
112
- import { i as pickGatewaySelfPresence } from "./status-BdrH4P1l.js";
112
+ import { i as pickGatewaySelfPresence } from "./status-FKqnkO3K.js";
113
113
  import { a as styleHealthChannelLine, n as getHealthSnapshot, t as formatHealthChannelLines } from "./health-CvdEEMPS.js";
114
114
  import { n as createDefaultDeps, t as createOutboundSendDeps } from "./outbound-send-deps-WKDU2JsO.js";
115
115
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-B5BrwGRs.js";
116
116
  import { t as ensureSymiCliOnPath } from "./path-env-DmaMvYrK.js";
117
117
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-C1JNxsic.js";
118
- import { t as runOnboardingWizard } from "./onboarding-B-jxZvC2.js";
119
- import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-BLH71I9g.js";
120
- import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-C8U43QIp.js";
118
+ import { t as runOnboardingWizard } from "./onboarding-ii3ok0Ih.js";
119
+ import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-THO5vDXZ.js";
120
+ import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-Bv16DYOL.js";
121
121
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-DjIM4-F9.js";
122
- import { a as getCliSessionId, o as setCliSessionId, s as runCliAgent, t as agentCommand } from "./agent-BED0HDsS.js";
122
+ import { a as getCliSessionId, o as setCliSessionId, s as runCliAgent, t as agentCommand } from "./agent-9zPi5Bip.js";
123
123
  import { s as loadAgentIdentityFromWorkspace } from "./agents.config-RCL-IJds.js";
124
124
  import "./dm-policy-shared-CC_pbZzd.js";
125
125
  import "./node-service-DDDCEDdv.js";
@@ -12058,7 +12058,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
12058
12058
  });
12059
12059
  let glassUiBridgeCleanup = null;
12060
12060
  if (!minimalTestGateway) {
12061
- const { createGlassUiBridge } = await import("./glass-ui-ws-B_7JgOGU.js");
12061
+ const { createGlassUiBridge } = await import("./glass-ui-ws-f_OPXcN2.js");
12062
12062
  glassUiBridgeCleanup = createGlassUiBridge({
12063
12063
  wss: glassUiWss,
12064
12064
  context: gatewayRequestContext,