agim-cli 1.2.128 → 1.2.129
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/CHANGELOG.md +52 -0
- package/dist/web/public/assets/{a2a-CbxNgf9H.js → a2a-Bp_OpTfW.js} +2 -2
- package/dist/web/public/assets/{a2a-CbxNgf9H.js.map → a2a-Bp_OpTfW.js.map} +1 -1
- package/dist/web/public/assets/{activity-C6r508cN.js → activity-B5erGuWa.js} +2 -2
- package/dist/web/public/assets/{activity-C6r508cN.js.map → activity-B5erGuWa.js.map} +1 -1
- package/dist/web/public/assets/{admins-C0BJw6X9.js → admins-D3j7wkvL.js} +3 -3
- package/dist/web/public/assets/{admins-C0BJw6X9.js.map → admins-D3j7wkvL.js.map} +1 -1
- package/dist/web/public/assets/{agents-DOW1_NGT.js → agents-Cb3Vb2-8.js} +3 -3
- package/dist/web/public/assets/{agents-DOW1_NGT.js.map → agents-Cb3Vb2-8.js.map} +1 -1
- package/dist/web/public/assets/{approvals-CyPhYcGG.js → approvals-BZULwrl5.js} +3 -3
- package/dist/web/public/assets/{approvals-CyPhYcGG.js.map → approvals-BZULwrl5.js.map} +1 -1
- package/dist/web/public/assets/arrow-down-OdSfpgG4.js +7 -0
- package/dist/web/public/assets/arrow-down-OdSfpgG4.js.map +1 -0
- package/dist/web/public/assets/arrow-up-DtrvOH7Z.js +7 -0
- package/dist/web/public/assets/arrow-up-DtrvOH7Z.js.map +1 -0
- package/dist/web/public/assets/{asks-B6L3PSml.js → asks-BaVT-eFe.js} +3 -3
- package/dist/web/public/assets/{asks-B6L3PSml.js.map → asks-BaVT-eFe.js.map} +1 -1
- package/dist/web/public/assets/audit-CSk2rv6z.js +2 -0
- package/dist/web/public/assets/{audit-CCGCdw6P.js.map → audit-CSk2rv6z.js.map} +1 -1
- package/dist/web/public/assets/{bell-OiL3Thk2.js → bell-DifbuUaI.js} +2 -2
- package/dist/web/public/assets/{bell-OiL3Thk2.js.map → bell-DifbuUaI.js.map} +1 -1
- package/dist/web/public/assets/{bgjobs-vhVtnLSx.js → bgjobs-D3wsuZBR.js} +3 -3
- package/dist/web/public/assets/{bgjobs-vhVtnLSx.js.map → bgjobs-D3wsuZBR.js.map} +1 -1
- package/dist/web/public/assets/{brain-n56pZ1TQ.js → brain-BH9ObIfA.js} +2 -2
- package/dist/web/public/assets/{brain-n56pZ1TQ.js.map → brain-BH9ObIfA.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-BscVfAjp.js → briefcase-CZqK5oy3.js} +2 -2
- package/dist/web/public/assets/{briefcase-BscVfAjp.js.map → briefcase-CZqK5oy3.js.map} +1 -1
- package/dist/web/public/assets/{browser-ponyfill-BOcGq8h9.js → browser-ponyfill-BUutOaRz.js} +2 -2
- package/dist/web/public/assets/{browser-ponyfill-BOcGq8h9.js.map → browser-ponyfill-BUutOaRz.js.map} +1 -1
- package/dist/web/public/assets/chat-gOU1pe0E.js +7 -0
- package/dist/web/public/assets/chat-gOU1pe0E.js.map +1 -0
- package/dist/web/public/assets/chevron-left-BtuaBNRZ.js +7 -0
- package/dist/web/public/assets/chevron-left-BtuaBNRZ.js.map +1 -0
- package/dist/web/public/assets/{chevron-right-trO6yoBr.js → chevron-right-uDVVnuGu.js} +2 -2
- package/dist/web/public/assets/{chevron-right-trO6yoBr.js.map → chevron-right-uDVVnuGu.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-B_d7dBl5.js → circle-check-VgYKnBhy.js} +2 -2
- package/dist/web/public/assets/{circle-check-B_d7dBl5.js.map → circle-check-VgYKnBhy.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-D6TvCoDM.js → circle-check-big-7idAFtyL.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-D6TvCoDM.js.map → circle-check-big-7idAFtyL.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-OcRzGLRb.js → circle-x-8dhkvHlT.js} +2 -2
- package/dist/web/public/assets/{circle-x-OcRzGLRb.js.map → circle-x-8dhkvHlT.js.map} +1 -1
- package/dist/web/public/assets/confirm-dialog-_BtUs6oW.js +2 -0
- package/dist/web/public/assets/{confirm-dialog-DD1ZW1XE.js.map → confirm-dialog-_BtUs6oW.js.map} +1 -1
- package/dist/web/public/assets/copy-Ba1min4z.js +7 -0
- package/dist/web/public/assets/copy-Ba1min4z.js.map +1 -0
- package/dist/web/public/assets/{data-table-bhqK389v.js → data-table-BVcXWtPw.js} +3 -3
- package/dist/web/public/assets/{data-table-bhqK389v.js.map → data-table-BVcXWtPw.js.map} +1 -1
- package/dist/web/public/assets/dialog-BVYFRXlI.js +6 -0
- package/dist/web/public/assets/{dialog-D5BsJN2q.js.map → dialog-BVYFRXlI.js.map} +1 -1
- package/dist/web/public/assets/{download-CcO4RAuC.js → download-DYc5g_1W.js} +3 -3
- package/dist/web/public/assets/{download-CcO4RAuC.js.map → download-DYc5g_1W.js.map} +1 -1
- package/dist/web/public/assets/{email-Dy3UoyzF.js → email-6vlGBJXY.js} +3 -3
- package/dist/web/public/assets/{email-Dy3UoyzF.js.map → email-6vlGBJXY.js.map} +1 -1
- package/dist/web/public/assets/{empty-state-CwUKG8xX.js → empty-state-WHzNYVaT.js} +2 -2
- package/dist/web/public/assets/{empty-state-CwUKG8xX.js.map → empty-state-WHzNYVaT.js.map} +1 -1
- package/dist/web/public/assets/{external-link-wf5VhNXd.js → external-link-CfQZDer8.js} +2 -2
- package/dist/web/public/assets/{external-link-wf5VhNXd.js.map → external-link-CfQZDer8.js.map} +1 -1
- package/dist/web/public/assets/{eye-8lKlwbZE.js → eye-PzqPB6N6.js} +3 -3
- package/dist/web/public/assets/{eye-8lKlwbZE.js.map → eye-PzqPB6N6.js.map} +1 -1
- package/dist/web/public/assets/facts-NmBeyMpC.js +2 -0
- package/dist/web/public/assets/{facts-Cfu6Lg3H.js.map → facts-NmBeyMpC.js.map} +1 -1
- package/dist/web/public/assets/{goals-BQkhal_h.js → goals-BfMwQtYm.js} +4 -4
- package/dist/web/public/assets/{goals-BQkhal_h.js.map → goals-BfMwQtYm.js.map} +1 -1
- package/dist/web/public/assets/health-D46iQ6Hj.js +2 -0
- package/dist/web/public/assets/{health-BObMAngj.js.map → health-D46iQ6Hj.js.map} +1 -1
- package/dist/web/public/assets/{heart-pulse-DI33Rxyr.js → heart-pulse-BHz53Ggd.js} +2 -2
- package/dist/web/public/assets/{heart-pulse-DI33Rxyr.js.map → heart-pulse-BHz53Ggd.js.map} +1 -1
- package/dist/web/public/assets/{heartbeat-Bc4SZawQ.js → heartbeat-DBpc9rKL.js} +3 -3
- package/dist/web/public/assets/{heartbeat-Bc4SZawQ.js.map → heartbeat-DBpc9rKL.js.map} +1 -1
- package/dist/web/public/assets/{hot-BXYotT26.js → hot-D_-tARKX.js} +4 -9
- package/dist/web/public/assets/hot-D_-tARKX.js.map +1 -0
- package/dist/web/public/assets/{index-CGaI-i4K.js → index-DXI13nSQ.js} +29 -29
- package/dist/web/public/assets/index-DXI13nSQ.js.map +1 -0
- package/dist/web/public/assets/index-f1K5Q2Yz.css +1 -0
- package/dist/web/public/assets/{installed-DswmDcea.js → installed-BtOgT0Ea.js} +2 -2
- package/dist/web/public/assets/{installed-DswmDcea.js.map → installed-BtOgT0Ea.js.map} +1 -1
- package/dist/web/public/assets/jobs-DUoPbupO.js +2 -0
- package/dist/web/public/assets/{jobs-DWBDqKx-.js.map → jobs-DUoPbupO.js.map} +1 -1
- package/dist/web/public/assets/layout-BpS7td-S.js +2 -0
- package/dist/web/public/assets/layout-BpS7td-S.js.map +1 -0
- package/dist/web/public/assets/layout-C1EVvCs8.js +2 -0
- package/dist/web/public/assets/{layout-D7gNMUDZ.js.map → layout-C1EVvCs8.js.map} +1 -1
- package/dist/web/public/assets/layout-C3e8vPrG.js +2 -0
- package/dist/web/public/assets/{layout-DJKxW33x.js.map → layout-C3e8vPrG.js.map} +1 -1
- package/dist/web/public/assets/layout-DkoRqhBs.js +2 -0
- package/dist/web/public/assets/{layout-B5rK_h6Q.js.map → layout-DkoRqhBs.js.map} +1 -1
- package/dist/web/public/assets/layout-wuoOyazR.js +2 -0
- package/dist/web/public/assets/{layout-ByUY6XZQ.js.map → layout-wuoOyazR.js.map} +1 -1
- package/dist/web/public/assets/{llm-CPOd98Hy.js → llm-iuvigJxr.js} +2 -2
- package/dist/web/public/assets/{llm-CPOd98Hy.js.map → llm-iuvigJxr.js.map} +1 -1
- package/dist/web/public/assets/{loader-circle-BBIfyATA.js → loader-circle-BS5FFFg-.js} +2 -2
- package/dist/web/public/assets/{loader-circle-BBIfyATA.js.map → loader-circle-BS5FFFg-.js.map} +1 -1
- package/dist/web/public/assets/{map-pin-Bg7JuU7F.js → map-pin-CRS6YW4i.js} +2 -2
- package/dist/web/public/assets/{map-pin-Bg7JuU7F.js.map → map-pin-CRS6YW4i.js.map} +1 -1
- package/dist/web/public/assets/{mcp-DGxGN2iX.js → mcp-PWEuZOJ_.js} +3 -3
- package/dist/web/public/assets/{mcp-DGxGN2iX.js.map → mcp-PWEuZOJ_.js.map} +1 -1
- package/dist/web/public/assets/{memos-LpUpTmYL.js → memos-C6i1hbv9.js} +3 -3
- package/dist/web/public/assets/{memos-LpUpTmYL.js.map → memos-C6i1hbv9.js.map} +1 -1
- package/dist/web/public/assets/messengers-CZ3eL15d.js +2 -0
- package/dist/web/public/assets/messengers-CZ3eL15d.js.map +1 -0
- package/dist/web/public/assets/mobile-_rEEG_kX.js +7 -0
- package/dist/web/public/assets/mobile-_rEEG_kX.js.map +1 -0
- package/dist/web/public/assets/{native-agent-CPkYGY3I.js → native-agent-B-Id8sOl.js} +4 -4
- package/dist/web/public/assets/{native-agent-CPkYGY3I.js.map → native-agent-B-Id8sOl.js.map} +1 -1
- package/dist/web/public/assets/{network-DHrX3RcZ.js → network-MVE8s4TA.js} +2 -2
- package/dist/web/public/assets/{network-DHrX3RcZ.js.map → network-MVE8s4TA.js.map} +1 -1
- package/dist/web/public/assets/{outbox-T3NnYmK0.js → outbox-BRpgAP1d.js} +3 -3
- package/dist/web/public/assets/{outbox-T3NnYmK0.js.map → outbox-BRpgAP1d.js.map} +1 -1
- package/dist/web/public/assets/pagination-dm3r6K_2.js +12 -0
- package/dist/web/public/assets/pagination-dm3r6K_2.js.map +1 -0
- package/dist/web/public/assets/persona-Oq3C-gEw.js +2 -0
- package/dist/web/public/assets/{persona-CHz80XDk.js.map → persona-Oq3C-gEw.js.map} +1 -1
- package/dist/web/public/assets/{play-BNtSkb5l.js → play-COQw7BqX.js} +2 -2
- package/dist/web/public/assets/{play-BNtSkb5l.js.map → play-COQw7BqX.js.map} +1 -1
- package/dist/web/public/assets/{plus-CYsjCf6w.js → plus-CdOyGoU1.js} +2 -2
- package/dist/web/public/assets/{plus-CYsjCf6w.js.map → plus-CdOyGoU1.js.map} +1 -1
- package/dist/web/public/assets/policy-docXezae.js +2 -0
- package/dist/web/public/assets/{policy-CtKRzual.js.map → policy-docXezae.js.map} +1 -1
- package/dist/web/public/assets/qr-code-8putJTrW.js +7 -0
- package/dist/web/public/assets/qr-code-8putJTrW.js.map +1 -0
- package/dist/web/public/assets/{react-C9F3QeMB.js → react-Cb2sDjhD.js} +2 -2
- package/dist/web/public/assets/{react-C9F3QeMB.js.map → react-Cb2sDjhD.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw-DpPWcwTg.js → refresh-ccw-BPKXoMZa.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw-DpPWcwTg.js.map → refresh-ccw-BPKXoMZa.js.map} +1 -1
- package/dist/web/public/assets/{reminders-R14lWHEJ.js → reminders-CP2qtNSr.js} +3 -3
- package/dist/web/public/assets/{reminders-R14lWHEJ.js.map → reminders-CP2qtNSr.js.map} +1 -1
- package/dist/web/public/assets/{save-beGooRNy.js → save-BXCmgeEj.js} +2 -2
- package/dist/web/public/assets/{save-beGooRNy.js.map → save-BXCmgeEj.js.map} +1 -1
- package/dist/web/public/assets/{schedules-fxKnDnxp.js → schedules-DVaY38v1.js} +3 -3
- package/dist/web/public/assets/{schedules-fxKnDnxp.js.map → schedules-DVaY38v1.js.map} +1 -1
- package/dist/web/public/assets/{search-DzgimpPy.js → search-B-wDhzjs.js} +3 -3
- package/dist/web/public/assets/{search-DzgimpPy.js.map → search-B-wDhzjs.js.map} +1 -1
- package/dist/web/public/assets/{search-BzOAg0Rb.js → search-DzexDAbr.js} +2 -2
- package/dist/web/public/assets/{search-BzOAg0Rb.js.map → search-DzexDAbr.js.map} +1 -1
- package/dist/web/public/assets/security-FHN-b43T.js +2 -0
- package/dist/web/public/assets/{security-Dw1mh68G.js.map → security-FHN-b43T.js.map} +1 -1
- package/dist/web/public/assets/{service-CB55xtmh.js → service-DXGUZTCp.js} +3 -3
- package/dist/web/public/assets/{service-CB55xtmh.js.map → service-DXGUZTCp.js.map} +1 -1
- package/dist/web/public/assets/{shield-alert-C2IO43co.js → shield-alert-BM0-khVy.js} +2 -2
- package/dist/web/public/assets/{shield-alert-C2IO43co.js.map → shield-alert-BM0-khVy.js.map} +1 -1
- package/dist/web/public/assets/{status-badge-wL5IXJx_.js → status-badge-DeESb2dc.js} +2 -2
- package/dist/web/public/assets/{status-badge-wL5IXJx_.js.map → status-badge-DeESb2dc.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-CbLAkygG.js → subtasks-DOwo6FnZ.js} +3 -3
- package/dist/web/public/assets/{subtasks-CbLAkygG.js.map → subtasks-DOwo6FnZ.js.map} +1 -1
- package/dist/web/public/assets/table-oUi0mGOn.js +2 -0
- package/dist/web/public/assets/{table-9FRavyyI.js.map → table-oUi0mGOn.js.map} +1 -1
- package/dist/web/public/assets/{topn-BE7RU5cV.js → topn-D1LQXoLo.js} +3 -3
- package/dist/web/public/assets/{topn-BE7RU5cV.js.map → topn-D1LQXoLo.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-DL2FAuYX.js → trash-2-CTkSvnZX.js} +2 -2
- package/dist/web/public/assets/{trash-2-DL2FAuYX.js.map → trash-2-CTkSvnZX.js.map} +1 -1
- package/dist/web/public/assets/use-background-tasks-BkUIDOxX.js +2 -0
- package/dist/web/public/assets/{use-background-tasks-XHuIYwrT.js.map → use-background-tasks-BkUIDOxX.js.map} +1 -1
- package/dist/web/public/assets/{use-event-stream-BGeFcayX.js → use-event-stream-DgGpGKop.js} +2 -2
- package/dist/web/public/assets/{use-event-stream-BGeFcayX.js.map → use-event-stream-DgGpGKop.js.map} +1 -1
- package/dist/web/public/assets/use-llm-admin-BrJMMEz5.js +2 -0
- package/dist/web/public/assets/{use-llm-admin-Dm8PcjN-.js.map → use-llm-admin-BrJMMEz5.js.map} +1 -1
- package/dist/web/public/assets/use-memory-CbTYEBTc.js +2 -0
- package/dist/web/public/assets/{use-memory-C3GgMqiJ.js.map → use-memory-CbTYEBTc.js.map} +1 -1
- package/dist/web/public/assets/{use-observability-BQa4b0Uk.js → use-observability-Bum0mmDO.js} +2 -2
- package/dist/web/public/assets/{use-observability-BQa4b0Uk.js.map → use-observability-Bum0mmDO.js.map} +1 -1
- package/dist/web/public/assets/use-settings-DJlVLnjo.js +2 -0
- package/dist/web/public/assets/{use-settings-CrkXdLrr.js.map → use-settings-DJlVLnjo.js.map} +1 -1
- package/dist/web/public/assets/use-workspace-BJZUfkqw.js +2 -0
- package/dist/web/public/assets/{use-workspace-Csq4sxlY.js.map → use-workspace-BJZUfkqw.js.map} +1 -1
- package/dist/web/public/assets/useQuery-CEwGD94N.js +2 -0
- package/dist/web/public/assets/{useQuery-ByZlZXlw.js.map → useQuery-CEwGD94N.js.map} +1 -1
- package/dist/web/public/assets/vector-BqffHZmp.js +2 -0
- package/dist/web/public/assets/{vector-BmpvJTWt.js.map → vector-BqffHZmp.js.map} +1 -1
- package/dist/web/public/assets/{viewer-BOSX-lUS.js → viewer-CKTTV-Wt.js} +4 -4
- package/dist/web/public/assets/{viewer-BOSX-lUS.js.map → viewer-CKTTV-Wt.js.map} +1 -1
- package/dist/web/public/assets/{workspace-DTbEdEyD.js → workspace-DQphgYwy.js} +3 -3
- package/dist/web/public/assets/{workspace-DTbEdEyD.js.map → workspace-DQphgYwy.js.map} +1 -1
- package/dist/web/public/assets/workspaces-BOA3TuDS.js +7 -0
- package/dist/web/public/assets/{workspaces-BIZGVK8F.js.map → workspaces-BOA3TuDS.js.map} +1 -1
- package/dist/web/public/assets/{x-BLllJ8d_.js → x-OHUicFfn.js} +2 -2
- package/dist/web/public/assets/{x-BLllJ8d_.js.map → x-OHUicFfn.js.map} +1 -1
- package/dist/web/public/index.html +3 -3
- package/dist/web/public/m/login.html +124 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +103 -1
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
- package/dist/web/public/assets/arrow-up-CZr2LH5e.js +0 -12
- package/dist/web/public/assets/arrow-up-CZr2LH5e.js.map +0 -1
- package/dist/web/public/assets/audit-CCGCdw6P.js +0 -2
- package/dist/web/public/assets/confirm-dialog-DD1ZW1XE.js +0 -2
- package/dist/web/public/assets/dialog-D5BsJN2q.js +0 -6
- package/dist/web/public/assets/facts-Cfu6Lg3H.js +0 -2
- package/dist/web/public/assets/health-BObMAngj.js +0 -2
- package/dist/web/public/assets/hot-BXYotT26.js.map +0 -1
- package/dist/web/public/assets/index-CGaI-i4K.js.map +0 -1
- package/dist/web/public/assets/index-De8LfCtL.css +0 -1
- package/dist/web/public/assets/jobs-DWBDqKx-.js +0 -2
- package/dist/web/public/assets/layout-B5rK_h6Q.js +0 -2
- package/dist/web/public/assets/layout-ByUY6XZQ.js +0 -2
- package/dist/web/public/assets/layout-CX3nXpWb.js +0 -2
- package/dist/web/public/assets/layout-CX3nXpWb.js.map +0 -1
- package/dist/web/public/assets/layout-D7gNMUDZ.js +0 -2
- package/dist/web/public/assets/layout-DJKxW33x.js +0 -2
- package/dist/web/public/assets/messengers-CWMsJz1e.js +0 -7
- package/dist/web/public/assets/messengers-CWMsJz1e.js.map +0 -1
- package/dist/web/public/assets/pagination-ANxQzaRV.js +0 -17
- package/dist/web/public/assets/pagination-ANxQzaRV.js.map +0 -1
- package/dist/web/public/assets/persona-CHz80XDk.js +0 -2
- package/dist/web/public/assets/policy-CtKRzual.js +0 -2
- package/dist/web/public/assets/security-Dw1mh68G.js +0 -2
- package/dist/web/public/assets/table-9FRavyyI.js +0 -2
- package/dist/web/public/assets/use-background-tasks-XHuIYwrT.js +0 -2
- package/dist/web/public/assets/use-llm-admin-Dm8PcjN-.js +0 -2
- package/dist/web/public/assets/use-memory-C3GgMqiJ.js +0 -2
- package/dist/web/public/assets/use-settings-CrkXdLrr.js +0 -2
- package/dist/web/public/assets/use-workspace-Csq4sxlY.js +0 -2
- package/dist/web/public/assets/useQuery-ByZlZXlw.js +0 -2
- package/dist/web/public/assets/vector-BmpvJTWt.js +0 -2
- package/dist/web/public/assets/workspaces-BIZGVK8F.js +0 -7
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{--ag-bg: 220 14% 96%;--ag-surface: 0 0% 100%;--ag-surface-2: 220 14% 94%;--ag-surface-hover:220 14% 92%;--ag-border: 220 13% 90%;--ag-border-strong: 220 10% 80%;--ag-text: 220 13% 13%;--ag-text-dim: 220 6% 38%;--ag-text-muted: 220 6% 58%;--ag-accent: 246 80% 60%;--ag-accent-fg: 0 0% 100%;--ag-accent-hover: 246 80% 52%;--ag-accent-bg: 246 100% 96%;--ag-success: 158 75% 39%;--ag-success-bg:158 75% 95%;--ag-warning: 38 95% 50%;--ag-warning-bg: 38 95% 95%;--ag-danger: 0 78% 56%;--ag-danger-bg: 0 78% 96%;--ag-info: 217 91% 60%;--ag-info-bg: 217 91% 96%;--ag-shadow-sm: 0 1px 2px hsl(220 13% 13% / .05);--ag-shadow-md: 0 2px 8px hsl(220 13% 13% / .08);--ag-shadow-lg: 0 8px 24px hsl(220 13% 13% / .12)}:root[data-theme=dark]{--ag-bg: 220 10% 7%;--ag-surface: 220 12% 11%;--ag-surface-2: 220 12% 14%;--ag-surface-hover:220 12% 16%;--ag-border: 220 10% 20%;--ag-border-strong: 220 10% 28%;--ag-text: 220 14% 91%;--ag-text-dim: 220 8% 68%;--ag-text-muted: 220 8% 50%;--ag-accent: 246 90% 72%;--ag-accent-fg: 220 30% 5%;--ag-accent-hover: 246 90% 80%;--ag-accent-bg: 246 30% 22%;--ag-success: 158 70% 50%;--ag-success-bg:158 60% 20%;--ag-warning: 38 90% 60%;--ag-warning-bg: 38 60% 20%;--ag-danger: 0 85% 67%;--ag-danger-bg: 0 60% 22%;--ag-info: 217 90% 70%;--ag-info-bg: 217 60% 25%;--ag-shadow-sm: 0 1px 2px hsl(0 0% 0% / .4);--ag-shadow-md: 0 2px 8px hsl(0 0% 0% / .5);--ag-shadow-lg: 0 8px 24px hsl(0 0% 0% / .6)}@media (prefers-color-scheme: dark){:root:not([data-theme=light]):not([data-theme=dark]){--ag-bg: 220 10% 7%;--ag-surface: 220 12% 11%;--ag-surface-2: 220 12% 14%;--ag-surface-hover:220 12% 16%;--ag-border: 220 10% 20%;--ag-border-strong: 220 10% 28%;--ag-text: 220 14% 91%;--ag-text-dim: 220 8% 68%;--ag-text-muted: 220 8% 50%;--ag-accent: 246 90% 72%;--ag-accent-fg: 220 30% 5%;--ag-accent-hover: 246 90% 80%;--ag-accent-bg: 246 30% 22%;--ag-success: 158 70% 50%;--ag-success-bg:158 60% 20%;--ag-warning: 38 90% 60%;--ag-warning-bg: 38 60% 20%;--ag-danger: 0 85% 67%;--ag-danger-bg: 0 60% 22%;--ag-info: 217 90% 70%;--ag-info-bg: 217 60% 25%;--ag-shadow-sm: 0 1px 2px hsl(0 0% 0% / .4);--ag-shadow-md: 0 2px 8px hsl(0 0% 0% / .5);--ag-shadow-lg: 0 8px 24px hsl(0 0% 0% / .6)}}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}html,body,#root{height:100%}body{background-color:hsl(var(--ag-bg));color:hsl(var(--ag-text));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,"Apple Color Emoji","Segoe UI Emoji",sans-serif;touch-action:manipulation;-webkit-tap-highlight-color:hsl(var(--ag-accent) / .15)}button,[role=button],a,input[type=button],input[type=submit]{-webkit-tap-highlight-color:hsl(var(--ag-accent) / .15)}@media (pointer: fine){*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-thumb{background:hsl(var(--ag-border-strong));border-radius:999px;border:2px solid transparent;background-clip:content-box}*::-webkit-scrollbar-thumb:hover{background:hsl(var(--ag-text-muted));background-clip:content-box}}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:16px;padding-left:16px}@media (min-width: 640px){.container{max-width:640px;padding-right:24px;padding-left:24px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px;padding-right:32px;padding-left:32px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1400px){.container{max-width:1400px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.bottom-2{bottom:8px}.left-0{left:0}.left-2{left:8px}.left-\[50\%\]{left:50%}.right-4{right:16px}.top-0{top:0}.top-1\/2{top:50%}.top-4{top:16px}.top-\[50\%\]{top:50%}.top-\[var\(--topbar-h\,0\)\]{top:var(--topbar-h,0)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.-mx-1{margin-left:-4px;margin-right:-4px}.-mx-3{margin-left:-12px;margin-right:-12px}.mx-4{margin-left:16px;margin-right:16px}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:4px;margin-bottom:4px}.my-2{margin-top:8px;margin-bottom:8px}.-ml-2{margin-left:-8px}.mb-0\.5{margin-bottom:2px}.mb-1{margin-bottom:4px}.mb-1\.5{margin-bottom:6px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:12px}.ml-2{margin-left:8px}.ml-3{margin-left:12px}.ml-5{margin-left:20px}.ml-auto{margin-left:auto}.mr-1{margin-right:4px}.mr-2{margin-right:8px}.mt-0\.5{margin-top:2px}.mt-1{margin-top:4px}.mt-1\.5{margin-top:6px}.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mt-4{margin-top:16px}.line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.size-4{width:16px;height:16px}.h-1{height:4px}.h-1\.5{height:6px}.h-10{height:2.5rem}.h-12{height:3rem}.h-2{height:8px}.h-24{height:6rem}.h-3{height:12px}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:16px}.h-48{height:12rem}.h-5{height:20px}.h-6{height:24px}.h-64{height:16rem}.h-7{height:32px}.h-72{height:18rem}.h-8{height:48px}.h-9{height:64px}.h-96{height:24rem}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-px{height:1px}.max-h-32{max-height:8rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-96{max-height:24rem}.max-h-\[85dvh\]{max-height:85dvh}.min-h-8{min-height:48px}.min-h-9{min-height:64px}.min-h-\[500px\]{min-height:500px}.min-h-dvh{min-height:100dvh}.w-1\.5{width:6px}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:8px}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:12px}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:16px}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:20px}.w-6{width:24px}.w-64{width:16rem}.w-72{width:18rem}.w-8{width:48px}.w-\[140px\]{width:140px}.w-\[160px\]{width:160px}.w-\[180px\]{width:180px}.w-\[80px\]{width:80px}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x: 2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x: 20px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-mx-4{scroll-margin-left:16px;scroll-margin-right:16px}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[max-content_1fr\]{grid-template-columns:max-content 1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:2px}.gap-1{gap:4px}.gap-1\.5{gap:6px}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-6{gap:24px}.gap-x-3{-moz-column-gap:12px;column-gap:12px}.gap-x-4{-moz-column-gap:16px;column-gap:16px}.gap-y-1{row-gap:4px}.gap-y-2{row-gap:8px}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2px * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(4px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(4px * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(8px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(8px * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(12px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(12px * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--ag-border))}.self-start{align-self:flex-start}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:6px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:10px}.rounded-md{border-radius:6px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-t{border-top-width:1px}.border-accent{border-color:hsl(var(--ag-accent))}.border-border{border-color:hsl(var(--ag-border))}.border-border\/40{border-color:hsl(var(--ag-border) / .4)}.border-danger{border-color:hsl(var(--ag-danger))}.border-danger\/30{border-color:hsl(var(--ag-danger) / .3)}.border-danger\/60{border-color:hsl(var(--ag-danger) / .6)}.border-info{border-color:hsl(var(--ag-info))}.border-info\/30{border-color:hsl(var(--ag-info) / .3)}.border-success{border-color:hsl(var(--ag-success))}.border-success\/30{border-color:hsl(var(--ag-success) / .3)}.border-success\/60{border-color:hsl(var(--ag-success) / .6)}.border-transparent{border-color:transparent}.border-warning{border-color:hsl(var(--ag-warning))}.border-warning\/30{border-color:hsl(var(--ag-warning) / .3)}.border-warning\/40{border-color:hsl(var(--ag-warning) / .4)}.border-warning\/60{border-color:hsl(var(--ag-warning) / .6)}.bg-accent{background-color:hsl(var(--ag-accent))}.bg-accent-bg{background-color:hsl(var(--ag-accent-bg))}.bg-accent\/60{background-color:hsl(var(--ag-accent) / .6)}.bg-bg{background-color:hsl(var(--ag-bg))}.bg-black\/50{background-color:#00000080}.bg-border{background-color:hsl(var(--ag-border))}.bg-danger{background-color:hsl(var(--ag-danger))}.bg-danger-bg{background-color:hsl(var(--ag-danger-bg))}.bg-danger-bg\/30{background-color:hsl(var(--ag-danger-bg) / .3)}.bg-info-bg{background-color:hsl(var(--ag-info-bg))}.bg-success{background-color:hsl(var(--ag-success))}.bg-success-bg{background-color:hsl(var(--ag-success-bg))}.bg-surface{background-color:hsl(var(--ag-surface))}.bg-surface-2{background-color:hsl(var(--ag-surface-2))}.bg-surface-2\/50{background-color:hsl(var(--ag-surface-2) / .5)}.bg-text{background-color:hsl(var(--ag-text))}.bg-text-muted{background-color:hsl(var(--ag-text-muted))}.bg-transparent{background-color:transparent}.bg-warning{background-color:hsl(var(--ag-warning))}.bg-warning-bg{background-color:hsl(var(--ag-warning-bg))}.bg-warning-bg\/40{background-color:hsl(var(--ag-warning-bg) / .4)}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.fill-current{fill:currentColor}.p-0{padding:0}.p-1{padding:4px}.p-12{padding:3rem}.p-2{padding:8px}.p-3{padding:12px}.p-4{padding:16px}.p-5{padding:20px}.p-6{padding:24px}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:4px;padding-right:4px}.px-1\.5{padding-left:6px;padding-right:6px}.px-2{padding-left:8px;padding-right:8px}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:12px;padding-right:12px}.px-4{padding-left:16px;padding-right:16px}.px-5{padding-left:20px;padding-right:20px}.py-0\.5{padding-top:2px;padding-bottom:2px}.py-1{padding-top:4px;padding-bottom:4px}.py-1\.5{padding-top:6px;padding-bottom:6px}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:8px;padding-bottom:8px}.py-3{padding-top:12px;padding-bottom:12px}.py-4{padding-top:16px;padding-bottom:16px}.py-6{padding-top:24px;padding-bottom:24px}.py-8{padding-top:48px;padding-bottom:48px}.pb-2{padding-bottom:8px}.pb-3{padding-bottom:12px}.pb-\[calc\(env\(safe-area-inset-bottom\)\+1\.5rem\)\]{padding-bottom:calc(env(safe-area-inset-bottom) + 1.5rem)}.pl-3{padding-left:12px}.pl-7{padding-left:32px}.pl-8{padding-left:48px}.pr-2{padding-right:8px}.pt-0{padding-top:0}.pt-2{padding-top:8px}.pt-3{padding-top:12px}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:30px;line-height:38px}.text-6xl{font-size:3.75rem;line-height:1}.text-\[0\.85em\]{font-size:.85em}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-base{font-size:15px;line-height:22px}.text-lg{font-size:20px;line-height:28px}.text-md{font-size:16px;line-height:24px}.text-sm{font-size:13px;line-height:20px}.text-xl{font-size:24px;line-height:32px}.text-xs{font-size:12px;line-height:16px}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-accent{color:hsl(var(--ag-accent))}.text-accent-fg{color:hsl(var(--ag-accent-fg))}.text-bg{color:hsl(var(--ag-bg))}.text-danger{color:hsl(var(--ag-danger))}.text-info{color:hsl(var(--ag-info))}.text-success{color:hsl(var(--ag-success))}.text-text{color:hsl(var(--ag-text))}.text-text-dim{color:hsl(var(--ag-text-dim))}.text-text-muted{color:hsl(var(--ag-text-muted))}.text-warning{color:hsl(var(--ag-warning))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.decoration-accent\/40{text-decoration-color:hsl(var(--ag-accent) / .4)}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-accent{accent-color:hsl(var(--ag-accent))}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow: var(--ag-shadow-md);--tw-shadow-colored: var(--ag-shadow-md);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: var(--ag-shadow-lg);--tw-shadow-colored: var(--ag-shadow-lg);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: var(--ag-shadow-md);--tw-shadow-colored: var(--ag-shadow-md);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: var(--ag-shadow-sm);--tw-shadow-colored: var(--ag-shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.duration-200{animation-duration:.2s}.running{animation-play-state:running}.paused{animation-play-state:paused}.pt-safe{padding-top:calc(env(safe-area-inset-top) + .5rem)}.pb-safe{padding-bottom:calc(env(safe-area-inset-bottom) + .5rem)}.h-dvh{height:100vh;height:100dvh}.min-h-dvh{min-height:100vh;min-height:100dvh}.tap-target{min-height:32px;min-width:32px}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:13px;line-height:20px}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-text-muted::-moz-placeholder{color:hsl(var(--ag-text-muted))}.placeholder\:text-text-muted::placeholder{color:hsl(var(--ag-text-muted))}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-border-strong:hover{border-color:hsl(var(--ag-border-strong))}.hover\:bg-accent-hover:hover{background-color:hsl(var(--ag-accent-hover))}.hover\:bg-danger:hover{background-color:hsl(var(--ag-danger))}.hover\:bg-surface-2:hover{background-color:hsl(var(--ag-surface-2))}.hover\:text-accent:hover{color:hsl(var(--ag-accent))}.hover\:text-danger:hover{color:hsl(var(--ag-danger))}.hover\:text-text:hover{color:hsl(var(--ag-text))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-accent:hover{text-decoration-color:hsl(var(--ag-accent))}.focus\:border-accent:focus{border-color:hsl(var(--ag-accent))}.focus\:text-text:focus{color:hsl(var(--ag-text))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-accent:focus{--tw-ring-color: hsl(var(--ag-accent))}.focus\:ring-danger:focus{--tw-ring-color: hsl(var(--ag-danger))}.focus\:ring-offset-1:focus{--tw-ring-offset-width: 1px}.focus\:ring-offset-bg:focus{--tw-ring-offset-color: hsl(var(--ag-bg))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-accent:focus-visible{--tw-ring-color: hsl(var(--ag-accent))}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width: 1px}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-bg:focus-visible{--tw-ring-offset-color: hsl(var(--ag-bg))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-55:disabled{opacity:.55}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: 4px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -4px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: 4px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -4px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=selected\]\:bg-accent-bg[data-state=selected]{background-color:hsl(var(--ag-accent-bg))}.data-\[state\=active\]\:text-accent[data-state=active]{color:hsl(var(--ag-accent))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=delayed-open\]\:animate-in[data-state=delayed-open],.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=delayed-open\]\:fade-in-0[data-state=delayed-open],.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=delayed-open\]\:zoom-in-95[data-state=delayed-open],.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=active\]\:after\:absolute[data-state=active]:after{content:var(--tw-content);position:absolute}.data-\[state\=active\]\:after\:inset-x-0[data-state=active]:after{content:var(--tw-content);left:0;right:0}.data-\[state\=active\]\:after\:-bottom-px[data-state=active]:after{content:var(--tw-content);bottom:-1px}.data-\[state\=active\]\:after\:h-0\.5[data-state=active]:after{content:var(--tw-content);height:2px}.data-\[state\=active\]\:after\:rounded[data-state=active]:after{content:var(--tw-content);border-radius:6px}.data-\[state\=active\]\:after\:bg-accent[data-state=active]:after{content:var(--tw-content);background-color:hsl(var(--ag-accent))}@media (min-width: 640px){.sm\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:-mx-4{margin-left:-16px;margin-right:-16px}.sm\:ml-1{margin-left:4px}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:inline-flex{display:inline-flex}.sm\:hidden{display:none}.sm\:w-20{width:5rem}.sm\:w-28{width:7rem}.sm\:w-36{width:9rem}.sm\:w-40{width:10rem}.sm\:min-w-0{min-width:0px}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-\[75\%\]{max-width:75%}.sm\:max-w-lg{max-width:32rem}.sm\:flex-1{flex:1 1 0%}.sm\:shrink-0{flex-shrink:0}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-\[180px_1fr\]{grid-template-columns:180px 1fr}.sm\:grid-cols-\[180px_1fr_auto\]{grid-template-columns:180px 1fr auto}.sm\:flex-row{flex-direction:row}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2{gap:8px}.sm\:gap-3{gap:12px}.sm\:p-4{padding:16px}.sm\:p-6{padding:24px}.sm\:px-4{padding-left:16px;padding-right:16px}.sm\:px-6{padding-left:24px;padding-right:24px}.sm\:py-2{padding-top:8px;padding-bottom:8px}.sm\:pt-0{padding-top:0}}@media (min-width: 768px){.md\:block{display:block}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[280px\,1fr\]{grid-template-columns:280px 1fr}}@media (min-width: 1024px){.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-border::-webkit-scrollbar-thumb{background-color:hsl(var(--ag-border))}.\[\&\:\:-webkit-scrollbar\]\:h-1::-webkit-scrollbar{height:4px}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>\*\:first-child\]\:mt-0>*:first-child{margin-top:0}.\[\&\>\*\:last-child\]\:mb-0>*:last-child{margin-bottom:0}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:16px;height:16px}.\[\&_svg\]\:h-6 svg{height:24px}.\[\&_svg\]\:w-6 svg{width:24px}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}.\[\&_tr\]\:border-border tr{border-color:hsl(var(--ag-border))}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ac as D,ab as q,r as M,ae as I,ad as V,V as t,t as A,c as P,S as K,l as Q,m as U,j as z,k as T,B as G,a4 as O,G as X}from"./index-CGaI-i4K.js";import{e as u}from"./react-C9F3QeMB.js";import{D as Y}from"./data-table-bhqK389v.js";import{E as H}from"./empty-state-CwUKG8xX.js";import{S as W}from"./status-badge-wL5IXJx_.js";import{P as Z}from"./pagination-ANxQzaRV.js";import{C as ee}from"./confirm-dialog-DD1ZW1XE.js";import{u as te}from"./useQuery-ByZlZXlw.js";import{u as se}from"./use-event-stream-BGeFcayX.js";import{L as ae}from"./loader-circle-BBIfyATA.js";import{R as ne}from"./refresh-ccw-DpPWcwTg.js";import{C as ie}from"./circle-x-OcRzGLRb.js";import{B as oe}from"./briefcase-BscVfAjp.js";import"./table-9FRavyyI.js";import"./arrow-up-CZr2LH5e.js";import"./chevron-right-trO6yoBr.js";import"./dialog-D5BsJN2q.js";import"./x-BLllJ8d_.js";const N={all:["jobs"],list:e=>["jobs","list",e]};function re(e){return te({queryKey:N.list(e),queryFn:()=>M.listJobs(e)})}function le(){const e=D();return()=>e.invalidateQueries({queryKey:N.all})}function ce(){const e=D();return q({mutationFn:a=>M.batchCancelJobs(a),onSuccess:()=>e.invalidateQueries({queryKey:N.all})})}const de=[10,20,50,100],E=20,me=["pending","running","completed","delivered","failed","cancelled","interrupted","replaced","abandoned"],ue={connected:"text-success",connecting:"text-text-dim",reconnecting:"text-warning",closed:"text-text-muted"};function Le(){const{t:e}=I(["tasks","common"]),[a,i]=V(),d=le(),r=Math.max(1,Number(a.get("page"))||1),l=Number(a.get("per_page"))||E,m=a.get("status")??null,L=u.useMemo(()=>({limit:l,offset:(r-1)*l,...m?{status:m}:{}}),[r,l,m]),{data:S,isLoading:R,isFetching:C,refetch:$}=re(L),h=S?.jobs??[],n=S?.stats,v=se({job:()=>d()}),[p,w]=u.useState(new Set),[B,y]=u.useState(!1),_=ce();async function F(){const s=Array.from(p).map(Number).filter(Number.isFinite);if(s.length!==0)try{await _.mutateAsync({ids:s}),w(new Set),O.success(e("states.saved",{ns:"common"}))}catch(o){const{message:c}=X(o,e);throw O.error(c),o}}function f(s){const o=new URLSearchParams(a);for(const[c,j]of Object.entries(s))j==null||j===""?o.delete(c):o.set(c,j);Object.keys(s).some(c=>c!=="page")&&o.delete("page"),i(o,{replace:!1})}const g=n?n.pending+n.running+n.completed+n.failed+(n.delivered??0):void 0,k=g?Math.max(1,Math.ceil(g/l)):h.length===l?r+1:r,J=u.useMemo(()=>[{id:"id",header:e("jobs.col.id"),cell:s=>t.jsxs("span",{className:"tabular-nums text-text-dim",children:["#",s.id]}),headClassName:"w-16",hideOnMobile:!1},{id:"agent",header:e("jobs.col.agent"),cell:s=>t.jsx("span",{className:"font-medium",children:s.agent}),headClassName:"w-32"},{id:"prompt",header:e("jobs.col.prompt"),cell:s=>t.jsx("span",{className:"line-clamp-2 text-text-dim",children:s.prompt}),asCardTitle:!0},{id:"status",header:e("jobs.col.status"),cell:s=>t.jsx(W,{status:s.status,children:e(`jobs.status.${s.status}`,{defaultValue:s.status})}),headClassName:"w-32"},{id:"createdAt",header:e("jobs.col.createdAt"),cell:s=>t.jsx("span",{className:"text-text-dim",children:he(s.created_at)}),headClassName:"w-40",hideOnMobile:!0},{id:"duration",header:e("jobs.col.duration"),cell:s=>t.jsx("span",{className:"tabular-nums text-text-dim",children:pe(s.duration_ms)}),headClassName:"w-24",hideOnMobile:!0},{id:"cost",header:e("jobs.col.cost"),cell:s=>t.jsx("span",{className:"tabular-nums text-text-dim",children:s.cost!=null?`$${s.cost.toFixed(4)}`:"—"}),headClassName:"w-24",hideOnMobile:!0}],[e]),b=p.size;return t.jsxs("div",{className:"mx-auto flex max-w-7xl flex-col gap-4",children:[t.jsxs("header",{className:"flex flex-col gap-1",children:[t.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[t.jsx("h1",{className:"text-xl font-semibold",children:e("jobs.title")}),t.jsx("span",{className:A("text-xs font-medium tabular-nums",ue[v]),children:e(`jobs.live.${v}`)}),t.jsxs(P,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>$(),disabled:C,"aria-label":e("actions.refresh",{ns:"common"}),children:[C?t.jsx(ae,{className:"h-4 w-4 animate-spin"}):t.jsx(ne,{className:"h-4 w-4"}),t.jsx("span",{className:"hidden sm:inline",children:e("actions.refresh",{ns:"common"})})]})]}),t.jsx("p",{className:"text-sm text-text-dim",children:e("jobs.subtitle")})]}),n&&t.jsxs("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:[t.jsx(x,{label:e("jobs.stats.pending"),value:n.pending,tone:"info"}),t.jsx(x,{label:e("jobs.stats.running"),value:n.running,tone:"warning"}),t.jsx(x,{label:e("jobs.stats.completed"),value:n.completed,tone:"success"}),t.jsx(x,{label:e("jobs.stats.failed"),value:n.failed,tone:"danger"})]}),t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("label",{className:"text-sm text-text-dim",htmlFor:"status-filter",children:e("jobs.filter.status")}),t.jsxs(K,{value:m??"__any__",onValueChange:s=>f({status:s==="__any__"?null:s}),children:[t.jsx(Q,{id:"status-filter",className:"w-[160px]",children:t.jsx(U,{})}),t.jsxs(z,{children:[t.jsx(T,{value:"__any__",children:e("jobs.filter.statusAny")}),me.map(s=>t.jsx(T,{value:s,children:e(`jobs.status.${s}`,{defaultValue:s})},s))]})]})]}),b>0&&t.jsxs("div",{className:"ml-auto flex items-center gap-2",children:[t.jsx(G,{variant:"secondary",children:e("jobs.batch.selected",{count:b})}),t.jsxs(P,{variant:"destructive",size:"sm",onClick:()=>y(!0),disabled:_.isPending,children:[t.jsx(ie,{className:"h-4 w-4"}),e("jobs.batch.cancel")]})]})]}),t.jsx(Y,{columns:J,rows:h,getRowId:s=>String(s.id),loading:R,selection:p,onSelectionChange:w,emptyState:t.jsx(H,{icon:t.jsx(oe,{}),title:e("jobs.empty.title"),description:e("jobs.empty.description")})}),(h.length>0||r>1)&&t.jsx(Z,{page:r,totalPages:k,totalRows:g,perPage:l,perPageOptions:de,onPageChange:s=>f({page:s===1?null:String(s)}),onPerPageChange:s=>f({per_page:s===E?null:String(s)})}),t.jsx(ee,{open:B,onOpenChange:y,title:e("jobs.batch.confirmCancel",{count:b}),description:e("jobs.batch.confirmCancelDesc"),intent:"danger",confirmLabel:e("jobs.batch.cancel"),onConfirm:F})]})}const xe={info:"border-info/30 text-info",success:"border-success/30 text-success",warning:"border-warning/30 text-warning",danger:"border-danger/30 text-danger"};function x({label:e,value:a,tone:i}){return t.jsxs("div",{className:A("rounded-md border bg-surface px-3 py-2",xe[i]),children:[t.jsx("div",{className:"text-xs uppercase tracking-wide text-text-dim",children:e}),t.jsx("div",{className:"text-2xl font-semibold tabular-nums",children:a})]})}function he(e){try{const a=new Date(e);if(Number.isNaN(a.getTime()))return e;const i=new Date;return a.toDateString()===i.toDateString()?a.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"}):a.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return e}}function pe(e){if(e==null)return"—";if(e<1e3)return`${e}ms`;const a=e/1e3;if(a<60)return`${a.toFixed(1)}s`;const i=Math.floor(a/60),d=Math.round(a-i*60);return`${i}m${d}s`}export{Le as default};
|
|
2
|
-
//# sourceMappingURL=jobs-DWBDqKx-.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ae as n,V as e,T as r,N as u,t as a,O as i}from"./index-CGaI-i4K.js";import"./react-C9F3QeMB.js";const b=[{to:"jobs",i18nKey:"subnav.jobs",mounted:!0},{to:"subtasks",i18nKey:"subnav.subtasks",mounted:!0},{to:"bgjobs",i18nKey:"subnav.bgjobs",mounted:!0},{to:"schedules",i18nKey:"subnav.schedules",mounted:!0},{to:"outbox",i18nKey:"subnav.outbox",mounted:!0},{to:"a2a",i18nKey:"subnav.a2a",mounted:!0},{to:"heartbeat",i18nKey:"subnav.heartbeat",mounted:!0},{to:"goals",i18nKey:"subnav.goals",mounted:!0},{to:"asks",i18nKey:"subnav.asks",mounted:!0}];function l(){const{t:s}=n("tasks");return e.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[e.jsx(r,{}),e.jsx("nav",{className:a("sticky top-[var(--topbar-h,0)] z-10","flex items-center gap-1","border-b border-border bg-surface","px-3 sm:px-4 py-1","overflow-x-auto"),"aria-label":s("pageTitle"),children:b.filter(t=>t.mounted).map(t=>e.jsx(u,{to:t.to,className:({isActive:o})=>a("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",o?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:s(t.i18nKey)},t.to))}),e.jsx("main",{className:"flex-1 px-3 sm:px-4 py-4 pb-safe",children:e.jsx(i,{})})]})}export{l as default};
|
|
2
|
-
//# sourceMappingURL=layout-B5rK_h6Q.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ae as o,V as t,N as n,t as a,O as l}from"./index-CGaI-i4K.js";import"./react-C9F3QeMB.js";const r=[{to:"installed",i18nKey:"agimSkills.tab.installed"},{to:"hot",i18nKey:"agimSkills.tab.hot"}];function c(){const{t:s}=o(["settings"]);return t.jsxs("div",{className:"flex flex-col gap-4",children:[t.jsx("nav",{className:a("flex items-center gap-1","border-b border-border","-mx-3 sm:-mx-4 px-3 sm:px-4 pb-2","overflow-x-auto"),"aria-label":s("agimSkills.title"),children:r.map(e=>t.jsx(n,{to:e.to,className:({isActive:i})=>a("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",i?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:s(e.i18nKey)},e.to))}),t.jsx(l,{})]})}export{c as default};
|
|
2
|
-
//# sourceMappingURL=layout-ByUY6XZQ.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ae as o,V as e,T as r,N as i,t as n,O as m}from"./index-CGaI-i4K.js";import"./react-C9F3QeMB.js";const u=[{to:"messengers",i18nKey:"tabs.messengers",mounted:!0},{to:"email",i18nKey:"tabs.email",mounted:!0},{to:"viewer",i18nKey:"tabs.viewer",mounted:!0},{to:"agents",i18nKey:"tabs.agents",mounted:!0},{to:"llm",i18nKey:"tabs.llm",mounted:!0},{to:"mcp",i18nKey:"tabs.mcp",mounted:!0},{to:"native-agent",i18nKey:"tabs.nativeAgent",mounted:!0},{to:"search",i18nKey:"tabs.search",mounted:!0},{to:"agim-skills",i18nKey:"tabs.agimSkills",mounted:!0},{to:"policy",i18nKey:"tabs.policy",mounted:!0},{to:"security",i18nKey:"tabs.security",mounted:!0},{to:"workspaces",i18nKey:"tabs.workspaces",mounted:!0},{to:"admins",i18nKey:"tabs.admins",mounted:!0},{to:"service",i18nKey:"tabs.service",mounted:!0}];function d(){const{t:s}=o("settings");return e.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[e.jsx(r,{}),e.jsx("nav",{className:n("sticky top-0 z-10","flex items-center gap-1","border-b border-border bg-surface","px-3 sm:px-4 py-1","overflow-x-auto"),"aria-label":s("pageTitle"),children:u.filter(t=>t.mounted).map(t=>e.jsx(i,{to:t.to,className:({isActive:a})=>n("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",a?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:s(t.i18nKey)},t.to))}),e.jsx("main",{className:"flex-1 px-3 sm:px-4 py-4 pb-safe",children:e.jsx(m,{})})]})}export{d as default};
|
|
2
|
-
//# sourceMappingURL=layout-CX3nXpWb.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout-CX3nXpWb.js","sources":["../../src/routes/settings/layout.tsx"],"sourcesContent":["/**\n * /settings — layout shell with sub-tab nav (environment / service).\n *\n * Workspaces / WeChat QR / Admin allowlist will land as additional\n * sub-tabs in PR-19b/c. The `mounted` flag gates their nav links.\n */\n\nimport { NavLink, Outlet } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { Topbar } from '@/components/shell/topbar'\nimport { cn } from '@/lib/utils'\n\ninterface SubTab {\n to: string\n i18nKey: string\n mounted: boolean\n}\n\nconst SUB_TABS: SubTab[] = [\n { to: 'messengers', i18nKey: 'tabs.messengers', mounted: true },\n { to: 'email', i18nKey: 'tabs.email', mounted: true },\n { to: 'viewer', i18nKey: 'tabs.viewer', mounted: true },\n { to: 'agents', i18nKey: 'tabs.agents', mounted: true },\n // Stage 6 — native LLM stack. Three tabs in a logical group:\n // LLM backends (config + secrets) -> MCP external servers ->\n // native agent / evaluator / heartbeat behavior knobs.\n { to: 'llm', i18nKey: 'tabs.llm', mounted: true },\n { to: 'mcp', i18nKey: 'tabs.mcp', mounted: true },\n { to: 'native-agent', i18nKey: 'tabs.nativeAgent', mounted: true },\n // v1.2.126 — web_search provider chain + per-provider keys.\n { to: 'search', i18nKey: 'tabs.search', mounted: true },\n // P1 follow-up — agim SKILL.md editor.\n { to: 'agim-skills', i18nKey: 'tabs.agimSkills', mounted: true },\n { to: 'policy', i18nKey: 'tabs.policy', mounted: true },\n { to: 'security', i18nKey: 'tabs.security', mounted: true },\n { to: 'workspaces', i18nKey: 'tabs.workspaces', mounted: true },\n { to: 'admins', i18nKey: 'tabs.admins', mounted: true },\n // R13 follow-up — /settings/env catch-all editor removed; raw env-var\n // editing belongs in `~/.agim/env` on the host, not in a web form.\n { to: 'service', i18nKey: 'tabs.service', mounted: true },\n]\n\nexport default function SettingsLayout(): JSX.Element {\n const { t } = useTranslation('settings')\n return (\n <div className=\"flex min-h-dvh flex-col bg-bg\">\n <Topbar />\n\n <nav\n className={cn(\n 'sticky top-0 z-10',\n 'flex items-center gap-1',\n 'border-b border-border bg-surface',\n 'px-3 sm:px-4 py-1',\n 'overflow-x-auto',\n )}\n aria-label={t('pageTitle')}\n >\n {SUB_TABS.filter((tab) => tab.mounted).map((tab) => (\n <NavLink\n key={tab.to}\n to={tab.to}\n className={({ isActive }) =>\n cn(\n 'shrink-0 rounded-md px-3 py-1.5 text-sm no-underline',\n 'transition-colors tap-target',\n isActive\n ? 'bg-accent-bg text-accent font-medium'\n : 'text-text-dim hover:bg-surface-hover hover:text-text',\n )\n }\n >\n {t(tab.i18nKey)}\n </NavLink>\n ))}\n </nav>\n\n <main className=\"flex-1 px-3 sm:px-4 py-4 pb-safe\">\n <Outlet />\n </main>\n </div>\n )\n}\n"],"names":["SUB_TABS","SettingsLayout","t","useTranslation","jsxs","jsx","Topbar","cn","tab","NavLink","isActive","Outlet"],"mappings":"wGAkBA,MAAMA,EAAqB,CACzB,CAAE,GAAI,aAAgB,QAAS,kBAAqB,QAAS,EAAA,EAC7D,CAAE,GAAI,QAAgB,QAAS,aAAqB,QAAS,EAAA,EAC7D,CAAE,GAAI,SAAgB,QAAS,cAAqB,QAAS,EAAA,EAC7D,CAAE,GAAI,SAAgB,QAAS,cAAqB,QAAS,EAAA,EAI7D,CAAE,GAAI,MAAgB,QAAS,WAAqB,QAAS,EAAA,EAC7D,CAAE,GAAI,MAAgB,QAAS,WAAqB,QAAS,EAAA,EAC7D,CAAE,GAAI,eAAgB,QAAS,mBAAqB,QAAS,EAAA,EAE7D,CAAE,GAAI,SAAgB,QAAS,cAAqB,QAAS,EAAA,EAE7D,CAAE,GAAI,cAAgB,QAAS,kBAAqB,QAAS,EAAA,EAC7D,CAAE,GAAI,SAAgB,QAAS,cAAqB,QAAS,EAAA,EAC7D,CAAE,GAAI,WAAgB,QAAS,gBAAqB,QAAS,EAAA,EAC7D,CAAE,GAAI,aAAgB,QAAS,kBAAqB,QAAS,EAAA,EAC7D,CAAE,GAAI,SAAgB,QAAS,cAAqB,QAAS,EAAA,EAG7D,CAAE,GAAI,UAAgB,QAAS,eAAqB,QAAS,EAAA,CAC/D,EAEA,SAAwBC,GAA8B,CACpD,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAe,UAAU,EACvC,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,gCACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAO,EAERD,EAAAA,IAAC,MAAA,CACC,UAAWE,EACT,oBACA,0BACA,oCACA,oBACA,iBAAA,EAEF,aAAYL,EAAE,WAAW,EAExB,SAAAF,EAAS,OAAQQ,GAAQA,EAAI,OAAO,EAAE,IAAKA,GAC1CH,EAAAA,IAACI,EAAA,CAEC,GAAID,EAAI,GACR,UAAW,CAAC,CAAE,SAAAE,CAAA,IACZH,EACE,uDACA,+BACAG,EACI,uCACA,sDAAA,EAIP,SAAAR,EAAEM,EAAI,OAAO,CAAA,EAZTA,EAAI,EAAA,CAcZ,CAAA,CAAA,QAGF,OAAA,CAAK,UAAU,mCACd,SAAAH,EAAAA,IAACM,IAAO,CAAA,CACV,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ae as x,V as e,S as d,l as u,m as p,j as h,k as i,ad as f,T as b,N as j,t as m,O as g}from"./index-CGaI-i4K.js";import{f as y}from"./use-memory-C3GgMqiJ.js";import"./react-C9F3QeMB.js";import"./useQuery-ByZlZXlw.js";function _({value:n,onChange:c,className:l}){const{t:r}=x("memory"),{data:o,isLoading:s}=y(),a=o?.users??[];return e.jsxs(d,{value:n||"__placeholder__",onValueChange:t=>c(t==="__placeholder__"?"":t),disabled:s||a.length===0,children:[e.jsx(u,{className:l??"h-9 w-72 max-w-full",children:e.jsx(p,{placeholder:r("userPicker.placeholder")})}),e.jsxs(h,{children:[e.jsx(i,{value:"__placeholder__",disabled:!0,children:r("userPicker.placeholder")}),a.map(t=>e.jsx(i,{value:t.user_key,children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs",children:t.user_key}),e.jsx("span",{className:"text-text-dim text-xs",children:r("userPicker.factsLabel",{count:t.fact_count})}),t.has_persona&&e.jsxs("span",{className:"text-accent text-xs",children:["·",r("userPicker.personaTag"),"·"]})]})},t.user_key))]})]})}const v=[{to:"facts",i18nKey:"tabs.facts",mounted:!0},{to:"persona",i18nKey:"tabs.persona",mounted:!0},{to:"vector",i18nKey:"tabs.vector",mounted:!0}];function T(){const{t:n}=x("memory"),[c,l]=f(),r=c.get("user")??"";function o(s){const a=new URLSearchParams(c);s?a.set("user",s):a.delete("user"),l(a,{replace:!0})}return e.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[e.jsx(b,{}),e.jsx("div",{className:"border-b border-border bg-surface px-3 sm:px-4 py-2",children:e.jsxs("div",{className:"mx-auto flex max-w-7xl items-center gap-3",children:[e.jsx("span",{className:"text-sm text-text-dim shrink-0",children:n("userPicker.label")}),e.jsx(_,{value:r,onChange:o})]})}),e.jsx("nav",{className:m("sticky top-0 z-10","flex items-center gap-1","border-b border-border bg-surface","px-3 sm:px-4 py-1","overflow-x-auto"),"aria-label":n("pageTitle"),children:v.filter(s=>s.mounted).map(s=>e.jsx(j,{to:s.to,className:({isActive:a})=>m("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",a?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:n(s.i18nKey)},s.to))}),e.jsx("main",{className:"flex-1 px-3 sm:px-4 py-4 pb-safe",children:e.jsx(g,{})})]})}export{T as default};
|
|
2
|
-
//# sourceMappingURL=layout-D7gNMUDZ.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ae as c,ad as x,V as e,T as d,S as m,l as p,m as u,j as b,k as h,N as g,t as n,O as y}from"./index-CGaI-i4K.js";import"./react-C9F3QeMB.js";const f=[{to:"health",i18nKey:"tabs.health"},{to:"topn",i18nKey:"tabs.topn"},{to:"audit",i18nKey:"tabs.audit"}],j=[1,7,30,90];function N(){const{t}=c("observability"),[r,l]=x(),i=Math.max(1,Number(r.get("days"))||7);function o(s){const a=new URLSearchParams(r);s===7?a.delete("days"):a.set("days",String(s)),l(a,{replace:!0})}return e.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[e.jsx(d,{}),e.jsx("div",{className:"border-b border-border bg-surface px-3 sm:px-4 py-2",children:e.jsxs("div",{className:"mx-auto flex max-w-7xl items-center gap-3",children:[e.jsx("span",{className:"text-sm text-text-dim shrink-0",children:t("window.label")}),e.jsxs(m,{value:String(i),onValueChange:s=>o(Number(s)),children:[e.jsx(p,{className:"w-32",children:e.jsx(u,{})}),e.jsx(b,{children:j.map(s=>e.jsx(h,{value:String(s),children:t("window.days",{count:s})},s))})]})]})}),e.jsx("nav",{className:n("sticky top-0 z-10","flex items-center gap-1","border-b border-border bg-surface","px-3 sm:px-4 py-1","overflow-x-auto"),"aria-label":t("pageTitle"),children:f.map(s=>e.jsx(g,{to:s.to,className:({isActive:a})=>n("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",a?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:t(s.i18nKey)},s.to))}),e.jsx("main",{className:"flex-1 px-3 sm:px-4 py-4 pb-safe",children:e.jsx(y,{})})]})}export{N as default};
|
|
2
|
-
//# sourceMappingURL=layout-DJKxW33x.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{z as D,ae as C,V as e,c as b,B as P,a4 as w,G as R,L as T,I as S}from"./index-CGaI-i4K.js";import{e as p}from"./react-C9F3QeMB.js";import{D as E,a as $,d as M,e as Q,b as z}from"./dialog-D5BsJN2q.js";import{b as B,o as O,j as L,s as H}from"./use-settings-CrkXdLrr.js";import{L as I}from"./loader-circle-BBIfyATA.js";import{R as W}from"./refresh-ccw-DpPWcwTg.js";import{X as A}from"./x-BLllJ8d_.js";import{S as J}from"./save-beGooRNy.js";import"./useQuery-ByZlZXlw.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const V=D("QrCode",[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]]);function N(s){const i=new Set(s?.messengers??[]);return{"wechat-ilink":{enabled:i.has("wechat-ilink")},telegram:{enabled:i.has("telegram"),telegram:{...s?.telegram??{}}},feishu:{enabled:i.has("feishu"),feishu:{...s?.feishu??{}}},dingtalk:{enabled:i.has("dingtalk"),dingtalk:{...s?.dingtalk??{}}},discord:{enabled:i.has("discord"),discord:{...s?.discord??{}}}}}function _(s,i){const t=[];for(const d of Object.keys(s))s[d].enabled&&t.push(d);const l={messengers:t,...Object.fromEntries(Object.entries(i).filter(([d])=>!["messengers","telegram","feishu","dingtalk","discord"].includes(d)))};return s.telegram.enabled&&s.telegram.telegram&&(l.telegram=s.telegram.telegram),s.feishu.enabled&&s.feishu.feishu&&(l.feishu=s.feishu.feishu),s.dingtalk.enabled&&s.dingtalk.dingtalk&&(l.dingtalk=s.dingtalk.dingtalk),s.discord.enabled&&s.discord.discord&&(l.discord=s.discord.discord),l}function ne(){const{t:s}=C(["settings","common"]),i=B(),t=O(),[l,d]=p.useState(()=>N(i.data)),[g,x]=p.useState(!1);p.useEffect(()=>{g||i.data&&(d(N(i.data)),x(!0))},[i.data,g]);const m=i.data,n=p.useMemo(()=>m?JSON.stringify(N(m))!==JSON.stringify(l):!1,[m,l]),[r,o]=p.useState(!1),f=new Set(m?.features?.blacklistedPlatforms??[]),h=a=>f.has(a);function c(a,v){d(F=>({...F,[a]:{...F[a],...v}}))}async function k(){if(m)try{await t.mutateAsync(_(l,m)),w.success(s("messengers.savedToast")),x(!1)}catch(a){w.error(R(a,s).message)}}function q(){m&&d(N(m))}return e.jsxs("div",{className:"mx-auto flex max-w-4xl flex-col gap-4",children:[e.jsxs("header",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("messengers.title")}),e.jsxs(b,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>i.refetch(),disabled:i.isFetching,"aria-label":s("actions.refresh",{ns:"common"}),children:[i.isFetching?e.jsx(I,{className:"h-4 w-4 animate-spin"}):e.jsx(W,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("actions.refresh",{ns:"common"})})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:s("messengers.subtitle")})]}),e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:n?e.jsxs(e.Fragment,{children:[e.jsx(P,{variant:"info",children:s("messengers.dirtyHint")}),e.jsxs(b,{type:"button",variant:"secondary",size:"sm",onClick:q,disabled:t.isPending,children:[e.jsx(A,{className:"h-4 w-4"}),s("messengers.discardAll")]}),e.jsxs(b,{type:"button",size:"sm",onClick:()=>void k(),disabled:t.isPending,children:[t.isPending?e.jsx(I,{className:"h-4 w-4 animate-spin"}):e.jsx(J,{className:"h-4 w-4"}),t.isPending?s("messengers.saving"):s("messengers.saveAll")]})]}):e.jsx("span",{className:"text-xs text-text-muted",children:s("env.noChanges")})}),i.isLoading?e.jsx("div",{className:"h-96 rounded-md bg-surface-2 animate-pulse"}):m?e.jsxs("div",{className:"flex flex-col gap-3",children:[h("wechat-ilink")?null:e.jsx(y,{slot:"wechat-ilink",label:s("messengers.platform.wechat"),hint:s("messengers.hint.wechat"),enabled:l["wechat-ilink"].enabled,onToggle:a=>c("wechat-ilink",{enabled:a}),children:e.jsxs(b,{type:"button",variant:"secondary",size:"sm",onClick:()=>o(!0),children:[e.jsx(V,{className:"h-4 w-4"}),s("messengers.scanQr")]})}),m.features?.globalIm&&!h("telegram")?e.jsxs(y,{slot:"telegram",label:s("messengers.platform.telegram"),hint:s("messengers.hint.telegram"),enabled:l.telegram.enabled,onToggle:a=>c("telegram",{enabled:a}),children:[e.jsx(u,{id:"tg-token",label:s("messengers.fields.botToken"),value:l.telegram.telegram?.botToken??"",type:"password",onChange:a=>c("telegram",{telegram:{...l.telegram.telegram,botToken:a}})}),e.jsx(u,{id:"tg-channel",label:s("messengers.fields.channelId"),value:l.telegram.telegram?.channelId??"",onChange:a=>c("telegram",{telegram:{...l.telegram.telegram,channelId:a}})})]}):null,h("feishu")?null:e.jsxs(y,{slot:"feishu",label:s("messengers.platform.feishu"),hint:s("messengers.hint.feishu"),enabled:l.feishu.enabled,onToggle:a=>c("feishu",{enabled:a}),children:[e.jsx(u,{id:"fs-appid",label:s("messengers.fields.appId"),value:l.feishu.feishu?.appId??"",onChange:a=>c("feishu",{feishu:{...l.feishu.feishu,appId:a}})}),e.jsx(u,{id:"fs-secret",label:s("messengers.fields.appSecret"),value:l.feishu.feishu?.appSecret??"",type:"password",onChange:a=>c("feishu",{feishu:{...l.feishu.feishu,appSecret:a}})}),e.jsx(u,{id:"fs-channel",label:s("messengers.fields.channelId"),value:l.feishu.feishu?.channelId??"",onChange:a=>c("feishu",{feishu:{...l.feishu.feishu,channelId:a}})})]}),h("dingtalk")?null:e.jsxs(y,{slot:"dingtalk",label:s("messengers.platform.dingtalk"),hint:s("messengers.hint.dingtalk"),enabled:l.dingtalk.enabled,onToggle:a=>c("dingtalk",{enabled:a}),children:[e.jsx(u,{id:"dt-cid",label:s("messengers.fields.clientId"),value:l.dingtalk.dingtalk?.clientId??"",onChange:a=>c("dingtalk",{dingtalk:{...l.dingtalk.dingtalk,clientId:a}})}),e.jsx(u,{id:"dt-secret",label:s("messengers.fields.clientSecret"),value:l.dingtalk.dingtalk?.clientSecret??"",type:"password",onChange:a=>c("dingtalk",{dingtalk:{...l.dingtalk.dingtalk,clientSecret:a}})}),e.jsx(u,{id:"dt-channel",label:s("messengers.fields.channelId"),value:l.dingtalk.dingtalk?.channelId??"",onChange:a=>c("dingtalk",{dingtalk:{...l.dingtalk.dingtalk,channelId:a}})}),e.jsx(j,{id:"dt-dm-policy",label:s("messengers.dingtalk.dmPolicy"),value:l.dingtalk.dingtalk?.dmPolicy??"open",onChange:a=>c("dingtalk",{dingtalk:{...l.dingtalk.dingtalk,dmPolicy:a}}),options:[{value:"open",label:s("messengers.dingtalk.policy.open")},{value:"pairing",label:s("messengers.dingtalk.policy.pairing")},{value:"allowlist",label:s("messengers.dingtalk.policy.allowlist")}]}),e.jsx(j,{id:"dt-group-policy",label:s("messengers.dingtalk.groupPolicy"),value:l.dingtalk.dingtalk?.groupPolicy??"open",onChange:a=>c("dingtalk",{dingtalk:{...l.dingtalk.dingtalk,groupPolicy:a}}),options:[{value:"open",label:s("messengers.dingtalk.policy.open")},{value:"allowlist",label:s("messengers.dingtalk.policy.allowlist")},{value:"disabled",label:s("messengers.dingtalk.policy.disabled")}]}),e.jsx(u,{id:"dt-allow-from",label:s("messengers.dingtalk.allowFrom"),value:(l.dingtalk.dingtalk?.allowFrom??[]).join(","),onChange:a=>c("dingtalk",{dingtalk:{...l.dingtalk.dingtalk,allowFrom:a.split(",").map(v=>v.trim()).filter(Boolean)}})}),e.jsx(u,{id:"dt-group-allow-from",label:s("messengers.dingtalk.groupAllowFrom"),value:(l.dingtalk.dingtalk?.groupAllowFrom??[]).join(","),onChange:a=>c("dingtalk",{dingtalk:{...l.dingtalk.dingtalk,groupAllowFrom:a.split(",").map(v=>v.trim()).filter(Boolean)}})}),e.jsx(j,{id:"dt-ack",label:s("messengers.dingtalk.ackReaction"),value:l.dingtalk.dingtalk?.ackReaction??"off",onChange:a=>c("dingtalk",{dingtalk:{...l.dingtalk.dingtalk,ackReaction:a}}),options:[{value:"off",label:s("messengers.dingtalk.ack.off")},{value:"emoji",label:s("messengers.dingtalk.ack.emoji")},{value:"kaomoji",label:s("messengers.dingtalk.ack.kaomoji")}]}),e.jsx(U,{accounts:l.dingtalk.dingtalk?.accounts??{},onChange:a=>c("dingtalk",{dingtalk:{...l.dingtalk.dingtalk,accounts:a}})})]}),m.features?.globalIm&&!h("discord")?e.jsxs(y,{slot:"discord",label:s("messengers.platform.discord"),hint:s("messengers.hint.discord"),enabled:l.discord.enabled,onToggle:a=>c("discord",{enabled:a}),children:[e.jsx(u,{id:"dc-token",label:s("messengers.fields.botToken"),value:l.discord.discord?.botToken??"",type:"password",onChange:a=>c("discord",{discord:{...l.discord.discord,botToken:a}})}),e.jsx(u,{id:"dc-channel",label:s("messengers.fields.channelId"),value:l.discord.discord?.channelId??"",onChange:a=>c("discord",{discord:{...l.discord.discord,channelId:a}})})]}):null]}):null,e.jsx(G,{open:r,onOpenChange:o,onConfirmed:()=>{i.refetch(),x(!1)}})]})}function y({label:s,hint:i,enabled:t,onToggle:l,children:d}){const{t:g}=C("settings");return e.jsxs("div",{className:"rounded-md border border-border bg-surface p-4",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:s}),e.jsx(P,{variant:t?"success":"outline",children:g(t?"messengers.enabled":"messengers.disabled")})]}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:i})]}),e.jsx("label",{className:"inline-flex items-center gap-2 text-sm",children:e.jsx("input",{type:"checkbox",checked:t,onChange:x=>l(x.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"})})]}),t&&d&&e.jsx("div",{className:"mt-3 flex flex-col gap-2",children:d})]})}function u({id:s,label:i,value:t,onChange:l,type:d="text"}){return e.jsxs("div",{className:"grid grid-cols-1 gap-1 sm:grid-cols-[180px_1fr] sm:items-center sm:gap-2",children:[e.jsx(T,{htmlFor:s,className:"text-xs text-text-dim",children:i}),e.jsx(S,{id:s,type:d,value:t,onChange:g=>l(g.target.value),autoComplete:"off",className:"font-mono text-xs"})]})}function j({id:s,label:i,value:t,onChange:l,options:d}){return e.jsxs("div",{className:"grid grid-cols-1 gap-1 sm:grid-cols-[180px_1fr] sm:items-center sm:gap-2",children:[e.jsx(T,{htmlFor:s,className:"text-xs text-text-dim",children:i}),e.jsx("select",{id:s,value:t,onChange:g=>l(g.target.value),className:"rounded-md border border-input bg-background px-2 py-1 text-xs",children:d.map(g=>e.jsx("option",{value:g.value,children:g.label},g.value))})]})}function G({open:s,onOpenChange:i,onConfirmed:t}){const{t:l}=C(["settings","common"]),d=L(),[g,x]=p.useState(null),[m,n]=p.useState(null),[r,o]=p.useState(null);p.useEffect(()=>{if(!s){x(null),n(null),o(null);return}let c=!0;return d.mutateAsync().then(k=>{c&&(n(k.qrImage),x(k.qrToken))}).catch(k=>{c&&o(k instanceof Error?k.message:String(k))}),()=>{c=!1}},[s]);const h=H(s?g:null).data?.status;return p.useEffect(()=>{h==="confirmed"&&(w.success(l("messengers.qr.confirmed")),t(),i(!1)),h==="expired"&&w.error(l("messengers.qr.expired"))},[h]),e.jsx(E,{open:s,onOpenChange:i,children:e.jsxs($,{children:[e.jsxs(M,{children:[e.jsx(Q,{children:l("messengers.qr.title")}),e.jsx(z,{children:l("messengers.qr.description")})]}),e.jsx("div",{className:"flex flex-col items-center gap-3",children:d.isPending&&!m?e.jsxs(e.Fragment,{children:[e.jsx(I,{className:"h-8 w-8 animate-spin text-text-dim"}),e.jsx("p",{className:"text-sm text-text-dim",children:l("messengers.qr.starting")})]}):r?e.jsxs("p",{className:"text-sm text-danger",children:[l("messengers.qr.loadFailed"),": ",r]}):m?e.jsxs(e.Fragment,{children:[e.jsx("img",{src:m,alt:l("messengers.qr.title"),className:"rounded-md border border-border"}),h==="expired"?e.jsx("p",{className:"text-xs text-danger",children:l("messengers.qr.expired")}):e.jsx("p",{className:"text-xs text-text-dim",children:h?`· ${h} ·`:""})]}):null})]})})}function U({accounts:s,onChange:i}){const{t}=C(["settings","common"]),l=Object.entries(s),d=(n,r)=>{i({...s,[n]:{...s[n],...r}})},g=n=>{const r={...s};delete r[n],i(r)},x=(n,r)=>{if(!r||r===n)return;if(s[r]){w.error(t("messengers.dingtalk.accountRenameCollision",{id:r}));return}const o={};for(const[f,h]of Object.entries(s))o[f===n?r:f]=h;i(o)},m=()=>{let n=l.length+1,r=`account-${n}`;for(;s[r];)n+=1,r=`account-${n}`;i({...s,[r]:{enabled:!0}})};return e.jsxs("div",{className:"mt-3 border-t border-input pt-3",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[e.jsx("div",{className:"text-xs font-semibold text-text-dim",children:t("messengers.dingtalk.accountsTitle")}),e.jsxs(b,{type:"button",size:"sm",variant:"outline",onClick:m,children:["+ ",t("messengers.dingtalk.addAccount")]})]}),l.length===0?e.jsx("div",{className:"text-xs text-text-dim italic",children:t("messengers.dingtalk.accountsEmpty")}):e.jsx("div",{className:"space-y-3",children:l.map(([n,r])=>e.jsxs("div",{className:"rounded-md border border-input p-2",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsx(S,{id:`acct-id-${n}`,defaultValue:n,onBlur:o=>x(n,o.target.value.trim()),className:"font-mono text-xs w-40",placeholder:"account-id"}),e.jsx(S,{id:`acct-name-${n}`,value:r.name??"",onChange:o=>d(n,{name:o.target.value}),className:"text-xs flex-1",placeholder:t("messengers.dingtalk.accountName")}),e.jsxs("label",{className:"flex items-center gap-1 text-xs",children:[e.jsx("input",{type:"checkbox",checked:r.enabled!==!1,onChange:o=>d(n,{enabled:o.target.checked})}),t("messengers.enabled")]}),e.jsx(b,{type:"button",size:"sm",variant:"ghost",onClick:()=>g(n),className:"text-danger",children:e.jsx(A,{className:"size-4"})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(u,{id:`acct-cid-${n}`,label:t("messengers.fields.clientId"),value:r.clientId??"",onChange:o=>d(n,{clientId:o})}),e.jsx(u,{id:`acct-secret-${n}`,label:t("messengers.fields.clientSecret"),value:r.clientSecret??"",type:"password",onChange:o=>d(n,{clientSecret:o})}),e.jsx(j,{id:`acct-dm-${n}`,label:t("messengers.dingtalk.dmPolicy"),value:r.dmPolicy??"open",onChange:o=>d(n,{dmPolicy:o}),options:[{value:"open",label:t("messengers.dingtalk.policy.open")},{value:"pairing",label:t("messengers.dingtalk.policy.pairing")},{value:"allowlist",label:t("messengers.dingtalk.policy.allowlist")}]}),e.jsx(j,{id:`acct-group-${n}`,label:t("messengers.dingtalk.groupPolicy"),value:r.groupPolicy??"open",onChange:o=>d(n,{groupPolicy:o}),options:[{value:"open",label:t("messengers.dingtalk.policy.open")},{value:"allowlist",label:t("messengers.dingtalk.policy.allowlist")},{value:"disabled",label:t("messengers.dingtalk.policy.disabled")}]}),e.jsx(u,{id:`acct-allow-${n}`,label:t("messengers.dingtalk.allowFrom"),value:(r.allowFrom??[]).join(","),onChange:o=>d(n,{allowFrom:o.split(",").map(f=>f.trim()).filter(Boolean)})}),e.jsx(u,{id:`acct-gallow-${n}`,label:t("messengers.dingtalk.groupAllowFrom"),value:(r.groupAllowFrom??[]).join(","),onChange:o=>d(n,{groupAllowFrom:o.split(",").map(f=>f.trim()).filter(Boolean)})}),e.jsx(j,{id:`acct-ack-${n}`,label:t("messengers.dingtalk.ackReaction"),value:r.ackReaction??"off",onChange:o=>d(n,{ackReaction:o}),options:[{value:"off",label:t("messengers.dingtalk.ack.off")},{value:"emoji",label:t("messengers.dingtalk.ack.emoji")},{value:"kaomoji",label:t("messengers.dingtalk.ack.kaomoji")}]})]})]},n))}),e.jsx("div",{className:"mt-1 text-xs text-text-dim",children:t("messengers.dingtalk.accountsHint")})]})}export{ne as default};
|
|
7
|
-
//# sourceMappingURL=messengers-CWMsJz1e.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messengers-CWMsJz1e.js","sources":["../../node_modules/lucide-react/dist/esm/icons/qr-code.js","../../src/routes/settings/messengers.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst QrCode = createLucideIcon(\"QrCode\", [\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"3\", rx: \"1\", key: \"1tu5fj\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"16\", y: \"3\", rx: \"1\", key: \"1v8r4q\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"16\", rx: \"1\", key: \"1x03jg\" }],\n [\"path\", { d: \"M21 16h-3a2 2 0 0 0-2 2v3\", key: \"177gqh\" }],\n [\"path\", { d: \"M21 21v.01\", key: \"ents32\" }],\n [\"path\", { d: \"M12 7v3a2 2 0 0 1-2 2H7\", key: \"8crl2c\" }],\n [\"path\", { d: \"M3 12h.01\", key: \"nlz23k\" }],\n [\"path\", { d: \"M12 3h.01\", key: \"n36tog\" }],\n [\"path\", { d: \"M12 16v.01\", key: \"133mhm\" }],\n [\"path\", { d: \"M16 12h1\", key: \"1slzba\" }],\n [\"path\", { d: \"M21 12v.01\", key: \"1lwtk9\" }],\n [\"path\", { d: \"M12 21v-1\", key: \"1880an\" }]\n]);\n\nexport { QrCode as default };\n//# sourceMappingURL=qr-code.js.map\n","/**\n * /settings/messengers — per-IM-platform connection config.\n *\n * Layout: one card per platform (WeChat / Telegram / Feishu /\n * DingTalk / Discord). Each card has:\n * * Title + hint\n * * Enable / disable toggle (reads / writes config.messengers[])\n * * When enabled, the platform's config fields (texted)\n * * For WeChat: a \"Scan QR\" button → modal with QR + 2s polling\n *\n * Save All button at the top batches every dirty platform into one\n * PUT /api/config. The discard button reverts the local draft to\n * server-side values.\n *\n * The WeChat QR flow is special: enabling WeChat requires scanning\n * a QR code (the slot in config.messengers gets added by the\n * backend on `confirmed`, so we just open the modal and re-fetch\n * config after a successful scan).\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { Loader2, QrCode, RefreshCcw, Save, X } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport {\n useConfig,\n useUpdateConfig,\n useStartWechatQr,\n useWechatQrStatus,\n} from '@/hooks/use-settings'\nimport { describeError } from '@/lib/api/errors'\nimport type { AppConfig } from '@/types/api'\n\n/** Slot names match what `config.messengers[]` contains.\n * WeChat uses 'wechat-ilink' (the iLink adapter ID). */\ntype Slot = 'wechat-ilink' | 'telegram' | 'feishu' | 'dingtalk' | 'discord'\n\ninterface PlatformDraft {\n enabled: boolean\n telegram?: { botToken?: string; channelId?: string }\n feishu?: { appId?: string; appSecret?: string; channelId?: string }\n dingtalk?: {\n clientId?: string\n clientSecret?: string\n channelId?: string\n // v1.2.37 (batch 1)\n dmPolicy?: 'open' | 'pairing' | 'allowlist'\n groupPolicy?: 'open' | 'allowlist' | 'disabled'\n allowFrom?: string[]\n groupAllowFrom?: string[]\n ackReaction?: 'off' | 'emoji' | 'kaomoji'\n // v1.2.41 (batch 4 follow-up) — full multi-account editor\n accounts?: Record<string, DingTalkAccountDraft>\n }\n discord?: { botToken?: string; channelId?: string }\n}\n\ntype Draft = Record<Slot, PlatformDraft>\n\nfunction buildDraft(cfg: AppConfig | undefined): Draft {\n const m = new Set(cfg?.messengers ?? [])\n return {\n 'wechat-ilink': { enabled: m.has('wechat-ilink') },\n telegram: { enabled: m.has('telegram'), telegram: { ...(cfg?.telegram ?? {}) } },\n feishu: { enabled: m.has('feishu'), feishu: { ...(cfg?.feishu ?? {}) } },\n dingtalk: { enabled: m.has('dingtalk'), dingtalk: { ...(cfg?.dingtalk ?? {}) } },\n discord: { enabled: m.has('discord'), discord: { ...(cfg?.discord ?? {}) } },\n }\n}\n\nfunction buildPatch(draft: Draft, cfg: AppConfig): Partial<AppConfig> {\n const messengers: string[] = []\n for (const k of Object.keys(draft) as Slot[]) if (draft[k].enabled) messengers.push(k)\n const patch: Partial<AppConfig> = {\n messengers,\n // Preserve unknown extra fields the AppConfig type permits.\n ...Object.fromEntries(\n Object.entries(cfg).filter(([k]) => ![\n 'messengers', 'telegram', 'feishu', 'dingtalk', 'discord',\n ].includes(k)),\n ),\n }\n // Only include platform blocks that are enabled. Omitting disabled\n // platforms avoids PUT /api/config merging `{}` and failing zod\n // (telegram.botToken / feishu.appSecret / discord.botToken require\n // min(1) when the key is present).\n if (draft.telegram.enabled && draft.telegram.telegram) {\n patch.telegram = draft.telegram.telegram\n }\n if (draft.feishu.enabled && draft.feishu.feishu) {\n patch.feishu = draft.feishu.feishu\n }\n if (draft.dingtalk.enabled && draft.dingtalk.dingtalk) {\n patch.dingtalk = draft.dingtalk.dingtalk\n }\n if (draft.discord.enabled && draft.discord.discord) {\n patch.discord = draft.discord.discord\n }\n return patch\n}\n\nexport default function SettingsMessengersRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const cfgQuery = useConfig()\n const updateCfg = useUpdateConfig()\n\n const [draft, setDraft] = useState<Draft>(() => buildDraft(cfgQuery.data))\n // Sync the draft once cfg lands. We don't re-sync on every cfg\n // refetch — that would discard unsaved edits.\n const [synced, setSynced] = useState(false)\n useEffect(() => {\n if (synced) return\n if (!cfgQuery.data) return\n setDraft(buildDraft(cfgQuery.data))\n setSynced(true)\n }, [cfgQuery.data, synced])\n\n const cfg = cfgQuery.data\n const isDirty = useMemo(() => {\n if (!cfg) return false\n return JSON.stringify(buildDraft(cfg)) !== JSON.stringify(draft)\n }, [cfg, draft])\n\n // WeChat QR modal state\n const [qrOpen, setQrOpen] = useState(false)\n\n // v1.2.71 — IMHUB_PLATFORM_BLACKLIST gate. Backend sends the\n // alias-expanded set in features.blacklistedPlatforms; we hide the\n // matching PlatformCard so blacklisted IMs disappear from the page\n // entirely (not just have empty data).\n const blockedPlatforms = new Set(cfg?.features?.blacklistedPlatforms ?? [])\n const isBlocked = (slot: Slot): boolean => blockedPlatforms.has(slot)\n\n function patchSlot(slot: Slot, partial: Partial<PlatformDraft>): void {\n setDraft((prev) => ({ ...prev, [slot]: { ...prev[slot], ...partial } }))\n }\n\n async function onSave(): Promise<void> {\n if (!cfg) return\n try {\n await updateCfg.mutateAsync(buildPatch(draft, cfg))\n toast.success(t('messengers.savedToast'))\n setSynced(false) // rebuild draft from refreshed cfg on next paint\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n function onDiscard(): void {\n if (cfg) setDraft(buildDraft(cfg))\n }\n\n return (\n <div className=\"mx-auto flex max-w-4xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('messengers.title')}</h1>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => cfgQuery.refetch()}\n disabled={cfgQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {cfgQuery.isFetching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n <p className=\"text-sm text-text-dim\">{t('messengers.subtitle')}</p>\n </header>\n\n {/* Save bar */}\n <div className=\"flex flex-wrap items-center gap-2\">\n {isDirty ? (\n <>\n <Badge variant=\"info\">{t('messengers.dirtyHint')}</Badge>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={onDiscard}\n disabled={updateCfg.isPending}\n >\n <X className=\"h-4 w-4\" />\n {t('messengers.discardAll')}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={() => void onSave()}\n disabled={updateCfg.isPending}\n >\n {updateCfg.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Save className=\"h-4 w-4\" />}\n {updateCfg.isPending ? t('messengers.saving') : t('messengers.saveAll')}\n </Button>\n </>\n ) : (\n <span className=\"text-xs text-text-muted\">{t('env.noChanges')}</span>\n )}\n </div>\n\n {cfgQuery.isLoading ? (\n <div className=\"h-96 rounded-md bg-surface-2 animate-pulse\" />\n ) : !cfg ? null : (\n <div className=\"flex flex-col gap-3\">\n {!isBlocked('wechat-ilink') ? (\n <PlatformCard\n slot=\"wechat-ilink\"\n label={t('messengers.platform.wechat')}\n hint={t('messengers.hint.wechat')}\n enabled={draft['wechat-ilink'].enabled}\n onToggle={(v) => patchSlot('wechat-ilink', { enabled: v })}\n >\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => setQrOpen(true)}\n >\n <QrCode className=\"h-4 w-4\" />\n {t('messengers.scanQr')}\n </Button>\n </PlatformCard>\n ) : null}\n\n {cfg.features?.globalIm && !isBlocked('telegram') ? (\n <PlatformCard\n slot=\"telegram\"\n label={t('messengers.platform.telegram')}\n hint={t('messengers.hint.telegram')}\n enabled={draft.telegram.enabled}\n onToggle={(v) => patchSlot('telegram', { enabled: v })}\n >\n <FieldRow\n id=\"tg-token\" label={t('messengers.fields.botToken')}\n value={draft.telegram.telegram?.botToken ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('telegram', { telegram: { ...draft.telegram.telegram, botToken: v } })}\n />\n <FieldRow\n id=\"tg-channel\" label={t('messengers.fields.channelId')}\n value={draft.telegram.telegram?.channelId ?? ''}\n onChange={(v) => patchSlot('telegram', { telegram: { ...draft.telegram.telegram, channelId: v } })}\n />\n </PlatformCard>\n ) : null}\n\n {!isBlocked('feishu') ? (\n <PlatformCard\n slot=\"feishu\"\n label={t('messengers.platform.feishu')}\n hint={t('messengers.hint.feishu')}\n enabled={draft.feishu.enabled}\n onToggle={(v) => patchSlot('feishu', { enabled: v })}\n >\n <FieldRow\n id=\"fs-appid\" label={t('messengers.fields.appId')}\n value={draft.feishu.feishu?.appId ?? ''}\n onChange={(v) => patchSlot('feishu', { feishu: { ...draft.feishu.feishu, appId: v } })}\n />\n <FieldRow\n id=\"fs-secret\" label={t('messengers.fields.appSecret')}\n value={draft.feishu.feishu?.appSecret ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('feishu', { feishu: { ...draft.feishu.feishu, appSecret: v } })}\n />\n <FieldRow\n id=\"fs-channel\" label={t('messengers.fields.channelId')}\n value={draft.feishu.feishu?.channelId ?? ''}\n onChange={(v) => patchSlot('feishu', { feishu: { ...draft.feishu.feishu, channelId: v } })}\n />\n </PlatformCard>\n ) : null}\n\n {!isBlocked('dingtalk') ? (\n <PlatformCard\n slot=\"dingtalk\"\n label={t('messengers.platform.dingtalk')}\n hint={t('messengers.hint.dingtalk')}\n enabled={draft.dingtalk.enabled}\n onToggle={(v) => patchSlot('dingtalk', { enabled: v })}\n >\n <FieldRow\n id=\"dt-cid\" label={t('messengers.fields.clientId')}\n value={draft.dingtalk.dingtalk?.clientId ?? ''}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, clientId: v } })}\n />\n <FieldRow\n id=\"dt-secret\" label={t('messengers.fields.clientSecret')}\n value={draft.dingtalk.dingtalk?.clientSecret ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, clientSecret: v } })}\n />\n <FieldRow\n id=\"dt-channel\" label={t('messengers.fields.channelId')}\n value={draft.dingtalk.dingtalk?.channelId ?? ''}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, channelId: v } })}\n />\n {/* v1.2.37 (batch 1) — access policy + ack-reaction */}\n <SelectRow<'open' | 'pairing' | 'allowlist'>\n id=\"dt-dm-policy\" label={t('messengers.dingtalk.dmPolicy')}\n value={draft.dingtalk.dingtalk?.dmPolicy ?? 'open'}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, dmPolicy: v } })}\n options={[\n { value: 'open', label: t('messengers.dingtalk.policy.open') },\n { value: 'pairing', label: t('messengers.dingtalk.policy.pairing') },\n { value: 'allowlist', label: t('messengers.dingtalk.policy.allowlist') },\n ]}\n />\n <SelectRow<'open' | 'allowlist' | 'disabled'>\n id=\"dt-group-policy\" label={t('messengers.dingtalk.groupPolicy')}\n value={draft.dingtalk.dingtalk?.groupPolicy ?? 'open'}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, groupPolicy: v } })}\n options={[\n { value: 'open', label: t('messengers.dingtalk.policy.open') },\n { value: 'allowlist', label: t('messengers.dingtalk.policy.allowlist') },\n { value: 'disabled', label: t('messengers.dingtalk.policy.disabled') },\n ]}\n />\n <FieldRow\n id=\"dt-allow-from\" label={t('messengers.dingtalk.allowFrom')}\n value={(draft.dingtalk.dingtalk?.allowFrom ?? []).join(',')}\n onChange={(v) => patchSlot('dingtalk', {\n dingtalk: {\n ...draft.dingtalk.dingtalk,\n allowFrom: v.split(',').map((s) => s.trim()).filter(Boolean),\n },\n })}\n />\n <FieldRow\n id=\"dt-group-allow-from\" label={t('messengers.dingtalk.groupAllowFrom')}\n value={(draft.dingtalk.dingtalk?.groupAllowFrom ?? []).join(',')}\n onChange={(v) => patchSlot('dingtalk', {\n dingtalk: {\n ...draft.dingtalk.dingtalk,\n groupAllowFrom: v.split(',').map((s) => s.trim()).filter(Boolean),\n },\n })}\n />\n <SelectRow<'off' | 'emoji' | 'kaomoji'>\n id=\"dt-ack\" label={t('messengers.dingtalk.ackReaction')}\n value={draft.dingtalk.dingtalk?.ackReaction ?? 'off'}\n onChange={(v) => patchSlot('dingtalk', { dingtalk: { ...draft.dingtalk.dingtalk, ackReaction: v } })}\n options={[\n { value: 'off', label: t('messengers.dingtalk.ack.off') },\n { value: 'emoji', label: t('messengers.dingtalk.ack.emoji') },\n { value: 'kaomoji', label: t('messengers.dingtalk.ack.kaomoji') },\n ]}\n />\n {/* v1.2.41 (batch 4 follow-up) — multi-account CRUD editor. */}\n <DingTalkAccountsEditor\n accounts={draft.dingtalk.dingtalk?.accounts ?? {}}\n onChange={(next) => patchSlot('dingtalk', {\n dingtalk: { ...draft.dingtalk.dingtalk, accounts: next },\n })}\n />\n </PlatformCard>\n ) : null}\n\n {cfg.features?.globalIm && !isBlocked('discord') ? (\n <PlatformCard\n slot=\"discord\"\n label={t('messengers.platform.discord')}\n hint={t('messengers.hint.discord')}\n enabled={draft.discord.enabled}\n onToggle={(v) => patchSlot('discord', { enabled: v })}\n >\n <FieldRow\n id=\"dc-token\" label={t('messengers.fields.botToken')}\n value={draft.discord.discord?.botToken ?? ''}\n type=\"password\"\n onChange={(v) => patchSlot('discord', { discord: { ...draft.discord.discord, botToken: v } })}\n />\n <FieldRow\n id=\"dc-channel\" label={t('messengers.fields.channelId')}\n value={draft.discord.discord?.channelId ?? ''}\n onChange={(v) => patchSlot('discord', { discord: { ...draft.discord.discord, channelId: v } })}\n />\n </PlatformCard>\n ) : null}\n </div>\n )}\n\n <WechatQrDialog\n open={qrOpen}\n onOpenChange={setQrOpen}\n onConfirmed={() => { void cfgQuery.refetch(); setSynced(false) }}\n />\n </div>\n )\n}\n\ninterface PlatformCardProps {\n slot: Slot\n label: string\n hint: string\n enabled: boolean\n onToggle: (v: boolean) => void\n children?: React.ReactNode\n}\n\nfunction PlatformCard({ label, hint, enabled, onToggle, children }: PlatformCardProps): JSX.Element {\n const { t } = useTranslation('settings')\n return (\n <div className=\"rounded-md border border-border bg-surface p-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-text\">{label}</span>\n <Badge variant={enabled ? 'success' : 'outline'}>\n {enabled ? t('messengers.enabled') : t('messengers.disabled')}\n </Badge>\n </div>\n <p className=\"mt-1 text-xs text-text-dim\">{hint}</p>\n </div>\n <label className=\"inline-flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={enabled}\n onChange={(e) => onToggle(e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n </label>\n </div>\n {enabled && children && (\n <div className=\"mt-3 flex flex-col gap-2\">\n {children}\n </div>\n )}\n </div>\n )\n}\n\ninterface FieldRowProps {\n id: string\n label: string\n value: string\n onChange: (v: string) => void\n type?: 'text' | 'password'\n}\n\nfunction FieldRow({ id, label, value, onChange, type = 'text' }: FieldRowProps): JSX.Element {\n return (\n <div className=\"grid grid-cols-1 gap-1 sm:grid-cols-[180px_1fr] sm:items-center sm:gap-2\">\n <Label htmlFor={id} className=\"text-xs text-text-dim\">{label}</Label>\n <Input\n id={id}\n type={type}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n autoComplete=\"off\"\n className=\"font-mono text-xs\"\n />\n </div>\n )\n}\n\n// v1.2.37 (batch 1) — dropdown sibling of FieldRow for enum settings.\ninterface SelectRowProps<T extends string> {\n id: string\n label: string\n value: T\n onChange: (v: T) => void\n options: Array<{ value: T; label: string }>\n}\nfunction SelectRow<T extends string>({ id, label, value, onChange, options }: SelectRowProps<T>): JSX.Element {\n return (\n <div className=\"grid grid-cols-1 gap-1 sm:grid-cols-[180px_1fr] sm:items-center sm:gap-2\">\n <Label htmlFor={id} className=\"text-xs text-text-dim\">{label}</Label>\n <select\n id={id}\n value={value}\n onChange={(e) => onChange(e.target.value as T)}\n className=\"rounded-md border border-input bg-background px-2 py-1 text-xs\"\n >\n {options.map((o) => (\n <option key={o.value} value={o.value}>{o.label}</option>\n ))}\n </select>\n </div>\n )\n}\n\ninterface WechatQrDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n onConfirmed: () => void\n}\n\nfunction WechatQrDialog({ open, onOpenChange, onConfirmed }: WechatQrDialogProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const start = useStartWechatQr()\n const [token, setToken] = useState<string | null>(null)\n const [qrImage, setQrImage] = useState<string | null>(null)\n const [startError, setStartError] = useState<string | null>(null)\n\n // Kick off the start mutation each time the dialog opens; reset on close.\n useEffect(() => {\n if (!open) {\n setToken(null)\n setQrImage(null)\n setStartError(null)\n return\n }\n let active = true\n start.mutateAsync().then((r) => {\n if (!active) return\n setQrImage(r.qrImage)\n setToken(r.qrToken)\n }).catch((err) => {\n if (!active) return\n setStartError(err instanceof Error ? err.message : String(err))\n })\n return () => { active = false }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const statusQuery = useWechatQrStatus(open ? token : null)\n const status = statusQuery.data?.status\n\n useEffect(() => {\n if (status === 'confirmed') {\n toast.success(t('messengers.qr.confirmed'))\n onConfirmed()\n onOpenChange(false)\n }\n if (status === 'expired') {\n toast.error(t('messengers.qr.expired'))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [status])\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t('messengers.qr.title')}</DialogTitle>\n <DialogDescription>{t('messengers.qr.description')}</DialogDescription>\n </DialogHeader>\n <div className=\"flex flex-col items-center gap-3\">\n {start.isPending && !qrImage ? (\n <>\n <Loader2 className=\"h-8 w-8 animate-spin text-text-dim\" />\n <p className=\"text-sm text-text-dim\">{t('messengers.qr.starting')}</p>\n </>\n ) : startError ? (\n <p className=\"text-sm text-danger\">{t('messengers.qr.loadFailed')}: {startError}</p>\n ) : qrImage ? (\n <>\n <img\n src={qrImage}\n alt={t('messengers.qr.title')}\n className=\"rounded-md border border-border\"\n />\n {status === 'expired'\n ? <p className=\"text-xs text-danger\">{t('messengers.qr.expired')}</p>\n : <p className=\"text-xs text-text-dim\">{status ? `· ${status} ·` : ''}</p>}\n </>\n ) : null}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n\n// ─── v1.2.41 — DingTalk multi-account CRUD editor ───────────────────\n// Renders below the main DingTalk card. Owns the in-memory accounts\n// dict and bubbles every change up via `onChange` so the page-level\n// dirty/save logic notices and lights up the Save button.\n//\n// Each row shows: id (read-only after creation), name, clientId,\n// clientSecret (password mode, masked on echo), dmPolicy / groupPolicy /\n// ackReaction selectors, allowFrom / groupAllowFrom CSVs, enabled\n// toggle, and a delete button. \"Add account\" appends a fresh row with\n// a generated id the operator can rename inline.\n\nexport interface DingTalkAccountDraft {\n name?: string\n clientId?: string\n clientSecret?: string\n dmPolicy?: 'open' | 'pairing' | 'allowlist'\n groupPolicy?: 'open' | 'allowlist' | 'disabled'\n allowFrom?: string[]\n groupAllowFrom?: string[]\n ackReaction?: 'off' | 'emoji' | 'kaomoji'\n enabled?: boolean\n}\n\ninterface DingTalkAccountsEditorProps {\n accounts: Record<string, DingTalkAccountDraft>\n onChange: (next: Record<string, DingTalkAccountDraft>) => void\n}\n\nfunction DingTalkAccountsEditor({ accounts, onChange }: DingTalkAccountsEditorProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const entries = Object.entries(accounts)\n\n const updateAccount = (id: string, patch: Partial<DingTalkAccountDraft>) => {\n onChange({ ...accounts, [id]: { ...accounts[id], ...patch } })\n }\n const deleteAccount = (id: string) => {\n const next = { ...accounts }\n delete next[id]\n onChange(next)\n }\n const renameAccount = (oldId: string, newId: string) => {\n if (!newId || newId === oldId) return\n if (accounts[newId]) {\n toast.error(t('messengers.dingtalk.accountRenameCollision', { id: newId }))\n return\n }\n const next: Record<string, DingTalkAccountDraft> = {}\n for (const [k, v] of Object.entries(accounts)) {\n next[k === oldId ? newId : k] = v\n }\n onChange(next)\n }\n const addAccount = () => {\n // Find an unused id of shape account-N.\n let n = entries.length + 1\n let candidate = `account-${n}`\n while (accounts[candidate]) { n += 1; candidate = `account-${n}` }\n onChange({ ...accounts, [candidate]: { enabled: true } })\n }\n\n return (\n <div className=\"mt-3 border-t border-input pt-3\">\n <div className=\"mb-2 flex items-center justify-between\">\n <div className=\"text-xs font-semibold text-text-dim\">\n {t('messengers.dingtalk.accountsTitle')}\n </div>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={addAccount}>\n + {t('messengers.dingtalk.addAccount')}\n </Button>\n </div>\n\n {entries.length === 0 ? (\n <div className=\"text-xs text-text-dim italic\">\n {t('messengers.dingtalk.accountsEmpty')}\n </div>\n ) : (\n <div className=\"space-y-3\">\n {entries.map(([id, acct]) => (\n <div key={id} className=\"rounded-md border border-input p-2\">\n <div className=\"mb-2 flex items-center gap-2\">\n <Input\n id={`acct-id-${id}`}\n defaultValue={id}\n onBlur={(e) => renameAccount(id, e.target.value.trim())}\n className=\"font-mono text-xs w-40\"\n placeholder=\"account-id\"\n />\n <Input\n id={`acct-name-${id}`}\n value={acct.name ?? ''}\n onChange={(e) => updateAccount(id, { name: e.target.value })}\n className=\"text-xs flex-1\"\n placeholder={t('messengers.dingtalk.accountName')}\n />\n <label className=\"flex items-center gap-1 text-xs\">\n <input\n type=\"checkbox\"\n checked={acct.enabled !== false}\n onChange={(e) => updateAccount(id, { enabled: e.target.checked })}\n />\n {t('messengers.enabled')}\n </label>\n <Button\n type=\"button\" size=\"sm\" variant=\"ghost\"\n onClick={() => deleteAccount(id)}\n className=\"text-danger\"\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n <div className=\"space-y-1\">\n <FieldRow\n id={`acct-cid-${id}`} label={t('messengers.fields.clientId')}\n value={acct.clientId ?? ''}\n onChange={(v) => updateAccount(id, { clientId: v })}\n />\n <FieldRow\n id={`acct-secret-${id}`} label={t('messengers.fields.clientSecret')}\n value={acct.clientSecret ?? ''}\n type=\"password\"\n onChange={(v) => updateAccount(id, { clientSecret: v })}\n />\n <SelectRow<'open' | 'pairing' | 'allowlist'>\n id={`acct-dm-${id}`} label={t('messengers.dingtalk.dmPolicy')}\n value={acct.dmPolicy ?? 'open'}\n onChange={(v) => updateAccount(id, { dmPolicy: v })}\n options={[\n { value: 'open', label: t('messengers.dingtalk.policy.open') },\n { value: 'pairing', label: t('messengers.dingtalk.policy.pairing') },\n { value: 'allowlist', label: t('messengers.dingtalk.policy.allowlist') },\n ]}\n />\n <SelectRow<'open' | 'allowlist' | 'disabled'>\n id={`acct-group-${id}`} label={t('messengers.dingtalk.groupPolicy')}\n value={acct.groupPolicy ?? 'open'}\n onChange={(v) => updateAccount(id, { groupPolicy: v })}\n options={[\n { value: 'open', label: t('messengers.dingtalk.policy.open') },\n { value: 'allowlist', label: t('messengers.dingtalk.policy.allowlist') },\n { value: 'disabled', label: t('messengers.dingtalk.policy.disabled') },\n ]}\n />\n <FieldRow\n id={`acct-allow-${id}`} label={t('messengers.dingtalk.allowFrom')}\n value={(acct.allowFrom ?? []).join(',')}\n onChange={(v) => updateAccount(id, {\n allowFrom: v.split(',').map((s) => s.trim()).filter(Boolean),\n })}\n />\n <FieldRow\n id={`acct-gallow-${id}`} label={t('messengers.dingtalk.groupAllowFrom')}\n value={(acct.groupAllowFrom ?? []).join(',')}\n onChange={(v) => updateAccount(id, {\n groupAllowFrom: v.split(',').map((s) => s.trim()).filter(Boolean),\n })}\n />\n <SelectRow<'off' | 'emoji' | 'kaomoji'>\n id={`acct-ack-${id}`} label={t('messengers.dingtalk.ackReaction')}\n value={acct.ackReaction ?? 'off'}\n onChange={(v) => updateAccount(id, { ackReaction: v })}\n options={[\n { value: 'off', label: t('messengers.dingtalk.ack.off') },\n { value: 'emoji', label: t('messengers.dingtalk.ack.emoji') },\n { value: 'kaomoji', label: t('messengers.dingtalk.ack.kaomoji') },\n ]}\n />\n </div>\n </div>\n ))}\n </div>\n )}\n <div className=\"mt-1 text-xs text-text-dim\">{t('messengers.dingtalk.accountsHint')}</div>\n </div>\n )\n}\n"],"names":["QrCode","createLucideIcon","buildDraft","cfg","m","buildPatch","draft","messengers","k","patch","SettingsMessengersRoute","t","useTranslation","cfgQuery","useConfig","updateCfg","useUpdateConfig","setDraft","useState","synced","setSynced","useEffect","isDirty","useMemo","qrOpen","setQrOpen","blockedPlatforms","isBlocked","slot","patchSlot","partial","prev","onSave","toast","err","describeError","onDiscard","jsxs","jsx","Button","Loader2","RefreshCcw","Fragment","Badge","X","Save","PlatformCard","v","FieldRow","SelectRow","s","DingTalkAccountsEditor","next","WechatQrDialog","label","hint","enabled","onToggle","children","e","id","value","onChange","type","Label","Input","options","o","open","onOpenChange","onConfirmed","start","useStartWechatQr","token","setToken","qrImage","setQrImage","startError","setStartError","active","r","status","useWechatQrStatus","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","accounts","entries","updateAccount","deleteAccount","renameAccount","oldId","newId","addAccount","candidate","acct"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import{z as d,ae as f,V as e,S as b,l as g,m as N,j as k,k as C,c as r,t as y}from"./index-CGaI-i4K.js";import{C as S}from"./chevron-right-trO6yoBr.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const z=d("ChevronFirst",[["path",{d:"m17 18-6-6 6-6",key:"1yerx2"}],["path",{d:"M7 6v12",key:"1p53r6"}]]);/**
|
|
7
|
-
* @license lucide-react v0.469.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const L=d("ChevronLast",[["path",{d:"m7 18 6-6-6-6",key:"lwmzdw"}],["path",{d:"M17 6v12",key:"1o0aio"}]]);/**
|
|
12
|
-
* @license lucide-react v0.469.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const M=d("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);function T({page:a,totalPages:c,totalRows:s,perPage:n,perPageOptions:o,onPageChange:l,onPerPageChange:x,className:p}){const{t:i}=f("common"),m=a>1,h=a<c,u=n!==void 0&&o&&o.length>0&&x,v=n?(a-1)*n+1:null,j=n&&s!==void 0?Math.min(a*n,s):null;return e.jsxs("div",{className:y("flex flex-wrap items-center justify-between gap-3 py-2",p),role:"navigation","aria-label":i("pagination.label"),children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm text-text-dim",children:[u&&e.jsxs("div",{className:"hidden sm:flex items-center gap-2",children:[e.jsx("span",{children:i("pagination.perPage")}),e.jsxs(b,{value:String(n),onValueChange:t=>x?.(Number(t)),children:[e.jsx(g,{className:"h-8 w-[80px]",children:e.jsx(N,{})}),e.jsx(k,{children:o.map(t=>e.jsx(C,{value:String(t),children:t},t))})]})]}),s!==void 0&&v!==null&&j!==null&&e.jsx("span",{"aria-live":"polite",children:i("pagination.range",{from:s===0?0:v,to:j,total:s})})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(r,{variant:"ghost",size:"icon","aria-label":i("pagination.firstPage"),disabled:!m,onClick:()=>l(1),className:"hidden sm:inline-flex",children:e.jsx(z,{})}),e.jsx(r,{variant:"ghost",size:"icon","aria-label":i("actions.previous"),disabled:!m,onClick:()=>l(a-1),children:e.jsx(M,{})}),e.jsx("span",{className:"px-2 text-sm tabular-nums","aria-live":"polite",children:i("pagination.pageOfTotal",{page:a,totalPages:Math.max(1,c)})}),e.jsx(r,{variant:"ghost",size:"icon","aria-label":i("actions.next"),disabled:!h,onClick:()=>l(a+1),children:e.jsx(S,{})}),e.jsx(r,{variant:"ghost",size:"icon","aria-label":i("pagination.lastPage"),disabled:!h,onClick:()=>l(c),className:"hidden sm:inline-flex",children:e.jsx(L,{})})]})]})}T.displayName="Pagination";export{T as P};
|
|
17
|
-
//# sourceMappingURL=pagination-ANxQzaRV.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pagination-ANxQzaRV.js","sources":["../../node_modules/lucide-react/dist/esm/icons/chevron-first.js","../../node_modules/lucide-react/dist/esm/icons/chevron-last.js","../../node_modules/lucide-react/dist/esm/icons/chevron-left.js","../../src/components/common/pagination.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronFirst = createLucideIcon(\"ChevronFirst\", [\n [\"path\", { d: \"m17 18-6-6 6-6\", key: \"1yerx2\" }],\n [\"path\", { d: \"M7 6v12\", key: \"1p53r6\" }]\n]);\n\nexport { ChevronFirst as default };\n//# sourceMappingURL=chevron-first.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronLast = createLucideIcon(\"ChevronLast\", [\n [\"path\", { d: \"m7 18 6-6-6-6\", key: \"lwmzdw\" }],\n [\"path\", { d: \"M17 6v12\", key: \"1o0aio\" }]\n]);\n\nexport { ChevronLast as default };\n//# sourceMappingURL=chevron-last.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronLeft = createLucideIcon(\"ChevronLeft\", [\n [\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]\n]);\n\nexport { ChevronLeft as default };\n//# sourceMappingURL=chevron-left.js.map\n","/**\n * Pagination — controlled page navigator. Drives the URL via the\n * `page` / `perPage` callbacks; the caller decides whether to write\n * useSearchParams (recommended), zustand, or just local state.\n *\n * Why controlled: each M2 page wants the page index in the URL so\n * deep-links work (\"here's row 42 — share it\"). Forcing the component\n * to manage its own state would either duplicate the search-params\n * read or trap callers into useEffect to sync. Controlled keeps the\n * data flow obvious.\n *\n * Mobile behavior:\n * - The page-size selector hides below sm (no room; default 20 is\n * fine on phone).\n * - The first / last buttons hide below sm (the page label keeps\n * the user oriented; prev / next is enough).\n * - All buttons have a 44×44 hit target via the `icon` size.\n *\n * Edge cases:\n * - page count of 0 / 1 → component still renders so the table\n * footer doesn't jump on the next page-flip; buttons are disabled.\n * - page > totalPages → clamp on the caller's side (we display the\n * label as-is so the caller sees the bug instead of us masking it).\n */\n\nimport { ChevronFirst, ChevronLast, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { useTranslation } from 'react-i18next'\nimport { Button } from '@/components/ui/button'\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'\nimport { cn } from '@/lib/utils'\n\nexport interface PaginationProps {\n /** 1-based current page. */\n page: number\n /** Total number of pages. Pass `Math.max(1, Math.ceil(total / perPage))`. */\n totalPages: number\n /** Optional row count — when present, renders \"1–20 of 150\" alongside the page label. */\n totalRows?: number\n /** Optional rows-per-page slot. Pass `[10, 20, 50, 100]` to enable. */\n perPage?: number\n perPageOptions?: number[]\n onPageChange: (page: number) => void\n onPerPageChange?: (perPage: number) => void\n className?: string\n}\n\nfunction Pagination({\n page,\n totalPages,\n totalRows,\n perPage,\n perPageOptions,\n onPageChange,\n onPerPageChange,\n className,\n}: PaginationProps): JSX.Element {\n const { t } = useTranslation('common')\n const canPrev = page > 1\n const canNext = page < totalPages\n const showPerPage = perPage !== undefined && perPageOptions && perPageOptions.length > 0 && onPerPageChange\n\n const rangeFrom = perPage ? (page - 1) * perPage + 1 : null\n const rangeTo = perPage && totalRows !== undefined\n ? Math.min(page * perPage, totalRows)\n : null\n\n return (\n <div\n className={cn(\n 'flex flex-wrap items-center justify-between gap-3 py-2',\n className,\n )}\n role=\"navigation\"\n aria-label={t('pagination.label')}\n >\n <div className=\"flex items-center gap-2 text-sm text-text-dim\">\n {showPerPage && (\n <div className=\"hidden sm:flex items-center gap-2\">\n <span>{t('pagination.perPage')}</span>\n <Select\n value={String(perPage)}\n onValueChange={(v) => onPerPageChange?.(Number(v))}\n >\n <SelectTrigger className=\"h-8 w-[80px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {perPageOptions.map((n) => (\n <SelectItem key={n} value={String(n)}>\n {n}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n {totalRows !== undefined && rangeFrom !== null && rangeTo !== null && (\n <span aria-live=\"polite\">\n {t('pagination.range', {\n from: totalRows === 0 ? 0 : rangeFrom,\n to: rangeTo,\n total: totalRows,\n })}\n </span>\n )}\n </div>\n\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={t('pagination.firstPage')}\n disabled={!canPrev}\n onClick={() => onPageChange(1)}\n className=\"hidden sm:inline-flex\"\n >\n <ChevronFirst />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={t('actions.previous')}\n disabled={!canPrev}\n onClick={() => onPageChange(page - 1)}\n >\n <ChevronLeft />\n </Button>\n\n <span className=\"px-2 text-sm tabular-nums\" aria-live=\"polite\">\n {t('pagination.pageOfTotal', { page, totalPages: Math.max(1, totalPages) })}\n </span>\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={t('actions.next')}\n disabled={!canNext}\n onClick={() => onPageChange(page + 1)}\n >\n <ChevronRight />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={t('pagination.lastPage')}\n disabled={!canNext}\n onClick={() => onPageChange(totalPages)}\n className=\"hidden sm:inline-flex\"\n >\n <ChevronLast />\n </Button>\n </div>\n </div>\n )\n}\nPagination.displayName = 'Pagination'\n\nexport { Pagination }\n"],"names":["ChevronFirst","createLucideIcon","ChevronLast","ChevronLeft","Pagination","page","totalPages","totalRows","perPage","perPageOptions","onPageChange","onPerPageChange","className","t","useTranslation","canPrev","canNext","showPerPage","rangeFrom","rangeTo","jsxs","cn","jsx","Select","v","SelectTrigger","SelectValue","SelectContent","n","SelectItem","Button","ChevronRight"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ae as p,ad as k,V as e,c as u,B as j,G as N,a4 as m,L as F,t as z}from"./index-CGaI-i4K.js";import{e as y}from"./react-C9F3QeMB.js";import{E as P}from"./empty-state-CwUKG8xX.js";import{C as A}from"./confirm-dialog-DD1ZW1XE.js";import{e as R,g as U,a as _,h as M,c as G}from"./use-memory-C3GgMqiJ.js";import{B as D}from"./brain-n56pZ1TQ.js";import{L as x}from"./loader-circle-BBIfyATA.js";import{R as J}from"./refresh-ccw-DpPWcwTg.js";import{P as O}from"./play-BNtSkb5l.js";import{C as Q}from"./circle-check-big-D6TvCoDM.js";import{C as V}from"./circle-x-OcRzGLRb.js";import{T as X}from"./trash-2-DL2FAuYX.js";import"./dialog-D5BsJN2q.js";import"./x-BLllJ8d_.js";import"./useQuery-ByZlZXlw.js";function le(){const{t}=p(["memory","common"]),[s]=k(),r=s.get("user")??"";return r?e.jsx(q,{userKey:r}):e.jsx("div",{className:"mx-auto max-w-3xl",children:e.jsx(P,{icon:e.jsx(D,{}),title:t("noUserSelected.title"),description:t("noUserSelected.description")})})}function q({userKey:t}){const{t:s}=p(["memory","common"]),r=R(t),n=r.data,o=U(),a=_().data?.jobs[0],i=M(),f=G(),[E,h]=y.useState(!1),[d,g]=y.useState(n?.summary??"");y.useEffect(()=>{g(n?.summary??"")},[n?.summary]);const b=d!==(n?.summary??"");async function w(){const c=d.trim();if(c)try{await i.mutateAsync({user_key:t,body:{summary:c}}),m.success(s("persona.saved"))}catch(l){const{message:T}=N(l,s);m.error(T)}}async function L(){try{await f.mutateAsync(t),m.success(s("common:actions.delete"))}catch(c){const{message:l}=N(c,s);throw m.error(l),c}}async function B(){try{await o.mutateAsync()}catch(c){const{message:l}=N(c,s);m.error(l)}}return e.jsxs("div",{className:"mx-auto flex max-w-4xl flex-col gap-4",children:[e.jsxs("header",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("persona.title")}),e.jsxs(u,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>r.refetch(),disabled:r.isFetching,"aria-label":s("actions.refresh",{ns:"common"}),children:[r.isFetching?e.jsx(x,{className:"h-4 w-4 animate-spin"}):e.jsx(J,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("actions.refresh",{ns:"common"})})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:s("persona.subtitle")})]}),e.jsxs("div",{className:"rounded-md border border-border bg-surface p-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("span",{className:"font-medium text-sm text-text",children:s("persona.consolidate.trigger")}),e.jsx(H,{job:a}),e.jsxs(u,{variant:"default",size:"sm",onClick:()=>void B(),disabled:o.isPending||a?.phase==="running",className:"ml-auto",children:[o.isPending?e.jsx(x,{className:"h-4 w-4 animate-spin"}):e.jsx(O,{className:"h-4 w-4"}),o.isPending?s("persona.consolidate.triggering"):s("persona.consolidate.trigger")]})]}),a?.phase==="done"&&(a.result.users!=null||a.result.updated!=null)&&e.jsx("p",{className:"mt-2 text-xs text-text-dim",children:s("persona.consolidate.result",{users:a.result.users??0,updated:a.result.updated??0})}),a?.phase==="failed"&&a.result.error&&e.jsx("p",{className:"mt-2 text-xs text-danger",children:a.result.error})]}),r.isLoading?e.jsx("div",{className:"h-48 w-full rounded-md bg-surface-2 animate-pulse"}):n?e.jsxs(e.Fragment,{children:[n.updated_at>0&&e.jsx("div",{className:"text-xs text-text-dim",children:s("persona.updated",{at:S(n.updated_at)})}),e.jsx(C,{draft:d,onChange:g,onSave:()=>void w(),saving:i.isPending,dirty:b,canDelete:!0,onDelete:()=>h(!0)})]}):e.jsxs(e.Fragment,{children:[e.jsx(P,{icon:e.jsx(D,{}),title:s("persona.empty.title"),description:s("persona.empty.description")}),e.jsx(C,{draft:d,onChange:g,onSave:()=>void w(),saving:i.isPending,dirty:b,canDelete:!1,onDelete:()=>h(!0)})]}),e.jsx(A,{open:E,onOpenChange:h,title:s("persona.confirmDelete"),description:s("persona.confirmDeleteDesc"),intent:"danger",confirmLabel:s("persona.delete"),onConfirm:L})]})}function C({draft:t,onChange:s,onSave:r,saving:n,dirty:o,canDelete:v,onDelete:a}){const{t:i}=p("memory");return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(F,{htmlFor:"persona-editor",className:"text-sm text-text-dim",children:i("persona.editorLabel")}),e.jsx("textarea",{id:"persona-editor",value:t,onChange:f=>s(f.target.value),rows:12,className:z("w-full resize-y rounded-md border bg-bg px-3 py-2","font-mono text-sm leading-6","focus:outline-none focus:ring-2 focus:ring-accent focus:ring-offset-1 focus:ring-offset-bg",o?"border-accent":"border-border")}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[v&&e.jsxs(u,{type:"button",variant:"outline",size:"sm",onClick:a,children:[e.jsx(X,{className:"h-3 w-3"}),i("persona.delete")]}),e.jsxs(u,{type:"button",size:"sm",className:"ml-auto",disabled:!o||n||t.trim().length===0,onClick:r,children:[n?e.jsx(x,{className:"h-4 w-4 animate-spin"}):null,i("persona.save")]})]})]})}function H({job:t}){const{t:s}=p("memory");return t?t.phase==="running"?e.jsxs(j,{variant:"info",children:[e.jsx(x,{className:"h-3 w-3 animate-spin"}),s("persona.consolidate.running")]}):t.phase==="done"?e.jsxs(j,{variant:"success",children:[e.jsx(Q,{className:"h-3 w-3"}),s("persona.consolidate.lastRun",{at:S(t.finishedAt??t.startedAt)})]}):e.jsxs(j,{variant:"danger",children:[e.jsx(V,{className:"h-3 w-3"}),s("persona.consolidate.doneFailed")]}):null}function S(t){try{const s=new Date(t);return Number.isNaN(s.getTime())?String(t):s.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return String(t)}}export{le as default};
|
|
2
|
-
//# sourceMappingURL=persona-CHz80XDk.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ae as r,V as e,c as d,a4 as m,G as E,B as f,q as w,t as x,S as _,l as I,m as M,j as A,k as c}from"./index-CGaI-i4K.js";import{d as C,p as B}from"./use-settings-CrkXdLrr.js";import{L as S}from"./loader-circle-BBIfyATA.js";import{R as U}from"./refresh-ccw-DpPWcwTg.js";import"./react-C9F3QeMB.js";import"./useQuery-ByZlZXlw.js";function o(s){if(s==null)return!1;const a=s.toLowerCase();return a==="1"||a==="true"||a==="yes"||a==="on"}function V(){const{t:s}=r(["settings","common"]),a=C(),i=B();async function t(n,v){try{await i.mutateAsync({updates:{[n]:v}}),m.success(s("policy.savingToast"))}catch(y){m.error(E(y,s).message)}}const l=a.data?.env??{},h=o(l.IMHUB_DANGEROUSLY_SKIP_PERMISSIONS),g=o(l.IMHUB_MEMORY_ENABLED),j=o(l.IMHUB_VIEWER_ENABLED),N=(l.IMHUB_TIMEOUT_DEFAULT??"").toLowerCase()==="allow",b=(l.IMHUB_A2A_NOTIFY_MODE??"essential").toLowerCase();return e.jsxs("div",{className:"mx-auto flex max-w-4xl flex-col gap-4",children:[e.jsxs("header",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("policy.title")}),e.jsxs(d,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>a.refetch(),disabled:a.isFetching,"aria-label":s("actions.refresh",{ns:"common"}),children:[a.isFetching?e.jsx(S,{className:"h-4 w-4 animate-spin"}):e.jsx(U,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("actions.refresh",{ns:"common"})})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:s("policy.subtitle")})]}),a.isLoading?e.jsx("div",{className:"h-96 rounded-md bg-surface-2 animate-pulse"}):e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx(O,{value:h,disabled:i.isPending,onChange:n=>void t("IMHUB_DANGEROUSLY_SKIP_PERMISSIONS",n?"1":"0")}),e.jsx(L,{allowOnTimeout:N,disabled:i.isPending,onChange:n=>void t("IMHUB_TIMEOUT_DEFAULT",n)}),e.jsx(p,{sectionKey:"memory",value:g,disabled:i.isPending,onChange:n=>void t("IMHUB_MEMORY_ENABLED",n?"1":"0")}),e.jsx(p,{sectionKey:"viewer",value:j,disabled:i.isPending,onChange:n=>void t("IMHUB_VIEWER_ENABLED",n?"1":"0")}),e.jsx(T,{value:b,disabled:i.isPending,onChange:n=>void t("IMHUB_A2A_NOTIFY_MODE",n)})]})]})}function O({value:s,disabled:a,onChange:i}){const{t}=r("settings");return e.jsx("section",{className:x("rounded-md border p-4",s?"border-danger/60 bg-danger-bg/30":"border-border bg-surface"),children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:t("policy.safety.title")}),s&&e.jsxs(f,{variant:"danger",children:[e.jsx(w,{className:"h-3 w-3"}),"ON"]})]}),e.jsx("p",{className:"mt-1 text-sm text-text-dim",children:t("policy.safety.description")}),!s&&e.jsx("p",{className:"mt-1 text-xs text-text-muted",children:t("policy.safety.tagWarn")}),e.jsx("code",{className:"mt-2 inline-block rounded bg-surface-2 px-1.5 py-0.5 text-xs text-text-muted",children:t("policy.safety.envKey")})]}),e.jsx(u,{value:s,disabled:a,onChange:i})]})})}function L({allowOnTimeout:s,disabled:a,onChange:i}){const{t}=r("settings");return e.jsx("section",{className:"rounded-md border border-border bg-surface p-4",children:e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:t("policy.approval.title")}),e.jsx("p",{className:"text-sm text-text-dim",children:t("policy.approval.description")}),e.jsx("code",{className:"self-start rounded bg-surface-2 px-1.5 py-0.5 text-xs text-text-muted",children:t("policy.approval.envKey")}),e.jsxs("div",{className:"mt-2 flex flex-wrap gap-2",children:[e.jsx(d,{type:"button",variant:s?"outline":"default",size:"sm",disabled:a,onClick:()=>i("deny"),children:t("policy.approval.valDeny")}),e.jsx(d,{type:"button",variant:s?"default":"outline",size:"sm",disabled:a,onClick:()=>i("allow"),children:t("policy.approval.valAllow")})]})]})})}function p({sectionKey:s,value:a,disabled:i,onChange:t}){const{t:l}=r("settings");return e.jsx("section",{className:"rounded-md border border-border bg-surface p-4",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:l(`policy.${s}.title`)}),e.jsx(f,{variant:a?"success":"outline",children:a?"ON":"OFF"})]}),e.jsx("p",{className:"mt-1 text-sm text-text-dim",children:l(`policy.${s}.description`)}),e.jsx("code",{className:"mt-2 inline-block rounded bg-surface-2 px-1.5 py-0.5 text-xs text-text-muted",children:l(`policy.${s}.envKey`)})]}),e.jsx(u,{value:a,disabled:i,onChange:t})]})})}function T({value:s,disabled:a,onChange:i}){const{t}=r("settings");return e.jsx("section",{className:"rounded-md border border-border bg-surface p-4",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx("span",{className:"font-medium text-text",children:t("policy.a2aNotify.title")}),e.jsx("p",{className:"mt-1 text-sm text-text-dim",children:t("policy.a2aNotify.description")}),e.jsx("code",{className:"mt-2 inline-block rounded bg-surface-2 px-1.5 py-0.5 text-xs text-text-muted",children:t("policy.a2aNotify.envKey")})]}),e.jsxs(_,{value:s,onValueChange:i,disabled:a,children:[e.jsx(I,{className:"w-36",children:e.jsx(M,{})}),e.jsxs(A,{children:[e.jsx(c,{value:"essential",children:t("policy.a2aNotify.valEssential")}),e.jsx(c,{value:"verbose",children:t("policy.a2aNotify.valVerbose")}),e.jsx(c,{value:"off",children:t("policy.a2aNotify.valOff")})]})]})]})})}function u({value:s,disabled:a,onChange:i}){return e.jsx("button",{type:"button",role:"switch","aria-checked":s,disabled:a,onClick:()=>i(!s),className:x("relative inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full transition-colors","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-bg","disabled:cursor-not-allowed disabled:opacity-50",s?"bg-accent":"bg-surface-2 border border-border"),children:e.jsx("span",{className:x("inline-block h-5 w-5 rounded-full bg-white shadow transition-transform",s?"translate-x-5":"translate-x-0.5")})})}export{V as default};
|
|
2
|
-
//# sourceMappingURL=policy-CtKRzual.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ae as N,V as e,c as I,I as d,S as h,l as _,m as p,j as f,k as u,s as T,a4 as j,G as E,q as M,t as w,B as U}from"./index-CGaI-i4K.js";import{e as v}from"./react-C9F3QeMB.js";import{d as S,p as L}from"./use-settings-CrkXdLrr.js";import{L as C}from"./loader-circle-BBIfyATA.js";import{R as O}from"./refresh-ccw-DpPWcwTg.js";import{S as H}from"./shield-alert-C2IO43co.js";import{C as V}from"./circle-check-B_d7dBl5.js";import"./useQuery-ByZlZXlw.js";function R(s){if(s==null)return!1;const a=s.toLowerCase();return a==="1"||a==="true"||a==="yes"||a==="on"}function $(){const{t:s}=N(["settings","common"]),a=S(),o=L(),[i,B]=v.useState(null),[b,y]=v.useState(!1);async function g(){y(!0);try{const t=await T.get("/api/security/diagnostics");B(t.diagnostics)}catch(t){j.error(E(t,s).message)}finally{y(!1)}}v.useEffect(()=>{g()},[]);async function r(t,l){try{await o.mutateAsync({updates:{[t]:l}}),j.success(s("security.savingToast")),await g()}catch(A){j.error(E(A,s).message)}}const n=a.data?.env??{};return e.jsxs("div",{className:"mx-auto flex max-w-4xl flex-col gap-4",children:[e.jsxs("header",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("security.title")}),e.jsx(I,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>{a.refetch(),g()},disabled:a.isFetching||b,"aria-label":s("actions.refresh",{ns:"common"}),children:a.isFetching||b?e.jsx(C,{className:"h-4 w-4 animate-spin"}):e.jsx(O,{className:"h-4 w-4"})})]}),e.jsx("p",{className:"text-sm text-muted",children:s("security.subtitle")})]}),e.jsxs("section",{className:"rounded-lg border border-border bg-card p-4",children:[e.jsxs("h2",{className:"mb-3 flex items-center gap-2 text-sm font-semibold",children:[e.jsx(H,{className:"h-4 w-4"}),s("security.diagnostics.title")]}),i?e.jsxs("ul",{className:"grid gap-2 text-sm sm:grid-cols-2",children:[e.jsx(x,{label:s("security.diagnostics.runningAsRoot"),ok:i.runningAsRoot===!1,text:i.runningAsRoot===!0?s("security.diagnostics.runningAsRootHelp"):"OK"}),e.jsx(x,{label:s("security.diagnostics.envFilePerms"),ok:i.envFile.exists&&!i.envFile.tooPermissive,text:i.envFile.exists?i.envFile.tooPermissive?`${i.envFile.mode} — ${s("security.diagnostics.envFilePermsLax")}`:s("security.diagnostics.envFilePermsOk"):"—"}),e.jsx(x,{label:s("security.diagnostics.bwrapAvailable"),ok:i.bwrapAvailable,text:i.bwrapAvailable?"/usr/bin/bwrap":s("security.diagnostics.bwrapMissing")}),e.jsx(x,{label:s("security.diagnostics.senderAllowlist"),ok:i.senderAllowlistConfigured,text:i.senderAllowlistConfigured?s("security.diagnostics.senderAllowlistOn"):s("security.diagnostics.senderAllowlistOff")}),e.jsx(x,{label:s("security.diagnostics.adminAllowlist"),ok:i.adminAllowlistConfigured,text:i.adminAllowlistConfigured?s("security.diagnostics.adminAllowlistOn"):s("security.diagnostics.adminAllowlistOff")}),e.jsx(x,{label:s("security.diagnosticsPlatformBlacklist"),ok:i.platformBlacklist.length===0,text:i.platformBlacklist.length===0?"—":i.platformBlacklist.join(", ")})]}):e.jsx("p",{className:"text-sm text-muted",children:"…"})]}),e.jsx(m,{title:s("security.sender.title"),description:s("security.sender.description"),envKey:"IMHUB_ALLOWED_USERS",children:e.jsx(d,{defaultValue:n.IMHUB_ALLOWED_USERS??"",placeholder:s("security.sender.placeholder"),onBlur:t=>{const l=t.target.value.trim();r("IMHUB_ALLOWED_USERS",l===""?null:l)}})}),e.jsx(m,{title:s("security.exec.title"),description:s("security.exec.description"),children:e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsx(c,{label:s("security.exec.sandbox"),children:e.jsxs(h,{value:(n.IMHUB_EXEC_SANDBOX??"").toLowerCase()==="bwrap"?"bwrap":"__none__",onValueChange:t=>void r("IMHUB_EXEC_SANDBOX",t==="__none__"?null:t),children:[e.jsx(_,{children:e.jsx(p,{})}),e.jsxs(f,{children:[e.jsx(u,{value:"__none__",children:s("security.exec.sandboxNone")}),e.jsxs(u,{value:"bwrap",disabled:!i?.bwrapAvailable,children:[s("security.exec.sandboxBwrap"),!i?.bwrapAvailable&&e.jsxs("span",{className:"ml-2 text-xs text-muted",children:["(",s("security.exec.sandboxBwrapMissing"),")"]})]})]})]})}),e.jsx(c,{label:s("security.exec.sandboxNet"),children:e.jsxs(h,{value:(n.IMHUB_EXEC_SANDBOX_NET??"").toLowerCase()==="off"?"off":"on",onValueChange:t=>void r("IMHUB_EXEC_SANDBOX_NET",t==="off"?"off":null),children:[e.jsx(_,{children:e.jsx(p,{})}),e.jsxs(f,{children:[e.jsx(u,{value:"on",children:s("security.exec.sandboxNetOn")}),e.jsx(u,{value:"off",children:s("security.exec.sandboxNetOff")})]})]})}),e.jsx(c,{label:s("security.exec.timeoutMs"),children:e.jsx(d,{type:"number",defaultValue:n.IMHUB_EXEC_TIMEOUT_MS??"",placeholder:"60000",onBlur:t=>{const l=t.target.value.trim();r("IMHUB_EXEC_TIMEOUT_MS",l===""?null:l)}})}),e.jsx(c,{label:s("security.exec.maxOutput"),children:e.jsx(d,{type:"number",defaultValue:n.IMHUB_EXEC_MAX_OUTPUT??"",placeholder:"32768",onBlur:t=>{const l=t.target.value.trim();r("IMHUB_EXEC_MAX_OUTPUT",l===""?null:l)}})})]})}),e.jsx(m,{title:s("security.web.title"),description:s("security.web.description"),children:e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsx(c,{label:s("security.web.allowPrivate"),hint:s("security.web.allowPrivateHelp"),children:e.jsxs(h,{value:R(n.IMHUB_NATIVE_WEB_ALLOW_PRIVATE)?"1":"0",onValueChange:t=>void r("IMHUB_NATIVE_WEB_ALLOW_PRIVATE",t==="1"?"1":null),children:[e.jsx(_,{children:e.jsx(p,{})}),e.jsxs(f,{children:[e.jsx(u,{value:"0",children:"OFF"}),e.jsx(u,{value:"1",children:"ON"})]})]})}),e.jsx(c,{label:s("security.web.timeoutMs"),children:e.jsx(d,{type:"number",defaultValue:n.IMHUB_NATIVE_WEB_TIMEOUT_MS??"",placeholder:"30000",onBlur:t=>{const l=t.target.value.trim();r("IMHUB_NATIVE_WEB_TIMEOUT_MS",l===""?null:l)}})}),e.jsx("div",{className:"sm:col-span-2",children:e.jsx(c,{label:s("security.web.ssrfWhitelist"),children:e.jsx(d,{defaultValue:n.IMHUB_NATIVE_WEB_SSRF_WHITELIST??"",placeholder:s("security.web.ssrfWhitelistPlaceholder"),onBlur:t=>{const l=t.target.value.trim();r("IMHUB_NATIVE_WEB_SSRF_WHITELIST",l===""?null:l)}})})})]})}),e.jsx(m,{title:s("security.fs.title"),description:s("security.fs.description"),children:e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsx(c,{label:s("security.fs.restrict"),children:e.jsxs(h,{value:(n.IMHUB_NATIVE_FS_RESTRICT??"1")==="0"?"0":"1",onValueChange:t=>void r("IMHUB_NATIVE_FS_RESTRICT",t==="0"?"0":null),children:[e.jsx(_,{children:e.jsx(p,{})}),e.jsxs(f,{children:[e.jsx(u,{value:"1",children:s("security.fs.restrictOn")}),e.jsx(u,{value:"0",children:s("security.fs.restrictOff")})]})]})}),e.jsx(c,{label:s("security.fs.timeoutMs"),children:e.jsx(d,{type:"number",defaultValue:n.IMHUB_NATIVE_FS_TIMEOUT_MS??"",placeholder:"60000",onBlur:t=>{const l=t.target.value.trim();r("IMHUB_NATIVE_FS_TIMEOUT_MS",l===""?null:l)}})})]})}),e.jsx(m,{title:s("security.delegation.title"),description:s("security.delegation.description"),envKey:"IMHUB_NATIVE_CALL_AGENT_MAX_PER_TURN",children:e.jsx(d,{type:"number",defaultValue:n.IMHUB_NATIVE_CALL_AGENT_MAX_PER_TURN??"",placeholder:"2",onBlur:t=>{const l=t.target.value.trim();r("IMHUB_NATIVE_CALL_AGENT_MAX_PER_TURN",l===""?null:l)}})}),e.jsxs(m,{title:s("security.platformBlacklist.title"),description:s("security.platformBlacklist.description"),envKey:"IMHUB_PLATFORM_BLACKLIST",children:[e.jsx(d,{defaultValue:n.IMHUB_PLATFORM_BLACKLIST??"",placeholder:s("security.platformBlacklist.placeholder"),onBlur:t=>{const l=t.target.value.trim();r("IMHUB_PLATFORM_BLACKLIST",l===""?null:l)}}),i?.platformBlacklist&&i.platformBlacklist.length>0&&e.jsxs("p",{className:"mt-2 text-[10px] text-muted",children:[s("security.platformBlacklist.currentLabel"),": ",i.platformBlacklist.join(", ")]})]})]})}function x({label:s,ok:a,text:o}){return e.jsxs("li",{className:"flex items-start gap-2",children:[a?e.jsx(V,{className:"mt-0.5 h-4 w-4 shrink-0 text-success"}):e.jsx(M,{className:"mt-0.5 h-4 w-4 shrink-0 text-warning"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:"font-medium",children:s}),e.jsx("div",{className:w("text-xs",a?"text-muted":"text-warning"),children:o})]})]})}function m({title:s,description:a,envKey:o,children:i}){return e.jsxs("section",{className:"rounded-lg border border-border bg-card p-4",children:[e.jsxs("div",{className:"mb-2 flex flex-wrap items-baseline gap-2",children:[e.jsx("h2",{className:"text-sm font-semibold",children:s}),o&&e.jsx(U,{variant:"outline",className:"font-mono text-[10px]",children:o})]}),e.jsx("p",{className:"mb-3 text-xs text-muted",children:a}),i]})}function c({label:s,hint:a,children:o}){return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("label",{className:"text-xs font-medium text-muted",children:s}),o,a&&e.jsx("p",{className:"text-[10px] text-muted",children:a})]})}export{$ as default};
|
|
2
|
-
//# sourceMappingURL=security-Dw1mh68G.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{V as r,t}from"./index-CGaI-i4K.js";import{e as o}from"./react-C9F3QeMB.js";const l=o.forwardRef(({className:e,...a},s)=>r.jsx("div",{className:"w-full overflow-x-auto",children:r.jsx("table",{ref:s,className:t("w-full caption-bottom text-sm",e),...a})}));l.displayName="Table";const d=o.forwardRef(({className:e,...a},s)=>r.jsx("thead",{ref:s,className:t("[&_tr]:border-b [&_tr]:border-border bg-surface-2",e),...a}));d.displayName="TableHeader";const b=o.forwardRef(({className:e,...a},s)=>r.jsx("tbody",{ref:s,className:t("[&_tr:last-child]:border-0",e),...a}));b.displayName="TableBody";const c=o.forwardRef(({className:e,...a},s)=>r.jsx("tfoot",{ref:s,className:t("border-t border-border bg-surface-2 font-medium [&>tr]:last:border-b-0",e),...a}));c.displayName="TableFooter";const m=o.forwardRef(({className:e,...a},s)=>r.jsx("tr",{ref:s,className:t("border-b border-border transition-colors","hover:bg-surface-hover data-[state=selected]:bg-accent-bg",e),...a}));m.displayName="TableRow";const i=o.forwardRef(({className:e,...a},s)=>r.jsx("th",{ref:s,className:t("h-10 px-4 text-left align-middle","text-xs font-semibold uppercase tracking-wide text-text-dim","[&:has([role=checkbox])]:pr-0",e),...a}));i.displayName="TableHead";const f=o.forwardRef(({className:e,...a},s)=>r.jsx("td",{ref:s,className:t("p-3 align-middle [&:has([role=checkbox])]:pr-0",e),...a}));f.displayName="TableCell";const x=o.forwardRef(({className:e,...a},s)=>r.jsx("caption",{ref:s,className:t("mt-4 text-sm text-text-dim",e),...a}));x.displayName="TableCaption";export{l as T,b as a,f as b,i as c,d,m as e};
|
|
2
|
-
//# sourceMappingURL=table-9FRavyyI.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as n}from"./useQuery-ByZlZXlw.js";import{ac as i,ab as u,s as t}from"./index-CGaI-i4K.js";const r={all:["heartbeat"],list:["heartbeat","list"]};function c(e){return`${e.platform}:${e.channelId}:${e.threadId}`}function d(){return n({queryKey:r.list,queryFn:()=>t.get("/api/heartbeat/bindings"),refetchInterval:1e4,refetchIntervalInBackground:!1})}function g(){const e=i();return u({mutationFn:({row:s,op:a})=>t.post(`/api/heartbeat/bindings/${encodeURIComponent(c(s))}/${a}`),onSuccess:()=>e.invalidateQueries({queryKey:r.all})})}const o={all:["goals"],list:["goals","list"]};function f(){return n({queryKey:o.list,queryFn:()=>t.get("/api/goals"),refetchInterval:3e4})}function b(){const e=i();return u({mutationFn:({id:s,status:a})=>t.put(`/api/goals/${s}/status`,{body:{status:a}}),onSuccess:()=>e.invalidateQueries({queryKey:o.all})})}const l={all:["asks"],list:["asks","list"]};function q(){return n({queryKey:l.list,queryFn:()=>t.get("/api/asks/pending"),refetchInterval:5e3})}function h(){const e=i();return u({mutationFn:s=>t.post(`/api/asks/pending/${encodeURIComponent(s)}/cancel`),onSuccess:()=>e.invalidateQueries({queryKey:l.all})})}export{q as a,b,f as c,d,g as e,h as u};
|
|
2
|
-
//# sourceMappingURL=use-background-tasks-XHuIYwrT.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as i}from"./useQuery-ByZlZXlw.js";import{ac as u,ab as t,s}from"./index-CGaI-i4K.js";const a={all:["llm"],list:["llm","list"]};function r(){return i({queryKey:a.list,queryFn:()=>s.get("/api/llm")})}function m(){const e=u();return t({mutationFn:n=>s.post("/api/llm/backends",{body:n}),onSuccess:()=>e.invalidateQueries({queryKey:a.all})})}function p(){const e=u();return t({mutationFn:n=>s.delete(`/api/llm/backends/${encodeURIComponent(n)}`),onSuccess:()=>e.invalidateQueries({queryKey:a.all})})}function d(){const e=u();return t({mutationFn:n=>s.put("/api/llm/roles",{body:n}),onSuccess:()=>e.invalidateQueries({queryKey:a.all})})}function y(){return t({mutationFn:e=>s.post(`/api/llm/backends/${encodeURIComponent(e)}/ping`)})}const c={all:["mcp"],list:["mcp","list"]};function q(){return i({queryKey:c.list,queryFn:()=>s.get("/api/mcp")})}function v(){const e=u();return t({mutationFn:n=>s.post("/api/mcp/servers",{body:n}),onSuccess:()=>e.invalidateQueries({queryKey:c.all})})}function f(){const e=u();return t({mutationFn:n=>s.delete(`/api/mcp/servers/${encodeURIComponent(n)}`),onSuccess:()=>e.invalidateQueries({queryKey:c.all})})}function K(){const e=u();return t({mutationFn:n=>s.post(`/api/mcp/servers/${encodeURIComponent(n)}/health`),onSuccess:()=>e.invalidateQueries({queryKey:c.all})})}export{r as a,y as b,d as c,p as d,v as e,K as f,q as g,f as h,m as u};
|
|
2
|
-
//# sourceMappingURL=use-llm-admin-Dm8PcjN-.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u}from"./useQuery-ByZlZXlw.js";import{ac as t,ab as o,r as n,a as i}from"./index-CGaI-i4K.js";const r={all:["memory"],users:["memory","users"],facts:e=>["memory","facts",e],persona:e=>["memory","persona",e],consolidate:["memory","consolidate"]};function y(){return u({queryKey:r.users,queryFn:()=>n.listMemoryUsers()})}function m(e,s={}){return u({queryKey:r.facts(e),queryFn:()=>n.listMemoryFacts(e),enabled:s.enabled!==!1&&!!e.user_key})}function d(){const e=t();return o({mutationFn:({id:s,user_key:a})=>n.deleteMemoryFactById(s,{user_key:a}),onSuccess:()=>e.invalidateQueries({queryKey:r.all})})}function f(){const e=t();return o({mutationFn:({user_key:s,body:a})=>n.deleteMemoryFacts({user_key:s},a),onSuccess:()=>e.invalidateQueries({queryKey:r.all})})}function q(e,s={}){return u({queryKey:r.persona(e),queryFn:async()=>{try{return await n.getMemoryPersona({user_key:e})}catch(a){if(a instanceof i&&a.status===404)return null;throw a}},enabled:s.enabled!==!1&&!!e})}function F(){const e=t();return o({mutationFn:({user_key:s,body:a})=>n.updateMemoryPersona({user_key:s},a),onSuccess:(s,a)=>{e.invalidateQueries({queryKey:r.persona(a.user_key)}),e.invalidateQueries({queryKey:r.users})}})}function K(){const e=t();return o({mutationFn:s=>n.deleteMemoryPersona({user_key:s}),onSuccess:(s,a)=>{e.invalidateQueries({queryKey:r.persona(a)}),e.invalidateQueries({queryKey:r.users})}})}function M(e={}){return u({queryKey:r.consolidate,queryFn:()=>n.getMemoryConsolidateStatus(),refetchInterval:3e3,refetchIntervalInBackground:!1,enabled:e.enabled!==!1})}function p(){const e=t();return o({mutationFn:()=>n.consolidateMemory(),onSuccess:()=>{e.invalidateQueries({queryKey:r.consolidate}),e.invalidateQueries({queryKey:r.all})}})}export{M as a,d as b,K as c,m as d,q as e,y as f,p as g,F as h,r as m,f as u};
|
|
2
|
-
//# sourceMappingURL=use-memory-C3GgMqiJ.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u}from"./useQuery-ByZlZXlw.js";import{ac as i,ab as s,r as n}from"./index-CGaI-i4K.js";const r={all:["settings"],env:e=>["settings","env",e],service:["settings","service"],admins:["settings","admins"],config:["settings","config"],workspaces:["settings","workspaces"]};function v(e={}){const t=!!e.reveal;return u({queryKey:r.env(t),queryFn:()=>n.getEnv({reveal:t})})}function l(){const e=i();return s({mutationFn:t=>n.updateEnv(t),onSuccess:()=>e.invalidateQueries({queryKey:["settings","env"]})})}function f(){return u({queryKey:r.service,queryFn:()=>n.getServiceStatus(),refetchInterval:5e3,refetchIntervalInBackground:!1})}function a(e,t){return s({mutationFn:e,onSuccess:()=>t.invalidateQueries({queryKey:r.service})})}function y(){const e=i();return a(()=>n.startService(),e)}function d(){const e=i();return a(()=>n.stopService(),e)}function m(){const e=i();return a(()=>n.restartService(),e)}function q(){return u({queryKey:r.admins,queryFn:()=>n.listAdminAllowlist()})}function g(){const e=i();return s({mutationFn:t=>n.addAdminAllowlist(t),onSuccess:()=>e.invalidateQueries({queryKey:r.admins})})}function p(){const e=i();return s({mutationFn:t=>n.removeAdminAllowlist(t),onSuccess:()=>e.invalidateQueries({queryKey:r.admins})})}function S(){return u({queryKey:r.config,queryFn:()=>n.getConfig()})}function F(){const e=i();return s({mutationFn:t=>n.updateConfig(t),onSuccess:()=>e.invalidateQueries({queryKey:r.config})})}function A(){return u({queryKey:r.workspaces,queryFn:()=>n.listWorkspacesFull()})}function h(){const e=i();return s({mutationFn:t=>n.upsertWorkspace(t),onSuccess:()=>e.invalidateQueries({queryKey:r.workspaces})})}function K(){return s({mutationFn:()=>n.startWechatQr()})}function w(e){return u({queryKey:["settings","wechat-qr",e??""],queryFn:()=>n.getWechatQrStatus({token:e}),enabled:!!e,refetchInterval:2e3,refetchIntervalInBackground:!1})}function Q(){return s({mutationFn:e=>n.testAcpAgent(e)})}function k(){return s({mutationFn:e=>n.discoverAcpAgents(e)})}function W(){return s({mutationFn:()=>n.testEmail()})}function E(){return u({queryKey:["settings","search","providers"],queryFn:()=>n.getSearchProviders()})}function I(){return s({mutationFn:e=>n.testSearchProvider(e)})}function C(){return u({queryKey:["settings","viewer-tunnel"],queryFn:()=>n.getViewerTunnel()})}export{q as a,S as b,k as c,v as d,p as e,m as f,E as g,f as h,y as i,K as j,d as k,Q as l,W as m,I as n,F as o,l as p,h as q,C as r,w as s,A as t,g as u};
|
|
2
|
-
//# sourceMappingURL=use-settings-CrkXdLrr.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u}from"./useQuery-ByZlZXlw.js";import{ac as o,ab as i,r as a}from"./index-CGaI-i4K.js";const t={all:["workspace"],files:(e,s)=>["workspace","files",e,s]};function y(){return u({queryKey:["agents","status"],queryFn:()=>a.getAgentsStatus()})}function f(e,s,r={}){return u({queryKey:t.files(e,s),queryFn:()=>a.getWorkspaceFiles({agent:e,...s?{path:s}:{}}),enabled:r.enabled!==!1&&!!e})}function p(){const e=o();return i({mutationFn:({agent:s,path:r,body:n})=>a.writeWorkspaceFile({agent:s,path:r},n),onSuccess:()=>e.invalidateQueries({queryKey:t.all})})}export{f as a,p as b,y as u};
|
|
2
|
-
//# sourceMappingURL=use-workspace-Csq4sxlY.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{p as J,Y as N,_ as c,a0 as Q,$ as g,W as _,J as x,U as B,a2 as X,a3 as I,M as Y,K as Z,Z as A,X as z,a1 as V,ac as $}from"./index-CGaI-i4K.js";import{e as d}from"./react-C9F3QeMB.js";var G=class extends J{constructor(t,e){super(),this.options=e,this.#s=t,this.#r=null,this.#i=N(),this.bindMethods(),this.setOptions(e)}#s;#t=void 0;#p=void 0;#e=void 0;#a;#u;#i;#r;#v;#l;#d;#o;#h;#n;#f=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),j(this.#t,this.options)?this.#c():this.updateResult(),this.#g())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return P(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return P(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#y(),this.#S(),this.#t.removeObserver(this)}setOptions(t){const e=this.options,s=this.#t;if(this.options=this.#s.defaultQueryOptions(t),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof c(this.options.enabled,this.#t)!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#O(),this.#t.setOptions(this.options),e._defaulted&&!Q(this.options,e)&&this.#s.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#t,observer:this});const i=this.hasListeners();i&&H(this.#t,s,this.options,e)&&this.#c(),this.updateResult(),i&&(this.#t!==s||c(this.options.enabled,this.#t)!==c(e.enabled,this.#t)||g(this.options.staleTime,this.#t)!==g(e.staleTime,this.#t))&&this.#b();const n=this.#R();i&&(this.#t!==s||c(this.options.enabled,this.#t)!==c(e.enabled,this.#t)||n!==this.#n)&&this.#m(n)}getOptimisticResult(t){const e=this.#s.getQueryCache().build(this.#s,t),s=this.createResult(e,t);return tt(this,s)&&(this.#e=s,this.#u=this.options,this.#a=this.#t.state),s}getCurrentResult(){return this.#e}trackResult(t,e){return new Proxy(t,{get:(s,i)=>(this.trackProp(i),e?.(i),i==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&this.#i.status==="pending"&&this.#i.reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(s,i))})}trackProp(t){this.#f.add(t)}getCurrentQuery(){return this.#t}refetch({...t}={}){return this.fetch({...t})}fetchOptimistic(t){const e=this.#s.defaultQueryOptions(t),s=this.#s.getQueryCache().build(this.#s,e);return s.fetch().then(()=>this.createResult(s,e))}fetch(t){return this.#c({...t,cancelRefetch:t.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#e))}#c(t){this.#O();let e=this.#t.fetch(this.options,t);return t?.throwOnError||(e=e.catch(_)),e}#b(){this.#y();const t=g(this.options.staleTime,this.#t);if(x.isServer()||this.#e.isStale||!B(t))return;const s=X(this.#e.dataUpdatedAt,t)+1;this.#o=I.setTimeout(()=>{this.#e.isStale||this.updateResult()},s)}#R(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#m(t){this.#S(),this.#n=t,!(x.isServer()||c(this.options.enabled,this.#t)===!1||!B(this.#n)||this.#n===0)&&(this.#h=I.setInterval(()=>{(this.options.refetchIntervalInBackground||Y.isFocused())&&this.#c()},this.#n))}#g(){this.#b(),this.#m(this.#R())}#y(){this.#o!==void 0&&(I.clearTimeout(this.#o),this.#o=void 0)}#S(){this.#h!==void 0&&(I.clearInterval(this.#h),this.#h=void 0)}createResult(t,e){const s=this.#t,i=this.options,n=this.#e,u=this.#a,a=this.#u,b=t!==s?t.state:this.#p,{state:y}=t;let r={...y},l=!1,o;if(e._optimisticResults){const h=this.hasListeners(),m=!h&&j(t,e),O=h&&H(t,s,e,i);(m||O)&&(r={...r,...Z(y.data,t.options)}),e._optimisticResults==="isRestoring"&&(r.fetchStatus="idle")}let{error:R,errorUpdatedAt:S,status:v}=r;o=r.data;let F=!1;if(e.placeholderData!==void 0&&o===void 0&&v==="pending"){let h;n?.isPlaceholderData&&e.placeholderData===a?.placeholderData?(h=n.data,F=!0):h=typeof e.placeholderData=="function"?e.placeholderData(this.#d?.state.data,this.#d):e.placeholderData,h!==void 0&&(v="success",o=A(n?.data,h,e),l=!0)}if(e.select&&o!==void 0&&!F)if(n&&o===u?.data&&e.select===this.#v)o=this.#l;else try{this.#v=e.select,o=e.select(o),o=A(n?.data,o,e),this.#l=o,this.#r=null}catch(h){this.#r=h}this.#r&&(R=this.#r,o=this.#l,S=Date.now(),v="error");const T=r.fetchStatus==="fetching",w=v==="pending",M=v==="error",D=w&&T,k=o!==void 0,p={status:v,fetchStatus:r.fetchStatus,isPending:w,isSuccess:v==="success",isError:M,isInitialLoading:D,isLoading:D,data:o,dataUpdatedAt:r.dataUpdatedAt,error:R,errorUpdatedAt:S,failureCount:r.fetchFailureCount,failureReason:r.fetchFailureReason,errorUpdateCount:r.errorUpdateCount,isFetched:t.isFetched(),isFetchedAfterMount:r.dataUpdateCount>b.dataUpdateCount||r.errorUpdateCount>b.errorUpdateCount,isFetching:T,isRefetching:T&&!w,isLoadingError:M&&!k,isPaused:r.fetchStatus==="paused",isPlaceholderData:l,isRefetchError:M&&k,isStale:U(t,e),refetch:this.refetch,promise:this.#i,isEnabled:c(e.enabled,t)!==!1};if(this.options.experimental_prefetchInRender){const h=p.data!==void 0,m=p.status==="error"&&!h,O=C=>{m?C.reject(p.error):h&&C.resolve(p.data)},L=()=>{const C=this.#i=p.promise=N();O(C)},E=this.#i;switch(E.status){case"pending":t.queryHash===s.queryHash&&O(E);break;case"fulfilled":(m||p.data!==E.value)&&L();break;case"rejected":(!m||p.error!==E.reason)&&L();break}}return p}updateResult(){const t=this.#e,e=this.createResult(this.#t,this.options);if(this.#a=this.#t.state,this.#u=this.options,this.#a.data!==void 0&&(this.#d=this.#t),Q(e,t))return;this.#e=e;const s=()=>{if(!t)return!0;const{notifyOnChangeProps:i}=this.options,n=typeof i=="function"?i():i;if(n==="all"||!n&&!this.#f.size)return!0;const u=new Set(n??this.#f);return this.options.throwOnError&&u.add("error"),Object.keys(this.#e).some(a=>{const f=a;return this.#e[f]!==t[f]&&u.has(f)})};this.#E({listeners:s()})}#O(){const t=this.#s.getQueryCache().build(this.#s,this.options);if(t===this.#t)return;const e=this.#t;this.#t=t,this.#p=t.state,this.hasListeners()&&(e?.removeObserver(this),t.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#g()}#E(t){z.batch(()=>{t.listeners&&this.listeners.forEach(e=>{e(this.#e)}),this.#s.getQueryCache().notify({query:this.#t,type:"observerResultsUpdated"})})}};function q(t,e){return c(e.enabled,t)!==!1&&t.state.data===void 0&&!(t.state.status==="error"&&c(e.retryOnMount,t)===!1)}function j(t,e){return q(t,e)||t.state.data!==void 0&&P(t,e,e.refetchOnMount)}function P(t,e,s){if(c(e.enabled,t)!==!1&&g(e.staleTime,t)!=="static"){const i=typeof s=="function"?s(t):s;return i==="always"||i!==!1&&U(t,e)}return!1}function H(t,e,s,i){return(t!==e||c(i.enabled,t)===!1)&&(!s.suspense||t.state.status!=="error")&&U(t,s)}function U(t,e){return c(e.enabled,t)!==!1&&t.isStaleByTime(g(e.staleTime,t))}function tt(t,e){return!Q(t.getCurrentResult(),e)}var K=d.createContext(!1),et=()=>d.useContext(K);K.Provider;function st(){let t=!1;return{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t}}var it=d.createContext(st()),rt=()=>d.useContext(it),nt=(t,e,s)=>{const i=s?.state.error&&typeof t.throwOnError=="function"?V(t.throwOnError,[s.state.error,s]):t.throwOnError;(t.suspense||t.experimental_prefetchInRender||i)&&(e.isReset()||(t.retryOnMount=!1))},at=t=>{d.useEffect(()=>{t.clearReset()},[t])},ot=({result:t,errorResetBoundary:e,throwOnError:s,query:i,suspense:n})=>t.isError&&!e.isReset()&&!t.isFetching&&i&&(n&&t.data===void 0||V(s,[t.error,i])),ht=t=>{if(t.suspense){const s=n=>n==="static"?n:Math.max(n??1e3,1e3),i=t.staleTime;t.staleTime=typeof i=="function"?(...n)=>s(i(...n)):s(i),typeof t.gcTime=="number"&&(t.gcTime=Math.max(t.gcTime,1e3))}},ct=(t,e)=>t.isLoading&&t.isFetching&&!e,ut=(t,e)=>t?.suspense&&e.isPending,W=(t,e,s)=>e.fetchOptimistic(t).catch(()=>{s.clearReset()});function lt(t,e,s){const i=et(),n=rt(),u=$(),a=u.defaultQueryOptions(t);u.getDefaultOptions().queries?._experimental_beforeQuery?.(a);const f=u.getQueryCache().get(a.queryHash),b=t.subscribed!==!1;a._optimisticResults=i?"isRestoring":b?"optimistic":void 0,ht(a),nt(a,n,f),at(n);const y=!u.getQueryCache().get(a.queryHash),[r]=d.useState(()=>new e(u,a)),l=r.getOptimisticResult(a),o=!i&&b;if(d.useSyncExternalStore(d.useCallback(R=>{const S=o?r.subscribe(z.batchCalls(R)):_;return r.updateResult(),S},[r,o]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),d.useEffect(()=>{r.setOptions(a)},[a,r]),ut(a,l))throw W(a,r,n);if(ot({result:l,errorResetBoundary:n,throwOnError:a.throwOnError,query:f,suspense:a.suspense}))throw l.error;return u.getDefaultOptions().queries?._experimental_afterQuery?.(a,l),a.experimental_prefetchInRender&&!x.isServer()&&ct(l,i)&&(y?W(a,r,n):f?.promise)?.catch(_).finally(()=>{r.updateResult()}),a.notifyOnChangeProps?l:r.trackResult(l)}function vt(t,e){return lt(t,G)}export{vt as u};
|
|
2
|
-
//# sourceMappingURL=useQuery-ByZlZXlw.js.map
|