@symerian/symi 3.4.30 → 3.4.32

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 (422) hide show
  1. package/dist/{agent-O3PihJOY.js → agent-BaSGoKPq.js} +17 -17
  2. package/dist/{agent-tdS4G7e8.js → agent-C8IIjDyn.js} +21 -21
  3. package/dist/{agent-scope-Ck_TLGsV.js → agent-scope-B6p555mP.js} +1 -1
  4. package/dist/{agent-scope-DJI5ijOw.js → agent-scope-DIjW66iO.js} +3 -3
  5. package/dist/{agents-C2MpIr16.js → agents-D6Ygz9ED.js} +12 -12
  6. package/dist/{agents.config-PPeqGzAc.js → agents.config-D1nFwU81.js} +1 -1
  7. package/dist/{agents.config-LRW5SZoE.js → agents.config-D7cHU-OU.js} +1 -1
  8. package/dist/{audit-TmPjr_wD.js → audit-BI8Rbs5q.js} +19 -19
  9. package/dist/{audit-yf3H4Y1h.js → audit-nqP-JeOr.js} +17 -17
  10. package/dist/{auth-BSmNj-Lv.js → auth-BbwD4lRX.js} +1 -1
  11. package/dist/{auth-choice-Bw2Kd6RM.js → auth-choice-BBrEzoy2.js} +8 -8
  12. package/dist/{auth-choice-CyBcsQ9T.js → auth-choice-Bx4Duu6u.js} +8 -8
  13. package/dist/{auth-profiles-C1lvfaCM.js → auth-profiles-BFSVvFKy.js} +6 -6
  14. package/dist/{auth-profiles-BG_wMJz6.js → auth-profiles-Bs5D0GUv.js} +4 -4
  15. package/dist/{auth-token-C0-TDuag.js → auth-token-Brb1Askz.js} +2 -2
  16. package/dist/{auth-token-BwQ5Nv4O.js → auth-token-SebYuqfR.js} +2 -2
  17. package/dist/{banner-D7__HlM-.js → banner-l9GjW5Rm.js} +2 -2
  18. package/dist/{bindings-D5s2VRjL.js → bindings-9LSA3Jr1.js} +1 -1
  19. package/dist/{bonjour-discovery-YoubCASb.js → bonjour-discovery-BTpm6P8H.js} +1 -1
  20. package/dist/{bonjour-discovery-CPzedvdf.js → bonjour-discovery-CU1mz7AC.js} +2 -2
  21. package/dist/{browser-cli-R6JagRCf.js → browser-cli-BAxOL41p.js} +22 -22
  22. package/dist/{browser-cli-B_6WWHm_.js → browser-cli-Bk8DxxeA.js} +13 -13
  23. package/dist/build-info.json +3 -3
  24. package/dist/bundled/boot-md/handler.js +4 -4
  25. package/dist/bundled/session-memory/handler.js +4 -4
  26. package/dist/{call-IfleM0ap.js → call-5IE9ycvm.js} +3 -4
  27. package/dist/{call-sikajorp.js → call-BPJn2_th.js} +5 -6
  28. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  29. package/dist/{catalog-DgsRZ5Yu.js → catalog-CJzUbDcX.js} +2 -2
  30. package/dist/{catalog-Bc0hKvgn.js → catalog-CSgSg5Gp.js} +2 -2
  31. package/dist/{channel-options-DrHwfPTb.js → channel-options-COanIUoQ.js} +5 -5
  32. package/dist/{channel-options-B5974x-7.js → channel-options-DGUqfnbP.js} +2 -2
  33. package/dist/{channel-selection-Cc4Pvn6b.js → channel-selection-BvIcXQLj.js} +2 -2
  34. package/dist/{channels-cli-D50PQAPc.js → channels-cli-B1zmnm5a.js} +83 -83
  35. package/dist/{channels-cli-C6Nv9mzy.js → channels-cli-CZ3M3yE1.js} +62 -62
  36. package/dist/{channels-status-issues-VZcSU4qT.js → channels-status-issues-DC8vgOMo.js} +1 -1
  37. package/dist/{chrome-DJCkCRLf.js → chrome-B0wRtBRB.js} +3 -3
  38. package/dist/{chrome-DT1fIVG1.js → chrome-B4P7ycw5.js} +7 -7
  39. package/dist/{chrome-CPSDqbK6.js → chrome-CQn8fDIy.js} +7 -7
  40. package/dist/{chrome-BM8HZu2p.js → chrome-VbDUdW0_.js} +4 -4
  41. package/dist/{chunk-D2_aCcvs.js → chunk-DQGU0F8t.js} +1 -1
  42. package/dist/{clack-prompter-BwhCW0Jc.js → clack-prompter-CWQQn_CK.js} +5 -5
  43. package/dist/cli-C7I5uEFC.js +128 -0
  44. package/dist/{cli-DZoms4qg.js → cli-CC5GrdTI.js} +52 -52
  45. package/dist/{client-Bcz3rG5V.js → client-Dp8LUTmF.js} +3 -5
  46. package/dist/{client-BzacpVvW.js → client-qjXXRKCO.js} +5 -7
  47. package/dist/{clipboard-Dz-Ob0yt.js → clipboard-McRwF3r0.js} +1 -1
  48. package/dist/{command-format-6B5tP-i9.js → command-format-Xm6vX3qJ.js} +1 -1
  49. package/dist/{command-registry--D98SJ6k.js → command-registry-D8fj6th4.js} +12 -12
  50. package/dist/{commands-DgyiLrAe.js → commands-B3UrgxIz.js} +2 -2
  51. package/dist/{commands-BN08daX-.js → commands-CHkx0oTl.js} +1 -1
  52. package/dist/{commands-registry-Bbs_ugoi.js → commands-registry-BNCcZy2y.js} +5 -5
  53. package/dist/{commands-registry-QB7xD3bc.js → commands-registry-Bccp0eH5.js} +3 -3
  54. package/dist/{completion-cli-CHYvpIPw.js → completion-cli-BxspmuYm.js} +3 -3
  55. package/dist/{completion-cli-QxWULepB.js → completion-cli-C-85b5b8.js} +4 -4
  56. package/dist/{config-vtCLkS2w.js → config-DqMsGcSQ.js} +7 -21
  57. package/dist/{config-cli-CcZo2229.js → config-cli-BqzjDmIH.js} +13 -13
  58. package/dist/{config-cli-DstpcB33.js → config-cli-DSDGwckX.js} +12 -12
  59. package/dist/{config-guard-CC-lFWDU.js → config-guard-CJcSKMuP.js} +21 -21
  60. package/dist/{config-guard-CCJrDmON.js → config-guard-Cu-dwAgi.js} +4 -4
  61. package/dist/{config-BTSBEAnk.js → config-igdtSRrZ.js} +10 -24
  62. package/dist/{config-validation-DSnQNdDO.js → config-validation-Bp2wJ610.js} +1 -1
  63. package/dist/{config-validation-YCrMlM9Z.js → config-validation-Bs1Gp2oG.js} +2 -2
  64. package/dist/{configure-B-UvSZZ7.js → configure-BazJdwKU.js} +14 -14
  65. package/dist/{configure-C4Qjzxdq.js → configure-Dl1f1Den.js} +25 -25
  66. package/dist/{consolidate-CPVaVTv0.js → consolidate-7Usm-b2g.js} +4 -4
  67. package/dist/{control-service-CwRG4M_O.js → control-service-DO8FjrS6.js} +4 -4
  68. package/dist/{control-service--TrXUUt_.js → control-service-Fn3d9AlH.js} +5 -5
  69. package/dist/{control-ui-assets-DI1jLkM6.js → control-ui-assets-DUhvOLUL.js} +2 -2
  70. package/dist/{cron-cli-DUETe3Of.js → cron-cli-DXgI5Lid.js} +10 -10
  71. package/dist/{cron-cli-BfUM5_Kw.js → cron-cli-DZyH2BfZ.js} +19 -19
  72. package/dist/{daemon-cli-DRDkDw_M.js → daemon-cli-C6FSROt1.js} +18 -18
  73. package/dist/{daemon-cli-Dy5eY4M7.js → daemon-cli-DmMYx5Uf.js} +10 -10
  74. package/dist/daemon-cli.js +0 -3
  75. package/dist/{daemon-runtime-ChztAKDA.js → daemon-runtime-2Y9RfgcP.js} +2 -2
  76. package/dist/{daemon-runtime-CqMnoGym.js → daemon-runtime-BpfA4d6Q.js} +2 -2
  77. package/dist/{deliver-59sRVaYQ.js → deliver-BkCYBlzi.js} +4 -4
  78. package/dist/{deliver-Mqq3tgqB.js → deliver-DvW5xHHr.js} +4 -4
  79. package/dist/{deliver-fvcQPsBc.js → deliver-RwovDEDy.js} +8 -8
  80. package/dist/{deliver-BHmK4isn.js → deliver-izdrXPr4.js} +5 -5
  81. package/dist/{delivery-queue-Du1ukE9B.js → delivery-queue-DDs84baU.js} +1 -1
  82. package/dist/{delivery-queue-Bqja5xKq.js → delivery-queue-nheCYaMd.js} +1 -1
  83. package/dist/{deps-CeHgkkO6.js → deps-bCHNuszw.js} +1 -1
  84. package/dist/{devices-cli-DV8wT4cj.js → devices-cli-D6xXc9Ym.js} +17 -17
  85. package/dist/{devices-cli-BCZ2HHjT.js → devices-cli-IMv-0zor.js} +9 -9
  86. package/dist/{diagnostic-Db9MI5bh.js → diagnostic-CwF3MnBL.js} +1 -1
  87. package/dist/{diagnostics-B9e2Kvx8.js → diagnostics-DxdqTfpW.js} +1 -1
  88. package/dist/{directory-cli-BVGd0l0T.js → directory-cli-3wlYB9In.js} +7 -7
  89. package/dist/{directory-cli-B6Ja7314.js → directory-cli-ClbYhd6z.js} +17 -17
  90. package/dist/{dm-policy-shared-Bjdk2L7B.js → dm-policy-shared-5HLej1br.js} +2 -2
  91. package/dist/{dm-policy-shared-BBTioONS.js → dm-policy-shared-CSF4Tw_F.js} +1 -1
  92. package/dist/{dns-cli-MEjZBWpL.js → dns-cli-CY2voLuR.js} +14 -14
  93. package/dist/{dns-cli-DH-ksmiI.js → dns-cli-CoVIqRWx.js} +8 -8
  94. package/dist/{dock-CSF4Y7tm.js → dock-CnGWTXL4.js} +2 -2
  95. package/dist/{docs-cli-BuX8FDdh.js → docs-cli-CFklWCND.js} +5 -5
  96. package/dist/{docs-cli-Cc3Rhfkx.js → docs-cli-DjQ3SvBq.js} +8 -8
  97. package/dist/{doctor-completion-rBc-f29C.js → doctor-completion-BwHbIZjF.js} +2 -2
  98. package/dist/{doctor-completion-C4Sf8CFV.js → doctor-completion-CX7LjkOD.js} +2 -2
  99. package/dist/{doctor-config-flow-CrnteetS.js → doctor-config-flow-CYDx1U0Z.js} +7 -7
  100. package/dist/{doctor-config-flow-BhmF6EAq.js → doctor-config-flow-wvoEFNeZ.js} +8 -8
  101. package/dist/entry.js +4 -7
  102. package/dist/{env-DoZWjLUy.js → env-B97Ms861.js} +1 -1
  103. package/dist/{exec-BcMHopF9.js → exec-DKyLtSjm.js} +2 -2
  104. package/dist/{exec-approvals-BndOYKTM.js → exec-approvals-B8n8es8o.js} +1 -1
  105. package/dist/{exec-approvals-BZBjOrJL.js → exec-approvals-CZOc8M5w.js} +1 -1
  106. package/dist/{exec-approvals-cli-Bqh3x_d1.js → exec-approvals-cli-B_P-1zVp.js} +24 -24
  107. package/dist/{exec-approvals-cli-CyXTXgft.js → exec-approvals-cli-Dy1jvh2M.js} +16 -16
  108. package/dist/extensionAPI.js +4 -4
  109. package/dist/{fetch-guard-BuQQKfW1.js → fetch-guard-DG6T0ZdL.js} +1 -1
  110. package/dist/{frontmatter-BH3ExkUY.js → frontmatter-B4levtVg.js} +2 -2
  111. package/dist/{gateway-cli-BrcMZGyF.js → gateway-cli-CTcK1Az2.js} +113 -114
  112. package/dist/{gateway-cli-fT43bqlv.js → gateway-cli-CW-Z71cE.js} +88 -89
  113. package/dist/{gateway-rpc-BEqCo2JK.js → gateway-rpc-C1xjWlxu.js} +1 -1
  114. package/dist/{gateway-rpc-cpgRv0Yq.js → gateway-rpc-DD_aXogj.js} +3 -3
  115. package/dist/{github-copilot-token-DIIEouRg.js → github-copilot-token-BTNK6Tcd.js} +1 -1
  116. package/dist/{github-copilot-token-CrM1aEWo.js → github-copilot-token-a6a53zx_.js} +1 -1
  117. package/dist/{glass-ui-ws-dERcmtve.js → glass-ui-ws-BNJkhJrL.js} +96 -96
  118. package/dist/{glass-ui-ws-BfMKuf9v.js → glass-ui-ws-BZvH4MBO.js} +68 -68
  119. package/dist/{gmail-setup-utils-Cz9Tb30q.js → gmail-setup-utils-B1BYpISg.js} +2 -2
  120. package/dist/{gmail-setup-utils-5bVmaBiu.js → gmail-setup-utils-fA1VaWLv.js} +3 -3
  121. package/dist/{health-Bpjd5_Oq.js → health-D8cKia4i.js} +10 -10
  122. package/dist/{health-DDxrkioj.js → health-DdzNc1yA.js} +5 -5
  123. package/dist/{health-format-BQcmGV4C.js → health-format-39e76m9p.js} +1 -1
  124. package/dist/{help-format-Bm9CoBSa.js → help-format-BI_G2p1e.js} +1 -1
  125. package/dist/{hooks-cli-Bkp-j7h6.js → hooks-cli-DkP3Y4ou.js} +76 -76
  126. package/dist/{hooks-cli-Btgk__9z.js → hooks-cli-qO421UdO.js} +59 -59
  127. package/dist/{hooks-status-BjjfBQnp.js → hooks-status-COU9Cw9_.js} +2 -2
  128. package/dist/{hooks-status-BaV4_YaJ.js → hooks-status-uaFS2SUa.js} +3 -3
  129. package/dist/{image-ops-CiGlXf65.js → image-ops-C-gIIp7Q.js} +1 -1
  130. package/dist/index.js +81 -81
  131. package/dist/{inspect-B_hklr0u.js → inspect-BDzd6yBs.js} +1 -1
  132. package/dist/{installs-DjzewzNC.js → installs-DhSLZRT7.js} +2 -2
  133. package/dist/{installs-B7y-N4mr.js → installs-cPraL4Dg.js} +2 -2
  134. package/dist/{lifecycle-core-CHB-QdED.js → lifecycle-core-BEmljRfh.js} +7 -7
  135. package/dist/{lifecycle-core-B0tG8ERp.js → lifecycle-core-uN2bsrZs.js} +3 -3
  136. package/dist/{links-Bmkpld9F.js → links-CSaUKNKm.js} +1 -1
  137. package/dist/{links-D4w-tJYZ.js → links-Db3Rw0Tg.js} +1 -1
  138. package/dist/llm-slug-generator.js +4 -4
  139. package/dist/{local-roots-DSeNuIW-.js → local-roots-Bk3321gv.js} +2 -2
  140. package/dist/{local-roots-lknhM9c3.js → local-roots-BnDnugq3.js} +3 -3
  141. package/dist/{logging-miJdTAeb.js → logging-B96FQvnn.js} +2 -2
  142. package/dist/{logging-DrqPd0Fg.js → logging-BeA4q4J_.js} +1 -1
  143. package/dist/{logs-cli-CUhZrDw7.js → logs-cli-BB0Mq8D1.js} +11 -11
  144. package/dist/{logs-cli-CGcdfvBo.js → logs-cli-Dbmzz8m_.js} +18 -18
  145. package/dist/{manager-BeNnzSJv.js → manager-BD_cpL9b.js} +1 -1
  146. package/dist/{manager-Di9qtuZF.js → manager-BQaZlWzK.js} +6 -6
  147. package/dist/{manager-uBAL1G42.js → manager-D0NIHMuQ.js} +1 -1
  148. package/dist/{manager-DqMx0qDw.js → manager-DOiW-Koo.js} +9 -9
  149. package/dist/{manifest-registry-0FO1WTmC.js → manifest-registry-DJcKcUQ9.js} +1 -1
  150. package/dist/{manifest-registry-DYQQ9Cci.js → manifest-registry-D_LsBSyt.js} +1 -1
  151. package/dist/{markdown-tables-Ca1j7TYS.js → markdown-tables-GTLvbzuR.js} +1 -1
  152. package/dist/{memory-BDeydRz3.js → memory-Cl4I_45k.js} +6 -6
  153. package/dist/{memory-cli-D4hZiGr5.js → memory-cli-CszP57Ee.js} +8 -8
  154. package/dist/{memory-cli-BXclq7qt.js → memory-cli-DkD_OD70.js} +13 -13
  155. package/dist/{memory-BXoRMmVn.js → memory-kIYeV9aO.js} +7 -7
  156. package/dist/{message-channel-BqrA0uMO.js → message-channel-C_V8IAYx.js} +1 -1
  157. package/dist/{model-DibfNW71.js → model-BRcKPW49.js} +1 -1
  158. package/dist/{model-Czbmn47-.js → model-DgN15006.js} +1 -1
  159. package/dist/{model-catalog-DPnCNs5N.js → model-catalog-C2rNhRI4.js} +4 -4
  160. package/dist/{model-catalog-Ds0dg_ob.js → model-catalog-CaGfL-2g.js} +4 -4
  161. package/dist/{model-picker-DuPommMc.js → model-picker-4NUXHy8M.js} +3 -3
  162. package/dist/{model-picker-BbaEgNir.js → model-picker-CV56GE8A.js} +3 -3
  163. package/dist/{models-B0wNKA18.js → models-BYi0Fo1a.js} +21 -21
  164. package/dist/{models-cli-CZY5Me88.js → models-cli-Bn9M1TgO.js} +83 -83
  165. package/dist/{models-cli-CL5K06Wu.js → models-cli-EdjvkvFO.js} +59 -59
  166. package/dist/{models-config-Box19p27.js → models-config-Unnduxgs.js} +3 -3
  167. package/dist/{models-config-CPlvO1b0.js → models-config-yKxNCn4V.js} +3 -3
  168. package/dist/{node-cli-BFBfD3vK.js → node-cli-39H0MZ8q.js} +36 -36
  169. package/dist/{node-cli-CWWMajKF.js → node-cli-C8FYMIjN.js} +21 -21
  170. package/dist/{node-service-CkP4-uRI.js → node-service-tPO_yUk7.js} +1 -1
  171. package/dist/{nodes-cli-BY4Ppctn.js → nodes-cli-C-03nIJ0.js} +22 -22
  172. package/dist/{nodes-cli-YmE7S-JB.js → nodes-cli-CqxQexTU.js} +14 -14
  173. package/dist/{nodes-screen-BfQScwqX.js → nodes-screen-Bkq2kswx.js} +2 -2
  174. package/dist/{nodes-screen-BMUoHTPZ.js → nodes-screen-JELuBMBi.js} +1 -1
  175. package/dist/{note-C4Pc_hIl.js → note-CHrtEumO.js} +2 -2
  176. package/dist/{npm-registry-spec-C8W7KCAB.js → npm-registry-spec-BXw_6vF6.js} +2 -2
  177. package/dist/{npm-registry-spec-s-9OX2Kw.js → npm-registry-spec-NLo2PCol.js} +1 -1
  178. package/dist/{onboard-DjlI4mIw.js → onboard-C8IQnigm.js} +19 -19
  179. package/dist/{onboard-HqUZVKyD.js → onboard-CAIujkV7.js} +13 -13
  180. package/dist/{onboard-channels-BbF5-N3g.js → onboard-channels-B2l6OoMg.js} +7 -7
  181. package/dist/{onboard-channels-C5EUFcLq.js → onboard-channels-D_uUQbem.js} +9 -9
  182. package/dist/{onboard-custom-C-6Cooq5.js → onboard-custom-B2fJvyxt.js} +3 -3
  183. package/dist/{onboard-custom-63SI3jrk.js → onboard-custom-DcZ2SEUv.js} +3 -3
  184. package/dist/{onboard-helpers-Cb3WFLl9.js → onboard-helpers-Bm-oyLWy.js} +5 -5
  185. package/dist/{onboard-helpers-Bpa6_3vl.js → onboard-helpers-CHfdRdZR.js} +9 -9
  186. package/dist/{onboard-hooks-ggR6fsQs.js → onboard-hooks-DBYkemjF.js} +8 -8
  187. package/dist/{onboard-hooks-DXXg3YH9.js → onboard-hooks-DgRzMz0E.js} +5 -5
  188. package/dist/{onboard-remote-Cnxe89N8.js → onboard-remote-ecyetiyL.js} +3 -3
  189. package/dist/{onboard-remote-CqtCrqtm.js → onboard-remote-z8XLK4M0.js} +3 -3
  190. package/dist/{onboard-skills-D5Ww8pwO.js → onboard-skills-BLvL0KPR.js} +4 -4
  191. package/dist/{onboard-skills-CS3l5fhH.js → onboard-skills-C53RGq_5.js} +5 -5
  192. package/dist/{onboarding-BPmsmDud.js → onboarding-4v9LJueP.js} +18 -18
  193. package/dist/{onboarding-Be_HJIFA.js → onboarding-BIq5BxG0.js} +16 -16
  194. package/dist/{onboarding.finalize-QwO5yuPm.js → onboarding.finalize-Bkcwe5RS.js} +51 -51
  195. package/dist/{onboarding.finalize-dsCUTKCQ.js → onboarding.finalize-CXAQzVXM.js} +32 -32
  196. package/dist/{onboarding.gateway-config-BZDShYzP.js → onboarding.gateway-config-3JMN1xRf.js} +22 -22
  197. package/dist/{onboarding.gateway-config-Ctd1_QW4.js → onboarding.gateway-config-Ft3f6Jba.js} +11 -11
  198. package/dist/{openai-model-default-Dxlm7Pvs.js → openai-model-default-BVPmAuXK.js} +3 -3
  199. package/dist/{openai-model-default-DT9-42Xb.js → openai-model-default-CDDFpxUr.js} +3 -3
  200. package/dist/{outbound-send-deps-DPsU_Xdy.js → outbound-send-deps-Dmc3B-LK.js} +1 -1
  201. package/dist/{pairing-cli-PtlNv7Gr.js → pairing-cli-B_icqS8Y.js} +9 -9
  202. package/dist/{pairing-cli-C1TeY-2m.js → pairing-cli-CJGA4j6G.js} +15 -15
  203. package/dist/{pairing-store-5oyzSW2X.js → pairing-store-BGf29nPx.js} +4 -4
  204. package/dist/{pairing-store-B9MEud_Y.js → pairing-store-CtBnCGHZ.js} +2 -2
  205. package/dist/{pairing-token-Cup-49D-.js → pairing-token-Bnr7QjVF.js} +1 -1
  206. package/dist/{pairing-token-BaZLnDjo.js → pairing-token-CURbSHdi.js} +1 -1
  207. package/dist/{path-env-C8hRAfiL.js → path-env-DuQralyy.js} +1 -1
  208. package/dist/{paths-By0XjHBk.js → paths-BSzKwaxE.js} +1 -4
  209. package/dist/{paths-BldkKgCk.js → paths-CJcw9nbZ.js} +1 -1
  210. package/dist/{paths-gcw23t43.js → paths-CNexk5_o.js} +1 -1
  211. package/dist/{paths-7zaGPdLp.js → paths-CsQkeUQ3.js} +1 -1
  212. package/dist/{paths-DeDKrl27.js → paths-Dc6A9_vI.js} +1 -1
  213. package/dist/{pi-auth-json-BOXWkXms.js → pi-auth-json-CUZ7IgY7.js} +1 -1
  214. package/dist/{pi-auth-json-DVUJqaKg.js → pi-auth-json-SHGGQzOL.js} +1 -1
  215. package/dist/{pi-embedded-Cp7d6jtB.js → pi-embedded-CGebiST2.js} +10 -13
  216. package/dist/{pi-embedded-helpers-CVKIHnFv.js → pi-embedded-helpers-BwBjqJM5.js} +2 -2
  217. package/dist/{pi-embedded-helpers-DMVyRPBT.js → pi-embedded-helpers-CAdI9wJ5.js} +4 -4
  218. package/dist/{pi-tools.policy-8_wTu7v2.js → pi-tools.policy-BaRznBvu.js} +3 -3
  219. package/dist/{pi-tools.policy-C5aC-K5q.js → pi-tools.policy-Dyx3nBmp.js} +5 -5
  220. package/dist/{plugin-auto-enable-CYoZQPJO.js → plugin-auto-enable-D2TNEv3x.js} +4 -4
  221. package/dist/{plugin-auto-enable-BWd5lJQf.js → plugin-auto-enable-DSliW8o4.js} +3 -3
  222. package/dist/{plugin-registry-BG51uZOA.js → plugin-registry-D7ACpV2Y.js} +3 -3
  223. package/dist/{plugin-registry-BouuQy-X.js → plugin-registry-d4hMhLLZ.js} +5 -5
  224. package/dist/plugin-sdk/gateway/protocol/index.d.ts +2 -5
  225. package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +0 -1
  226. package/dist/{plugins-CypN_04v.js → plugins-DuuHorqi.js} +1 -1
  227. package/dist/{plugins-cli-Bk7Al8u3.js → plugins-cli-CPf1hMaZ.js} +76 -76
  228. package/dist/{plugins-cli-B-zVOiQN.js → plugins-cli-D1gd8p9T.js} +58 -58
  229. package/dist/{ports-BgvsHTN5.js → ports-BAzQoIw0.js} +2 -2
  230. package/dist/{ports-YkSuli-C.js → ports-Cv4kt1bT.js} +1 -1
  231. package/dist/{ports-BxtK6PMH.js → ports-DRHSHvqY.js} +2 -2
  232. package/dist/{ports-CduvYJlk.js → ports-DqxP-bXz.js} +3 -3
  233. package/dist/{program-BOh0XGsA.js → program-C19G7o-Q.js} +63 -63
  234. package/dist/{program-context-D73fzUUe.js → program-context-BSUkEz3n.js} +39 -39
  235. package/dist/{progress-B3rWk9lR.js → progress-CyPyGCDn.js} +2 -2
  236. package/dist/{prompt-select-styled-Bz1VV3Qu.js → prompt-select-styled-B5wlPYN5.js} +40 -40
  237. package/dist/{prompt-select-styled-Bj-hrPCx.js → prompt-select-styled-CnYM7W0j.js} +24 -24
  238. package/dist/{prompt-style-LtRrtcTi.js → prompt-style-Cad0BDRS.js} +1 -1
  239. package/dist/{provider-auth-helpers-BK6NFk2Q.js → provider-auth-helpers-BUC4xGK9.js} +5 -5
  240. package/dist/{provider-auth-helpers-D3hXI6HN.js → provider-auth-helpers-DpRoNr_8.js} +7 -7
  241. package/dist/{push-apns-C1guJr4R.js → push-apns-Bm39oOO9.js} +5 -5
  242. package/dist/{push-apns-CMxk3Hxf.js → push-apns-DqmFEcqh.js} +3 -3
  243. package/dist/{pw-ai-CE2TBGif.js → pw-ai-B0-pgbYu.js} +9 -9
  244. package/dist/{pw-ai-EtT_bBJY.js → pw-ai-B2NuWIL7.js} +13 -13
  245. package/dist/{pw-ai-w6Qalz1W.js → pw-ai-BB1pJj9_.js} +1 -1
  246. package/dist/{pw-ai-C5MJKzUM.js → pw-ai-BsEf8C15.js} +1 -1
  247. package/dist/{qmd-manager--xIse9H_.js → qmd-manager--kGuC39q.js} +4 -4
  248. package/dist/{qmd-manager-DgCmfS8D.js → qmd-manager-358OTDns.js} +8 -8
  249. package/dist/{qr-cli-BeHlC33g.js → qr-cli-Cx7DYTSk.js} +5 -5
  250. package/dist/{qr-cli-zto9YWnY.js → qr-cli-hPIeUYAT.js} +11 -11
  251. package/dist/{redact-identifier-B1VHIbnd.js → redact-identifier-Cm1VfV7E.js} +4 -4
  252. package/dist/{register.agent-CNhg2KUt.js → register.agent-CCKcgAXs.js} +91 -91
  253. package/dist/{register.agent-COv5OPLQ.js → register.agent-DZuxoC0a.js} +71 -71
  254. package/dist/register.configure-CJErdFO_.js +129 -0
  255. package/dist/register.configure-JT8T7HO5.js +125 -0
  256. package/dist/{register.maintenance-BAK-DiQY.js → register.maintenance-CKsv0lok.js} +70 -70
  257. package/dist/{register.maintenance-B_slxJa6.js → register.maintenance-DDzKUGYJ.js} +98 -98
  258. package/dist/{register.message-Bbtej3vy.js → register.message-CpOXi1rz.js} +74 -74
  259. package/dist/{register.message-CCBmn5ja.js → register.message-_bfhetTg.js} +55 -55
  260. package/dist/{register.onboard-Cu2KnArg.js → register.onboard-BHtTh0b_.js} +42 -42
  261. package/dist/{register.onboard-B3jO_Goy.js → register.onboard-CkIM3hU7.js} +24 -24
  262. package/dist/{register.setup-Ca6zdWpf.js → register.setup-CLhdFQHW.js} +42 -42
  263. package/dist/{register.setup-CYSISTDO.js → register.setup-CYtYDKMU.js} +27 -27
  264. package/dist/{register.status-health-sessions-D9p0ClqJ.js → register.status-health-sessions-DZnebsxZ.js} +60 -60
  265. package/dist/{register.status-health-sessions-CGbg9k6d.js → register.status-health-sessions-DmX0DLAt.js} +39 -39
  266. package/dist/{register.subclis-loifbhVx.js → register.subclis-CnDo2jzv.js} +29 -29
  267. package/dist/{registry-Sbac4a4z.js → registry-DKJLAPDB.js} +2 -2
  268. package/dist/{replies-PetyGT0p.js → replies-B2O2eRh6.js} +3 -3
  269. package/dist/{replies-Dj640LxQ.js → replies-DIHkSwoW.js} +2 -2
  270. package/dist/{reply-prefix-CXsO5E1Z.js → reply-prefix-B7pYEiW_.js} +1 -1
  271. package/dist/{reply-prefix-DKeEUCUp.js → reply-prefix-BOdARKaY.js} +1 -1
  272. package/dist/{resolve-route-8JoEBwi6.js → resolve-route-CRWE36h5.js} +4 -4
  273. package/dist/{resolve-route-BcYnh5es.js → resolve-route-DNKcB7Q9.js} +1 -1
  274. package/dist/{routes-CJ4en0jL.js → routes-BMShi_eY.js} +7 -7
  275. package/dist/{routes-B5y-oAKp.js → routes-Cio8is5Y.js} +5 -5
  276. package/dist/{rpc-qWm1bRo5.js → rpc-CEhoSTGo.js} +1 -1
  277. package/dist/{rpc-ElDiKzq4.js → rpc-D0Ldc6Hv.js} +3 -3
  278. package/dist/{run-main-B7Ria3zD.js → run-main-BIRbWKyA.js} +73 -73
  279. package/dist/{runtime-guard-oeRbIq84.js → runtime-guard-BZ3_1QqS.js} +1 -1
  280. package/dist/{sandbox-BJgHc4Vu.js → sandbox-B4RfQ7k1.js} +9 -9
  281. package/dist/{sandbox-C8Gh5iJW.js → sandbox-C-UeHmuJ.js} +11 -11
  282. package/dist/{sandbox-cli-CSudrHYL.js → sandbox-cli-B43FqqPT.js} +17 -17
  283. package/dist/{sandbox-cli-DkMmnojU.js → sandbox-cli-CNAPNXJ4.js} +29 -29
  284. package/dist/{security-cli-pLoqKkfb.js → security-cli-BSd8_Gsq.js} +38 -38
  285. package/dist/{security-cli-B2lCR2xX.js → security-cli-DDM0Z6IW.js} +27 -27
  286. package/dist/{send-DuYvWRLE.js → send-DSK6O8SC.js} +9 -9
  287. package/dist/{send-CY9na-Jw.js → send-EluKytgO.js} +3 -3
  288. package/dist/{server-context-DdWWaDf6.js → server-context-CDTuNR-O.js} +5 -5
  289. package/dist/{server-context-CJFU_WfI.js → server-context-DFO6o83F.js} +8 -8
  290. package/dist/{server-methods-Dk_EnINI.js → server-methods-Dz6NGEg3.js} +35 -59
  291. package/dist/{server-methods-RhVqtIqB.js → server-methods-vp5zi6v5.js} +41 -65
  292. package/dist/{server-node-events-BHegSgG9.js → server-node-events-4ufB_olv.js} +55 -55
  293. package/dist/{server-node-events-UQx561GA.js → server-node-events-B7UtUhkC.js} +74 -74
  294. package/dist/{service-BCu0FBzN.js → service-AP9pR9R5.js} +1 -1
  295. package/dist/{session-cost-usage-5VmVPhKy.js → session-cost-usage-Cj3vd7lZ.js} +1 -1
  296. package/dist/{session-cost-usage-XhPrxXSs.js → session-cost-usage-DYcv40ss.js} +1 -1
  297. package/dist/{session-utils-DFJztVrF.js → session-utils-CgGDr4eh.js} +12 -12
  298. package/dist/{session-utils-CAVPV2Hh.js → session-utils-D1VcHni_.js} +7 -7
  299. package/dist/{sessions-CqLQkkWg.js → sessions-BNEDanZO.js} +4 -4
  300. package/dist/{sessions-BsGGoTdl.js → sessions-Dh88Kqd6.js} +9 -9
  301. package/dist/{sessions-BDM9kNY0.js → sessions-iLfSd6VD.js} +5 -5
  302. package/dist/{shared-CpwtQRJB.js → shared-CIeW3aWF.js} +4 -4
  303. package/dist/{shared-D7tsGdxc.js → shared-DP6YX7_w.js} +1 -1
  304. package/dist/{shared-B7nP44vU.js → shared-DmYHvtn2.js} +2 -2
  305. package/dist/{shared-CbUpEKXt.js → shared-_wwqvx84.js} +3 -3
  306. package/dist/{skill-commands-B45w-suH.js → skill-commands-5QB5E8bv.js} +4 -4
  307. package/dist/{skill-commands-CRQniaHy.js → skill-commands-CcCCVblU.js} +4 -4
  308. package/dist/{skills-CTcjFd_F.js → skills-BP6p7GnN.js} +3 -3
  309. package/dist/{skills-haW9gU7e.js → skills-Bmjf5nFv.js} +3 -3
  310. package/dist/{skills-cli-9Mlb7VRg.js → skills-cli-BJDvUT_e.js} +13 -13
  311. package/dist/{skills-cli-CV_42wby.js → skills-cli-Byp9MfZh.js} +17 -17
  312. package/dist/{skills-install-B4JPO_Np.js → skills-install-BB27sD4d.js} +4 -4
  313. package/dist/{skills-install-D5ikt72d.js → skills-install-BzqoHn0x.js} +3 -3
  314. package/dist/{skills-remote-BW2GvG2l.js → skills-remote-CqwR3Zvp.js} +5 -5
  315. package/dist/{skills-remote-BASG1Doo.js → skills-remote-DHfuS68n.js} +4 -4
  316. package/dist/{skills-status-1iVfuVIG.js → skills-status-01KNlWUS.js} +3 -3
  317. package/dist/{skills-status-C9lLJu0B.js → skills-status-BNDqwHkP.js} +3 -3
  318. package/dist/{sqlite-DL_ZWVN-.js → sqlite-DBEvS-Ne.js} +2 -2
  319. package/dist/{sqlite-67BqaVPd.js → sqlite-l3CZYU6t.js} +1 -1
  320. package/dist/{status-CrddsMfu.js → status-B0HecH1s.js} +4 -4
  321. package/dist/{status-D5RhVO0A.js → status-BD8gFYKH.js} +18 -18
  322. package/dist/{status-DPu7qNXE.js → status-DEXnB1sw.js} +27 -27
  323. package/dist/{status-Bci6O3aA.js → status-MMLxoRgQ.js} +3 -3
  324. package/dist/{status.update-D5CachQ_.js → status.update-Be8PuHCh.js} +2 -2
  325. package/dist/{status.update-Dfd0eZOH.js → status.update-CB9e3eWW.js} +2 -2
  326. package/dist/{subagent-registry-CsXaK_sy.js → subagent-registry-C57PFGHU.js} +61 -61
  327. package/dist/{subsystem-CHbO_DkH.js → subsystem-CtH6J8AV.js} +1 -1
  328. package/dist/{synthesis-BwcfS9jt.js → synthesis-CQdzrLFL.js} +4 -4
  329. package/dist/{synthesis-CU_MR7nV.js → synthesis-CjsIBd8X.js} +71 -71
  330. package/dist/{synthesis-dplLmFIP.js → synthesis-DSdF0vsi.js} +4 -4
  331. package/dist/{synthesis-BoZf8BeO.js → synthesis-j_kjlFo1.js} +52 -52
  332. package/dist/{system-cli-CCn-08Zm.js → system-cli-BM8KbtUc.js} +18 -18
  333. package/dist/{system-cli-D5FffFX5.js → system-cli-CQFH_HwX.js} +10 -10
  334. package/dist/{systemd-bkj5giUQ.js → systemd-9LEEqibe.js} +2 -2
  335. package/dist/{systemd-hints-UeG2BDXq.js → systemd-hints-A1W3AdVo.js} +3 -3
  336. package/dist/{systemd-hints-CufcSfMk.js → systemd-hints-BejQ6J2Y.js} +2 -2
  337. package/dist/{systemd-linger-DVkUgWAi.js → systemd-linger-PqG8iGCt.js} +2 -2
  338. package/dist/{table-Sfrx6RZ-.js → table-CSEp22Mk.js} +1 -1
  339. package/dist/{table-B4DunWtf.js → table-DkAQzCOR.js} +2 -2
  340. package/dist/{tailscale-G_tEEN9T.js → tailscale-D7dC-5EX.js} +3 -3
  341. package/dist/{tokens-BdVB8KXo.js → tokens-BKbemuIk.js} +1 -1
  342. package/dist/{tokens-h4i8ww8n.js → tokens-K3kGchJA.js} +1 -1
  343. package/dist/{tool-display-BngPYwnR.js → tool-display-Dr6VaTg5.js} +1 -1
  344. package/dist/{tool-display-DccYrlOh.js → tool-display-wSdT0Ynz.js} +1 -1
  345. package/dist/{tool-loop-detection-ckNnHN4a.js → tool-loop-detection-CLDr_JBu.js} +1 -1
  346. package/dist/{tool-loop-detection-DldKffR8.js → tool-loop-detection-CSSq5kkt.js} +4 -4
  347. package/dist/{trash-S6FbJcDo.js → trash-BjVrPcAx.js} +1 -1
  348. package/dist/{tui-DZ8gksSZ.js → tui-D0j61PXx.js} +8 -8
  349. package/dist/{tui-DroW8IOb.js → tui-DFuScHlA.js} +10 -10
  350. package/dist/{tui-cli-CyBJYh9u.js → tui-cli-25xTveHh.js} +24 -24
  351. package/dist/{tui-cli-1SpmbQMM.js → tui-cli-C3dXNtPo.js} +36 -36
  352. package/dist/{unified-runner-BFLLzEHE.js → unified-runner-BNt7TQKM.js} +10 -13
  353. package/dist/{unified-runner-CSPkKZHX.js → unified-runner-DCiPB--z.js} +73 -73
  354. package/dist/{update-BITFZPr2.js → update-C1rkPV1C.js} +3 -3
  355. package/dist/{update-OkPZ3jjl.js → update-CjZgU686.js} +3 -3
  356. package/dist/{update-check-CMbKkelk.js → update-check-CZxZhEXr.js} +2 -2
  357. package/dist/{update-cli-Dh5dvdv-.js → update-cli-CWufRpkr.js} +104 -104
  358. package/dist/{update-cli-yW6Xl6fs.js → update-cli-Dl_QbjXc.js} +77 -77
  359. package/dist/{update-runner-BI8ZSR1b.js → update-runner-Dq5UYQbo.js} +5 -5
  360. package/dist/{update-runner-CIgLduhH.js → update-runner-ENJw0Mco.js} +2 -2
  361. package/dist/{utils-CTPsqyE_.js → utils-BU8jVQFM.js} +1 -1
  362. package/dist/{webhooks-cli-Cwhu9vyD.js → webhooks-cli-Clx8DGfA.js} +14 -14
  363. package/dist/{webhooks-cli-4bmyKzwb.js → webhooks-cli-UfO_WffC.js} +11 -11
  364. package/dist/{widearea-dns-BZ7fV_kq.js → widearea-dns-C5NqCQ3L.js} +1 -1
  365. package/dist/{widearea-dns-D9KXb2gb.js → widearea-dns-drOINmDM.js} +1 -1
  366. package/dist/{with-timeout-D_FOTx48.js → with-timeout-BE7lxhxW.js} +2 -2
  367. package/dist/{with-timeout-bWr6yBeX.js → with-timeout-BcL6qAbd.js} +2 -2
  368. package/dist/{workspace-DxscDsm6.js → workspace-B3sO7QlN.js} +2 -2
  369. package/dist/{workspace-BHDa_VCi.js → workspace-Bb1HX2I0.js} +1 -1
  370. package/dist/{workspace-dirs-2xcWGse3.js → workspace-dirs-23IYtZj2.js} +1 -1
  371. package/dist/{workspace-dirs-aYEM1rQE.js → workspace-dirs-D5OnUmvw.js} +1 -1
  372. package/extensions/memory-core/node_modules/.bin/symi +0 -0
  373. package/extensions/msteams/node_modules/.bin/symi +0 -0
  374. package/extensions/outlook/node_modules/.bin/symi +0 -0
  375. package/extensions/slack/node_modules/.bin/symi +0 -0
  376. package/package.json +108 -79
  377. package/dist/cli-CK62Eh_9.js +0 -128
  378. package/dist/control-ui/css/revert-red-theme.md +0 -141
  379. package/dist/control-ui/css/style.css +0 -5843
  380. package/dist/control-ui/css/style.css.backup-2026-03-03-162525 +0 -3546
  381. package/dist/control-ui/css/style.css.backup-before-red-2026-03-03-162525 +0 -3546
  382. package/dist/control-ui/css/style.css.backup-before-red-theme-2026-03-03-162530 +0 -3546
  383. package/dist/control-ui/css/style.css.pre-2row +0 -2165
  384. package/dist/control-ui/css/style.css.pre-brand +0 -1776
  385. package/dist/control-ui/css/style.css.pre-history +0 -1974
  386. package/dist/control-ui/css/style.css.pre-nav +0 -2264
  387. package/dist/control-ui/css/style.css.pre-newsession +0 -1898
  388. package/dist/control-ui/css/style.css.pre-queue +0 -2195
  389. package/dist/control-ui/css/style.css.pre-red-prompt +0 -2524
  390. package/dist/control-ui/css/style.css.pre-stop +0 -2239
  391. package/dist/control-ui/css/style.css.pre-textarea +0 -2184
  392. package/dist/control-ui/css/style.css.pre-watchdog +0 -1848
  393. package/dist/control-ui/css/style.css.red-theme +0 -2999
  394. package/dist/control-ui/index.html +0 -1042
  395. package/dist/control-ui/js/app.js +0 -1304
  396. package/dist/control-ui/js/app.js.pre-2row +0 -463
  397. package/dist/control-ui/js/app.js.pre-heartbeat-filter +0 -595
  398. package/dist/control-ui/js/app.js.pre-newsession +0 -408
  399. package/dist/control-ui/js/app.js.pre-queue +0 -476
  400. package/dist/control-ui/js/app.js.pre-stop +0 -564
  401. package/dist/control-ui/js/app.js.pre-textarea +0 -467
  402. package/dist/control-ui/js/app.js.pre-watchdog +0 -293
  403. package/dist/control-ui/js/connections.js +0 -438
  404. package/dist/control-ui/js/gateway.js +0 -233
  405. package/dist/control-ui/js/gateway.js.pre-stop +0 -110
  406. package/dist/control-ui/js/history.js +0 -732
  407. package/dist/control-ui/js/logs.js +0 -238
  408. package/dist/control-ui/js/menu.js +0 -230
  409. package/dist/control-ui/js/menu.js.pre-nav +0 -66
  410. package/dist/control-ui/js/metrics.js +0 -53
  411. package/dist/control-ui/js/models.js +0 -138
  412. package/dist/control-ui/js/render.js +0 -882
  413. package/dist/control-ui/js/render.test.js +0 -112
  414. package/dist/control-ui/js/scheduling.js +0 -461
  415. package/dist/control-ui/js/settings.js +0 -909
  416. package/dist/control-ui/js/slash-autocomplete.js +0 -168
  417. package/dist/control-ui/js/subagents.js +0 -560
  418. package/dist/control-ui/js/utils.js +0 -29
  419. package/dist/control-ui/vendor/highlight.min.js +0 -2518
  420. package/dist/control-ui/vendor/marked.min.js +0 -69
  421. package/dist/register.configure-RhKVlfWH.js +0 -125
  422. package/dist/register.configure-q33027ym.js +0 -129
@@ -1,438 +0,0 @@
1
- // ── Connections Panel ───────────────────────────────────────────────────────
2
- // Manages connection status display for Slack, Email, and Teams channels.
3
- // Queries gateway for channel health and displays status with notifications.
4
- // ─────────────────────────────────────────────────────────────────────────────
5
-
6
- "use strict";
7
-
8
- (function () {
9
- const CHANNELS = {
10
- slack: {
11
- id: "slack",
12
- name: "Slack",
13
- configPath: "channels.slack",
14
- icon: `<svg viewBox="0 0 24 24" fill="currentColor">
15
- <path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.124 2.521a2.528 2.528 0 0 1 2.52-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.52V8.834zm-1.271 0a2.528 2.528 0 0 1-2.521 2.521 2.528 2.528 0 0 1-2.521-2.521V2.522A2.528 2.528 0 0 1 15.166 0a2.528 2.528 0 0 1 2.521 2.522v6.312zm-2.521 10.124a2.528 2.528 0 0 1 2.521 2.52A2.528 2.528 0 0 1 15.166 24a2.528 2.528 0 0 1-2.521-2.522v-2.52h2.521zm0-1.271a2.528 2.528 0 0 1-2.521-2.521 2.528 2.528 0 0 1 2.521-2.521h6.312A2.528 2.528 0 0 1 24 15.166a2.528 2.528 0 0 1-2.522 2.521h-6.312z"/>
16
- </svg>`,
17
- setupInfo: "Configure Slack integration with Bot and App tokens for real-time messaging.",
18
- configExample: `channels:
19
- slack:
20
- botToken: "xoxb-..."
21
- appToken: "xapp-..."`,
22
- },
23
- email: {
24
- id: "email",
25
- name: "Email",
26
- configPath: "hooks.gmail + outlook plugin",
27
- icon: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
28
- <rect x="2" y="4" width="20" height="16" rx="2"/>
29
- <path d="M22 6l-10 7L2 6"/>
30
- </svg>`,
31
- // setupInfo/configExample unused for email — the modal renders two
32
- // per-provider sections (Outlook, Gmail) instead. See openModal().
33
- setupInfo: "",
34
- configExample: "",
35
- },
36
- msteams: {
37
- id: "msteams",
38
- name: "Microsoft Teams",
39
- configPath: "channels.msteams",
40
- icon: `<svg viewBox="0 0 24 24" fill="currentColor">
41
- <path d="M19.19 8.77c-.73 0-1.39.29-1.88.76V8.5a2.5 2.5 0 0 0-2.5-2.5h-1.62c.18-.46.28-.96.28-1.48a4.04 4.04 0 0 0-4.04-4.04c-2.23 0-4.04 1.81-4.04 4.04 0 .52.1 1.02.28 1.48H4.5A2.5 2.5 0 0 0 2 8.5v9a2.5 2.5 0 0 0 2.5 2.5h9a2.5 2.5 0 0 0 2.5-2.5v-.97c.49.47 1.15.76 1.88.76a2.69 2.69 0 0 0 2.69-2.69v-3.14a2.69 2.69 0 0 0-2.69-2.69h.31zM9.43 2.98a2.04 2.04 0 1 1 0 4.08 2.04 2.04 0 0 1 0-4.08zm4.57 14.52a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5v-9a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 .5.5v9zm5.88-4.17a.69.69 0 0 1-.69.69.69.69 0 0 1-.69-.69v-3.14c0-.38.31-.69.69-.69.38 0 .69.31.69.69v3.14z"/>
42
- <circle cx="17.5" cy="5.5" r="2.5"/>
43
- </svg>`,
44
- setupInfo: "Connect Microsoft Teams using Bot Framework for bidirectional messaging.",
45
- configExample: `channels:
46
- msteams:
47
- appId: "..."
48
- appPassword: "..."
49
- tenantId: "..."`,
50
- },
51
- };
52
-
53
- const state = {
54
- slack: { status: "checking", notifications: 0 },
55
- email: { status: "checking", notifications: 0, gmail: null, outlook: null },
56
- msteams: { status: "checking", notifications: 0 },
57
- };
58
-
59
- // ── DOM Elements ─────────────────────────────────────────────────────────
60
- const elements = {
61
- slack: {
62
- btn: document.getElementById("conn-slack"),
63
- status: document.getElementById("conn-slack-status"),
64
- state: document.getElementById("conn-slack-state"),
65
- notif: document.getElementById("conn-slack-notif"),
66
- },
67
- email: {
68
- btn: document.getElementById("conn-email"),
69
- status: document.getElementById("conn-email-status"),
70
- state: document.getElementById("conn-email-state"),
71
- notif: document.getElementById("conn-email-notif"),
72
- },
73
- msteams: {
74
- btn: document.getElementById("conn-teams"),
75
- status: document.getElementById("conn-teams-status"),
76
- state: document.getElementById("conn-teams-state"),
77
- notif: document.getElementById("conn-teams-notif"),
78
- },
79
- };
80
-
81
- // ── Update UI ────────────────────────────────────────────────────────────
82
- function updateChannelUI(channelId) {
83
- const el = elements[channelId];
84
- const s = state[channelId];
85
- if (!el || !el.btn) {
86
- return;
87
- }
88
-
89
- // Set data-state attribute for CSS styling
90
- el.btn.setAttribute("data-state", s.status);
91
-
92
- // Update status text
93
- const statusText = {
94
- checking: "Checking...",
95
- connected: "Connected",
96
- disconnected: "Not configured",
97
- error: "Connection error",
98
- pending: "Connecting...",
99
- };
100
- el.status.textContent = statusText[s.status] || s.status;
101
-
102
- // Update notification badge
103
- if (s.notifications > 0) {
104
- el.notif.textContent = s.notifications > 99 ? "99+" : s.notifications;
105
- } else {
106
- el.notif.textContent = "";
107
- }
108
- }
109
-
110
- // ── Check Channel Status ─────────────────────────────────────────────────
111
- async function checkChannelStatus() {
112
- if (!window.gateway?.connected) {
113
- // Gateway not connected, mark all as pending
114
- Object.keys(state).forEach((id) => {
115
- state[id].status = "pending";
116
- updateChannelUI(id);
117
- });
118
- return;
119
- }
120
-
121
- try {
122
- // Query gateway for channel status using channels.status RPC
123
- const result = await window.gateway.rpc("channels.status", { probe: true });
124
- const channels = result?.channels ?? {};
125
-
126
- // Update Slack status
127
- if (channels.slack) {
128
- const isConnected = channels.slack.configured && channels.slack.connected !== false;
129
- state.slack.status = isConnected ? "connected" : "disconnected";
130
- state.slack.notifications = channels.slack.unread ?? 0;
131
- } else {
132
- state.slack.status = "disconnected";
133
- }
134
-
135
- // Update Email status: connected if EITHER Outlook OR Gmail is live.
136
- // Outlook is injected into channels.outlook by the gateway
137
- // (src/gateway/server-methods/channels.ts).
138
- const gmail = channels.gmail || channels.email || null;
139
- const outlook = channels.outlook || null;
140
- const gmailConnected = !!(gmail && gmail.configured && gmail.connected !== false);
141
- const outlookConnected = !!(outlook && outlook.configured && outlook.connected !== false);
142
- state.email.gmail = gmail;
143
- state.email.outlook = outlook;
144
- state.email.status = gmailConnected || outlookConnected ? "connected" : "disconnected";
145
- state.email.notifications = (gmail?.unread ?? 0) + (outlook?.unread ?? 0);
146
-
147
- // Update Teams status
148
- if (channels.msteams) {
149
- const isConnected = channels.msteams.configured && channels.msteams.connected !== false;
150
- state.msteams.status = isConnected ? "connected" : "disconnected";
151
- state.msteams.notifications = channels.msteams.unread ?? 0;
152
- } else {
153
- state.msteams.status = "disconnected";
154
- }
155
- } catch (err) {
156
- console.warn("[connections] Failed to fetch channel status:", err);
157
- // Mark all as disconnected on error
158
- Object.keys(state).forEach((id) => {
159
- state[id].status = "disconnected";
160
- });
161
- }
162
-
163
- // Update all UI
164
- Object.keys(state).forEach(updateChannelUI);
165
- }
166
-
167
- // ── Modal Elements ────────────────────────────────────────────────────────
168
- const modalOverlay = document.getElementById("conn-modal-overlay");
169
- const modalIcon = document.getElementById("conn-modal-icon");
170
- const modalTitle = document.getElementById("conn-modal-title");
171
- const modalBody = document.getElementById("conn-modal-body");
172
- const modalDocs = document.getElementById("conn-modal-docs");
173
- const modalClose = document.getElementById("conn-modal-close");
174
-
175
- // Docs viewer (in-app scrollable markdown renderer, stacks above conn modal)
176
- const docsViewerOverlay = document.getElementById("docs-viewer-overlay");
177
- const docsViewerBody = document.getElementById("docs-viewer-body");
178
- const docsViewerTitle = document.getElementById("docs-viewer-title");
179
- const docsViewerClose = document.getElementById("docs-viewer-close");
180
-
181
- // Tracks which channel's connection modal is currently open, so the
182
- // "View Documentation" button knows which docs key to fetch.
183
- let currentModalChannelId = null;
184
-
185
- const DOCS_VIEWER_TITLES = {
186
- email: "Email — Outlook & Gmail",
187
- slack: "Slack Setup",
188
- msteams: "Microsoft Teams Setup",
189
- };
190
-
191
- function stripFrontmatter(markdown) {
192
- if (!markdown.startsWith("---\n") && !markdown.startsWith("---\r\n")) {
193
- return markdown;
194
- }
195
- const end = markdown.indexOf("\n---", 4);
196
- if (end === -1) {
197
- return markdown;
198
- }
199
- return markdown.slice(end + 4).replace(/^\s+/, "");
200
- }
201
-
202
- async function openDocsViewer(key) {
203
- if (!docsViewerOverlay || !docsViewerBody) {
204
- return;
205
- }
206
- docsViewerTitle.textContent = DOCS_VIEWER_TITLES[key] || "Documentation";
207
- docsViewerBody.innerHTML = '<p class="docs-viewer-loading">Loading documentation…</p>';
208
- docsViewerOverlay.classList.add("open");
209
- docsViewerOverlay.setAttribute("aria-hidden", "false");
210
- // Capture phase so we beat the conn-modal's Esc handler
211
- document.addEventListener("keydown", onDocsViewerKey, true);
212
-
213
- if (!window.gateway?.rpc) {
214
- docsViewerBody.innerHTML =
215
- '<p class="docs-viewer-error">Gateway is not connected — cannot load documentation.</p>';
216
- return;
217
- }
218
- try {
219
- const result = await window.gateway.rpc("docs.get", { key });
220
- const markdown = result && typeof result.markdown === "string" ? result.markdown : "";
221
- if (!markdown) {
222
- docsViewerBody.innerHTML =
223
- '<p class="docs-viewer-error">Documentation is empty or missing on this install.</p>';
224
- return;
225
- }
226
- const body = stripFrontmatter(markdown);
227
- const html =
228
- window.marked && typeof window.marked.parse === "function"
229
- ? window.marked.parse(body)
230
- : "<pre>" + escHtml(body) + "</pre>";
231
- docsViewerBody.innerHTML = html;
232
- // Make external links open in a new tab with safe rel
233
- docsViewerBody.querySelectorAll('a[href^="http"]').forEach((a) => {
234
- a.setAttribute("target", "_blank");
235
- a.setAttribute("rel", "noopener noreferrer");
236
- });
237
- docsViewerBody.scrollTop = 0;
238
- } catch (err) {
239
- const msg = err && err.message ? err.message : String(err);
240
- docsViewerBody.innerHTML =
241
- '<p class="docs-viewer-error">Failed to load documentation: ' + escHtml(msg) + "</p>";
242
- }
243
- }
244
-
245
- function closeDocsViewer() {
246
- if (!docsViewerOverlay) {
247
- return;
248
- }
249
- docsViewerOverlay.classList.remove("open");
250
- docsViewerOverlay.setAttribute("aria-hidden", "true");
251
- document.removeEventListener("keydown", onDocsViewerKey, true);
252
- }
253
-
254
- function onDocsViewerKey(e) {
255
- if (e.key === "Escape") {
256
- // Stop the conn-modal's keydown listener from also firing
257
- e.stopImmediatePropagation();
258
- closeDocsViewer();
259
- }
260
- }
261
-
262
- function renderProviderSection(title, connected, detailLine, actionLine) {
263
- const klass = connected ? "connected" : "disconnected";
264
- const badge = connected ? "CONNECTED" : "NOT CONFIGURED";
265
- return `
266
- <div class="conn-modal-status ${klass}" style="margin-bottom:6px;">
267
- <div class="conn-modal-status-dot"></div>
268
- <span class="conn-modal-status-text"><strong>${escHtml(title)}</strong> — ${escHtml(detailLine)}</span>
269
- <span class="conn-modal-status-badge">${badge}</span>
270
- </div>
271
- <p class="conn-modal-info" style="margin-top:0;margin-bottom:14px;">${actionLine}</p>
272
- `;
273
- }
274
-
275
- function renderEmailModalBody(channelState) {
276
- const outlook = channelState.outlook;
277
- const gmail = channelState.gmail;
278
- const outlookConnected = !!(outlook && outlook.configured && outlook.connected !== false);
279
- const gmailConnected = !!(gmail && gmail.configured && gmail.connected !== false);
280
-
281
- const outlookDetail = outlookConnected
282
- ? `Connected as ${outlook.email || "Microsoft account"}`
283
- : "Microsoft 365 / outlook.com / hotmail.com";
284
- const outlookAction = outlookConnected
285
- ? `Type <code>/outlook logout</code> in chat to disconnect.`
286
- : `Type <code>/outlook login</code> in chat — a Microsoft device-code flow will start and tools become available immediately after sign-in.`;
287
-
288
- const gmailAccount = gmail && typeof gmail.account === "string" ? gmail.account : null;
289
- const gmailDetail = gmailConnected
290
- ? `Watching ${gmailAccount || "your Gmail inbox"}`
291
- : "Gmail / Google Workspace (requires Pub/Sub setup)";
292
- const gmailAction = gmailConnected
293
- ? `Incoming email creates <code>hook:gmail:&lt;id&gt;</code> sessions automatically.`
294
- : `Configure <code>hooks.gmail</code> in <code>symi.json</code> — see the docs link below for the full Google Cloud Pub/Sub walkthrough.`;
295
-
296
- return (
297
- renderProviderSection("Outlook 365", outlookConnected, outlookDetail, outlookAction) +
298
- renderProviderSection("Gmail", gmailConnected, gmailDetail, gmailAction)
299
- );
300
- }
301
-
302
- function openModal(channelId) {
303
- const channel = CHANNELS[channelId];
304
- const channelState = state[channelId];
305
- if (!channel) {
306
- return;
307
- }
308
-
309
- // Set icon
310
- modalIcon.className = "conn-modal-icon " + channelId;
311
- modalIcon.innerHTML = channel.icon;
312
-
313
- // Set title
314
- modalTitle.textContent = channel.name;
315
-
316
- // Remember which channel this modal is showing so the
317
- // "View Documentation" button knows which docs key to fetch.
318
- currentModalChannelId = channelId;
319
-
320
- if (channelId === "email") {
321
- modalBody.innerHTML = renderEmailModalBody(channelState);
322
- } else {
323
- // Generic single-provider layout for other channels
324
- const isConnected = channelState.status === "connected";
325
- const statusClass = isConnected ? "connected" : "disconnected";
326
- const statusText = isConnected
327
- ? "Channel is active and receiving messages"
328
- : "Channel is not configured";
329
- const badgeText = isConnected ? "CONNECTED" : "NOT CONFIGURED";
330
-
331
- modalBody.innerHTML = `
332
- <div class="conn-modal-status ${statusClass}">
333
- <div class="conn-modal-status-dot"></div>
334
- <span class="conn-modal-status-text">${statusText}</span>
335
- <span class="conn-modal-status-badge">${badgeText}</span>
336
- </div>
337
- <p class="conn-modal-info">${channel.setupInfo}</p>
338
- <p class="conn-modal-info">Add to your <code>symi.json</code> config:</p>
339
- <pre class="conn-modal-config">${escHtml(channel.configExample)}</pre>
340
- `;
341
- }
342
-
343
- // Show modal
344
- modalOverlay.classList.add("open");
345
- modalOverlay.setAttribute("aria-hidden", "false");
346
- document.addEventListener("keydown", onModalKey);
347
- }
348
-
349
- function closeModal() {
350
- modalOverlay.classList.remove("open");
351
- modalOverlay.setAttribute("aria-hidden", "true");
352
- document.removeEventListener("keydown", onModalKey);
353
- }
354
-
355
- function onModalKey(e) {
356
- if (e.key === "Escape") {
357
- closeModal();
358
- }
359
- }
360
-
361
- // Modal event listeners
362
- if (modalClose) {
363
- modalClose.addEventListener("click", closeModal);
364
- }
365
- if (modalOverlay) {
366
- modalOverlay.addEventListener("click", (e) => {
367
- if (e.target === modalOverlay) {
368
- closeModal();
369
- }
370
- });
371
- }
372
-
373
- // "View Documentation" button → open in-app docs viewer.
374
- // The docs-viewer overlay stacks on top of the conn-modal.
375
- if (modalDocs) {
376
- modalDocs.addEventListener("click", (e) => {
377
- e.preventDefault();
378
- if (currentModalChannelId) {
379
- void openDocsViewer(currentModalChannelId);
380
- }
381
- });
382
- }
383
-
384
- // Docs viewer event listeners
385
- if (docsViewerClose) {
386
- docsViewerClose.addEventListener("click", closeDocsViewer);
387
- }
388
- if (docsViewerOverlay) {
389
- docsViewerOverlay.addEventListener("click", (e) => {
390
- if (e.target === docsViewerOverlay) {
391
- closeDocsViewer();
392
- }
393
- });
394
- }
395
-
396
- // ── Handle Click ─────────────────────────────────────────────────────────
397
- function handleChannelClick(channelId) {
398
- openModal(channelId);
399
- }
400
-
401
- // ── Initialize ───────────────────────────────────────────────────────────
402
- function init() {
403
- // Bind click handlers
404
- Object.keys(elements).forEach((channelId) => {
405
- const el = elements[channelId];
406
- if (el?.btn) {
407
- el.btn.addEventListener("click", () => handleChannelClick(channelId));
408
- }
409
- });
410
-
411
- // Initial status check
412
- void checkChannelStatus();
413
-
414
- // Poll for status updates every 30 seconds
415
- setInterval(checkChannelStatus, 30000);
416
-
417
- // Also check when gateway connects
418
- window.addEventListener("gateway:connected", checkChannelStatus);
419
- }
420
-
421
- // Wait for DOM and gateway
422
- if (document.readyState === "loading") {
423
- document.addEventListener("DOMContentLoaded", init);
424
- } else {
425
- init();
426
- }
427
-
428
- // Expose for external use
429
- window.connectionsPanel = {
430
- refresh: checkChannelStatus,
431
- setNotifications: (channelId, count) => {
432
- if (state[channelId]) {
433
- state[channelId].notifications = count;
434
- updateChannelUI(channelId);
435
- }
436
- },
437
- };
438
- })();
@@ -1,233 +0,0 @@
1
- // ── Symi Glass UI Gateway Client ──────────────────────────────────────
2
- // Connects to the embedded /glass-ws WebSocket bridge inside the gateway.
3
- // The bridge handles auth and protocol translation server-side, keeping
4
- // this client simple.
5
-
6
- const SESSION_KEY = "agent:main:main";
7
-
8
- // ── Utility ───────────────────────────────────────────────────────────
9
- function extractText(message) {
10
- if (!message) {
11
- return "";
12
- }
13
- if (typeof message === "string") {
14
- return message;
15
- }
16
- if (Array.isArray(message)) {
17
- return message
18
- .filter((b) => b?.type === "text")
19
- .map((b) => b.text ?? "")
20
- .join("");
21
- }
22
- if (message?.content) {
23
- return extractText(message.content);
24
- }
25
- return "";
26
- }
27
-
28
- // ── Gateway Client ────────────────────────────────────────────────────
29
- class SymiGateway extends EventTarget {
30
- constructor() {
31
- super();
32
- this.ws = null;
33
- this.connected = false;
34
- this.backoff = 800;
35
- this._closed = false;
36
- this._pending = new Map();
37
- this._rpcSeq = 0;
38
- }
39
-
40
- start() {
41
- this._closed = false;
42
- this._connect();
43
- }
44
-
45
- stop() {
46
- this._closed = true;
47
- this.ws?.close();
48
- this.ws = null;
49
- this.connected = false;
50
- this._flushPending(new Error("gateway client stopped"));
51
- }
52
-
53
- _connect() {
54
- if (this._closed) {
55
- return;
56
- }
57
-
58
- const protocol = location.protocol === "https:" ? "wss:" : "ws:";
59
- const wsUrl = `${protocol}//${location.host}/glass-ws`;
60
- this.ws = new WebSocket(wsUrl);
61
-
62
- this.ws.addEventListener("open", () => {
63
- this.backoff = 800;
64
- });
65
-
66
- this.ws.addEventListener("message", (e) => {
67
- let msg;
68
- try {
69
- msg = JSON.parse(e.data);
70
- } catch {
71
- return;
72
- }
73
- this._handleMessage(msg);
74
- });
75
-
76
- this.ws.addEventListener("close", () => {
77
- this.ws = null;
78
- const wasConnected = this.connected;
79
- this.connected = false;
80
- this._flushPending(new Error("gateway closed"));
81
- if (wasConnected) {
82
- this.dispatchEvent(new CustomEvent("disconnect"));
83
- }
84
- this._scheduleReconnect();
85
- });
86
-
87
- this.ws.addEventListener("error", () => {});
88
- }
89
-
90
- _scheduleReconnect() {
91
- if (this._closed) {
92
- return;
93
- }
94
- const delay = this.backoff;
95
- this.backoff = Math.min(this.backoff * 1.7, 15000);
96
- setTimeout(() => this._connect(), delay);
97
- }
98
-
99
- _flushPending(err) {
100
- for (const [, p] of this._pending) {
101
- p.reject(err);
102
- }
103
- this._pending.clear();
104
- }
105
-
106
- _handleMessage(msg) {
107
- const type = msg.type;
108
-
109
- if (type === "status") {
110
- const wasConnected = this.connected;
111
- this.connected = msg.connected;
112
- if (msg.connected && !wasConnected) {
113
- this.dispatchEvent(new CustomEvent("connect"));
114
- }
115
- return;
116
- }
117
-
118
- if (type === "history") {
119
- this.dispatchEvent(
120
- new CustomEvent("history", {
121
- detail: {
122
- messages: msg.messages ?? [],
123
- total: msg.total ?? 0,
124
- hasMore: msg.hasMore ?? false,
125
- startIndex: msg.startIndex ?? 0,
126
- error: msg.error ?? null,
127
- recoverable: msg.recoverable === true,
128
- },
129
- }),
130
- );
131
- return;
132
- }
133
-
134
- if (type === "chat") {
135
- this.dispatchEvent(
136
- new CustomEvent("event", {
137
- detail: { event: "chat", payload: msg.payload },
138
- }),
139
- );
140
- return;
141
- }
142
-
143
- if (type === "agent") {
144
- this.dispatchEvent(
145
- new CustomEvent("event", {
146
- detail: { event: "agent", payload: msg.payload },
147
- }),
148
- );
149
- return;
150
- }
151
-
152
- if (type === "subagent") {
153
- this.dispatchEvent(
154
- new CustomEvent("event", {
155
- detail: { event: "subagent", payload: msg.payload },
156
- }),
157
- );
158
- return;
159
- }
160
-
161
- if (type === "profile") {
162
- // Model profile broadcast — apply to Glass UI immediately
163
- if (msg.payload?.profile) {
164
- window.activeModelProfile = msg.payload.profile;
165
- window.dispatchEvent(
166
- new CustomEvent("symi:profile-changed", { detail: msg.payload.profile }),
167
- );
168
- }
169
- return;
170
- }
171
-
172
- if (type === "rpc.response") {
173
- const pending = this._pending.get(msg.id);
174
- if (pending) {
175
- this._pending.delete(msg.id);
176
- if (msg.ok) {
177
- pending.resolve(msg.payload);
178
- } else {
179
- pending.reject(new Error(msg.error?.message ?? "rpc failed"));
180
- }
181
- }
182
- return;
183
- }
184
-
185
- if (type === "error") {
186
- console.warn("[gateway] Server error:", msg.message);
187
- return;
188
- }
189
- }
190
-
191
- // ── Chat Methods ────────────────────────────────────────────────────
192
- send(message) {
193
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
194
- return Promise.reject(new Error("gateway not connected"));
195
- }
196
- this.ws.send(JSON.stringify({ type: "chat.send", message }));
197
- return Promise.resolve();
198
- }
199
-
200
- abort(runId) {
201
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
202
- return Promise.reject(new Error("gateway not connected"));
203
- }
204
- const params = { type: "chat.abort" };
205
- if (runId) {
206
- params.runId = runId;
207
- }
208
- this.ws.send(JSON.stringify(params));
209
- return Promise.resolve();
210
- }
211
-
212
- // ── RPC Helper ──────────────────────────────────────────────────────
213
- rpc(method, params = {}) {
214
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
215
- return Promise.reject(new Error("gateway not connected"));
216
- }
217
- const id = String(++this._rpcSeq);
218
- return new Promise((resolve, reject) => {
219
- this._pending.set(id, { resolve, reject });
220
- this.ws.send(JSON.stringify({ type: "rpc", id, method, params }));
221
- setTimeout(() => {
222
- if (this._pending.has(id)) {
223
- this._pending.delete(id);
224
- reject(new Error("RPC timeout: " + method));
225
- }
226
- }, 30000);
227
- });
228
- }
229
- }
230
-
231
- window.SymiGateway = SymiGateway;
232
- window.SESSION_KEY = SESSION_KEY;
233
- window.extractText = extractText;