@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.
- 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-OTJg3QKn.js} +7 -7
- 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 +270 -0
- package/dist/control-ui/index.html +44 -114
- 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.js +238 -2
- 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/{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 +2 -2
- 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-LPPGAsqn.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-Da0QRlM0.js → pi-embedded-B9rtlNMc.js} +25 -9
- 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/index.js +6 -6
- 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-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-DGau1ONT.js → synthesis-Bc2QkGvt.js} +2 -2
- 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 +6 -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,23 +1,34 @@
|
|
|
1
|
-
// ── Scheduling
|
|
2
|
-
//
|
|
1
|
+
// ── Scheduling (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 SCHEDULING sticky panel: list
|
|
5
|
+
// rendering, toggle controls, count badge, Add button. The sticky panel
|
|
6
|
+
// is gone; scheduled jobs now surface in the AWAITING footer
|
|
7
|
+
// (glass-ui/js/symframe-awaiting.js).
|
|
8
|
+
//
|
|
9
|
+
// What survives here:
|
|
10
|
+
// - The schedule create/edit modal (overlay + form + submit handler)
|
|
11
|
+
// - The fetchSchedules poll loop (30s + gateway:connected)
|
|
12
|
+
// - window.schedulingPanel exported API:
|
|
13
|
+
// refresh() — force a fetch
|
|
14
|
+
// open() — open the create modal
|
|
15
|
+
// openForEdit(job) — open the modal pre-filled for a job
|
|
16
|
+
// getActive() — current schedules snapshot
|
|
17
|
+
// toggle(jobId) — enable/disable a job via cron.update
|
|
18
|
+
// - CustomEvent dispatch after each successful fetch so the AWAITING
|
|
19
|
+
// surface re-renders without polling a parallel copy of the same RPC.
|
|
3
20
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
21
|
|
|
5
22
|
"use strict";
|
|
6
23
|
|
|
7
24
|
(function () {
|
|
8
|
-
// ── State
|
|
25
|
+
// ── State ──
|
|
9
26
|
let schedules = [];
|
|
10
27
|
let selectedInterval = null;
|
|
11
28
|
let editingScheduleId = null;
|
|
12
29
|
let _pollInterval = null;
|
|
13
30
|
|
|
14
|
-
// ── DOM
|
|
15
|
-
const list = document.getElementById("schedule-list");
|
|
16
|
-
const emptyState = document.getElementById("schedule-empty");
|
|
17
|
-
const countBadge = document.getElementById("schedule-count");
|
|
18
|
-
const addBtn = document.getElementById("schedule-add-btn");
|
|
19
|
-
|
|
20
|
-
// Modal elements
|
|
31
|
+
// ── Modal DOM refs (separate overlay block in index.html) ──
|
|
21
32
|
const modalOverlay = document.getElementById("schedule-modal-overlay");
|
|
22
33
|
const modalClose = document.getElementById("schedule-modal-close");
|
|
23
34
|
const modalCancel = document.getElementById("schedule-modal-cancel");
|
|
@@ -30,8 +41,7 @@
|
|
|
30
41
|
const intervalUnitSelect = document.getElementById("schedule-interval-unit");
|
|
31
42
|
const timeInput = document.getElementById("schedule-time");
|
|
32
43
|
|
|
33
|
-
// ── Interval
|
|
34
|
-
// Convert UI interval to milliseconds
|
|
44
|
+
// ── Interval helpers ──
|
|
35
45
|
const UNIT_TO_MS = {
|
|
36
46
|
minutes: 60 * 1000,
|
|
37
47
|
hours: 60 * 60 * 1000,
|
|
@@ -39,145 +49,34 @@
|
|
|
39
49
|
weeks: 7 * 24 * 60 * 60 * 1000,
|
|
40
50
|
};
|
|
41
51
|
|
|
42
|
-
// Preset intervals
|
|
43
52
|
const PRESETS = {
|
|
44
53
|
hourly: { value: 1, unit: "hours" },
|
|
45
54
|
daily: { value: 1, unit: "days" },
|
|
46
55
|
weekly: { value: 1, unit: "weeks" },
|
|
47
56
|
};
|
|
48
57
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (!
|
|
52
|
-
return "Custom";
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (schedule.kind === "every") {
|
|
56
|
-
const ms = schedule.everyMs;
|
|
57
|
-
if (ms >= UNIT_TO_MS.weeks) {
|
|
58
|
-
const weeks = Math.round(ms / UNIT_TO_MS.weeks);
|
|
59
|
-
return weeks === 1 ? "WEEK" : `${weeks}W`;
|
|
60
|
-
}
|
|
61
|
-
if (ms >= UNIT_TO_MS.days) {
|
|
62
|
-
const days = Math.round(ms / UNIT_TO_MS.days);
|
|
63
|
-
return days === 1 ? "DAY" : `${days}D`;
|
|
64
|
-
}
|
|
65
|
-
if (ms >= UNIT_TO_MS.hours) {
|
|
66
|
-
const hours = Math.round(ms / UNIT_TO_MS.hours);
|
|
67
|
-
return hours === 1 ? "HOUR" : `${hours}H`;
|
|
68
|
-
}
|
|
69
|
-
const mins = Math.round(ms / UNIT_TO_MS.minutes);
|
|
70
|
-
return mins === 1 ? "MIN" : `${mins}M`;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (schedule.kind === "cron") {
|
|
74
|
-
return "CRON";
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (schedule.kind === "at") {
|
|
78
|
-
return "ONCE";
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return "CUSTOM";
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function formatNextRun(job) {
|
|
85
|
-
const nextRunAtMs = job.state?.nextRunAtMs;
|
|
86
|
-
if (!nextRunAtMs) {
|
|
87
|
-
return "Not scheduled";
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const next = new Date(nextRunAtMs);
|
|
91
|
-
const now = new Date();
|
|
92
|
-
const diffMs = next - now;
|
|
93
|
-
|
|
94
|
-
if (diffMs < 0) {
|
|
95
|
-
return "Overdue";
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const diffMins = Math.floor(diffMs / 60000);
|
|
99
|
-
const diffHours = Math.floor(diffMins / 60);
|
|
100
|
-
const diffDays = Math.floor(diffHours / 24);
|
|
101
|
-
|
|
102
|
-
if (diffMins < 60) {
|
|
103
|
-
return `in ${diffMins}m`;
|
|
104
|
-
}
|
|
105
|
-
if (diffHours < 24) {
|
|
106
|
-
return `in ${diffHours}h`;
|
|
107
|
-
}
|
|
108
|
-
if (diffDays === 1) {
|
|
109
|
-
return "Tomorrow";
|
|
110
|
-
}
|
|
111
|
-
if (diffDays < 7) {
|
|
112
|
-
return `in ${diffDays} days`;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return next.toLocaleDateString("en-US", { month: "short", day: "numeric" });
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// ── Render Schedules ───────────────────────────────────────────────────────
|
|
119
|
-
function render() {
|
|
120
|
-
const activeCount = schedules.filter((s) => s.enabled).length;
|
|
121
|
-
countBadge.textContent = activeCount > 0 ? activeCount : "";
|
|
122
|
-
|
|
123
|
-
// Clear existing items (except empty state)
|
|
124
|
-
const items = list.querySelectorAll(".schedule-item");
|
|
125
|
-
items.forEach((item) => item.remove());
|
|
126
|
-
|
|
127
|
-
if (schedules.length === 0) {
|
|
128
|
-
emptyState.style.display = "";
|
|
58
|
+
// ── Fetch + notify ──
|
|
59
|
+
async function fetchSchedules() {
|
|
60
|
+
if (!window.gateway?.connected) {
|
|
129
61
|
return;
|
|
130
62
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
if (a.enabled !== b.enabled) {
|
|
137
|
-
return b.enabled ? 1 : -1;
|
|
63
|
+
try {
|
|
64
|
+
const result = await window.gateway.rpc("cron.list", { includeDisabled: true });
|
|
65
|
+
if (result?.jobs) {
|
|
66
|
+
schedules = result.jobs;
|
|
67
|
+
window.dispatchEvent(new CustomEvent("symi:schedules-updated", { detail: { schedules } }));
|
|
138
68
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
return aNext - bNext;
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
for (const job of sorted) {
|
|
145
|
-
const item = document.createElement("div");
|
|
146
|
-
item.className = "schedule-item";
|
|
147
|
-
item.setAttribute("data-active", job.enabled ? "true" : "false");
|
|
148
|
-
item.setAttribute("data-schedule-id", job.id || "");
|
|
149
|
-
|
|
150
|
-
item.innerHTML = `
|
|
151
|
-
<div class="schedule-toggle" title="${job.enabled ? "Disable" : "Enable"}"></div>
|
|
152
|
-
<div class="schedule-info">
|
|
153
|
-
<div class="schedule-name">${escHtml(job.name || "Unnamed")}</div>
|
|
154
|
-
<div class="schedule-next">Next: ${formatNextRun(job)}</div>
|
|
155
|
-
</div>
|
|
156
|
-
<div class="schedule-interval">${formatInterval(job)}</div>
|
|
157
|
-
`;
|
|
158
|
-
|
|
159
|
-
// Toggle click
|
|
160
|
-
const toggle = item.querySelector(".schedule-toggle");
|
|
161
|
-
toggle.addEventListener("click", (e) => {
|
|
162
|
-
e.stopPropagation();
|
|
163
|
-
void toggleSchedule(job.id);
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
// Item click to edit
|
|
167
|
-
item.addEventListener("click", () => openModalForEdit(job));
|
|
168
|
-
list.appendChild(item);
|
|
69
|
+
} catch (err) {
|
|
70
|
+
console.debug("[scheduling] Failed to fetch:", err.message);
|
|
169
71
|
}
|
|
170
72
|
}
|
|
171
73
|
|
|
172
|
-
// ── Toggle Schedule ────────────────────────────────────────────────────────
|
|
173
74
|
async function toggleSchedule(jobId) {
|
|
174
75
|
const job = schedules.find((s) => s.id === jobId);
|
|
175
76
|
if (!job) {
|
|
176
77
|
return;
|
|
177
78
|
}
|
|
178
|
-
|
|
179
79
|
const newEnabled = !job.enabled;
|
|
180
|
-
|
|
181
80
|
try {
|
|
182
81
|
if (window.gateway?.connected) {
|
|
183
82
|
await window.gateway.rpc("cron.update", {
|
|
@@ -185,53 +84,36 @@
|
|
|
185
84
|
patch: { enabled: newEnabled },
|
|
186
85
|
});
|
|
187
86
|
}
|
|
188
|
-
|
|
189
87
|
job.enabled = newEnabled;
|
|
190
|
-
|
|
88
|
+
window.dispatchEvent(new CustomEvent("symi:schedules-updated", { detail: { schedules } }));
|
|
191
89
|
} catch (err) {
|
|
192
90
|
console.error("[scheduling] Toggle failed:", err);
|
|
193
91
|
}
|
|
194
92
|
}
|
|
195
93
|
|
|
196
|
-
// ──
|
|
197
|
-
|
|
198
|
-
if (!
|
|
94
|
+
// ── Modal ──
|
|
95
|
+
function openModal() {
|
|
96
|
+
if (!modalOverlay) {
|
|
199
97
|
return;
|
|
200
98
|
}
|
|
201
|
-
|
|
202
|
-
try {
|
|
203
|
-
const result = await window.gateway.rpc("cron.list", {
|
|
204
|
-
includeDisabled: true,
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
if (result?.jobs) {
|
|
208
|
-
schedules = result.jobs;
|
|
209
|
-
render();
|
|
210
|
-
}
|
|
211
|
-
} catch (err) {
|
|
212
|
-
console.debug("[scheduling] Failed to fetch:", err.message);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// ── Modal Controls ─────────────────────────────────────────────────────────
|
|
217
|
-
function openModal() {
|
|
218
99
|
editingScheduleId = null;
|
|
219
100
|
selectedInterval = null;
|
|
220
101
|
resetForm();
|
|
221
|
-
|
|
222
102
|
modalOverlay.classList.add("open");
|
|
223
103
|
modalOverlay.setAttribute("aria-hidden", "false");
|
|
224
|
-
nameInput
|
|
104
|
+
nameInput?.focus();
|
|
225
105
|
document.addEventListener("keydown", onModalKey);
|
|
226
106
|
}
|
|
227
107
|
|
|
228
108
|
function openModalForEdit(job) {
|
|
109
|
+
if (!modalOverlay || !nameInput) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
229
112
|
editingScheduleId = job.id;
|
|
230
|
-
|
|
231
113
|
nameInput.value = job.name || "";
|
|
232
|
-
taskInput
|
|
233
|
-
|
|
234
|
-
|
|
114
|
+
if (taskInput) {
|
|
115
|
+
taskInput.value = job.payload?.message || "";
|
|
116
|
+
}
|
|
235
117
|
const schedule = job.schedule;
|
|
236
118
|
if (schedule?.kind === "every") {
|
|
237
119
|
const ms = schedule.everyMs;
|
|
@@ -243,7 +125,6 @@
|
|
|
243
125
|
selectInterval("weekly");
|
|
244
126
|
} else {
|
|
245
127
|
selectInterval("custom");
|
|
246
|
-
// Determine best unit
|
|
247
128
|
if (ms % UNIT_TO_MS.weeks === 0) {
|
|
248
129
|
intervalValueInput.value = ms / UNIT_TO_MS.weeks;
|
|
249
130
|
intervalUnitSelect.value = "weeks";
|
|
@@ -261,7 +142,6 @@
|
|
|
261
142
|
} else {
|
|
262
143
|
selectInterval("custom");
|
|
263
144
|
}
|
|
264
|
-
|
|
265
145
|
modalOverlay.classList.add("open");
|
|
266
146
|
modalOverlay.setAttribute("aria-hidden", "false");
|
|
267
147
|
nameInput.focus();
|
|
@@ -269,6 +149,9 @@
|
|
|
269
149
|
}
|
|
270
150
|
|
|
271
151
|
function closeModal() {
|
|
152
|
+
if (!modalOverlay) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
272
155
|
modalOverlay.classList.remove("open");
|
|
273
156
|
modalOverlay.setAttribute("aria-hidden", "true");
|
|
274
157
|
document.removeEventListener("keydown", onModalKey);
|
|
@@ -277,13 +160,25 @@
|
|
|
277
160
|
}
|
|
278
161
|
|
|
279
162
|
function resetForm() {
|
|
280
|
-
nameInput
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
163
|
+
if (nameInput) {
|
|
164
|
+
nameInput.value = "";
|
|
165
|
+
}
|
|
166
|
+
if (taskInput) {
|
|
167
|
+
taskInput.value = "";
|
|
168
|
+
}
|
|
169
|
+
if (intervalValueInput) {
|
|
170
|
+
intervalValueInput.value = "1";
|
|
171
|
+
}
|
|
172
|
+
if (intervalUnitSelect) {
|
|
173
|
+
intervalUnitSelect.value = "days";
|
|
174
|
+
}
|
|
175
|
+
if (timeInput) {
|
|
176
|
+
timeInput.value = "09:00";
|
|
177
|
+
}
|
|
285
178
|
selectedInterval = null;
|
|
286
|
-
customOptions
|
|
179
|
+
if (customOptions) {
|
|
180
|
+
customOptions.style.display = "none";
|
|
181
|
+
}
|
|
287
182
|
intervalBtns.forEach((btn) => btn.classList.remove("selected"));
|
|
288
183
|
}
|
|
289
184
|
|
|
@@ -293,68 +188,52 @@
|
|
|
293
188
|
}
|
|
294
189
|
}
|
|
295
190
|
|
|
296
|
-
// ── Interval Selection ─────────────────────────────────────────────────────
|
|
297
191
|
function selectInterval(interval) {
|
|
298
192
|
selectedInterval = interval;
|
|
299
|
-
|
|
300
193
|
intervalBtns.forEach((btn) => {
|
|
301
194
|
const btnInterval = btn.getAttribute("data-interval");
|
|
302
195
|
btn.classList.toggle("selected", btnInterval === interval);
|
|
303
196
|
});
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
customOptions.style.display = "block";
|
|
307
|
-
} else {
|
|
308
|
-
customOptions.style.display = "none";
|
|
197
|
+
if (customOptions) {
|
|
198
|
+
customOptions.style.display = interval === "custom" ? "block" : "none";
|
|
309
199
|
}
|
|
310
200
|
}
|
|
311
201
|
|
|
312
|
-
// ── Save
|
|
202
|
+
// ── Save ──
|
|
313
203
|
async function saveSchedule() {
|
|
204
|
+
if (!nameInput || !taskInput) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
314
207
|
const name = nameInput.value.trim();
|
|
315
208
|
const task = taskInput.value.trim();
|
|
316
|
-
|
|
317
209
|
if (!name) {
|
|
318
210
|
nameInput.focus();
|
|
319
211
|
return;
|
|
320
212
|
}
|
|
321
|
-
|
|
322
213
|
if (!task) {
|
|
323
214
|
taskInput.focus();
|
|
324
215
|
return;
|
|
325
216
|
}
|
|
326
|
-
|
|
327
217
|
if (!selectedInterval) {
|
|
328
|
-
// Default to daily if none selected
|
|
329
218
|
selectInterval("daily");
|
|
330
219
|
}
|
|
331
|
-
|
|
332
|
-
// Calculate everyMs based on interval selection
|
|
333
220
|
let everyMs;
|
|
334
221
|
if (selectedInterval === "custom") {
|
|
335
|
-
const value = parseInt(intervalValueInput
|
|
336
|
-
const unit = intervalUnitSelect
|
|
222
|
+
const value = parseInt(intervalValueInput?.value) || 1;
|
|
223
|
+
const unit = intervalUnitSelect?.value || "days";
|
|
337
224
|
everyMs = value * UNIT_TO_MS[unit];
|
|
338
225
|
} else {
|
|
339
226
|
const preset = PRESETS[selectedInterval];
|
|
340
227
|
everyMs = preset.value * UNIT_TO_MS[preset.unit];
|
|
341
228
|
}
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
<svg class="spin" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
346
|
-
<circle cx="12" cy="12" r="10" stroke-dasharray="60" stroke-dashoffset="20"/>
|
|
347
|
-
</svg>
|
|
348
|
-
Saving...
|
|
349
|
-
`;
|
|
350
|
-
|
|
229
|
+
if (modalSubmit) {
|
|
230
|
+
modalSubmit.disabled = true;
|
|
231
|
+
}
|
|
351
232
|
try {
|
|
352
233
|
if (!window.gateway?.connected) {
|
|
353
234
|
throw new Error("Gateway not connected");
|
|
354
235
|
}
|
|
355
|
-
|
|
356
236
|
if (editingScheduleId) {
|
|
357
|
-
// Update existing job
|
|
358
237
|
await window.gateway.rpc("cron.update", {
|
|
359
238
|
id: editingScheduleId,
|
|
360
239
|
patch: {
|
|
@@ -364,7 +243,6 @@
|
|
|
364
243
|
},
|
|
365
244
|
});
|
|
366
245
|
} else {
|
|
367
|
-
// Create new job
|
|
368
246
|
await window.gateway.rpc("cron.add", {
|
|
369
247
|
name,
|
|
370
248
|
enabled: true,
|
|
@@ -374,32 +252,20 @@
|
|
|
374
252
|
payload: { kind: "agentTurn", message: task },
|
|
375
253
|
});
|
|
376
254
|
}
|
|
377
|
-
|
|
378
255
|
closeModal();
|
|
379
256
|
setTimeout(fetchSchedules, 300);
|
|
380
257
|
} catch (err) {
|
|
381
258
|
console.error("[scheduling] Save failed:", err);
|
|
382
259
|
alert("Failed to save schedule: " + (err.message || "Unknown error"));
|
|
383
260
|
} finally {
|
|
384
|
-
modalSubmit
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
<circle cx="12" cy="12" r="10"/>
|
|
388
|
-
<polyline points="12 6 12 12 16 14"/>
|
|
389
|
-
</svg>
|
|
390
|
-
Schedule
|
|
391
|
-
`;
|
|
261
|
+
if (modalSubmit) {
|
|
262
|
+
modalSubmit.disabled = false;
|
|
263
|
+
}
|
|
392
264
|
}
|
|
393
265
|
}
|
|
394
266
|
|
|
395
|
-
// ──
|
|
267
|
+
// ── Init ──
|
|
396
268
|
function init() {
|
|
397
|
-
// Add button
|
|
398
|
-
if (addBtn) {
|
|
399
|
-
addBtn.addEventListener("click", openModal);
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
// Modal controls
|
|
403
269
|
if (modalClose) {
|
|
404
270
|
modalClose.addEventListener("click", closeModal);
|
|
405
271
|
}
|
|
@@ -416,16 +282,12 @@
|
|
|
416
282
|
}
|
|
417
283
|
});
|
|
418
284
|
}
|
|
419
|
-
|
|
420
|
-
// Interval buttons
|
|
421
285
|
intervalBtns.forEach((btn) => {
|
|
422
286
|
btn.addEventListener("click", () => {
|
|
423
287
|
const interval = btn.getAttribute("data-interval");
|
|
424
288
|
selectInterval(interval);
|
|
425
289
|
});
|
|
426
290
|
});
|
|
427
|
-
|
|
428
|
-
// Submit on Enter in name field (with Ctrl/Cmd)
|
|
429
291
|
if (nameInput) {
|
|
430
292
|
nameInput.addEventListener("keydown", (e) => {
|
|
431
293
|
if ((e.ctrlKey || e.metaKey) && e.key === "Enter") {
|
|
@@ -434,27 +296,26 @@
|
|
|
434
296
|
});
|
|
435
297
|
}
|
|
436
298
|
|
|
437
|
-
// Initial fetch
|
|
438
299
|
void fetchSchedules();
|
|
439
|
-
|
|
440
|
-
// Poll every 30 seconds
|
|
441
300
|
_pollInterval = setInterval(fetchSchedules, 30000);
|
|
442
|
-
|
|
443
|
-
// Also fetch on gateway connect
|
|
444
301
|
window.addEventListener("gateway:connected", fetchSchedules);
|
|
445
302
|
window.addEventListener("gateway:hello", fetchSchedules);
|
|
446
303
|
}
|
|
447
304
|
|
|
448
|
-
// Start when DOM is ready
|
|
449
305
|
if (document.readyState === "loading") {
|
|
450
306
|
document.addEventListener("DOMContentLoaded", init);
|
|
451
307
|
} else {
|
|
452
308
|
init();
|
|
453
309
|
}
|
|
454
310
|
|
|
455
|
-
//
|
|
311
|
+
// Public API — extended in Stage C with getActive() + openForEdit() +
|
|
312
|
+
// toggle() so the AWAITING surface can read state, edit jobs, and
|
|
313
|
+
// flip enabled flags without re-implementing the cron RPC layer.
|
|
456
314
|
window.schedulingPanel = {
|
|
457
315
|
refresh: fetchSchedules,
|
|
458
316
|
open: openModal,
|
|
317
|
+
openForEdit: openModalForEdit,
|
|
318
|
+
getActive: () => [...schedules],
|
|
319
|
+
toggle: toggleSchedule,
|
|
459
320
|
};
|
|
460
321
|
})();
|