@xopcai/xopc 0.0.431 → 0.0.433
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-WqnVruhY.js → activity-store-BpYGrRXw.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CSiO9c2F.js → agent-avatar-dicebear-DTgOSv6G.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-display-D-yds6wG.js → agent-avatar-display-BUH7ljEo.js} +2 -2
- package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-_UT9C7bg.js → agent-defaults-settings-panel-B_FAikHA.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-DVzYXsAy.js → agent-plugin-dialog-DPabZaSE.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-Ds7K3D7T.js → agents-BAPYP1Ka.js} +3 -3
- package/dist/gateway/static/root/assets/{agents-admin-api-Bgv4lJ9Y.js → agents-admin-api-CXCAHNPj.js} +1 -1
- package/dist/gateway/static/root/assets/{api-Dv6Cn-Rs.js → api-DMbimMEi.js} +1 -1
- package/dist/gateway/static/root/assets/{api-C-9J9ghT.js → api-oIK4hYkJ.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-BXJrrjH5.js → app-management-settings-panel-BZ3Fy8ZR.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-oYjAVulT.js → appearance-settings-DsRTj1by.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-D95yzj-f.js → apps-page-D-n71lO1.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-DBPu3xCJ.js → archive-plugin-Bg1VTieK.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-api-DAou8Kji.js → automation-api-CLPsgcQN.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-result-state-CA7LV098.js → automation-result-state-CKVnR4KG.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-task-card-DIjI_Y1X.js → automation-task-card-D27Mw66U.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-BQwSCkmd.js → automations-page-DGNTJ8lN.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-workspace-BUFTTjBq.js → automations-workspace-DWDWy-SG.js} +2 -2
- package/dist/gateway/static/root/assets/{binary-plugins-D25P9ZxQ.js → binary-plugins-CuwSdCG5.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-BI105p1U.js → block-editor-Dtl2BG3t.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automation-inputs-DhDRvWQE.js → browser-automation-inputs-uGK086ag.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-CCPi1Bvy.js → browser-automations-page-Da_edNNS.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-control-api-BN4F-bM1.js → browser-control-api-k3OOX3bS.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-settings-page-BZXUZpjp.js → browser-settings-page-C1bSw-Jq.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-LC-yEQYo.js → capabilities-CoeuLRt6.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-u2z_KFRt.js → capabilities-DlHPLld_.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-page-B8UgQ4dD.js → capabilities-page-IcwojmJK.js} +2 -2
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-Bxn8HtEO.js → capabilities-settings-panel-CtY-bGIi.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-9Uaa-IN0.js → channels-Cn1MWBL_.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-agents-api-Cffxfzi1.js → chat-agents-api-BB0biwc7.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-chart-block-Bbk0b3TV.js → chat-chart-block-QSvjx4w6.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-page-e-xCsrdS.js → chat-page-CwP4OMdW.js} +16 -16
- package/dist/gateway/static/root/assets/{chat-terminal-dock-CQMuG-Bz.js → chat-terminal-dock-Cd51G9eG.js} +1 -1
- package/dist/gateway/static/root/assets/{command-palette-api-BRxfFgGA.js → command-palette-api-CEG10uE-.js} +1 -1
- package/dist/gateway/static/root/assets/{composer-payload-handoff-_9L2A5AZ.js → composer-payload-handoff-Bogdq9Hy.js} +1 -1
- package/dist/gateway/static/root/assets/{computer-settings-page-BIHbjBVt.js → computer-settings-page-DyAlOzqY.js} +1 -1
- package/dist/gateway/static/root/assets/{connected-providers-grid-B7ktDgqt.js → connected-providers-grid-D0lXg22c.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-BVMEg8n-.js → connector-service-page-k2rjyjrp.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-api-B07yoCzk.js → connectors-api-DtvB9Cjm.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-page-hPKaJUWY.js → connectors-page-DI_Q0CKz.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-BvEnSGZK.js → date-picker-CAankdQw.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-C1z9YDEg.js → desktop-pet-DjM73fir.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-CbbVb8GY.js → desktop-pet-settings-Rmh-GxHl.js} +1 -1
- package/dist/gateway/static/root/assets/{dev-view-store-38EmUIEC.js → dev-view-store-BgW2Riyk.js} +1 -1
- package/dist/gateway/static/root/assets/{device-pairing-wizard-Wb1EKiXA.js → device-pairing-wizard-UdzSpNa5.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-BvKDrKc4.js → directory-picker-path-field-Rkw3f7lG.js} +1 -1
- package/dist/gateway/static/root/assets/{discussion-annotation-sync-BfVzIwe2.js → discussion-annotation-sync-Dudoj_Fz.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-CB9Lu3Sq.js → extension-debug-page-DxIGAO23.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-iframe-host-BzjrVAUR.js → extension-iframe-host-63KpX6IP.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-marketplace-api-DigziAgd.js → extension-marketplace-api-yXNUkQDA.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DUa9MeaZ.js → extension-page-C811A_Ww.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-301x0rh-.js → extension-provider-C4jLFIgh.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CP9ciZUI.js → extension-settings-page-WJSw5MT0.js} +1 -1
- package/dist/gateway/static/root/assets/{file-preview-surface-BaMGmCbw.js → file-preview-surface-zE9AcaHM.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-BD4Bf8uu.js → gateway-config-swr-D6cc6W6E.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-CSd9VB7Z.js → gateway-realtime-BSRNLciy.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-BFeFfApQ.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-restart-CIUCTKYR.js → gateway-restart-Unun5hRL.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-CCqF1uZv.js → gateway-settings-DP-DV-e5.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-BsU5k8oi.js → gateway-startup-retry-C8g666Ja.js} +1 -1
- package/dist/gateway/static/root/assets/{global-defaults-api-asOZQeM8.js → global-defaults-api-BObi-1ww.js} +1 -1
- package/dist/gateway/static/root/assets/{home-page-Bb_RC1O9.js → home-page-CIcs7Mzy.js} +2 -2
- package/dist/gateway/static/root/assets/{image-generation-api-CdwYgzhU.js → image-generation-api-C2SqYNyD.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-CVnoGUyp.js → imports-page-C8ezUkOJ.js} +1 -1
- package/dist/gateway/static/root/assets/{index-BmUSsdwn.js → index-D1_PUrJf.js} +5 -5
- package/dist/gateway/static/root/assets/{install-connector-dialog-DXVOHMhS.js → install-connector-dialog-Cn4nRSyt.js} +1 -1
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BCl90SrD.js → keyboard-shortcuts-settings-BRaY4-wA.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-CcJc9xLJ.js → local-app-workbench-page-BZtVcjF3.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-CdAKoWfg.js → local-apps-page-MqP4EnJm.js} +1 -1
- package/dist/gateway/static/root/assets/{local-session-drafts-nRGeybku.js → local-session-drafts-DTq9776a.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-B7y-RVe8.js → locale-store-B6OrWgY1.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-McbSQwJI.js → logs-page-hkHBjblX.js} +1 -1
- package/dist/gateway/static/root/assets/{management-settings-BIR0BwNV.js → management-settings-DoX4eTM3.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-DFHa8rUg.js → markdown-view-DrhYZSmg.js} +1 -1
- package/dist/gateway/static/root/assets/{mcp-conversation-setup-page-Dwx4TuIr.js → mcp-conversation-setup-page-BEp5E6TD.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-BzzLV7wW.js → media-plugins-D987i9Gc.js} +1 -1
- package/dist/gateway/static/root/assets/messages-jwdBhfL9.js +3 -0
- package/dist/gateway/static/root/assets/{model-selector-YsCHu1Gn.js → model-selector-DXm4NS1_.js} +1 -1
- package/dist/gateway/static/root/assets/{models-hub-cache-BUapaPTN.js → models-hub-cache-BLcha5rx.js} +1 -1
- package/dist/gateway/static/root/assets/{note-detail-panel-CJ-dPovd.js → note-detail-panel-Cl851ivY.js} +3 -3
- package/dist/gateway/static/root/assets/note-image-lightbox-DGYRJS03.js +1 -0
- package/dist/gateway/static/root/assets/{notes-api-ulup1oFS.js → notes-api-Ddsf7FVg.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-BaFNplIr.js → notes-page-DSwA1MU1.js} +1 -1
- package/dist/gateway/static/root/assets/{oauth-api-DINa08-z.js → oauth-api-CMmu4DzH.js} +1 -1
- package/dist/gateway/static/root/assets/{oauth-provider-connect-C0PVEHC2.js → oauth-provider-connect-BkhnftBq.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-capture-button-CGfR0dsc.js → page-context-capture-button-urhQBRaN.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-draft-DhRNxc0v.js → page-context-draft-BuNUerth.js} +1 -1
- package/dist/gateway/static/root/assets/page-header-store-CEn_kPsn.js +1 -0
- package/dist/gateway/static/root/assets/{personal-avatar-DiVFO2Aw.js → personal-avatar-B49ueeZO.js} +1 -1
- package/dist/gateway/static/root/assets/{personal-page-Cvd-v9kT.js → personal-page-f05ceuFn.js} +1 -1
- package/dist/gateway/static/root/assets/{personal-settings-panel-Ds4ntiqu.js → personal-settings-panel-DLQxzPYr.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-dependencies-card-B3R6L5Qu.js → phone-dependencies-card-DjmC1Z5j.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-model-connection-BieYnAJ5.js → phone-model-connection-BRjHSgYn.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-model-picker-Bkex4Sre.js → phone-model-picker-DgIiWLhR.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-settings-page-D8PuvEuJ.js → phone-settings-page-DCZGCL_z.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-workspace-store-Cmes9gQ4.js → phone-workspace-store-DbqktZbO.js} +1 -1
- package/dist/gateway/static/root/assets/{plugin-details-dialog-DblFhnuC.js → plugin-details-dialog-D4tGKip4.js} +1 -1
- package/dist/gateway/static/root/assets/{preference-select-fields-D2-QfMN5.js → preference-select-fields-BZWqG7pu.js} +1 -1
- package/dist/gateway/static/root/assets/{product-automation-feedback-BzY3z8zu.js → product-automation-feedback-DDQUsag7.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-BKw6H0Mn.js → product-open-page-BkRP_HmA.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-VcvxaO2S.js → product-preview-content-o2Y3VNE7.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-modal-Ym6bomTW.js → product-preview-modal-7Ohx-7OR.js} +2 -2
- package/dist/gateway/static/root/assets/{project-detail-page-CFbXWvcd.js → project-detail-page-B2RsSHya.js} +1 -1
- package/dist/gateway/static/root/assets/{project-understanding-CrSkrJnM.js → project-understanding-BIMouiYX.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-Cp91_KzA.js → projects-page-C9R5u3tF.js} +1 -1
- package/dist/gateway/static/root/assets/{providers-api-CBSC3jdu.js → providers-api-BOCkRZ7X.js} +1 -1
- package/dist/gateway/static/root/assets/{recording-upload-DBHAGKZj.js → recording-upload-C6muEHEO.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-QZEjziDq.js → registry-api-Bl2guMRg.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-BdXxFQfH.js → remote-access-hub-BceSMbCs.js} +1 -1
- package/dist/gateway/static/root/assets/{resource-unavailable-BTNhcOHF.js → resource-unavailable-CUNbPkdj.js} +1 -1
- package/dist/gateway/static/root/assets/{route-preload-C-VRKwB1.js → route-preload-C1BKDjnu.js} +2 -2
- package/dist/gateway/static/root/assets/{runtime-tools-api-BDTUD8Rj.js → runtime-tools-api-LopLjgvu.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CYEzIrDf.js → runtime-tools-settings-panel-9HIPerDP.js} +1 -1
- package/dist/gateway/static/root/assets/{service-recommendation-list-CfeYH6lK.js → service-recommendation-list-CoMI6MB1.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-DVXLCZX2.js → session-api-Bfmlmn9F.js} +1 -1
- package/dist/gateway/static/root/assets/session-manager-X4UHOjjO.js +25 -0
- package/dist/gateway/static/root/assets/{sessions-page-C2CH-55n.js → sessions-page-BT0GdXdS.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-Dk9c-Z5e.js +1 -0
- package/dist/gateway/static/root/assets/{settings-advanced-section-BmrbHgQa.js → settings-advanced-section-CEorDLUp.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-mode-store-Bk_hzwPK.js → settings-mode-store-C2LZqBES.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-B6vrcc6f.js → settings-page-C_Np_6qZ.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-header-BLKI3_9N.js → settings-page-header-BAN34UQi.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-BqBVrkC9.js → settings-page-layout-B5TVFBV2.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-interaction-page-BDPte58u.js → setup-interaction-page-BYvTJW3_.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-DEefuWo3.js → setup-status-panel-UY2dH-sK.js} +1 -1
- package/dist/gateway/static/root/assets/{share-link-dialog-C2LyeNzj.js → share-link-dialog-BMcXyzr2.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-BFwEr7Ws.js → share-preview-page-UQ6eUM2_.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-CTFkLQxq.js → shares-api-DOeDN6Tm.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-CpK3yhtc.js → shares-settings-W8XhuAoL.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-api-DpicfA6o.js → skill-api-Do_c0d9n.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-list-api-B8fegRLZ.js → skill-list-api-DpHaXI2l.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-VmC8ySUy.js → skill-reload-api-DDRd9IJ2.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-BIWXS6Ki.js → skills-page-CaeJVKhO.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-BmoA92oX.js → system-settings-panel-DYWlWPJL.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-CC3Rzqq9.js → task-detail-page-De0qD7xw.js} +1 -1
- package/dist/gateway/static/root/assets/{task-result-evidence-BV-6hBVU.js → task-result-evidence-CICR5K1t.js} +1 -1
- package/dist/gateway/static/root/assets/{terminal-panel-store-BGdKE9hU.js → terminal-panel-store-BbWUcQe7.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-Dvv79Wb2.js → theme-store-TkG5mo0p.js} +1 -1
- package/dist/gateway/static/root/assets/{tracing-settings-page-B4uA4Pnz.js → tracing-settings-page-CYXEy4EG.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-BurZtvqx.js → tunnel-api-DquDm6U2.js} +1 -1
- package/dist/gateway/static/root/assets/{understanding-activity-store-C1cLL8zq.js → understanding-activity-store-Ot3wZ3oQ.js} +1 -1
- package/dist/gateway/static/root/assets/{understanding-refresh-store-C3Lr_pjY.js → understanding-refresh-store-C5KYFMaC.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-C91ZzLm9.js → usage-page-1xFO4smo.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-zkzRuUtx.js → use-autosave-HL8XRNR8.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-CoiQAgjo.js → use-composer-attachments-XRlQBdNF.js} +1 -1
- package/dist/gateway/static/root/assets/{use-file-preview-expanded-DFzy6iVy.js → use-file-preview-expanded-CW956CXS.js} +2 -2
- package/dist/gateway/static/root/assets/{use-personal-profile-BB10h9ED.js → use-personal-profile-202s6tJt.js} +1 -1
- package/dist/gateway/static/root/assets/{use-workspace-tree-sF5DcONt.js → use-workspace-tree-CjydkmH1.js} +1 -1
- package/dist/gateway/static/root/assets/{user-model-page-WFnD5utO.js → user-model-page-OGPXx3pe.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-Bqa4PeZx.js → voice-api-key-field-CxFu4MEA.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-LNO2xXHk.js → voice-config-api-MHe5Pn-A.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-input-shortcut-events-AzfhxBX7.js → voice-input-shortcut-events-B9xc1oK8.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-transcribe-api-Cb8i6dLb.js → voice-transcribe-api-CVEcB6Pe.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-CdQUiV-a.js → work-discovery-overlay-C-JoAg2D.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-page-HcUloXxf.js → work-discovery-page-B5Kx29Ru.js} +1 -1
- package/dist/gateway/static/root/assets/{working-directory-picker-modal-Dv1HUipe.js → working-directory-picker-modal-DGp9cNzH.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-api-Am2ee4R6.js → workspace-api-HBXn8pL9.js} +2 -2
- package/dist/gateway/static/root/assets/workspace-editor-agent-store-msZa42fU.js +1 -0
- package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-z5Q00v92.js → workspace-file-preview-dialog-3cpwSG2w.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-open-location-menu-4ONYaGy0.js → workspace-open-location-menu-D0VOFvuP.js} +1 -1
- package/dist/gateway/static/root/assets/{xopc-cloud-account-card-DimGN59n.js → xopc-cloud-account-card-BkdW2p3v.js} +1 -1
- package/dist/gateway/static/root/index.html +78 -78
- package/dist/package.js +1 -1
- package/dist/src/gateway/global-defaults-admin.js +1 -1
- package/dist/src/gateway/service.js +4 -4
- package/dist/src/home-intelligence/host.js +2 -2
- package/dist/src/phone/adb-driver.js +2 -2
- package/dist/src/phone/model-adapter.d.ts +2 -0
- package/dist/src/phone/model-adapter.js +10 -3
- package/dist/src/phone/reliability.js +24 -2
- package/dist/src/phone/runtime.js +6 -1
- package/dist/src/phone/ui-dump-binary.d.ts +1 -1
- package/dist/src/phone/ui-dump-binary.js +1 -1
- package/dist/src/session/client-history.d.ts +2 -0
- package/dist/src/session/client-history.js +3 -0
- package/dist/src/session/compact-history.js +1 -0
- package/package.json +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-Bxkv62qs.js +0 -1
- package/dist/gateway/static/root/assets/messages-DYDkJvXj.js +0 -3
- package/dist/gateway/static/root/assets/note-image-lightbox-ClPkeHe5.js +0 -1
- package/dist/gateway/static/root/assets/page-header-store-CoKMiYoi.js +0 -1
- package/dist/gateway/static/root/assets/session-manager-DjRWxXJG.js +0 -23
- package/dist/gateway/static/root/assets/settings-advanced-gate-BMHe9uwy.js +0 -1
- package/dist/gateway/static/root/assets/workspace-editor-agent-store-CqHcVFhS.js +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{f as i,m as a,t as o,u as s}from"./chunk-KS7C4IRE-CiwuuyV8.js";import{i as c,l,n as u,o as d}from"./locale-store-B7y-RVe8.js";import{t as f}from"./messages-DYDkJvXj.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./dist-BGTk37IG.js";import{U as b,nt as x,t as S,w as C}from"./chat-page-e-xCsrdS.js";import{t as w}from"./arrow-left-D880xG-P.js";import{t as T}from"./calendar-clock-D-quYVPe.js";import{n as E,r as D}from"./popover-select-CEMWIrtY.js";import{t as ee}from"./circle-check-C23XjkUj.js";import{t as O}from"./circle-x-DFsCKeya.js";import{t as k}from"./circle-BoO4YvTx.js";import{t as A}from"./ellipsis-0k4rZLoy.js";import{t as j}from"./external-link-DjqjBmc3.js";import{t as te}from"./folder-kanban-CpLlFI1o.js";import{t as ne}from"./folder-open-CyzJ19I9.js";import{F as re,N as M,V as ie,z as ae}from"./markdown-view-DFHa8rUg.js";import{t as oe}from"./message-square-fVE7Ghj1.js";import{t as se}from"./pause-DuPxgSxk.js";import{t as ce}from"./play-kxZvpBg8.js";import{t as le}from"./x-B_N4OPjy.js";import{t as N}from"./cn-0WouolD0.js";import{t as ue}from"./skeleton-BI5TyibZ.js";import{c as de}from"./api-C-9J9ghT.js";import{ct as fe,lt as pe}from"./session-manager-DjRWxXJG.js";import{i as me}from"./vendor-swr-CdRzEUwF.js";import{C as he,D as ge,T as _e,d as ve,f as ye,k as be,m as xe,y as Se}from"./use-composer-attachments-CoiQAgjo.js";import{t as Ce}from"./chat-agents-api-Cffxfzi1.js";import{t as P}from"./button-Cc4hUNTt.js";import{s as we}from"./file-preview-surface-BaMGmCbw.js";import{d as Te,f as Ee,h as De,m as Oe,p as ke,s as Ae}from"./composer-payload-handoff-_9L2A5AZ.js";import{t as je}from"./page-header-store-CoKMiYoi.js";import{t as Me}from"./agent-avatar-display-D-yds6wG.js";import{t as Ne}from"./confirm-dialog-D7dQJytv.js";import{l as Pe,m as Fe,o as Ie,r as F,t as Le,u as Re}from"./dist-ZrL34Ps4.js";import{C as I,_ as ze,a as Be,c as L,d as Ve,l as He,u as Ue,w as We}from"./automation-task-card-DIjI_Y1X.js";import{t as Ge}from"./date-picker-BvEnSGZK.js";import{t as Ke}from"./automation-api-DAou8Kji.js";import{n as qe}from"./date-formatters-DukWSVwc.js";import{n as Je,r as R,t as Ye}from"./task-result-evidence-BV-6hBVU.js";import{t as Xe}from"./page-context-capture-button-CGfR0dsc.js";import{t as Ze}from"./dependency-picker-XjPB8FJS.js";var z=e(t(),1),B=n(),V=r();function Qe(e,t,n){let r=new URLSearchParams(e),i=r.getAll(`taskPanel`).filter(e=>e!==t&&e!==`${t}:closed`);r.delete(`taskPanel`);for(let e of i)r.append(`taskPanel`,e);return r.append(`taskPanel`,n?t:`${t}:closed`),r}function $e(e){let t=(0,B.c)(24),n,r,i,o,s,c;t[0]===e?(n=t[1],r=t[2],i=t[3],o=t[4],s=t[5],c=t[6]):({panelId:r,title:c,defaultOpen:s,children:n,summaryClassName:o,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=o,t[5]=s,t[6]=c);let l=s!==void 0&&s,[u,d]=a(),f;if(t[7]!==l||t[8]!==r||t[9]!==u){let e=u.getAll(`taskPanel`);f=e.includes(r)||l&&!e.includes(`${r}:closed`),t[7]=l,t[8]=r,t[9]=u,t[10]=f}else f=t[10];let p=f,m=o??`cursor-pointer py-2 text-xs text-fg-muted hover:text-fg`,h;t[11]!==p||t[12]!==r||t[13]!==d?(h=e=>{e.preventDefault(),d(e=>Qe(e,r,!p),{preventScrollReset:!0})},t[11]=p,t[12]=r,t[13]=d,t[14]=h):h=t[14];let g;t[15]!==m||t[16]!==h||t[17]!==c?(g=(0,V.jsx)(`summary`,{className:m,onClick:h,children:c}),t[15]=m,t[16]=h,t[17]=c,t[18]=g):g=t[18];let _;return t[19]!==n||t[20]!==p||t[21]!==i||t[22]!==g?(_=(0,V.jsxs)(`details`,{...i,open:p,children:[g,n]}),t[19]=n,t[20]=p,t[21]=i,t[22]=g,t[23]=_):_=t[23],_}var et=`Default criteria were not expanded into concrete acceptance items; broad completion cannot certify item coverage.`;function tt(e){let t=(0,B.c)(50),{criterion:n,index:r,language:i,closed:a,pending:o,onReview:s,projectId:c,conversationId:l}=e,u=i===`zh`,[d,f]=(0,z.useState)(!1),p=n.status===`passed`?ee:n.status===`failed`?O:k,m=n.status===`passed`?u?`已通过`:`Passed`:n.status===`failed`?u?`未通过`:`Failed`:u?`待验收`:`Awaiting review`,h=n.review?u?`用户确认`:`User reviewed`:n.status===`passed`||n.status===`failed`?u?`自动核验`:`Automatic verification`:void 0,g;t[0]!==r||t[1]!==s?(g=async function(e){await s(r,e)&&f(!1)},t[0]=r,t[1]=s,t[2]=g):g=t[2];let _=g,v=n.status===`passed`?`text-success`:n.status===`failed`?`text-danger`:`text-fg-subtle`,y;t[3]===v?y=t[4]:(y=N(`mt-0.5 size-4 shrink-0`,v),t[3]=v,t[4]=y);let b;t[5]!==p||t[6]!==y?(b=(0,V.jsx)(p,{"aria-hidden":!0,className:y}),t[5]=p,t[6]=y,t[7]=b):b=t[7];let x;t[8]===n.text?x=t[9]:(x=(0,V.jsx)(`p`,{className:`whitespace-pre-wrap break-words text-sm leading-6 text-fg [overflow-wrap:anywhere]`,children:n.text}),t[8]=n.text,t[9]=x);let S;t[10]===m?S=t[11]:(S=(0,V.jsx)(`span`,{children:m}),t[10]=m,t[11]=S);let C;t[12]===h?C=t[13]:(C=h?(0,V.jsxs)(`span`,{children:[`· `,h]}):null,t[12]=h,t[13]=C);let w;t[14]!==a||t[15]!==n.review||t[16]!==d||t[17]!==o||t[18]!==u?(w=n.review&&!a&&!d?(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:o,onClick:()=>f(!0),children:u?`更改判定`:`Change review`}):null,t[14]=a,t[15]=n.review,t[16]=d,t[17]=o,t[18]=u,t[19]=w):w=t[19];let T;t[20]!==a||t[21]!==n.review||t[22]!==d||t[23]!==o||t[24]!==_||t[25]!==u?(T=!a&&(!n.review||d)?(0,V.jsxs)(`div`,{className:`ml-auto flex flex-wrap gap-2`,children:[(0,V.jsx)(P,{variant:`secondary`,className:`min-h-9 px-3 text-xs`,disabled:o,onClick:()=>void _(`passed`),children:u?`确认通过`:`Mark passed`}),(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-3 text-xs`,disabled:o,onClick:()=>void _(`failed`),children:u?`标记未通过`:`Mark failed`}),d?(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:o,onClick:()=>f(!1),children:u?`取消`:`Cancel`}):null]}):null,t[20]=a,t[21]=n.review,t[22]=d,t[23]=o,t[24]=_,t[25]=u,t[26]=T):T=t[26];let E;t[27]!==S||t[28]!==C||t[29]!==w||t[30]!==T?(E=(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-2 text-xs text-fg-muted`,children:[S,C,w,T]}),t[27]=S,t[28]=C,t[29]=w,t[30]=T,t[31]=E):E=t[31];let D;t[32]!==l||t[33]!==n.evidence||t[34]!==n.method||t[35]!==n.note||t[36]!==n.review||t[37]!==n.verificationStatus||t[38]!==r||t[39]!==i||t[40]!==c||t[41]!==u?(D=n.evidence.length>0||n.method||n.review||n.note?(0,V.jsx)($e,{panelId:`criterion:${r}:evidence`,title:(0,V.jsxs)(V.Fragment,{children:[u?`查看依据`:`View evidence`,n.evidence.length>0?` · ${n.evidence.length}`:``]}),summaryClassName:`min-h-9 cursor-pointer py-2 text-xs text-fg-muted hover:text-fg`,children:(0,V.jsxs)(`div`,{className:`space-y-2 border-l border-edge pl-3 text-xs leading-5 text-fg-muted`,children:[n.method?(0,V.jsxs)(`p`,{children:[u?`自动核验`:`Automatic verification`,` · `,n.verificationStatus===`passed`?u?`通过`:`Passed`:n.verificationStatus===`failed`?u?`未通过`:`Failed`:u?`未核验`:`Unverified`,n.method===`model_reviewed`?u?` · 模型审阅`:` · Model review`:``]}):null,n.review?(0,V.jsxs)(`p`,{children:[u?`人工判定`:`User review`,` · `,qe(n.review.reviewedAt,i)]}):null,n.note&&n.note!==et?(0,V.jsx)(R,{content:n.note,contentKey:`criterion:${r}:note`,language:i,markdown:!1}):null,(0,V.jsx)(Ye,{evidence:n.evidence,projectId:c,conversationId:l,language:i})]})}):null,t[32]=l,t[33]=n.evidence,t[34]=n.method,t[35]=n.note,t[36]=n.review,t[37]=n.verificationStatus,t[38]=r,t[39]=i,t[40]=c,t[41]=u,t[42]=D):D=t[42];let A;t[43]!==E||t[44]!==D||t[45]!==x?(A=(0,V.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[x,E,D]}),t[43]=E,t[44]=D,t[45]=x,t[46]=A):A=t[46];let j;return t[47]!==A||t[48]!==b?(j=(0,V.jsxs)(`li`,{className:`flex min-w-0 items-start gap-3 py-4`,children:[b,A]}),t[47]=A,t[48]=b,t[49]=j):j=t[49],j}function nt(e){let t=(0,B.c)(41),{criteria:n,language:r,closed:i,pending:a,canComplete:o,completionPending:s,blockedReason:c,error:l,onReview:u,onComplete:d,projectId:f,conversationId:p}=e,m=r===`zh`,h;t[0]===n?h=t[1]:(h=n.some(rt),t[0]=n,t[1]=h);let g=h,_;t[2]!==g||t[3]!==m?(_=g?(0,V.jsx)($e,{panelId:`acceptance:diagnostic`,title:m?`自动核验未完成:验收标准过于宽泛`:`Automatic verification incomplete: criteria are too broad`,className:`mb-2 text-xs leading-5 text-fg-muted`,children:(0,V.jsx)(`p`,{className:`mt-2 break-words`,children:et})}):null,t[2]=g,t[3]=m,t[4]=_):_=t[4];let v;if(t[5]!==i||t[6]!==p||t[7]!==n||t[8]!==r||t[9]!==u||t[10]!==a||t[11]!==f){let e;t[13]!==i||t[14]!==p||t[15]!==r||t[16]!==u||t[17]!==a||t[18]!==f?(e=(e,t)=>(0,V.jsx)(tt,{criterion:e,index:t,language:r,closed:i,pending:a,onReview:u,projectId:f,conversationId:p},`${t}:${e.text}`),t[13]=i,t[14]=p,t[15]=r,t[16]=u,t[17]=a,t[18]=f,t[19]=e):e=t[19],v=n.map(e),t[5]=i,t[6]=p,t[7]=n,t[8]=r,t[9]=u,t[10]=a,t[11]=f,t[12]=v}else v=t[12];let y;t[20]===v?y=t[21]:(y=(0,V.jsx)(`ul`,{className:`divide-y divide-edge-subtle`,children:v}),t[20]=v,t[21]=y);let b;t[22]!==n.length||t[23]!==m?(b=n.length===0?(0,V.jsx)(`p`,{className:`py-4 text-sm text-fg-muted`,children:m?`尚未定义验收标准`:`No acceptance criteria defined`}):null,t[22]=n.length,t[23]=m,t[24]=b):b=t[24];let x;t[25]===l?x=t[26]:(x=l?(0,V.jsx)(`p`,{role:`alert`,className:`my-2 text-sm text-danger`,children:l}):null,t[25]=l,t[26]=x);let S;t[27]!==c||t[28]!==o||t[29]!==i||t[30]!==s||t[31]!==d||t[32]!==a||t[33]!==m?(S=i?null:(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-3 border-t border-edge-subtle pt-4`,children:[!o&&c?(0,V.jsx)(`p`,{className:`text-xs text-fg-muted`,children:c}):null,(0,V.jsx)(P,{variant:`primary`,disabled:!o||a||s,onClick:d,children:m?`验收通过,完成任务`:`Accept and complete task`})]}),t[27]=c,t[28]=o,t[29]=i,t[30]=s,t[31]=d,t[32]=a,t[33]=m,t[34]=S):S=t[34];let C;return t[35]!==_||t[36]!==y||t[37]!==b||t[38]!==x||t[39]!==S?(C=(0,V.jsxs)(V.Fragment,{children:[_,y,b,x,S]}),t[35]=_,t[36]=y,t[37]=b,t[38]=x,t[39]=S,t[40]=C):C=t[40],C}function rt(e){return e.note===et}function it(e){let t=(0,B.c)(22),{detail:n,language:r}=e,i=r===`zh`,a;if(t[0]!==n||t[1]!==r||t[2]!==i){let e=Ee(n),s;if(t[4]!==n.runs||t[5]!==n.task){let e;t[7]===n.task?e=t[8]:(e=e=>e.contractVersion===n.task.latestContractVersion,t[7]=n.task,t[8]=e),s=new Set(n.runs.filter(e).map(lt)),t[4]=n.runs,t[5]=n.task,t[6]=s}else s=t[6];let c=s,l;if(t[9]!==n.context||t[10]!==n.receipts||t[11]!==c){l=n.context.filter(ct).map(st);let e=new Set(l.map(ot).filter(Boolean)),r;t[13]===c?r=t[14]:(r=e=>c.has(e.runId),t[13]=c,t[14]=r);for(let t of n.receipts.filter(r))for(let n of t.evidence.filter(at))n.uri&&e.has(n.uri)||(n.uri&&e.add(n.uri),l.push(n));t[9]=n.context,t[10]=n.receipts,t[11]=c,t[12]=l}else l=t[12];let u=e?.summary.trim(),d=u&&u.length<=160&&!u.includes(`
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{f as i,m as a,t as o,u as s}from"./chunk-KS7C4IRE-CiwuuyV8.js";import{i as c,l,n as u,o as d}from"./locale-store-B6OrWgY1.js";import{t as f}from"./messages-jwdBhfL9.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./dist-BGTk37IG.js";import{U as b,nt as x,t as S,w as C}from"./chat-page-CwP4OMdW.js";import{t as w}from"./arrow-left-D880xG-P.js";import{t as T}from"./calendar-clock-D-quYVPe.js";import{n as E,r as D}from"./popover-select-CEMWIrtY.js";import{t as ee}from"./circle-check-C23XjkUj.js";import{t as O}from"./circle-x-DFsCKeya.js";import{t as k}from"./circle-BoO4YvTx.js";import{t as A}from"./ellipsis-0k4rZLoy.js";import{t as j}from"./external-link-DjqjBmc3.js";import{t as te}from"./folder-kanban-CpLlFI1o.js";import{t as ne}from"./folder-open-CyzJ19I9.js";import{F as re,N as M,V as ie,z as ae}from"./markdown-view-DrhYZSmg.js";import{t as oe}from"./message-square-fVE7Ghj1.js";import{t as se}from"./pause-DuPxgSxk.js";import{t as ce}from"./play-kxZvpBg8.js";import{t as le}from"./x-B_N4OPjy.js";import{t as N}from"./cn-0WouolD0.js";import{t as ue}from"./skeleton-BI5TyibZ.js";import{c as de}from"./api-oIK4hYkJ.js";import{ct as fe,lt as pe}from"./session-manager-X4UHOjjO.js";import{i as me}from"./vendor-swr-CdRzEUwF.js";import{C as he,D as ge,T as _e,d as ve,f as ye,k as be,m as xe,y as Se}from"./use-composer-attachments-XRlQBdNF.js";import{t as Ce}from"./chat-agents-api-BB0biwc7.js";import{t as P}from"./button-Cc4hUNTt.js";import{s as we}from"./file-preview-surface-zE9AcaHM.js";import{d as Te,f as Ee,h as De,m as Oe,p as ke,s as Ae}from"./composer-payload-handoff-Bogdq9Hy.js";import{t as je}from"./page-header-store-CEn_kPsn.js";import{t as Me}from"./agent-avatar-display-BUH7ljEo.js";import{t as Ne}from"./confirm-dialog-D7dQJytv.js";import{l as Pe,m as Fe,o as Ie,r as F,t as Le,u as Re}from"./dist-ZrL34Ps4.js";import{C as I,_ as ze,a as Be,c as L,d as Ve,l as He,u as Ue,w as We}from"./automation-task-card-D27Mw66U.js";import{t as Ge}from"./date-picker-CAankdQw.js";import{t as Ke}from"./automation-api-CLPsgcQN.js";import{n as qe}from"./date-formatters-DukWSVwc.js";import{n as Je,r as R,t as Ye}from"./task-result-evidence-CICR5K1t.js";import{t as Xe}from"./page-context-capture-button-urhQBRaN.js";import{t as Ze}from"./dependency-picker-XjPB8FJS.js";var z=e(t(),1),B=n(),V=r();function Qe(e,t,n){let r=new URLSearchParams(e),i=r.getAll(`taskPanel`).filter(e=>e!==t&&e!==`${t}:closed`);r.delete(`taskPanel`);for(let e of i)r.append(`taskPanel`,e);return r.append(`taskPanel`,n?t:`${t}:closed`),r}function $e(e){let t=(0,B.c)(24),n,r,i,o,s,c;t[0]===e?(n=t[1],r=t[2],i=t[3],o=t[4],s=t[5],c=t[6]):({panelId:r,title:c,defaultOpen:s,children:n,summaryClassName:o,...i}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=i,t[4]=o,t[5]=s,t[6]=c);let l=s!==void 0&&s,[u,d]=a(),f;if(t[7]!==l||t[8]!==r||t[9]!==u){let e=u.getAll(`taskPanel`);f=e.includes(r)||l&&!e.includes(`${r}:closed`),t[7]=l,t[8]=r,t[9]=u,t[10]=f}else f=t[10];let p=f,m=o??`cursor-pointer py-2 text-xs text-fg-muted hover:text-fg`,h;t[11]!==p||t[12]!==r||t[13]!==d?(h=e=>{e.preventDefault(),d(e=>Qe(e,r,!p),{preventScrollReset:!0})},t[11]=p,t[12]=r,t[13]=d,t[14]=h):h=t[14];let g;t[15]!==m||t[16]!==h||t[17]!==c?(g=(0,V.jsx)(`summary`,{className:m,onClick:h,children:c}),t[15]=m,t[16]=h,t[17]=c,t[18]=g):g=t[18];let _;return t[19]!==n||t[20]!==p||t[21]!==i||t[22]!==g?(_=(0,V.jsxs)(`details`,{...i,open:p,children:[g,n]}),t[19]=n,t[20]=p,t[21]=i,t[22]=g,t[23]=_):_=t[23],_}var et=`Default criteria were not expanded into concrete acceptance items; broad completion cannot certify item coverage.`;function tt(e){let t=(0,B.c)(50),{criterion:n,index:r,language:i,closed:a,pending:o,onReview:s,projectId:c,conversationId:l}=e,u=i===`zh`,[d,f]=(0,z.useState)(!1),p=n.status===`passed`?ee:n.status===`failed`?O:k,m=n.status===`passed`?u?`已通过`:`Passed`:n.status===`failed`?u?`未通过`:`Failed`:u?`待验收`:`Awaiting review`,h=n.review?u?`用户确认`:`User reviewed`:n.status===`passed`||n.status===`failed`?u?`自动核验`:`Automatic verification`:void 0,g;t[0]!==r||t[1]!==s?(g=async function(e){await s(r,e)&&f(!1)},t[0]=r,t[1]=s,t[2]=g):g=t[2];let _=g,v=n.status===`passed`?`text-success`:n.status===`failed`?`text-danger`:`text-fg-subtle`,y;t[3]===v?y=t[4]:(y=N(`mt-0.5 size-4 shrink-0`,v),t[3]=v,t[4]=y);let b;t[5]!==p||t[6]!==y?(b=(0,V.jsx)(p,{"aria-hidden":!0,className:y}),t[5]=p,t[6]=y,t[7]=b):b=t[7];let x;t[8]===n.text?x=t[9]:(x=(0,V.jsx)(`p`,{className:`whitespace-pre-wrap break-words text-sm leading-6 text-fg [overflow-wrap:anywhere]`,children:n.text}),t[8]=n.text,t[9]=x);let S;t[10]===m?S=t[11]:(S=(0,V.jsx)(`span`,{children:m}),t[10]=m,t[11]=S);let C;t[12]===h?C=t[13]:(C=h?(0,V.jsxs)(`span`,{children:[`· `,h]}):null,t[12]=h,t[13]=C);let w;t[14]!==a||t[15]!==n.review||t[16]!==d||t[17]!==o||t[18]!==u?(w=n.review&&!a&&!d?(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:o,onClick:()=>f(!0),children:u?`更改判定`:`Change review`}):null,t[14]=a,t[15]=n.review,t[16]=d,t[17]=o,t[18]=u,t[19]=w):w=t[19];let T;t[20]!==a||t[21]!==n.review||t[22]!==d||t[23]!==o||t[24]!==_||t[25]!==u?(T=!a&&(!n.review||d)?(0,V.jsxs)(`div`,{className:`ml-auto flex flex-wrap gap-2`,children:[(0,V.jsx)(P,{variant:`secondary`,className:`min-h-9 px-3 text-xs`,disabled:o,onClick:()=>void _(`passed`),children:u?`确认通过`:`Mark passed`}),(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-3 text-xs`,disabled:o,onClick:()=>void _(`failed`),children:u?`标记未通过`:`Mark failed`}),d?(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:o,onClick:()=>f(!1),children:u?`取消`:`Cancel`}):null]}):null,t[20]=a,t[21]=n.review,t[22]=d,t[23]=o,t[24]=_,t[25]=u,t[26]=T):T=t[26];let E;t[27]!==S||t[28]!==C||t[29]!==w||t[30]!==T?(E=(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-2 text-xs text-fg-muted`,children:[S,C,w,T]}),t[27]=S,t[28]=C,t[29]=w,t[30]=T,t[31]=E):E=t[31];let D;t[32]!==l||t[33]!==n.evidence||t[34]!==n.method||t[35]!==n.note||t[36]!==n.review||t[37]!==n.verificationStatus||t[38]!==r||t[39]!==i||t[40]!==c||t[41]!==u?(D=n.evidence.length>0||n.method||n.review||n.note?(0,V.jsx)($e,{panelId:`criterion:${r}:evidence`,title:(0,V.jsxs)(V.Fragment,{children:[u?`查看依据`:`View evidence`,n.evidence.length>0?` · ${n.evidence.length}`:``]}),summaryClassName:`min-h-9 cursor-pointer py-2 text-xs text-fg-muted hover:text-fg`,children:(0,V.jsxs)(`div`,{className:`space-y-2 border-l border-edge pl-3 text-xs leading-5 text-fg-muted`,children:[n.method?(0,V.jsxs)(`p`,{children:[u?`自动核验`:`Automatic verification`,` · `,n.verificationStatus===`passed`?u?`通过`:`Passed`:n.verificationStatus===`failed`?u?`未通过`:`Failed`:u?`未核验`:`Unverified`,n.method===`model_reviewed`?u?` · 模型审阅`:` · Model review`:``]}):null,n.review?(0,V.jsxs)(`p`,{children:[u?`人工判定`:`User review`,` · `,qe(n.review.reviewedAt,i)]}):null,n.note&&n.note!==et?(0,V.jsx)(R,{content:n.note,contentKey:`criterion:${r}:note`,language:i,markdown:!1}):null,(0,V.jsx)(Ye,{evidence:n.evidence,projectId:c,conversationId:l,language:i})]})}):null,t[32]=l,t[33]=n.evidence,t[34]=n.method,t[35]=n.note,t[36]=n.review,t[37]=n.verificationStatus,t[38]=r,t[39]=i,t[40]=c,t[41]=u,t[42]=D):D=t[42];let A;t[43]!==E||t[44]!==D||t[45]!==x?(A=(0,V.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[x,E,D]}),t[43]=E,t[44]=D,t[45]=x,t[46]=A):A=t[46];let j;return t[47]!==A||t[48]!==b?(j=(0,V.jsxs)(`li`,{className:`flex min-w-0 items-start gap-3 py-4`,children:[b,A]}),t[47]=A,t[48]=b,t[49]=j):j=t[49],j}function nt(e){let t=(0,B.c)(41),{criteria:n,language:r,closed:i,pending:a,canComplete:o,completionPending:s,blockedReason:c,error:l,onReview:u,onComplete:d,projectId:f,conversationId:p}=e,m=r===`zh`,h;t[0]===n?h=t[1]:(h=n.some(rt),t[0]=n,t[1]=h);let g=h,_;t[2]!==g||t[3]!==m?(_=g?(0,V.jsx)($e,{panelId:`acceptance:diagnostic`,title:m?`自动核验未完成:验收标准过于宽泛`:`Automatic verification incomplete: criteria are too broad`,className:`mb-2 text-xs leading-5 text-fg-muted`,children:(0,V.jsx)(`p`,{className:`mt-2 break-words`,children:et})}):null,t[2]=g,t[3]=m,t[4]=_):_=t[4];let v;if(t[5]!==i||t[6]!==p||t[7]!==n||t[8]!==r||t[9]!==u||t[10]!==a||t[11]!==f){let e;t[13]!==i||t[14]!==p||t[15]!==r||t[16]!==u||t[17]!==a||t[18]!==f?(e=(e,t)=>(0,V.jsx)(tt,{criterion:e,index:t,language:r,closed:i,pending:a,onReview:u,projectId:f,conversationId:p},`${t}:${e.text}`),t[13]=i,t[14]=p,t[15]=r,t[16]=u,t[17]=a,t[18]=f,t[19]=e):e=t[19],v=n.map(e),t[5]=i,t[6]=p,t[7]=n,t[8]=r,t[9]=u,t[10]=a,t[11]=f,t[12]=v}else v=t[12];let y;t[20]===v?y=t[21]:(y=(0,V.jsx)(`ul`,{className:`divide-y divide-edge-subtle`,children:v}),t[20]=v,t[21]=y);let b;t[22]!==n.length||t[23]!==m?(b=n.length===0?(0,V.jsx)(`p`,{className:`py-4 text-sm text-fg-muted`,children:m?`尚未定义验收标准`:`No acceptance criteria defined`}):null,t[22]=n.length,t[23]=m,t[24]=b):b=t[24];let x;t[25]===l?x=t[26]:(x=l?(0,V.jsx)(`p`,{role:`alert`,className:`my-2 text-sm text-danger`,children:l}):null,t[25]=l,t[26]=x);let S;t[27]!==c||t[28]!==o||t[29]!==i||t[30]!==s||t[31]!==d||t[32]!==a||t[33]!==m?(S=i?null:(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-3 border-t border-edge-subtle pt-4`,children:[!o&&c?(0,V.jsx)(`p`,{className:`text-xs text-fg-muted`,children:c}):null,(0,V.jsx)(P,{variant:`primary`,disabled:!o||a||s,onClick:d,children:m?`验收通过,完成任务`:`Accept and complete task`})]}),t[27]=c,t[28]=o,t[29]=i,t[30]=s,t[31]=d,t[32]=a,t[33]=m,t[34]=S):S=t[34];let C;return t[35]!==_||t[36]!==y||t[37]!==b||t[38]!==x||t[39]!==S?(C=(0,V.jsxs)(V.Fragment,{children:[_,y,b,x,S]}),t[35]=_,t[36]=y,t[37]=b,t[38]=x,t[39]=S,t[40]=C):C=t[40],C}function rt(e){return e.note===et}function it(e){let t=(0,B.c)(22),{detail:n,language:r}=e,i=r===`zh`,a;if(t[0]!==n||t[1]!==r||t[2]!==i){let e=Ee(n),s;if(t[4]!==n.runs||t[5]!==n.task){let e;t[7]===n.task?e=t[8]:(e=e=>e.contractVersion===n.task.latestContractVersion,t[7]=n.task,t[8]=e),s=new Set(n.runs.filter(e).map(lt)),t[4]=n.runs,t[5]=n.task,t[6]=s}else s=t[6];let c=s,l;if(t[9]!==n.context||t[10]!==n.receipts||t[11]!==c){l=n.context.filter(ct).map(st);let e=new Set(l.map(ot).filter(Boolean)),r;t[13]===c?r=t[14]:(r=e=>c.has(e.runId),t[13]=c,t[14]=r);for(let t of n.receipts.filter(r))for(let n of t.evidence.filter(at))n.uri&&e.has(n.uri)||(n.uri&&e.add(n.uri),l.push(n));t[9]=n.context,t[10]=n.receipts,t[11]=c,t[12]=l}else l=t[12];let u=e?.summary.trim(),d=u&&u.length<=160&&!u.includes(`
|
|
2
2
|
`)&&!/\b(?:Claim|Criterion|Research claim)\b|c-ac\d|Default criteria were not/i.test(u)?u:void 0,f=i?`交付结果`:`Deliverables`,p;t[15]===f?p=t[16]:(p=(0,V.jsx)(`h2`,{id:`task-results-heading`,className:`text-sm font-semibold text-fg`,children:f}),t[15]=f,t[16]=p);let m;t[17]!==n||t[18]!==l||t[19]!==r||t[20]!==i?(m=l.length>0?(0,V.jsx)(Ye,{evidence:l,language:r,projectId:n.task.projectId,conversationId:n.conversation.activeConversationId??void 0,compact:!0}):(0,V.jsx)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:i?`尚无可查看的交付物`:`No deliverables available yet`}),t[17]=n,t[18]=l,t[19]=r,t[20]=i,t[21]=m):m=t[21],a=(0,V.jsxs)(`section`,{"aria-label":i?`交付结果`:`Deliverables`,className:`rounded-xl border border-edge-subtle bg-surface-panel p-4`,children:[p,d?(0,V.jsx)(`p`,{className:`mt-2 break-words text-sm leading-6 text-fg-muted [overflow-wrap:anywhere]`,children:d}):null,e&&e.completionVerdict!==`achieved`?(0,V.jsx)(`p`,{className:`mt-2 text-xs text-fg-muted`,children:i?`本次执行尚未报告目标全部达成。`:`This run has not reported the full goal achieved.`}):null,m,e?null:(0,V.jsx)(`p`,{className:`mt-2 text-xs text-fg-subtle`,children:i?`尚无本版任务的执行结果`:`No run result for this task version`}),e&&(e.needsUser||e.remainingWork.length>0||e.nextAction||e.failure)?(0,V.jsxs)(`div`,{className:`mt-4 space-y-2 border-t border-edge-subtle pt-3`,"aria-label":i?`执行待办`:`Run follow-up`,children:[(0,V.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:e.needsUser?i?`需要你决定`:`Your decision needed`:i?`待处理事项`:`Remaining work`}),e.remainingWork.length>0?(0,V.jsx)(`ul`,{className:`space-y-2 text-sm leading-6 text-fg`,children:[...new Set(e.remainingWork)].map(H)}):null,e.nextAction?(0,V.jsx)(`p`,{className:`whitespace-pre-wrap break-words text-sm leading-6 text-fg [overflow-wrap:anywhere]`,children:e.nextAction}):null,e.failure?(0,V.jsx)(`p`,{className:`whitespace-pre-wrap break-words text-sm leading-6 text-danger [overflow-wrap:anywhere]`,children:e.failure.recoveryAction}):null,e.needsUser?(0,V.jsx)(o,{className:`inline-flex min-h-9 items-center rounded-sm text-xs font-medium text-accent-fg hover:underline focus-visible:ring-2 focus-visible:ring-accent/40`,to:M(n.task.id),children:i?`查看并决定`:`Review and decide`}):null]}):null]}),t[0]=n,t[1]=r,t[2]=i,t[3]=a}else a=t[3];return a}function H(e){return(0,V.jsx)(`li`,{className:`whitespace-pre-wrap break-words [overflow-wrap:anywhere]`,children:e},e)}function at(e){return e.kind===`artifact`}function ot(e){return e.uri}function st(e){return{kind:[`file`,`url`].includes(e.targetKind)?`artifact`:`source`,title:e.title??e.targetId,summary:``,...[`file`,`url`].includes(e.targetKind)?{uri:e.targetId}:{},provenance:`user`,strength:`observed`,observedAt:0}}function ct(e){return e.role===`deliverable`}function lt(e){return e.id}function ut(e){let t=(0,B.c)(13),{detail:n,language:r}=e,i=r===`zh`,a=Te(r),o;t[0]===n?o=t[1]:(o=Ee(n),t[0]=n,t[1]=o);let s=o,c;t[2]===s?.runId?c=t[3]:(c=e=>e.runId!==s?.runId,t[2]=s?.runId,t[3]=c);let l=n.receipts.filter(c),[u,d]=(0,z.useState)(`idle`),f;t[4]===s?f=t[5]:(f=async function(e){if(s){d(`pending`);try{await _e(s.runId,e),d(`saved`)}catch{d(`failed`)}}},t[4]=s,t[5]=f);let p=f,m;t[6]!==n||t[7]!==r?(m=(0,V.jsx)(b,{detail:n,language:r}),t[6]=n,t[7]=r,t[8]=m):m=t[8];let h=s?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,V.jsx)(`h3`,{className:`text-sm font-medium text-fg`,children:a.latestResult}),(0,V.jsxs)(`span`,{className:`text-xs text-fg-muted`,children:[a.receiptStatuses[s.status],` · `,a.verificationStatuses[s.verification.status]]})]}),(0,V.jsx)(R,{content:s.summary,contentKey:`${n.task.id}:result:${s.runId}`,language:r}),s.evidence.length>0?(0,V.jsxs)(`details`,{children:[(0,V.jsxs)(`summary`,{className:`cursor-pointer py-2 text-xs text-fg-muted`,children:[i?`验证依据与执行产物`:`Evidence and artifacts`,` · `,s.evidence.length]}),(0,V.jsx)(Ye,{evidence:s.evidence,projectId:n.task.projectId,conversationId:n.conversation.activeConversationId??void 0,language:r})]}):null,(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 border-t border-edge-subtle pt-3`,children:[(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:u===`pending`,onClick:()=>void p(`helpful`),children:a.doneWell}),(0,V.jsx)(P,{variant:`ghost`,className:`min-h-9 px-2 text-xs`,disabled:u===`pending`,onClick:()=>void p(`not_helpful`),children:a.needsFix}),u===`saved`?(0,V.jsx)(`span`,{role:`status`,className:`text-xs text-fg-muted`,children:i?`反馈已记录`:`Feedback saved`}):null,u===`failed`?(0,V.jsx)(`span`,{role:`alert`,className:`text-xs text-danger`,children:a.actionFailed}):null]})]}):null,g=l.length>0?(0,V.jsxs)(`details`,{className:`border-t border-edge-subtle pt-3`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer py-2 text-xs text-fg-muted`,children:a.executionHistory.replace(`{{count}}`,String(l.length))}),(0,V.jsx)(`div`,{className:`mt-3 space-y-4`,children:l.map(e=>(0,V.jsxs)(`article`,{className:`space-y-2 rounded-lg bg-surface-hover p-3`,children:[(0,V.jsx)(`p`,{className:`text-xs text-fg-muted`,children:a.receiptStatuses[e.status]}),(0,V.jsx)(R,{content:e.summary,contentKey:`${n.task.id}:result:${e.runId}`,language:r})]},e.runId))})]}):null,_;return t[9]!==m||t[10]!==h||t[11]!==g?(_=(0,V.jsxs)(`div`,{className:`space-y-4`,children:[m,h,g]}),t[9]=m,t[10]=h,t[11]=g,t[12]=_):_=t[12],_}function dt(e){let t=(0,B.c)(33),{changes:n,language:r}=e,i=r===`zh`,a;t[0]===i?a=t[1]:(a=i?{backlog:`待办池`,ready:`就绪`,active:`进行中`,review:`待验收`,closed:`已关闭`}:{backlog:`Backlog`,ready:`Ready`,active:`Active`,review:`Review`,closed:`Closed`},t[0]=i,t[1]=a);let o=a,s;t[2]===i?s=t[3]:(s=i?{board:`看板`,mobile:`移动端`,api:`手动操作`,runtime:`自动流转`,undo:`撤销`}:{board:`Board`,mobile:`Mobile`,api:`Manual update`,runtime:`Automatic`,undo:`Undo`},t[2]=i,t[3]=s);let c=s,l;t[4]===i?l=t[5]:(l=i?{done:`完成`,cancelled:`取消`,duplicate:`重复`,wont_do:`不做`}:{done:`Done`,cancelled:`Cancelled`,duplicate:`Duplicate`,wont_do:`Won’t do`},t[4]=i,t[5]=l);let u=l,d;t[6]===i?d=t[7]:(d=i?{user:`用户`,agent:`Agent`,system:`系统`,integration:`外部服务`}:{user:`User`,agent:`Agent`,system:`System`,integration:`Integration`},t[6]=i,t[7]=d);let f=d,p=i?`变更记录`:`Change log`,m;t[8]!==n.length||t[9]!==p?(m=(0,V.jsxs)(`summary`,{className:`cursor-pointer text-sm font-semibold text-fg`,children:[p,` (`,n.length,`)`]}),t[8]=n.length,t[9]=p,t[10]=m):m=t[10];let h;if(t[11]!==f||t[12]!==n||t[13]!==r||t[14]!==o||t[15]!==u||t[16]!==c){let e;t[18]!==f||t[19]!==r||t[20]!==o||t[21]!==u||t[22]!==c?(e=e=>(0,V.jsxs)(`li`,{className:`text-sm text-fg`,children:[(0,V.jsxs)(`div`,{children:[o[e.fromPhase],e.fromResolution?` · ${u[e.fromResolution]}`:``,` → `,o[e.toPhase],e.toResolution?` · ${u[e.toResolution]}`:``]}),(0,V.jsxs)(`div`,{className:`mt-1 text-xs text-fg-muted`,children:[f[e.actor.kind],e.actor.id?` (${e.actor.id})`:``,` · `,c[e.source],` · `,(0,V.jsx)(`time`,{dateTime:new Date(e.createdAt).toISOString(),children:qe(e.createdAt,r)})]})]},e.id),t[18]=f,t[19]=r,t[20]=o,t[21]=u,t[22]=c,t[23]=e):e=t[23],h=[...n].reverse().map(e),t[11]=f,t[12]=n,t[13]=r,t[14]=o,t[15]=u,t[16]=c,t[17]=h}else h=t[17];let g;t[24]===h?g=t[25]:(g=(0,V.jsx)(`ol`,{className:`mt-3 max-h-80 space-y-3 overflow-y-auto`,children:h}),t[24]=h,t[25]=g);let _;t[26]!==n.length||t[27]!==i?(_=n.length?null:(0,V.jsx)(`p`,{className:`mt-3 text-xs text-fg-muted`,children:i?`暂无阶段变更记录`:`No phase changes yet`}),t[26]=n.length,t[27]=i,t[28]=_):_=t[28];let v;return t[29]!==m||t[30]!==g||t[31]!==_?(v=(0,V.jsxs)(`details`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[m,g,_]}),t[29]=m,t[30]=g,t[31]=_,t[32]=v):v=t[32],v}function ft({schedules:e,language:t,onEdit:n,onUpdated:r}){let i=t===`zh`,a=f(t),[s,c]=(0,z.useState)(null),l=(0,z.useRef)(!1),[u,d]=(0,z.useState)(null),p=e=>new Date(e).toLocaleString(i?`zh-CN`:`en-US`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,timeZoneName:`short`});async function m(e){if(!l.current){l.current=!0,c(e.id),d(null);try{r((await Ke.update(e.id,{enabled:!1,expectedRevision:e.updatedAtMs})).automation)}catch(e){d(e instanceof Error?e.message:a.automations.feedback.actionFailed)}finally{l.current=!1,c(null)}}}return(0,V.jsxs)(`section`,{"aria-label":i?`执行时间`:`Execution schedule`,className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:i?`执行时间`:`Execution schedule`}),(0,V.jsx)(`div`,{className:`mt-3 space-y-4`,children:e.map(e=>{let r=e.trigger.kind===`schedule`?e.trigger.schedule:null,c=I(e),l=!e.management||e.management.editable.includes(`trigger`),u=!e.management||e.management.editable.includes(`enabled`);return(0,V.jsxs)(`article`,{className:`space-y-2 text-sm text-fg`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,V.jsx)(`span`,{className:`break-words font-medium`,children:e.name}),(0,V.jsx)(`span`,{className:`text-xs text-fg-muted`,children:c?i?`已执行`:`Completed`:e.enabled?i?`已启用`:`Enabled`:i?`已取消定时执行`:`Scheduling disabled`})]}),(0,V.jsx)(`p`,{children:r?.kind===`once`?`${i?`单次执行:`:`Run once: `}${p(Date.parse(r.at))}`:ze(e.trigger,a.automations,a.cron,t)}),r?.kind===`cron`?(0,V.jsxs)(`p`,{className:`text-xs text-fg-muted`,children:[i?`执行时区:`:`Schedule timezone: `,r.tz||(i?`服务所在电脑时区`:`Server timezone`)]}):null,(0,V.jsxs)(`p`,{className:`text-fg-muted`,children:[i?`下次执行:`:`Next run: `,c?i?`已执行,无后续计划`:`Completed; no upcoming run`:e.enabled?e.state.nextRunAtMs===void 0?i?`暂无后续执行`:`No upcoming run`:p(e.state.nextRunAtMs):i?`已取消,不再自动执行`:`Disabled; no automatic runs`]}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[l?(0,V.jsx)(P,{variant:`secondary`,disabled:s!==null,onClick:()=>n(e),children:i?`修改时间`:`Edit schedule`}):null,e.enabled&&u?(0,V.jsx)(P,{variant:`ghost`,disabled:s!==null,onClick:()=>void m(e),children:s===e.id?i?`正在取消…`:`Cancelling…`:i?`取消定时执行`:`Cancel schedule`}):null,(0,V.jsx)(P,{asChild:!0,variant:`ghost`,children:(0,V.jsx)(o,{to:`/automations?automation=${encodeURIComponent(e.id)}`,children:i?`查看自动化`:`View automation`})})]})]},e.id)})}),u?(0,V.jsx)(`p`,{role:`alert`,className:`mt-3 text-sm text-danger`,children:u}):null]})}var pt=`w-full rounded-lg border border-edge bg-surface-base px-3 py-2 text-sm text-fg focus-visible:outline-2 focus-visible:outline-accent`;function mt({taskId:e,taskTitle:t,projectId:n,executorAgentId:r,language:i,onClose:a,onCreated:s,automation:c}){let l=i===`zh`,u=f(i).automations,[d,b]=(0,z.useState)(()=>c?Ue(c):{...Ve,name:t,projectId:n??``,actionMode:`task_command`,taskId:e,agentId:r??``,triggerMode:`once`,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone||`UTC`}),[x,S]=(0,z.useState)(null),[C,w]=(0,z.useState)(!1),T=(0,z.useRef)(!1),[ee,O]=(0,z.useState)(null),k=e=>b(t=>({...t,...e}));async function A(e){if(e.preventDefault(),!(T.current||x)&&(O(null),!(!d.name.trim()||!c&&!r))){if(d.triggerMode===`once`&&(!Number.isFinite(new Date(d.onceAt).getTime())||new Date(d.onceAt).getTime()<=Date.now())){O(u.experience.futureTime);return}T.current=!0,w(!0);try{let e=c?L(c,d).trigger:He(d).trigger,{automation:t}=c?await Ke.update(c.id,{trigger:e,...c.management?{}:{name:d.name.trim(),delivery:{...c.delivery,notificationPolicy:d.notificationPolicy}},...!c.management||c.management.editable.includes(`enabled`)?{enabled:!0}:{},expectedRevision:c.updatedAtMs}):await Ke.create({...He(d),enabled:!0});S(t),s(t)}catch(e){O(e instanceof Error?e.message:u.feedback.actionFailed)}finally{T.current=!1,w(!1)}}}return(0,V.jsx)(y,{open:!0,onOpenChange:e=>{!e&&!T.current&&a()},children:(0,V.jsxs)(g,{children:[(0,V.jsx)(p,{className:`fixed inset-0 z-[110] bg-black/45`}),(0,V.jsxs)(_,{className:`xopc-dialog-content fixed left-1/2 top-1/2 z-[111] flex h-[min(38rem,calc(100dvh-2rem))] w-[min(32rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-overlay shadow-popover outline-none`,children:[(0,V.jsxs)(`header`,{className:`flex shrink-0 items-center justify-between gap-3 border-b border-edge-subtle px-5 py-4`,children:[(0,V.jsx)(v,{className:`text-base font-semibold text-fg`,children:c?l?`修改执行时间`:`Edit execution schedule`:l?`设置执行时间`:`Set execution time`}),(0,V.jsx)(h,{asChild:!0,children:(0,V.jsx)(P,{variant:`ghost`,className:`size-9 p-0`,disabled:C,"aria-label":l?`关闭`:`Close`,children:(0,V.jsx)(le,{className:`size-4`})})})]}),(0,V.jsx)(m,{className:`sr-only`,children:l?`为当前任务创建定时或周期自动化。`:`Create a scheduled or recurring automation for this task.`}),x?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto p-5`,children:[(0,V.jsx)(`p`,{role:`status`,className:`text-sm font-medium text-fg`,children:c?l?`执行时间已更新`:`Schedule updated`:l?`执行时间已设置`:`Schedule created`}),(0,V.jsx)(`p`,{className:`break-words text-sm text-fg-muted`,children:x.name}),(0,V.jsx)(P,{asChild:!0,variant:`primary`,children:(0,V.jsx)(o,{to:`/automations?automation=${encodeURIComponent(x.id)}`,children:l?`查看自动化`:`View automation`})})]}),(0,V.jsx)(`footer`,{className:`shrink-0 border-t border-edge-subtle p-4`,children:(0,V.jsx)(P,{onClick:a,children:l?`完成`:`Done`})})]}):(0,V.jsxs)(`form`,{onSubmit:e=>void A(e),className:`flex min-h-0 flex-1 flex-col`,children:[(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto p-5`,children:[(0,V.jsxs)(`p`,{className:`break-words text-sm text-fg-muted`,children:[l?`执行任务:`:`Task: `,t]}),(0,V.jsxs)(`fieldset`,{disabled:C,className:`space-y-4`,children:[(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[u.form.name,(0,V.jsx)(`input`,{required:!0,readOnly:!!c?.management,className:pt,value:d.name,onChange:e=>k({name:e.target.value})})]}),(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[u.form.trigger,(0,V.jsxs)(E,{value:d.triggerMode,onChange:e=>k({triggerMode:e.target.value}),children:[c?.trigger.kind===`schedule`&&c.trigger.schedule.kind===`interval`?(0,V.jsx)(D,{value:`interval`,children:l?`固定间隔`:`Fixed interval`}):null,c?.trigger.kind===`schedule`&&c.trigger.schedule.kind===`cron`?(0,V.jsx)(D,{value:`cron`,children:l?`自定义规则`:`Custom schedule`}):null,(0,V.jsx)(D,{value:`once`,children:u.trigger.once}),(0,V.jsx)(D,{value:`daily`,children:u.trigger.daily}),(0,V.jsx)(D,{value:`weekly`,children:u.trigger.weekly})]})]}),d.triggerMode===`once`?(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[u.form.onceAt,(0,V.jsx)(`input`,{required:!0,type:`datetime-local`,className:pt,value:d.onceAt,onChange:e=>k({onceAt:e.target.value})})]}):[`daily`,`weekly`].includes(d.triggerMode)?(0,V.jsxs)(`div`,{className:`grid gap-2 text-sm text-fg`,children:[(0,V.jsx)(`span`,{children:u.form.time}),(0,V.jsx)(We,{disabled:C,value:d.time,onChange:e=>k({time:e}),ariaLabel:u.form.time})]}):null,d.triggerMode===`weekly`?(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[u.form.day,(0,V.jsx)(E,{value:d.weekday,onChange:e=>k({weekday:e.target.value}),children:[`sunday`,`monday`,`tuesday`,`wednesday`,`thursday`,`friday`,`saturday`].map((e,t)=>(0,V.jsx)(D,{value:String(t),children:u.weekdays[e]},e))})]}):null,d.triggerMode===`cron`?(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[l?`定时规则`:`Cron expression`,(0,V.jsx)(`input`,{required:!0,className:pt,value:d.cronExpr,onChange:e=>k({cronExpr:e.target.value})})]}):null,d.triggerMode===`interval`?(0,V.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[l?`执行间隔`:`Interval`,(0,V.jsx)(`input`,{required:!0,type:`number`,min:`1`,className:pt,value:d.intervalValue,onChange:e=>k({intervalValue:e.target.value})})]}),(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[l?`单位`:`Unit`,(0,V.jsxs)(E,{value:d.intervalUnit,onChange:e=>k({intervalUnit:e.target.value}),children:[(0,V.jsx)(D,{value:`minute`,children:l?`分钟`:`Minutes`}),(0,V.jsx)(D,{value:`hour`,children:l?`小时`:`Hours`}),(0,V.jsx)(D,{value:`day`,children:l?`天`:`Days`}),(0,V.jsx)(D,{value:`week`,children:l?`周`:`Weeks`})]})]})]}):null,(0,V.jsx)(Be,{form:d,onChange:k,language:i}),(0,V.jsxs)(`label`,{className:`grid gap-2 text-sm text-fg`,children:[u.draft.notifications,(0,V.jsxs)(E,{disabled:!!c?.management,value:d.notificationPolicy,onChange:e=>k({notificationPolicy:e.target.value}),children:[(0,V.jsx)(D,{value:`attention`,children:u.draft.notifyAttention}),(0,V.jsx)(D,{value:`all`,children:u.draft.notifyAll}),(0,V.jsx)(D,{value:`none`,children:u.draft.notifyNone})]})]})]}),!c&&!r?(0,V.jsx)(`p`,{role:`alert`,className:`text-sm text-danger`,children:l?`请先为任务指定执行 Agent。`:`Assign an executor agent to the task first.`}):null,ee?(0,V.jsx)(`p`,{role:`alert`,className:`text-sm text-danger`,children:ee}):null]}),(0,V.jsxs)(`footer`,{className:`flex shrink-0 justify-end gap-2 border-t border-edge-subtle p-4`,children:[(0,V.jsx)(P,{type:`button`,variant:`ghost`,disabled:C,onClick:a,children:l?`取消`:`Cancel`}),(0,V.jsx)(P,{type:`submit`,variant:`primary`,disabled:C||!c&&!r||!d.name.trim()||d.triggerMode===`once`&&!d.onceAt,children:C?l?`正在保存…`:`Saving…`:c?c.enabled?l?`保存修改`:`Save changes`:l?`保存并启用`:`Save and enable`:l?`创建自动化`:`Create automation`})]})]})]})]})})}function ht(e){let t=(0,B.c)(36),{detail:n,language:r,onUpdated:i}=e,a=r===`zh`,s;t[0]===n.waits?s=t[1]:(s=n.waits.find(yt),t[0]=n.waits,t[1]=s);let c=s,l,u,d,f,p,m,h;if(t[2]!==n||t[3]!==r||t[4]!==i||t[5]!==c||t[6]!==a){l=n.allowedCommands.includes(`resolve_wait`)&&!c?n.waits.filter(vt):[];let e=l.length>0||n.attention.some(_t),s;t[14]===n?s=t[15]:(s=Ee(n),t[14]=n,t[15]=s);let g=s,_=n.runs.some(gt);d=c?.reason??n.waits[0]?.reason??(n.task.phase===`closed`?a?`任务已关闭,可查看交付物与执行结果。`:`The task is closed. Review its deliverables and results.`:n.task.phase===`review`?a?`请检查交付物与验收项,通过后确认完成。`:`Review the deliverables and acceptance criteria before completing the task.`:_?a?`Agent 正在执行任务,无需你操作。`:`The agent is working. No action is needed from you.`:g?.summary??(a?`任务尚未开始,可开始执行或设置执行时间。`:`Start the task or set an execution time.`)),u=n.attention.length>0?(0,V.jsx)(`ul`,{className:`mt-3 space-y-3`,children:n.attention.map((e,t)=>{let i=l.some(t=>e.kind===`input_required`&&t.kind===`user_input`||e.kind===`approval_required`&&t.kind===`approval`);return(0,V.jsxs)(`li`,{className:`text-sm leading-6 text-fg-muted`,children:[(0,V.jsx)(R,{content:e.summary,contentKey:`${n.task.id}:attention:${e.kind}:${t}`,language:r,markdown:!1,previewHeight:72}),!i&&(e.kind===`input_required`||e.kind===`approval_required`)?(0,V.jsx)(o,{className:`mt-2 inline-flex min-h-11 items-center rounded-lg bg-accent-soft px-3 font-medium text-accent-fg`,to:M(n.task.id),children:a?e.kind===`approval_required`?`查看并决定`:`补充信息`:e.kind===`approval_required`?`Review decision`:`Provide information`}):null]},`${e.kind}-${t}`)})}):null,f=a?`当前需要处理`:`Current action`,p=`rounded-xl border border-edge bg-surface-panel p-4`;let v=e?a?`需要你处理`:`Your action needed`:a?`当前进展`:`Current progress`,y=l.length>1?` · ${l.length}`:``;t[16]!==v||t[17]!==y?(m=(0,V.jsxs)(`h2`,{className:`text-sm font-semibold text-fg`,children:[v,y]}),t[16]=v,t[17]=y,t[18]=m):m=t[18];let b;t[19]!==n||t[20]!==i||t[21]!==a?(b=e=>(0,V.jsx)(Je,{wait:e,detail:n,zh:a,onUpdated:i},e.id),t[19]=n,t[20]=i,t[21]=a,t[22]=b):b=t[22],h=l.map(b),t[2]=n,t[3]=r,t[4]=i,t[5]=c,t[6]=a,t[7]=l,t[8]=u,t[9]=d,t[10]=f,t[11]=p,t[12]=m,t[13]=h}else l=t[7],u=t[8],d=t[9],f=t[10],p=t[11],m=t[12],h=t[13];let g;t[23]!==l.length||t[24]!==u||t[25]!==n.task||t[26]!==r||t[27]!==d||t[28]!==a?(g=l.length>0?u?(0,V.jsxs)(`details`,{className:`mt-3`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-xs text-fg-muted`,children:a?`等待详情`:`Waiting details`}),u]}):null:u??(0,V.jsx)(R,{content:d,contentKey:`${n.task.id}:current-progress`,language:r,markdown:!1,previewHeight:72,className:`mt-2 text-sm leading-6 text-fg-muted`}),t[23]=l.length,t[24]=u,t[25]=n.task,t[26]=r,t[27]=d,t[28]=a,t[29]=g):g=t[29];let _;return t[30]!==f||t[31]!==p||t[32]!==m||t[33]!==h||t[34]!==g?(_=(0,V.jsxs)(`section`,{"aria-label":f,className:p,children:[m,h,g]}),t[30]=f,t[31]=p,t[32]=m,t[33]=h,t[34]=g,t[35]=_):_=t[35],_}function gt(e){return!e.parentRunId&&[`queued`,`running`,`waiting`,`verifying`].includes(e.status)}function _t(e){return e.kind===`input_required`||e.kind===`approval_required`}function vt(e){return(e.kind===`user_input`||e.kind===`approval`&&typeof e.condition.capability==`string`)&&e.condition.type!==`connection`}function yt(e){return e.kind===`paused`}function bt(e){let t=(0,B.c)(17),{children:n,contentKey:r,language:i,className:o}=e,s=(0,z.useId)(),c=z.Children.toArray(n),[l,u]=a(),d;t[0]!==r||t[1]!==l?(d=l.getAll(`taskExpanded`).includes(r),t[0]=r,t[1]=l,t[2]=d):d=t[2];let f=d,p=f?c:c.slice(0,3),m;t[3]!==s||t[4]!==p?(m=(0,V.jsx)(`ul`,{id:s,className:`space-y-1.5`,children:p}),t[3]=s,t[4]=p,t[5]=m):m=t[5];let h;t[6]!==r||t[7]!==f||t[8]!==s||t[9]!==c.length||t[10]!==i||t[11]!==u?(h=c.length>3?(0,V.jsx)(`button`,{type:`button`,"aria-expanded":f,"aria-controls":s,className:`mt-2 min-h-9 rounded-sm text-xs font-medium text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,onClick:()=>u(e=>{let t=new URLSearchParams(e),n=t.getAll(`taskExpanded`).filter(e=>e!==r);return t.delete(`taskExpanded`),n.forEach(e=>t.append(`taskExpanded`,e)),f||t.append(`taskExpanded`,r),t},{preventScrollReset:!0}),children:i===`zh`?f?`收起`:`查看全部(${c.length})`:f?`Show less`:`Show all (${c.length})`}):null,t[6]=r,t[7]=f,t[8]=s,t[9]=c.length,t[10]=i,t[11]=u,t[12]=h):h=t[12];let g;return t[13]!==o||t[14]!==m||t[15]!==h?(g=(0,V.jsxs)(`div`,{className:o,children:[m,h]}),t[13]=o,t[14]=m,t[15]=h,t[16]=g):g=t[16],g}function xt({taskId:e}){let t=l(e=>e.conversationId),n=u(e=>e.language),[r,i]=(0,z.useState)(``),[a,o]=(0,z.useState)(null),[s,f]=(0,z.useState)(!1),[p,m]=(0,z.useState)(!1),[h,g]=(0,z.useState)([]),[_,v]=(0,z.useState)(null),y=c(`/api/tasks/${encodeURIComponent(e)}/collaboration`),{data:b,error:x,mutate:S}=me([`task-collaboration`,e,t],()=>d(`${y}?recent=1`),{revalidateOnFocus:!0}),C=[...new Map([...h,...b?.items??[]].map(e=>[e.id,e])).values()].sort((e,t)=>e.sequence-t.sequence),w=async()=>{let e=C[0];if(!(!e||p)){m(!0);try{let t=await d(`${y}?recent=1&beforeSequence=${e.sequence}`);g(e=>[...t.items,...e])}catch(e){v(e instanceof Error?e.message:String(e))}finally{m(!1)}}};(0,z.useEffect)(()=>{let t=t=>{let n=t.detail;(!n?.taskId||n.taskId===e)&&S()};return window.addEventListener(`task-collaboration-entry-added`,t),window.addEventListener(`gateway-realtime-connected`,t),()=>{window.removeEventListener(`task-collaboration-entry-added`,t),window.removeEventListener(`gateway-realtime-connected`,t)}},[S,e]);let T=async()=>{if(!(!r.trim()||s)){f(!0),v(null);try{await d(y,{method:`POST`,headers:{"idempotency-key":crypto.randomUUID()},body:JSON.stringify({kind:a?`answer`:`instruction`,body:r.trim(),...a?{causationId:a}:{}})}),i(``),o(null),await S()}catch(e){v(e instanceof Error?e.message:String(e))}finally{f(!1)}}};return(0,V.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:n===`zh`?`任务留言`:`Task updates`}),(0,V.jsxs)(`div`,{className:`mt-3 max-h-64 space-y-2 overflow-y-auto`,children:[!b&&!x?(0,V.jsxs)(`div`,{"aria-busy":`true`,className:`space-y-2`,children:[(0,V.jsx)(ue,{className:`h-14 w-full`}),(0,V.jsx)(ue,{className:`h-14 w-4/5`})]}):null,x?(0,V.jsx)(`p`,{role:`status`,className:`text-xs text-fg-muted`,children:n===`zh`?`暂时无法读取留言`:`Updates unavailable`}):null,C[0]&&C[0].sequence>1?(0,V.jsx)(`button`,{type:`button`,disabled:p,onClick:()=>void w(),className:`text-xs text-accent hover:underline disabled:opacity-50`,children:n===`zh`?`查看更早留言`:`Earlier updates`}):null,C.map(t=>(0,V.jsxs)(`div`,{className:`rounded-lg bg-surface-base px-3 py-2 text-sm`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-fg-subtle`,children:[(0,V.jsx)(`span`,{children:t.authorKind===`worker_agent`?n===`zh`?`执行 Agent`:`Worker`:t.authorKind===`main_agent`?n===`zh`?`主 Agent`:`Main Agent`:t.authorKind===`system`?n===`zh`?`系统`:`System`:n===`zh`?`用户`:`You`}),(0,V.jsxs)(`span`,{children:[`· `,t.kind]}),t.deliveryStatus?(0,V.jsxs)(`span`,{children:[`· `,t.deliveryStatus]}):null]}),(0,V.jsx)(`div`,{className:`mt-1 min-w-0 text-fg`,"data-task-collaboration-body":!0,children:(0,V.jsx)(R,{content:t.body,contentKey:`${e}:update:${t.id}`,language:n,breaks:!0,previewHeight:120})}),t.kind===`question`&&t.authorKind===`worker_agent`?(0,V.jsx)(`button`,{type:`button`,className:`mt-2 text-xs text-accent hover:underline`,onClick:()=>o(t.id),children:n===`zh`?`回复问题`:`Reply`}):null]},t.id)),b&&!C.length?(0,V.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n===`zh`?`暂无进展留言`:`No updates yet`}):null]}),a?(0,V.jsxs)(`p`,{className:`mt-3 text-xs text-accent`,children:[n===`zh`?`正在回复执行 Agent 的问题`:`Replying to the worker`,(0,V.jsx)(`button`,{type:`button`,className:`ml-2 underline`,onClick:()=>o(null),children:n===`zh`?`取消`:`Cancel`})]}):null,(0,V.jsx)(`textarea`,{value:r,onChange:e=>i(e.target.value),rows:2,"aria-label":n===`zh`?`任务留言`:`Task message`,placeholder:n===`zh`?`给执行 Agent 留言`:`Message the worker`,className:`mt-3 w-full resize-y rounded-lg border border-edge bg-surface-base px-3 py-2 text-sm text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`}),_?(0,V.jsx)(`p`,{role:`alert`,className:`mt-1 text-xs text-danger`,children:_}):null,(0,V.jsx)(`button`,{type:`button`,disabled:!r.trim()||s,onClick:()=>void T(),className:`mt-2 rounded-lg bg-accent px-3 py-2 text-xs font-medium text-white disabled:opacity-50`,children:s?n===`zh`?`发送中`:`Sending`:n===`zh`?`发送`:`Send`})]})}function St(e,t,n,r){return!!(e&&t!==e.version&&n!==e.value&&r!==n)}function Ct(e,t){let n={...e.task};t.title!==void 0&&(n.title=t.title),t.priority!==void 0&&(n.priority=t.priority);for(let e of[`body`,`projectId`,`milestoneId`,`parentTaskId`,`dueAt`,`ownerId`]){let r=t[e];r!==void 0&&(r===null?delete n[e]:Object.assign(n,{[e]:r}))}return n.version+=1,n.updatedAt=Date.now(),{...e,task:n}}function wt(e,t){return(t===`zh`?{backlog:`待规划`,ready:`就绪`,active:`进行中`,review:`待验收`,closed:`已关闭`}:{backlog:`Backlog`,ready:`Ready`,active:`Active`,review:`Review`,closed:`Closed`})[e]}function Tt(){let e=(0,B.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,V.jsxs)(`div`,{className:`space-y-4`,"aria-busy":!0,children:[(0,V.jsx)(ue,{className:`h-32 rounded-2xl`}),(0,V.jsx)(ue,{className:`h-52 rounded-2xl`}),(0,V.jsx)(ue,{className:`h-40 rounded-2xl`})]}),e[0]=t):t=e[0],t}function Et(e){if(e===void 0)return``;let t=new Date(e);return new Date(t.getTime()-t.getTimezoneOffset()*6e4).toISOString().slice(0,10)}function Dt(e){return e?new Date(`${e}T23:59:59.999`).getTime():null}var Ot=[`backlog`,`ready`,`active`,`review`,`closed`],kt=[`low`,`normal`,`high`,`critical`],At=(0,z.memo)(function(e){let t=(0,B.c)(20),{value:n,disabled:r,canMove:i,canApprove:a,canReopen:o,language:s,label:c,onChange:l}=e,u;t[0]!==a||t[1]!==i||t[2]!==o||t[3]!==n?(u=e=>e!==n&&!i&&!(e===`closed`?a:n===`closed`&&o),t[0]=a,t[1]=i,t[2]=o,t[3]=n,t[4]=u):u=t[4];let d=u,f;t[5]===c?f=t[6]:(f=(0,V.jsx)(`span`,{children:c}),t[5]=c,t[6]=f);let p;t[7]===l?p=t[8]:(p=e=>l(e.target.value),t[7]=l,t[8]=p);let m;t[9]!==s||t[10]!==d?(m=Ot.map(e=>(0,V.jsx)(D,{value:e,disabled:d(e),children:wt(e,s)},e)),t[9]=s,t[10]=d,t[11]=m):m=t[11];let h;t[12]!==r||t[13]!==p||t[14]!==m||t[15]!==n?(h=(0,V.jsx)(E,{triggerClassName:`border-0 bg-surface-hover shadow-none focus-visible:ring-2 focus-visible:ring-accent/30`,contentClassName:`border-0`,value:n,disabled:r,onChange:p,children:m}),t[12]=r,t[13]=p,t[14]=m,t[15]=n,t[16]=h):h=t[16];let g;return t[17]!==f||t[18]!==h?(g=(0,V.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[f,h]}),t[17]=f,t[18]=h,t[19]=g):g=t[19],g}),jt=(0,z.memo)(function(e){let t=(0,B.c)(14),{value:n,disabled:r,label:i,labels:a,onChange:o}=e,s;t[0]===i?s=t[1]:(s=(0,V.jsx)(`span`,{children:i}),t[0]=i,t[1]=s);let c;t[2]===o?c=t[3]:(c=e=>o(e.target.value),t[2]=o,t[3]=c);let l;t[4]===a?l=t[5]:(l=kt.map(e=>(0,V.jsx)(D,{value:e,children:a[e]},e)),t[4]=a,t[5]=l);let u;t[6]!==r||t[7]!==c||t[8]!==l||t[9]!==n?(u=(0,V.jsx)(E,{triggerClassName:`border-0 bg-surface-hover shadow-none focus-visible:ring-2 focus-visible:ring-accent/30`,contentClassName:`border-0`,value:n,disabled:r,onChange:c,children:l}),t[6]=r,t[7]=c,t[8]=l,t[9]=n,t[10]=u):u=t[10];let d;return t[11]!==s||t[12]!==u?(d=(0,V.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[s,u]}),t[11]=s,t[12]=u,t[13]=d):d=t[13],d}),Mt=(0,z.memo)(function(e){let t=(0,B.c)(10),{value:n,disabled:r,label:i,onChange:a}=e,o;t[0]===i?o=t[1]:(o=(0,V.jsx)(`span`,{children:i}),t[0]=i,t[1]=o);let s;t[2]!==r||t[3]!==i||t[4]!==a||t[5]!==n?(s=(0,V.jsx)(Ge,{disabled:r,value:n,onChange:a,ariaLabel:i}),t[2]=r,t[3]=i,t[4]=a,t[5]=n,t[6]=s):s=t[6];let c;return t[7]!==o||t[8]!==s?(c=(0,V.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[o,s]}),t[7]=o,t[8]=s,t[9]=c):c=t[9],c}),Nt=(0,z.memo)(function(e){let t=(0,B.c)(17),{value:n,disabled:r,label:i,unassignedLabel:a,agents:o,onChange:s}=e,c;t[0]===i?c=t[1]:(c=(0,V.jsx)(`span`,{children:i}),t[0]=i,t[1]=c);let l;t[2]===s?l=t[3]:(l=e=>s(e.target.value),t[2]=s,t[3]=l);let u;t[4]===a?u=t[5]:(u=(0,V.jsx)(D,{value:``,disabled:!0,children:a}),t[4]=a,t[5]=u);let d;t[6]===o?d=t[7]:(d=o.map(qt),t[6]=o,t[7]=d);let f;t[8]!==r||t[9]!==l||t[10]!==u||t[11]!==d||t[12]!==n?(f=(0,V.jsxs)(E,{triggerClassName:`border-0 bg-surface-hover shadow-none focus-visible:ring-2 focus-visible:ring-accent/30`,contentClassName:`border-0`,value:n,disabled:r,onChange:l,children:[u,d]}),t[8]=r,t[9]=l,t[10]=u,t[11]=d,t[12]=n,t[13]=f):f=t[13];let p;return t[14]!==c||t[15]!==f?(p=(0,V.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[c,f]}),t[14]=c,t[15]=f,t[16]=p):p=t[16],p}),Pt=(0,z.memo)(function(e){let t=(0,B.c)(9),{candidates:n,selected:r,disabled:i,labels:a,getTaskHref:o,onChange:s}=e,c;t[0]===r?c=t[1]:(c=r.map(Jt),t[0]=r,t[1]=c);let l;return t[2]!==n||t[3]!==i||t[4]!==o||t[5]!==a||t[6]!==s||t[7]!==c?(l=(0,V.jsx)(Ze,{borderless:!0,candidates:n,selectedIds:c,disabled:i,getTaskHref:o,onChange:s,labels:a}),t[2]=n,t[3]=i,t[4]=o,t[5]=a,t[6]=s,t[7]=c,t[8]=l):l=t[8],l},(e,t)=>e.disabled===t.disabled&&e.labels===t.labels&&e.getTaskHref===t.getTaskHref&&e.onChange===t.onChange&&e.candidates.length===t.candidates.length&&e.candidates.every((e,n)=>e.id===t.candidates[n]?.id&&e.title===t.candidates[n]?.title)&&e.selected.length===t.selected.length&&e.selected.every((e,n)=>e.id===t.selected[n]?.id&&e.title===t.selected[n]?.title)),Ft=`xopc.taskDetail.chatPanelPercent`,It=42;function Lt(e,t){let n=Math.max(30,352/Math.max(t,1)*100),r=Math.min(60,(t-480)/Math.max(t,1)*100);return r<n?It:Math.min(r,Math.max(n,e))}function Rt(){try{let e=Number(window.localStorage.getItem(Ft));return Number.isFinite(e)&&e>=30&&e<=60?e:It}catch{return It}}function zt(e){let t=(0,B.c)(13),{items:n,empty:r,contentKey:i}=e,a=u(Vt);if(n.length===0){let e;return t[0]===r?e=t[1]:(e=(0,V.jsx)(`p`,{className:`text-sm leading-6 text-fg-muted`,children:r}),t[0]=r,t[1]=e),e}let o;t[2]===n?o=t[3]:(o=n.join(`
|
|
3
3
|
`),t[2]=n,t[3]=o);let s;t[4]===n?s=t[5]:(s=n.map(Bt),t[4]=n,t[5]=s);let c;t[6]===s?c=t[7]:(c=(0,V.jsx)(`ul`,{className:`space-y-2`,children:s}),t[6]=s,t[7]=c);let l;return t[8]!==i||t[9]!==a||t[10]!==o||t[11]!==c?(l=(0,V.jsx)(R,{content:o,contentKey:i,language:a,previewHeight:144,children:c}),t[8]=i,t[9]=a,t[10]=o,t[11]=c,t[12]=l):l=t[12],l}function Bt(e){return(0,V.jsxs)(`li`,{className:`flex gap-2 text-sm leading-6 text-fg`,children:[(0,V.jsx)(k,{className:`mt-1 size-4 shrink-0 text-fg-subtle`}),(0,V.jsx)(`span`,{className:`min-w-0 whitespace-pre-wrap break-words [overflow-wrap:anywhere]`,children:e})]},e)}function Vt(e){return e.language}function U({taskId:e,presentation:t,backgroundPath:n,onDeleted:r}){let[i,c]=a(),d=s(),f=u(e=>e.language),p=l(e=>e.conversationId),m=(0,z.useMemo)(()=>Te(f),[f]),h=je(e=>e.setPageHeader),g=je(e=>e.clearPageHeader),_=we(e=>e.panes),v=C(e=>e.openForSession),{data:y,error:b,mutate:E,lastChange:D,conversationLoading:ee,conversationError:O}=x(e),{data:k,error:le,mutate:_e}=me(e?[`task-detail-automations`,p]:null,()=>Ke.list(),{refreshInterval:3e4}),[Ae,I]=(0,z.useState)(null),[ze,Be]=(0,z.useState)(null),[L,Ve]=(0,z.useState)(()=>new Set),[He,Ue]=(0,z.useState)([]),[We,Ge]=(0,z.useState)(null),[Je,Ye]=(0,z.useState)([]),[Ze,B]=(0,z.useState)(!1),[et,tt]=(0,z.useState)(``),[rt,H]=(0,z.useState)(!1),[at,ot]=(0,z.useState)(``),[st,ct]=(0,z.useState)(Rt),[lt,pt]=(0,z.useState)(!1),gt=(0,z.useRef)(null),_t=(0,z.useRef)(null),vt=(0,z.useRef)(null),yt=(0,z.useRef)(!1),wt=(0,z.useRef)(!1),Ot=(0,z.useRef)(``),kt=(0,z.useRef)(null),Bt=(0,z.useRef)(null),Vt=(0,z.useRef)(null),U=(0,z.useRef)(y),[Ht,W]=(0,z.useState)(null),[Ut,Wt]=(0,z.useState)(null),[Gt,Kt]=(0,z.useState)(!1),[qt,Jt]=(0,z.useState)(!1),[Yt,Xt]=(0,z.useState)(null),Zt=(0,z.useRef)(null),Qt=(0,z.useMemo)(()=>({link:m.linkDependencies,linked:m.linkedDependencies,searchPlaceholder:m.dependencySearchPlaceholder,noMatches:m.noDependencyMatches,noCandidates:m.noDependencyCandidates,remove:m.removeDependency}),[m.dependencySearchPlaceholder,m.linkDependencies,m.linkedDependencies,m.noDependencyCandidates,m.noDependencyMatches,m.removeDependency]),$t=y?.dependencies.map(e=>`${e.id}:${e.title}`).join(`\0`)??``,en=(0,z.useMemo)(()=>ae(i.get(`returnTo`),`/`,[`/projects`,`/chat`,`/notes`,`/tasks`]),[i]),tn=(0,z.useCallback)(e=>t===`modal`&&n?re(n,e):ie(`/tasks/${encodeURIComponent(e)}`,en),[n,t,en]);U.current=y;let G=(0,z.useCallback)((e,t)=>{Ve(n=>{let r=new Set(n);return t?r.add(e):r.delete(e),r})},[]);(0,z.useEffect)(()=>{I(null),Be(null),W(null),B(!1),kt.current=null,H(!1),Wt(null),Kt(!1),Jt(!1),Xt(null)},[e]),(0,z.useEffect)(()=>{let e=!0;return Ce().then(t=>{e&&Ye(t.items)}).catch(()=>void 0),()=>{e=!1}},[p]),(0,z.useEffect)(()=>{if(!D||D.source===`user`)return;Wt(D);let e=window.setTimeout(()=>Wt(null),3500);return()=>window.clearTimeout(e)},[D]),(0,z.useEffect)(()=>{let t=y?.task.projectId,n=y?.dependencies??[];if(!t){Vt.current=null,Ge(null),Ue(n);return}Vt.current!==t&&(Vt.current=t,Ge(null));let r=!0;return de(t).then(t=>{if(!r)return;Ge(t.project.name);let i=new Map;for(let r of[...t.tasks,...n])r.id!==e&&i.set(r.id,{id:r.id,title:r.title});Ue([...i.values()])}).catch(()=>{r&&Ue(n)}),()=>{r=!1}},[$t,y?.task.projectId,e]);let K=(0,z.useCallback)(async(t,n=`command`)=>{let r=U.current;if(r){G(n,!0),I(null),t.type===`close`&&t.resolution===`done`&&Be(null);try{await E(await ye(e,t,r.task.version),{revalidate:!1})}catch{I(m.actionFailed),t.type===`close`&&t.resolution===`done`&&Be(m.actionFailed)}finally{G(n,!1)}}},[m.actionFailed,E,G,e]),nn=(0,z.useCallback)(async(t,n)=>{let r=U.current;if(!r)return!1;n&&G(n,!0),I(null);try{let n=ge(e,t,r.task.version);return await E(n,{optimisticData:Ct(r,t),populateCache:!0,revalidate:!1,rollbackOnError:!0}),!0}catch{return I(m.actionFailed),!1}finally{n&&G(n,!1)}},[m.actionFailed,E,G,e]),rn=()=>{y&&(kt.current={value:y.task.title,version:y.task.version},W(null),tt(y.task.title),B(!0))},an=()=>{yt.current=!0,tt(U.current?.task.title??``),kt.current=null,W(null),B(!1),queueMicrotask(()=>{yt.current=!1})},on=async(e=!1)=>{if(yt.current){yt.current=!1;return}let t=U.current;if(!t||L.has(`title`))return;let n=et.trim();if(!n){an();return}let r=kt.current;if(!e&&St(r,t.task.version,t.task.title,n)){W(`title`);return}if(n===t.task.title){an();return}await nn({title:n},`title`)&&(kt.current=null,W(null),B(!1))},sn=async()=>{if(!y)return;if(wt.current){wt.current=!1;return}let e=at.trim(),t=Bt.current;if(St(t,y.task.version,y.task.body??``,e)){W(`description`);return}if(at===Ot.current||e===(y.task.body??``).trim()){H(!1);return}await nn({body:fe(y.task.body??``,e)||null})&&(W(null),H(!1))},cn=(0,z.useCallback)(async e=>{let t=U.current;!t||e===t.task.phase||await K({type:`move`,phase:e},`phase`)},[K]),ln=(0,z.useCallback)(e=>{nn({priority:e},`priority`)},[nn]),un=(0,z.useCallback)(e=>{nn({dueAt:Dt(e)},`dueAt`)},[nn]),dn=(0,z.useCallback)(e=>{ct(e);try{window.localStorage.setItem(Ft,String(e))}catch{}},[]),fn=(0,z.useCallback)(e=>{if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`&&e.key!==`Home`)return;e.preventDefault();let t=vt.current?.clientWidth??0,n=e.key===`Home`?It:st+(e.key===`ArrowLeft`?2:-2);dn(Lt(n,t))},[st,dn]),pn=(0,z.useCallback)(e=>{if(!window.matchMedia(`(min-width: 1024px)`).matches)return;let t=vt.current;if(!t)return;e.preventDefault();let n=e.currentTarget,r=e.pointerId;n.setPointerCapture(r),pt(!0);let i=st,a=0,o=()=>{a=0,t.style.setProperty(`--task-chat-panel-width`,`${i}%`)},s=e=>{let n=t.getBoundingClientRect();i=Lt((n.right-e.clientX)/n.width*100,n.width),a===0&&(a=window.requestAnimationFrame(o))},c=()=>{a!==0&&(window.cancelAnimationFrame(a),o());try{n.releasePointerCapture(r)}catch{}pt(!1),dn(i),window.removeEventListener(`pointermove`,s),window.removeEventListener(`pointerup`,c),window.removeEventListener(`pointercancel`,c)};window.addEventListener(`pointermove`,s),window.addEventListener(`pointerup`,c),window.addEventListener(`pointercancel`,c)},[st,dn]),mn=(0,z.useCallback)(async t=>{let n=U.current;if(n){G(`dependencies`,!0),I(null);try{await E(await be(e,t,n.task.version),{revalidate:!1})}catch{I(m.dependencyUpdateFailed)}finally{G(`dependencies`,!1)}}},[m.dependencyUpdateFailed,E,G,e]),hn=(0,z.useCallback)(async t=>{let n=U.current;if(!(!n||!t||t===n.conversation.currentExecutorAgentId)){G(`delegateAgentId`,!0),I(null);try{await E(await Se(e,t,n.task.version),{revalidate:!1})}catch{I(m.actionFailed)}finally{G(`delegateAgentId`,!1)}}},[m.actionFailed,E,G,e]),gn=(0,z.useCallback)(async()=>{G(`delete`,!0),I(null);try{await xe(e),r?r():d(en,{replace:!0})}catch(e){I(e instanceof Error?e.message:m.actionFailed)}finally{G(`delete`,!1)}},[m.actionFailed,d,r,en,G,e]),_n=(0,z.useCallback)(async(t,n)=>{let r=U.current;if(!r)return!1;G(`acceptance`,!0),Be(null),I(null);try{return await E(await he(e,t,n,r.task.version,r.task.latestContractVersion),{revalidate:!1}),!0}catch{return Be(m.actionFailed),I(m.actionFailed),E().catch(()=>void 0),!1}finally{G(`acceptance`,!1)}},[m.actionFailed,E,G,e]);if((0,z.useLayoutEffect)(()=>{if(t!==`modal`)return h({startExtra:(0,V.jsx)(o,{to:en,className:`flex size-9 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover`,"aria-label":m.backToWork,children:(0,V.jsx)(w,{className:`size-4`})}),main:y?(0,V.jsx)(`p`,{className:`truncate text-sm font-semibold text-fg`,children:We?`${We} / ${m.taskLabel}`:m.taskLabel}):null,end:null}),g},[g,m.backToWork,m.taskLabel,y,t,We,en,h]),b&&!y)return(0,V.jsx)(`div`,{className:t===`modal`?`p-5 text-sm text-danger`:`mx-auto max-w-3xl p-6 text-sm text-danger`,children:m.taskNotFound});if(!y)return(0,V.jsx)(`div`,{className:t===`modal`?`p-5`:`mx-auto max-w-4xl p-4 sm:p-6`,children:(0,V.jsx)(Tt,{})});let q=y.waits[0],J=y.runs.find(e=>!e.parentRunId&&[`queued`,`running`,`waiting`,`verifying`].includes(e.status)),Y=De(y),vn=Y.length>0&&Y.every(e=>e.status===`passed`),yn=y.waits.find(e=>e.kind===`paused`),bn=Ee(y),xn=ke(y),Sn=m.detailStatuses[xn],Cn=pe(y.task.body?.trim()||y.task.contract?.objective.trim()||``),wn=y.allowedCommands.includes(`mark_ready`),Tn=y.allowedCommands.includes(`start`),En=y.allowedCommands.includes(`add_wait`),Dn=!q&&!J&&vn&&y.task.phase===`review`&&y.allowedCommands.includes(`close`),On=y.allowedCommands.includes(`reopen`),X=y.conversation.activeConversationId,Z=y.conversation.currentExecutorAgentId??y.task.delegateAgentId??y.task.ownerId,kn=Je.find(e=>e.id===Z),An=!!(X&&_[X]?.open),jn=y.context.filter(e=>e.role!==`deliverable`),Mn=k?.automations.filter(t=>t.action.kind===`task_command`&&t.action.taskId===e)??[],Q=Mn.filter(e=>e.trigger.kind===`schedule`&&e.action.kind===`task_command`&&e.action.command.type===`start`),Nn=Q.filter(e=>e.enabled&&e.state.nextRunAtMs!==void 0).map(e=>e.state.nextRunAtMs).sort((e,t)=>e-t)[0],Pn=e=>{_e(t=>({automations:[e,...(t?.automations??[]).filter(t=>t.id!==e.id)]}),{revalidate:!1})},Fn=e=>{Xt(e),Jt(!0)},In=()=>{k&&(Q.length===1?Fn(Q[0]):Q.length>1?(Zt.current&&(Zt.current.open=!0),c(e=>Qe(e,`schedule`,!0),{preventScrollReset:!0}),Zt.current?.scrollIntoView({block:`start`,behavior:`smooth`}),Zt.current?.focus({preventScroll:!0})):(Xt(null),Jt(!0)))},$=y.sessions.filter((e,t,n)=>n.findIndex(t=>t.conversationId===e.conversationId)===t),Ln=y.task.contract?.expectedOutputs??[],Rn=y.task.contract?.constraints??[],zn=y.task.contract?.approvalRequired??[],Bn=y.task.contract?.assumptions??[],Vn=y.task.contract?.risks??[],Hn=Rn.length>0||zn.length>0||Bn.length>0||Vn.length>0,Un=(...e)=>!!Ut?.changedFields.some(t=>e.includes(t)),Wn=y.allowedCommands.includes(`move`),Gn=L.has(`command`),Kn=L.has(`delete`),qn=J!==void 0,Jn=()=>{let e=gt.current;e&&(e.open=!0,c(e=>Qe(e,`acceptance`,!0),{preventScrollReset:!0}),e.scrollIntoView({block:`start`,behavior:`smooth`}),e.focus({preventScroll:!0}))},Yn=(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[wn&&!Tn&&!q&&y.task.phase!==`review`?(0,V.jsxs)(P,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:Gn,onClick:()=>void K({type:`mark_ready`}),children:[(0,V.jsx)(ce,{className:`size-4`}),m.scheduleTask]}):null,yn&&y.allowedCommands.includes(`resolve_wait`)?(0,V.jsxs)(P,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:Gn,onClick:()=>void K({type:`resolve_wait`,waitId:yn.id}),children:[(0,V.jsx)(ce,{className:`size-4`}),m.resumeTask]}):null,!q&&Tn&&y.task.phase!==`review`&&Z?(0,V.jsxs)(P,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:Gn,onClick:()=>void K({type:`start`,executor:{kind:`agent`,agentId:Z}}),children:[(0,V.jsx)(ce,{className:`size-4`}),m.runTask]}):null,On?(0,V.jsxs)(P,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`ghost`,disabled:Gn,onClick:()=>void K({type:`reopen`,phase:`ready`}),children:[(0,V.jsx)(ce,{className:`size-4`}),m.reopenTask]}):null,y.task.phase!==`review`&&!yn&&En?(0,V.jsxs)(P,{variant:`ghost`,className:`min-h-9 px-3 py-1.5 text-xs`,disabled:Gn,onClick:()=>void K({type:`add_wait`,wait:{kind:`paused`,reason:`Paused by user`,condition:{}}}),children:[(0,V.jsx)(se,{className:`size-4`}),m.pauseTask]}):null,y.task.phase===`closed`?(0,V.jsx)(P,{variant:`primary`,className:`min-h-9 px-3 py-1.5 text-xs`,onClick:()=>{_t.current?.scrollIntoView({block:`start`,behavior:`smooth`}),_t.current?.focus({preventScroll:!0})},children:f===`zh`?`查看结果`:`View results`}):null,!q&&!J&&y.task.phase!==`closed`&&y.task.phase!==`review`?(0,V.jsxs)(P,{variant:`ghost`,className:`min-h-9 px-3 py-1.5 text-xs`,disabled:!k,onClick:In,children:[(0,V.jsx)(T,{className:`size-4`}),Q.length>0?f===`zh`?`管理执行时间`:`Manage schedule`:f===`zh`?`设置执行时间`:`Set execution time`]}):null,y.task.phase===`review`?(0,V.jsx)(P,{variant:`primary`,className:`min-h-9 px-3 py-1.5 text-xs`,onClick:Jn,children:f===`zh`?`去验收`:`Review results`}):null,(0,V.jsxs)(Pe,{children:[(0,V.jsx)(Fe,{asChild:!0,children:(0,V.jsx)(P,{type:`button`,variant:`ghost`,className:`size-9 p-0`,disabled:Gn||Kn,"aria-label":m.moreActions,children:(0,V.jsx)(A,{className:`size-4`,"aria-hidden":!0})})}),(0,V.jsx)(Ie,{children:(0,V.jsxs)(Le,{align:`end`,sideOffset:6,className:`z-[100] min-w-44 rounded-lg border border-edge bg-surface-overlay p-1 shadow-popover`,children:[y.task.phase===`review`&&!yn&&En?(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-fg outline-none focus:bg-surface-hover`,onSelect:()=>void K({type:`add_wait`,wait:{kind:`paused`,reason:`Paused by user`,condition:{}}}),children:m.pauseTask}):null,y.task.phase===`review`&&!q&&!J?(0,V.jsx)(F,{disabled:!k,className:`cursor-pointer rounded-md px-3 py-2 text-sm text-fg outline-none focus:bg-surface-hover data-[disabled]:opacity-50`,onSelect:In,children:Q.length>0?f===`zh`?`管理执行时间`:`Manage schedule`:f===`zh`?`设置执行时间`:`Set execution time`}):null,y.task.phase===`review`&&!q&&Tn&&Z?(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-fg outline-none focus:bg-surface-hover`,onSelect:()=>void K({type:`start`,executor:{kind:`agent`,agentId:Z}}),children:m.runTask}):null,wn&&(Tn||q||y.task.phase===`review`)?(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-fg outline-none focus:bg-surface-hover`,onSelect:()=>void K({type:`mark_ready`}),children:m.scheduleTask}):null,J?(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-danger outline-none hover:bg-surface-hover focus:bg-surface-hover`,onSelect:()=>{G(`command`,!0),I(null),E(ve(e,J.id,J.version),{revalidate:!1}).catch(()=>I(m.actionFailed)).finally(()=>G(`command`,!1))},children:m.cancelActiveRun}):null,J?(0,V.jsx)(Re,{className:`my-1 h-px bg-edge`}):null,y.task.phase===`closed`?null:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-danger outline-none hover:bg-surface-hover focus:bg-surface-hover`,onSelect:()=>void K({type:`close`,resolution:`cancelled`}),children:m.cancelTask}),(0,V.jsx)(Re,{className:`my-1 h-px bg-edge`})]}),(0,V.jsx)(F,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-danger outline-none hover:bg-surface-hover focus:bg-surface-hover`,onSelect:()=>{if(qn){I(m.deleteActiveTaskBlocked);return}Kt(!0)},children:m.deleteTask})]})})]})]});return(0,V.jsxs)(`div`,{ref:vt,className:`flex h-full min-h-0 flex-col overflow-hidden ${lt?`lg:cursor-col-resize lg:select-none`:``}`,style:{"--task-chat-panel-width":`${st}%`},children:[(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto lg:flex-row lg:overflow-hidden`,children:[(0,V.jsxs)(`div`,{className:`task-detail-scroll flex min-w-0 shrink-0 flex-col lg:min-h-0 lg:flex-1 lg:shrink lg:overflow-y-auto lg:overscroll-contain`,children:[(0,V.jsxs)(`header`,{className:N(`shrink-0 border-b border-edge-subtle bg-surface-panel px-5 py-4 sm:px-6`,Un(`title`)&&`task-detail-live-update`),children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-x-6 gap-y-3`,children:[(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs text-fg-muted`,children:[We?(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,V.jsx)(te,{className:`size-3.5`,"aria-hidden":!0}),We]}):null,We?(0,V.jsx)(`span`,{"aria-hidden":`true`,children:`/`}):null,(0,V.jsx)(`span`,{children:m.taskLabel}),Ut?(0,V.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,role:`status`,children:Ut.source===`agent`?f===`zh`?`Agent 刚刚更新`:`Updated by Agent`:f===`zh`?`执行结果已同步`:`Execution result synced`}):null]}),Ze?(0,V.jsx)(`textarea`,{autoFocus:!0,"data-task-inline-editor":!0,"aria-label":f===`zh`?`任务标题`:`Task title`,rows:2,value:et,onFocus:e=>{kt.current?.value===et&&(e.currentTarget.setSelectionRange(0,0),e.currentTarget.scrollTop=0)},onChange:e=>tt(e.target.value),onBlur:()=>void on(),onKeyDown:e=>{e.nativeEvent.isComposing||(e.key===`Escape`?(e.preventDefault(),e.stopPropagation(),an()):e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),e.currentTarget.blur()))},className:`mt-2 block max-h-56 min-h-14 w-full max-w-3xl resize-none overflow-y-auto bg-transparent p-0 text-xl font-semibold leading-7 text-fg outline-none [field-sizing:content]`}):(0,V.jsx)(R,{content:y.task.title,contentKey:`${e}:title`,language:f,previewHeight:56,className:`mt-2 max-w-3xl`,children:(0,V.jsx)(`h1`,{className:`break-words text-xl font-semibold leading-7 text-fg`,children:(0,V.jsx)(`button`,{type:`button`,className:`max-w-full whitespace-pre-wrap break-words [overflow-wrap:anywhere] rounded-sm text-left outline-none hover:bg-surface-hover/60 focus-visible:ring-2 focus-visible:ring-accent/40`,title:y.task.title,onClick:rn,children:y.task.title})})}),Ht===`title`?(0,V.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs text-warning`,role:`alert`,children:[(0,V.jsx)(`span`,{children:f===`zh`?`Agent 在你编辑期间更新了标题。`:`The Agent updated the title while you were editing.`}),(0,V.jsx)(`button`,{type:`button`,className:`rounded-md bg-surface-hover px-2 py-1 text-fg`,onClick:an,children:f===`zh`?`使用 Agent 版本`:`Use Agent version`}),(0,V.jsx)(`button`,{type:`button`,className:`rounded-md bg-accent-soft px-2 py-1 text-accent-fg`,disabled:L.has(`title`),onClick:()=>void on(!0),children:f===`zh`?`保留我的修改`:`Keep my changes`})]}):null]}),(0,V.jsx)(`span`,{className:N(`shrink-0 rounded-full px-2.5 py-1 text-xs font-medium`,Oe(xn)),children:Sn})]}),(0,V.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-fg-muted`,children:[(0,V.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-2`,children:[Z?(0,V.jsx)(Me,{agentId:Z,avatar:kn?.avatar,size:20,className:`shrink-0`}):null,(0,V.jsxs)(`span`,{className:`min-w-0 break-words [overflow-wrap:anywhere]`,children:[m.executorLabel,` · `,kn?.name??Z??m.unassigned]})]}),(0,V.jsx)(`span`,{className:`text-fg-subtle`,children:m.updatedAt.replace(`{{date}}`,qe(y.task.updatedAt,f))})]})]}),(0,V.jsxs)(`div`,{className:`sticky top-0 z-10 flex shrink-0 flex-wrap items-center justify-between gap-2 border-b border-edge-subtle bg-surface-panel px-4 py-2 sm:px-5`,"aria-label":f===`zh`?`任务操作`:`Task actions`,children:[(0,V.jsxs)(`span`,{className:`min-w-0 flex-1 truncate text-xs text-fg-muted`,children:[y.task.title,` · `,Sn]}),Yn,Ae?(0,V.jsx)(`p`,{role:`alert`,className:`basis-full text-sm text-danger`,children:Ae}):null]}),(0,V.jsxs)(`section`,{className:`min-w-0 space-y-4 p-4 sm:p-5`,children:[y.task.phase===`review`?null:(0,V.jsx)(ht,{detail:y,language:f,onUpdated:e=>{E(e,{revalidate:!1})}}),(0,V.jsxs)(`section`,{ref:_t,tabIndex:-1,"aria-labelledby":`task-results-heading`,className:`scroll-mt-24 space-y-4`,children:[(0,V.jsx)(it,{detail:y,language:f}),y.task.phase===`review`&&(y.waits.length>0||y.attention.some(e=>e.kind===`input_required`||e.kind===`approval_required`))?(0,V.jsx)(ht,{detail:y,language:f,onUpdated:e=>{E(e,{revalidate:!1})}}):null,(0,V.jsx)($e,{panelId:`acceptance`,defaultOpen:y.task.phase===`review`||!!bn,ref:gt,tabIndex:-1,"aria-label":m.successDefinition,className:`scroll-mt-24 overflow-hidden rounded-xl border border-edge-subtle bg-surface-panel`,summaryClassName:`cursor-pointer p-4 text-sm font-medium text-fg`,title:(0,V.jsxs)(V.Fragment,{children:[f===`zh`?`验收`:`Acceptance`,` · `,Y.filter(e=>e.status===`passed`).length,`/`,Y.length]}),children:(0,V.jsx)(`div`,{className:`px-4 pb-4`,children:(0,V.jsx)(nt,{criteria:Y,language:f,closed:y.task.phase===`closed`,pending:L.has(`acceptance`),completionPending:Gn,canComplete:Dn,error:ze,blockedReason:q?f===`zh`?`请先处理待办事项`:`Resolve the pending request first`:J?f===`zh`?`请等待当前执行结束`:`Wait for the current run to finish`:vn?f===`zh`?`任务尚未进入可完成状态`:`The task is not ready for completion`:Y.length===0?f===`zh`?`请先定义验收标准`:`Define acceptance criteria first`:f===`zh`?`还有 ${Y.filter(e=>e.status!==`passed`).length} 项待验收`:`${Y.filter(e=>e.status!==`passed`).length} criteria need review`,onReview:_n,onComplete:()=>void K({type:`close`,resolution:`done`}),projectId:y.task.projectId,conversationId:X??void 0},`${e}:${y.task.latestContractVersion}`)})})]}),(0,V.jsx)($e,{panelId:`report`,className:`rounded-xl border border-edge-subtle bg-surface-panel p-4`,summaryClassName:`cursor-pointer text-sm font-medium text-fg`,title:f===`zh`?`完整执行报告`:`Full execution report`,children:(0,V.jsx)(ut,{detail:y,language:f},bn?.runId??e)}),!k&&!le?(0,V.jsx)(ue,{className:`h-9 rounded-lg`}):null,le?(0,V.jsxs)(`div`,{role:`alert`,className:`flex flex-wrap items-center gap-2 text-sm text-danger`,children:[(0,V.jsx)(`span`,{children:f===`zh`?`无法读取执行计划,请重试后再设置时间。`:`Could not load schedules. Retry before setting a time.`}),(0,V.jsx)(P,{variant:`ghost`,onClick:()=>void _e(),children:f===`zh`?`重试`:`Retry`})]}):null,Q.length>0?(0,V.jsx)($e,{panelId:`schedule`,ref:Zt,tabIndex:-1,className:`scroll-mt-24 rounded-xl border border-edge-subtle bg-surface-panel p-4`,summaryClassName:`cursor-pointer text-sm text-fg-muted`,title:(0,V.jsxs)(V.Fragment,{children:[f===`zh`?`执行时间`:`Execution schedule`,` · `,Q.length,Nn===void 0?``:` · ${f===`zh`?`下次执行:`:`Next run: `}${qe(Nn,f)}`]}),children:(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(ft,{schedules:Q,language:f,onEdit:Fn,onUpdated:Pn})})}):null,(0,V.jsx)($e,{panelId:`goal`,className:`rounded-xl border border-edge-subtle bg-surface-panel p-4`,summaryClassName:`cursor-pointer text-sm font-medium text-fg`,title:f===`zh`?`任务目标与说明`:`Task goal and description`,children:(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsxs)(`section`,{className:`overflow-hidden rounded-xl border border-edge-subtle bg-surface-panel divide-y divide-edge-subtle`,children:[(0,V.jsxs)(`div`,{className:`border-b border-edge-subtle p-5`,children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:f===`zh`?`任务目标`:`Task goal`}),(0,V.jsx)(R,{content:y.task.contract?.objective||y.task.title,contentKey:`${e}:goal`,language:f,markdown:!1,previewHeight:72,className:`mt-3 text-sm leading-6 text-fg`}),(0,V.jsxs)(P,{variant:`ghost`,className:`mt-2 min-h-9 px-2 text-xs`,onClick:Jn,children:[m.successDefinition,` · `,Y.length]})]}),Ln.length>0?(0,V.jsxs)(`div`,{className:`p-5`,children:[(0,V.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:m.expectedOutputs}),(0,V.jsx)(`div`,{className:`mt-2`,children:(0,V.jsx)(zt,{contentKey:`${e}:expectedOutputs`,items:Ln,empty:m.noDefinition})})]}):null,(0,V.jsxs)(`details`,{className:N(`p-5`,Un(`body`)&&`task-detail-live-update`),children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-semibold text-fg`,children:m.taskDescription}),rt?(0,V.jsx)(`textarea`,{autoFocus:!0,"data-task-inline-editor":!0,rows:6,value:at,onChange:e=>ot(e.target.value),onBlur:()=>void sn(),onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),wt.current=!0,ot(pe(y.task.body??y.task.contract?.objective??``)),H(!1),queueMicrotask(()=>{wt.current=!1}))},className:`mt-3 w-full resize-y rounded-lg bg-surface-hover px-3 py-2 text-sm leading-6 text-fg outline-none ring-2 ring-accent/20 focus:ring-accent/50`}):(0,V.jsxs)(`div`,{className:`mt-2`,children:[Cn&&Cn!==y.task.title?(0,V.jsx)(R,{content:Cn,contentKey:`${e}:description`,language:f}):(0,V.jsx)(`p`,{className:`text-sm leading-6 text-fg-muted`,children:m.noTaskDescription}),(0,V.jsx)(`button`,{type:`button`,className:`mt-2 rounded-md px-2 py-1 text-xs text-accent hover:bg-surface-hover focus-visible:bg-surface-hover`,onClick:()=>{let e=pe(y.task.body??y.task.contract?.objective??``);Ot.current=e,Bt.current={value:y.task.body??``,version:y.task.version},W(null),ot(e),H(!0)},children:f===`zh`?`编辑说明`:`Edit description`})]}),Ht===`description`?(0,V.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs text-warning`,role:`alert`,children:[(0,V.jsx)(`span`,{children:f===`zh`?`Agent 在你编辑期间更新了描述。`:`The Agent updated the description while you were editing.`}),(0,V.jsx)(`button`,{type:`button`,className:`rounded-md bg-surface-hover px-2 py-1 text-fg`,onClick:()=>{ot(pe(y.task.body??``)),W(null),H(!1)},children:f===`zh`?`使用 Agent 版本`:`Use Agent version`}),(0,V.jsx)(`button`,{type:`button`,className:`rounded-md bg-accent-soft px-2 py-1 text-accent-fg`,onClick:()=>void nn({body:fe(y.task.body??``,at.trim())||null}).then(e=>{e&&(W(null),H(!1))}),children:f===`zh`?`保留我的修改`:`Keep my changes`})]}):null]}),Hn?(0,V.jsxs)(`section`,{className:N(`p-5`,Un(`contract`)&&`task-detail-live-update`),children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:m.taskDefinition}),(0,V.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-muted`,children:f===`zh`?`执行边界及补充背景`:`Execution boundaries and supporting context`}),Rn.length>0?(0,V.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:m.constraints}),(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(zt,{contentKey:`${e}:constraints`,items:Rn,empty:m.noDefinition})})]}):null,zn.length>0?(0,V.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:m.approvalRequired}),(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(zt,{contentKey:`${e}:approvalRequired`,items:zn,empty:m.noDefinition})})]}):null,Bn.length>0?(0,V.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:m.contextAssumptions}),(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(zt,{contentKey:`${e}:assumptions`,items:Bn,empty:m.noDefinition})})]}):null,Vn.length>0?(0,V.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:m.contextRisks}),(0,V.jsx)(`div`,{className:`mt-3`,children:(0,V.jsx)(zt,{contentKey:`${e}:risks`,items:Vn,empty:m.noDefinition})})]}):null]}):null]})})}),(0,V.jsxs)($e,{panelId:`management`,"aria-label":f===`zh`?`任务管理`:`Task management`,className:`rounded-xl border border-edge-subtle bg-surface-panel p-4`,summaryClassName:`cursor-pointer text-sm font-medium text-fg`,title:f===`zh`?`任务管理`:`Task management`,children:[(0,V.jsxs)(`aside`,{className:`min-w-0 overflow-hidden rounded-xl bg-surface-panel shadow-surface divide-y divide-edge-subtle`,children:[(0,V.jsxs)(`section`,{className:N(`p-5`,Un(`phase`,`resolution`,`priority`,`dueAt`,`delegateAgentId`)&&`task-detail-live-update`),children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:m.taskProperties}),(0,V.jsxs)(`div`,{className:`mt-4 grid gap-3 sm:grid-cols-2`,children:[(0,V.jsx)(At,{value:y.task.phase,disabled:L.has(`phase`),canMove:Wn,canApprove:Dn,canReopen:On,language:f,label:m.taskPhase,onChange:cn}),(0,V.jsx)(jt,{value:y.task.priority,disabled:L.has(`priority`),label:m.priority,labels:m.priorityLabels,onChange:ln}),(0,V.jsx)(Mt,{value:Et(y.task.dueAt),disabled:L.has(`dueAt`),label:m.dueDate,onChange:un}),(0,V.jsx)(Nt,{value:y.conversation.currentExecutorAgentId??``,disabled:L.has(`delegateAgentId`),label:m.executorLabel,unassignedLabel:m.unassigned,agents:Je,onChange:hn})]})]}),(0,V.jsxs)(`details`,{className:N(`p-5`,Un(`dependencies`)&&`task-detail-live-update`),children:[(0,V.jsxs)(`summary`,{className:`cursor-pointer text-sm font-semibold text-fg`,children:[m.taskRelations,` · `,y.dependencies.length,` / `,y.dependents.length]}),(0,V.jsxs)(`div`,{className:`mt-4 space-y-4`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`p`,{className:`mb-2 text-xs text-fg-muted`,children:m.dependencies}),(0,V.jsx)(Pt,{candidates:He,selected:y.dependencies,disabled:L.has(`dependencies`),labels:Qt,getTaskHref:tn,onChange:mn})]}),(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`p`,{className:`mb-2 text-xs text-fg-muted`,children:m.dependents}),y.dependents.length>0?(0,V.jsx)(`div`,{className:`space-y-1.5`,children:y.dependents.map(t=>(0,V.jsx)(R,{content:t.title,contentKey:`${e}:dependent:${t.id}`,language:f,previewHeight:72,className:`rounded-lg bg-surface-hover p-2.5`,children:(0,V.jsx)(o,{to:tn(t.id),className:`block break-words [overflow-wrap:anywhere] text-sm text-fg-muted transition-colors hover:text-fg`,children:t.title})},t.id))}):(0,V.jsx)(`p`,{className:`text-sm text-fg-subtle`,children:m.noDependents})]})]})]})]}),y.task.phase===`closed`?null:(0,V.jsxs)(P,{variant:`ghost`,className:`my-3`,disabled:!k,onClick:In,children:[(0,V.jsx)(T,{className:`size-4`}),Q.length>0?f===`zh`?`管理执行时间`:`Manage schedule`:m.scheduleRecurringTask]}),(0,V.jsxs)(`details`,{className:`mb-4 rounded-xl border border-edge-subtle bg-surface-panel p-5 shadow-surface`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-semibold text-fg`,children:f===`zh`?`关联内容`:`Related work`}),$.length>0||y.runs.length>0||Mn.length>0||y.dependencies.length>0||y.dependents.length>0?(0,V.jsxs)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-2`,children:[$.length>0?(0,V.jsxs)(`div`,{className:`rounded-lg bg-surface-hover p-3`,children:[(0,V.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:f===`zh`?`对话 · ${$.length}`:`Conversations · ${$.length}`}),(0,V.jsx)(bt,{contentKey:`${e}:sessions`,language:f,className:`mt-2`,children:$.map(t=>(0,V.jsx)(`li`,{children:(0,V.jsx)(o,{className:`block break-words [overflow-wrap:anywhere] text-sm text-accent hover:underline`,to:t.conversationId===X?M(e):`/chat/${encodeURIComponent(t.conversationId)}`,children:t.conversationId===X?f===`zh`?`当前执行对话`:`Current execution chat`:t.role===`discussion`?f===`zh`?`关联讨论`:`Linked discussion`:f===`zh`?`历史执行对话`:`Earlier execution chat`})},t.id))})]}):null,Mn.length>0?(0,V.jsxs)(`div`,{className:`rounded-lg bg-surface-hover p-3`,children:[(0,V.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:f===`zh`?`自动化 · ${Mn.length}`:`Automations · ${Mn.length}`}),(0,V.jsx)(bt,{contentKey:`${e}:automations`,language:f,className:`mt-2`,children:Mn.map(e=>(0,V.jsx)(`li`,{children:(0,V.jsx)(o,{className:`block break-words [overflow-wrap:anywhere] text-sm text-accent hover:underline`,to:`/automations?automation=${encodeURIComponent(e.id)}`,children:e.name})},e.id))})]}):null,y.dependencies.length>0||y.dependents.length>0?(0,V.jsxs)(`div`,{className:`rounded-lg bg-surface-hover p-3`,children:[(0,V.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:m.taskRelations}),(0,V.jsx)(`p`,{className:`mt-2 text-sm text-fg`,children:f===`zh`?`${y.dependencies.length} 个前置任务 · ${y.dependents.length} 个后续任务`:`${y.dependencies.length} prerequisites · ${y.dependents.length} dependents`})]}):null]}):(0,V.jsx)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:f===`zh`?`还没有关联内容`:`No related work yet`}),(0,V.jsx)(`div`,{className:`mt-4 border-t border-edge-subtle pt-3`,children:(0,V.jsx)(Xe,{resource:{kind:`task`,id:y.task.id,revision:String(y.task.version)},disabled:Ze||rt||L.size>0})})]}),jn.length>0?(0,V.jsxs)(`section`,{className:N(`p-5`,Un(`context`)&&`task-detail-live-update`),children:[(0,V.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:m.contextUsed}),(0,V.jsx)(`ul`,{className:`mt-4 grid gap-2 sm:grid-cols-2`,children:jn.map(e=>(0,V.jsxs)(`li`,{className:`min-w-0 rounded-lg bg-surface-hover p-2.5`,children:[(0,V.jsxs)(`span`,{className:`text-[11px] text-fg-subtle`,children:[m.contextRoleLabels[e.role],` · `,m.contextKindLabels[e.targetKind]]}),e.targetKind===`url`&&/^https?:\/\//.test(e.targetId)?(0,V.jsx)(`a`,{className:`mt-1 block break-all text-sm text-accent hover:underline`,href:e.targetId,target:`_blank`,rel:`noreferrer`,children:e.title??e.targetId}):(0,V.jsx)(`p`,{className:`mt-1 break-words text-sm text-fg`,children:e.title??e.targetId})]},e.id))})]}):null]}),(0,V.jsxs)(`details`,{className:`rounded-xl border border-edge-subtle bg-surface-panel p-4`,children:[(0,V.jsx)(`summary`,{className:`cursor-pointer text-sm font-semibold text-fg`,children:f===`zh`?`活动记录与留言`:`Activity and updates`}),(0,V.jsxs)(`div`,{className:`mt-3 space-y-4`,children:[(0,V.jsx)(xt,{taskId:e},e),(0,V.jsx)(dt,{changes:y.phaseChanges,language:f})]})]})]})]}),(0,V.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":f===`zh`?`调整任务信息和 Agent 对话的宽度`:`Resize task details and Agent chat`,"aria-valuemin":30,"aria-valuemax":60,"aria-valuenow":Math.round(st),tabIndex:0,onPointerDown:pn,onKeyDown:fn,onDoubleClick:()=>dn(It),className:`group hidden w-2 shrink-0 cursor-col-resize touch-none items-stretch justify-center bg-surface-panel outline-none transition-colors hover:bg-surface-hover focus-visible:bg-surface-hover lg:flex ${lt?`bg-surface-hover`:``}`,children:(0,V.jsx)(`div`,{className:`w-px bg-edge-strong/70 transition-colors group-hover:bg-accent group-focus-visible:bg-accent`})}),(0,V.jsxs)(`aside`,{className:`flex min-h-[34rem] min-w-0 shrink-0 flex-col border-t border-edge-subtle bg-surface-panel lg:min-h-0 lg:w-[var(--task-chat-panel-width)] lg:border-t-0`,children:[(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-edge-subtle px-4 py-3`,children:[(0,V.jsx)(`h2`,{className:`text-sm font-medium text-fg-muted`,children:f===`zh`?`执行对话`:`Execution chat`}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1`,children:[$.length>1?(0,V.jsxs)(Pe,{children:[(0,V.jsx)(Fe,{asChild:!0,children:(0,V.jsx)(P,{type:`button`,variant:`ghost`,className:`h-8 px-2 text-xs`,children:f===`zh`?`${$.length} 段对话`:`${$.length} conversations`})}),(0,V.jsx)(Ie,{children:(0,V.jsx)(Le,{align:`end`,sideOffset:6,className:`z-[100] min-w-52 rounded-lg border border-edge bg-surface-overlay p-1 shadow-popover`,children:$.map(t=>(0,V.jsx)(F,{asChild:!0,children:(0,V.jsx)(o,{className:`block rounded-md px-3 py-2 text-sm text-fg outline-none hover:bg-surface-hover focus:bg-surface-hover`,to:t.conversationId===X?M(e):`/chat/${encodeURIComponent(t.conversationId)}`,children:t.conversationId===X?f===`zh`?`当前执行对话`:`Current execution chat`:t.role===`discussion`?f===`zh`?`关联讨论`:`Linked discussion`:f===`zh`?`历史执行对话`:`Earlier execution chat`})},t.id))})})]}):null,X?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(P,{type:`button`,variant:`ghost`,className:N(`size-8 p-0`,An&&`bg-surface-hover text-fg`),"aria-label":f===`zh`?`项目文件`:`Project files`,"aria-pressed":An,onClick:()=>{we.getState().openFiles(X),v(X)},children:(0,V.jsx)(ne,{className:`size-4`,"aria-hidden":!0})}),(0,V.jsx)(P,{asChild:!0,variant:`ghost`,className:`size-8 p-0`,children:(0,V.jsx)(o,{to:M(e),"aria-label":f===`zh`?`全屏打开对话`:`Open chat full screen`,children:(0,V.jsx)(j,{className:`size-4`,"aria-hidden":!0})})})]}):null]})]}),X?(0,V.jsx)(`div`,{className:`min-h-0 flex-1`,children:(0,V.jsx)(S,{embedded:!0,conversationId:X,taskId:e})}):ee?(0,V.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,V.jsxs)(`div`,{className:`max-w-xs`,children:[(0,V.jsx)(oe,{className:`mx-auto size-8 animate-pulse text-fg-subtle`}),(0,V.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:f===`zh`?`正在创建任务会话`:`Creating task conversation`})]})}):O?(0,V.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,V.jsxs)(`div`,{className:`max-w-xs`,children:[(0,V.jsx)(oe,{className:`mx-auto size-8 text-danger`}),(0,V.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:f===`zh`?`任务会话创建失败`:`Could not create task conversation`}),(0,V.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-muted`,children:O instanceof Error?O.message:String(O)})]})}):(0,V.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,V.jsxs)(`div`,{className:`max-w-xs`,children:[(0,V.jsx)(oe,{className:`mx-auto size-8 text-fg-subtle`}),(0,V.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:f===`zh`?`等待任务会话`:`Waiting for a task conversation`}),(0,V.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-muted`,children:f===`zh`?`安排或开始任务后,Agent 的执行过程和持续对话会显示在这里。`:`Schedule or start the task to see the agent run and continue the conversation here.`})]})})]})]}),qt?(0,V.jsx)(mt,{automation:Yt??void 0,taskId:e,taskTitle:y.task.title,projectId:y.task.projectId,executorAgentId:Z,language:f,onClose:()=>Jt(!1),onCreated:Pn},`${e}:${Yt?.id??`new`}`):null,(0,V.jsx)(Ne,{open:Gt,title:m.deleteTaskTitle,description:m.deleteTaskDescription.replace(`{{title}}`,y.task.title),confirmLabel:m.confirmDeleteTask,cancelLabel:m.keepTask,destructive:!0,onConfirm:()=>{Kt(!1),gn()},onCancel:()=>Kt(!1)})]})}function Ht(){let e=(0,B.c)(2),{taskId:t}=i(),n=t===void 0?``:t,r;return e[0]===n?r=e[1]:(r=(0,V.jsx)(U,{taskId:n,presentation:`page`}),e[0]=n,e[1]=r),r}function W(e){let t=(0,B.c)(41),{taskId:n,backgroundPath:r,workspacePanelWidth:i,onClose:a}=e,o=i===void 0?0:i,s=u(Kt),c=Ae(Gt),l=o>0,d;t[0]!==a||t[1]!==c?(d=e=>{e||(c(null),a())},t[0]=a,t[1]=c,t[2]=d):d=t[2];let f=s===`zh`?`关闭任务详情`:`Close task details`,p;t[3]!==a||t[4]!==c?(p=()=>{c(null),a()},t[3]=a,t[4]=c,t[5]=p):p=t[5];let b;t[6]!==f||t[7]!==p?(b=(0,V.jsx)(`button`,{type:`button`,tabIndex:-1,"data-task-modal-backdrop":!0,className:`fixed inset-0 z-[80] bg-black/45`,"aria-label":f,onClick:p}),t[6]=f,t[7]=p,t[8]=b):b=t[8];let x=l?`true`:`false`,S=`${o/2}px`,C=`${o}px`,w;t[9]!==S||t[10]!==C?(w={"--task-detail-workspace-offset":S,"--task-detail-workspace-width":C},t[9]=S,t[10]=C,t[11]=w):w=t[11];let T=w,E=s===`zh`?`任务详情`:`Task details`,D;t[12]===E?D=t[13]:(D=(0,V.jsx)(v,{className:`font-medium text-fg`,children:E}),t[12]=E,t[13]=D);let ee=s===`zh`?`查看并操作任务详情`:`View and manage task details`,O;t[14]===ee?O=t[15]:(O=(0,V.jsx)(m,{className:`sr-only`,children:ee}),t[14]=ee,t[15]=O);let k=s===`zh`?`关闭任务详情`:`Close task details`,A;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,V.jsx)(le,{className:`size-4`,"aria-hidden":!0}),t[16]=A):A=t[16];let j;t[17]===k?j=t[18]:(j=(0,V.jsx)(`div`,{className:`flex shrink-0 items-center gap-1`,children:(0,V.jsx)(h,{className:`flex size-8 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg`,"aria-label":k,children:A})}),t[17]=k,t[18]=j);let te;t[19]!==D||t[20]!==O||t[21]!==j?(te=(0,V.jsxs)(`header`,{className:`flex shrink-0 items-center justify-between gap-3 bg-surface-panel px-5 py-3.5`,children:[D,O,j]}),t[19]=D,t[20]=O,t[21]=j,t[22]=te):te=t[22];let ne;t[23]!==a||t[24]!==c?(ne=()=>{c(null),a()},t[23]=a,t[24]=c,t[25]=ne):ne=t[25];let re;t[26]!==r||t[27]!==ne||t[28]!==n?(re=(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-hidden`,children:(0,V.jsx)(U,{taskId:n,presentation:`modal`,backgroundPath:r,onDeleted:ne})}),t[26]=r,t[27]=ne,t[28]=n,t[29]=re):re=t[29];let M;t[30]!==T||t[31]!==te||t[32]!==re||t[33]!==x?(M=(0,V.jsxs)(_,{className:`xopc-dialog-content task-detail-modal-content fixed top-1/2 z-[90] flex h-[min(54rem,calc(100dvh-2rem))] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-overlay focus:outline-none`,"data-workspace-panel-open":x,style:T,onEscapeKeyDown:Wt,onInteractOutside:Ut,children:[te,re]}),t[30]=T,t[31]=te,t[32]=re,t[33]=x,t[34]=M):M=t[34];let ie;t[35]!==M||t[36]!==b?(ie=(0,V.jsxs)(g,{children:[b,M]}),t[35]=M,t[36]=b,t[37]=ie):ie=t[37];let ae;return t[38]!==d||t[39]!==ie?(ae=(0,V.jsx)(y,{modal:!1,open:!0,onOpenChange:d,children:ie}),t[38]=d,t[39]=ie,t[40]=ae):ae=t[40],ae}function Ut(e){let t=e.detail.originalEvent.target;t instanceof Element&&t.closest(`#app-workspace-panel, [data-task-modal-backdrop]`)&&e.preventDefault()}function Wt(e){let t=e.target;t instanceof HTMLElement&&t.closest(`[data-task-inline-editor]`)&&e.preventDefault()}function Gt(e){return e.setPath}function Kt(e){return e.language}function qt(e){return(0,V.jsx)(D,{value:e.id,children:e.name||e.id},e.id)}function Jt(e){return e.id}export{W as TaskDetailModal,Ht as TaskDetailPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{m as i,t as a}from"./chunk-KS7C4IRE-CiwuuyV8.js";import{t as o}from"./external-link-DjqjBmc3.js";import{t as s}from"./file-text-D12HbeVy.js";import{t as c}from"./markdown-view-DFHa8rUg.js";import{t as l}from"./cn-0WouolD0.js";import{lt as u}from"./session-manager-DjRWxXJG.js";import{f as d}from"./use-composer-attachments-CoiQAgjo.js";import{t as f}from"./button-Cc4hUNTt.js";import{s as p}from"./composer-payload-handoff-_9L2A5AZ.js";import{t as m}from"./activity-store-WqnVruhY.js";import{m as h,o as g}from"./shares-api-CTFkLQxq.js";var _=n(),v=e(t(),1),y=r();function b(e){let t=(0,_.c)(38),{content:n,contentKey:r,language:a,markdown:o,breaks:s,previewHeight:d,className:f,children:p}=e,m=o===void 0||o,h=s!==void 0&&s,g=d===void 0?240:d,b;t[0]===n?b=t[1]:(b=u(n),t[0]=n,t[1]=b),n=b;let x=(0,v.useId)(),S=(0,v.useRef)(null),[C,w]=(0,v.useState)(!1),[T,E]=i(),D;t[2]!==r||t[3]!==T?(D=T.getAll(`taskExpanded`).includes(r),t[2]=r,t[3]=T,t[4]=D):D=t[4];let O=D,k;t[5]===g?k=t[6]:(k=()=>{let e=S.current;if(!e)return;let t=()=>w(e.scrollHeight>g);if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},t[5]=g,t[6]=k);let A;t[7]!==n||t[8]!==g?(A=[n,g],t[7]=n,t[8]=g,t[9]=A):A=t[9],(0,v.useLayoutEffect)(k,A);let j=C&&!O,M;t[10]===f?M=t[11]:(M=l(`min-w-0`,f),t[10]=f,t[11]=M);let N;t[12]!==j||t[13]!==g?(N=j?{maxHeight:g,overflow:`hidden`,maskImage:`linear-gradient(to bottom, black calc(100% - ${Math.min(24,g/3)}px), transparent)`}:void 0,t[12]=j,t[13]=g,t[14]=N):N=t[14];let P;t[15]!==h||t[16]!==p||t[17]!==n||t[18]!==m?(P=p??(m?(0,y.jsx)(c,{content:n,compact:!0,breaks:h,className:`text-sm leading-6 text-fg`}):(0,y.jsx)(`p`,{className:`whitespace-pre-wrap break-words [overflow-wrap:anywhere]`,children:n})),t[15]=h,t[16]=p,t[17]=n,t[18]=m,t[19]=P):P=t[19];let F;t[20]!==j||t[21]!==P?(F=(0,y.jsx)(`div`,{ref:S,inert:j,children:P}),t[20]=j,t[21]=P,t[22]=F):F=t[22];let I;t[23]!==x||t[24]!==F||t[25]!==N?(I=(0,y.jsx)(`div`,{id:x,style:N,children:F}),t[23]=x,t[24]=F,t[25]=N,t[26]=I):I=t[26];let L;t[27]!==r||t[28]!==O||t[29]!==x||t[30]!==a||t[31]!==C||t[32]!==E?(L=C?(0,y.jsx)(`button`,{type:`button`,"aria-expanded":O,"aria-controls":x,className:`mt-2 min-h-9 rounded-sm text-xs font-medium text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,onClick:()=>E(e=>{let t=new URLSearchParams(e),n=t.getAll(`taskExpanded`).filter(e=>e!==r);t.delete(`taskExpanded`);for(let e of n)t.append(`taskExpanded`,e);return O||t.append(`taskExpanded`,r),t},{preventScrollReset:!0}),children:a===`zh`?O?`收起`:`查看更多`:O?`Show less`:`Show more`}):null,t[27]=r,t[28]=O,t[29]=x,t[30]=a,t[31]=C,t[32]=E,t[33]=L):L=t[33];let R;return t[34]!==I||t[35]!==L||t[36]!==M?(R=(0,y.jsxs)(`div`,{className:M,children:[I,L]}),t[34]=I,t[35]=L,t[36]=M,t[37]=R):R=t[37],R}function x({wait:e,detail:t,zh:n,onUpdated:r}){let[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(!1),[c,l]=(0,v.useState)(``),[u,p]=(0,v.useState)(!1),h=(0,v.useRef)(null),g=e.kind===`approval`,_=Array.isArray(e.condition.choices)?e.condition.choices.filter(e=>typeof e==`string`):[];async function b(a){if(!g&&!i.trim()||g&&!a||o)return;let c=JSON.stringify([t.task.version,i.trim(),a]);h.current?.signature!==c&&(h.current={signature:c,key:crypto.randomUUID()}),s(!0),l(``);try{let o=await d(t.task.id,{type:`resolve_wait`,waitId:e.id,resolution:g?{kind:`task_approval`,decision:a}:{kind:`user_answer`,answer:i.trim()}},t.task.version,h.current.key);p(!0),r(o),m({tone:`success`,title:g?n?`决定已保存`:`Decision saved`:n?`补充信息已保存`:`Answer saved`,message:o.waits.length?n?`仍有其他等待条件,任务尚未恢复执行。`:`Other waiting conditions remain.`:n?`等待已解除,请在任务状态中查看后续执行进展。`:`The wait is resolved. Follow progress in the task status.`,source:n?`任务`:`Task`})}catch{l(n?`提交未确认,内容已保留。可重试;若问题已变化,请刷新。`:`Submission not confirmed. Your answer is saved here; retry or refresh if the question changed.`)}finally{s(!1)}}return(0,y.jsxs)(`form`,{className:`mt-3 space-y-3 rounded-lg border border-edge p-3`,onSubmit:e=>{e.preventDefault(),b()},children:[g?(0,y.jsxs)(`div`,{className:`text-sm text-fg`,children:[(0,y.jsx)(`p`,{children:e.reason}),(0,y.jsxs)(`p`,{className:`mt-2`,children:[n?`授权范围:`:`Permission: `,String(e.condition.capability)]}),(0,y.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,y.jsx)(f,{type:`button`,variant:`primary`,disabled:o||u,onClick:()=>void b(`approve`),children:n?`批准`:`Approve`}),(0,y.jsx)(f,{type:`button`,disabled:o||u,onClick:()=>void b(`deny`),children:n?`拒绝并暂停`:`Deny and pause`})]})]}):(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(`label`,{className:`block text-sm text-fg`,children:[typeof e.condition.question==`string`?e.condition.question:e.reason,(0,y.jsx)(`textarea`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel p-3`,rows:3,maxLength:12e3,value:i,disabled:o||u,onChange:e=>a(e.target.value)})]}),_.length>0&&(0,y.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:_.map(e=>(0,y.jsx)(f,{type:`button`,disabled:o||u,variant:`secondary`,"aria-pressed":i===e,onClick:()=>a(e),children:e},e))}),(0,y.jsx)(f,{type:`submit`,variant:`primary`,disabled:o||u||!i.trim(),children:o?n?`正在提交`:`Submitting`:n?`提交补充信息`:`Submit answer`})]}),(0,y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n?`保存到任务上下文;其他等待条件满足后继续执行。`:`Saved to task context. Work continues once all waiting conditions are met.`}),c&&(0,y.jsx)(`p`,{role:`alert`,className:`text-sm text-danger`,children:c})]})}function S(e,t){let n;try{n=new URL(e)}catch{return}return t.find(e=>[e.shareUrl,e.lanUrl].some(e=>{if(!e)return!1;try{let t=new URL(e);return t.origin===n.origin&&t.pathname.replace(/\/$/,``)===n.pathname.replace(/\/$/,``)}catch{return!1}}))}function C({uri:e,zh:t}){let[n,r]=(0,v.useState)(),[i,o]=(0,v.useState)(!1),[s,c]=(0,v.useState)(!1),[l,u]=(0,v.useState)(``),[d,p]=(0,v.useState)(``);async function m(){o(!0),u(``);try{let n=S(e,(await h()).payload.shares);r(n),c(!0),n?n.kind!==`file`&&n.kind!==`directory`?u(t?`这是文档快照,请从原笔记或对话的分享面板重新发布。`:`This is a document snapshot. Republish it from the original note or conversation.`):n.revoked?u(t?`分享已被撤销,不能自动恢复。请从原任务重新生成并分享。`:`This share was revoked. Generate and share a new artifact from the task.`):n.maxViews!==null&&n.downloadCount>=n.maxViews?u(t?`已达到访问次数上限,请在分享设置中调整后重试。`:`The access limit was reached. Adjust it in share settings.`):n.expired||(p(n.shareUrl),u(t?`链接仍在有效期内;若打不开,请检查网关连接。`:`The link has not expired. If it cannot open, check gateway connectivity.`)):u(t?`未找到本机管理的分享记录。外部链接或已清理的记录无法在这里续期,请从原任务重新生成产物。`:`No locally managed share matches this link. Regenerate the artifact from its task.`)}catch{u(t?`检查失败,请重试。`:`Check failed. Please retry.`)}finally{o(!1)}}async function _(){if(!(!n||i)){o(!0),u(``);try{let e=await g(n.id,864e5);p(e.payload.shareUrl),r({...n,expired:!1,expiresAt:e.payload.expiresAt}),u(t?`已续期 24 小时,访问范围与次数限制保持不变。`:`Renewed for 24 hours. Access scope and view limits are unchanged.`)}catch(e){u(`${t?`恢复失败:`:`Recovery failed: `}${e instanceof Error?e.message:String(e)}`)}finally{o(!1)}}}return(0,y.jsxs)(`details`,{className:`mt-2 text-xs text-fg-muted`,children:[(0,y.jsx)(`summary`,{className:`cursor-pointer py-2`,children:t?`链接打不开?`:`Trouble opening the link?`}),(0,y.jsxs)(`div`,{className:`space-y-2`,children:[(0,y.jsx)(f,{type:`button`,variant:`ghost`,disabled:i,onClick:()=>void m(),children:t?`检查链接状态`:`Check link`}),s&&n?.expired&&(n.kind===`file`||n.kind===`directory`)&&!n.revoked&&(n.maxViews===null||n.downloadCount<n.maxViews)&&(0,y.jsx)(f,{type:`button`,disabled:i,onClick:()=>void _(),children:t?`恢复链接 · 续期 24 小时`:`Restore link for 24 hours`}),l&&(0,y.jsx)(`p`,{role:`status`,className:`break-words leading-5`,children:l}),d&&(0,y.jsx)(`a`,{className:`block py-2 text-accent`,href:d,target:`_blank`,rel:`noopener noreferrer`,children:t?`打开产物`:`Open artifact`}),s&&(0,y.jsx)(a,{className:`block py-2 text-accent`,to:`/settings/shares`,children:t?`管理分享记录`:`Manage shares`})]})]})}function w(e){let t=(0,_.c)(18),{evidence:n,projectId:r,conversationId:i,language:a,onOpenFile:c,compact:l}=e,u=l!==void 0&&l,d=p(T);if(!n.length)return null;let f=a===`zh`?`交付物与验证依据`:`Deliverables and evidence`,m;if(t[0]!==u||t[1]!==i||t[2]!==n||t[3]!==a||t[4]!==c||t[5]!==r||t[6]!==d){let e;t[8]!==u||t[9]!==i||t[10]!==a||t[11]!==c||t[12]!==r||t[13]!==d?(e=(e,t)=>{let n=e.uri?.trim(),l=n&&/^https?:\/\//i.test(n),f=n&&!l&&e.kind===`artifact`&&!/^[a-z][a-z0-9+.-]*:/i.test(n)&&!n.startsWith(`//`),p=e.title||(a===`zh`?`查看产物`:`Open artifact`);return(0,y.jsxs)(`div`,{className:`min-w-0 rounded-lg border border-edge-subtle p-3`,children:[(0,y.jsx)(b,{content:p,contentKey:`${i??r}:evidence-title:${t}:${e.title}`,language:a,previewHeight:60,children:l?(0,y.jsxs)(`a`,{className:`inline-flex min-h-11 items-center gap-2 text-sm font-medium text-accent hover:underline [overflow-wrap:anywhere]`,href:n,target:`_blank`,rel:`noopener noreferrer`,children:[(0,y.jsx)(o,{className:`size-4 shrink-0`}),(0,y.jsx)(`span`,{className:`min-w-0 break-words`,children:p})]}):f&&(r||i)?(0,y.jsxs)(`button`,{type:`button`,className:`inline-flex min-h-11 items-center gap-2 text-sm font-medium text-accent hover:underline [overflow-wrap:anywhere]`,onClick:()=>c?c(n):d(n,null,r,i),children:[(0,y.jsx)(s,{className:`size-4 shrink-0`}),p]}):(0,y.jsx)(`p`,{className:`break-words [overflow-wrap:anywhere] text-sm font-medium text-fg`,children:p})}),l&&e.kind===`artifact`&&(0,y.jsx)(C,{uri:n,zh:a===`zh`},n),u&&!l&&!(f&&(r||i))?(0,y.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:a===`zh`?`位置待确认`:`Location needs confirmation`}):null,!u&&e.summary?(0,y.jsx)(b,{content:e.summary,contentKey:`${i??r}:evidence:${t}:${e.title}`,language:a,markdown:!1,previewHeight:80,className:`mt-1 text-xs leading-5 text-fg-muted`}):null,u?null:(0,y.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:e.provenance===`judge`?e.strength===`verified`?a===`zh`?`模型审阅通过`:`Model reviewed`:a===`zh`?`模型未确认,待核验`:`Not confirmed by review`:e.strength===`verified`?a===`zh`?`已验证`:`Verified`:a===`zh`?`已记录,待验证`:`Observed, not verified`})]},`${e.title}-${t}`)},t[8]=u,t[9]=i,t[10]=a,t[11]=c,t[12]=r,t[13]=d,t[14]=e):e=t[14],m=n.map(e),t[0]=u,t[1]=i,t[2]=n,t[3]=a,t[4]=c,t[5]=r,t[6]=d,t[7]=m}else m=t[7];let h;return t[15]!==f||t[16]!==m?(h=(0,y.jsx)(`div`,{className:`mt-4 grid gap-2 sm:grid-cols-2`,"aria-label":f,children:m}),t[15]=f,t[16]=m,t[17]=h):h=t[17],h}function T(e){return e.setPath}export{x as n,b as r,w as t};
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{m as i,t as a}from"./chunk-KS7C4IRE-CiwuuyV8.js";import{t as o}from"./external-link-DjqjBmc3.js";import{t as s}from"./file-text-D12HbeVy.js";import{t as c}from"./markdown-view-DrhYZSmg.js";import{t as l}from"./cn-0WouolD0.js";import{lt as u}from"./session-manager-X4UHOjjO.js";import{f as d}from"./use-composer-attachments-XRlQBdNF.js";import{t as f}from"./button-Cc4hUNTt.js";import{s as p}from"./composer-payload-handoff-Bogdq9Hy.js";import{t as m}from"./activity-store-BpYGrRXw.js";import{m as h,o as g}from"./shares-api-DOeDN6Tm.js";var _=n(),v=e(t(),1),y=r();function b(e){let t=(0,_.c)(38),{content:n,contentKey:r,language:a,markdown:o,breaks:s,previewHeight:d,className:f,children:p}=e,m=o===void 0||o,h=s!==void 0&&s,g=d===void 0?240:d,b;t[0]===n?b=t[1]:(b=u(n),t[0]=n,t[1]=b),n=b;let x=(0,v.useId)(),S=(0,v.useRef)(null),[C,w]=(0,v.useState)(!1),[T,E]=i(),D;t[2]!==r||t[3]!==T?(D=T.getAll(`taskExpanded`).includes(r),t[2]=r,t[3]=T,t[4]=D):D=t[4];let O=D,k;t[5]===g?k=t[6]:(k=()=>{let e=S.current;if(!e)return;let t=()=>w(e.scrollHeight>g);if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},t[5]=g,t[6]=k);let A;t[7]!==n||t[8]!==g?(A=[n,g],t[7]=n,t[8]=g,t[9]=A):A=t[9],(0,v.useLayoutEffect)(k,A);let j=C&&!O,M;t[10]===f?M=t[11]:(M=l(`min-w-0`,f),t[10]=f,t[11]=M);let N;t[12]!==j||t[13]!==g?(N=j?{maxHeight:g,overflow:`hidden`,maskImage:`linear-gradient(to bottom, black calc(100% - ${Math.min(24,g/3)}px), transparent)`}:void 0,t[12]=j,t[13]=g,t[14]=N):N=t[14];let P;t[15]!==h||t[16]!==p||t[17]!==n||t[18]!==m?(P=p??(m?(0,y.jsx)(c,{content:n,compact:!0,breaks:h,className:`text-sm leading-6 text-fg`}):(0,y.jsx)(`p`,{className:`whitespace-pre-wrap break-words [overflow-wrap:anywhere]`,children:n})),t[15]=h,t[16]=p,t[17]=n,t[18]=m,t[19]=P):P=t[19];let F;t[20]!==j||t[21]!==P?(F=(0,y.jsx)(`div`,{ref:S,inert:j,children:P}),t[20]=j,t[21]=P,t[22]=F):F=t[22];let I;t[23]!==x||t[24]!==F||t[25]!==N?(I=(0,y.jsx)(`div`,{id:x,style:N,children:F}),t[23]=x,t[24]=F,t[25]=N,t[26]=I):I=t[26];let L;t[27]!==r||t[28]!==O||t[29]!==x||t[30]!==a||t[31]!==C||t[32]!==E?(L=C?(0,y.jsx)(`button`,{type:`button`,"aria-expanded":O,"aria-controls":x,className:`mt-2 min-h-9 rounded-sm text-xs font-medium text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,onClick:()=>E(e=>{let t=new URLSearchParams(e),n=t.getAll(`taskExpanded`).filter(e=>e!==r);t.delete(`taskExpanded`);for(let e of n)t.append(`taskExpanded`,e);return O||t.append(`taskExpanded`,r),t},{preventScrollReset:!0}),children:a===`zh`?O?`收起`:`查看更多`:O?`Show less`:`Show more`}):null,t[27]=r,t[28]=O,t[29]=x,t[30]=a,t[31]=C,t[32]=E,t[33]=L):L=t[33];let R;return t[34]!==I||t[35]!==L||t[36]!==M?(R=(0,y.jsxs)(`div`,{className:M,children:[I,L]}),t[34]=I,t[35]=L,t[36]=M,t[37]=R):R=t[37],R}function x({wait:e,detail:t,zh:n,onUpdated:r}){let[i,a]=(0,v.useState)(``),[o,s]=(0,v.useState)(!1),[c,l]=(0,v.useState)(``),[u,p]=(0,v.useState)(!1),h=(0,v.useRef)(null),g=e.kind===`approval`,_=Array.isArray(e.condition.choices)?e.condition.choices.filter(e=>typeof e==`string`):[];async function b(a){if(!g&&!i.trim()||g&&!a||o)return;let c=JSON.stringify([t.task.version,i.trim(),a]);h.current?.signature!==c&&(h.current={signature:c,key:crypto.randomUUID()}),s(!0),l(``);try{let o=await d(t.task.id,{type:`resolve_wait`,waitId:e.id,resolution:g?{kind:`task_approval`,decision:a}:{kind:`user_answer`,answer:i.trim()}},t.task.version,h.current.key);p(!0),r(o),m({tone:`success`,title:g?n?`决定已保存`:`Decision saved`:n?`补充信息已保存`:`Answer saved`,message:o.waits.length?n?`仍有其他等待条件,任务尚未恢复执行。`:`Other waiting conditions remain.`:n?`等待已解除,请在任务状态中查看后续执行进展。`:`The wait is resolved. Follow progress in the task status.`,source:n?`任务`:`Task`})}catch{l(n?`提交未确认,内容已保留。可重试;若问题已变化,请刷新。`:`Submission not confirmed. Your answer is saved here; retry or refresh if the question changed.`)}finally{s(!1)}}return(0,y.jsxs)(`form`,{className:`mt-3 space-y-3 rounded-lg border border-edge p-3`,onSubmit:e=>{e.preventDefault(),b()},children:[g?(0,y.jsxs)(`div`,{className:`text-sm text-fg`,children:[(0,y.jsx)(`p`,{children:e.reason}),(0,y.jsxs)(`p`,{className:`mt-2`,children:[n?`授权范围:`:`Permission: `,String(e.condition.capability)]}),(0,y.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,y.jsx)(f,{type:`button`,variant:`primary`,disabled:o||u,onClick:()=>void b(`approve`),children:n?`批准`:`Approve`}),(0,y.jsx)(f,{type:`button`,disabled:o||u,onClick:()=>void b(`deny`),children:n?`拒绝并暂停`:`Deny and pause`})]})]}):(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(`label`,{className:`block text-sm text-fg`,children:[typeof e.condition.question==`string`?e.condition.question:e.reason,(0,y.jsx)(`textarea`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel p-3`,rows:3,maxLength:12e3,value:i,disabled:o||u,onChange:e=>a(e.target.value)})]}),_.length>0&&(0,y.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:_.map(e=>(0,y.jsx)(f,{type:`button`,disabled:o||u,variant:`secondary`,"aria-pressed":i===e,onClick:()=>a(e),children:e},e))}),(0,y.jsx)(f,{type:`submit`,variant:`primary`,disabled:o||u||!i.trim(),children:o?n?`正在提交`:`Submitting`:n?`提交补充信息`:`Submit answer`})]}),(0,y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n?`保存到任务上下文;其他等待条件满足后继续执行。`:`Saved to task context. Work continues once all waiting conditions are met.`}),c&&(0,y.jsx)(`p`,{role:`alert`,className:`text-sm text-danger`,children:c})]})}function S(e,t){let n;try{n=new URL(e)}catch{return}return t.find(e=>[e.shareUrl,e.lanUrl].some(e=>{if(!e)return!1;try{let t=new URL(e);return t.origin===n.origin&&t.pathname.replace(/\/$/,``)===n.pathname.replace(/\/$/,``)}catch{return!1}}))}function C({uri:e,zh:t}){let[n,r]=(0,v.useState)(),[i,o]=(0,v.useState)(!1),[s,c]=(0,v.useState)(!1),[l,u]=(0,v.useState)(``),[d,p]=(0,v.useState)(``);async function m(){o(!0),u(``);try{let n=S(e,(await h()).payload.shares);r(n),c(!0),n?n.kind!==`file`&&n.kind!==`directory`?u(t?`这是文档快照,请从原笔记或对话的分享面板重新发布。`:`This is a document snapshot. Republish it from the original note or conversation.`):n.revoked?u(t?`分享已被撤销,不能自动恢复。请从原任务重新生成并分享。`:`This share was revoked. Generate and share a new artifact from the task.`):n.maxViews!==null&&n.downloadCount>=n.maxViews?u(t?`已达到访问次数上限,请在分享设置中调整后重试。`:`The access limit was reached. Adjust it in share settings.`):n.expired||(p(n.shareUrl),u(t?`链接仍在有效期内;若打不开,请检查网关连接。`:`The link has not expired. If it cannot open, check gateway connectivity.`)):u(t?`未找到本机管理的分享记录。外部链接或已清理的记录无法在这里续期,请从原任务重新生成产物。`:`No locally managed share matches this link. Regenerate the artifact from its task.`)}catch{u(t?`检查失败,请重试。`:`Check failed. Please retry.`)}finally{o(!1)}}async function _(){if(!(!n||i)){o(!0),u(``);try{let e=await g(n.id,864e5);p(e.payload.shareUrl),r({...n,expired:!1,expiresAt:e.payload.expiresAt}),u(t?`已续期 24 小时,访问范围与次数限制保持不变。`:`Renewed for 24 hours. Access scope and view limits are unchanged.`)}catch(e){u(`${t?`恢复失败:`:`Recovery failed: `}${e instanceof Error?e.message:String(e)}`)}finally{o(!1)}}}return(0,y.jsxs)(`details`,{className:`mt-2 text-xs text-fg-muted`,children:[(0,y.jsx)(`summary`,{className:`cursor-pointer py-2`,children:t?`链接打不开?`:`Trouble opening the link?`}),(0,y.jsxs)(`div`,{className:`space-y-2`,children:[(0,y.jsx)(f,{type:`button`,variant:`ghost`,disabled:i,onClick:()=>void m(),children:t?`检查链接状态`:`Check link`}),s&&n?.expired&&(n.kind===`file`||n.kind===`directory`)&&!n.revoked&&(n.maxViews===null||n.downloadCount<n.maxViews)&&(0,y.jsx)(f,{type:`button`,disabled:i,onClick:()=>void _(),children:t?`恢复链接 · 续期 24 小时`:`Restore link for 24 hours`}),l&&(0,y.jsx)(`p`,{role:`status`,className:`break-words leading-5`,children:l}),d&&(0,y.jsx)(`a`,{className:`block py-2 text-accent`,href:d,target:`_blank`,rel:`noopener noreferrer`,children:t?`打开产物`:`Open artifact`}),s&&(0,y.jsx)(a,{className:`block py-2 text-accent`,to:`/settings/shares`,children:t?`管理分享记录`:`Manage shares`})]})]})}function w(e){let t=(0,_.c)(18),{evidence:n,projectId:r,conversationId:i,language:a,onOpenFile:c,compact:l}=e,u=l!==void 0&&l,d=p(T);if(!n.length)return null;let f=a===`zh`?`交付物与验证依据`:`Deliverables and evidence`,m;if(t[0]!==u||t[1]!==i||t[2]!==n||t[3]!==a||t[4]!==c||t[5]!==r||t[6]!==d){let e;t[8]!==u||t[9]!==i||t[10]!==a||t[11]!==c||t[12]!==r||t[13]!==d?(e=(e,t)=>{let n=e.uri?.trim(),l=n&&/^https?:\/\//i.test(n),f=n&&!l&&e.kind===`artifact`&&!/^[a-z][a-z0-9+.-]*:/i.test(n)&&!n.startsWith(`//`),p=e.title||(a===`zh`?`查看产物`:`Open artifact`);return(0,y.jsxs)(`div`,{className:`min-w-0 rounded-lg border border-edge-subtle p-3`,children:[(0,y.jsx)(b,{content:p,contentKey:`${i??r}:evidence-title:${t}:${e.title}`,language:a,previewHeight:60,children:l?(0,y.jsxs)(`a`,{className:`inline-flex min-h-11 items-center gap-2 text-sm font-medium text-accent hover:underline [overflow-wrap:anywhere]`,href:n,target:`_blank`,rel:`noopener noreferrer`,children:[(0,y.jsx)(o,{className:`size-4 shrink-0`}),(0,y.jsx)(`span`,{className:`min-w-0 break-words`,children:p})]}):f&&(r||i)?(0,y.jsxs)(`button`,{type:`button`,className:`inline-flex min-h-11 items-center gap-2 text-sm font-medium text-accent hover:underline [overflow-wrap:anywhere]`,onClick:()=>c?c(n):d(n,null,r,i),children:[(0,y.jsx)(s,{className:`size-4 shrink-0`}),p]}):(0,y.jsx)(`p`,{className:`break-words [overflow-wrap:anywhere] text-sm font-medium text-fg`,children:p})}),l&&e.kind===`artifact`&&(0,y.jsx)(C,{uri:n,zh:a===`zh`},n),u&&!l&&!(f&&(r||i))?(0,y.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:a===`zh`?`位置待确认`:`Location needs confirmation`}):null,!u&&e.summary?(0,y.jsx)(b,{content:e.summary,contentKey:`${i??r}:evidence:${t}:${e.title}`,language:a,markdown:!1,previewHeight:80,className:`mt-1 text-xs leading-5 text-fg-muted`}):null,u?null:(0,y.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:e.provenance===`judge`?e.strength===`verified`?a===`zh`?`模型审阅通过`:`Model reviewed`:a===`zh`?`模型未确认,待核验`:`Not confirmed by review`:e.strength===`verified`?a===`zh`?`已验证`:`Verified`:a===`zh`?`已记录,待验证`:`Observed, not verified`})]},`${e.title}-${t}`)},t[8]=u,t[9]=i,t[10]=a,t[11]=c,t[12]=r,t[13]=d,t[14]=e):e=t[14],m=n.map(e),t[0]=u,t[1]=i,t[2]=n,t[3]=a,t[4]=c,t[5]=r,t[6]=d,t[7]=m}else m=t[7];let h;return t[15]!==f||t[16]!==m?(h=(0,y.jsx)(`div`,{className:`mt-4 grid gap-2 sm:grid-cols-2`,"aria-label":f,children:m}),t[15]=f,t[16]=m,t[17]=h):h=t[17],h}function T(e){return e.setPath}export{x as n,b as r,w as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as e}from"./locale-store-
|
|
1
|
+
import{p as e}from"./locale-store-B6OrWgY1.js";var t=[];function n(e,n){return e[n]??t}var r=0;function i(){return globalThis.crypto?.randomUUID?.()??`terminal-${Date.now()}-${++r}`}function a(e){let t=typeof window>`u`?640:Math.max(180,Math.floor(window.innerHeight*.65));return Math.min(640,t,Math.max(180,Math.round(e)))}var o=e((e,t)=>({openByConversationId:{},tabsByConversationId:{},activeTabKeyByConversationId:{},height:300,open:n=>{let r=t();if(r.tabsByConversationId[n]?.length){e({openByConversationId:{...r.openByConversationId,[n]:!0}});return}let a=i();e({openByConversationId:{...r.openByConversationId,[n]:!0},tabsByConversationId:{...r.tabsByConversationId,[n]:[{key:a}]},activeTabKeyByConversationId:{...r.activeTabKeyByConversationId,[n]:a}})},toggle:n=>{let r=t(),i=!r.openByConversationId[n];if(!i||r.tabsByConversationId[n]?.length){e({openByConversationId:{...r.openByConversationId,[n]:i}});return}r.open(n)},close:t=>e(e=>({openByConversationId:{...e.openByConversationId,[t]:!1}})),addTerminal:n=>{let r=t(),a=r.tabsByConversationId[n]??[];if(a.length>=8)return r.activeTabKeyByConversationId[n]??a[0].key;let o=i();return e({tabsByConversationId:{...r.tabsByConversationId,[n]:[...a,{key:o}]},activeTabKeyByConversationId:{...r.activeTabKeyByConversationId,[n]:o}}),o},closeTerminal:(t,n)=>e(e=>{let r=e.tabsByConversationId[t]??[],i=r.findIndex(e=>e.key===n);if(i<0)return e;let a=r.filter(e=>e.key!==n),o=e.activeTabKeyByConversationId[t],s=o===n?a[Math.min(i,a.length-1)]?.key:o;return{tabsByConversationId:{...e.tabsByConversationId,[t]:a},activeTabKeyByConversationId:{...e.activeTabKeyByConversationId,[t]:s}}}),setActiveTerminal:(t,n)=>e(e=>(e.tabsByConversationId[t]??[]).some(e=>e.key===n)?{activeTabKeyByConversationId:{...e.activeTabKeyByConversationId,[t]:n}}:e),setHeight:t=>e({height:a(t)})}));export{n,o as r,a as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as e}from"./locale-store-
|
|
1
|
+
import{p as e}from"./locale-store-B6OrWgY1.js";import{t}from"./middleware-Pd0e8Igk.js";var n=`default`,r={light:{default:`#f7f8fa`,emerald:`#f0fdf4`,clay:`#fffaf0`,dawn:`#accdec`,porcelain:`#f6f0e7`},dark:{default:`#14171c`,emerald:`#000000`,clay:`#0a1a1a`,dawn:`#172433`,porcelain:`#211c19`}};function i(e,t){let n=document.head;if(!n)return;let i=n.querySelector(`meta[name="theme-color"][data-xopc-theme-color="true"]`);i||(i=document.createElement(`meta`),i.setAttribute(`name`,`theme-color`),i.setAttribute(`data-xopc-theme-color`,`true`),n.appendChild(i)),i.setAttribute(`content`,r[e][t])}function a(){return globalThis.matchMedia?.(`(prefers-color-scheme: dark)`).matches??!1}function o(e){return e===`system`?a()?`dark`:`light`:e}function s(){return globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1}function c(e){return e==="default"||e===`emerald`||e===`clay`||e===`dawn`||e===`porcelain`?e:n}function l(e){window.electronAPI?.theme?.setPreference(e).catch(()=>{})}function u(e,t,n){let r=document.documentElement,a=()=>{r.classList.toggle(`dark`,e===`dark`),r.dataset.theme=e,r.dataset.colorScheme=t,i(e,t)},o=document;n&&!s()&&typeof o.startViewTransition==`function`?o.startViewTransition(a):a()}function d(){try{let e=localStorage.getItem(`xopc-web-theme`),t=`system`,r=n;if(e){let n=JSON.parse(e);n.state?.preference&&(t=n.state.preference),n.state&&`colorScheme`in n.state&&(r=c(n.state.colorScheme))}u(o(t),r,!1),l(t)}catch{u(o(`system`),`default`,!1)}}var f=e(t((e,t)=>({preference:`system`,colorScheme:n,resolved:o(`system`),setPreference:n=>{let r=o(n),{resolved:i,colorScheme:a}=t();u(r,a,r!==i),e({preference:n,resolved:r}),l(n)},setColorScheme:n=>{let{resolved:r}=t();u(r,n,!0),e({colorScheme:n})}}),{name:`xopc-web-theme`,merge:(e,t)=>{let n=e??{};return{...t,...n,colorScheme:c(n.colorScheme)}}}));function p(){let{preference:e,colorScheme:t}=f.getState(),n=o(e);u(n,t,!1),f.setState({resolved:n}),l(e)}function m(){let e=globalThis.matchMedia?.(`(prefers-color-scheme: dark)`);if(!e)return()=>{};let t=()=>{let{preference:e,colorScheme:t}=f.getState();if(e!==`system`)return;let n=o(`system`),r=f.getState().resolved;u(n,t,n!==r),f.setState({resolved:n})};return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)}export{f as i,m as n,p as r,d as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{i,n as ee,o as a}from"./locale-store-B7y-RVe8.js";import{a as te,i as ne,n as o,o as re,r as ie,s as ae,t as oe}from"./dist-BGTk37IG.js";import{t as s}from"./popover-select-CEMWIrtY.js";import{t as se}from"./secret-input-Dryrns2s.js";import{t as c}from"./skeleton-BI5TyibZ.js";import{i as l}from"./vendor-swr-CdRzEUwF.js";import{t as u}from"./button-Cc4hUNTt.js";import{t as ce}from"./sliding-tab-list-DuQyViqe.js";import{t as d}from"./number-input-El7Szeln.js";import{n as le,t as ue}from"./settings-page-header-BLKI3_9N.js";import"./settings-page-layout-BqBVrkC9.js";import{n as f,t as p}from"./use-autosave-zkzRuUtx.js";var m=e(t(),1),h=n(),g=e=>i(`/api/observability/${e}`);async function _(e,t=`GET`,n){return a(g(e),{method:t,...n===void 0?{}:{body:JSON.stringify(n)}})}var v=r(),y=`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,b=`space-y-4 rounded-xl border border-edge bg-surface-panel p-4`,x=(e=0)=>`${(e/1048576).toFixed(1)} MiB`;function S(){let e=(0,h.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,v.jsxs)(`div`,{"aria-busy":`true`,className:`space-y-4`,children:[(0,v.jsx)(c,{className:`h-48 rounded-xl`}),(0,v.jsx)(c,{className:`h-64 rounded-xl`})]}),e[0]=t):t=e[0],t}function de(e,t){let n=0,r=e,i=new Set;for(;r.parentSpanId&&n<12&&!i.has(r.spanId);){i.add(r.spanId);let e=t.find(e=>e.spanId===r.parentSpanId);if(!e)break;r=e,n++}return n}function fe(e){let t=[],n=new Set;function r(i){n.has(i.spanId)||(n.add(i.spanId),t.push(i),e.filter(e=>e.parentSpanId===i.spanId).forEach(r))}return e.filter(t=>!t.parentSpanId||!e.some(e=>e.spanId===t.parentSpanId)).forEach(r),e.forEach(r),t}function pe(){let e=ee(e=>e.language)===`zh`,t=(t,n)=>e?n:t,n=l(g(`tracing/settings`),()=>_(`tracing/settings`)),r=l(g(`tracing/status`),()=>_(`tracing/status`),{refreshInterval:1e4}),[i,a]=(0,m.useState)(),[h,pe]=(0,m.useState)(),C=i??h??n.data?.config,[w,T]=(0,m.useState)(``),[E,D]=(0,m.useState)(``),[me,O]=(0,m.useState)(0),[k,he]=(0,m.useState)(!1),[ge,A]=(0,m.useState)(``),[_e,ve]=(0,m.useState)(!1),[j,ye]=(0,m.useState)(``),[M,be]=(0,m.useState)(`7`),[N,xe]=(0,m.useState)({conversationId:``,runId:``,agentId:``}),[P,F]=(0,m.useState)(`records`),[I,Se]=(0,m.useState)(`10`),[Ce,L]=(0,m.useState)([``]),[R,z]=(0,m.useState)(0),[we,Te]=(0,m.useState)(()=>Date.now()+1),B=Ce[R],[V,H]=(0,m.useState)();function U(){L([``]),z(0),Te(Date.now()+1)}let[Ee,W]=(0,m.useState)(!1),G=new URLSearchParams({limit:I,from:String(we-Number(M)*864e5),to:String(we)});j&&G.set(`status`,j),B&&G.set(`cursor`,B);for(let[e,t]of Object.entries(N))t&&G.set(e,t);let De=`traces?${G}`,K=l(g(De),()=>_(De),{refreshInterval:B?0:1e4}),q=l(V?g(`traces/${V}`):null,()=>_(`traces/${V}`));function J(e){if(!C)return;let t=structuredClone(C);e(t),a(t)}async function Y(e,i=t(`Saved`,`已保存`)){he(!0),A(``),ve(!1);try{await e(),A(i),await Promise.all([n.mutate(),r.mutate(),K.mutate()])}catch(e){ve(!0),A(e instanceof Error?e.message:t(`Request failed`,`操作失败`))}finally{he(!1)}}let X=p({value:C??null,dirty:!!(i&&JSON.stringify(i)!==JSON.stringify(h??n.data?.config)),validate:e=>{if([[`retentionDays`,1,90],[`maxStoreMiB`,16,4096],[`maxTraces`,10,1e5],[`maxSpans`,100,1e6],[`maxTraceKiB`,16,4096],[`maxWriteMiBPerMinute`,1,100]].some(([t,n,r])=>!Number.isInteger(e.local[t])||e.local[t]<n||e.local[t]>r))return t(`Enter valid storage limits before continuing.`,`请填写有效的存储限额。`);try{let t=new URL(e.langfuse.baseUrl);if(![`http:`,`https:`].includes(t.protocol)||e.langfuse.baseUrl.length>2048)throw Error()}catch{return t(`Enter a valid HTTP(S) Base URL.`,`请填写有效的 HTTP(S) Base URL。`)}return null},onSave:async e=>{let t=await _(`tracing/settings`,`PATCH`,e);pe(t.config),a(t=>t&&JSON.stringify(t)===JSON.stringify(e)?void 0:t),await r.mutate().catch(()=>{})}}),Z=(0,m.useMemo)(()=>({publicKey:w.trim(),secretKey:E.trim()}),[w,E]),Q=p({value:Z,dirty:!!(Z.publicKey||Z.secretKey),delayMs:1e3,validate:e=>e.publicKey.length>512||e.secretKey.length>512?t(`Credentials must be at most 512 characters.`,`凭证长度不能超过 512 个字符。`):null,onSave:async e=>{await _(`tracing/langfuse/credentials`,`PUT`,{...e.publicKey?{publicKey:e.publicKey}:{},...e.secretKey?{secretKey:e.secretKey}:{}}),T(t=>t.trim()===e.publicKey?``:t),D(t=>t.trim()===e.secretKey?``:t),O(e=>e+1),await Promise.allSettled([n.mutate(),r.mutate()])}}),$=[X.status,Q.status].some(e=>e===`dirty`||e===`saving`);async function Oe(){V&&await Y(async()=>{let e=await _(`traces/${V}/export`),t=URL.createObjectURL(new Blob([JSON.stringify(e,null,2)],{type:`application/json`})),n=document.createElement(`a`);n.href=t,n.download=`trace-${V}.json`,n.click(),URL.revokeObjectURL(t)},t(`Exported`,`已导出`))}return(0,v.jsxs)(le,{className:`space-y-6`,children:[(0,v.jsx)(ue,{title:t(`Runtime tracing`,`运行追踪`),subtitle:t(`Local diagnostics with bounded retention. Enable Langfuse to also export new traces.`,`默认保留有界本地记录;启用 Langfuse 后同时导出新采集的追踪。`),actions:P===`settings`?(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,v.jsx)(`span`,{className:`text-xs text-fg-muted`,children:t(`Changes save automatically`,`修改后自动保存`)}),(0,v.jsx)(f,{status:X.status,error:X.error})]}):(0,v.jsx)(u,{disabled:K.isValidating,onClick:U,children:t(`Refresh records`,`刷新记录`)})}),ge&&(0,v.jsx)(`p`,{role:_e?`alert`:`status`,className:`text-sm text-fg-muted`,children:ge}),n.error&&(0,v.jsxs)(`div`,{role:`alert`,className:b,children:[(0,v.jsx)(`p`,{children:t(`Unable to load tracing settings.`,`无法加载追踪设置。`)}),(0,v.jsx)(u,{variant:`ghost`,onClick:()=>void n.mutate(),children:t(`Retry loading settings`,`重新加载设置`)})]}),(0,v.jsxs)(ce,{as:`nav`,"aria-label":t(`Tracing sections`,`追踪页面分区`),className:`flex gap-2 border-b border-edge pb-3`,children:[(0,v.jsx)(u,{"aria-pressed":P===`records`,variant:`ghost`,onClick:()=>F(`records`),children:t(`Execution records`,`执行记录`)}),(0,v.jsx)(u,{"aria-pressed":P===`settings`,variant:`ghost`,onClick:()=>F(`settings`),children:t(`Capture settings`,`采集设置`)})]}),P===`settings`&&(C?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`section`,{className:b,onBlurCapture:X.onBlurCapture,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:t(`Local recording`,`本地记录`)}),X.error&&(0,v.jsx)(u,{variant:`ghost`,onClick:X.retry,children:t(`Retry autosave`,`重试自动保存`)}),(0,v.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,v.jsx)(`input`,{type:`checkbox`,checked:C.enabled,onChange:e=>J(t=>{t.enabled=e.target.checked})}),t(`Record traces`,`记录运行追踪`)]}),(0,v.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-3`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Retention (days)`,`保留天数`),(0,v.jsx)(d,{className:y,type:`number`,min:1,max:90,value:C.local.retentionDays,onChange:e=>J(t=>{t.local.retentionDays=Number(e.target.value)})})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Storage budget (MiB)`,`存储上限(MiB)`),(0,v.jsx)(d,{className:y,type:`number`,min:16,max:4096,value:C.local.maxStoreMiB,onChange:e=>J(t=>{t.local.maxStoreMiB=Number(e.target.value)})})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Capture`,`采集内容`),(0,v.jsx)(s,{placeholder:t(`Choose`,`请选择`),allowEmpty:!1,value:C.capture,onChange:e=>J(t=>{t.capture=e}),options:[{value:`metadata`,label:t(`Metadata only`,`仅元数据`)},{value:`redacted`,label:t(`Redacted previews`,`脱敏摘要`)},{value:`detailed`,label:t(`Detailed · 30 minutes`,`详细记录 · 30 分钟`)}]})]})]}),(0,v.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t(`Previews may contain personal content. Secrets and media are filtered; large values are truncated.`,`摘要可能包含个人内容。过滤凭证和媒体,超长内容会截断。`)}),C.detailedUntil&&(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Detailed capture expires: `,`详细采集截止:`),new Date(C.detailedUntil).toLocaleString()]}),(0,v.jsxs)(`details`,{children:[(0,v.jsx)(`summary`,{className:`cursor-pointer text-sm`,children:t(`Advanced limits`,`高级限制`)}),(0,v.jsx)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-2`,children:[[`maxTraces`,t(`Trace count`,`Trace 条数`)],[`maxSpans`,t(`Span count`,`Span 条数`)],[`maxTraceKiB`,t(`Per trace (KiB)`,`单 Trace 上限(KiB)`)],[`maxWriteMiBPerMinute`,t(`Write budget (MiB/minute)`,`写入额度(MiB/分钟)`)]].map(([e,t])=>(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t,(0,v.jsx)(d,{type:`number`,min:1,className:y,value:C.local[e],onChange:t=>J(n=>{n.local[e]=Number(t.target.value)})})]},e))})]}),r.data?(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Disk / payload`,`磁盘 / 数据`),`:`,x(r.data.local.physicalBytes),` / `,x(r.data.local.bytes),` · `,r.data.local.traces??0,` traces · `,r.data.local.spans??0,` spans · `,t(`Dropped`,`丢弃`),` `,Number(r.data.local.dropped??0)+Number(r.data.local.queueDropped??0),(r.data.local.paused||r.data.local.unavailable)&&` · ${t(`Recording paused`,`存储暂停`)}`]}):(0,v.jsx)(c,{className:`h-10`}),(r.error||r.data?.local.lastError)&&(0,v.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,v.jsx)(`p`,{role:`alert`,children:r.data?.local.lastError?t(`Trace recording is unavailable.`,`追踪记录异常。`):t(`Unable to load recording status.`,`无法获取记录状态。`)}),(0,v.jsx)(u,{variant:`ghost`,onClick:()=>void r.mutate(),children:t(`Refresh recording status`,`刷新记录状态`)}),(0,v.jsxs)(`details`,{children:[(0,v.jsx)(`summary`,{className:`cursor-pointer text-fg-muted`,children:t(`Technical details`,`技术详情`)}),(0,v.jsx)(`p`,{className:`mt-2 break-words text-fg-muted`,children:r.data?.local.lastError||String(r.error?.message)})]})]}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(u,{disabled:k||$,onClick:()=>void Y(async()=>{await _(`traces/prune`,`POST`)}),children:t(`Clean expired`,`清理过期记录`)}),(0,v.jsx)(u,{disabled:k,onClick:()=>W(!0),children:t(`Clear local traces`,`清空本地追踪`)})]})]}),(0,v.jsxs)(`section`,{className:b,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:`Langfuse`}),(0,v.jsx)(f,{status:Q.status,error:Q.error})]}),Q.error&&(0,v.jsx)(u,{variant:`ghost`,onClick:Q.retry,children:t(`Retry autosave`,`重试自动保存`)}),(0,v.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,v.jsx)(`input`,{type:`checkbox`,checked:C.langfuse.enabled,onBlur:X.onBlurCapture,onChange:e=>J(t=>{t.langfuse.enabled=e.target.checked})}),t(`Also export new traces to Langfuse`,`同时导出新采集的追踪到 Langfuse`)]}),(0,v.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm sm:col-span-2`,children:[`Base URL`,(0,v.jsx)(`input`,{className:y,type:`url`,value:C.langfuse.baseUrl,onBlur:X.onBlurCapture,onChange:e=>J(t=>{t.langfuse.baseUrl=e.target.value})})]}),[`publicKey`,`secretKey`].map(e=>{let r=e===`publicKey`?`Public Key`:`Secret Key`,i=e===`publicKey`?w:E,ee=n.data?.credentials[e===`publicKey`?`publicKeyConfigured`:`secretKeyConfigured`];return(0,v.jsxs)(`div`,{className:`space-y-1 text-sm`,onBlurCapture:Q.onBlurCapture,children:[(0,v.jsx)(`label`,{htmlFor:`langfuse-${e}`,children:r}),(0,v.jsx)(se,{id:`langfuse-${e}`,value:i||(ee?`••••••••••••`:``),allowUnrevealedCopy:!0,onChange:t=>(e===`publicKey`?T:D)(t.replace(/^•+/,``)),placeholder:e===`publicKey`?`pk-lf-…`:`sk-lf-…`,labels:{show:t(`Show ${r}`,`查看 ${r}`),hide:t(`Hide ${r}`,`隐藏 ${r}`),copy:t(`Copy ${r}`,`复制 ${r}`),copied:t(`Copied`,`已复制`)},reveal:()=>_(`tracing/langfuse/credentials/${e}/reveal`,`POST`).then(e=>e.key),loadFailedLabel:t(`Unable to load the configured key.`,`无法读取已配置的 Key。`),notInConfigFile:t(`No configured key is available.`,`暂无已配置的 Key。`)},me)]},e)})]}),(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Credential sources`,`凭证来源`),`:`,n.data?.credentials.publicKeySource,` / `,n.data?.credentials.secretKeySource,` · URL: `,n.data?.credentials.baseUrlSource]}),r.data&&(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[r.data.langfuse.state,` · `,t(`Pending`,`待发送`),` `,r.data.langfuse.pending,` · `,t(`Dropped`,`丢弃`),` `,r.data.langfuse.dropped,r.data.langfuse.lastSuccess?` · ${new Date(r.data.langfuse.lastSuccess).toLocaleString()}`:``]}),r.data?.langfuse.lastError&&(0,v.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,v.jsx)(`p`,{role:`alert`,children:t(`Unable to export traces.`,`无法导出追踪。`)}),(0,v.jsxs)(`details`,{children:[(0,v.jsx)(`summary`,{className:`cursor-pointer text-fg-muted`,children:t(`Technical details`,`技术详情`)}),(0,v.jsx)(`p`,{className:`mt-2 break-words text-fg-muted`,children:r.data.langfuse.lastError})]})]}),(0,v.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t(`Changes save automatically. Historical traces are not uploaded. Offline exports may be dropped.`,`修改后自动保存。不会上传历史记录;断网或队列满时可能丢弃远端导出。`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(u,{disabled:k||$,onClick:()=>void Y(async()=>{if(!(await _(`tracing/langfuse/test`,`POST`)).ok)throw Error(t(`Connection test failed. Check saved configuration and credentials.`,`连接测试失败,请检查已保存的配置和凭证。`))},t(`Diagnostic trace accepted by the ingestion endpoint`,`采集端已接受诊断追踪`)),children:t(`Test connection`,`测试连接`)}),(0,v.jsx)(u,{disabled:k||$,onClick:()=>void Y(async()=>{await _(`tracing/langfuse/credentials`,`DELETE`),T(``),D(``),O(e=>e+1)}),children:t(`Remove saved credentials`,`移除已保存凭证`)})]})]})]}):(0,v.jsx)(S,{})),P===`records`&&(0,v.jsxs)(`section`,{className:b,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:t(`Recent runs`,`最近执行`)}),(0,v.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Status`,`执行状态`),(0,v.jsx)(s,{placeholder:t(`All statuses`,`全部状态`),allowEmpty:!1,value:j,onChange:e=>{ye(e),U()},options:[{value:``,label:t(`All statuses`,`全部状态`)},...[`running`,`success`,`error`,`cancelled`,`suspended`,`interrupted`].map(e=>({value:e,label:t(e,{running:`运行中`,success:`成功`,error:`失败`,cancelled:`已取消`,suspended:`已暂停`,interrupted:`已中断`}[e])}))]})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Time range`,`时间范围`),(0,v.jsx)(s,{placeholder:t(`Choose`,`请选择`),value:M,allowEmpty:!1,onChange:e=>{be(e),U()},options:[`1`,`7`,`30`,`90`].map(e=>({value:e,label:`${e} ${t(`days`,`天`)}`}))})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Page size`,`每页条数`),(0,v.jsx)(s,{placeholder:t(`Choose`,`请选择`),value:I,allowEmpty:!1,onChange:e=>{Se(e),U()},options:[`10`,`20`].map(e=>({value:e,label:`${e} ${t(`records`,`条`)}`}))})]})]}),(0,v.jsxs)(`details`,{children:[(0,v.jsxs)(`summary`,{className:`cursor-pointer text-sm text-fg-muted`,children:[t(`Advanced filters`,`高级筛选`),Object.values(N).some(Boolean)?` · ${t(`Active`,`已启用`)}`:``]}),(0,v.jsx)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-3`,children:[`conversationId`,`runId`,`agentId`].map(e=>(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[{conversationId:t(`Conversation ID`,`会话 ID`),runId:t(`Run ID`,`执行 ID`),agentId:t(`Agent ID`,`Agent ID`)}[e],(0,v.jsx)(`input`,{"aria-label":e,placeholder:t(`Exact ID`,`输入完整 ID`),className:y,value:N[e],onChange:t=>{xe({...N,[e]:t.target.value}),U()}})]},e))})]}),(0,v.jsxs)(`details`,{className:`text-xs text-fg-muted`,children:[(0,v.jsx)(`summary`,{className:`w-fit cursor-pointer rounded focus-visible:outline-accent`,children:t(`About costs`,`费用说明`)}),(0,v.jsxs)(`p`,{className:`mt-2 leading-5`,children:[t(`Amounts are shown in USD. Cloud charges use Credits receipts.`,`金额以美元显示,Cloud 扣费以 Credits 凭证为准。`),` `,(0,v.jsx)(`a`,{className:`text-accent-fg hover:underline`,href:`#/settings/usage`,children:t(`View usage`,`查看用量`)})]})]}),(0,v.jsxs)(`div`,{role:`region`,"aria-label":t(`Execution results`,`执行结果`),"aria-busy":K.isValidating,className:`h-[24rem] min-h-0 overflow-y-auto overscroll-contain rounded-lg border border-edge sm:h-[28rem]`,children:[K.error&&(0,v.jsxs)(`div`,{role:`alert`,className:`space-y-3 p-4 text-sm`,children:[(0,v.jsx)(`p`,{children:t(`Unable to load execution records.`,`无法加载执行记录。`)}),(0,v.jsx)(u,{variant:`ghost`,onClick:()=>void K.mutate(),disabled:K.isValidating,children:t(`Retry loading records`,`重新加载记录`)})]}),!K.data&&!K.error?(0,v.jsx)(`div`,{className:`space-y-3 p-3`,children:[0,1,2,3,4].map(e=>(0,v.jsx)(c,{className:`h-16`},e))}):(0,v.jsxs)(`div`,{className:`divide-y divide-edge`,children:[K.data?.traces.length===0&&(0,v.jsx)(`p`,{className:`flex h-48 items-center justify-center px-4 text-sm text-fg-muted`,children:t(`No traces in this range`,`此时间范围内暂无记录`)}),K.data?.traces.map(n=>(0,v.jsxs)(`button`,{onClick:()=>H(n.traceId),className:`flex w-full flex-col gap-2 px-3 py-3 text-left text-sm hover:bg-surface-hover sm:flex-row sm:items-center sm:justify-between`,children:[(0,v.jsxs)(`div`,{className:`min-w-0`,children:[(0,v.jsxs)(`p`,{className:`truncate font-medium`,children:[n.name,n.attributes[`xopc.agentId`]?` · ${n.attributes[`xopc.agentId`]}`:``]}),(0,v.jsxs)(`p`,{className:`truncate text-xs text-fg-muted`,children:[new Date(n.startedAt).toLocaleString(e?`zh-CN`:`en-US`),` · `,n.traceId]}),n.stats&&(0,v.jsxs)(`p`,{className:`text-xs text-fg-muted`,children:[n.stats.generations,` `,t(`model calls`,`次模型调用`),` · `,n.stats.tokens,` tokens · `,n.stats.unknownCostCalls>0?`${t(`Cost pending`,`费用待确认`)}${n.stats.knownCostUsd>0?` · ${t(`known portion`,`已知部分`)} ${n.stats.knownCostUsd.toFixed(4)}`:``}`:`$${n.stats.knownCostUsd.toFixed(4)}`]})]}),(0,v.jsxs)(`span`,{className:`shrink-0 text-xs text-fg-muted`,children:[t(n.status,{running:`运行中`,success:`成功`,error:`失败`,cancelled:`已取消`,suspended:`已暂停`,interrupted:`已中断`}[n.status]??n.status),` · `,n.endedAt?`${Math.round(n.endedAt-n.startedAt)} ms`:`—`,n.partialReason?` · ${t(`Partial`,`部分记录`)}`:``]})]},n.traceId))]})]}),(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,v.jsx)(`p`,{"aria-live":`polite`,className:`text-xs text-fg-muted`,children:t(`Page ${R+1} · ${K.data?.traces.length??0} records`,`第 ${R+1} 页 · ${K.data?.traces.length??0} 条`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(u,{disabled:R===0||K.isValidating,onClick:()=>z(e=>Math.max(0,e-1)),children:t(`Previous page`,`上一页`)}),(0,v.jsx)(u,{disabled:!K.data?.nextCursor||K.isValidating,onClick:()=>{let e=K.data?.nextCursor;e&&(L(t=>[...t.slice(0,R+1),e]),z(e=>e+1))},children:t(`Next page`,`下一页`)})]})]})]}),(0,v.jsx)(oe,{open:!!V,onOpenChange:e=>{e||H(void 0)},children:(0,v.jsxs)(re,{children:[(0,v.jsx)(te,{className:`fixed inset-0 z-[90] bg-black/40`}),(0,v.jsxs)(ie,{className:`fixed left-1/2 top-1/2 z-[91] flex h-[min(44rem,calc(100vh-2rem))] w-[min(64rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-xl border border-edge bg-surface-overlay p-4`,children:[(0,v.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-3`,children:[(0,v.jsx)(ae,{className:`font-medium`,children:t(`Trace details`,`追踪详情`)}),(0,v.jsx)(o,{asChild:!0,children:(0,v.jsx)(u,{children:t(`Close`,`关闭`)})})]}),(0,v.jsx)(ne,{className:`shrink-0 truncate text-xs text-fg-muted`,children:V}),(0,v.jsx)(`div`,{className:`min-h-0 flex-1 space-y-3 overflow-y-auto py-4`,children:q.error?(0,v.jsxs)(`div`,{role:`alert`,className:`space-y-3`,children:[(0,v.jsx)(`p`,{children:t(`Unable to load this record.`,`无法加载此记录。`)}),(0,v.jsx)(u,{variant:`ghost`,onClick:()=>void q.mutate(),children:t(`Retry loading record`,`重新加载此记录`)})]}):q.data?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`p`,{className:`text-sm`,children:[q.data.trace.status,` `,q.data.trace.partialReason&&` · ${q.data.trace.partialReason}`]}),fe(q.data.spans).map(e=>(0,v.jsxs)(`details`,{style:{marginLeft:de(e,q.data.spans)*12},className:`rounded-lg border border-edge p-3 text-sm`,children:[(0,v.jsxs)(`summary`,{className:`cursor-pointer`,children:[e.name,` · `,e.status,` · `,e.endedAt?`${Math.round(e.endedAt-e.startedAt)} ms`:`—`]}),(0,v.jsx)(`pre`,{className:`mt-3 whitespace-pre-wrap break-all text-xs text-fg-muted`,children:JSON.stringify(e.attributes,null,2)})]},e.spanId))]}):(0,v.jsx)(S,{})}),(0,v.jsx)(`div`,{className:`shrink-0 border-t border-edge pt-3`,children:(0,v.jsx)(u,{disabled:!q.data||k,onClick:()=>void Oe(),children:t(`Export JSON`,`导出 JSON`)})})]})]})}),(0,v.jsx)(oe,{open:Ee,onOpenChange:W,children:(0,v.jsxs)(re,{children:[(0,v.jsx)(te,{className:`fixed inset-0 z-[90] bg-black/40`}),(0,v.jsxs)(ie,{className:`fixed left-1/2 top-1/2 z-[91] w-[min(28rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 space-y-4 rounded-xl border border-edge bg-surface-overlay p-5`,children:[(0,v.jsx)(ae,{children:t(`Clear local traces?`,`清空本地追踪?`)}),(0,v.jsx)(ne,{className:`text-sm text-fg-muted`,children:t(`Removes retained local traces. Conversations, usage records and Langfuse data remain available.`,`删除已保留的本地追踪。会话、用量记录及 Langfuse 数据仍保留。`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(u,{disabled:k||$,onClick:()=>void Y(async()=>{await _(`traces`,`DELETE`),W(!1),H(void 0)}),children:t(`Clear`,`清空`)}),(0,v.jsx)(o,{asChild:!0,children:(0,v.jsx)(u,{children:t(`Cancel`,`取消`)})})]})]})]})})]})}export{pe as TracingSettingsPage};
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{i,n as ee,o as a}from"./locale-store-B6OrWgY1.js";import{a as te,i as ne,n as o,o as re,r as ie,s as ae,t as oe}from"./dist-BGTk37IG.js";import{t as s}from"./popover-select-CEMWIrtY.js";import{t as se}from"./secret-input-Dryrns2s.js";import{t as c}from"./skeleton-BI5TyibZ.js";import{i as l}from"./vendor-swr-CdRzEUwF.js";import{t as u}from"./button-Cc4hUNTt.js";import{t as ce}from"./sliding-tab-list-DuQyViqe.js";import{t as d}from"./number-input-El7Szeln.js";import{n as le,t as ue}from"./settings-page-header-BAN34UQi.js";import"./settings-page-layout-B5TVFBV2.js";import{n as f,t as p}from"./use-autosave-HL8XRNR8.js";var m=e(t(),1),h=n(),g=e=>i(`/api/observability/${e}`);async function _(e,t=`GET`,n){return a(g(e),{method:t,...n===void 0?{}:{body:JSON.stringify(n)}})}var v=r(),y=`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,b=`space-y-4 rounded-xl border border-edge bg-surface-panel p-4`,x=(e=0)=>`${(e/1048576).toFixed(1)} MiB`;function S(){let e=(0,h.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,v.jsxs)(`div`,{"aria-busy":`true`,className:`space-y-4`,children:[(0,v.jsx)(c,{className:`h-48 rounded-xl`}),(0,v.jsx)(c,{className:`h-64 rounded-xl`})]}),e[0]=t):t=e[0],t}function de(e,t){let n=0,r=e,i=new Set;for(;r.parentSpanId&&n<12&&!i.has(r.spanId);){i.add(r.spanId);let e=t.find(e=>e.spanId===r.parentSpanId);if(!e)break;r=e,n++}return n}function fe(e){let t=[],n=new Set;function r(i){n.has(i.spanId)||(n.add(i.spanId),t.push(i),e.filter(e=>e.parentSpanId===i.spanId).forEach(r))}return e.filter(t=>!t.parentSpanId||!e.some(e=>e.spanId===t.parentSpanId)).forEach(r),e.forEach(r),t}function pe(){let e=ee(e=>e.language)===`zh`,t=(t,n)=>e?n:t,n=l(g(`tracing/settings`),()=>_(`tracing/settings`)),r=l(g(`tracing/status`),()=>_(`tracing/status`),{refreshInterval:1e4}),[i,a]=(0,m.useState)(),[h,pe]=(0,m.useState)(),C=i??h??n.data?.config,[w,T]=(0,m.useState)(``),[E,D]=(0,m.useState)(``),[me,O]=(0,m.useState)(0),[k,he]=(0,m.useState)(!1),[ge,A]=(0,m.useState)(``),[_e,ve]=(0,m.useState)(!1),[j,ye]=(0,m.useState)(``),[M,be]=(0,m.useState)(`7`),[N,xe]=(0,m.useState)({conversationId:``,runId:``,agentId:``}),[P,F]=(0,m.useState)(`records`),[I,Se]=(0,m.useState)(`10`),[Ce,L]=(0,m.useState)([``]),[R,z]=(0,m.useState)(0),[we,Te]=(0,m.useState)(()=>Date.now()+1),B=Ce[R],[V,H]=(0,m.useState)();function U(){L([``]),z(0),Te(Date.now()+1)}let[Ee,W]=(0,m.useState)(!1),G=new URLSearchParams({limit:I,from:String(we-Number(M)*864e5),to:String(we)});j&&G.set(`status`,j),B&&G.set(`cursor`,B);for(let[e,t]of Object.entries(N))t&&G.set(e,t);let De=`traces?${G}`,K=l(g(De),()=>_(De),{refreshInterval:B?0:1e4}),q=l(V?g(`traces/${V}`):null,()=>_(`traces/${V}`));function J(e){if(!C)return;let t=structuredClone(C);e(t),a(t)}async function Y(e,i=t(`Saved`,`已保存`)){he(!0),A(``),ve(!1);try{await e(),A(i),await Promise.all([n.mutate(),r.mutate(),K.mutate()])}catch(e){ve(!0),A(e instanceof Error?e.message:t(`Request failed`,`操作失败`))}finally{he(!1)}}let X=p({value:C??null,dirty:!!(i&&JSON.stringify(i)!==JSON.stringify(h??n.data?.config)),validate:e=>{if([[`retentionDays`,1,90],[`maxStoreMiB`,16,4096],[`maxTraces`,10,1e5],[`maxSpans`,100,1e6],[`maxTraceKiB`,16,4096],[`maxWriteMiBPerMinute`,1,100]].some(([t,n,r])=>!Number.isInteger(e.local[t])||e.local[t]<n||e.local[t]>r))return t(`Enter valid storage limits before continuing.`,`请填写有效的存储限额。`);try{let t=new URL(e.langfuse.baseUrl);if(![`http:`,`https:`].includes(t.protocol)||e.langfuse.baseUrl.length>2048)throw Error()}catch{return t(`Enter a valid HTTP(S) Base URL.`,`请填写有效的 HTTP(S) Base URL。`)}return null},onSave:async e=>{let t=await _(`tracing/settings`,`PATCH`,e);pe(t.config),a(t=>t&&JSON.stringify(t)===JSON.stringify(e)?void 0:t),await r.mutate().catch(()=>{})}}),Z=(0,m.useMemo)(()=>({publicKey:w.trim(),secretKey:E.trim()}),[w,E]),Q=p({value:Z,dirty:!!(Z.publicKey||Z.secretKey),delayMs:1e3,validate:e=>e.publicKey.length>512||e.secretKey.length>512?t(`Credentials must be at most 512 characters.`,`凭证长度不能超过 512 个字符。`):null,onSave:async e=>{await _(`tracing/langfuse/credentials`,`PUT`,{...e.publicKey?{publicKey:e.publicKey}:{},...e.secretKey?{secretKey:e.secretKey}:{}}),T(t=>t.trim()===e.publicKey?``:t),D(t=>t.trim()===e.secretKey?``:t),O(e=>e+1),await Promise.allSettled([n.mutate(),r.mutate()])}}),$=[X.status,Q.status].some(e=>e===`dirty`||e===`saving`);async function Oe(){V&&await Y(async()=>{let e=await _(`traces/${V}/export`),t=URL.createObjectURL(new Blob([JSON.stringify(e,null,2)],{type:`application/json`})),n=document.createElement(`a`);n.href=t,n.download=`trace-${V}.json`,n.click(),URL.revokeObjectURL(t)},t(`Exported`,`已导出`))}return(0,v.jsxs)(le,{className:`space-y-6`,children:[(0,v.jsx)(ue,{title:t(`Runtime tracing`,`运行追踪`),subtitle:t(`Local diagnostics with bounded retention. Enable Langfuse to also export new traces.`,`默认保留有界本地记录;启用 Langfuse 后同时导出新采集的追踪。`),actions:P===`settings`?(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,v.jsx)(`span`,{className:`text-xs text-fg-muted`,children:t(`Changes save automatically`,`修改后自动保存`)}),(0,v.jsx)(f,{status:X.status,error:X.error})]}):(0,v.jsx)(u,{disabled:K.isValidating,onClick:U,children:t(`Refresh records`,`刷新记录`)})}),ge&&(0,v.jsx)(`p`,{role:_e?`alert`:`status`,className:`text-sm text-fg-muted`,children:ge}),n.error&&(0,v.jsxs)(`div`,{role:`alert`,className:b,children:[(0,v.jsx)(`p`,{children:t(`Unable to load tracing settings.`,`无法加载追踪设置。`)}),(0,v.jsx)(u,{variant:`ghost`,onClick:()=>void n.mutate(),children:t(`Retry loading settings`,`重新加载设置`)})]}),(0,v.jsxs)(ce,{as:`nav`,"aria-label":t(`Tracing sections`,`追踪页面分区`),className:`flex gap-2 border-b border-edge pb-3`,children:[(0,v.jsx)(u,{"aria-pressed":P===`records`,variant:`ghost`,onClick:()=>F(`records`),children:t(`Execution records`,`执行记录`)}),(0,v.jsx)(u,{"aria-pressed":P===`settings`,variant:`ghost`,onClick:()=>F(`settings`),children:t(`Capture settings`,`采集设置`)})]}),P===`settings`&&(C?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`section`,{className:b,onBlurCapture:X.onBlurCapture,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:t(`Local recording`,`本地记录`)}),X.error&&(0,v.jsx)(u,{variant:`ghost`,onClick:X.retry,children:t(`Retry autosave`,`重试自动保存`)}),(0,v.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,v.jsx)(`input`,{type:`checkbox`,checked:C.enabled,onChange:e=>J(t=>{t.enabled=e.target.checked})}),t(`Record traces`,`记录运行追踪`)]}),(0,v.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-3`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Retention (days)`,`保留天数`),(0,v.jsx)(d,{className:y,type:`number`,min:1,max:90,value:C.local.retentionDays,onChange:e=>J(t=>{t.local.retentionDays=Number(e.target.value)})})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Storage budget (MiB)`,`存储上限(MiB)`),(0,v.jsx)(d,{className:y,type:`number`,min:16,max:4096,value:C.local.maxStoreMiB,onChange:e=>J(t=>{t.local.maxStoreMiB=Number(e.target.value)})})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Capture`,`采集内容`),(0,v.jsx)(s,{placeholder:t(`Choose`,`请选择`),allowEmpty:!1,value:C.capture,onChange:e=>J(t=>{t.capture=e}),options:[{value:`metadata`,label:t(`Metadata only`,`仅元数据`)},{value:`redacted`,label:t(`Redacted previews`,`脱敏摘要`)},{value:`detailed`,label:t(`Detailed · 30 minutes`,`详细记录 · 30 分钟`)}]})]})]}),(0,v.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t(`Previews may contain personal content. Secrets and media are filtered; large values are truncated.`,`摘要可能包含个人内容。过滤凭证和媒体,超长内容会截断。`)}),C.detailedUntil&&(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Detailed capture expires: `,`详细采集截止:`),new Date(C.detailedUntil).toLocaleString()]}),(0,v.jsxs)(`details`,{children:[(0,v.jsx)(`summary`,{className:`cursor-pointer text-sm`,children:t(`Advanced limits`,`高级限制`)}),(0,v.jsx)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-2`,children:[[`maxTraces`,t(`Trace count`,`Trace 条数`)],[`maxSpans`,t(`Span count`,`Span 条数`)],[`maxTraceKiB`,t(`Per trace (KiB)`,`单 Trace 上限(KiB)`)],[`maxWriteMiBPerMinute`,t(`Write budget (MiB/minute)`,`写入额度(MiB/分钟)`)]].map(([e,t])=>(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t,(0,v.jsx)(d,{type:`number`,min:1,className:y,value:C.local[e],onChange:t=>J(n=>{n.local[e]=Number(t.target.value)})})]},e))})]}),r.data?(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Disk / payload`,`磁盘 / 数据`),`:`,x(r.data.local.physicalBytes),` / `,x(r.data.local.bytes),` · `,r.data.local.traces??0,` traces · `,r.data.local.spans??0,` spans · `,t(`Dropped`,`丢弃`),` `,Number(r.data.local.dropped??0)+Number(r.data.local.queueDropped??0),(r.data.local.paused||r.data.local.unavailable)&&` · ${t(`Recording paused`,`存储暂停`)}`]}):(0,v.jsx)(c,{className:`h-10`}),(r.error||r.data?.local.lastError)&&(0,v.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,v.jsx)(`p`,{role:`alert`,children:r.data?.local.lastError?t(`Trace recording is unavailable.`,`追踪记录异常。`):t(`Unable to load recording status.`,`无法获取记录状态。`)}),(0,v.jsx)(u,{variant:`ghost`,onClick:()=>void r.mutate(),children:t(`Refresh recording status`,`刷新记录状态`)}),(0,v.jsxs)(`details`,{children:[(0,v.jsx)(`summary`,{className:`cursor-pointer text-fg-muted`,children:t(`Technical details`,`技术详情`)}),(0,v.jsx)(`p`,{className:`mt-2 break-words text-fg-muted`,children:r.data?.local.lastError||String(r.error?.message)})]})]}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(u,{disabled:k||$,onClick:()=>void Y(async()=>{await _(`traces/prune`,`POST`)}),children:t(`Clean expired`,`清理过期记录`)}),(0,v.jsx)(u,{disabled:k,onClick:()=>W(!0),children:t(`Clear local traces`,`清空本地追踪`)})]})]}),(0,v.jsxs)(`section`,{className:b,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:`Langfuse`}),(0,v.jsx)(f,{status:Q.status,error:Q.error})]}),Q.error&&(0,v.jsx)(u,{variant:`ghost`,onClick:Q.retry,children:t(`Retry autosave`,`重试自动保存`)}),(0,v.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,v.jsx)(`input`,{type:`checkbox`,checked:C.langfuse.enabled,onBlur:X.onBlurCapture,onChange:e=>J(t=>{t.langfuse.enabled=e.target.checked})}),t(`Also export new traces to Langfuse`,`同时导出新采集的追踪到 Langfuse`)]}),(0,v.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm sm:col-span-2`,children:[`Base URL`,(0,v.jsx)(`input`,{className:y,type:`url`,value:C.langfuse.baseUrl,onBlur:X.onBlurCapture,onChange:e=>J(t=>{t.langfuse.baseUrl=e.target.value})})]}),[`publicKey`,`secretKey`].map(e=>{let r=e===`publicKey`?`Public Key`:`Secret Key`,i=e===`publicKey`?w:E,ee=n.data?.credentials[e===`publicKey`?`publicKeyConfigured`:`secretKeyConfigured`];return(0,v.jsxs)(`div`,{className:`space-y-1 text-sm`,onBlurCapture:Q.onBlurCapture,children:[(0,v.jsx)(`label`,{htmlFor:`langfuse-${e}`,children:r}),(0,v.jsx)(se,{id:`langfuse-${e}`,value:i||(ee?`••••••••••••`:``),allowUnrevealedCopy:!0,onChange:t=>(e===`publicKey`?T:D)(t.replace(/^•+/,``)),placeholder:e===`publicKey`?`pk-lf-…`:`sk-lf-…`,labels:{show:t(`Show ${r}`,`查看 ${r}`),hide:t(`Hide ${r}`,`隐藏 ${r}`),copy:t(`Copy ${r}`,`复制 ${r}`),copied:t(`Copied`,`已复制`)},reveal:()=>_(`tracing/langfuse/credentials/${e}/reveal`,`POST`).then(e=>e.key),loadFailedLabel:t(`Unable to load the configured key.`,`无法读取已配置的 Key。`),notInConfigFile:t(`No configured key is available.`,`暂无已配置的 Key。`)},me)]},e)})]}),(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Credential sources`,`凭证来源`),`:`,n.data?.credentials.publicKeySource,` / `,n.data?.credentials.secretKeySource,` · URL: `,n.data?.credentials.baseUrlSource]}),r.data&&(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[r.data.langfuse.state,` · `,t(`Pending`,`待发送`),` `,r.data.langfuse.pending,` · `,t(`Dropped`,`丢弃`),` `,r.data.langfuse.dropped,r.data.langfuse.lastSuccess?` · ${new Date(r.data.langfuse.lastSuccess).toLocaleString()}`:``]}),r.data?.langfuse.lastError&&(0,v.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,v.jsx)(`p`,{role:`alert`,children:t(`Unable to export traces.`,`无法导出追踪。`)}),(0,v.jsxs)(`details`,{children:[(0,v.jsx)(`summary`,{className:`cursor-pointer text-fg-muted`,children:t(`Technical details`,`技术详情`)}),(0,v.jsx)(`p`,{className:`mt-2 break-words text-fg-muted`,children:r.data.langfuse.lastError})]})]}),(0,v.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t(`Changes save automatically. Historical traces are not uploaded. Offline exports may be dropped.`,`修改后自动保存。不会上传历史记录;断网或队列满时可能丢弃远端导出。`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(u,{disabled:k||$,onClick:()=>void Y(async()=>{if(!(await _(`tracing/langfuse/test`,`POST`)).ok)throw Error(t(`Connection test failed. Check saved configuration and credentials.`,`连接测试失败,请检查已保存的配置和凭证。`))},t(`Diagnostic trace accepted by the ingestion endpoint`,`采集端已接受诊断追踪`)),children:t(`Test connection`,`测试连接`)}),(0,v.jsx)(u,{disabled:k||$,onClick:()=>void Y(async()=>{await _(`tracing/langfuse/credentials`,`DELETE`),T(``),D(``),O(e=>e+1)}),children:t(`Remove saved credentials`,`移除已保存凭证`)})]})]})]}):(0,v.jsx)(S,{})),P===`records`&&(0,v.jsxs)(`section`,{className:b,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:t(`Recent runs`,`最近执行`)}),(0,v.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Status`,`执行状态`),(0,v.jsx)(s,{placeholder:t(`All statuses`,`全部状态`),allowEmpty:!1,value:j,onChange:e=>{ye(e),U()},options:[{value:``,label:t(`All statuses`,`全部状态`)},...[`running`,`success`,`error`,`cancelled`,`suspended`,`interrupted`].map(e=>({value:e,label:t(e,{running:`运行中`,success:`成功`,error:`失败`,cancelled:`已取消`,suspended:`已暂停`,interrupted:`已中断`}[e])}))]})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Time range`,`时间范围`),(0,v.jsx)(s,{placeholder:t(`Choose`,`请选择`),value:M,allowEmpty:!1,onChange:e=>{be(e),U()},options:[`1`,`7`,`30`,`90`].map(e=>({value:e,label:`${e} ${t(`days`,`天`)}`}))})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Page size`,`每页条数`),(0,v.jsx)(s,{placeholder:t(`Choose`,`请选择`),value:I,allowEmpty:!1,onChange:e=>{Se(e),U()},options:[`10`,`20`].map(e=>({value:e,label:`${e} ${t(`records`,`条`)}`}))})]})]}),(0,v.jsxs)(`details`,{children:[(0,v.jsxs)(`summary`,{className:`cursor-pointer text-sm text-fg-muted`,children:[t(`Advanced filters`,`高级筛选`),Object.values(N).some(Boolean)?` · ${t(`Active`,`已启用`)}`:``]}),(0,v.jsx)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-3`,children:[`conversationId`,`runId`,`agentId`].map(e=>(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[{conversationId:t(`Conversation ID`,`会话 ID`),runId:t(`Run ID`,`执行 ID`),agentId:t(`Agent ID`,`Agent ID`)}[e],(0,v.jsx)(`input`,{"aria-label":e,placeholder:t(`Exact ID`,`输入完整 ID`),className:y,value:N[e],onChange:t=>{xe({...N,[e]:t.target.value}),U()}})]},e))})]}),(0,v.jsxs)(`details`,{className:`text-xs text-fg-muted`,children:[(0,v.jsx)(`summary`,{className:`w-fit cursor-pointer rounded focus-visible:outline-accent`,children:t(`About costs`,`费用说明`)}),(0,v.jsxs)(`p`,{className:`mt-2 leading-5`,children:[t(`Amounts are shown in USD. Cloud charges use Credits receipts.`,`金额以美元显示,Cloud 扣费以 Credits 凭证为准。`),` `,(0,v.jsx)(`a`,{className:`text-accent-fg hover:underline`,href:`#/settings/usage`,children:t(`View usage`,`查看用量`)})]})]}),(0,v.jsxs)(`div`,{role:`region`,"aria-label":t(`Execution results`,`执行结果`),"aria-busy":K.isValidating,className:`h-[24rem] min-h-0 overflow-y-auto overscroll-contain rounded-lg border border-edge sm:h-[28rem]`,children:[K.error&&(0,v.jsxs)(`div`,{role:`alert`,className:`space-y-3 p-4 text-sm`,children:[(0,v.jsx)(`p`,{children:t(`Unable to load execution records.`,`无法加载执行记录。`)}),(0,v.jsx)(u,{variant:`ghost`,onClick:()=>void K.mutate(),disabled:K.isValidating,children:t(`Retry loading records`,`重新加载记录`)})]}),!K.data&&!K.error?(0,v.jsx)(`div`,{className:`space-y-3 p-3`,children:[0,1,2,3,4].map(e=>(0,v.jsx)(c,{className:`h-16`},e))}):(0,v.jsxs)(`div`,{className:`divide-y divide-edge`,children:[K.data?.traces.length===0&&(0,v.jsx)(`p`,{className:`flex h-48 items-center justify-center px-4 text-sm text-fg-muted`,children:t(`No traces in this range`,`此时间范围内暂无记录`)}),K.data?.traces.map(n=>(0,v.jsxs)(`button`,{onClick:()=>H(n.traceId),className:`flex w-full flex-col gap-2 px-3 py-3 text-left text-sm hover:bg-surface-hover sm:flex-row sm:items-center sm:justify-between`,children:[(0,v.jsxs)(`div`,{className:`min-w-0`,children:[(0,v.jsxs)(`p`,{className:`truncate font-medium`,children:[n.name,n.attributes[`xopc.agentId`]?` · ${n.attributes[`xopc.agentId`]}`:``]}),(0,v.jsxs)(`p`,{className:`truncate text-xs text-fg-muted`,children:[new Date(n.startedAt).toLocaleString(e?`zh-CN`:`en-US`),` · `,n.traceId]}),n.stats&&(0,v.jsxs)(`p`,{className:`text-xs text-fg-muted`,children:[n.stats.generations,` `,t(`model calls`,`次模型调用`),` · `,n.stats.tokens,` tokens · `,n.stats.unknownCostCalls>0?`${t(`Cost pending`,`费用待确认`)}${n.stats.knownCostUsd>0?` · ${t(`known portion`,`已知部分`)} ${n.stats.knownCostUsd.toFixed(4)}`:``}`:`$${n.stats.knownCostUsd.toFixed(4)}`]})]}),(0,v.jsxs)(`span`,{className:`shrink-0 text-xs text-fg-muted`,children:[t(n.status,{running:`运行中`,success:`成功`,error:`失败`,cancelled:`已取消`,suspended:`已暂停`,interrupted:`已中断`}[n.status]??n.status),` · `,n.endedAt?`${Math.round(n.endedAt-n.startedAt)} ms`:`—`,n.partialReason?` · ${t(`Partial`,`部分记录`)}`:``]})]},n.traceId))]})]}),(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,v.jsx)(`p`,{"aria-live":`polite`,className:`text-xs text-fg-muted`,children:t(`Page ${R+1} · ${K.data?.traces.length??0} records`,`第 ${R+1} 页 · ${K.data?.traces.length??0} 条`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(u,{disabled:R===0||K.isValidating,onClick:()=>z(e=>Math.max(0,e-1)),children:t(`Previous page`,`上一页`)}),(0,v.jsx)(u,{disabled:!K.data?.nextCursor||K.isValidating,onClick:()=>{let e=K.data?.nextCursor;e&&(L(t=>[...t.slice(0,R+1),e]),z(e=>e+1))},children:t(`Next page`,`下一页`)})]})]})]}),(0,v.jsx)(oe,{open:!!V,onOpenChange:e=>{e||H(void 0)},children:(0,v.jsxs)(re,{children:[(0,v.jsx)(te,{className:`fixed inset-0 z-[90] bg-black/40`}),(0,v.jsxs)(ie,{className:`fixed left-1/2 top-1/2 z-[91] flex h-[min(44rem,calc(100vh-2rem))] w-[min(64rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-xl border border-edge bg-surface-overlay p-4`,children:[(0,v.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-3`,children:[(0,v.jsx)(ae,{className:`font-medium`,children:t(`Trace details`,`追踪详情`)}),(0,v.jsx)(o,{asChild:!0,children:(0,v.jsx)(u,{children:t(`Close`,`关闭`)})})]}),(0,v.jsx)(ne,{className:`shrink-0 truncate text-xs text-fg-muted`,children:V}),(0,v.jsx)(`div`,{className:`min-h-0 flex-1 space-y-3 overflow-y-auto py-4`,children:q.error?(0,v.jsxs)(`div`,{role:`alert`,className:`space-y-3`,children:[(0,v.jsx)(`p`,{children:t(`Unable to load this record.`,`无法加载此记录。`)}),(0,v.jsx)(u,{variant:`ghost`,onClick:()=>void q.mutate(),children:t(`Retry loading record`,`重新加载此记录`)})]}):q.data?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`p`,{className:`text-sm`,children:[q.data.trace.status,` `,q.data.trace.partialReason&&` · ${q.data.trace.partialReason}`]}),fe(q.data.spans).map(e=>(0,v.jsxs)(`details`,{style:{marginLeft:de(e,q.data.spans)*12},className:`rounded-lg border border-edge p-3 text-sm`,children:[(0,v.jsxs)(`summary`,{className:`cursor-pointer`,children:[e.name,` · `,e.status,` · `,e.endedAt?`${Math.round(e.endedAt-e.startedAt)} ms`:`—`]}),(0,v.jsx)(`pre`,{className:`mt-3 whitespace-pre-wrap break-all text-xs text-fg-muted`,children:JSON.stringify(e.attributes,null,2)})]},e.spanId))]}):(0,v.jsx)(S,{})}),(0,v.jsx)(`div`,{className:`shrink-0 border-t border-edge pt-3`,children:(0,v.jsx)(u,{disabled:!q.data||k,onClick:()=>void Oe(),children:t(`Export JSON`,`导出 JSON`)})})]})]})}),(0,v.jsx)(oe,{open:Ee,onOpenChange:W,children:(0,v.jsxs)(re,{children:[(0,v.jsx)(te,{className:`fixed inset-0 z-[90] bg-black/40`}),(0,v.jsxs)(ie,{className:`fixed left-1/2 top-1/2 z-[91] w-[min(28rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 space-y-4 rounded-xl border border-edge bg-surface-overlay p-5`,children:[(0,v.jsx)(ae,{children:t(`Clear local traces?`,`清空本地追踪?`)}),(0,v.jsx)(ne,{className:`text-sm text-fg-muted`,children:t(`Removes retained local traces. Conversations, usage records and Langfuse data remain available.`,`删除已保留的本地追踪。会话、用量记录及 Langfuse 数据仍保留。`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(u,{disabled:k||$,onClick:()=>void Y(async()=>{await _(`traces`,`DELETE`),W(!1),H(void 0)}),children:t(`Clear`,`清空`)}),(0,v.jsx)(o,{asChild:!0,children:(0,v.jsx)(u,{children:t(`Cancel`,`取消`)})})]})]})]})})]})}export{pe as TracingSettingsPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{a as i,i as a,l as o,n as s,o as c}from"./locale-store-B7y-RVe8.js";import{t as l}from"./messages-DYDkJvXj.js";import{t as u}from"./external-link-DjqjBmc3.js";import{t as ee}from"./globe-DSSGFWFn.js";import{t as te}from"./loader-circle-CifKLtgG.js";import{t as d}from"./power-ZI-pBczI.js";import{t as f}from"./cn-0WouolD0.js";import{t as p}from"./skeleton-BI5TyibZ.js";import{i as m}from"./vendor-swr-CdRzEUwF.js";import{n as h,r as g}from"./gateway-config-swr-BD4Bf8uu.js";import{t as _}from"./button-Cc4hUNTt.js";import{s as v}from"./form-field-width-DJw_jULe.js";import{u as y}from"./navigation-D62kPsA9.js";import{t as b}from"./copy-text-row-CpiRzq4G.js";import{n as ne,t as re}from"./settings-form-section-num14vSv.js";var x=e(t(),1),S=n(),C=r();function w(e){let t=(0,S.c)(10),{language:n,label:r,section:i,className:a}=e,o;t[0]!==n||t[1]!==i?(o=y(n,i),t[0]=n,t[1]=i,t[2]=o):o=t[2];let s;t[3]===a?s=t[4]:(s=f(`inline-flex items-center gap-1 text-sm font-medium text-accent hover:underline`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,a),t[3]=a,t[4]=s);let c;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,C.jsx)(u,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t[5]=c):c=t[5];let l;return t[6]!==r||t[7]!==o||t[8]!==s?(l=(0,C.jsxs)(`a`,{href:o,target:`_blank`,rel:`noreferrer`,className:s,children:[r,c]}),t[6]=r,t[7]=o,t[8]=s,t[9]=l):l=t[9],l}async function T(){let e=await i(`/api/exposure/status`);if(!e.ok)throw Error(`Failed to load exposure status (${e.status})`);return await e.json()}async function E(e=`serve`){let t=await i(`/api/exposure/tailscale/start`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mode:e})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`Start failed (${t.status})`)}return await t.json()}async function D(){let e=await i(`/api/exposure/tailscale/stop`,{method:`POST`});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??`Stop failed (${e.status})`)}return await e.json()}var O=`https://tailscale.com/download`;function k(e){let t=(0,S.c)(2),{label:n}=e,r;return t[0]===n?r=t[1]:(r=(0,C.jsx)(`a`,{href:O,target:`_blank`,rel:`noreferrer`,className:`font-medium text-accent hover:underline`,children:n}),t[0]=n,t[1]=r),r}function A({embedded:e=!1}){let t=s(e=>e.language),n=l(t).remoteAccess.tailscale,r=(0,x.useMemo)(()=>({copy:n.copyUrl,copied:n.copied,copyFailed:l(t).clipboard.copyFailed}),[t,n.copyUrl,n.copied]),i=!!o(e=>e.conversationId),[a,c]=(0,x.useState)(!1),[u,f]=(0,x.useState)(null),{data:h,mutate:g,isLoading:v}=m(i?`exposure-status`:null,T,{refreshInterval:3e4}),y=h?.tailscale.hostname,S=h?.tailscale.active===!0,O=h?.tailscale.cliAvailable!==!1,A=y?`https://${y}/`:null,ie=(0,x.useCallback)(async()=>{c(!0),f(null);try{await E(`serve`),await g()}catch(e){f(e instanceof Error?e.message:String(e))}finally{c(!1)}},[g]),ae=(0,x.useCallback)(async()=>{c(!0),f(null);try{await D(),await g()}catch(e){f(e instanceof Error?e.message:String(e))}finally{c(!1)}},[g]);if(!i)return null;let j=(0,C.jsxs)(`div`,{className:e?`space-y-4`:`mt-4 space-y-3`,children:[e?(0,C.jsxs)(`ol`,{className:`space-y-3 text-sm text-fg-muted`,children:[(0,C.jsxs)(`li`,{className:`flex gap-2`,children:[(0,C.jsx)(`span`,{className:`flex size-5 shrink-0 items-center justify-center rounded-full bg-surface-hover text-xs font-semibold text-fg`,children:`1`}),(0,C.jsxs)(`span`,{children:[n.stepInstallBefore,(0,C.jsx)(k,{label:n.stepInstallLink}),n.stepInstallAfter]})]}),(0,C.jsxs)(`li`,{className:`flex gap-2`,children:[(0,C.jsx)(`span`,{className:`flex size-5 shrink-0 items-center justify-center rounded-full bg-surface-hover text-xs font-semibold text-fg`,children:`2`}),(0,C.jsx)(`span`,{children:n.stepEnable})]}),(0,C.jsxs)(`li`,{className:`flex gap-2`,children:[(0,C.jsx)(`span`,{className:`flex size-5 shrink-0 items-center justify-center rounded-full bg-surface-hover text-xs font-semibold text-fg`,children:`3`}),(0,C.jsx)(`span`,{children:n.stepCopy})]})]}):null,e&&h?.tailscale.cliAvailable===!1?(0,C.jsxs)(`p`,{className:`rounded-lg bg-amber-500/10 px-3 py-2 text-sm text-fg-muted`,children:[n.cliMissingIntro,` `,(0,C.jsx)(k,{label:n.cliMissingDownloadLink}),n.cliMissingSuffix]}):null,v&&!h?(0,C.jsxs)(`div`,{className:`grid gap-3`,"aria-busy":`true`,children:[(0,C.jsx)(p,{className:`h-20 rounded-lg`}),(0,C.jsx)(p,{className:`h-20 rounded-lg`})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(re,{children:[(0,C.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:n.statusLabel}),(0,C.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:S?n.statusActive:n.statusOff}),A?(0,C.jsx)(`div`,{className:`mt-3`,children:(0,C.jsx)(b,{text:A,labels:r})}):null,u?(0,C.jsx)(`p`,{className:`mt-2 text-sm text-red-600 dark:text-red-400`,children:u}):null,(0,C.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:S?(0,C.jsxs)(_,{type:`button`,variant:`secondary`,disabled:a,onClick:()=>void ae(),children:[a?(0,C.jsx)(te,{className:`mr-1 size-4 animate-spin`}):null,n.disableServe]}):(0,C.jsxs)(_,{type:`button`,disabled:a||!O,onClick:()=>void ie(),children:[a?(0,C.jsx)(te,{className:`mr-1 size-4 animate-spin`}):(0,C.jsx)(d,{className:`mr-1 size-4`}),n.enableServe]})})]}),(0,C.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:n.hint}),(0,C.jsx)(w,{language:t,label:n.docsLink,section:`tailscale-serve`,className:`mt-2`})]})]});return e?j:(0,C.jsxs)(re,{children:[(0,C.jsx)(ne,{icon:ee,title:n.title,subtitle:n.subtitle}),j]})}async function ie(e){let t=await i(a(`/api/tunnel/probe-public`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({url:e})});if(!t.ok&&t.status!==400)throw Error(`Probe failed (${t.status})`);return await t.json()}async function ae(e){await c(a(`/api/config`),{method:`PATCH`,body:JSON.stringify({gateway:{publicUrl:e??null}})})}function j(e){let t=e.split(`.`).map(e=>Number.parseInt(e,10));if(t.length!==4||t.some(e=>!Number.isFinite(e)))return!1;let[n,r]=t;return n===10||n===127||n===169&&r===254||n===172&&r>=16&&r<=31||n===192&&r===168||n===100&&r>=64&&r<=127}function oe(){return(0,x.useMemo)(()=>{if(typeof window>`u`)return null;let{protocol:e,hostname:t,origin:n}=window.location;if(e!==`https:`&&e!==`http:`)return null;let r=t.toLowerCase();return!r||r===`localhost`||r===`127.0.0.1`||r===`::1`||r===`[::1]`||r.endsWith(`.local`)||r.endsWith(`.localhost`)||j(r)?null:n.toLowerCase().replace(/\/+$/,``)},[])}function se(){return f(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,v,`dark:border-edge`)}function ce(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e.gateway;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.publicUrl;return typeof n==`string`&&n.trim()?n.trim():null}function M(){let e=(0,S.c)(85),t=s(ue),n;e[0]===t?n=e[1]:(n=l(t),e[0]=t,e[1]=n);let r=n.remoteAccess.reverseProxy,i=!!o(le),a=oe(),c=g(i).data?.payload?.config,u;e[2]===c?u=e[3]:(u=ce(c),e[2]=c,e[3]=u);let d=u,[p,m]=(0,x.useState)(``),v;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(v={busy:!1,result:null},e[4]=v):v=e[4];let[y,b]=(0,x.useState)(v),w;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(w={busy:!1,error:null},e[5]=w):w=e[5];let[T,E]=(0,x.useState)(w),D,O;e[6]!==d||e[7]!==a||e[8]!==p?(D=()=>{p||(d?m(d):a&&m(a))},O=[d,a,p],e[6]=d,e[7]=a,e[8]=p,e[9]=D,e[10]=O):(D=e[9],O=e[10]),(0,x.useEffect)(D,O);let k;bb0:{let t;e[11]===p?t=e[12]:(t=p.trim(),e[11]=p,e[12]=t);let n=t;if(n){k=n;break bb0}k=d??a??``}let A=k,j=!d&&!!a&&A===a,M;e[13]!==p||e[14]!==A?(M=async()=>{let e=p.trim()||A;if(e){b({busy:!0,result:null});try{let t=await ie(e);b({busy:!1,result:t})}catch(e){let t=e;b({busy:!1,result:{ok:!1,code:`NETWORK_ERROR`,message:t instanceof Error?t.message:String(t)}})}}},e[13]=p,e[14]=A,e[15]=M):M=e[15];let fe=M,N;e[16]===A?N=e[17]:(N=async()=>{let e=A.trim();if(e){E({busy:!0,error:null});try{await ae(e),await h(),E({busy:!1,error:null})}catch(e){let t=e;E({busy:!1,error:t instanceof Error?t.message:String(t)})}}},e[16]=A,e[17]=N);let pe=N,P;e[18]===Symbol.for(`react.memo_cache_sentinel`)?(P=async()=>{E({busy:!0,error:null});try{await ae(null),await h(),m(``),b({busy:!1,result:null}),E({busy:!1,error:null})}catch(e){let t=e;E({busy:!1,error:t instanceof Error?t.message:String(t)})}},e[18]=P):P=e[18];let me=P;if(!i)return null;let F;e[19]!==r.subtitle||e[20]!==r.title?(F=(0,C.jsx)(ne,{icon:ee,title:r.title,subtitle:r.subtitle}),e[19]=r.subtitle,e[20]=r.title,e[21]=F):F=e[21];let I;e[22]===r.urlLabel?I=e[23]:(I=(0,C.jsx)(`label`,{className:`text-sm font-medium text-fg`,htmlFor:`reverse-proxy-url`,children:r.urlLabel}),e[22]=r.urlLabel,e[23]=I);let L;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(L=f(se(),`font-mono text-xs sm:flex-1 sm:min-w-0 sm:w-auto`),e[24]=L):L=e[24];let R;e[25]===Symbol.for(`react.memo_cache_sentinel`)?(R=e=>{m(e.target.value),b({busy:!1,result:null})},e[25]=R):R=e[25];let z;e[26]!==p||e[27]!==r.urlPlaceholder||e[28]!==L?(z=(0,C.jsx)(`input`,{id:`reverse-proxy-url`,className:L,type:`text`,autoComplete:`off`,spellCheck:!1,placeholder:r.urlPlaceholder,value:p,onChange:R}),e[26]=p,e[27]=r.urlPlaceholder,e[28]=L,e[29]=z):z=e[29];let B;e[30]===fe?B=e[31]:(B=()=>void fe(),e[30]=fe,e[31]=B);let V;e[32]!==p||e[33]!==y.busy?(V=y.busy||!p.trim(),e[32]=p,e[33]=y.busy,e[34]=V):V=e[34];let H;e[35]===y.busy?H=e[36]:(H=y.busy?(0,C.jsx)(te,{className:`size-3.5 animate-spin`}):null,e[35]=y.busy,e[36]=H);let he=y.busy?r.probing:r.probeButton,U;e[37]!==B||e[38]!==V||e[39]!==H||e[40]!==he?(U=(0,C.jsxs)(_,{type:`button`,variant:`secondary`,className:`shrink-0 whitespace-nowrap`,onClick:B,disabled:V,children:[H,he]}),e[37]=B,e[38]=V,e[39]=H,e[40]=he,e[41]=U):U=e[41];let W;e[42]!==z||e[43]!==U?(W=(0,C.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-stretch`,children:[z,U]}),e[42]=z,e[43]=U,e[44]=W):W=e[44];let G;e[45]===r.urlHint?G=e[46]:(G=(0,C.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:r.urlHint}),e[45]=r.urlHint,e[46]=G);let K;e[47]!==a||e[48]!==j||e[49]!==r.autoDetectedHint||e[50]!==r.autoDetectedTitle?(K=j&&a?(0,C.jsxs)(`div`,{className:`rounded-lg bg-accent-soft/60 px-3 py-2 text-xs leading-relaxed text-accent-fg`,children:[(0,C.jsx)(`div`,{className:`font-medium`,children:r.autoDetectedTitle}),(0,C.jsx)(`div`,{className:`mt-1 break-all font-mono text-[11px]`,children:a}),(0,C.jsx)(`p`,{className:`mt-1`,children:r.autoDetectedHint})]}):null,e[47]=a,e[48]=j,e[49]=r.autoDetectedHint,e[50]=r.autoDetectedTitle,e[51]=K):K=e[51];let q;e[52]!==y.result||e[53]!==r.probeStatus?(q=y.result?(0,C.jsx)(de,{result:y.result,labels:r.probeStatus}):null,e[52]=y.result,e[53]=r.probeStatus,e[54]=q):q=e[54];let J;e[55]!==d||e[56]!==A||e[57]!==pe||e[58]!==r.saveAsDefault||e[59]!==r.saving||e[60]!==T.busy?(J=A&&d!==A?(0,C.jsxs)(_,{type:`button`,onClick:()=>void pe(),disabled:T.busy,children:[T.busy?(0,C.jsx)(te,{className:`size-3.5 animate-spin`}):null,T.busy?r.saving:r.saveAsDefault]}):null,e[55]=d,e[56]=A,e[57]=pe,e[58]=r.saveAsDefault,e[59]=r.saving,e[60]=T.busy,e[61]=J):J=e[61];let Y;e[62]!==d||e[63]!==r.clear||e[64]!==T.busy?(Y=d?(0,C.jsx)(_,{type:`button`,variant:`ghost`,onClick:()=>void me(),disabled:T.busy,children:r.clear}):null,e[62]=d,e[63]=r.clear,e[64]=T.busy,e[65]=Y):Y=e[65];let X;e[66]!==J||e[67]!==Y?(X=(0,C.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:flex-wrap`,children:[J,Y]}),e[66]=J,e[67]=Y,e[68]=X):X=e[68];let Z;e[69]===T.error?Z=e[70]:(Z=T.error?(0,C.jsx)(`p`,{className:`text-xs text-red-800 dark:text-red-200`,children:T.error}):null,e[69]=T.error,e[70]=Z);let Q;e[71]===r.certWarning?Q=e[72]:(Q=(0,C.jsx)(`div`,{className:`rounded-lg bg-amber-50 px-3 py-2 text-xs leading-relaxed text-amber-950 dark:bg-amber-950/30 dark:text-amber-100`,children:r.certWarning}),e[71]=r.certWarning,e[72]=Q);let $;e[73]!==I||e[74]!==W||e[75]!==G||e[76]!==K||e[77]!==q||e[78]!==X||e[79]!==Z||e[80]!==Q?($=(0,C.jsxs)(`div`,{className:`mt-4 space-y-3`,children:[I,W,G,K,q,X,Z,Q]}),e[73]=I,e[74]=W,e[75]=G,e[76]=K,e[77]=q,e[78]=X,e[79]=Z,e[80]=Q,e[81]=$):$=e[81];let ge;return e[82]!==F||e[83]!==$?(ge=(0,C.jsx)(`div`,{className:`flex flex-col gap-4`,children:(0,C.jsxs)(re,{children:[F,$]})}),e[82]=F,e[83]=$,e[84]=ge):ge=e[84],ge}function le(e){return e.conversationId}function ue(e){return e.language}function de(e){let t=(0,S.c)(18),{result:n,labels:r}=e;if(n.ok){let e;t[0]===r.ok?e=t[1]:(e=(0,C.jsx)(`span`,{className:`font-medium`,children:r.ok}),t[0]=r.ok,t[1]=e);let i;t[2]===n.latencyMs?i=t[3]:(i=(0,C.jsxs)(`span`,{className:`font-mono`,children:[n.latencyMs,`ms`]}),t[2]=n.latencyMs,t[3]=i);let a;t[4]!==r.gatewayReady||t[5]!==n.gatewayReady?(a=n.gatewayReady?(0,C.jsxs)(C.Fragment,{children:[` · `,(0,C.jsx)(`span`,{children:r.gatewayReady})]}):null,t[4]=r.gatewayReady,t[5]=n.gatewayReady,t[6]=a):a=t[6];let o;return t[7]!==e||t[8]!==i||t[9]!==a?(o=(0,C.jsxs)(`div`,{className:`rounded-lg bg-emerald-50 px-3 py-2 text-xs text-emerald-900 dark:bg-emerald-950/30 dark:text-emerald-100`,children:[e,` · `,i,a]}),t[7]=e,t[8]=i,t[9]=a,t[10]=o):o=t[10],o}let i=r[`code_${n.code}`]??r.codeUnknown,a;t[11]===i?a=t[12]:(a=(0,C.jsx)(`span`,{className:`font-medium`,children:i}),t[11]=i,t[12]=a);let o;t[13]===n.message?o=t[14]:(o=n.message?(0,C.jsxs)(C.Fragment,{children:[` — `,(0,C.jsx)(`span`,{className:`font-mono break-all`,children:n.message})]}):null,t[13]=n.message,t[14]=o);let s;return t[15]!==a||t[16]!==o?(s=(0,C.jsxs)(`div`,{className:`rounded-lg bg-red-50 px-3 py-2 text-xs text-red-900 dark:bg-red-950/30 dark:text-red-100`,children:[a,o]}),t[15]=a,t[16]=o,t[17]=s):s=t[17],s}async function fe(){let e=await c(a(`/api/device-pairing/readiness`));return{ready:e.ready,routes:e.routes,protocolVersion:e.protocolVersion}}async function N(e){try{return{kind:`ready`,setup:(await c(a(`/api/device-pairing/setups`),{method:`POST`,body:JSON.stringify({targetKind:e})})).setup}}catch(e){if(e.body?.error?.code===`NO_SECURE_ROUTE`)return{kind:`needs-secure-route`};throw e}}async function pe(e){return c(a(`/api/device-pairing/setups/${encodeURIComponent(e)}`))}async function P(e){await c(a(`/api/device-pairing/setups/${encodeURIComponent(e)}`),{method:`DELETE`})}async function me(e,t){await c(a(`/api/device-pairing/requests/${encodeURIComponent(e.requestId)}/decision`),{method:`POST`,body:JSON.stringify({decision:t,expectedRevision:e.revision})})}async function F(){let e=await i(a(`/api/browser/extension/archive`));if(!e.ok)throw Error(`Browser extension download failed (${e.status})`);let t=e.headers.get(`Content-Disposition`)??``,n=/filename="([^"]+)"/.exec(t)?.[1]??`xopc-browser-extension.zip`,r=URL.createObjectURL(await e.blob());try{let e=document.createElement(`a`);e.href=r,e.download=n,e.click()}finally{URL.revokeObjectURL(r)}}var I=`https://console.xopc.ai/access/client`;function L(e){if(!e||typeof e!=`object`)return;let t=e.body;if(!t||typeof t!=`object`)return;let n=t.code;if(typeof n==`string`)return n;let r=t.error;if(!r||typeof r!=`object`)return;let i=r.code;return typeof i==`string`?i:void 0}function R(e){return L(e)===`TUNNEL_REGISTRATION_KEY_REJECTED`||e instanceof Error&&/\bTunnel register failed: 401\b/.test(e.message)}function z(e){return L(e)===`TUNNEL_RECOVERY_PROOF_REJECTED`||e instanceof Error&&e.message===`Active lease ownership proof required`}function B(e){return[`tunnel_oauth_required`,`invalid_token`,`insufficient_scope`].includes(L(e)??``)}async function V(){return c(a(`/api/tunnel/status`))}async function H(){await c(a(`/api/tunnel/consent`),{method:`POST`,body:JSON.stringify({})})}async function he(){await c(a(`/api/tunnel/registration-key`),{method:`POST`,body:JSON.stringify({})})}async function U(e){return c(a(`/api/tunnel/start`),{method:`POST`,body:JSON.stringify({recoverActiveLease:e?.recoverActiveLease===!0})})}async function W(e){return c(a(`/api/tunnel/stop`),{method:`POST`,body:JSON.stringify({release:e?.release===!0})})}async function G(){let e=(await c(a(`/api/tunnel/reveal-registration-secret`),{method:`POST`,body:JSON.stringify({})})).payload;if(!e)throw Error(`Missing reveal payload`);return{registrationSecret:e.registrationSecret??null,source:e.source===`config`?`config`:`none`}}async function K(e){await c(a(`/api/config`),{method:`PATCH`,body:JSON.stringify({tunnel:e})})}export{w as S,fe as _,H as a,A as b,W as c,z as d,R as f,F as g,me as h,he as i,L as l,N as m,V as n,G as o,P as p,K as r,U as s,I as t,B as u,pe as v,T as x,M as y};
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{a as i,i as a,l as o,n as s,o as c}from"./locale-store-B6OrWgY1.js";import{t as l}from"./messages-jwdBhfL9.js";import{t as u}from"./external-link-DjqjBmc3.js";import{t as ee}from"./globe-DSSGFWFn.js";import{t as te}from"./loader-circle-CifKLtgG.js";import{t as d}from"./power-ZI-pBczI.js";import{t as f}from"./cn-0WouolD0.js";import{t as p}from"./skeleton-BI5TyibZ.js";import{i as m}from"./vendor-swr-CdRzEUwF.js";import{n as h,r as g}from"./gateway-config-swr-D6cc6W6E.js";import{t as _}from"./button-Cc4hUNTt.js";import{s as v}from"./form-field-width-DJw_jULe.js";import{u as y}from"./navigation-D62kPsA9.js";import{t as b}from"./copy-text-row-CpiRzq4G.js";import{n as ne,t as re}from"./settings-form-section-num14vSv.js";var x=e(t(),1),S=n(),C=r();function w(e){let t=(0,S.c)(10),{language:n,label:r,section:i,className:a}=e,o;t[0]!==n||t[1]!==i?(o=y(n,i),t[0]=n,t[1]=i,t[2]=o):o=t[2];let s;t[3]===a?s=t[4]:(s=f(`inline-flex items-center gap-1 text-sm font-medium text-accent hover:underline`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,a),t[3]=a,t[4]=s);let c;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,C.jsx)(u,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t[5]=c):c=t[5];let l;return t[6]!==r||t[7]!==o||t[8]!==s?(l=(0,C.jsxs)(`a`,{href:o,target:`_blank`,rel:`noreferrer`,className:s,children:[r,c]}),t[6]=r,t[7]=o,t[8]=s,t[9]=l):l=t[9],l}async function T(){let e=await i(`/api/exposure/status`);if(!e.ok)throw Error(`Failed to load exposure status (${e.status})`);return await e.json()}async function E(e=`serve`){let t=await i(`/api/exposure/tailscale/start`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mode:e})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`Start failed (${t.status})`)}return await t.json()}async function D(){let e=await i(`/api/exposure/tailscale/stop`,{method:`POST`});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??`Stop failed (${e.status})`)}return await e.json()}var O=`https://tailscale.com/download`;function k(e){let t=(0,S.c)(2),{label:n}=e,r;return t[0]===n?r=t[1]:(r=(0,C.jsx)(`a`,{href:O,target:`_blank`,rel:`noreferrer`,className:`font-medium text-accent hover:underline`,children:n}),t[0]=n,t[1]=r),r}function A({embedded:e=!1}){let t=s(e=>e.language),n=l(t).remoteAccess.tailscale,r=(0,x.useMemo)(()=>({copy:n.copyUrl,copied:n.copied,copyFailed:l(t).clipboard.copyFailed}),[t,n.copyUrl,n.copied]),i=!!o(e=>e.conversationId),[a,c]=(0,x.useState)(!1),[u,f]=(0,x.useState)(null),{data:h,mutate:g,isLoading:v}=m(i?`exposure-status`:null,T,{refreshInterval:3e4}),y=h?.tailscale.hostname,S=h?.tailscale.active===!0,O=h?.tailscale.cliAvailable!==!1,A=y?`https://${y}/`:null,ie=(0,x.useCallback)(async()=>{c(!0),f(null);try{await E(`serve`),await g()}catch(e){f(e instanceof Error?e.message:String(e))}finally{c(!1)}},[g]),ae=(0,x.useCallback)(async()=>{c(!0),f(null);try{await D(),await g()}catch(e){f(e instanceof Error?e.message:String(e))}finally{c(!1)}},[g]);if(!i)return null;let j=(0,C.jsxs)(`div`,{className:e?`space-y-4`:`mt-4 space-y-3`,children:[e?(0,C.jsxs)(`ol`,{className:`space-y-3 text-sm text-fg-muted`,children:[(0,C.jsxs)(`li`,{className:`flex gap-2`,children:[(0,C.jsx)(`span`,{className:`flex size-5 shrink-0 items-center justify-center rounded-full bg-surface-hover text-xs font-semibold text-fg`,children:`1`}),(0,C.jsxs)(`span`,{children:[n.stepInstallBefore,(0,C.jsx)(k,{label:n.stepInstallLink}),n.stepInstallAfter]})]}),(0,C.jsxs)(`li`,{className:`flex gap-2`,children:[(0,C.jsx)(`span`,{className:`flex size-5 shrink-0 items-center justify-center rounded-full bg-surface-hover text-xs font-semibold text-fg`,children:`2`}),(0,C.jsx)(`span`,{children:n.stepEnable})]}),(0,C.jsxs)(`li`,{className:`flex gap-2`,children:[(0,C.jsx)(`span`,{className:`flex size-5 shrink-0 items-center justify-center rounded-full bg-surface-hover text-xs font-semibold text-fg`,children:`3`}),(0,C.jsx)(`span`,{children:n.stepCopy})]})]}):null,e&&h?.tailscale.cliAvailable===!1?(0,C.jsxs)(`p`,{className:`rounded-lg bg-amber-500/10 px-3 py-2 text-sm text-fg-muted`,children:[n.cliMissingIntro,` `,(0,C.jsx)(k,{label:n.cliMissingDownloadLink}),n.cliMissingSuffix]}):null,v&&!h?(0,C.jsxs)(`div`,{className:`grid gap-3`,"aria-busy":`true`,children:[(0,C.jsx)(p,{className:`h-20 rounded-lg`}),(0,C.jsx)(p,{className:`h-20 rounded-lg`})]}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(re,{children:[(0,C.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:n.statusLabel}),(0,C.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:S?n.statusActive:n.statusOff}),A?(0,C.jsx)(`div`,{className:`mt-3`,children:(0,C.jsx)(b,{text:A,labels:r})}):null,u?(0,C.jsx)(`p`,{className:`mt-2 text-sm text-red-600 dark:text-red-400`,children:u}):null,(0,C.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:S?(0,C.jsxs)(_,{type:`button`,variant:`secondary`,disabled:a,onClick:()=>void ae(),children:[a?(0,C.jsx)(te,{className:`mr-1 size-4 animate-spin`}):null,n.disableServe]}):(0,C.jsxs)(_,{type:`button`,disabled:a||!O,onClick:()=>void ie(),children:[a?(0,C.jsx)(te,{className:`mr-1 size-4 animate-spin`}):(0,C.jsx)(d,{className:`mr-1 size-4`}),n.enableServe]})})]}),(0,C.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:n.hint}),(0,C.jsx)(w,{language:t,label:n.docsLink,section:`tailscale-serve`,className:`mt-2`})]})]});return e?j:(0,C.jsxs)(re,{children:[(0,C.jsx)(ne,{icon:ee,title:n.title,subtitle:n.subtitle}),j]})}async function ie(e){let t=await i(a(`/api/tunnel/probe-public`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({url:e})});if(!t.ok&&t.status!==400)throw Error(`Probe failed (${t.status})`);return await t.json()}async function ae(e){await c(a(`/api/config`),{method:`PATCH`,body:JSON.stringify({gateway:{publicUrl:e??null}})})}function j(e){let t=e.split(`.`).map(e=>Number.parseInt(e,10));if(t.length!==4||t.some(e=>!Number.isFinite(e)))return!1;let[n,r]=t;return n===10||n===127||n===169&&r===254||n===172&&r>=16&&r<=31||n===192&&r===168||n===100&&r>=64&&r<=127}function oe(){return(0,x.useMemo)(()=>{if(typeof window>`u`)return null;let{protocol:e,hostname:t,origin:n}=window.location;if(e!==`https:`&&e!==`http:`)return null;let r=t.toLowerCase();return!r||r===`localhost`||r===`127.0.0.1`||r===`::1`||r===`[::1]`||r.endsWith(`.local`)||r.endsWith(`.localhost`)||j(r)?null:n.toLowerCase().replace(/\/+$/,``)},[])}function se(){return f(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,v,`dark:border-edge`)}function ce(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e.gateway;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.publicUrl;return typeof n==`string`&&n.trim()?n.trim():null}function M(){let e=(0,S.c)(85),t=s(ue),n;e[0]===t?n=e[1]:(n=l(t),e[0]=t,e[1]=n);let r=n.remoteAccess.reverseProxy,i=!!o(le),a=oe(),c=g(i).data?.payload?.config,u;e[2]===c?u=e[3]:(u=ce(c),e[2]=c,e[3]=u);let d=u,[p,m]=(0,x.useState)(``),v;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(v={busy:!1,result:null},e[4]=v):v=e[4];let[y,b]=(0,x.useState)(v),w;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(w={busy:!1,error:null},e[5]=w):w=e[5];let[T,E]=(0,x.useState)(w),D,O;e[6]!==d||e[7]!==a||e[8]!==p?(D=()=>{p||(d?m(d):a&&m(a))},O=[d,a,p],e[6]=d,e[7]=a,e[8]=p,e[9]=D,e[10]=O):(D=e[9],O=e[10]),(0,x.useEffect)(D,O);let k;bb0:{let t;e[11]===p?t=e[12]:(t=p.trim(),e[11]=p,e[12]=t);let n=t;if(n){k=n;break bb0}k=d??a??``}let A=k,j=!d&&!!a&&A===a,M;e[13]!==p||e[14]!==A?(M=async()=>{let e=p.trim()||A;if(e){b({busy:!0,result:null});try{let t=await ie(e);b({busy:!1,result:t})}catch(e){let t=e;b({busy:!1,result:{ok:!1,code:`NETWORK_ERROR`,message:t instanceof Error?t.message:String(t)}})}}},e[13]=p,e[14]=A,e[15]=M):M=e[15];let fe=M,N;e[16]===A?N=e[17]:(N=async()=>{let e=A.trim();if(e){E({busy:!0,error:null});try{await ae(e),await h(),E({busy:!1,error:null})}catch(e){let t=e;E({busy:!1,error:t instanceof Error?t.message:String(t)})}}},e[16]=A,e[17]=N);let pe=N,P;e[18]===Symbol.for(`react.memo_cache_sentinel`)?(P=async()=>{E({busy:!0,error:null});try{await ae(null),await h(),m(``),b({busy:!1,result:null}),E({busy:!1,error:null})}catch(e){let t=e;E({busy:!1,error:t instanceof Error?t.message:String(t)})}},e[18]=P):P=e[18];let me=P;if(!i)return null;let F;e[19]!==r.subtitle||e[20]!==r.title?(F=(0,C.jsx)(ne,{icon:ee,title:r.title,subtitle:r.subtitle}),e[19]=r.subtitle,e[20]=r.title,e[21]=F):F=e[21];let I;e[22]===r.urlLabel?I=e[23]:(I=(0,C.jsx)(`label`,{className:`text-sm font-medium text-fg`,htmlFor:`reverse-proxy-url`,children:r.urlLabel}),e[22]=r.urlLabel,e[23]=I);let L;e[24]===Symbol.for(`react.memo_cache_sentinel`)?(L=f(se(),`font-mono text-xs sm:flex-1 sm:min-w-0 sm:w-auto`),e[24]=L):L=e[24];let R;e[25]===Symbol.for(`react.memo_cache_sentinel`)?(R=e=>{m(e.target.value),b({busy:!1,result:null})},e[25]=R):R=e[25];let z;e[26]!==p||e[27]!==r.urlPlaceholder||e[28]!==L?(z=(0,C.jsx)(`input`,{id:`reverse-proxy-url`,className:L,type:`text`,autoComplete:`off`,spellCheck:!1,placeholder:r.urlPlaceholder,value:p,onChange:R}),e[26]=p,e[27]=r.urlPlaceholder,e[28]=L,e[29]=z):z=e[29];let B;e[30]===fe?B=e[31]:(B=()=>void fe(),e[30]=fe,e[31]=B);let V;e[32]!==p||e[33]!==y.busy?(V=y.busy||!p.trim(),e[32]=p,e[33]=y.busy,e[34]=V):V=e[34];let H;e[35]===y.busy?H=e[36]:(H=y.busy?(0,C.jsx)(te,{className:`size-3.5 animate-spin`}):null,e[35]=y.busy,e[36]=H);let he=y.busy?r.probing:r.probeButton,U;e[37]!==B||e[38]!==V||e[39]!==H||e[40]!==he?(U=(0,C.jsxs)(_,{type:`button`,variant:`secondary`,className:`shrink-0 whitespace-nowrap`,onClick:B,disabled:V,children:[H,he]}),e[37]=B,e[38]=V,e[39]=H,e[40]=he,e[41]=U):U=e[41];let W;e[42]!==z||e[43]!==U?(W=(0,C.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-stretch`,children:[z,U]}),e[42]=z,e[43]=U,e[44]=W):W=e[44];let G;e[45]===r.urlHint?G=e[46]:(G=(0,C.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:r.urlHint}),e[45]=r.urlHint,e[46]=G);let K;e[47]!==a||e[48]!==j||e[49]!==r.autoDetectedHint||e[50]!==r.autoDetectedTitle?(K=j&&a?(0,C.jsxs)(`div`,{className:`rounded-lg bg-accent-soft/60 px-3 py-2 text-xs leading-relaxed text-accent-fg`,children:[(0,C.jsx)(`div`,{className:`font-medium`,children:r.autoDetectedTitle}),(0,C.jsx)(`div`,{className:`mt-1 break-all font-mono text-[11px]`,children:a}),(0,C.jsx)(`p`,{className:`mt-1`,children:r.autoDetectedHint})]}):null,e[47]=a,e[48]=j,e[49]=r.autoDetectedHint,e[50]=r.autoDetectedTitle,e[51]=K):K=e[51];let q;e[52]!==y.result||e[53]!==r.probeStatus?(q=y.result?(0,C.jsx)(de,{result:y.result,labels:r.probeStatus}):null,e[52]=y.result,e[53]=r.probeStatus,e[54]=q):q=e[54];let J;e[55]!==d||e[56]!==A||e[57]!==pe||e[58]!==r.saveAsDefault||e[59]!==r.saving||e[60]!==T.busy?(J=A&&d!==A?(0,C.jsxs)(_,{type:`button`,onClick:()=>void pe(),disabled:T.busy,children:[T.busy?(0,C.jsx)(te,{className:`size-3.5 animate-spin`}):null,T.busy?r.saving:r.saveAsDefault]}):null,e[55]=d,e[56]=A,e[57]=pe,e[58]=r.saveAsDefault,e[59]=r.saving,e[60]=T.busy,e[61]=J):J=e[61];let Y;e[62]!==d||e[63]!==r.clear||e[64]!==T.busy?(Y=d?(0,C.jsx)(_,{type:`button`,variant:`ghost`,onClick:()=>void me(),disabled:T.busy,children:r.clear}):null,e[62]=d,e[63]=r.clear,e[64]=T.busy,e[65]=Y):Y=e[65];let X;e[66]!==J||e[67]!==Y?(X=(0,C.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:flex-wrap`,children:[J,Y]}),e[66]=J,e[67]=Y,e[68]=X):X=e[68];let Z;e[69]===T.error?Z=e[70]:(Z=T.error?(0,C.jsx)(`p`,{className:`text-xs text-red-800 dark:text-red-200`,children:T.error}):null,e[69]=T.error,e[70]=Z);let Q;e[71]===r.certWarning?Q=e[72]:(Q=(0,C.jsx)(`div`,{className:`rounded-lg bg-amber-50 px-3 py-2 text-xs leading-relaxed text-amber-950 dark:bg-amber-950/30 dark:text-amber-100`,children:r.certWarning}),e[71]=r.certWarning,e[72]=Q);let $;e[73]!==I||e[74]!==W||e[75]!==G||e[76]!==K||e[77]!==q||e[78]!==X||e[79]!==Z||e[80]!==Q?($=(0,C.jsxs)(`div`,{className:`mt-4 space-y-3`,children:[I,W,G,K,q,X,Z,Q]}),e[73]=I,e[74]=W,e[75]=G,e[76]=K,e[77]=q,e[78]=X,e[79]=Z,e[80]=Q,e[81]=$):$=e[81];let ge;return e[82]!==F||e[83]!==$?(ge=(0,C.jsx)(`div`,{className:`flex flex-col gap-4`,children:(0,C.jsxs)(re,{children:[F,$]})}),e[82]=F,e[83]=$,e[84]=ge):ge=e[84],ge}function le(e){return e.conversationId}function ue(e){return e.language}function de(e){let t=(0,S.c)(18),{result:n,labels:r}=e;if(n.ok){let e;t[0]===r.ok?e=t[1]:(e=(0,C.jsx)(`span`,{className:`font-medium`,children:r.ok}),t[0]=r.ok,t[1]=e);let i;t[2]===n.latencyMs?i=t[3]:(i=(0,C.jsxs)(`span`,{className:`font-mono`,children:[n.latencyMs,`ms`]}),t[2]=n.latencyMs,t[3]=i);let a;t[4]!==r.gatewayReady||t[5]!==n.gatewayReady?(a=n.gatewayReady?(0,C.jsxs)(C.Fragment,{children:[` · `,(0,C.jsx)(`span`,{children:r.gatewayReady})]}):null,t[4]=r.gatewayReady,t[5]=n.gatewayReady,t[6]=a):a=t[6];let o;return t[7]!==e||t[8]!==i||t[9]!==a?(o=(0,C.jsxs)(`div`,{className:`rounded-lg bg-emerald-50 px-3 py-2 text-xs text-emerald-900 dark:bg-emerald-950/30 dark:text-emerald-100`,children:[e,` · `,i,a]}),t[7]=e,t[8]=i,t[9]=a,t[10]=o):o=t[10],o}let i=r[`code_${n.code}`]??r.codeUnknown,a;t[11]===i?a=t[12]:(a=(0,C.jsx)(`span`,{className:`font-medium`,children:i}),t[11]=i,t[12]=a);let o;t[13]===n.message?o=t[14]:(o=n.message?(0,C.jsxs)(C.Fragment,{children:[` — `,(0,C.jsx)(`span`,{className:`font-mono break-all`,children:n.message})]}):null,t[13]=n.message,t[14]=o);let s;return t[15]!==a||t[16]!==o?(s=(0,C.jsxs)(`div`,{className:`rounded-lg bg-red-50 px-3 py-2 text-xs text-red-900 dark:bg-red-950/30 dark:text-red-100`,children:[a,o]}),t[15]=a,t[16]=o,t[17]=s):s=t[17],s}async function fe(){let e=await c(a(`/api/device-pairing/readiness`));return{ready:e.ready,routes:e.routes,protocolVersion:e.protocolVersion}}async function N(e){try{return{kind:`ready`,setup:(await c(a(`/api/device-pairing/setups`),{method:`POST`,body:JSON.stringify({targetKind:e})})).setup}}catch(e){if(e.body?.error?.code===`NO_SECURE_ROUTE`)return{kind:`needs-secure-route`};throw e}}async function pe(e){return c(a(`/api/device-pairing/setups/${encodeURIComponent(e)}`))}async function P(e){await c(a(`/api/device-pairing/setups/${encodeURIComponent(e)}`),{method:`DELETE`})}async function me(e,t){await c(a(`/api/device-pairing/requests/${encodeURIComponent(e.requestId)}/decision`),{method:`POST`,body:JSON.stringify({decision:t,expectedRevision:e.revision})})}async function F(){let e=await i(a(`/api/browser/extension/archive`));if(!e.ok)throw Error(`Browser extension download failed (${e.status})`);let t=e.headers.get(`Content-Disposition`)??``,n=/filename="([^"]+)"/.exec(t)?.[1]??`xopc-browser-extension.zip`,r=URL.createObjectURL(await e.blob());try{let e=document.createElement(`a`);e.href=r,e.download=n,e.click()}finally{URL.revokeObjectURL(r)}}var I=`https://console.xopc.ai/access/client`;function L(e){if(!e||typeof e!=`object`)return;let t=e.body;if(!t||typeof t!=`object`)return;let n=t.code;if(typeof n==`string`)return n;let r=t.error;if(!r||typeof r!=`object`)return;let i=r.code;return typeof i==`string`?i:void 0}function R(e){return L(e)===`TUNNEL_REGISTRATION_KEY_REJECTED`||e instanceof Error&&/\bTunnel register failed: 401\b/.test(e.message)}function z(e){return L(e)===`TUNNEL_RECOVERY_PROOF_REJECTED`||e instanceof Error&&e.message===`Active lease ownership proof required`}function B(e){return[`tunnel_oauth_required`,`invalid_token`,`insufficient_scope`].includes(L(e)??``)}async function V(){return c(a(`/api/tunnel/status`))}async function H(){await c(a(`/api/tunnel/consent`),{method:`POST`,body:JSON.stringify({})})}async function he(){await c(a(`/api/tunnel/registration-key`),{method:`POST`,body:JSON.stringify({})})}async function U(e){return c(a(`/api/tunnel/start`),{method:`POST`,body:JSON.stringify({recoverActiveLease:e?.recoverActiveLease===!0})})}async function W(e){return c(a(`/api/tunnel/stop`),{method:`POST`,body:JSON.stringify({release:e?.release===!0})})}async function G(){let e=(await c(a(`/api/tunnel/reveal-registration-secret`),{method:`POST`,body:JSON.stringify({})})).payload;if(!e)throw Error(`Missing reveal payload`);return{registrationSecret:e.registrationSecret??null,source:e.source===`config`?`config`:`none`}}async function K(e){await c(a(`/api/config`),{method:`PATCH`,body:JSON.stringify({tunnel:e})})}export{w as S,fe as _,H as a,A as b,W as c,z as d,R as f,F as g,me as h,he as i,L as l,N as m,V as n,G as o,P as p,K as r,U as s,I as t,B as u,pe as v,T as x,M as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,o as t,p as n}from"./locale-store-
|
|
1
|
+
import{i as e,o as t,p as n}from"./locale-store-B6OrWgY1.js";import{t as r}from"./createLucideIcon-DPHK1VkS.js";var i=r(`file-clock`,[[`path`,{d:`M16 22h2a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v2.85`,key:`ryk6xj`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M8 14v2.2l1.6 1`,key:`6m4bie`}],[`circle`,{cx:`8`,cy:`16`,r:`6`,key:`10v15b`}]]),a=r(`mail`,[[`path`,{d:`m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7`,key:`132q7q`}],[`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`,key:`izxlao`}]]);async function o(){return t(e(`/api/onboarding/work-discovery`))}async function s(){await t(e(`/api/onboarding/work-discovery`),{method:`PATCH`,body:JSON.stringify({status:`dismissed`})})}async function c(n){return(await t(e(`/api/work-discovery/preview`),{method:`POST`,body:JSON.stringify({rootPath:n})})).preview}async function l(){let n=await t(e(`/api/work-discovery/candidates`),{method:`POST`});return{candidates:n.candidates,processingTarget:n.processingTarget}}async function u(n,r){return(await t(e(`/api/context-sources/work-folders`),{method:`POST`,body:JSON.stringify({rootPath:n,processingPolicy:r})})).source}async function d(n,r,i,a){return t(e(`/api/context-sources/bootstrap`),{method:`POST`,body:JSON.stringify({items:n,processingPolicy:i,...r?{workDiscoveryRunId:r}:{},sourceCheckpoints:a})})}async function f(n){return(await t(e(`/api/work-discovery/runs`),{method:`POST`,body:JSON.stringify({rootPath:n,source:`onboarding_selected_directory`,idempotencyKey:crypto.randomUUID()})})).run}async function p(n){return(await t(e(`/api/work-discovery/runs/${encodeURIComponent(n)}`))).run}async function m(n){return(await t(e(`/api/work-discovery/runs/${encodeURIComponent(n)}/cancel`),{method:`POST`})).run}async function h(n){return(await t(e(`/api/work-discovery/runs/${encodeURIComponent(n)}/retry`),{method:`POST`})).run}async function g(n,r,i){return(await t(e(`/api/work-discovery/runs/${encodeURIComponent(n)}/recognition-feedback`),{method:`POST`,body:JSON.stringify({decision:r,correctedIntent:i})})).run}async function _(n,r){await t(e(`/api/work-discovery/runs/${encodeURIComponent(n)}/suggestions/${encodeURIComponent(r)}/select`),{method:`POST`})}function v(e,t){return Object.fromEntries(e.map(e=>[e,t]))}function y(e,t){let n=v(t,`running`);for(let t of e)n[t.sourceId]=t.status;return n}async function b(e){if(!e)return;let t=Date.now()+75e3;for(;Date.now()<t;){try{let t=await p(e);if(S.getState().updateDirectoryRun(t),t.status===`completed`||t.status===`failed`||t.status===`canceled`)return}catch{}await new Promise(e=>window.setTimeout(e,800))}}var x={status:`idle`,drawerOpen:!1,directoryStatus:`idle`,directoryRun:null,sources:{},itemCounts:{},memories:[],threads:[],error:void 0},S=n((e,t)=>({...x,setDrawerOpen:n=>{!n&&t().status===`completed`?e({...x}):e({drawerOpen:n})},finish:()=>e({...x}),updateDirectoryRun:n=>{let r=n.status===`completed`?`completed`:n.status===`failed`||n.status===`canceled`?`failed`:`running`,i=Object.values(t().sources).every(e=>e!==`running`&&e!==`idle`),a=Object.values(t().sources).some(e=>e===`denied`||e===`failed`||e===`partial`);e({directoryStatus:r,directoryRun:n,status:r===`completed`&&i?a?`partial`:`completed`:r===`failed`&&i?`partial`:`running`})},collectSources:async(n,r,i)=>{let a=window.electronAPI?.understandingSources?.collect;if(!(!a||!r.length)){e({status:`running`,sources:v(r,`running`),itemCounts:Object.fromEntries(r.map(e=>[e,0])),memories:[],threads:[],error:void 0});try{let o=await a(r),s=y(o,r),c=Object.fromEntries(o.map(e=>[e.sourceId,e.items.length]));e({sources:s,itemCounts:c});let l=o.flatMap(e=>e.status===`completed`?e.items:[]),u=Object.fromEntries(o.flatMap(e=>e.checkpoint?[[e.sourceId,e.checkpoint]]:[]));l.length&&await b(n);let f=l.length?await d(l,n,i,u):{profileCandidates:[],workThreads:[],knowledgeCandidates:[],sourceStatuses:[]};for(let e of f.sourceStatuses)s[e.sourceId]=e.status;let p=f.profileCandidates,m=Object.values(s).some(e=>e===`denied`||e===`failed`||e===`partial`),h=f.sourceStatuses.flatMap(e=>e.error?[e.error]:[]),g=!n||t().directoryStatus===`completed`;e({sources:s,itemCounts:c,memories:p,threads:f.workThreads,...h.length?{error:h.join(`; `)}:{},status:g?m?`partial`:`completed`:`running`})}catch(t){e(e=>({status:`partial`,sources:Object.fromEntries(Object.entries(e.sources).map(([e,t])=>[e,t===`running`?`failed`:t])),error:t instanceof Error?t.message:String(t)}))}}}}));export{o as a,c,f as d,g as f,s as i,h as l,i as m,m as n,p as o,a as p,l as r,u as s,S as t,_ as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,i as t,o as n,p as r}from"./locale-store-
|
|
1
|
+
import{a as e,i as t,o as n,p as r}from"./locale-store-B6OrWgY1.js";import{t as i}from"./createLucideIcon-DPHK1VkS.js";import{o as a}from"./vendor-swr-CdRzEUwF.js";var o=i(`brain`,[[`path`,{d:`M12 18V5`,key:`adv99a`}],[`path`,{d:`M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4`,key:`1e3is1`}],[`path`,{d:`M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5`,key:`1gqd8o`}],[`path`,{d:`M17.997 5.125a4 4 0 0 1 2.526 5.77`,key:`iwvgf7`}],[`path`,{d:`M18 18a4 4 0 0 0 2-7.464`,key:`efp6ie`}],[`path`,{d:`M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517`,key:`1gq6am`}],[`path`,{d:`M6 18a4 4 0 0 1-2-7.464`,key:`k1g0md`}],[`path`,{d:`M6.003 5.125a4 4 0 0 0-2.526 5.77`,key:`q97ue3`}]]),s=i(`compass`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z`,key:`9ktpf1`}]]),c=i(`handshake`,[[`path`,{d:`m11 17 2 2a1 1 0 1 0 3-3`,key:`efffak`}],[`path`,{d:`m14 14 2.5 2.5a1 1 0 1 0 3-3l-3.88-3.88a3 3 0 0 0-4.24 0l-.88.88a1 1 0 1 1-3-3l2.81-2.81a5.79 5.79 0 0 1 7.06-.87l.47.28a2 2 0 0 0 1.42.25L21 4`,key:`9pr0kb`}],[`path`,{d:`m21 3 1 11h-2`,key:`1tisrp`}],[`path`,{d:`M3 3 2 14l6.5 6.5a1 1 0 1 0 3-3`,key:`1uvwmv`}],[`path`,{d:`M3 4h8`,key:`1ep09j`}]]),l=i(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),u=i(`map-pin`,[[`path`,{d:`M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0`,key:`1r0f0z`}],[`circle`,{cx:`12`,cy:`10`,r:`3`,key:`ilqhr7`}]]),d=i(`user-round-pen`,[[`path`,{d:`M2 21a8 8 0 0 1 10.821-7.487`,key:`1c8h7z`}],[`path`,{d:`M21.378 16.626a1 1 0 0 0-3.004-3.004l-4.01 4.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z`,key:`1817ys`}],[`circle`,{cx:`10`,cy:`8`,r:`5`,key:`o932ke`}]]);function f(){return n(t(`/api/user-model`))}async function p(){let e=await f();return{profile:{callName:typeof e.profile.callName==`string`?e.profile.callName:``,role:typeof e.profile.role==`string`?e.profile.role:``,pronouns:typeof e.profile.pronouns==`string`?e.profile.pronouns:``,timezone:typeof e.profile.timezone==`string`?e.profile.timezone:``,locale:typeof e.profile.locale==`string`?e.profile.locale:``},...typeof e.suggestedCallName==`string`?{suggestedCallName:e.suggestedCallName}:{}}}async function m(e){let r=await n(t(`/api/user-model/profile`),{method:`PATCH`,body:JSON.stringify(e)});return{callName:r.profile.callName??``,role:r.profile.role??``,pronouns:r.profile.pronouns??``,timezone:r.profile.timezone??``,locale:r.profile.locale??``}}function h(){return Intl.DateTimeFormat().resolvedOptions().timeZone||`UTC`}function g(e,r){return n(t(`/api/user-model/assertions/${encodeURIComponent(e)}/status`),{method:`PATCH`,body:JSON.stringify({status:r})})}function _(e,r){return n(t(`/api/user-model/assertions/${encodeURIComponent(e)}/scope`),{method:`PATCH`,body:JSON.stringify({scope:r})})}function v(e,r){return n(t(`/api/user-model/assertions/${encodeURIComponent(e)}`),{method:`PATCH`,body:JSON.stringify({statement:r})})}function y(e,r){return n(t(`/api/user-model/priorities/${encodeURIComponent(e)}`),{method:`PATCH`,body:JSON.stringify(r)})}function b(e){let r=Date.now();return n(t(`/api/user-model/priorities`),{method:`POST`,body:JSON.stringify({targetType:`topic`,targetId:e.title.trim(),rank:`primary`,urgency:1,scope:{type:`global`},validFrom:r,validTo:e.validTo})})}function x(e,r){return n(t(`/api/user-model/rules/${encodeURIComponent(e)}/status`),{method:`PATCH`,body:JSON.stringify({status:r})})}function S(e){return n(t(`/api/user-model/rules`),{method:`POST`,body:JSON.stringify({category:e.category,statement:e.statement,priority:50,scope:e.scope,conditions:{...e.conditions,requiresConfirmation:!1}})})}function C(e,r,i){return n(t(`/api/knowledge-memory/${encodeURIComponent(e.id)}/review`),{method:`POST`,body:JSON.stringify({action:r,expectedStatus:e.status,...i===void 0?{}:{content:i}})})}function w(e){return n(t(`/api/user-model/assertions/${encodeURIComponent(e)}`),{method:`DELETE`})}function T(e){return n(t(`/api/knowledge-memory/${encodeURIComponent(e)}`),{method:`DELETE`})}function E(e){return n(t(`/api/user-model/settings`),{method:`PATCH`,body:JSON.stringify(e)})}async function D(){let n=await e(t(`/api/user-model/export`));if(!n.ok)throw Error(`Export failed (${n.status})`);let r=await n.blob(),i=(n.headers.get(`Content-Disposition`)??``).match(/filename="([^"]+)"/)?.[1]??`xopc-memory.json`,a=URL.createObjectURL(r),o=document.createElement(`a`);o.href=a,o.download=i,o.click(),URL.revokeObjectURL(a)}var O=e=>e.status===`queued`||e.status===`running`,k=new Set,A,j=r((e,r)=>({sources:[],starting:!1,async start(i){if(!r().starting){e({starting:!0,error:void 0});try{await n(t(`/api/user-model/refresh`),{method:`POST`,body:JSON.stringify(i?{sourceIds:[i]}:{})}),await r().poll()}catch(t){e({error:t instanceof Error?t.message:String(t)})}finally{e({starting:!1})}}},poll(){return A||(A=(async()=>{try{let i=await n(t(`/api/user-model/refresh`)),o=new Map(r().sources.map(e=>[e.id,e.status]));e({sources:i.sources,error:void 0}),i.sources.some(e=>!O(e)&&o.get(e.id)!==e.status)&&a(`/api/user-model`);for(let e of i.sources)O(e)&&e.metadata.phase===`waiting_desktop`&&M(e)}catch(t){e({error:t instanceof Error?t.message:String(t)})}})().finally(()=>{A=void 0}),A)}}));async function M(e){let r=window.electronAPI?.understandingSources?.collect;if(!(!r||k.size>0)){k.add(e.id);try{let i;try{let t=(await r([e.adapterId])).find(t=>t.sourceId===e.adapterId);i=t?.status===`completed`?{items:t.items}:{items:[],error:t?.error??`Source collection failed. Check its permissions and retry.`}}catch{i={items:[],error:`Source collection was interrupted. Please retry.`}}await n(t(`/api/user-model/refresh/sources/${encodeURIComponent(e.id)}/collection`),{method:`POST`,body:JSON.stringify(i)}),await j.getState().poll()}catch(e){j.setState({error:e instanceof Error?e.message:String(e)})}finally{k.delete(e.id)}}}export{o as C,s as S,m as _,w as a,l as b,D as c,C as d,_ as f,y as g,E as h,S as i,f as l,x as m,v as n,T as o,g as p,b as r,h as s,j as t,p as u,d as v,c as x,u as y};
|