@symerian/symi 3.5.19 → 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.
- package/dist/{agent-D0Z4r5fr.js → agent-DgVWcnlD.js} +1 -1
- package/dist/{agent-DCDT-MPE.js → agent-NT0EKnK_.js} +18 -18
- package/dist/{agent-scope-DOrZjOnW.js → agent-scope-Bnsyyeci.js} +18 -18
- package/dist/{agents-CdkBeP0d.js → agents-Dlcpc1K3.js} +3 -3
- package/dist/{agents.config-B7sNDvhz.js → agents.config-DA0ISLi7.js} +1 -1
- package/dist/{audit-B7deV4Lp.js → audit-CPloCzEZ.js} +2 -2
- package/dist/{audit-BCStg-Hv.js → audit-CXIXYDRx.js} +20 -20
- package/dist/{auth-choice-BIGcxSzP.js → auth-choice--DymOp5O.js} +2 -2
- package/dist/{auth-choice-B3DU-aBr.js → auth-choice-BtXIQPTU.js} +11 -11
- package/dist/{auth-profiles-Ce7R_25e.js → auth-profiles-D5nYBj_Z.js} +2 -2
- package/dist/{auth-token-Cr28IDKY.js → auth-token-fgnCQEHT.js} +3 -3
- package/dist/{banner-ChNdzPjD.js → banner-CY_9VW7E.js} +1 -1
- package/dist/{browser-cli-C9xaKW8l.js → browser-cli-C5VVk6C9.js} +3 -3
- package/dist/{browser-cli-BTg8SVs-.js → browser-cli-DOTM7UBC.js} +9 -9
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +4 -4
- package/dist/bundled/session-memory/handler.js +4 -4
- package/dist/{call-BccaLPi8.js → call-Bpjj5p7I.js} +9 -9
- package/dist/{call-DZg43vv8.js → call-C2urR5Fj.js} +1 -1
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-CUptVX8c.js → channel-options-XRJiHUm5.js} +1 -1
- package/dist/{channel-options-LLmAnD_L.js → channel-options-rFgJaKzJ.js} +1 -1
- package/dist/{channels-cli-xoromnio.js → channels-cli-CQ4M05oy.js} +57 -57
- package/dist/{channels-cli-B0OQvVUL.js → channels-cli-QMHCRAb5.js} +9 -9
- package/dist/{chrome-DJChpTwP.js → chrome-38OnGyuN.js} +2 -2
- package/dist/{chrome-CmQwGAuL.js → chrome-3jl2ulOE.js} +4 -4
- package/dist/{chrome-DNssqQJs.js → chrome-OTJg3QKn.js} +4 -4
- package/dist/{cli-C7v-sID8.js → cli-B-uoiYP2.js} +45 -45
- package/dist/{cli-CMNR7ULk.js → cli-BafqEuaj.js} +6 -6
- package/dist/{client-k0MT6NBw.js → client-CTrfpKT3.js} +7 -2
- package/dist/{client-DCxeV1bw.js → client-yVTJ5jx5.js} +6 -1
- package/dist/{command-registry-CXcvXjUR.js → command-registry-CLm8TAH3.js} +11 -11
- package/dist/{commands-registry-Ca5hh7nh.js → commands-registry-CwXsDVuO.js} +1 -1
- package/dist/{completion-cli-DJ1YCeSg.js → completion-cli-Cn_81QBb.js} +12 -12
- package/dist/{completion-cli-B1Fg6Lmg.js → completion-cli-DOBXkVwG.js} +2 -2
- package/dist/{config-B4jkreCN.js → config-BngIfn5l.js} +2 -2
- package/dist/{config-cli-D5DlWt6T.js → config-cli-B1cPkJ4p.js} +4 -4
- package/dist/{config-cli-CQ1FAvY_.js → config-cli-BgHYqFH1.js} +1 -1
- package/dist/{config-guard-BRm3RiOi.js → config-guard-DStz4_V2.js} +6 -6
- package/dist/{config-validation-Cdyg1BZB.js → config-validation-Dxj9LRzr.js} +1 -1
- package/dist/{configure-bhJB2Dti.js → configure-C7zmSgvC.js} +14 -14
- package/dist/{configure-DG1lf0Ld.js → configure-DmzM0S7L.js} +6 -6
- package/dist/{consolidate-DymnvvYm.js → consolidate-CO32_TEx.js} +6 -6
- package/dist/{control-service-D8kKOts5.js → control-service-CUreKVeY.js} +4 -4
- package/dist/control-ui/css/style.css +478 -80
- package/dist/control-ui/index.html +54 -127
- package/dist/control-ui/js/render.js +11 -227
- package/dist/control-ui/js/scheduling.js +85 -224
- package/dist/control-ui/js/subagents.js +78 -394
- package/dist/control-ui/js/symframe-awaiting.js +301 -0
- package/dist/control-ui/js/symframe-pin-store.js +104 -0
- package/dist/control-ui/js/symframe-substrate.js +395 -0
- package/dist/control-ui/js/symframe.js +244 -6
- package/dist/{control-ui-assets-CJQ97d4u.js → control-ui-assets-B8B9z_Ll.js} +1 -1
- package/dist/{cost-cli-DWiVCOCx.js → cost-cli-D-ssjcRF.js} +3 -3
- package/dist/{cron-cli-8RaBr1CM.js → cron-cli-BNBs3zue.js} +3 -3
- package/dist/{cron-cli-fW3wtftG.js → cron-cli-otPeKxmi.js} +7 -7
- package/dist/{daemon-cli-Y6clFgva.js → daemon-cli-DDqeG2nd.js} +2 -2
- package/dist/{daemon-cli-0EiZTQ2A.js → daemon-cli-qDdMg615.js} +11 -11
- package/dist/daemon-cli.js +6 -1
- package/dist/{daemon-runtime-DlQla_dA.js → daemon-runtime-CKn0wmCk.js} +10 -10
- package/dist/{deliver-B04yNX82.js → deliver-BiWlR84Y.js} +4 -4
- package/dist/{deliver-lTZLIQqf.js → deliver-CWMFmMCv.js} +2 -2
- package/dist/{deliver-q23ar_Pm.js → deliver-f3cIWxXT.js} +4 -4
- package/dist/{deps-Bf9dt2UO.js → deps-CdibsPMx.js} +1 -1
- package/dist/{devices-cli-C2gQTsB0.js → devices-cli-BJ3rVWOw.js} +2 -2
- package/dist/{devices-cli-DfiSkZ7k.js → devices-cli-DDPwF2Nx.js} +6 -6
- package/dist/{diagnostics-DlZODdRf.js → diagnostics-CYkqD5lP.js} +5 -5
- package/dist/{directory-cli-Bm5QYEo-.js → directory-cli-giqTe8Yg.js} +3 -3
- package/dist/{dm-policy-shared-CeFt0nch.js → dm-policy-shared-B61_yf6G.js} +1 -1
- package/dist/{dns-cli-CubLq4j9.js → dns-cli-Dssz4RqF.js} +3 -3
- package/dist/{docs-cli-PS8m1er7.js → docs-cli-Ct1STieY.js} +1 -1
- package/dist/{doctor-completion-CfF0J8fs.js → doctor-completion-CL7MyXlo.js} +2 -2
- package/dist/{doctor-completion-ScxFfN93.js → doctor-completion-k0HiL05o.js} +1 -1
- package/dist/{doctor-config-flow-C52W1uUK.js → doctor-config-flow-ljVnQJjo.js} +9 -9
- package/dist/entry.js +1 -1
- package/dist/{exec-approvals-cli-Cl-vWA1q.js → exec-approvals-cli-Cau1vPQI.js} +4 -4
- package/dist/{exec-approvals-cli-BaKWIf56.js → exec-approvals-cli-DsBoQu5H.js} +13 -13
- package/dist/extensionAPI.js +4 -4
- package/dist/{file-lock-BVUYnlQv.js → file-lock-2AecMjCa.js} +8 -8
- package/dist/{fs-safe-BdejYjW8.js → fs-safe-B0Is-oLk.js} +6 -6
- package/dist/{gateway-cli-kq5EWlnF.js → gateway-cli-DG_2YZ8B.js} +98 -98
- package/dist/{gateway-cli-CK-5nguV.js → gateway-cli-DgmGygc6.js} +16 -16
- package/dist/{gateway-rpc-Bzg_TTKP.js → gateway-rpc-Kv0-8W2E.js} +1 -1
- package/dist/{gateway-rpc-D12UaJS5.js → gateway-rpc-gaoD882s.js} +1 -1
- package/dist/{glass-ui-ws-B6p0iPsO.js → glass-ui-ws-Bof7krDJ.js} +67 -67
- package/dist/{glass-ui-ws-CVr0_1gT.js → glass-ui-ws-Dl45d7eU.js} +13 -13
- package/dist/{health-CPU9rQGj.js → health-CMbUI4aN.js} +4 -4
- package/dist/{health-CJb2CYtg.js → health-znS85U-F.js} +1 -1
- package/dist/{hooks-cli-DbgVZaP4.js → hooks-cli-Cb9BzCOY.js} +7 -7
- package/dist/{hooks-cli-13HCu5Xs.js → hooks-cli-Cgjor7F-.js} +59 -59
- package/dist/{image-ops-L70xVnpG.js → image-ops-BzCBIakN.js} +10 -10
- package/dist/index.js +52 -52
- package/dist/{inspect-CGKsaVZ4.js → inspect-DzYUb_Dl.js} +4 -4
- package/dist/{install-safe-path-B2JrFspY.js → install-safe-path-BrpA09f2.js} +11 -11
- package/dist/{installs-D890uIIW.js → installs-bnDlOSq2.js} +10 -10
- package/dist/{internal-DVCddhhN.js → internal-csqU78gW.js} +9 -9
- package/dist/{lifecycle-core-wFwnK_mD.js → lifecycle-core-cSR_xiIO.js} +5 -5
- package/dist/llm-slug-generator.js +4 -4
- package/dist/{local-roots-CgDCgCuM.js → local-roots-2Jb79HZ8.js} +1 -1
- package/dist/{logs-cli-R16VTptK.js → logs-cli-Kr145PO_.js} +7 -7
- package/dist/{logs-cli-CQeK5fn7.js → logs-cli-LiAjkog2.js} +3 -3
- package/dist/{manager-CxFs8Z_F.js → manager-CceVgXHV.js} +1 -1
- package/dist/{manager-B2SWSuad.js → manager-Cv4xI8sP.js} +1 -1
- package/dist/{manager-CHLdCC6u.js → manager-DG6PODgu.js} +15 -15
- package/dist/{manager-BhEbaYDa.js → manager-V4UCf0Av.js} +1 -1
- package/dist/{memory-DFpqcIst.js → memory-A2D5e8dL.js} +2 -2
- package/dist/{memory-DavRjdTi.js → memory-BFnx3v3_.js} +5 -5
- package/dist/{memory-cli-DZnq3S6s.js → memory-cli-1zjVJITN.js} +2 -2
- package/dist/{memory-cli-B-Cp1Sb1.js → memory-cli-CHNghdrm.js} +12 -12
- package/dist/{model-MUMSB_7d.js → model-Cwbcw-km.js} +1 -1
- package/dist/{model-auth-1EAQvYRv.js → model-auth-_C07_3Yr.js} +2 -2
- package/dist/{model-catalog-IWi6-nY9.js → model-catalog-BWurV7gl.js} +3 -3
- package/dist/{model-picker-Cf6UgQEh.js → model-picker-Dpkr5xBW.js} +5 -5
- package/dist/{model-selection-7wdmO-Iw.js → model-selection-CCTzD29o.js} +1 -1
- package/dist/{models-Cht7Mzvs.js → models-BYev6YAG.js} +3 -3
- package/dist/{models-cli-B_motPDX.js → models-cli-BbK8HMKa.js} +55 -55
- package/dist/{models-cli-DXswzgUR.js → models-cli-Fa5r1QYP.js} +9 -9
- package/dist/{models-config-B5Xxy-c-.js → models-config-DlXge3Sd.js} +8 -8
- package/dist/{node-cli-D-gsjRXY.js → node-cli-BPnBosC4.js} +27 -27
- package/dist/{node-cli-VmKhIXuP.js → node-cli-Cv7x1gGu.js} +1 -1
- package/dist/{node-service-BH08wY5j.js → node-service-Cc18m-uk.js} +1 -1
- package/dist/{nodes-cli-BMvxQGCp.js → nodes-cli-CN_m6PO5.js} +10 -10
- package/dist/{nodes-cli-D199d74o.js → nodes-cli-DaHOBbd4.js} +3 -3
- package/dist/{nodes-screen-De9ma6e1.js → nodes-screen-Cp5QP3ET.js} +4 -4
- package/dist/{npm-registry-spec-DTqn-NXZ.js → npm-registry-spec-C-muP97-.js} +9 -9
- package/dist/{onboard-DFJcbABp.js → onboard-B2IcTMv-.js} +15 -15
- package/dist/{onboard-CdRA8BRG.js → onboard-D-m6WTZl.js} +3 -3
- package/dist/{onboard-channels-fadyQGBK.js → onboard-channels-Z-Jkrk5-.js} +1 -1
- package/dist/{onboard-channels-Ca7ZFQ2Y.js → onboard-channels-wfGO5Zlh.js} +4 -4
- package/dist/{onboard-custom-BcRYreNG.js → onboard-custom-DnDrvxSg.js} +3 -3
- package/dist/{onboard-helpers-CQBpac8h.js → onboard-helpers-BKejzolA.js} +8 -8
- package/dist/{onboard-helpers-BcLPSb5N.js → onboard-helpers-Dhr98nj8.js} +1 -1
- package/dist/{onboard-hooks-2SCajRKc.js → onboard-hooks-D9jHwImb.js} +1 -1
- package/dist/{onboard-remote-Bo3tpC9N.js → onboard-remote-DZdMxd1Q.js} +1 -1
- package/dist/{onboard-remote-BWK5Ths4.js → onboard-remote-y3ZmP90U.js} +1 -1
- package/dist/{onboard-skills-BLl8HPJO.js → onboard-skills-2SUv-W7i.js} +1 -1
- package/dist/{onboard-skills-DvacccqZ.js → onboard-skills-BFhHfrt9.js} +3 -3
- package/dist/{onboarding-ojb2rFkA.js → onboarding-BckHLQMV.js} +7 -7
- package/dist/{onboarding-BywueA1d.js → onboarding-DqlPV372.js} +12 -12
- package/dist/{onboarding.finalize-DdxBQpUU.js → onboarding.finalize-Bwjv3jew.js} +31 -31
- package/dist/{onboarding.finalize-DHvlZi9G.js → onboarding.finalize-CbH_ShIW.js} +9 -9
- package/dist/{onboarding.gateway-config-DPBNWNV6.js → onboarding.gateway-config-CiRo9EMt.js} +8 -8
- package/dist/{onboarding.gateway-config-ZK9517uR.js → onboarding.gateway-config-sNSeEykB.js} +3 -3
- package/dist/{openai-model-default-BkuuK-Di.js → openai-model-default-De-UAjwg.js} +2 -2
- package/dist/{pairing-cli-Rsae0KnN.js → pairing-cli-CBMMCNnx.js} +5 -5
- package/dist/{pairing-store-BNhJOnWn.js → pairing-store-Be-ZQK87.js} +1 -1
- package/dist/{pairing-token-Dcy37-4s.js → pairing-token-B703A1U3.js} +7 -7
- package/dist/{paths-DObzwe08.js → paths-BWqg8NZT.js} +1 -1
- package/dist/{pi-auth-json-Db8XJVGL.js → pi-auth-json-D-vdh-nY.js} +6 -6
- package/dist/{pi-embedded-DJE9TMwq.js → pi-embedded-B9rtlNMc.js} +32 -16
- package/dist/{pi-embedded-helpers-D-OFjhdI.js → pi-embedded-helpers-j1JrlsI0.js} +6 -6
- package/dist/{pi-tools.policy-H2t-Xkfc.js → pi-tools.policy-CvAqjEH9.js} +3 -3
- package/dist/{plugin-auto-enable-DJBhDIMq.js → plugin-auto-enable-BXSJTxI7.js} +1 -1
- package/dist/{plugin-registry-tG7NXc3Y.js → plugin-registry-B43UosQh.js} +3 -3
- package/dist/{plugin-registry-Tlmjr-LX.js → plugin-registry-CS4WgHbu.js} +1 -1
- package/dist/plugin-sdk/gateway/protocol/schema/logs-chat.d.ts +1 -1
- package/dist/plugin-sdk/infra/symframe-broadcast.d.ts +18 -6
- package/dist/{plugins-cli-CRKD8aho.js → plugins-cli-BV2wbjfI.js} +54 -54
- package/dist/{plugins-cli-Cm0G_-Y5.js → plugins-cli-BY42hyHP.js} +7 -7
- package/dist/{ports-r7LBic2V.js → ports-Bi3V_3n9.js} +1 -1
- package/dist/{ports-gxLM5ahL.js → ports-CB_Iu83U.js} +2 -2
- package/dist/{program-DEmAlwmD.js → program-P9F1DxBa.js} +12 -12
- package/dist/{program-context-DRCRbDpu.js → program-context-BmXxHUKe.js} +40 -40
- package/dist/{prompt-select-styled-pomsR-zf.js → prompt-select-styled-B2ah467m.js} +7 -7
- package/dist/{prompt-select-styled-B41Tx9aC.js → prompt-select-styled-BlQZX6pK.js} +38 -38
- package/dist/{provider-auth-helpers-rKWs_r7a.js → provider-auth-helpers-Bgb_Bfp9.js} +1 -1
- package/dist/{provider-auth-helpers-CdQwOam7.js → provider-auth-helpers-WLwb6tL4.js} +6 -6
- package/dist/{push-apns-eCM0qmrY.js → push-apns-CBGvXev_.js} +4 -4
- package/dist/{push-apns-CZPUHftn.js → push-apns-DnSCjFu7.js} +1 -1
- package/dist/{pw-ai-BiBvIJzd.js → pw-ai-CP5pn3eU.js} +7 -7
- package/dist/{pw-ai-v__CyAlM.js → pw-ai-DOAsQ5NX.js} +1 -1
- package/dist/{pw-ai-DLsdzdgc.js → pw-ai-DY_6l11g.js} +1 -1
- package/dist/{qmd-manager-C8-M4Pru.js → qmd-manager-Dxyue7B1.js} +19 -19
- package/dist/{qr-cli-1sCVaPcF.js → qr-cli-DHw6muwK.js} +3 -3
- package/dist/{register.agent-BQPvYYdn.js → register.agent-BuEcmVg0.js} +12 -12
- package/dist/{register.agent-N1hoqMFR.js → register.agent-CXdTiqyP.js} +67 -67
- package/dist/{register.configure-BHHZ44xB.js → register.configure-DVcn-gCO.js} +70 -70
- package/dist/{register.configure-BAc3P4Z-.js → register.configure-YDKJ-KQg.js} +14 -14
- package/dist/{register.maintenance-lX0a3Hzl.js → register.maintenance-BiGvpEj-.js} +13 -13
- package/dist/{register.maintenance-DDgy5Iyy.js → register.maintenance-cpspl8D6.js} +67 -67
- package/dist/{register.message-Br-IH_0z.js → register.message-BIuLbESM.js} +7 -7
- package/dist/{register.message-B4lDhHpE.js → register.message-BjcYy5UG.js} +47 -47
- package/dist/{register.onboard-B-GoYJIc.js → register.onboard-C4vIASed.js} +6 -6
- package/dist/{register.onboard-Bv0s2_KV.js → register.onboard-D4RN92s2.js} +25 -25
- package/dist/{register.setup-DQ6KLkAI.js → register.setup-BvoXF0xl.js} +28 -28
- package/dist/{register.setup-4lNdC98i.js → register.setup-D-Jt2e1d.js} +6 -6
- package/dist/{register.status-health-sessions-Cg7bK5K2.js → register.status-health-sessions-BY9hMD1s.js} +8 -8
- package/dist/{register.status-health-sessions-ByGn71_M.js → register.status-health-sessions-DjDvCXBn.js} +41 -41
- package/dist/{register.subclis-FMlcLBX0.js → register.subclis-Cibmeapc.js} +20 -20
- package/dist/{replies-CbXXjn9X.js → replies-B_3j7R_Q.js} +1 -1
- package/dist/{reply-prefix-BFNeXT65.js → reply-prefix-CtZtkTJK.js} +1 -1
- package/dist/{resolve-route-C1IIA6kH.js → resolve-route-Du0VftVs.js} +1 -1
- package/dist/{routes-ivqbutvM.js → routes-BwTUoI5h.js} +10 -10
- package/dist/{rpc-Dk1Az_d8.js → rpc-BnAKPQDB.js} +1 -1
- package/dist/{rpc-JAmDaTYt.js → rpc-CwxSZZOx.js} +1 -1
- package/dist/{run-main-DSyeVDsT.js → run-main-BhEQjKtM.js} +20 -20
- package/dist/{sandbox-BkznAPKO.js → sandbox-CZGTCone.js} +18 -18
- package/dist/{sandbox-cli-Bb9cBtBH.js → sandbox-cli-DEtGT_4y.js} +13 -13
- package/dist/{security-cli-DmgGLP83.js → security-cli-CS-ZT1LE.js} +3 -3
- package/dist/{security-cli-D47LQbpf.js → security-cli-DJd7Fcdy.js} +29 -29
- package/dist/{send-B0jHSNMF.js → send-CxjvucMO.js} +7 -7
- package/dist/{server-context-ChcbJgNo.js → server-context-DXdk410X.js} +5 -5
- package/dist/{server-methods-DGBBt49x.js → server-methods-CWxr5b-w.js} +19 -13
- package/dist/{server-methods-BkHB2MOW.js → server-methods-DfVfzYqq.js} +68 -62
- package/dist/{server-node-events-C186LRm0.js → server-node-events-B0yC6hi1.js} +48 -48
- package/dist/{server-node-events-D-Akk3uq.js → server-node-events-ClDEcUTJ.js} +8 -8
- package/dist/{service-e6MzlLCd.js → service-CRZoXO_n.js} +15 -15
- package/dist/{session-dirs-C9E2G0yZ.js → session-dirs-a00Ad2SO.js} +2 -2
- package/dist/{session-utils-Cs1jlD-q.js → session-utils-CJhcRx3E.js} +14 -14
- package/dist/{sessions-Dxf5Kjig.js → sessions-BCc3THTm.js} +10 -10
- package/dist/{shared-1xPo9ygd.js → shared-C39SiDDJ.js} +1 -1
- package/dist/{shared-COtpr3Ad.js → shared-Dh-O8nRd.js} +3 -3
- package/dist/{skill-commands-DDGGlq68.js → skill-commands-DWvXs3lz.js} +4 -4
- package/dist/{skill-scanner-BCgVcIwi.js → skill-scanner-CIlHPszT.js} +5 -5
- package/dist/{skills-BwDmcZdt.js → skills-CYcBtLGH.js} +4 -4
- package/dist/{skills-cli-B-7TY-vS.js → skills-cli-CD9s3cgm.js} +7 -7
- package/dist/{skills-install-Dwzsjoc8.js → skills-install-BTa9IuQ6.js} +3 -3
- package/dist/{skills-remote-bz71Bstn.js → skills-remote-BcRQTDsZ.js} +3 -3
- package/dist/{skills-status-BKX1PjCc.js → skills-status-DLnCHUZ2.js} +1 -1
- package/dist/{sqlite-Cod7C5ba.js → sqlite-BpogPlQW.js} +5 -5
- package/dist/{status-CFgCSaDq.js → status-BWxLtb3D.js} +23 -23
- package/dist/{status-poPDyC8O.js → status-Doq8T1zj.js} +3 -3
- package/dist/{status-Bahhq7OQ.js → status-K1k4g3Ai.js} +1 -1
- package/dist/{status-D9LC5P_Y.js → status-ojZB_Lrf.js} +5 -5
- package/dist/{status.update-DGJi0OLl.js → status.update-CKfyV6zw.js} +3 -3
- package/dist/{subagent-registry-V2o45tIn.js → subagent-registry-BOt7g9hn.js} +21 -10
- package/dist/{symframe-cli-bxdpivve.js → symframe-cli-CrUtJw_7.js} +31 -7
- package/dist/{symframe-cli-ppdMo15M.js → symframe-cli-D1CtN3pf.js} +37 -13
- package/dist/{symi-root-BQ0IpoW2.js → symi-root-DeCVdZB4.js} +2 -2
- package/dist/{synthesis-B2EyHFXy.js → synthesis-BIQLrbys.js} +6 -6
- package/dist/{synthesis-BlJyO1E_.js → synthesis-Bc2QkGvt.js} +4 -4
- package/dist/{synthesis-CPSq83PP.js → synthesis-VZNnlUTf.js} +45 -45
- package/dist/{synthesis-C2WbvLOI.js → synthesis-yl24Ovw4.js} +4 -4
- package/dist/{system-cli-nPyjUPBH.js → system-cli-CvN-Wq9U.js} +3 -3
- package/dist/{system-cli-BroqLjZ6.js → system-cli-r7WJj0Xh.js} +7 -7
- package/dist/{systemd-CUIM0n5P.js → systemd-CsoVnIbM.js} +5 -5
- package/dist/{systemd-hints-CsrzMCTD.js → systemd-hints-QISwLlFU.js} +6 -6
- package/dist/{systemd-linger-BzYk7A6M.js → systemd-linger-BnhuRdbt.js} +1 -1
- package/dist/{tui-Bp9k5skv.js → tui-BxgdImL_.js} +2 -2
- package/dist/{tui-DzROrE20.js → tui-J7Jxp-FF.js} +7 -7
- package/dist/{tui-cli-BHBF8O-3.js → tui-cli-DR48dU_C.js} +19 -19
- package/dist/{tui-cli-Dv4hBFdc.js → tui-cli-DqvgN5ng.js} +3 -3
- package/dist/{unified-runner-CIQIkbvi.js → unified-runner-BV5TdNFv.js} +32 -16
- package/dist/{unified-runner-CduaBH_0.js → unified-runner-DXjH-prv.js} +117 -106
- package/dist/{update-yYduAjKd.js → update-Cb0Fmxic.js} +3 -3
- package/dist/{update-check-BCL_K7kx.js → update-check-u6Jgr1cz.js} +5 -5
- package/dist/{update-cli-WcLxjBiY.js → update-cli-CKpjWtlv.js} +77 -77
- package/dist/{update-cli-BKnHBe8a.js → update-cli-Dn6QQZLd.js} +14 -14
- package/dist/{update-runner-BLV8SI96.js → update-runner-G2YgEATs.js} +15 -15
- package/dist/{webhooks-cli-D5k-Y2A8.js → webhooks-cli-DjUITimx.js} +4 -4
- package/dist/{with-timeout-DPR4A2dx.js → with-timeout-CLrF-Yr_.js} +1 -1
- package/dist/{workspace-dirs-jKFQf7of.js → workspace-dirs-DCICLTHx.js} +1 -1
- package/dist/{wsl-CglTdtlb.js → wsl-DTi7eX-V.js} +2 -2
- package/extensions/memory-core/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/outlook/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,31 @@
|
|
|
1
|
-
// ── Subagents
|
|
2
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
73
|
-
|
|
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
|
-
// ──
|
|
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
|
-
|
|
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
|
-
// ──
|
|
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
|
-
|
|
369
|
-
|
|
370
|
-
|
|
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
|
|
387
|
-
|
|
388
|
-
|
|
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
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
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
|
|
413
|
-
async function
|
|
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
|
-
|
|
421
|
-
|
|
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
|
|
174
|
+
sessionKey,
|
|
458
175
|
deliver: false,
|
|
459
176
|
lane: "subagent",
|
|
460
|
-
label
|
|
461
|
-
model
|
|
462
|
-
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]
|
|
185
|
+
console.error("[subagents] Failed to spawn:", err);
|
|
470
186
|
alert("Failed to spawn subagent: " + (err.message || "Unknown error"));
|
|
471
187
|
} finally {
|
|
472
|
-
modalSubmit
|
|
473
|
-
|
|
474
|
-
|
|
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
|
-
// ──
|
|
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",
|
|
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
|
|
216
|
+
void spawnFromModal();
|
|
527
217
|
}
|
|
528
218
|
});
|
|
529
219
|
}
|
|
530
220
|
|
|
531
|
-
// Initial
|
|
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
|
-
//
|
|
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
|
-
//
|
|
236
|
+
// Public API — kept stable across the Stage C refactor.
|
|
553
237
|
window.subagentsPanel = {
|
|
554
238
|
refresh: fetchSubagents,
|
|
555
239
|
open: openModal,
|
|
556
|
-
|
|
557
|
-
|
|
240
|
+
getActive: () => [...subagents],
|
|
241
|
+
presets: AGENT_PRESETS,
|
|
558
242
|
};
|
|
559
243
|
})();
|