@symerian/symi 2.6.35 → 2.6.37

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 (203) hide show
  1. package/dist/{acp-cli-NJzARaHq.js → acp-cli-EqE2uipx.js} +2 -2
  2. package/dist/{acp-cli-Cu4icbJT.js → acp-cli-gr5XIPZf.js} +2 -2
  3. package/dist/{agents-BIAaMNSb.js → agents-BDKvA-fr.js} +5 -5
  4. package/dist/{agents.config-BKjYekzK.js → agents.config-DP7J1Yxi.js} +1 -1
  5. package/dist/{agents.config-BDtgUDFp.js → agents.config-SvdnvFsa.js} +1 -1
  6. package/dist/{audio-preflight-CWnxkaac.js → audio-preflight-COe9clRU.js} +2 -2
  7. package/dist/{audit-Byo5jCLN.js → audit-Cgd5-Y7W.js} +2 -2
  8. package/dist/{audit-CrITRV6w.js → audit-DCDNPsGr.js} +2 -2
  9. package/dist/{auth-choice-Cw2rldnf.js → auth-choice-CinzPjY5.js} +4 -4
  10. package/dist/{auth-choice-C7BrC95t.js → auth-choice-DeTIgQiQ.js} +2 -2
  11. package/dist/{banner-DCF8IifK.js → banner-DlzlZSHv.js} +1 -1
  12. package/dist/{browser-cli-CPcnnsJJ.js → browser-cli-Dun4KSp2.js} +3 -3
  13. package/dist/{browser-cli-BG4qPxpM.js → browser-cli-FNGt_E96.js} +3 -3
  14. package/dist/build-info.json +3 -3
  15. package/dist/bundled/boot-md/handler.js +1 -1
  16. package/dist/bundled/session-memory/handler.js +1 -1
  17. package/dist/{call-CJaS1iRF.js → call-CFhGTNtt.js} +1 -1
  18. package/dist/{call-BcE47FtD.js → call-DIDhYlsx.js} +1 -1
  19. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  20. package/dist/{channel-options-BaC3G5sc.js → channel-options-38j3QjH3.js} +1 -1
  21. package/dist/{channel-options-DHSRuD2s.js → channel-options-D7Lp2WmW.js} +1 -1
  22. package/dist/{channel-web-YXrZZHRE.js → channel-web-DoJWvCSG.js} +2 -2
  23. package/dist/{channels-cli-CfMJGgBp.js → channels-cli-CMMBVrwz.js} +7 -7
  24. package/dist/{channels-cli-DODlfOu4.js → channels-cli-DmvAljR1.js} +9 -9
  25. package/dist/cli/daemon-cli.js +1 -1
  26. package/dist/{cli-CSlDsUKl.js → cli-Cd4B5FyU.js} +6 -6
  27. package/dist/{cli-CVqXnzze.js → cli-D9LYX6lB.js} +4 -4
  28. package/dist/{client-DMBZpU6X.js → client-T3qcxXru.js} +6 -1
  29. package/dist/{client-CQSyCS4M.js → client-jI1oE0_k.js} +6 -1
  30. package/dist/{command-registry-CrYpGtIt.js → command-registry-CARx8WBf.js} +10 -10
  31. package/dist/{completion-cli-GqPGf3Kq.js → completion-cli-DCO3bMjl.js} +2 -2
  32. package/dist/{completion-cli-BmYBAxqM.js → completion-cli-LYcBopv1.js} +1 -1
  33. package/dist/{config-cli-BxSBpwuL.js → config-cli-9rTAv29s.js} +1 -1
  34. package/dist/{config-cli-BjXnB1c7.js → config-cli-BCiQhEoA.js} +1 -1
  35. package/dist/{configure-De-0b4bB.js → configure-BeKcXpvL.js} +6 -6
  36. package/dist/{configure-CIFt3G-c.js → configure-RmJWWP1i.js} +8 -8
  37. package/dist/control-ui/css/style.css +104 -0
  38. package/dist/control-ui/index.html +2 -2
  39. package/dist/control-ui/js/app.js +45 -0
  40. package/dist/control-ui/js/history.js +38 -0
  41. package/dist/control-ui/js/menu.js +38 -30
  42. package/dist/control-ui/js/settings.js +166 -2
  43. package/dist/{cron-cli-BP24xl6n.js → cron-cli-C-gg6wfO.js} +3 -3
  44. package/dist/{cron-cli-DBIlCvp3.js → cron-cli-KYTOQ6d9.js} +3 -3
  45. package/dist/{daemon-cli-wWnBIQtk.js → daemon-cli-0RLS-CwL.js} +2 -2
  46. package/dist/{daemon-cli-DscwlsKW.js → daemon-cli-CJJ8Vueq.js} +2 -2
  47. package/dist/daemon-cli.js +5 -0
  48. package/dist/{devices-cli-BHiPx2c2.js → devices-cli-CI2TOoP1.js} +2 -2
  49. package/dist/{devices-cli-Dds-25Ve.js → devices-cli-j0f38zcG.js} +2 -2
  50. package/dist/{doctor-completion-CL0NHlCA.js → doctor-completion-BlysSk9e.js} +1 -1
  51. package/dist/{doctor-completion-4SDl6ZEA.js → doctor-completion-CfPhNCUx.js} +1 -1
  52. package/dist/entry.js +1 -1
  53. package/dist/{exec-approvals-cli-BliRl8VB.js → exec-approvals-cli-2BfYmO4M.js} +4 -4
  54. package/dist/{exec-approvals-cli--zyXYrNY.js → exec-approvals-cli-wesKZNXl.js} +4 -4
  55. package/dist/extensionAPI.js +1 -1
  56. package/dist/{gateway-cli-D98LL9Yi.js → gateway-cli-B1AI4M7v.js} +17 -16
  57. package/dist/{gateway-cli-CqHk7Nfm.js → gateway-cli-D2MuH-Vj.js} +15 -14
  58. package/dist/{gateway-rpc-BxkKeCZ0.js → gateway-rpc-5aGm8LwU.js} +1 -1
  59. package/dist/{gateway-rpc-DfZSz5JF.js → gateway-rpc-BkB6xEaM.js} +1 -1
  60. package/dist/{glass-ui-ws-z-ryIbt7.js → glass-ui-ws-cB1R6KOh.js} +13 -13
  61. package/dist/{glass-ui-ws-vx0iMfPn.js → glass-ui-ws-xbRlW2Pz.js} +11 -11
  62. package/dist/{health-BNxdveY8.js → health-By4_Yu9p.js} +2 -2
  63. package/dist/{health-pFcca1cU.js → health-DjUN4OFC.js} +2 -2
  64. package/dist/{hooks-cli-DefzmbZl.js → hooks-cli-BENuuN6Y.js} +7 -7
  65. package/dist/{hooks-cli-Dqe7WVzD.js → hooks-cli-CGrOzATb.js} +5 -5
  66. package/dist/index.js +11 -11
  67. package/dist/llm-slug-generator.js +1 -1
  68. package/dist/{logs-cli-xOzIPrHm.js → logs-cli-C0FZokFv.js} +3 -3
  69. package/dist/{logs-cli-Du8FCgKK.js → logs-cli-Dvs8e7u9.js} +3 -3
  70. package/dist/{model-catalog-DvBJ8pMD.js → model-catalog-DsFLN-ua.js} +1 -1
  71. package/dist/{model-picker-Ddo3jHe-.js → model-picker-BzIRY_aM.js} +1 -1
  72. package/dist/{models-c9cOxxrP.js → models-D1mOj_fd.js} +3 -3
  73. package/dist/{models-cli-BhOA86hd.js → models-cli-Blg1YDNe.js} +6 -6
  74. package/dist/{models-cli-Cosjljgg.js → models-cli-DhanAXLt.js} +8 -8
  75. package/dist/{node-cli-DSEhcjUV.js → node-cli-C4b1vFcY.js} +1 -1
  76. package/dist/{node-cli-C_G-Q3h-.js → node-cli-DUi87xSB.js} +1 -1
  77. package/dist/{nodes-cli-BIPA9B8G.js → nodes-cli-alQ9Bv_-.js} +3 -3
  78. package/dist/{nodes-cli-BcnuJajV.js → nodes-cli-wgJi8nLG.js} +3 -3
  79. package/dist/{onboard-DzfTelta.js → onboard-BKl9tvd9.js} +5 -5
  80. package/dist/{onboard-Cy_CK0Ng.js → onboard-DIjwRWbY.js} +3 -3
  81. package/dist/{onboard-channels-BjUx6cZ7.js → onboard-channels-CW1DBHfJ.js} +1 -1
  82. package/dist/{onboard-channels-BAEFSSqU.js → onboard-channels-wd_fR_EA.js} +1 -1
  83. package/dist/{onboard-custom-C7O-zfQ1.js → onboard-custom-BPvHqbtj.js} +1 -1
  84. package/dist/{onboard-helpers-ZmZYzlq3.js → onboard-helpers-Ci50bfCW.js} +1 -1
  85. package/dist/{onboard-helpers-_pit1NZW.js → onboard-helpers-DASpwgat.js} +1 -1
  86. package/dist/{onboard-remote-zUjD7UtM.js → onboard-remote-I9QVs0MQ.js} +1 -1
  87. package/dist/{onboard-remote-R1g6st9i.js → onboard-remote-xXi061GI.js} +1 -1
  88. package/dist/{onboard-skills-ByO_wSN5.js → onboard-skills-Bn2T6lze.js} +1 -1
  89. package/dist/{onboard-skills-BB0YhUmF.js → onboard-skills-DX7L1thH.js} +1 -1
  90. package/dist/{onboarding-B9RTmYiC.js → onboarding-Ban5B7QD.js} +9 -9
  91. package/dist/{onboarding-CerjrLp1.js → onboarding-DnhVdzx6.js} +7 -7
  92. package/dist/{onboarding.finalize-CGGB37q-.js → onboarding.finalize-QCZDp4AW.js} +10 -10
  93. package/dist/{onboarding.finalize-CLQL7PKW.js → onboarding.finalize-YbnkoDuN.js} +11 -11
  94. package/dist/{onboarding.gateway-config-CJUgDC6Y.js → onboarding.gateway-config-CJU7Hzrn.js} +3 -3
  95. package/dist/{onboarding.gateway-config-BQFO9a_h.js → onboarding.gateway-config-D6SN3HBb.js} +3 -3
  96. package/dist/{pi-auth-json-DayrlDg_.js → pi-auth-json-DhTX6MBO.js} +1 -1
  97. package/dist/{pi-embedded-CziuxRtW.js → pi-embedded-DG6dQt8v.js} +7 -2
  98. package/dist/{plugin-registry-Ls_YGsWz.js → plugin-registry-BdvMB68i.js} +1 -1
  99. package/dist/{plugin-registry-BkFixq63.js → plugin-registry-DfODDpUe.js} +1 -1
  100. package/dist/plugin-sdk/{channel-web-D4P9MkFu.js → channel-web-DHcmAnVa.js} +1 -1
  101. package/dist/plugin-sdk/gateway/protocol/index.d.ts +6 -2
  102. package/dist/plugin-sdk/gateway/protocol/schema/sessions.d.ts +4 -0
  103. package/dist/plugin-sdk/gateway/protocol/schema/types.d.ts +2 -1
  104. package/dist/plugin-sdk/index.js +2 -2
  105. package/dist/plugin-sdk/{reply-BVs4oalQ.js → reply-CeoL_D-u.js} +7 -2
  106. package/dist/plugin-sdk/{web-DiQTcviv.js → web-qmzvsQZn.js} +2 -2
  107. package/dist/{plugins-cli-CJLJsr_L.js → plugins-cli-DMxHIMNz.js} +5 -5
  108. package/dist/{plugins-cli-DXiakDnC.js → plugins-cli-Dcd56Auo.js} +7 -7
  109. package/dist/{program-B6KpKryX.js → program-CK6pb4lq.js} +10 -10
  110. package/dist/{program-context-Dm-BSkOd.js → program-context-0dr-H7wo.js} +29 -29
  111. package/dist/{prompt-select-styled-Dk8_YofB.js → prompt-select-styled-Bi9q87ml.js} +7 -7
  112. package/dist/{prompt-select-styled-DszNP9MV.js → prompt-select-styled-uYsTGG3x.js} +6 -6
  113. package/dist/{provider-auth-helpers-Bi5oeREh.js → provider-auth-helpers-BC24Uzzu.js} +1 -1
  114. package/dist/{provider-auth-helpers-B_Rtgt-w.js → provider-auth-helpers-BUorkQUD.js} +1 -1
  115. package/dist/{push-apns-BzIW-JHE.js → push-apns-BQckoz9S.js} +1 -1
  116. package/dist/{push-apns-Bmd6SdxC.js → push-apns-BwHZ2F7j.js} +1 -1
  117. package/dist/{register.agent-Vc2Bu3J4.js → register.agent-Ffw952Cm.js} +11 -11
  118. package/dist/{register.agent-kKtKgmcO.js → register.agent-wv_0IcpN.js} +9 -9
  119. package/dist/{register.configure-BnNPTLBI.js → register.configure-BMkj8T9e.js} +15 -15
  120. package/dist/{register.configure-D-o-geWg.js → register.configure-BTKXkVgp.js} +11 -11
  121. package/dist/{register.maintenance-jMmXJ1NK.js → register.maintenance-CRu_hm_x.js} +11 -11
  122. package/dist/{register.maintenance-0L5VAVCA.js → register.maintenance-D1xEYvHY.js} +12 -12
  123. package/dist/{register.message-CdCHhVND.js → register.message-DD5LEq6t.js} +5 -5
  124. package/dist/{register.message-C9zVQOWl.js → register.message-f-91gZI8.js} +7 -7
  125. package/dist/{register.onboard-pKq2v5Fh.js → register.onboard-BRTil6DH.js} +11 -11
  126. package/dist/{register.onboard-BN7J8vyx.js → register.onboard-BetMbk4D.js} +7 -7
  127. package/dist/{register.setup-J_GQSh-T.js → register.setup-C0XLhwPd.js} +11 -11
  128. package/dist/{register.setup-BKYxHrcB.js → register.setup-DX01Qmwr.js} +7 -7
  129. package/dist/{register.status-health-sessions-BLA4yUC4.js → register.status-health-sessions-CMF93G-p.js} +7 -7
  130. package/dist/{register.status-health-sessions-BtGRpngz.js → register.status-health-sessions-Dqh15XbO.js} +9 -9
  131. package/dist/{register.subclis-DcBHO9E8.js → register.subclis-D_HoHaB7.js} +20 -20
  132. package/dist/{reply-C68F3IMq.js → reply-CMb-m0ZJ.js} +9 -9
  133. package/dist/{rpc-BjLadgzu.js → rpc--E7i90bk.js} +1 -1
  134. package/dist/{rpc-BfhojW8g.js → rpc-_E0CZJKf.js} +1 -1
  135. package/dist/{run-main-DkcjdsAo.js → run-main-e6LI0zRf.js} +17 -17
  136. package/dist/{runner-CUglpiFP.js → runner-BSzJIT-z.js} +1 -1
  137. package/dist/{security-cli-BFLtWWHy.js → security-cli-BSZ1_9R3.js} +3 -3
  138. package/dist/{security-cli-Dmb1k47A.js → security-cli-KxA9AZ3q.js} +3 -3
  139. package/dist/{server-methods-B4IR7jcD.js → server-methods-CZJHMB_M.js} +102 -11
  140. package/dist/{server-methods-n5oCz2e0.js → server-methods-D5X0JrXg.js} +102 -11
  141. package/dist/{server-node-events-C3hHerD3.js → server-node-events-BpNyybGF.js} +5 -5
  142. package/dist/{server-node-events---jWWBKN.js → server-node-events-Cu_8g2ws.js} +7 -7
  143. package/dist/{status-8CbQSAEF.js → status-C2iQbl7T.js} +1 -1
  144. package/dist/{status-CwhHbhUv.js → status-CL1xQrpW.js} +5 -5
  145. package/dist/{status-ITRlj7e_.js → status-CXib3MSE.js} +5 -5
  146. package/dist/{status-ClvXAaHZ.js → status-iJUy8byq.js} +1 -1
  147. package/dist/{subagent-registry-BXI3DyAX.js → subagent-registry-Cdiios3w.js} +5 -5
  148. package/dist/{system-cli-UMsMEurS.js → system-cli-C4A3Udil.js} +3 -3
  149. package/dist/{system-cli-D_EIZpBm.js → system-cli-CECNjZdB.js} +3 -3
  150. package/dist/{tui-BJB80muc.js → tui-2nWOvxxE.js} +2 -2
  151. package/dist/{tui-CriznorL.js → tui-D14a9N3F.js} +2 -2
  152. package/dist/{tui-cli-C7Q9lK8Q.js → tui-cli-B-Nl_8uj.js} +3 -3
  153. package/dist/{tui-cli-CSIdfCTR.js → tui-cli-Bg4YuRSd.js} +3 -3
  154. package/dist/{unified-runner-Di5Ca6mo.js → unified-runner-dSVvVx1y.js} +7 -2
  155. package/dist/{update-cli-JS-KTMc8.js → update-cli-B5q0ErXF.js} +12 -12
  156. package/dist/{update-cli-B0H4ITiR.js → update-cli-CSWxJ-hA.js} +13 -13
  157. package/dist/{update-runner-C17bqGvO.js → update-runner-BB5A0jnW.js} +1 -1
  158. package/dist/{update-runner-e_ChofHM.js → update-runner-jvpPI7iP.js} +1 -1
  159. package/dist/{web-Dr9gUjHz.js → web-BsEbA9Ur.js} +4 -4
  160. package/dist/{web-BTiGD3po.js → web-BuHFfZp7.js} +1 -1
  161. package/dist/{web-B3oyGSBx.js → web-DDmkA8-N.js} +1 -1
  162. package/dist/{web-Cih6rPbV.js → web-DsdmLxAP.js} +7 -7
  163. package/extensions/bluebubbles/package.json +1 -1
  164. package/extensions/copilot-proxy/package.json +1 -1
  165. package/extensions/diagnostics-otel/package.json +1 -1
  166. package/extensions/discord/package.json +1 -1
  167. package/extensions/feishu/package.json +1 -1
  168. package/extensions/google-antigravity-auth/package.json +1 -1
  169. package/extensions/google-gemini-cli-auth/package.json +1 -1
  170. package/extensions/googlechat/package.json +1 -1
  171. package/extensions/imessage/package.json +1 -1
  172. package/extensions/irc/package.json +1 -1
  173. package/extensions/learning-loop/package.json +1 -1
  174. package/extensions/line/package.json +1 -1
  175. package/extensions/llm-task/package.json +1 -1
  176. package/extensions/matrix/CHANGELOG.md +12 -0
  177. package/extensions/matrix/package.json +1 -1
  178. package/extensions/mattermost/package.json +1 -1
  179. package/extensions/memory-core/package.json +1 -1
  180. package/extensions/memory-lancedb/package.json +1 -1
  181. package/extensions/minimax-portal-auth/package.json +1 -1
  182. package/extensions/msteams/CHANGELOG.md +12 -0
  183. package/extensions/msteams/package.json +1 -1
  184. package/extensions/nextcloud-talk/package.json +1 -1
  185. package/extensions/nostr/CHANGELOG.md +12 -0
  186. package/extensions/nostr/package.json +1 -1
  187. package/extensions/open-prose/package.json +1 -1
  188. package/extensions/outlook/package.json +1 -1
  189. package/extensions/pipeline/package.json +1 -1
  190. package/extensions/signal/package.json +1 -1
  191. package/extensions/slack/package.json +1 -1
  192. package/extensions/telegram/package.json +1 -1
  193. package/extensions/tlon/package.json +1 -1
  194. package/extensions/twitch/CHANGELOG.md +12 -0
  195. package/extensions/twitch/package.json +1 -1
  196. package/extensions/voice-call/CHANGELOG.md +12 -0
  197. package/extensions/voice-call/package.json +1 -1
  198. package/extensions/whatsapp/package.json +1 -1
  199. package/extensions/zalo/CHANGELOG.md +12 -0
  200. package/extensions/zalo/package.json +1 -1
  201. package/extensions/zalouser/CHANGELOG.md +12 -0
  202. package/extensions/zalouser/package.json +1 -1
  203. package/package.json +1 -1
@@ -637,6 +637,166 @@ function closeLogsPanel() {
637
637
  stopLogsPolling();
638
638
  }
639
639
 
640
+ // ══════════════════════════════════════════════════════════════════════
641
+ // GENERIC RPC LIST PANEL — used by Overview, Channels, Sessions, etc.
642
+ // ══════════════════════════════════════════════════════════════════════
643
+
644
+ const PAGE_RPC = {
645
+ overview: { method: "system.status", label: "SYSTEM OVERVIEW", type: "object" },
646
+ channels: {
647
+ method: "channels.status",
648
+ label: "MESSAGING CHANNELS",
649
+ type: "list",
650
+ key: "channels",
651
+ },
652
+ instances: { method: "system.status", label: "AI INSTANCES", type: "object" },
653
+ sessions: { method: "sessions.list", label: "ACTIVE SESSIONS", type: "list", key: "sessions" },
654
+ usage: { method: "usage.status", label: "USAGE & TOKENS", type: "object" },
655
+ cron: { method: "cron.list", label: "SCHEDULED TASKS", type: "list", key: "jobs" },
656
+ agents: { method: "agents.list", label: "AGENT MANAGEMENT", type: "list", key: "agents" },
657
+ skills: { method: "skills.status", label: "AGENT SKILLS", type: "object" },
658
+ nodes: { method: "node.list", label: "CONNECTED DEVICES", type: "list", key: "nodes" },
659
+ };
660
+
661
+ function renderDataCard(key, value) {
662
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
663
+ const rows = Object.entries(value)
664
+ .map(([k, v]) => {
665
+ const display = v == null ? "—" : JSON.stringify(v);
666
+ return `<div class="data-card-row">
667
+ <span class="data-card-label">${escapeSettingsHtml(k)}</span>
668
+ <span class="data-card-value">${escapeSettingsHtml(display.slice(0, 200))}</span>
669
+ </div>`;
670
+ })
671
+ .join("");
672
+ return `<div class="data-card">
673
+ <div class="data-card-header">${escapeSettingsHtml(String(key))}</div>
674
+ ${rows}
675
+ </div>`;
676
+ }
677
+ return `<div class="data-card">
678
+ <div class="data-card-header">${escapeSettingsHtml(String(key))}</div>
679
+ <div class="data-card-row"><span class="data-card-value">${escapeSettingsHtml(value != null ? JSON.stringify(value) : "—")}</span></div>
680
+ </div>`;
681
+ }
682
+
683
+ function renderListData(items) {
684
+ if (!items || items.length === 0) {
685
+ return '<div class="settings-empty">No items found.</div>';
686
+ }
687
+ return items
688
+ .map((item, i) => {
689
+ const title = item.name || item.id || item.sessionKey || item.label || `Item ${i + 1}`;
690
+ return renderDataCard(title, item);
691
+ })
692
+ .join("");
693
+ }
694
+
695
+ function renderObjectData(data) {
696
+ if (!data || Object.keys(data).length === 0) {
697
+ return '<div class="settings-empty">No data available.</div>';
698
+ }
699
+ return Object.entries(data)
700
+ .map(([key, value]) => {
701
+ if (Array.isArray(value)) {
702
+ return `<div class="data-card">
703
+ <div class="data-card-header">${escapeSettingsHtml(key)} <span class="data-card-badge">${value.length}</span></div>
704
+ ${
705
+ value.length === 0
706
+ ? '<div class="data-card-row"><span class="data-card-value">Empty</span></div>'
707
+ : value
708
+ .slice(0, 20)
709
+ .map((item, i) => {
710
+ const label =
711
+ typeof item === "object" ? item.name || item.id || `#${i + 1}` : String(item);
712
+ const detail = typeof item === "object" ? JSON.stringify(item).slice(0, 150) : "";
713
+ return `<div class="data-card-row">
714
+ <span class="data-card-label">${escapeSettingsHtml(String(label))}</span>
715
+ ${detail ? `<span class="data-card-value">${escapeSettingsHtml(detail)}</span>` : ""}
716
+ </div>`;
717
+ })
718
+ .join("") +
719
+ (value.length > 20
720
+ ? `<div class="data-card-row"><span class="data-card-value">... and ${value.length - 20} more</span></div>`
721
+ : "")
722
+ }
723
+ </div>`;
724
+ }
725
+ if (typeof value === "object" && value !== null) {
726
+ return renderDataCard(key, value);
727
+ }
728
+ return `<div class="data-card-inline">
729
+ <span class="data-card-label">${escapeSettingsHtml(key)}</span>
730
+ <span class="data-card-value">${escapeSettingsHtml(value != null ? JSON.stringify(value) : "—")}</span>
731
+ </div>`;
732
+ })
733
+ .join("");
734
+ }
735
+
736
+ async function openGenericPanel(page) {
737
+ const spec = PAGE_RPC[page];
738
+ if (!spec) {
739
+ return;
740
+ }
741
+
742
+ const container = showSettingsContainer();
743
+ if (!container) {
744
+ return;
745
+ }
746
+
747
+ container.innerHTML = `
748
+ <div class="settings-panel">
749
+ <div class="settings-toolbar">
750
+ <div class="settings-toolbar-left">
751
+ <span class="settings-toolbar-label">${spec.label}</span>
752
+ </div>
753
+ <div class="settings-toolbar-right">
754
+ <button class="settings-btn" id="generic-refresh-btn">Refresh</button>
755
+ </div>
756
+ </div>
757
+ <div class="settings-content" id="generic-content">
758
+ <div class="settings-loading">Loading...</div>
759
+ </div>
760
+ </div>
761
+ `;
762
+
763
+ document
764
+ .getElementById("generic-refresh-btn")
765
+ .addEventListener("click", () => void loadGenericData(page));
766
+ await loadGenericData(page);
767
+ }
768
+
769
+ async function loadGenericData(page) {
770
+ const spec = PAGE_RPC[page];
771
+ const content = document.getElementById("generic-content");
772
+ if (!spec || !content) {
773
+ return;
774
+ }
775
+
776
+ content.innerHTML = '<div class="settings-loading">Loading...</div>';
777
+
778
+ if (!window.gateway?.connected) {
779
+ content.innerHTML = '<div class="settings-empty">Gateway not connected.</div>';
780
+ return;
781
+ }
782
+
783
+ try {
784
+ const result = await window.gateway.rpc(spec.method, {});
785
+ if (!result) {
786
+ content.innerHTML = '<div class="settings-empty">No data returned.</div>';
787
+ return;
788
+ }
789
+ if (spec.type === "list") {
790
+ const items = spec.key ? result[spec.key] : Array.isArray(result) ? result : [];
791
+ content.innerHTML = renderListData(items);
792
+ } else {
793
+ content.innerHTML = renderObjectData(result);
794
+ }
795
+ } catch (err) {
796
+ content.innerHTML = `<div class="settings-empty">Error: ${escapeSettingsHtml(err.message)}</div>`;
797
+ }
798
+ }
799
+
640
800
  // ══════════════════════════════════════════════════════════════════════
641
801
  // PUBLIC API — called by menu.js
642
802
  // ══════════════════════════════════════════════════════════════════════
@@ -660,8 +820,12 @@ window.openNativeSettings = function (page) {
660
820
  openLogsPanel();
661
821
  break;
662
822
  default:
663
- console.warn("[settings] unknown page:", page);
664
- return;
823
+ if (PAGE_RPC[page]) {
824
+ void openGenericPanel(page);
825
+ } else {
826
+ console.warn("[settings] unknown page:", page);
827
+ }
828
+ break;
665
829
  }
666
830
  };
667
831
 
@@ -6,8 +6,8 @@ import "./agent-scope-D-jRCY0d.js";
6
6
  import "./github-copilot-token-DuFIqfeC.js";
7
7
  import "./manifest-registry-Czr39pxG.js";
8
8
  import "./config-DHBLS1Hl.js";
9
- import "./client-DMBZpU6X.js";
10
- import "./call-BcE47FtD.js";
9
+ import "./client-T3qcxXru.js";
10
+ import "./call-DIDhYlsx.js";
11
11
  import "./message-channel-C9dERklz.js";
12
12
  import "./pairing-token-Byh6drgn.js";
13
13
  import { n as listChannelPlugins } from "./plugins-CwSlLxM8.js";
@@ -18,7 +18,7 @@ import { n as formatDurationHuman } from "./format-duration-BOC0O2XQ.js";
18
18
  import { i as parseAbsoluteTimeMs, n as resolveCronStaggerMs } from "./stagger-CQar2eKe.js";
19
19
  import { t as formatDocsLink } from "./links-DlWpl9Yv.js";
20
20
  import "./progress-BAHiAaDW.js";
21
- import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-DfZSz5JF.js";
21
+ import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-BkB6xEaM.js";
22
22
  import { n as parsePositiveIntOrUndefined } from "./helpers-ITexi1_a.js";
23
23
 
24
24
  //#region src/cli/cron-cli/shared.ts
@@ -16,15 +16,15 @@ import { n as listChannelPlugins } from "./plugins-DKDeQZF0.js";
16
16
  import "./accounts-DDuIpcln.js";
17
17
  import "./bindings-DFaVVCsf.js";
18
18
  import "./logging-w5jq5901.js";
19
- import "./client-CQSyCS4M.js";
20
- import "./call-CJaS1iRF.js";
19
+ import "./client-jI1oE0_k.js";
20
+ import "./call-CFhGTNtt.js";
21
21
  import "./pairing-token-CX3NN_qj.js";
22
22
  import { t as formatDocsLink } from "./links-3i1eUga4.js";
23
23
  import "./progress-jIePzvGA.js";
24
24
  import { n as formatDurationHuman } from "./format-duration-D0B0Uo-I.js";
25
25
  import { i as parseAbsoluteTimeMs, n as resolveCronStaggerMs } from "./stagger-BUClb97_.js";
26
26
  import { n as parsePositiveIntOrUndefined } from "./helpers-By2rxBQ5.js";
27
- import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-BxkKeCZ0.js";
27
+ import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-5aGm8LwU.js";
28
28
 
29
29
  //#region src/cli/cron-cli/shared.ts
30
30
  const getCronChannelOptions = () => ["last", ...listChannelPlugins().map((plugin) => plugin.id)].join("|");
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { At as getResolvedLoggerSettings, Dt as theme, Et as isRich, Tt as colorize, Ut as resolveGatewayPort, Wt as resolveIsNixMode, Yt as resolveStateDir, _ as defaultRuntime, lt as shortenHomePath, zt as resolveConfigPath } from "./entry.js";
3
3
  import { t as formatCliCommand } from "./command-format-BtYOfWxC.js";
4
4
  import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot, r as createConfigIO } from "./config-DHBLS1Hl.js";
5
- import { n as callGateway } from "./call-BcE47FtD.js";
5
+ import { n as callGateway } from "./call-DIDhYlsx.js";
6
6
  import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-C9dERklz.js";
7
7
  import { l as resolveGatewayBindHost } from "./net-DZ5Ayk-W.js";
8
8
  import { n as pickPrimaryTailnetIPv4 } from "./tailnet-Cmumpn76.js";
@@ -11,7 +11,7 @@ import { i as formatPortDiagnostics, n as inspectPortUsage } from "./ports-2xFXb
11
11
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-CPeVoSXJ.js";
12
12
  import { t as formatDocsLink } from "./links-DlWpl9Yv.js";
13
13
  import { n as withProgress } from "./progress-BAHiAaDW.js";
14
- import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-_pit1NZW.js";
14
+ import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-DASpwgat.js";
15
15
  import { n as isWSLEnv } from "./wsl-jdLWdiKy.js";
16
16
  import { n as inheritOptionFromParent } from "./command-options-6wdtBBWB.js";
17
17
  import { i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-CfRwa6qh.js";
@@ -9,10 +9,10 @@ import { n as pickPrimaryTailnetIPv4 } from "./tailnet-B2SPYrh4.js";
9
9
  import { u as resolveGatewayBindHost } from "./ws-C7EXRv8z.js";
10
10
  import { a as resolveGatewayAuth } from "./auth-B741uFtk.js";
11
11
  import { a as inspectPortUsage, s as formatPortDiagnostics } from "./ports-BOmtxoTv.js";
12
- import { n as callGateway } from "./call-CJaS1iRF.js";
12
+ import { n as callGateway } from "./call-CFhGTNtt.js";
13
13
  import { t as formatDocsLink } from "./links-3i1eUga4.js";
14
14
  import { n as withProgress } from "./progress-jIePzvGA.js";
15
- import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-ZmZYzlq3.js";
15
+ import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-Ci50bfCW.js";
16
16
  import { n as isWSLEnv } from "./wsl-C4424szg.js";
17
17
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName } from "./constants-C8_BLnaW.js";
18
18
  import { n as inheritOptionFromParent } from "./command-options-BtDai3oC.js";
@@ -10619,6 +10619,10 @@ const SessionsResetParamsSchema = Type.Object({
10619
10619
  key: NonEmptyString,
10620
10620
  reason: Type.Optional(Type.Union([Type.Literal("new"), Type.Literal("reset")]))
10621
10621
  }, { additionalProperties: false });
10622
+ const SessionsRestoreParamsSchema = Type.Object({
10623
+ key: NonEmptyString,
10624
+ targetFile: NonEmptyString
10625
+ }, { additionalProperties: false });
10622
10626
  const SessionsDeleteParamsSchema = Type.Object({
10623
10627
  key: NonEmptyString,
10624
10628
  deleteTranscript: Type.Optional(Type.Boolean()),
@@ -10750,6 +10754,7 @@ const validateSessionsPreviewParams = ajv.compile(SessionsPreviewParamsSchema);
10750
10754
  const validateSessionsResolveParams = ajv.compile(SessionsResolveParamsSchema);
10751
10755
  const validateSessionsPatchParams = ajv.compile(SessionsPatchParamsSchema);
10752
10756
  const validateSessionsResetParams = ajv.compile(SessionsResetParamsSchema);
10757
+ const validateSessionsRestoreParams = ajv.compile(SessionsRestoreParamsSchema);
10753
10758
  const validateSessionsDeleteParams = ajv.compile(SessionsDeleteParamsSchema);
10754
10759
  const validateSessionsCompactParams = ajv.compile(SessionsCompactParamsSchema);
10755
10760
  const validateSessionsUsageParams = ajv.compile(SessionsUsageParamsSchema);
@@ -5,8 +5,8 @@ import "./agent-scope-D-jRCY0d.js";
5
5
  import "./github-copilot-token-DuFIqfeC.js";
6
6
  import "./manifest-registry-Czr39pxG.js";
7
7
  import "./config-DHBLS1Hl.js";
8
- import { Ft as approveDevicePairing, Rt as listDevicePairing, Wt as summarizeDeviceTokens } from "./client-DMBZpU6X.js";
9
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-BcE47FtD.js";
8
+ import { Gt as summarizeDeviceTokens, It as approveDevicePairing, zt as listDevicePairing } from "./client-T3qcxXru.js";
9
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-DIDhYlsx.js";
10
10
  import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-C9dERklz.js";
11
11
  import "./pairing-token-Byh6drgn.js";
12
12
  import { n as isLoopbackHost } from "./net-DZ5Ayk-W.js";
@@ -12,8 +12,8 @@ import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-
12
12
  import "./config-CHwyw6l5.js";
13
13
  import "./manifest-registry-C4BxOMWX.js";
14
14
  import { r as isLoopbackHost } from "./ws-C7EXRv8z.js";
15
- import { Ft as approveDevicePairing, Rt as listDevicePairing, Wt as summarizeDeviceTokens } from "./client-CQSyCS4M.js";
16
- import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-CJaS1iRF.js";
15
+ import { Gt as summarizeDeviceTokens, It as approveDevicePairing, zt as listDevicePairing } from "./client-jI1oE0_k.js";
16
+ import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-CFhGTNtt.js";
17
17
  import "./pairing-token-CX3NN_qj.js";
18
18
  import { n as formatTimeAgo } from "./format-relative-BXoxEQVN.js";
19
19
  import { n as withProgress } from "./progress-jIePzvGA.js";
@@ -1,7 +1,7 @@
1
1
  import { r as resolveCliName } from "./command-format-BtYOfWxC.js";
2
2
  import { t as resolveSymiPackageRoot } from "./symi-root-BNuQ4lAT.js";
3
3
  import { t as note } from "./note-DDecZomM.js";
4
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-GqPGf3Kq.js";
4
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-DCO3bMjl.js";
5
5
  import { spawnSync } from "node:child_process";
6
6
  import path from "node:path";
7
7
 
@@ -1,7 +1,7 @@
1
1
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
2
2
  import { r as resolveCliName } from "./command-format-COaS-S7B.js";
3
3
  import { t as note } from "./note-DeHoW7xO.js";
4
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-BmYBAxqM.js";
4
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-LYcBopv1.js";
5
5
  import path from "node:path";
6
6
  import { spawnSync } from "node:child_process";
7
7
 
package/dist/entry.js CHANGED
@@ -2500,7 +2500,7 @@ if (!ensureExperimentalWarningSuppressed()) {
2500
2500
  applyCliProfileEnv({ profile: parsed.profile });
2501
2501
  process$1.argv = parsed.argv;
2502
2502
  }
2503
- import("./run-main-DkcjdsAo.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2503
+ import("./run-main-e6LI0zRf.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
2504
2504
  console.error("[symi] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
2505
2505
  process$1.exitCode = 1;
2506
2506
  });
@@ -11,19 +11,19 @@ import "./env-DPCHYPeH.js";
11
11
  import "./message-channel-aT-I_DTX.js";
12
12
  import "./config-CHwyw6l5.js";
13
13
  import "./manifest-registry-C4BxOMWX.js";
14
- import "./client-CQSyCS4M.js";
15
- import "./call-CJaS1iRF.js";
14
+ import "./client-jI1oE0_k.js";
15
+ import "./call-CFhGTNtt.js";
16
16
  import "./pairing-token-CX3NN_qj.js";
17
17
  import { n as formatTimeAgo } from "./format-relative-BXoxEQVN.js";
18
18
  import { t as formatDocsLink } from "./links-3i1eUga4.js";
19
19
  import "./progress-jIePzvGA.js";
20
20
  import { c as readExecApprovalsSnapshot, p as saveExecApprovals } from "./exec-approvals-Kn31mBcW.js";
21
- import { n as callGatewayFromCli } from "./gateway-rpc-BxkKeCZ0.js";
21
+ import { n as callGatewayFromCli } from "./gateway-rpc-5aGm8LwU.js";
22
22
  import "./systemd-riq8uNJQ.js";
23
23
  import "./service-Cl74hx8J.js";
24
24
  import { t as renderTable } from "./table-BTgkRafz.js";
25
25
  import { t as describeUnknownError } from "./shared-BJvwnR5z.js";
26
- import { i as resolveNodeId, r as nodesCallOpts } from "./rpc-BfhojW8g.js";
26
+ import { i as resolveNodeId, r as nodesCallOpts } from "./rpc-_E0CZJKf.js";
27
27
  import JSON5 from "json5";
28
28
  import fs from "node:fs/promises";
29
29
 
@@ -5,20 +5,20 @@ import "./agent-scope-D-jRCY0d.js";
5
5
  import "./github-copilot-token-DuFIqfeC.js";
6
6
  import "./manifest-registry-Czr39pxG.js";
7
7
  import "./config-DHBLS1Hl.js";
8
- import "./client-DMBZpU6X.js";
9
- import "./call-BcE47FtD.js";
8
+ import "./client-T3qcxXru.js";
9
+ import "./call-DIDhYlsx.js";
10
10
  import "./message-channel-C9dERklz.js";
11
11
  import "./pairing-token-Byh6drgn.js";
12
12
  import { n as formatTimeAgo } from "./format-relative-DX-rh76l.js";
13
13
  import { c as readExecApprovalsSnapshot, p as saveExecApprovals } from "./exec-approvals-BhFq_Iv9.js";
14
14
  import { t as formatDocsLink } from "./links-DlWpl9Yv.js";
15
15
  import "./progress-BAHiAaDW.js";
16
- import { n as callGatewayFromCli } from "./gateway-rpc-DfZSz5JF.js";
16
+ import { n as callGatewayFromCli } from "./gateway-rpc-BkB6xEaM.js";
17
17
  import "./systemd-DlMdyFDY.js";
18
18
  import "./service-Cm9j9WzQ.js";
19
19
  import { t as renderTable } from "./table-D01d2GuY.js";
20
20
  import { t as describeUnknownError } from "./shared-BtG9rny3.js";
21
- import { i as resolveNodeId, r as nodesCallOpts } from "./rpc-BjLadgzu.js";
21
+ import { i as resolveNodeId, r as nodesCallOpts } from "./rpc--E7i90bk.js";
22
22
  import JSON5 from "json5";
23
23
  import fs from "node:fs/promises";
24
24
 
@@ -7,7 +7,7 @@ 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, p as runEmbeddedPiAgent } from "./pi-embedded-CziuxRtW.js";
10
+ import { D as resolveAgentTimeoutMs, p as runEmbeddedPiAgent } from "./pi-embedded-DG6dQt8v.js";
11
11
  import "./plugins-71oIavrF.js";
12
12
  import "./accounts-DDEyGwby.js";
13
13
  import "./bindings-DYVakimr.js";
@@ -1,7 +1,7 @@
1
1
  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-Cqn-zk3M.js";
2
2
  import { B as theme, E as truncateUtf16Safe, H as getLogger, P as setVerbose, R as colorize, S as shortenHomePath, U as getResolvedLoggerSettings, V as getChildLogger, c as ensureDir, t as CONFIG_DIR, y as resolveUserPath, z as isRich } from "./utils-B-0b9bGM.js";
3
3
  import { d as supportsXHighThinking, l as normalizeVerboseLevel, s as normalizeThinkLevel } from "./thinking-EAliFiVK.js";
4
- import { $ as buildDeliveryFromLegacyPayload, A as emitGatewayRestart, An as initSubagentRegistry, Ar as extractImageContentFromSource, B as summarizeRestartSentinel, Bn as registerAgentRunContext, Ct as requestBodyErrorToText, Dr as DEFAULT_INPUT_MAX_REDIRECTS, E as resetDirectoryCache, Er as DEFAULT_INPUT_IMAGE_MIMES, Et as agentCommand, F as setPreRestartDeferralCheck, Fn as readLatestAssistantReply, Gt as getCliSessionId, I as consumeRestartSentinel, In as clearAgentRunContext, J as normalizeOptionalSessionKey, K as inferLegacyName, Kt as setCliSessionId, Ln as emitAgentEvent, Lt as createDefaultDeps, M as markGatewaySigusr1RestartHandled, Mr as resolveInputFileLimits, Mt as resolveOutboundTarget, Nt as resolveSessionDeliveryTarget, O as consumeGatewaySigusr1RestartAuthorization, On as countActiveDescendantRuns, Or as DEFAULT_INPUT_TIMEOUT_MS, P as setGatewaySigusr1RestartPolicy, Pn as runSubagentAnnounceFlow, Pr as resolveAgentTimeoutMs, Pt as createOutboundSendDeps, Q as migrateLegacyCronPayload, R as formatRestartSentinelMessage, Rn as getAgentRunContext, St as readJsonBodyWithLimit, Tr as DEFAULT_INPUT_IMAGE_MAX_BYTES, Tt as sleepWithAbort, U as normalizeHttpWebhookUrl, Ut as resolveModelProfile, Vt as getActiveEmbeddedRunCount, Wt as runWithModelFallback, X as normalizePayloadToSystemText, Xt as resolveAgentAvatar, Y as normalizeOptionalText, Z as normalizeRequiredName, _ as loadCombinedSessionStoreForGateway, ar as setCommandLaneConcurrency, cn as buildHistoryContextFromEntries, cr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, d as createSymiTools, en as buildSafeExternalPrompt, et as hasLegacyDeliveryHints, f as resolveAnnounceTargetFromKey, fr as stripHeartbeatToken, ft as loadSymiPlugins, g as listSessionsFromStore, hn as getTotalPendingReplies, i as resolveCronStyleNow, ir as resetAllLanes, j as isGatewaySigusr1RestartExternallyAllowed, jn as listDescendantRunsForRequester, jr as normalizeMimeList, k as deferGatewayRestartUntilIdle, kn as countActiveRunsForSession, kr as extractFileContentFromSource, l as applyToolPolicyPipeline, nn as getHookType, or as waitForActiveTasks, pr as lookupContextTokens, q as normalizeOptionalAgentId, qt as runCliAgent, rn as isExternalHookSession, rr as getTotalQueueSize, sr as CommandLane, st as requestHeartbeatNow, tn as detectSuspiciousPatterns, tr as getActiveTaskCount, tt as stripLegacyDeliveryFields, u as buildDefaultToolPolicyPipelineSteps, ut as getPluginToolMeta, v as loadSessionEntry, w as resolveOutboundSessionRoute, wt as computeBackoff, xr as enqueueSystemEvent, xt as handleSlackHttpRequest, zn as onAgentEvent, zt as runAgentTurn } from "./reply-C68F3IMq.js";
4
+ import { $ as buildDeliveryFromLegacyPayload, A as emitGatewayRestart, An as initSubagentRegistry, Ar as extractImageContentFromSource, B as summarizeRestartSentinel, Bn as registerAgentRunContext, Ct as requestBodyErrorToText, Dr as DEFAULT_INPUT_MAX_REDIRECTS, E as resetDirectoryCache, Er as DEFAULT_INPUT_IMAGE_MIMES, Et as agentCommand, F as setPreRestartDeferralCheck, Fn as readLatestAssistantReply, Gt as getCliSessionId, I as consumeRestartSentinel, In as clearAgentRunContext, J as normalizeOptionalSessionKey, K as inferLegacyName, Kt as setCliSessionId, Ln as emitAgentEvent, Lt as createDefaultDeps, M as markGatewaySigusr1RestartHandled, Mr as resolveInputFileLimits, Mt as resolveOutboundTarget, Nt as resolveSessionDeliveryTarget, O as consumeGatewaySigusr1RestartAuthorization, On as countActiveDescendantRuns, Or as DEFAULT_INPUT_TIMEOUT_MS, P as setGatewaySigusr1RestartPolicy, Pn as runSubagentAnnounceFlow, Pr as resolveAgentTimeoutMs, Pt as createOutboundSendDeps, Q as migrateLegacyCronPayload, R as formatRestartSentinelMessage, Rn as getAgentRunContext, St as readJsonBodyWithLimit, Tr as DEFAULT_INPUT_IMAGE_MAX_BYTES, Tt as sleepWithAbort, U as normalizeHttpWebhookUrl, Ut as resolveModelProfile, Vt as getActiveEmbeddedRunCount, Wt as runWithModelFallback, X as normalizePayloadToSystemText, Xt as resolveAgentAvatar, Y as normalizeOptionalText, Z as normalizeRequiredName, _ as loadCombinedSessionStoreForGateway, ar as setCommandLaneConcurrency, cn as buildHistoryContextFromEntries, cr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, d as createSymiTools, en as buildSafeExternalPrompt, et as hasLegacyDeliveryHints, f as resolveAnnounceTargetFromKey, fr as stripHeartbeatToken, ft as loadSymiPlugins, g as listSessionsFromStore, hn as getTotalPendingReplies, i as resolveCronStyleNow, ir as resetAllLanes, j as isGatewaySigusr1RestartExternallyAllowed, jn as listDescendantRunsForRequester, jr as normalizeMimeList, k as deferGatewayRestartUntilIdle, kn as countActiveRunsForSession, kr as extractFileContentFromSource, l as applyToolPolicyPipeline, nn as getHookType, or as waitForActiveTasks, pr as lookupContextTokens, q as normalizeOptionalAgentId, qt as runCliAgent, rn as isExternalHookSession, rr as getTotalQueueSize, sr as CommandLane, st as requestHeartbeatNow, tn as detectSuspiciousPatterns, tr as getActiveTaskCount, tt as stripLegacyDeliveryFields, u as buildDefaultToolPolicyPipelineSteps, ut as getPluginToolMeta, v as loadSessionEntry, w as resolveOutboundSessionRoute, wt as computeBackoff, xr as enqueueSystemEvent, xt as handleSlackHttpRequest, zn as onAgentEvent, zt as runAgentTurn } from "./reply-CMb-m0ZJ.js";
5
5
  import { S as parseAgentSessionKey, c as normalizeMainKey, f as toAgentRequestSessionKey, l as resolveAgentIdFromSessionKey, m as DEFAULT_ACCOUNT_ID, p as toAgentStoreSessionKey, r as buildAgentMainSessionKey, s as normalizeAgentId, t as DEFAULT_AGENT_ID, x as isSubagentSessionKey, y as isCronRunSessionKey } from "./session-key-DCt45XZa.js";
6
6
  import { r as matchesSkillFilter, t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
7
7
  import { C as createInternalHookEvent, S as clearInternalHooks, T as triggerInternalHook, m as createEmptyPluginRegistry, r as DEFAULT_CHAT_CHANNEL, w as registerInternalHook } from "./registry-Cja8eT7G.js";
@@ -18,7 +18,7 @@ import "./send-CZr1hVHY.js";
18
18
  import { B as resolveAgentMaxConcurrent, C as parseDurationMs, H as VERSION, U as resolveRuntimeServiceVersion, V as resolveSubagentMaxConcurrent, i as loadConfig, l as writeConfigFile, n as migrateLegacyConfig, o as readConfigFileSnapshot, r as createConfigIO } from "./config-CHwyw6l5.js";
19
19
  import { l as isTestDefaultMemorySlotDisabled } from "./manifest-registry-C4BxOMWX.js";
20
20
  import { a as isPathInsideWithRealpath } from "./legacy-names-Be3msDZo.js";
21
- import { d as registerUnhandledRejectionHandler } from "./runner-CUglpiFP.js";
21
+ import { d as registerUnhandledRejectionHandler } from "./runner-BSzJIT-z.js";
22
22
  import "./image-D9uvDTrc.js";
23
23
  import "./models-config-qyOXrOli.js";
24
24
  import "./pi-model-discovery-4uUnLc3n.js";
@@ -59,7 +59,7 @@ import { t as fetchWithSsrFGuard } from "./fetch-guard-DOPkVbh3.js";
59
59
  import "./api-key-rotation-CzuPlV2t.js";
60
60
  import "./local-roots-aAFLQGkY.js";
61
61
  import "./sqlite-Dx3J_aSE.js";
62
- import { n as loadModelCatalog } from "./model-catalog-DvBJ8pMD.js";
62
+ import { n as loadModelCatalog } from "./model-catalog-DsFLN-ua.js";
63
63
  import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-BuceUQDl.js";
64
64
  import { r as getMachineDisplayName } from "./with-timeout-gmK6RciS.js";
65
65
  import { C as getGlobalHookRunner, T as runGlobalGatewayStopSafely, t as deliverOutboundPayloads } from "./deliver-CWR_98sK.js";
@@ -78,8 +78,8 @@ import "./ir-DZam9q5M.js";
78
78
  import "./render-CXDO_kgw.js";
79
79
  import { r as isRestartEnabled } from "./commands-BNLCWX6e.js";
80
80
  import "./commands-registry-BT0-zzs3.js";
81
- import { At as ErrorCodes, Ft as approveDevicePairing, Gt as updatePairedDeviceMetadata, It as ensureDeviceToken, Kt as verifyDeviceToken, Lt as getPairedDevice, Pt as buildDeviceAuthPayload, Qt as verifyDeviceSignature, R as validateExecApprovalRequestParams, Vt as requestDevicePairing, Yt as deriveDeviceIdFromPublicKey, Zt as normalizeDevicePublicKeyBase64Url, at as validateRequestFrame, jt as errorShape, kt as PROTOCOL_VERSION, n as formatValidationErrors, qt as roleScopesAllow, w as validateConnectParams, z as validateExecApprovalResolveParams } from "./client-CQSyCS4M.js";
82
- import { f as loadGatewayTlsRuntime$1, n as callGateway } from "./call-CJaS1iRF.js";
81
+ import { $t as verifyDeviceSignature, At as PROTOCOL_VERSION, Ft as buildDeviceAuthPayload, Ht as requestDevicePairing, It as approveDevicePairing, Jt as roleScopesAllow, Kt as updatePairedDeviceMetadata, Lt as ensureDeviceToken, Mt as errorShape, Qt as normalizeDevicePublicKeyBase64Url, R as validateExecApprovalRequestParams, Rt as getPairedDevice, Xt as deriveDeviceIdFromPublicKey, at as validateRequestFrame, jt as ErrorCodes, n as formatValidationErrors, qt as verifyDeviceToken, w as validateConnectParams, z as validateExecApprovalResolveParams } from "./client-jI1oE0_k.js";
82
+ import { f as loadGatewayTlsRuntime$1, n as callGateway } from "./call-CFhGTNtt.js";
83
83
  import "./pairing-token-CX3NN_qj.js";
84
84
  import "./channel-activity-BOiuJS3t.js";
85
85
  import "./fetch-DTNGXEzX.js";
@@ -99,7 +99,7 @@ import { c as hasNonzeroUsage, s as deriveSessionTotalTokens } from "./session-c
99
99
  import "./outbound-attachment-mQQiYZ3C.js";
100
100
  import "./delivery-queue-CxuV9EeG.js";
101
101
  import "./send-DWYkPSUs.js";
102
- import { C as normalizeControlUiBasePath, S as buildControlUiAvatarUrl, c as handleReset, w as resolveAssistantAvatarUrl, x as CONTROL_UI_AVATAR_PREFIX } from "./onboard-helpers-ZmZYzlq3.js";
102
+ import { C as normalizeControlUiBasePath, S as buildControlUiAvatarUrl, c as handleReset, w as resolveAssistantAvatarUrl, x as CONTROL_UI_AVATAR_PREFIX } from "./onboard-helpers-Ci50bfCW.js";
103
103
  import "./prompt-style-8JqOYj0q.js";
104
104
  import "./pairing-labels-2S6x2UoV.js";
105
105
  import { n as formatTokenCount, r as formatUsd } from "./usage-format-BzKEDn0q.js";
@@ -128,27 +128,27 @@ import "./service-Cl74hx8J.js";
128
128
  import "./lifecycle-core-D6LYXpFj.js";
129
129
  import "./systemd-hints-BR6gChwm.js";
130
130
  import { t as parsePort$1 } from "./parse-port-Vm8F7Kus.js";
131
- import { n as addGatewayServiceCommands } from "./daemon-cli-DscwlsKW.js";
131
+ import { n as addGatewayServiceCommands } from "./daemon-cli-CJJ8Vueq.js";
132
132
  import "./diagnostics-BAMlsVVX.js";
133
133
  import "./table-BTgkRafz.js";
134
134
  import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-DzLerlJb.js";
135
135
  import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-BJvwnR5z.js";
136
- import { c as probeGateway, s as resolveNodeCommandAllowlist } from "./audit-CrITRV6w.js";
136
+ import { c as probeGateway, s as resolveNodeCommandAllowlist } from "./audit-DCDNPsGr.js";
137
137
  import { t as discoverGatewayBeacons } from "./bonjour-discovery-BHTF5p0X.js";
138
- import { r as pickGatewaySelfPresence } from "./status-ITRlj7e_.js";
139
- import { c as startHeartbeatRunner, i as styleHealthChannelLine, n as getHealthSnapshot, o as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-pFcca1cU.js";
138
+ import { r as pickGatewaySelfPresence } from "./status-CXib3MSE.js";
139
+ import { c as startHeartbeatRunner, i as styleHealthChannelLine, n as getHealthSnapshot, o as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-DjUN4OFC.js";
140
140
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Z947tKLt.js";
141
141
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-CtckACbb.js";
142
- import { t as runOnboardingWizard } from "./onboarding-B9RTmYiC.js";
143
- import { _ as getHandshakeTimeoutMs, a as DEFAULT_ASSISTANT_IDENTITY, b as resolveCronRunLogPath, c as upsertPresence, d as DEDUPE_MAX, f as DEDUPE_TTL_MS, g as TICK_INTERVAL_MS, h as MAX_PAYLOAD_BYTES, i as safeParseJson, l as formatError, m as MAX_BUFFERED_BYTES, n as handleGatewayRequest, o as resolveAssistantIdentity, p as HEALTH_REFRESH_INTERVAL_MS, r as broadcastPresenceSnapshot, s as listSystemPresence, t as coreGatewayHandlers, u as loadVoiceWakeConfig, v as abortChatRunById, x as startGatewayConfigReloader, y as appendCronRunLog } from "./server-methods-n5oCz2e0.js";
144
- import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-Bmd6SdxC.js";
142
+ import { t as runOnboardingWizard } from "./onboarding-Ban5B7QD.js";
143
+ import { _ as getHandshakeTimeoutMs, a as DEFAULT_ASSISTANT_IDENTITY, b as resolveCronRunLogPath, c as upsertPresence, d as DEDUPE_MAX, f as DEDUPE_TTL_MS, g as TICK_INTERVAL_MS, h as MAX_PAYLOAD_BYTES, i as safeParseJson, l as formatError, m as MAX_BUFFERED_BYTES, n as handleGatewayRequest, o as resolveAssistantIdentity, p as HEALTH_REFRESH_INTERVAL_MS, r as broadcastPresenceSnapshot, s as listSystemPresence, t as coreGatewayHandlers, u as loadVoiceWakeConfig, v as abortChatRunById, x as startGatewayConfigReloader, y as appendCronRunLog } from "./server-methods-D5X0JrXg.js";
144
+ import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-BwHZ2F7j.js";
145
145
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-Bv0M7ka7.js";
146
- import "./agents.config-BKjYekzK.js";
146
+ import "./agents.config-DP7J1Yxi.js";
147
147
  import "./dm-policy-shared-Bh3TbexU.js";
148
148
  import "./node-service-Cxz4e-Qd.js";
149
149
  import "./status.update-DtwCUTf-.js";
150
150
  import "./skills-install-D67isO1L.js";
151
- import "./update-runner-C17bqGvO.js";
151
+ import "./update-runner-BB5A0jnW.js";
152
152
  import { t as resolveAgentSessionDirs } from "./session-dirs-DWgIYmAt.js";
153
153
  import { i as shouldIncludeHook, r as resolveHookConfig, t as loadWorkspaceHookEntries } from "./workspace-CYxdoAlY.js";
154
154
  import { fileURLToPath, pathToFileURL } from "node:url";
@@ -5595,6 +5595,7 @@ const BASE_METHODS = [
5595
5595
  "sessions.preview",
5596
5596
  "sessions.patch",
5597
5597
  "sessions.reset",
5598
+ "sessions.restore",
5598
5599
  "sessions.delete",
5599
5600
  "sessions.compact",
5600
5601
  "last-heartbeat",
@@ -11845,7 +11846,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
11845
11846
  });
11846
11847
  let glassUiBridgeCleanup = null;
11847
11848
  if (!minimalTestGateway) {
11848
- const { createGlassUiBridge } = await import("./glass-ui-ws-z-ryIbt7.js");
11849
+ const { createGlassUiBridge } = await import("./glass-ui-ws-cB1R6KOh.js");
11849
11850
  glassUiBridgeCleanup = createGlassUiBridge({
11850
11851
  wss: glassUiWss,
11851
11852
  context: gatewayRequestContext,
@@ -14,14 +14,14 @@ import { r as buildWorkspaceSkillSnapshot } from "./skills-hAdgFdrv.js";
14
14
  import { l as isTestDefaultMemorySlotDisabled } from "./manifest-registry-Czr39pxG.js";
15
15
  import "./skills-status-DKXJ-tbi.js";
16
16
  import { B as resolveAgentMaxConcurrent, C as parseDurationMs, H as VERSION, U as resolveRuntimeServiceVersion, V as resolveSubagentMaxConcurrent, i as loadConfig, l as writeConfigFile, n as migrateLegacyConfig, o as readConfigFileSnapshot, r as createConfigIO } from "./config-DHBLS1Hl.js";
17
- import { At as ErrorCodes, Ft as approveDevicePairing, Gt as updatePairedDeviceMetadata, It as ensureDeviceToken, Kt as verifyDeviceToken, Lt as getPairedDevice, Pt as buildDeviceAuthPayload, Qt as verifyDeviceSignature, R as validateExecApprovalRequestParams, Vt as requestDevicePairing, Yt as deriveDeviceIdFromPublicKey, Zt as normalizeDevicePublicKeyBase64Url, at as validateRequestFrame, jt as errorShape, kt as PROTOCOL_VERSION, n as formatValidationErrors, qt as roleScopesAllow, w as validateConnectParams, z as validateExecApprovalResolveParams } from "./client-DMBZpU6X.js";
18
- import { f as loadGatewayTlsRuntime$1, n as callGateway } from "./call-BcE47FtD.js";
17
+ import { $t as verifyDeviceSignature, At as PROTOCOL_VERSION, Ft as buildDeviceAuthPayload, Ht as requestDevicePairing, It as approveDevicePairing, Jt as roleScopesAllow, Kt as updatePairedDeviceMetadata, Lt as ensureDeviceToken, Mt as errorShape, Qt as normalizeDevicePublicKeyBase64Url, R as validateExecApprovalRequestParams, Rt as getPairedDevice, Xt as deriveDeviceIdFromPublicKey, at as validateRequestFrame, jt as ErrorCodes, n as formatValidationErrors, qt as verifyDeviceToken, w as validateConnectParams, z as validateExecApprovalResolveParams } from "./client-T3qcxXru.js";
18
+ import { f as loadGatewayTlsRuntime$1, n as callGateway } from "./call-DIDhYlsx.js";
19
19
  import { _ as normalizeGatewayClientMode, h as GATEWAY_CLIENT_NAMES, l as normalizeMessageChannel, m as GATEWAY_CLIENT_MODES, n as isDeliverableMessageChannel, p as GATEWAY_CLIENT_IDS, r as isGatewayCliClient, s as isWebchatClient } from "./message-channel-C9dERklz.js";
20
20
  import "./pairing-token-Byh6drgn.js";
21
21
  import { t as safeEqualSecret } from "./secret-equal-CbntzRkh.js";
22
22
  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";
23
23
  import { n as pickPrimaryTailnetIPv4, r as pickPrimaryTailnetIPv6 } from "./tailnet-Cmumpn76.js";
24
- import { $ as getCliSessionId, $t as setPreRestartDeferralCheck, An as DEFAULT_INPUT_TIMEOUT_MS, At as normalizeOptionalSessionKey, Bt as buildSafeExternalPrompt, Cn as enqueueSystemEvent, Cr as onAgentEvent, Dn as DEFAULT_INPUT_IMAGE_MAX_BYTES, E as createDefaultDeps, F as buildHistoryContextFromEntries, Ft as buildDeliveryFromLegacyPayload, H as getTotalPendingReplies, Ht as getHookType, In as resolveAgentTimeoutMs, It as hasLegacyDeliveryHints, J as runAgentTurn, Jt as emitGatewayRestart, Kt as consumeGatewaySigusr1RestartAuthorization, Lt as stripLegacyDeliveryFields, Mn as extractImageContentFromSource, Mt as normalizePayloadToSystemText, Nn as normalizeMimeList, Nt as normalizeRequiredName, O as resolveAgentAvatar, On as DEFAULT_INPUT_IMAGE_MIMES, Ot as inferLegacyName, Pn as resolveInputFileLimits, Pt as migrateLegacyCronPayload, Q as resolveModelProfile, Qt as setGatewaySigusr1RestartPolicy, Sr as getAgentRunContext, St as summarizeRestartSentinel, T as createOutboundSendDeps, Tt as normalizeHttpWebhookUrl, Ut as isExternalHookSession, Vt as detectSuspiciousPatterns, X as getActiveEmbeddedRunCount, Xt as markGatewaySigusr1RestartHandled, Yt as isGatewaySigusr1RestartExternallyAllowed, _ as readJsonBodyWithLimit, at as resolveAnnounceTargetFromKey, b as sleepWithAbort, br as clearAgentRunContext, bt as formatRestartSentinelMessage, cr as getActiveTaskCount, ct as resolveOutboundSessionRoute, dn as requestHeartbeatNow, dr as resetAllLanes, dt as resolveOutboundTarget, et as setCliSessionId, f as getPluginToolMeta, fr as setCommandLaneConcurrency, ft as resolveSessionDeliveryTarget, g as handleSlackHttpRequest, gt as runWithModelFallback, hr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, i as listDescendantRunsForRequester, it as readLatestAssistantReply, jn as extractFileContentFromSource, jt as normalizeOptionalText, kn as DEFAULT_INPUT_MAX_REDIRECTS, kt as normalizeOptionalAgentId, l as applyToolPolicyPipeline, m as loadSymiPlugins, mr as CommandLane, mt as resetDirectoryCache, n as countActiveRunsForSession, pr as waitForActiveTasks, q as resolveCronStyleNow, qt as deferGatewayRestartUntilIdle, r as initSubagentRegistry, rt as createSymiTools, s as runSubagentAnnounceFlow, t as countActiveDescendantRuns, tt as runCliAgent, u as buildDefaultToolPolicyPipelineSteps, ur as getTotalQueueSize, v as requestBodyErrorToText, vt as consumeRestartSentinel, wr as registerAgentRunContext, x as agentCommand, xr as emitAgentEvent, y as computeBackoff, yr as stripHeartbeatToken } from "./subagent-registry-BXI3DyAX.js";
24
+ import { $ as getCliSessionId, $t as setPreRestartDeferralCheck, An as DEFAULT_INPUT_TIMEOUT_MS, At as normalizeOptionalSessionKey, Bt as buildSafeExternalPrompt, Cn as enqueueSystemEvent, Cr as onAgentEvent, Dn as DEFAULT_INPUT_IMAGE_MAX_BYTES, E as createDefaultDeps, F as buildHistoryContextFromEntries, Ft as buildDeliveryFromLegacyPayload, H as getTotalPendingReplies, Ht as getHookType, In as resolveAgentTimeoutMs, It as hasLegacyDeliveryHints, J as runAgentTurn, Jt as emitGatewayRestart, Kt as consumeGatewaySigusr1RestartAuthorization, Lt as stripLegacyDeliveryFields, Mn as extractImageContentFromSource, Mt as normalizePayloadToSystemText, Nn as normalizeMimeList, Nt as normalizeRequiredName, O as resolveAgentAvatar, On as DEFAULT_INPUT_IMAGE_MIMES, Ot as inferLegacyName, Pn as resolveInputFileLimits, Pt as migrateLegacyCronPayload, Q as resolveModelProfile, Qt as setGatewaySigusr1RestartPolicy, Sr as getAgentRunContext, St as summarizeRestartSentinel, T as createOutboundSendDeps, Tt as normalizeHttpWebhookUrl, Ut as isExternalHookSession, Vt as detectSuspiciousPatterns, X as getActiveEmbeddedRunCount, Xt as markGatewaySigusr1RestartHandled, Yt as isGatewaySigusr1RestartExternallyAllowed, _ as readJsonBodyWithLimit, at as resolveAnnounceTargetFromKey, b as sleepWithAbort, br as clearAgentRunContext, bt as formatRestartSentinelMessage, cr as getActiveTaskCount, ct as resolveOutboundSessionRoute, dn as requestHeartbeatNow, dr as resetAllLanes, dt as resolveOutboundTarget, et as setCliSessionId, f as getPluginToolMeta, fr as setCommandLaneConcurrency, ft as resolveSessionDeliveryTarget, g as handleSlackHttpRequest, gt as runWithModelFallback, hr as DEFAULT_HEARTBEAT_ACK_MAX_CHARS, i as listDescendantRunsForRequester, it as readLatestAssistantReply, jn as extractFileContentFromSource, jt as normalizeOptionalText, kn as DEFAULT_INPUT_MAX_REDIRECTS, kt as normalizeOptionalAgentId, l as applyToolPolicyPipeline, m as loadSymiPlugins, mr as CommandLane, mt as resetDirectoryCache, n as countActiveRunsForSession, pr as waitForActiveTasks, q as resolveCronStyleNow, qt as deferGatewayRestartUntilIdle, r as initSubagentRegistry, rt as createSymiTools, s as runSubagentAnnounceFlow, t as countActiveDescendantRuns, tt as runCliAgent, u as buildDefaultToolPolicyPipelineSteps, ur as getTotalQueueSize, v as requestBodyErrorToText, vt as consumeRestartSentinel, wr as registerAgentRunContext, x as agentCommand, xr as emitAgentEvent, y as computeBackoff, yr as stripHeartbeatToken } from "./subagent-registry-Cdiios3w.js";
25
25
  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-CJXnZVjR.js";
26
26
  import { a as isSilentReplyText, n as SILENT_REPLY_TOKEN } from "./tokens-Csntmwwn.js";
27
27
  import { n as listChannelPlugins, o as normalizeWhatsAppTarget, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-CwSlLxM8.js";
@@ -102,7 +102,7 @@ import { n as runCommandWithRuntime } from "./cli-utils-CCaEbxAz.js";
102
102
  import { t as formatHelpExamples } from "./help-format-B0pWGnZs.js";
103
103
  import { n as withProgress } from "./progress-BAHiAaDW.js";
104
104
  import "./replies-DO80zq73.js";
105
- import { C as normalizeControlUiBasePath, S as buildControlUiAvatarUrl, c as handleReset, w as resolveAssistantAvatarUrl, x as CONTROL_UI_AVATAR_PREFIX } from "./onboard-helpers-_pit1NZW.js";
105
+ import { C as normalizeControlUiBasePath, S as buildControlUiAvatarUrl, c as handleReset, w as resolveAssistantAvatarUrl, x as CONTROL_UI_AVATAR_PREFIX } from "./onboard-helpers-DASpwgat.js";
106
106
  import "./prompt-style-DwCXob2h.js";
107
107
  import "./pairing-labels-D1HDboV2.js";
108
108
  import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, r as resolveEffectiveToolPolicy } from "./pi-tools.policy-De00gPXt.js";
@@ -123,27 +123,27 @@ import "./service-Cm9j9WzQ.js";
123
123
  import "./lifecycle-core-DIBHfMOL.js";
124
124
  import "./systemd-hints-sQipWGd1.js";
125
125
  import { t as parsePort$1 } from "./parse-port-BQ0_YQqL.js";
126
- import { n as addGatewayServiceCommands } from "./daemon-cli-wWnBIQtk.js";
126
+ import { n as addGatewayServiceCommands } from "./daemon-cli-0RLS-CwL.js";
127
127
  import "./diagnostics-CS1ov_hH.js";
128
128
  import "./table-D01d2GuY.js";
129
129
  import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-CsKTEo__.js";
130
130
  import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-BtG9rny3.js";
131
- import { c as probeGateway, s as resolveNodeCommandAllowlist } from "./audit-Byo5jCLN.js";
131
+ import { c as probeGateway, s as resolveNodeCommandAllowlist } from "./audit-Cgd5-Y7W.js";
132
132
  import { t as discoverGatewayBeacons } from "./bonjour-discovery-CA_XIzr_.js";
133
- import { i as pickGatewaySelfPresence } from "./status-CwhHbhUv.js";
134
- import { a as styleHealthChannelLine, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-BNxdveY8.js";
133
+ import { i as pickGatewaySelfPresence } from "./status-CL1xQrpW.js";
134
+ import { a as styleHealthChannelLine, l as startHeartbeatRunner, n as getHealthSnapshot, s as runHeartbeatOnce, t as formatHealthChannelLines } from "./health-By4_Yu9p.js";
135
135
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-BseSWee1.js";
136
136
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-ZdimP1aU.js";
137
- import { t as runOnboardingWizard } from "./onboarding-CerjrLp1.js";
138
- import { _ as getHandshakeTimeoutMs, a as DEFAULT_ASSISTANT_IDENTITY, b as resolveCronRunLogPath, c as upsertPresence, d as DEDUPE_MAX, f as DEDUPE_TTL_MS, g as TICK_INTERVAL_MS, h as MAX_PAYLOAD_BYTES, i as safeParseJson, l as formatError, m as MAX_BUFFERED_BYTES, n as handleGatewayRequest, o as resolveAssistantIdentity, p as HEALTH_REFRESH_INTERVAL_MS, r as broadcastPresenceSnapshot, s as listSystemPresence, t as coreGatewayHandlers, u as loadVoiceWakeConfig, v as abortChatRunById, x as startGatewayConfigReloader, y as appendCronRunLog } from "./server-methods-B4IR7jcD.js";
139
- import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-BzIW-JHE.js";
137
+ import { t as runOnboardingWizard } from "./onboarding-DnhVdzx6.js";
138
+ import { _ as getHandshakeTimeoutMs, a as DEFAULT_ASSISTANT_IDENTITY, b as resolveCronRunLogPath, c as upsertPresence, d as DEDUPE_MAX, f as DEDUPE_TTL_MS, g as TICK_INTERVAL_MS, h as MAX_PAYLOAD_BYTES, i as safeParseJson, l as formatError, m as MAX_BUFFERED_BYTES, n as handleGatewayRequest, o as resolveAssistantIdentity, p as HEALTH_REFRESH_INTERVAL_MS, r as broadcastPresenceSnapshot, s as listSystemPresence, t as coreGatewayHandlers, u as loadVoiceWakeConfig, v as abortChatRunById, x as startGatewayConfigReloader, y as appendCronRunLog } from "./server-methods-CZJHMB_M.js";
139
+ import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-BQckoz9S.js";
140
140
  import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-CzWeiE-Y.js";
141
- import "./agents.config-BDtgUDFp.js";
141
+ import "./agents.config-SvdnvFsa.js";
142
142
  import "./dm-policy-shared-DJ-61hCT.js";
143
143
  import "./node-service-fcZExd22.js";
144
144
  import "./status.update-DbmZz0Aq.js";
145
145
  import "./skills-install-1ZdwGTnh.js";
146
- import "./update-runner-e_ChofHM.js";
146
+ import "./update-runner-jvpPI7iP.js";
147
147
  import { t as resolveAgentSessionDirs } from "./session-dirs-DWgIYmAt.js";
148
148
  import { i as shouldIncludeHook, r as resolveHookConfig, t as loadWorkspaceHookEntries } from "./workspace-B51TF6q3.js";
149
149
  import { n as forceFreePortAndWait } from "./ports-Dn122MUd.js";
@@ -5591,6 +5591,7 @@ const BASE_METHODS = [
5591
5591
  "sessions.preview",
5592
5592
  "sessions.patch",
5593
5593
  "sessions.reset",
5594
+ "sessions.restore",
5594
5595
  "sessions.delete",
5595
5596
  "sessions.compact",
5596
5597
  "last-heartbeat",
@@ -11841,7 +11842,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
11841
11842
  });
11842
11843
  let glassUiBridgeCleanup = null;
11843
11844
  if (!minimalTestGateway) {
11844
- const { createGlassUiBridge } = await import("./glass-ui-ws-vx0iMfPn.js");
11845
+ const { createGlassUiBridge } = await import("./glass-ui-ws-xbRlW2Pz.js");
11845
11846
  glassUiBridgeCleanup = createGlassUiBridge({
11846
11847
  wss: glassUiWss,
11847
11848
  context: gatewayRequestContext,
@@ -1,5 +1,5 @@
1
1
  import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-aT-I_DTX.js";
2
- import { n as callGateway } from "./call-CJaS1iRF.js";
2
+ import { n as callGateway } from "./call-CFhGTNtt.js";
3
3
  import { n as withProgress } from "./progress-jIePzvGA.js";
4
4
 
5
5
  //#region src/cli/gateway-rpc.ts