@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
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { an as getPrimaryCommand, cn as hasHelpOrVersion } from "./entry.js";
3
- import { i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-DcBHO9E8.js";
3
+ import { i as registerSubCliCommands, o as reparseProgramFromActionArgs } from "./register.subclis-D_HoHaB7.js";
4
4
 
5
5
  //#region src/cli/program/command-registry.ts
6
6
  var command_registry_exports = /* @__PURE__ */ __exportAll({
@@ -22,7 +22,7 @@ const coreEntries = [
22
22
  hasSubcommands: false
23
23
  }],
24
24
  register: async ({ program }) => {
25
- (await import("./register.setup-BKYxHrcB.js")).registerSetupCommand(program);
25
+ (await import("./register.setup-DX01Qmwr.js")).registerSetupCommand(program);
26
26
  }
27
27
  },
28
28
  {
@@ -32,7 +32,7 @@ const coreEntries = [
32
32
  hasSubcommands: false
33
33
  }],
34
34
  register: async ({ program }) => {
35
- (await import("./register.onboard-BN7J8vyx.js")).registerOnboardCommand(program);
35
+ (await import("./register.onboard-BetMbk4D.js")).registerOnboardCommand(program);
36
36
  }
37
37
  },
38
38
  {
@@ -42,7 +42,7 @@ const coreEntries = [
42
42
  hasSubcommands: false
43
43
  }],
44
44
  register: async ({ program }) => {
45
- (await import("./register.configure-D-o-geWg.js")).registerConfigureCommand(program);
45
+ (await import("./register.configure-BTKXkVgp.js")).registerConfigureCommand(program);
46
46
  }
47
47
  },
48
48
  {
@@ -52,7 +52,7 @@ const coreEntries = [
52
52
  hasSubcommands: true
53
53
  }],
54
54
  register: async ({ program }) => {
55
- (await import("./config-cli-BjXnB1c7.js")).registerConfigCli(program);
55
+ (await import("./config-cli-BCiQhEoA.js")).registerConfigCli(program);
56
56
  }
57
57
  },
58
58
  {
@@ -79,7 +79,7 @@ const coreEntries = [
79
79
  }
80
80
  ],
81
81
  register: async ({ program }) => {
82
- (await import("./register.maintenance-jMmXJ1NK.js")).registerMaintenanceCommands(program);
82
+ (await import("./register.maintenance-CRu_hm_x.js")).registerMaintenanceCommands(program);
83
83
  }
84
84
  },
85
85
  {
@@ -89,7 +89,7 @@ const coreEntries = [
89
89
  hasSubcommands: true
90
90
  }],
91
91
  register: async ({ program, ctx }) => {
92
- (await import("./register.message-CdCHhVND.js")).registerMessageCommands(program, ctx);
92
+ (await import("./register.message-DD5LEq6t.js")).registerMessageCommands(program, ctx);
93
93
  }
94
94
  },
95
95
  {
@@ -113,7 +113,7 @@ const coreEntries = [
113
113
  hasSubcommands: true
114
114
  }],
115
115
  register: async ({ program, ctx }) => {
116
- (await import("./register.agent-kKtKgmcO.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
116
+ (await import("./register.agent-wv_0IcpN.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
117
117
  }
118
118
  },
119
119
  {
@@ -135,7 +135,7 @@ const coreEntries = [
135
135
  }
136
136
  ],
137
137
  register: async ({ program }) => {
138
- (await import("./register.status-health-sessions-BLA4yUC4.js")).registerStatusHealthSessionsCommands(program);
138
+ (await import("./register.status-health-sessions-CMF93G-p.js")).registerStatusHealthSessionsCommands(program);
139
139
  }
140
140
  },
141
141
  {
@@ -145,7 +145,7 @@ const coreEntries = [
145
145
  hasSubcommands: true
146
146
  }],
147
147
  register: async ({ program }) => {
148
- (await import("./browser-cli-CPcnnsJJ.js")).registerBrowserCli(program);
148
+ (await import("./browser-cli-Dun4KSp2.js")).registerBrowserCli(program);
149
149
  }
150
150
  }
151
151
  ];
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { Yt as resolveStateDir, l as routeLogsToStderr, nt as pathExists } from "./entry.js";
3
- import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-DcBHO9E8.js";
4
- import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-CrYpGtIt.js";
3
+ import { n as getSubCliEntries, r as registerSubCliByName } from "./register.subclis-D_HoHaB7.js";
4
+ import { i as registerCoreCliByName, n as getCoreCliCommandNames } from "./command-registry-CARx8WBf.js";
5
5
  import { t as getProgramContext } from "./program-context-CqzR_m-7.js";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { g as resolveStateDir } from "./paths-Cqn-zk3M.js";
3
3
  import { h as pathExists } from "./utils-B-0b9bGM.js";
4
4
  import { i as routeLogsToStderr } from "./subsystem-D9vIQve0.js";
5
- import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-Dm-BSkOd.js";
5
+ import { a as registerCoreCliByName, c as getSubCliEntries, l as registerSubCliByName, r as getCoreCliCommandNames, t as getProgramContext } from "./program-context-0dr-H7wo.js";
6
6
  import os from "node:os";
7
7
  import path from "node:path";
8
8
  import fs from "node:fs/promises";
@@ -206,7 +206,7 @@ async function runConfigUnset(opts) {
206
206
  }
207
207
  function registerConfigCli(program) {
208
208
  const cmd = program.command("config").description("Non-interactive config helpers (get/set/unset). Run without subcommand for the setup wizard.").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.symi.ai/cli/config")}\n`).option("--section <section>", "Configure wizard sections (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
209
- const { configureCommandFromSectionsArg } = await import("./configure-CIFt3G-c.js").then((n) => n.t);
209
+ const { configureCommandFromSectionsArg } = await import("./configure-RmJWWP1i.js").then((n) => n.t);
210
210
  await configureCommandFromSectionsArg(opts.section, defaultRuntime);
211
211
  });
212
212
  cmd.command("get").description("Get a config value by dot path").argument("<path>", "Config path (dot or bracket notation)").option("--json", "Output JSON", false).action(async (path, opts) => {
@@ -201,7 +201,7 @@ async function runConfigUnset(opts) {
201
201
  }
202
202
  function registerConfigCli(program) {
203
203
  const cmd = program.command("config").description("Non-interactive config helpers (get/set/unset). Run without subcommand for the setup wizard.").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/config", "docs.symi.ai/cli/config")}\n`).option("--section <section>", "Configure wizard sections (repeatable). Use with no subcommand.", (value, previous) => [...previous, value], []).action(async (opts) => {
204
- const { configureCommandFromSectionsArg } = await import("./configure-De-0b4bB.js").then((n) => n.t);
204
+ const { configureCommandFromSectionsArg } = await import("./configure-BeKcXpvL.js").then((n) => n.t);
205
205
  await configureCommandFromSectionsArg(opts.section, defaultRuntime);
206
206
  });
207
207
  cmd.command("get").description("Get a config value by dot path").argument("<path>", "Config path (dot or bracket notation)").option("--json", "Output JSON", false).action(async (path, opts) => {
@@ -6,26 +6,26 @@ import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot } fr
6
6
  import { n as listChannelPlugins, t as getChannelPlugin } from "./plugins-CwSlLxM8.js";
7
7
  import { a as findTailscaleBinary } from "./tailscale-CbbvYNVw.js";
8
8
  import { n as withProgress } from "./progress-BAHiAaDW.js";
9
- import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-_pit1NZW.js";
9
+ import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-DASpwgat.js";
10
10
  import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint } from "./prompt-style-DwCXob2h.js";
11
11
  import { t as note$1 } from "./note-DDecZomM.js";
12
12
  import { t as WizardCancelledError } from "./prompts-m1IJwIAx.js";
13
13
  import { t as createClackPrompter } from "./clack-prompter-B1aVoXd5.js";
14
- import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-BjUx6cZ7.js";
14
+ import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-CW1DBHfJ.js";
15
15
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-CfRwa6qh.js";
16
16
  import { t as resolveGatewayService } from "./service-Cm9j9WzQ.js";
17
- import { r as healthCommand } from "./health-BNxdveY8.js";
17
+ import { r as healthCommand } from "./health-By4_Yu9p.js";
18
18
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-BseSWee1.js";
19
19
  import { n as logConfigUpdated } from "./logging-BGewRZy0.js";
20
20
  import { n as promptAuthChoiceGrouped } from "./auth-choice-prompt-DVcYPG2v.js";
21
- import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-C7BrC95t.js";
21
+ import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-DeTIgQiQ.js";
22
22
  import { a as promptDefaultModel, n as applyModelFallbacksFromSelection, o as promptModelAllowlist, r as applyPrimaryModel, t as applyModelAllowlist } from "./model-picker-D5nCutGW.js";
23
23
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-DA_LW52P.js";
24
24
  import { a as promptCustomApiConfig } from "./onboard-custom-DdWPfzJO.js";
25
25
  import { i as TAILSCALE_MISSING_BIN_NOTE_LINES, n as TAILSCALE_DOCS_LINES, r as TAILSCALE_EXPOSURE_OPTIONS, t as validateIPv4AddressInput } from "./ipv4-B-xy96ST.js";
26
26
  import { t as formatHealthCheckFailure } from "./health-format-CzgUHmmX.js";
27
- import { n as promptRemoteGatewayConfig } from "./onboard-remote-R1g6st9i.js";
28
- import { n as setupSkills } from "./onboard-skills-ByO_wSN5.js";
27
+ import { n as promptRemoteGatewayConfig } from "./onboard-remote-xXi061GI.js";
28
+ import { n as setupSkills } from "./onboard-skills-Bn2T6lze.js";
29
29
  import { confirm, intro, outro, select, text } from "@clack/prompts";
30
30
 
31
31
  //#region src/commands/configure.shared.ts
@@ -8,26 +8,26 @@ import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot } fr
8
8
  import { a as findTailscaleBinary } from "./tailscale-D5dKabOc.js";
9
9
  import { n as listChannelPlugins, t as getChannelPlugin } from "./plugins-DKDeQZF0.js";
10
10
  import { n as withProgress } from "./progress-jIePzvGA.js";
11
- import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-ZmZYzlq3.js";
11
+ import { a as ensureWorkspaceAndSessions, b as waitForGatewayReachable, g as resolveControlUiLinks, h as randomToken, m as probeGatewayReachable, n as applyWizardMetadata, p as printWizardHeader, s as guardCancel, t as DEFAULT_WORKSPACE, u as normalizeGatewayTokenInput, v as summarizeExistingConfig, y as validateGatewayPasswordInput } from "./onboard-helpers-Ci50bfCW.js";
12
12
  import { n as stylePromptMessage, r as stylePromptTitle, t as stylePromptHint } from "./prompt-style-8JqOYj0q.js";
13
13
  import { t as note$1 } from "./note-DeHoW7xO.js";
14
14
  import { t as WizardCancelledError } from "./prompts-Xu2Sveka.js";
15
15
  import { t as createClackPrompter } from "./clack-prompter-B7pN13HV.js";
16
- import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-BAEFSSqU.js";
16
+ import { r as setupChannels, t as noteChannelStatus } from "./onboard-channels-wd_fR_EA.js";
17
17
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-2mwX-jqj.js";
18
18
  import { t as resolveGatewayService } from "./service-Cl74hx8J.js";
19
- import { r as healthCommand } from "./health-pFcca1cU.js";
19
+ import { r as healthCommand } from "./health-DjUN4OFC.js";
20
20
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Z947tKLt.js";
21
21
  import { n as logConfigUpdated } from "./logging-BzzwiKjv.js";
22
22
  import { n as promptAuthChoiceGrouped } from "./auth-choice-prompt-BLzEBA1v.js";
23
- import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-Cw2rldnf.js";
24
- import { a as promptDefaultModel, n as applyModelFallbacksFromSelection, o as promptModelAllowlist, r as applyPrimaryModel, t as applyModelAllowlist } from "./model-picker-Ddo3jHe-.js";
23
+ import { i as applyAuthChoice, n as resolvePreferredProviderForAuthChoice } from "./auth-choice-CinzPjY5.js";
24
+ import { a as promptDefaultModel, n as applyModelFallbacksFromSelection, o as promptModelAllowlist, r as applyPrimaryModel, t as applyModelAllowlist } from "./model-picker-BzIRY_aM.js";
25
25
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-aQ75ZlXY.js";
26
- import { a as promptCustomApiConfig } from "./onboard-custom-C7O-zfQ1.js";
26
+ import { a as promptCustomApiConfig } from "./onboard-custom-BPvHqbtj.js";
27
27
  import { i as TAILSCALE_MISSING_BIN_NOTE_LINES, n as TAILSCALE_DOCS_LINES, r as TAILSCALE_EXPOSURE_OPTIONS, t as validateIPv4AddressInput } from "./ipv4-CxY-xbsH.js";
28
28
  import { t as formatHealthCheckFailure } from "./health-format-DSwnXZPU.js";
29
- import { n as promptRemoteGatewayConfig } from "./onboard-remote-zUjD7UtM.js";
30
- import { n as setupSkills } from "./onboard-skills-BB0YhUmF.js";
29
+ import { n as promptRemoteGatewayConfig } from "./onboard-remote-I9QVs0MQ.js";
30
+ import { n as setupSkills } from "./onboard-skills-DX7L1thH.js";
31
31
  import { confirm, intro, outro, select, text } from "@clack/prompts";
32
32
 
33
33
  //#region src/commands/configure.shared.ts
@@ -2816,6 +2816,29 @@ body {
2816
2816
  border: 1px solid rgba(139, 92, 246, 0.2);
2817
2817
  }
2818
2818
 
2819
+ /* ── Load session button ──────────────────────────────────────────────── */
2820
+ .history-load-btn {
2821
+ margin-top: 8px;
2822
+ padding: 5px 14px;
2823
+ height: 28px;
2824
+ width: 100%;
2825
+ background: rgba(0, 212, 255, 0.08);
2826
+ border: 1px solid rgba(0, 212, 255, 0.2);
2827
+ border-radius: 6px;
2828
+ color: rgba(0, 212, 255, 0.8);
2829
+ font-family: var(--font-mono);
2830
+ font-size: 10px;
2831
+ font-weight: 600;
2832
+ letter-spacing: 0.08em;
2833
+ cursor: pointer;
2834
+ transition: all 0.15s;
2835
+ }
2836
+ .history-load-btn:hover {
2837
+ background: rgba(0, 212, 255, 0.15);
2838
+ border-color: rgba(0, 212, 255, 0.4);
2839
+ color: rgba(0, 212, 255, 1);
2840
+ }
2841
+
2819
2842
  /* ── Archive viewer banner ──────────────────────────────────────────── */
2820
2843
  .archive-banner {
2821
2844
  display: flex;
@@ -3448,6 +3471,87 @@ body {
3448
3471
  color: rgba(255, 255, 255, 0.3);
3449
3472
  }
3450
3473
 
3474
+ /* ══════════════════════════════════════════════════════════════════════
3475
+ DATA CARDS — used by generic RPC panels (Overview, Channels, etc.)
3476
+ ══════════════════════════════════════════════════════════════════════ */
3477
+
3478
+ .data-card {
3479
+ border: 1px solid rgba(255, 255, 255, 0.06);
3480
+ border-radius: 8px;
3481
+ margin-bottom: 8px;
3482
+ overflow: hidden;
3483
+ transition: border-color 0.15s;
3484
+ }
3485
+ .data-card:hover {
3486
+ border-color: rgba(255, 255, 255, 0.1);
3487
+ }
3488
+
3489
+ .data-card-header {
3490
+ display: flex;
3491
+ align-items: center;
3492
+ gap: 8px;
3493
+ padding: 10px 14px;
3494
+ background: rgba(255, 255, 255, 0.02);
3495
+ font-family: var(--font-mono);
3496
+ font-size: 12px;
3497
+ font-weight: 600;
3498
+ color: var(--accent-cyan);
3499
+ letter-spacing: 0.03em;
3500
+ }
3501
+
3502
+ .data-card-badge {
3503
+ font-size: 9px;
3504
+ padding: 1px 6px;
3505
+ border-radius: 4px;
3506
+ background: rgba(0, 212, 255, 0.1);
3507
+ border: 1px solid rgba(0, 212, 255, 0.2);
3508
+ color: rgba(0, 212, 255, 0.7);
3509
+ letter-spacing: 0.06em;
3510
+ }
3511
+
3512
+ .data-card-row {
3513
+ display: flex;
3514
+ align-items: baseline;
3515
+ gap: 12px;
3516
+ padding: 5px 14px;
3517
+ font-family: var(--font-mono);
3518
+ font-size: 11px;
3519
+ line-height: 1.6;
3520
+ border-top: 1px solid rgba(255, 255, 255, 0.03);
3521
+ }
3522
+ .data-card-row:first-child {
3523
+ border-top: none;
3524
+ }
3525
+
3526
+ .data-card-label {
3527
+ color: rgba(255, 255, 255, 0.5);
3528
+ flex-shrink: 0;
3529
+ min-width: 100px;
3530
+ max-width: 200px;
3531
+ overflow: hidden;
3532
+ text-overflow: ellipsis;
3533
+ white-space: nowrap;
3534
+ }
3535
+
3536
+ .data-card-value {
3537
+ color: rgba(255, 255, 255, 0.75);
3538
+ word-break: break-all;
3539
+ flex: 1;
3540
+ min-width: 0;
3541
+ }
3542
+
3543
+ .data-card-inline {
3544
+ display: flex;
3545
+ align-items: baseline;
3546
+ gap: 12px;
3547
+ padding: 8px 14px;
3548
+ font-family: var(--font-mono);
3549
+ font-size: 11px;
3550
+ border: 1px solid rgba(255, 255, 255, 0.04);
3551
+ border-radius: 6px;
3552
+ margin-bottom: 4px;
3553
+ }
3554
+
3451
3555
  /* ══════════════════════════════════════════════════════════════════════
3452
3556
  DEBUG PANEL
3453
3557
  ══════════════════════════════════════════════════════════════════════ */
@@ -697,7 +697,7 @@
697
697
  <!-- ── Page Navigation Overlay ──────────────────────────────────── -->
698
698
  <div class="page-overlay" id="page-overlay" aria-hidden="true">
699
699
  <div class="page-overlay-header">
700
- <button class="page-back-btn" id="page-back-btn" title="Back to chat">
700
+ <button class="page-back-btn" id="page-back-btn" title="Back to menu">
701
701
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none">
702
702
  <path
703
703
  d="M19 12H5M5 12l7-7M5 12l7 7"
@@ -707,7 +707,7 @@
707
707
  stroke-linejoin="round"
708
708
  />
709
709
  </svg>
710
- <span>Chat</span>
710
+ <span>Menu</span>
711
711
  </button>
712
712
  <span class="page-overlay-title" id="page-overlay-title"></span>
713
713
  <a
@@ -1181,6 +1181,51 @@ window.addEventListener("symi:profile-changed", (e) => {
1181
1181
  });
1182
1182
 
1183
1183
  // ── Gateway setup ──────────────────────────────────────────────────
1184
+ // ── Session reload (called after session restore from history drawer) ──
1185
+ window.reloadSession = async function () {
1186
+ feedCache.clear();
1187
+ responseArea.innerHTML = "";
1188
+ responseArea.prepend(loadMoreSentinel);
1189
+ historyStartIndex = 0;
1190
+ historyHasMore = false;
1191
+ updateLoadMoreSentinel();
1192
+ if (typeof window.clearReasoningPanel === "function") {
1193
+ window.clearReasoningPanel();
1194
+ }
1195
+ if (typeof window.clearSymipulsePanel === "function") {
1196
+ window.clearSymipulsePanel();
1197
+ }
1198
+ setAgentStatus("idle");
1199
+ activeSubagentCount = 0;
1200
+ hideWorkingIndicator();
1201
+
1202
+ // Show restored indicator
1203
+ const restored = document.createElement("div");
1204
+ restored.className = "session-cleared";
1205
+ restored.innerHTML = `
1206
+ <div class="session-cleared-icon">◈</div>
1207
+ <div class="session-cleared-text">SESSION RESTORED</div>
1208
+ `;
1209
+ responseArea.appendChild(restored);
1210
+
1211
+ // Load history from the restored session
1212
+ try {
1213
+ const result = await gateway.rpc("chat.history", { sessionKey: window.SESSION_KEY });
1214
+ if (result?.messages) {
1215
+ renderHistory(result.messages);
1216
+ }
1217
+ } catch (err) {
1218
+ console.error("[app] Failed to load restored session history:", err);
1219
+ }
1220
+
1221
+ // Remove indicator after a pause
1222
+ setTimeout(() => {
1223
+ restored.style.transition = "opacity 0.4s ease";
1224
+ restored.style.opacity = "0";
1225
+ setTimeout(() => restored.remove(), 420);
1226
+ }, 1500);
1227
+ };
1228
+
1184
1229
  const gateway = new SymiGateway();
1185
1230
  window.gateway = gateway;
1186
1231
 
@@ -91,6 +91,19 @@
91
91
  `;
92
92
 
93
93
  item.addEventListener("click", () => loadTranscript(s.file, when));
94
+
95
+ // "Load Session" button for archived sessions
96
+ if (s.isArchived) {
97
+ const loadBtn = document.createElement("button");
98
+ loadBtn.className = "history-load-btn";
99
+ loadBtn.textContent = "Load Session";
100
+ loadBtn.addEventListener("click", (e) => {
101
+ e.stopPropagation(); // don't open the transcript viewer
102
+ void restoreSession(s.file);
103
+ });
104
+ item.appendChild(loadBtn);
105
+ }
106
+
94
107
  drawerBody.appendChild(item);
95
108
  }
96
109
  }
@@ -165,6 +178,31 @@
165
178
  openDrawer();
166
179
  });
167
180
 
181
+ // ── Session restore ────────────────────────────────────────────────────
182
+ async function restoreSession(file) {
183
+ if (!window.gateway?.connected) {
184
+ alert("Gateway not connected.");
185
+ return;
186
+ }
187
+
188
+ drawerBody.innerHTML = '<div class="history-loading">Restoring session…</div>';
189
+
190
+ try {
191
+ await window.gateway.rpc("sessions.restore", {
192
+ key: window.SESSION_KEY,
193
+ targetFile: file,
194
+ });
195
+
196
+ // Close drawer and reload the chat with the restored session
197
+ closeDrawer();
198
+ if (typeof window.reloadSession === "function") {
199
+ window.reloadSession();
200
+ }
201
+ } catch (err) {
202
+ drawerBody.innerHTML = `<div class="history-empty">Restore failed: ${escHtml(err.message)}</div>`;
203
+ }
204
+ }
205
+
168
206
  // ── Helpers ───────────────────────────────────────────────────────────
169
207
  function extractMsgText(msg) {
170
208
  if (typeof msg.content === "string") {
@@ -132,9 +132,11 @@ function onOverlayKey(e) {
132
132
  }
133
133
  }
134
134
 
135
- document
136
- .querySelector("body > .page-overlay #page-back-btn")
137
- ?.addEventListener("click", closePageOverlay);
135
+ document.querySelector("body > .page-overlay #page-back-btn")?.addEventListener("click", () => {
136
+ // Go back to the menu instead of closing everything
137
+ closePageOverlay();
138
+ openMenu();
139
+ });
138
140
 
139
141
  // ── Item routing ──────────────────────────────────────────────────────────────
140
142
  // Page display names (mapped from the menu item text)
@@ -153,13 +155,38 @@ const PAGE_NAMES = {
153
155
  "/logs": "Logs",
154
156
  };
155
157
 
156
- // Settings pages rendered natively (no iframe)
157
- const NATIVE_SETTINGS = {
158
+ // All internal pages rendered natively (no iframe)
159
+ const NATIVE_PAGES = {
160
+ "/overview": "overview",
161
+ "/channels": "channels",
162
+ "/instances": "instances",
163
+ "/sessions": "sessions",
164
+ "/usage": "usage",
165
+ "/cron": "cron",
166
+ "/agents": "agents",
167
+ "/skills": "skills",
168
+ "/nodes": "nodes",
158
169
  "/config": "config",
159
170
  "/debug": "debug",
160
171
  "/logs": "logs",
161
172
  };
162
173
 
174
+ function openNativePage(pageName, pageKey) {
175
+ if (window.closeNativeSettings) {
176
+ window.closeNativeSettings();
177
+ }
178
+ getPageTitle().textContent = pageName.toUpperCase();
179
+ getPagePopoutBtn().style.display = "none";
180
+ getPageFrame().style.display = "none";
181
+ overlayIsOpen = true;
182
+ getPageOverlay().classList.add("open");
183
+ getPageOverlay().setAttribute("aria-hidden", "false");
184
+ document.addEventListener("keydown", onOverlayKey);
185
+ if (window.openNativeSettings) {
186
+ window.openNativeSettings(pageKey);
187
+ }
188
+ }
189
+
163
190
  document.querySelectorAll(".cmd-item[data-href]").forEach((item) => {
164
191
  item.addEventListener("click", (e) => {
165
192
  e.preventDefault();
@@ -167,7 +194,6 @@ document.querySelectorAll(".cmd-item[data-href]").forEach((item) => {
167
194
 
168
195
  if (href === "#chat") {
169
196
  closeMenu();
170
- // Close native settings if open
171
197
  if (window.closeNativeSettings) {
172
198
  window.closeNativeSettings();
173
199
  }
@@ -175,41 +201,23 @@ document.querySelectorAll(".cmd-item[data-href]").forEach((item) => {
175
201
  return;
176
202
  }
177
203
 
178
- // Check if this is a native settings page
204
+ // Internal pages rendered natively
179
205
  if (href.includes("127.0.0.1:18789")) {
180
206
  let pathname = "/";
181
207
  try {
182
208
  pathname = new URL(href).pathname;
183
209
  } catch {}
184
210
 
185
- const nativePage = NATIVE_SETTINGS[pathname];
186
- if (nativePage && window.openNativeSettings) {
187
- const pageName = PAGE_NAMES[pathname] ?? "Settings";
211
+ const pageKey = NATIVE_PAGES[pathname];
212
+ if (pageKey) {
213
+ const pageName = PAGE_NAMES[pathname] ?? "Page";
188
214
  closeMenu();
189
- // Use the page overlay shell (header with back/title) but native content
190
- getPageTitle().textContent = pageName.toUpperCase();
191
- getPagePopoutBtn().style.display = "none";
192
- getPageFrame().style.display = "none";
193
- overlayIsOpen = true;
194
- getPageOverlay().classList.add("open");
195
- getPageOverlay().setAttribute("aria-hidden", "false");
196
- document.addEventListener("keydown", onOverlayKey);
197
- window.openNativeSettings(nativePage);
215
+ openNativePage(pageName, pageKey);
198
216
  return;
199
217
  }
200
-
201
- // Other standard UI pages → open in the page overlay iframe
202
- let pageName = item.querySelector(".cmd-item-name")?.textContent ?? "Page";
203
- try {
204
- const parsed = new URL(href);
205
- pageName = PAGE_NAMES[parsed.pathname] ?? pageName;
206
- } catch {}
207
- closeMenu();
208
- openPageOverlay(pageName, href);
209
- return;
210
218
  }
211
219
 
212
- // Fallback: external links still open in new tab
220
+ // External links open in new tab
213
221
  window.open(href, "_blank", "noopener");
214
222
  closeMenu();
215
223
  });