@symerian/symi 2.2.8 → 2.3.1

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 (361) hide show
  1. package/dist/{accounts-tNElYrCH.js → accounts-CI6zQTJj.js} +14 -14
  2. package/dist/{accounts-qtxJ-6em.js → accounts-CJR8j_Kq.js} +1 -1
  3. package/dist/{accounts-CWktKM8a.js → accounts-ChTFYj8Q.js} +1 -1
  4. package/dist/{acp-cli-C39L0DlT.js → acp-cli-Cu4icbJT.js} +2 -2
  5. package/dist/{acp-cli-C3PXowAr.js → acp-cli-NJzARaHq.js} +2 -2
  6. package/dist/{active-listener-C9r8ZB9m.js → active-listener-D6sXIjAg.js} +1 -1
  7. package/dist/{agent-scope-BxoUQqgM.js → agent-scope-Bw1Ed8W9.js} +3 -3
  8. package/dist/{agents-DbnUoR_W.js → agents-DzuttgJU.js} +7 -7
  9. package/dist/{agents.config-qyBeLoW5.js → agents.config-2HlZJsR3.js} +1 -1
  10. package/dist/{agents.config-D4WnZfkE.js → agents.config-CSucty2T.js} +1 -1
  11. package/dist/{audio-preflight-Cv9Z1hfd.js → audio-preflight-BsfqyC31.js} +29 -29
  12. package/dist/{audio-preflight-BsS_1f9-.js → audio-preflight-C40mKAp7.js} +5 -5
  13. package/dist/{audio-preflight-D6xo_ucC.js → audio-preflight-CWnxkaac.js} +11 -11
  14. package/dist/{audio-preflight-Dx82ytdb.js → audio-preflight-xSDULLAj.js} +11 -11
  15. package/dist/{audit-F6tyY79q.js → audit-Byo5jCLN.js} +5 -5
  16. package/dist/{audit-CbxXbquQ.js → audit-CrITRV6w.js} +5 -5
  17. package/dist/{auth-choice-DYxn5otk.js → auth-choice-ChrEc3cZ.js} +4 -4
  18. package/dist/{auth-choice-TbOBqNzh.js → auth-choice-Cve09z1a.js} +4 -4
  19. package/dist/{banner-BGxrGU83.js → banner-BoLflN_R.js} +1 -1
  20. package/dist/{bindings-B7Ke6LJi.js → bindings-BU2hsBd9.js} +2 -2
  21. package/dist/{browser-cli-BsdB0_5b.js → browser-cli-BG4qPxpM.js} +3 -3
  22. package/dist/{browser-cli-CTQX5_tu.js → browser-cli-CPcnnsJJ.js} +3 -3
  23. package/dist/build-info.json +3 -3
  24. package/dist/bundled/boot-md/handler.js +53 -53
  25. package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
  26. package/dist/bundled/command-logger/handler.js +1 -1
  27. package/dist/bundled/session-memory/handler.js +53 -53
  28. package/dist/{call-C7OJzLEL.js → call-BcE47FtD.js} +1 -1
  29. package/dist/{call-BOIceRVF.js → call-CJaS1iRF.js} +1 -1
  30. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  31. package/dist/{channel-activity-CsM_hJ_s.js → channel-activity-C9-gaquj.js} +1 -1
  32. package/dist/{channel-options-qDtKomWq.js → channel-options-Dkd1WQZx.js} +1 -1
  33. package/dist/{channel-options-8st4ZPAV.js → channel-options-DqgeO1f6.js} +1 -1
  34. package/dist/{channel-web-DQusem-l.js → channel-web-CJvDQ5Ea.js} +7 -7
  35. package/dist/{channels-cli-DZ9QSHcp.js → channels-cli-D0jjOLRb.js} +29 -29
  36. package/dist/{channels-cli-BfrCgEUI.js → channels-cli-DtqwJZWy.js} +30 -30
  37. package/dist/{chrome-Bf5N4gMh.js → chrome-CDJYxX5a.js} +8 -8
  38. package/dist/{chrome-CCN6Uf1O.js → chrome-Dq0bSDVx.js} +1 -1
  39. package/dist/{chrome-BtuJAYB6.js → chrome-DtPkPq9T.js} +1 -1
  40. package/dist/{chrome-CQNK4Of4.js → chrome-w3SLcQJF.js} +13 -13
  41. package/dist/{chunk-BW5f05BR.js → chunk-ClbN9Pqy.js} +1 -1
  42. package/dist/cli/daemon-cli.js +1 -1
  43. package/dist/{cli-isTrIFLa.js → cli-CEtg8kql.js} +26 -26
  44. package/dist/{cli-D484UoYM.js → cli-CHOmeum9.js} +25 -25
  45. package/dist/{command-format-BaxDnULz.js → command-format-UKHV-j0K.js} +1 -1
  46. package/dist/{command-registry-D4kcHIMn.js → command-registry-Ba2z3dYq.js} +11 -11
  47. package/dist/{commands-registry-D7CTCQPm.js → commands-registry-VSmULp-g.js} +4 -4
  48. package/dist/{completion-cli-CtOpZu6z.js → completion-cli-BgX3MWVU.js} +1 -1
  49. package/dist/{completion-cli-1m5OvbnB.js → completion-cli-CD-306wt.js} +2 -2
  50. package/dist/{config-Btm9gODl.js → config-BmV60pPT.js} +28 -0
  51. package/dist/{config-CkPct-ND.js → config-CHwyw6l5.js} +28 -0
  52. package/dist/{config-CJigbfdK.js → config-DHBLS1Hl.js} +28 -0
  53. package/dist/{config-cli-BlpcRRjX.js → config-cli-Cz87-TYh.js} +2 -2
  54. package/dist/{config-cli-BVbYrdKA.js → config-cli-DAbXVRUL.js} +2 -2
  55. package/dist/{config-CT6a99bQ.js → config-eEaJddXj.js} +40 -12
  56. package/dist/{config-guard-Q2nmK4Xy.js → config-guard-BflmO0t7.js} +3 -3
  57. package/dist/{config-guard-Fe8ddF5U.js → config-guard-CPHvOzsC.js} +2 -2
  58. package/dist/{config-validation-CqVVl--v.js → config-validation-BITwrsxY.js} +1 -1
  59. package/dist/{config-validation-DXA9-y5q.js → config-validation-CmimHAES.js} +1 -1
  60. package/dist/{configure-D4WT6m8B.js → configure-0nrthdSf.js} +10 -10
  61. package/dist/{configure-C-o6fkN4.js → configure-D45ne4lm.js} +10 -10
  62. package/dist/{control-service-DWy5T1wZ.js → control-service-Bz7rxLWq.js} +4 -4
  63. package/dist/{control-service-D2-SfYYP.js → control-service-DEVN6FRR.js} +4 -4
  64. package/dist/control-ui/css/style.css +1437 -548
  65. package/dist/control-ui/index.html +912 -652
  66. package/dist/control-ui/js/app.js +82 -6
  67. package/dist/control-ui/js/debug.js +55 -0
  68. package/dist/control-ui/js/gateway.js +11 -0
  69. package/dist/control-ui/js/models.js +16 -1
  70. package/dist/control-ui/js/render.js +74 -1
  71. package/dist/control-ui/js/render.test.js +36 -35
  72. package/dist/control-ui/js/utils.js +6 -6
  73. package/dist/{cron-cli-DCjmF5-B.js → cron-cli-BP24xl6n.js} +3 -3
  74. package/dist/{cron-cli-BXgHvojs.js → cron-cli-DBIlCvp3.js} +3 -3
  75. package/dist/{daemon-cli-D-Ceof_K.js → daemon-cli-DscwlsKW.js} +6 -6
  76. package/dist/{daemon-cli-2Xzn9zI0.js → daemon-cli-wWnBIQtk.js} +6 -6
  77. package/dist/daemon-cli.js +28 -0
  78. package/dist/{daemon-runtime-DpFImSwP.js → daemon-runtime-2mwX-jqj.js} +1 -1
  79. package/dist/{daemon-runtime-Co0_hiZm.js → daemon-runtime-CfRwa6qh.js} +1 -1
  80. package/dist/{deliver-CBVqE05W.js → deliver-BH0l3UKW.js} +2 -2
  81. package/dist/{deliver-CeOnWRNZ.js → deliver-BmPK91JP.js} +20 -20
  82. package/dist/{deliver-PKvGnPCv.js → deliver-CXRSdUr1.js} +3 -3
  83. package/dist/{deliver-CuDHWgo8.js → deliver-CceEhg3d.js} +3 -3
  84. package/dist/{devices-cli-Sgz97CCh.js → devices-cli-BHiPx2c2.js} +2 -2
  85. package/dist/{devices-cli-gzdkKCIr.js → devices-cli-Dds-25Ve.js} +2 -2
  86. package/dist/{diagnostic-CI0kRQkt.js → diagnostic-C3nsWaw3.js} +1 -1
  87. package/dist/{directory-cli-B7qWiEB9.js → directory-cli-CpUByQew.js} +1 -1
  88. package/dist/{directory-cli-B3reyWxB.js → directory-cli-D6vlxPje.js} +1 -1
  89. package/dist/{dns-cli-w2PtF7dQ.js → dns-cli-BEub5qgQ.js} +1 -1
  90. package/dist/{dns-cli-CAyakH9y.js → dns-cli-Beyzdh3S.js} +1 -1
  91. package/dist/{doctor-completion-CU32z26S.js → doctor-completion-CcDVOtZ5.js} +1 -1
  92. package/dist/{doctor-completion-rtRPARP8.js → doctor-completion-CmGtqUHQ.js} +1 -1
  93. package/dist/{doctor-config-flow-Bvd_Aoem.js → doctor-config-flow-CA3eiKhd.js} +2 -2
  94. package/dist/{doctor-config-flow-q1cK5vqE.js → doctor-config-flow-QnaBd8kL.js} +2 -2
  95. package/dist/entry.js +1 -1
  96. package/dist/{exec-approvals-cli-BGR981x_.js → exec-approvals-cli--zyXYrNY.js} +4 -4
  97. package/dist/{exec-approvals-cli-qL61CX5W.js → exec-approvals-cli-BliRl8VB.js} +4 -4
  98. package/dist/extensionAPI.js +13 -13
  99. package/dist/{frontmatter-C_bv_0P8.js → frontmatter-DPlG6yha.js} +2 -2
  100. package/dist/{gateway-cli-dxsgPoqI.js → gateway-cli-BVN31fwu.js} +135 -45
  101. package/dist/{gateway-cli-D9tJexeo.js → gateway-cli-DajX3Pye.js} +134 -44
  102. package/dist/{gateway-rpc-o-EndnYx.js → gateway-rpc-BxkKeCZ0.js} +1 -1
  103. package/dist/{gateway-rpc-DjjmZ7bN.js → gateway-rpc-DfZSz5JF.js} +1 -1
  104. package/dist/{gemini-auth-CdSPHuLl.js → gemini-auth-CF48hUR9.js} +1 -1
  105. package/dist/{github-copilot-token-C_qUP7p5.js → github-copilot-token-DJqsJ2-r.js} +7 -7
  106. package/dist/{glass-ui-ws-BvSaDLuk.js → glass-ui-ws-CQG6acJl.js} +34 -34
  107. package/dist/{glass-ui-ws-BxliIaQO.js → glass-ui-ws-Z1IOT6Vc.js} +33 -33
  108. package/dist/{health-BpVkd1NR.js → health-D9eQW7fJ.js} +5 -5
  109. package/dist/{health-6atzBDlL.js → health-f056vLGT.js} +5 -5
  110. package/dist/{hooks-cli-BdV4KLxW.js → hooks-cli-CW-IRS72.js} +27 -27
  111. package/dist/{hooks-cli-A0zhogYG.js → hooks-cli-hJ4euq2R.js} +26 -26
  112. package/dist/{image-Crdjqg8r.js → image-CHzdaNJ4.js} +2 -2
  113. package/dist/{image-CAI2RIyk.js → image-CO4meYzg.js} +2 -2
  114. package/dist/{image-Bf75JOg6.js → image-D9uvDTrc.js} +2 -2
  115. package/dist/{image-ops-CvJzsyvE.js → image-ops-S8-8dAhx.js} +1 -1
  116. package/dist/{image-CAUuNGNO.js → image-rZ4x9VS9.js} +4 -4
  117. package/dist/index.js +34 -34
  118. package/dist/{ir-DccrnjsE.js → ir-CbFUkv_T.js} +4 -4
  119. package/dist/{lifecycle-core-S8m0j4NY.js → lifecycle-core-D6LYXpFj.js} +2 -2
  120. package/dist/{lifecycle-core-D7Ye5Yes.js → lifecycle-core-DIBHfMOL.js} +2 -2
  121. package/dist/llm-slug-generator.js +53 -53
  122. package/dist/{local-roots-DMwIh5cS.js → local-roots-C7OCYACU.js} +5 -5
  123. package/dist/{login-Bw5pRDS9.js → login-B8uiUAnV.js} +7 -7
  124. package/dist/{login-Cy0xKkFK.js → login-XprgoYoQ.js} +2 -2
  125. package/dist/{login-CLDr2P2d.js → login-dIlDkG4X.js} +2 -2
  126. package/dist/{login-qr-UgF5nhwc.js → login-qr-CIZk8uKX.js} +12 -12
  127. package/dist/{login-qr-B1vLxxOr.js → login-qr-CUErSLXH.js} +2 -2
  128. package/dist/{login-qr-x-m9V4_i.js → login-qr-CqPpNO1y.js} +2 -2
  129. package/dist/{login-qr-CJ3r_moH.js → login-qr-pbXdFORv.js} +2 -2
  130. package/dist/{login-CrnzK7Rc.js → login-tFW8qUTU.js} +2 -2
  131. package/dist/{logs-cli-DJIwkEZN.js → logs-cli-Du8FCgKK.js} +3 -3
  132. package/dist/{logs-cli-DoSU6ypE.js → logs-cli-xOzIPrHm.js} +3 -3
  133. package/dist/{manager-D_LwXbc6.js → manager-BoLr3xR_.js} +13 -13
  134. package/dist/{manifest-registry-D0IQ3WuX.js → manifest-registry-CneMHk0N.js} +19 -19
  135. package/dist/{markdown-tables-iMQQZu4Q.js → markdown-tables-DSHvnTLx.js} +1 -1
  136. package/dist/{memory-cli-B1eBVFD2.js → memory-cli-C2SWDd8g.js} +1 -1
  137. package/dist/{memory-cli-DKU7WTEa.js → memory-cli-Ca5r9AUb.js} +1 -1
  138. package/dist/{message-channel-Dz5lr5b0.js → message-channel-DbsRltF2.js} +1 -1
  139. package/dist/{model-auth-DK43VicI.js → model-auth-CwOuTuXl.js} +9 -9
  140. package/dist/{model-catalog-D2Q4fkGC.js → model-catalog-CqCsARJX.js} +2 -2
  141. package/dist/{model-catalog-67tJywj6.js → model-catalog-DvBJ8pMD.js} +3 -3
  142. package/dist/{model-picker-Cv_lMtfR.js → model-picker-D5nCutGW.js} +2 -2
  143. package/dist/{model-picker-C5-xr7Au.js → model-picker-Ddo3jHe-.js} +2 -2
  144. package/dist/{models-cli-BIM5pEpQ.js → models-cli-B2ticsCM.js} +29 -29
  145. package/dist/{models-cli-DlUDMBlo.js → models-cli-D9bG44Ao.js} +29 -29
  146. package/dist/{models-config--wR0kLo6.js → models-config-CCMpqFyr.js} +1 -1
  147. package/dist/{models-config-CZKT8W0M.js → models-config-qyOXrOli.js} +1 -1
  148. package/dist/{models-CBEZc-xT.js → models-nO_t1uzp.js} +8 -8
  149. package/dist/{node-cli-D8nG9EDD.js → node-cli-C_G-Q3h-.js} +9 -9
  150. package/dist/{node-cli-DGmvLskU.js → node-cli-DSEhcjUV.js} +9 -9
  151. package/dist/{nodes-cli-B058F0sZ.js → nodes-cli-BIPA9B8G.js} +3 -3
  152. package/dist/{nodes-cli-BZ5aitST.js → nodes-cli-BcnuJajV.js} +3 -3
  153. package/dist/{onboard-BXp3rpw1.js → onboard-BDbpfrZj.js} +7 -7
  154. package/dist/{onboard-DXEF3bw2.js → onboard-BtZ9WqhJ.js} +7 -7
  155. package/dist/{onboard-channels-OKIylMMu.js → onboard-channels-CHE8nfNA.js} +1 -1
  156. package/dist/{onboard-channels-qLCTzt3v.js → onboard-channels-HubyUVjT.js} +1 -1
  157. package/dist/{onboard-custom-BiDvzYz-.js → onboard-custom-C7O-zfQ1.js} +2 -2
  158. package/dist/{onboard-custom-Bcifi3N2.js → onboard-custom-DdWPfzJO.js} +2 -2
  159. package/dist/{onboard-helpers-DHgVt6rY.js → onboard-helpers-ZmZYzlq3.js} +2 -2
  160. package/dist/{onboard-helpers-Cammg0Xb.js → onboard-helpers-_pit1NZW.js} +2 -2
  161. package/dist/{onboard-remote-BnOKv_rG.js → onboard-remote-R1g6st9i.js} +1 -1
  162. package/dist/{onboard-remote-CPI1Dsgo.js → onboard-remote-zUjD7UtM.js} +1 -1
  163. package/dist/{onboard-skills-5R6rRZiZ.js → onboard-skills-BB0YhUmF.js} +1 -1
  164. package/dist/{onboard-skills-LkCNrrQL.js → onboard-skills-ByO_wSN5.js} +1 -1
  165. package/dist/{onboarding-HJJedJ3u.js → onboarding-DtP0sps0.js} +10 -10
  166. package/dist/{onboarding-m_e9LePg.js → onboarding-eVb5gvwo.js} +10 -10
  167. package/dist/{onboarding.finalize-CbjQ-91D.js → onboarding.finalize-CetxPTxL.js} +31 -31
  168. package/dist/{onboarding.finalize-CGVAc5-e.js → onboarding.finalize-D8035U2E.js} +33 -33
  169. package/dist/{onboarding.gateway-config-BOUh5scQ.js → onboarding.gateway-config-BQFO9a_h.js} +4 -4
  170. package/dist/{onboarding.gateway-config-xF_Hfx5r.js → onboarding.gateway-config-CJUgDC6Y.js} +4 -4
  171. package/dist/{outbound-DzTvHYT8.js → outbound-3MZ12YrQ.js} +1 -1
  172. package/dist/{outbound-DHZ4Sktx.js → outbound-DB5Zus0-.js} +1 -1
  173. package/dist/{outbound-attachment-DjNDa3zn.js → outbound-attachment-Co2diKdP.js} +2 -2
  174. package/dist/{outbound-DeJ-MyLv.js → outbound-drXCcH8D.js} +1 -1
  175. package/dist/{outbound-GuMlcXXN.js → outbound-opDNxv-l.js} +7 -7
  176. package/dist/{pairing-cli-BunHc86C.js → pairing-cli-CBLfGvqW.js} +1 -1
  177. package/dist/{pairing-cli-DNAQqsxT.js → pairing-cli-CQRAnpvm.js} +1 -1
  178. package/dist/{paths-DLyHUt31.js → paths-Cb87-LzP.js} +1 -1
  179. package/dist/{paths-Cce4PUkG.js → paths-CySxpNhH.js} +5 -5
  180. package/dist/{pi-auth-json-0SYBFZTt.js → pi-auth-json-DPWPoruO.js} +8 -8
  181. package/dist/{pi-auth-json-C3yexKNU.js → pi-auth-json-DayrlDg_.js} +1 -1
  182. package/dist/{pi-embedded-Cd7Gd0Am.js → pi-embedded-BY-dBus2.js} +250 -39
  183. package/dist/{pi-embedded-C4Cb6hc3.js → pi-embedded-Dc3muKtS.js} +374 -163
  184. package/dist/{pi-embedded-helpers-B86ZS0eB.js → pi-embedded-helpers-B2z46qeM.js} +52 -52
  185. package/dist/{pi-embedded-helpers-UsrsQKwr.js → pi-embedded-helpers-CNPyv_ax.js} +1 -1
  186. package/dist/{pi-embedded-helpers-B2k8Fh9T.js → pi-embedded-helpers-DE9h5GAu.js} +1 -1
  187. package/dist/{pi-embedded-helpers-xjO9noTy.js → pi-embedded-helpers-lgx_U5KS.js} +5 -5
  188. package/dist/{pi-tools.policy-DKHZCIA2.js → pi-tools.policy-CIDBbw6x.js} +2 -2
  189. package/dist/{pi-tools.policy-CwzwRugl.js → pi-tools.policy-De00gPXt.js} +2 -2
  190. package/dist/{plugin-registry-DOEhQFQJ.js → plugin-registry-CuoX8mar.js} +2 -2
  191. package/dist/{plugin-registry-D0iAVBbj.js → plugin-registry-fxcvycGr.js} +2 -2
  192. package/dist/plugin-sdk/{audio-preflight-B8X7BvQ5.js → audio-preflight-DoQQKlxa.js} +5 -5
  193. package/dist/plugin-sdk/{channel-web-B92UQWLf.js → channel-web-CV1KLtZh.js} +7 -7
  194. package/dist/plugin-sdk/{chrome-DxJPopF7.js → chrome-C7c_0I5M.js} +1 -1
  195. package/dist/plugin-sdk/config/model-profiles-builtin.d.ts +9 -0
  196. package/dist/plugin-sdk/config/model-profiles.d.ts +56 -0
  197. package/dist/plugin-sdk/config/resolve-model-profile.d.ts +15 -0
  198. package/dist/plugin-sdk/config/types.models.d.ts +28 -0
  199. package/dist/plugin-sdk/config/zod-schema.core.d.ts +54 -0
  200. package/dist/plugin-sdk/config/zod-schema.d.ts +27 -0
  201. package/dist/plugin-sdk/{config-B0SemGqU.js → config-DDkdiUOR.js} +28 -0
  202. package/dist/plugin-sdk/{deliver-C51eaClJ.js → deliver-BUns_L9e.js} +2 -2
  203. package/dist/plugin-sdk/{image-VGrV0d09.js → image-BOYy0Ump.js} +2 -2
  204. package/dist/plugin-sdk/index.js +17 -17
  205. package/dist/plugin-sdk/{login-CG8p5_rW.js → login-Bh3DZPam.js} +2 -2
  206. package/dist/plugin-sdk/{login-qr-buvA9Dp8.js → login-qr-DbR7odSr.js} +2 -2
  207. package/dist/plugin-sdk/{outbound-LqNDFLO5.js → outbound-rF6G8Xpr.js} +1 -1
  208. package/dist/plugin-sdk/{pi-embedded-helpers-IkpqVZZa.js → pi-embedded-helpers-BveUP4hk.js} +5 -5
  209. package/dist/plugin-sdk/{pw-ai-CjPImm6b.js → pw-ai-DjGUsee-.js} +2 -2
  210. package/dist/plugin-sdk/{replies-BLMuwbVf.js → replies-fI39rPGa.js} +1 -1
  211. package/dist/plugin-sdk/{reply-BS99Apig.js → reply-C4mijdMZ.js} +246 -35
  212. package/dist/plugin-sdk/{runner-pmvwohi9.js → runner-BVqnEfNe.js} +2 -2
  213. package/dist/plugin-sdk/{send-D8Zs62CE.js → send-BHbXh8Ly.js} +1 -1
  214. package/dist/plugin-sdk/{send-DOXV-BQw.js → send-BMfJIhCk.js} +1 -1
  215. package/dist/plugin-sdk/{send-BinD92v_.js → send-BtANzsAo.js} +1 -1
  216. package/dist/plugin-sdk/{send-cUp3Bf9t.js → send-Bxdu6ZZy.js} +1 -1
  217. package/dist/plugin-sdk/{send-BOrHNGsc.js → send-D6LMZJ_h.js} +1 -1
  218. package/dist/plugin-sdk/{session-B0bWB4Wf.js → session-kI0tzViQ.js} +1 -1
  219. package/dist/plugin-sdk/{web-CF79DBe3.js → web-B17UUsjm.js} +17 -17
  220. package/dist/plugin-sdk/{whatsapp-actions-Bp33E4JW.js → whatsapp-actions-CcBzDuL-.js} +2 -2
  221. package/dist/{plugins-DQYI3Fr-.js → plugins-C4C9637U.js} +9 -9
  222. package/dist/{plugins-cli-6nKHKPj8.js → plugins-cli-4OqSGHp-.js} +26 -26
  223. package/dist/{plugins-cli-DU06_0f6.js → plugins-cli-BbE_Qnlk.js} +27 -27
  224. package/dist/{program-D1icw1T9.js → program-DkXOdfM2.js} +33 -33
  225. package/dist/{program-context-Bqybavvo.js → program-context-0bDxGpMx.js} +38 -38
  226. package/dist/{prompt-select-styled-DptZ40df.js → prompt-select-styled-DJkRn30j.js} +14 -14
  227. package/dist/{prompt-select-styled-Cj3jTVJJ.js → prompt-select-styled-_6KbTFXs.js} +14 -14
  228. package/dist/{provider-auth-helpers-CDnMFdFw.js → provider-auth-helpers-Bnkj4QXS.js} +2 -2
  229. package/dist/{provider-auth-helpers-BVSJctmE.js → provider-auth-helpers-BpVAdwK_.js} +2 -2
  230. package/dist/{push-apns-DtKC_-eP.js → push-apns-C0wMP1XU.js} +1 -1
  231. package/dist/{push-apns-CpUJIlI7.js → push-apns-EKnCwrqK.js} +1 -1
  232. package/dist/{pw-ai-DgDn1s1W.js → pw-ai-CbyO1fbh.js} +2 -2
  233. package/dist/{pw-ai-C2hGnRfL.js → pw-ai-De-KR9_s.js} +2 -2
  234. package/dist/{pw-ai-CsvxsEwI.js → pw-ai-DqL87js3.js} +2 -2
  235. package/dist/{pw-ai-BcniFyZm.js → pw-ai-PiQUncix.js} +11 -11
  236. package/dist/{qmd-manager-QHUP-_em.js → qmd-manager-DdZh9PHs.js} +7 -7
  237. package/dist/{qr-cli-Deyb-bdE.js → qr-cli-jd9LdZpq.js} +1 -1
  238. package/dist/{qr-cli-DvDQ233a.js → qr-cli-mgnfD5ce.js} +1 -1
  239. package/dist/{register.agent-DesQbi0N.js → register.agent-B0S1CJEx.js} +32 -32
  240. package/dist/{register.agent-DszKb7kT.js → register.agent-B48Vf_DK.js} +34 -34
  241. package/dist/{register.configure-CPZ2pkCL.js → register.configure-Drr3E9OG.js} +36 -36
  242. package/dist/{register.configure-CiHbtNBW.js → register.configure-Wyv7vb24.js} +37 -37
  243. package/dist/{register.maintenance-BBjwt-34.js → register.maintenance-Cmf17EW0.js} +34 -34
  244. package/dist/{register.maintenance-hUQ3a2-X.js → register.maintenance-TgjAQ4E0.js} +36 -36
  245. package/dist/{register.message-BZ_faykn.js → register.message-BcsPnPvW.js} +26 -26
  246. package/dist/{register.message-BJG43ey1.js → register.message-Dwv2puIB.js} +27 -27
  247. package/dist/{register.onboard-CtDGWgek.js → register.onboard-BDGaSyq2.js} +32 -32
  248. package/dist/{register.onboard-BuvppItf.js → register.onboard-C8w7_w93.js} +33 -33
  249. package/dist/{register.setup-09FZm-3U.js → register.setup-CMGSNKXS.js} +33 -33
  250. package/dist/{register.setup-CK_rXwht.js → register.setup-CiEuZOlI.js} +32 -32
  251. package/dist/{register.status-health-sessions-CYBXZfzw.js → register.status-health-sessions-C8p0uINc.js} +29 -29
  252. package/dist/{register.status-health-sessions-Dq1GhVZd.js → register.status-health-sessions-zKjmZyOs.js} +31 -31
  253. package/dist/{register.subclis-oaqsIg7c.js → register.subclis-CofZE_pt.js} +28 -28
  254. package/dist/{registry-CK4e9hn8.js → registry-DP24za6g.js} +17 -17
  255. package/dist/{replies-CVeSBasT.js → replies-DO80zq73.js} +1 -1
  256. package/dist/{replies-9jiCJtyj.js → replies-DpPvWiGF.js} +3 -3
  257. package/dist/{replies-Dfqu9AXG.js → replies-ZYtI9jr0.js} +1 -1
  258. package/dist/{replies-ByiY6ZyB.js → replies-vgss3_QA.js} +1 -1
  259. package/dist/{reply-BnAPNcvn.js → reply-SBi_U7P7.js} +258 -47
  260. package/dist/{reply-prefix-XlyuyChD.js → reply-prefix-CtL0omgM.js} +1 -1
  261. package/dist/{resolve-route-CZ-1eqw0.js → resolve-route-BVikmvWO.js} +4 -4
  262. package/dist/{retry-Cly39XZB.js → retry-dGG-MbxL.js} +1 -1
  263. package/dist/{routes-br_73dY_.js → routes-BFw2-yAN.js} +3 -3
  264. package/dist/{routes-BZCzIvY1.js → routes-Ba9CUQ8M.js} +3 -3
  265. package/dist/{rpc-CbirYKS1.js → rpc-BfhojW8g.js} +1 -1
  266. package/dist/{rpc-BsIk35AA.js → rpc-BjLadgzu.js} +1 -1
  267. package/dist/{run-main-g9-g4T_a.js → run-main-BJaDO3WW.js} +44 -44
  268. package/dist/{runner-BPcjrrjx.js → runner-BORIO-D3.js} +3 -3
  269. package/dist/{runner-M7hSmkG1.js → runner-CCSMfQee.js} +9 -9
  270. package/dist/{runner-Iw-AU75D.js → runner-CUglpiFP.js} +3 -3
  271. package/dist/{runner-DFFbD4Jj.js → runner-DUBExAb5.js} +2 -2
  272. package/dist/{sandbox-C9zB9HTn.js → sandbox-BFzSUT19.js} +5 -5
  273. package/dist/{sandbox-BnivFdOs.js → sandbox-C-T6hOMv.js} +5 -5
  274. package/dist/{sandbox-cli-6RGP0CNN.js → sandbox-cli-BllVdQzR.js} +6 -6
  275. package/dist/{sandbox-cli-Dl8IMlpe.js → sandbox-cli-Cj5__-gh.js} +6 -6
  276. package/dist/{security-cli-BHG6kV1z.js → security-cli-BFLtWWHy.js} +9 -9
  277. package/dist/{security-cli-CtgTAznE.js → security-cli-Dmb1k47A.js} +9 -9
  278. package/dist/{send-uxuOCFdA.js → send-BArQpbtx.js} +1 -1
  279. package/dist/{send-C1DE47RQ.js → send-C1IYd3g7.js} +1 -1
  280. package/dist/{send-CdxBNofn.js → send-C4Ucr8ep.js} +1 -1
  281. package/dist/{send-Z6uznj5j.js → send-CHEOWVc8.js} +6 -6
  282. package/dist/{send-DB2tDd9M.js → send-CPF8hSFp.js} +1 -1
  283. package/dist/{send-DKvfyTNM.js → send-CR5fRDgW.js} +1 -1
  284. package/dist/{send-CU_BDzc0.js → send-CXxQ_f7L.js} +1 -1
  285. package/dist/{send-CkYljROn.js → send-CY8oqBFg.js} +1 -1
  286. package/dist/{send-Bf-tLRDW.js → send-CZr1hVHY.js} +1 -1
  287. package/dist/{send-DP6zL1r4.js → send-CukP8Vq4.js} +1 -1
  288. package/dist/{send-DKB9atcf.js → send-Cutb0ZDY.js} +1 -1
  289. package/dist/{send-DoiQ-lVY.js → send-D-hWrHoH.js} +1 -1
  290. package/dist/{send-rirP23D6.js → send-DK_pm_7l.js} +1 -1
  291. package/dist/{send-Dv5K7btg.js → send-DTTtmhjA.js} +1 -1
  292. package/dist/{send-DUWSrao-.js → send-DXW6mdgR.js} +1 -1
  293. package/dist/{send-KhJZHqoK.js → send-DbcLJb0P.js} +7 -7
  294. package/dist/{send-B2c8xd6F.js → send-DeEosX8F.js} +18 -18
  295. package/dist/{send-Dp3_Z9LN.js → send-DwKJK3sM.js} +10 -10
  296. package/dist/{send-Bv3GF77o.js → send-tanEMpHN.js} +1 -1
  297. package/dist/{send-IjhsR55j.js → send-zSarozV2.js} +6 -6
  298. package/dist/{server-context-Bn72icrR.js → server-context-CEpFjqSk.js} +5 -5
  299. package/dist/{server-context-BogDcclm.js → server-context-H24IFajW.js} +5 -5
  300. package/dist/{server-methods-CYVVBHwG.js → server-methods-Cm6W01ne.js} +15 -15
  301. package/dist/{server-methods-1TVNg0k5.js → server-methods-CyFB3XQf.js} +16 -16
  302. package/dist/{server-node-events-CPTRFOMY.js → server-node-events-Bhgt3xLw.js} +26 -26
  303. package/dist/{server-node-events-Cvqw-9rw.js → server-node-events-CX1plxJz.js} +27 -27
  304. package/dist/{session-CRf_exZ0.js → session-Ckw7cXeP.js} +1 -1
  305. package/dist/{session-eZHBxAr-.js → session-DIBTkyvE.js} +1 -1
  306. package/dist/{session-BvpMfKh-.js → session-DV1MNlbV.js} +8 -8
  307. package/dist/{session-C4z7523K.js → session-DtMfLMdP.js} +1 -1
  308. package/dist/{session-utils-D5F7F--L.js → session-utils-Bka9dR4m.js} +3 -3
  309. package/dist/{sessions-Cb4Hj78H.js → sessions-CJXnZVjR.js} +1 -1
  310. package/dist/{sessions-B2cR2hug.js → sessions-DgYpBvse.js} +1 -1
  311. package/dist/{sessions-DHCZbuoQ.js → sessions-WBoXk-Ag.js} +3 -3
  312. package/dist/{shared-zPQArNFi.js → shared-D8K9MkWg.js} +1 -1
  313. package/dist/{shared-CxsYh_6Q.js → shared-Knv1hy6h.js} +1 -1
  314. package/dist/{skill-commands-BJMb_psG.js → skill-commands-D610IKhm.js} +9 -9
  315. package/dist/{skills-cli-urhcJuu8.js → skills-cli-BZTBLQTt.js} +1 -1
  316. package/dist/{skills-cli-XmXhTH3z.js → skills-cli-CkTGL9dR.js} +1 -1
  317. package/dist/{skills-BFekKL7i.js → skills-o5WVqM4V.js} +21 -21
  318. package/dist/{sqlite-DRbx2dhW.js → sqlite-6H6Zw1cs.js} +4 -4
  319. package/dist/{status-B7VIwi53.js → status-BBpD_1pG.js} +10 -10
  320. package/dist/{status-CDpLvmFd.js → status-BdmYV3_x.js} +2 -2
  321. package/dist/{status-CCrlpUEA.js → status-CwXg8OO1.js} +9 -9
  322. package/dist/{status-BS3y9HjF.js → status-U_1mE-yc.js} +2 -2
  323. package/dist/{status.update-D8lzj5TK.js → status.update-DbmZz0Aq.js} +1 -1
  324. package/dist/{status.update-Cu6R3wwz.js → status.update-DtwCUTf-.js} +1 -1
  325. package/dist/{store-C0wvOkae.js → store-vVE6N2mH.js} +2 -2
  326. package/dist/{subagent-registry-BSgPGZxs.js → subagent-registry-Du9P0G2U.js} +259 -48
  327. package/dist/{subsystem-Bs9YvKLa.js → subsystem-DgpxyDQ_.js} +1 -1
  328. package/dist/{system-cli-BXvpbG10.js → system-cli-D_EIZpBm.js} +3 -3
  329. package/dist/{system-cli-CD1cvYkc.js → system-cli-UMsMEurS.js} +3 -3
  330. package/dist/{systemd-hints-Cn-fd1AF.js → systemd-hints-BR6gChwm.js} +1 -1
  331. package/dist/{systemd-hints-BMl55p2_.js → systemd-hints-sQipWGd1.js} +1 -1
  332. package/dist/{tables-DuZspiBu.js → tables-BIWsCKXJ.js} +1 -1
  333. package/dist/{target-errors-Be1SwYlW.js → target-errors-DyItGyW9.js} +2 -2
  334. package/dist/{thinking-CdlENGRW.js → thinking-Ni0HF-w6.js} +5 -5
  335. package/dist/{tokens-H1H1LiSQ.js → tokens-c_SLAkVb.js} +1 -1
  336. package/dist/{tool-images-DXB7tqWi.js → tool-images-DBCfXdli.js} +2 -2
  337. package/dist/{tool-loop-detection-Cs8_HCsx.js → tool-loop-detection-Bbc9OPFR.js} +3 -3
  338. package/dist/{tui-OUhw8eT1.js → tui-BJB80muc.js} +4 -4
  339. package/dist/{tui-DJefgPwz.js → tui-CriznorL.js} +4 -4
  340. package/dist/{tui-cli-_ohekmDR.js → tui-cli-C7Q9lK8Q.js} +9 -9
  341. package/dist/{tui-cli-C-CoSVeQ.js → tui-cli-CSIdfCTR.js} +9 -9
  342. package/dist/{update-cli-DL3Tb3b0.js → update-cli-DJzF_9UX.js} +37 -37
  343. package/dist/{update-cli-C8sM6pAA.js → update-cli-_45TJ3hZ.js} +39 -39
  344. package/dist/{update-runner-ChoWv-od.js → update-runner-8Ac4bJ1w.js} +1 -1
  345. package/dist/{update-runner-Dm7EwGFW.js → update-runner-BSQFv9b6.js} +1 -1
  346. package/dist/{web-sQrQA6or.js → web-BZSI7b07.js} +29 -29
  347. package/dist/{web-0w8t_r2B.js → web-BqRsq6mP.js} +57 -57
  348. package/dist/{web-UEqiaso9.js → web-C1Zn8_qW.js} +16 -16
  349. package/dist/{web-VbydcdAk.js → web-w-vV1rCZ.js} +29 -29
  350. package/dist/{webhooks-cli-B8gdUXw-.js → webhooks-cli-ChiCyIaD.js} +1 -1
  351. package/dist/{webhooks-cli-DpiLQ_-A.js → webhooks-cli-cD58DWAE.js} +1 -1
  352. package/dist/{whatsapp-actions-DrReF5st.js → whatsapp-actions-C8nNH4ax.js} +2 -2
  353. package/dist/{whatsapp-actions-xolxich-.js → whatsapp-actions-DbcsdOH3.js} +2 -2
  354. package/dist/{whatsapp-actions-D_KIOhRu.js → whatsapp-actions-DvhI5-DC.js} +2 -2
  355. package/dist/{whatsapp-actions-BVZaCecm.js → whatsapp-actions-oRQjcdQe.js} +23 -23
  356. package/dist/{with-timeout-vknUanNX.js → with-timeout-Di0nddLY.js} +1 -1
  357. package/dist/{with-timeout-DIHZxCIl.js → with-timeout-gmK6RciS.js} +1 -1
  358. package/dist/{workspace-wAaHI8-5.js → workspace-CbvamIU6.js} +6 -6
  359. package/docs/reference/templates/CONFIG-SCHEMA.md +173 -0
  360. package/docs/reference/templates/SYMICORE.md +24 -0
  361. package/package.json +1 -1
@@ -27,7 +27,11 @@ let watchdogTimer = null; // fires if no activity for WATCHDOG_MS
27
27
  let elapsedTimer = null; // ticks every second to show run duration
28
28
  let activityStart = 0; // timestamp of when current run began
29
29
  let elapsedBaseText = ""; // base sub-text for the elapsed display
30
- const WATCHDOG_MS = 300000; // 300 seconds of silence → failure
30
+ let WATCHDOG_MS = 300000; // 300 seconds of silence → failure (profile-overridable)
31
+
32
+ // ── Model profile state (updated via "profile" gateway event) ────
33
+ let activeProfile = null;
34
+ const _seenMessageIds = new Set(); // dedup guard for reconnect replays (future)
31
35
 
32
36
  // ── Utility ───────────────────────────────────────────────────────
33
37
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
@@ -509,8 +513,10 @@ function handleGatewayEvent(event) {
509
513
  return;
510
514
  }
511
515
 
512
- // Handle agent lifecycle/tool events — these prove the agent is alive
513
- if (event.event === "agent" && isStreaming) {
516
+ // Handle agent lifecycle/tool events — these prove the agent is alive.
517
+ // No isStreaming guard: agent events must be processed even before the
518
+ // first text delta arrives (critical for Gemma/vLLM tool-use phases).
519
+ if (event.event === "agent") {
514
520
  const a = event.payload;
515
521
  if (a) {
516
522
  // Any agent event resets the watchdog — the agent is working
@@ -552,6 +558,22 @@ function handleGatewayEvent(event) {
552
558
  armWatchdog();
553
559
  }
554
560
 
561
+ // Log to debug panel if available
562
+ if (typeof window.logDebugEvent === "function") {
563
+ window.logDebugEvent(p.state, p);
564
+ }
565
+
566
+ // Handle "thinking" state broadcast from gateway (agent started processing)
567
+ if (p.state === "thinking") {
568
+ if (!isStreaming) {
569
+ return; // Ignore stale thinking events
570
+ }
571
+ setAgentStatus("thinking");
572
+ showWorkingIndicator();
573
+ armWatchdog();
574
+ return;
575
+ }
576
+
555
577
  if (p.state === "delta") {
556
578
  // Route heartbeat/symipulse deltas to dedicated panel
557
579
  if (p.isHeartbeat) {
@@ -624,7 +646,29 @@ function handleGatewayEvent(event) {
624
646
  if (typeof window.closeLiveThinking === "function") {
625
647
  window.closeLiveThinking();
626
648
  }
627
- closeStreamBubble(window.activeModelId || "unknown model");
649
+ // If final arrives with message content but no prior deltas (burst response),
650
+ // render the full message directly instead of closing an empty stream bubble.
651
+ if (!streamBubble && p.message) {
652
+ const finalText = extractText(p.message?.content ?? p.message);
653
+ if (finalText && finalText.trim()) {
654
+ if (thinkingEl) {
655
+ thinkingEl.remove();
656
+ thinkingEl = null;
657
+ }
658
+ const rendered = window.renderMessage({
659
+ role: "assistant",
660
+ content: p.message.content ?? [{ type: "text", text: finalText }],
661
+ timestamp: p.message.timestamp ?? Date.now(),
662
+ });
663
+ if (rendered) {
664
+ responseArea.appendChild(rendered);
665
+ window.applyHighlighting(rendered);
666
+ responseArea.scrollTop = responseArea.scrollHeight;
667
+ }
668
+ }
669
+ } else {
670
+ closeStreamBubble(window.activeModelId || "unknown model");
671
+ }
628
672
  setAgentStatus("done");
629
673
  // Sync sub-agent count from server and conditionally hide working indicator
630
674
  if (typeof p.activeSubagentCount === "number") {
@@ -719,10 +763,17 @@ function setAgentStatus(key) {
719
763
  }
720
764
 
721
765
  // ── Elapsed timer management ──────────────────────────────────
722
- if (key === "thinking") {
766
+ if (key === "waiting") {
767
+ // For burst-style models (Gemma/vLLM), arm watchdog immediately on send
768
+ // so the user gets feedback if the model never responds.
769
+ if (activeProfile?.ui?.armWatchdogOnSend !== false) {
770
+ armWatchdog();
771
+ }
772
+ startElapsedTimer("Sending to agent");
773
+ } else if (key === "thinking") {
723
774
  // Start elapsed timer and watchdog when processing begins
724
775
  armWatchdog();
725
- startElapsedTimer("Reasoning through request");
776
+ elapsedBaseText = "Reasoning through request";
726
777
  } else if (key === "streaming") {
727
778
  // Transition from thinking → streaming: keep watchdog running (will be
728
779
  // reset on each delta), switch elapsed timer base text
@@ -1015,6 +1066,31 @@ document.getElementById("prompt-bar").addEventListener("click", (e) => {
1015
1066
  }
1016
1067
  });
1017
1068
 
1069
+ // ── Model profile listener ────────────────────────────────────────
1070
+ window.addEventListener("symi:profile-changed", (e) => {
1071
+ activeProfile = e.detail;
1072
+ WATCHDOG_MS = activeProfile?.ui?.watchdogMs ?? 300000;
1073
+
1074
+ // Update model label in header if present
1075
+ const modelLabel = document.getElementById("active-model-label");
1076
+ if (modelLabel) {
1077
+ modelLabel.textContent = activeProfile?.label ?? "";
1078
+ }
1079
+ const modelBadge = document.getElementById("model-badge");
1080
+ if (modelBadge) {
1081
+ modelBadge.textContent = activeProfile?.ui?.badge ?? "";
1082
+ }
1083
+
1084
+ console.log(
1085
+ "[app] profile updated:",
1086
+ activeProfile?.label,
1087
+ "watchdog:",
1088
+ WATCHDOG_MS,
1089
+ "armOnSend:",
1090
+ activeProfile?.ui?.armWatchdogOnSend,
1091
+ );
1092
+ });
1093
+
1018
1094
  // ── Gateway setup ──────────────────────────────────────────────────
1019
1095
  const gateway = new SymiGateway();
1020
1096
  window.gateway = gateway;
@@ -0,0 +1,55 @@
1
+ // ── Debug Panel — real-time event log for Glass UI ───────────────────
2
+ // Shows every WebSocket event with timestamp, type, and payload summary.
3
+ // Collapsible. Capped at 200 entries. Hidden by default, toggled via Shift+D.
4
+
5
+ (function () {
6
+ const MAX_DEBUG_ENTRIES = 200;
7
+ let debugContainer = null;
8
+
9
+ window.initDebugPanel = function () {
10
+ debugContainer = document.getElementById("debug-panel-entries");
11
+
12
+ document.addEventListener("keydown", function (e) {
13
+ if (e.shiftKey && e.key === "D") {
14
+ const panel = document.getElementById("debug-panel");
15
+ if (panel) {
16
+ panel.classList.toggle("collapsed");
17
+ }
18
+ }
19
+ });
20
+ };
21
+
22
+ window.logDebugEvent = function (event, payload) {
23
+ if (!debugContainer) {
24
+ return;
25
+ }
26
+ const entry = document.createElement("div");
27
+ entry.className = "debug-entry";
28
+ var time = new Date().toLocaleTimeString("en-US", { hour12: false });
29
+ var summary = "";
30
+ try {
31
+ summary =
32
+ typeof payload === "object"
33
+ ? JSON.stringify(payload).slice(0, 120)
34
+ : String(payload).slice(0, 120);
35
+ } catch {
36
+ summary = "[unserializable]";
37
+ }
38
+ entry.textContent = time + " [" + event + "] " + summary;
39
+ debugContainer.prepend(entry);
40
+
41
+ // Cap entries
42
+ while (debugContainer.children.length > MAX_DEBUG_ENTRIES) {
43
+ debugContainer.removeChild(debugContainer.lastChild);
44
+ }
45
+ };
46
+
47
+ // Auto-init when DOM is ready
48
+ if (document.readyState === "loading") {
49
+ document.addEventListener("DOMContentLoaded", function () {
50
+ window.initDebugPanel();
51
+ });
52
+ } else {
53
+ window.initDebugPanel();
54
+ }
55
+ })();
@@ -156,6 +156,17 @@ class SymiGateway extends EventTarget {
156
156
  return;
157
157
  }
158
158
 
159
+ if (type === "profile") {
160
+ // Model profile broadcast — apply to Glass UI immediately
161
+ if (msg.payload?.profile) {
162
+ window.activeModelProfile = msg.payload.profile;
163
+ window.dispatchEvent(
164
+ new CustomEvent("symi:profile-changed", { detail: msg.payload.profile }),
165
+ );
166
+ }
167
+ return;
168
+ }
169
+
159
170
  if (type === "rpc.response") {
160
171
  const pending = this._pending.get(msg.id);
161
172
  if (pending) {
@@ -63,7 +63,8 @@
63
63
  }),
64
64
  });
65
65
 
66
- statusEl.textContent = "restarting…";
66
+ statusEl.textContent = "applied";
67
+ // Profile will arrive via WebSocket "profile" event after reload
67
68
  } catch (err) {
68
69
  console.warn("[models] switch failed:", err.message);
69
70
  statusEl.textContent = "switch failed";
@@ -71,6 +72,20 @@
71
72
  }
72
73
  }
73
74
 
75
+ // Listen for profile broadcasts to update status text
76
+ window.addEventListener("symi:profile-changed", (e) => {
77
+ const profile = e.detail;
78
+ if (profile?.label) {
79
+ statusEl.textContent = profile.label;
80
+ // Clear after 3s
81
+ setTimeout(() => {
82
+ if (statusEl.textContent === profile.label) {
83
+ statusEl.textContent = "";
84
+ }
85
+ }, 3000);
86
+ }
87
+ });
88
+
74
89
  buttons.forEach((btn) => {
75
90
  btn.addEventListener("click", () => switchModel(btn.dataset.model));
76
91
  });
@@ -288,6 +288,62 @@ window.copyCode = async (btn) => {
288
288
  } catch {}
289
289
  };
290
290
 
291
+ // ── Model token stripping (defense-in-depth for server-side filter) ──
292
+ const ALWAYS_STRIP_TOKENS = [
293
+ /<\|channel>\w*/gi,
294
+ /<channel\|>/gi,
295
+ /<start_of_turn>(?:model|user)?/gi,
296
+ /<end_of_turn>/gi,
297
+ /<\|(?:fim_prefix|fim_suffix|fim_middle)\|>/gi,
298
+ /^\s*<bos>\s*/gim,
299
+ ];
300
+
301
+ function stripModelTokensClient(text) {
302
+ let cleaned = text;
303
+
304
+ // Always strip known control tokens (defense in depth)
305
+ for (const re of ALWAYS_STRIP_TOKENS) {
306
+ re.lastIndex = 0;
307
+ cleaned = cleaned.replace(re, "");
308
+ }
309
+
310
+ // Profile-specific patterns on top
311
+ const profile = window.activeModelProfile;
312
+ if (profile?.filters?.stripPatterns?.length) {
313
+ for (const pat of profile.filters.stripPatterns) {
314
+ try {
315
+ cleaned = cleaned.replace(new RegExp(pat, "gi"), "");
316
+ } catch {
317
+ /* skip invalid patterns */
318
+ }
319
+ }
320
+ }
321
+
322
+ return cleaned;
323
+ }
324
+
325
+ // ── Self-reflection monologue filter ─────────────────────────────────
326
+ const MONOLOGUE_PATTERNS = [
327
+ /^I have not yet (?:successfully )?fulfilled/i,
328
+ /^Current Status:\s*\n/i,
329
+ /^Plan to fix:/i,
330
+ /^Address requirements:/i,
331
+ /^Let me (?:check|assess|evaluate) (?:my|the) (?:progress|status)/i,
332
+ /^(?:Task|Goal) (?:Status|Progress|Assessment):/i,
333
+ /^I (?:need to|should|must) (?:now |next )?(?:verify|check|confirm|assess)/i,
334
+ /^Verification:.*(?:failed|passed|pending)/i,
335
+ /^Self-assessment:/i,
336
+ ];
337
+
338
+ function isInternalMonologue(text) {
339
+ const profile = window.activeModelProfile;
340
+ if (profile?.filters?.suppressMonologue !== true) {
341
+ return false;
342
+ }
343
+ const trimmed = text.trim();
344
+ return MONOLOGUE_PATTERNS.some((re) => re.test(trimmed));
345
+ }
346
+
291
347
  // ── Markdown renderer ─────────────────────────────────────────────────
292
348
  function renderMarkdown(text) {
293
349
  if (!text) {
@@ -363,7 +419,12 @@ function renderBlock(block) {
363
419
  // ── Plain text with markdown ──────────────────────────────────────
364
420
  case "text": {
365
421
  el.className = "msg-text";
366
- el.innerHTML = renderMarkdown(block.text ?? "");
422
+ const rawText = block.text ?? "";
423
+ const stripped = stripModelTokensClient(rawText);
424
+ if (!stripped.trim()) {
425
+ break; // Empty after stripping — skip
426
+ }
427
+ el.innerHTML = renderMarkdown(stripped);
367
428
  break;
368
429
  }
369
430
 
@@ -744,6 +805,18 @@ window.renderMessage = function (message) {
744
805
  return null;
745
806
  }
746
807
 
808
+ // Internal monologue filter — route Gemma self-reflection to Reasoning Panel
809
+ if (!isUser && isInternalMonologue(_msgText)) {
810
+ if (typeof window.appendToReasoningPanel === "function") {
811
+ window.appendToReasoningPanel({
812
+ type: "thinking",
813
+ thinking: _msgText,
814
+ _source: "monologue-filter",
815
+ });
816
+ }
817
+ return null;
818
+ }
819
+
747
820
  // Plugin context messages (e.g. "[Outlook 365] Not connected...")
748
821
  if (role === "user" && /^\[.+\]\s+(Not connected|Connected as)\b/i.test(_msgText)) {
749
822
  if (typeof window.appendToReasoningPanel === "function") {
@@ -4,60 +4,61 @@
4
4
  */
5
5
 
6
6
  // Mock minimal browser environment
7
- const escHtml = (s) => String(s ?? '')
8
- .replace(/&/g, '&amp;')
9
- .replace(/</g, '&lt;')
10
- .replace(/>/g, '&gt;')
11
- .replace(/"/g, '&quot;')
12
- .replace(/'/g, '&#39;');
7
+ const escHtml = (s) =>
8
+ String(s ?? "")
9
+ .replace(/&/g, "&amp;")
10
+ .replace(/</g, "&lt;")
11
+ .replace(/>/g, "&gt;")
12
+ .replace(/"/g, "&quot;")
13
+ .replace(/'/g, "&#39;");
13
14
 
14
15
  // Test cases for XSS prevention
15
16
  // Key insight: we check that < and > are escaped, which neutralizes ALL HTML injection
16
17
  const xssTestCases = [
17
18
  {
18
- name: 'Script tag in inline code - angle brackets escaped',
19
+ name: "Script tag in inline code - angle brackets escaped",
19
20
  input: '<script>alert("XSS")</script>',
20
- mustNotContain: '<script>', // Raw < must be escaped
21
- mustContain: '&lt;script&gt;',
21
+ mustNotContain: "<script>", // Raw < must be escaped
22
+ mustContain: "&lt;script&gt;",
22
23
  },
23
24
  {
24
- name: 'Image tag XSS - angle brackets escaped',
25
+ name: "Image tag XSS - angle brackets escaped",
25
26
  input: '<img src=x onerror="alert(1)">',
26
- mustNotContain: '<img', // Raw < must be escaped
27
- mustContain: '&lt;img',
27
+ mustNotContain: "<img", // Raw < must be escaped
28
+ mustContain: "&lt;img",
28
29
  },
29
30
  {
30
- name: 'Quotes escaped to prevent attribute injection',
31
+ name: "Quotes escaped to prevent attribute injection",
31
32
  input: '" onclick="alert(1)"',
32
- mustNotContain: null, // All content is safe inside escaped code
33
- mustContain: '&quot;', // Double quotes must be escaped
33
+ mustNotContain: null, // All content is safe inside escaped code
34
+ mustContain: "&quot;", // Double quotes must be escaped
34
35
  },
35
36
  {
36
- name: 'HTML entities double-escaped',
37
- input: '&amp; &lt; &gt;',
38
- mustContain: '&amp;amp;',
37
+ name: "HTML entities double-escaped",
38
+ input: "&amp; &lt; &gt;",
39
+ mustContain: "&amp;amp;",
39
40
  },
40
41
  {
41
- name: 'Single quotes escaped',
42
+ name: "Single quotes escaped",
42
43
  input: "it's a test",
43
- mustContain: '&#39;',
44
+ mustContain: "&#39;",
44
45
  },
45
46
  {
46
- name: 'Normal code unchanged semantically',
47
- input: 'const x = 1;',
48
- mustContain: 'const x = 1;',
47
+ name: "Normal code unchanged semantically",
48
+ input: "const x = 1;",
49
+ mustContain: "const x = 1;",
49
50
  },
50
51
  {
51
- name: 'SVG XSS vector blocked',
52
+ name: "SVG XSS vector blocked",
52
53
  input: '<svg onload="alert(1)">',
53
- mustNotContain: '<svg',
54
- mustContain: '&lt;svg',
54
+ mustNotContain: "<svg",
55
+ mustContain: "&lt;svg",
55
56
  },
56
57
  {
57
- name: 'Nested script blocked',
58
- input: '<<script>script>alert(1)<</script>/script>',
59
- mustNotContain: '<script',
60
- mustContain: '&lt;',
58
+ name: "Nested script blocked",
59
+ input: "<<script>script>alert(1)<</script>/script>",
60
+ mustNotContain: "<script",
61
+ mustContain: "&lt;",
61
62
  },
62
63
  ];
63
64
 
@@ -67,7 +68,7 @@ function renderCodespan(text) {
67
68
  }
68
69
 
69
70
  // Run tests
70
- console.log('Glass UI render.js Security Tests\n' + '='.repeat(40) + '\n');
71
+ console.log("Glass UI render.js Security Tests\n" + "=".repeat(40) + "\n");
71
72
 
72
73
  let passed = 0;
73
74
  let failed = 0;
@@ -94,18 +95,18 @@ for (const tc of xssTestCases) {
94
95
  console.log(`✗ ${tc.name}`);
95
96
  console.log(` Input: ${tc.input}`);
96
97
  console.log(` Output: ${result}`);
97
- errors.forEach(e => console.log(` Error: ${e}`));
98
+ errors.forEach((e) => console.log(` Error: ${e}`));
98
99
  failed++;
99
100
  }
100
101
  }
101
102
 
102
- console.log('\n' + '='.repeat(40));
103
+ console.log("\n" + "=".repeat(40));
103
104
  console.log(`Results: ${passed} passed, ${failed} failed`);
104
105
 
105
106
  if (failed > 0) {
106
- console.log('\n❌ XSS vulnerability detected!');
107
+ console.log("\n❌ XSS vulnerability detected!");
107
108
  process.exit(1);
108
109
  } else {
109
- console.log('\n✅ All XSS tests passed - inline code is properly escaped');
110
+ console.log("\n✅ All XSS tests passed - inline code is properly escaped");
110
111
  process.exit(0);
111
112
  }
@@ -8,12 +8,12 @@
8
8
  * @returns {string} HTML-safe string
9
9
  */
10
10
  function escHtml(t) {
11
- return String(t ?? '')
12
- .replace(/&/g, '&amp;')
13
- .replace(/</g, '&lt;')
14
- .replace(/>/g, '&gt;')
15
- .replace(/"/g, '&quot;')
16
- .replace(/'/g, '&#39;');
11
+ return String(t ?? "")
12
+ .replace(/&/g, "&amp;")
13
+ .replace(/</g, "&lt;")
14
+ .replace(/>/g, "&gt;")
15
+ .replace(/"/g, "&quot;")
16
+ .replace(/'/g, "&#39;");
17
17
  }
18
18
 
19
19
  /**
@@ -5,9 +5,9 @@ import "./exec-CBKBIMpA.js";
5
5
  import "./agent-scope-D-jRCY0d.js";
6
6
  import "./github-copilot-token-DuFIqfeC.js";
7
7
  import "./manifest-registry-Czr39pxG.js";
8
- import "./config-CJigbfdK.js";
8
+ import "./config-DHBLS1Hl.js";
9
9
  import "./client-DMBZpU6X.js";
10
- import "./call-C7OJzLEL.js";
10
+ import "./call-BcE47FtD.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-DjjmZ7bN.js";
21
+ import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-DfZSz5JF.js";
22
22
  import { n as parsePositiveIntOrUndefined } from "./helpers-ITexi1_a.js";
23
23
 
24
24
  //#region src/cli/cron-cli/shared.ts
@@ -10,21 +10,21 @@ import "./github-copilot-token-DAu1a6BX.js";
10
10
  import "./boolean-BsqeuxE6.js";
11
11
  import "./env-DPCHYPeH.js";
12
12
  import "./message-channel-aT-I_DTX.js";
13
- import "./config-CkPct-ND.js";
13
+ import "./config-CHwyw6l5.js";
14
14
  import "./manifest-registry-C4BxOMWX.js";
15
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
19
  import "./client-CQSyCS4M.js";
20
- import "./call-BOIceRVF.js";
20
+ import "./call-CJaS1iRF.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-o-EndnYx.js";
27
+ import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-BxkKeCZ0.js";
28
28
 
29
29
  //#region src/cli/cron-cli/shared.ts
30
30
  const getCronChannelOptions = () => ["last", ...listChannelPlugins().map((plugin) => plugin.id)].join("|");
@@ -4,22 +4,22 @@ import { B as theme, R as colorize, S as shortenHomePath, U as getResolvedLogger
4
4
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
5
5
  import { t as formatCliCommand } from "./command-format-COaS-S7B.js";
6
6
  import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-aT-I_DTX.js";
7
- import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot, r as createConfigIO } from "./config-CkPct-ND.js";
7
+ import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot, r as createConfigIO } from "./config-CHwyw6l5.js";
8
8
  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-BOIceRVF.js";
12
+ import { n as callGateway } from "./call-CJaS1iRF.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-DHgVt6rY.js";
15
+ import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-ZmZYzlq3.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";
19
- import { i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-DpFImSwP.js";
19
+ import { i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-2mwX-jqj.js";
20
20
  import { s as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-Cl74hx8J.js";
21
- import { a as createCliStatusTextStyles, c as parsePortFromArgs, d as renderRuntimeHints, f as resolveRuntimeStatusColor, g as installDaemonServiceAndEmit, h as createDaemonActionContext, i as runServiceUninstall, l as pickProbeHostForBind, m as buildDaemonServiceSnapshot, n as runServiceStart, o as filterDaemonEnv, p as safeDaemonEnv, r as runServiceStop, s as normalizeListenerAddress, t as runServiceRestart, u as renderGatewayServiceStartHints } from "./lifecycle-core-S8m0j4NY.js";
22
- import { i as auditGatewayServiceConfig, n as renderSystemdUnavailableHints, s as formatRuntimeStatus, t as isSystemdUnavailableDetail } from "./systemd-hints-Cn-fd1AF.js";
21
+ import { a as createCliStatusTextStyles, c as parsePortFromArgs, d as renderRuntimeHints, f as resolveRuntimeStatusColor, g as installDaemonServiceAndEmit, h as createDaemonActionContext, i as runServiceUninstall, l as pickProbeHostForBind, m as buildDaemonServiceSnapshot, n as runServiceStart, o as filterDaemonEnv, p as safeDaemonEnv, r as runServiceStop, s as normalizeListenerAddress, t as runServiceRestart, u as renderGatewayServiceStartHints } from "./lifecycle-core-D6LYXpFj.js";
22
+ import { i as auditGatewayServiceConfig, n as renderSystemdUnavailableHints, s as formatRuntimeStatus, t as isSystemdUnavailableDetail } from "./systemd-hints-BR6gChwm.js";
23
23
  import { t as parsePort } from "./parse-port-Vm8F7Kus.js";
24
24
  import { t as readLastGatewayErrorLine } from "./diagnostics-BAMlsVVX.js";
25
25
  import { n as renderGatewayServiceCleanupHints, t as findExtraGatewayServices } from "./inspect-CllGjsWo.js";
@@ -1,8 +1,8 @@
1
1
  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
- import { i as loadConfig, l as writeConfigFile, o as readConfigFileSnapshot, r as createConfigIO } from "./config-CJigbfdK.js";
5
- import { n as callGateway } from "./call-C7OJzLEL.js";
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";
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,13 +11,13 @@ 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-Cammg0Xb.js";
14
+ import { g as resolveControlUiLinks, h as randomToken } from "./onboard-helpers-_pit1NZW.js";
15
15
  import { n as isWSLEnv } from "./wsl-jdLWdiKy.js";
16
16
  import { n as inheritOptionFromParent } from "./command-options-6wdtBBWB.js";
17
- import { i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-Co0_hiZm.js";
17
+ import { i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-CfRwa6qh.js";
18
18
  import { s as resolveGatewayLogPaths, t as resolveGatewayService } from "./service-Cm9j9WzQ.js";
19
- import { a as createCliStatusTextStyles, c as parsePortFromArgs, d as renderRuntimeHints, f as resolveRuntimeStatusColor, g as installDaemonServiceAndEmit, h as createDaemonActionContext, i as runServiceUninstall, l as pickProbeHostForBind, m as buildDaemonServiceSnapshot, n as runServiceStart, o as filterDaemonEnv, p as safeDaemonEnv, r as runServiceStop, s as normalizeListenerAddress, t as runServiceRestart, u as renderGatewayServiceStartHints } from "./lifecycle-core-D7Ye5Yes.js";
20
- import { i as auditGatewayServiceConfig, n as renderSystemdUnavailableHints, s as formatRuntimeStatus, t as isSystemdUnavailableDetail } from "./systemd-hints-BMl55p2_.js";
19
+ import { a as createCliStatusTextStyles, c as parsePortFromArgs, d as renderRuntimeHints, f as resolveRuntimeStatusColor, g as installDaemonServiceAndEmit, h as createDaemonActionContext, i as runServiceUninstall, l as pickProbeHostForBind, m as buildDaemonServiceSnapshot, n as runServiceStart, o as filterDaemonEnv, p as safeDaemonEnv, r as runServiceStop, s as normalizeListenerAddress, t as runServiceRestart, u as renderGatewayServiceStartHints } from "./lifecycle-core-DIBHfMOL.js";
20
+ import { i as auditGatewayServiceConfig, n as renderSystemdUnavailableHints, s as formatRuntimeStatus, t as isSystemdUnavailableDetail } from "./systemd-hints-sQipWGd1.js";
21
21
  import { t as parsePort } from "./parse-port-BQ0_YQqL.js";
22
22
  import { t as readLastGatewayErrorLine } from "./diagnostics-CS1ov_hH.js";
23
23
  import { n as renderGatewayServiceCleanupHints, t as findExtraGatewayServices } from "./inspect-t04OgGMk.js";
@@ -5017,9 +5017,37 @@ const BedrockDiscoverySchema = z.object({
5017
5017
  defaultContextWindow: z.number().int().positive().optional(),
5018
5018
  defaultMaxTokens: z.number().int().positive().optional()
5019
5019
  }).strict().optional();
5020
+ const ModelProfileSchema = z.object({
5021
+ match: z.union([z.string().min(1), z.array(z.string().min(1))]),
5022
+ label: z.string().optional(),
5023
+ params: z.object({
5024
+ temperature: z.number().min(0).max(2).optional(),
5025
+ top_p: z.number().min(0).max(1).optional(),
5026
+ top_k: z.number().int().nonnegative().optional(),
5027
+ max_tokens: z.number().int().positive().optional(),
5028
+ stop: z.array(z.string()).optional()
5029
+ }).strict().optional(),
5030
+ streaming: z.object({
5031
+ deltaThrottleMs: z.number().int().nonnegative().optional(),
5032
+ flushOnFinal: z.boolean().optional(),
5033
+ chunkPattern: z.union([z.literal("token"), z.literal("burst")]).optional()
5034
+ }).strict().optional(),
5035
+ filters: z.object({
5036
+ stripPatterns: z.array(z.string()).optional(),
5037
+ suppressMonologue: z.boolean().optional(),
5038
+ hasStructuredThinking: z.boolean().optional()
5039
+ }).strict().optional(),
5040
+ promptAdditions: z.array(z.string()).optional(),
5041
+ ui: z.object({
5042
+ badge: z.string().optional(),
5043
+ watchdogMs: z.number().int().min(1e3).optional(),
5044
+ armWatchdogOnSend: z.boolean().optional()
5045
+ }).strict().optional()
5046
+ }).strict();
5020
5047
  const ModelsConfigSchema = z.object({
5021
5048
  mode: z.union([z.literal("merge"), z.literal("replace")]).optional(),
5022
5049
  providers: z.record(z.string(), ModelProviderSchema).optional(),
5050
+ profiles: z.array(ModelProfileSchema).optional(),
5023
5051
  bedrockDiscovery: BedrockDiscoverySchema
5024
5052
  }).strict().optional();
5025
5053
  const GroupChatSchema = z.object({
@@ -1,5 +1,5 @@
1
1
  import { t as formatCliCommand } from "./command-format-COaS-S7B.js";
2
- import { H as VERSION, R as collectConfigServiceEnvVars } from "./config-CkPct-ND.js";
2
+ import { H as VERSION, R as collectConfigServiceEnvVars } from "./config-CHwyw6l5.js";
3
3
  import { a as NODE_SERVICE_MARKER, c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName, g as resolveNodeWindowsTaskName, h as resolveNodeSystemdServiceName, i as NODE_SERVICE_KIND, m as resolveNodeLaunchAgentLabel, n as GATEWAY_SERVICE_KIND, o as NODE_WINDOWS_TASK_SCRIPT_NAME, r as GATEWAY_SERVICE_MARKER } from "./constants-C8_BLnaW.js";
4
4
  import { n as isSupportedNodeVersion } from "./runtime-guard-B37eizu-.js";
5
5
  import os from "node:os";
@@ -1,5 +1,5 @@
1
1
  import { t as formatCliCommand } from "./command-format-BtYOfWxC.js";
2
- import { H as VERSION, R as collectConfigServiceEnvVars } from "./config-CJigbfdK.js";
2
+ import { H as VERSION, R as collectConfigServiceEnvVars } from "./config-DHBLS1Hl.js";
3
3
  import { a as NODE_SERVICE_MARKER, c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName, g as resolveNodeWindowsTaskName, h as resolveNodeSystemdServiceName, i as NODE_SERVICE_KIND, m as resolveNodeLaunchAgentLabel, n as GATEWAY_SERVICE_KIND, o as NODE_WINDOWS_TASK_SCRIPT_NAME, r as GATEWAY_SERVICE_MARKER } from "./constants-CPeVoSXJ.js";
4
4
  import { n as isSupportedNodeVersion } from "./runtime-guard-D7waq_Ho.js";
5
5
  import { execFile } from "node:child_process";