@xopcai/xopc 0.0.368 → 0.0.369
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-ext/_locales/en/messages.json +30 -1
- package/dist/browser-ext/_locales/zh_CN/messages.json +30 -1
- package/dist/browser-ext/dist/assets/{auth-beGtbLPS.js → page-context-BeworyNB.js} +1331 -1355
- package/dist/browser-ext/dist/assets/{sidepanel-BT0ojEzG.css → sidepanel-Ccl0eSa1.css} +43 -0
- package/dist/browser-ext/dist/background.js +680 -182
- package/dist/browser-ext/dist/sidepanel.html +2 -2
- package/dist/browser-ext/dist/sidepanel.js +372 -193
- package/dist/browser-ext/manifest.json +2 -8
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-D9ZMh5ZR.js → activity-store-BQ3PMp2q.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Bj3rvcTm.js → agent-avatar-dicebear-Stj17S9u.js} +1 -1
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CCRfvuov.js +1 -0
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-BjdgKCnk.js → agent-plugin-dialog-CRlzd8El.js} +1 -1
- package/dist/gateway/static/root/assets/agents-_ug2LCQb.js +66 -0
- package/dist/gateway/static/root/assets/{agents-admin-api-B5QDepbW.js → agents-admin-api-HBZvVyzF.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-2rTEtB_X.js → app-management-settings-panel-pJFe6M6c.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-BPVBS80k.js → appearance-settings-BrxSpBWa.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-1FuKlZYP.js → apps-page-DegSl5Lh.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-BbT1O7oK.js → archive-plugin-BO3I9zRP.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-DjwP_h8h.js → automations-page-BZQ_VHjp.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-BQywN6nG.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-gS7Wg68v.js → binary-plugins-gFD7vH9R.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-DbwMaivP.js → block-editor-3XjFv3kK.js} +3 -3
- package/dist/gateway/static/root/assets/browser-automation-inputs-DxRoKFun.js +1 -0
- package/dist/gateway/static/root/assets/browser-automations-page-yiEuG1v7.js +3 -0
- package/dist/gateway/static/root/assets/browser-settings-page-ch2_bQF0.js +3 -0
- package/dist/gateway/static/root/assets/{capabilities-Dd1PZRQw.js → capabilities-B48r0DDa.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-Lswa0hv8.js → capabilities-DO-vfNKI.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-page-djBsC_tG.js → capabilities-page-BEnFt_dj.js} +2 -2
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-DTHR1DrJ.js → capabilities-settings-panel-NckMsJ5N.js} +4 -4
- package/dist/gateway/static/root/assets/{capability-header-actions-494dnJsj.js → capability-header-actions-CY8KCO9j.js} +1 -1
- package/dist/gateway/static/root/assets/channels-CHOS2CGa.js +1 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-Bl7-Zk-x.js → chat-terminal-dock-Bwknnb4c.js} +2 -2
- package/dist/gateway/static/root/assets/{computer-settings-page-ByExKr_6.js → computer-settings-page-B2xeFCSt.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-BK_5aFxO.js → connector-service-page-C83DnAqK.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-D6wTmWA6.js +2 -0
- package/dist/gateway/static/root/assets/{date-picker-BXJv6472.js → date-picker-Bq9GR-DU.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-CWbbhKZa.js → dependency-picker-BTERkA9X.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-DWNEC3mk.js → desktop-pet-BwsbQw8V.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-BYwlxGiN.js → desktop-pet-settings-sL9i44pP.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-DI2bqaKO.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-D26tSY8Z.js → directory-picker-path-field-BFlDmsS5.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-xYIGNegB.js → extension-debug-page-7Z1Tp7-w.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BoQ1-3AW.js → extension-page-uGqvb8QX.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-Cw_JU6RR.js → extension-provider-xlSyz4Z6.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-BH5TFGPe.js → extension-settings-page-CKHgrjOs.js} +1 -1
- package/dist/gateway/static/root/assets/{fallback-models-04Wqmw14.js → fallback-models-BwQg0G1D.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-CNf0ZeRw.js → gateway-config-swr-7RKqgU_U.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-C4KtwMY3.js → gateway-realtime-DDWymi-o.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-BheKaO6d.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-settings-BqvCJVUC.js → gateway-settings-BAQnSEMJ.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DIxHacUw.js → gateway-startup-retry-jiV5sbEX.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-BZDjvwet.js +2 -0
- package/dist/gateway/static/root/assets/{image-generation-api-CS0q0Kto.js → image-generation-api-DO4mXb6I.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-n_rSLo6b.js → imports-page-re1_Nh64.js} +1 -1
- package/dist/gateway/static/root/assets/index-BB1z8QxA.js +106 -0
- package/dist/gateway/static/root/assets/index-D9R6tU7r.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-tVkrHbYF.js → keyboard-shortcuts-settings-B_xja9LN.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-L8tYuas0.js → local-app-workbench-page-CErdCrPX.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-SSJ9B1bH.js → local-apps-page-BPL2RXdK.js} +1 -1
- package/dist/gateway/static/root/assets/{local-session-drafts-B_McurIj.js → local-session-drafts-DRPsDCj1.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-D6_rF-qT.js → locale-store-COVscAqC.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-BWD63eg1.js → logs-page-DL-BM0xq.js} +2 -2
- package/dist/gateway/static/root/assets/management-settings-BOVRHhXk.js +1 -0
- package/dist/gateway/static/root/assets/{markdown-view-_xwUuKce.js → markdown-view-B_qnAcW2.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-C631CDu4.js → media-plugins-C0Pc-wSY.js} +1 -1
- package/dist/gateway/static/root/assets/messages-Bb2GK-Nj.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-cache-DyPPksMP.js +1 -0
- package/dist/gateway/static/root/assets/note-detail-panel-DJJK2yL4.js +5 -0
- package/dist/gateway/static/root/assets/{notes-api-vIZWQ9Yt.js → notes-api-sBgBcyLW.js} +1 -1
- package/dist/gateway/static/root/assets/notes-page-oCxO7ZTv.js +8 -0
- package/dist/gateway/static/root/assets/{page-context-capture-button-BlPDM7GM.js → page-context-capture-button-tf77xIz3.js} +1 -1
- package/dist/gateway/static/root/assets/personal-page-DOk9gUK5.js +1 -0
- package/dist/gateway/static/root/assets/{product-open-page-BJjWvoER.js → product-open-page-Dc3Y-Y7J.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-CEd4E7Gf.js → product-preview-content-MG_hmVA3.js} +1 -1
- package/dist/gateway/static/root/assets/{project-detail-page-DM4_VLNX.js → project-detail-page-3uAzbW4T.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-lszV8HuS.js → projects-page-MllfNLGA.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-uJnjqTcn.js → registry-api-Bh9UBb-f.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-O6j9CWX0.js → remote-access-hub-Bs-C70el.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CjnNQYW8.js → runtime-tools-settings-panel-DpJ5jNzR.js} +1 -1
- package/dist/gateway/static/root/assets/{scenes-page-B3T3dDOR.js → scenes-page-Dpxamkw6.js} +2 -2
- package/dist/gateway/static/root/assets/{schema-form-DT3c4Vd_.js → schema-form-DUeyQ1zh.js} +1 -1
- package/dist/gateway/static/root/assets/{send-session-input-CICkGwn-.js → send-session-input-Dgn4BRk_.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-BcQodoAu.js → session-api-yjpEz4pP.js} +1 -1
- package/dist/gateway/static/root/assets/{session-manager-B0tOE4qz.js → session-manager-LInoZ_Yi.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-BCVlNHtq.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-Bz-ue9fZ.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-D-PZjcss.js → settings-page-DouHuBXt.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-Ce3gTbT3.js → setup-status-panel-B5BoZ-1y.js} +1 -1
- package/dist/gateway/static/root/assets/{share-link-dialog-CWS8EkJS.js → share-link-dialog-DJTabLAM.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-23NJAKiq.js → share-preview-page-jw7h4t_B.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-iKhHbvBD.js → shares-api-c0dfWz6h.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-BlnlzGjH.js +1 -0
- package/dist/gateway/static/root/assets/{skill-api-C-MWdQwl.js → skill-api-CfyX_0zN.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-iy02aB13.js → skill-reload-api-Ge5XymHa.js} +1 -1
- package/dist/gateway/static/root/assets/skills-page-DjdTeYzm.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-DWf256TE.js +1 -0
- package/dist/gateway/static/root/assets/{task-detail-page-B2SIEyhZ.js → task-detail-page-DE6N1ZQe.js} +2 -2
- package/dist/gateway/static/root/assets/{task-expandable-content-D2LRR4BC.js → task-expandable-content-hYcgCEE3.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-BJfhz-Zq.js → theme-store-BOfCKgl6.js} +1 -1
- package/dist/gateway/static/root/assets/{tracing-settings-page-aHD56iaS.js → tracing-settings-page-DDWFXcST.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-BCf8CfTC.js → tunnel-api-BBm9esrY.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-B4XUkuJd.js → usage-page-C93x89uW.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-BnnTw9RE.js → use-autosave-CSckcjFx.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-Itczg0y1.js → use-composer-attachments-C7Gaaai1.js} +1 -1
- package/dist/gateway/static/root/assets/{use-file-preview-expanded-DJ5vyrvM.js → use-file-preview-expanded-Db2VYg1b.js} +2 -2
- package/dist/gateway/static/root/assets/user-model-page-B74LkVbp.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-BphJku8x.js → voice-api-key-field-GEw5x2fU.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-B4u4coFj.js → voice-config-api-3yyVwXln.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-jgOEP1xw.js → work-discovery-overlay-Bs2MKiTv.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-N69crzRu.js → workflow-run-setup-panel-BR_U_snV.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-Crk4SxtC.js +6 -0
- package/dist/gateway/static/root/assets/{workspace-api-Lzv6GDO8.js → workspace-api-Si2o3inw.js} +2 -2
- package/dist/gateway/static/root/index.html +27 -27
- package/dist/package.js +1 -1
- package/dist/packages/browser-control-contract/src/automation.js +213 -0
- package/dist/packages/browser-control-contract/src/index.js +43 -12
- package/dist/packages/gateway-contract/src/gateway-scopes.js +3 -1
- package/dist/packages/gateway-contract/src/notifications.js +1 -0
- package/dist/packages/realtime-protocol/src/voice.js +9 -3
- package/dist/src/agent/coding/repository-instructions.js +8 -1
- package/dist/src/agent/tool-manuals/browser.d.ts +1 -1
- package/dist/src/agent/tool-manuals/browser.js +3 -3
- package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
- package/dist/src/agent/tools/browser/tool/schemas.d.ts +0 -13
- package/dist/src/agent/tools/browser/tool/schemas.js +0 -4
- package/dist/src/agent/tools/browser-automation-tool.d.ts +74 -1
- package/dist/src/agent/tools/browser-automation-tool.js +52 -6
- package/dist/src/automations/capabilities/write.d.ts +2 -0
- package/dist/src/automations/domain/types.d.ts +11 -0
- package/dist/src/automations/domain/validation.d.ts +4 -0
- package/dist/src/automations/domain/validation.js +1 -0
- package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -0
- package/dist/src/automations/service/action-executor.js +11 -3
- package/dist/src/automations/service/automation-service.d.ts +1 -0
- package/dist/src/automations/service/automation-service.js +13 -1
- package/dist/src/bootstrap/application-state.js +1 -1
- package/dist/src/browser/automations/repository.d.ts +4 -0
- package/dist/src/browser/automations/repository.js +27 -6
- package/dist/src/browser/automations/runner.js +101 -9
- package/dist/src/browser/automations/runtime-service.js +4 -3
- package/dist/src/browser/automations/schema.d.ts +84 -1
- package/dist/src/browser/automations/schema.js +68 -2
- package/dist/src/browser/automations/service.d.ts +78 -1
- package/dist/src/browser/automations/service.js +36 -4
- package/dist/src/browser/automations/types.d.ts +19 -4
- package/dist/src/browser/drivers/extension-driver.d.ts +5 -5
- package/dist/src/browser/drivers/extension-driver.js +10 -10
- package/dist/src/browser/drivers/playwright-driver.js +46 -0
- package/dist/src/browser/index.d.ts +1 -2
- package/dist/src/browser/index.js +2 -3
- package/dist/src/browser/policy/browser-policy.d.ts +0 -1
- package/dist/src/browser/policy/browser-policy.js +1 -4
- package/dist/src/browser/providers/index.d.ts +1 -1
- package/dist/src/browser/providers/index.js +2 -2
- package/dist/src/browser/providers/realtime-extension.d.ts +1 -1
- package/dist/src/browser/providers/realtime-extension.js +5 -1
- package/dist/src/browser/recordings/service.d.ts +22 -0
- package/dist/src/browser/recordings/service.js +160 -0
- package/dist/src/browser/runtime/browser-runtime.d.ts +1 -1
- package/dist/src/browser/runtime/browser-runtime.js +19 -56
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/computer/runtime.js +2 -2
- package/dist/src/config/schema.d.ts +12 -12
- package/dist/src/config/schema.js +12 -12
- package/dist/src/endpoint-tools/policy.js +4 -3
- package/dist/src/gateway/hono/routes/browser-automations.js +23 -7
- package/dist/src/gateway/hono/routes/browser-recordings.d.ts +3 -0
- package/dist/src/gateway/hono/routes/browser-recordings.js +78 -0
- package/dist/src/gateway/hono/routes/browser.js +1 -34
- package/dist/src/gateway/hono/routes/device-push.js +1 -0
- package/dist/src/gateway/hono/routes/home.js +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/personal-agent.js +35 -0
- package/dist/src/gateway/hono/routes/voice.js +5 -2
- package/dist/src/gateway/security/gateway-scopes.js +3 -1
- package/dist/src/gateway/service/agent-runner.js +1 -0
- package/dist/src/home-intelligence/generator.d.ts +2 -0
- package/dist/src/home-intelligence/generator.js +53 -4
- package/dist/src/home-intelligence/host.d.ts +2 -1
- package/dist/src/home-intelligence/host.js +23 -3
- package/dist/src/migrations/cloud-public-models.js +1 -0
- package/dist/src/notifications/clarification.d.ts +5 -0
- package/dist/src/notifications/clarification.js +66 -0
- package/dist/src/notifications/device-store.js +1 -0
- package/dist/src/notifications/harmony-push.d.ts +1 -0
- package/dist/src/notifications/harmony-push.js +3 -1
- package/dist/src/notifications/planner.d.ts +1 -0
- package/dist/src/notifications/service.d.ts +2 -2
- package/dist/src/notifications/service.js +20 -4
- package/dist/src/notifications/store.d.ts +2 -0
- package/dist/src/notifications/store.js +7 -1
- package/dist/src/notifications/types.d.ts +1 -0
- package/dist/src/notifications/types.js +1 -0
- package/dist/src/storage/sqlite/clarification-wait-repository.js +1 -0
- package/dist/src/storage/sqlite/migrations/238_browser_record_replay.sql +45 -0
- package/dist/src/storage/sqlite/migrations/239_clarification_notifications.sql +26 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/tasks/home-query-service.d.ts +1 -1
- package/dist/src/tasks/home-query-service.js +6 -2
- package/dist/src/voice/dashscope/streaming-tts-stream.d.ts +2 -1
- package/dist/src/voice/dashscope/streaming-tts-stream.js +135 -79
- package/dist/src/voice/realtime/agentEngine.js +78 -1
- package/dist/src/voice/realtime/speakable-segmenter.d.ts +2 -0
- package/dist/src/voice/realtime/speakable-segmenter.js +30 -0
- package/dist/src/voice/tts/providers/alibaba-speech.js +17 -1
- package/dist/src/voice/tts/speak-core.d.ts +3 -0
- package/dist/src/voice/tts/speak-core.js +21 -1
- package/dist/src/voice/tts/speech-provider-types.d.ts +8 -0
- package/package.json +3 -3
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-D0tD3kCe.js +0 -1
- package/dist/gateway/static/root/assets/agents-CWXKzX5L.js +0 -66
- package/dist/gateway/static/root/assets/automations-workspace-C9ZT6TAU.js +0 -6
- package/dist/gateway/static/root/assets/browser-automation-inputs-CXG_JveC.js +0 -1
- package/dist/gateway/static/root/assets/browser-automations-page-CJc7OKR3.js +0 -3
- package/dist/gateway/static/root/assets/browser-settings-page-BjaTEUR8.js +0 -3
- package/dist/gateway/static/root/assets/channels-BaYRJtz3.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DyqRwSH2.js +0 -2
- package/dist/gateway/static/root/assets/device-pairing-wizard-BAc4F35b.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-ChZUzVbe.js +0 -1
- package/dist/gateway/static/root/assets/home-page-DhPPLbdD.js +0 -2
- package/dist/gateway/static/root/assets/index-CK4O2xMa.css +0 -1
- package/dist/gateway/static/root/assets/index-DpLD-7Hc.js +0 -106
- package/dist/gateway/static/root/assets/management-settings-aKSibklM.js +0 -1
- package/dist/gateway/static/root/assets/messages-Bnx3GMDB.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-cache-Di83uIPw.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-B_fve3_2.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-DnChyp8S.js +0 -8
- package/dist/gateway/static/root/assets/personal-page-BM2qAgg_.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BIixHXlQ.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-49SUEWPh.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-CNEZjF66.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-BndNdYsJ.js +0 -2
- package/dist/gateway/static/root/assets/system-settings-panel-EpZeMlvp.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-Bz5lkFG9.js +0 -2
- package/dist/gateway/static/root/assets/workflows-page-CPCgOfHh.js +0 -6
- package/dist/src/browser/policy/approval-store.d.ts +0 -17
- package/dist/src/browser/policy/approval-store.js +0 -62
- package/dist/src/browser/providers/extension-ws-acquire.d.ts +0 -19
- package/dist/src/browser/providers/extension-ws-acquire.js +0 -78
- package/dist/src/browser/providers/extension.d.ts +0 -61
- package/dist/src/browser/providers/extension.js +0 -378
|
@@ -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{g as i}from"./chunk-KS7C4IRE-BMYIfy9x.js";import{t as a}from"./markdown-view-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{g as i}from"./chunk-KS7C4IRE-BMYIfy9x.js";import{t as a}from"./markdown-view-B_qnAcW2.js";import{t as o}from"./cn-JdwAhgNB.js";import{d as s}from"./tasks-DwKXgZ-I.js";function c(e){let t=e.task.contract?.acceptanceCriteria??[],n=new Map(e.runs.map(e=>[e.id,e])),r=e.receipts.filter(t=>n.get(t.runId)?.contractVersion===e.task.latestContractVersion).sort((e,t)=>t.finalizedAt-e.finalizedAt);return t.map((t,n)=>{let i=e.criterionReviews.find(r=>r.criterionIndex===n&&r.contractVersion===e.task.latestContractVersion&&r.criterionText===t),a={text:t,status:`unverified`,evidence:[]};for(let e of r){let n=e.verification.checks.find(e=>e.criterion===t);if(!n||n.status===`unverified`)continue;let r=e.evidence.filter(e=>n.evidenceTitles.includes(e.title)),i=n.status===`passed`&&s(e).has(t)?`passed`:n.status===`failed`?`failed`:`unverified`;if(i!==`unverified`){a={text:t,status:i,evidence:r,runId:e.runId};break}}return i&&e.task.contract?.acceptancePolicy!==`verified_auto`?{...a,status:i.status,review:i}:e.task.contract?.acceptancePolicy===`manual`?{...a,status:`unverified`}:a})}var l=n(),u=e(t(),1),d=r();function f(e){let t=(0,l.c)(36),{content:n,contentKey:r,language:s,markdown:c,breaks:f,previewHeight:p,className:m,children:h}=e,g=c===void 0?!0:c,_=f===void 0?!1:f,v=p===void 0?240:p,y=(0,u.useId)(),b=(0,u.useRef)(null),[x,S]=(0,u.useState)(!1),[C,w]=i(),T;t[0]!==r||t[1]!==C?(T=C.getAll(`taskExpanded`).includes(r),t[0]=r,t[1]=C,t[2]=T):T=t[2];let E=T,D;t[3]===v?D=t[4]:(D=()=>{let e=b.current;if(!e)return;let t=()=>S(e.scrollHeight>v);if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},t[3]=v,t[4]=D);let O;t[5]!==n||t[6]!==v?(O=[n,v],t[5]=n,t[6]=v,t[7]=O):O=t[7],(0,u.useLayoutEffect)(D,O);let k=x&&!E,A;t[8]===m?A=t[9]:(A=o(`min-w-0`,m),t[8]=m,t[9]=A);let j;t[10]!==k||t[11]!==v?(j=k?{maxHeight:v,overflow:`hidden`,maskImage:`linear-gradient(to bottom, black calc(100% - ${Math.min(24,v/3)}px), transparent)`}:void 0,t[10]=k,t[11]=v,t[12]=j):j=t[12];let M;t[13]!==_||t[14]!==h||t[15]!==n||t[16]!==g?(M=h??(g?(0,d.jsx)(a,{content:n,compact:!0,breaks:_,className:`text-sm leading-6 text-fg`}):(0,d.jsx)(`p`,{className:`whitespace-pre-wrap break-words [overflow-wrap:anywhere]`,children:n})),t[13]=_,t[14]=h,t[15]=n,t[16]=g,t[17]=M):M=t[17];let N;t[18]!==k||t[19]!==M?(N=(0,d.jsx)(`div`,{ref:b,inert:k,children:M}),t[18]=k,t[19]=M,t[20]=N):N=t[20];let P;t[21]!==y||t[22]!==N||t[23]!==j?(P=(0,d.jsx)(`div`,{id:y,style:j,children:N}),t[21]=y,t[22]=N,t[23]=j,t[24]=P):P=t[24];let F;t[25]!==r||t[26]!==E||t[27]!==y||t[28]!==s||t[29]!==x||t[30]!==w?(F=x?(0,d.jsx)(`button`,{type:`button`,"aria-expanded":E,"aria-controls":y,className:`mt-2 min-h-9 rounded-sm text-xs font-medium text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,onClick:()=>w(e=>{let t=new URLSearchParams(e),n=t.getAll(`taskExpanded`).filter(e=>e!==r);t.delete(`taskExpanded`);for(let e of n)t.append(`taskExpanded`,e);return E||t.append(`taskExpanded`,r),t},{preventScrollReset:!0}),children:s===`zh`?E?`收起`:`查看更多`:E?`Show less`:`Show more`}):null,t[25]=r,t[26]=E,t[27]=y,t[28]=s,t[29]=x,t[30]=w,t[31]=F):F=t[31];let I;return t[32]!==P||t[33]!==F||t[34]!==A?(I=(0,d.jsxs)(`div`,{className:A,children:[P,F]}),t[32]=P,t[33]=F,t[34]=A,t[35]=I):I=t[35],I}export{c as n,f as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as e}from"./locale-store-
|
|
1
|
+
import{p as e}from"./locale-store-COVscAqC.js";import{t}from"./middleware-Pd0e8Igk.js";var n=`default`,r={light:{default:`#f7f8fa`,emerald:`#f0fdf4`,clay:`#fffaf0`,dawn:`#accdec`,porcelain:`#f6f0e7`},dark:{default:`#14171c`,emerald:`#000000`,clay:`#0a1a1a`,dawn:`#172433`,porcelain:`#211c19`}};function i(e,t){let n=document.head;if(!n)return;let i=n.querySelector(`meta[name="theme-color"][data-xopc-theme-color="true"]`);i||(i=document.createElement(`meta`),i.setAttribute(`name`,`theme-color`),i.setAttribute(`data-xopc-theme-color`,`true`),n.appendChild(i)),i.setAttribute(`content`,r[e][t])}function a(){return globalThis.matchMedia?.(`(prefers-color-scheme: dark)`).matches??!1}function o(e){return e===`system`?a()?`dark`:`light`:e}function s(){return globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1}function c(e){return e==="default"||e===`emerald`||e===`clay`||e===`dawn`||e===`porcelain`?e:n}function l(e){window.electronAPI?.theme?.setPreference(e).catch(()=>{})}function u(e,t,n){let r=document.documentElement,a=()=>{r.classList.toggle(`dark`,e===`dark`),r.dataset.theme=e,r.dataset.colorScheme=t,i(e,t)},o=document;n&&!s()&&typeof o.startViewTransition==`function`?o.startViewTransition(a):a()}function d(){try{let e=localStorage.getItem(`xopc-web-theme`),t=`system`,r=n;if(e){let n=JSON.parse(e);n.state?.preference&&(t=n.state.preference),n.state&&`colorScheme`in n.state&&(r=c(n.state.colorScheme))}u(o(t),r,!1),l(t)}catch{u(o(`system`),`default`,!1)}}var f=e(t((e,t)=>({preference:`system`,colorScheme:n,resolved:o(`system`),setPreference:n=>{let r=o(n),{resolved:i,colorScheme:a}=t();u(r,a,r!==i),e({preference:n,resolved:r}),l(n)},setColorScheme:n=>{let{resolved:r}=t();u(r,n,!0),e({colorScheme:n})}}),{name:`xopc-web-theme`,merge:(e,t)=>{let n=e??{};return{...t,...n,colorScheme:c(n.colorScheme)}}}));function p(){let{preference:e,colorScheme:t}=f.getState(),n=o(e);u(n,t,!1),f.setState({resolved:n}),l(e)}function m(){let e=globalThis.matchMedia?.(`(prefers-color-scheme: dark)`);if(!e)return()=>{};let t=()=>{let{preference:e,colorScheme:t}=f.getState();if(e!==`system`)return;let n=o(`system`),r=f.getState().resolved;u(n,t,n!==r),f.setState({resolved:n})};return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)}export{f as i,m as n,p as r,d as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./popover-select-BgSdSbCL.js";import{t as ee}from"./secret-input-D93UrW4C.js";import{a,n as te,r as o}from"./locale-store-D6_rF-qT.js";import{a as ne,i as re,n as ie,o as s,r as ae,s as c,t as l}from"./dist-BGTk37IG.js";import{i as u}from"./vendor-swr-BIWyz7Rc.js";import{t as d}from"./button-CS04eWY9.js";import{t as f}from"./skeleton-BwbyijEw.js";import{n as oe,r as se}from"./settings-page-layout-X1x-2Cp9.js";import{n as p,t as ce}from"./use-autosave-BnnTw9RE.js";var m=e(t(),1),h=n(),g=e=>o(`/api/observability/${e}`);async function _(e,t=`GET`,n){return a(g(e),{method:t,...n===void 0?{}:{body:JSON.stringify(n)}})}var v=r(),y=`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,b=`space-y-4 rounded-xl border border-edge bg-surface-panel p-4`,le=(e=0)=>`${(e/1048576).toFixed(1)} MiB`;function ue(){let e=(0,h.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,v.jsxs)(`div`,{"aria-busy":`true`,className:`space-y-4`,children:[(0,v.jsx)(f,{className:`h-48 rounded-xl`}),(0,v.jsx)(f,{className:`h-64 rounded-xl`})]}),e[0]=t):t=e[0],t}function de(e,t){let n=0,r=e,i=new Set;for(;r.parentSpanId&&n<12&&!i.has(r.spanId);){i.add(r.spanId);let e=t.find(e=>e.spanId===r.parentSpanId);if(!e)break;r=e,n++}return n}function fe(e){let t=[],n=new Set;function r(i){n.has(i.spanId)||(n.add(i.spanId),t.push(i),e.filter(e=>e.parentSpanId===i.spanId).forEach(r))}return e.filter(t=>!t.parentSpanId||!e.some(e=>e.spanId===t.parentSpanId)).forEach(r),e.forEach(r),t}function x(){let e=te(e=>e.language)===`zh`,t=(t,n)=>e?n:t,n=u(g(`tracing/settings`),()=>_(`tracing/settings`)),r=u(g(`tracing/status`),()=>_(`tracing/status`),{refreshInterval:1e4}),[a,o]=(0,m.useState)(),[h,x]=(0,m.useState)(),S=a??h??n.data?.config,[C,w]=(0,m.useState)(``),[T,E]=(0,m.useState)(``),[pe,me]=(0,m.useState)(0),[D,he]=(0,m.useState)(!1),[O,k]=(0,m.useState)(``),[ge,A]=(0,m.useState)(!1),[j,_e]=(0,m.useState)(``),[M,ve]=(0,m.useState)(`7`),[N,ye]=(0,m.useState)({conversationId:``,runId:``,agentId:``}),[P,F]=(0,m.useState)(`records`),[I,be]=(0,m.useState)(`10`),[xe,L]=(0,m.useState)([``]),[R,z]=(0,m.useState)(0),[Se,Ce]=(0,m.useState)(()=>Date.now()+1),B=xe[R],[V,H]=(0,m.useState)();function U(){L([``]),z(0),Ce(Date.now()+1)}let[we,W]=(0,m.useState)(!1),G=new URLSearchParams({limit:I,from:String(Se-Number(M)*864e5),to:String(Se)});j&&G.set(`status`,j),B&&G.set(`cursor`,B);for(let[e,t]of Object.entries(N))t&&G.set(e,t);let Te=`traces?${G}`,K=u(g(Te),()=>_(Te),{refreshInterval:B?0:1e4}),q=u(V?g(`traces/${V}`):null,()=>_(`traces/${V}`));function J(e){if(!S)return;let t=structuredClone(S);e(t),o(t)}async function Y(e,i=t(`Saved`,`已保存`)){he(!0),k(``),A(!1);try{await e(),k(i),await Promise.all([n.mutate(),r.mutate(),K.mutate()])}catch(e){A(!0),k(e instanceof Error?e.message:t(`Request failed`,`操作失败`))}finally{he(!1)}}let X=ce({value:S??null,dirty:!!(a&&JSON.stringify(a)!==JSON.stringify(h??n.data?.config)),validate:e=>{if([[`retentionDays`,1,90],[`maxStoreMiB`,16,4096],[`maxTraces`,10,1e5],[`maxSpans`,100,1e6],[`maxTraceKiB`,16,4096],[`maxWriteMiBPerMinute`,1,100]].some(([t,n,r])=>!Number.isInteger(e.local[t])||e.local[t]<n||e.local[t]>r))return t(`Enter valid storage limits before continuing.`,`请填写有效的存储限额。`);try{let t=new URL(e.langfuse.baseUrl);if(![`http:`,`https:`].includes(t.protocol)||e.langfuse.baseUrl.length>2048)throw Error()}catch{return t(`Enter a valid HTTP(S) Base URL.`,`请填写有效的 HTTP(S) Base URL。`)}return null},onSave:async e=>{x((await _(`tracing/settings`,`PATCH`,e)).config),o(t=>t&&JSON.stringify(t)===JSON.stringify(e)?void 0:t),await r.mutate().catch(()=>{})}}),Z=(0,m.useMemo)(()=>({publicKey:C.trim(),secretKey:T.trim()}),[C,T]),Q=ce({value:Z,dirty:!!(Z.publicKey||Z.secretKey),delayMs:1e3,validate:e=>e.publicKey.length>512||e.secretKey.length>512?t(`Credentials must be at most 512 characters.`,`凭证长度不能超过 512 个字符。`):null,onSave:async e=>{await _(`tracing/langfuse/credentials`,`PUT`,{...e.publicKey?{publicKey:e.publicKey}:{},...e.secretKey?{secretKey:e.secretKey}:{}}),w(t=>t.trim()===e.publicKey?``:t),E(t=>t.trim()===e.secretKey?``:t),me(e=>e+1),await Promise.allSettled([n.mutate(),r.mutate()])}}),$=[X.status,Q.status].some(e=>e===`dirty`||e===`saving`);async function Ee(){V&&await Y(async()=>{let e=await _(`traces/${V}/export`),t=URL.createObjectURL(new Blob([JSON.stringify(e,null,2)],{type:`application/json`})),n=document.createElement(`a`);n.href=t,n.download=`trace-${V}.json`,n.click(),URL.revokeObjectURL(t)},t(`Exported`,`已导出`))}return(0,v.jsxs)(se,{className:`space-y-6`,children:[(0,v.jsx)(oe,{title:t(`Runtime tracing`,`运行追踪`),subtitle:t(`Local diagnostics with bounded retention. Enable Langfuse to also export new traces.`,`默认保留有界本地记录;启用 Langfuse 后同时导出新采集的追踪。`),actions:P===`settings`?(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,v.jsx)(`span`,{className:`text-xs text-fg-muted`,children:t(`Changes save automatically`,`修改后自动保存`)}),(0,v.jsx)(p,{status:X.status,error:X.error})]}):(0,v.jsx)(d,{disabled:K.isValidating,onClick:U,children:t(`Refresh records`,`刷新记录`)})}),O&&(0,v.jsx)(`p`,{role:ge?`alert`:`status`,className:`text-sm text-fg-muted`,children:O}),n.error&&(0,v.jsx)(`p`,{role:`alert`,children:String(n.error.message)}),(0,v.jsxs)(`nav`,{"aria-label":t(`Tracing sections`,`追踪页面分区`),className:`flex gap-2 border-b border-edge pb-3`,children:[(0,v.jsx)(d,{"aria-pressed":P===`records`,variant:P===`records`?`primary`:`ghost`,onClick:()=>F(`records`),children:t(`Execution records`,`执行记录`)}),(0,v.jsx)(d,{"aria-pressed":P===`settings`,variant:P===`settings`?`primary`:`ghost`,onClick:()=>F(`settings`),children:t(`Capture settings`,`采集设置`)})]}),P===`settings`&&(S?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`section`,{className:b,onBlurCapture:X.onBlurCapture,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:t(`Local recording`,`本地记录`)}),X.error&&(0,v.jsx)(d,{variant:`ghost`,onClick:X.retry,children:t(`Retry autosave`,`重试自动保存`)}),(0,v.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,v.jsx)(`input`,{type:`checkbox`,checked:S.enabled,onChange:e=>J(t=>{t.enabled=e.target.checked})}),t(`Record traces`,`记录运行追踪`)]}),(0,v.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-3`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Retention (days)`,`保留天数`),(0,v.jsx)(`input`,{className:y,type:`number`,min:1,max:90,value:S.local.retentionDays,onChange:e=>J(t=>{t.local.retentionDays=Number(e.target.value)})})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Storage budget (MiB)`,`存储上限(MiB)`),(0,v.jsx)(`input`,{className:y,type:`number`,min:16,max:4096,value:S.local.maxStoreMiB,onChange:e=>J(t=>{t.local.maxStoreMiB=Number(e.target.value)})})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Capture`,`采集内容`),(0,v.jsx)(i,{placeholder:t(`Choose`,`请选择`),allowEmpty:!1,value:S.capture,onChange:e=>J(t=>{t.capture=e}),options:[{value:`metadata`,label:t(`Metadata only`,`仅元数据`)},{value:`redacted`,label:t(`Redacted previews`,`脱敏摘要`)},{value:`detailed`,label:t(`Detailed · 30 minutes`,`详细记录 · 30 分钟`)}]})]})]}),(0,v.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t(`Previews may contain personal content. Secrets and media are filtered; large values are truncated.`,`摘要可能包含个人内容。过滤凭证和媒体,超长内容会截断。`)}),S.detailedUntil&&(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Detailed capture expires: `,`详细采集截止:`),new Date(S.detailedUntil).toLocaleString()]}),(0,v.jsxs)(`details`,{children:[(0,v.jsx)(`summary`,{className:`cursor-pointer text-sm`,children:t(`Advanced limits`,`高级限制`)}),(0,v.jsx)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-2`,children:[[`maxTraces`,t(`Trace count`,`Trace 条数`)],[`maxSpans`,t(`Span count`,`Span 条数`)],[`maxTraceKiB`,t(`Per trace (KiB)`,`单 Trace 上限(KiB)`)],[`maxWriteMiBPerMinute`,t(`Write budget (MiB/minute)`,`写入额度(MiB/分钟)`)]].map(([e,t])=>(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t,(0,v.jsx)(`input`,{type:`number`,min:1,className:y,value:S.local[e],onChange:t=>J(n=>{n.local[e]=Number(t.target.value)})})]},e))})]}),r.data?(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Disk / payload`,`磁盘 / 数据`),`:`,le(r.data.local.physicalBytes),` / `,le(r.data.local.bytes),` · `,r.data.local.traces??0,` traces · `,r.data.local.spans??0,` spans · `,t(`Dropped`,`丢弃`),` `,Number(r.data.local.dropped??0)+Number(r.data.local.queueDropped??0),(r.data.local.paused||r.data.local.unavailable)&&` · ${t(`Recording paused`,`存储暂停`)}`]}):(0,v.jsx)(f,{className:`h-10`}),(r.error||r.data?.local.lastError)&&(0,v.jsx)(`p`,{role:`alert`,className:`text-sm`,children:r.data?.local.lastError||String(r.error.message)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(d,{disabled:D||$,onClick:()=>void Y(async()=>{await _(`traces/prune`,`POST`)}),children:t(`Clean expired`,`清理过期记录`)}),(0,v.jsx)(d,{disabled:D,onClick:()=>W(!0),children:t(`Clear local traces`,`清空本地追踪`)})]})]}),(0,v.jsxs)(`section`,{className:b,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:`Langfuse`}),(0,v.jsx)(p,{status:Q.status,error:Q.error})]}),Q.error&&(0,v.jsx)(d,{variant:`ghost`,onClick:Q.retry,children:t(`Retry autosave`,`重试自动保存`)}),(0,v.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,v.jsx)(`input`,{type:`checkbox`,checked:S.langfuse.enabled,onBlur:X.onBlurCapture,onChange:e=>J(t=>{t.langfuse.enabled=e.target.checked})}),t(`Also export new traces to Langfuse`,`同时导出新采集的追踪到 Langfuse`)]}),(0,v.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm sm:col-span-2`,children:[`Base URL`,(0,v.jsx)(`input`,{className:y,type:`url`,value:S.langfuse.baseUrl,onBlur:X.onBlurCapture,onChange:e=>J(t=>{t.langfuse.baseUrl=e.target.value})})]}),[`publicKey`,`secretKey`].map(e=>{let r=e===`publicKey`?`Public Key`:`Secret Key`,i=e===`publicKey`?C:T,a=n.data?.credentials[e===`publicKey`?`publicKeyConfigured`:`secretKeyConfigured`];return(0,v.jsxs)(`div`,{className:`space-y-1 text-sm`,onBlurCapture:Q.onBlurCapture,children:[(0,v.jsx)(`label`,{htmlFor:`langfuse-${e}`,children:r}),(0,v.jsx)(ee,{id:`langfuse-${e}`,value:i||(a?`••••••••••••`:``),allowUnrevealedCopy:!0,onChange:t=>(e===`publicKey`?w:E)(t.replace(/^•+/,``)),placeholder:e===`publicKey`?`pk-lf-…`:`sk-lf-…`,labels:{show:t(`Show ${r}`,`查看 ${r}`),hide:t(`Hide ${r}`,`隐藏 ${r}`),copy:t(`Copy ${r}`,`复制 ${r}`),copied:t(`Copied`,`已复制`)},reveal:()=>_(`tracing/langfuse/credentials/${e}/reveal`,`POST`).then(e=>e.key),loadFailedLabel:t(`Unable to load the configured key.`,`无法读取已配置的 Key。`),notInConfigFile:t(`No configured key is available.`,`暂无已配置的 Key。`)},pe)]},e)})]}),(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Credential sources`,`凭证来源`),`:`,n.data?.credentials.publicKeySource,` / `,n.data?.credentials.secretKeySource,` · URL: `,n.data?.credentials.baseUrlSource]}),r.data&&(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[r.data.langfuse.state,` · `,t(`Pending`,`待发送`),` `,r.data.langfuse.pending,` · `,t(`Dropped`,`丢弃`),` `,r.data.langfuse.dropped,r.data.langfuse.lastSuccess?` · ${new Date(r.data.langfuse.lastSuccess).toLocaleString()}`:``]}),r.data?.langfuse.lastError&&(0,v.jsx)(`p`,{role:`alert`,className:`text-sm`,children:r.data.langfuse.lastError}),(0,v.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t(`Changes save automatically. Historical traces are not uploaded. Offline exports may be dropped.`,`修改后自动保存。不会上传历史记录;断网或队列满时可能丢弃远端导出。`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(d,{disabled:D||$,onClick:()=>void Y(async()=>{if(!(await _(`tracing/langfuse/test`,`POST`)).ok)throw Error(t(`Connection test failed. Check saved configuration and credentials.`,`连接测试失败,请检查已保存的配置和凭证。`))},t(`Diagnostic trace accepted by the ingestion endpoint`,`采集端已接受诊断追踪`)),children:t(`Test connection`,`测试连接`)}),(0,v.jsx)(d,{disabled:D||$,onClick:()=>void Y(async()=>{await _(`tracing/langfuse/credentials`,`DELETE`),w(``),E(``),me(e=>e+1)}),children:t(`Remove saved credentials`,`移除已保存凭证`)})]})]})]}):(0,v.jsx)(ue,{})),P===`records`&&(0,v.jsxs)(`section`,{className:b,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:t(`Recent runs`,`最近执行`)}),(0,v.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Status`,`执行状态`),(0,v.jsx)(i,{placeholder:t(`All statuses`,`全部状态`),allowEmpty:!1,value:j,onChange:e=>{_e(e),U()},options:[{value:``,label:t(`All statuses`,`全部状态`)},...[`running`,`success`,`error`,`cancelled`,`suspended`,`interrupted`].map(e=>({value:e,label:t(e,{running:`运行中`,success:`成功`,error:`失败`,cancelled:`已取消`,suspended:`已暂停`,interrupted:`已中断`}[e])}))]})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Time range`,`时间范围`),(0,v.jsx)(i,{placeholder:t(`Choose`,`请选择`),value:M,allowEmpty:!1,onChange:e=>{ve(e),U()},options:[`1`,`7`,`30`,`90`].map(e=>({value:e,label:`${e} ${t(`days`,`天`)}`}))})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Page size`,`每页条数`),(0,v.jsx)(i,{placeholder:t(`Choose`,`请选择`),value:I,allowEmpty:!1,onChange:e=>{be(e),U()},options:[`10`,`20`].map(e=>({value:e,label:`${e} ${t(`records`,`条`)}`}))})]})]}),(0,v.jsxs)(`details`,{children:[(0,v.jsxs)(`summary`,{className:`cursor-pointer text-sm text-fg-muted`,children:[t(`Advanced filters`,`高级筛选`),Object.values(N).some(Boolean)?` · ${t(`Active`,`已启用`)}`:``]}),(0,v.jsx)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-3`,children:[`conversationId`,`runId`,`agentId`].map(e=>(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[{conversationId:t(`Conversation ID`,`会话 ID`),runId:t(`Run ID`,`执行 ID`),agentId:t(`Agent ID`,`Agent ID`)}[e],(0,v.jsx)(`input`,{"aria-label":e,placeholder:t(`Exact ID`,`输入完整 ID`),className:y,value:N[e],onChange:t=>{ye({...N,[e]:t.target.value}),U()}})]},e))})]}),(0,v.jsxs)(`div`,{role:`region`,"aria-label":t(`Execution results`,`执行结果`),"aria-busy":K.isValidating,className:`h-[24rem] min-h-0 overflow-y-auto overscroll-contain rounded-lg border border-edge sm:h-[28rem]`,children:[K.error&&(0,v.jsx)(`p`,{role:`alert`,className:`p-4 text-sm`,children:K.error.message}),!K.data&&!K.error?(0,v.jsx)(`div`,{className:`space-y-3 p-3`,children:[0,1,2,3,4].map(e=>(0,v.jsx)(f,{className:`h-16`},e))}):(0,v.jsxs)(`div`,{className:`divide-y divide-edge`,children:[K.data?.traces.length===0&&(0,v.jsx)(`p`,{className:`flex h-48 items-center justify-center px-4 text-sm text-fg-muted`,children:t(`No traces in this range`,`此时间范围内暂无记录`)}),K.data?.traces.map(n=>(0,v.jsxs)(`button`,{onClick:()=>H(n.traceId),className:`flex w-full flex-col gap-2 px-3 py-3 text-left text-sm hover:bg-surface-hover sm:flex-row sm:items-center sm:justify-between`,children:[(0,v.jsxs)(`div`,{className:`min-w-0`,children:[(0,v.jsxs)(`p`,{className:`truncate font-medium`,children:[n.name,n.attributes[`xopc.agentId`]?` · ${n.attributes[`xopc.agentId`]}`:``]}),(0,v.jsxs)(`p`,{className:`truncate text-xs text-fg-muted`,children:[new Date(n.startedAt).toLocaleString(e?`zh-CN`:`en-US`),` · `,n.traceId]}),n.stats&&(0,v.jsxs)(`p`,{className:`text-xs text-fg-muted`,children:[n.stats.generations,` `,t(`model calls`,`次模型调用`),` · `,n.stats.tokens,` tokens · $`,n.stats.knownCostUsd.toFixed(4),n.stats.unknownCostCalls>0?` · ${t(`partial cost`,`部分成本未知`)}`:``]})]}),(0,v.jsxs)(`span`,{className:`shrink-0 text-xs text-fg-muted`,children:[t(n.status,{running:`运行中`,success:`成功`,error:`失败`,cancelled:`已取消`,suspended:`已暂停`,interrupted:`已中断`}[n.status]??n.status),` · `,n.endedAt?`${Math.round(n.endedAt-n.startedAt)} ms`:`—`,n.partialReason?` · ${t(`Partial`,`部分记录`)}`:``]})]},n.traceId))]})]}),(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,v.jsx)(`p`,{"aria-live":`polite`,className:`text-xs text-fg-muted`,children:t(`Page ${R+1} · ${K.data?.traces.length??0} records`,`第 ${R+1} 页 · ${K.data?.traces.length??0} 条`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(d,{disabled:R===0||K.isValidating,onClick:()=>z(e=>Math.max(0,e-1)),children:t(`Previous page`,`上一页`)}),(0,v.jsx)(d,{disabled:!K.data?.nextCursor||K.isValidating,onClick:()=>{let e=K.data?.nextCursor;e&&(L(t=>[...t.slice(0,R+1),e]),z(e=>e+1))},children:t(`Next page`,`下一页`)})]})]})]}),(0,v.jsx)(l,{open:!!V,onOpenChange:e=>{e||H(void 0)},children:(0,v.jsxs)(s,{children:[(0,v.jsx)(ne,{className:`fixed inset-0 z-[90] bg-black/40`}),(0,v.jsxs)(ae,{className:`fixed left-1/2 top-1/2 z-[91] flex h-[min(44rem,calc(100vh-2rem))] w-[min(64rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-xl border border-edge bg-surface-overlay p-4`,children:[(0,v.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-3`,children:[(0,v.jsx)(c,{className:`font-medium`,children:t(`Trace details`,`追踪详情`)}),(0,v.jsx)(ie,{asChild:!0,children:(0,v.jsx)(d,{children:t(`Close`,`关闭`)})})]}),(0,v.jsx)(re,{className:`shrink-0 truncate text-xs text-fg-muted`,children:V}),(0,v.jsx)(`div`,{className:`min-h-0 flex-1 space-y-3 overflow-y-auto py-4`,children:q.error?(0,v.jsx)(`p`,{role:`alert`,children:q.error.message}):q.data?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`p`,{className:`text-sm`,children:[q.data.trace.status,` `,q.data.trace.partialReason&&` · ${q.data.trace.partialReason}`]}),fe(q.data.spans).map(e=>(0,v.jsxs)(`details`,{style:{marginLeft:de(e,q.data.spans)*12},className:`rounded-lg border border-edge p-3 text-sm`,children:[(0,v.jsxs)(`summary`,{className:`cursor-pointer`,children:[e.name,` · `,e.status,` · `,e.endedAt?`${Math.round(e.endedAt-e.startedAt)} ms`:`—`]}),(0,v.jsx)(`pre`,{className:`mt-3 whitespace-pre-wrap break-all text-xs text-fg-muted`,children:JSON.stringify(e.attributes,null,2)})]},e.spanId))]}):(0,v.jsx)(ue,{})}),(0,v.jsx)(`div`,{className:`shrink-0 border-t border-edge pt-3`,children:(0,v.jsx)(d,{disabled:!q.data||D,onClick:()=>void Ee(),children:t(`Export JSON`,`导出 JSON`)})})]})]})}),(0,v.jsx)(l,{open:we,onOpenChange:W,children:(0,v.jsxs)(s,{children:[(0,v.jsx)(ne,{className:`fixed inset-0 z-[90] bg-black/40`}),(0,v.jsxs)(ae,{className:`fixed left-1/2 top-1/2 z-[91] w-[min(28rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 space-y-4 rounded-xl border border-edge bg-surface-overlay p-5`,children:[(0,v.jsx)(c,{children:t(`Clear local traces?`,`清空本地追踪?`)}),(0,v.jsx)(re,{className:`text-sm text-fg-muted`,children:t(`Removes retained local traces. Conversations, usage records and Langfuse data remain available.`,`删除已保留的本地追踪。会话、用量记录及 Langfuse 数据仍保留。`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(d,{disabled:D||$,onClick:()=>void Y(async()=>{await _(`traces`,`DELETE`),W(!1),H(void 0)}),children:t(`Clear`,`清空`)}),(0,v.jsx)(ie,{asChild:!0,children:(0,v.jsx)(d,{children:t(`Cancel`,`取消`)})})]})]})]})})]})}export{x as TracingSettingsPage};
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./popover-select-BgSdSbCL.js";import{t as ee}from"./secret-input-D93UrW4C.js";import{a,n as te,r as o}from"./locale-store-COVscAqC.js";import{a as ne,i as re,n as ie,o as s,r as ae,s as c,t as l}from"./dist-BGTk37IG.js";import{i as u}from"./vendor-swr-BIWyz7Rc.js";import{t as d}from"./button-CS04eWY9.js";import{t as f}from"./skeleton-BwbyijEw.js";import{n as oe,r as se}from"./settings-page-layout-X1x-2Cp9.js";import{n as p,t as ce}from"./use-autosave-CSckcjFx.js";var m=e(t(),1),h=n(),g=e=>o(`/api/observability/${e}`);async function _(e,t=`GET`,n){return a(g(e),{method:t,...n===void 0?{}:{body:JSON.stringify(n)}})}var v=r(),y=`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,b=`space-y-4 rounded-xl border border-edge bg-surface-panel p-4`,le=(e=0)=>`${(e/1048576).toFixed(1)} MiB`;function ue(){let e=(0,h.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,v.jsxs)(`div`,{"aria-busy":`true`,className:`space-y-4`,children:[(0,v.jsx)(f,{className:`h-48 rounded-xl`}),(0,v.jsx)(f,{className:`h-64 rounded-xl`})]}),e[0]=t):t=e[0],t}function de(e,t){let n=0,r=e,i=new Set;for(;r.parentSpanId&&n<12&&!i.has(r.spanId);){i.add(r.spanId);let e=t.find(e=>e.spanId===r.parentSpanId);if(!e)break;r=e,n++}return n}function fe(e){let t=[],n=new Set;function r(i){n.has(i.spanId)||(n.add(i.spanId),t.push(i),e.filter(e=>e.parentSpanId===i.spanId).forEach(r))}return e.filter(t=>!t.parentSpanId||!e.some(e=>e.spanId===t.parentSpanId)).forEach(r),e.forEach(r),t}function x(){let e=te(e=>e.language)===`zh`,t=(t,n)=>e?n:t,n=u(g(`tracing/settings`),()=>_(`tracing/settings`)),r=u(g(`tracing/status`),()=>_(`tracing/status`),{refreshInterval:1e4}),[a,o]=(0,m.useState)(),[h,x]=(0,m.useState)(),S=a??h??n.data?.config,[C,w]=(0,m.useState)(``),[T,E]=(0,m.useState)(``),[pe,me]=(0,m.useState)(0),[D,he]=(0,m.useState)(!1),[O,k]=(0,m.useState)(``),[ge,A]=(0,m.useState)(!1),[j,_e]=(0,m.useState)(``),[M,ve]=(0,m.useState)(`7`),[N,ye]=(0,m.useState)({conversationId:``,runId:``,agentId:``}),[P,F]=(0,m.useState)(`records`),[I,be]=(0,m.useState)(`10`),[xe,L]=(0,m.useState)([``]),[R,z]=(0,m.useState)(0),[Se,Ce]=(0,m.useState)(()=>Date.now()+1),B=xe[R],[V,H]=(0,m.useState)();function U(){L([``]),z(0),Ce(Date.now()+1)}let[we,W]=(0,m.useState)(!1),G=new URLSearchParams({limit:I,from:String(Se-Number(M)*864e5),to:String(Se)});j&&G.set(`status`,j),B&&G.set(`cursor`,B);for(let[e,t]of Object.entries(N))t&&G.set(e,t);let Te=`traces?${G}`,K=u(g(Te),()=>_(Te),{refreshInterval:B?0:1e4}),q=u(V?g(`traces/${V}`):null,()=>_(`traces/${V}`));function J(e){if(!S)return;let t=structuredClone(S);e(t),o(t)}async function Y(e,i=t(`Saved`,`已保存`)){he(!0),k(``),A(!1);try{await e(),k(i),await Promise.all([n.mutate(),r.mutate(),K.mutate()])}catch(e){A(!0),k(e instanceof Error?e.message:t(`Request failed`,`操作失败`))}finally{he(!1)}}let X=ce({value:S??null,dirty:!!(a&&JSON.stringify(a)!==JSON.stringify(h??n.data?.config)),validate:e=>{if([[`retentionDays`,1,90],[`maxStoreMiB`,16,4096],[`maxTraces`,10,1e5],[`maxSpans`,100,1e6],[`maxTraceKiB`,16,4096],[`maxWriteMiBPerMinute`,1,100]].some(([t,n,r])=>!Number.isInteger(e.local[t])||e.local[t]<n||e.local[t]>r))return t(`Enter valid storage limits before continuing.`,`请填写有效的存储限额。`);try{let t=new URL(e.langfuse.baseUrl);if(![`http:`,`https:`].includes(t.protocol)||e.langfuse.baseUrl.length>2048)throw Error()}catch{return t(`Enter a valid HTTP(S) Base URL.`,`请填写有效的 HTTP(S) Base URL。`)}return null},onSave:async e=>{x((await _(`tracing/settings`,`PATCH`,e)).config),o(t=>t&&JSON.stringify(t)===JSON.stringify(e)?void 0:t),await r.mutate().catch(()=>{})}}),Z=(0,m.useMemo)(()=>({publicKey:C.trim(),secretKey:T.trim()}),[C,T]),Q=ce({value:Z,dirty:!!(Z.publicKey||Z.secretKey),delayMs:1e3,validate:e=>e.publicKey.length>512||e.secretKey.length>512?t(`Credentials must be at most 512 characters.`,`凭证长度不能超过 512 个字符。`):null,onSave:async e=>{await _(`tracing/langfuse/credentials`,`PUT`,{...e.publicKey?{publicKey:e.publicKey}:{},...e.secretKey?{secretKey:e.secretKey}:{}}),w(t=>t.trim()===e.publicKey?``:t),E(t=>t.trim()===e.secretKey?``:t),me(e=>e+1),await Promise.allSettled([n.mutate(),r.mutate()])}}),$=[X.status,Q.status].some(e=>e===`dirty`||e===`saving`);async function Ee(){V&&await Y(async()=>{let e=await _(`traces/${V}/export`),t=URL.createObjectURL(new Blob([JSON.stringify(e,null,2)],{type:`application/json`})),n=document.createElement(`a`);n.href=t,n.download=`trace-${V}.json`,n.click(),URL.revokeObjectURL(t)},t(`Exported`,`已导出`))}return(0,v.jsxs)(se,{className:`space-y-6`,children:[(0,v.jsx)(oe,{title:t(`Runtime tracing`,`运行追踪`),subtitle:t(`Local diagnostics with bounded retention. Enable Langfuse to also export new traces.`,`默认保留有界本地记录;启用 Langfuse 后同时导出新采集的追踪。`),actions:P===`settings`?(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,v.jsx)(`span`,{className:`text-xs text-fg-muted`,children:t(`Changes save automatically`,`修改后自动保存`)}),(0,v.jsx)(p,{status:X.status,error:X.error})]}):(0,v.jsx)(d,{disabled:K.isValidating,onClick:U,children:t(`Refresh records`,`刷新记录`)})}),O&&(0,v.jsx)(`p`,{role:ge?`alert`:`status`,className:`text-sm text-fg-muted`,children:O}),n.error&&(0,v.jsx)(`p`,{role:`alert`,children:String(n.error.message)}),(0,v.jsxs)(`nav`,{"aria-label":t(`Tracing sections`,`追踪页面分区`),className:`flex gap-2 border-b border-edge pb-3`,children:[(0,v.jsx)(d,{"aria-pressed":P===`records`,variant:P===`records`?`primary`:`ghost`,onClick:()=>F(`records`),children:t(`Execution records`,`执行记录`)}),(0,v.jsx)(d,{"aria-pressed":P===`settings`,variant:P===`settings`?`primary`:`ghost`,onClick:()=>F(`settings`),children:t(`Capture settings`,`采集设置`)})]}),P===`settings`&&(S?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`section`,{className:b,onBlurCapture:X.onBlurCapture,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:t(`Local recording`,`本地记录`)}),X.error&&(0,v.jsx)(d,{variant:`ghost`,onClick:X.retry,children:t(`Retry autosave`,`重试自动保存`)}),(0,v.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,v.jsx)(`input`,{type:`checkbox`,checked:S.enabled,onChange:e=>J(t=>{t.enabled=e.target.checked})}),t(`Record traces`,`记录运行追踪`)]}),(0,v.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-3`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Retention (days)`,`保留天数`),(0,v.jsx)(`input`,{className:y,type:`number`,min:1,max:90,value:S.local.retentionDays,onChange:e=>J(t=>{t.local.retentionDays=Number(e.target.value)})})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Storage budget (MiB)`,`存储上限(MiB)`),(0,v.jsx)(`input`,{className:y,type:`number`,min:16,max:4096,value:S.local.maxStoreMiB,onChange:e=>J(t=>{t.local.maxStoreMiB=Number(e.target.value)})})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Capture`,`采集内容`),(0,v.jsx)(i,{placeholder:t(`Choose`,`请选择`),allowEmpty:!1,value:S.capture,onChange:e=>J(t=>{t.capture=e}),options:[{value:`metadata`,label:t(`Metadata only`,`仅元数据`)},{value:`redacted`,label:t(`Redacted previews`,`脱敏摘要`)},{value:`detailed`,label:t(`Detailed · 30 minutes`,`详细记录 · 30 分钟`)}]})]})]}),(0,v.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t(`Previews may contain personal content. Secrets and media are filtered; large values are truncated.`,`摘要可能包含个人内容。过滤凭证和媒体,超长内容会截断。`)}),S.detailedUntil&&(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Detailed capture expires: `,`详细采集截止:`),new Date(S.detailedUntil).toLocaleString()]}),(0,v.jsxs)(`details`,{children:[(0,v.jsx)(`summary`,{className:`cursor-pointer text-sm`,children:t(`Advanced limits`,`高级限制`)}),(0,v.jsx)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-2`,children:[[`maxTraces`,t(`Trace count`,`Trace 条数`)],[`maxSpans`,t(`Span count`,`Span 条数`)],[`maxTraceKiB`,t(`Per trace (KiB)`,`单 Trace 上限(KiB)`)],[`maxWriteMiBPerMinute`,t(`Write budget (MiB/minute)`,`写入额度(MiB/分钟)`)]].map(([e,t])=>(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t,(0,v.jsx)(`input`,{type:`number`,min:1,className:y,value:S.local[e],onChange:t=>J(n=>{n.local[e]=Number(t.target.value)})})]},e))})]}),r.data?(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Disk / payload`,`磁盘 / 数据`),`:`,le(r.data.local.physicalBytes),` / `,le(r.data.local.bytes),` · `,r.data.local.traces??0,` traces · `,r.data.local.spans??0,` spans · `,t(`Dropped`,`丢弃`),` `,Number(r.data.local.dropped??0)+Number(r.data.local.queueDropped??0),(r.data.local.paused||r.data.local.unavailable)&&` · ${t(`Recording paused`,`存储暂停`)}`]}):(0,v.jsx)(f,{className:`h-10`}),(r.error||r.data?.local.lastError)&&(0,v.jsx)(`p`,{role:`alert`,className:`text-sm`,children:r.data?.local.lastError||String(r.error.message)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(d,{disabled:D||$,onClick:()=>void Y(async()=>{await _(`traces/prune`,`POST`)}),children:t(`Clean expired`,`清理过期记录`)}),(0,v.jsx)(d,{disabled:D,onClick:()=>W(!0),children:t(`Clear local traces`,`清空本地追踪`)})]})]}),(0,v.jsxs)(`section`,{className:b,children:[(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:`Langfuse`}),(0,v.jsx)(p,{status:Q.status,error:Q.error})]}),Q.error&&(0,v.jsx)(d,{variant:`ghost`,onClick:Q.retry,children:t(`Retry autosave`,`重试自动保存`)}),(0,v.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,v.jsx)(`input`,{type:`checkbox`,checked:S.langfuse.enabled,onBlur:X.onBlurCapture,onChange:e=>J(t=>{t.langfuse.enabled=e.target.checked})}),t(`Also export new traces to Langfuse`,`同时导出新采集的追踪到 Langfuse`)]}),(0,v.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm sm:col-span-2`,children:[`Base URL`,(0,v.jsx)(`input`,{className:y,type:`url`,value:S.langfuse.baseUrl,onBlur:X.onBlurCapture,onChange:e=>J(t=>{t.langfuse.baseUrl=e.target.value})})]}),[`publicKey`,`secretKey`].map(e=>{let r=e===`publicKey`?`Public Key`:`Secret Key`,i=e===`publicKey`?C:T,a=n.data?.credentials[e===`publicKey`?`publicKeyConfigured`:`secretKeyConfigured`];return(0,v.jsxs)(`div`,{className:`space-y-1 text-sm`,onBlurCapture:Q.onBlurCapture,children:[(0,v.jsx)(`label`,{htmlFor:`langfuse-${e}`,children:r}),(0,v.jsx)(ee,{id:`langfuse-${e}`,value:i||(a?`••••••••••••`:``),allowUnrevealedCopy:!0,onChange:t=>(e===`publicKey`?w:E)(t.replace(/^•+/,``)),placeholder:e===`publicKey`?`pk-lf-…`:`sk-lf-…`,labels:{show:t(`Show ${r}`,`查看 ${r}`),hide:t(`Hide ${r}`,`隐藏 ${r}`),copy:t(`Copy ${r}`,`复制 ${r}`),copied:t(`Copied`,`已复制`)},reveal:()=>_(`tracing/langfuse/credentials/${e}/reveal`,`POST`).then(e=>e.key),loadFailedLabel:t(`Unable to load the configured key.`,`无法读取已配置的 Key。`),notInConfigFile:t(`No configured key is available.`,`暂无已配置的 Key。`)},pe)]},e)})]}),(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[t(`Credential sources`,`凭证来源`),`:`,n.data?.credentials.publicKeySource,` / `,n.data?.credentials.secretKeySource,` · URL: `,n.data?.credentials.baseUrlSource]}),r.data&&(0,v.jsxs)(`p`,{className:`text-sm text-fg-muted`,children:[r.data.langfuse.state,` · `,t(`Pending`,`待发送`),` `,r.data.langfuse.pending,` · `,t(`Dropped`,`丢弃`),` `,r.data.langfuse.dropped,r.data.langfuse.lastSuccess?` · ${new Date(r.data.langfuse.lastSuccess).toLocaleString()}`:``]}),r.data?.langfuse.lastError&&(0,v.jsx)(`p`,{role:`alert`,className:`text-sm`,children:r.data.langfuse.lastError}),(0,v.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t(`Changes save automatically. Historical traces are not uploaded. Offline exports may be dropped.`,`修改后自动保存。不会上传历史记录;断网或队列满时可能丢弃远端导出。`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(d,{disabled:D||$,onClick:()=>void Y(async()=>{if(!(await _(`tracing/langfuse/test`,`POST`)).ok)throw Error(t(`Connection test failed. Check saved configuration and credentials.`,`连接测试失败,请检查已保存的配置和凭证。`))},t(`Diagnostic trace accepted by the ingestion endpoint`,`采集端已接受诊断追踪`)),children:t(`Test connection`,`测试连接`)}),(0,v.jsx)(d,{disabled:D||$,onClick:()=>void Y(async()=>{await _(`tracing/langfuse/credentials`,`DELETE`),w(``),E(``),me(e=>e+1)}),children:t(`Remove saved credentials`,`移除已保存凭证`)})]})]})]}):(0,v.jsx)(ue,{})),P===`records`&&(0,v.jsxs)(`section`,{className:b,children:[(0,v.jsx)(`h2`,{className:`font-medium`,children:t(`Recent runs`,`最近执行`)}),(0,v.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Status`,`执行状态`),(0,v.jsx)(i,{placeholder:t(`All statuses`,`全部状态`),allowEmpty:!1,value:j,onChange:e=>{_e(e),U()},options:[{value:``,label:t(`All statuses`,`全部状态`)},...[`running`,`success`,`error`,`cancelled`,`suspended`,`interrupted`].map(e=>({value:e,label:t(e,{running:`运行中`,success:`成功`,error:`失败`,cancelled:`已取消`,suspended:`已暂停`,interrupted:`已中断`}[e])}))]})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Time range`,`时间范围`),(0,v.jsx)(i,{placeholder:t(`Choose`,`请选择`),value:M,allowEmpty:!1,onChange:e=>{ve(e),U()},options:[`1`,`7`,`30`,`90`].map(e=>({value:e,label:`${e} ${t(`days`,`天`)}`}))})]}),(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[t(`Page size`,`每页条数`),(0,v.jsx)(i,{placeholder:t(`Choose`,`请选择`),value:I,allowEmpty:!1,onChange:e=>{be(e),U()},options:[`10`,`20`].map(e=>({value:e,label:`${e} ${t(`records`,`条`)}`}))})]})]}),(0,v.jsxs)(`details`,{children:[(0,v.jsxs)(`summary`,{className:`cursor-pointer text-sm text-fg-muted`,children:[t(`Advanced filters`,`高级筛选`),Object.values(N).some(Boolean)?` · ${t(`Active`,`已启用`)}`:``]}),(0,v.jsx)(`div`,{className:`mt-3 grid gap-3 sm:grid-cols-3`,children:[`conversationId`,`runId`,`agentId`].map(e=>(0,v.jsxs)(`label`,{className:`space-y-1 text-sm`,children:[{conversationId:t(`Conversation ID`,`会话 ID`),runId:t(`Run ID`,`执行 ID`),agentId:t(`Agent ID`,`Agent ID`)}[e],(0,v.jsx)(`input`,{"aria-label":e,placeholder:t(`Exact ID`,`输入完整 ID`),className:y,value:N[e],onChange:t=>{ye({...N,[e]:t.target.value}),U()}})]},e))})]}),(0,v.jsxs)(`div`,{role:`region`,"aria-label":t(`Execution results`,`执行结果`),"aria-busy":K.isValidating,className:`h-[24rem] min-h-0 overflow-y-auto overscroll-contain rounded-lg border border-edge sm:h-[28rem]`,children:[K.error&&(0,v.jsx)(`p`,{role:`alert`,className:`p-4 text-sm`,children:K.error.message}),!K.data&&!K.error?(0,v.jsx)(`div`,{className:`space-y-3 p-3`,children:[0,1,2,3,4].map(e=>(0,v.jsx)(f,{className:`h-16`},e))}):(0,v.jsxs)(`div`,{className:`divide-y divide-edge`,children:[K.data?.traces.length===0&&(0,v.jsx)(`p`,{className:`flex h-48 items-center justify-center px-4 text-sm text-fg-muted`,children:t(`No traces in this range`,`此时间范围内暂无记录`)}),K.data?.traces.map(n=>(0,v.jsxs)(`button`,{onClick:()=>H(n.traceId),className:`flex w-full flex-col gap-2 px-3 py-3 text-left text-sm hover:bg-surface-hover sm:flex-row sm:items-center sm:justify-between`,children:[(0,v.jsxs)(`div`,{className:`min-w-0`,children:[(0,v.jsxs)(`p`,{className:`truncate font-medium`,children:[n.name,n.attributes[`xopc.agentId`]?` · ${n.attributes[`xopc.agentId`]}`:``]}),(0,v.jsxs)(`p`,{className:`truncate text-xs text-fg-muted`,children:[new Date(n.startedAt).toLocaleString(e?`zh-CN`:`en-US`),` · `,n.traceId]}),n.stats&&(0,v.jsxs)(`p`,{className:`text-xs text-fg-muted`,children:[n.stats.generations,` `,t(`model calls`,`次模型调用`),` · `,n.stats.tokens,` tokens · $`,n.stats.knownCostUsd.toFixed(4),n.stats.unknownCostCalls>0?` · ${t(`partial cost`,`部分成本未知`)}`:``]})]}),(0,v.jsxs)(`span`,{className:`shrink-0 text-xs text-fg-muted`,children:[t(n.status,{running:`运行中`,success:`成功`,error:`失败`,cancelled:`已取消`,suspended:`已暂停`,interrupted:`已中断`}[n.status]??n.status),` · `,n.endedAt?`${Math.round(n.endedAt-n.startedAt)} ms`:`—`,n.partialReason?` · ${t(`Partial`,`部分记录`)}`:``]})]},n.traceId))]})]}),(0,v.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,v.jsx)(`p`,{"aria-live":`polite`,className:`text-xs text-fg-muted`,children:t(`Page ${R+1} · ${K.data?.traces.length??0} records`,`第 ${R+1} 页 · ${K.data?.traces.length??0} 条`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(d,{disabled:R===0||K.isValidating,onClick:()=>z(e=>Math.max(0,e-1)),children:t(`Previous page`,`上一页`)}),(0,v.jsx)(d,{disabled:!K.data?.nextCursor||K.isValidating,onClick:()=>{let e=K.data?.nextCursor;e&&(L(t=>[...t.slice(0,R+1),e]),z(e=>e+1))},children:t(`Next page`,`下一页`)})]})]})]}),(0,v.jsx)(l,{open:!!V,onOpenChange:e=>{e||H(void 0)},children:(0,v.jsxs)(s,{children:[(0,v.jsx)(ne,{className:`fixed inset-0 z-[90] bg-black/40`}),(0,v.jsxs)(ae,{className:`fixed left-1/2 top-1/2 z-[91] flex h-[min(44rem,calc(100vh-2rem))] w-[min(64rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-xl border border-edge bg-surface-overlay p-4`,children:[(0,v.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-3`,children:[(0,v.jsx)(c,{className:`font-medium`,children:t(`Trace details`,`追踪详情`)}),(0,v.jsx)(ie,{asChild:!0,children:(0,v.jsx)(d,{children:t(`Close`,`关闭`)})})]}),(0,v.jsx)(re,{className:`shrink-0 truncate text-xs text-fg-muted`,children:V}),(0,v.jsx)(`div`,{className:`min-h-0 flex-1 space-y-3 overflow-y-auto py-4`,children:q.error?(0,v.jsx)(`p`,{role:`alert`,children:q.error.message}):q.data?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`p`,{className:`text-sm`,children:[q.data.trace.status,` `,q.data.trace.partialReason&&` · ${q.data.trace.partialReason}`]}),fe(q.data.spans).map(e=>(0,v.jsxs)(`details`,{style:{marginLeft:de(e,q.data.spans)*12},className:`rounded-lg border border-edge p-3 text-sm`,children:[(0,v.jsxs)(`summary`,{className:`cursor-pointer`,children:[e.name,` · `,e.status,` · `,e.endedAt?`${Math.round(e.endedAt-e.startedAt)} ms`:`—`]}),(0,v.jsx)(`pre`,{className:`mt-3 whitespace-pre-wrap break-all text-xs text-fg-muted`,children:JSON.stringify(e.attributes,null,2)})]},e.spanId))]}):(0,v.jsx)(ue,{})}),(0,v.jsx)(`div`,{className:`shrink-0 border-t border-edge pt-3`,children:(0,v.jsx)(d,{disabled:!q.data||D,onClick:()=>void Ee(),children:t(`Export JSON`,`导出 JSON`)})})]})]})}),(0,v.jsx)(l,{open:we,onOpenChange:W,children:(0,v.jsxs)(s,{children:[(0,v.jsx)(ne,{className:`fixed inset-0 z-[90] bg-black/40`}),(0,v.jsxs)(ae,{className:`fixed left-1/2 top-1/2 z-[91] w-[min(28rem,calc(100vw-2rem))] -translate-x-1/2 -translate-y-1/2 space-y-4 rounded-xl border border-edge bg-surface-overlay p-5`,children:[(0,v.jsx)(c,{children:t(`Clear local traces?`,`清空本地追踪?`)}),(0,v.jsx)(re,{className:`text-sm text-fg-muted`,children:t(`Removes retained local traces. Conversations, usage records and Langfuse data remain available.`,`删除已保留的本地追踪。会话、用量记录及 Langfuse 数据仍保留。`)}),(0,v.jsxs)(`div`,{className:`flex gap-2`,children:[(0,v.jsx)(d,{disabled:D||$,onClick:()=>void Y(async()=>{await _(`traces`,`DELETE`),W(!1),H(void 0)}),children:t(`Clear`,`清空`)}),(0,v.jsx)(ie,{asChild:!0,children:(0,v.jsx)(d,{children:t(`Cancel`,`取消`)})})]})]})]})})]})}export{x as TracingSettingsPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{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-Bnx3GMDB.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-D6_rF-qT.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-CNf0ZeRw.js";import{s as _}from"./form-field-width-DJw_jULe.js";import{t as v}from"./skeleton-BwbyijEw.js";import{t as y}from"./copy-text-row-BHDs3cBa.js";import{Jo as b,ia as x}from"./index-DpLD-7Hc.js";import{n as te,t as ne}from"./settings-form-section-exRhP9xn.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=x(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:_}=p(i?`exposure-status`:null,E,{refreshInterval:3e4}),x=h?.tailscale.hostname,C=h?.tailscale.active===!0,k=h?.tailscale.cliAvailable!==!1,j=x?`https://${x}/`: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,_&&!h?(0,w.jsxs)(`div`,{className:`grid gap-3`,"aria-busy":`true`,children:[(0,w.jsx)(v,{className:`h-20 rounded-lg`}),(0,w.jsx)(v,{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)(y,{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)(b,{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`,_,`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 N(){let e=(0,C.c)(85),t=ee(le),n;e[0]===t?n=e[1]:(n=s(t),e[0]=t,e[1]=n);let r=n.remoteAccess.reverseProxy,i=!!u(ce),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,N;e[13]!==_||e[14]!==j?(N=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]=N):N=e[15];let de=N,fe;e[16]===j?fe=e[17]:(fe=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]=fe);let pe=fe,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]===de?B=e[31]:(B=()=>void de(),e[30]=de,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)(ue,{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 ce(e){return e.conversationId}function le(e){return e.language}function ue(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 de(){let e=await l(f(`/api/device-pairing/readiness`));return{ready:e.ready,routes:e.routes,protocolVersion:e.protocolVersion}}async function fe(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{N as _,B as a,T as b,he as c,P as d,fe as f,pe as g,de 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-Bb2GK-Nj.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-COVscAqC.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-7RKqgU_U.js";import{s as _}from"./form-field-width-DJw_jULe.js";import{t as v}from"./skeleton-BwbyijEw.js";import{t as y}from"./copy-text-row-BHDs3cBa.js";import{Yo as b,ia as x}from"./index-BB1z8QxA.js";import{n as te,t as ne}from"./settings-form-section-exRhP9xn.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=x(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:_}=p(i?`exposure-status`:null,E,{refreshInterval:3e4}),x=h?.tailscale.hostname,C=h?.tailscale.active===!0,k=h?.tailscale.cliAvailable!==!1,j=x?`https://${x}/`: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,_&&!h?(0,w.jsxs)(`div`,{className:`grid gap-3`,"aria-busy":`true`,children:[(0,w.jsx)(v,{className:`h-20 rounded-lg`}),(0,w.jsx)(v,{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)(y,{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)(b,{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`,_,`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 N(){let e=(0,C.c)(85),t=ee(le),n;e[0]===t?n=e[1]:(n=s(t),e[0]=t,e[1]=n);let r=n.remoteAccess.reverseProxy,i=!!u(ce),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,N;e[13]!==_||e[14]!==j?(N=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]=N):N=e[15];let de=N,fe;e[16]===j?fe=e[17]:(fe=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]=fe);let pe=fe,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]===de?B=e[31]:(B=()=>void de(),e[30]=de,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)(ue,{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 ce(e){return e.conversationId}function le(e){return e.language}function ue(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 de(){let e=await l(f(`/api/device-pairing/readiness`));return{ready:e.ready,routes:e.routes,protocolVersion:e.protocolVersion}}async function fe(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{N as _,B as a,T as b,he as c,P as d,fe as f,pe as g,de 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"./bot-DjLkhyZL.js";import{t as a}from"./popover-select-BgSdSbCL.js";import{t as o}from"./circle-alert-BEjgurr2.js";import{t as s}from"./messages-Bnx3GMDB.js";import{a as c,n as l,r as u}from"./locale-store-D6_rF-qT.js";import{i as d}from"./vendor-swr-BIWyz7Rc.js";import{t as f}from"./button-CS04eWY9.js";import{t as p}from"./skeleton-BwbyijEw.js";import{_o as m,fc as h,qs as g,sc as _}from"./index-DpLD-7Hc.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 c(u(`/api/usage/summary?${e}`))}function w(e){return c(u(`/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)(p,{className:`h-52 rounded-xl`}),(0,T.jsx)(p,{className:`h-72 rounded-xl`})]}),e[0]=t):t=e[0],t}function A(e){return(0,T.jsx)(p,{className:`h-24 rounded-xl`},e)}function j(){let e=(0,x.c)(82),t=l(N),n;e[0]===t?n=e[1]:(n=s(t),e[0]=t,e[1]=n);let r=n.usage,[c,u]=(0,b.useState)(`7`),p=Number(c),A;e[2]===p?A=e[3]:(A=S(p),e[2]=p,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=d(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=d(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]!==c||e[44]!==r.periodLabel||e[45]!==J?(Y=(0,T.jsx)(`div`,{className:`w-36`,children:(0,T.jsx)(a,{value:c,allowEmpty:!1,ariaLabel:r.periodLabel,placeholder:r.periodLabel,options:J,onChange:u})}),e[43]=c,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)(o,{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)(f,{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:h},{label:r.calls,value:H.calls.toLocaleString(),icon:g},{label:r.tokens,value:E(H.totalTokens,t),icon:_},{label:r.unknownCosts,value:H.unknownCostCalls.toLocaleString(),icon:o}].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)(i,{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)(m,{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"./bot-DjLkhyZL.js";import{t as a}from"./popover-select-BgSdSbCL.js";import{t as o}from"./circle-alert-BEjgurr2.js";import{t as s}from"./messages-Bb2GK-Nj.js";import{a as c,n as l,r as u}from"./locale-store-COVscAqC.js";import{i as d}from"./vendor-swr-BIWyz7Rc.js";import{t as f}from"./button-CS04eWY9.js";import{t as p}from"./skeleton-BwbyijEw.js";import{Js as m,cc as h,pc as g,vo as _}from"./index-BB1z8QxA.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 c(u(`/api/usage/summary?${e}`))}function w(e){return c(u(`/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)(p,{className:`h-52 rounded-xl`}),(0,T.jsx)(p,{className:`h-72 rounded-xl`})]}),e[0]=t):t=e[0],t}function A(e){return(0,T.jsx)(p,{className:`h-24 rounded-xl`},e)}function j(){let e=(0,x.c)(82),t=l(N),n;e[0]===t?n=e[1]:(n=s(t),e[0]=t,e[1]=n);let r=n.usage,[c,u]=(0,b.useState)(`7`),p=Number(c),A;e[2]===p?A=e[3]:(A=S(p),e[2]=p,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=d(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=d(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]!==c||e[44]!==r.periodLabel||e[45]!==J?(Y=(0,T.jsx)(`div`,{className:`w-36`,children:(0,T.jsx)(a,{value:c,allowEmpty:!1,ariaLabel:r.periodLabel,placeholder:r.periodLabel,options:J,onChange:u})}),e[43]=c,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)(o,{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)(f,{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:g},{label:r.calls,value:H.calls.toLocaleString(),icon:m},{label:r.tokens,value:E(H.totalTokens,t),icon:h},{label:r.unknownCosts,value:H.unknownCostCalls.toLocaleString(),icon:o}].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)(i,{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-BnnTw9RE.js → use-autosave-CSckcjFx.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"./circle-alert-BEjgurr2.js";import{t as o}from"./loader-circle-CifKLtgG.js";import{t as s}from"./cn-JdwAhgNB.js";import{n as c}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"./circle-alert-BEjgurr2.js";import{t as o}from"./loader-circle-CifKLtgG.js";import{t as s}from"./cn-JdwAhgNB.js";import{n as c}from"./locale-store-COVscAqC.js";var l=n(),u=r();function d(e){let t=(0,l.c)(21),{status:n,error:r,className:d}=e,p=c(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=s(`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)(o,{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)(a,{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};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/attachment-load-qjPpQzYY.js","assets/attachment-utils-core-BIOUBrpT.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
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"./preload-helper-zJ_50EbN.js";import{t as a}from"./createLucideIcon-DPHK1VkS.js";import{t as o}from"./chevron-left-DqFhpbvK.js";import{t as s}from"./chevron-right-BweFrslA.js";import{t as c}from"./mic-CuUb7zc-.js";import{m as l,n as u,o as d,t as f}from"./use-file-preview-expanded-DJ5vyrvM.js";import{n as p}from"./share-link-dialog-CWS8EkJS.js";import{t as m}from"./messages-Bnx3GMDB.js";import{t as h}from"./cn-JdwAhgNB.js";import{a as g,n as _,r as v}from"./locale-store-D6_rF-qT.js";import{o as y,r as b,s as x,t as S}from"./dist-BGTk37IG.js";import{r as C,t as w}from"./constants-Dy8Gw0sF.js";import{r as T}from"./tasks-DwKXgZ-I.js";import{a as E,i as D,o as O}from"./capabilities-Lswa0hv8.js";import{t as k}from"./capabilities-Dd1PZRQw.js";import{n as A}from"./interaction-BdhHBbYa.js";import{r as j}from"./attachment-utils-core-BIOUBrpT.js";import{n as M}from"./electron-env-Dit0bHgy.js";import{i as N}from"./skill-wire-pattern-BPpeIcCi.js";import{a as P}from"./shares-api-iKhHbvBD.js";var F=a(`file-code-corner`,[[`path`,{d:`M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35`,key:`1wthlu`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m5 16-3 3 3 3`,key:`331omg`}],[`path`,{d:`m9 22 3-3-3-3`,key:`lsp7cz`}]]),I=a(`file`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}]]);async function L(e){return T.parse(await g(v(`/api/tasks`),{method:`POST`,body:JSON.stringify(e)}))}async function R(e){return k(`xopc.tasks.get`,{id:e})}async function z(e){return g(v(`/api/tasks/${encodeURIComponent(e)}/conversation`),{method:`POST`})}async function B(e,t,n){return await g(v(`/api/tasks/${encodeURIComponent(e)}`),{method:`PATCH`,body:JSON.stringify({...t,expectedVersion:n})}),R(e)}async function V(e){await g(v(`/api/tasks/${encodeURIComponent(e)}`),{method:`DELETE`})}async function H(e,t,n,r=crypto.randomUUID()){return await g(v(`/api/tasks/${encodeURIComponent(e)}/commands`),{method:`POST`,body:JSON.stringify({idempotencyKey:r,expectedVersion:n,command:t})}),R(e)}async function U(e,t,n,r,i){return await g(v(`/api/tasks/${encodeURIComponent(e)}/criteria/${t}/review`),{method:`PUT`,body:JSON.stringify({status:n,expectedVersion:r,contractVersion:i})}),R(e)}async function W(e,t,n){return await g(v(`/api/task-runs/${encodeURIComponent(t)}/cancel`),{method:`POST`,body:JSON.stringify({expectedVersion:n,reason:`Cancelled by user`})}),R(e)}async function G(e,t,n){return await g(v(`/api/tasks/${encodeURIComponent(e)}/handoff`),{method:`POST`,body:JSON.stringify({toAgentId:t,expectedVersion:n,idempotencyKey:crypto.randomUUID()})}),R(e)}async function K(e,t,n){return await g(v(`/api/tasks/${encodeURIComponent(e)}/dependencies`),{method:`PUT`,body:JSON.stringify({dependsOnTaskIds:t,expectedVersion:n})}),R(e)}async function q(e,t,n){return await g(v(`/api/tasks/${encodeURIComponent(e)}/board-position`),{method:`PUT`,body:JSON.stringify({beforeTaskId:t,expectedVersion:n})}),R(e)}async function J(e,t,n){await g(v(`/api/task-runs/${encodeURIComponent(e)}/feedback`),{method:`POST`,headers:{"idempotency-key":crypto.randomUUID()},body:JSON.stringify({rating:t,reason:n?.trim()||void 0})})}function Y(e){return g(v(`/api/home${e?`?locale=${encodeURIComponent(e)}`:``}`)).then(O)}function X(e){return g(v(`/api/home/advisor/refresh`),{method:`POST`,body:JSON.stringify({idempotencyKey:crypto.randomUUID(),locale:e})})}function ee(){return g(v(`/api/home/advisor/history`)).then(e=>E.parse(e))}async function te(e,t){return D.parse(await g(v(`/api/home/opportunities/${encodeURIComponent(e.id)}/action`),{method:`POST`,body:JSON.stringify({idempotencyKey:crypto.randomUUID(),expectedRevision:e.revision,mode:t})}))}function ne(e,t){let n=crypto.randomUUID();return g(v(`/api/home/opportunities/${encodeURIComponent(e.id)}/feedback`),{method:`POST`,body:JSON.stringify({...t,idempotencyKey:n,expectedRevision:e.revision})}).then(()=>({ok:!0,idempotencyKey:n}))}function re(e,t){return g(v(`/api/home/opportunities/${encodeURIComponent(e)}/feedback/undo`),{method:`POST`,body:JSON.stringify({idempotencyKey:t})})}function ie(e,t){return g(v(`/api/home/decisions/respond`),{method:`POST`,body:JSON.stringify({...e,decision:t})})}function ae(e){return g(v(`/api/home/attention/acknowledge`),{method:`POST`,body:JSON.stringify(e)})}function oe(e){return g(v(`/api/home/attention/retry`),{method:`POST`,body:JSON.stringify(e)})}function se(e,t){let n=e.trim(),r=t.trim();return n&&N(n)?`/skill:${n}${r?` ${r}`:` `}`:r||null}function ce(e,t,n){let r=e.trim(),i=t?.trim()??``;if(!r&&!i)return null;let a=new URLSearchParams;return r&&a.set(`draft`,r),a.set(`autoSend`,`1`),i&&a.set(`attachmentsHandoff`,i),n?.projectScope===`none`&&a.set(`projectScope`,`none`),`/chat/new?${a.toString()}`}function le(e){let t=e.startsWith(`?`)?e.slice(1):e;if(!t)return``;let n=new URLSearchParams(t),r=new URLSearchParams,i=n.get(`skill`),a=n.get(`slash`),o=n.get(`draft`),s=n.get(`autoSend`),c=n.get(`attachmentHandoff`),l=n.get(`attachmentsHandoff`),u=n.get(`agentSetup`);i&&r.set(`skill`,i),a&&r.set(`slash`,a),o&&r.set(`draft`,o),s===`1`&&r.set(`autoSend`,`1`),c&&r.set(`attachmentHandoff`,c),l&&r.set(`attachmentsHandoff`,l),u===`1`&&r.set(`agentSetup`,`1`),n.get(`scene`)===`find-skills`&&r.set(`scene`,`find-skills`);let d=r.toString();return d?`?${d}`:``}function ue(e){let t=e.startsWith(`?`)?e.slice(1):e,n=new URLSearchParams(t),r=n.get(`projectId`)?.trim();return r?{kind:`project`,projectId:r}:n.get(`projectScope`)===`none`?{kind:`none`}:{kind:`remember-last`}}function de(e){let t=e?.trim();return t?`/chat/new?projectId=${encodeURIComponent(t)}`:`/chat/new?projectScope=none`}var fe=n(),Z=e(t(),1);function Q(){let[e,t]=(0,Z.useState)(!1),[n,r]=(0,Z.useState)(!1),[i,a]=(0,Z.useState)(null),[o,s]=(0,Z.useState)(null),[c,l]=(0,Z.useState)(null),u=(0,Z.useCallback)(e=>{t(!0),l(e),a(null),s(null)},[]),d=(0,Z.useCallback)(async e=>{if(!c||n)return null;r(!0),s(null);try{let t=await P({...c,...e});return a(t.payload),t.payload}catch(e){return s(e instanceof Error?e.message:String(e)),null}finally{r(!1)}},[n,c]),f=(0,Z.useCallback)(()=>{a(null),s(null),r(!1),l(null)},[]);return{dialogOpen:e,loading:n,result:i,error:o,pendingParams:c,createShareLink:u,confirmShareLink:d,handleOpenChange:(0,Z.useCallback)(e=>{t(e),e||f()},[f])}}function pe(){return M()&&window.electronAPI?.platform===`darwin`}function me(){return M()&&window.electronAPI?.platform===`win32`}function he(){return me()?`windows-preview-viewport`:``}var $=r();function ge({open:e,attachment:t,images:n=[],onAttachmentChange:r,authToken:i,conversationId:a,layerClassName:c=`z-[81]`,onClose:g}){let v=_(e=>e.language),w=m(v).chat,T=d({open:e,attachment:t,authToken:i,conversationId:a,language:v}),E=Q(),{expanded:D,setExpanded:O}=f(e,E.dialogOpen),[k,j]=(0,Z.useState)(!1),{preview:N,fileType:P,hasExtractedText:F}=T,I=t?n.findIndex(e=>e===t||e.id&&e.id===t.id||e.uri&&e.uri===t.uri||!e.id&&!e.uri&&e.name===t.name&&!!e.data&&e.data===t.data):-1,L=P===`image`&&n.length>1&&I>=0&&!!r,R=e=>{if(!L||E.dialogOpen)return;let t=I+(e===`previous`?-1:1);t>=0&&t<n.length&&r?.(n[t])},z=P!==`image`&&P!==`text`&&P!==`pptx`&&F,B=N?.uri?C(N.uri):null,V=!!(B||N?.uri?.startsWith(`media://`)&&(a||N.taskId)),H=()=>{!N?.uri||!V||E.createShareLink(B?{fileId:B,fileName:N.name}:{uri:N.uri,conversationId:a??void 0,taskId:N.taskId,fileName:N.name})},U=!!(N&&!T.loading&&!T.loadError),W=()=>{O(!1),g()},G=()=>{if(!N||!T.downloadBuffer)return;let e=new Blob([T.downloadBuffer],{type:T.descriptor.mimeType}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=N.name??`download`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(t)},K=!!T.downloadBuffer,q=M()&&P===`spreadsheet`&&/\.xlsx?$/i.test(T.fileName)&&!!T.downloadBuffer&&!!window.electronAPI?.shell?.openTemporaryFile,J=async()=>{let e=T.downloadBuffer,t=window.electronAPI?.shell?.openTemporaryFile;if(!(!e||!t||k)){j(!0);try{(await t({fileName:T.fileName,data:new Uint8Array(e)})).ok||l(`warning`,w.attachmentPreviewOpenLocalFailed)}catch{l(`warning`,w.attachmentPreviewOpenLocalFailed)}finally{j(!1)}}},Y={onDownload:G,canDownload:K},X=h(`min-h-0 min-w-0 flex-1 cursor-pointer border-0 p-0`,`bg-surface-base transition-colors`,`hover:bg-surface-hover/90 dark:bg-black/60 dark:hover:bg-black/70`,A.focusRingBase);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(S,{open:e,onOpenChange:e=>!e&&W(),children:(0,$.jsx)(y,{children:(0,$.jsxs)(b,{"aria-describedby":void 0,onKeyDown:e=>{!L||E.dialogOpen||e.altKey||e.ctrlKey||e.metaKey||e.target.closest(`input, textarea, select, [contenteditable="true"]`)||(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&(e.preventDefault(),R(e.key===`ArrowLeft`?`previous`:`next`))},className:h(`xopc-dialog-content-fullscreen fixed inset-0 flex h-[100dvh] w-full flex-row overflow-hidden`,he(),c,`border-0 bg-transparent p-0 shadow-none outline-none`),children:[(0,$.jsx)(x,{className:`sr-only`,children:N?.name??``}),(0,$.jsx)(`button`,{type:`button`,className:X,onClick:W,"aria-label":w.attachmentPreviewClose}),(0,$.jsxs)(`div`,{className:h(`flex h-full min-h-0 shrink-0 flex-col overflow-hidden`,D?`w-full`:`w-[min(100%,var(--max-width-app-main))]`,`bg-surface-panel sm:border-x sm:border-edge dark:sm:border-edge`,`shadow-float dark:shadow-elevated`),children:[(0,$.jsx)(u,{header:{expanded:D,onToggleExpanded:U?()=>O(e=>!e):void 0,onClose:W,share:V?{onClick:H,loading:E.loading}:void 0,openWithSystemApp:q?{onClick:()=>void J(),loading:k}:void 0,textView:z?{active:T.showExtractedText,onChange:e=>{T.setShowExtractedText(e),T.clearLoadError()}}:void 0},chat:T.downloadBuffer?{conversationId:a,createFile:async()=>new File([T.downloadBuffer],T.fileName,{type:T.descriptor.mimeType})}:void 0,onImageSwipe:L?R:void 0,language:v,descriptor:T.descriptor,loading:T.loading,loadError:T.loadError,textContent:T.textContent,binaryBuffer:T.binaryBuffer,showExtractedText:T.showExtractedText,extractedText:T.extractedText,extractedTextTruncated:T.extractedTextTruncated,actions:Y}),L?(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center justify-center gap-4 border-t border-edge bg-surface-panel px-3 py-2`,children:[(0,$.jsx)(`button`,{type:`button`,"aria-label":w.attachmentPreviewPreviousImage,disabled:I===0,onClick:()=>R(`previous`),className:h(`flex size-11 touch-manipulation items-center justify-center rounded-lg hover:bg-surface-hover disabled:opacity-30`,A.focusRingBase),children:(0,$.jsx)(o,{size:20,"aria-hidden":`true`})}),(0,$.jsxs)(`span`,{role:`status`,className:`min-w-16 text-center text-sm tabular-nums text-fg-muted`,children:[I+1,` / `,n.length]}),(0,$.jsx)(`button`,{type:`button`,"aria-label":w.attachmentPreviewNextImage,disabled:I===n.length-1,onClick:()=>R(`next`),className:h(`flex size-11 touch-manipulation items-center justify-center rounded-lg hover:bg-surface-hover disabled:opacity-30`,A.focusRingBase),children:(0,$.jsx)(s,{size:20,"aria-hidden":`true`})})]}):null]}),(0,$.jsx)(`button`,{type:`button`,className:X,onClick:W,"aria-label":w.attachmentPreviewClose})]})})}),(0,$.jsx)(p,{open:E.dialogOpen,onOpenChange:E.handleOpenChange,loading:E.loading,error:E.error,result:E.result,pendingParams:E.pendingParams,onConfirm:e=>void E.confirmShareLink(e)})]})}function _e(e){let t=(0,fe.c)(23),{attachments:n,conversationId:r,topPadded:i,onRemove:a,className:o}=e,s=_(ve),l;t[0]===s?l=t[1]:(l=m(s),t[0]=s,t[1]=l);let u=l.chat,[d,f]=(0,Z.useState)(null);if(n.length===0)return null;let p=i?`pt-2`:`pt-3`,g;t[2]!==o||t[3]!==p?(g=h(`flex flex-wrap gap-2 border-b border-edge-subtle/90 bg-surface-hover/20 px-4 pb-2 dark:border-edge-subtle`,p,o),t[2]=o,t[3]=p,t[4]=g):g=t[4];let v;if(t[5]!==n||t[6]!==u||t[7]!==a){let e;t[9]!==u||t[10]!==a?(e=(e,t)=>{let n=e.type===`pasted_text`?u.pastedText:e.name;return(0,$.jsxs)(`div`,{className:`flex max-w-[200px] items-center rounded-lg bg-surface-hover text-xs dark:bg-surface-hover/80`,children:[(0,$.jsxs)(`button`,{type:`button`,className:h(`flex min-w-0 flex-1 items-center gap-1.5 rounded-l-lg py-1 pl-2 pr-1 text-left hover:bg-surface-active`,A.transition,A.press,A.focusRingPanel),onClick:()=>f(e),"aria-label":`${u.attachmentPreviewOpen}: ${n}`,title:`${u.attachmentPreviewOpen}: ${n}`,children:[e.mimeType?.startsWith(`image/`)&&e.content?(0,$.jsx)(`img`,{src:`data:${e.mimeType};base64,${e.content}`,alt:``,className:`size-6 shrink-0 rounded object-cover`}):e.type===`voice`||e.mimeType?.startsWith(`audio/`)?(0,$.jsx)(c,{className:`size-3.5 shrink-0 text-accent-fg`,"aria-hidden":!0}):e.type===`pasted_text`?(0,$.jsx)(F,{className:`size-3.5 shrink-0 text-accent-fg`,"aria-hidden":!0}):(0,$.jsx)(I,{className:`size-3.5 shrink-0 text-fg-muted`,"aria-hidden":!0}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:n}),(0,$.jsx)(`span`,{className:`shrink-0 text-fg-disabled`,children:j(e.size)})]}),(0,$.jsx)(`button`,{type:`button`,className:h(`flex min-h-8 min-w-8 items-center justify-center rounded-r-lg text-fg-muted hover:bg-surface-active hover:text-fg`,A.transition,A.press,A.focusRingPanel),onClick:()=>a(t),"aria-label":`${u.attachmentPreviewRemove}: ${n}`,title:`${u.attachmentPreviewRemove}: ${n}`,children:(0,$.jsx)(`span`,{"aria-hidden":!0,children:`×`})})]},e.id??`${e.name}-${e.size}-${e.mimeType}-${e.content?.slice(0,16)??``}`)},t[9]=u,t[10]=a,t[11]=e):e=t[11],v=n.map(e),t[5]=n,t[6]=u,t[7]=a,t[8]=v}else v=t[8];let y;t[12]!==g||t[13]!==v?(y=(0,$.jsx)(`div`,{className:g,children:v}),t[12]=g,t[13]=v,t[14]=y):y=t[14];let b=d!==null,x;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(x=()=>f(null),t[15]=x):x=t[15];let S;t[16]!==r||t[17]!==d||t[18]!==b?(S=(0,$.jsx)(ge,{open:b,attachment:d,conversationId:r,onClose:x}),t[16]=r,t[17]=d,t[18]=b,t[19]=S):S=t[19];let C;return t[20]!==y||t[21]!==S?(C=(0,$.jsxs)($.Fragment,{children:[y,S]}),t[20]=y,t[21]=S,t[22]=C):C=t[22],C}function ve(e){return e.language}function ye(e){let{chat:t,initialAttachments:n=[],onAttachmentsChange:r}=e,[a,o]=(0,Z.useState)(n),[s,c]=(0,Z.useState)(!1),u=(0,Z.useRef)(null),d=(0,Z.useRef)(a),f=(0,Z.useRef)(r);d.current=a,f.current=r;let p=(0,Z.useCallback)(e=>{let t=typeof e==`function`?e(d.current):e;d.current=t,o(t),f.current?.(t)},[]),m=(0,Z.useCallback)(()=>{p([])},[]),h=(0,Z.useCallback)(e=>{p(t=>t.filter((t,n)=>n!==e))},[]),g=(0,Z.useCallback)(()=>d.current.map(e=>({type:e.type===`voice`?`voice`:e.type||`file`,mimeType:e.mimeType,data:e.content,name:e.name,size:e.size,...e.uri?{uri:e.uri}:{},...typeof e.durationSeconds==`number`&&Number.isFinite(e.durationSeconds)&&e.durationSeconds>0?{durationSeconds:e.durationSeconds}:{}})),[]),_=(0,Z.useCallback)(async(e,n)=>{if(e.length===0)return;let r=10-d.current.length;if(r<=0){l(`warning`,t.maxAttachmentsReached,{max:10});return}let a=e.slice(0,r);e.length>a.length&&l(`warning`,t.maxAttachmentsTruncated,{max:10,dropped:e.length-a.length});let{loadAttachment:o}=await i(async()=>{let{loadAttachment:e}=await import(`./attachment-load-qjPpQzYY.js`);return{loadAttachment:e}},__vite__mapDeps([0,1])),s=(await Promise.all(a.map(async e=>{if(e.size>33554432)return l(`warning`,t.attachmentFileTooLarge,{name:e.name,maxSize:j(w)}),null;try{return await o(e,e.name)}catch{return l(`error`,t.attachmentLoadFailed,{name:e.name}),null}}))).filter(e=>e!==null).map(e=>n?{...e,type:n}:e);p(e=>[...e,...s])},[t.attachmentFileTooLarge,t.attachmentLoadFailed,t.maxAttachmentsReached,t.maxAttachmentsTruncated]);return{attachments:a,setAttachments:p,attachmentsRef:d,isDragging:s,setIsDragging:c,fileInputRef:u,processFiles:(0,Z.useCallback)(e=>_(e),[_]),processPastedText:(0,Z.useCallback)(e=>_([new File([e.text],e.name,{type:e.mimeType})],`pasted_text`),[_]),removeAttachment:h,clearAttachments:m,wireAttachmentsPayload:g}}export{re as A,G as C,U as D,oe as E,F,q as M,K as N,ne as O,I as P,R as S,ie as T,L as _,pe as a,Y as b,se as c,ue as d,le as f,H as g,W as h,he as i,B as j,J as k,ce as l,te as m,_e as n,me as o,ae as p,ge as r,Q as s,ye as t,de as u,V as v,X as w,ee as x,z as y};
|
|
2
|
+
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"./preload-helper-zJ_50EbN.js";import{t as a}from"./createLucideIcon-DPHK1VkS.js";import{t as o}from"./chevron-left-DqFhpbvK.js";import{t as s}from"./chevron-right-BweFrslA.js";import{t as c}from"./mic-CuUb7zc-.js";import{m as l,n as u,o as d,t as f}from"./use-file-preview-expanded-Db2VYg1b.js";import{n as p}from"./share-link-dialog-DJTabLAM.js";import{t as m}from"./messages-Bb2GK-Nj.js";import{t as h}from"./cn-JdwAhgNB.js";import{a as g,n as _,r as v}from"./locale-store-COVscAqC.js";import{o as y,r as b,s as x,t as S}from"./dist-BGTk37IG.js";import{r as C,t as w}from"./constants-Dy8Gw0sF.js";import{r as T}from"./tasks-DwKXgZ-I.js";import{a as E,i as D,o as O}from"./capabilities-DO-vfNKI.js";import{t as k}from"./capabilities-B48r0DDa.js";import{n as A}from"./interaction-BdhHBbYa.js";import{r as j}from"./attachment-utils-core-BIOUBrpT.js";import{n as M}from"./electron-env-Dit0bHgy.js";import{i as N}from"./skill-wire-pattern-BPpeIcCi.js";import{a as P}from"./shares-api-c0dfWz6h.js";var F=a(`file-code-corner`,[[`path`,{d:`M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35`,key:`1wthlu`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m5 16-3 3 3 3`,key:`331omg`}],[`path`,{d:`m9 22 3-3-3-3`,key:`lsp7cz`}]]),I=a(`file`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}]]);async function L(e){return T.parse(await g(v(`/api/tasks`),{method:`POST`,body:JSON.stringify(e)}))}async function R(e){return k(`xopc.tasks.get`,{id:e})}async function z(e){return g(v(`/api/tasks/${encodeURIComponent(e)}/conversation`),{method:`POST`})}async function B(e,t,n){return await g(v(`/api/tasks/${encodeURIComponent(e)}`),{method:`PATCH`,body:JSON.stringify({...t,expectedVersion:n})}),R(e)}async function V(e){await g(v(`/api/tasks/${encodeURIComponent(e)}`),{method:`DELETE`})}async function H(e,t,n,r=crypto.randomUUID()){return await g(v(`/api/tasks/${encodeURIComponent(e)}/commands`),{method:`POST`,body:JSON.stringify({idempotencyKey:r,expectedVersion:n,command:t})}),R(e)}async function U(e,t,n,r,i){return await g(v(`/api/tasks/${encodeURIComponent(e)}/criteria/${t}/review`),{method:`PUT`,body:JSON.stringify({status:n,expectedVersion:r,contractVersion:i})}),R(e)}async function W(e,t,n){return await g(v(`/api/task-runs/${encodeURIComponent(t)}/cancel`),{method:`POST`,body:JSON.stringify({expectedVersion:n,reason:`Cancelled by user`})}),R(e)}async function G(e,t,n){return await g(v(`/api/tasks/${encodeURIComponent(e)}/handoff`),{method:`POST`,body:JSON.stringify({toAgentId:t,expectedVersion:n,idempotencyKey:crypto.randomUUID()})}),R(e)}async function K(e,t,n){return await g(v(`/api/tasks/${encodeURIComponent(e)}/dependencies`),{method:`PUT`,body:JSON.stringify({dependsOnTaskIds:t,expectedVersion:n})}),R(e)}async function q(e,t,n){return await g(v(`/api/tasks/${encodeURIComponent(e)}/board-position`),{method:`PUT`,body:JSON.stringify({beforeTaskId:t,expectedVersion:n})}),R(e)}async function J(e,t,n){await g(v(`/api/task-runs/${encodeURIComponent(e)}/feedback`),{method:`POST`,headers:{"idempotency-key":crypto.randomUUID()},body:JSON.stringify({rating:t,reason:n?.trim()||void 0})})}function Y(e){return g(v(`/api/home${e?`?locale=${encodeURIComponent(e)}`:``}`)).then(O)}function X(e){return g(v(`/api/home/advisor/refresh`),{method:`POST`,body:JSON.stringify({idempotencyKey:crypto.randomUUID(),locale:e})})}function ee(){return g(v(`/api/home/advisor/history`)).then(e=>E.parse(e))}async function te(e,t){return D.parse(await g(v(`/api/home/opportunities/${encodeURIComponent(e.id)}/action`),{method:`POST`,body:JSON.stringify({idempotencyKey:crypto.randomUUID(),expectedRevision:e.revision,mode:t})}))}function ne(e,t){let n=crypto.randomUUID();return g(v(`/api/home/opportunities/${encodeURIComponent(e.id)}/feedback`),{method:`POST`,body:JSON.stringify({...t,idempotencyKey:n,expectedRevision:e.revision})}).then(()=>({ok:!0,idempotencyKey:n}))}function re(e,t){return g(v(`/api/home/opportunities/${encodeURIComponent(e)}/feedback/undo`),{method:`POST`,body:JSON.stringify({idempotencyKey:t})})}function ie(e,t){return g(v(`/api/home/decisions/respond`),{method:`POST`,body:JSON.stringify({...e,decision:t})})}function ae(e){return g(v(`/api/home/attention/acknowledge`),{method:`POST`,body:JSON.stringify(e)})}function oe(e){return g(v(`/api/home/attention/retry`),{method:`POST`,body:JSON.stringify(e)})}function se(e,t){let n=e.trim(),r=t.trim();return n&&N(n)?`/skill:${n}${r?` ${r}`:` `}`:r||null}function ce(e,t,n){let r=e.trim(),i=t?.trim()??``;if(!r&&!i)return null;let a=new URLSearchParams;return r&&a.set(`draft`,r),a.set(`autoSend`,`1`),i&&a.set(`attachmentsHandoff`,i),n?.projectScope===`none`&&a.set(`projectScope`,`none`),`/chat/new?${a.toString()}`}function le(e){let t=e.startsWith(`?`)?e.slice(1):e;if(!t)return``;let n=new URLSearchParams(t),r=new URLSearchParams,i=n.get(`skill`),a=n.get(`slash`),o=n.get(`draft`),s=n.get(`autoSend`),c=n.get(`attachmentHandoff`),l=n.get(`attachmentsHandoff`),u=n.get(`agentSetup`);i&&r.set(`skill`,i),a&&r.set(`slash`,a),o&&r.set(`draft`,o),s===`1`&&r.set(`autoSend`,`1`),c&&r.set(`attachmentHandoff`,c),l&&r.set(`attachmentsHandoff`,l),u===`1`&&r.set(`agentSetup`,`1`),n.get(`scene`)===`find-skills`&&r.set(`scene`,`find-skills`);let d=r.toString();return d?`?${d}`:``}function ue(e){let t=e.startsWith(`?`)?e.slice(1):e,n=new URLSearchParams(t),r=n.get(`projectId`)?.trim();return r?{kind:`project`,projectId:r}:n.get(`projectScope`)===`none`?{kind:`none`}:{kind:`remember-last`}}function de(e){let t=e?.trim();return t?`/chat/new?projectId=${encodeURIComponent(t)}`:`/chat/new?projectScope=none`}var fe=n(),Z=e(t(),1);function Q(){let[e,t]=(0,Z.useState)(!1),[n,r]=(0,Z.useState)(!1),[i,a]=(0,Z.useState)(null),[o,s]=(0,Z.useState)(null),[c,l]=(0,Z.useState)(null),u=(0,Z.useCallback)(e=>{t(!0),l(e),a(null),s(null)},[]),d=(0,Z.useCallback)(async e=>{if(!c||n)return null;r(!0),s(null);try{let t=await P({...c,...e});return a(t.payload),t.payload}catch(e){return s(e instanceof Error?e.message:String(e)),null}finally{r(!1)}},[n,c]),f=(0,Z.useCallback)(()=>{a(null),s(null),r(!1),l(null)},[]);return{dialogOpen:e,loading:n,result:i,error:o,pendingParams:c,createShareLink:u,confirmShareLink:d,handleOpenChange:(0,Z.useCallback)(e=>{t(e),e||f()},[f])}}function pe(){return M()&&window.electronAPI?.platform===`darwin`}function me(){return M()&&window.electronAPI?.platform===`win32`}function he(){return me()?`windows-preview-viewport`:``}var $=r();function ge({open:e,attachment:t,images:n=[],onAttachmentChange:r,authToken:i,conversationId:a,layerClassName:c=`z-[81]`,onClose:g}){let v=_(e=>e.language),w=m(v).chat,T=d({open:e,attachment:t,authToken:i,conversationId:a,language:v}),E=Q(),{expanded:D,setExpanded:O}=f(e,E.dialogOpen),[k,j]=(0,Z.useState)(!1),{preview:N,fileType:P,hasExtractedText:F}=T,I=t?n.findIndex(e=>e===t||e.id&&e.id===t.id||e.uri&&e.uri===t.uri||!e.id&&!e.uri&&e.name===t.name&&!!e.data&&e.data===t.data):-1,L=P===`image`&&n.length>1&&I>=0&&!!r,R=e=>{if(!L||E.dialogOpen)return;let t=I+(e===`previous`?-1:1);t>=0&&t<n.length&&r?.(n[t])},z=P!==`image`&&P!==`text`&&P!==`pptx`&&F,B=N?.uri?C(N.uri):null,V=!!(B||N?.uri?.startsWith(`media://`)&&(a||N.taskId)),H=()=>{!N?.uri||!V||E.createShareLink(B?{fileId:B,fileName:N.name}:{uri:N.uri,conversationId:a??void 0,taskId:N.taskId,fileName:N.name})},U=!!(N&&!T.loading&&!T.loadError),W=()=>{O(!1),g()},G=()=>{if(!N||!T.downloadBuffer)return;let e=new Blob([T.downloadBuffer],{type:T.descriptor.mimeType}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=N.name??`download`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(t)},K=!!T.downloadBuffer,q=M()&&P===`spreadsheet`&&/\.xlsx?$/i.test(T.fileName)&&!!T.downloadBuffer&&!!window.electronAPI?.shell?.openTemporaryFile,J=async()=>{let e=T.downloadBuffer,t=window.electronAPI?.shell?.openTemporaryFile;if(!(!e||!t||k)){j(!0);try{(await t({fileName:T.fileName,data:new Uint8Array(e)})).ok||l(`warning`,w.attachmentPreviewOpenLocalFailed)}catch{l(`warning`,w.attachmentPreviewOpenLocalFailed)}finally{j(!1)}}},Y={onDownload:G,canDownload:K},X=h(`min-h-0 min-w-0 flex-1 cursor-pointer border-0 p-0`,`bg-surface-base transition-colors`,`hover:bg-surface-hover/90 dark:bg-black/60 dark:hover:bg-black/70`,A.focusRingBase);return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(S,{open:e,onOpenChange:e=>!e&&W(),children:(0,$.jsx)(y,{children:(0,$.jsxs)(b,{"aria-describedby":void 0,onKeyDown:e=>{!L||E.dialogOpen||e.altKey||e.ctrlKey||e.metaKey||e.target.closest(`input, textarea, select, [contenteditable="true"]`)||(e.key===`ArrowLeft`||e.key===`ArrowRight`)&&(e.preventDefault(),R(e.key===`ArrowLeft`?`previous`:`next`))},className:h(`xopc-dialog-content-fullscreen fixed inset-0 flex h-[100dvh] w-full flex-row overflow-hidden`,he(),c,`border-0 bg-transparent p-0 shadow-none outline-none`),children:[(0,$.jsx)(x,{className:`sr-only`,children:N?.name??``}),(0,$.jsx)(`button`,{type:`button`,className:X,onClick:W,"aria-label":w.attachmentPreviewClose}),(0,$.jsxs)(`div`,{className:h(`flex h-full min-h-0 shrink-0 flex-col overflow-hidden`,D?`w-full`:`w-[min(100%,var(--max-width-app-main))]`,`bg-surface-panel sm:border-x sm:border-edge dark:sm:border-edge`,`shadow-float dark:shadow-elevated`),children:[(0,$.jsx)(u,{header:{expanded:D,onToggleExpanded:U?()=>O(e=>!e):void 0,onClose:W,share:V?{onClick:H,loading:E.loading}:void 0,openWithSystemApp:q?{onClick:()=>void J(),loading:k}:void 0,textView:z?{active:T.showExtractedText,onChange:e=>{T.setShowExtractedText(e),T.clearLoadError()}}:void 0},chat:T.downloadBuffer?{conversationId:a,createFile:async()=>new File([T.downloadBuffer],T.fileName,{type:T.descriptor.mimeType})}:void 0,onImageSwipe:L?R:void 0,language:v,descriptor:T.descriptor,loading:T.loading,loadError:T.loadError,textContent:T.textContent,binaryBuffer:T.binaryBuffer,showExtractedText:T.showExtractedText,extractedText:T.extractedText,extractedTextTruncated:T.extractedTextTruncated,actions:Y}),L?(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center justify-center gap-4 border-t border-edge bg-surface-panel px-3 py-2`,children:[(0,$.jsx)(`button`,{type:`button`,"aria-label":w.attachmentPreviewPreviousImage,disabled:I===0,onClick:()=>R(`previous`),className:h(`flex size-11 touch-manipulation items-center justify-center rounded-lg hover:bg-surface-hover disabled:opacity-30`,A.focusRingBase),children:(0,$.jsx)(o,{size:20,"aria-hidden":`true`})}),(0,$.jsxs)(`span`,{role:`status`,className:`min-w-16 text-center text-sm tabular-nums text-fg-muted`,children:[I+1,` / `,n.length]}),(0,$.jsx)(`button`,{type:`button`,"aria-label":w.attachmentPreviewNextImage,disabled:I===n.length-1,onClick:()=>R(`next`),className:h(`flex size-11 touch-manipulation items-center justify-center rounded-lg hover:bg-surface-hover disabled:opacity-30`,A.focusRingBase),children:(0,$.jsx)(s,{size:20,"aria-hidden":`true`})})]}):null]}),(0,$.jsx)(`button`,{type:`button`,className:X,onClick:W,"aria-label":w.attachmentPreviewClose})]})})}),(0,$.jsx)(p,{open:E.dialogOpen,onOpenChange:E.handleOpenChange,loading:E.loading,error:E.error,result:E.result,pendingParams:E.pendingParams,onConfirm:e=>void E.confirmShareLink(e)})]})}function _e(e){let t=(0,fe.c)(23),{attachments:n,conversationId:r,topPadded:i,onRemove:a,className:o}=e,s=_(ve),l;t[0]===s?l=t[1]:(l=m(s),t[0]=s,t[1]=l);let u=l.chat,[d,f]=(0,Z.useState)(null);if(n.length===0)return null;let p=i?`pt-2`:`pt-3`,g;t[2]!==o||t[3]!==p?(g=h(`flex flex-wrap gap-2 border-b border-edge-subtle/90 bg-surface-hover/20 px-4 pb-2 dark:border-edge-subtle`,p,o),t[2]=o,t[3]=p,t[4]=g):g=t[4];let v;if(t[5]!==n||t[6]!==u||t[7]!==a){let e;t[9]!==u||t[10]!==a?(e=(e,t)=>{let n=e.type===`pasted_text`?u.pastedText:e.name;return(0,$.jsxs)(`div`,{className:`flex max-w-[200px] items-center rounded-lg bg-surface-hover text-xs dark:bg-surface-hover/80`,children:[(0,$.jsxs)(`button`,{type:`button`,className:h(`flex min-w-0 flex-1 items-center gap-1.5 rounded-l-lg py-1 pl-2 pr-1 text-left hover:bg-surface-active`,A.transition,A.press,A.focusRingPanel),onClick:()=>f(e),"aria-label":`${u.attachmentPreviewOpen}: ${n}`,title:`${u.attachmentPreviewOpen}: ${n}`,children:[e.mimeType?.startsWith(`image/`)&&e.content?(0,$.jsx)(`img`,{src:`data:${e.mimeType};base64,${e.content}`,alt:``,className:`size-6 shrink-0 rounded object-cover`}):e.type===`voice`||e.mimeType?.startsWith(`audio/`)?(0,$.jsx)(c,{className:`size-3.5 shrink-0 text-accent-fg`,"aria-hidden":!0}):e.type===`pasted_text`?(0,$.jsx)(F,{className:`size-3.5 shrink-0 text-accent-fg`,"aria-hidden":!0}):(0,$.jsx)(I,{className:`size-3.5 shrink-0 text-fg-muted`,"aria-hidden":!0}),(0,$.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:n}),(0,$.jsx)(`span`,{className:`shrink-0 text-fg-disabled`,children:j(e.size)})]}),(0,$.jsx)(`button`,{type:`button`,className:h(`flex min-h-8 min-w-8 items-center justify-center rounded-r-lg text-fg-muted hover:bg-surface-active hover:text-fg`,A.transition,A.press,A.focusRingPanel),onClick:()=>a(t),"aria-label":`${u.attachmentPreviewRemove}: ${n}`,title:`${u.attachmentPreviewRemove}: ${n}`,children:(0,$.jsx)(`span`,{"aria-hidden":!0,children:`×`})})]},e.id??`${e.name}-${e.size}-${e.mimeType}-${e.content?.slice(0,16)??``}`)},t[9]=u,t[10]=a,t[11]=e):e=t[11],v=n.map(e),t[5]=n,t[6]=u,t[7]=a,t[8]=v}else v=t[8];let y;t[12]!==g||t[13]!==v?(y=(0,$.jsx)(`div`,{className:g,children:v}),t[12]=g,t[13]=v,t[14]=y):y=t[14];let b=d!==null,x;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(x=()=>f(null),t[15]=x):x=t[15];let S;t[16]!==r||t[17]!==d||t[18]!==b?(S=(0,$.jsx)(ge,{open:b,attachment:d,conversationId:r,onClose:x}),t[16]=r,t[17]=d,t[18]=b,t[19]=S):S=t[19];let C;return t[20]!==y||t[21]!==S?(C=(0,$.jsxs)($.Fragment,{children:[y,S]}),t[20]=y,t[21]=S,t[22]=C):C=t[22],C}function ve(e){return e.language}function ye(e){let{chat:t,initialAttachments:n=[],onAttachmentsChange:r}=e,[a,o]=(0,Z.useState)(n),[s,c]=(0,Z.useState)(!1),u=(0,Z.useRef)(null),d=(0,Z.useRef)(a),f=(0,Z.useRef)(r);d.current=a,f.current=r;let p=(0,Z.useCallback)(e=>{let t=typeof e==`function`?e(d.current):e;d.current=t,o(t),f.current?.(t)},[]),m=(0,Z.useCallback)(()=>{p([])},[]),h=(0,Z.useCallback)(e=>{p(t=>t.filter((t,n)=>n!==e))},[]),g=(0,Z.useCallback)(()=>d.current.map(e=>({type:e.type===`voice`?`voice`:e.type||`file`,mimeType:e.mimeType,data:e.content,name:e.name,size:e.size,...e.uri?{uri:e.uri}:{},...typeof e.durationSeconds==`number`&&Number.isFinite(e.durationSeconds)&&e.durationSeconds>0?{durationSeconds:e.durationSeconds}:{}})),[]),_=(0,Z.useCallback)(async(e,n)=>{if(e.length===0)return;let r=10-d.current.length;if(r<=0){l(`warning`,t.maxAttachmentsReached,{max:10});return}let a=e.slice(0,r);e.length>a.length&&l(`warning`,t.maxAttachmentsTruncated,{max:10,dropped:e.length-a.length});let{loadAttachment:o}=await i(async()=>{let{loadAttachment:e}=await import(`./attachment-load-qjPpQzYY.js`);return{loadAttachment:e}},__vite__mapDeps([0,1])),s=(await Promise.all(a.map(async e=>{if(e.size>33554432)return l(`warning`,t.attachmentFileTooLarge,{name:e.name,maxSize:j(w)}),null;try{return await o(e,e.name)}catch{return l(`error`,t.attachmentLoadFailed,{name:e.name}),null}}))).filter(e=>e!==null).map(e=>n?{...e,type:n}:e);p(e=>[...e,...s])},[t.attachmentFileTooLarge,t.attachmentLoadFailed,t.maxAttachmentsReached,t.maxAttachmentsTruncated]);return{attachments:a,setAttachments:p,attachmentsRef:d,isDragging:s,setIsDragging:c,fileInputRef:u,processFiles:(0,Z.useCallback)(e=>_(e),[_]),processPastedText:(0,Z.useCallback)(e=>_([new File([e.text],e.name,{type:e.mimeType})],`pasted_text`),[_]),removeAttachment:h,clearAttachments:m,wireAttachmentsPayload:g}}export{re as A,G as C,U as D,oe as E,F,q as M,K as N,ne as O,I as P,R as S,ie as T,L as _,pe as a,Y as b,se as c,ue as d,le as f,H as g,W as h,he as i,B as j,J as k,ce as l,te as m,_e as n,me as o,ae as p,ge as r,Q as s,ye as t,de as u,V as v,X as w,ee as x,z as y};
|