@xopcai/xopc 0.0.351 → 0.0.353
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/README.md +2 -2
- package/README.zh-CN.md +2 -2
- package/dist/browser-ext/dist/sidepanel.js +1 -1
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Dc0yBlKV.js → agent-avatar-dicebear-BVIuZcCP.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-BXFins6I.js → agent-defaults-settings-panel-CcTnphqy.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-B-w6bJuj.js → agent-plugin-dialog-CdCzMPhC.js} +1 -1
- package/dist/gateway/static/root/assets/agents-BiNKpndr.js +66 -0
- package/dist/gateway/static/root/assets/{agents-admin-api-yUALtmym.js → agents-admin-api-Ck2x78jq.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-C7QjGlMZ.js → app-management-settings-panel-BvGDN5J6.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-CgApGxhN.js → appearance-settings-BhQYkuQj.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-DWii4stP.js → apps-page-BQZJuM-C.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin--oP0UmoE.js → archive-plugin-BZXXJvpX.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-DkV4w6xr.js → automations-page-C7VKkDb5.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-workspace-DT95Uk9d.js → automations-workspace-y4qcvlg8.js} +1 -1
- package/dist/gateway/static/root/assets/{binary-plugins-DIpBiw_8.js → binary-plugins-DoT3g5SP.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-Di4X446B.js → block-editor-sqqrCafh.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automation-inputs-B0TlAcoB.js → browser-automation-inputs-CZOKsAaa.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-pKPvkGW8.js → browser-automations-page-TEeTmkGP.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-settings-page-cJ200PlY.js → browser-settings-page--N4P7V0l.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-e-fO70DK.js → capabilities-BOrLei_L.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-page-CPKbJUDL.js → capabilities-page-F7OAv-iz.js} +2 -2
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-D5xUFWBJ.js → capabilities-settings-panel-CaiIo1S1.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-header-actions-9qDm8ioP.js → capability-header-actions-CR_O9_Vr.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-CO_9_oIH.js → channels-Bb-8c4wl.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-DCFwzHu2.js → chat-terminal-dock-Q99iKyiO.js} +1 -1
- package/dist/gateway/static/root/assets/{computer-settings-page-bwWQ3axN.js → computer-settings-page-QuXZBfky.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-BIIP-gX4.js → connector-service-page-BIqzVqCO.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-page-C0b5Xbca.js → connectors-page-CZ24DSBJ.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-DBio7OE6.js → date-picker-Ck-FmYEL.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-hyPm_1tB.js → dependency-picker-BjH8XrKb.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-BDPfot60.js → desktop-pet-DyGxNAVW.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-C6IRO2iD.js → desktop-pet-settings-C1rKgB-S.js} +1 -1
- package/dist/gateway/static/root/assets/{device-pairing-wizard-CUOh38IK.js → device-pairing-wizard-UrPcOU6Q.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-ljXXfuLL.js → directory-picker-path-field-BYxUgMZb.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DHw1dG1g.js → extension-debug-page-CGL0jpQA.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BjLN3E6q.js → extension-page-DPWf-tYg.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BMp6v6zP.js → extension-settings-page-DZWBY39d.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-CmjHbMj7.js → gateway-config-swr-B31I6Gbq.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-DzyR6LYb.js → gateway-realtime-D6ffOiPe.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-DQuFWNjA.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-settings-D76thCuX.js → gateway-settings-D5w5aYXK.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-CbOUnKv5.js → gateway-startup-retry-DVol958v.js} +1 -1
- package/dist/gateway/static/root/assets/{home-page-D1Tyeuul.js → home-page-DPQwxBGy.js} +1 -1
- package/dist/gateway/static/root/assets/{image-generation-api-BmLpVntI.js → image-generation-api-TVgJfz9r.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-CabovqRQ.js → imports-page-CnRWDtGz.js} +1 -1
- package/dist/gateway/static/root/assets/index-B-w6Rk9Z.css +1 -0
- package/dist/gateway/static/root/assets/{index-Bb32g7Ll.js → index-DU5Eb1V8.js} +20 -20
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DvN-2bcS.js → keyboard-shortcuts-settings-CoYdyBRh.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-CSEzRWxs.js → local-app-workbench-page-hjFeYlIq.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-C3Wy2zG2.js → local-apps-page-CeBhXeoX.js} +1 -1
- package/dist/gateway/static/root/assets/local-session-drafts-wiq_12oN.js +1 -0
- package/dist/gateway/static/root/assets/{locale-store-WMaCMm3_.js → locale-store-Y1aBayM_.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-YojQFX9o.js → logs-page-CzpZDjkA.js} +1 -1
- package/dist/gateway/static/root/assets/{management-settings-CNMk0HRn.js → management-settings-Beu_R_Rc.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-Oe4rXk1N.js → markdown-view-BlzX7Ze5.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-Ds7HF3EM.js → media-plugins-C9ya5rUH.js} +1 -1
- package/dist/gateway/static/root/assets/messages-DPw2X06D.js +3 -0
- package/dist/gateway/static/root/assets/{note-detail-panel-D8vQ_INI.js → note-detail-panel-D8bpTGwP.js} +3 -3
- package/dist/gateway/static/root/assets/{notes-page-CIFcEPAd.js → notes-page-OmgXowUG.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-capture-button-YKiYT0q2.js → page-context-capture-button-BjjjuLkz.js} +1 -1
- package/dist/gateway/static/root/assets/{page-tabs-ZUC486EH.js → page-tabs-_DiuzxyD.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-Ca9tBmOg.js → preview-open-alternatives-BKvUadws.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-BuGb8QPn.js → product-open-page-DUPsiVP9.js} +1 -1
- package/dist/gateway/static/root/assets/{project-detail-page-C6Awj1Ql.js → project-detail-page-CWlCg2x5.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-CmO8Gb9G.js → projects-page-NbVNo0tP.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-DEePN1Rc.js → registry-api-DqDOrPQ0.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-BsqHroXR.js → remote-access-hub-CD8HrqGC.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Cva9t35o.js → runtime-tools-settings-panel-C25xEYTK.js} +1 -1
- package/dist/gateway/static/root/assets/{scenes-page-3_61bQHN.js → scenes-page-DbWaemwR.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DWHFyKEB.js → schema-form-_3LQ4hyB.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-Bv-hCMKS.js → session-api-CTN4qwiN.js} +1 -1
- package/dist/gateway/static/root/assets/{session-manager-BcDptzCN.js → session-manager-DsH1DZI_.js} +5 -5
- package/dist/gateway/static/root/assets/{sessions-page-BaHue2bK.js → sessions-page-B7ZUdXlb.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-CpKzZMft.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-BwdrtX6k.js → settings-form-section-DS80hVSY.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-DqCJHcdG.js +1 -0
- package/dist/gateway/static/root/assets/{setup-status-panel-nMWHz-ra.js → setup-status-panel-De-kC3yJ.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-DH0KHlev.js → share-preview-page-T-0g_rwr.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-KK-VNbMw.js → shares-settings-Dz33T3du.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-api-BbNk-3Ig.js → skill-api-Cx6GGpSY.js} +1 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DyJ-Duem.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-BQya9ygw.js → skills-page-B2iyN-kP.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-akm5mc8b.js → system-settings-panel-By3SZQR_.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-wLGUc7Nu.js → task-detail-page-4yHUTs4_.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-vZ7P_KIQ.js → tunnel-api-BoH0LBkw.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-BV1KJ0EY.js → usage-page-dKU5X9zT.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-DQdLcZfO.js → use-autosave-YKCwQvqT.js} +1 -1
- package/dist/gateway/static/root/assets/{user-model-page-DnLTTyOE.js → user-model-page-Uht32LPP.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-CJ-FjNHr.js → voice-api-key-field-DiqHIA8l.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-DbjjZkIg.js → voice-config-api-BM75K3mR.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-BA1AAqaW.js → work-discovery-overlay-BnfD6w0k.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BhIOKmjW.js → workflow-run-setup-panel-DSy57rBr.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-aYoObmuS.js → workflows-page-Cq3vRUbc.js} +1 -1
- package/dist/gateway/static/root/index.html +15 -15
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/session-input-command.js +2 -1
- package/dist/src/agent/agent-manager.js +25 -11
- package/dist/src/agent/bootstrap/bootstrap-files.d.ts +0 -4
- package/dist/src/agent/bootstrap/bootstrap-files.js +3 -9
- package/dist/src/agent/bootstrap/load-bootstrap-files.js +2 -4
- package/dist/src/agent/context/workspace-seed.d.ts +1 -7
- package/dist/src/agent/context/workspace-seed.js +4 -13
- package/dist/src/agent/context/workspace-templates/AGENTS.md +1 -1
- package/dist/src/agent/context/workspace.d.ts +1 -3
- package/dist/src/agent/context/workspace.js +3 -7
- package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
- package/dist/src/agent/messaging/no-reply.d.ts +1 -0
- package/dist/src/agent/messaging/no-reply.js +4 -0
- package/dist/src/agent/messaging/outbound-coordinator.d.ts +0 -4
- package/dist/src/agent/messaging/outbound-coordinator.js +2 -4
- package/dist/src/agent/prompt/sections/agent-identity.d.ts +3 -0
- package/dist/src/agent/prompt/sections/agent-identity.js +13 -0
- package/dist/src/agent/prompt/sections/messaging-runtime.d.ts +0 -5
- package/dist/src/agent/prompt/sections/messaging-runtime.js +2 -16
- package/dist/src/agent/prompt/sections/project-context.d.ts +0 -3
- package/dist/src/agent/prompt/sections/project-context.js +2 -9
- package/dist/src/agent/prompt/sections/tooling.js +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.d.ts +2 -0
- package/dist/src/agent/prompt/service-prompt-builder.js +3 -8
- package/dist/src/agent/prompt/subagent-context.js +1 -1
- package/dist/src/agent/prompt/system-prompt-params.d.ts +0 -4
- package/dist/src/agent/prompt/system-prompt-params.js +0 -2
- package/dist/src/agent/prompt/system-prompt.d.ts +2 -2
- package/dist/src/agent/prompt/system-prompt.js +8 -9
- package/dist/src/agent/service.js +0 -1
- package/dist/src/agent/skills/hub-lock.js +1 -1
- package/dist/src/agent/skills/index.js +1 -1
- package/dist/src/agent/skills/managed-store.js +1 -1
- package/dist/src/agent/skills/skill-manage-ops.js +1 -1
- package/dist/src/agent/starter-agents.d.ts +3 -4
- package/dist/src/agent/starter-agents.js +104 -90
- package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
- package/dist/src/agent/tool-manuals/xopc-use.js +7 -4
- package/dist/src/agent/tools/factory.d.ts +4 -2
- package/dist/src/agent/tools/factory.js +6 -3
- package/dist/src/agent/workflow/workflow-child-tools.js +2 -1
- package/dist/src/agent-catalog/migrations/identity-markdown-cutover.d.ts +5 -0
- package/dist/src/agent-catalog/migrations/identity-markdown-cutover.js +94 -0
- package/dist/src/agent-catalog/repository.js +7 -1
- package/dist/src/agent-catalog/service.js +2 -2
- package/dist/src/agent-config/resolver.js +2 -0
- package/dist/src/agent-config/schema.d.ts +21 -0
- package/dist/src/agent-config/schema.js +9 -4
- package/dist/src/auth/credentials.js +1 -1
- package/dist/src/auth/profiles/store.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/automations/events/event-repository.js +2 -1
- package/dist/src/bootstrap/application-state.js +2 -0
- package/dist/src/browser/providers/browser-ext-install.js +1 -1
- package/dist/src/chat-commands/agent-edit.js +4 -7
- package/dist/src/chat-commands/builtins/config.js +1 -1
- package/dist/src/cli/commands/auth.js +1 -1
- package/dist/src/cli/commands/doctor/checks/workspace-status.js +0 -1
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/init.js +0 -33
- package/dist/src/cli/commands/onboard/model.js +2 -2
- package/dist/src/cli/commands/providers.js +1 -1
- package/dist/src/cli/templates.d.ts +1 -1
- package/dist/src/cli/templates.js +1 -23
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/paths.d.ts +0 -2
- package/dist/src/config/paths.js +1 -3
- package/dist/src/config/reload.d.ts +0 -1
- package/dist/src/config/reload.js +0 -4
- package/dist/src/config/rules.js +0 -5
- package/dist/src/config/schema.d.ts +0 -45
- package/dist/src/config/schema.js +2 -23
- package/dist/src/connectors/connection-recovery-service.js +5 -0
- package/dist/src/extensions/lockfile.js +1 -1
- package/dist/src/gateway/agents-admin.d.ts +2 -9
- package/dist/src/gateway/agents-admin.js +8 -32
- package/dist/src/gateway/file-path-classifier.js +1 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/routes/agents.js +8 -1
- package/dist/src/gateway/hono/routes/connectors.js +1 -1
- package/dist/src/gateway/hono/routes/device-push.js +1 -1
- package/dist/src/gateway/hono/routes/models.js +1 -1
- package/dist/src/gateway/host.d.ts +0 -2
- package/dist/src/gateway/host.js +2 -5
- package/dist/src/gateway/service.js +11 -11
- package/dist/src/home-intelligence/host.js +2 -2
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/notifications/device-store.d.ts +0 -1
- package/dist/src/notifications/device-store.js +2 -7
- package/dist/src/notifications/service.d.ts +0 -1
- package/dist/src/notifications/service.js +13 -82
- package/dist/src/session/execution-detail.js +16 -0
- package/dist/src/storage/sqlite/notes-repository.js +19 -4
- package/dist/src/tui/backends/embedded-backend.js +1 -1
- package/dist/src/tui/tui-commands.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/voice/audio/normalize.js +34 -1
- package/dist/src/voice/realtime/persona-context.d.ts +2 -2
- package/dist/src/voice/realtime/persona-context.js +19 -33
- package/package.json +11 -12
- package/dist/gateway/static/root/assets/agents-CuFzMN58.js +0 -70
- package/dist/gateway/static/root/assets/gateway-realtime-store-KyhksZSM.js +0 -1
- package/dist/gateway/static/root/assets/index-CPi50n0l.css +0 -1
- package/dist/gateway/static/root/assets/local-session-drafts-CxXjQ5Du.js +0 -1
- package/dist/gateway/static/root/assets/messages-sXePe3LQ.js +0 -3
- package/dist/gateway/static/root/assets/settings-advanced-gate-C4y4c2M7.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-B6YZFEye.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DUOG2Ig1.js +0 -1
- package/dist/src/agent/bootstrap/filter-bootstrap-files.d.ts +0 -3
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +0 -18
- package/dist/src/agent/context/workspace-templates/HEARTBEAT.md +0 -26
- package/dist/src/agent/context/workspace-templates/IDENTITY.md +0 -30
- package/dist/src/agent/service/parse-outbound-session-key.d.ts +0 -8
- package/dist/src/agent/service/parse-outbound-session-key.js +0 -44
- package/dist/src/heartbeat/active-hours.d.ts +0 -11
- package/dist/src/heartbeat/active-hours.js +0 -40
- package/dist/src/heartbeat/content-check.d.ts +0 -4
- package/dist/src/heartbeat/content-check.js +0 -17
- package/dist/src/heartbeat/event-prompt.d.ts +0 -4
- package/dist/src/heartbeat/event-prompt.js +0 -11
- package/dist/src/heartbeat/index.d.ts +0 -5
- package/dist/src/heartbeat/index.js +0 -6
- package/dist/src/heartbeat/tokens.d.ts +0 -15
- package/dist/src/heartbeat/tokens.js +0 -25
- package/dist/src/heartbeat/wake.d.ts +0 -13
- package/dist/src/heartbeat/wake.js +0 -46
|
@@ -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{f as i,g as a,m as o,t as s}from"./chunk-KS7C4IRE-BMYIfy9x.js";import{n as c,r as l}from"./popover-select-0p9PIHRy.js";import{t as u}from"./circle-check-C23XjkUj.js";import{t as d}from"./ellipsis-0k4rZLoy.js";import{t as f}from"./external-link-DjqjBmc3.js";import{f as p,m,t as h}from"./markdown-view-Oe4rXk1N.js";import{t as g}from"./folder-open-CyzJ19I9.js";import{t as _}from"./x-B_N4OPjy.js";import{t as v}from"./cn-JdwAhgNB.js";import{a as y,c as ee,n as te,r as b}from"./locale-store-WMaCMm3_.js";import{i as ne,n as x,o as re,r as ie,s as ae,t as S}from"./dist-BGTk37IG.js";import{u as oe}from"./tasks-BH8_WMUF.js";import{i as C}from"./vendor-swr-BIWyz7Rc.js";import{t as w}from"./button-CS04eWY9.js";import{t as T}from"./skeleton-BwbyijEw.js";import{$t as se,Bn as ce,Bs as le,Gs as ue,Gu as de,Hi as fe,Hn as pe,Jo as E,L as me,Ls as D,Mu as O,Nu as k,Pa as he,Ps as ge,Qs as A,Rs as j,So as M,Ta as N,Ui as P,Un as F,Vn as I,Wn as L,Xs as R,Zi as z,bl as _e,ec as ve,ic as ye,n as be,na as xe,nc as Se,nl as Ce,od as we,ou as Te,pi as Ee,qa as De,rc as Oe,sl as ke,uu as Ae,yr as je,zn as Me}from"./index-Bb32g7Ll.js";import{t as Ne}from"./page-context-capture-button-YKiYT0q2.js";import{t as Pe}from"./date-picker-DBio7OE6.js";import{t as B}from"./dependency-picker-hyPm_1tB.js";var V=n(),H=e(t(),1),U=r();function Fe({wait:e,detail:t,zh:n,onUpdated:r}){let[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(!1),f=(0,H.useRef)(null),p=e.kind===`approval`,m=Array.isArray(e.condition.choices)?e.condition.choices.filter(e=>typeof e==`string`):[];async function h(a){if(!p&&!i.trim()||p&&!a||o)return;let c=JSON.stringify([t.task.version,i.trim(),a]);f.current?.signature!==c&&(f.current={signature:c,key:crypto.randomUUID()}),s(!0),l(``);try{let o=await j(t.task.id,{type:`resolve_wait`,waitId:e.id,resolution:p?{kind:`task_approval`,decision:a}:{kind:`user_answer`,answer:i.trim()}},t.task.version,f.current.key);d(!0),r(o),E({tone:`success`,title:p?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,U.jsxs)(`form`,{className:`mt-3 space-y-3 rounded-lg border border-edge p-3`,onSubmit:e=>{e.preventDefault(),h()},children:[p?(0,U.jsxs)(`div`,{className:`text-sm text-fg`,children:[(0,U.jsx)(`p`,{children:e.reason}),(0,U.jsxs)(`p`,{className:`mt-2`,children:[n?`授权范围:`:`Permission: `,String(e.condition.capability)]}),(0,U.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,U.jsx)(w,{type:`button`,variant:`primary`,disabled:o||u,onClick:()=>void h(`approve`),children:n?`批准`:`Approve`}),(0,U.jsx)(w,{type:`button`,disabled:o||u,onClick:()=>void h(`deny`),children:n?`拒绝并暂停`:`Deny and pause`})]})]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`label`,{className:`block text-sm text-fg`,children:[typeof e.condition.question==`string`?e.condition.question:e.reason,(0,U.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)})]}),m.length>0&&(0,U.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:m.map(e=>(0,U.jsx)(w,{type:`button`,disabled:o||u,variant:`secondary`,"aria-pressed":i===e,onClick:()=>a(e),children:e},e))}),(0,U.jsx)(w,{type:`submit`,variant:`primary`,disabled:o||u||!i.trim(),children:o?n?`正在提交`:`Submitting`:n?`提交补充信息`:`Submit answer`})]}),(0,U.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n?`保存到任务上下文;其他等待条件满足后继续执行。`:`Saved to task context. Work continues once all waiting conditions are met.`}),c&&(0,U.jsx)(`p`,{role:`alert`,className:`text-sm text-danger`,children:c})]})}function Ie(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 Le({uri:e,zh:t}){let[n,r]=(0,H.useState)(),[i,a]=(0,H.useState)(!1),[o,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(``),[d,f]=(0,H.useState)(``);async function p(){a(!0),u(``);try{let n=Ie(e,(await xe()).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||(f(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{a(!1)}}async function m(){if(!(!n||i)){a(!0),u(``);try{let e=await z(n.id,864e5);f(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{a(!1)}}}return(0,U.jsxs)(`details`,{className:`mt-2 text-xs text-fg-muted`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer py-2`,children:t?`链接打不开?`:`Trouble opening the link?`}),(0,U.jsxs)(`div`,{className:`space-y-2`,children:[(0,U.jsx)(w,{type:`button`,variant:`ghost`,disabled:i,onClick:()=>void p(),children:t?`检查链接状态`:`Check link`}),o&&n?.expired&&(n.kind===`file`||n.kind===`directory`)&&!n.revoked&&(n.maxViews===null||n.downloadCount<n.maxViews)&&(0,U.jsx)(w,{type:`button`,disabled:i,onClick:()=>void m(),children:t?`恢复链接 · 续期 24 小时`:`Restore link for 24 hours`}),l&&(0,U.jsx)(`p`,{role:`status`,className:`break-words leading-5`,children:l}),d&&(0,U.jsx)(`a`,{className:`block py-2 text-accent`,href:d,target:`_blank`,rel:`noopener noreferrer`,children:t?`打开产物`:`Open artifact`}),o&&(0,U.jsx)(s,{className:`block py-2 text-accent`,to:`/settings/shares`,children:t?`管理分享记录`:`Manage shares`})]})]})}function Re(e){let t=(0,V.c)(14),{evidence:n,projectId:r,conversationId:i,language:a}=e,o=fe(ze);if(!n.length)return null;let s=a===`zh`?`交付物与验证依据`:`Deliverables and evidence`,c;if(t[0]!==i||t[1]!==n||t[2]!==a||t[3]!==r||t[4]!==o){let e;t[6]!==i||t[7]!==a||t[8]!==r||t[9]!==o?(e=(e,t)=>{let n=e.uri?.trim(),s=n&&/^https?:\/\//i.test(n),c=n&&!s&&e.kind===`artifact`&&!/^[a-z][a-z0-9+.-]*:/i.test(n)&&!n.startsWith(`//`),l=e.title||(a===`zh`?`查看产物`:`Open artifact`);return(0,U.jsxs)(`div`,{className:`min-w-0 rounded-lg border border-edge-subtle p-3`,children:[s?(0,U.jsxs)(`a`,{className:`inline-flex min-h-11 items-center gap-2 text-sm font-medium text-accent hover:underline`,href:n,target:`_blank`,rel:`noopener noreferrer`,children:[(0,U.jsx)(f,{className:`size-4 shrink-0`}),l]}):c&&(r||i)?(0,U.jsxs)(`button`,{type:`button`,className:`inline-flex min-h-11 items-center gap-2 text-sm font-medium text-accent hover:underline`,onClick:()=>o(n,null,r,i),children:[(0,U.jsx)(Ae,{className:`size-4 shrink-0`}),l]}):(0,U.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:l}),s&&e.kind===`artifact`&&(0,U.jsx)(Le,{uri:n,zh:a===`zh`},n),e.summary?(0,U.jsx)(`p`,{className:`mt-1 break-words text-xs leading-5 text-fg-muted`,children:e.summary}):null,(0,U.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:e.strength===`verified`?a===`zh`?`已验证`:`Verified`:a===`zh`?`已记录,待验证`:`Observed, not verified`})]},`${e.title}-${t}`)},t[6]=i,t[7]=a,t[8]=r,t[9]=o,t[10]=e):e=t[10],c=n.map(e),t[0]=i,t[1]=n,t[2]=a,t[3]=r,t[4]=o,t[5]=c}else c=t[5];let l;return t[11]!==s||t[12]!==c?(l=(0,U.jsx)(`div`,{className:`mt-4 grid gap-2 sm:grid-cols-2`,"aria-label":s,children:c}),t[11]=s,t[12]=c,t[13]=l):l=t[13],l}function ze(e){return e.setPath}function Be({taskId:e}){let t=ee(e=>e.conversationId),n=te(e=>e.language),[r,i]=(0,H.useState)(``),[a,o]=(0,H.useState)(null),[s,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)([]),[p,m]=(0,H.useState)(null),g=b(`/api/tasks/${encodeURIComponent(e)}/collaboration`),{data:_,error:v,mutate:ne}=C([`task-collaboration`,e,t],()=>y(`${g}?recent=1`),{revalidateOnFocus:!0}),x=[...new Map([...d,..._?.items??[]].map(e=>[e.id,e])).values()].sort((e,t)=>e.sequence-t.sequence),re=async()=>{let e=x[0];if(!(!e||l)){u(!0);try{let t=await y(`${g}?recent=1&beforeSequence=${e.sequence}`);f(e=>[...t.items,...e])}catch(e){m(e instanceof Error?e.message:String(e))}finally{u(!1)}}};(0,H.useEffect)(()=>{let t=t=>{let n=t.detail;(!n?.taskId||n.taskId===e)&&ne()};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)}},[ne,e]);let ie=async()=>{if(!(!r.trim()||s)){c(!0),m(null);try{await y(g,{method:`POST`,headers:{"idempotency-key":crypto.randomUUID()},body:JSON.stringify({kind:a?`answer`:`instruction`,body:r.trim(),...a?{causationId:a}:{}})}),i(``),o(null),await ne()}catch(e){m(e instanceof Error?e.message:String(e))}finally{c(!1)}}};return(0,U.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:n===`zh`?`任务留言`:`Task updates`}),(0,U.jsxs)(`div`,{className:`mt-3 max-h-64 space-y-2 overflow-y-auto`,children:[!_&&!v?(0,U.jsxs)(`div`,{"aria-busy":`true`,className:`space-y-2`,children:[(0,U.jsx)(T,{className:`h-14 w-full`}),(0,U.jsx)(T,{className:`h-14 w-4/5`})]}):null,v?(0,U.jsx)(`p`,{role:`status`,className:`text-xs text-fg-muted`,children:n===`zh`?`暂时无法读取留言`:`Updates unavailable`}):null,x[0]&&x[0].sequence>1?(0,U.jsx)(`button`,{type:`button`,disabled:l,onClick:()=>void re(),className:`text-xs text-accent hover:underline disabled:opacity-50`,children:n===`zh`?`查看更早留言`:`Earlier updates`}):null,x.map(e=>(0,U.jsxs)(`div`,{className:`rounded-lg bg-surface-base px-3 py-2 text-sm`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-fg-subtle`,children:[(0,U.jsx)(`span`,{children:e.authorKind===`worker_agent`?n===`zh`?`执行 Agent`:`Worker`:e.authorKind===`main_agent`?n===`zh`?`主 Agent`:`Main Agent`:e.authorKind===`system`?n===`zh`?`系统`:`System`:n===`zh`?`用户`:`You`}),(0,U.jsxs)(`span`,{children:[`· `,e.kind]}),e.deliveryStatus?(0,U.jsxs)(`span`,{children:[`· `,e.deliveryStatus]}):null]}),(0,U.jsx)(`div`,{className:`mt-1 min-w-0 text-fg`,"data-task-collaboration-body":!0,children:(0,U.jsx)(h,{content:e.body,compact:!0,breaks:!0})}),e.kind===`question`&&e.authorKind===`worker_agent`?(0,U.jsx)(`button`,{type:`button`,className:`mt-2 text-xs text-accent hover:underline`,onClick:()=>o(e.id),children:n===`zh`?`回复问题`:`Reply`}):null]},e.id)),_&&!x.length?(0,U.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n===`zh`?`暂无进展留言`:`No updates yet`}):null]}),a?(0,U.jsxs)(`p`,{className:`mt-3 text-xs text-accent`,children:[n===`zh`?`正在回复执行 Agent 的问题`:`Replying to the worker`,(0,U.jsx)(`button`,{type:`button`,className:`ml-2 underline`,onClick:()=>o(null),children:n===`zh`?`取消`:`Cancel`})]}):null,(0,U.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`}),p?(0,U.jsx)(`p`,{role:`alert`,className:`mt-1 text-xs text-danger`,children:p}):null,(0,U.jsx)(`button`,{type:`button`,disabled:!r.trim()||s,onClick:()=>void ie(),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 Ve(e,t,n,r){return!!(e&&t!==e.version&&n!==e.value&&r!==n)}function He(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 W(e,t){return(t===`zh`?{backlog:`待规划`,ready:`就绪`,active:`进行中`,review:`待验收`,closed:`已完成`}:{backlog:`Backlog`,ready:`Ready`,active:`Active`,review:`Review`,closed:`Completed`})[e]}function Ue(){let e=(0,V.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,U.jsxs)(`div`,{className:`space-y-4`,"aria-busy":!0,children:[(0,U.jsx)(T,{className:`h-32 rounded-2xl`}),(0,U.jsx)(T,{className:`h-52 rounded-2xl`}),(0,U.jsx)(T,{className:`h-40 rounded-2xl`})]}),e[0]=t):t=e[0],t}function We(e){if(e===void 0)return``;let t=new Date(e);return new Date(t.getTime()-t.getTimezoneOffset()*6e4).toISOString().slice(0,10)}function Ge(e){return e?new Date(`${e}T23:59:59.999`).getTime():null}var Ke=[`backlog`,`ready`,`active`,`review`,`closed`],qe=[`low`,`normal`,`high`,`critical`],Je=(0,H.memo)(function(e){let t=(0,V.c)(20),{value:n,disabled:r,canMove:i,canApprove:a,canReopen:o,language:s,label:u,onChange:d}=e,f;t[0]!==a||t[1]!==i||t[2]!==o||t[3]!==n?(f=e=>e!==n&&(e===`closed`?!a:n===`closed`?!o:!i),t[0]=a,t[1]=i,t[2]=o,t[3]=n,t[4]=f):f=t[4];let p=f,m;t[5]===u?m=t[6]:(m=(0,U.jsx)(`span`,{children:u}),t[5]=u,t[6]=m);let h;t[7]===d?h=t[8]:(h=e=>d(e.target.value),t[7]=d,t[8]=h);let g;t[9]!==s||t[10]!==p?(g=Ke.map(e=>(0,U.jsx)(l,{value:e,disabled:p(e),children:W(e,s)},e)),t[9]=s,t[10]=p,t[11]=g):g=t[11];let _;t[12]!==r||t[13]!==h||t[14]!==g||t[15]!==n?(_=(0,U.jsx)(c,{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:h,children:g}),t[12]=r,t[13]=h,t[14]=g,t[15]=n,t[16]=_):_=t[16];let v;return t[17]!==m||t[18]!==_?(v=(0,U.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[m,_]}),t[17]=m,t[18]=_,t[19]=v):v=t[19],v}),Ye=(0,H.memo)(function(e){let t=(0,V.c)(14),{value:n,disabled:r,label:i,labels:a,onChange:o}=e,s;t[0]===i?s=t[1]:(s=(0,U.jsx)(`span`,{children:i}),t[0]=i,t[1]=s);let u;t[2]===o?u=t[3]:(u=e=>o(e.target.value),t[2]=o,t[3]=u);let d;t[4]===a?d=t[5]:(d=qe.map(e=>(0,U.jsx)(l,{value:e,children:a[e]},e)),t[4]=a,t[5]=d);let f;t[6]!==r||t[7]!==u||t[8]!==d||t[9]!==n?(f=(0,U.jsx)(c,{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:u,children:d}),t[6]=r,t[7]=u,t[8]=d,t[9]=n,t[10]=f):f=t[10];let p;return t[11]!==s||t[12]!==f?(p=(0,U.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[s,f]}),t[11]=s,t[12]=f,t[13]=p):p=t[13],p}),Xe=(0,H.memo)(function(e){let t=(0,V.c)(10),{value:n,disabled:r,label:i,onChange:a}=e,o;t[0]===i?o=t[1]:(o=(0,U.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,U.jsx)(Pe,{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,U.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}),Ze=(0,H.memo)(function(e){let t=(0,V.c)(17),{value:n,disabled:r,label:i,unassignedLabel:a,agents:o,onChange:s}=e,u;t[0]===i?u=t[1]:(u=(0,U.jsx)(`span`,{children:i}),t[0]=i,t[1]=u);let d;t[2]===s?d=t[3]:(d=e=>s(e.target.value),t[2]=s,t[3]=d);let f;t[4]===a?f=t[5]:(f=(0,U.jsx)(l,{value:``,disabled:!0,children:a}),t[4]=a,t[5]=f);let p;t[6]===o?p=t[7]:(p=o.map(vt),t[6]=o,t[7]=p);let m;t[8]!==r||t[9]!==d||t[10]!==f||t[11]!==p||t[12]!==n?(m=(0,U.jsxs)(c,{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:d,children:[f,p]}),t[8]=r,t[9]=d,t[10]=f,t[11]=p,t[12]=n,t[13]=m):m=t[13];let h;return t[14]!==u||t[15]!==m?(h=(0,U.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[u,m]}),t[14]=u,t[15]=m,t[16]=h):h=t[16],h}),Qe=(0,H.memo)(function(e){let t=(0,V.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(yt),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,U.jsx)(B,{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)),$e=`xopc.taskDetail.chatPanelPercent`,et=42;function tt(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?et:Math.min(r,Math.max(n,e))}function nt(){try{let e=Number(window.localStorage.getItem($e));return Number.isFinite(e)&&e>=30&&e<=60?e:et}catch{return et}}function rt(e){return e.task.phase===`closed`?e.task.resolution===`done`?`completed`:`ended`:e.waits.some(e=>e.kind===`paused`)?`paused`:e.attention.some(e=>e.kind===`input_required`||e.kind===`approval_required`)?`needsUser`:e.operationalState===`idle`?e.task.phase===`backlog`?`captured`:e.task.phase===`ready`?`ready`:e.task.phase===`review`?`review`:`ready`:e.operationalState}function it(e){return e===`needsUser`||e===`blocked`?`bg-warning/10 text-warning`:e===`completed`?`bg-success-soft text-success`:e===`running`||e===`verifying`||e===`review`?`bg-accent-soft text-accent-fg`:`bg-surface-hover text-fg-muted`}function at(e){let t=(0,V.c)(9),{items:n,empty:r,verificationByCriterion:i}=e;if(n.length===0){let e;return t[0]===r?e=t[1]:(e=(0,U.jsx)(`p`,{className:`text-sm leading-6 text-fg-muted`,children:r}),t[0]=r,t[1]=e),e}let a;if(t[2]!==n||t[3]!==i){let e;t[5]===i?e=t[6]:(e=e=>{let t=i?.get(e)??`unverified`;return(0,U.jsxs)(`li`,{className:`flex gap-2 text-sm leading-6 text-fg`,children:[(0,U.jsx)(t===`passed`?u:t===`failed`?k:O,{className:t===`passed`?`mt-1 size-4 shrink-0 text-success`:t===`failed`?`mt-1 size-4 shrink-0 text-danger`:`mt-1 size-4 shrink-0 text-fg-subtle`}),(0,U.jsx)(`span`,{children:e})]},e)},t[5]=i,t[6]=e),a=n.map(e),t[2]=n,t[3]=i,t[4]=a}else a=t[4];let o;return t[7]===a?o=t[8]:(o=(0,U.jsx)(`ul`,{className:`space-y-2`,children:a}),t[7]=a,t[8]=o),o}function ot({taskId:e,presentation:t,backgroundPath:n,onDeleted:r}){let[o]=a(),c=i(),l=te(e=>e.language),_=ee(e=>e.conversationId),y=(0,H.useMemo)(()=>ye(l),[l]),b=M(e=>e.setPageHeader),ne=M(e=>e.clearPageHeader),x=P(e=>e.open),re=P(e=>e.conversationIdOverride),ie=P(e=>e.openForSession),ae=je(e=>e.setOpen),{data:S,error:C,mutate:T,lastChange:se,conversationLoading:fe,conversationError:E}=ge(e),[O,k]=(0,H.useState)(null),[z,xe]=(0,H.useState)(()=>new Set),[Ae,Pe]=(0,H.useState)([]),[B,V]=(0,H.useState)(null),[Ie,Le]=(0,H.useState)([]),[ze,W]=(0,H.useState)(!1),[Ke,qe]=(0,H.useState)(``),[ot,G]=(0,H.useState)(!1),[st,ct]=(0,H.useState)(``),[lt,ut]=(0,H.useState)(nt),[dt,ft]=(0,H.useState)(!1),pt=(0,H.useRef)(null),mt=(0,H.useRef)(!1),ht=(0,H.useRef)(!1),gt=(0,H.useRef)(``),_t=(0,H.useRef)(null),vt=(0,H.useRef)(null),yt=(0,H.useRef)(null),bt=(0,H.useRef)(S),[xt,K]=(0,H.useState)(null),[St,Ct]=(0,H.useState)(null),[wt,Tt]=(0,H.useState)(!1),Et=(0,H.useMemo)(()=>({link:y.linkDependencies,linked:y.linkedDependencies,searchPlaceholder:y.dependencySearchPlaceholder,noMatches:y.noDependencyMatches,noCandidates:y.noDependencyCandidates,remove:y.removeDependency}),[y.dependencySearchPlaceholder,y.linkDependencies,y.linkedDependencies,y.noDependencyCandidates,y.noDependencyMatches,y.removeDependency]),Dt=S?.dependencies.map(e=>`${e.id}:${e.title}`).join(`\0`)??``,Ot=(0,H.useMemo)(()=>p(o.get(`returnTo`),`/`,[`/projects`,`/chat`,`/notes`,`/tasks`]),[o]),kt=(0,H.useCallback)(e=>t===`modal`&&n?Oe(n,e):m(`/tasks/${encodeURIComponent(e)}`,Ot),[n,t,Ot]);bt.current=S;let q=(0,H.useCallback)((e,t)=>{xe(n=>{let r=new Set(n);return t?r.add(e):r.delete(e),r})},[]);(0,H.useEffect)(()=>{k(null),K(null),W(!1),G(!1),Ct(null),Tt(!1)},[e]),(0,H.useEffect)(()=>{let e=!0;return he().then(t=>{e&&Le(t.items)}).catch(()=>void 0),()=>{e=!1}},[_]),(0,H.useEffect)(()=>{if(!se||se.source===`user`)return;Ct(se);let e=window.setTimeout(()=>Ct(null),3500);return()=>window.clearTimeout(e)},[se]),(0,H.useEffect)(()=>{let t=S?.task.projectId,n=S?.dependencies??[];if(!t){yt.current=null,V(null),Pe(n);return}yt.current!==t&&(yt.current=t,V(null));let r=!0;return De(t).then(t=>{if(!r)return;V(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});Pe([...i.values()])}).catch(()=>{r&&Pe(n)}),()=>{r=!1}},[Dt,S?.task.projectId,e]);let J=(0,H.useCallback)(async(t,n=`command`)=>{let r=bt.current;if(r){q(n,!0),k(null);try{await T(await j(e,t,r.task.version),{revalidate:!1})}catch{k(y.actionFailed)}finally{q(n,!1)}}},[y.actionFailed,T,q,e]),Y=(0,H.useCallback)(async(t,n)=>{let r=bt.current;if(!r)return!1;n&&q(n,!0),k(null);try{return await T(A(e,t,r.task.version),{optimisticData:He(r,t),populateCache:!0,revalidate:!1,rollbackOnError:!0}),!0}catch{return k(y.actionFailed),!1}finally{n&&q(n,!1)}},[y.actionFailed,T,q,e]),At=async()=>{if(!S)return;if(mt.current){mt.current=!1;return}let e=Ke.trim(),t=_t.current;if(Ve(t,S.task.version,S.task.title,e)){K(`title`);return}if(!e||e===S.task.title){qe(S.task.title),W(!1);return}await Y({title:e})&&(K(null),W(!1))},jt=async()=>{if(!S)return;if(ht.current){ht.current=!1;return}let e=st.trim(),t=vt.current;if(Ve(t,S.task.version,S.task.body??``,e)){K(`description`);return}if(st===gt.current||e===(S.task.body??``).trim()){G(!1);return}await Y({body:e||null})&&(K(null),G(!1))},Mt=(0,H.useCallback)(async e=>{let t=bt.current;if(!(!t||e===t.task.phase)){if(t.task.phase===`closed`){await J({type:`reopen`,phase:e===`closed`?`ready`:e},`phase`);return}if(e===`closed`){await J({type:`close`,resolution:`done`},`phase`);return}await J({type:`move`,phase:e},`phase`)}},[J]),Nt=(0,H.useCallback)(e=>{Y({priority:e},`priority`)},[Y]),Pt=(0,H.useCallback)(e=>{Y({dueAt:Ge(e)},`dueAt`)},[Y]),Ft=(0,H.useCallback)(e=>{ut(e);try{window.localStorage.setItem($e,String(e))}catch{}},[]),It=(0,H.useCallback)(e=>{if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`&&e.key!==`Home`)return;e.preventDefault();let t=pt.current?.clientWidth??0;Ft(tt(e.key===`Home`?et:lt+(e.key===`ArrowLeft`?2:-2),t))},[lt,Ft]),Lt=(0,H.useCallback)(e=>{if(!window.matchMedia(`(min-width: 1024px)`).matches)return;let t=pt.current;if(!t)return;e.preventDefault();let n=e.currentTarget,r=e.pointerId;n.setPointerCapture(r),ft(!0);let i=lt,a=0,o=()=>{a=0,t.style.setProperty(`--task-chat-panel-width`,`${i}%`)},s=e=>{let n=t.getBoundingClientRect();i=tt((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{}ft(!1),Ft(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)},[lt,Ft]),Rt=(0,H.useCallback)(async t=>{let n=bt.current;if(n){q(`dependencies`,!0),k(null);try{await T(await ve(e,t,n.task.version),{revalidate:!1})}catch{k(y.dependencyUpdateFailed)}finally{q(`dependencies`,!1)}}},[y.dependencyUpdateFailed,T,q,e]),zt=(0,H.useCallback)(async t=>{let n=bt.current;if(!(!n||!t||t===n.conversation.currentExecutorAgentId)){q(`delegateAgentId`,!0),k(null);try{await T(await ue(e,t,n.task.version),{revalidate:!1})}catch{k(y.actionFailed)}finally{q(`delegateAgentId`,!1)}}},[y.actionFailed,T,q,e]),Bt=(0,H.useCallback)(async()=>{q(`delete`,!0),k(null);try{await le(e),r?r():c(Ot,{replace:!0})}catch(e){k(e instanceof Error?e.message:y.actionFailed)}finally{q(`delete`,!1)}},[y.actionFailed,c,r,Ot,q,e]);if((0,H.useLayoutEffect)(()=>{if(t!==`modal`)return b({startExtra:(0,U.jsx)(s,{to:Ot,className:`flex size-9 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover`,"aria-label":y.backToWork,children:(0,U.jsx)(we,{className:`size-4`})}),main:S?(0,U.jsx)(`p`,{className:`truncate text-sm font-semibold text-fg`,children:B?`${B} / ${y.taskLabel}`:y.taskLabel}):null,end:null}),ne},[ne,y.backToWork,y.taskLabel,S,t,B,Ot,b]),C&&!S)return(0,U.jsx)(`div`,{className:t===`modal`?`p-5 text-sm text-danger`:`mx-auto max-w-3xl p-6 text-sm text-danger`,children:y.taskNotFound});if(!S)return(0,U.jsx)(`div`,{className:t===`modal`?`p-5`:`mx-auto max-w-4xl p-4 sm:p-6`,children:(0,U.jsx)(Ue,{})});let Vt=S.waits[0],Ht=S.waits.find(e=>e.kind===`paused`),X=S.receipts[0],Ut=rt(S),Wt=y.detailStatuses[Ut],Gt=S.task.body?.trim()||S.task.contract?.objective.trim(),Kt=S.runs.find(e=>e.id===X?.runId)?.contractVersion===S.task.latestContractVersion?X:void 0,qt=oe(Kt),Jt=new Map(Kt?.verification.checks.map(e=>[e.criterion,e.status===`passed`&&!qt.has(e.criterion)?`unverified`:e.status])),Yt=S.allowedCommands.includes(`mark_ready`),Xt=S.allowedCommands.includes(`start`),Zt=S.allowedCommands.includes(`add_wait`),Qt=!Vt&&S.task.phase===`review`&&S.allowedCommands.includes(`close`),$t=S.allowedCommands.includes(`reopen`),Z=S.conversation.activeConversationId,en=S.conversation.currentExecutorAgentId??S.task.delegateAgentId??S.task.ownerId,tn=Ie.find(e=>e.id===en),nn=!!(Z&&x&&re===Z),rn=S.attention.some(e=>e.kind===`input_required`||e.kind===`approval_required`),an=S.task.contract?.acceptanceCriteria??[],on=an.filter(e=>Jt.get(e)===`passed`).length,sn=S.task.contract?.expectedOutputs??[],cn=S.task.contract?.constraints??[],ln=S.task.contract?.approvalRequired??[],un=S.task.contract?.assumptions??[],dn=S.task.contract?.risks??[],Q=(...e)=>!!St?.changedFields.some(t=>e.includes(t)),fn=S.allowedCommands.includes(`move`),$=z.has(`command`),pn=z.has(`delete`),mn=S.runs.find(e=>!e.parentRunId&&[`queued`,`running`,`waiting`,`verifying`].includes(e.status)),hn=mn!==void 0,gn=`/automations?action=create&taskId=${encodeURIComponent(S.task.id)}${S.task.projectId?`&projectId=${encodeURIComponent(S.task.projectId)}`:``}`,_n=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[Yt?(0,U.jsxs)(w,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:$,onClick:()=>void J({type:`mark_ready`}),children:[(0,U.jsx)(Ce,{className:`size-4`}),y.scheduleTask]}):null,Ht&&S.allowedCommands.includes(`resolve_wait`)?(0,U.jsxs)(w,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:$,onClick:()=>void J({type:`resolve_wait`,waitId:Ht.id}),children:[(0,U.jsx)(Ce,{className:`size-4`}),y.resumeTask]}):null,!Vt&&Xt&&en?(0,U.jsxs)(w,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:$,onClick:()=>void J({type:`start`,executor:{kind:`agent`,agentId:en}}),children:[(0,U.jsx)(Ce,{className:`size-4`}),y.runTask]}):null,Qt?(0,U.jsxs)(w,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:$,onClick:()=>void J({type:`close`,resolution:`done`}),children:[(0,U.jsx)(u,{className:`size-4`}),y.approveTask]}):null,$t?(0,U.jsxs)(w,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:$,onClick:()=>void J({type:`reopen`,phase:`ready`}),children:[(0,U.jsx)(Ce,{className:`size-4`}),y.reopenTask]}):null,!Ht&&Zt?(0,U.jsxs)(w,{variant:`ghost`,className:`min-h-9 px-3 py-1.5 text-xs`,disabled:$,onClick:()=>void J({type:`add_wait`,wait:{kind:`paused`,reason:`Paused by user`,condition:{}}}),children:[(0,U.jsx)(ke,{className:`size-4`}),y.pauseTask]}):null,S.task.phase===`closed`?null:(0,U.jsx)(w,{asChild:!0,variant:`ghost`,className:`min-h-9 px-3 py-1.5 text-xs`,children:(0,U.jsxs)(s,{to:gn,children:[(0,U.jsx)(de,{className:`size-4`}),y.scheduleRecurringTask]})}),(0,U.jsxs)(pe,{children:[(0,U.jsx)(L,{asChild:!0,children:(0,U.jsx)(w,{type:`button`,variant:`ghost`,className:`size-9 p-0`,disabled:$||pn,"aria-label":y.moreActions,children:(0,U.jsx)(d,{className:`size-4`,"aria-hidden":!0})})}),(0,U.jsx)(I,{children:(0,U.jsxs)(Me,{align:`end`,sideOffset:6,className:`z-[100] min-w-44 rounded-lg border border-edge bg-surface-panel p-1 shadow-popover`,children:[mn?(0,U.jsx)(ce,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-danger outline-none hover:bg-surface-hover focus:bg-surface-hover`,onSelect:()=>{q(`command`,!0),k(null),T(D(e,mn.id,mn.version),{revalidate:!1}).catch(()=>k(y.actionFailed)).finally(()=>q(`command`,!1))},children:y.cancelActiveRun}):null,mn?(0,U.jsx)(F,{className:`my-1 h-px bg-edge`}):null,S.task.phase===`closed`?null:(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(ce,{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 J({type:`close`,resolution:`cancelled`}),children:y.cancelTask}),(0,U.jsx)(F,{className:`my-1 h-px bg-edge`})]}),(0,U.jsx)(ce,{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(hn){k(y.deleteActiveTaskBlocked);return}Tt(!0)},children:y.deleteTask})]})})]})]}),(0,U.jsx)(Ne,{resource:{kind:`task`,id:S.task.id,revision:String(S.task.version)},disabled:ze||ot||z.size>0}),Z&&t!==`modal`?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(w,{type:`button`,variant:`ghost`,className:v(`h-8 shrink-0 px-2 text-xs`,nn&&`bg-surface-hover text-fg`),"aria-label":l===`zh`?`项目文件`:`Project files`,"aria-pressed":nn,onClick:()=>{ae(Z,!1),ie(Z)},children:[(0,U.jsx)(g,{className:`size-3.5`,"aria-hidden":!0}),l===`zh`?`文件`:`Files`]}),(0,U.jsx)(w,{asChild:!0,variant:`ghost`,className:`h-8 shrink-0 px-2 text-xs`,children:(0,U.jsxs)(s,{to:Se(e),children:[(0,U.jsx)(f,{className:`size-3.5`}),l===`zh`?`全屏`:`Full screen`]})})]}):null]});return(0,U.jsxs)(`div`,{ref:pt,className:`${t===`modal`?`flex h-full min-h-0 flex-col`:`flex min-h-[calc(100dvh-8rem)] flex-col overflow-hidden`} ${dt?`lg:cursor-col-resize lg:select-none`:``}`,style:{"--task-chat-panel-width":`${lt}%`},children:[(0,U.jsxs)(`header`,{className:v(`shrink-0 border-b border-edge-subtle bg-surface-panel px-5 py-4 sm:px-6`,Q(`title`)&&`task-detail-live-update`),children:[(0,U.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-x-6 gap-y-3`,children:[(0,U.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs text-fg-muted`,children:[B?(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,U.jsx)(Te,{className:`size-3.5`,"aria-hidden":!0}),B]}):null,B?(0,U.jsx)(`span`,{"aria-hidden":`true`,children:`/`}):null,(0,U.jsx)(`span`,{children:y.taskLabel}),St?(0,U.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,role:`status`,children:St.source===`agent`?l===`zh`?`Agent 刚刚更新`:`Updated by Agent`:l===`zh`?`执行结果已同步`:`Execution result synced`}):null]}),ze?(0,U.jsx)(`input`,{autoFocus:!0,"data-task-inline-editor":!0,value:Ke,onChange:e=>qe(e.target.value),onBlur:()=>void At(),onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur(),e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),mt.current=!0,qe(S.task.title),W(!1),queueMicrotask(()=>{mt.current=!1}))},className:`mt-2 w-full max-w-3xl rounded-lg bg-surface-hover px-3 py-2 text-xl font-semibold leading-7 text-fg outline-none ring-2 ring-accent/30 focus:ring-accent/60`}):(0,U.jsx)(`button`,{type:`button`,className:`mt-2 block max-w-full rounded-lg text-left outline-none hover:bg-surface-hover focus-visible:bg-surface-hover`,onClick:()=>{_t.current={value:S.task.title,version:S.task.version},K(null),qe(S.task.title),W(!0)},children:(0,U.jsx)(`h1`,{className:`break-words text-xl font-semibold leading-7 text-fg`,children:S.task.title})}),xt===`title`?(0,U.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs text-warning`,role:`alert`,children:[(0,U.jsx)(`span`,{children:l===`zh`?`Agent 在你编辑期间更新了标题。`:`The Agent updated the title while you were editing.`}),(0,U.jsx)(`button`,{type:`button`,className:`rounded-md bg-surface-hover px-2 py-1 text-fg`,onClick:()=>{qe(S.task.title),K(null),W(!1)},children:l===`zh`?`使用 Agent 版本`:`Use Agent version`}),(0,U.jsx)(`button`,{type:`button`,className:`rounded-md bg-accent-soft px-2 py-1 text-accent-fg`,onClick:()=>void Y({title:Ke.trim()}).then(e=>{e&&(K(null),W(!1))}),children:l===`zh`?`保留我的修改`:`Keep my changes`})]}):null]}),(0,U.jsx)(`span`,{className:v(`shrink-0 rounded-full px-2.5 py-1 text-xs font-medium`,it(Ut)),children:Wt})]}),(0,U.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-fg-muted`,children:[(0,U.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-2`,children:[en?(0,U.jsx)(me,{agentId:en,avatar:tn?.avatar,size:20,className:`shrink-0`}):null,(0,U.jsxs)(`span`,{className:`truncate`,children:[y.executorLabel,` · `,tn?.name??en??y.unassigned]})]}),(0,U.jsx)(`span`,{className:`text-fg-subtle`,children:y.updatedAt.replace(`{{date}}`,Ee(S.task.updatedAt,l))})]}),(0,U.jsx)(`div`,{className:`mt-4 border-t border-edge-subtle pt-3`,children:_n}),O?(0,U.jsx)(`p`,{className:`mt-3 text-sm text-danger`,children:O}):null]}),(0,U.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col lg:flex-row`,children:[(0,U.jsxs)(`section`,{className:`task-detail-scroll min-w-0 flex-1 overflow-y-auto overscroll-contain p-5 sm:p-6`,children:[S.attention.length>0?(0,U.jsxs)(`section`,{className:v(`mb-4 rounded-xl border border-warning/20 bg-warning/10 p-4`,Q(`attention`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:rn?y.needsAttention:y.waitingStatus}),(0,U.jsx)(`ul`,{className:`mt-2 space-y-1.5 text-sm leading-6 text-fg-muted`,children:S.attention.map((t,n)=>(0,U.jsxs)(`li`,{className:`flex flex-wrap items-start justify-between gap-2`,children:[(0,U.jsx)(`span`,{className:`min-w-0 flex-1`,children:t.summary}),t.kind===`input_required`||t.kind===`approval_required`?(0,U.jsx)(s,{className:`inline-flex min-h-11 items-center rounded-lg bg-surface-panel px-3 text-sm font-medium text-accent`,to:Se(e),children:l===`zh`?t.kind===`approval_required`?`查看并决定`:`补充信息`:t.kind===`approval_required`?`Review decision`:`Provide information`}):null]},`${t.kind}-${n}`))})]}):null,S.task.phase!==`closed`&&!Ht&&S.waits.filter(e=>(e.kind===`user_input`||e.kind===`approval`&&typeof e.condition.capability==`string`)&&e.condition.type!==`connection`).map(e=>(0,U.jsx)(Fe,{wait:e,detail:S,zh:l===`zh`,onUpdated:e=>{T(e,{revalidate:!1})}},e.id)),(0,U.jsx)(`div`,{className:`mb-4`,children:(0,U.jsx)(Be,{taskId:e},e)}),(0,U.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,U.jsxs)(`main`,{className:`min-w-0 overflow-hidden rounded-xl bg-surface-panel shadow-surface divide-y divide-edge-subtle`,children:[(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`body`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.taskDescription}),ot?(0,U.jsx)(`textarea`,{autoFocus:!0,"data-task-inline-editor":!0,rows:6,value:st,onChange:e=>ct(e.target.value),onBlur:()=>void jt(),onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),ht.current=!0,ct(S.task.body??S.task.contract?.objective??``),G(!1),queueMicrotask(()=>{ht.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,U.jsx)(`button`,{type:`button`,className:`-mx-1 mt-2 block w-[calc(100%+0.5rem)] rounded-lg px-1 py-1 text-left outline-none hover:bg-surface-hover focus-visible:bg-surface-hover`,onClick:()=>{let e=S.task.body??S.task.contract?.objective??``;gt.current=e,vt.current={value:S.task.body??``,version:S.task.version},K(null),ct(e),G(!0)},children:(0,U.jsx)(`span`,{className:`whitespace-pre-wrap text-sm leading-6 text-fg-muted`,children:Gt&&Gt!==S.task.title?Gt:y.noTaskDescription})}),xt===`description`?(0,U.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs text-warning`,role:`alert`,children:[(0,U.jsx)(`span`,{children:l===`zh`?`Agent 在你编辑期间更新了描述。`:`The Agent updated the description while you were editing.`}),(0,U.jsx)(`button`,{type:`button`,className:`rounded-md bg-surface-hover px-2 py-1 text-fg`,onClick:()=>{ct(S.task.body??``),K(null),G(!1)},children:l===`zh`?`使用 Agent 版本`:`Use Agent version`}),(0,U.jsx)(`button`,{type:`button`,className:`rounded-md bg-accent-soft px-2 py-1 text-accent-fg`,onClick:()=>void Y({body:st.trim()||null}).then(e=>{e&&(K(null),G(!1))}),children:l===`zh`?`保留我的修改`:`Keep my changes`})]}):null]}),(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`contract`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.taskDefinition}),(0,U.jsxs)(`div`,{className:`mt-5`,children:[(0,U.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,U.jsx)(`h3`,{className:`text-sm font-medium text-fg`,children:y.successDefinition}),an.length>0?(0,U.jsx)(`span`,{className:`text-xs text-fg-subtle`,children:y.criteriaProgress.replace(`{{verified}}`,String(on)).replace(`{{total}}`,String(an.length))}):null]}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:an,empty:y.noDefinition,verificationByCriterion:Jt})})]}),sn.length>0?(0,U.jsxs)(`div`,{className:`mt-5 border-t border-edge-subtle pt-5`,children:[(0,U.jsx)(`h3`,{className:`text-sm font-medium text-fg`,children:y.expectedOutputs}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:sn,empty:y.noDefinition})})]}):null,cn.length>0?(0,U.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:y.constraints}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:cn,empty:y.noDefinition})})]}):null,ln.length>0?(0,U.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:y.approvalRequired}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:ln,empty:y.noDefinition})})]}):null,un.length>0?(0,U.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:y.contextAssumptions}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:un,empty:y.noDefinition})})]}):null,dn.length>0?(0,U.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:y.contextRisks}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:dn,empty:y.noDefinition})})]}):null]}),X?(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`runs`,`receipts`)&&`task-detail-live-update`),children:[(0,U.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,U.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.latestResult}),(0,U.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:l===`zh`?X.completionVerdict===`achieved`?`本次执行报告目标已达成,请结合下方验证依据验收。`:`这是阶段性结果,尚不能代表任务全部完成。`:X.completionVerdict===`achieved`?`The run reports the goal achieved. Review the evidence below.`:`This is a partial result; the task is not yet fully complete.`}),(0,U.jsx)(h,{content:X.summary,compact:!0,className:`mt-2 text-sm leading-6 text-fg`})]}),(0,U.jsxs)(`span`,{className:`rounded-full bg-surface-hover px-2.5 py-1 text-xs text-fg-muted`,children:[y.receiptStatuses[X.status],` · `,y.verificationStatuses[X.verification.status]]})]}),X.remainingWork.length>0?(0,U.jsxs)(`div`,{className:`mt-4`,children:[(0,U.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:y.remainingWork}),(0,U.jsx)(`div`,{className:`mt-2`,children:(0,U.jsx)(at,{items:X.remainingWork,empty:y.noRemainingWork})})]}):null,X.nextAction?(0,U.jsxs)(`div`,{className:`mt-4 rounded-lg bg-surface-hover p-3`,children:[(0,U.jsx)(`p`,{className:`text-xs font-medium text-fg-muted`,children:y.nextAction}),(0,U.jsx)(`p`,{className:`mt-1 text-sm text-fg`,children:X.nextAction})]}):null,(0,U.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[(0,U.jsx)(w,{className:`border-0 bg-surface-hover px-2 py-1 text-xs shadow-none`,variant:`secondary`,onClick:()=>void R(X.runId,`helpful`),children:y.doneWell}),(0,U.jsx)(w,{className:`px-2 py-1 text-xs`,variant:`ghost`,onClick:()=>void R(X.runId,`not_helpful`),children:y.needsFix})]}),(0,U.jsx)(Re,{evidence:X.evidence,projectId:S.task.projectId,conversationId:Z??void 0,language:l}),S.receipts.length>1?(0,U.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:y.executionHistory.replace(`{{count}}`,String(S.receipts.length-1))}),(0,U.jsx)(`div`,{className:`mt-3 space-y-3`,children:S.receipts.slice(1).map(e=>(0,U.jsx)(`article`,{className:`rounded-lg bg-surface-hover p-3`,children:(0,U.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,U.jsx)(`p`,{className:`text-sm text-fg`,children:e.summary}),(0,U.jsx)(`span`,{className:`shrink-0 text-xs text-fg-subtle`,children:y.receiptStatuses[e.status]})]})},e.runId))})]}):null]}):null,S.context.length>0?(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`context`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.contextUsed}),(0,U.jsx)(`ul`,{className:`mt-4 grid gap-2 sm:grid-cols-2`,children:S.context.map(e=>(0,U.jsxs)(`li`,{className:`min-w-0 rounded-lg bg-surface-hover p-2.5`,children:[(0,U.jsxs)(`span`,{className:`text-[11px] text-fg-subtle`,children:[y.contextRoleLabels[e.role],` · `,y.contextKindLabels[e.targetKind]]}),e.targetKind===`url`&&/^https?:\/\//.test(e.targetId)?(0,U.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,U.jsx)(`p`,{className:`mt-1 break-words text-sm text-fg`,children:e.title??e.targetId})]},e.id))})]}):null]}),(0,U.jsxs)(`aside`,{className:`min-w-0 overflow-hidden rounded-xl bg-surface-panel shadow-surface divide-y divide-edge-subtle`,children:[(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`phase`,`resolution`,`priority`,`dueAt`,`delegateAgentId`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.taskProperties}),(0,U.jsxs)(`div`,{className:`mt-4 grid gap-3 sm:grid-cols-2`,children:[(0,U.jsx)(Je,{value:S.task.phase,disabled:z.has(`phase`),canMove:fn,canApprove:Qt,canReopen:$t,language:l,label:y.taskPhase,onChange:Mt}),(0,U.jsx)(Ye,{value:S.task.priority,disabled:z.has(`priority`),label:y.priority,labels:y.priorityLabels,onChange:Nt}),(0,U.jsx)(Xe,{value:We(S.task.dueAt),disabled:z.has(`dueAt`),label:y.dueDate,onChange:Pt}),(0,U.jsx)(Ze,{value:S.conversation.currentExecutorAgentId??``,disabled:z.has(`delegateAgentId`),label:y.executorLabel,unassignedLabel:y.unassigned,agents:Ie,onChange:zt})]})]}),(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`dependencies`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.taskRelations}),(0,U.jsxs)(`div`,{className:`mt-4 space-y-4`,children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`p`,{className:`mb-2 text-xs text-fg-muted`,children:y.dependencies}),(0,U.jsx)(Qe,{candidates:Ae,selected:S.dependencies,disabled:z.has(`dependencies`),labels:Et,getTaskHref:kt,onChange:Rt})]}),(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`p`,{className:`mb-2 text-xs text-fg-muted`,children:y.dependents}),S.dependents.length>0?(0,U.jsx)(`div`,{className:`space-y-1.5`,children:S.dependents.map(e=>(0,U.jsx)(s,{to:kt(e.id),className:`block rounded-lg bg-surface-hover p-2.5 text-sm text-fg-muted transition-colors hover:text-fg`,children:e.title},e.id))}):(0,U.jsx)(`p`,{className:`text-sm text-fg-subtle`,children:y.noDependents})]})]})]})]})]})]}),(0,U.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":l===`zh`?`调整任务信息和 Agent 对话的宽度`:`Resize task details and Agent chat`,"aria-valuemin":30,"aria-valuemax":60,"aria-valuenow":Math.round(lt),tabIndex:0,onPointerDown:Lt,onKeyDown:It,onDoubleClick:()=>Ft(et),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 ${dt?`bg-surface-hover`:``}`,children:(0,U.jsx)(`div`,{className:`my-3 w-px rounded-full bg-edge-strong/70 transition-colors group-hover:bg-accent group-focus-visible:bg-accent`})}),(0,U.jsxs)(`aside`,{className:`flex min-h-[34rem] min-w-0 flex-col bg-surface-panel lg:min-h-0 lg:w-[var(--task-chat-panel-width)] lg:shrink-0`,children:[(0,U.jsx)(`div`,{className:`flex shrink-0 items-center border-b border-edge-subtle px-4 py-3`,children:(0,U.jsx)(`h2`,{className:`text-sm font-medium text-fg-muted`,children:l===`zh`?`执行对话`:`Execution chat`})}),Z?(0,U.jsx)(`div`,{className:`min-h-0 flex-1`,children:(0,U.jsx)(be,{embedded:!0,conversationId:Z,taskId:e})}):fe?(0,U.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,U.jsxs)(`div`,{className:`max-w-xs`,children:[(0,U.jsx)(_e,{className:`mx-auto size-8 animate-pulse text-fg-subtle`}),(0,U.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:l===`zh`?`正在创建任务会话`:`Creating task conversation`})]})}):E?(0,U.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,U.jsxs)(`div`,{className:`max-w-xs`,children:[(0,U.jsx)(_e,{className:`mx-auto size-8 text-danger`}),(0,U.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:l===`zh`?`任务会话创建失败`:`Could not create task conversation`}),(0,U.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-muted`,children:E instanceof Error?E.message:String(E)})]})}):(0,U.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,U.jsxs)(`div`,{className:`max-w-xs`,children:[(0,U.jsx)(_e,{className:`mx-auto size-8 text-fg-subtle`}),(0,U.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:l===`zh`?`等待任务会话`:`Waiting for a task conversation`}),(0,U.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-muted`,children:l===`zh`?`安排或开始任务后,Agent 的执行过程和持续对话会显示在这里。`:`Schedule or start the task to see the agent run and continue the conversation here.`})]})})]})]}),(0,U.jsx)(N,{open:wt,title:y.deleteTaskTitle,description:y.deleteTaskDescription.replace(`{{title}}`,S.task.title),confirmLabel:y.confirmDeleteTask,cancelLabel:y.keepTask,destructive:!0,onConfirm:()=>{Tt(!1),Bt()},onCancel:()=>Tt(!1)})]})}function G(){let e=(0,V.c)(2),{taskId:t}=o(),n=t===void 0?``:t,r;return e[0]===n?r=e[1]:(r=(0,U.jsx)(ot,{taskId:n,presentation:`page`}),e[0]=n,e[1]=r),r}function st(e){let t=(0,V.c)(58),{taskId:n,backgroundPath:r,onClose:i}=e,a=te(_t),{data:o}=ge(n),c=o?.conversation.activeConversationId??null,l=P(gt),u=P(ht),d=P(mt),p=P(pt),m=je(ft),h=fe(dt),y=fe(ut),ee=l?u:0,b;t[0]!==i||t[1]!==y?(b=e=>{e||(y(null),i())},t[0]=i,t[1]=y,t[2]=b):b=t[2];let oe=a===`zh`?`关闭任务详情`:`Close task details`,C;t[3]!==i||t[4]!==y?(C=()=>{y(null),i()},t[3]=i,t[4]=y,t[5]=C):C=t[5];let w;t[6]!==oe||t[7]!==C?(w=(0,U.jsx)(`button`,{type:`button`,tabIndex:-1,"data-task-modal-backdrop":!0,className:`fixed inset-0 z-[80] bg-black/45 backdrop-blur-[1px]`,"aria-label":oe,onClick:C}),t[6]=oe,t[7]=C,t[8]=w):w=t[8];let T=l?`true`:`false`,ce=`${ee/2}px`,le=`${ee}px`,ue;t[9]!==ce||t[10]!==le?(ue={"--task-detail-workspace-offset":ce,"--task-detail-workspace-width":le},t[9]=ce,t[10]=le,t[11]=ue):ue=t[11];let de=ue,pe=a===`zh`?`任务详情`:`Task details`,E;t[12]===pe?E=t[13]:(E=(0,U.jsx)(ae,{className:`font-medium text-fg`,children:pe}),t[12]=pe,t[13]=E);let me=a===`zh`?`查看并操作任务详情`:`View and manage task details`,D;t[14]===me?D=t[15]:(D=(0,U.jsx)(ne,{className:`sr-only`,children:me}),t[14]=me,t[15]=D);let O;t[16]!==c||t[17]!==a||t[18]!==p||t[19]!==m||t[20]!==n||t[21]!==d||t[22]!==l?(O=c?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`button`,{type:`button`,className:v(`flex size-8 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg`,l&&d===c&&`bg-surface-hover text-fg`),"aria-label":a===`zh`?`项目文件`:`Project files`,title:a===`zh`?`项目文件`:`Project files`,"aria-pressed":l&&d===c,onClick:()=>{m(c,!1),p(c)},children:(0,U.jsx)(g,{className:`size-4`,"aria-hidden":!0})}),(0,U.jsx)(s,{to:Se(n),className:`flex size-8 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg`,"aria-label":a===`zh`?`全屏打开对话`:`Open chat full screen`,title:a===`zh`?`全屏打开对话`:`Open chat full screen`,children:(0,U.jsx)(f,{className:`size-4`,"aria-hidden":!0})})]}):null,t[16]=c,t[17]=a,t[18]=p,t[19]=m,t[20]=n,t[21]=d,t[22]=l,t[23]=O):O=t[23];let k=a===`zh`?`关闭任务详情`:`Close task details`,he;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(he=(0,U.jsx)(_,{className:`size-4`,"aria-hidden":!0}),t[24]=he):he=t[24];let A;t[25]===k?A=t[26]:(A=(0,U.jsx)(x,{className:`flex size-8 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg`,"aria-label":k,children:he}),t[25]=k,t[26]=A);let j;t[27]!==O||t[28]!==A?(j=(0,U.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[O,A]}),t[27]=O,t[28]=A,t[29]=j):j=t[29];let M;t[30]!==E||t[31]!==D||t[32]!==j?(M=(0,U.jsxs)(`header`,{className:`flex shrink-0 items-center justify-between gap-3 bg-surface-panel px-5 py-3.5`,children:[E,D,j]}),t[30]=E,t[31]=D,t[32]=j,t[33]=M):M=t[33];let N;t[34]!==i||t[35]!==y?(N=()=>{y(null),i()},t[34]=i,t[35]=y,t[36]=N):N=t[36];let F;t[37]!==r||t[38]!==N||t[39]!==n?(F=(0,U.jsx)(`div`,{className:`min-h-0 flex-1 overflow-hidden`,children:(0,U.jsx)(ot,{taskId:n,presentation:`modal`,backgroundPath:r,onDeleted:N})}),t[37]=r,t[38]=N,t[39]=n,t[40]=F):F=t[40];let I;t[41]!==M||t[42]!==F||t[43]!==T||t[44]!==de?(I=(0,U.jsxs)(ie,{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":T,style:de,onEscapeKeyDown:lt,onInteractOutside:ct,children:[M,F]}),t[41]=M,t[42]=F,t[43]=T,t[44]=de,t[45]=I):I=t[45];let L;t[46]!==h||t[47]!==d||t[48]!==l||t[49]!==u?(L=h?(0,U.jsx)(`div`,{className:`fixed inset-y-0 left-0 z-[100] flex min-h-0 min-w-0 overflow-hidden bg-surface-panel transition-[right] duration-200 ease-out motion-reduce:transition-none`,style:{right:l?u:0},children:(0,U.jsx)(se,{allowOutsideChat:!0,conversationId:d??void 0})}):null,t[46]=h,t[47]=d,t[48]=l,t[49]=u,t[50]=L):L=t[50];let R;t[51]!==I||t[52]!==L||t[53]!==w?(R=(0,U.jsxs)(re,{children:[w,I,L]}),t[51]=I,t[52]=L,t[53]=w,t[54]=R):R=t[54];let z;return t[55]!==b||t[56]!==R?(z=(0,U.jsx)(S,{modal:!1,open:!0,onOpenChange:b,children:R}),t[55]=b,t[56]=R,t[57]=z):z=t[57],z}function ct(e){let t=e.detail.originalEvent.target;t instanceof Element&&t.closest(`#app-workspace-panel, [data-task-modal-backdrop]`)&&e.preventDefault()}function lt(e){let t=e.target;t instanceof HTMLElement&&t.closest(`[data-task-inline-editor]`)&&e.preventDefault()}function ut(e){return e.setPath}function dt(e){return e.path}function ft(e){return e.setOpen}function pt(e){return e.openForSession}function mt(e){return e.conversationIdOverride}function ht(e){return e.widthPx}function gt(e){return e.open}function _t(e){return e.language}function vt(e){return(0,U.jsx)(l,{value:e.id,children:e.name||e.id},e.id)}function yt(e){return e.id}export{st as TaskDetailModal,G as TaskDetailPage};
|
|
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,g as a,m as o,t as s}from"./chunk-KS7C4IRE-BMYIfy9x.js";import{n as c,r as l}from"./popover-select-0p9PIHRy.js";import{t as u}from"./circle-check-C23XjkUj.js";import{t as d}from"./ellipsis-0k4rZLoy.js";import{t as f}from"./external-link-DjqjBmc3.js";import{f as p,m,t as h}from"./markdown-view-BlzX7Ze5.js";import{t as g}from"./folder-open-CyzJ19I9.js";import{t as _}from"./x-B_N4OPjy.js";import{t as v}from"./cn-JdwAhgNB.js";import{a as y,c as ee,n as te,r as b}from"./locale-store-Y1aBayM_.js";import{i as ne,n as x,o as re,r as ie,s as ae,t as S}from"./dist-BGTk37IG.js";import{u as oe}from"./tasks-BH8_WMUF.js";import{i as C}from"./vendor-swr-BIWyz7Rc.js";import{t as w}from"./button-CS04eWY9.js";import{t as T}from"./skeleton-BwbyijEw.js";import{$t as se,Bn as ce,Bs as le,Gs as ue,Gu as de,Hi as fe,Hn as pe,Jo as E,L as me,Ls as D,Mu as O,Nu as k,Pa as he,Ps as ge,Qs as A,Rs as j,So as M,Ta as N,Ui as P,Un as F,Vn as I,Wn as L,Xs as R,Zi as z,bl as _e,ec as ve,ic as ye,n as be,na as xe,nc as Se,nl as Ce,od as we,ou as Te,pi as Ee,qa as De,rc as Oe,sl as ke,uu as Ae,yr as je,zn as Me}from"./index-DU5Eb1V8.js";import{t as Ne}from"./page-context-capture-button-BjjjuLkz.js";import{t as Pe}from"./date-picker-Ck-FmYEL.js";import{t as B}from"./dependency-picker-BjH8XrKb.js";var V=n(),H=e(t(),1),U=r();function Fe({wait:e,detail:t,zh:n,onUpdated:r}){let[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(!1),f=(0,H.useRef)(null),p=e.kind===`approval`,m=Array.isArray(e.condition.choices)?e.condition.choices.filter(e=>typeof e==`string`):[];async function h(a){if(!p&&!i.trim()||p&&!a||o)return;let c=JSON.stringify([t.task.version,i.trim(),a]);f.current?.signature!==c&&(f.current={signature:c,key:crypto.randomUUID()}),s(!0),l(``);try{let o=await j(t.task.id,{type:`resolve_wait`,waitId:e.id,resolution:p?{kind:`task_approval`,decision:a}:{kind:`user_answer`,answer:i.trim()}},t.task.version,f.current.key);d(!0),r(o),E({tone:`success`,title:p?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,U.jsxs)(`form`,{className:`mt-3 space-y-3 rounded-lg border border-edge p-3`,onSubmit:e=>{e.preventDefault(),h()},children:[p?(0,U.jsxs)(`div`,{className:`text-sm text-fg`,children:[(0,U.jsx)(`p`,{children:e.reason}),(0,U.jsxs)(`p`,{className:`mt-2`,children:[n?`授权范围:`:`Permission: `,String(e.condition.capability)]}),(0,U.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:[(0,U.jsx)(w,{type:`button`,variant:`primary`,disabled:o||u,onClick:()=>void h(`approve`),children:n?`批准`:`Approve`}),(0,U.jsx)(w,{type:`button`,disabled:o||u,onClick:()=>void h(`deny`),children:n?`拒绝并暂停`:`Deny and pause`})]})]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`label`,{className:`block text-sm text-fg`,children:[typeof e.condition.question==`string`?e.condition.question:e.reason,(0,U.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)})]}),m.length>0&&(0,U.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:m.map(e=>(0,U.jsx)(w,{type:`button`,disabled:o||u,variant:`secondary`,"aria-pressed":i===e,onClick:()=>a(e),children:e},e))}),(0,U.jsx)(w,{type:`submit`,variant:`primary`,disabled:o||u||!i.trim(),children:o?n?`正在提交`:`Submitting`:n?`提交补充信息`:`Submit answer`})]}),(0,U.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n?`保存到任务上下文;其他等待条件满足后继续执行。`:`Saved to task context. Work continues once all waiting conditions are met.`}),c&&(0,U.jsx)(`p`,{role:`alert`,className:`text-sm text-danger`,children:c})]})}function Ie(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 Le({uri:e,zh:t}){let[n,r]=(0,H.useState)(),[i,a]=(0,H.useState)(!1),[o,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(``),[d,f]=(0,H.useState)(``);async function p(){a(!0),u(``);try{let n=Ie(e,(await xe()).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||(f(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{a(!1)}}async function m(){if(!(!n||i)){a(!0),u(``);try{let e=await z(n.id,864e5);f(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{a(!1)}}}return(0,U.jsxs)(`details`,{className:`mt-2 text-xs text-fg-muted`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer py-2`,children:t?`链接打不开?`:`Trouble opening the link?`}),(0,U.jsxs)(`div`,{className:`space-y-2`,children:[(0,U.jsx)(w,{type:`button`,variant:`ghost`,disabled:i,onClick:()=>void p(),children:t?`检查链接状态`:`Check link`}),o&&n?.expired&&(n.kind===`file`||n.kind===`directory`)&&!n.revoked&&(n.maxViews===null||n.downloadCount<n.maxViews)&&(0,U.jsx)(w,{type:`button`,disabled:i,onClick:()=>void m(),children:t?`恢复链接 · 续期 24 小时`:`Restore link for 24 hours`}),l&&(0,U.jsx)(`p`,{role:`status`,className:`break-words leading-5`,children:l}),d&&(0,U.jsx)(`a`,{className:`block py-2 text-accent`,href:d,target:`_blank`,rel:`noopener noreferrer`,children:t?`打开产物`:`Open artifact`}),o&&(0,U.jsx)(s,{className:`block py-2 text-accent`,to:`/settings/shares`,children:t?`管理分享记录`:`Manage shares`})]})]})}function Re(e){let t=(0,V.c)(14),{evidence:n,projectId:r,conversationId:i,language:a}=e,o=fe(ze);if(!n.length)return null;let s=a===`zh`?`交付物与验证依据`:`Deliverables and evidence`,c;if(t[0]!==i||t[1]!==n||t[2]!==a||t[3]!==r||t[4]!==o){let e;t[6]!==i||t[7]!==a||t[8]!==r||t[9]!==o?(e=(e,t)=>{let n=e.uri?.trim(),s=n&&/^https?:\/\//i.test(n),c=n&&!s&&e.kind===`artifact`&&!/^[a-z][a-z0-9+.-]*:/i.test(n)&&!n.startsWith(`//`),l=e.title||(a===`zh`?`查看产物`:`Open artifact`);return(0,U.jsxs)(`div`,{className:`min-w-0 rounded-lg border border-edge-subtle p-3`,children:[s?(0,U.jsxs)(`a`,{className:`inline-flex min-h-11 items-center gap-2 text-sm font-medium text-accent hover:underline`,href:n,target:`_blank`,rel:`noopener noreferrer`,children:[(0,U.jsx)(f,{className:`size-4 shrink-0`}),l]}):c&&(r||i)?(0,U.jsxs)(`button`,{type:`button`,className:`inline-flex min-h-11 items-center gap-2 text-sm font-medium text-accent hover:underline`,onClick:()=>o(n,null,r,i),children:[(0,U.jsx)(Ae,{className:`size-4 shrink-0`}),l]}):(0,U.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:l}),s&&e.kind===`artifact`&&(0,U.jsx)(Le,{uri:n,zh:a===`zh`},n),e.summary?(0,U.jsx)(`p`,{className:`mt-1 break-words text-xs leading-5 text-fg-muted`,children:e.summary}):null,(0,U.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:e.strength===`verified`?a===`zh`?`已验证`:`Verified`:a===`zh`?`已记录,待验证`:`Observed, not verified`})]},`${e.title}-${t}`)},t[6]=i,t[7]=a,t[8]=r,t[9]=o,t[10]=e):e=t[10],c=n.map(e),t[0]=i,t[1]=n,t[2]=a,t[3]=r,t[4]=o,t[5]=c}else c=t[5];let l;return t[11]!==s||t[12]!==c?(l=(0,U.jsx)(`div`,{className:`mt-4 grid gap-2 sm:grid-cols-2`,"aria-label":s,children:c}),t[11]=s,t[12]=c,t[13]=l):l=t[13],l}function ze(e){return e.setPath}function Be({taskId:e}){let t=ee(e=>e.conversationId),n=te(e=>e.language),[r,i]=(0,H.useState)(``),[a,o]=(0,H.useState)(null),[s,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)([]),[p,m]=(0,H.useState)(null),g=b(`/api/tasks/${encodeURIComponent(e)}/collaboration`),{data:_,error:v,mutate:ne}=C([`task-collaboration`,e,t],()=>y(`${g}?recent=1`),{revalidateOnFocus:!0}),x=[...new Map([...d,..._?.items??[]].map(e=>[e.id,e])).values()].sort((e,t)=>e.sequence-t.sequence),re=async()=>{let e=x[0];if(!(!e||l)){u(!0);try{let t=await y(`${g}?recent=1&beforeSequence=${e.sequence}`);f(e=>[...t.items,...e])}catch(e){m(e instanceof Error?e.message:String(e))}finally{u(!1)}}};(0,H.useEffect)(()=>{let t=t=>{let n=t.detail;(!n?.taskId||n.taskId===e)&&ne()};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)}},[ne,e]);let ie=async()=>{if(!(!r.trim()||s)){c(!0),m(null);try{await y(g,{method:`POST`,headers:{"idempotency-key":crypto.randomUUID()},body:JSON.stringify({kind:a?`answer`:`instruction`,body:r.trim(),...a?{causationId:a}:{}})}),i(``),o(null),await ne()}catch(e){m(e instanceof Error?e.message:String(e))}finally{c(!1)}}};return(0,U.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:n===`zh`?`任务留言`:`Task updates`}),(0,U.jsxs)(`div`,{className:`mt-3 max-h-64 space-y-2 overflow-y-auto`,children:[!_&&!v?(0,U.jsxs)(`div`,{"aria-busy":`true`,className:`space-y-2`,children:[(0,U.jsx)(T,{className:`h-14 w-full`}),(0,U.jsx)(T,{className:`h-14 w-4/5`})]}):null,v?(0,U.jsx)(`p`,{role:`status`,className:`text-xs text-fg-muted`,children:n===`zh`?`暂时无法读取留言`:`Updates unavailable`}):null,x[0]&&x[0].sequence>1?(0,U.jsx)(`button`,{type:`button`,disabled:l,onClick:()=>void re(),className:`text-xs text-accent hover:underline disabled:opacity-50`,children:n===`zh`?`查看更早留言`:`Earlier updates`}):null,x.map(e=>(0,U.jsxs)(`div`,{className:`rounded-lg bg-surface-base px-3 py-2 text-sm`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-fg-subtle`,children:[(0,U.jsx)(`span`,{children:e.authorKind===`worker_agent`?n===`zh`?`执行 Agent`:`Worker`:e.authorKind===`main_agent`?n===`zh`?`主 Agent`:`Main Agent`:e.authorKind===`system`?n===`zh`?`系统`:`System`:n===`zh`?`用户`:`You`}),(0,U.jsxs)(`span`,{children:[`· `,e.kind]}),e.deliveryStatus?(0,U.jsxs)(`span`,{children:[`· `,e.deliveryStatus]}):null]}),(0,U.jsx)(`div`,{className:`mt-1 min-w-0 text-fg`,"data-task-collaboration-body":!0,children:(0,U.jsx)(h,{content:e.body,compact:!0,breaks:!0})}),e.kind===`question`&&e.authorKind===`worker_agent`?(0,U.jsx)(`button`,{type:`button`,className:`mt-2 text-xs text-accent hover:underline`,onClick:()=>o(e.id),children:n===`zh`?`回复问题`:`Reply`}):null]},e.id)),_&&!x.length?(0,U.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n===`zh`?`暂无进展留言`:`No updates yet`}):null]}),a?(0,U.jsxs)(`p`,{className:`mt-3 text-xs text-accent`,children:[n===`zh`?`正在回复执行 Agent 的问题`:`Replying to the worker`,(0,U.jsx)(`button`,{type:`button`,className:`ml-2 underline`,onClick:()=>o(null),children:n===`zh`?`取消`:`Cancel`})]}):null,(0,U.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`}),p?(0,U.jsx)(`p`,{role:`alert`,className:`mt-1 text-xs text-danger`,children:p}):null,(0,U.jsx)(`button`,{type:`button`,disabled:!r.trim()||s,onClick:()=>void ie(),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 Ve(e,t,n,r){return!!(e&&t!==e.version&&n!==e.value&&r!==n)}function He(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 W(e,t){return(t===`zh`?{backlog:`待规划`,ready:`就绪`,active:`进行中`,review:`待验收`,closed:`已完成`}:{backlog:`Backlog`,ready:`Ready`,active:`Active`,review:`Review`,closed:`Completed`})[e]}function Ue(){let e=(0,V.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,U.jsxs)(`div`,{className:`space-y-4`,"aria-busy":!0,children:[(0,U.jsx)(T,{className:`h-32 rounded-2xl`}),(0,U.jsx)(T,{className:`h-52 rounded-2xl`}),(0,U.jsx)(T,{className:`h-40 rounded-2xl`})]}),e[0]=t):t=e[0],t}function We(e){if(e===void 0)return``;let t=new Date(e);return new Date(t.getTime()-t.getTimezoneOffset()*6e4).toISOString().slice(0,10)}function Ge(e){return e?new Date(`${e}T23:59:59.999`).getTime():null}var Ke=[`backlog`,`ready`,`active`,`review`,`closed`],qe=[`low`,`normal`,`high`,`critical`],Je=(0,H.memo)(function(e){let t=(0,V.c)(20),{value:n,disabled:r,canMove:i,canApprove:a,canReopen:o,language:s,label:u,onChange:d}=e,f;t[0]!==a||t[1]!==i||t[2]!==o||t[3]!==n?(f=e=>e!==n&&(e===`closed`?!a:n===`closed`?!o:!i),t[0]=a,t[1]=i,t[2]=o,t[3]=n,t[4]=f):f=t[4];let p=f,m;t[5]===u?m=t[6]:(m=(0,U.jsx)(`span`,{children:u}),t[5]=u,t[6]=m);let h;t[7]===d?h=t[8]:(h=e=>d(e.target.value),t[7]=d,t[8]=h);let g;t[9]!==s||t[10]!==p?(g=Ke.map(e=>(0,U.jsx)(l,{value:e,disabled:p(e),children:W(e,s)},e)),t[9]=s,t[10]=p,t[11]=g):g=t[11];let _;t[12]!==r||t[13]!==h||t[14]!==g||t[15]!==n?(_=(0,U.jsx)(c,{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:h,children:g}),t[12]=r,t[13]=h,t[14]=g,t[15]=n,t[16]=_):_=t[16];let v;return t[17]!==m||t[18]!==_?(v=(0,U.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[m,_]}),t[17]=m,t[18]=_,t[19]=v):v=t[19],v}),Ye=(0,H.memo)(function(e){let t=(0,V.c)(14),{value:n,disabled:r,label:i,labels:a,onChange:o}=e,s;t[0]===i?s=t[1]:(s=(0,U.jsx)(`span`,{children:i}),t[0]=i,t[1]=s);let u;t[2]===o?u=t[3]:(u=e=>o(e.target.value),t[2]=o,t[3]=u);let d;t[4]===a?d=t[5]:(d=qe.map(e=>(0,U.jsx)(l,{value:e,children:a[e]},e)),t[4]=a,t[5]=d);let f;t[6]!==r||t[7]!==u||t[8]!==d||t[9]!==n?(f=(0,U.jsx)(c,{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:u,children:d}),t[6]=r,t[7]=u,t[8]=d,t[9]=n,t[10]=f):f=t[10];let p;return t[11]!==s||t[12]!==f?(p=(0,U.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[s,f]}),t[11]=s,t[12]=f,t[13]=p):p=t[13],p}),Xe=(0,H.memo)(function(e){let t=(0,V.c)(10),{value:n,disabled:r,label:i,onChange:a}=e,o;t[0]===i?o=t[1]:(o=(0,U.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,U.jsx)(Pe,{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,U.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}),Ze=(0,H.memo)(function(e){let t=(0,V.c)(17),{value:n,disabled:r,label:i,unassignedLabel:a,agents:o,onChange:s}=e,u;t[0]===i?u=t[1]:(u=(0,U.jsx)(`span`,{children:i}),t[0]=i,t[1]=u);let d;t[2]===s?d=t[3]:(d=e=>s(e.target.value),t[2]=s,t[3]=d);let f;t[4]===a?f=t[5]:(f=(0,U.jsx)(l,{value:``,disabled:!0,children:a}),t[4]=a,t[5]=f);let p;t[6]===o?p=t[7]:(p=o.map(vt),t[6]=o,t[7]=p);let m;t[8]!==r||t[9]!==d||t[10]!==f||t[11]!==p||t[12]!==n?(m=(0,U.jsxs)(c,{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:d,children:[f,p]}),t[8]=r,t[9]=d,t[10]=f,t[11]=p,t[12]=n,t[13]=m):m=t[13];let h;return t[14]!==u||t[15]!==m?(h=(0,U.jsxs)(`label`,{className:`grid gap-1.5 text-xs text-fg-muted`,children:[u,m]}),t[14]=u,t[15]=m,t[16]=h):h=t[16],h}),Qe=(0,H.memo)(function(e){let t=(0,V.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(yt),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,U.jsx)(B,{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)),$e=`xopc.taskDetail.chatPanelPercent`,et=42;function tt(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?et:Math.min(r,Math.max(n,e))}function nt(){try{let e=Number(window.localStorage.getItem($e));return Number.isFinite(e)&&e>=30&&e<=60?e:et}catch{return et}}function rt(e){return e.task.phase===`closed`?e.task.resolution===`done`?`completed`:`ended`:e.waits.some(e=>e.kind===`paused`)?`paused`:e.attention.some(e=>e.kind===`input_required`||e.kind===`approval_required`)?`needsUser`:e.operationalState===`idle`?e.task.phase===`backlog`?`captured`:e.task.phase===`ready`?`ready`:e.task.phase===`review`?`review`:`ready`:e.operationalState}function it(e){return e===`needsUser`||e===`blocked`?`bg-warning/10 text-warning`:e===`completed`?`bg-success-soft text-success`:e===`running`||e===`verifying`||e===`review`?`bg-accent-soft text-accent-fg`:`bg-surface-hover text-fg-muted`}function at(e){let t=(0,V.c)(9),{items:n,empty:r,verificationByCriterion:i}=e;if(n.length===0){let e;return t[0]===r?e=t[1]:(e=(0,U.jsx)(`p`,{className:`text-sm leading-6 text-fg-muted`,children:r}),t[0]=r,t[1]=e),e}let a;if(t[2]!==n||t[3]!==i){let e;t[5]===i?e=t[6]:(e=e=>{let t=i?.get(e)??`unverified`;return(0,U.jsxs)(`li`,{className:`flex gap-2 text-sm leading-6 text-fg`,children:[(0,U.jsx)(t===`passed`?u:t===`failed`?k:O,{className:t===`passed`?`mt-1 size-4 shrink-0 text-success`:t===`failed`?`mt-1 size-4 shrink-0 text-danger`:`mt-1 size-4 shrink-0 text-fg-subtle`}),(0,U.jsx)(`span`,{children:e})]},e)},t[5]=i,t[6]=e),a=n.map(e),t[2]=n,t[3]=i,t[4]=a}else a=t[4];let o;return t[7]===a?o=t[8]:(o=(0,U.jsx)(`ul`,{className:`space-y-2`,children:a}),t[7]=a,t[8]=o),o}function ot({taskId:e,presentation:t,backgroundPath:n,onDeleted:r}){let[o]=a(),c=i(),l=te(e=>e.language),_=ee(e=>e.conversationId),y=(0,H.useMemo)(()=>ye(l),[l]),b=M(e=>e.setPageHeader),ne=M(e=>e.clearPageHeader),x=P(e=>e.open),re=P(e=>e.conversationIdOverride),ie=P(e=>e.openForSession),ae=je(e=>e.setOpen),{data:S,error:C,mutate:T,lastChange:se,conversationLoading:fe,conversationError:E}=ge(e),[O,k]=(0,H.useState)(null),[z,xe]=(0,H.useState)(()=>new Set),[Ae,Pe]=(0,H.useState)([]),[B,V]=(0,H.useState)(null),[Ie,Le]=(0,H.useState)([]),[ze,W]=(0,H.useState)(!1),[Ke,qe]=(0,H.useState)(``),[ot,G]=(0,H.useState)(!1),[st,ct]=(0,H.useState)(``),[lt,ut]=(0,H.useState)(nt),[dt,ft]=(0,H.useState)(!1),pt=(0,H.useRef)(null),mt=(0,H.useRef)(!1),ht=(0,H.useRef)(!1),gt=(0,H.useRef)(``),_t=(0,H.useRef)(null),vt=(0,H.useRef)(null),yt=(0,H.useRef)(null),bt=(0,H.useRef)(S),[xt,K]=(0,H.useState)(null),[St,Ct]=(0,H.useState)(null),[wt,Tt]=(0,H.useState)(!1),Et=(0,H.useMemo)(()=>({link:y.linkDependencies,linked:y.linkedDependencies,searchPlaceholder:y.dependencySearchPlaceholder,noMatches:y.noDependencyMatches,noCandidates:y.noDependencyCandidates,remove:y.removeDependency}),[y.dependencySearchPlaceholder,y.linkDependencies,y.linkedDependencies,y.noDependencyCandidates,y.noDependencyMatches,y.removeDependency]),Dt=S?.dependencies.map(e=>`${e.id}:${e.title}`).join(`\0`)??``,Ot=(0,H.useMemo)(()=>p(o.get(`returnTo`),`/`,[`/projects`,`/chat`,`/notes`,`/tasks`]),[o]),kt=(0,H.useCallback)(e=>t===`modal`&&n?Oe(n,e):m(`/tasks/${encodeURIComponent(e)}`,Ot),[n,t,Ot]);bt.current=S;let q=(0,H.useCallback)((e,t)=>{xe(n=>{let r=new Set(n);return t?r.add(e):r.delete(e),r})},[]);(0,H.useEffect)(()=>{k(null),K(null),W(!1),G(!1),Ct(null),Tt(!1)},[e]),(0,H.useEffect)(()=>{let e=!0;return he().then(t=>{e&&Le(t.items)}).catch(()=>void 0),()=>{e=!1}},[_]),(0,H.useEffect)(()=>{if(!se||se.source===`user`)return;Ct(se);let e=window.setTimeout(()=>Ct(null),3500);return()=>window.clearTimeout(e)},[se]),(0,H.useEffect)(()=>{let t=S?.task.projectId,n=S?.dependencies??[];if(!t){yt.current=null,V(null),Pe(n);return}yt.current!==t&&(yt.current=t,V(null));let r=!0;return De(t).then(t=>{if(!r)return;V(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});Pe([...i.values()])}).catch(()=>{r&&Pe(n)}),()=>{r=!1}},[Dt,S?.task.projectId,e]);let J=(0,H.useCallback)(async(t,n=`command`)=>{let r=bt.current;if(r){q(n,!0),k(null);try{await T(await j(e,t,r.task.version),{revalidate:!1})}catch{k(y.actionFailed)}finally{q(n,!1)}}},[y.actionFailed,T,q,e]),Y=(0,H.useCallback)(async(t,n)=>{let r=bt.current;if(!r)return!1;n&&q(n,!0),k(null);try{return await T(A(e,t,r.task.version),{optimisticData:He(r,t),populateCache:!0,revalidate:!1,rollbackOnError:!0}),!0}catch{return k(y.actionFailed),!1}finally{n&&q(n,!1)}},[y.actionFailed,T,q,e]),At=async()=>{if(!S)return;if(mt.current){mt.current=!1;return}let e=Ke.trim(),t=_t.current;if(Ve(t,S.task.version,S.task.title,e)){K(`title`);return}if(!e||e===S.task.title){qe(S.task.title),W(!1);return}await Y({title:e})&&(K(null),W(!1))},jt=async()=>{if(!S)return;if(ht.current){ht.current=!1;return}let e=st.trim(),t=vt.current;if(Ve(t,S.task.version,S.task.body??``,e)){K(`description`);return}if(st===gt.current||e===(S.task.body??``).trim()){G(!1);return}await Y({body:e||null})&&(K(null),G(!1))},Mt=(0,H.useCallback)(async e=>{let t=bt.current;if(!(!t||e===t.task.phase)){if(t.task.phase===`closed`){await J({type:`reopen`,phase:e===`closed`?`ready`:e},`phase`);return}if(e===`closed`){await J({type:`close`,resolution:`done`},`phase`);return}await J({type:`move`,phase:e},`phase`)}},[J]),Nt=(0,H.useCallback)(e=>{Y({priority:e},`priority`)},[Y]),Pt=(0,H.useCallback)(e=>{Y({dueAt:Ge(e)},`dueAt`)},[Y]),Ft=(0,H.useCallback)(e=>{ut(e);try{window.localStorage.setItem($e,String(e))}catch{}},[]),It=(0,H.useCallback)(e=>{if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`&&e.key!==`Home`)return;e.preventDefault();let t=pt.current?.clientWidth??0;Ft(tt(e.key===`Home`?et:lt+(e.key===`ArrowLeft`?2:-2),t))},[lt,Ft]),Lt=(0,H.useCallback)(e=>{if(!window.matchMedia(`(min-width: 1024px)`).matches)return;let t=pt.current;if(!t)return;e.preventDefault();let n=e.currentTarget,r=e.pointerId;n.setPointerCapture(r),ft(!0);let i=lt,a=0,o=()=>{a=0,t.style.setProperty(`--task-chat-panel-width`,`${i}%`)},s=e=>{let n=t.getBoundingClientRect();i=tt((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{}ft(!1),Ft(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)},[lt,Ft]),Rt=(0,H.useCallback)(async t=>{let n=bt.current;if(n){q(`dependencies`,!0),k(null);try{await T(await ve(e,t,n.task.version),{revalidate:!1})}catch{k(y.dependencyUpdateFailed)}finally{q(`dependencies`,!1)}}},[y.dependencyUpdateFailed,T,q,e]),zt=(0,H.useCallback)(async t=>{let n=bt.current;if(!(!n||!t||t===n.conversation.currentExecutorAgentId)){q(`delegateAgentId`,!0),k(null);try{await T(await ue(e,t,n.task.version),{revalidate:!1})}catch{k(y.actionFailed)}finally{q(`delegateAgentId`,!1)}}},[y.actionFailed,T,q,e]),Bt=(0,H.useCallback)(async()=>{q(`delete`,!0),k(null);try{await le(e),r?r():c(Ot,{replace:!0})}catch(e){k(e instanceof Error?e.message:y.actionFailed)}finally{q(`delete`,!1)}},[y.actionFailed,c,r,Ot,q,e]);if((0,H.useLayoutEffect)(()=>{if(t!==`modal`)return b({startExtra:(0,U.jsx)(s,{to:Ot,className:`flex size-9 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover`,"aria-label":y.backToWork,children:(0,U.jsx)(we,{className:`size-4`})}),main:S?(0,U.jsx)(`p`,{className:`truncate text-sm font-semibold text-fg`,children:B?`${B} / ${y.taskLabel}`:y.taskLabel}):null,end:null}),ne},[ne,y.backToWork,y.taskLabel,S,t,B,Ot,b]),C&&!S)return(0,U.jsx)(`div`,{className:t===`modal`?`p-5 text-sm text-danger`:`mx-auto max-w-3xl p-6 text-sm text-danger`,children:y.taskNotFound});if(!S)return(0,U.jsx)(`div`,{className:t===`modal`?`p-5`:`mx-auto max-w-4xl p-4 sm:p-6`,children:(0,U.jsx)(Ue,{})});let Vt=S.waits[0],Ht=S.waits.find(e=>e.kind===`paused`),X=S.receipts[0],Ut=rt(S),Wt=y.detailStatuses[Ut],Gt=S.task.body?.trim()||S.task.contract?.objective.trim(),Kt=S.runs.find(e=>e.id===X?.runId)?.contractVersion===S.task.latestContractVersion?X:void 0,qt=oe(Kt),Jt=new Map(Kt?.verification.checks.map(e=>[e.criterion,e.status===`passed`&&!qt.has(e.criterion)?`unverified`:e.status])),Yt=S.allowedCommands.includes(`mark_ready`),Xt=S.allowedCommands.includes(`start`),Zt=S.allowedCommands.includes(`add_wait`),Qt=!Vt&&S.task.phase===`review`&&S.allowedCommands.includes(`close`),$t=S.allowedCommands.includes(`reopen`),Z=S.conversation.activeConversationId,en=S.conversation.currentExecutorAgentId??S.task.delegateAgentId??S.task.ownerId,tn=Ie.find(e=>e.id===en),nn=!!(Z&&x&&re===Z),rn=S.attention.some(e=>e.kind===`input_required`||e.kind===`approval_required`),an=S.task.contract?.acceptanceCriteria??[],on=an.filter(e=>Jt.get(e)===`passed`).length,sn=S.task.contract?.expectedOutputs??[],cn=S.task.contract?.constraints??[],ln=S.task.contract?.approvalRequired??[],un=S.task.contract?.assumptions??[],dn=S.task.contract?.risks??[],Q=(...e)=>!!St?.changedFields.some(t=>e.includes(t)),fn=S.allowedCommands.includes(`move`),$=z.has(`command`),pn=z.has(`delete`),mn=S.runs.find(e=>!e.parentRunId&&[`queued`,`running`,`waiting`,`verifying`].includes(e.status)),hn=mn!==void 0,gn=`/automations?action=create&taskId=${encodeURIComponent(S.task.id)}${S.task.projectId?`&projectId=${encodeURIComponent(S.task.projectId)}`:``}`,_n=(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[Yt?(0,U.jsxs)(w,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:$,onClick:()=>void J({type:`mark_ready`}),children:[(0,U.jsx)(Ce,{className:`size-4`}),y.scheduleTask]}):null,Ht&&S.allowedCommands.includes(`resolve_wait`)?(0,U.jsxs)(w,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:$,onClick:()=>void J({type:`resolve_wait`,waitId:Ht.id}),children:[(0,U.jsx)(Ce,{className:`size-4`}),y.resumeTask]}):null,!Vt&&Xt&&en?(0,U.jsxs)(w,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:$,onClick:()=>void J({type:`start`,executor:{kind:`agent`,agentId:en}}),children:[(0,U.jsx)(Ce,{className:`size-4`}),y.runTask]}):null,Qt?(0,U.jsxs)(w,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:$,onClick:()=>void J({type:`close`,resolution:`done`}),children:[(0,U.jsx)(u,{className:`size-4`}),y.approveTask]}):null,$t?(0,U.jsxs)(w,{className:`min-h-9 px-3 py-1.5 text-xs`,variant:`primary`,disabled:$,onClick:()=>void J({type:`reopen`,phase:`ready`}),children:[(0,U.jsx)(Ce,{className:`size-4`}),y.reopenTask]}):null,!Ht&&Zt?(0,U.jsxs)(w,{variant:`ghost`,className:`min-h-9 px-3 py-1.5 text-xs`,disabled:$,onClick:()=>void J({type:`add_wait`,wait:{kind:`paused`,reason:`Paused by user`,condition:{}}}),children:[(0,U.jsx)(ke,{className:`size-4`}),y.pauseTask]}):null,S.task.phase===`closed`?null:(0,U.jsx)(w,{asChild:!0,variant:`ghost`,className:`min-h-9 px-3 py-1.5 text-xs`,children:(0,U.jsxs)(s,{to:gn,children:[(0,U.jsx)(de,{className:`size-4`}),y.scheduleRecurringTask]})}),(0,U.jsxs)(pe,{children:[(0,U.jsx)(L,{asChild:!0,children:(0,U.jsx)(w,{type:`button`,variant:`ghost`,className:`size-9 p-0`,disabled:$||pn,"aria-label":y.moreActions,children:(0,U.jsx)(d,{className:`size-4`,"aria-hidden":!0})})}),(0,U.jsx)(I,{children:(0,U.jsxs)(Me,{align:`end`,sideOffset:6,className:`z-[100] min-w-44 rounded-lg border border-edge bg-surface-panel p-1 shadow-popover`,children:[mn?(0,U.jsx)(ce,{className:`cursor-pointer rounded-md px-3 py-2 text-sm text-danger outline-none hover:bg-surface-hover focus:bg-surface-hover`,onSelect:()=>{q(`command`,!0),k(null),T(D(e,mn.id,mn.version),{revalidate:!1}).catch(()=>k(y.actionFailed)).finally(()=>q(`command`,!1))},children:y.cancelActiveRun}):null,mn?(0,U.jsx)(F,{className:`my-1 h-px bg-edge`}):null,S.task.phase===`closed`?null:(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(ce,{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 J({type:`close`,resolution:`cancelled`}),children:y.cancelTask}),(0,U.jsx)(F,{className:`my-1 h-px bg-edge`})]}),(0,U.jsx)(ce,{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(hn){k(y.deleteActiveTaskBlocked);return}Tt(!0)},children:y.deleteTask})]})})]})]}),(0,U.jsx)(Ne,{resource:{kind:`task`,id:S.task.id,revision:String(S.task.version)},disabled:ze||ot||z.size>0}),Z&&t!==`modal`?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(w,{type:`button`,variant:`ghost`,className:v(`h-8 shrink-0 px-2 text-xs`,nn&&`bg-surface-hover text-fg`),"aria-label":l===`zh`?`项目文件`:`Project files`,"aria-pressed":nn,onClick:()=>{ae(Z,!1),ie(Z)},children:[(0,U.jsx)(g,{className:`size-3.5`,"aria-hidden":!0}),l===`zh`?`文件`:`Files`]}),(0,U.jsx)(w,{asChild:!0,variant:`ghost`,className:`h-8 shrink-0 px-2 text-xs`,children:(0,U.jsxs)(s,{to:Se(e),children:[(0,U.jsx)(f,{className:`size-3.5`}),l===`zh`?`全屏`:`Full screen`]})})]}):null]});return(0,U.jsxs)(`div`,{ref:pt,className:`${t===`modal`?`flex h-full min-h-0 flex-col`:`flex min-h-[calc(100dvh-8rem)] flex-col overflow-hidden`} ${dt?`lg:cursor-col-resize lg:select-none`:``}`,style:{"--task-chat-panel-width":`${lt}%`},children:[(0,U.jsxs)(`header`,{className:v(`shrink-0 border-b border-edge-subtle bg-surface-panel px-5 py-4 sm:px-6`,Q(`title`)&&`task-detail-live-update`),children:[(0,U.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-x-6 gap-y-3`,children:[(0,U.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs text-fg-muted`,children:[B?(0,U.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,U.jsx)(Te,{className:`size-3.5`,"aria-hidden":!0}),B]}):null,B?(0,U.jsx)(`span`,{"aria-hidden":`true`,children:`/`}):null,(0,U.jsx)(`span`,{children:y.taskLabel}),St?(0,U.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,role:`status`,children:St.source===`agent`?l===`zh`?`Agent 刚刚更新`:`Updated by Agent`:l===`zh`?`执行结果已同步`:`Execution result synced`}):null]}),ze?(0,U.jsx)(`input`,{autoFocus:!0,"data-task-inline-editor":!0,value:Ke,onChange:e=>qe(e.target.value),onBlur:()=>void At(),onKeyDown:e=>{e.key===`Enter`&&e.currentTarget.blur(),e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),mt.current=!0,qe(S.task.title),W(!1),queueMicrotask(()=>{mt.current=!1}))},className:`mt-2 w-full max-w-3xl rounded-lg bg-surface-hover px-3 py-2 text-xl font-semibold leading-7 text-fg outline-none ring-2 ring-accent/30 focus:ring-accent/60`}):(0,U.jsx)(`button`,{type:`button`,className:`mt-2 block max-w-full rounded-lg text-left outline-none hover:bg-surface-hover focus-visible:bg-surface-hover`,onClick:()=>{_t.current={value:S.task.title,version:S.task.version},K(null),qe(S.task.title),W(!0)},children:(0,U.jsx)(`h1`,{className:`break-words text-xl font-semibold leading-7 text-fg`,children:S.task.title})}),xt===`title`?(0,U.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs text-warning`,role:`alert`,children:[(0,U.jsx)(`span`,{children:l===`zh`?`Agent 在你编辑期间更新了标题。`:`The Agent updated the title while you were editing.`}),(0,U.jsx)(`button`,{type:`button`,className:`rounded-md bg-surface-hover px-2 py-1 text-fg`,onClick:()=>{qe(S.task.title),K(null),W(!1)},children:l===`zh`?`使用 Agent 版本`:`Use Agent version`}),(0,U.jsx)(`button`,{type:`button`,className:`rounded-md bg-accent-soft px-2 py-1 text-accent-fg`,onClick:()=>void Y({title:Ke.trim()}).then(e=>{e&&(K(null),W(!1))}),children:l===`zh`?`保留我的修改`:`Keep my changes`})]}):null]}),(0,U.jsx)(`span`,{className:v(`shrink-0 rounded-full px-2.5 py-1 text-xs font-medium`,it(Ut)),children:Wt})]}),(0,U.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-x-4 gap-y-2 text-xs text-fg-muted`,children:[(0,U.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-2`,children:[en?(0,U.jsx)(me,{agentId:en,avatar:tn?.avatar,size:20,className:`shrink-0`}):null,(0,U.jsxs)(`span`,{className:`truncate`,children:[y.executorLabel,` · `,tn?.name??en??y.unassigned]})]}),(0,U.jsx)(`span`,{className:`text-fg-subtle`,children:y.updatedAt.replace(`{{date}}`,Ee(S.task.updatedAt,l))})]}),(0,U.jsx)(`div`,{className:`mt-4 border-t border-edge-subtle pt-3`,children:_n}),O?(0,U.jsx)(`p`,{className:`mt-3 text-sm text-danger`,children:O}):null]}),(0,U.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col lg:flex-row`,children:[(0,U.jsxs)(`section`,{className:`task-detail-scroll min-w-0 flex-1 overflow-y-auto overscroll-contain p-5 sm:p-6`,children:[S.attention.length>0?(0,U.jsxs)(`section`,{className:v(`mb-4 rounded-xl border border-warning/20 bg-warning/10 p-4`,Q(`attention`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:rn?y.needsAttention:y.waitingStatus}),(0,U.jsx)(`ul`,{className:`mt-2 space-y-1.5 text-sm leading-6 text-fg-muted`,children:S.attention.map((t,n)=>(0,U.jsxs)(`li`,{className:`flex flex-wrap items-start justify-between gap-2`,children:[(0,U.jsx)(`span`,{className:`min-w-0 flex-1`,children:t.summary}),t.kind===`input_required`||t.kind===`approval_required`?(0,U.jsx)(s,{className:`inline-flex min-h-11 items-center rounded-lg bg-surface-panel px-3 text-sm font-medium text-accent`,to:Se(e),children:l===`zh`?t.kind===`approval_required`?`查看并决定`:`补充信息`:t.kind===`approval_required`?`Review decision`:`Provide information`}):null]},`${t.kind}-${n}`))})]}):null,S.task.phase!==`closed`&&!Ht&&S.waits.filter(e=>(e.kind===`user_input`||e.kind===`approval`&&typeof e.condition.capability==`string`)&&e.condition.type!==`connection`).map(e=>(0,U.jsx)(Fe,{wait:e,detail:S,zh:l===`zh`,onUpdated:e=>{T(e,{revalidate:!1})}},e.id)),(0,U.jsx)(`div`,{className:`mb-4`,children:(0,U.jsx)(Be,{taskId:e},e)}),(0,U.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,U.jsxs)(`main`,{className:`min-w-0 overflow-hidden rounded-xl bg-surface-panel shadow-surface divide-y divide-edge-subtle`,children:[(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`body`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.taskDescription}),ot?(0,U.jsx)(`textarea`,{autoFocus:!0,"data-task-inline-editor":!0,rows:6,value:st,onChange:e=>ct(e.target.value),onBlur:()=>void jt(),onKeyDown:e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),ht.current=!0,ct(S.task.body??S.task.contract?.objective??``),G(!1),queueMicrotask(()=>{ht.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,U.jsx)(`button`,{type:`button`,className:`-mx-1 mt-2 block w-[calc(100%+0.5rem)] rounded-lg px-1 py-1 text-left outline-none hover:bg-surface-hover focus-visible:bg-surface-hover`,onClick:()=>{let e=S.task.body??S.task.contract?.objective??``;gt.current=e,vt.current={value:S.task.body??``,version:S.task.version},K(null),ct(e),G(!0)},children:(0,U.jsx)(`span`,{className:`whitespace-pre-wrap text-sm leading-6 text-fg-muted`,children:Gt&&Gt!==S.task.title?Gt:y.noTaskDescription})}),xt===`description`?(0,U.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-2 text-xs text-warning`,role:`alert`,children:[(0,U.jsx)(`span`,{children:l===`zh`?`Agent 在你编辑期间更新了描述。`:`The Agent updated the description while you were editing.`}),(0,U.jsx)(`button`,{type:`button`,className:`rounded-md bg-surface-hover px-2 py-1 text-fg`,onClick:()=>{ct(S.task.body??``),K(null),G(!1)},children:l===`zh`?`使用 Agent 版本`:`Use Agent version`}),(0,U.jsx)(`button`,{type:`button`,className:`rounded-md bg-accent-soft px-2 py-1 text-accent-fg`,onClick:()=>void Y({body:st.trim()||null}).then(e=>{e&&(K(null),G(!1))}),children:l===`zh`?`保留我的修改`:`Keep my changes`})]}):null]}),(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`contract`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.taskDefinition}),(0,U.jsxs)(`div`,{className:`mt-5`,children:[(0,U.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,U.jsx)(`h3`,{className:`text-sm font-medium text-fg`,children:y.successDefinition}),an.length>0?(0,U.jsx)(`span`,{className:`text-xs text-fg-subtle`,children:y.criteriaProgress.replace(`{{verified}}`,String(on)).replace(`{{total}}`,String(an.length))}):null]}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:an,empty:y.noDefinition,verificationByCriterion:Jt})})]}),sn.length>0?(0,U.jsxs)(`div`,{className:`mt-5 border-t border-edge-subtle pt-5`,children:[(0,U.jsx)(`h3`,{className:`text-sm font-medium text-fg`,children:y.expectedOutputs}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:sn,empty:y.noDefinition})})]}):null,cn.length>0?(0,U.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:y.constraints}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:cn,empty:y.noDefinition})})]}):null,ln.length>0?(0,U.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:y.approvalRequired}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:ln,empty:y.noDefinition})})]}):null,un.length>0?(0,U.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:y.contextAssumptions}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:un,empty:y.noDefinition})})]}):null,dn.length>0?(0,U.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:y.contextRisks}),(0,U.jsx)(`div`,{className:`mt-3`,children:(0,U.jsx)(at,{items:dn,empty:y.noDefinition})})]}):null]}),X?(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`runs`,`receipts`)&&`task-detail-live-update`),children:[(0,U.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,U.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.latestResult}),(0,U.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:l===`zh`?X.completionVerdict===`achieved`?`本次执行报告目标已达成,请结合下方验证依据验收。`:`这是阶段性结果,尚不能代表任务全部完成。`:X.completionVerdict===`achieved`?`The run reports the goal achieved. Review the evidence below.`:`This is a partial result; the task is not yet fully complete.`}),(0,U.jsx)(h,{content:X.summary,compact:!0,className:`mt-2 text-sm leading-6 text-fg`})]}),(0,U.jsxs)(`span`,{className:`rounded-full bg-surface-hover px-2.5 py-1 text-xs text-fg-muted`,children:[y.receiptStatuses[X.status],` · `,y.verificationStatuses[X.verification.status]]})]}),X.remainingWork.length>0?(0,U.jsxs)(`div`,{className:`mt-4`,children:[(0,U.jsx)(`h3`,{className:`text-xs font-medium text-fg-muted`,children:y.remainingWork}),(0,U.jsx)(`div`,{className:`mt-2`,children:(0,U.jsx)(at,{items:X.remainingWork,empty:y.noRemainingWork})})]}):null,X.nextAction?(0,U.jsxs)(`div`,{className:`mt-4 rounded-lg bg-surface-hover p-3`,children:[(0,U.jsx)(`p`,{className:`text-xs font-medium text-fg-muted`,children:y.nextAction}),(0,U.jsx)(`p`,{className:`mt-1 text-sm text-fg`,children:X.nextAction})]}):null,(0,U.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[(0,U.jsx)(w,{className:`border-0 bg-surface-hover px-2 py-1 text-xs shadow-none`,variant:`secondary`,onClick:()=>void R(X.runId,`helpful`),children:y.doneWell}),(0,U.jsx)(w,{className:`px-2 py-1 text-xs`,variant:`ghost`,onClick:()=>void R(X.runId,`not_helpful`),children:y.needsFix})]}),(0,U.jsx)(Re,{evidence:X.evidence,projectId:S.task.projectId,conversationId:Z??void 0,language:l}),S.receipts.length>1?(0,U.jsxs)(`details`,{className:`mt-4 border-t border-edge-subtle pt-4`,children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-sm font-medium text-fg-muted hover:text-fg`,children:y.executionHistory.replace(`{{count}}`,String(S.receipts.length-1))}),(0,U.jsx)(`div`,{className:`mt-3 space-y-3`,children:S.receipts.slice(1).map(e=>(0,U.jsx)(`article`,{className:`rounded-lg bg-surface-hover p-3`,children:(0,U.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,U.jsx)(`p`,{className:`text-sm text-fg`,children:e.summary}),(0,U.jsx)(`span`,{className:`shrink-0 text-xs text-fg-subtle`,children:y.receiptStatuses[e.status]})]})},e.runId))})]}):null]}):null,S.context.length>0?(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`context`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.contextUsed}),(0,U.jsx)(`ul`,{className:`mt-4 grid gap-2 sm:grid-cols-2`,children:S.context.map(e=>(0,U.jsxs)(`li`,{className:`min-w-0 rounded-lg bg-surface-hover p-2.5`,children:[(0,U.jsxs)(`span`,{className:`text-[11px] text-fg-subtle`,children:[y.contextRoleLabels[e.role],` · `,y.contextKindLabels[e.targetKind]]}),e.targetKind===`url`&&/^https?:\/\//.test(e.targetId)?(0,U.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,U.jsx)(`p`,{className:`mt-1 break-words text-sm text-fg`,children:e.title??e.targetId})]},e.id))})]}):null]}),(0,U.jsxs)(`aside`,{className:`min-w-0 overflow-hidden rounded-xl bg-surface-panel shadow-surface divide-y divide-edge-subtle`,children:[(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`phase`,`resolution`,`priority`,`dueAt`,`delegateAgentId`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.taskProperties}),(0,U.jsxs)(`div`,{className:`mt-4 grid gap-3 sm:grid-cols-2`,children:[(0,U.jsx)(Je,{value:S.task.phase,disabled:z.has(`phase`),canMove:fn,canApprove:Qt,canReopen:$t,language:l,label:y.taskPhase,onChange:Mt}),(0,U.jsx)(Ye,{value:S.task.priority,disabled:z.has(`priority`),label:y.priority,labels:y.priorityLabels,onChange:Nt}),(0,U.jsx)(Xe,{value:We(S.task.dueAt),disabled:z.has(`dueAt`),label:y.dueDate,onChange:Pt}),(0,U.jsx)(Ze,{value:S.conversation.currentExecutorAgentId??``,disabled:z.has(`delegateAgentId`),label:y.executorLabel,unassignedLabel:y.unassigned,agents:Ie,onChange:zt})]})]}),(0,U.jsxs)(`section`,{className:v(`p-5`,Q(`dependencies`)&&`task-detail-live-update`),children:[(0,U.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:y.taskRelations}),(0,U.jsxs)(`div`,{className:`mt-4 space-y-4`,children:[(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`p`,{className:`mb-2 text-xs text-fg-muted`,children:y.dependencies}),(0,U.jsx)(Qe,{candidates:Ae,selected:S.dependencies,disabled:z.has(`dependencies`),labels:Et,getTaskHref:kt,onChange:Rt})]}),(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`p`,{className:`mb-2 text-xs text-fg-muted`,children:y.dependents}),S.dependents.length>0?(0,U.jsx)(`div`,{className:`space-y-1.5`,children:S.dependents.map(e=>(0,U.jsx)(s,{to:kt(e.id),className:`block rounded-lg bg-surface-hover p-2.5 text-sm text-fg-muted transition-colors hover:text-fg`,children:e.title},e.id))}):(0,U.jsx)(`p`,{className:`text-sm text-fg-subtle`,children:y.noDependents})]})]})]})]})]})]}),(0,U.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-label":l===`zh`?`调整任务信息和 Agent 对话的宽度`:`Resize task details and Agent chat`,"aria-valuemin":30,"aria-valuemax":60,"aria-valuenow":Math.round(lt),tabIndex:0,onPointerDown:Lt,onKeyDown:It,onDoubleClick:()=>Ft(et),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 ${dt?`bg-surface-hover`:``}`,children:(0,U.jsx)(`div`,{className:`my-3 w-px rounded-full bg-edge-strong/70 transition-colors group-hover:bg-accent group-focus-visible:bg-accent`})}),(0,U.jsxs)(`aside`,{className:`flex min-h-[34rem] min-w-0 flex-col bg-surface-panel lg:min-h-0 lg:w-[var(--task-chat-panel-width)] lg:shrink-0`,children:[(0,U.jsx)(`div`,{className:`flex shrink-0 items-center border-b border-edge-subtle px-4 py-3`,children:(0,U.jsx)(`h2`,{className:`text-sm font-medium text-fg-muted`,children:l===`zh`?`执行对话`:`Execution chat`})}),Z?(0,U.jsx)(`div`,{className:`min-h-0 flex-1`,children:(0,U.jsx)(be,{embedded:!0,conversationId:Z,taskId:e})}):fe?(0,U.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,U.jsxs)(`div`,{className:`max-w-xs`,children:[(0,U.jsx)(_e,{className:`mx-auto size-8 animate-pulse text-fg-subtle`}),(0,U.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:l===`zh`?`正在创建任务会话`:`Creating task conversation`})]})}):E?(0,U.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,U.jsxs)(`div`,{className:`max-w-xs`,children:[(0,U.jsx)(_e,{className:`mx-auto size-8 text-danger`}),(0,U.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:l===`zh`?`任务会话创建失败`:`Could not create task conversation`}),(0,U.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-muted`,children:E instanceof Error?E.message:String(E)})]})}):(0,U.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-8 text-center`,children:(0,U.jsxs)(`div`,{className:`max-w-xs`,children:[(0,U.jsx)(_e,{className:`mx-auto size-8 text-fg-subtle`}),(0,U.jsx)(`p`,{className:`mt-3 text-sm font-medium text-fg`,children:l===`zh`?`等待任务会话`:`Waiting for a task conversation`}),(0,U.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-fg-muted`,children:l===`zh`?`安排或开始任务后,Agent 的执行过程和持续对话会显示在这里。`:`Schedule or start the task to see the agent run and continue the conversation here.`})]})})]})]}),(0,U.jsx)(N,{open:wt,title:y.deleteTaskTitle,description:y.deleteTaskDescription.replace(`{{title}}`,S.task.title),confirmLabel:y.confirmDeleteTask,cancelLabel:y.keepTask,destructive:!0,onConfirm:()=>{Tt(!1),Bt()},onCancel:()=>Tt(!1)})]})}function G(){let e=(0,V.c)(2),{taskId:t}=o(),n=t===void 0?``:t,r;return e[0]===n?r=e[1]:(r=(0,U.jsx)(ot,{taskId:n,presentation:`page`}),e[0]=n,e[1]=r),r}function st(e){let t=(0,V.c)(58),{taskId:n,backgroundPath:r,onClose:i}=e,a=te(_t),{data:o}=ge(n),c=o?.conversation.activeConversationId??null,l=P(gt),u=P(ht),d=P(mt),p=P(pt),m=je(ft),h=fe(dt),y=fe(ut),ee=l?u:0,b;t[0]!==i||t[1]!==y?(b=e=>{e||(y(null),i())},t[0]=i,t[1]=y,t[2]=b):b=t[2];let oe=a===`zh`?`关闭任务详情`:`Close task details`,C;t[3]!==i||t[4]!==y?(C=()=>{y(null),i()},t[3]=i,t[4]=y,t[5]=C):C=t[5];let w;t[6]!==oe||t[7]!==C?(w=(0,U.jsx)(`button`,{type:`button`,tabIndex:-1,"data-task-modal-backdrop":!0,className:`fixed inset-0 z-[80] bg-black/45 backdrop-blur-[1px]`,"aria-label":oe,onClick:C}),t[6]=oe,t[7]=C,t[8]=w):w=t[8];let T=l?`true`:`false`,ce=`${ee/2}px`,le=`${ee}px`,ue;t[9]!==ce||t[10]!==le?(ue={"--task-detail-workspace-offset":ce,"--task-detail-workspace-width":le},t[9]=ce,t[10]=le,t[11]=ue):ue=t[11];let de=ue,pe=a===`zh`?`任务详情`:`Task details`,E;t[12]===pe?E=t[13]:(E=(0,U.jsx)(ae,{className:`font-medium text-fg`,children:pe}),t[12]=pe,t[13]=E);let me=a===`zh`?`查看并操作任务详情`:`View and manage task details`,D;t[14]===me?D=t[15]:(D=(0,U.jsx)(ne,{className:`sr-only`,children:me}),t[14]=me,t[15]=D);let O;t[16]!==c||t[17]!==a||t[18]!==p||t[19]!==m||t[20]!==n||t[21]!==d||t[22]!==l?(O=c?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`button`,{type:`button`,className:v(`flex size-8 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg`,l&&d===c&&`bg-surface-hover text-fg`),"aria-label":a===`zh`?`项目文件`:`Project files`,title:a===`zh`?`项目文件`:`Project files`,"aria-pressed":l&&d===c,onClick:()=>{m(c,!1),p(c)},children:(0,U.jsx)(g,{className:`size-4`,"aria-hidden":!0})}),(0,U.jsx)(s,{to:Se(n),className:`flex size-8 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg`,"aria-label":a===`zh`?`全屏打开对话`:`Open chat full screen`,title:a===`zh`?`全屏打开对话`:`Open chat full screen`,children:(0,U.jsx)(f,{className:`size-4`,"aria-hidden":!0})})]}):null,t[16]=c,t[17]=a,t[18]=p,t[19]=m,t[20]=n,t[21]=d,t[22]=l,t[23]=O):O=t[23];let k=a===`zh`?`关闭任务详情`:`Close task details`,he;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(he=(0,U.jsx)(_,{className:`size-4`,"aria-hidden":!0}),t[24]=he):he=t[24];let A;t[25]===k?A=t[26]:(A=(0,U.jsx)(x,{className:`flex size-8 items-center justify-center rounded-lg text-fg-muted hover:bg-surface-hover hover:text-fg`,"aria-label":k,children:he}),t[25]=k,t[26]=A);let j;t[27]!==O||t[28]!==A?(j=(0,U.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[O,A]}),t[27]=O,t[28]=A,t[29]=j):j=t[29];let M;t[30]!==E||t[31]!==D||t[32]!==j?(M=(0,U.jsxs)(`header`,{className:`flex shrink-0 items-center justify-between gap-3 bg-surface-panel px-5 py-3.5`,children:[E,D,j]}),t[30]=E,t[31]=D,t[32]=j,t[33]=M):M=t[33];let N;t[34]!==i||t[35]!==y?(N=()=>{y(null),i()},t[34]=i,t[35]=y,t[36]=N):N=t[36];let F;t[37]!==r||t[38]!==N||t[39]!==n?(F=(0,U.jsx)(`div`,{className:`min-h-0 flex-1 overflow-hidden`,children:(0,U.jsx)(ot,{taskId:n,presentation:`modal`,backgroundPath:r,onDeleted:N})}),t[37]=r,t[38]=N,t[39]=n,t[40]=F):F=t[40];let I;t[41]!==M||t[42]!==F||t[43]!==T||t[44]!==de?(I=(0,U.jsxs)(ie,{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":T,style:de,onEscapeKeyDown:lt,onInteractOutside:ct,children:[M,F]}),t[41]=M,t[42]=F,t[43]=T,t[44]=de,t[45]=I):I=t[45];let L;t[46]!==h||t[47]!==d||t[48]!==l||t[49]!==u?(L=h?(0,U.jsx)(`div`,{className:`fixed inset-y-0 left-0 z-[100] flex min-h-0 min-w-0 overflow-hidden bg-surface-panel transition-[right] duration-200 ease-out motion-reduce:transition-none`,style:{right:l?u:0},children:(0,U.jsx)(se,{allowOutsideChat:!0,conversationId:d??void 0})}):null,t[46]=h,t[47]=d,t[48]=l,t[49]=u,t[50]=L):L=t[50];let R;t[51]!==I||t[52]!==L||t[53]!==w?(R=(0,U.jsxs)(re,{children:[w,I,L]}),t[51]=I,t[52]=L,t[53]=w,t[54]=R):R=t[54];let z;return t[55]!==b||t[56]!==R?(z=(0,U.jsx)(S,{modal:!1,open:!0,onOpenChange:b,children:R}),t[55]=b,t[56]=R,t[57]=z):z=t[57],z}function ct(e){let t=e.detail.originalEvent.target;t instanceof Element&&t.closest(`#app-workspace-panel, [data-task-modal-backdrop]`)&&e.preventDefault()}function lt(e){let t=e.target;t instanceof HTMLElement&&t.closest(`[data-task-inline-editor]`)&&e.preventDefault()}function ut(e){return e.setPath}function dt(e){return e.path}function ft(e){return e.setOpen}function pt(e){return e.openForSession}function mt(e){return e.conversationIdOverride}function ht(e){return e.widthPx}function gt(e){return e.open}function _t(e){return e.language}function vt(e){return(0,U.jsx)(l,{value:e.id,children:e.name||e.id},e.id)}function yt(e){return e.id}export{st as TaskDetailModal,G 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{t as i}from"./external-link-DjqjBmc3.js";import{t as a}from"./globe-DSSGFWFn.js";import{t as o}from"./loader-circle-CifKLtgG.js";import{t as s}from"./messages-sXePe3LQ.js";import{t as c}from"./cn-JdwAhgNB.js";import{a as l,c as u,i as d,n as ee,r as f}from"./locale-store-WMaCMm3_.js";import{i as p}from"./vendor-swr-BIWyz7Rc.js";import{t as m}from"./button-CS04eWY9.js";import{n as h,r as g}from"./gateway-config-swr-CmjHbMj7.js";import{t as _}from"./skeleton-BwbyijEw.js";import{$c as v,Eo as y,Lo as b,ua as x}from"./index-Bb32g7Ll.js";import{n as te,t as ne}from"./settings-form-section-BwdrtX6k.js";var S=e(t(),1),C=n(),w=r();function T(e){let t=(0,C.c)(10),{language:n,label:r,section:a,className:o}=e,s;t[0]!==n||t[1]!==a?(s=y(n,a),t[0]=n,t[1]=a,t[2]=s):s=t[2];let l;t[3]===o?l=t[4]:(l=c(`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`,o),t[3]=o,t[4]=l);let u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,w.jsx)(i,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t[5]=u):u=t[5];let d;return t[6]!==r||t[7]!==s||t[8]!==l?(d=(0,w.jsxs)(`a`,{href:s,target:`_blank`,rel:`noreferrer`,className:l,children:[r,u]}),t[6]=r,t[7]=s,t[8]=l,t[9]=d):d=t[9],d}async function E(){let e=await d(`/api/exposure/status`);if(!e.ok)throw Error(`Failed to load exposure status (${e.status})`);return await e.json()}async function D(e=`serve`){let t=await d(`/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 O(){let e=await d(`/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 k=`https://tailscale.com/download`;function A(e){let t=(0,C.c)(2),{label:n}=e,r;return t[0]===n?r=t[1]:(r=(0,w.jsx)(`a`,{href:k,target:`_blank`,rel:`noreferrer`,className:`font-medium text-accent hover:underline`,children:n}),t[0]=n,t[1]=r),r}function j({embedded:e=!1}){let t=ee(e=>e.language),n=s(t).remoteAccess.tailscale,r=(0,S.useMemo)(()=>({copy:n.copyUrl,copied:n.copied,copyFailed:s(t).clipboard.copyFailed}),[t,n.copyUrl,n.copied]),i=!!u(e=>e.conversationId),[c,l]=(0,S.useState)(!1),[d,f]=(0,S.useState)(null),{data:h,mutate:g,isLoading:y}=p(i?`exposure-status`:null,E,{refreshInterval:3e4}),b=h?.tailscale.hostname,C=h?.tailscale.active===!0,k=h?.tailscale.cliAvailable!==!1,j=b?`https://${b}/`:null,re=(0,S.useCallback)(async()=>{l(!0),f(null);try{await D(`serve`),await g()}catch(e){f(e instanceof Error?e.message:String(e))}finally{l(!1)}},[g]),ie=(0,S.useCallback)(async()=>{l(!0),f(null);try{await O(),await g()}catch(e){f(e instanceof Error?e.message:String(e))}finally{l(!1)}},[g]);if(!i)return null;let M=(0,w.jsxs)(`div`,{className:e?`space-y-4`:`mt-4 space-y-3`,children:[e?(0,w.jsxs)(`ol`,{className:`space-y-3 text-sm text-fg-muted`,children:[(0,w.jsxs)(`li`,{className:`flex gap-2`,children:[(0,w.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,w.jsxs)(`span`,{children:[n.stepInstallBefore,(0,w.jsx)(A,{label:n.stepInstallLink}),n.stepInstallAfter]})]}),(0,w.jsxs)(`li`,{className:`flex gap-2`,children:[(0,w.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,w.jsx)(`span`,{children:n.stepEnable})]}),(0,w.jsxs)(`li`,{className:`flex gap-2`,children:[(0,w.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,w.jsx)(`span`,{children:n.stepCopy})]})]}):null,e&&h?.tailscale.cliAvailable===!1?(0,w.jsxs)(`p`,{className:`rounded-lg bg-amber-500/10 px-3 py-2 text-sm text-fg-muted`,children:[n.cliMissingIntro,` `,(0,w.jsx)(A,{label:n.cliMissingDownloadLink}),n.cliMissingSuffix]}):null,y&&!h?(0,w.jsxs)(`div`,{className:`grid gap-3`,"aria-busy":`true`,children:[(0,w.jsx)(_,{className:`h-20 rounded-lg`}),(0,w.jsx)(_,{className:`h-20 rounded-lg`})]}):(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(ne,{children:[(0,w.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:n.statusLabel}),(0,w.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:C?n.statusActive:n.statusOff}),j?(0,w.jsx)(`div`,{className:`mt-3`,children:(0,w.jsx)(x,{text:j,labels:r})}):null,d?(0,w.jsx)(`p`,{className:`mt-2 text-sm text-red-600 dark:text-red-400`,children:d}):null,(0,w.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:C?(0,w.jsxs)(m,{type:`button`,variant:`secondary`,disabled:c,onClick:()=>void ie(),children:[c?(0,w.jsx)(o,{className:`mr-1 size-4 animate-spin`}):null,n.disableServe]}):(0,w.jsxs)(m,{type:`button`,disabled:c||!k,onClick:()=>void re(),children:[c?(0,w.jsx)(o,{className:`mr-1 size-4 animate-spin`}):(0,w.jsx)(v,{className:`mr-1 size-4`}),n.enableServe]})})]}),(0,w.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:n.hint}),(0,w.jsx)(T,{language:t,label:n.docsLink,section:`tailscale-serve`,className:`mt-2`})]})]});return e?M:(0,w.jsxs)(ne,{children:[(0,w.jsx)(te,{icon:a,title:n.title,subtitle:n.subtitle}),M]})}async function re(e){let t=await d(f(`/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 ie(e){await l(f(`/api/config`),{method:`PATCH`,body:JSON.stringify({gateway:{publicUrl:e??null}})})}function M(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 ae(){return(0,S.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`)||M(r)?null:n.toLowerCase().replace(/\/+$/,``)},[])}function oe(){return c(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,b,`dark:border-edge`)}function se(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 ce(){let e=(0,C.c)(85),t=ee(ue),n;e[0]===t?n=e[1]:(n=s(t),e[0]=t,e[1]=n);let r=n.remoteAccess.reverseProxy,i=!!u(le),l=ae(),d=g(i).data?.payload?.config,f;e[2]===d?f=e[3]:(f=se(d),e[2]=d,e[3]=f);let p=f,[_,v]=(0,S.useState)(``),y;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(y={busy:!1,result:null},e[4]=y):y=e[4];let[b,x]=(0,S.useState)(y),T;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(T={busy:!1,error:null},e[5]=T):T=e[5];let[E,D]=(0,S.useState)(T),O,k;e[6]!==p||e[7]!==l||e[8]!==_?(O=()=>{_||(p?v(p):l&&v(l))},k=[p,l,_],e[6]=p,e[7]=l,e[8]=_,e[9]=O,e[10]=k):(O=e[9],k=e[10]),(0,S.useEffect)(O,k);let A;bb0:{let t;e[11]===_?t=e[12]:(t=_.trim(),e[11]=_,e[12]=t);let n=t;if(n){A=n;break bb0}A=p??l??``}let j=A,M=!p&&!!l&&j===l,ce;e[13]!==_||e[14]!==j?(ce=async()=>{let e=_.trim()||j;if(e){x({busy:!0,result:null});try{x({busy:!1,result:await re(e)})}catch(e){let t=e;x({busy:!1,result:{ok:!1,code:`NETWORK_ERROR`,message:t instanceof Error?t.message:String(t)}})}}},e[13]=_,e[14]=j,e[15]=ce):ce=e[15];let fe=ce,N;e[16]===j?N=e[17]:(N=async()=>{let e=j.trim();if(e){D({busy:!0,error:null});try{await ie(e),await h(),D({busy:!1,error:null})}catch(e){let t=e;D({busy:!1,error:t instanceof Error?t.message:String(t)})}}},e[16]=j,e[17]=N);let pe=N,P;e[18]===Symbol.for(`react.memo_cache_sentinel`)?(P=async()=>{D({busy:!0,error:null});try{await ie(null),await h(),v(``),x({busy:!1,result:null}),D({busy:!1,error:null})}catch(e){let t=e;D({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,w.jsx)(te,{icon:a,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,w.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=c(oe(),`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=>{v(e.target.value),x({busy:!1,result:null})},e[25]=R):R=e[25];let z;e[26]!==_||e[27]!==r.urlPlaceholder||e[28]!==L?(z=(0,w.jsx)(`input`,{id:`reverse-proxy-url`,className:L,type:`text`,autoComplete:`off`,spellCheck:!1,placeholder:r.urlPlaceholder,value:_,onChange:R}),e[26]=_,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]!==_||e[33]!==b.busy?(V=b.busy||!_.trim(),e[32]=_,e[33]=b.busy,e[34]=V):V=e[34];let H;e[35]===b.busy?H=e[36]:(H=b.busy?(0,w.jsx)(o,{className:`size-3.5 animate-spin`}):null,e[35]=b.busy,e[36]=H);let he=b.busy?r.probing:r.probeButton,U;e[37]!==B||e[38]!==V||e[39]!==H||e[40]!==he?(U=(0,w.jsxs)(m,{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,w.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,w.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:r.urlHint}),e[45]=r.urlHint,e[46]=G);let K;e[47]!==l||e[48]!==M||e[49]!==r.autoDetectedHint||e[50]!==r.autoDetectedTitle?(K=M&&l?(0,w.jsxs)(`div`,{className:`rounded-lg bg-accent-soft/60 px-3 py-2 text-xs leading-relaxed text-accent-fg`,children:[(0,w.jsx)(`div`,{className:`font-medium`,children:r.autoDetectedTitle}),(0,w.jsx)(`div`,{className:`mt-1 break-all font-mono text-[11px]`,children:l}),(0,w.jsx)(`p`,{className:`mt-1`,children:r.autoDetectedHint})]}):null,e[47]=l,e[48]=M,e[49]=r.autoDetectedHint,e[50]=r.autoDetectedTitle,e[51]=K):K=e[51];let q;e[52]!==b.result||e[53]!==r.probeStatus?(q=b.result?(0,w.jsx)(de,{result:b.result,labels:r.probeStatus}):null,e[52]=b.result,e[53]=r.probeStatus,e[54]=q):q=e[54];let J;e[55]!==p||e[56]!==j||e[57]!==pe||e[58]!==r.saveAsDefault||e[59]!==r.saving||e[60]!==E.busy?(J=j&&p!==j?(0,w.jsxs)(m,{type:`button`,onClick:()=>void pe(),disabled:E.busy,children:[E.busy?(0,w.jsx)(o,{className:`size-3.5 animate-spin`}):null,E.busy?r.saving:r.saveAsDefault]}):null,e[55]=p,e[56]=j,e[57]=pe,e[58]=r.saveAsDefault,e[59]=r.saving,e[60]=E.busy,e[61]=J):J=e[61];let Y;e[62]!==p||e[63]!==r.clear||e[64]!==E.busy?(Y=p?(0,w.jsx)(m,{type:`button`,variant:`ghost`,onClick:()=>void me(),disabled:E.busy,children:r.clear}):null,e[62]=p,e[63]=r.clear,e[64]=E.busy,e[65]=Y):Y=e[65];let X;e[66]!==J||e[67]!==Y?(X=(0,w.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]===E.error?Z=e[70]:(Z=E.error?(0,w.jsx)(`p`,{className:`text-xs text-red-800 dark:text-red-200`,children:E.error}):null,e[69]=E.error,e[70]=Z);let Q;e[71]===r.certWarning?Q=e[72]:(Q=(0,w.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,w.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,w.jsx)(`div`,{className:`flex flex-col gap-4`,children:(0,w.jsxs)(ne,{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,C.c)(18),{result:n,labels:r}=e;if(n.ok){let e;t[0]===r.ok?e=t[1]:(e=(0,w.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,w.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,w.jsxs)(w.Fragment,{children:[` · `,(0,w.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,w.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,w.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,w.jsxs)(w.Fragment,{children:[` — `,(0,w.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,w.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 l(f(`/api/device-pairing/readiness`));return{ready:e.ready,routes:e.routes,protocolVersion:e.protocolVersion}}async function N(e){try{return{kind:`ready`,setup:(await l(f(`/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 l(f(`/api/device-pairing/setups/${encodeURIComponent(e)}`))}async function P(e){await l(f(`/api/device-pairing/setups/${encodeURIComponent(e)}`),{method:`DELETE`})}async function me(e,t){await l(f(`/api/device-pairing/requests/${encodeURIComponent(e.requestId)}/decision`),{method:`POST`,body:JSON.stringify({decision:t,expectedRevision:e.revision})})}async function F(){let e=await d(f(`/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.error;if(!n||typeof n!=`object`)return;let r=n.code;return typeof r==`string`?r:void 0}function R(e){return[`tunnel_oauth_required`,`invalid_token`,`insufficient_scope`].includes(L(e)??``)}async function z(){return l(f(`/api/tunnel/status`))}async function B(){await l(f(`/api/tunnel/consent`),{method:`POST`,body:JSON.stringify({})})}async function V(){await l(f(`/api/tunnel/registration-key`),{method:`POST`,body:JSON.stringify({})})}async function H(){return l(f(`/api/tunnel/start`),{method:`POST`,body:JSON.stringify({})})}async function he(e){return l(f(`/api/tunnel/stop`),{method:`POST`,body:JSON.stringify({release:e?.release===!0})})}async function U(){let e=(await l(f(`/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 W(e){await l(f(`/api/config`),{method:`PATCH`,body:JSON.stringify({tunnel:e})})}export{ce as _,B as a,T as b,he as c,P as d,N as f,pe as g,fe as h,V as i,L as l,F as m,z as n,U as o,me as p,W as r,H as s,I as t,R as u,j as v,E 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{t as i}from"./external-link-DjqjBmc3.js";import{t as a}from"./globe-DSSGFWFn.js";import{t as o}from"./loader-circle-CifKLtgG.js";import{t as s}from"./messages-DPw2X06D.js";import{t as c}from"./cn-JdwAhgNB.js";import{a as l,c as u,i as d,n as ee,r as f}from"./locale-store-Y1aBayM_.js";import{i as p}from"./vendor-swr-BIWyz7Rc.js";import{t as m}from"./button-CS04eWY9.js";import{n as h,r as g}from"./gateway-config-swr-B31I6Gbq.js";import{t as _}from"./skeleton-BwbyijEw.js";import{$c as v,Eo as y,Lo as b,ua as x}from"./index-DU5Eb1V8.js";import{n as te,t as ne}from"./settings-form-section-DS80hVSY.js";var S=e(t(),1),C=n(),w=r();function T(e){let t=(0,C.c)(10),{language:n,label:r,section:a,className:o}=e,s;t[0]!==n||t[1]!==a?(s=y(n,a),t[0]=n,t[1]=a,t[2]=s):s=t[2];let l;t[3]===o?l=t[4]:(l=c(`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`,o),t[3]=o,t[4]=l);let u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,w.jsx)(i,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t[5]=u):u=t[5];let d;return t[6]!==r||t[7]!==s||t[8]!==l?(d=(0,w.jsxs)(`a`,{href:s,target:`_blank`,rel:`noreferrer`,className:l,children:[r,u]}),t[6]=r,t[7]=s,t[8]=l,t[9]=d):d=t[9],d}async function E(){let e=await d(`/api/exposure/status`);if(!e.ok)throw Error(`Failed to load exposure status (${e.status})`);return await e.json()}async function D(e=`serve`){let t=await d(`/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 O(){let e=await d(`/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 k=`https://tailscale.com/download`;function A(e){let t=(0,C.c)(2),{label:n}=e,r;return t[0]===n?r=t[1]:(r=(0,w.jsx)(`a`,{href:k,target:`_blank`,rel:`noreferrer`,className:`font-medium text-accent hover:underline`,children:n}),t[0]=n,t[1]=r),r}function j({embedded:e=!1}){let t=ee(e=>e.language),n=s(t).remoteAccess.tailscale,r=(0,S.useMemo)(()=>({copy:n.copyUrl,copied:n.copied,copyFailed:s(t).clipboard.copyFailed}),[t,n.copyUrl,n.copied]),i=!!u(e=>e.conversationId),[c,l]=(0,S.useState)(!1),[d,f]=(0,S.useState)(null),{data:h,mutate:g,isLoading:y}=p(i?`exposure-status`:null,E,{refreshInterval:3e4}),b=h?.tailscale.hostname,C=h?.tailscale.active===!0,k=h?.tailscale.cliAvailable!==!1,j=b?`https://${b}/`:null,re=(0,S.useCallback)(async()=>{l(!0),f(null);try{await D(`serve`),await g()}catch(e){f(e instanceof Error?e.message:String(e))}finally{l(!1)}},[g]),ie=(0,S.useCallback)(async()=>{l(!0),f(null);try{await O(),await g()}catch(e){f(e instanceof Error?e.message:String(e))}finally{l(!1)}},[g]);if(!i)return null;let M=(0,w.jsxs)(`div`,{className:e?`space-y-4`:`mt-4 space-y-3`,children:[e?(0,w.jsxs)(`ol`,{className:`space-y-3 text-sm text-fg-muted`,children:[(0,w.jsxs)(`li`,{className:`flex gap-2`,children:[(0,w.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,w.jsxs)(`span`,{children:[n.stepInstallBefore,(0,w.jsx)(A,{label:n.stepInstallLink}),n.stepInstallAfter]})]}),(0,w.jsxs)(`li`,{className:`flex gap-2`,children:[(0,w.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,w.jsx)(`span`,{children:n.stepEnable})]}),(0,w.jsxs)(`li`,{className:`flex gap-2`,children:[(0,w.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,w.jsx)(`span`,{children:n.stepCopy})]})]}):null,e&&h?.tailscale.cliAvailable===!1?(0,w.jsxs)(`p`,{className:`rounded-lg bg-amber-500/10 px-3 py-2 text-sm text-fg-muted`,children:[n.cliMissingIntro,` `,(0,w.jsx)(A,{label:n.cliMissingDownloadLink}),n.cliMissingSuffix]}):null,y&&!h?(0,w.jsxs)(`div`,{className:`grid gap-3`,"aria-busy":`true`,children:[(0,w.jsx)(_,{className:`h-20 rounded-lg`}),(0,w.jsx)(_,{className:`h-20 rounded-lg`})]}):(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(ne,{children:[(0,w.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:n.statusLabel}),(0,w.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:C?n.statusActive:n.statusOff}),j?(0,w.jsx)(`div`,{className:`mt-3`,children:(0,w.jsx)(x,{text:j,labels:r})}):null,d?(0,w.jsx)(`p`,{className:`mt-2 text-sm text-red-600 dark:text-red-400`,children:d}):null,(0,w.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2`,children:C?(0,w.jsxs)(m,{type:`button`,variant:`secondary`,disabled:c,onClick:()=>void ie(),children:[c?(0,w.jsx)(o,{className:`mr-1 size-4 animate-spin`}):null,n.disableServe]}):(0,w.jsxs)(m,{type:`button`,disabled:c||!k,onClick:()=>void re(),children:[c?(0,w.jsx)(o,{className:`mr-1 size-4 animate-spin`}):(0,w.jsx)(v,{className:`mr-1 size-4`}),n.enableServe]})})]}),(0,w.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:n.hint}),(0,w.jsx)(T,{language:t,label:n.docsLink,section:`tailscale-serve`,className:`mt-2`})]})]});return e?M:(0,w.jsxs)(ne,{children:[(0,w.jsx)(te,{icon:a,title:n.title,subtitle:n.subtitle}),M]})}async function re(e){let t=await d(f(`/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 ie(e){await l(f(`/api/config`),{method:`PATCH`,body:JSON.stringify({gateway:{publicUrl:e??null}})})}function M(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 ae(){return(0,S.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`)||M(r)?null:n.toLowerCase().replace(/\/+$/,``)},[])}function oe(){return c(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,b,`dark:border-edge`)}function se(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 ce(){let e=(0,C.c)(85),t=ee(ue),n;e[0]===t?n=e[1]:(n=s(t),e[0]=t,e[1]=n);let r=n.remoteAccess.reverseProxy,i=!!u(le),l=ae(),d=g(i).data?.payload?.config,f;e[2]===d?f=e[3]:(f=se(d),e[2]=d,e[3]=f);let p=f,[_,v]=(0,S.useState)(``),y;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(y={busy:!1,result:null},e[4]=y):y=e[4];let[b,x]=(0,S.useState)(y),T;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(T={busy:!1,error:null},e[5]=T):T=e[5];let[E,D]=(0,S.useState)(T),O,k;e[6]!==p||e[7]!==l||e[8]!==_?(O=()=>{_||(p?v(p):l&&v(l))},k=[p,l,_],e[6]=p,e[7]=l,e[8]=_,e[9]=O,e[10]=k):(O=e[9],k=e[10]),(0,S.useEffect)(O,k);let A;bb0:{let t;e[11]===_?t=e[12]:(t=_.trim(),e[11]=_,e[12]=t);let n=t;if(n){A=n;break bb0}A=p??l??``}let j=A,M=!p&&!!l&&j===l,ce;e[13]!==_||e[14]!==j?(ce=async()=>{let e=_.trim()||j;if(e){x({busy:!0,result:null});try{x({busy:!1,result:await re(e)})}catch(e){let t=e;x({busy:!1,result:{ok:!1,code:`NETWORK_ERROR`,message:t instanceof Error?t.message:String(t)}})}}},e[13]=_,e[14]=j,e[15]=ce):ce=e[15];let fe=ce,N;e[16]===j?N=e[17]:(N=async()=>{let e=j.trim();if(e){D({busy:!0,error:null});try{await ie(e),await h(),D({busy:!1,error:null})}catch(e){let t=e;D({busy:!1,error:t instanceof Error?t.message:String(t)})}}},e[16]=j,e[17]=N);let pe=N,P;e[18]===Symbol.for(`react.memo_cache_sentinel`)?(P=async()=>{D({busy:!0,error:null});try{await ie(null),await h(),v(``),x({busy:!1,result:null}),D({busy:!1,error:null})}catch(e){let t=e;D({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,w.jsx)(te,{icon:a,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,w.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=c(oe(),`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=>{v(e.target.value),x({busy:!1,result:null})},e[25]=R):R=e[25];let z;e[26]!==_||e[27]!==r.urlPlaceholder||e[28]!==L?(z=(0,w.jsx)(`input`,{id:`reverse-proxy-url`,className:L,type:`text`,autoComplete:`off`,spellCheck:!1,placeholder:r.urlPlaceholder,value:_,onChange:R}),e[26]=_,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]!==_||e[33]!==b.busy?(V=b.busy||!_.trim(),e[32]=_,e[33]=b.busy,e[34]=V):V=e[34];let H;e[35]===b.busy?H=e[36]:(H=b.busy?(0,w.jsx)(o,{className:`size-3.5 animate-spin`}):null,e[35]=b.busy,e[36]=H);let he=b.busy?r.probing:r.probeButton,U;e[37]!==B||e[38]!==V||e[39]!==H||e[40]!==he?(U=(0,w.jsxs)(m,{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,w.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,w.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:r.urlHint}),e[45]=r.urlHint,e[46]=G);let K;e[47]!==l||e[48]!==M||e[49]!==r.autoDetectedHint||e[50]!==r.autoDetectedTitle?(K=M&&l?(0,w.jsxs)(`div`,{className:`rounded-lg bg-accent-soft/60 px-3 py-2 text-xs leading-relaxed text-accent-fg`,children:[(0,w.jsx)(`div`,{className:`font-medium`,children:r.autoDetectedTitle}),(0,w.jsx)(`div`,{className:`mt-1 break-all font-mono text-[11px]`,children:l}),(0,w.jsx)(`p`,{className:`mt-1`,children:r.autoDetectedHint})]}):null,e[47]=l,e[48]=M,e[49]=r.autoDetectedHint,e[50]=r.autoDetectedTitle,e[51]=K):K=e[51];let q;e[52]!==b.result||e[53]!==r.probeStatus?(q=b.result?(0,w.jsx)(de,{result:b.result,labels:r.probeStatus}):null,e[52]=b.result,e[53]=r.probeStatus,e[54]=q):q=e[54];let J;e[55]!==p||e[56]!==j||e[57]!==pe||e[58]!==r.saveAsDefault||e[59]!==r.saving||e[60]!==E.busy?(J=j&&p!==j?(0,w.jsxs)(m,{type:`button`,onClick:()=>void pe(),disabled:E.busy,children:[E.busy?(0,w.jsx)(o,{className:`size-3.5 animate-spin`}):null,E.busy?r.saving:r.saveAsDefault]}):null,e[55]=p,e[56]=j,e[57]=pe,e[58]=r.saveAsDefault,e[59]=r.saving,e[60]=E.busy,e[61]=J):J=e[61];let Y;e[62]!==p||e[63]!==r.clear||e[64]!==E.busy?(Y=p?(0,w.jsx)(m,{type:`button`,variant:`ghost`,onClick:()=>void me(),disabled:E.busy,children:r.clear}):null,e[62]=p,e[63]=r.clear,e[64]=E.busy,e[65]=Y):Y=e[65];let X;e[66]!==J||e[67]!==Y?(X=(0,w.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]===E.error?Z=e[70]:(Z=E.error?(0,w.jsx)(`p`,{className:`text-xs text-red-800 dark:text-red-200`,children:E.error}):null,e[69]=E.error,e[70]=Z);let Q;e[71]===r.certWarning?Q=e[72]:(Q=(0,w.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,w.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,w.jsx)(`div`,{className:`flex flex-col gap-4`,children:(0,w.jsxs)(ne,{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,C.c)(18),{result:n,labels:r}=e;if(n.ok){let e;t[0]===r.ok?e=t[1]:(e=(0,w.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,w.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,w.jsxs)(w.Fragment,{children:[` · `,(0,w.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,w.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,w.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,w.jsxs)(w.Fragment,{children:[` — `,(0,w.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,w.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 l(f(`/api/device-pairing/readiness`));return{ready:e.ready,routes:e.routes,protocolVersion:e.protocolVersion}}async function N(e){try{return{kind:`ready`,setup:(await l(f(`/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 l(f(`/api/device-pairing/setups/${encodeURIComponent(e)}`))}async function P(e){await l(f(`/api/device-pairing/setups/${encodeURIComponent(e)}`),{method:`DELETE`})}async function me(e,t){await l(f(`/api/device-pairing/requests/${encodeURIComponent(e.requestId)}/decision`),{method:`POST`,body:JSON.stringify({decision:t,expectedRevision:e.revision})})}async function F(){let e=await d(f(`/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.error;if(!n||typeof n!=`object`)return;let r=n.code;return typeof r==`string`?r:void 0}function R(e){return[`tunnel_oauth_required`,`invalid_token`,`insufficient_scope`].includes(L(e)??``)}async function z(){return l(f(`/api/tunnel/status`))}async function B(){await l(f(`/api/tunnel/consent`),{method:`POST`,body:JSON.stringify({})})}async function V(){await l(f(`/api/tunnel/registration-key`),{method:`POST`,body:JSON.stringify({})})}async function H(){return l(f(`/api/tunnel/start`),{method:`POST`,body:JSON.stringify({})})}async function he(e){return l(f(`/api/tunnel/stop`),{method:`POST`,body:JSON.stringify({release:e?.release===!0})})}async function U(){let e=(await l(f(`/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 W(e){await l(f(`/api/config`),{method:`PATCH`,body:JSON.stringify({tunnel:e})})}export{ce as _,B as a,T as b,he as c,P as d,N as f,pe as g,fe as h,V as i,L as l,F as m,z as n,U as o,me as p,W as r,H as s,I as t,R as u,j as v,E as y};
|
|
@@ -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{t as i}from"./popover-select-0p9PIHRy.js";import{t as a}from"./messages-sXePe3LQ.js";import{a as o,n as s,r as c}from"./locale-store-WMaCMm3_.js";import{i as l}from"./vendor-swr-BIWyz7Rc.js";import{t as u}from"./button-CS04eWY9.js";import{t as d}from"./skeleton-BwbyijEw.js";import{Bu as f,Cu as p,Xu as m,ru as h,vu as g,yc as _}from"./index-Bb32g7Ll.js";import{n as v,r as y}from"./settings-page-layout-X1x-2Cp9.js";var b=e(t(),1),x=n();function S(e){let t=Date.now()+1,n=t-e*24*60*60*1e3;return new URLSearchParams({from:String(n),to:String(t)}).toString()}function C(e){return o(c(`/api/usage/summary?${e}`))}function w(e){return o(c(`/api/usage/events?${e}&limit=50`))}var T=r();function E(e,t){return new Intl.NumberFormat(t===`zh`?`zh-CN`:`en-US`,{notation:`compact`,maximumFractionDigits:1}).format(e)}function D(e){return`$${Number(e).toLocaleString(void 0,{minimumFractionDigits:0,maximumFractionDigits:6})}`}function O(e,t){return new Intl.DateTimeFormat(t===`zh`?`zh-CN`:`en-US`,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`}).format(e)}function k(){let e=(0,x.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,T.jsxs)(`div`,{className:`space-y-4`,"aria-busy":`true`,children:[(0,T.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[0,1,2,3].map(A)}),(0,T.jsx)(d,{className:`h-52 rounded-xl`}),(0,T.jsx)(d,{className:`h-72 rounded-xl`})]}),e[0]=t):t=e[0],t}function A(e){return(0,T.jsx)(d,{className:`h-24 rounded-xl`},e)}function j(){let e=(0,x.c)(82),t=s(N),n;e[0]===t?n=e[1]:(n=a(t),e[0]=t,e[1]=n);let r=n.usage,[o,c]=(0,b.useState)(`7`),d=Number(o),A;e[2]===d?A=e[3]:(A=S(d),e[2]=d,e[3]=A);let j=A,P,F;e[4]===j?(P=e[5],F=e[6]):(P=[`usage-summary`,j],F=()=>C(j),e[4]=j,e[5]=P,e[6]=F);let I=l(P,F),L,R;e[7]===j?(L=e[8],R=e[9]):(L=[`usage-events`,j],R=()=>w(j),e[7]=j,e[8]=L,e[9]=R);let z=l(L,R),B=!I.data&&!I.error||!z.data&&!z.error,V=I.error??z.error,H=I.data?.totals,U;e[10]!==r.reasons.agentAnswer||e[11]!==r.reasons.automationDraft||e[12]!==r.reasons.backgroundReview||e[13]!==r.reasons.continueAfterTool||e[14]!==r.reasons.discussionAnalysis||e[15]!==r.reasons.homeAdvice||e[16]!==r.reasons.imageUnderstanding||e[17]!==r.reasons.noteGeneration||e[18]!==r.reasons.other||e[19]!==r.reasons.sceneExecution||e[20]!==r.reasons.sessionCompaction||e[21]!==r.reasons.sessionSearch||e[22]!==r.reasons.sessionTitle||e[23]!==r.reasons.taskJudging||e[24]!==r.reasons.taskPlanning||e[25]!==r.reasons.textAssist||e[26]!==r.reasons.userModelInterpretation||e[27]!==r.reasons.voiceSelection||e[28]!==r.reasons.voiceSummary||e[29]!==r.reasons.webExtract||e[30]!==r.reasons.workDiscovery||e[31]!==r.reasons.workInvestigation?(U={"usage.reason.agentAnswer":r.reasons.agentAnswer,"usage.reason.continueAfterTool":r.reasons.continueAfterTool,"usage.reason.backgroundReview":r.reasons.backgroundReview,"usage.reason.sessionCompaction":r.reasons.sessionCompaction,"usage.reason.sessionTitle":r.reasons.sessionTitle,"usage.reason.imageUnderstanding":r.reasons.imageUnderstanding,"usage.reason.webExtract":r.reasons.webExtract,"usage.reason.sessionSearch":r.reasons.sessionSearch,"usage.reason.noteGeneration":r.reasons.noteGeneration,"usage.reason.automationDraft":r.reasons.automationDraft,"usage.reason.sceneExecution":r.reasons.sceneExecution,"usage.reason.taskPlanning":r.reasons.taskPlanning,"usage.reason.taskJudging":r.reasons.taskJudging,"usage.reason.voiceSummary":r.reasons.voiceSummary,"usage.reason.voiceSelection":r.reasons.voiceSelection,"usage.reason.homeAdvice":r.reasons.homeAdvice,"usage.reason.workDiscovery":r.reasons.workDiscovery,"usage.reason.workInvestigation":r.reasons.workInvestigation,"usage.reason.discussionAnalysis":r.reasons.discussionAnalysis,"usage.reason.textAssist":r.reasons.textAssist,"usage.reason.userModelInterpretation":r.reasons.userModelInterpretation,"usage.reason.other":r.reasons.other},e[10]=r.reasons.agentAnswer,e[11]=r.reasons.automationDraft,e[12]=r.reasons.backgroundReview,e[13]=r.reasons.continueAfterTool,e[14]=r.reasons.discussionAnalysis,e[15]=r.reasons.homeAdvice,e[16]=r.reasons.imageUnderstanding,e[17]=r.reasons.noteGeneration,e[18]=r.reasons.other,e[19]=r.reasons.sceneExecution,e[20]=r.reasons.sessionCompaction,e[21]=r.reasons.sessionSearch,e[22]=r.reasons.sessionTitle,e[23]=r.reasons.taskJudging,e[24]=r.reasons.taskPlanning,e[25]=r.reasons.textAssist,e[26]=r.reasons.userModelInterpretation,e[27]=r.reasons.voiceSelection,e[28]=r.reasons.voiceSummary,e[29]=r.reasons.webExtract,e[30]=r.reasons.workDiscovery,e[31]=r.reasons.workInvestigation,e[32]=U):U=e[32];let W=U,G;e[33]===r.last7Days?G=e[34]:(G={value:`7`,label:r.last7Days},e[33]=r.last7Days,e[34]=G);let K;e[35]===r.last30Days?K=e[36]:(K={value:`30`,label:r.last30Days},e[35]=r.last30Days,e[36]=K);let q;e[37]===r.last90Days?q=e[38]:(q={value:`90`,label:r.last90Days},e[37]=r.last90Days,e[38]=q);let J;e[39]!==q||e[40]!==G||e[41]!==K?(J=[G,K,q],e[39]=q,e[40]=G,e[41]=K,e[42]=J):J=e[42];let Y;e[43]!==o||e[44]!==r.periodLabel||e[45]!==J?(Y=(0,T.jsx)(`div`,{className:`w-36`,children:(0,T.jsx)(i,{value:o,allowEmpty:!1,ariaLabel:r.periodLabel,placeholder:r.periodLabel,options:J,onChange:c})}),e[43]=o,e[44]=r.periodLabel,e[45]=J,e[46]=Y):Y=e[46];let X;e[47]!==r.subtitle||e[48]!==r.title||e[49]!==Y?(X=(0,T.jsx)(v,{title:r.title,subtitle:r.subtitle,actions:Y}),e[47]=r.subtitle,e[48]=r.title,e[49]=Y,e[50]=X):X=e[50];let Z;e[51]!==V||e[52]!==z||e[53]!==t||e[54]!==B||e[55]!==W||e[56]!==I||e[57]!==r.allCostsUnknown||e[58]!==r.byModel||e[59]!==r.byScenario||e[60]!==r.callUnit||e[61]!==r.calls||e[62]!==r.categories||e[63]!==r.costUnknown||e[64]!==r.empty||e[65]!==r.knownCost||e[66]!==r.loadError||e[67]!==r.reasons.other||e[68]!==r.recentCalls||e[69]!==r.recentCallsHint||e[70]!==r.retry||e[71]!==r.someCostsUnknown||e[72]!==r.status||e[73]!==r.summaryLabel||e[74]!==r.tokens||e[75]!==r.tokensUnknown||e[76]!==r.unknownCosts||e[77]!==H?(Z=B?(0,T.jsx)(k,{}):V?(0,T.jsxs)(`div`,{role:`alert`,className:`flex items-start gap-3 rounded-xl border border-edge bg-surface-inset p-4 text-sm text-fg-muted`,children:[(0,T.jsx)(f,{className:`mt-0.5 size-4 shrink-0 text-danger`,"aria-hidden":!0}),(0,T.jsxs)(`div`,{className:`space-y-2`,children:[(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`p`,{className:`font-medium text-fg`,children:r.loadError}),(0,T.jsx)(`p`,{className:`mt-1`,children:String(V.message??V)})]}),(0,T.jsx)(u,{variant:`secondary`,onClick:()=>void Promise.all([I.mutate(),z.mutate()]),children:r.retry})]})]}):H?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`section`,{"aria-label":r.summaryLabel,className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[{label:r.knownCost,value:D(H.knownCostUsd),icon:p},{label:r.calls,value:H.calls.toLocaleString(),icon:h},{label:r.tokens,value:E(H.totalTokens,t),icon:g},{label:r.unknownCosts,value:H.unknownCostCalls.toLocaleString(),icon:f}].map(M)}),H.calls>0&&H.costCompleteness!==`complete`?(0,T.jsx)(`p`,{className:`rounded-lg border border-edge bg-surface-inset px-3 py-2 text-xs leading-5 text-fg-muted`,children:H.costCompleteness===`unknown`?r.allCostsUnknown:r.someCostsUnknown}):null,(0,T.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-2`,children:[(0,T.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,T.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:r.byScenario}),(0,T.jsx)(`div`,{className:`mt-3 divide-y divide-edge-subtle`,children:I.data?.byCategory.length?I.data.byCategory.map(e=>(0,T.jsxs)(`div`,{className:`flex items-center justify-between gap-3 py-2.5 text-sm`,children:[(0,T.jsx)(`span`,{className:`min-w-0 truncate text-fg-muted`,title:r.categories[e.key]??e.key,children:r.categories[e.key]??e.key}),(0,T.jsxs)(`span`,{className:`shrink-0 tabular-nums text-fg`,children:[D(e.totals.knownCostUsd),` · `,e.totals.calls,` `,r.callUnit]})]},e.key)):(0,T.jsx)(`p`,{className:`py-5 text-sm text-fg-subtle`,children:r.empty})})]}),(0,T.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,T.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:r.byModel}),(0,T.jsx)(`div`,{className:`mt-3 divide-y divide-edge-subtle`,children:I.data?.byModel.length?I.data.byModel.map(e=>(0,T.jsxs)(`div`,{className:`flex items-center justify-between gap-3 py-2.5 text-sm`,children:[(0,T.jsx)(`span`,{className:`min-w-0 truncate text-fg-muted`,title:e.key,children:e.key}),(0,T.jsxs)(`span`,{className:`shrink-0 tabular-nums text-fg`,children:[D(e.totals.knownCostUsd),` · `,e.totals.calls,` `,r.callUnit]})]},e.key)):(0,T.jsx)(`p`,{className:`py-5 text-sm text-fg-subtle`,children:r.empty})})]})]}),(0,T.jsxs)(`section`,{className:`overflow-hidden rounded-xl border border-edge bg-surface-panel`,children:[(0,T.jsxs)(`div`,{className:`border-b border-edge px-4 py-3`,children:[(0,T.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:r.recentCalls}),(0,T.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:r.recentCallsHint})]}),(0,T.jsx)(`div`,{className:`divide-y divide-edge-subtle`,children:z.data?.items.length?z.data.items.map(e=>(0,T.jsxs)(`article`,{className:`grid gap-2 px-4 py-3 text-sm sm:grid-cols-[minmax(0,1fr)_auto] sm:items-center`,children:[(0,T.jsxs)(`div`,{className:`min-w-0`,children:[(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,T.jsx)(m,{className:`size-4 shrink-0 text-fg-subtle`,"aria-hidden":!0}),(0,T.jsx)(`span`,{className:`truncate font-medium text-fg`,children:W[e.reasonKey]??r.reasons.other})]}),(0,T.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-subtle`,children:[(0,T.jsxs)(`span`,{className:`min-w-0 [overflow-wrap:anywhere]`,children:[e.provider,`/`,e.model]}),(0,T.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,T.jsx)(_,{className:`size-3`,"aria-hidden":!0}),O(e.startedAt,t)]}),(0,T.jsx)(`span`,{children:e.totalTokens===void 0?r.tokensUnknown:`${E(e.totalTokens,t)} tokens`})]})]}),(0,T.jsxs)(`div`,{className:`text-left tabular-nums text-fg sm:text-right`,children:[e.costSource===`unknown`||e.estimatedCostUsd===void 0?r.costUnknown:`≈ ${D(e.estimatedCostUsd)}`,(0,T.jsx)(`div`,{className:`mt-0.5 text-xs text-fg-subtle`,children:r.status[e.status]??e.status})]})]},e.id)):(0,T.jsx)(`p`,{className:`px-4 py-8 text-center text-sm text-fg-subtle`,children:r.empty})})]})]}):null,e[51]=V,e[52]=z,e[53]=t,e[54]=B,e[55]=W,e[56]=I,e[57]=r.allCostsUnknown,e[58]=r.byModel,e[59]=r.byScenario,e[60]=r.callUnit,e[61]=r.calls,e[62]=r.categories,e[63]=r.costUnknown,e[64]=r.empty,e[65]=r.knownCost,e[66]=r.loadError,e[67]=r.reasons.other,e[68]=r.recentCalls,e[69]=r.recentCallsHint,e[70]=r.retry,e[71]=r.someCostsUnknown,e[72]=r.status,e[73]=r.summaryLabel,e[74]=r.tokens,e[75]=r.tokensUnknown,e[76]=r.unknownCosts,e[77]=H,e[78]=Z):Z=e[78];let Q;return e[79]!==X||e[80]!==Z?(Q=(0,T.jsxs)(y,{children:[X,Z]}),e[79]=X,e[80]=Z,e[81]=Q):Q=e[81],Q}function M(e){return(0,T.jsxs)(`div`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-fg-muted`,children:[(0,T.jsx)(e.icon,{className:`size-4`,"aria-hidden":!0}),e.label]}),(0,T.jsx)(`div`,{className:`mt-2 text-xl font-semibold tabular-nums text-fg`,children:e.value})]},e.label)}function N(e){return e.language}export{j as UsageSettingsPage};
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./popover-select-0p9PIHRy.js";import{t as a}from"./messages-DPw2X06D.js";import{a as o,n as s,r as c}from"./locale-store-Y1aBayM_.js";import{i as l}from"./vendor-swr-BIWyz7Rc.js";import{t as u}from"./button-CS04eWY9.js";import{t as d}from"./skeleton-BwbyijEw.js";import{Bu as f,Cu as p,Xu as m,ru as h,vu as g,yc as _}from"./index-DU5Eb1V8.js";import{n as v,r as y}from"./settings-page-layout-X1x-2Cp9.js";var b=e(t(),1),x=n();function S(e){let t=Date.now()+1,n=t-e*24*60*60*1e3;return new URLSearchParams({from:String(n),to:String(t)}).toString()}function C(e){return o(c(`/api/usage/summary?${e}`))}function w(e){return o(c(`/api/usage/events?${e}&limit=50`))}var T=r();function E(e,t){return new Intl.NumberFormat(t===`zh`?`zh-CN`:`en-US`,{notation:`compact`,maximumFractionDigits:1}).format(e)}function D(e){return`$${Number(e).toLocaleString(void 0,{minimumFractionDigits:0,maximumFractionDigits:6})}`}function O(e,t){return new Intl.DateTimeFormat(t===`zh`?`zh-CN`:`en-US`,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`}).format(e)}function k(){let e=(0,x.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,T.jsxs)(`div`,{className:`space-y-4`,"aria-busy":`true`,children:[(0,T.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[0,1,2,3].map(A)}),(0,T.jsx)(d,{className:`h-52 rounded-xl`}),(0,T.jsx)(d,{className:`h-72 rounded-xl`})]}),e[0]=t):t=e[0],t}function A(e){return(0,T.jsx)(d,{className:`h-24 rounded-xl`},e)}function j(){let e=(0,x.c)(82),t=s(N),n;e[0]===t?n=e[1]:(n=a(t),e[0]=t,e[1]=n);let r=n.usage,[o,c]=(0,b.useState)(`7`),d=Number(o),A;e[2]===d?A=e[3]:(A=S(d),e[2]=d,e[3]=A);let j=A,P,F;e[4]===j?(P=e[5],F=e[6]):(P=[`usage-summary`,j],F=()=>C(j),e[4]=j,e[5]=P,e[6]=F);let I=l(P,F),L,R;e[7]===j?(L=e[8],R=e[9]):(L=[`usage-events`,j],R=()=>w(j),e[7]=j,e[8]=L,e[9]=R);let z=l(L,R),B=!I.data&&!I.error||!z.data&&!z.error,V=I.error??z.error,H=I.data?.totals,U;e[10]!==r.reasons.agentAnswer||e[11]!==r.reasons.automationDraft||e[12]!==r.reasons.backgroundReview||e[13]!==r.reasons.continueAfterTool||e[14]!==r.reasons.discussionAnalysis||e[15]!==r.reasons.homeAdvice||e[16]!==r.reasons.imageUnderstanding||e[17]!==r.reasons.noteGeneration||e[18]!==r.reasons.other||e[19]!==r.reasons.sceneExecution||e[20]!==r.reasons.sessionCompaction||e[21]!==r.reasons.sessionSearch||e[22]!==r.reasons.sessionTitle||e[23]!==r.reasons.taskJudging||e[24]!==r.reasons.taskPlanning||e[25]!==r.reasons.textAssist||e[26]!==r.reasons.userModelInterpretation||e[27]!==r.reasons.voiceSelection||e[28]!==r.reasons.voiceSummary||e[29]!==r.reasons.webExtract||e[30]!==r.reasons.workDiscovery||e[31]!==r.reasons.workInvestigation?(U={"usage.reason.agentAnswer":r.reasons.agentAnswer,"usage.reason.continueAfterTool":r.reasons.continueAfterTool,"usage.reason.backgroundReview":r.reasons.backgroundReview,"usage.reason.sessionCompaction":r.reasons.sessionCompaction,"usage.reason.sessionTitle":r.reasons.sessionTitle,"usage.reason.imageUnderstanding":r.reasons.imageUnderstanding,"usage.reason.webExtract":r.reasons.webExtract,"usage.reason.sessionSearch":r.reasons.sessionSearch,"usage.reason.noteGeneration":r.reasons.noteGeneration,"usage.reason.automationDraft":r.reasons.automationDraft,"usage.reason.sceneExecution":r.reasons.sceneExecution,"usage.reason.taskPlanning":r.reasons.taskPlanning,"usage.reason.taskJudging":r.reasons.taskJudging,"usage.reason.voiceSummary":r.reasons.voiceSummary,"usage.reason.voiceSelection":r.reasons.voiceSelection,"usage.reason.homeAdvice":r.reasons.homeAdvice,"usage.reason.workDiscovery":r.reasons.workDiscovery,"usage.reason.workInvestigation":r.reasons.workInvestigation,"usage.reason.discussionAnalysis":r.reasons.discussionAnalysis,"usage.reason.textAssist":r.reasons.textAssist,"usage.reason.userModelInterpretation":r.reasons.userModelInterpretation,"usage.reason.other":r.reasons.other},e[10]=r.reasons.agentAnswer,e[11]=r.reasons.automationDraft,e[12]=r.reasons.backgroundReview,e[13]=r.reasons.continueAfterTool,e[14]=r.reasons.discussionAnalysis,e[15]=r.reasons.homeAdvice,e[16]=r.reasons.imageUnderstanding,e[17]=r.reasons.noteGeneration,e[18]=r.reasons.other,e[19]=r.reasons.sceneExecution,e[20]=r.reasons.sessionCompaction,e[21]=r.reasons.sessionSearch,e[22]=r.reasons.sessionTitle,e[23]=r.reasons.taskJudging,e[24]=r.reasons.taskPlanning,e[25]=r.reasons.textAssist,e[26]=r.reasons.userModelInterpretation,e[27]=r.reasons.voiceSelection,e[28]=r.reasons.voiceSummary,e[29]=r.reasons.webExtract,e[30]=r.reasons.workDiscovery,e[31]=r.reasons.workInvestigation,e[32]=U):U=e[32];let W=U,G;e[33]===r.last7Days?G=e[34]:(G={value:`7`,label:r.last7Days},e[33]=r.last7Days,e[34]=G);let K;e[35]===r.last30Days?K=e[36]:(K={value:`30`,label:r.last30Days},e[35]=r.last30Days,e[36]=K);let q;e[37]===r.last90Days?q=e[38]:(q={value:`90`,label:r.last90Days},e[37]=r.last90Days,e[38]=q);let J;e[39]!==q||e[40]!==G||e[41]!==K?(J=[G,K,q],e[39]=q,e[40]=G,e[41]=K,e[42]=J):J=e[42];let Y;e[43]!==o||e[44]!==r.periodLabel||e[45]!==J?(Y=(0,T.jsx)(`div`,{className:`w-36`,children:(0,T.jsx)(i,{value:o,allowEmpty:!1,ariaLabel:r.periodLabel,placeholder:r.periodLabel,options:J,onChange:c})}),e[43]=o,e[44]=r.periodLabel,e[45]=J,e[46]=Y):Y=e[46];let X;e[47]!==r.subtitle||e[48]!==r.title||e[49]!==Y?(X=(0,T.jsx)(v,{title:r.title,subtitle:r.subtitle,actions:Y}),e[47]=r.subtitle,e[48]=r.title,e[49]=Y,e[50]=X):X=e[50];let Z;e[51]!==V||e[52]!==z||e[53]!==t||e[54]!==B||e[55]!==W||e[56]!==I||e[57]!==r.allCostsUnknown||e[58]!==r.byModel||e[59]!==r.byScenario||e[60]!==r.callUnit||e[61]!==r.calls||e[62]!==r.categories||e[63]!==r.costUnknown||e[64]!==r.empty||e[65]!==r.knownCost||e[66]!==r.loadError||e[67]!==r.reasons.other||e[68]!==r.recentCalls||e[69]!==r.recentCallsHint||e[70]!==r.retry||e[71]!==r.someCostsUnknown||e[72]!==r.status||e[73]!==r.summaryLabel||e[74]!==r.tokens||e[75]!==r.tokensUnknown||e[76]!==r.unknownCosts||e[77]!==H?(Z=B?(0,T.jsx)(k,{}):V?(0,T.jsxs)(`div`,{role:`alert`,className:`flex items-start gap-3 rounded-xl border border-edge bg-surface-inset p-4 text-sm text-fg-muted`,children:[(0,T.jsx)(f,{className:`mt-0.5 size-4 shrink-0 text-danger`,"aria-hidden":!0}),(0,T.jsxs)(`div`,{className:`space-y-2`,children:[(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`p`,{className:`font-medium text-fg`,children:r.loadError}),(0,T.jsx)(`p`,{className:`mt-1`,children:String(V.message??V)})]}),(0,T.jsx)(u,{variant:`secondary`,onClick:()=>void Promise.all([I.mutate(),z.mutate()]),children:r.retry})]})]}):H?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`section`,{"aria-label":r.summaryLabel,className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[{label:r.knownCost,value:D(H.knownCostUsd),icon:p},{label:r.calls,value:H.calls.toLocaleString(),icon:h},{label:r.tokens,value:E(H.totalTokens,t),icon:g},{label:r.unknownCosts,value:H.unknownCostCalls.toLocaleString(),icon:f}].map(M)}),H.calls>0&&H.costCompleteness!==`complete`?(0,T.jsx)(`p`,{className:`rounded-lg border border-edge bg-surface-inset px-3 py-2 text-xs leading-5 text-fg-muted`,children:H.costCompleteness===`unknown`?r.allCostsUnknown:r.someCostsUnknown}):null,(0,T.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-2`,children:[(0,T.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,T.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:r.byScenario}),(0,T.jsx)(`div`,{className:`mt-3 divide-y divide-edge-subtle`,children:I.data?.byCategory.length?I.data.byCategory.map(e=>(0,T.jsxs)(`div`,{className:`flex items-center justify-between gap-3 py-2.5 text-sm`,children:[(0,T.jsx)(`span`,{className:`min-w-0 truncate text-fg-muted`,title:r.categories[e.key]??e.key,children:r.categories[e.key]??e.key}),(0,T.jsxs)(`span`,{className:`shrink-0 tabular-nums text-fg`,children:[D(e.totals.knownCostUsd),` · `,e.totals.calls,` `,r.callUnit]})]},e.key)):(0,T.jsx)(`p`,{className:`py-5 text-sm text-fg-subtle`,children:r.empty})})]}),(0,T.jsxs)(`section`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,T.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:r.byModel}),(0,T.jsx)(`div`,{className:`mt-3 divide-y divide-edge-subtle`,children:I.data?.byModel.length?I.data.byModel.map(e=>(0,T.jsxs)(`div`,{className:`flex items-center justify-between gap-3 py-2.5 text-sm`,children:[(0,T.jsx)(`span`,{className:`min-w-0 truncate text-fg-muted`,title:e.key,children:e.key}),(0,T.jsxs)(`span`,{className:`shrink-0 tabular-nums text-fg`,children:[D(e.totals.knownCostUsd),` · `,e.totals.calls,` `,r.callUnit]})]},e.key)):(0,T.jsx)(`p`,{className:`py-5 text-sm text-fg-subtle`,children:r.empty})})]})]}),(0,T.jsxs)(`section`,{className:`overflow-hidden rounded-xl border border-edge bg-surface-panel`,children:[(0,T.jsxs)(`div`,{className:`border-b border-edge px-4 py-3`,children:[(0,T.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:r.recentCalls}),(0,T.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:r.recentCallsHint})]}),(0,T.jsx)(`div`,{className:`divide-y divide-edge-subtle`,children:z.data?.items.length?z.data.items.map(e=>(0,T.jsxs)(`article`,{className:`grid gap-2 px-4 py-3 text-sm sm:grid-cols-[minmax(0,1fr)_auto] sm:items-center`,children:[(0,T.jsxs)(`div`,{className:`min-w-0`,children:[(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,T.jsx)(m,{className:`size-4 shrink-0 text-fg-subtle`,"aria-hidden":!0}),(0,T.jsx)(`span`,{className:`truncate font-medium text-fg`,children:W[e.reasonKey]??r.reasons.other})]}),(0,T.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-subtle`,children:[(0,T.jsxs)(`span`,{className:`min-w-0 [overflow-wrap:anywhere]`,children:[e.provider,`/`,e.model]}),(0,T.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,T.jsx)(_,{className:`size-3`,"aria-hidden":!0}),O(e.startedAt,t)]}),(0,T.jsx)(`span`,{children:e.totalTokens===void 0?r.tokensUnknown:`${E(e.totalTokens,t)} tokens`})]})]}),(0,T.jsxs)(`div`,{className:`text-left tabular-nums text-fg sm:text-right`,children:[e.costSource===`unknown`||e.estimatedCostUsd===void 0?r.costUnknown:`≈ ${D(e.estimatedCostUsd)}`,(0,T.jsx)(`div`,{className:`mt-0.5 text-xs text-fg-subtle`,children:r.status[e.status]??e.status})]})]},e.id)):(0,T.jsx)(`p`,{className:`px-4 py-8 text-center text-sm text-fg-subtle`,children:r.empty})})]})]}):null,e[51]=V,e[52]=z,e[53]=t,e[54]=B,e[55]=W,e[56]=I,e[57]=r.allCostsUnknown,e[58]=r.byModel,e[59]=r.byScenario,e[60]=r.callUnit,e[61]=r.calls,e[62]=r.categories,e[63]=r.costUnknown,e[64]=r.empty,e[65]=r.knownCost,e[66]=r.loadError,e[67]=r.reasons.other,e[68]=r.recentCalls,e[69]=r.recentCallsHint,e[70]=r.retry,e[71]=r.someCostsUnknown,e[72]=r.status,e[73]=r.summaryLabel,e[74]=r.tokens,e[75]=r.tokensUnknown,e[76]=r.unknownCosts,e[77]=H,e[78]=Z):Z=e[78];let Q;return e[79]!==X||e[80]!==Z?(Q=(0,T.jsxs)(y,{children:[X,Z]}),e[79]=X,e[80]=Z,e[81]=Q):Q=e[81],Q}function M(e){return(0,T.jsxs)(`div`,{className:`rounded-xl border border-edge bg-surface-panel p-4`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-fg-muted`,children:[(0,T.jsx)(e.icon,{className:`size-4`,"aria-hidden":!0}),e.label]}),(0,T.jsx)(`div`,{className:`mt-2 text-xl font-semibold tabular-nums text-fg`,children:e.value})]},e.label)}function N(e){return e.language}export{j as UsageSettingsPage};
|
package/dist/gateway/static/root/assets/{use-autosave-DQdLcZfO.js → use-autosave-YKCwQvqT.js}
RENAMED
|
@@ -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{t as i}from"./check-DUBLcKHA.js";import{t as a}from"./loader-circle-CifKLtgG.js";import{t as o}from"./cn-JdwAhgNB.js";import{n as s}from"./locale-store-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./check-DUBLcKHA.js";import{t as a}from"./loader-circle-CifKLtgG.js";import{t as o}from"./cn-JdwAhgNB.js";import{n as s}from"./locale-store-Y1aBayM_.js";import{Bu as c}from"./index-DU5Eb1V8.js";var l=n(),u=r();function d(e){let t=(0,l.c)(21),{status:n,error:r,className:d}=e,p=s(f)===`zh`;if(n===`idle`)return null;let m=n===`saving`?p?`正在保存…`:`Saving…`:n===`saved`?p?`已自动保存`:`Saved automatically`:n===`error`?r||(p?`自动保存失败`:`Autosave failed`):n===`dirty`?p?`编辑中,将自动保存`:`Editing — autosave pending`:``,h=n===`error`?`text-danger`:n===`saved`?`text-success`:`text-fg-subtle`,g;t[0]!==d||t[1]!==h?(g=o(`inline-flex min-w-0 items-center gap-1.5 text-xs`,h,d),t[0]=d,t[1]=h,t[2]=g):g=t[2];let _;t[3]===n?_=t[4]:(_=n===`saving`?(0,u.jsx)(a,{className:`size-3.5 shrink-0 animate-spin`,"aria-hidden":!0}):null,t[3]=n,t[4]=_);let v;t[5]===n?v=t[6]:(v=n===`saved`?(0,u.jsx)(i,{className:`size-3.5 shrink-0`,"aria-hidden":!0}):null,t[5]=n,t[6]=v);let y;t[7]===n?y=t[8]:(y=n===`error`?(0,u.jsx)(c,{className:`size-3.5 shrink-0`,"aria-hidden":!0}):null,t[7]=n,t[8]=y);let b;t[9]===n?b=t[10]:(b=n===`dirty`?(0,u.jsx)(`span`,{className:`size-1.5 shrink-0 rounded-full bg-current`,"aria-hidden":!0}):null,t[9]=n,t[10]=b);let x;t[11]===m?x=t[12]:(x=(0,u.jsx)(`span`,{className:`truncate`,children:m}),t[11]=m,t[12]=x);let S;return t[13]!==m||t[14]!==g||t[15]!==_||t[16]!==v||t[17]!==y||t[18]!==b||t[19]!==x?(S=(0,u.jsxs)(`span`,{className:g,role:`status`,"aria-live":`polite`,title:m,children:[_,v,y,b,x]}),t[13]=m,t[14]=g,t[15]=_,t[16]=v,t[17]=y,t[18]=b,t[19]=x,t[20]=S):S=t[20],S}function f(e){return e.language}var p=e(t(),1);function m({value:e,dirty:t,onSave:n,enabled:r=!0,delayMs:i=700,validate:a,serialize:o=JSON.stringify}){let[s,c]=(0,p.useState)(`idle`),[l,u]=(0,p.useState)(null),d=(0,p.useRef)(e),f=(0,p.useRef)(n),m=(0,p.useRef)(a),h=(0,p.useRef)(o),g=(0,p.useRef)(null),_=(0,p.useRef)(!1),v=(0,p.useRef)(null),y=(0,p.useRef)(null),b=(0,p.useRef)(null),x=(0,p.useRef)(!0);d.current=e,f.current=n,m.current=a,h.current=o;let S=(0,p.useCallback)(()=>{g.current!==null&&(window.clearTimeout(g.current),g.current=null)},[]),C=(0,p.useCallback)(async e=>{S();let t=h.current(e);b.current=t;let n=m.current?.(e)??null;if(n){u(n),c(`error`);return}if(_.current){v.current=e;return}_.current=!0,u(null),c(`saving`);try{await f.current(e),y.current=t,x.current&&c(`saved`)}catch(e){x.current&&(u(e instanceof Error?e.message:String(e)),c(`error`))}finally{_.current=!1;let e=v.current;v.current=null,e&&h.current(e)!==y.current&&C(e)}},[S]),w=(0,p.useCallback)(()=>{let e=d.current;!r||!t||e===null||C(e)},[t,r,C]),T=(0,p.useCallback)(e=>{let t=e??d.current;!r||t===null||C(t)},[r,C]);return(0,p.useEffect)(()=>{if(!r||!t||e===null){S(),!t&&s===`dirty`&&c(`idle`);return}let n=o(e);if(n!==y.current&&!(s===`error`&&n===b.current))return c(e=>e===`saving`?e:`dirty`),S(),g.current=window.setTimeout(()=>void C(e),i),S},[S,i,t,r,C,o,s,e]),(0,p.useEffect)(()=>(x.current=!0,()=>{x.current=!1,S()}),[S]),(0,p.useEffect)(()=>{if(s!==`saved`)return;let e=window.setTimeout(()=>c(`idle`),1600);return()=>window.clearTimeout(e)},[s]),{status:s,error:l,flush:w,saveNow:T,retry:w,onBlurCapture:w}}export{d as n,m as t};
|