@symerian/symi 3.5.20 → 3.5.21

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 (257) hide show
  1. package/dist/{agent-D0Z4r5fr.js → agent-DgVWcnlD.js} +1 -1
  2. package/dist/{agent-DCDT-MPE.js → agent-NT0EKnK_.js} +18 -18
  3. package/dist/{agent-scope-DOrZjOnW.js → agent-scope-Bnsyyeci.js} +18 -18
  4. package/dist/{agents-CdkBeP0d.js → agents-Dlcpc1K3.js} +3 -3
  5. package/dist/{agents.config-B7sNDvhz.js → agents.config-DA0ISLi7.js} +1 -1
  6. package/dist/{audit-B7deV4Lp.js → audit-CPloCzEZ.js} +2 -2
  7. package/dist/{audit-BCStg-Hv.js → audit-CXIXYDRx.js} +20 -20
  8. package/dist/{auth-choice-BIGcxSzP.js → auth-choice--DymOp5O.js} +2 -2
  9. package/dist/{auth-choice-B3DU-aBr.js → auth-choice-BtXIQPTU.js} +11 -11
  10. package/dist/{auth-profiles-Ce7R_25e.js → auth-profiles-D5nYBj_Z.js} +2 -2
  11. package/dist/{auth-token-Cr28IDKY.js → auth-token-fgnCQEHT.js} +3 -3
  12. package/dist/{banner-ChNdzPjD.js → banner-CY_9VW7E.js} +1 -1
  13. package/dist/{browser-cli-C9xaKW8l.js → browser-cli-C5VVk6C9.js} +3 -3
  14. package/dist/{browser-cli-BTg8SVs-.js → browser-cli-DOTM7UBC.js} +9 -9
  15. package/dist/build-info.json +3 -3
  16. package/dist/bundled/boot-md/handler.js +4 -4
  17. package/dist/bundled/session-memory/handler.js +4 -4
  18. package/dist/{call-BccaLPi8.js → call-Bpjj5p7I.js} +9 -9
  19. package/dist/{call-DZg43vv8.js → call-C2urR5Fj.js} +1 -1
  20. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  21. package/dist/{channel-options-CUptVX8c.js → channel-options-XRJiHUm5.js} +1 -1
  22. package/dist/{channel-options-LLmAnD_L.js → channel-options-rFgJaKzJ.js} +1 -1
  23. package/dist/{channels-cli-xoromnio.js → channels-cli-CQ4M05oy.js} +57 -57
  24. package/dist/{channels-cli-B0OQvVUL.js → channels-cli-QMHCRAb5.js} +9 -9
  25. package/dist/{chrome-DJChpTwP.js → chrome-38OnGyuN.js} +2 -2
  26. package/dist/{chrome-CmQwGAuL.js → chrome-OTJg3QKn.js} +7 -7
  27. package/dist/{cli-C7v-sID8.js → cli-B-uoiYP2.js} +45 -45
  28. package/dist/{cli-CMNR7ULk.js → cli-BafqEuaj.js} +6 -6
  29. package/dist/{client-k0MT6NBw.js → client-CTrfpKT3.js} +7 -2
  30. package/dist/{client-DCxeV1bw.js → client-yVTJ5jx5.js} +6 -1
  31. package/dist/{command-registry-CXcvXjUR.js → command-registry-CLm8TAH3.js} +11 -11
  32. package/dist/{commands-registry-Ca5hh7nh.js → commands-registry-CwXsDVuO.js} +1 -1
  33. package/dist/{completion-cli-DJ1YCeSg.js → completion-cli-Cn_81QBb.js} +12 -12
  34. package/dist/{completion-cli-B1Fg6Lmg.js → completion-cli-DOBXkVwG.js} +2 -2
  35. package/dist/{config-B4jkreCN.js → config-BngIfn5l.js} +2 -2
  36. package/dist/{config-cli-D5DlWt6T.js → config-cli-B1cPkJ4p.js} +4 -4
  37. package/dist/{config-cli-CQ1FAvY_.js → config-cli-BgHYqFH1.js} +1 -1
  38. package/dist/{config-guard-BRm3RiOi.js → config-guard-DStz4_V2.js} +6 -6
  39. package/dist/{config-validation-Cdyg1BZB.js → config-validation-Dxj9LRzr.js} +1 -1
  40. package/dist/{configure-bhJB2Dti.js → configure-C7zmSgvC.js} +14 -14
  41. package/dist/{configure-DG1lf0Ld.js → configure-DmzM0S7L.js} +6 -6
  42. package/dist/{consolidate-DymnvvYm.js → consolidate-CO32_TEx.js} +6 -6
  43. package/dist/{control-service-D8kKOts5.js → control-service-CUreKVeY.js} +4 -4
  44. package/dist/control-ui/css/style.css +270 -0
  45. package/dist/control-ui/index.html +44 -114
  46. package/dist/control-ui/js/scheduling.js +85 -224
  47. package/dist/control-ui/js/subagents.js +78 -394
  48. package/dist/control-ui/js/symframe-awaiting.js +301 -0
  49. package/dist/control-ui/js/symframe-pin-store.js +104 -0
  50. package/dist/control-ui/js/symframe.js +238 -2
  51. package/dist/{control-ui-assets-CJQ97d4u.js → control-ui-assets-B8B9z_Ll.js} +1 -1
  52. package/dist/{cost-cli-DWiVCOCx.js → cost-cli-D-ssjcRF.js} +3 -3
  53. package/dist/{cron-cli-8RaBr1CM.js → cron-cli-BNBs3zue.js} +3 -3
  54. package/dist/{cron-cli-fW3wtftG.js → cron-cli-otPeKxmi.js} +7 -7
  55. package/dist/{daemon-cli-Y6clFgva.js → daemon-cli-DDqeG2nd.js} +2 -2
  56. package/dist/{daemon-cli-0EiZTQ2A.js → daemon-cli-qDdMg615.js} +11 -11
  57. package/dist/daemon-cli.js +6 -1
  58. package/dist/{daemon-runtime-DlQla_dA.js → daemon-runtime-CKn0wmCk.js} +10 -10
  59. package/dist/{deliver-B04yNX82.js → deliver-BiWlR84Y.js} +4 -4
  60. package/dist/{deliver-lTZLIQqf.js → deliver-CWMFmMCv.js} +2 -2
  61. package/dist/{deps-Bf9dt2UO.js → deps-CdibsPMx.js} +1 -1
  62. package/dist/{devices-cli-C2gQTsB0.js → devices-cli-BJ3rVWOw.js} +2 -2
  63. package/dist/{devices-cli-DfiSkZ7k.js → devices-cli-DDPwF2Nx.js} +6 -6
  64. package/dist/{diagnostics-DlZODdRf.js → diagnostics-CYkqD5lP.js} +5 -5
  65. package/dist/{directory-cli-Bm5QYEo-.js → directory-cli-giqTe8Yg.js} +3 -3
  66. package/dist/{dm-policy-shared-CeFt0nch.js → dm-policy-shared-B61_yf6G.js} +1 -1
  67. package/dist/{dns-cli-CubLq4j9.js → dns-cli-Dssz4RqF.js} +3 -3
  68. package/dist/{docs-cli-PS8m1er7.js → docs-cli-Ct1STieY.js} +1 -1
  69. package/dist/{doctor-completion-CfF0J8fs.js → doctor-completion-CL7MyXlo.js} +2 -2
  70. package/dist/{doctor-completion-ScxFfN93.js → doctor-completion-k0HiL05o.js} +1 -1
  71. package/dist/{doctor-config-flow-C52W1uUK.js → doctor-config-flow-ljVnQJjo.js} +9 -9
  72. package/dist/entry.js +1 -1
  73. package/dist/{exec-approvals-cli-Cl-vWA1q.js → exec-approvals-cli-Cau1vPQI.js} +4 -4
  74. package/dist/{exec-approvals-cli-BaKWIf56.js → exec-approvals-cli-DsBoQu5H.js} +13 -13
  75. package/dist/extensionAPI.js +2 -2
  76. package/dist/{file-lock-BVUYnlQv.js → file-lock-2AecMjCa.js} +8 -8
  77. package/dist/{fs-safe-BdejYjW8.js → fs-safe-B0Is-oLk.js} +6 -6
  78. package/dist/{gateway-cli-kq5EWlnF.js → gateway-cli-DG_2YZ8B.js} +98 -98
  79. package/dist/{gateway-cli-CK-5nguV.js → gateway-cli-DgmGygc6.js} +16 -16
  80. package/dist/{gateway-rpc-Bzg_TTKP.js → gateway-rpc-Kv0-8W2E.js} +1 -1
  81. package/dist/{gateway-rpc-D12UaJS5.js → gateway-rpc-gaoD882s.js} +1 -1
  82. package/dist/{glass-ui-ws-B6p0iPsO.js → glass-ui-ws-Bof7krDJ.js} +67 -67
  83. package/dist/{glass-ui-ws-CVr0_1gT.js → glass-ui-ws-Dl45d7eU.js} +13 -13
  84. package/dist/{health-CPU9rQGj.js → health-CMbUI4aN.js} +4 -4
  85. package/dist/{health-CJb2CYtg.js → health-znS85U-F.js} +1 -1
  86. package/dist/{hooks-cli-DbgVZaP4.js → hooks-cli-Cb9BzCOY.js} +7 -7
  87. package/dist/{hooks-cli-13HCu5Xs.js → hooks-cli-Cgjor7F-.js} +59 -59
  88. package/dist/{image-ops-L70xVnpG.js → image-ops-BzCBIakN.js} +10 -10
  89. package/dist/index.js +52 -52
  90. package/dist/{inspect-CGKsaVZ4.js → inspect-DzYUb_Dl.js} +4 -4
  91. package/dist/{install-safe-path-B2JrFspY.js → install-safe-path-BrpA09f2.js} +11 -11
  92. package/dist/{installs-D890uIIW.js → installs-bnDlOSq2.js} +10 -10
  93. package/dist/{internal-DVCddhhN.js → internal-csqU78gW.js} +9 -9
  94. package/dist/{lifecycle-core-wFwnK_mD.js → lifecycle-core-cSR_xiIO.js} +5 -5
  95. package/dist/llm-slug-generator.js +4 -4
  96. package/dist/{local-roots-CgDCgCuM.js → local-roots-2Jb79HZ8.js} +1 -1
  97. package/dist/{logs-cli-R16VTptK.js → logs-cli-Kr145PO_.js} +7 -7
  98. package/dist/{logs-cli-CQeK5fn7.js → logs-cli-LiAjkog2.js} +3 -3
  99. package/dist/{manager-CxFs8Z_F.js → manager-CceVgXHV.js} +1 -1
  100. package/dist/{manager-B2SWSuad.js → manager-Cv4xI8sP.js} +1 -1
  101. package/dist/{manager-CHLdCC6u.js → manager-DG6PODgu.js} +15 -15
  102. package/dist/{manager-LPPGAsqn.js → manager-V4UCf0Av.js} +1 -1
  103. package/dist/{memory-DFpqcIst.js → memory-A2D5e8dL.js} +2 -2
  104. package/dist/{memory-DavRjdTi.js → memory-BFnx3v3_.js} +5 -5
  105. package/dist/{memory-cli-DZnq3S6s.js → memory-cli-1zjVJITN.js} +2 -2
  106. package/dist/{memory-cli-B-Cp1Sb1.js → memory-cli-CHNghdrm.js} +12 -12
  107. package/dist/{model-MUMSB_7d.js → model-Cwbcw-km.js} +1 -1
  108. package/dist/{model-auth-1EAQvYRv.js → model-auth-_C07_3Yr.js} +2 -2
  109. package/dist/{model-catalog-IWi6-nY9.js → model-catalog-BWurV7gl.js} +3 -3
  110. package/dist/{model-picker-Cf6UgQEh.js → model-picker-Dpkr5xBW.js} +5 -5
  111. package/dist/{model-selection-7wdmO-Iw.js → model-selection-CCTzD29o.js} +1 -1
  112. package/dist/{models-Cht7Mzvs.js → models-BYev6YAG.js} +3 -3
  113. package/dist/{models-cli-B_motPDX.js → models-cli-BbK8HMKa.js} +55 -55
  114. package/dist/{models-cli-DXswzgUR.js → models-cli-Fa5r1QYP.js} +9 -9
  115. package/dist/{models-config-B5Xxy-c-.js → models-config-DlXge3Sd.js} +8 -8
  116. package/dist/{node-cli-D-gsjRXY.js → node-cli-BPnBosC4.js} +27 -27
  117. package/dist/{node-cli-VmKhIXuP.js → node-cli-Cv7x1gGu.js} +1 -1
  118. package/dist/{node-service-BH08wY5j.js → node-service-Cc18m-uk.js} +1 -1
  119. package/dist/{nodes-cli-BMvxQGCp.js → nodes-cli-CN_m6PO5.js} +10 -10
  120. package/dist/{nodes-cli-D199d74o.js → nodes-cli-DaHOBbd4.js} +3 -3
  121. package/dist/{nodes-screen-De9ma6e1.js → nodes-screen-Cp5QP3ET.js} +4 -4
  122. package/dist/{npm-registry-spec-DTqn-NXZ.js → npm-registry-spec-C-muP97-.js} +9 -9
  123. package/dist/{onboard-DFJcbABp.js → onboard-B2IcTMv-.js} +15 -15
  124. package/dist/{onboard-CdRA8BRG.js → onboard-D-m6WTZl.js} +3 -3
  125. package/dist/{onboard-channels-fadyQGBK.js → onboard-channels-Z-Jkrk5-.js} +1 -1
  126. package/dist/{onboard-channels-Ca7ZFQ2Y.js → onboard-channels-wfGO5Zlh.js} +4 -4
  127. package/dist/{onboard-custom-BcRYreNG.js → onboard-custom-DnDrvxSg.js} +3 -3
  128. package/dist/{onboard-helpers-CQBpac8h.js → onboard-helpers-BKejzolA.js} +8 -8
  129. package/dist/{onboard-helpers-BcLPSb5N.js → onboard-helpers-Dhr98nj8.js} +1 -1
  130. package/dist/{onboard-hooks-2SCajRKc.js → onboard-hooks-D9jHwImb.js} +1 -1
  131. package/dist/{onboard-remote-Bo3tpC9N.js → onboard-remote-DZdMxd1Q.js} +1 -1
  132. package/dist/{onboard-remote-BWK5Ths4.js → onboard-remote-y3ZmP90U.js} +1 -1
  133. package/dist/{onboard-skills-BLl8HPJO.js → onboard-skills-2SUv-W7i.js} +1 -1
  134. package/dist/{onboard-skills-DvacccqZ.js → onboard-skills-BFhHfrt9.js} +3 -3
  135. package/dist/{onboarding-ojb2rFkA.js → onboarding-BckHLQMV.js} +7 -7
  136. package/dist/{onboarding-BywueA1d.js → onboarding-DqlPV372.js} +12 -12
  137. package/dist/{onboarding.finalize-DdxBQpUU.js → onboarding.finalize-Bwjv3jew.js} +31 -31
  138. package/dist/{onboarding.finalize-DHvlZi9G.js → onboarding.finalize-CbH_ShIW.js} +9 -9
  139. package/dist/{onboarding.gateway-config-DPBNWNV6.js → onboarding.gateway-config-CiRo9EMt.js} +8 -8
  140. package/dist/{onboarding.gateway-config-ZK9517uR.js → onboarding.gateway-config-sNSeEykB.js} +3 -3
  141. package/dist/{openai-model-default-BkuuK-Di.js → openai-model-default-De-UAjwg.js} +2 -2
  142. package/dist/{pairing-cli-Rsae0KnN.js → pairing-cli-CBMMCNnx.js} +5 -5
  143. package/dist/{pairing-store-BNhJOnWn.js → pairing-store-Be-ZQK87.js} +1 -1
  144. package/dist/{pairing-token-Dcy37-4s.js → pairing-token-B703A1U3.js} +7 -7
  145. package/dist/{paths-DObzwe08.js → paths-BWqg8NZT.js} +1 -1
  146. package/dist/{pi-auth-json-Db8XJVGL.js → pi-auth-json-D-vdh-nY.js} +6 -6
  147. package/dist/{pi-embedded-Da0QRlM0.js → pi-embedded-B9rtlNMc.js} +25 -9
  148. package/dist/{pi-embedded-helpers-D-OFjhdI.js → pi-embedded-helpers-j1JrlsI0.js} +6 -6
  149. package/dist/{pi-tools.policy-H2t-Xkfc.js → pi-tools.policy-CvAqjEH9.js} +3 -3
  150. package/dist/{plugin-auto-enable-DJBhDIMq.js → plugin-auto-enable-BXSJTxI7.js} +1 -1
  151. package/dist/{plugin-registry-tG7NXc3Y.js → plugin-registry-B43UosQh.js} +3 -3
  152. package/dist/{plugin-registry-Tlmjr-LX.js → plugin-registry-CS4WgHbu.js} +1 -1
  153. package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +1 -1
  154. package/dist/plugin-sdk/index.js +6 -6
  155. package/dist/plugin-sdk/infra/symframe-broadcast.d.ts +18 -6
  156. package/dist/{plugins-cli-CRKD8aho.js → plugins-cli-BV2wbjfI.js} +54 -54
  157. package/dist/{plugins-cli-Cm0G_-Y5.js → plugins-cli-BY42hyHP.js} +7 -7
  158. package/dist/{ports-r7LBic2V.js → ports-Bi3V_3n9.js} +1 -1
  159. package/dist/{ports-gxLM5ahL.js → ports-CB_Iu83U.js} +2 -2
  160. package/dist/{program-DEmAlwmD.js → program-P9F1DxBa.js} +12 -12
  161. package/dist/{program-context-DRCRbDpu.js → program-context-BmXxHUKe.js} +40 -40
  162. package/dist/{prompt-select-styled-pomsR-zf.js → prompt-select-styled-B2ah467m.js} +7 -7
  163. package/dist/{prompt-select-styled-B41Tx9aC.js → prompt-select-styled-BlQZX6pK.js} +38 -38
  164. package/dist/{provider-auth-helpers-rKWs_r7a.js → provider-auth-helpers-Bgb_Bfp9.js} +1 -1
  165. package/dist/{provider-auth-helpers-CdQwOam7.js → provider-auth-helpers-WLwb6tL4.js} +6 -6
  166. package/dist/{push-apns-eCM0qmrY.js → push-apns-CBGvXev_.js} +4 -4
  167. package/dist/{push-apns-CZPUHftn.js → push-apns-DnSCjFu7.js} +1 -1
  168. package/dist/{pw-ai-BiBvIJzd.js → pw-ai-CP5pn3eU.js} +7 -7
  169. package/dist/{pw-ai-DLsdzdgc.js → pw-ai-DY_6l11g.js} +1 -1
  170. package/dist/{qmd-manager-C8-M4Pru.js → qmd-manager-Dxyue7B1.js} +19 -19
  171. package/dist/{qr-cli-1sCVaPcF.js → qr-cli-DHw6muwK.js} +3 -3
  172. package/dist/{register.agent-BQPvYYdn.js → register.agent-BuEcmVg0.js} +12 -12
  173. package/dist/{register.agent-N1hoqMFR.js → register.agent-CXdTiqyP.js} +67 -67
  174. package/dist/{register.configure-BHHZ44xB.js → register.configure-DVcn-gCO.js} +70 -70
  175. package/dist/{register.configure-BAc3P4Z-.js → register.configure-YDKJ-KQg.js} +14 -14
  176. package/dist/{register.maintenance-lX0a3Hzl.js → register.maintenance-BiGvpEj-.js} +13 -13
  177. package/dist/{register.maintenance-DDgy5Iyy.js → register.maintenance-cpspl8D6.js} +67 -67
  178. package/dist/{register.message-Br-IH_0z.js → register.message-BIuLbESM.js} +7 -7
  179. package/dist/{register.message-B4lDhHpE.js → register.message-BjcYy5UG.js} +47 -47
  180. package/dist/{register.onboard-B-GoYJIc.js → register.onboard-C4vIASed.js} +6 -6
  181. package/dist/{register.onboard-Bv0s2_KV.js → register.onboard-D4RN92s2.js} +25 -25
  182. package/dist/{register.setup-DQ6KLkAI.js → register.setup-BvoXF0xl.js} +28 -28
  183. package/dist/{register.setup-4lNdC98i.js → register.setup-D-Jt2e1d.js} +6 -6
  184. package/dist/{register.status-health-sessions-Cg7bK5K2.js → register.status-health-sessions-BY9hMD1s.js} +8 -8
  185. package/dist/{register.status-health-sessions-ByGn71_M.js → register.status-health-sessions-DjDvCXBn.js} +41 -41
  186. package/dist/{register.subclis-FMlcLBX0.js → register.subclis-Cibmeapc.js} +20 -20
  187. package/dist/{replies-CbXXjn9X.js → replies-B_3j7R_Q.js} +1 -1
  188. package/dist/{reply-prefix-BFNeXT65.js → reply-prefix-CtZtkTJK.js} +1 -1
  189. package/dist/{resolve-route-C1IIA6kH.js → resolve-route-Du0VftVs.js} +1 -1
  190. package/dist/{routes-ivqbutvM.js → routes-BwTUoI5h.js} +10 -10
  191. package/dist/{rpc-Dk1Az_d8.js → rpc-BnAKPQDB.js} +1 -1
  192. package/dist/{rpc-JAmDaTYt.js → rpc-CwxSZZOx.js} +1 -1
  193. package/dist/{run-main-DSyeVDsT.js → run-main-BhEQjKtM.js} +20 -20
  194. package/dist/{sandbox-BkznAPKO.js → sandbox-CZGTCone.js} +18 -18
  195. package/dist/{sandbox-cli-Bb9cBtBH.js → sandbox-cli-DEtGT_4y.js} +13 -13
  196. package/dist/{security-cli-DmgGLP83.js → security-cli-CS-ZT1LE.js} +3 -3
  197. package/dist/{security-cli-D47LQbpf.js → security-cli-DJd7Fcdy.js} +29 -29
  198. package/dist/{send-B0jHSNMF.js → send-CxjvucMO.js} +7 -7
  199. package/dist/{server-context-ChcbJgNo.js → server-context-DXdk410X.js} +5 -5
  200. package/dist/{server-methods-DGBBt49x.js → server-methods-CWxr5b-w.js} +19 -13
  201. package/dist/{server-methods-BkHB2MOW.js → server-methods-DfVfzYqq.js} +68 -62
  202. package/dist/{server-node-events-C186LRm0.js → server-node-events-B0yC6hi1.js} +48 -48
  203. package/dist/{server-node-events-D-Akk3uq.js → server-node-events-ClDEcUTJ.js} +8 -8
  204. package/dist/{service-e6MzlLCd.js → service-CRZoXO_n.js} +15 -15
  205. package/dist/{session-dirs-C9E2G0yZ.js → session-dirs-a00Ad2SO.js} +2 -2
  206. package/dist/{session-utils-Cs1jlD-q.js → session-utils-CJhcRx3E.js} +14 -14
  207. package/dist/{sessions-Dxf5Kjig.js → sessions-BCc3THTm.js} +10 -10
  208. package/dist/{shared-1xPo9ygd.js → shared-C39SiDDJ.js} +1 -1
  209. package/dist/{shared-COtpr3Ad.js → shared-Dh-O8nRd.js} +3 -3
  210. package/dist/{skill-commands-DDGGlq68.js → skill-commands-DWvXs3lz.js} +4 -4
  211. package/dist/{skill-scanner-BCgVcIwi.js → skill-scanner-CIlHPszT.js} +5 -5
  212. package/dist/{skills-BwDmcZdt.js → skills-CYcBtLGH.js} +4 -4
  213. package/dist/{skills-cli-B-7TY-vS.js → skills-cli-CD9s3cgm.js} +7 -7
  214. package/dist/{skills-install-Dwzsjoc8.js → skills-install-BTa9IuQ6.js} +3 -3
  215. package/dist/{skills-remote-bz71Bstn.js → skills-remote-BcRQTDsZ.js} +3 -3
  216. package/dist/{skills-status-BKX1PjCc.js → skills-status-DLnCHUZ2.js} +1 -1
  217. package/dist/{sqlite-Cod7C5ba.js → sqlite-BpogPlQW.js} +5 -5
  218. package/dist/{status-CFgCSaDq.js → status-BWxLtb3D.js} +23 -23
  219. package/dist/{status-poPDyC8O.js → status-Doq8T1zj.js} +3 -3
  220. package/dist/{status-Bahhq7OQ.js → status-K1k4g3Ai.js} +1 -1
  221. package/dist/{status-D9LC5P_Y.js → status-ojZB_Lrf.js} +5 -5
  222. package/dist/{status.update-DGJi0OLl.js → status.update-CKfyV6zw.js} +3 -3
  223. package/dist/{subagent-registry-V2o45tIn.js → subagent-registry-BOt7g9hn.js} +21 -10
  224. package/dist/{symframe-cli-bxdpivve.js → symframe-cli-CrUtJw_7.js} +31 -7
  225. package/dist/{symframe-cli-ppdMo15M.js → symframe-cli-D1CtN3pf.js} +37 -13
  226. package/dist/{symi-root-BQ0IpoW2.js → symi-root-DeCVdZB4.js} +2 -2
  227. package/dist/{synthesis-B2EyHFXy.js → synthesis-BIQLrbys.js} +6 -6
  228. package/dist/{synthesis-DGau1ONT.js → synthesis-Bc2QkGvt.js} +2 -2
  229. package/dist/{synthesis-CPSq83PP.js → synthesis-VZNnlUTf.js} +45 -45
  230. package/dist/{synthesis-C2WbvLOI.js → synthesis-yl24Ovw4.js} +4 -4
  231. package/dist/{system-cli-nPyjUPBH.js → system-cli-CvN-Wq9U.js} +3 -3
  232. package/dist/{system-cli-BroqLjZ6.js → system-cli-r7WJj0Xh.js} +7 -7
  233. package/dist/{systemd-CUIM0n5P.js → systemd-CsoVnIbM.js} +5 -5
  234. package/dist/{systemd-hints-CsrzMCTD.js → systemd-hints-QISwLlFU.js} +6 -6
  235. package/dist/{systemd-linger-BzYk7A6M.js → systemd-linger-BnhuRdbt.js} +1 -1
  236. package/dist/{tui-Bp9k5skv.js → tui-BxgdImL_.js} +2 -2
  237. package/dist/{tui-DzROrE20.js → tui-J7Jxp-FF.js} +7 -7
  238. package/dist/{tui-cli-BHBF8O-3.js → tui-cli-DR48dU_C.js} +19 -19
  239. package/dist/{tui-cli-Dv4hBFdc.js → tui-cli-DqvgN5ng.js} +3 -3
  240. package/dist/{unified-runner-CIQIkbvi.js → unified-runner-BV5TdNFv.js} +32 -16
  241. package/dist/{unified-runner-CduaBH_0.js → unified-runner-DXjH-prv.js} +117 -106
  242. package/dist/{update-yYduAjKd.js → update-Cb0Fmxic.js} +3 -3
  243. package/dist/{update-check-BCL_K7kx.js → update-check-u6Jgr1cz.js} +5 -5
  244. package/dist/{update-cli-WcLxjBiY.js → update-cli-CKpjWtlv.js} +77 -77
  245. package/dist/{update-cli-BKnHBe8a.js → update-cli-Dn6QQZLd.js} +14 -14
  246. package/dist/{update-runner-BLV8SI96.js → update-runner-G2YgEATs.js} +15 -15
  247. package/dist/{webhooks-cli-D5k-Y2A8.js → webhooks-cli-DjUITimx.js} +4 -4
  248. package/dist/{with-timeout-DPR4A2dx.js → with-timeout-CLrF-Yr_.js} +1 -1
  249. package/dist/{workspace-dirs-jKFQf7of.js → workspace-dirs-DCICLTHx.js} +1 -1
  250. package/dist/{wsl-CglTdtlb.js → wsl-DTi7eX-V.js} +2 -2
  251. package/extensions/memory-core/package.json +1 -1
  252. package/extensions/msteams/CHANGELOG.md +6 -0
  253. package/extensions/msteams/package.json +1 -1
  254. package/extensions/open-prose/package.json +1 -1
  255. package/extensions/outlook/package.json +1 -1
  256. package/extensions/slack/package.json +1 -1
  257. package/package.json +1 -1
@@ -1,11 +1,31 @@
1
- // ── Subagents Panel ─────────────────────────────────────────────────────────
2
- // Displays active subagents and allows spawning new ones via quick-deploy or custom.
1
+ // ── Subagents (modal + RPC poller only) ─────────────────────────────────────
2
+ // Stage C of the Dynamic Glass Panel arc see ~/Documents/dynamic-glass-panel.md.
3
+ //
4
+ // Before Stage C this file owned the SUBAGENTS sticky panel: list
5
+ // rendering, Quick Deploy preset buttons, staging chips, count badge,
6
+ // custom spawn button. The sticky panel is gone; in-flight sub-agents
7
+ // now surface in the AWAITING footer (glass-ui/js/symframe-awaiting.js).
8
+ //
9
+ // What survives here:
10
+ // - The subagent spawn modal (overlay + form + submit handler)
11
+ // - The fetchSubagents poll loop (30s interval + gateway:connected)
12
+ // - The agent preset data (AGENT_PRESETS) — kept as data for possible
13
+ // future Stage D re-exposure (preset picker in the spawn modal)
14
+ // - window.subagentsPanel exported API:
15
+ // refresh() — force a fetch
16
+ // open() — open the spawn modal (custom)
17
+ // getActive() — current subagents snapshot
18
+ // - CustomEvent dispatch after each successful fetch so the AWAITING
19
+ // surface (and any future consumer) re-renders without polling
20
+ // a parallel copy of the same RPC.
3
21
  // ─────────────────────────────────────────────────────────────────────────────
4
22
 
5
23
  "use strict";
6
24
 
7
25
  (function () {
8
- // ── Agent Presets ──────────────────────────────────────────────────────────
26
+ // Agent presets — kept as DATA only (Stage C dropped the quick-deploy
27
+ // UI; the spawn modal still defaults to custom). A future Stage D mode
28
+ // could surface these in a preset picker inside the modal.
9
29
  const AGENT_PRESETS = {
10
30
  research: {
11
31
  label: "Research Agent",
@@ -49,33 +69,15 @@
49
69
  model: "sonnet",
50
70
  thinking: "",
51
71
  },
52
- test: {
53
- label: "Test Agent",
54
- taskTemplate: "Write tests for: ",
55
- model: "sonnet",
56
- thinking: "",
57
- },
72
+ test: { label: "Test Agent", taskTemplate: "Write tests for: ", model: "sonnet", thinking: "" },
58
73
  };
59
74
 
60
- // ── State ──────────────────────────────────────────────────────────────────
75
+ // ── State ──
61
76
  let subagents = [];
62
- let stagedAgents = []; // Array of { id, type, label, task, model, thinking }
63
77
  let _pollInterval = null;
64
- let editingAgentId = null; // Track which staged agent is being edited
65
-
66
- // ── DOM Elements ───────────────────────────────────────────────────────────
67
- const list = document.getElementById("subagents-list");
68
- const emptyState = document.getElementById("subagents-empty");
69
- const countBadge = document.getElementById("subagents-count");
70
- const spawnBtn = document.getElementById("subagent-spawn-btn");
71
78
 
72
- // Quick deploy elements
73
- const quickDeployBtns = document.querySelectorAll(".quick-deploy-btn");
74
- const _stagingBox = document.getElementById("staging-box");
75
- const stagingChips = document.getElementById("staging-chips");
76
- const stagingDeployBtn = document.getElementById("staging-deploy-btn");
77
-
78
- // Modal elements
79
+ // ── Modal DOM refs (these elements live in their own overlay block
80
+ // further down in index.html and are untouched by Stage C). ──
79
81
  const modalOverlay = document.getElementById("subagent-modal-overlay");
80
82
  const modalClose = document.getElementById("subagent-modal-close");
81
83
  const modalCancel = document.getElementById("subagent-modal-cancel");
@@ -85,322 +87,57 @@
85
87
  const modelSelect = document.getElementById("subagent-model");
86
88
  const thinkingSelect = document.getElementById("subagent-thinking");
87
89
 
88
- // ── Icons ──────────────────────────────────────────────────────────────────
89
- const ICONS = {
90
- running: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
91
- <circle cx="12" cy="12" r="3"/>
92
- <path d="M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"/>
93
- </svg>`,
94
- completed: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
95
- <path d="M20 6L9 17l-5-5"/>
96
- </svg>`,
97
- error: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
98
- <circle cx="12" cy="12" r="10"/>
99
- <path d="M15 9l-6 6M9 9l6 6"/>
100
- </svg>`,
101
- };
102
-
103
- // ── Staging Management ─────────────────────────────────────────────────────
104
- function addToStaging(agentType) {
105
- const preset = AGENT_PRESETS[agentType];
106
- if (!preset) {
107
- return;
108
- }
109
-
110
- const stagedAgent = {
111
- id: crypto.randomUUID(),
112
- type: agentType,
113
- label: preset.label,
114
- task: preset.taskTemplate,
115
- model: preset.model,
116
- thinking: preset.thinking,
117
- };
118
-
119
- stagedAgents.push(stagedAgent);
120
- renderStagingChips();
121
- }
122
-
123
- function removeFromStaging(agentId) {
124
- stagedAgents = stagedAgents.filter((a) => a.id !== agentId);
125
- renderStagingChips();
126
- }
127
-
128
- function renderStagingChips() {
129
- stagingChips.innerHTML = "";
130
-
131
- if (stagedAgents.length === 0) {
132
- stagingChips.innerHTML = '<span class="staging-empty">Select agents above</span>';
133
- stagingDeployBtn.disabled = true;
134
- return;
135
- }
136
-
137
- stagingDeployBtn.disabled = false;
138
-
139
- for (const agent of stagedAgents) {
140
- const chip = document.createElement("div");
141
- chip.className = "staging-chip";
142
- chip.setAttribute("data-agent-id", agent.id);
143
-
144
- chip.innerHTML = `
145
- <span class="staging-chip-name">${escHtml(agent.label.replace(" Agent", ""))}</span>
146
- <span class="staging-chip-remove" title="Remove">×</span>
147
- `;
148
-
149
- // Click chip to edit
150
- chip.addEventListener("click", (e) => {
151
- if (e.target.classList.contains("staging-chip-remove")) {
152
- e.stopPropagation();
153
- removeFromStaging(agent.id);
154
- } else {
155
- openModalForEdit(agent);
156
- }
157
- });
158
-
159
- stagingChips.appendChild(chip);
160
- }
161
- }
162
-
163
- // ── Deploy Staged Agents ───────────────────────────────────────────────────
164
- async function deployAllStaged() {
165
- if (stagedAgents.length === 0) {
166
- return;
167
- }
168
- if (!window.gateway?.connected) {
169
- alert("Gateway not connected");
170
- return;
171
- }
172
-
173
- stagingDeployBtn.disabled = true;
174
- stagingDeployBtn.innerHTML = `
175
- <svg class="spin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
176
- <circle cx="12" cy="12" r="10" stroke-dasharray="60" stroke-dashoffset="20"/>
177
- </svg>
178
- Deploying...
179
- `;
180
-
181
- const toSpawn = [...stagedAgents];
182
- let successCount = 0;
183
-
184
- for (const agent of toSpawn) {
185
- try {
186
- const uuid = crypto.randomUUID();
187
- const sessionKey = `agent:main:subagent:${uuid}`;
188
-
189
- await window.gateway.rpc("agent", {
190
- message: agent.task,
191
- sessionKey: sessionKey,
192
- deliver: false,
193
- lane: "subagent",
194
- label: agent.label,
195
- model: agent.model || undefined,
196
- thinking: agent.thinking || undefined,
197
- timeout: 300,
198
- });
199
-
200
- successCount++;
201
- } catch (err) {
202
- console.error("[subagents] Failed to spawn:", agent.label, err);
203
- }
204
- }
205
-
206
- // Clear staging
207
- stagedAgents = [];
208
- renderStagingChips();
209
-
210
- // Reset button
211
- stagingDeployBtn.innerHTML = `
212
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
213
- <path d="M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z"/>
214
- </svg>
215
- Deploy
216
- `;
217
-
218
- // Refresh subagents list
219
- setTimeout(fetchSubagents, 500);
220
-
221
- if (successCount < toSpawn.length) {
222
- alert(`Deployed ${successCount} of ${toSpawn.length} agents. Check console for errors.`);
223
- }
224
- }
225
-
226
- // ── Render Active Subagents ────────────────────────────────────────────────
227
- function render() {
228
- // Update count badge
229
- const activeCount = subagents.filter((s) => s.status === "active" || !s.endedAt).length;
230
- countBadge.textContent = activeCount > 0 ? activeCount : "";
231
-
232
- // Clear existing items (except empty state)
233
- const items = list.querySelectorAll(".subagent-item");
234
- items.forEach((item) => item.remove());
235
-
236
- if (subagents.length === 0) {
237
- emptyState.style.display = "";
238
- return;
239
- }
240
-
241
- emptyState.style.display = "none";
242
-
243
- // Sort: running first, then by startedAt descending
244
- const sorted = [...subagents].toSorted((a, b) => {
245
- const aRunning = a.status === "active" || !a.endedAt;
246
- const bRunning = b.status === "active" || !b.endedAt;
247
- if (aRunning !== bRunning) {
248
- return bRunning ? 1 : -1;
249
- }
250
- return (b.startedAt || 0) - (a.startedAt || 0);
251
- });
252
-
253
- // Only show top 5
254
- const visible = sorted.slice(0, 5);
255
-
256
- for (const sub of visible) {
257
- const status = getStatus(sub);
258
- const runtime = formatRuntime(sub);
259
-
260
- const item = document.createElement("div");
261
- item.className = "subagent-item";
262
- item.setAttribute("data-status", status);
263
- item.setAttribute("data-run-id", sub.runId || "");
264
-
265
- item.innerHTML = `
266
- <div class="subagent-icon">${ICONS[status] || ICONS.running}</div>
267
- <div class="subagent-info">
268
- <div class="subagent-label">${escHtml(sub.label || "Subagent")}</div>
269
- <div class="subagent-task">${escHtml(truncate(sub.task || "", 40))}</div>
270
- </div>
271
- <div class="subagent-runtime">${runtime}</div>
272
- `;
273
-
274
- item.addEventListener("click", () => showSubagentDetails(sub));
275
- list.appendChild(item);
276
- }
277
- }
278
-
279
- function getStatus(sub) {
280
- // Use status from backend if available
281
- if (sub.status === "active") {
282
- return "running";
283
- }
284
- if (sub.status === "completed") {
285
- return "completed";
286
- }
287
- if (sub.status === "error" || sub.status === "timeout") {
288
- return "error";
289
- }
290
- // Fallback for old format
291
- if (!sub.endedAt) {
292
- return "running";
293
- }
294
- if (sub.outcome?.status === "ok") {
295
- return "completed";
296
- }
297
- return "error";
298
- }
299
-
300
- function formatRuntime(sub) {
301
- const start = sub.startedAt;
302
- const end = sub.endedAt || Date.now();
303
- if (!start) {
304
- return "--";
305
- }
306
-
307
- const seconds = Math.floor((end - start) / 1000);
308
- if (seconds < 60) {
309
- return `${seconds}s`;
310
- }
311
- const minutes = Math.floor(seconds / 60);
312
- const secs = seconds % 60;
313
- if (minutes < 60) {
314
- return `${minutes}m${secs > 0 ? secs + "s" : ""}`;
315
- }
316
- const hours = Math.floor(minutes / 60);
317
- const mins = minutes % 60;
318
- return `${hours}h${mins}m`;
319
- }
320
-
321
- function truncate(str, len) {
322
- if (str.length <= len) {
323
- return str;
324
- }
325
- return str.slice(0, len - 1) + "…";
326
- }
327
-
328
- // ── Fetch Subagents ────────────────────────────────────────────────────────
90
+ // ── Fetch + notify ──
329
91
  async function fetchSubagents() {
330
92
  if (!window.gateway?.connected) {
331
93
  return;
332
94
  }
333
-
334
95
  try {
335
96
  const result = await window.gateway.rpc("subagents.list", {
336
97
  sessionKey: window.SESSION_KEY || "agent:main:main",
337
98
  });
338
-
339
99
  if (result?.subagents) {
340
100
  subagents = result.subagents;
341
- render();
101
+ // Notify any subscriber (the AWAITING surface listens for this)
102
+ window.dispatchEvent(new CustomEvent("symi:subagents-updated", { detail: { subagents } }));
342
103
  }
343
104
  } catch (err) {
344
105
  console.debug("[subagents] Failed to fetch:", err.message);
345
106
  }
346
107
  }
347
108
 
348
- // ── Show Subagent Details ──────────────────────────────────────────────────
349
- function showSubagentDetails(sub) {
350
- const status = getStatus(sub);
351
- const statusText =
352
- status === "running" ? "Running" : status === "completed" ? "Completed" : "Failed";
353
-
354
- const details = [
355
- `Status: ${statusText}`,
356
- `Task: ${sub.task || "N/A"}`,
357
- `Label: ${sub.label || "N/A"}`,
358
- `Model: ${sub.model || "Default"}`,
359
- `Runtime: ${formatRuntime(sub)}`,
360
- `Session: ${sub.childSessionKey || "N/A"}`,
361
- ].join("\n");
362
-
363
- console.log("[subagent]", details);
364
- }
365
-
366
- // ── Modal Controls ─────────────────────────────────────────────────────────
109
+ // ── Modal ──
367
110
  function openModal() {
368
- editingAgentId = null;
369
- modalOverlay.classList.add("open");
370
- modalOverlay.setAttribute("aria-hidden", "false");
371
- taskInput.focus();
372
- document.addEventListener("keydown", onModalKey);
373
- }
374
-
375
- function openModalForEdit(stagedAgent) {
376
- editingAgentId = stagedAgent.id;
377
-
378
- // Pre-fill form with staged agent config
379
- taskInput.value = stagedAgent.task;
380
- labelInput.value = stagedAgent.label;
381
- modelSelect.value = stagedAgent.model || "";
382
- thinkingSelect.value = stagedAgent.thinking || "";
383
-
111
+ if (!modalOverlay) {
112
+ return;
113
+ }
384
114
  modalOverlay.classList.add("open");
385
115
  modalOverlay.setAttribute("aria-hidden", "false");
386
- taskInput.focus();
387
-
388
- // Position cursor at end of task template
389
- taskInput.setSelectionRange(taskInput.value.length, taskInput.value.length);
390
-
116
+ if (taskInput) {
117
+ taskInput.focus();
118
+ }
391
119
  document.addEventListener("keydown", onModalKey);
392
120
  }
393
121
 
394
122
  function closeModal() {
123
+ if (!modalOverlay) {
124
+ return;
125
+ }
395
126
  modalOverlay.classList.remove("open");
396
127
  modalOverlay.setAttribute("aria-hidden", "true");
397
128
  document.removeEventListener("keydown", onModalKey);
398
- // Reset form
399
- taskInput.value = "";
400
- labelInput.value = "";
401
- modelSelect.value = "";
402
- thinkingSelect.value = "";
403
- editingAgentId = null;
129
+ if (taskInput) {
130
+ taskInput.value = "";
131
+ }
132
+ if (labelInput) {
133
+ labelInput.value = "";
134
+ }
135
+ if (modelSelect) {
136
+ modelSelect.value = "";
137
+ }
138
+ if (thinkingSelect) {
139
+ thinkingSelect.value = "";
140
+ }
404
141
  }
405
142
 
406
143
  function onModalKey(e) {
@@ -409,98 +146,53 @@
409
146
  }
410
147
  }
411
148
 
412
- // ── Spawn/Save Subagent ────────────────────────────────────────────────────
413
- async function spawnOrSaveSubagent() {
149
+ // ── Spawn (custom-only path; preset staging dropped in Stage C) ──
150
+ async function spawnFromModal() {
151
+ if (!taskInput) {
152
+ return;
153
+ }
414
154
  const task = taskInput.value.trim();
415
155
  if (!task) {
416
156
  taskInput.focus();
417
157
  return;
418
158
  }
159
+ const label = (labelInput?.value || "").trim() || "Custom Subagent";
160
+ const model = modelSelect?.value || undefined;
161
+ const thinking = thinkingSelect?.value || undefined;
419
162
 
420
- const label = labelInput.value.trim() || "Subagent";
421
- const model = modelSelect.value || undefined;
422
- const thinking = thinkingSelect.value || undefined;
423
-
424
- // If editing a staged agent, update it instead of spawning
425
- if (editingAgentId) {
426
- const agent = stagedAgents.find((a) => a.id === editingAgentId);
427
- if (agent) {
428
- agent.task = task;
429
- agent.label = label;
430
- agent.model = model;
431
- agent.thinking = thinking;
432
- renderStagingChips();
433
- }
434
- closeModal();
435
- return;
163
+ if (modalSubmit) {
164
+ modalSubmit.disabled = true;
436
165
  }
437
-
438
- // Otherwise, spawn immediately (custom spawn)
439
- modalSubmit.disabled = true;
440
- modalSubmit.innerHTML = `
441
- <svg class="spin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
442
- <circle cx="12" cy="12" r="10" stroke-dasharray="60" stroke-dashoffset="20"/>
443
- </svg>
444
- Spawning...
445
- `;
446
-
447
166
  try {
448
167
  if (!window.gateway?.connected) {
449
168
  throw new Error("Gateway not connected");
450
169
  }
451
-
452
170
  const uuid = crypto.randomUUID();
453
171
  const sessionKey = `agent:main:subagent:${uuid}`;
454
-
455
172
  await window.gateway.rpc("agent", {
456
173
  message: task,
457
- sessionKey: sessionKey,
174
+ sessionKey,
458
175
  deliver: false,
459
176
  lane: "subagent",
460
- label: label,
461
- model: model,
462
- thinking: thinking,
177
+ label,
178
+ model,
179
+ thinking,
463
180
  timeout: 300,
464
181
  });
465
-
466
182
  closeModal();
467
183
  setTimeout(fetchSubagents, 500);
468
184
  } catch (err) {
469
- console.error("[subagents] Spawn failed:", err);
185
+ console.error("[subagents] Failed to spawn:", err);
470
186
  alert("Failed to spawn subagent: " + (err.message || "Unknown error"));
471
187
  } finally {
472
- modalSubmit.disabled = false;
473
- modalSubmit.innerHTML = `
474
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
475
- <path d="M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z"/>
476
- </svg>
477
- Spawn
478
- `;
188
+ if (modalSubmit) {
189
+ modalSubmit.disabled = false;
190
+ }
479
191
  }
480
192
  }
481
193
 
482
- // ── Initialize ─────────────────────────────────────────────────────────────
194
+ // ── Init ──
483
195
  function init() {
484
- // Quick deploy buttons
485
- quickDeployBtns.forEach((btn) => {
486
- btn.addEventListener("click", () => {
487
- const agentType = btn.getAttribute("data-agent");
488
- if (agentType) {
489
- addToStaging(agentType);
490
- }
491
- });
492
- });
493
-
494
- // Staging deploy button
495
- if (stagingDeployBtn) {
496
- stagingDeployBtn.addEventListener("click", deployAllStaged);
497
- }
498
-
499
- // Custom spawn button
500
- if (spawnBtn) {
501
- spawnBtn.addEventListener("click", openModal);
502
- }
503
-
504
196
  // Modal controls
505
197
  if (modalClose) {
506
198
  modalClose.addEventListener("click", closeModal);
@@ -509,7 +201,7 @@
509
201
  modalCancel.addEventListener("click", closeModal);
510
202
  }
511
203
  if (modalSubmit) {
512
- modalSubmit.addEventListener("click", spawnOrSaveSubagent);
204
+ modalSubmit.addEventListener("click", spawnFromModal);
513
205
  }
514
206
  if (modalOverlay) {
515
207
  modalOverlay.addEventListener("click", (e) => {
@@ -518,42 +210,34 @@
518
210
  }
519
211
  });
520
212
  }
521
-
522
- // Submit on Enter in task field (with Ctrl/Cmd)
523
213
  if (taskInput) {
524
214
  taskInput.addEventListener("keydown", (e) => {
525
215
  if ((e.ctrlKey || e.metaKey) && e.key === "Enter") {
526
- void spawnOrSaveSubagent();
216
+ void spawnFromModal();
527
217
  }
528
218
  });
529
219
  }
530
220
 
531
- // Initial render of staging (empty)
532
- renderStagingChips();
533
-
534
- // Initial fetch
221
+ // Initial fetch + 5-sec polling cycle (matches pre-Stage-C cadence)
535
222
  void fetchSubagents();
536
-
537
- // Poll every 5 seconds
538
223
  _pollInterval = setInterval(fetchSubagents, 5000);
539
224
 
540
- // Also fetch on gateway connect
225
+ // Fetch on gateway connect / reconnect
541
226
  window.addEventListener("gateway:connected", fetchSubagents);
542
227
  window.addEventListener("gateway:hello", fetchSubagents);
543
228
  }
544
229
 
545
- // Start when DOM is ready
546
230
  if (document.readyState === "loading") {
547
231
  document.addEventListener("DOMContentLoaded", init);
548
232
  } else {
549
233
  init();
550
234
  }
551
235
 
552
- // Expose for external use
236
+ // Public API kept stable across the Stage C refactor.
553
237
  window.subagentsPanel = {
554
238
  refresh: fetchSubagents,
555
239
  open: openModal,
556
- addToStaging: addToStaging,
557
- deployAll: deployAllStaged,
240
+ getActive: () => [...subagents],
241
+ presets: AGENT_PRESETS,
558
242
  };
559
243
  })();