@kanyun-ai-infra/band-cli 0.1.0 → 0.2.0

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.
Files changed (96) hide show
  1. package/bundled/examples/aitutor-tool/band/views/release/package.json +1 -1
  2. package/bundled/examples/aitutor-tool/band/views/tool-preview/package.json +1 -1
  3. package/bundled/examples/analysis/band/views/intake/package.json +1 -1
  4. package/bundled/examples/compliance/band/views/compliance/package.json +1 -1
  5. package/bundled/examples/content-review/band/views/checklist/package.json +1 -1
  6. package/bundled/examples/rush-site/band/views/rush-db/package.json +1 -1
  7. package/bundled/examples/rush-site/band/views/rush-deploy/package.json +1 -1
  8. package/bundled/examples/video/band/views/timeline/package.json +1 -1
  9. package/bundled/kernel/fixture.js +1 -1
  10. package/bundled/kernel/index.js +1 -1
  11. package/bundled/official/activity/package.json +4 -4
  12. package/bundled/official/approval/package.json +4 -4
  13. package/bundled/official/artifacts/package.json +4 -4
  14. package/bundled/official/chat/package.json +4 -4
  15. package/bundled/official/chunks/chunk-DIL5YSVK.js +1 -0
  16. package/bundled/official/comment/dist/index.js +2 -2
  17. package/bundled/official/comment/package.json +4 -4
  18. package/bundled/official/header/package.json +4 -4
  19. package/bundled/official/home/package.json +4 -4
  20. package/bundled/official/layouts/package.json +4 -4
  21. package/bundled/official/library/dist/index.js +1 -1
  22. package/bundled/official/library/package.json +4 -4
  23. package/bundled/official/members/dist/index.js +1 -1
  24. package/bundled/official/members/package.json +4 -4
  25. package/bundled/official/memory/dist/index.js +2 -2
  26. package/bundled/official/memory/package.json +4 -4
  27. package/bundled/official/native/package.json +2 -2
  28. package/bundled/official/params-form/package.json +4 -4
  29. package/bundled/official/plugins/package.json +4 -4
  30. package/bundled/official/project/dist/index.js +1 -1
  31. package/bundled/official/project/package.json +4 -4
  32. package/bundled/official/queue/package.json +4 -4
  33. package/bundled/official/settings/dist/index.js +1 -1
  34. package/bundled/official/settings/package.json +4 -4
  35. package/bundled/official/settings/plugin.yaml +7 -0
  36. package/bundled/official/shell/dist/index.js +1 -1
  37. package/bundled/official/shell/package.json +4 -4
  38. package/bundled/official/stages/package.json +4 -4
  39. package/bundled/official/threads/package.json +4 -4
  40. package/bundled/official/turn-bar/package.json +4 -4
  41. package/bundled/official/turn-trace/package.json +4 -4
  42. package/bundled/official/version-switch/dist/index.js +1 -1
  43. package/bundled/official/version-switch/package.json +4 -4
  44. package/bundled/official/viewer-entity/package.json +2 -2
  45. package/bundled/official/viewer-external/package.json +2 -2
  46. package/bundled/official/viewer-image/package.json +2 -2
  47. package/bundled/official/viewer-media/index.js +2 -2
  48. package/bundled/official/viewer-media/package.json +2 -2
  49. package/bundled/official/viewer-storyboard/index.js +2 -2
  50. package/bundled/official/viewer-storyboard/package.json +2 -2
  51. package/bundled/official/viewer-text/dist/index.js +2 -2
  52. package/bundled/official/viewer-text/package.json +4 -4
  53. package/bundled/official/viewer-tool/package.json +2 -2
  54. package/bundled/official/viewer-web/package.json +2 -2
  55. package/bundled/official/viewer-web-app/package.json +2 -2
  56. package/bundled/official/workshops/dist/index.js +2 -2
  57. package/bundled/official/workshops/package.json +4 -4
  58. package/bundled/official/workshops/plugin.yaml +2 -2
  59. package/bundled/skills/band-plugin/SKILL.md +20 -273
  60. package/bundled/skills/band-plugin/references/code.md +58 -0
  61. package/bundled/skills/band-plugin/references/dev.md +37 -0
  62. package/bundled/skills/band-plugin/references/execution.md +26 -0
  63. package/bundled/skills/band-plugin/references/manifest.md +65 -0
  64. package/bundled/skills/band-plugin/references/placement.md +34 -0
  65. package/bundled/skills/band-plugin/references/reuse.md +38 -0
  66. package/bundled/skills/band-plugin/references/rules.md +13 -0
  67. package/bundled/skills/band-plugin/references/shape.md +17 -0
  68. package/bundled/skills/band-plugin/references/testing-publish.md +35 -0
  69. package/bundled/skills/band-plugin/references/viewer-comments.md +25 -0
  70. package/bundled/skills/band-plugin/templates/dev/fixture.ts +15 -0
  71. package/bundled/skills/band-plugin/templates/dev/resources.ts +6 -0
  72. package/bundled/skills/band-plugin/templates/panel/index.ts +24 -0
  73. package/bundled/skills/band-plugin/templates/panel/package.json +12 -0
  74. package/bundled/skills/band-plugin/templates/panel/plugin.yaml +5 -0
  75. package/bundled/skills/band-plugin/templates/toolbar-dock/plugin.yaml +11 -0
  76. package/dev-host/Inspector.tsx +28 -10
  77. package/dev-host/app.tsx +11 -6
  78. package/dev-host/host.css +11 -0
  79. package/dev-host/main.tsx +5 -0
  80. package/dist/bin.js +3 -3
  81. package/dist/build-plugin.d.ts +1 -1
  82. package/dist/build-plugin.js +1 -1
  83. package/dist/{chunk-TN7Z3OF6.js → chunk-LGYGWMSY.js} +19 -17
  84. package/dist/{chunk-VVJNG5GV.js → chunk-Q2XJXNVH.js} +22 -15
  85. package/dist/{chunk-RAD6MMSL.js → chunk-XPLYTHNX.js} +1 -1
  86. package/dist/{dev-server-RAZQ32W7.js → dev-server-Q7NTJ3QD.js} +116 -11
  87. package/dist/fixture.d.ts +11 -0
  88. package/dist/index.d.ts +2 -2
  89. package/dist/index.js +3 -3
  90. package/dist/vite.d.ts +1 -1
  91. package/dist/vite.js +2 -2
  92. package/dist/{workshop-repo-CO6YMDee.d.ts → workshop-repo-DqoVdcGu.d.ts} +10 -10
  93. package/package.json +10 -7
  94. package/src/dev-managers.ts +16 -0
  95. package/src/inspector-plugins.ts +18 -0
  96. package/bundled/official/chunks/chunk-JI6ZNGOE.js +0 -1
@@ -1 +1 @@
1
- import"../../chunks/chunk-JFPQMFKF.js";import{Mount,reactMount as reactMount10,useRoute as useRoute7,useSlotEntries}from"@kanyun-ai-infra/band-plugin-react";import{projectPath as projectPath2}from"@kanyun-ai-infra/band-plugin-sdk";import{definePlugin}from"@kanyun-ai-infra/band-plugin-sdk";import{useCallback as useCallback3,useState as useState15}from"react";import{ErrorNote as ErrorNote2,errorText,isForbidden as isForbidden2}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect2,useState as useState2}from"react";import{ErrorNote,isForbidden}from"@kanyun-ai-infra/band-plugin-react";import{useCallback,useEffect,useId,useRef,useState,useSyncExternalStore}from"react";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import{useId as useId2}from"react";import{jsx as jsx2,jsxs as jsxs2}from"react/jsx-runtime";import{Fragment as Fragment2,jsx as jsx3,jsxs as jsxs3}from"react/jsx-runtime";import{BETA_MEMBERS_BATCH_MAX,parseLdapList}from"@kanyun-ai-infra/band-contracts/api";import{ErrorNote as ErrorNote3,failedBecause,reactMount}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect3,useRef as useRef2,useState as useState3}from"react";import{jsx as jsx4,jsxs as jsxs4}from"react/jsx-runtime";import{Fragment as Fragment3,jsx as jsx5,jsxs as jsxs5}from"react/jsx-runtime";import{failedBecause as failedBecause2,isForbidden as isForbidden3,reactMount as reactMount2,useRoute}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect4,useState as useState4}from"react";import{jsx as jsx6,jsxs as jsxs6}from"react/jsx-runtime";import{WorkshopIcon}from"@kanyun-ai-infra/band-plugin-react";import{Fragment as Fragment4,jsx as jsx7,jsxs as jsxs7}from"react/jsx-runtime";import{FEEDBACK_NOTE_MAX,FEEDBACK_REPLY_MAX,feedbackTextLength}from"@kanyun-ai-infra/band-contracts/api";import{ErrorNote as ErrorNote4,failedBecause as failedBecause3,isForbidden as isForbidden4,reactMount as reactMount3}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect5,useRef as useRef3,useState as useState5}from"react";import{Fragment as Fragment5,jsx as jsx8,jsxs as jsxs8}from"react/jsx-runtime";import{CUSTOM_MODEL_ENDPOINT_MAX,CUSTOM_MODEL_NAME_MAX,CUSTOM_MODEL_PRESET_ID}from"@kanyun-ai-infra/band-contracts/api";import{Glyph,MODELS_FOR_PAGE,RESUME_PAGE,failedBecause as failedBecause4,isForbidden as isForbidden5,reactMount as reactMount4,useRoute as useRoute2,withImeGuard}from"@kanyun-ai-infra/band-plugin-react";import{Fragment as Fragment6,useEffect as useEffect6,useId as useId3,useLayoutEffect,useRef as useRef4,useState as useState6}from"react";import{Fragment as Fragment7,jsx as jsx9,jsxs as jsxs9}from"react/jsx-runtime";import{NET_CREDENTIALS_PER_OWNER_MAX,NET_CREDENTIAL_DOMAINS_MAX,NET_CREDENTIAL_KEY_MAX,NET_CREDENTIAL_NAME_PREFIX,NET_CREDENTIAL_NOTE_MAX,NET_CREDENTIAL_SERVICE_ACCOUNT_MAX}from"@kanyun-ai-infra/band-contracts/api";import{failedBecause as failedBecause5,isForbidden as isForbidden6,reactMount as reactMount5,useRoute as useRoute3}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect7,useId as useId4,useMemo,useRef as useRef5,useState as useState7}from"react";import{Fragment as Fragment8,jsx as jsx10,jsxs as jsxs10}from"react/jsx-runtime";import{ErrorNote as ErrorNote5,failedBecause as failedBecause6,isForbidden as isForbidden7,reactMount as reactMount6,useCtxData,useRoute as useRoute4}from"@kanyun-ai-infra/band-plugin-react";import{projectPath}from"@kanyun-ai-infra/band-plugin-sdk";import{useEffect as useEffect8,useId as useId5,useState as useState8}from"react";import{Fragment as Fragment9,jsx as jsx11,jsxs as jsxs11}from"react/jsx-runtime";import{isForbidden as isForbidden8,reactMount as reactMount7,useRoute as useRoute5}from"@kanyun-ai-infra/band-plugin-react";import{NETWORK_LOST,isNetworkLost}from"@kanyun-ai-infra/band-plugin-react/errors";import{useEffect as useEffect9,useRef as useRef6,useState as useState9}from"react";import{Fragment as Fragment10,jsx as jsx12,jsxs as jsxs12}from"react/jsx-runtime";import{ErrorNote as ErrorNote6,failedBecause as failedBecause8,isForbidden as isForbidden9,memberName,useCtxData as useCtxData3,useMembers}from"@kanyun-ai-infra/band-plugin-react";import{useState as useState11}from"react";import{CUSTOM_MODEL_PRESET_ID as CUSTOM_MODEL_PRESET_ID2,MODEL_PROJECT_CONSENT_PENDING}from"@kanyun-ai-infra/band-contracts/api";import{useCtxData as useCtxData2}from"@kanyun-ai-infra/band-plugin-react";import{useState as useState10}from"react";import{Fragment as Fragment11,jsx as jsx13,jsxs as jsxs13}from"react/jsx-runtime";import{Fragment as Fragment12,jsx as jsx14,jsxs as jsxs14}from"react/jsx-runtime";import{ErrorNote as ErrorNote7,failedBecause as failedBecause9,isForbidden as isForbidden10,reactMount as reactMount8}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect10,useState as useState12}from"react";import{jsx as jsx15,jsxs as jsxs15}from"react/jsx-runtime";import{WriteTeamConnectionSchema}from"@kanyun-ai-infra/band-contracts/api";import{ErrorNote as ErrorNote8,failedBecause as failedBecause10,isForbidden as isForbidden11,reactMount as reactMount9,useAppData,useRoute as useRoute6}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect11,useState as useState13}from"react";import{Fragment as Fragment13,jsx as jsx16,jsxs as jsxs16}from"react/jsx-runtime";import{ErrorNote as ErrorNote9,errorText as errorText2,isForbidden as isForbidden12}from"@kanyun-ai-infra/band-plugin-react";import{useCallback as useCallback2,useEffect as useEffect12,useId as useId6,useState as useState14}from"react";import{Fragment as Fragment14,jsx as jsx17,jsxs as jsxs17}from"react/jsx-runtime";import{jsx as jsx18,jsxs as jsxs18}from"react/jsx-runtime";if(typeof document!=="undefined"&&document.head){const css='/* src/settings.css */\n.band-settings {\n box-sizing: border-box;\n width: 100%;\n max-width: 880px;\n margin: 0 auto;\n padding: 40px 32px 64px;\n display: grid;\n gap: 16px;\n align-content: start;\n}\n.band-settings h1 {\n margin: 0;\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--fs-h1);\n line-height: 1.3;\n}\n.band-settings-state {\n padding: 56px 16px;\n}\n.band-settings-page {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n.band-settings-page > .band-sf {\n flex: 1;\n height: auto;\n}\n.band-settings-projecthead,\n.band-settings-projecthead > :where(.band-react-surface) {\n display: contents;\n}\n.band-settings-open svg {\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n@media (max-width: 600px) {\n .band-settings {\n padding: 20px 16px 48px;\n gap: 12px;\n }\n .band-settings h1 {\n font-size: var(--fs-h2);\n }\n}\n.band-connections-description {\n color: var(--muted);\n font-size: var(--fs-body);\n margin: 0;\n}\n.band-connections-account {\n display: grid;\n gap: 20px;\n padding: 24px 0;\n}\n.band-connections-heading,\n.band-connections-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n flex-wrap: wrap;\n}\n.band-connections-heading h2 {\n margin: 0;\n font-size: var(--fs-h2);\n}\n.band-connections-active {\n color: var(--ok);\n}\n.band-connections-error {\n color: var(--bad);\n}\n.band-connections-expiring {\n color: var(--warn);\n font-size: var(--fs-body);\n margin: 0;\n}\n.band-connections-notice {\n display: grid;\n gap: 4px;\n font-size: var(--fs-body);\n}\n.band-connections-notice p {\n margin: 0;\n}\n.band-connections-form {\n display: grid;\n gap: 12px;\n max-width: 480px;\n}\n.band-connections-form .field {\n width: 100%;\n box-sizing: border-box;\n}\n.band-connections h1 {\n font-family: var(--font);\n}\n.band-team-project {\n margin-top: 24px;\n}\n.band-connections {\n overflow: auto;\n overscroll-behavior: contain;\n}\n.band-connections-account code {\n overflow-wrap: anywhere;\n}\n.band-team-connections .band-connections-actions {\n justify-content: flex-start;\n}\n.band-settings-no-access {\n display: grid;\n gap: 10px;\n justify-items: start;\n max-width: 560px;\n padding-top: 8px;\n}\n.band-settings-no-access h2 {\n margin: 0;\n font-size: var(--fs-title);\n}\n.band-settings-no-access p {\n margin: 0;\n color: var(--muted);\n}\n.band-settings-viewers {\n display: grid;\n gap: 8px;\n position: relative;\n}\n.band-settings-people {\n list-style: none;\n margin: 0;\n padding: 0;\n display: grid;\n gap: 2px;\n}\n.band-settings-people li {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n min-height: 32px;\n}\n.band-settings-people li > span {\n display: flex;\n align-items: baseline;\n gap: 8px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-settings-people li > span > span,\n.band-settings-cands span {\n color: var(--muted);\n font-family: var(--mono);\n font-size: var(--fs-meta);\n}\n.band-settings-cands {\n list-style: none;\n margin: 0;\n padding: 4px;\n border-radius: var(--r-lg);\n background: var(--panel);\n box-shadow: var(--shadow-pop);\n display: grid;\n max-height: 240px;\n overflow: auto;\n overscroll-behavior: contain;\n}\n.band-settings-cands button {\n display: flex;\n align-items: baseline;\n gap: 8px;\n width: 100%;\n border: 0;\n padding: 6px 8px;\n border-radius: var(--r-sm);\n background: none;\n color: var(--ink);\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n.band-settings-cands button:hover {\n background: var(--fill);\n}\n.band-settings-cands button:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--accent);\n}\n.band-beta-members {\n max-width: 720px;\n}\n.band-beta-members header {\n display: grid;\n gap: 8px;\n}\n.band-beta-members header p,\n.band-beta-parse,\n.band-beta-admins {\n margin: 0;\n color: var(--muted);\n line-height: 1.7;\n}\n.band-beta-members h2 {\n margin: 16px 0 8px;\n font-size: var(--fs-title);\n}\n.band-beta-form {\n display: grid;\n gap: 8px;\n max-width: 560px;\n}\n.band-beta-form label {\n display: grid;\n gap: 6px;\n}\n.band-beta-form textarea {\n resize: vertical;\n font-family: var(--mono);\n}\n.band-beta-form .btn {\n justify-self: start;\n}\n.band-beta-members [role=alert] {\n color: var(--bad);\n}\n.band-beta-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.band-beta-list > li {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 12px 0;\n border-bottom: var(--hairline) solid var(--rule);\n}\n.band-beta-list > li > div {\n display: grid;\n gap: 2px;\n min-width: 0;\n}\n.band-beta-list strong {\n overflow-wrap: anywhere;\n}\n.band-beta-list span {\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-beta-list p.band-beta-note {\n margin: 4px 0 0;\n color: var(--ink);\n font-size: var(--fs-row);\n line-height: 1.6;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n.band-feedback-admin {\n max-width: 720px;\n}\n.band-feedback-admin header {\n display: grid;\n gap: 8px;\n}\n.band-feedback-admin header p,\n.band-feedback-meta {\n margin: 0;\n color: var(--muted);\n line-height: 1.7;\n}\n.band-feedback-filter {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 16px 0;\n}\n.band-feedback-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.band-feedback-item {\n display: grid;\n gap: 6px;\n padding: 12px 0;\n border-bottom: var(--hairline) solid var(--rule);\n}\n.band-feedback-head {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.band-feedback-head > div {\n display: grid;\n gap: 2px;\n flex: 1;\n min-width: 0;\n}\n.band-feedback-head > div > span {\n color: var(--muted);\n font-size: var(--fs-meta);\n overflow-wrap: anywhere;\n}\n.band-feedback-body {\n margin: 0;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n line-height: 1.7;\n}\n.band-feedback-body.clamp {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n.band-feedback-detail {\n display: grid;\n gap: 8px;\n justify-items: start;\n}\n.band-feedback-detail label {\n display: grid;\n gap: 6px;\n width: 100%;\n}\n.band-feedback-detail textarea {\n resize: vertical;\n}\n.band-feedback-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n.band-feedback-sent {\n margin: 0;\n color: var(--muted);\n white-space: pre-wrap;\n}\n.band-feedback-admin [role=alert] {\n color: var(--bad);\n}\n.band-sf {\n display: grid;\n grid-template-columns: 216px minmax(0, 1fr);\n min-height: 0;\n height: 100%;\n}\n.band-sf-nav {\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n padding: 24px 12px 24px 20px;\n display: grid;\n gap: 16px;\n align-content: start;\n}\n.band-sf-head {\n display: grid;\n gap: 2px;\n min-width: 0;\n padding: 0 8px;\n}\n.band-sf-title {\n font-size: var(--fs-title);\n font-weight: 600;\n line-height: 1.3;\n}\n.band-sf-obj {\n font-size: var(--fs-ui);\n color: var(--muted);\n}\n.band-sf-grp {\n display: grid;\n gap: 1px;\n}\n.band-sf-grp > span {\n padding: 2px 8px;\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-sf-grp a {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 6px 8px;\n border-radius: var(--r);\n color: var(--ink);\n text-decoration: none;\n font-size: var(--fs-row);\n}\n.band-sf-grp a:hover {\n background: var(--fill);\n}\n.band-sf-grp a[aria-current=page] {\n background: var(--fill-2);\n font-weight: 500;\n}\n.band-sf-grp a:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--panel), 0 0 0 3.5px var(--accent);\n}\n.band-sf-grp a .band-sf-chev {\n display: none;\n color: var(--muted);\n}\n.band-sf-scroll {\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n}\n.band-sf-main {\n box-sizing: border-box;\n width: 100%;\n max-width: 824px;\n padding: 32px 32px 64px;\n display: grid;\n gap: 20px;\n align-content: start;\n}\n.band-sf-crumb {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 4px;\n min-width: 0;\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-sf-crumb-in {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 4px;\n min-width: 0;\n}\n.band-sf-crumb-ws {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n white-space: nowrap;\n}\n.band-sf-crumb-ws > span {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.band-sf-crumb a,\n.band-sf-crumb button {\n min-width: 0;\n border: 0;\n padding: 0;\n background: none;\n color: var(--muted);\n font: inherit;\n text-decoration: none;\n border-radius: 4px;\n overflow-wrap: anywhere;\n cursor: pointer;\n}\n.band-sf-crumb button {\n text-align: start;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-sf-crumb a:hover,\n.band-sf-crumb button:hover {\n color: var(--ink);\n}\n.band-sf-crumb a:focus-visible,\n.band-sf-crumb button:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--accent);\n}\n.band-sf-back {\n display: inline-flex;\n align-self: start;\n justify-self: start;\n gap: 4px;\n color: var(--muted);\n text-decoration: none;\n font-size: var(--fs-ui);\n border-radius: 4px;\n}\n.band-sf-back-m {\n display: none;\n}\n.band-sf-back:hover {\n color: var(--ink);\n}\n.band-sf-back:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--panel), 0 0 0 3.5px var(--accent);\n}\n.band-sf-h {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n}\n.band-sf-h > div {\n display: grid;\n gap: 4px;\n min-width: 0;\n}\n.band-sf-h h1 {\n margin: 0;\n font-size: var(--fs-h2);\n font-weight: 600;\n line-height: 1.3;\n}\n.band-sf-h p {\n margin: 0;\n color: var(--muted);\n font-size: var(--fs-ui);\n max-width: 560px;\n}\n.band-sf-h-a {\n flex: none;\n}\n.band-sf-sec {\n display: grid;\n gap: 10px;\n}\n.band-sf-sec h2 {\n margin: 0;\n font-size: var(--fs-lead);\n font-weight: 600;\n}\n.band-sf-sec > p {\n margin: 0;\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-sf-rows {\n display: grid;\n gap: 2px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.band-sf-row {\n position: relative;\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n gap: 2px 12px;\n align-items: center;\n padding: 10px 12px;\n margin: 0 -12px;\n border-radius: var(--r-lg);\n}\n.band-sf-row:hover {\n background: var(--fill);\n}\n.band-sf-row.is-new,\n.band-sf-row.is-new:hover {\n background: var(--ok-soft);\n}\n.band-sf-row-t {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 4px 8px;\n min-width: 0;\n}\n.band-sf-row-t b {\n font-weight: 600;\n overflow-wrap: anywhere;\n}\n.band-sf-row-link {\n color: inherit;\n text-decoration: none;\n border-radius: 4px;\n}\n.band-sf-row-link::after {\n content: "";\n position: absolute;\n inset: 0;\n border-radius: var(--r-lg);\n}\n.band-sf-row-a {\n position: relative;\n z-index: 1;\n}\n.band-sf-row-link:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--panel), 0 0 0 3.5px var(--accent);\n}\n.band-sf-row-m {\n grid-column: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 2px 14px;\n color: var(--muted);\n font-size: var(--fs-dense);\n min-width: 0;\n}\n.band-sf-row-a {\n grid-column: 2;\n grid-row: 1 / span 2;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.band-sf-row-a .btn {\n position: relative;\n z-index: 1;\n}\n.band-sf-chev {\n color: var(--muted);\n}\n.band-sf-mono {\n font-family: var(--mono);\n font-size: 0.92em;\n}\n.band-sf-facts {\n display: grid;\n gap: 6px 16px;\n margin: 0;\n font-size: var(--fs-ui);\n}\n.band-sf-fact {\n display: grid;\n grid-template-columns: 112px minmax(0, 1fr);\n gap: 16px;\n}\n.band-sf-facts dt {\n color: var(--muted);\n}\n.band-sf-facts dd {\n margin: 0;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n.band-sf-dz {\n display: grid;\n gap: 10px;\n padding-top: 8px;\n}\n.band-sf-dz h2 {\n margin: 0;\n font-size: var(--fs-lead);\n font-weight: 600;\n}\n.band-sf-dz-r {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n}\n.band-sf-dz-r > div {\n display: grid;\n gap: 2px;\n min-width: 0;\n}\n.band-sf-dz-r span {\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-sf-dz-r .btn {\n flex: none;\n}\n.band-sf-empty,\n.band-sf .band-sf-empty.rest {\n display: grid;\n justify-items: start;\n text-align: start;\n gap: 10px;\n padding: 24px 0;\n max-width: 480px;\n}\n.band-sf-empty p {\n margin: 0;\n color: var(--muted);\n}\n.band-sf-load {\n padding: 40px 0;\n display: grid;\n justify-items: start;\n}\n.band-sf-ok {\n margin: 0;\n color: var(--ok);\n font-size: var(--fs-ui);\n}\n.band-sf-muted {\n margin: 0;\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-sf-banner {\n margin: 0;\n padding: 10px 12px;\n border-radius: var(--r-lg);\n background: var(--fill);\n font-size: var(--fs-ui);\n}\n.band-sf-banner.is-warn {\n display: flex;\n align-items: center;\n gap: 8px;\n background: var(--warn-soft);\n}\n.band-sf-form {\n display: grid;\n gap: 16px;\n max-width: 560px;\n min-width: 0;\n}\n.band-sf-fld {\n display: grid;\n gap: 6px;\n min-width: 0;\n}\n.band-sf-fld > label {\n font-size: var(--fs-ui);\n font-weight: 500;\n}\n.band-sf-fld .field {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n}\n.band-sf-fld textarea.field {\n resize: vertical;\n line-height: 1.5;\n}\n.band-sf-req {\n margin-left: 6px;\n color: var(--muted);\n font-weight: 400;\n}\n.band-sf-hint {\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-sf-hint a,\n.band-sf-muted a {\n color: var(--accent-text);\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.band-sf-err {\n margin: 0;\n color: var(--bad);\n font-size: var(--fs-ui);\n}\n.band-sf-fail {\n grid-column: 1 / -1;\n display: flex;\n align-items: flex-start;\n gap: 8px;\n overflow-wrap: anywhere;\n}\n.band-sf-given {\n margin: 0;\n padding: 10px 12px;\n border-radius: var(--r-lg);\n background: var(--fill);\n font-size: var(--fs-ui);\n}\ndl.band-sf-given {\n display: grid;\n grid-template-columns: 56px minmax(0, 1fr);\n gap: 2px 12px;\n}\ndl.band-sf-given dt {\n color: var(--muted);\n}\ndl.band-sf-given dd {\n margin: 0;\n min-width: 0;\n}\ndl.band-sf-given p {\n grid-column: 1 / -1;\n margin: 0;\n color: var(--muted);\n font-size: var(--fs-dense);\n}\n.band-sf-stepback {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n align-self: start;\n justify-self: start;\n padding: 0;\n border: 0;\n background: none;\n color: var(--muted);\n font: inherit;\n font-size: var(--fs-ui);\n cursor: pointer;\n border-radius: 4px;\n}\n.band-sf-stepback:hover {\n color: var(--ink);\n}\n.band-sf-stepback:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--panel), 0 0 0 3.5px var(--accent);\n}\n.band-sf-acts {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px 12px;\n}\n.band-sf-acts-end {\n justify-content: flex-end;\n}\n.band-sf-state {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--muted);\n font-size: var(--fs-ui);\n}\n.band-sf-picks {\n display: grid;\n gap: 4px;\n margin: 0;\n padding: 0;\n border: 0;\n min-width: 0;\n}\n.band-sf-picks legend {\n padding: 0;\n margin-bottom: 6px;\n font-size: var(--fs-ui);\n font-weight: 500;\n}\n.band-sf-pickgrid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n}\n.band-sf-pickcard {\n display: grid;\n grid-template-columns: 32px minmax(0, 1fr);\n gap: 2px 10px;\n align-items: start;\n padding: 12px;\n border: 0;\n border-radius: var(--r-lg);\n background: var(--panel);\n box-shadow: var(--shadow-card);\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n.band-sf-pickcard:hover {\n background: var(--fill);\n}\n.band-sf-pickcard:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--panel), 0 0 0 3.5px var(--accent);\n}\n.band-sf-pickcard > i {\n grid-row: 1 / span 3;\n width: 32px;\n height: 32px;\n display: grid;\n place-items: center;\n border-radius: var(--r);\n background: var(--fill-2);\n font-style: normal;\n font-weight: 600;\n font-size: var(--fs-ui);\n}\n.band-sf-pickcard > b {\n font-weight: 600;\n}\n.band-sf-pickcard > small {\n color: var(--muted);\n font-size: var(--fs-dense);\n overflow-wrap: anywhere;\n}\n.band-sf-caps {\n grid-column: 2;\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-top: 4px;\n}\n.band-sf-lbl {\n font-size: var(--fs-ui);\n font-weight: 500;\n}\n.band-sf-pcards {\n display: grid;\n grid-template-columns: repeat(4, minmax(0, 1fr));\n gap: 8px;\n}\n.band-sf-pc {\n display: grid;\n gap: 2px;\n align-content: start;\n padding: 10px 12px;\n border-radius: var(--r-lg);\n background: var(--fill);\n cursor: pointer;\n min-width: 0;\n}\n.band-sf-pc > b {\n font-weight: 600;\n font-size: var(--fs-ui);\n overflow-wrap: anywhere;\n}\n.band-sf-pc > small {\n color: var(--muted);\n font-size: var(--fs-dense);\n overflow-wrap: anywhere;\n}\n.band-sf-pc.is-on {\n background: var(--accent-soft);\n box-shadow: inset 0 0 0 2px var(--accent);\n}\n.band-sf-pc.is-on > b {\n color: var(--accent-text);\n}\n.band-sf-pc:has(:focus-visible) {\n box-shadow: 0 0 0 2px var(--panel), 0 0 0 3.5px var(--accent);\n}\n.band-sf-pc:has(:disabled) {\n cursor: default;\n}\n.band-sf-combo {\n position: relative;\n min-width: 0;\n}\n.band-sf-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: 10;\n list-style: none;\n margin: 0;\n padding: 4px;\n background: var(--panel);\n border-radius: var(--r-lg);\n box-shadow: var(--shadow-pop);\n display: grid;\n gap: 1px;\n max-height: 220px;\n overflow: auto;\n}\n.band-sf-menu.is-up {\n top: auto;\n bottom: calc(100% + 4px);\n}\n.band-sf-menu > button {\n display: flex;\n justify-content: space-between;\n gap: 8px;\n padding: 6px 10px;\n border: 0;\n border-radius: var(--r-sm);\n background: none;\n color: inherit;\n font: inherit;\n font-size: var(--fs-ui);\n text-align: left;\n cursor: pointer;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n.band-sf-menu > button[aria-selected=true] {\n background: var(--accent-soft);\n color: var(--accent-text);\n}\n.band-sf-menu small {\n flex: none;\n color: var(--muted);\n}\n.band-sf-row-m > span {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n.band-sf-form code {\n overflow-wrap: anywhere;\n}\n.band-sf-tiers {\n display: grid;\n gap: 10px;\n}\n.band-sf-tiers summary {\n cursor: pointer;\n font-size: var(--fs-ui);\n font-weight: 500;\n}\n.band-sf-tiers[open] {\n display: grid;\n gap: 10px;\n}\n.band-sf-row-x {\n grid-column: 1 / -1;\n margin-top: 8px;\n min-width: 0;\n}\n.band-sf-inline {\n max-width: 640px;\n padding: 16px 18px;\n border-radius: var(--r-xl);\n background: var(--panel);\n box-shadow: var(--shadow-card);\n gap: 14px;\n}\n.band-sf-inline h3 {\n margin: 0;\n font-size: var(--fs-lead);\n font-weight: 600;\n}\n.band-sf-uses {\n display: grid;\n gap: 8px;\n margin: 0;\n padding: 0;\n border: 0;\n min-width: 0;\n}\n.band-sf-uses legend {\n padding: 0 0 6px;\n font-weight: 500;\n}\n.band-sf-use {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n gap: 4px 12px;\n align-items: center;\n}\n.band-sf-use > label {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n.band-sf-use .band-sf-err {\n grid-column: 1 / -1;\n}\n.band-sf-opt {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 8px 10px;\n border-radius: var(--r-lg);\n cursor: pointer;\n}\n.band-sf-opt:hover,\n.band-sf-opt:has(:checked) {\n background: var(--fill);\n}\n.band-sf-opt > span {\n display: grid;\n gap: 1px;\n min-width: 0;\n}\n.band-sf-opt small {\n color: var(--muted);\n font-size: var(--fs-dense);\n overflow-wrap: anywhere;\n}\n.band-sf-pair {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n.band-sf-pair > span {\n color: var(--muted);\n}\n.band-sf-default {\n color: var(--accent-text);\n background: var(--accent-soft);\n}\n.band-sf-sw {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n max-width: 560px;\n}\n.band-sf-sw > div {\n display: grid;\n gap: 2px;\n}\n.band-sf-dialog {\n box-sizing: border-box;\n width: min(460px, calc(100vw - 32px));\n max-height: calc(100dvh - 32px);\n overflow: auto;\n overscroll-behavior: contain;\n border: 0;\n border-radius: var(--r-xl);\n box-shadow: var(--shadow-pop);\n background: var(--panel);\n color: var(--ink);\n padding: 22px 24px;\n}\n.band-sf-dialog[open] {\n display: grid;\n gap: 14px;\n}\n.band-sf-dialog::backdrop {\n background: var(--scrim);\n}\n.band-sf-dialog h2 {\n margin: 0;\n font-size: var(--fs-title);\n overflow-wrap: anywhere;\n}\n.band-sf-dialog ul {\n margin: 0;\n padding-left: 18px;\n display: grid;\n gap: 4px;\n}\n.band-sf-reveal {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n max-width: 560px;\n}\n.band-sf-reveal .field {\n flex: 1 1 240px;\n width: auto;\n font-family: var(--mono);\n}\n.band-sf-confirm {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px 12px;\n font-size: var(--fs-ui);\n}\n@media (max-width: 600px) {\n .band-sf {\n grid-template-columns: minmax(0, 1fr);\n }\n .band-sf[data-view=page] .band-sf-nav {\n display: none;\n }\n .band-sf[data-view=index] .band-sf-scroll {\n display: none;\n }\n .band-sf-nav {\n padding: 16px;\n }\n .band-sf-grp a {\n padding: 10px 8px;\n font-size: var(--fs-body);\n }\n .band-sf-grp a .band-sf-chev {\n display: inline;\n }\n .band-sf-grp a[aria-current=page] {\n background: none;\n font-weight: 400;\n }\n .band-sf-main {\n padding: 12px 16px 48px;\n gap: 16px;\n }\n .band-sf-back-m {\n display: inline-flex;\n }\n .band-sf-h {\n display: grid;\n gap: 10px;\n }\n .band-sf-h-a .btn {\n justify-self: start;\n }\n .band-sf-row-a {\n grid-column: 1 / -1;\n grid-row: auto;\n justify-content: flex-start;\n margin-top: 4px;\n }\n .band-sf-row-a .band-sf-chev {\n margin-left: auto;\n }\n .band-sf-row-a:has(.band-sf-chev:only-child) {\n grid-column: 2;\n grid-row: 1 / span 2;\n justify-content: flex-end;\n margin-top: 0;\n }\n .band-sf-row > .band-sf-acts {\n grid-column: 1 / -1;\n justify-content: flex-start;\n margin-top: 4px;\n }\n .band-sf-fact {\n grid-template-columns: 88px minmax(0, 1fr);\n gap: 12px;\n }\n .band-sf-dz-r {\n display: grid;\n gap: 8px;\n }\n .band-sf-dz-r .btn {\n justify-self: start;\n }\n .band-sf-dialog {\n padding: 18px 16px;\n }\n .band-sf-pair {\n grid-template-columns: minmax(0, 1fr);\n }\n .band-sf-pickgrid {\n grid-template-columns: minmax(0, 1fr);\n }\n .band-sf-pcards {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .band-sf-inline {\n padding: 14px;\n }\n .band-sf-use {\n grid-template-columns: minmax(0, 1fr);\n }\n .band-sf-sw {\n display: grid;\n gap: 8px;\n }\n}\n.band-beta-list > li > .band-beta-actions {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 8px;\n flex-shrink: 0;\n}\n.band-beta-copy {\n display: grid;\n gap: 8px;\n margin-top: 12px;\n}\n.band-beta-copy textarea {\n width: 100%;\n}\n@media (max-width: 600px) {\n .band-beta-list > li {\n flex-wrap: wrap;\n }\n}\n';let el=document.head.querySelector('style[data-band-style="@kanyun-ai-infra/band-settings"]');if(!el){el=document.createElement("style");el.setAttribute("data-band-style","@kanyun-ai-infra/band-settings");document.head.prepend(el)}el.textContent=css}var SELF="@kanyun-ai-infra/band-settings";var INDEX_PAGE=`${SELF}/settings-index`;var INDEX_PATH="/settings";var PERSONAL_SECTIONS=[{group:"\u6A21\u578B\u4E0E\u51ED\u636E",slug:"models",title:"\u6A21\u578B\u914D\u7F6E",page:`${SELF}/models`},{group:"\u6A21\u578B\u4E0E\u51ED\u636E",slug:"net-credentials",title:"\u7F51\u7EDC\u51ED\u636E",page:`${SELF}/net-credentials`},{group:"\u8D26\u53F7\u4E0E\u8FDE\u63A5",slug:"connections",title:"\u6211\u7684\u8FDE\u63A5",page:`${SELF}/connections`},{group:"\u8D26\u53F7\u4E0E\u8FDE\u63A5",slug:"tokens",title:"\u5E73\u53F0 token",page:`${SELF}/platform-tokens`},{group:"\u901A\u77E5",slug:"reminders",title:"\u63D0\u9192",page:`${SELF}/reminders`}];var personalPath=(slug,...rest)=>rest.length===0?`/settings/${slug}`:`/settings/${[slug,...rest].map(encodeURIComponent).join("/")}`;var personalPage=slug=>PERSONAL_SECTIONS.find(s=>s.slug===slug)?.page??"";function personalGroups(){const out=[];for(const s of PERSONAL_SECTIONS){const last=out.at(-1);if(last?.group===s.group)last.sections.push({slug:s.slug,title:s.title});else out.push({group:s.group,sections:[{slug:s.slug,title:s.title}]})}return out}function pageLink(ctx,page,params2){return e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;e.preventDefault();leaveThen(()=>ctx.app.navigate({page,...params2?{params:params2}:{}}))}}var NARROW="(max-width: 600px)";function useNarrow(){return useSyncExternalStore(fn=>{const m=window.matchMedia?.(NARROW);m?.addEventListener("change",fn);return()=>m?.removeEventListener("change",fn)},()=>window.matchMedia?.(NARROW).matches??false,()=>false)}var dirtyProbe=null;var pendingLeave=null;var leaveWatchers=new Set;var notifyLeave=()=>{for(const fn of[...leaveWatchers])fn()};function formChanged(){return dirtyProbe?.()??false}function controlValue(el){if(el instanceof HTMLInputElement)return el.type==="checkbox"||el.type==="radio"?String(el.checked):el.value;if(el instanceof HTMLTextAreaElement||el instanceof HTMLSelectElement)return el.value;return""}var inForm=el=>el.closest("form")!==null;function useLeaveGuard(root){useEffect(()=>{const el=root.current;if(!el)return;pendingLeave=null;const baseline=new Map;const add=node=>{if(node.matches("input, textarea, select")&&inForm(node)&&!baseline.has(node))baseline.set(node,controlValue(node))};const snap=node=>{if(node instanceof Element)add(node);for(const child of node.querySelectorAll("input, textarea, select"))add(child)};snap(el);const observer=typeof MutationObserver==="function"?new MutationObserver(records=>{for(const r of records)for(const n of r.addedNodes)if(n instanceof Element)snap(n)}):null;observer?.observe(el,{childList:true,subtree:true});const probe=()=>{for(const[node,was]of baseline){if(!node.isConnected)continue;if(controlValue(node)!==was)return true}return false};dirtyProbe=probe;return()=>{observer?.disconnect();if(dirtyProbe===probe)dirtyProbe=null}},[root])}function leaveThen(go){if(!formChanged()){go();return}pendingLeave=go;notifyLeave()}function usePendingLeave(){return useSyncExternalStore(fn=>{leaveWatchers.add(fn);return()=>{leaveWatchers.delete(fn)}},()=>pendingLeave!==null,()=>false)}function LeaveDialog(){const open=usePendingLeave();if(!open)return null;const stay=()=>{pendingLeave=null;notifyLeave()};const leave2=()=>{const go=pendingLeave;pendingLeave=null;notifyLeave();go?.()};return jsx(Dialog,{title:"\u653E\u5F03\u6CA1\u4FDD\u5B58\u7684\u5185\u5BB9\uFF1F",onClose:stay,actions:jsxs(Fragment,{children:[jsx("button",{type:"button",className:"btn",onClick:stay,children:"\u7EE7\u7EED\u586B\u5199"}),jsx("button",{type:"button",className:"btn primary",onClick:leave2,children:"\u653E\u5F03\u5E76\u79BB\u5F00"})]}),children:jsx("p",{children:"\u8FD9\u4E00\u9875\u586B\u7684\u5185\u5BB9\u8FD8\u6CA1\u4FDD\u5B58\uFF0C\u79BB\u5F00\u540E\u4E0D\u4F1A\u7559\u5728\u8FD9\u91CC\uFF0C\u4E5F\u4E0D\u4F1A\u5B58\u5728\u6D4F\u89C8\u5668\u91CC\u3002"})})}function Frame({ctx,navLabel,title,obj,crumb,groups,current,view="page",back,backMobile,children}){const mainRef=useRef(null);useLeaveGuard(mainRef);return jsxs("div",{className:"band-sf","data-view":view,children:[jsxs("nav",{className:"band-sf-nav","aria-label":navLabel,children:[jsxs("div",{className:"band-sf-head",children:[crumb?jsx("div",{className:"band-sf-crumb",children:crumb}):null,jsx("span",{className:"band-sf-title",children:title}),!crumb&&obj?jsx("span",{className:"band-sf-obj",children:obj}):null]}),groups.map(g=>jsxs("div",{className:"band-sf-grp",children:[jsx("span",{children:g.group}),g.sections.map(s=>jsxs("a",{href:s.href,"aria-current":s.slug===current?"page":void 0,onClick:pageLink(ctx,s.page,s.params),children:[s.title,jsx("span",{className:"band-sf-chev","aria-hidden":"true",children:"\u203A"})]},s.slug))]},g.group))]}),jsx("div",{className:"band-sf-scroll",children:jsxs("main",{className:"band-sf-main","data-view":view,ref:mainRef,children:[view==="page"&&back?jsxs("a",{className:"band-sf-back",href:back.href,onClick:pageLink(ctx,back.page,back.params),children:[jsx("span",{"aria-hidden":"true",children:"\u2039"})," ",back.label]}):null,view==="page"&&backMobile?jsxs("a",{className:"band-sf-back band-sf-back-m",href:backMobile.href,onClick:pageLink(ctx,backMobile.page,backMobile.params),children:[jsx("span",{"aria-hidden":"true",children:"\u2039"})," ",backMobile.label]}):null,children]})}),jsx(LeaveDialog,{})]})}var tokenProbes=new Map;function usePlatformTokensUsable(ctx,ask){const api=ctx.app.data.write?.platformTokens;const who=ctx.app.member?.id??"";const[usable,setUsable]=useState(true);useEffect(()=>{if(!ask||!api)return;let probe=tokenProbes.get(who);if(!probe){probe=api.list().then(()=>true,e=>!isForbidden(e));tokenProbes.set(who,probe)}let live=true;void probe.then(ok=>{if(live)setUsable(ok)});return()=>{live=false}},[api,who,ask]);return usable}function PersonalFrame({ctx,current,view="page",back="settings",children}){useEffect(()=>{enterSection(current??null)},[current]);const tokensUsable=usePlatformTokensUsable(ctx,current!=="tokens");const groups=personalGroups().map(g=>({group:g.group,sections:g.sections.filter(s=>tokensUsable||s.slug!=="tokens"||current==="tokens").map(s=>({slug:s.slug,title:s.title,href:personalPath(s.slug),page:personalPage(s.slug)}))})).filter(g=>g.sections.length>0);return jsx(Frame,{ctx,navLabel:"\u8BBE\u7F6E\u5206\u533A",title:"\u8BBE\u7F6E",obj:"\u53EA\u6709\u4F60\u770B\u5F97\u5230\u8FD9\u91CC",groups,current,view,backMobile:back==="settings"?{label:"\u8BBE\u7F6E",href:INDEX_PATH,page:INDEX_PAGE}:void 0,children})}function Back({ctx,label,page,href:href2,params:params2}){return jsxs("a",{className:"band-sf-back",href:href2,onClick:pageLink(ctx,page,params2),children:[jsx("span",{"aria-hidden":"true",children:"\u2039"})," ",label]})}function PageHead({title,desc,action}){return jsxs("div",{className:"band-sf-h",children:[jsxs("div",{children:[jsx("h1",{children:title}),desc?jsx("p",{children:desc}):null]}),action?jsx("div",{className:"band-sf-h-a",children:action}):null]})}function Rows({label,children}){return jsx("ul",{className:"band-sf-rows","aria-label":label,children})}function Row({title,tags,meta,actions,href:href2,onOpen,mono=false,isNew=false,extra}){const name=jsx("b",{className:mono?"band-sf-mono":void 0,children:title});return jsxs("li",{className:isNew?"band-sf-row is-new":"band-sf-row",children:[jsxs("div",{className:"band-sf-row-t",children:[onOpen?jsx("a",{className:"band-sf-row-link",href:href2??"#",onClick:e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;e.preventDefault();onOpen()},children:name}):name,tags]}),jsxs("div",{className:"band-sf-row-a",children:[actions,onOpen?jsx("span",{className:"band-sf-chev","aria-hidden":"true",children:"\u203A"}):null]}),meta&&meta.length>0?jsx("div",{className:"band-sf-row-m",children:meta.map((m,i)=>jsx("span",{children:m},i))}):null,extra?jsx("div",{className:"band-sf-row-x",children:extra}):null]})}function Facts({items}){return jsx("dl",{className:"band-sf-facts",children:items.map(f=>jsxs("div",{className:"band-sf-fact",children:[jsx("dt",{children:f.key}),jsx("dd",{children:f.value})]},f.key))})}function Section({title,children}){return jsxs("section",{className:"band-sf-sec","aria-label":title,children:[jsx("h2",{children:title}),children]})}function DangerZone({children}){return jsxs("section",{className:"band-sf-dz","aria-label":"\u5371\u9669\u64CD\u4F5C",children:[jsx("h2",{children:"\u5371\u9669\u64CD\u4F5C"}),children]})}function DangerRow({title,note,action}){return jsxs("div",{className:"band-sf-dz-r",children:[jsxs("div",{children:[jsx("b",{children:title}),jsx("span",{children:note})]}),action]})}function Loading({text}){return jsx("output",{className:"band-sf-load",children:jsxs("span",{className:"tuning",children:[jsxs("svg",{viewBox:"0 0 80 55","aria-hidden":"true",children:[jsx("line",{x1:"0",y1:"12",x2:"80",y2:"12"}),jsx("line",{x1:"0",y1:"22",x2:"80",y2:"22"}),jsx("line",{x1:"0",y1:"32",x2:"80",y2:"32"}),jsx("line",{x1:"0",y1:"42",x2:"80",y2:"42"}),jsx("line",{x1:"0",y1:"52",x2:"80",y2:"52"}),jsx("circle",{cx:"20",cy:"37",r:"4.6",fill:"var(--ink)"}),jsx("circle",{cx:"40",cy:"27",r:"4.6",fill:"var(--accent)"}),jsx("circle",{cx:"60",cy:"17",r:"4.6",fill:"var(--ink)"})]}),jsx("span",{children:text})]})})}function Empty({children,action}){return jsxs("div",{className:"band-sf-empty rest",children:[jsx("i",{}),jsx("p",{children}),action??null]})}function ReadError({children,retry}){return jsx("div",{className:"band-sf-error",children:jsx(ErrorNote,{retry,children})})}function Notice({text}){return jsx("output",{className:"sr-only","aria-live":"polite",children:text})}var pending={};var PENDING_TTL_MS=1e4;var alive=at=>Date.now()-at<PENDING_TTL_MS;function markFresh(slug,id){markFreshMany(slug,[id])}function markFreshMany(slug,ids){pending={...pending,fresh:{slug,ids,at:Date.now()}}}function enterSection(slug){const f=pending.fresh;if(f&&f.slug!==slug)pending={...pending,fresh:void 0};const n=pending.notice;if(n&&n.slug!==slug)pending={...pending,notice:void 0}}function peekFreshAll(slug){const f=pending.fresh;return f&&f.slug===slug&&alive(f.at)?f.ids:[]}function clearFresh(){pending={...pending,fresh:void 0}}function markNotice(slug,text){pending={...pending,notice:{slug,text,at:Date.now()}}}function takeNotice(slug){const n=pending.notice;pending={...pending,notice:void 0};return n&&n.slug===slug&&alive(n.at)?n.text:null}function useFreshRow(slug){return useFreshRows(slug)[0]??null}function useFreshRows(slug){const[ids]=useState(()=>peekFreshAll(slug));useEffect(()=>{if(ids.length>0)clearFresh()},[ids]);return ids}function useCrossPageNotice(slug){const[note,flash]=useSavedNote();useEffect(()=>{const text=takeNotice(slug);if(text)flash(text)},[slug,flash]);return[note,flash]}function Saved({text="\u5DF2\u4FDD\u5B58"}){return jsx("output",{className:"band-sf-ok",children:text})}function useSavedNote(){const[note,setNote]=useState("");const flash=useCallback(text=>setNote(text),[]);useEffect(()=>{if(!note)return;const timer=setTimeout(()=>setNote(""),2e3);return()=>clearTimeout(timer)},[note]);return[note,flash]}function Dialog({title,children,actions,onClose}){const ref=useRef(null);const titleId=useId();useEffect(()=>{const el=ref.current;const opener=document.activeElement instanceof HTMLElement?document.activeElement:null;if(el&&!el.open){if(typeof el.showModal==="function")el.showModal();else el.setAttribute("open","")}return()=>{if(opener?.isConnected)opener.focus()}},[]);return jsxs("dialog",{ref,className:"band-sf-dialog","aria-labelledby":titleId,onCancel:e=>{e.preventDefault();onClose()},children:[jsx("h2",{id:titleId,children:title}),children,jsx("div",{className:"band-sf-acts band-sf-acts-end",children:actions})]})}function NoAccess({title,children,action}){const id=useId2();return jsxs2("section",{className:"band-settings-no-access","aria-labelledby":id,children:[jsx2("h2",{id,children:title}),jsx2("p",{children}),jsx2("button",{type:"button",className:"btn",onClick:action.onClick,children:action.label})]})}var ROLES=[["owner","\u521B\u5EFA\u4EBA"],["maintainer","\u7BA1\u7406\u5458"],["member","\u6210\u5458"]];var DESC="\u54EA\u4E9B\u89D2\u8272\u53EF\u4EE5\u6279\u51C6\u81EA\u5DF1\u63D0\u4EA4\u7684\u7248\u672C\u3002\u8BBE\u7F6E\u7ACB\u5373\u5F71\u54CD\u5C1A\u672A\u901A\u8FC7\u7684\u95E8\u7981\u3002";var READONLY="\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u6539\u3002";function ApprovalSettings({ctx}){const api=ctx.approvalSettings;const[roles,setRoles]=useState2(null);const[stored,setStored]=useState2(null);const[canManage,setCanManage]=useState2(false);const[readError,setReadError]=useState2(null);const[writeError,setWriteError]=useState2(null);const[saved,setSaved]=useState2(false);const[busy,setBusy]=useState2(false);const[reload,setReload]=useState2(0);useEffect2(()=>{let active=true;setReadError(null);const load=async()=>{if(!api)throw new Error("\u8FD9\u4E2A\u5BBF\u4E3B\u4E0D\u652F\u6301\u9879\u76EE\u81EA\u6279\u8BBE\u7F6E");return api.get()};void load().then(value=>{if(!active)return;setRoles(value.selfApprovalRoles);setStored(value.selfApprovalRoles);setCanManage(value.canManage)}).catch(e=>{if(active)setReadError(e)});return()=>{active=false}},[api,reload]);async function save(){if(!api||!roles||busy)return;setBusy(true);setWriteError(null);setSaved(false);try{const value=await api.set(roles);setRoles(value.selfApprovalRoles);setStored(value.selfApprovalRoles);setCanManage(value.canManage);setSaved(true)}catch(e){setWriteError(`\u8BBE\u7F6E\u6CA1\u6709\u4FDD\u5B58\uFF1A${errorText(e)}`)}finally{setBusy(false)}}const dirty=roles!==null&&stored!==null&&(roles.length!==stored.length||roles.some(r=>!stored.includes(r)));const forbidden=readError!==null&&isForbidden2(readError);const readFailed=readError!==null&&!forbidden;return jsxs3(Fragment2,{children:[jsx3(PageHead,{title:"\u6279\u51C6",desc:DESC}),forbidden?jsx3(NoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u6279\u51C6\u8BBE\u7F6E",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-project/project",params:{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{}}})},children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"}):readFailed?jsxs3(ReadError,{retry:()=>setReload(n=>n+1),children:["\u6279\u51C6\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",errorText(readError)]}):roles===null?jsx3(Loading,{text:"\u6B63\u5728\u8BFB\u53D6\u6279\u51C6\u8BBE\u7F6E\u2026"}):jsxs3(Fragment2,{children:[!canManage?jsx3("p",{className:"band-sf-muted",children:READONLY}):null,jsxs3("section",{className:"band-sf-sec","aria-label":"\u6279\u51C6\u8BBE\u7F6E",children:[jsxs3("fieldset",{children:[jsx3("legend",{className:"sr-only",children:"\u8C01\u53EF\u4EE5\u6279\u51C6\u81EA\u5DF1\u4EA7\u51FA\u7684\u7248\u672C"}),jsx3("p",{className:"band-sf-muted",children:"\u9009\u4E2D\u7684\u89D2\u8272\u4ECD\u987B\u7B26\u5408\u95E8\u7981\u8981\u6C42\u3002\u672A\u9009\u4E2D\u7684\u89D2\u8272\u9700\u8981\u5176\u4ED6\u4EBA\u6279\u51C6\u3002"}),jsx3("div",{className:"band-sf-acts",children:ROLES.map(([role,label])=>jsxs3("label",{className:"choice",children:[jsx3("input",{type:"checkbox",className:"checkbox",checked:roles.includes(role),disabled:!canManage||busy,onChange:e=>{setRoles(e.target.checked?[...roles,role]:roles.filter(r=>r!==role));setSaved(false);setWriteError(null)}}),label]},role))})]}),jsx3("p",{className:"band-sf-muted",children:"\u4E0D\u9009\u4EFB\u4F55\u89D2\u8272\u65F6\uFF0C\u6240\u6709\u4EBA\u90FD\u9700\u8981\u4ED6\u4EBA\u6279\u51C6\u3002Agent \u4EA7\u51FA\u7684\u7248\u672C\u4E0D\u53D7\u5F71\u54CD\u3002\u8BBE\u7F6E\u7ACB\u5373\u5F71\u54CD\u5C1A\u672A\u901A\u8FC7\u7684\u95E8\u7981\uFF0C\u5DF2\u7ECF\u901A\u8FC7\u7684\u9636\u6BB5\u4E0D\u4F1A\u64A4\u9500\u3002"})]}),canManage?jsxs3("div",{className:"band-sf-acts",children:[jsx3("button",{type:"button",className:"btn primary",disabled:busy||!dirty,onClick:()=>void save(),children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":"\u4FDD\u5B58"}),dirty&&!busy?jsx3("span",{className:"band-sf-hint",children:"\u6539\u52A8\u8FD8\u6CA1\u4FDD\u5B58\uFF0C\u5207\u5230\u522B\u7684\u5206\u533A\u4F1A\u4E22\u6389"}):null,saved&&!dirty?jsx3(Saved,{}):null]}):null,writeError?jsx3("div",{role:"alert",children:jsx3(ErrorNote2,{children:writeError})}):null]})]})}var SELF2="@kanyun-ai-infra/band-settings";var DEPLOYMENT_CONNECTIONS_PAGE=`${SELF2}/deployment-connections`;var leaveDeployment=ctx=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"});function DeploymentCrumb({title}){return jsx4("nav",{className:"band-sf-crumb","aria-label":"\u4F4D\u7F6E",children:jsxs4("div",{className:"band-sf-crumb-in",children:[jsx4("span",{children:"\u90E8\u7F72\u7BA1\u7406"}),jsx4("span",{"aria-hidden":"true",children:"\u203A"}),jsx4("span",{"aria-current":"page",children:title})]})})}function DeploymentNoAccess({what,hint,leave:leave2}){return jsxs4(NoAccess,{title:`\u6CA1\u6709\u6743\u9650\u770B${what}`,action:{label:"\u56DE\u5230\u9996\u9875",onClick:leave2},children:[what,"\u53EA\u6709 Band \u7BA1\u7406\u5458\u80FD\u770B\u3001\u80FD\u6539\u3002",hint]})}var SELF3="@kanyun-ai-infra/band-settings";var betaMembersPage=reactMount(ctx=>jsx5(BetaMembersPanel,{api:ctx.app.data.write?.betaMembers,leave:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})}));var notFound=e=>typeof e==="object"&&e!==null&&e.code==="NOT_FOUND";var betaMembersMenu=reactMount((ctx,{owner})=>jsx5(BetaMembersMenu,{ctx,close:owner.close}));function BetaMembersMenu({ctx,close}){const api=ctx.app.data.write?.betaMembers;const[allowed,setAllowed]=useState3(false);useEffect3(()=>{let live=true;api?.isAdmin().then(value=>live&&setAllowed(value),()=>live&&setAllowed(false));return()=>{live=false}},[api]);if(!allowed)return null;return jsx5("button",{className:"btn ghost",type:"button",onClick:()=>{close();ctx.app.navigate({page:`${SELF3}/beta-members`})},children:"\u5185\u6D4B\u540D\u5355"})}var when=iso=>new Date(iso).toLocaleString("zh-CN",{hour12:false});function BetaMembersPanel({api,leave:leave2}){const[data,setData]=useState3(null);const[readError,setReadError]=useState3(null);const[noAccess,setNoAccess]=useState3(false);const[reload,setReload]=useState3(0);const[text,setText]=useState3("");const[busy,setBusy]=useState3(false);const[notice,setNotice]=useState3("");const[copyNotice,setCopyNotice]=useState3("");const[copyTarget,setCopyTarget]=useState3("");const[manualCopy,setManualCopy]=useState3("");const[error,setError]=useState3("");const alive2=useRef2(true);useEffect3(()=>{alive2.current=true;return()=>{alive2.current=false}},[]);useEffect3(()=>{let active=true;setReadError(null);setNoAccess(false);if(!api){setReadError("\u5F53\u524D\u73AF\u5883\u6CA1\u6709\u5185\u6D4B\u540D\u5355");return}api.list().then(value=>active&&setData(value),e=>{if(!active)return;if(notFound(e))setNoAccess(true);else setReadError(failedBecause(e,"\u70B9\u91CD\u8BD5"))});return()=>{active=false}},[api,reload]);const parsed=parseLdapList(text);const tooMany=parsed.valid.length>BETA_MEMBERS_BATCH_MAX;const add=async()=>{if(!api||busy||parsed.valid.length===0||tooMany)return;setBusy(true);setError("");setNotice("");try{const r=await api.add(parsed.valid);if(!alive2.current)return;const parts=[`\u52A0\u4E86 ${r.added.length} \u4EBA`];if(r.existing.length>0)parts.push(`${r.existing.length} \u4EBA\u672C\u6765\u5C31\u5728\u540D\u5355\u91CC`);setNotice(parts.join("\uFF0C"));setText(parsed.invalid.join("\n"));setReload(n=>n+1)}catch(e){if(alive2.current)setError(`\u6CA1\u52A0\u4E0A\uFF1A${failedBecause(e,"\u8BF7\u91CD\u8BD5")}`)}finally{if(alive2.current)setBusy(false)}};const remove=async ldap=>{if(!api||busy)return;setBusy(true);setError("");setNotice("");try{await api.remove(ldap);if(!alive2.current)return;setNotice(`\u5DF2\u79FB\u51FA ${ldap}`);setReload(n=>n+1)}catch(e){if(alive2.current)setError(`\u6CA1\u79FB\u51FA\uFF1A${failedBecause(e,"\u8BF7\u91CD\u8BD5")}`)}finally{if(alive2.current)setBusy(false)}};const invite=async ldap=>{if(!api||busy)return;setBusy(true);setError("");setNotice("");try{const r=await api.add([ldap]);if(!alive2.current)return;setNotice(r.added.includes(ldap)?`\u5DF2\u5F00\u901A ${ldap}`:`${ldap} \u5DF2\u7ECF\u5F00\u901A\u8FC7\u4E86\uFF0C\u5237\u65B0\u4E00\u4E0B\u770B\u770B`);setReload(n=>n+1)}catch(e){if(alive2.current)setError(`\u6CA1\u5F00\u901A\uFF1A${failedBecause(e,"\u8BF7\u91CD\u8BD5")}`)}finally{if(alive2.current)setBusy(false)}};const copy=async(ldaps,target)=>{setCopyTarget(target);const value=ldaps.join("\n");setCopyNotice("");setManualCopy("");try{await navigator.clipboard.writeText(value);if(alive2.current)setCopyNotice(`\u5DF2\u590D\u5236 ${ldaps.length} \u4E2A ldap`)}catch{if(!alive2.current)return;setCopyNotice("\u6CA1\u80FD\u590D\u5236\uFF0C\u8BF7\u9009\u4E2D\u4E0B\u9762\u7684 ldap \u624B\u52A8\u590D\u5236");setManualCopy(value)}};const copyFeedback=()=>jsxs5(Fragment3,{children:[copyNotice&&jsx5("output",{className:"band-beta-notice","aria-live":"polite",children:copyNotice}),manualCopy&&jsxs5("label",{className:"band-beta-copy",children:[jsx5("span",{children:"\u624B\u52A8\u590D\u5236 ldap"}),jsx5("textarea",{className:"field mono",readOnly:true,rows:Math.min(6,manualCopy.split("\n").length),value:manualCopy,onFocus:e=>e.currentTarget.select()})]})]});const requested=data?.members.filter(m=>m.status==="requested")??[];const invited=data?.members.filter(m=>m.status==="invited")??[];const row=(m,action)=>jsxs5("li",{children:[jsxs5("div",{children:[jsx5("strong",{className:"mono",children:m.ldap}),jsxs5("span",{children:[m.addedBy===m.ldap?`\u62A5\u540D\u65F6\u95F4\uFF1A${when(m.addedAt)}`:`${m.addedBy} \u4E8E ${when(m.addedAt)} \u52A0\u5165`,m.requestTeam&&` \xB7 ${m.requestTeam}`]}),m.requestNote&&jsx5("p",{className:"band-beta-note",children:m.requestNote}),action==="invite"&&copyTarget===m.ldap&&copyFeedback()]}),action==="invite"?jsxs5("div",{className:"band-beta-actions",children:[jsx5("button",{className:"btn ghost",type:"button","aria-label":`\u590D\u5236 ${m.ldap} \u7684 ldap`,onClick:()=>void copy([m.ldap],m.ldap),children:"\u590D\u5236 ldap"}),jsx5("button",{className:"btn primary",type:"button",disabled:busy,"aria-label":`\u5F00\u901A ${m.ldap}`,onClick:()=>void invite(m.ldap),children:"\u5F00\u901A"})]}):jsx5("button",{className:"btn ghost",type:"button",disabled:busy,"aria-label":`\u79FB\u51FA ${m.ldap}`,onClick:()=>void remove(m.ldap),children:"\u79FB\u51FA"})]},m.ldap);return jsxs5("main",{className:"band-settings band-beta-members",children:[jsx5(DeploymentCrumb,{title:"\u5185\u6D4B\u540D\u5355"}),jsxs5("header",{children:[jsx5("h1",{children:"\u5185\u6D4B\u540D\u5355"}),jsx5("p",{children:"\u5185\u6D4B\u5F00\u7740\u65F6\uFF0C\u53EA\u6709\u540D\u5355\u91CC\u7684\u4EBA\u80FD\u7528 Band\uFF0C\u5176\u4ED6\u4EBA\u767B\u5F55\u540E\u770B\u5230\u62A5\u540D\u9875\uFF0C\u81EA\u5DF1\u62A5\u540D\u540E\u6392\u5728\u300C\u62A5\u540D\u5F85\u5F00\u901A\u300D\u91CC\u3002 \u70B9\u300C\u5F00\u901A\u300D\u4ED6\u5C31\u80FD\u7528\u4E86\u3002Band \u7BA1\u7406\u5458\u4E0D\u7528\u52A0\uFF0C\u6C38\u8FDC\u5728\u5185\u3002\u522B\u4EBA\u53D1\u51FA\u7684\u5206\u4EAB\u94FE\u63A5\u4E0D\u53D7\u5F71\u54CD\u3002"})]}),noAccess?jsx5(DeploymentNoAccess,{what:"\u5185\u6D4B\u540D\u5355",hint:"\u8981\u628A\u540C\u4E8B\u52A0\u8FDB\u5185\u6D4B\uFF0C\u8BF7\u627E Band \u7BA1\u7406\u5458\u3002",leave:leave2}):readError!==null?jsxs5(ErrorNote3,{retry:()=>setReload(n=>n+1),children:["\u540D\u5355\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]}):data===null?jsx5("output",{children:"\u6B63\u5728\u8BFB\u53D6\u540D\u5355\u2026"}):jsxs5(Fragment3,{children:[jsxs5("form",{className:"band-beta-form",onSubmit:e=>{e.preventDefault();void add()},children:[jsxs5("label",{children:[jsx5("span",{children:"\u52A0\u4EBA"}),jsx5("textarea",{className:"field",rows:4,value:text,placeholder:"\u586B ldap\uFF0C\u53EF\u7C98\u8D34\u591A\u4E2A",onChange:e=>setText(e.target.value),disabled:busy,"aria-invalid":parsed.invalid.length>0,"aria-describedby":"band-beta-hint band-beta-parse",spellCheck:false})]}),jsxs5("p",{id:"band-beta-hint",className:"band-beta-parse",children:["\u7528\u7A7A\u683C\u3001\u9017\u53F7\u6216\u6362\u884C\u9694\u5F00\uFF0C\u4E00\u6B21\u6700\u591A ",BETA_MEMBERS_BATCH_MAX," \u4EBA\u3002"]}),jsxs5("p",{id:"band-beta-parse",className:"band-beta-parse",children:[parsed.valid.length>0?`\u5C06\u52A0 ${parsed.valid.length} \u4EBA`:"\u8FD8\u6CA1\u586B\u4EBA",parsed.invalid.length>0&&jsxs5("span",{role:"alert",children:["\u3002\u8FD9\u4E9B\u4E0D\u662F ldap\uFF0C\u4E0D\u4F1A\u52A0\uFF1A",parsed.invalid.join("\u3001")]}),tooMany&&jsxs5("span",{role:"alert",children:["\u3002\u4E00\u6B21\u6700\u591A\u52A0 ",BETA_MEMBERS_BATCH_MAX," \u4EBA\uFF0C\u8FD9\u6B21\u591A\u4E86"," ",parsed.valid.length-BETA_MEMBERS_BATCH_MAX," \u4EBA\uFF0C\u8BF7\u5206\u6279\u52A0"]})]}),jsx5("button",{className:"btn primary",type:"submit",disabled:busy||parsed.valid.length===0||tooMany,children:busy?"\u6B63\u5728\u5904\u7406\u2026":"\u52A0\u5165\u540D\u5355"})]}),notice&&jsx5("output",{className:"band-beta-notice",children:notice}),error&&jsx5("p",{role:"alert",children:error}),jsxs5("section",{"aria-label":"Band \u7BA1\u7406\u5458",children:[jsx5("h2",{children:"Band \u7BA1\u7406\u5458\uFF08\u6C38\u8FDC\u5728\u5185\uFF09"}),jsx5("p",{className:"band-beta-admins",children:data.admins.length>0?data.admins.join("\u3001"):"\u6CA1\u6709\u914D\u7F6E\u7BA1\u7406\u5458"})]}),jsxs5("section",{"aria-label":"\u62A5\u540D\u5F85\u5F00\u901A",children:[jsxs5("h2",{children:["\u62A5\u540D\u5F85\u5F00\u901A\uFF08",requested.length," \u4EBA\uFF09"]}),requested.length>0&&jsx5("button",{className:"btn ghost",type:"button",onClick:()=>void copy(requested.map(m=>m.ldap),"all"),children:"\u590D\u5236\u5168\u90E8\u5F85\u5F00\u901A ldap"}),copyTarget==="all"&&copyFeedback(),requested.length===0?jsx5("p",{children:"\u8FD8\u6CA1\u6709\u4EBA\u81EA\u5DF1\u62A5\u540D\u3002"}):jsx5("ul",{className:"band-beta-list",children:requested.map(m=>row(m,"invite"))})]}),jsxs5("section",{"aria-label":"\u540D\u5355",children:[jsxs5("h2",{children:["\u540D\u5355\uFF08",invited.length," \u4EBA\uFF09"]}),invited.length===0?jsx5("p",{children:"\u540D\u5355\u8FD8\u662F\u7A7A\u7684\u3002\u73B0\u5728\u53EA\u6709 Band \u7BA1\u7406\u5458\u80FD\u7528\u3002"}):jsx5("ul",{className:"band-beta-list",children:invited.map(m=>row(m,"remove"))})]})]})]})}var SELF4="@kanyun-ai-infra/band-settings";var PAGE=`${SELF4}/connections`;var LIST_HREF="/settings/connections";var DESC2="\u8BA9 Band \u4EE5\u4F60\u7684\u540D\u4E49\u8BFB\u5916\u90E8\u5E73\u53F0\u3002token \u53EA\u663E\u793A\u672B 4 \u4F4D\u3002";var connectionsPage=reactMount2(ctx=>jsx6(Connections,{ctx}));function Connections({ctx}){const route=useRoute(ctx);const api=ctx.app.data.write?.personalConnections;const[rows,setRows]=useState4(null);const[readError,setReadError]=useState4(null);const[forbidden,setForbidden]=useState4(false);const[reload,setReload]=useState4(0);const[notice]=useCrossPageNotice("connections");const[local,flashLocal]=useSavedNote();const[token,setToken]=useState4("");const[busy,setBusy]=useState4(false);const[error,setError]=useState4("");const item=route.params.item;useEffect4(()=>{let live=true;setReadError(null);setForbidden(false);if(!api){setReadError("\u5F53\u524D\u73AF\u5883\u672A\u914D\u7F6E\u4E2A\u4EBA\u8FDE\u63A5\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458");return}api.list().then(r=>{if(live)setRows(r)},e=>{if(!live)return;setForbidden(isForbidden3(e));setReadError(failedBecause2(e,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,reload]);const go=next=>ctx.app.navigate({page:PAGE,...next?{params:{item:next}}:{}});const docz=rows?.find(r=>r.connector==="docz");const connect=async e=>{e.preventDefault();if(!api||busy||token.length<8)return;setBusy(true);setError("");const input=token;setToken("");try{await api.connect({token:input});flashLocal("docz \u5DF2\u8FDE\u63A5");setReload(n=>n+1)}catch{setError("\u8FDE\u63A5\u5931\u8D25\uFF0C\u91CD\u65B0\u586B\u5199 token \u540E\u518D\u70B9\u300C\u8FDE\u4E0A\u300D")}finally{setBusy(false)}};const disconnect=async()=>{if(!api||busy)return;setBusy(true);setError("");try{await api.disconnect();markNotice("connections","docz \u5DF2\u65AD\u5F00");setReload(n=>n+1);go()}catch{setError("\u65AD\u5F00\u5931\u8D25\uFF0C\u8BF7\u518D\u70B9\u4E00\u6B21\u300C\u65AD\u5F00\u300D")}finally{setBusy(false)}};if(forbidden){return jsxs6(PersonalFrame,{ctx,current:"connections",children:[jsx6(PageHead,{title:"\u6211\u7684\u8FDE\u63A5",desc:DESC2}),jsx6(NoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u6211\u7684\u8FDE\u63A5",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u6211\u7684\u8FDE\u63A5\u6309\u767B\u5F55\u4EBA\u5F52\u5C5E\uFF0C\u53EA\u6709\u672C\u4EBA\u80FD\u770B\u3002\u8981\u7528\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u3002"})]})}if(readError!==null){return jsxs6(PersonalFrame,{ctx,current:"connections",children:[jsx6(PageHead,{title:"\u6211\u7684\u8FDE\u63A5",desc:DESC2}),api?jsxs6(ReadError,{retry:()=>setReload(n=>n+1),children:["\u6211\u7684\u8FDE\u63A5\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]}):jsx6(Empty,{children:"\u5F53\u524D\u73AF\u5883\u672A\u914D\u7F6E\u4E2A\u4EBA\u8FDE\u63A5\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002"})]})}if(rows===null){return jsxs6(PersonalFrame,{ctx,current:"connections",children:[jsx6(PageHead,{title:"\u6211\u7684\u8FDE\u63A5",desc:DESC2}),jsx6(Loading,{text:"\u6B63\u5728\u8BFB\u53D6\u8FDE\u63A5\u2026"})]})}if(item==="docz"){const active=docz?.status==="active";return jsxs6(PersonalFrame,{ctx,current:"connections",back:"list",children:[jsx6(Back,{ctx,label:"\u6211\u7684\u8FDE\u63A5",page:PAGE,href:LIST_HREF}),jsx6(PageHead,{title:"docz",desc:"\u4EE5\u4F60\u7684\u540D\u4E49\u8BFB\u4F60\u6709\u6743\u9650\u7684\u6587\u6863\u3002\u4FDD\u5B58\u8FDE\u63A5\u4E0D\u4F1A\u8BFB\u53D6\u4F60\u7684\u6587\u6863\uFF0C\u6743\u9650\u4F1A\u5728\u4F7F\u7528\u65F6\u9A8C\u8BC1\u3002"}),jsx6(Facts,{items:[{key:"\u72B6\u6001",value:statusText(docz)},{key:"\u672B 4 \u4F4D",value:docz?.secretTails.token?`\u2022\u2022\u2022\u2022${docz.secretTails.token}`:"\u2014"},{key:"\u8FDE\u63A5\u4E8E",value:docz?shortDate(docz.createdAt):"\u2014"}]}),active?jsx6("p",{className:"band-sf-banner",children:"\u5DF2\u7ECF\u8FDE\u4E0A\u3002\u8981\u6362 token \u5C31\u5728\u4E0B\u9762\u65AD\u5F00\u518D\u8FDE\u4E00\u6B21\uFF1B\u65AD\u5F00\u540E Band \u4E0D\u518D\u4EE5\u4F60\u7684\u540D\u4E49\u8BFB docz\u3002"}):jsxs6("form",{className:"band-sf-form","aria-label":"\u8FDE\u63A5 docz",onSubmit:e=>void connect(e),children:[jsxs6("div",{className:"band-sf-fld",children:[jsxs6("label",{htmlFor:"band-docz-token",children:["\u4E2A\u4EBA token ",jsx6("span",{className:"band-sf-req",children:"\u5FC5\u586B"})]}),jsx6("input",{id:"band-docz-token",className:"field",type:"password",autoComplete:"off",value:token,minLength:8,maxLength:8192,disabled:busy,placeholder:"\u7C98\u8D34\u4F60\u7684 docz \u4E2A\u4EBA token","aria-describedby":"band-docz-token-hint",onChange:e=>setToken(e.target.value)}),jsx6("span",{className:"band-sf-hint",id:"band-docz-token-hint",children:"\u5728 docz \u7684\u4E2A\u4EBA\u8BBE\u7F6E\u91CC\u521B\u5EFA token\u3002\u63D0\u4EA4\u540E\u8F93\u5165\u6846\u6E05\u7A7A\uFF0C\u53EA\u7559\u672B 4 \u4F4D\u3002"})]}),jsx6("div",{className:"band-sf-acts",children:jsx6("button",{type:"submit",className:"btn primary",disabled:busy||token.length<8,children:busy?"\u6B63\u5728\u8FDE\u63A5\u2026":"\u8FDE\u4E0A"})})]}),jsx6(DangerZone,{children:jsx6(DangerRow,{title:"\u65AD\u5F00 docz",note:"Band \u4E0D\u518D\u4EE5\u4F60\u7684\u540D\u4E49\u8BFB docz\uFF0Ctoken \u5F53\u573A\u5220\u6389\u3002",action:jsx6("button",{type:"button",className:"btn danger",disabled:!active||busy,onClick:()=>void disconnect(),children:"\u65AD\u5F00"})})}),error&&jsx6("p",{role:"alert",className:"band-sf-err",children:error}),jsx6(Notice,{text:local})]})}return jsxs6(PersonalFrame,{ctx,current:"connections",children:[jsx6(PageHead,{title:"\u6211\u7684\u8FDE\u63A5",desc:DESC2}),jsxs6(Rows,{label:"\u6211\u7684\u8FDE\u63A5",children:[jsx6(Row,{title:"docz",tags:jsx6("span",{className:"chip plain s-approved",children:statusText(docz)}),meta:docz?[docz.secretTails.token?`\u672B 4 \u4F4D \u2022\u2022\u2022\u2022${docz.secretTails.token}`:"\u2014",`${shortDate(docz.createdAt)} \u8FDE\u63A5`]:["\u8FD8\u6CA1\u6709\u8FDE\u63A5\u3002\u8FDE\u4E0A\u4EE5\u540E\uFF0Cagent \u624D\u80FD\u8BFB\u4F60\u6709\u6743\u9650\u7684\u6587\u6863\u3002"],href:`${LIST_HREF}/docz`,onOpen:()=>go("docz"),actions:docz?.status==="active"?jsx6("span",{className:"band-sf-muted",children:"\u66F4\u6362 token"}):jsx6("span",{className:"band-sf-muted",children:"\u8FDE\u63A5"})}),jsx6(Row,{title:"\u77F3\u58A8",tags:jsx6("span",{className:"tag",children:"\u4E0D\u7528\u8FDE\u63A5"}),meta:["\u8BFB\u516C\u5F00\u5206\u4EAB\u7684\u77F3\u58A8\u6587\u6863\uFF0C\u4E0D\u9700\u8981 token"]})]}),jsx6("p",{className:"band-sf-muted",children:"\u77F3\u58A8\u7528\u4F60\u767B\u5F55 Band \u7684\u8D26\u53F7\u8BFB\uFF0C\u6BCF\u6B21\u5BFC\u5165\u65F6\u73B0\u53D6\u6388\u6743\u3001\u7528\u5B8C\u5C31\u4E22\uFF0CBand \u4E0D\u4FDD\u5B58\u3002"}),jsx6(Notice,{text:local||notice})]})}function statusText(c){if(!c)return"\u672A\u8FDE\u63A5";if(c.status==="active")return"\u5DF2\u8FDE\u63A5";if(c.status==="expired")return"\u9700\u8981\u91CD\u65B0\u8FDE\u63A5";return"\u5DF2\u65AD\u5F00"}function shortDate(iso){const d=new Date(iso);const p=n=>String(n).padStart(2,"0");return`${p(d.getMonth()+1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`}var PROJECT="@kanyun-ai-infra/band-project";var WORKSHOPS="@kanyun-ai-infra/band-workshops";function Crumb({ctx}){const{workshop,workshopName,workshopIcon,name}=ctx.project;return jsxs7("nav",{className:"band-sf-crumb-in","aria-label":"\u4F4D\u7F6E",children:[workshop?jsxs7(Fragment4,{children:[jsxs7("span",{className:"band-sf-crumb-ws",children:[jsx7(WorkshopIcon,{icon:workshopIcon,size:16}),jsx7("span",{children:workshopName??workshop})]}),jsx7("span",{"aria-hidden":"true",children:"\u203A"})]}):null,jsx7("button",{type:"button",title:name,onClick:()=>ctx.app.navigate({page:`${PROJECT}/project`,params:{project:ctx.project.id,...workshop?{workshop}:{}}}),children:name})]})}function WorkshopCrumb({ctx,workshopId,workshopName,here}){return jsx7("nav",{className:"band-sf-crumb","aria-label":"\u4F4D\u7F6E",children:jsxs7("div",{className:"band-sf-crumb-in",children:[jsx7("a",{href:"/workshops",onClick:pageLink(ctx,`${WORKSHOPS}/workshops`),children:"\u5DE5\u574A"}),jsx7("span",{"aria-hidden":"true",children:"\u203A"}),jsx7("a",{href:`/w/${encodeURIComponent(workshopId)}/about`,onClick:pageLink(ctx,`${WORKSHOPS}/about`,{workshop:workshopId}),children:workshopName}),jsx7("span",{"aria-hidden":"true",children:"\u203A"}),jsx7("span",{"aria-current":"page",children:here})]})})}var SELF5="@kanyun-ai-infra/band-settings";var feedbackAdminPage=reactMount3(ctx=>jsx8(FeedbackAdminPanel,{api:ctx.app.data.write?.feedbackAdmin,leave:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})}));var feedbackAdminMenu=reactMount3((ctx,{owner})=>jsx8(FeedbackAdminMenu,{ctx,close:owner.close}));function FeedbackAdminMenu({ctx,close}){const api=ctx.app.data.write?.feedbackAdmin;const[allowed,setAllowed]=useState5(false);useEffect5(()=>{let live=true;api?.isAdmin().then(value=>live&&setAllowed(value),()=>live&&setAllowed(false));return()=>{live=false}},[api]);if(!allowed)return null;return jsx8("button",{className:"btn ghost",type:"button",onClick:()=>{close();ctx.app.navigate({page:`${SELF5}/feedback-admin`})},children:"\u53CD\u9988\u7BA1\u7406"})}var when2=iso=>new Date(iso).toLocaleString("zh-CN",{hour12:false});var STATUS_LABEL={new:"\u65B0\u53CD\u9988",seen:"\u5DF2\u770B",resolved:"\u5DF2\u89E3\u51B3"};var STATUS_CHIP={new:"s-open",seen:"",resolved:"s-resolved"};var FILTERS=[{value:"open",label:"\u672A\u5904\u7406"},{value:"all",label:"\u5168\u90E8"},{value:"new",label:"\u65B0\u53CD\u9988"},{value:"seen",label:"\u5DF2\u770B"},{value:"resolved",label:"\u5DF2\u89E3\u51B3"}];var EMPTY_LABEL={open:"\u6CA1\u6709\u672A\u5904\u7406\u7684\u53CD\u9988",all:"\u8FD8\u6CA1\u6709\u4EBA\u63D0\u8FC7\u53CD\u9988",new:"\u6CA1\u6709\u65B0\u53CD\u9988",seen:"\u6CA1\u6709\u6807\u4E3A\u5DF2\u770B\u7684\u53CD\u9988",resolved:"\u6CA1\u6709\u5DF2\u89E3\u51B3\u7684\u53CD\u9988"};function FeedbackAdminPanel({api,leave:leave2}){const[admin,setAdmin]=useState5(null);const[filter,setFilter]=useState5("open");const[items,setItems]=useState5(null);const[next,setNext]=useState5(null);const[readError,setReadError]=useState5(null);const[reload,setReload]=useState5(0);const[more,setMore]=useState5(false);const[openId,setOpenId]=useState5(null);const filterRef=useRef3(filter);filterRef.current=filter;useEffect5(()=>{let live=true;if(!api){setReadError("\u5F53\u524D\u73AF\u5883\u6CA1\u6709\u53CD\u9988\u7BA1\u7406");return}api.isAdmin().then(v=>live&&setAdmin(v),()=>live&&setAdmin(true));return()=>{live=false}},[api]);useEffect5(()=>{if(!api||admin!==true)return;let live=true;setReadError(null);setItems(null);setMore(false);api.list({status:filter}).then(r=>{if(!live)return;setItems(r.items);setNext(r.nextCursor)},e=>{if(!live)return;if(isForbidden4(e))setAdmin(false);else setReadError(failedBecause3(e,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,admin,filter,reload]);const loadMore=async()=>{if(!api||next===null||more)return;const at=filter;setMore(true);try{const r=await api.list({status:at,cursor:next});if(filterRef.current!==at)return;setItems(cur=>[...cur??[],...r.items]);setNext(r.nextCursor)}catch(e){if(filterRef.current!==at)return;if(isForbidden4(e))setAdmin(false);else setReadError(failedBecause3(e,"\u70B9\u91CD\u8BD5"))}finally{if(filterRef.current===at)setMore(false)}};const replace=row=>setItems(cur=>{if(!cur)return cur;return cur.map(r=>r.id===row.id?row:r)});return jsxs8("main",{className:"band-settings band-feedback-admin",children:[jsx8(DeploymentCrumb,{title:"\u53CD\u9988\u7BA1\u7406"}),jsxs8("header",{children:[jsx8("h1",{children:"\u53CD\u9988\u7BA1\u7406"}),jsx8("p",{children:"\u7528\u6237\u5728 Band \u91CC\u63D0\u4EA4\u7684\u5185\u6D4B\u53CD\u9988\u3002\u6539\u72B6\u6001\u3001\u5199\u5907\u6CE8\u53EA\u6709\u7BA1\u7406\u5458\u770B\u5F97\u5230\uFF1B\u56DE\u590D\u4F1A\u51FA\u73B0\u5728\u63D0\u4EA4\u4EBA\u7684\u300C\u6211\u7684\u53CD\u9988\u300D\u91CC\u3002"})]}),admin===false?jsx8(DeploymentNoAccess,{what:"\u53CD\u9988\u7BA1\u7406",hint:"\u60F3\u53CD\u9988\u95EE\u9898\uFF0C\u8BF7\u7528\u9875\u9762\u4E0A\u7684\u53CD\u9988\u5165\u53E3\u3002",leave:leave2}):readError!==null?jsxs8(ErrorNote4,{retry:()=>setReload(n=>n+1),children:["\u53CD\u9988\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]}):admin===null||items===null?jsx8("output",{children:"\u6B63\u5728\u8BFB\u53D6\u53CD\u9988\u2026"}):jsxs8(Fragment5,{children:[jsxs8("label",{className:"band-feedback-filter",children:[jsx8("span",{children:"\u72B6\u6001"}),jsx8("select",{className:"select",value:filter,onChange:e=>setFilter(e.target.value),children:FILTERS.map(f=>jsx8("option",{value:f.value,children:f.label},f.value))})]}),items.length===0?jsxs8("p",{children:[EMPTY_LABEL[filter],"\u3002"]}):jsx8("ul",{className:"band-feedback-list",children:items.map(row=>jsx8(FeedbackRow,{row,api,open:openId===row.id,toggle:()=>setOpenId(openId===row.id?null:row.id),onChange:replace},row.id))}),next!==null&&jsx8("button",{className:"btn",type:"button",disabled:more,onClick:()=>void loadMore(),children:more?"\u6B63\u5728\u8BFB\u53D6\u2026":"\u52A0\u8F7D\u66F4\u591A"})]})]})}function FeedbackRow({row,api,open,toggle,onChange}){const[note,setNote]=useState5(row.adminNote??"");const[reply,setReply]=useState5("");const[busy,setBusy]=useState5(false);const[error,setError]=useState5("");const[notice,setNotice]=useState5("");const alive2=useRef3(true);useEffect5(()=>{alive2.current=true;return()=>{alive2.current=false}},[]);const autoSeen=useRef3(false);useEffect5(()=>{if(!open||autoSeen.current||row.status!=="new")return;autoSeen.current=true;api.patch(row.id,{status:"seen"}).then(r=>alive2.current&&onChange(r.feedback),()=>{})},[open]);const save=async(input,failed2,done,after)=>{if(busy)return;setBusy(true);setError("");setNotice("");try{const r=await api.patch(row.id,input);if(!alive2.current)return;onChange(r.feedback);setNotice(done);after?.()}catch(e){if(alive2.current)setError(`${failed2}\uFF1A${failedBecause3(e,"\u8BF7\u91CD\u8BD5")}`)}finally{if(alive2.current)setBusy(false)}};const who=row.authorName?`${row.authorName}\uFF08${row.author}\uFF09`:row.author;const where=row.projectName?`${row.workshopName?`${row.workshopName} / `:""}${row.projectName}`:row.pageUrl;const replyLen=feedbackTextLength(reply.trim());const noteLen=feedbackTextLength(note.trim());const noteChanged=note.trim()!==(row.adminNote??"");return jsxs8("li",{className:"band-feedback-item","data-status":row.status,children:[jsxs8("div",{className:"band-feedback-head",children:[jsxs8("div",{children:[jsx8("strong",{children:who}),jsxs8("span",{children:[when2(row.createdAt)," \xB7 ",where]})]}),jsx8("span",{className:`chip band-feedback-status ${STATUS_CHIP[row.status]}`,children:STATUS_LABEL[row.status]}),row.reply!==null&&jsx8("span",{className:"chip",children:"\u5DF2\u56DE\u590D"}),jsx8("button",{className:"btn ghost",type:"button","aria-expanded":open,"aria-label":open?"\u6536\u8D77":"\u5C55\u5F00",onClick:toggle,children:open?"\u6536\u8D77":"\u5C55\u5F00"})]}),jsx8("p",{className:open?"band-feedback-body":"band-feedback-body clamp",children:row.body}),open&&jsxs8("div",{className:"band-feedback-detail",children:[jsxs8("p",{className:"band-feedback-meta",children:["\u9875\u9762"," ",jsx8("a",{className:"mono",href:row.pageUrl,target:"_blank",rel:"noreferrer",children:row.pageUrl})]}),jsxs8("div",{className:"band-feedback-actions",children:[row.status!=="seen"&&jsx8("button",{className:"btn",type:"button",disabled:busy,onClick:()=>void save({status:"seen"},"\u6CA1\u6539\u6210","\u5DF2\u6807\u4E3A\u5DF2\u770B"),children:"\u6807\u4E3A\u5DF2\u770B"}),row.status!=="resolved"&&jsx8("button",{className:"btn",type:"button",disabled:busy,onClick:()=>void save({status:"resolved"},"\u6CA1\u6539\u6210","\u5DF2\u6807\u4E3A\u5DF2\u89E3\u51B3"),children:"\u6807\u4E3A\u5DF2\u89E3\u51B3"}),row.status!=="new"&&jsx8("button",{className:"btn ghost",type:"button",disabled:busy,onClick:()=>void save({status:"new"},"\u6CA1\u6539\u6210","\u5DF2\u6539\u56DE\u65B0\u53CD\u9988"),children:"\u6539\u56DE\u65B0\u53CD\u9988"})]}),row.reply!==null&&jsxs8("p",{className:"band-feedback-sent",children:["\u5DF2\u56DE\u590D",row.repliedBy?`\uFF08${row.repliedBy}\uFF09`:"","\uFF1A",row.reply]}),jsxs8("label",{children:[jsx8("span",{children:"\u7BA1\u7406\u5458\u5907\u6CE8\uFF08\u53EA\u6709\u7BA1\u7406\u5458\u770B\u5F97\u5230\uFF09"}),jsx8("textarea",{className:"field",rows:2,"aria-label":"\u7BA1\u7406\u5458\u5907\u6CE8",value:note,onChange:e=>setNote(e.target.value),disabled:busy,"aria-invalid":noteLen>FEEDBACK_NOTE_MAX})]}),noteLen>FEEDBACK_NOTE_MAX&&jsxs8("p",{role:"alert",children:["\u5907\u6CE8\u6700\u591A ",FEEDBACK_NOTE_MAX," \u5B57\uFF0C\u73B0\u5728 ",noteLen," \u5B57\uFF0C\u8BF7\u5220\u77ED\u4E00\u4E9B\u518D\u5B58"]}),jsx8("button",{className:"btn",type:"button",disabled:busy||!noteChanged||noteLen>FEEDBACK_NOTE_MAX,onClick:()=>void save({adminNote:note.trim()===""?null:note},"\u5907\u6CE8\u6CA1\u5B58\u4E0A","\u5907\u6CE8\u5DF2\u5B58"),children:"\u4FDD\u5B58\u5907\u6CE8"}),jsxs8("label",{children:[jsx8("span",{children:"\u56DE\u590D\u7ED9\u63D0\u4EA4\u4EBA"}),jsx8("textarea",{className:"field",rows:3,"aria-label":"\u56DE\u590D\u7ED9\u63D0\u4EA4\u4EBA",value:reply,placeholder:row.reply!==null?"\u518D\u56DE\u590D\u4F1A\u8986\u76D6\u4E0A\u4E00\u6761":"\u5199\u7ED9\u63D0\u4EA4\u4EBA\u7684\u8BDD\uFF0C\u5BF9\u65B9\u4F1A\u5728\u300C\u6211\u7684\u53CD\u9988\u300D\u91CC\u770B\u5230",onChange:e=>setReply(e.target.value),disabled:busy,"aria-invalid":replyLen>FEEDBACK_REPLY_MAX})]}),replyLen>FEEDBACK_REPLY_MAX&&jsxs8("p",{role:"alert",children:["\u56DE\u590D\u6700\u591A ",FEEDBACK_REPLY_MAX," \u5B57\uFF0C\u73B0\u5728 ",replyLen," \u5B57\uFF0C\u8BF7\u5220\u77ED\u4E00\u4E9B\u518D\u53D1"]}),jsx8("button",{className:"btn primary",type:"button",disabled:busy||replyLen===0||replyLen>FEEDBACK_REPLY_MAX,onClick:()=>void save({reply},"\u6CA1\u53D1\u51FA\u53BB","\u5DF2\u56DE\u590D",()=>setReply("")),children:"\u53D1\u9001\u56DE\u590D"}),notice&&jsx8("output",{className:"band-feedback-notice",children:notice}),error&&jsx8("p",{role:"alert",children:error})]})]})}var SELF6="@kanyun-ai-infra/band-settings";var PAGE2=`${SELF6}/models`;var NEW_ITEM="new";var PRIMARY="\u6DFB\u52A0\u6A21\u578B\u914D\u7F6E";var DESC3="Rondo \u5DE5\u4F5C\u65F6\u7528\u7684\u6A21\u578B\u3002key \u4FDD\u5B58\u540E\u4E0D\u518D\u663E\u793A\uFF0C\u53EA\u7559\u672B 4 \u4F4D\u3002";var CAPABILITY_LABELS={text:"\u6587\u672C",image:"\u51FA\u56FE",tts:"\u914D\u97F3",asr:"\u8BC6\u522B",video:"\u89C6\u9891",music:"\u914D\u4E50"};var isBlockedPreset=preset=>preset?.id==="anthropic";var CUSTOM_LABEL="\u81EA\u5B9A\u4E49";var CUSTOM_CARD_LABEL="\u81EA\u5B9A\u4E49\u670D\u52A1\u5546";var DEFAULT_PRESET_ID="modelgate";var MODELGATE_PREFERRED_MODEL="model-deepseek-v4.1-flash";var LIST_DEBOUNCE_MS=600;var latencyText=ms=>`${(Math.max(ms,100)/1e3).toFixed(1)} s`;var revokeHint=(preset,provider)=>preset===CUSTOM_MODEL_PRESET_ID?"\u8BF7\u540C\u65F6\u5230\u670D\u52A1\u5546\u90A3\u8FB9\u4F5C\u5E9F\u5B83\u3002":`\u8BF7\u540C\u65F6\u5230 ${provider} \u90A3\u91CC\u4F5C\u5E9F\u5B83\u3002`;var modelsPage=reactMount4((ctx,{owner})=>jsx9(MyModels,{ctx,...owner.params.workshop?{backTo:owner.params.workshop}:{}}));function MyModels({ctx,backTo,onUnavailable}){const route=useRoute2(ctx);const api=ctx.app.data.write?.modelCredentials;const[data,setData]=useState6(void 0);const[readError,setReadError]=useState6(null);const[forbidden,setForbidden]=useState6(false);const[reload,setReload]=useState6(0);const fresh=useFreshRow("models");useStaleProbeReload(()=>setReload(n=>n+1));const[notice,flashNotice]=useCrossPageNotice("models");const item=route.params.item;useEffect6(()=>{if(!api)return;let live=true;setReadError(null);setForbidden(false);api.list().then(r=>{if(live)setData(r)},e=>{if(!live)return;setForbidden(isForbidden5(e));setReadError(failedBecause4(e,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,reload]);const[rowError,setRowError]=useState6("");const[rowBusy,setRowBusy]=useState6(null);const[editing,setEditing]=useState6(null);const setDefault=async c=>{if(rowBusy!==null||!api)return;setRowBusy(c.id);setRowError("");try{await api.setDefault(c.id);flashNotice(`\u300C${c.name}\u300D\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4`);setReload(n=>n+1)}catch(e){setRowError(`\u6CA1\u8BBE\u6210\u9ED8\u8BA4\uFF1A${failedBecause4(e,"\u518D\u70B9\u4E00\u6B21\u300C\u8BBE\u4E3A\u9ED8\u8BA4\u300D")}`)}finally{setRowBusy(null)}};const prov=data?.provision;const provisionedIds=new Set(prov&&(prov.status==="active"||prov.status==="rejected")?prov.credentialIds:[]);const provisionApi=api?.provision?.bind(api);const reprovision=async()=>{if(rowBusy!==null||!provisionApi)return;setRowBusy("provision");setRowError("");try{const result=await provisionApi();if(result.kind==="active"){flashNotice("\u5DF2\u7531 Band \u5F00\u901A ModelGate")}else{setRowError("\u6CA1\u5F00\u901A\uFF1A\u8FD9\u4EFD\u914D\u7F6E\u5DF2\u88AB\u5220\u9664\u6216\u66FF\u6362\u3002\u8981\u518D\u7528\uFF0C\u8BF7\u70B9\u300C\u7531 Band \u5F00\u901A\u300D\u3002")}setReload(n=>n+1)}catch(e){setRowError(`\u6CA1\u5F00\u901A\uFF1A${failedBecause4(e,"\u8FC7\u4E00\u4F1A\u518D\u70B9\u4E00\u6B21\uFF0C\u6216\u8005\u81EA\u5DF1\u586B\u4E00\u628A key")}`)}finally{setRowBusy(null)}};const go=next=>ctx.app.navigate({page:backTo?MODELS_FOR_PAGE:PAGE2,...next||backTo?{params:{...backTo?{workshop:backTo}:{},...next?{item:next}:{}}}:{}});const resume=()=>backTo?ctx.app.navigate({page:RESUME_PAGE,params:{workshop:backTo}}):void 0;const unavailable=!api||data===null;useEffect6(()=>{if(unavailable)onUnavailable?.()},[unavailable,onUnavailable]);if(unavailable)return jsxs9(PersonalFrame,{ctx,current:"models",children:[jsx9(PageHead,{title:"\u6A21\u578B\u914D\u7F6E",desc:DESC3}),jsx9(NoAccess,{title:"\u8FD9\u4E2A\u73AF\u5883\u8FD8\u6CA1\u5F00\u901A\u6A21\u578B\u914D\u7F6E",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u5F00\u901A\u8981\u90E8\u7F72\u7BA1\u7406\u5458\u5728\u670D\u52A1\u7AEF\u6253\u5F00\u3002\u5F00\u901A\u4E4B\u524D\uFF0C\u9879\u76EE\u7528\u5DE5\u574A\u914D\u597D\u7684\u6A21\u578B\u3002"})]});if(forbidden){return jsxs9(PersonalFrame,{ctx,current:"models",children:[jsx9(PageHead,{title:"\u6A21\u578B\u914D\u7F6E",desc:DESC3}),jsx9(NoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u6A21\u578B\u914D\u7F6E",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u6A21\u578B\u914D\u7F6E\u6309\u767B\u5F55\u4EBA\u5F52\u5C5E\uFF0C\u53EA\u6709\u672C\u4EBA\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u3002"})]})}if(readError!==null){return jsxs9(PersonalFrame,{ctx,current:"models",children:[jsx9(PageHead,{title:"\u6A21\u578B\u914D\u7F6E",desc:DESC3}),jsxs9(ReadError,{retry:()=>setReload(n=>n+1),children:["\u6A21\u578B\u914D\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]})]})}if(data===void 0){return jsxs9(PersonalFrame,{ctx,current:"models",children:[jsx9(PageHead,{title:"\u6A21\u578B\u914D\u7F6E",desc:DESC3,action:jsx9("button",{type:"button",className:"btn primary",disabled:true,children:PRIMARY})}),jsx9(Loading,{text:"\u6B63\u5728\u8BFB\u53D6\u6A21\u578B\u914D\u7F6E\u2026"})]})}const presets=data.presets;const rows=data.credentials;const canEditModels=typeof api.updateModelCredentialModels==="function";const presetOf=id=>presets.find(p=>p.id===id);const providerOf=id=>id===CUSTOM_MODEL_PRESET_ID?CUSTOM_LABEL:presetOf(id)?.label??id;const current=item&&item!==NEW_ITEM?rows.find(c=>c.id===item):void 0;if(item===NEW_ITEM){return jsx9(PersonalFrame,{ctx,current:"models",back:"list",children:jsx9(ModelForm,{ctx,api,presets,backTo,onCancel:()=>go(),onSaved:(c,latencyMs)=>{setReload(n=>n+1);if(c.isDefault&&backTo){resume();return}const took=latencyMs===void 0?"":` \xB7 \u8017\u65F6 ${latencyText(latencyMs)}`;markNotice("models",c.preset===CUSTOM_MODEL_PRESET_ID?`\u5DF2\u4FDD\u5B58\uFF0C\u81EA\u5B9A\u4E49\u9A8C\u8BC1\u901A\u8FC7${took}`:`\u5DF2\u4FDD\u5B58\uFF0C${providerOf(c.preset)} \u9A8C\u8BC1\u901A\u8FC7${took}`);markFresh("models",c.id);go()}})})}if(current){return jsxs9(PersonalFrame,{ctx,current:"models",back:"list",children:[jsx9(Back,{ctx,label:"\u6A21\u578B\u914D\u7F6E",page:backTo?MODELS_FOR_PAGE:PAGE2,href:listHref(backTo),...backTo?{params:{workshop:backTo}}:{}}),jsx9(ModelDetail,{api,credential:current,othersLeft:rows.length>1,preset:presetOf(current.preset),provider:providerOf(current.preset),provisioned:provisionedIds.has(current.id),modelGateAvailable:presets.some(p=>p.id==="modelgate"),canEditModels,onChanged:()=>setReload(n=>n+1),onDeleted:n=>{markNotice("models",n>0?`\u5DF2\u5220\u9664\u300C${current.name}\u300D\uFF0C\u5DF2\u6E05\u7A7A ${n} \u4E2A agent \u7684\u9009\u7528`:`\u5DF2\u5220\u9664\u300C${current.name}\u300D`);setReload(x=>x+1);go()}}),jsx9(Notice,{text:notice})]})}const add=jsx9("button",{type:"button",className:"btn primary",onClick:()=>go(NEW_ITEM),children:PRIMARY});return jsxs9(PersonalFrame,{ctx,current:"models",children:[jsx9(PageHead,{title:"\u6A21\u578B\u914D\u7F6E",desc:DESC3,action:rows.length>0?jsx9("button",{type:"button",className:"btn primary",onClick:()=>go(NEW_ITEM),children:PRIMARY}):void 0}),rows.length===0?jsx9(Empty,{action:add,children:"\u4F60\u8FD8\u6CA1\u6709\u6A21\u578B\u914D\u7F6E\u3002\u6DFB\u52A0\u4E00\u4EFD\u4EE5\u540E\uFF0C\u5728\u8981\u7528\u6210\u5458\u81EA\u5DF1\u6A21\u578B\u7684\u5DE5\u574A\u91CC\u5EFA\u9879\u76EE\u65F6\u624D\u7528\u5F97\u4E0A\u3002"}):jsx9(Rows,{label:"\u6211\u7684\u6A21\u578B\u914D\u7F6E",children:rows.map(c=>{const open=editing===c.id&&canEditModels;return jsx9(Row,{title:c.name,tags:jsxs9(Fragment7,{children:[c.isDefault&&jsx9("span",{className:"tag band-sf-default",children:"\u9ED8\u8BA4"}),provisionedIds.has(c.id)&&jsx9("span",{className:"tag",children:"\u7531 Band \u4E3A\u4F60\u5F00\u901A"}),provisionedIds.has(c.id)&&prov?.status==="rejected"&&jsx9("span",{className:"tag",children:"\u4E0A\u6E38\u62D2\u4E86"}),c.id===fresh&&jsx9("span",{className:"chip plain s-approved",children:"\u5DF2\u9A8C\u8BC1"}),c.unpriced&&jsx9("span",{className:"chip plain s-failed",title:UNPRICED_NOTE,children:"\u5E73\u53F0\u65E0\u4EF7\u76EE"})]}),meta:metaOf(c,providerOf(c.preset)),...open?{}:{href:itemHref(backTo,c.id),onOpen:()=>go(c.id)},isNew:c.id===fresh,extra:open?jsx9(EditModelsForm,{api,credential:c,preset:presetOf(c.preset),provider:providerOf(c.preset),modelGateAvailable:presets.some(p=>p.id===DEFAULT_PRESET_ID),onCancel:()=>setEditing(null),onSaved:(next,latencyMs)=>{setEditing(null);flashNotice(`\u300C${next.name}\u300D\u6539\u7528 ${next.model}\uFF0C\u9A8C\u8BC1\u901A\u8FC7${latencyMs===void 0?"":` \xB7 \u8017\u65F6 ${latencyText(latencyMs)}`}`);setReload(n=>n+1)}}):void 0,actions:open?void 0:jsxs9(Fragment7,{children:[canEditModels&&jsx9("button",{type:"button",className:"btn ghost sm band-sf-act-edit",disabled:rowBusy!==null,onClick:()=>setEditing(c.id),children:"\u4FEE\u6539\u6A21\u578B"}),c.isDefault?void 0:jsx9("button",{type:"button",className:"btn ghost sm band-sf-act-def",disabled:rowBusy!==null,onClick:()=>void setDefault(c),children:"\u8BBE\u4E3A\u9ED8\u8BA4"}),provisionedIds.has(c.id)&&prov?.status==="rejected"&&provisionApi&&jsx9("button",{type:"button",className:"btn ghost sm band-sf-act-re",disabled:rowBusy!==null,onClick:()=>void reprovision(),children:"\u91CD\u65B0\u5F00\u901A"})]})},c.id)})}),prov?.status==="released"&&provisionApi&&jsxs9("p",{className:"band-sf-muted",children:["\u4F60\u5220\u9664\u6216\u66FF\u6362\u8FC7 Band \u4E3A\u4F60\u5F00\u901A\u7684 ModelGate\uFF0C\u4E4B\u540E\u4E0D\u518D\u81EA\u52A8\u5F00\u901A\u3002\u60F3\u518D\u7528\uFF0C\u70B9"," ",jsx9("button",{type:"button",className:"btn ghost sm",disabled:rowBusy!==null,onClick:()=>void reprovision(),children:"\u7531 Band \u5F00\u901A"}),"\u3002"]}),rowError&&jsx9("p",{role:"alert",className:"band-sf-err",children:rowError}),jsx9(Notice,{text:notice})]})}var base=backTo=>backTo?`/settings/models/for/${encodeURIComponent(backTo)}`:"/settings/models";var listHref=base;var itemHref=(backTo,id)=>`${base(backTo)}/${encodeURIComponent(id)}`;var UNPRICED_NOTE="\u5E73\u53F0\u62D2\u7EDD\u6D3E\u53D1\u8FC7\u8FD9\u4EFD\u914D\u7F6E\u91CC\u7684\u6A21\u578B\uFF1A\u5E73\u53F0\u4EF7\u76EE\u8868\u91CC\u6CA1\u6709\u5B83\uFF0CRondo \u7528\u4E0D\u4E86\u3002\u300C\u9A8C\u8BC1\u901A\u8FC7\u300D\u53EA\u8BF4\u660E\u7AEF\u70B9\u80FD\u901A\u3002\u8BF7\u6539\u7528\u6709\u4EF7\u76EE\u7684\u6A21\u578B\uFF1B\u5E73\u53F0\u8865\u4E0A\u4EF7\u76EE\u540E\uFF0C\u4E0B\u4E00\u6B21\u6D3E\u53D1\u6210\u529F\u4F1A\u81EA\u52A8\u6E05\u9664\u8FD9\u6761\u63D0\u793A\u3002";function metaOf(c,provider){const used=projectsOf(c);return[jsxs9(Fragment6,{children:[provider," \xB7 ",jsx9("code",{children:c.model})]},"model"),...c.last4!==null?[`\u672B 4 \u4F4D \u2022\u2022\u2022\u2022${c.last4}`]:[],verifiedText(c),used.length>0?`${used.length} \u4E2A\u9879\u76EE\u5728\u7528`:"\u8FD8\u6CA1\u6709\u9879\u76EE\u5728\u7528"]}function verifiedText(c){const ms=c.lastVerifiedMs;return`${shortTime(c.lastVerifiedAt)} \u9A8C\u8BC1\u901A\u8FC7${typeof ms==="number"?` \xB7 ${latencyText(ms)}`:""}`}function probeFailureText(outcome,provider,retry,hints={}){const name=hints.custom?"\u7AEF\u70B9":provider;const space=hints.custom?"":" ";switch(outcome){case"unauthorized":return`${name}${space}\u6CA1\u6709\u63A5\u53D7\u8FD9\u4E2A key\u3002\u68C0\u67E5 key \u662F\u5426\u5B8C\u6574\u3001\u6709\u6CA1\u6709\u88AB\u4F5C\u5E9F\uFF0C\u6539\u597D\u540E\u518D\u70B9\u300C${retry}\u300D\u3002${hints.unauthorizedHint??""}`;case"forbidden":return hints.blocked?`${name}${space}\u62D2\u7EDD\u4E86\u8BF7\u6C42\uFF1A\u53EF\u80FD\u662F\u7F51\u7EDC\u6216\u5730\u533A\u9650\u5236\uFF0C\u4E5F\u53EF\u80FD\u662F\u8FD9\u628A key \u6CA1\u6709\u8FD9\u4E2A\u6A21\u578B\u7684\u6743\u9650\u3002\u8FC7\u4E00\u4F1A\u513F\u518D\u70B9\u300C${retry}\u300D\uFF1B\u4E00\u76F4\u8FD9\u6837\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u68C0\u67E5\u51FA\u7F51\u6216\u8FD9\u628A key \u7684\u6743\u9650\u3002${hints.modelGateAvailable?"\u4E5F\u53EF\u4EE5\u6539\u7528 ModelGate\u3002":""}`:`${name}${space}\u8BA4\u51FA\u4E86\u8FD9\u4E2A key\uFF0C\u4F46\u5B83\u6CA1\u6709\u8C03\u7528\u6743\u9650\u3002\u5230\u670D\u52A1\u5546\u90A3\u8FB9\u786E\u8BA4\u8FD9\u4E2A key \u7684\u6743\u9650\uFF0C\u6539\u597D\u540E\u518D\u70B9\u300C${retry}\u300D\u3002`;case"model_unavailable":return`${hints.custom?"\u7AEF\u70B9\u8BF4\u8FD9\u628A":`${provider} \u8BF4\u8FD9\u4E2A`} key \u4E0D\u80FD\u7528\u8FD9\u4E2A\u6A21\u578B\u3002\u5230\u670D\u52A1\u5546\u90A3\u8FB9\u786E\u8BA4\u8FD9\u4E2A key \u6709\u6CA1\u6709\u5F00\u901A\u5B83\u3001\u6A21\u578B\u540D\u6709\u6CA1\u6709\u5199\u9519\uFF0C\u6539\u597D\u540E\u518D\u70B9\u300C${retry}\u300D\u3002`;case"unreachable":return hints.custom?`\u8FDE\u4E0D\u4E0A\u7AEF\u70B9\uFF0C\u6216\u5B83 10 \u79D2\u5185\u6CA1\u6709\u56DE\u5E94\uFF0C\u6216\u56DE\u4E86\u610F\u6599\u4E4B\u5916\u7684\u72B6\u6001\uFF08\u7AEF\u70B9\u89E3\u6790\u5230\u5185\u7F51\u6216\u672C\u673A\u5730\u5740\u4E5F\u4F1A\u88AB\u62E6\u4E0B\uFF09\u3002\u8FC7\u4E00\u4F1A\u513F\u518D\u70B9\u300C${retry}\u300D\u3002`:`\u8FDE\u4E0D\u4E0A${space}${name}\uFF0C\u6216\u5B83 10 \u79D2\u5185\u6CA1\u6709\u56DE\u5E94\uFF0C\u6216\u56DE\u4E86\u610F\u6599\u4E4B\u5916\u7684\u72B6\u6001\u3002\u8FC7\u4E00\u4F1A\u513F\u518D\u70B9\u300C${retry}\u300D\u3002`}}function shortTime(iso){const d=new Date(iso);const p=n=>String(n).padStart(2,"0");return`${p(d.getMonth()+1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`}function projectsOf(c){return[...new Map(c.usedBy.map(u=>[u.projectId,u.projectName])).values()]}var staleProbes=0;var staleWatchers=new Set;function noteStaleProbe(){staleProbes+=1;for(const w of staleWatchers)w()}function takeStaleProbes(){const n=staleProbes;staleProbes=0;return n}function useStaleProbeReload(onStale){const fn=useRef4(onStale);fn.current=onStale;useEffect6(()=>{if(takeStaleProbes()>0)fn.current()},[]);useEffect6(()=>{const w=()=>{if(takeStaleProbes()>0)fn.current()};staleWatchers.add(w);return()=>{staleWatchers.delete(w)}},[])}function useProbe(){const token=useRef4(0);const[busy,setBusy]=useState6(false);const run=async go=>{const mine=++token.current;setBusy(true);try{const value=await go();if(mine!==token.current)return{done:false};return{done:true,value}}catch(e){if(mine!==token.current)return{done:false};throw e}finally{if(mine===token.current)setBusy(false)}};const abandon=()=>{token.current+=1;setBusy(false)};useEffect6(()=>()=>{token.current+=1},[]);return{busy,run,abandon}}function KeyField({id,provider,preset,value,onChange,busy,failure}){const errId=`${id}-err`;const label=preset?`${provider} \u7684 API key`:"API key";return jsxs9("div",{className:"band-sf-fld",children:[jsxs9("label",{htmlFor:id,children:[label," ",jsx9("span",{className:"band-sf-req",children:"\u5FC5\u586B"})]}),jsx9("input",{id,className:"field",type:"password",autoComplete:"off",maxLength:4096,value,disabled:busy,placeholder:preset?`\u7C98\u8D34 ${label}`:"\u7C98\u8D34\u670D\u52A1\u5546\u7ED9\u7684 API key","aria-invalid":failure?true:void 0,"aria-describedby":failure?errId:void 0,onChange:e=>onChange(e.target.value)}),failure?jsxs9("p",{className:"band-sf-err",id:errId,role:"alert",children:["\u6CA1\u4FDD\u5B58\uFF1A",failure]}):jsxs9("span",{className:"band-sf-hint",children:[preset?.keyHint??"key \u53EA\u7528\u6765\u9A8C\u8BC1\u548C\u8C03\u7528\uFF0C\u4FDD\u5B58\u540E\u4E0D\u518D\u663E\u793A\u3002",preset?.docsUrl?jsxs9(Fragment7,{children:[" ",jsxs9("a",{href:preset.docsUrl,target:"_blank",rel:"noreferrer",children:["\u5230 ",provider," \u521B\u5EFA key"]})]}):null]})]})}function FormActions({busy,canSubmit,label,provider,custom,missing,onCancel}){return jsxs9("div",{className:"band-sf-acts",children:[jsx9("button",{type:"submit",className:"btn primary",disabled:busy||!canSubmit,children:busy?"\u6B63\u5728\u9A8C\u8BC1\u2026":label}),jsx9("button",{type:"button",className:"btn ghost",onClick:onCancel,children:"\u53D6\u6D88"}),busy?jsxs9("output",{className:"band-sf-state","aria-live":"polite",children:[jsx9(Glyph,{kind:"working"}),custom?"\u6B63\u5728\u7528\u8FD9\u4EFD\u914D\u7F6E\u5411\u7AEF\u70B9\u53D1\u4E00\u6B21\u6700\u5C0F\u8BF7\u6C42\uFF0C\u901A\u8FC7\u624D\u4FDD\u5B58":`\u6B63\u5728\u7528\u8FD9\u4EFD\u914D\u7F6E\u5411 ${provider} \u53D1\u4E00\u6B21\u6700\u5C0F\u8BF7\u6C42\uFF0C\u901A\u8FC7\u624D\u4FDD\u5B58`]}):!canSubmit&&jsx9("span",{className:"band-sf-muted",children:missing})]})}var TIERS=["haiku","sonnet","opus"];var TIER_LABELS={haiku:"Haiku",sonnet:"Sonnet",opus:"Opus"};function presetTier(preset,t){const d=preset?.defaultModels;return d&&d[t]!==d.model?d[t]:void 0}var presetSplits=preset=>TIERS.some(t=>presetTier(preset,t)!==void 0);function tierValues(main,edits,preset){const pick=t=>(edits[t]??presetTier(preset,t)??main).trim()||main;return{haiku:pick("haiku"),sonnet:pick("sonnet"),opus:pick("opus")}}function modelsInput(main,split,edits,preset){const model=main.trim();return split?{model,...tierValues(model,edits,preset)}:{model}}var NO_MODELS=[];function useModelList(api,preset,key,endpoint,authScheme){const[state,setState]=useState6({status:"idle"});const custom=preset===CUSTOM_MODEL_PRESET_ID;useEffect6(()=>{setState({status:"idle"});if(typeof api.listProviderModels!=="function")return;if(key.trim()===""||custom&&endpoint.trim()==="")return;let live=true;const timer=setTimeout(()=>{setState({status:"loading"});api.listProviderModels?.({preset,key,...custom?{endpoint:endpoint.trim(),...authScheme!=="bearer"?{authScheme}:{}}:{}}).then(r=>{if(live)setState(listStateOf(r))},e=>{if(live)setState({status:"failed",reason:failedBecause4(e,"\u7A0D\u540E\u518D\u586B\u4E00\u6B21 key")})})},LIST_DEBOUNCE_MS);return()=>{live=false;clearTimeout(timer)}},[api,preset,key,endpoint,authScheme,custom]);return state}function listStateOf(r){if(r.outcome==="ok"&&r.models.length>0)return{status:"ok",models:r.models};return{status:"failed",reason:r.outcome==="ok"?"\u670D\u52A1\u5546\u56DE\u7684\u6A21\u578B\u5217\u8868\u662F\u7A7A\u7684":r.reason}}function useCredentialModelList(api,id){const[state,setState]=useState6({status:"idle"});useEffect6(()=>{const lister=api.listCredentialModels;if(typeof lister!=="function")return;let live=true;setState({status:"loading"});lister.call(api,id).then(r=>{if(live)setState(listStateOf(r))},e=>{if(live)setState({status:"failed",reason:failedBecause4(e,"\u7A0D\u540E\u518D\u6253\u5F00\u4E00\u6B21")})});return()=>{live=false}},[api,id]);return state}function listFailureText(reason){const r=reason.replace(/[。.]+$/,"");return`${r.includes("\u6A21\u578B\u5217\u8868")?r:`\u6CA1\u53D6\u5230\u6A21\u578B\u5217\u8868\uFF1A${r}`}\u3002\u53EF\u4EE5\u76F4\u63A5\u624B\u586B\u6A21\u578B\u540D\u3002`}var MENU_MAX=220;var MENU_GAP=4;var MENU_EDGE=8;function placeMenu(input,contentHeight,viewportHeight,viewportTop=0){const need=Math.min(MENU_MAX,contentHeight);const below=Math.max(0,viewportHeight-input.bottom-MENU_GAP-MENU_EDGE);const above=Math.max(0,input.top-viewportTop-MENU_GAP-MENU_EDGE);if(below>=need)return{up:false,max:MENU_MAX};if(above>=need)return{up:true,max:MENU_MAX};return above>below?{up:true,max:Math.min(MENU_MAX,above)}:{up:false,max:Math.min(MENU_MAX,below)}}function ModelCombo({id,label,value,onChange,models,busy,listName,autoOpen=false,placeholder,failure="",errId}){const listId=`${id}-list`;const[open,setOpen]=useState6(false);const[active,setActive]=useState6(-1);const[typed,setTyped]=useState6(false);const menuRef=useRef4(null);const inputRef=useRef4(null);const[place,setPlace]=useState6({up:false,max:MENU_MAX});useEffect6(()=>{setActive(-1);setTyped(false);setOpen(autoOpen&&models.length>0)},[models,autoOpen]);useEffect6(()=>{if(!open)return;const onFocus=e=>{if(e.target!==inputRef.current)setOpen(false)};document.addEventListener("focusin",onFocus);return()=>document.removeEventListener("focusin",onFocus)},[open]);const v=value.trim();const q=v.toLowerCase();const shown=!typed||v===""||models.includes(v)?models:models.filter(m=>m.toLowerCase().includes(q));const expanded=open&&shown.length>0&&!busy;useLayoutEffect(()=>{if(!expanded)return;const menu=menuRef.current;const input=inputRef.current;if(!menu||!input)return;const panel=input.closest(".band-sf-scroll");const update=()=>{const bounds=panel?.getBoundingClientRect();const next=placeMenu(input.getBoundingClientRect(),menu.scrollHeight,Math.min(window.innerHeight,bounds?.bottom??window.innerHeight),Math.max(0,bounds?.top??0));setPlace(p=>p.up===next.up&&p.max===next.max?p:next)};update();window.addEventListener("resize",update);panel?.addEventListener("scroll",update);return()=>{window.removeEventListener("resize",update);panel?.removeEventListener("scroll",update)}},[expanded,shown.length]);useEffect6(()=>{const menu=menuRef.current;const el=active>=0?menu?.children[active]:void 0;if(!menu||!(el instanceof HTMLElement))return;if(el.offsetTop<menu.scrollTop)menu.scrollTop=el.offsetTop;else if(el.offsetTop+el.offsetHeight>menu.scrollTop+menu.clientHeight)menu.scrollTop=el.offsetTop+el.offsetHeight-menu.clientHeight},[active]);const choose=m=>{onChange(m);setOpen(false);setTyped(false);setActive(-1)};return jsxs9(Fragment7,{children:[jsx9("label",{htmlFor:id,children:label}),jsxs9("div",{className:"band-sf-combo",children:[jsx9("input",{ref:inputRef,id,className:"field band-sf-mono",autoComplete:"off",spellCheck:false,maxLength:CUSTOM_MODEL_NAME_MAX,value,disabled:busy,placeholder,role:"combobox","aria-autocomplete":"list","aria-expanded":expanded,"aria-controls":listId,...expanded&&active>=0?{"aria-activedescendant":`${listId}-${active}`}:{},"aria-invalid":failure?true:void 0,"aria-describedby":failure&&errId?errId:void 0,onFocus:()=>{setTyped(false);if(models.length>0)setOpen(true)},onChange:e=>{onChange(e.target.value);setTyped(true);if(models.length>0)setOpen(true);setActive(-1)},onBlur:()=>{setOpen(false);setTyped(false)},onKeyDown:withImeGuard(e=>{if(models.length===0)return;if(e.key==="ArrowDown"||e.key==="ArrowUp"){e.preventDefault();setOpen(true);if(shown.length===0)return;const step=e.key==="ArrowDown"?1:-1;setActive(i=>(i+step+shown.length)%shown.length)}else if(e.key==="Enter"&&expanded&&active>=0){e.preventDefault();const m=shown[active];if(m!==void 0)choose(m)}else if(e.key==="Escape"&&expanded){e.preventDefault();setOpen(false)}})}),expanded&&jsx9("div",{ref:menuRef,id:listId,className:place.up?"band-sf-menu is-up":"band-sf-menu",style:{maxHeight:place.max},role:"listbox","aria-label":listName,onMouseDown:e=>{e.preventDefault();if(e.target===e.currentTarget)setOpen(false)},children:shown.map((m,i)=>jsxs9("button",{type:"button",id:`${listId}-${i}`,role:"option",tabIndex:-1,"aria-selected":i===active,onMouseEnter:()=>setActive(i),onClick:()=>choose(m),children:[jsx9("span",{className:"band-sf-mono",children:m}),m===v&&jsx9("small",{children:"\u5F53\u524D"})]},m))})]})]})}function ModelFields({id,main,onMain,required,presetDefault,split,onSplit,tiers,onTier,busy,hint,list,listName,failure}){const errId=`${id}-model-err`;const models=list.status==="ok"?list.models:NO_MODELS;return jsxs9(Fragment7,{children:[jsxs9("div",{className:"band-sf-fld",children:[jsx9(ModelCombo,{id:`${id}-model`,label:jsxs9(Fragment7,{children:["\u4E3B\u6A21\u578B"," ",jsx9("span",{className:"band-sf-req",children:required||!presetDefault?"\u5FC5\u586B":`\u7F3A\u7701 ${presetDefault}`})]}),value:main,onChange:onMain,models,busy,listName,autoOpen:true,...required?{placeholder:"\u7167\u670D\u52A1\u5546\u6587\u6863\u586B\uFF0C\u4F8B\u5982 deepseek-flash"}:{},failure,errId}),failure?jsx9("p",{className:"band-sf-err",id:errId,role:"alert",children:failure}):list.status==="loading"?jsxs9("output",{className:"band-sf-state","aria-live":"polite",children:[jsx9(Glyph,{kind:"working"}),"\u6B63\u5728\u53D6\u6A21\u578B\u5217\u8868\u2026"]}):list.status==="failed"?jsx9("p",{className:"band-sf-err",role:"alert",children:listFailureText(list.reason)}):jsx9("span",{className:"band-sf-hint",children:hint})]}),jsxs9("details",{className:"band-sf-tiers",open:split,onToggle:e=>onSplit(e.currentTarget.open),children:[jsx9("summary",{children:"Haiku / Sonnet / Opus \u5206\u5F00\u914D"}),jsx9("p",{className:"band-sf-hint",children:"Claude Code \u91CC Haiku\u3001Sonnet\u3001Opus \u4E09\u6863\u5404\u8C03\u7528\u7684\u6A21\u578B\u3002\u4E0D\u5206\u5F00\u65F6\u4E09\u6863\u90FD\u7528\u4E3B\u6A21\u578B\u3002"}),TIERS.map(t=>jsx9("div",{className:"band-sf-fld",children:jsx9(ModelCombo,{id:`${id}-${t}`,label:TIER_LABELS[t],value:tiers[t],onChange:v=>onTier(t,v),models,busy,listName:`${listName}\uFF08${TIER_LABELS[t]}\uFF09`})},t))]})]})}var AUTH_LABELS={bearer:"Authorization: Bearer\uFF08\u7F3A\u7701\uFF09",x_api_key:"x-api-key"};function saveBody(f){const custom=f.preset===CUSTOM_MODEL_PRESET_ID;return{preset:f.preset,key:f.key,...f.name.trim()?{name:f.name.trim()}:{},...custom?{endpoint:f.endpoint.trim()}:{},...custom&&f.authScheme!=="bearer"?{authScheme:f.authScheme}:{},...modelsInput(f.main,f.split,f.edits,f.tierPreset)}}function ModelForm({ctx,api,presets,backTo,onCancel,onSaved}){const initial=presets.find(p=>p.id===DEFAULT_PRESET_ID)?.id??presets[0]?.id??CUSTOM_MODEL_PRESET_ID;const presetById=pid=>pid===CUSTOM_MODEL_PRESET_ID?void 0:presets.find(p=>p.id===pid);const[picked,setPicked]=useState6(initial);const[name,setName]=useState6("");const[key,setKey]=useState6("");const[endpoint,setEndpoint]=useState6("");const[authScheme,setAuthScheme]=useState6("bearer");const[main,setMain]=useState6(presetById(initial)?.defaultModels.model??"");const[split,setSplit]=useState6(presetSplits(presetById(initial)));const[edits,setEdits]=useState6({});const[touched,setTouched]=useState6(false);const[failure,setFailure]=useState6("");const[modelFailure,setModelFailure]=useState6("");const[formError,setFormError]=useState6("");const probe=useProbe();const id=useId3();const isCustom=picked===CUSTOM_MODEL_PRESET_ID;const chosen=presetById(picked);const label="\u4FDD\u5B58\u5E76\u9A8C\u8BC1";const list=useModelList(api,picked,key,isCustom?endpoint:"",authScheme);const hasLister=typeof api.listProviderModels==="function";const listed=list.status==="ok"?list.models:NO_MODELS;useEffect6(()=>{if(touched||picked!==DEFAULT_PRESET_ID||!listed.includes(MODELGATE_PREFERRED_MODEL))return;setMain(MODELGATE_PREFERRED_MODEL)},[listed,picked,touched]);const clearErrors=()=>{setFailure("");setModelFailure("");setFormError("")};const choose=next=>{if(next===picked)return;const p=presetById(next);setPicked(next);setKey("");setMain(p?.defaultModels.model??"");setSplit(presetSplits(p));setEdits({});setTouched(false);clearErrors()};const backToList=jsx9(Back,{ctx,label:"\u6A21\u578B\u914D\u7F6E",page:backTo?MODELS_FOR_PAGE:PAGE2,href:listHref(backTo),...backTo?{params:{workshop:backTo}}:{}});const provider=isCustom?CUSTOM_LABEL:chosen?.label??CUSTOM_LABEL;const others=chosen?chosen.capabilities.filter(c=>c!=="text"):[];const missing=key.trim()===""?"\u8FD8\u5DEE key \u6CA1\u586B":isCustom&&endpoint.trim()===""?"\u8FD8\u5DEE\u7AEF\u70B9\u6CA1\u586B":main.trim()===""?"\u8FD8\u5DEE\u4E3B\u6A21\u578B\u6CA1\u586B":"";const canSubmit=missing==="";const submit=async()=>{if(probe.busy||!canSubmit)return;clearErrors();try{const r=await probe.run(()=>api.save(saveBody({preset:picked,key,name,endpoint,authScheme,main,split,edits,tierPreset:chosen})));if(!r.done){noteStaleProbe();return}const res=r.value;if(res.outcome==="ok"){if(!res.credential)return;setKey("");onSaved(res.credential,res.latencyMs);return}const text=probeFailureText(res.outcome,provider,label,{unauthorizedHint:chosen?.unauthorizedHint??null,blocked:isCustom?false:isBlockedPreset(chosen),modelGateAvailable:presets.some(p=>p.id===DEFAULT_PRESET_ID),custom:isCustom});if(res.outcome==="model_unavailable")setModelFailure(`\u6CA1\u4FDD\u5B58\uFF1A${text}`);else setFailure(text)}catch(e){setFormError(failedBecause4(e,`\u518D\u70B9\u300C${label}\u300D`))}};const cards=[...presets.map(p=>({id:p.id,label:p.label,desc:p.description,line:p.capabilities.map(c=>CAPABILITY_LABELS[c]).join(" / ")})),{id:CUSTOM_MODEL_PRESET_ID,label:CUSTOM_CARD_LABEL,desc:"",line:"\u81EA\u586B\u7AEF\u70B9\u3001\u9274\u6743\u65B9\u5F0F\u548C\u6A21\u578B"}];return jsxs9(Fragment7,{children:[backToList,jsx9(PageHead,{title:"\u6DFB\u52A0\u6A21\u578B\u914D\u7F6E",desc:"\u4FDD\u5B58\u524D Band \u4F1A\u7528\u8FD9\u4EFD\u914D\u7F6E\u771F\u6253\u4E00\u6B21\u6700\u5C0F\u8BF7\u6C42\uFF0C\u901A\u8FC7\u624D\u5B58\u3002"}),jsxs9("form",{className:"band-sf-form","aria-label":"\u6DFB\u52A0\u6A21\u578B\u914D\u7F6E",onSubmit:e=>{e.preventDefault();void submit()},children:[jsxs9("div",{className:"band-sf-fld",children:[jsx9("span",{className:"band-sf-lbl",id:`${id}-pp`,children:"\u670D\u52A1\u5546"}),jsx9("div",{className:"band-sf-pcards",role:"radiogroup","aria-labelledby":`${id}-pp`,children:cards.map(c=>jsxs9("label",{className:c.id===picked?"band-sf-pc is-on":"band-sf-pc",children:[jsx9("input",{type:"radio",className:"sr-only",name:`${id}-preset`,value:c.id,checked:c.id===picked,disabled:probe.busy,onChange:()=>choose(c.id)}),jsx9("b",{children:c.label}),c.desc?jsx9("small",{children:c.desc}):null,jsx9("small",{children:c.line})]},c.id))}),jsx9("span",{className:"band-sf-hint",children:"\u53EA\u6536\u6309\u91CF\u8BA1\u8D39\u7684 API key\u3002Coding Plan \u8FD9\u7C7B\u5957\u9910\u7684 key \u5382\u5546\u53EA\u8BB8\u5728\u6307\u5B9A\u5DE5\u5177\u91CC\u7528\uFF0C\u4E0D\u80FD\u7528\u5728\u8FD9\u91CC\u3002"})]}),jsxs9("div",{className:"band-sf-fld",children:[jsxs9("label",{htmlFor:`${id}-name`,children:["\u540D\u79F0 ",jsx9("span",{className:"band-sf-req",children:"\u9009\u586B"})]}),jsx9("input",{id:`${id}-name`,className:"field",maxLength:100,value:name,disabled:probe.busy,placeholder:`\u7559\u7A7A\u5C31\u7528\uFF1A${provider}`,onChange:e=>setName(e.target.value)})]}),jsx9(KeyField,{id:`${id}-key`,provider,preset:chosen,value:key,onChange:v=>{setKey(v);clearErrors()},busy:probe.busy,failure}),isCustom?jsxs9(Fragment7,{children:[jsxs9("div",{className:"band-sf-fld",children:[jsxs9("label",{htmlFor:`${id}-endpoint`,children:["\u7AEF\u70B9 ",jsx9("span",{className:"band-sf-req",children:"\u5FC5\u586B"})]}),jsx9("input",{id:`${id}-endpoint`,className:"field band-sf-mono",type:"url",inputMode:"url",autoComplete:"off",spellCheck:false,maxLength:CUSTOM_MODEL_ENDPOINT_MAX,value:endpoint,disabled:probe.busy,placeholder:"https://api.example.com/anthropic",onChange:e=>{setEndpoint(e.target.value);clearErrors()}}),jsx9("span",{className:"band-sf-hint",children:"Anthropic \u517C\u5BB9\u63A5\u53E3\u7684\u57FA\u5730\u5740\uFF0C\u53EA\u6536 https \u7684\u516C\u7F51\u57DF\u540D\uFF08\u53EF\u4EE5\u5E26\u8DEF\u5F84\uFF09\u3002\u4FDD\u5B58\u65F6\u5411\u5B83\u52A0 /v1/messages \u53D1\u4E00\u6B21\u6700\u5C0F\u8BF7\u6C42\u3002"})]}),jsxs9("div",{className:"band-sf-fld",children:[jsx9("label",{htmlFor:`${id}-auth`,children:"\u9274\u6743\u65B9\u5F0F"}),jsx9("select",{id:`${id}-auth`,className:"field",value:authScheme,disabled:probe.busy,onChange:e=>{setAuthScheme(e.target.value==="x_api_key"?"x_api_key":"bearer");clearErrors()},children:Object.keys(AUTH_LABELS).map(a=>jsx9("option",{value:a,children:AUTH_LABELS[a]},a))}),jsx9("span",{className:"band-sf-hint",children:"\u7167\u670D\u52A1\u5546\u6587\u6863\u9009 key \u653E\u5728\u54EA\u4E2A\u8BF7\u6C42\u5934\u91CC\u3002"})]})]}):jsxs9("p",{className:"band-sf-muted",children:["\u7AEF\u70B9 ",jsx9("code",{children:chosen?.endpoint}),"\uFF0C\u7531\u90E8\u7F72\u5E26\u51FA\uFF0C\u4E0D\u80FD\u6539\u3002\u8981\u6362\u7AEF\u70B9\uFF0C\u8BF7\u9009\u300C",CUSTOM_CARD_LABEL,"\u300D\u3002"]}),others.length>0&&jsxs9("p",{className:"band-sf-hint",children:["\u8FD9\u5BB6\u8FD8\u80FD",others.map(c=>CAPABILITY_LABELS[c]).join("\u3001"),"\uFF0C\u5230",jsx9("a",{href:personalPath("net-credentials"),onClick:pageLink(ctx,personalPage("net-credentials")),children:"\u7F51\u7EDC\u51ED\u636E"}),"\u6DFB\u52A0\u3002"]}),jsx9(ModelFields,{id,main,onMain:v=>{setMain(v);setTouched(true);setModelFailure("")},required:isCustom,...chosen?{presetDefault:chosen.defaultModels.model}:{},split,onSplit:setSplit,tiers:tierValues(main,edits,chosen),onTier:(t,v)=>{setEdits(x=>({...x,[t]:v}));setTouched(true)},busy:probe.busy,hint:hasLister?isCustom?"\u586B\u597D\u7AEF\u70B9\u548C key \u540E\u81EA\u52A8\u53D6\u6A21\u578B\u5217\u8868\uFF0C\u4E0B\u62C9\u91CC\u9009\uFF1B\u4E5F\u53EF\u4EE5\u76F4\u63A5\u624B\u586B\u3002":"\u586B\u597D key \u540E\u81EA\u52A8\u53D6\u670D\u52A1\u5546\u7684\u6A21\u578B\u5217\u8868\uFF0C\u4E0B\u62C9\u91CC\u9009\uFF1B\u4E5F\u53EF\u4EE5\u76F4\u63A5\u624B\u586B\u3002":"\u624B\u586B\u6A21\u578B\u540D\uFF0C\u4FDD\u5B58\u65F6\u4F1A\u7528\u5B83\u771F\u6253\u4E00\u6B21\u3002",list,listName:`${provider} \u7684\u6A21\u578B`,failure:modelFailure}),formError&&jsx9("p",{role:"alert",className:"band-sf-err",children:formError}),jsx9(FormActions,{busy:probe.busy,canSubmit,label,provider,custom:isCustom,missing,onCancel:()=>leaveThen(()=>{if(probe.busy)probe.abandon();onCancel()})})]})]})}function EditModelsForm({api,credential,preset,provider,modelGateAvailable,onCancel,onSaved}){const isCustom=credential.preset===CUSTOM_MODEL_PRESET_ID;const tierPreset=isCustom?void 0:preset;const[main,setMain]=useState6(credential.model);const[split,setSplit]=useState6(presetSplits(tierPreset));const[edits,setEdits]=useState6({});const[failure,setFailure]=useState6("");const[formError,setFormError]=useState6("");const probe=useProbe();const id=useId3();const label="\u4FDD\u5B58\u5E76\u9A8C\u8BC1";const title=`\u4FEE\u6539\u300C${credential.name}\u300D\u7684\u6A21\u578B`;const list=useCredentialModelList(api,credential.id);const form=useRef4(null);useEffect6(()=>{form.current?.querySelector('input[role="combobox"]')?.focus()},[]);const submit=async()=>{const update=api.updateModelCredentialModels?.bind(api);if(probe.busy||main.trim()===""||!update)return;setFailure("");setFormError("");try{const r=await probe.run(()=>update(credential.id,modelsInput(main,split,edits,tierPreset)));if(!r.done){noteStaleProbe();return}if(r.value.outcome==="ok")onSaved(r.value.credential??credential,r.value.latencyMs);else setFailure(`\u6CA1\u4FDD\u5B58\uFF1A${probeFailureText(r.value.outcome,provider,label,{unauthorizedHint:preset?.unauthorizedHint??null,blocked:isCustom?false:isBlockedPreset(preset),modelGateAvailable,custom:isCustom})}`)}catch(e){setFormError(failedBecause4(e,`\u518D\u70B9\u300C${label}\u300D`))}};return jsxs9("form",{ref:form,className:"band-sf-form band-sf-inline","aria-label":title,onSubmit:e=>{e.preventDefault();void submit()},children:[jsx9("h3",{children:title}),jsx9("p",{className:"band-sf-muted",children:isCustom?"\u7AEF\u70B9\u4E0D\u53D8\uFF1B\u8981\u6362\u7AEF\u70B9\uFF0C\u8BF7\u53E6\u52A0\u4E00\u4EFD\u3002":`\u670D\u52A1\u5546\u4E0D\u53D8\uFF08${provider}\uFF09\uFF1B\u8981\u6362\u670D\u52A1\u5546\uFF0C\u8BF7\u53E6\u52A0\u4E00\u4EFD\u3002`}),jsx9(ModelFields,{id,main,onMain:v=>{setMain(v);setFailure("")},required:true,split,onSplit:setSplit,tiers:tierValues(main,edits,tierPreset),onTier:(t,v)=>setEdits(x=>({...x,[t]:v})),busy:probe.busy,hint:typeof api.listCredentialModels==="function"?"\u6539\u6A21\u578B\u4E0D\u7528\u91CD\u586B key\uFF1A\u7528\u5DF2\u5B58\u7684 key \u53D6\u6A21\u578B\u5217\u8868\uFF0C\u4E0B\u62C9\u91CC\u9009\u6216\u624B\u586B\uFF1B\u4FDD\u5B58\u65F6\u9A8C\u8BC1\u4E00\u6B21\u3002":"\u6539\u6A21\u578B\u4E0D\u7528\u91CD\u586B key\uFF1B\u586B\u5B8C\u4F1A\u7528\u5DF2\u5B58\u7684 key \u9A8C\u8BC1\u4E00\u6B21\u3002",list,listName:`${provider} \u7684\u6A21\u578B`,failure}),credential.usedBy.length>0&&jsx9("p",{className:"band-sf-banner",children:"\u4FDD\u5B58\u540E\uFF0C\u4E0B\u4E00\u4E2A\u56DE\u5408\u8D77\u7528\u65B0\u6A21\u578B\u3002"}),formError&&jsx9("p",{role:"alert",className:"band-sf-err",children:formError}),jsx9(FormActions,{busy:probe.busy,canSubmit:main.trim()!=="",label,provider,custom:isCustom,missing:"\u8FD8\u5DEE\u4E3B\u6A21\u578B\u6CA1\u586B",onCancel:()=>leaveThen(()=>{if(probe.busy)probe.abandon();onCancel()})})]})}function ModelDetail({api,credential,preset,provider,othersLeft,modelGateAvailable,provisioned=false,canEditModels=false,onChanged,onDeleted}){const[replacing,setReplacing]=useState6(false);const[editing,setEditing]=useState6(false);const[deleting,setDeleting]=useState6(false);const[busy,setBusy]=useState6(false);const[error,setError]=useState6("");const[saved,flashSaved]=useSavedNote();const used=projectsOf(credential);const setDefault=async()=>{if(busy)return;setBusy(true);setError("");try{await api.setDefault(credential.id);flashSaved("\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4");onChanged()}catch(e){setError(`\u6CA1\u8BBE\u6210\u9ED8\u8BA4\uFF1A${failedBecause4(e,"\u518D\u70B9\u4E00\u6B21\u300C\u8BBE\u4E3A\u9ED8\u8BA4\u300D")}`)}finally{setBusy(false)}};return jsxs9(Fragment7,{children:[jsx9(PageHead,{title:jsxs9(Fragment7,{children:[credential.name,credential.isDefault&&jsx9("span",{className:"tag band-sf-default",children:"\u9ED8\u8BA4"}),provisioned&&jsx9("span",{className:"tag",children:"\u7531 Band \u4E3A\u4F60\u5F00\u901A"})]}),desc:"\u53EA\u6709\u4F60\u770B\u5F97\u5230\u8FD9\u4EFD\u914D\u7F6E\u3002"}),saved&&jsx9(Saved,{text:saved}),jsx9(Facts,{items:[{key:"\u670D\u52A1\u5546",value:provider},{key:"\u7AEF\u70B9",value:jsx9("code",{children:credential.endpoint})},{key:"\u6A21\u578B",value:jsx9("code",{children:credential.model})},{key:"key",value:credential.last4!==null?`\u672B 4 \u4F4D \u2022\u2022\u2022\u2022${credential.last4}`:"\u2014"},{key:"\u9A8C\u8BC1",value:verifiedText(credential)},{key:"\u5728\u7528",value:used.length>0?`${used.length} \u4E2A\u9879\u76EE\u5728\u7528\uFF1A${used.join("\u3001")}`:"\u8FD8\u6CA1\u6709\u9879\u76EE\u5728\u7528"}]}),credential.unpriced&&jsxs9("p",{className:"band-sf-err band-sf-fail","data-reason":"model_unpriced",children:[jsx9("span",{className:"glyph failed","aria-hidden":"true"}),jsx9("span",{children:UNPRICED_NOTE})]}),canEditModels&&jsx9(Section,{title:"\u4FEE\u6539\u6A21\u578B",children:editing?jsx9(EditModelsForm,{api,credential,preset,provider,modelGateAvailable,onCancel:()=>setEditing(false),onSaved:(next,latencyMs)=>{setEditing(false);flashSaved(`\u6539\u7528 ${next.model}\uFF0C\u9A8C\u8BC1\u901A\u8FC7${latencyMs===void 0?"":` \xB7 \u8017\u65F6 ${latencyText(latencyMs)}`}`);onChanged()}}):jsxs9(Fragment7,{children:[jsx9("p",{children:"\u6362\u4E3B\u6A21\u578B\u548C\u4E09\u6863\uFF0Ckey \u548C\u7AEF\u70B9\u4E0D\u53D8\uFF1B\u4FDD\u5B58\u524D\u7528\u5DF2\u5B58\u7684 key \u5BF9\u65B0\u6A21\u578B\u771F\u6253\u4E00\u6B21\u3002"}),jsx9("div",{className:"band-sf-acts",children:jsx9("button",{type:"button",className:"btn",onClick:()=>setEditing(true),children:"\u4FEE\u6539\u6A21\u578B"})})]})}),jsx9(Section,{title:"\u66FF\u6362 key",children:replacing?jsx9(ReplaceForm,{api,credential,provider,preset,modelGateAvailable,onCancel:()=>setReplacing(false),onSaved:()=>{setReplacing(false);flashSaved("\u5DF2\u66FF\u6362\uFF0C\u9A8C\u8BC1\u901A\u8FC7");onChanged()}}):jsxs9(Fragment7,{children:[jsx9("p",{children:"\u6362\u4E00\u628A\u65B0\u7684 key\uFF0C\u670D\u52A1\u5546\u548C\u6A21\u578B\u4E0D\u53D8\u3002"}),jsx9("div",{className:"band-sf-acts",children:jsx9("button",{type:"button",className:"btn",onClick:()=>setReplacing(true),children:"\u66FF\u6362 key"})})]})}),!credential.isDefault&&jsxs9(Section,{title:"\u8BBE\u4E3A\u9ED8\u8BA4",children:[jsx9("p",{children:"\u4E4B\u540E\u5EFA\u9879\u76EE\u7528\u8FD9\u4E00\u4EFD\u3002\u5DF2\u7ECF\u5EFA\u597D\u7684\u9879\u76EE\u4E0D\u53D8\u3002"}),jsx9("div",{className:"band-sf-acts",children:jsx9("button",{type:"button",className:"btn",disabled:busy,onClick:()=>void setDefault(),children:"\u8BBE\u4E3A\u9ED8\u8BA4"})})]}),jsx9(DangerZone,{children:jsx9(DangerRow,{title:"\u5220\u9664\u8FD9\u4EFD\u914D\u7F6E",note:"\u5728\u7528\u5B83\u7684\u9879\u76EE\u6E05\u7A7A\u9009\u7528\uFF0C\u6B63\u5728\u8DD1\u7684\u56DE\u5408\u7ACB\u523B\u505C\u6B62\u3002key \u4E0D\u80FD\u6062\u590D\u3002",action:jsx9("button",{type:"button",className:"btn danger",onClick:()=>setDeleting(true),children:"\u5220\u9664"})})}),error&&jsx9("p",{role:"alert",className:"band-sf-err",children:error}),deleting&&jsx9(DeleteDialog,{api,credential,provider,othersLeft,provisioned,onClose:()=>setDeleting(false),onDeleted:n=>{setDeleting(false);onDeleted(n)}})]})}function ReplaceForm({api,credential,provider,preset,modelGateAvailable,onCancel,onSaved}){const[key,setKey]=useState6("");const[failure,setFailure]=useState6("");const[formError,setFormError]=useState6("");const probe=useProbe();const id=useId3();const label="\u66FF\u6362\u5E76\u9A8C\u8BC1";const isCustom=credential.preset===CUSTOM_MODEL_PRESET_ID;const submit=async()=>{if(probe.busy||key.trim()==="")return;setFailure("");setFormError("");try{const r=await probe.run(()=>api.replaceKey(credential.id,key));if(!r.done){noteStaleProbe();return}if(r.value.outcome==="ok"){setKey("");onSaved()}else setFailure(probeFailureText(r.value.outcome,provider,label,{unauthorizedHint:preset?.unauthorizedHint,blocked:isBlockedPreset(preset),modelGateAvailable,custom:isCustom}))}catch(e){setFormError(failedBecause4(e,`\u518D\u70B9\u300C${label}\u300D`))}};return jsxs9("form",{className:"band-sf-form","aria-label":"\u66FF\u6362 key",onSubmit:e=>{e.preventDefault();void submit()},children:[jsx9("p",{className:"band-sf-muted",children:isCustom?"\u7AEF\u70B9\u548C\u6A21\u578B\u4E0D\u53D8\uFF1B\u8981\u6362\u6A21\u578B\uFF0C\u7528\u300C\u4FEE\u6539\u6A21\u578B\u300D\uFF1B\u8981\u6362\u7AEF\u70B9\uFF0C\u8BF7\u53E6\u52A0\u4E00\u4EFD\u3002":`\u670D\u52A1\u5546\u4E0D\u53D8\uFF08${provider}\uFF09\uFF1B\u8981\u6362\u670D\u52A1\u5546\uFF0C\u8BF7\u53E6\u52A0\u4E00\u4EFD\u3002`}),jsx9(KeyField,{id:`${id}-key`,provider,preset,value:key,onChange:v=>{setKey(v);setFailure("");setFormError("")},busy:probe.busy,failure}),credential.usedBy.length>0&&jsxs9("p",{className:"band-sf-banner",children:["\u9A8C\u8BC1\u901A\u8FC7\u624D\u6362\u3002\u6362\u5B8C\u4E4B\u540E\u53D1\u8D77\u7684\u56DE\u5408\u7528\u65B0 key\uFF0C\u5305\u62EC\u540C\u9879\u76EE\u5176\u4ED6\u4EBA\u53D1\u8D77\u7684\u56DE\u5408\u3002\u8981\u662F\u65E7 key \u53EF\u80FD\u6CC4\u9732\uFF0C",revokeHint(credential.preset,provider)]}),formError&&jsx9("p",{role:"alert",className:"band-sf-err",children:formError}),jsx9(FormActions,{busy:probe.busy,canSubmit:key.trim()!=="",label,provider,custom:isCustom,missing:"\u8FD8\u5DEE key \u6CA1\u586B",onCancel:()=>leaveThen(()=>{if(probe.busy)probe.abandon();onCancel()})})]})}function Dialog2({title,children,onClose}){const ref=useRef4(null);const titleId=useId3();useEffect6(()=>{const el=ref.current;const opener=document.activeElement instanceof HTMLElement?document.activeElement:null;if(el&&!el.open){if(typeof el.showModal==="function")el.showModal();else el.setAttribute("open","")}return()=>{if(opener?.isConnected)opener.focus()}},[]);return jsxs9("dialog",{ref,className:"band-sf-dialog field-host","aria-labelledby":titleId,onCancel:e=>{e.preventDefault();onClose()},children:[jsx9("h2",{id:titleId,children:title}),children]})}function DeleteDialog({api,credential,provider,othersLeft,provisioned=false,onClose,onDeleted}){const[busy,setBusy]=useState6(false);const[error,setError]=useState6("");const used=projectsOf(credential);const label=used.length>0?"\u5220\u9664\u5E76\u505C\u6B62\u56DE\u5408":"\u5220\u9664";const go=async()=>{if(busy)return;setBusy(true);setError("");try{const{unselected}=await api.remove(credential.id);onDeleted(unselected.length)}catch(e){setError(`\u6CA1\u5220\u6389\uFF1A${failedBecause4(e,`\u518D\u70B9\u4E00\u6B21\u300C${label}\u300D`)}`);setBusy(false)}};return jsxs9(Dialog2,{title:`\u5220\u9664\u300C${credential.name}\u300D\uFF1F`,onClose:()=>!busy&&onClose(),children:[jsxs9("ul",{children:[used.length>0?jsxs9(Fragment7,{children:[jsxs9("li",{children:["\u5728\u7528\u5B83\u7684\u9879\u76EE\uFF1A",used.join("\u3001"),"\u3002\u8FD9\u4E9B\u9879\u76EE\u5BF9\u5B83\u7684\u9009\u7528\u4F1A\u6E05\u7A7A\uFF1A\u8981\u7528\u6210\u5458\u81EA\u5DF1\u6A21\u578B\u7684\u5DE5\u574A\u91CC\uFF0C\u4E0B\u4E00\u6B21\u6D3E\u53D1\u81EA\u52A8\u7528\u521B\u5EFA\u4EBA\u7684\u9ED8\u8BA4\u914D\u7F6E\uFF0C\u6CA1\u6709\u5C31\u4E0D\u6D3E\u53D1\uFF1B\u5176\u4F59\u5DE5\u574A\u56DE\u5230\u5DE5\u574A\u7684\u56E2\u961F key\u3002"]}),jsx9("li",{children:"\u6B63\u5728\u7528\u5B83\u7684\u56DE\u5408\u7ACB\u523B\u505C\u6B62\uFF0C\u5305\u62EC\u522B\u4EBA\u53D1\u8D77\u7684\u3002"})]}):jsx9("li",{children:"\u8FD8\u6CA1\u6709\u9879\u76EE\u5728\u7528\u5B83\u3002"}),credential.isDefault&&othersLeft&&jsx9("li",{children:"\u5B83\u662F\u4F60\u7684\u9ED8\u8BA4\u914D\u7F6E\u3002\u5220\u6389\u540E\u4F60\u540D\u4E0B\u6CA1\u6709\u9ED8\u8BA4\u914D\u7F6E\uFF0C\u5EFA\u9879\u76EE\u524D\u5148\u628A\u53E6\u4E00\u4EFD\u8BBE\u4E3A\u9ED8\u8BA4\u3002"}),jsx9("li",{children:"key \u5F53\u573A\u5220\u6389\uFF0C\u4E0D\u80FD\u6062\u590D\u3002"}),provisioned&&jsx9("li",{children:"\u8FD9\u4EFD\u662F Band \u4E3A\u4F60\u5F00\u901A\u7684\uFF1A\u5220\u9664\u53EA\u5220 Band \u5B58\u7684\u8FD9\u4EFD\uFF0CModelGate \u4E0A\u7684 key \u4ECD\u7136\u6709\u6548\uFF0C\u4E4B\u540E\u518D\u5F00\u901A\u591A\u534A\u627E\u56DE\u540C\u4E00\u628A\u3002\u5220\u9664\u540E\u4E0D\u518D\u81EA\u52A8\u5F00\u901A\uFF0C\u8981\u518D\u7528\u70B9\u300C\u7531 Band \u5F00\u901A\u300D\u3002"})]}),jsxs9("p",{className:"band-sf-muted",children:["\u5982\u679C key \u53EF\u80FD\u5DF2\u7ECF\u6CC4\u9732\uFF0C",revokeHint(credential.preset,provider)]}),error&&jsx9("p",{role:"alert",className:"band-sf-err",children:error}),jsxs9("div",{className:"band-sf-acts band-sf-acts-end",children:[jsx9("button",{type:"button",className:"btn ghost",disabled:busy,onClick:onClose,children:"\u53D6\u6D88"}),jsx9("button",{type:"button",className:"btn primary",disabled:busy,onClick:()=>void go(),children:busy?"\u6B63\u5728\u5220\u9664\u2026":label})]})]})}function bindNetCredentials(api){if(!api)return void 0;const me={kind:"user"};return{list:()=>api.list(),save:input=>api.save(me,input),saveMany:input=>api.saveMany(me,input),update:(id,input)=>api.update(me,id,input),replaceKey:(id,value)=>api.replaceKey(me,id,value),remove:id=>api.remove(me,id)}}var SELF7="@kanyun-ai-infra/band-settings";var PAGE3=`${SELF7}/net-credentials`;var NEW_ITEM2="new";var PRIMARY2="\u6DFB\u52A0\u7F51\u7EDC\u51ED\u636E";var LIST_HREF2="/settings/net-credentials";var DESC4="agent \u81EA\u5DF1\u53D1\u51FA\u7684\u5176\u4ED6\u8C03\u7528\uFF08\u51FA\u56FE\u3001\u914D\u97F3\u3001\u89C6\u9891\u3001\u53E6\u4E00\u4E2A\u6A21\u578B\uFF09\u7528\u7684 key\u3002agent \u62FF\u4E0D\u5230 key\uFF0C\u53EA\u62FF\u5230\u5360\u4F4D\u7B26\u3002";var netCredentialsPage=reactMount5(ctx=>jsx10(MyNetCredentials,{ctx}));var itemHref2=id=>`${LIST_HREF2}/${encodeURIComponent(id)}`;function MyNetCredentials({ctx}){const route=useRoute3(ctx);const api=useMemo(()=>bindNetCredentials(ctx.app.data.write?.netCredentials),[ctx]);const[data,setData]=useState7(null);const[readError,setReadError]=useState7(null);const[forbidden,setForbidden]=useState7(false);const[reload,setReload]=useState7(0);const fresh=useFreshRows("net-credentials");const isFresh=id=>fresh.includes(id);const[notice]=useCrossPageNotice("net-credentials");const item=route.params.item;useEffect7(()=>{let live=true;setReadError(null);setForbidden(false);if(!api)return;api.list().then(v=>{if(live)setData(v)},e=>{if(!live)return;setForbidden(isForbidden6(e));setReadError(isForbidden6(e)?"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E9B\u51ED\u636E":failedBecause5(e,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,reload]);const go=next=>ctx.app.navigate({page:PAGE3,...next?{params:{item:next}}:{}});if(!api){return jsxs10(PersonalFrame,{ctx,current:"net-credentials",children:[jsx10(PageHead,{title:"\u7F51\u7EDC\u51ED\u636E",desc:DESC4}),jsx10(NoAccess,{title:"\u8FD9\u4E2A\u73AF\u5883\u8FD8\u6CA1\u5F00\u901A\u7F51\u7EDC\u51ED\u636E",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u5F00\u901A\u8981\u90E8\u7F72\u7BA1\u7406\u5458\u5728\u670D\u52A1\u7AEF\u6253\u5F00\u3002\u5F00\u901A\u4E4B\u524D\uFF0Cagent \u7528\u4E0D\u4E86\u8FD9\u7C7B\u5916\u90E8\u8C03\u7528\u3002"})]})}if(forbidden){return jsxs10(PersonalFrame,{ctx,current:"net-credentials",children:[jsx10(PageHead,{title:"\u7F51\u7EDC\u51ED\u636E",desc:DESC4}),jsx10(NoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u7F51\u7EDC\u51ED\u636E",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u7F51\u7EDC\u51ED\u636E\u6309\u767B\u5F55\u4EBA\u5F52\u5C5E\uFF0C\u53EA\u6709\u672C\u4EBA\u80FD\u770B\u3002\u8981\u7528\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u3002"})]})}if(readError!==null){return jsxs10(PersonalFrame,{ctx,current:"net-credentials",children:[jsx10(PageHead,{title:"\u7F51\u7EDC\u51ED\u636E",desc:DESC4}),jsxs10(ReadError,{retry:()=>setReload(n=>n+1),children:["\u7F51\u7EDC\u51ED\u636E\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]})]})}if(data===null){return jsxs10(PersonalFrame,{ctx,current:"net-credentials",children:[jsx10(PageHead,{title:"\u7F51\u7EDC\u51ED\u636E",desc:DESC4,action:jsx10("button",{type:"button",className:"btn primary",disabled:true,children:PRIMARY2})}),jsx10(Loading,{text:"\u6B63\u5728\u8BFB\u53D6\u7F51\u7EDC\u51ED\u636E\u2026"})]})}const rows=data.credentials;const taken=new Set(rows.map(c=>c.name));const full=rows.length>=PER_OWNER_MAX;const current=item&&item!==NEW_ITEM2?rows.find(c=>c.id===item):void 0;if(item===NEW_ITEM2){return jsxs10(PersonalFrame,{ctx,current:"net-credentials",back:"list",children:[jsx10(Back,{ctx,label:"\u7F51\u7EDC\u51ED\u636E",page:PAGE3,href:LIST_HREF2}),jsx10(NetAdd,{api,presets:data.presets,providerPresets:data.providerPresets,taken,onCancel:()=>go(),onSaved:cs=>{markFreshMany("net-credentials",cs.map(c=>c.id));markNotice("net-credentials",cs.length===1?`${cs[0]?.name??"\u7F51\u7EDC\u51ED\u636E"} \u5DF2\u4FDD\u5B58`:`\u5DF2\u4FDD\u5B58 ${cs.length} \u6761\u7F51\u7EDC\u51ED\u636E`);setReload(n=>n+1);go()}})]})}if(current){return jsxs10(PersonalFrame,{ctx,current:"net-credentials",back:"list",children:[jsx10(Back,{ctx,label:"\u7F51\u7EDC\u51ED\u636E",page:PAGE3,href:LIST_HREF2}),jsx10(NetDetail,{api,credential:current,onChanged:()=>setReload(n=>n+1),onDeleted:stops=>{markNotice("net-credentials",stops>0?`${current.name} \u5DF2\u5220\u9664\uFF0C\u505C\u6B62\u4E86 ${stops} \u4E2A\u5728\u8DD1\u7684\u56DE\u5408`:`${current.name} \u5DF2\u5220\u9664`);setReload(n=>n+1);go()}}),jsx10(Notice,{text:notice})]})}const add=jsx10("button",{type:"button",className:"btn primary",disabled:full,title:full?MSG.limit:void 0,onClick:()=>go(NEW_ITEM2),children:PRIMARY2});return jsxs10(PersonalFrame,{ctx,current:"net-credentials",children:[jsx10(PageHead,{title:"\u7F51\u7EDC\u51ED\u636E",desc:DESC4,action:rows.length>0?add:void 0}),full&&jsx10("p",{className:"band-sf-muted",children:MSG.limit}),rows.length===0?jsx10(Empty,{action:add,children:"\u4F60\u8FD8\u6CA1\u6709\u7F51\u7EDC\u51ED\u636E\u3002agent \u8981\u8C03\u7528\u51FA\u56FE\u3001\u914D\u97F3\u3001\u89C6\u9891\u8FD9\u7C7B\u5916\u90E8\u670D\u52A1\u65F6\u624D\u9700\u8981\u3002"}):jsxs10(Fragment8,{children:[jsx10("p",{className:"band-sf-banner",children:"\u4F60\u540D\u4E0B\u7684\u7F51\u7EDC\u51ED\u636E\u4F1A\u7528\u4E8E\u4F60\u521B\u5EFA\u7684\u9879\u76EE\u91CC\u7684 agent \u8C03\u7528\u3002"}),jsx10(Rows,{label:"\u6211\u7684\u7F51\u7EDC\u51ED\u636E",children:rows.map(c=>jsx10(Row,{title:c.name,mono:true,tags:jsxs10(Fragment8,{children:[c.name===DEFAULT_NAME&&jsx10("span",{className:"tag band-sf-default",children:"\u9ED8\u8BA4"}),isFresh(c.id)&&jsx10("span",{className:"chip plain s-approved",children:"\u5DF2\u4FDD\u5B58"})]}),meta:metaOf2(c),href:itemHref2(c.id),onOpen:()=>go(c.id),isNew:isFresh(c.id)},c.id))})]}),jsx10(Notice,{text:notice})]})}function metaOf2(c){return[...c.note?[c.note]:[],...c.domains,...c.gcp?[`GCP \xB7 ${c.gcp.projectId}`]:[],injectPurpose(c.inject),...c.last4?[`\u672B 4 \u4F4D \u2022\u2022\u2022\u2022${c.last4}`]:[]]}var NAME_PREFIX=NET_CREDENTIAL_NAME_PREFIX;var DEFAULT_NAME="BAND_NET_DEFAULT";var NOTE_MAX=NET_CREDENTIAL_NOTE_MAX;var DOMAINS_MAX=NET_CREDENTIAL_DOMAINS_MAX;var KEY_MAX=NET_CREDENTIAL_KEY_MAX;var PER_OWNER_MAX=NET_CREDENTIALS_PER_OWNER_MAX;var HEADER_RE=/^[A-Za-z0-9-]{1,64}$/;var PREFIX_MAX=32;var MSG={name:"\u53EA\u80FD\u7528\u5927\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u4E0B\u5212\u7EBF\uFF0C\u540E\u7F00 1\u201332 \u4E2A\u5B57\u7B26\uFF0C\u4E0D\u80FD\u4EE5\u4E0B\u5212\u7EBF\u7ED3\u5C3E\uFF0C\u4E0D\u80FD\u4EE5 _BASE_URL \u6216 _GCP_PROJECT_ID \u7ED3\u5C3E",domainShape:"\u53EA\u5199\u57DF\u540D\uFF0C\u4E0D\u5E26 https:// \u548C\u8DEF\u5F84\uFF1B\u5B50\u57DF\u540D\u5199 *.example.com",domainsMax:`\u6700\u591A ${DOMAINS_MAX} \u4E2A`,key:`\u53EA\u80FD\u7528\u82F1\u6587\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u7B26\u53F7\uFF0C\u4E0D\u80FD\u6709\u4E2D\u6587\u3001\u6362\u884C\u6216\u524D\u540E\u7A7A\u683C\uFF0C\u6700\u957F ${KEY_MAX} \u4E2A\u5B57\u7B26`,serviceAccount:"\u8981 type \u4E3A service_account \u7684 JSON key \u6587\u4EF6\uFF0C\u6574\u4EFD\u7C98\u8D34",header:"\u5934\u540D\u53EA\u80FD\u7528\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u8FDE\u5B57\u7B26\uFF0C\u6700\u957F 64 \u4E2A\u5B57\u7B26",prefix:`\u524D\u7F00\u6700\u957F ${PREFIX_MAX} \u4E2A\u5B57\u7B26\uFF0C\u4E0D\u80FD\u6709\u6362\u884C`,limit:`\u6700\u591A ${PER_OWNER_MAX} \u6761\uFF0C\u5148\u5220\u6389\u4E0D\u7528\u7684`};function nameSuffixProblem(suffix){if(!/^[A-Z][A-Z0-9_]{0,31}$/.test(suffix))return MSG.name;if(suffix.endsWith("_")||suffix.includes("__"))return MSG.name;const name=`${NAME_PREFIX}${suffix}`;if(name.endsWith("_BASE_URL")||name.endsWith("_GCP_PROJECT_ID"))return MSG.name;return null}function parseDomains(text){return text.split(/\r?\n/).map(l=>l.trim()).filter(Boolean)}function domainsProblem(domains){if(domains.length>DOMAINS_MAX)return MSG.domainsMax;for(const d of domains){if(/[/:@?#\s]/.test(d))return MSG.domainShape}return null}function keyProblem(key){if(key.length>KEY_MAX)return MSG.key;if(key!==key.trim())return MSG.key;if(!/^[\x20-\x7e]*$/.test(key))return MSG.key;return null}function serviceAccountProblem(value){try{const parsed=JSON.parse(value);return typeof parsed==="object"&&parsed!==null&&parsed.type==="service_account"?null:MSG.serviceAccount}catch{return MSG.serviceAccount}}function injectOf(kind,header,prefix){if(kind==="bearer")return{header:"Authorization",prefix:"Bearer "};if(kind==="x-api-key")return{header:"x-api-key",prefix:""};return{header,prefix}}function kindOf(inject){if(inject.header.toLowerCase()==="authorization"&&inject.prefix==="Bearer ")return"bearer";if(inject.header.toLowerCase()==="x-api-key"&&inject.prefix==="")return"x-api-key";return"custom"}function injectLabel(inject){const p=inject.prefix.trim();return p?`${inject.header}: ${p}`:inject.header}function injectPurpose(inject){const kind=kindOf(inject);if(kind==="bearer")return"\u4F5C\u4E3A\u767B\u5F55\u51ED\u636E\u53D1\u7ED9\u57DF\u540D";if(kind==="x-api-key")return"\u4F5C\u4E3A API key \u53D1\u7ED9\u57DF\u540D";return`\u6309\u81EA\u5B9A\u4E49\u8BF7\u6C42\u5934\u53D1\u7ED9\u57DF\u540D\uFF08${inject.header}\uFF09`}function detailsOf(e){if(typeof e!=="object"||e===null)return{};const o=e;const d=typeof o.details==="object"&&o.details!==null?o.details:{};return{...typeof o.code==="string"?{code:o.code}:{},...typeof d.field==="string"?{field:d.field}:{},...typeof d.reason==="string"?{reason:d.reason}:{}}}var FIELDS=["name","note","domains","inject","key","serviceAccount"];function errorsFrom(e,next){const{code,field,reason}=detailsOf(e);const text=failedBecause5(e,next);if(code==="VALIDATION_ERROR"&&field&&FIELDS.includes(field))return{[field]:text};if(code==="CONFLICT"&&reason==="NAME_TAKEN")return{name:text};return{form:text}}var CUSTOM="__custom__";function ServiceAccountField({id,value,onChange,error,hint,busy=false}){const errId=`${id}-err`;const[readError,setReadError]=useState7("");const shown=error??(readError||null);return jsxs10("div",{className:"band-sf-fld",children:[jsxs10("label",{htmlFor:id,children:["\u670D\u52A1\u8D26\u53F7 JSON ",jsx10("span",{className:"band-sf-req",children:"\u5FC5\u586B"})]}),jsx10("textarea",{id,className:"field band-sf-mono",rows:6,autoComplete:"off",spellCheck:false,maxLength:NET_CREDENTIAL_SERVICE_ACCOUNT_MAX,disabled:busy,value,placeholder:"\u6574\u4EFD\u7C98\u8D34\u670D\u52A1\u8D26\u53F7\u7684 JSON key \u6587\u4EF6\uFF0C\u6216\u70B9\u300C\u4ECE\u6587\u4EF6\u8BFB\u5165\u300D",onChange:e=>onChange(e.target.value),...shown?{"aria-invalid":true,"aria-describedby":errId}:{}}),jsx10("div",{className:"band-sf-acts",children:jsxs10("label",{className:"btn ghost sm",children:["\u4ECE\u6587\u4EF6\u8BFB\u5165",jsx10("input",{type:"file",accept:".json,application/json",hidden:true,tabIndex:-1,disabled:busy,onChange:e=>{const file=e.currentTarget.files?.[0];e.currentTarget.value="";if(!file)return;setReadError("");file.text().then(onChange).catch(()=>setReadError("\u6587\u4EF6\u6CA1\u8BFB\u51FA\u6765\uFF0C\u91CD\u65B0\u9009\u4E00\u6B21"))}})]})}),shown?jsx10("p",{className:"band-sf-err",id:errId,role:"alert",children:shown}):hint]})}function NetForm({mode,presets,taken,onSubmit,onCancel,submitError,busy=false}){const id=useId4();const existing=mode.kind==="add"?null:mode.credential;const firstFree=presets.find(p=>!taken.has(p.name))?.name??CUSTOM;const[pick,setPick]=useState7(firstFree);const[suffix,setSuffix]=useState7("");const[note,setNote]=useState7(existing?.note??"");const[domainText,setDomainText]=useState7(existing?existing.domains.join("\n"):"");const initialKind=existing?kindOf(existing.inject):"bearer";const[injectKind,setInjectKind]=useState7(initialKind);const[header,setHeader]=useState7(existing&&initialKind==="custom"?existing.inject.header:"");const[prefix,setPrefix]=useState7(existing&&initialKind==="custom"?existing.inject.prefix:"");const[key,setKey]=useState7("");const[serviceAccount,setServiceAccount]=useState7("");const[local,setLocal]=useState7({});const name=mode.kind==="add"?pick===CUSTOM?`${NAME_PREFIX}${suffix}`:pick:existing?.name??"";const domains=parseDomains(domainText);const showKey=mode.kind!=="edit";const showMeta=mode.kind!=="replace";const rowGcp=existing?.scheme==="gcp_service_account";const replaceGcp=mode.kind==="replace"&&rowGcp;const missing=[];if(mode.kind==="add"&&pick===CUSTOM&&!suffix)missing.push("\u540D\u5B57");if(showMeta&&domains.length===0)missing.push("\u751F\u6548\u57DF\u540D");if(showMeta&&injectKind==="custom"&&!header)missing.push("\u5934\u540D");if(showKey&&!(replaceGcp?serviceAccount:key))missing.push(replaceGcp?"\u670D\u52A1\u8D26\u53F7 JSON":"key");const shown={...submitError,...local};const submit=()=>{const next={};if(mode.kind==="add"&&pick===CUSTOM){const p=nameSuffixProblem(suffix);if(p)next.name=p}if(showMeta){const p=domainsProblem(domains);if(p)next.domains=p;if(injectKind==="custom"){if(!HEADER_RE.test(header))next.inject=MSG.header;else if(prefix.length>PREFIX_MAX||/[\u0000-\u001f\u007f]/.test(prefix))next.inject=MSG.prefix}}if(showKey){const p=replaceGcp?serviceAccountProblem(serviceAccount):keyProblem(key);if(p)next[replaceGcp?"serviceAccount":"key"]=p}setLocal(next);if(Object.keys(next).length>0)return;const inject=injectOf(injectKind,header,prefix);const k=key;const sa=serviceAccount;setKey("");setServiceAccount("");if(mode.kind==="add"){const trimmedNote=note.trim();onSubmit({kind:"add",input:{name,...trimmedNote?{note:trimmedNote}:{},domains,inject,key:k}})}else if(mode.kind==="edit"){const trimmedNote=note.trim();onSubmit({kind:"edit",input:{note:trimmedNote||null,domains,...rowGcp?{}:{inject}}})}else if(replaceGcp){onSubmit({kind:"replace",serviceAccount:sa})}else{onSubmit({kind:"replace",key:k})}};const title=mode.kind==="add"?"\u6DFB\u52A0\u7F51\u7EDC\u51ED\u636E":mode.kind==="edit"?`\u7F16\u8F91\u300C${name}\u300D`:replaceGcp?`\u66FF\u6362\u300C${name}\u300D\u7684\u670D\u52A1\u8D26\u53F7`:`\u66FF\u6362\u300C${name}\u300D\u7684 key`;const err=f=>shown[f]?jsx10("p",{className:"band-sf-err",id:`${id}-${f}-err`,role:"alert",children:shown[f]}):null;const inv=f=>shown[f]?{"aria-invalid":true,"aria-describedby":`${id}-${f}-err`}:{};return jsxs10("form",{className:"band-sf-form","aria-label":title,onSubmit:e=>{e.preventDefault();if(!busy&&missing.length===0)submit()},children:[mode.kind==="add"?jsxs10("div",{className:"band-sf-fld",children:[jsxs10("label",{htmlFor:`${id}-name`,children:["\u540D\u5B57 ",jsx10("span",{className:"band-sf-req",children:"\u5FC5\u586B"})]}),jsxs10("select",{id:`${id}-name`,className:"field band-sf-mono",value:pick,disabled:busy,onChange:e=>setPick(e.target.value),...pick!==CUSTOM?inv("name"):{},children:[presets.map(p=>jsxs10("option",{value:p.name,disabled:taken.has(p.name),children:[p.name,"\uFF1A",p.purpose,taken.has(p.name)?"\uFF08\u5DF2\u6709\uFF09":""]},p.name)),jsx10("option",{value:CUSTOM,children:"\u81EA\u5B9A\u4E49\u540D\u5B57\u2026"})]}),pick===CUSTOM?jsxs10("div",{className:"band-sf-pair",children:[jsx10("span",{className:"band-sf-mono","aria-hidden":"true",children:NAME_PREFIX}),jsx10("input",{id:`${id}-suffix`,className:"field band-sf-mono","aria-label":`\u540D\u5B57\u540E\u7F00\uFF08\u524D\u7F00 ${NAME_PREFIX} \u56FA\u5B9A\uFF09`,autoComplete:"off",spellCheck:false,maxLength:32,disabled:busy,value:suffix,placeholder:"\u4F8B\u5982 MUSIC",onChange:e=>setSuffix(e.target.value.toUpperCase()),...inv("name")})]}):null,err("name")??jsx10("span",{className:"band-sf-hint",children:"\u4FDD\u5B58\u540E\u540D\u5B57\u4E0D\u80FD\u6539\uFF08agent \u91CC\u5199\u6B7B\u4E86\u5B83\uFF09\u3002Rondo \u548C\u5B98\u65B9\u63D2\u4EF6\u53EA\u8BA4\u8FD9\u516D\u4E2A\u9884\u8BBE\u540D\u3002"})]}):null,showMeta?jsxs10(Fragment8,{children:[jsxs10("div",{className:"band-sf-fld",children:[jsxs10("label",{htmlFor:`${id}-note`,children:["\u5907\u6CE8 ",jsx10("span",{className:"band-sf-req",children:"\u9009\u586B"})]}),jsx10("input",{id:`${id}-note`,className:"field",maxLength:NOTE_MAX,disabled:busy,value:note,placeholder:"\u4F8B\u5982\uFF1A\u56E2\u961F\u7684\u914D\u97F3\u8D26\u53F7",onChange:e=>setNote(e.target.value),...inv("note")}),err("note")]}),jsxs10("div",{className:"band-sf-fld",children:[jsxs10("label",{htmlFor:`${id}-domains`,children:["\u751F\u6548\u57DF\u540D ",jsx10("span",{className:"band-sf-req",children:"\u5FC5\u586B"})]}),jsx10("textarea",{id:`${id}-domains`,className:"field band-sf-mono",rows:Math.min(Math.max(domains.length+1,2),DOMAINS_MAX),autoComplete:"off",spellCheck:false,disabled:busy,value:domainText,placeholder:"api.example.com\n*.example.com",onChange:e=>setDomainText(e.target.value),...inv("domains")}),err("domains")??jsxs10("span",{className:"band-sf-hint",children:["\u4E00\u884C\u4E00\u4E2A\uFF0C\u5B50\u57DF\u540D\u5199 *.example.com\u3002\u53EA\u6709\u53D1\u5F80\u8FD9\u4E9B\u57DF\u540D\u7684 https \u8BF7\u6C42\u624D\u4F1A\u6362\u4E0A\u771F key\u3002\u6700\u591A"," ",DOMAINS_MAX," \u4E2A\u3002"]})]}),rowGcp?jsx10("p",{className:"band-sf-banner",children:"\u6CE8\u5165\u683C\u5F0F\u56FA\u5B9A Authorization: Bearer\uFF08GCP \u670D\u52A1\u8D26\u53F7\u7531\u7F51\u5173\u6362 token\uFF0C\u4E0D\u80FD\u6539\uFF09\u3002"}):jsxs10("div",{className:"band-sf-fld",children:[jsx10("label",{htmlFor:`${id}-inject`,children:"\u6CE8\u5165\u683C\u5F0F"}),jsxs10("select",{id:`${id}-inject`,className:"field",value:injectKind,disabled:busy,onChange:e=>setInjectKind(e.target.value),children:[jsx10("option",{value:"bearer",children:"Authorization: Bearer\uFF08\u7F3A\u7701\uFF09"}),jsx10("option",{value:"x-api-key",children:"x-api-key"}),jsx10("option",{value:"custom",children:"\u81EA\u5B9A\u4E49\uFF08\u5934\u540D + \u524D\u7F00\uFF09"})]}),injectKind==="custom"?jsxs10("div",{className:"band-sf-pair",children:[jsx10("input",{className:"field band-sf-mono","aria-label":"\u5934\u540D",autoComplete:"off",spellCheck:false,maxLength:64,disabled:busy,value:header,placeholder:"\u5934\u540D\uFF0C\u4F8B\u5982 X-Api-Token",onChange:e=>setHeader(e.target.value),...inv("inject")}),jsx10("input",{className:"field band-sf-mono","aria-label":"\u524D\u7F00\uFF08\u9009\u586B\uFF09",autoComplete:"off",spellCheck:false,maxLength:PREFIX_MAX,disabled:busy,value:prefix,placeholder:"\u524D\u7F00\uFF08\u9009\u586B\uFF09\uFF0C\u4F8B\u5982 Token ",onChange:e=>setPrefix(e.target.value)})]}):null,err("inject")]})]}):null,showKey?replaceGcp?jsx10(ServiceAccountField,{id:`${id}-key`,value:serviceAccount,onChange:setServiceAccount,error:shown.serviceAccount??shown.key??null,hint:jsx10("span",{className:"band-sf-hint",children:"\u6574\u4EFD\u91CD\u65B0\u7C98\u8D34\u670D\u52A1\u8D26\u53F7\u7684 JSON key \u6587\u4EF6\uFF1B\u9879\u76EE ID \u548C\u90AE\u7BB1\u53EF\u4EE5\u6362\u6210\u522B\u7684\u3002"}),busy}):jsxs10("div",{className:"band-sf-fld",children:[jsxs10("label",{htmlFor:`${id}-key`,children:["key ",jsx10("span",{className:"band-sf-req",children:"\u5FC5\u586B"})]}),jsx10("input",{id:`${id}-key`,className:"field",type:"password",autoComplete:"off",spellCheck:false,maxLength:KEY_MAX+1,disabled:busy,value:key,placeholder:"\u7C98\u8D34\u670D\u52A1\u5546\u7ED9\u4F60\u7684 key",onChange:e=>setKey(e.target.value),...inv("key")}),err("key")]}):null,mode.kind==="replace"?jsx10("p",{className:"band-sf-banner",children:replaceGcp?"\u5728\u8DD1\u7684\u56DE\u5408\u8FD8\u4F1A\u7528\u65E7\u503C\uFF0C\u76F4\u5230\u5B83\u7ED3\u675F\uFF1B\u4E4B\u540E\u7684\u56DE\u5408\u7528\u65B0\u7684\u670D\u52A1\u8D26\u53F7\u3002":"\u5728\u8DD1\u7684\u56DE\u5408\u8FD8\u4F1A\u7528\u65E7\u503C\uFF0C\u76F4\u5230\u5B83\u7ED3\u675F\uFF1B\u4E4B\u540E\u7684\u56DE\u5408\u7528\u65B0 key\u3002"}):mode.kind==="edit"?jsx10("p",{className:"band-sf-banner",children:"\u6539\u4E86\u57DF\u540D\u6216\u6CE8\u5165\u683C\u5F0F\uFF0C\u4E0B\u4E00\u4E2A\u56DE\u5408\u8D77\u751F\u6548\u3002"}):jsxs10(Fragment8,{children:[jsx10("p",{className:"band-sf-banner",children:"\u4FDD\u5B58\u65F6\u4E0D\u4F1A\u6D4B\u8BD5\u8FD9\u628A key\uFF0C\u7B2C\u4E00\u6B21\u4F7F\u7528\u65F6\u624D\u77E5\u9053\u5BF9\u4E0D\u5BF9\u3002"}),jsxs10("p",{className:"band-sf-banner",children:["agent \u4F1A\u770B\u5230 ",jsx10("code",{children:name})," \u548C ",jsxs10("code",{children:[name,"_BASE_URL"]}),"\uFF0C\u628A\u8BF7\u6C42\u53D1\u5230\u540E\u8005\u3001\u5E26\u4E0A\u524D\u8005\uFF1B\u770B\u4E0D\u5230 key\u3002\u8C03\u7528\u65B9\u8981\u80FD\u6539 base URL\uFF0C\u6539\u4E0D\u4E86\u7684 SDK \u7528\u4E0D\u4E0A\u3002"]})]}),shown.form?jsxs10("p",{className:"band-sf-err",role:"alert",children:["\u6CA1\u4FDD\u5B58\uFF1A",shown.form]}):null,jsxs10("div",{className:"band-sf-acts",children:[jsx10("button",{type:"submit",className:"btn primary",disabled:busy||missing.length>0,children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":mode.kind==="replace"?"\u66FF\u6362":"\u4FDD\u5B58"}),jsx10("button",{type:"button",className:"btn ghost",disabled:busy,onClick:()=>{leaveThen(()=>{setKey("");setServiceAccount("");onCancel()})},children:"\u53D6\u6D88"}),missing.length>0?jsxs10("span",{className:"band-sf-muted",children:["\u8FD8\u5DEE",missing.join("\u3001"),"\u6CA1\u586B"]}):null]})]})}function NetAdd({api,presets,providerPresets,taken,onCancel,onSaved}){const[step,setStep]=useState7({kind:"pick"});if(step.kind==="pick"){return jsx10(ProviderPick,{presets:providerPresets,onPick:preset=>setStep({kind:"preset",preset}),onOther:()=>setStep({kind:"other"})})}if(step.kind==="other"){return jsxs10(Fragment8,{children:[jsx10(StepBack,{label:"\u9009\u670D\u52A1\u5546",onClick:()=>setStep({kind:"pick"})}),jsx10(OtherService,{api,presets,taken,onCancel,onSaved})]})}return jsxs10(Fragment8,{children:[jsx10(StepBack,{label:"\u9009\u670D\u52A1\u5546",onClick:()=>setStep({kind:"pick"})}),jsx10(PresetForm,{api,preset:step.preset,taken,onCancel,onSaved})]})}function ProviderPick({presets,onPick,onOther}){return jsxs10(Fragment8,{children:[jsx10(PageHead,{title:"\u6DFB\u52A0\u7F51\u7EDC\u51ED\u636E",desc:"\u9009\u4E00\u5BB6\u670D\u52A1\u5546\u3002\u57DF\u540D\u548C\u6CE8\u5165\u683C\u5F0F\u7531\u9884\u8BBE\u5E26\u51FA\uFF0C\u4F60\u53EA\u586B key\u3002"}),jsxs10("div",{className:"band-sf-pickgrid",children:[presets.map(p=>jsxs10("button",{type:"button",className:"band-sf-pickcard",onClick:()=>onPick(p),children:[jsx10("i",{children:p.label.slice(0,1)}),jsx10("b",{children:p.label}),jsx10("small",{children:p.description}),jsx10("span",{className:"band-sf-caps",children:p.capabilities.map(c=>jsx10("span",{className:"tag",children:CAPABILITY_LABELS2[c]},c))})]},p.id)),jsxs10("button",{type:"button",className:"band-sf-pickcard",onClick:onOther,children:[jsx10("i",{children:"\uFF0B"}),jsx10("b",{children:"\u5176\u4ED6\u670D\u52A1"}),jsx10("small",{children:"\u81EA\u5DF1\u586B\u57DF\u540D\u548C\u6CE8\u5165\u683C\u5F0F"})]})]})]})}function StepBack({label,onClick}){return jsxs10("button",{type:"button",className:"band-sf-stepback",onClick:()=>leaveThen(onClick),children:[jsx10("span",{"aria-hidden":"true",children:"\u2039"})," ",label]})}var CAPABILITY_LABELS2={text:"\u6587\u672C",image:"\u51FA\u56FE",tts:"\u914D\u97F3",asr:"\u8BC6\u522B",video:"\u89C6\u9891",music:"\u914D\u4E50"};function nameProblem(name){if(!name.startsWith(NAME_PREFIX))return MSG.name;return nameSuffixProblem(name.slice(NAME_PREFIX.length))}function PresetForm({api,preset,taken,onCancel,onSaved}){const id=useId4();const[checked,setChecked]=useState7(()=>preset.purposes.map(p=>p.preselected));const[names,setNames]=useState7(()=>preset.purposes.map(p=>p.name));const[rowErrors,setRowErrors]=useState7(()=>preset.purposes.map(()=>null));const[key,setKey]=useState7("");const[serviceAccount,setServiceAccount]=useState7("");const[note,setNote]=useState7("");const[keyError,setKeyError]=useState7(null);const[noteError,setNoteError]=useState7(null);const[formError,setFormError]=useState7("");const[busy,setBusy]=useState7(false);const isGcp=preset.scheme==="gcp_service_account";const chosen=preset.purposes.flatMap((_,i)=>checked[i]?[i]:[]);const missing=[];if(chosen.length===0)missing.push("\u7528\u9014");if(!(isGcp?serviceAccount:key))missing.push(isGcp?"\u670D\u52A1\u8D26\u53F7 JSON":"key");const submit=async()=>{if(busy)return;setFormError("");setNoteError(null);const nextRows=preset.purposes.map(()=>null);let bad=false;const seen=new Set;for(const i of chosen){const name=(names[i]??"").trim();const p=nameProblem(name);if(p){nextRows[i]=p;bad=true;continue}if(seen.has(name)||taken.has(name)){nextRows[i]="\u8FD9\u4E2A\u540D\u5B57\u5DF2\u7ECF\u6709\u4E86\uFF0C\u6362\u4E00\u4E2A\uFF0C\u6216\u8005\u53BB\u66FF\u6362\u90A3\u4E00\u6761\u7684 key";bad=true}seen.add(name)}const vp=isGcp?serviceAccountProblem(serviceAccount):keyProblem(key);setRowErrors(nextRows);setKeyError(vp);if(bad||vp)return;if(chosen.length===0)return;const trimmedNote=note.trim();const credentials=chosen.map(i=>{const name=(names[i]??"").trim();const common={name,...trimmedNote?{note:trimmedNote}:{},domains:[...preset.domains]};return preset.scheme==="gcp_service_account"?{...common,scheme:"gcp_service_account",serviceAccount}:{...common,inject:{...preset.inject},key}});setBusy(true);try{const r=await api.saveMany({credentials});onSaved(r.credentials)}catch(e){const err=errorsFrom(e,"\u6539\u597D\u540E\u518D\u70B9\u4FDD\u5B58");if(err.key)setKeyError(err.key);if(err.serviceAccount)setKeyError(err.serviceAccount);if(err.note)setNoteError(err.note);const rest=err.form??err.name??err.domains??err.inject;if(rest)setFormError(rest);else if(!err.key&&!err.serviceAccount&&!err.note)setFormError("\u5148\u6539\u597D\u6807\u7EA2\u7684\u5B57\u6BB5");setBusy(false)}};return jsxs10(Fragment8,{children:[jsx10(PageHead,{title:`\u6DFB\u52A0${preset.label}\u7684\u7F51\u7EDC\u51ED\u636E`,desc:preset.description}),jsxs10("form",{className:"band-sf-form","aria-label":`\u6DFB\u52A0${preset.label}\u7684\u7F51\u7EDC\u51ED\u636E`,onSubmit:e=>{e.preventDefault();if(!busy&&missing.length===0)void submit()},children:[jsxs10("dl",{className:"band-sf-given",children:[jsx10("dt",{children:"\u751F\u6548\u57DF\u540D"}),jsx10("dd",{children:preset.domains.map((d,i)=>jsxs10("span",{children:[i>0?"\u3001":null,jsx10("code",{children:d})]},d))}),jsx10("dt",{children:"\u6CE8\u5165\u683C\u5F0F"}),jsx10("dd",{children:jsx10("code",{children:preset.scheme==="static"?injectLabel(preset.inject):"Authorization: Bearer"})}),jsx10("p",{children:"\u7531\u9884\u8BBE\u5E26\u51FA\uFF0C\u4E0D\u7528\u586B\u3002"})]}),jsxs10("fieldset",{className:"band-sf-uses",children:[jsx10("legend",{children:"\u7528\u9014"}),preset.purposes.map((p,i)=>jsxs10("div",{className:"band-sf-use",children:[jsxs10("label",{children:[jsx10("input",{type:"checkbox",checked:checked[i]??false,disabled:busy,onChange:e=>setChecked(prev=>prev.map((v,j)=>j===i?e.target.checked:v))}),p.purpose]}),jsx10("input",{className:"field band-sf-mono","aria-label":`${p.purpose}\u7684\u540D\u5B57`,autoComplete:"off",spellCheck:false,maxLength:41,disabled:busy||!checked[i],value:names[i]??"",onChange:e=>setNames(prev=>prev.map((v,j)=>j===i?e.target.value:v)),...rowErrors[i]?{"aria-invalid":true,"aria-describedby":`${id}-use-${i}-err`}:{}}),rowErrors[i]?jsx10("p",{className:"band-sf-err",id:`${id}-use-${i}-err`,role:"alert",children:rowErrors[i]}):null]},`${p.name}-${i}`)),jsx10("span",{className:"band-sf-hint",children:preset.purposes.length>1?"\u52FE\u51E0\u4E2A\u7528\u9014\u5C31\u7528\u8FD9\u628A key \u5EFA\u51E0\u6761\uFF0C\u5168\u90E8\u5EFA\u6210\u624D\u7B97\u4FDD\u5B58\u3002":"\u540D\u5B57\u662F agent \u91CC\u7528\u7684\u5F15\u7528\uFF0C\u4FDD\u5B58\u540E\u4E0D\u80FD\u6539\u3002"})]}),isGcp?jsx10(ServiceAccountField,{id:`${id}-key`,value:serviceAccount,onChange:setServiceAccount,error:keyError,hint:jsxs10(Fragment8,{children:[jsxs10("span",{className:"band-sf-hint",children:[preset.keyHint," \u4FDD\u5B58\u65F6\u4E0D\u4F1A\u771F\u8C03 Google \u9A8C\u8BC1\u8FD9\u4EFD\u670D\u52A1\u8D26\u53F7\uFF0C\u7B2C\u4E00\u6B21\u4F7F\u7528\u65F6\u624D\u77E5\u9053\u5BF9\u4E0D\u5BF9\u3002"]}),preset.docsUrl?jsx10("span",{className:"band-sf-hint",children:jsxs10("a",{href:preset.docsUrl,target:"_blank",rel:"noreferrer",children:["\u5230",preset.label,"\u521B\u5EFA key"]})}):null]}),busy}):jsxs10("div",{className:"band-sf-fld",children:[jsxs10("label",{htmlFor:`${id}-key`,children:["key ",jsx10("span",{className:"band-sf-req",children:"\u5FC5\u586B"})]}),jsx10("input",{id:`${id}-key`,className:"field",type:"password",autoComplete:"off",spellCheck:false,maxLength:KEY_MAX+1,disabled:busy,value:key,placeholder:"\u7C98\u8D34\u670D\u52A1\u5546\u7ED9\u4F60\u7684 key",onChange:e=>setKey(e.target.value),...keyError?{"aria-invalid":true,"aria-describedby":`${id}-key-err`}:{}}),keyError?jsx10("p",{className:"band-sf-err",id:`${id}-key-err`,role:"alert",children:keyError}):jsxs10("span",{className:"band-sf-hint",children:[preset.keyHint," \u4FDD\u5B58\u65F6\u4E0D\u4F1A\u6D4B\u8BD5\u8FD9\u628A key\uFF0C\u7B2C\u4E00\u6B21\u4F7F\u7528\u65F6\u624D\u77E5\u9053\u5BF9\u4E0D\u5BF9\u3002"]}),preset.docsUrl?jsx10("span",{className:"band-sf-hint",children:jsxs10("a",{href:preset.docsUrl,target:"_blank",rel:"noreferrer",children:["\u5230",preset.label,"\u521B\u5EFA key"]})}):null]}),jsxs10("div",{className:"band-sf-fld",children:[jsxs10("label",{htmlFor:`${id}-note`,children:["\u5907\u6CE8 ",jsx10("span",{className:"band-sf-req",children:"\u9009\u586B"})]}),jsx10("input",{id:`${id}-note`,className:"field",maxLength:NOTE_MAX,disabled:busy,value:note,placeholder:"\u7559\u7A7A\u5C31\u4E0D\u5199\u5907\u6CE8",onChange:e=>setNote(e.target.value),...noteError?{"aria-invalid":true,"aria-describedby":`${id}-note-err`}:{}}),noteError?jsx10("p",{className:"band-sf-err",id:`${id}-note-err`,role:"alert",children:noteError}):null]}),formError?jsxs10("p",{className:"band-sf-err",role:"alert",children:["\u6CA1\u4FDD\u5B58\uFF1A",formError]}):null,jsxs10("div",{className:"band-sf-acts",children:[jsx10("button",{type:"submit",className:"btn primary",disabled:busy||missing.length>0,children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":"\u4FDD\u5B58"}),jsx10("button",{type:"button",className:"btn ghost",disabled:busy,onClick:()=>leaveThen(onCancel),children:"\u53D6\u6D88"}),missing.length>0?jsxs10("span",{className:"band-sf-muted",children:["\u8FD8\u5DEE",missing.join("\u3001"),"\u6CA1\u586B"]}):null]})]})]})}function OtherService({api,presets,taken,onCancel,onSaved}){const[busy,setBusy]=useState7(false);const[errors,setErrors]=useState7({});const submit=async v=>{if(busy||v.kind!=="add")return;setBusy(true);setErrors({});try{const r=await api.save(v.input);onSaved([r.credential])}catch(e){setErrors(errorsFrom(e,"\u6539\u597D\u540E\u518D\u70B9\u4FDD\u5B58"));setBusy(false)}};return jsxs10(Fragment8,{children:[jsx10(PageHead,{title:"\u5176\u4ED6\u670D\u52A1",desc:"\u81EA\u5DF1\u586B\u57DF\u540D\u548C\u6CE8\u5165\u683C\u5F0F\u3002\u4FDD\u5B58\u65F6\u4F1A\u68C0\u67E5\u683C\u5F0F\uFF0C\u4E0D\u4F1A\u6D4B\u8BD5\u8FD9\u628A key\uFF1A\u7B2C\u4E00\u6B21\u4F7F\u7528\u65F6\u624D\u77E5\u9053\u5BF9\u4E0D\u5BF9\u3002"}),jsx10(NetForm,{mode:{kind:"add"},presets:[...presets],taken,busy,submitError:errors,onSubmit:v=>void submit(v),onCancel})]})}function NetDetail({api,credential,onChanged,onDeleted}){const[mode,setMode]=useState7("none");const[busy,setBusy]=useState7(false);const[errors,setErrors]=useState7({});const[deleting,setDeleting]=useState7(false);const[deleteError,setDeleteError]=useState7("");const[saved,setSaved]=useState7("");const replaceLabel=credential.scheme==="gcp_service_account"?"\u66FF\u6362\u670D\u52A1\u8D26\u53F7":"\u66FF\u6362 key";const submit=async v=>{if(busy)return;setBusy(true);setErrors({});setSaved("");try{const r=v.kind==="edit"?await api.update(credential.id,v.input):v.kind==="replace"?await api.replaceKey(credential.id,"key"in v?{key:v.key}:{serviceAccount:v.serviceAccount}):null;setMode("none");setSaved(v.kind==="replace"?"\u5DF2\u66FF\u6362":"\u5DF2\u4FDD\u5B58");void r;onChanged()}catch(e){setErrors(errorsFrom(e,"\u6539\u597D\u540E\u518D\u70B9\u4FDD\u5B58"))}finally{setBusy(false)}};const remove=async()=>{if(busy)return;setBusy(true);setDeleteError("");try{const r=await api.remove(credential.id);onDeleted(r.stops)}catch(e){setDeleteError(failedBecause5(e,"\u518D\u70B9\u4E00\u6B21\u5220\u9664"));setBusy(false)}};return jsxs10(Fragment8,{children:[jsx10(PageHead,{title:jsxs10(Fragment8,{children:[jsx10("span",{className:"band-sf-mono",children:credential.name}),credential.name===DEFAULT_NAME&&jsx10("span",{className:"tag band-sf-default",children:"\u9ED8\u8BA4"})]}),desc:"\u53EA\u6709\u4F60\u770B\u5F97\u5230\u8FD9\u4EFD\u51ED\u636E\u3002agent \u53EA\u62FF\u5230\u540D\u5B57\u548C base URL\uFF0C\u62FF\u4E0D\u5230 key\u3002"}),jsx10(Facts,{items:[{key:"\u540D\u5B57",value:jsx10("code",{children:credential.name})},{key:"\u5907\u6CE8",value:credential.note??"\u2014"},{key:"\u751F\u6548\u57DF\u540D",value:credential.domains.map(d=>jsx10("span",{className:"tag band-sf-mono",children:d},d))},{key:"\u53D1\u9001\u65B9\u5F0F",value:injectPurpose(credential.inject)},...credential.gcp?[{key:"\u9879\u76EE ID",value:jsx10("code",{children:credential.gcp.projectId})},{key:"\u670D\u52A1\u8D26\u53F7\u90AE\u7BB1",value:jsx10("code",{children:credential.gcp.clientEmail})}]:[{key:"key",value:credential.last4?`\u672B 4 \u4F4D \u2022\u2022\u2022\u2022${credential.last4}`:"\u2014"}]]}),jsx10(Section,{title:replaceLabel,children:mode==="replace"?jsx10(NetForm,{mode:{kind:"replace",credential},presets:[],taken:new Set,busy,submitError:errors,onSubmit:v=>void submit(v),onCancel:()=>{setMode("none");setErrors({})}}):jsxs10(Fragment8,{children:[jsxs10("p",{children:["\u5728\u8DD1\u7684\u56DE\u5408\u8FD8\u4F1A\u7528\u65E7\u503C\uFF0C\u76F4\u5230\u5B83\u7ED3\u675F\uFF1B\u4E4B\u540E\u7684\u56DE\u5408\u7528",credential.scheme==="gcp_service_account"?"\u65B0\u7684\u670D\u52A1\u8D26\u53F7":"\u65B0 key","\u3002"]}),jsxs10("div",{className:"band-sf-acts",children:[jsx10("button",{type:"button",className:"btn",onClick:()=>{setMode("replace");setErrors({});setSaved("")},children:replaceLabel}),saved==="\u5DF2\u66FF\u6362"&&jsx10("output",{className:"band-sf-ok",children:saved})]})]})}),jsx10(Section,{title:"\u6539\u5907\u6CE8\u3001\u57DF\u540D\u548C\u6CE8\u5165\u683C\u5F0F",children:mode==="edit"?jsx10(NetForm,{mode:{kind:"edit",credential},presets:[],taken:new Set,busy,submitError:errors,onSubmit:v=>void submit(v),onCancel:()=>{setMode("none");setErrors({})}}):jsxs10(Fragment8,{children:[jsx10("p",{children:"\u540D\u5B57\u4FDD\u5B58\u540E\u4E0D\u80FD\u6539\uFF08agent \u91CC\u5199\u6B7B\u4E86\u5B83\uFF09\u3002\u6539\u57DF\u540D\u6216\u6CE8\u5165\u683C\u5F0F\uFF0C\u4E0B\u4E00\u4E2A\u56DE\u5408\u8D77\u751F\u6548\u3002"}),jsxs10("div",{className:"band-sf-acts",children:[jsx10("button",{type:"button",className:"btn",onClick:()=>{setMode("edit");setErrors({});setSaved("")},children:"\u7F16\u8F91"}),saved==="\u5DF2\u4FDD\u5B58"&&jsx10("output",{className:"band-sf-ok",children:saved})]})]})}),jsx10(DangerZone,{children:jsx10(DangerRow,{title:`\u5220\u9664 ${credential.name}`,note:"\u4F60\u521B\u5EFA\u7684\u9879\u76EE\u91CC agent \u4E0D\u518D\u6709\u8FD9\u4E2A\u5360\u4F4D\u7B26\uFF1B\u6B63\u5728\u7528\u5B83\u7684\u56DE\u5408\u7ACB\u523B\u505C\u6B62\uFF0Ckey \u4E0D\u80FD\u6062\u590D\u3002",action:jsx10("button",{type:"button",className:"btn danger",onClick:()=>setDeleting(true),children:"\u5220\u9664"})})}),deleting&&jsx10(DeleteDialog2,{credential,busy,error:deleteError,onConfirm:()=>void remove(),onCancel:()=>setDeleting(false)})]})}function DeleteDialog2({credential,busy,error,onConfirm,onCancel}){const ref=useRef5(null);const id=useId4();useEffect7(()=>{const d=ref.current;if(d&&!d.open){if(typeof d.showModal==="function")d.showModal();else d.setAttribute("open","")}return()=>{if(typeof d?.close==="function")d.close();else d?.removeAttribute("open")}},[]);return jsxs10("dialog",{ref,className:"band-sf-dialog field-host","aria-labelledby":`${id}-t`,onCancel:e=>{e.preventDefault();if(!busy)onCancel()},children:[jsxs10("h2",{id:`${id}-t`,children:["\u5220\u9664\u300C",credential.name,"\u300D\uFF1F"]}),jsxs10("ul",{children:[jsxs10("li",{children:["\u4F60\u521B\u5EFA\u7684\u9879\u76EE\u91CC\uFF0Cagent \u4E0D\u518D\u6709 ",jsx10("code",{children:credential.name}),"\u3002"]}),jsx10("li",{children:"\u6B63\u5728\u7528\u5B83\u7684\u56DE\u5408\u4F1A\u88AB\u505C\u6B62\uFF0C\u5305\u62EC\u522B\u4EBA\u53D1\u8D77\u7684\u3002"}),jsx10("li",{children:"key \u5F53\u573A\u5220\u6389\uFF0C\u4E0D\u80FD\u6062\u590D\u3002"})]}),jsx10("p",{className:"band-sf-muted",children:"\u5982\u679C key \u53EF\u80FD\u5DF2\u7ECF\u6CC4\u9732\uFF0C\u8BF7\u540C\u65F6\u5230\u670D\u52A1\u5546\u90A3\u91CC\u4F5C\u5E9F\u5B83\u3002"}),error?jsxs10("p",{className:"band-sf-err",role:"alert",children:["\u6CA1\u5220\u6210\uFF1A",error]}):null,jsxs10("div",{className:"band-sf-acts band-sf-acts-end",children:[jsx10("button",{type:"button",className:"btn ghost",disabled:busy,onClick:onCancel,children:"\u53D6\u6D88"}),jsx10("button",{type:"button",className:"btn primary",disabled:busy,onClick:onConfirm,children:busy?"\u6B63\u5728\u5220\u9664\u2026":"\u5220\u9664\u5E76\u505C\u6B62\u56DE\u5408"})]})]})}var SELF8="@kanyun-ai-infra/band-settings";var PAGE4=`${SELF8}/settings`;var SECTION="notify";var NOTIFY_NEW="new";var DESC5="\u9879\u76EE\u91CC\u9700\u8981\u4EBA\u5904\u7406\u7684\u4E8B\u63A8\u5230\u8FD9\u4E9B\u6E20\u9053\uFF1B\u540C\u4E00\u9879\u76EE 5 \u5206\u949F\u5185\u7684\u591A\u4EF6\u4E8B\u5408\u5E76\u6210\u4E00\u6761\u3002";var ADD="\u6DFB\u52A0\u6E20\u9053";var READONLY2="\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u6539\u3002";var CHANNEL_TYPES=[{type:"wecom",label:"\u4F01\u4E1A\u5FAE\u4FE1\u7FA4\u673A\u5668\u4EBA",placeholder:"\u4F8B\u5982 https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=\u2026",hint:"\u5730\u5740\u8981\u4EE5 https://qyapi.weixin.qq.com/ \u5F00\u5934\u3002\u4FDD\u5B58\u540E\u53EA\u663E\u793A\u672B 4 \u4F4D\uFF0C\u8981\u6362\u673A\u5668\u4EBA\u5C31\u5220\u4E86\u91CD\u52A0\u3002\u4FDD\u5B58\u65F6\u4E0D\u4F1A\u53D1\u6D4B\u8BD5\u6D88\u606F\u3002",bad:"\u5730\u5740\u8981\u4EE5 https://qyapi.weixin.qq.com/ \u5F00\u5934"}];var labelOf=type=>CHANNEL_TYPES.find(t=>t.type===type)?.label??type;var FRESH_PREFIX="band-notify:fresh:";function markFresh2(projectId,id){try{globalThis.sessionStorage?.setItem(FRESH_PREFIX+projectId,id)}catch{}}function useFreshRow2(projectId){const[id]=useState8(()=>{try{return globalThis.sessionStorage?.getItem(FRESH_PREFIX+projectId)??null}catch{return null}});useEffect8(()=>{if(id===null)return;try{globalThis.sessionStorage?.removeItem(FRESH_PREFIX+projectId)}catch{}},[id,projectId]);return id}var failed=(e,retry)=>failedBecause6(e,retry);function params(ctx,item){return{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{},tab:SECTION,...item?{item}:{}}}function href(ctx,item){return projectPath(ctx.project,"settings",...item?[SECTION,item]:[SECTION])}var leave=ctx=>ctx.app.navigate({page:"@kanyun-ai-infra/band-project/project",params:{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{}}});var notifyPage=reactMount6(ctx=>jsx11(NotifyTab,{ctx}));function NotifyTab({ctx}){const api=ctx.notify;const route=useRoute4(ctx);const item=route.params.item;const channels=useCtxData(ctx,async()=>{if(!api)return null;try{return{kind:"ok",channels:(await api.list()).channels}}catch(e){if(isForbidden7(e))return{kind:"forbidden"};throw e}},[api],["notify.*"]);const fresh=useFreshRow2(ctx.project.id);const manage=useCanManage(ctx);const canManage=manage.can;const read=channels.data;const list=read?.kind==="ok"?read.channels:void 0;const forbidden=read?.kind==="forbidden";const readFailed=channels.error;if(!api){return jsx11(Fragment9,{children:jsx11(NoAccess,{title:"\u8FD9\u4E2A\u73AF\u5883\u8FD8\u6CA1\u5F00\u901A\u9879\u76EE\u901A\u77E5",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>leave(ctx)},children:"\u8981\u7528\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u3002"})})}if(item===NOTIFY_NEW){return jsxs11(Fragment9,{children:[manage.error?jsxs11(ErrorNote5,{retry:manage.reload,children:["\u7BA1\u7406\u6743\u9650\u6CA1\u8BFB\u51FA\u6765\uFF1A",manage.error]}):null,jsx11(AddChannel,{ctx,api,canManage,onCancel:()=>ctx.app.navigate({page:PAGE4,params:params(ctx)}),onAdded:id=>{markFresh2(ctx.project.id,id);ctx.app.navigate({page:PAGE4,params:params(ctx)})}})]})}const channel=item?list?.find(c=>c.id===item):void 0;if(item&&channel){return jsxs11(Fragment9,{children:[manage.error?jsxs11(ErrorNote5,{retry:manage.reload,children:["\u7BA1\u7406\u6743\u9650\u6CA1\u8BFB\u51FA\u6765\uFF1A",manage.error]}):null,jsx11(ChannelDetail,{ctx,api,channel,canManage,onDeleted:()=>ctx.app.navigate({page:PAGE4,params:params(ctx)})})]})}if(item){return jsx11(Fragment9,{children:!list?forbidden?jsx11(NoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u901A\u77E5\u6E20\u9053",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>leave(ctx)},children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"}):readFailed?jsxs11(Fragment9,{children:[jsx11(PageHead,{title:"\u901A\u77E5\u6E20\u9053",desc:DESC5}),jsxs11(ReadError,{retry:channels.reload,children:["\u901A\u77E5\u914D\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",readFailed]})]}):jsxs11(Fragment9,{children:[jsx11(PageHead,{title:"\u901A\u77E5\u6E20\u9053",desc:DESC5}),jsx11(Loading,{text:"\u6B63\u5728\u8BFB\u53D6\u901A\u77E5\u914D\u7F6E\u2026"})]}):jsxs11(Fragment9,{children:[jsx11(PageHead,{title:"\u901A\u77E5\u6E20\u9053",desc:DESC5}),jsx11("p",{className:"band-sf-muted",children:"\u8FD9\u6761\u6E20\u9053\u4E0D\u5728\u4E86\uFF1B\u53EF\u80FD\u5DF2\u7ECF\u88AB\u5220\u9664\u3002\u56DE\u5230\u5217\u8868\u770B\u73B0\u5728\u7684\u6E20\u9053\u3002"})]})})}const addHref=href(ctx,NOTIFY_NEW);const addAction=canManage!==false?jsx11(AddLink,{ctx,href:addHref,label:ADD}):null;const headAction=canManage!==false&&list===void 0&&!readFailed?jsx11("button",{type:"button",className:"btn primary",disabled:true,children:ADD}):list&&list.length>0?addAction:void 0;return jsxs11(Fragment9,{children:[jsx11(PageHead,{title:"\u901A\u77E5\u6E20\u9053",desc:DESC5,action:headAction}),canManage===false?jsx11("p",{className:"band-sf-muted",children:READONLY2}):null,manage.error?jsxs11(ErrorNote5,{retry:manage.reload,children:["\u7BA1\u7406\u6743\u9650\u6CA1\u8BFB\u51FA\u6765\uFF1A",manage.error]}):null,forbidden?jsx11(NoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u901A\u77E5\u6E20\u9053",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>leave(ctx)},children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"}):readFailed?jsxs11(ReadError,{retry:channels.reload,children:["\u901A\u77E5\u914D\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",readFailed]}):!list?jsx11(Loading,{text:"\u6B63\u5728\u8BFB\u53D6\u901A\u77E5\u914D\u7F6E\u2026"}):list.length===0?jsx11(Empty,{action:addAction,children:"\u8FD8\u6CA1\u6709\u914D\u7F6E\u6E20\u9053\uFF0C\u914D\u597D\u4E4B\u524D\u4E0D\u63A8\u9001\u3002"}):jsx11(Rows,{label:"\u901A\u77E5\u6E20\u9053",children:list.map(c=>jsx11(Row,{title:labelOf(c.type),tags:jsx11("span",{className:"tag",title:"\u5B8C\u6574\u5730\u5740\u4FDD\u5B58\u540E\u4E0D\u518D\u663E\u793A",children:"\u5DF2\u914D\u7F6E"}),meta:[c.display,`${c.createdBy} \u4E8E ${shortAt(c.createdAt)} \u914D\u7F6E`],href:href(ctx,c.id),isNew:c.id===fresh,onOpen:()=>ctx.app.navigate({page:PAGE4,params:params(ctx,c.id)})},c.id))})]})}function AddLink({ctx,href:href2,label}){return jsx11("a",{className:"btn primary",href:href2,onClick:e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;e.preventDefault();ctx.app.navigate({page:PAGE4,params:params(ctx,NOTIFY_NEW)})},children:label})}function useCanManage(ctx){const api=ctx.memberSettings;const[can,setCan]=useState8(api?null:true);const[error,setError]=useState8(null);const[round,setRound]=useState8(0);useEffect8(()=>{if(!api)return;let live=true;setError(null);api.get().then(v=>live&&setCan(v.canManage),e=>live&&setError(e instanceof Error?e.message:String(e)));return()=>{live=false}},[api,round]);return{can,error,reload:()=>setRound(n=>n+1)}}function AddChannel({ctx,api,canManage,onAdded,onCancel}){const type=CHANNEL_TYPES[0];const[url,setUrl]=useState8("");const[fieldError,setFieldError]=useState8("");const[error,setError]=useState8("");const[busy,setBusy]=useState8(false);const inputId=useId5();const errId=useId5();const value=url.trim();const looksRight=value===""||value.startsWith("https://qyapi.weixin.qq.com/");if(canManage===false){return jsx11(NoAccess,{title:"\u6CA1\u6709\u6743\u9650\u6DFB\u52A0\u6E20\u9053",action:{label:"\u56DE\u5230\u901A\u77E5\u6E20\u9053",onClick:onCancel},children:"\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u6539\u3002"})}const submit=async()=>{if(busy)return;if(value===""){setFieldError("\u586B\u4E0A\u4F01\u4E1A\u5FAE\u4FE1\u7FA4\u673A\u5668\u4EBA\u7684\u5730\u5740");return}if(!looksRight){setFieldError(type.bad);return}setBusy(true);setFieldError("");setError("");try{const before=new Set((await api.list()).channels.map(c=>c.id));const next=await api.add(type.type,{url:value});const added=next.channels.find(c=>!before.has(c.id));onAdded(added?.id??"")}catch(e){setError(`\u6CA1\u4FDD\u5B58\uFF1A${failed(e,"\u518D\u70B9\u4E00\u6B21\u300C\u4FDD\u5B58\u300D")}`)}finally{setBusy(false)}};return jsxs11(Fragment9,{children:[jsx11(PageHead,{title:ADD,desc:"\u6E20\u9053\u7C7B\u578B\u53EA\u6709\u4F01\u4E1A\u5FAE\u4FE1\u7FA4\u673A\u5668\u4EBA\u8FD9\u4E00\u79CD\u3002\u4FDD\u5B58\u65F6\u4E0D\u4F1A\u53D1\u6D4B\u8BD5\u6D88\u606F\u3002"}),jsxs11("form",{className:"band-sf-form","aria-label":ADD,noValidate:true,onSubmit:e=>{e.preventDefault();void submit()},children:[jsxs11("p",{className:"band-sf-hint",children:["\u6E20\u9053\u7C7B\u578B\uFF1A",type.label,"\uFF08\u73B0\u5728\u53EA\u6709\u8FD9\u4E00\u79CD\uFF09"]}),jsxs11("div",{className:"band-sf-fld",children:[jsxs11("label",{htmlFor:inputId,children:[type.label,"\u7684\u5730\u5740",jsx11("span",{className:"band-sf-req",children:"\u5FC5\u586B"})]}),jsx11("input",{id:inputId,className:"field",type:"url",value:url,placeholder:type.placeholder,autoComplete:"off",disabled:busy,"aria-invalid":fieldError!==""?true:void 0,"aria-describedby":fieldError!==""?errId:void 0,onChange:e=>{setUrl(e.target.value);setFieldError("");setError("")}}),fieldError?jsx11("p",{className:"band-sf-err",id:errId,role:"alert",children:fieldError}):jsx11("p",{className:"band-sf-hint",children:type.hint})]}),jsxs11("div",{className:"band-sf-acts",children:[jsx11("button",{type:"submit",className:"btn primary",disabled:busy,children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":"\u4FDD\u5B58"}),jsx11("button",{type:"button",className:"btn ghost",disabled:busy,onClick:()=>leaveThen(onCancel),children:"\u53D6\u6D88"}),error?jsx11("p",{className:"band-sf-err",role:"alert",children:error}):null]})]})]})}function ChannelDetail({ctx,api,channel,canManage,onDeleted}){const[confirming,setConfirming]=useState8(false);const[busy,setBusy]=useState8(false);const[error,setError]=useState8("");const remove=async()=>{if(busy)return;setBusy(true);setError("");try{await api.remove(channel.id);onDeleted()}catch(e){setError(`\u6CA1\u5220\u6210\uFF1A${failed(e,"\u518D\u70B9\u4E00\u6B21\u300C\u5220\u9664\u300D")}`)}finally{setBusy(false)}};return jsxs11(Fragment9,{children:[jsx11(PageHead,{title:labelOf(channel.type),desc:DESC5}),canManage===false?jsx11("p",{className:"band-sf-muted",children:READONLY2}):null,jsx11(Facts,{items:[{key:"\u7C7B\u578B",value:labelOf(channel.type)},{key:"\u5730\u5740",value:jsx11("code",{children:channel.display})},{key:"\u914D\u7F6E\u4EBA",value:channel.createdBy},{key:"\u914D\u7F6E\u4E8E",value:shortAt(channel.createdAt)}]}),error?jsx11("p",{className:"band-sf-err",role:"alert",children:error}):null,canManage!==false?jsx11(DangerZone,{children:jsx11(DangerRow,{title:"\u5220\u9664\u8FD9\u6761\u6E20\u9053",note:"\u4E0D\u518D\u5F80\u8FD9\u4E2A\u7FA4\u63A8\u9001\uFF1B\u5730\u5740\u5F53\u573A\u5220\u6389\uFF0C\u8981\u7528\u5C31\u91CD\u65B0\u6DFB\u52A0\u3002",action:jsx11("button",{type:"button",className:"btn danger",onClick:()=>setConfirming(true),children:"\u5220\u9664"})})}):null,confirming?jsxs11(Dialog,{title:"\u5220\u9664\u8FD9\u6761\u6E20\u9053\uFF1F",onClose:()=>setConfirming(false),actions:jsxs11(Fragment9,{children:[jsx11("button",{type:"button",className:"btn",onClick:()=>setConfirming(false),children:"\u53D6\u6D88"}),jsx11("button",{type:"button",className:"btn primary",disabled:busy,onClick:()=>void remove(),children:busy?"\u6B63\u5728\u5220\u9664\u2026":"\u5220\u9664"})]}),children:[jsxs11("ul",{children:[jsx11("li",{children:"\u4E0D\u518D\u5F80\u8FD9\u4E2A\u7FA4\u63A8\u9001"}),jsx11("li",{children:"\u5730\u5740\u5F53\u573A\u5220\u6389\uFF0C\u8981\u7528\u5C31\u91CD\u65B0\u6DFB\u52A0"})]}),jsx11("p",{children:"\u4E0D\u80FD\u6062\u590D\u3002"})]}):null]})}function shortAt(iso){const d=new Date(iso);const hm=`${String(d.getHours()).padStart(2,"0")}:${String(d.getMinutes()).padStart(2,"0")}`;const now=new Date;const sameDay=d.getFullYear()===now.getFullYear()&&d.getMonth()===now.getMonth()&&d.getDate()===now.getDate();return sameDay?hm:`${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")} ${hm}`}var SELF9="@kanyun-ai-infra/band-settings";var PAGE5=`${SELF9}/platform-tokens`;var LIST_HREF3="/settings/tokens";var NEW_ITEM3="new";var DESC6="\u4F9B\u547D\u4EE4\u884C\u548C\u5DE5\u574A CI \u4EE5\u4F60\u7684\u8EAB\u4EFD\u53D1\u5E03\u5DE5\u574A\u3002";var GRANTS={publish:{label:"\u53D1\u5E03\u5DE5\u574A",scopes:["workshops:publish"],hint:"\u7ED9 band publish \u7528\uFF1A\u628A\u5DE5\u574A\u4ED3\u5E93\u7684\u63D0\u4EA4\u53D1\u6210\u65B0\u7248\u672C\u3002"},preview:{label:"\u9884\u89C8\u5206\u652F",scopes:["workshops:preview"],hint:"\u7ED9 band preview \u7528\uFF1A\u628A\u5DE5\u574A\u4ED3\u5E93\u7684\u5206\u652F\u5EFA\u6210\u9884\u89C8\uFF0C\u4E0D\u53D1\u65B0\u7248\u672C\u3001\u4E0D\u5F71\u54CD\u9879\u76EE\u3002"},both:{label:"\u53D1\u5E03\u4E0E\u9884\u89C8",scopes:["workshops:publish","workshops:preview"],hint:"\u540C\u4E00\u4E2A token \u53EF\u4EE5 band publish\uFF0C\u4E5F\u53EF\u4EE5 band preview\u3002"}};function scopeLabel(scopes){const names=[scopes.includes("workshops:publish")?"\u53D1\u5E03\u5DE5\u574A":"",scopes.includes("workshops:preview")?"\u9884\u89C8\u5206\u652F":""].filter(Boolean);return names.length?names.join("\u3001"):"\u65E0\u64CD\u4F5C\u6743\u9650"}var SCOPES="\u4F60\u5F53\u524D\u62E5\u6709\u7BA1\u7406\u6743\u9650\u7684\u5DE5\u574A\u3002\u53EA\u80FD\u53D1\u5E03\u5DE5\u574A\u6216\u5EFA\u9884\u89C8\uFF08\u7B7E\u53D1\u65F6\u9009\uFF09\uFF1B\u79FB\u51FA\u5DE5\u574A\u6216\u5931\u53BB\u7BA1\u7406\u6743\u9650\u540E\u7ACB\u5373\u5931\u6548\u3002";var platformTokensPage=reactMount7(ctx=>jsx12(PlatformTokens,{ctx}));function PlatformTokens({ctx}){const route=useRoute5(ctx);const api=ctx.app.data.write?.platformTokens;const[data,setData]=useState9(null);const[readError,setReadError]=useState9(null);const[forbidden,setForbidden]=useState9(false);const[reload,setReload]=useState9(0);const[showRevoked,setShowRevoked]=useState9(false);const[notice]=useCrossPageNotice("tokens");const item=route.params.item;useEffect9(()=>{let active=true;setReadError(null);setForbidden(false);if(!api){setReadError("\u5F53\u524D\u73AF\u5883\u672A\u914D\u7F6E\u5E73\u53F0 token \u7BA1\u7406");return}api.list().then(value=>{if(active)setData(value)},e=>{if(!active)return;setForbidden(isForbidden8(e));setReadError(isNetworkLost(e)?`${NETWORK_LOST}\uFF0C\u70B9\u91CD\u8BD5`:"\u670D\u52A1\u6682\u4E0D\u53EF\u7528")});return()=>{active=false}},[api,reload]);const go=next=>ctx.app.navigate({page:PAGE5,...next?{params:{item:next}}:{}});if(!api){return jsxs12(PersonalFrame,{ctx,current:"tokens",children:[jsx12(PageHead,{title:"\u5E73\u53F0 token",desc:DESC6}),jsx12(Empty,{children:"\u5F53\u524D\u73AF\u5883\u672A\u914D\u7F6E\u5E73\u53F0 token \u7BA1\u7406\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002"})]})}if(forbidden){return jsxs12(PersonalFrame,{ctx,current:"tokens",children:[jsx12(PageHead,{title:"\u5E73\u53F0 token",desc:DESC6}),jsx12(NoAccess,{title:"\u8FD9\u4E2A\u767B\u5F55\u65B9\u5F0F\u4E0D\u80FD\u7BA1\u7406\u5E73\u53F0 token",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u5E73\u53F0 token \u8981\u7528\u516C\u53F8\u7EDF\u4E00\u767B\u5F55\u6253\u5F00 Band \u624D\u80FD\u7B7E\u53D1\u548C\u64A4\u9500\u3002\u8FD9\u4E2A\u767B\u5F55\u65B9\u5F0F\u4E0D\u884C\uFF0C\u6362\u7EDF\u4E00\u767B\u5F55\u540E\u518D\u6765\u3002"})]})}if(readError!==null){return jsxs12(PersonalFrame,{ctx,current:"tokens",children:[jsx12(PageHead,{title:"\u5E73\u53F0 token",desc:DESC6}),jsxs12(ReadError,{retry:()=>setReload(n=>n+1),children:["\u5E73\u53F0 token \u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]})]})}if(data===null){return jsxs12(PersonalFrame,{ctx,current:"tokens",children:[jsx12(PageHead,{title:"\u5E73\u53F0 token",desc:DESC6,action:jsx12("button",{type:"button",className:"btn primary",disabled:true,children:"\u7B7E\u53D1 token"})}),jsx12(Loading,{text:"\u6B63\u5728\u8BFB\u53D6\u5E73\u53F0 token\u2026"})]})}const revoked=data.items.filter(r=>r.revokedAt);const shown=showRevoked?data.items:data.items.filter(r=>!r.revokedAt);if(item===NEW_ITEM3){return jsxs12(PersonalFrame,{ctx,current:"tokens",back:"list",children:[jsx12(Back,{ctx,label:"\u5E73\u53F0 token",page:PAGE5,href:LIST_HREF3}),jsx12(IssueForm,{api,configured:data.configured,onCancel:()=>go(),onClosed:()=>{setReload(n=>n+1);go()}})]})}const current=item?data.items.find(r=>r.id===item):void 0;if(current){return jsxs12(PersonalFrame,{ctx,current:"tokens",back:"list",children:[jsx12(Back,{ctx,label:"\u5E73\u53F0 token",page:PAGE5,href:LIST_HREF3}),jsx12(TokenDetail,{api,token:current,onRevoked:()=>{markNotice("tokens","\u5DF2\u64A4\u9500\uFF0C\u540E\u7EED\u8BF7\u6C42\u7ACB\u5373\u5931\u6548");setReload(n=>n+1);go()}}),jsx12(Notice,{text:notice})]})}const issue=jsx12("button",{type:"button",className:"btn primary",onClick:()=>go(NEW_ITEM3),children:"\u7B7E\u53D1 token"});return jsxs12(PersonalFrame,{ctx,current:"tokens",children:[jsx12(PageHead,{title:"\u5E73\u53F0 token",desc:DESC6,action:shown.length>0?issue:void 0}),revoked.length>0&&jsxs12("label",{className:"choice",children:[jsx12("input",{type:"checkbox",className:"checkbox",checked:showRevoked,onChange:e=>setShowRevoked(e.target.checked)}),"\u663E\u793A\u5DF2\u64A4\u9500\u7684\uFF08",revoked.length,"\uFF09"]}),!data.configured&&jsx12("p",{className:"band-sf-banner",children:"\u5E73\u53F0 token \u5C1A\u672A\u914D\u7F6E\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002\u5DF2\u6709 token \u4ECD\u53EF\u64A4\u9500\u3002"}),shown.length===0?jsx12(Empty,{action:issue,children:showRevoked?"\u6CA1\u6709 token\u3002\u9700\u8981\u4ECE\u547D\u4EE4\u884C\u53D1\u5E03\u5DE5\u574A\u65F6\uFF0C\u5728\u8FD9\u91CC\u7B7E\u53D1\u3002":"\u8FD8\u6CA1\u6709\u6709\u6548\u7684 token\u3002\u9700\u8981\u4ECE\u547D\u4EE4\u884C\u53D1\u5E03\u5DE5\u574A\u65F6\uFF0C\u5728\u8FD9\u91CC\u7B7E\u53D1\u3002"}):jsx12(Rows,{label:"\u6211\u7684\u5E73\u53F0 token",children:shown.map(r=>jsx12(Row,{title:r.name,tags:r.revokedAt?jsx12("span",{className:"chip plain",children:"\u5DF2\u64A4\u9500"}):void 0,meta:[`\u6743\u9650\uFF1A${scopeLabel(r.scopes)}`,`${day(r.expiresAt)} \u5230\u671F`,expired(r)?"\u5DF2\u8FC7\u671F":r.lastUsedAt?`${day(r.lastUsedAt)} \u7528\u8FC7`:"\u8FD8\u6CA1\u7528\u8FC7"],href:`${LIST_HREF3}/${encodeURIComponent(r.id)}`,onOpen:()=>go(r.id)},r.id))}),jsxs12("p",{className:"band-sf-muted",children:["\u4F5C\u7528\u8303\u56F4\uFF1A",SCOPES]}),jsx12(Notice,{text:notice})]})}function IssueForm({api,configured,onCancel,onClosed}){const[name,setName]=useState9("");const[days,setDays]=useState9("30");const[grant,setGrant]=useState9("publish");const[busy,setBusy]=useState9(false);const[secret,setSecret]=useState9("");const[notice,flash]=useSavedNote();const[error,setError]=useState9("");const alive2=useRef6(true);useEffect9(()=>{alive2.current=true;return()=>{alive2.current=false}},[]);const issue=async()=>{if(busy||secret)return;if(!name.trim()){setError("\u8BF7\u586B\u5199 token \u540D\u79F0");return}setBusy(true);setError("");try{const result=await api.issue({name:name.trim(),scopes:GRANTS[grant].scopes,targetProjectIds:null,expiresAt:new Date(Date.now()+Number(days)*864e5).toISOString()});if(!alive2.current)return;setSecret(result.token);setName("")}catch{if(alive2.current)setError("\u7B7E\u53D1\u5931\u8D25\uFF0C\u8BF7\u786E\u8BA4\u5217\u8868\u540E\u518D\u8BD5\uFF1B\u82E5\u5DF2\u751F\u6210\u4F46\u672A\u62FF\u5230 token\uFF0C\u8BF7\u5148\u64A4\u9500\u5B83")}finally{if(alive2.current)setBusy(false)}};const copy=async()=>{try{await navigator.clipboard.writeText(secret);if(alive2.current)flash("\u5DF2\u590D\u5236\uFF0C\u8BF7\u5B58\u5165\u4F60\u7684\u51ED\u636E\u7BA1\u7406\u5668")}catch{if(alive2.current)setError("\u590D\u5236\u5931\u8D25\uFF0C\u8BF7\u5141\u8BB8\u526A\u8D34\u677F\u8BBF\u95EE\u540E\u518D\u70B9\u300C\u590D\u5236\u300D")}};if(secret){return jsxs12(Fragment10,{children:[jsx12(PageHead,{title:"\u8BF7\u4FDD\u5B58\u65B0 token",desc:"\u53EA\u663E\u793A\u8FD9\u4E00\u6B21\u3002\u5173\u95ED\u540E\u65E0\u6CD5\u627E\u56DE\uFF0C\u8BF7\u590D\u5236\u5230\u4F60\u7684\u51ED\u636E\u7BA1\u7406\u5668\u3002"}),jsxs12("div",{className:"band-sf-reveal",children:[jsx12("input",{className:"field",type:"password",value:secret,readOnly:true,autoComplete:"off",spellCheck:false,"aria-label":"\u65B0 token"}),jsx12("button",{type:"button",className:"btn primary",onClick:()=>void copy(),children:"\u590D\u5236"})]}),jsx12("div",{className:"band-sf-acts",children:jsx12("button",{type:"button",className:"btn",onClick:onClosed,children:"\u6211\u5DF2\u4FDD\u5B58"})}),jsx12(Notice,{text:notice}),error&&jsx12("p",{role:"alert",className:"band-sf-err",children:error})]})}return jsxs12(Fragment10,{children:[jsx12(PageHead,{title:"\u7B7E\u53D1 token",desc:"\u7B7E\u53D1\u4EE5\u540E\u53EA\u663E\u793A\u4E00\u6B21\u660E\u6587\uFF1B\u9875\u9762\u4E0D\u518D\u6709\u627E\u56DE\u7684\u5165\u53E3\u3002"}),jsxs12("form",{className:"band-sf-form","aria-label":"\u7B7E\u53D1 token",onSubmit:e=>{e.preventDefault();void issue()},children:[jsxs12("div",{className:"band-sf-fld",children:[jsxs12("label",{htmlFor:"band-token-name",children:["\u540D\u79F0 ",jsx12("span",{className:"band-sf-req",children:"\u5FC5\u586B"})]}),jsx12("input",{id:"band-token-name",className:"field",value:name,maxLength:80,placeholder:"\u4F8B\u5982\uFF1A\u6559\u5177\u5DE5\u574A\u53D1\u5E03 CI",disabled:busy||!configured,"aria-invalid":Boolean(error&&!name.trim()),onChange:e=>setName(e.target.value)})]}),jsxs12("div",{className:"band-sf-fld",children:[jsx12("label",{htmlFor:"band-token-days",children:"\u6709\u6548\u671F"}),jsxs12("select",{id:"band-token-days",className:"field",value:days,disabled:busy||!configured,onChange:e=>setDays(e.target.value),children:[jsx12("option",{value:"7",children:"7 \u5929"}),jsx12("option",{value:"30",children:"30 \u5929"}),jsx12("option",{value:"90",children:"90 \u5929"})]})]}),jsxs12("div",{className:"band-sf-fld",children:[jsx12("label",{htmlFor:"band-token-grant",children:"\u6743\u9650"}),jsx12("select",{id:"band-token-grant",className:"field",value:grant,disabled:busy||!configured,onChange:e=>setGrant(e.target.value),children:Object.keys(GRANTS).map(k=>jsx12("option",{value:k,children:GRANTS[k].label},k))})]}),jsx12("p",{className:"band-sf-muted",children:GRANTS[grant].hint}),jsxs12("div",{className:"band-sf-acts",children:[jsx12("button",{type:"submit",className:"btn primary",disabled:busy||!configured,children:busy?"\u6B63\u5728\u5904\u7406\u2026":"\u7B7E\u53D1"}),jsx12("button",{type:"button",className:"btn ghost",onClick:()=>leaveThen(onCancel),children:"\u53D6\u6D88"})]}),error&&jsx12("p",{role:"alert",className:"band-sf-err",children:error})]})]})}function TokenDetail({api,token,onRevoked}){const[confirm,setConfirm]=useState9(false);const[busy,setBusy]=useState9(false);const[error,setError]=useState9("");const revoke=async()=>{if(busy)return;setBusy(true);setError("");try{await api.revoke(token.id);onRevoked()}catch{setError("\u64A4\u9500\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u5217\u8868\u540E\u91CD\u8BD5");setBusy(false)}};return jsxs12(Fragment10,{children:[jsx12(PageHead,{title:token.name,desc:"\u4E00\u4EFD\u5E73\u53F0 token\u3002\u660E\u6587\u53EA\u5728\u7B7E\u53D1\u90A3\u4E00\u6B21\u663E\u793A\uFF0C\u8FD9\u91CC\u770B\u4E0D\u5230\u3002"}),jsx12(Facts,{items:[{key:"\u6743\u9650",value:scopeLabel(token.scopes)},{key:"\u72B6\u6001",value:token.revokedAt?"\u5DF2\u64A4\u9500":expired(token)?"\u5DF2\u8FC7\u671F":"\u6709\u6548"},{key:"\u521B\u5EFA",value:when3(token.createdAt)},{key:"\u5230\u671F",value:day(token.expiresAt)},{key:"\u6700\u8FD1\u4F7F\u7528",value:token.lastUsedAt?when3(token.lastUsedAt):"\u8FD8\u6CA1\u7528\u8FC7"}]}),jsx12(Section,{title:"\u4F5C\u7528\u8303\u56F4",children:jsx12("p",{children:SCOPES})}),!token.revokedAt&&jsx12(DangerZone,{children:jsx12(DangerRow,{title:"\u64A4\u9500\u8FD9\u4E2A token",note:"\u7528\u5B83\u7684\u547D\u4EE4\u884C\u548C CI \u7ACB\u523B\u5931\u6548\uFF0C\u4E0D\u80FD\u6062\u590D\u3002\u8981\u7528\u5C31\u91CD\u65B0\u7B7E\u53D1\u3002",action:jsx12("button",{type:"button",className:"btn danger",disabled:busy,onClick:()=>setConfirm(true),children:"\u64A4\u9500"})})}),confirm&&jsxs12("div",{className:"band-sf-confirm",role:"group","aria-label":"\u786E\u8BA4\u64A4\u9500",children:[jsx12("span",{children:"\u64A4\u9500\u540E\u65E0\u6CD5\u6062\u590D\uFF0C\u786E\u5B9A\u64A4\u9500\uFF1F"}),jsx12("button",{type:"button",className:"btn",disabled:busy,onClick:()=>void revoke(),children:busy?"\u6B63\u5728\u64A4\u9500\u2026":"\u786E\u8BA4\u64A4\u9500"}),jsx12("button",{type:"button",className:"btn ghost",disabled:busy,onClick:()=>setConfirm(false),children:"\u53D6\u6D88"})]}),error&&jsx12("p",{role:"alert",className:"band-sf-err",children:error})]})}var pad=n=>String(n).padStart(2,"0");function day(value){const d=new Date(value);return`${pad(d.getMonth()+1)}-${pad(d.getDate())}`}function when3(value){const d=new Date(value);return`${day(value)} ${pad(d.getHours())}:${pad(d.getMinutes())}`}function expired(r){return Date.parse(r.expiresAt)<=Date.now()}var PICK="project-agent-model-pick";function presetName(id,presets){if(id===CUSTOM_MODEL_PRESET_ID2)return"\u81EA\u5B9A\u4E49";return presets.find(p=>p.id===id)?.label??id}var RAW_NAMES={preset:id=>id,agent:()=>void 0};function AgentModelRows({ctx,agents,policy,teamKey,canManage,provisionConsent,mine,onChanged,names=RAW_NAMES}){const api=ctx.app.data.write?.projectAgentModels;if(policy==="off"||!api)return null;if(agents.length===0)return jsx13(Empty,{children:"\u8FD9\u4E2A\u9879\u76EE\u7684\u5DE5\u574A\u7248\u672C\u91CC\u6CA1\u6709 Agent\u3002"});const missing=agents.filter(a=>a.selection===null).length;return jsxs13(Fragment11,{children:[policy==="require"&&missing>0?jsxs13("p",{className:"band-sf-banner is-warn",children:[jsx13("span",{className:"glyph needs","aria-hidden":"true"}),jsx13("span",{children:provisionConsent?.required?MODEL_PROJECT_CONSENT_PENDING:jsxs13(Fragment11,{children:["\u8FD9\u4E2A\u5DE5\u574A\u8981\u6C42\u6BCF\u4E2A agent \u7528\u6210\u5458\u81EA\u5DF1\u7684\u6A21\u578B\u914D\u7F6E\uFF0C\u73B0\u5728\u6709 ",missing," \u4E2A\u8FD8\u6CA1\u9009\u3002\u6CA1\u9009\u7684 agent \u4E0B\u4E00\u6B21\u6D3E\u53D1\u4F1A\u81EA\u52A8\u7ED1\u5EFA\u9879\u76EE\u4EBA\u7684\u9ED8\u8BA4\u914D\u7F6E\uFF1B\u521B\u5EFA\u4EBA\u6CA1\u6709\u9ED8\u8BA4\u914D\u7F6E\u6216\u5DF2\u4E0D\u5728\u9879\u76EE\u91CC\u65F6\uFF0C\u5B83\u4EEC\u7684\u56DE\u5408\u4E0D\u4F1A\u6D3E\u53D1\u3002"]})})]}):null,jsx13(Rows,{label:"\u6BCF\u4E2A Agent \u7528\u54EA\u4EFD\u6A21\u578B\u914D\u7F6E",children:agents.map(a=>jsx13(AgentModelRow,{ctx,agent:a,policy,teamKey,canManage,consentRequired:provisionConsent?.required===true,mine,onChanged,names},a.agentId))})]})}function AgentModelRow({ctx,agent,policy,teamKey,canManage,consentRequired,mine,onChanged,names}){const api=ctx.app.data.write?.projectAgentModels;const[busy,setBusy]=useState10(false);const[error,setError]=useState10(null);const[pending2,setPending]=useState10(null);const[clearing,setClearing]=useState10(false);const sel=agent.selection;const failure=agent.lastModelFailure??null;const label=agent.label??names.agent(agent.agentId)??agent.agentId;const iMayChange=canManage||sel===null||sel.mine;const run=async fn=>{if(busy)return;setBusy(true);setError(null);try{await fn();onChanged()}catch(e){setError(e instanceof Error?e.message:String(e))}finally{setBusy(false)}};const confirmPick=credentialId=>run(async()=>{await api?.select(ctx.project.id,agent.agentId,{credentialId,acknowledged:true});setPending(null)});return jsxs13("li",{className:"band-sf-row",children:[jsx13("div",{className:"band-sf-row-t",children:jsx13("b",{children:label})}),jsx13("div",{className:"band-sf-row-m",children:jsx13("span",{children:selectionText(sel,policy,teamKey,mine.length>0,consentRequired,names.preset)})}),iMayChange?jsxs13("div",{className:"band-sf-acts",children:[jsxs13("label",{className:"sr-only",htmlFor:`${PICK}-${agent.agentId}`,children:["\u6362 ",label," \u7684\u6A21\u578B\u914D\u7F6E"]}),jsxs13("select",{id:`${PICK}-${agent.agentId}`,className:"field",value:sel?sel.credentialId:"",disabled:busy||mine.length===0,onChange:e=>{const v=e.target.value;if(v===""){setPending(null);if(!sel)return;if(sel.mine)void run(()=>api?.clear(ctx.project.id,agent.agentId));else setClearing(true);return}if(v===sel?.credentialId)return;setPending(v)},children:[policy==="require"||!teamKey?jsx13("option",{value:"",disabled:true,children:"\u8FD8\u6CA1\u9009"}):jsx13("option",{value:"",children:"\u5DE5\u574A\u7684\u56E2\u961F key"}),mine.map(c=>jsxs13("option",{value:c.id,children:["\u6211\u7684 \xB7 ",c.name,c.last4?` \xB7\xB7\xB7\xB7${c.last4}`:` \xB7 ${names.preset(c.preset)}`]},c.id)),sel&&!sel.mine?jsxs13("option",{value:sel.credentialId,disabled:true,children:[sel.ownerKind==="project"?"\u9879\u76EE\u4E0A\u914D\u7684":sel.ownerName," \xB7 ",sel.name,sel.last4?` \xB7\xB7\xB7\xB7${sel.last4}`:` \xB7 ${names.preset(sel.preset)}`,"\uFF08\u53EA\u8BFB\uFF0C\u4E0D\u80FD\u5728\u8FD9\u91CC\u6539\u9009\uFF09"]}):null]}),pending2?jsxs13("div",{className:"pop",role:"alertdialog","aria-label":"\u786E\u8BA4\u9009\u7528\u8FD9\u4EFD\u6A21\u578B\u914D\u7F6E",children:[jsx13("p",{children:"\u8FD9\u4E2A\u9879\u76EE\u91CC\u6240\u6709\u4EBA\u53D1\u8D77\u7684\u56DE\u5408\u90FD\u4F1A\u7528\u4F60\u7684\u6A21\u578B\u914D\u7F6E\uFF0C\u82B1\u8D39\u8BB0\u5728\u4F60\u7684 key \u4E0A\u3002"}),jsxs13("div",{className:"band-sf-acts",children:[jsx13("button",{type:"button",className:"btn ghost",onClick:()=>setPending(null),children:"\u53D6\u6D88"}),jsx13("button",{type:"button",className:"btn primary",disabled:busy,onClick:()=>void confirmPick(pending2),children:"\u786E\u8BA4\u9009\u7528"})]})]}):null,sel?jsx13("button",{type:"button",className:"btn ghost",disabled:busy,onClick:()=>sel.mine?void run(()=>api?.clear(ctx.project.id,agent.agentId)):setClearing(true),children:"\u6E05\u6389\u8FD9\u4EFD\u9009\u7528"}):null]}):null,clearing&&sel?jsx13(Dialog,{title:clearTitle(sel),onClose:()=>setClearing(false),actions:jsxs13(Fragment11,{children:[jsx13("button",{type:"button",className:"btn",onClick:()=>setClearing(false),children:"\u53D6\u6D88"}),jsx13("button",{type:"button",className:"btn primary",disabled:busy,onClick:()=>{setClearing(false);void run(()=>api?.clear(ctx.project.id,agent.agentId))},children:"\u6E05\u9664\u9009\u7528"})]}),children:jsx13("p",{children:clearBody(sel,label,policy,teamKey)})}):null,failure?jsxs13("p",{className:"band-sf-err band-sf-fail","data-reason":failure.reason,children:[jsx13("span",{className:"glyph failed","aria-hidden":"true"}),jsx13("span",{children:failure.message})]}):null,error?jsx13("p",{className:"band-sf-err",role:"alert",children:error}):null]})}function selectionText(sel,policy="require",teamKey=false,hasMine=true,consentRequired=false,preset=id=>id){if(!sel){if(consentRequired)return`${MODEL_PROJECT_CONSENT_PENDING} \u4E5F\u53EF\u4EE5\u5728\u8FD9\u4E00\u884C\u660E\u786E\u9009\u7528\u4F60\u81EA\u5DF1\u7684\u6A21\u578B\u914D\u7F6E\u3002`;if(policy==="require")return hasMine?"\u8FD8\u6CA1\u6709\u9009\u7528\uFF1A\u5728\u8FD9\u4E00\u884C\u9009\u4E00\u4EFD\u4F60\u7684\u6A21\u578B\u914D\u7F6E\u3002\u4E0D\u9009\u7684\u8BDD\uFF0C\u4E0B\u4E00\u6B21\u6D3E\u53D1\u4F1A\u5148\u81EA\u52A8\u7ED1\u5EFA\u9879\u76EE\u4EBA\u7684\u9ED8\u8BA4\u914D\u7F6E\uFF1B\u521B\u5EFA\u4EBA\u4E5F\u6CA1\u6709\u9ED8\u8BA4\u914D\u7F6E\u6216\u5DF2\u4E0D\u5728\u9879\u76EE\u91CC\u65F6\uFF0C\u8FD9\u4E2A Agent \u7684\u56DE\u5408\u4E0D\u4F1A\u6D3E\u53D1\u3002":"\u8FD8\u6CA1\u6709\u9009\u7528\uFF1A\u4F60\u540D\u4E0B\u8FD8\u6CA1\u6709\u6A21\u578B\u914D\u7F6E\uFF0C\u5230\u4E2A\u4EBA\u8BBE\u7F6E\u6DFB\u52A0\u4E00\u4EFD\uFF0C\u56DE\u6765\u5C31\u80FD\u5728\u8FD9\u4E00\u884C\u9009\u3002";if(teamKey)return"\u8FD8\u6CA1\u6709\u9009\u7528\uFF1A\u56DE\u5408\u7528\u8FD9\u4E2A\u5DE5\u574A\u7684\u56E2\u961F key\u3002\u9009\u4E00\u4EFD\u81EA\u5DF1\u7684\uFF0C\u5C31\u6362\u6210\u82B1\u4F60\u7684 key\u3002";return"\u8FD8\u6CA1\u6709\u9009\u7528\uFF0C\u8FD9\u4E2A\u5DE5\u574A\u4E5F\u6CA1\u6709\u56E2\u961F key\uFF1A\u56DE\u5408\u4E0D\u4F1A\u6D3E\u53D1\uFF0C\u5148\u9009\u4E00\u4EFD\u6A21\u578B\u914D\u7F6E\u3002"}const who=sel.mine?"\u4F60":sel.ownerName;const tail=sel.last4?` \xB7 \u2026${sel.last4}`:"";const cost=sel.mine?"\u82B1\u8D39\u8BB0\u5728\u4F60\u7684 key \u4E0A":`\u82B1\u8D39\u8BB0\u5728 ${sel.ownerName} \u7684 key \u4E0A`;return`${who}\u540D\u4E0B\u7684\u300C${sel.name}\u300D\xB7 ${preset(sel.preset)}${tail}\uFF0C${cost}`}function clearTitle(sel){return sel.ownerKind==="user"?`\u6E05\u9664\u300C${sel.ownerName}\u300D\u7684\u9009\u7528\uFF1F`:`\u6E05\u9664\u300C${sel.name}\u300D\u7684\u9009\u7528\uFF1F`}function clearBody(sel,agent,policy,teamKey){const owner=sel.ownerKind==="user"?sel.ownerName:null;const whose=owner===null?"\u9879\u76EE\u4E0A\u914D\u7684":`${owner}\u7684`;const back=policy==="require"?"\u6E05\u9664\u540E\u5B83\u56DE\u5230\u300C\u8FD8\u6CA1\u9009\u300D\uFF0C\u4E0B\u4E00\u6B21\u6D3E\u53D1\u81EA\u52A8\u7ED1\u5EFA\u9879\u76EE\u4EBA\u7684\u9ED8\u8BA4\u4E2A\u4EBA\u914D\u7F6E\uFF0C\u6CA1\u6709\u914D\u7F6E\u5219\u4E0D\u6D3E\u53D1":teamKey?"\u6E05\u9664\u540E\u5B83\u56DE\u5230\u5DE5\u574A\u7684\u56E2\u961F key":"\u6E05\u9664\u540E\u5B83\u56DE\u5230\u300C\u8FD8\u6CA1\u9009\u300D\uFF0C\u8FD9\u4E2A\u5DE5\u574A\u4E5F\u6CA1\u6709\u56E2\u961F key\uFF1A\u8FD9\u4E2A Agent \u7684\u56DE\u5408\u4E0D\u4F1A\u6D3E\u53D1";const intact=owner===null?"\u9879\u76EE\u4E0A\u914D\u7684\u8FD9\u4EFD":`${owner}\u7684\u914D\u7F6E`;return`${agent} \u73B0\u5728\u7528${whose}\u300C${sel.name}\u300D\u3002${back}\uFF1B${intact}\u4E0D\u53D7\u5F71\u54CD\u3002`}function useAgentModels(ctx){const api=ctx.app.data.write?.projectAgentModels;return useCtxData2(ctx,async()=>api?api.list(ctx.project.id):null,[ctx.project.id,api],["turn.*","change.*"])}function mineHint(mine){return mine.length===0?"\u4F60\u540D\u4E0B\u8FD8\u6CA1\u6709\u6A21\u578B\u914D\u7F6E\uFF1A\u5230\u4E2A\u4EBA\u8BBE\u7F6E\u6DFB\u52A0\u4E00\u4EFD\uFF0C\u56DE\u6765\u5C31\u80FD\u9009\u3002":"\u9009\u4E86\u5C31\u9489\u4F4F\uFF0C\u4E0D\u8DDF\u7740\u4F60\u7684\u9ED8\u8BA4\u914D\u7F6E\u53D8\u3002\u8FD9\u4E2A\u9879\u76EE\u91CC\u6240\u6709\u4EBA\u53D1\u8D77\u7684\u56DE\u5408\u90FD\u4F1A\u82B1\u5B83\u3002"}var DESC7="\u8FD9\u4E2A\u9879\u76EE\u7684\u56DE\u5408\u7528\u54EA\u628A key\u3001\u82B1\u8D39\u8BB0\u5728\u8C01\u3002\u914D\u7F6E\u672C\u8EAB\u5728\u521B\u5EFA\u4EBA\u7684\u4E2A\u4EBA\u8BBE\u7F6E\u91CC\u6539\u3002";function ProjectModelsSection({ctx}){const members=useMembers(ctx);const net=ctx.app.data.write?.netCredentials;const mine=ctx.app.data.write?.modelCredentials;const loaded=useCtxData3(ctx,async()=>{try{const[turn2,own,netList]=await Promise.all([ctx.turns.state(),mine?mine.list():Promise.resolve(null),net?net.listProject(ctx.project.id):Promise.resolve(null)]);const used=[];for(const c of own?.credentials??[]){for(const u of c.usedBy){if(u.projectId!==ctx.project.id)continue;used.push({agent:u.agentId,config:c.name})}}const myConfigs2=(own?.credentials??[]).map(c=>({id:c.id,name:c.name,preset:c.preset,last4:c.last4}));const presets2=(own?.presets??[]).map(p=>({id:p.id,label:p.label}));return{kind:"ok",turn:turn2,used,net:netList,myConfigs:myConfigs2,presets:presets2}}catch(e){if(isForbidden9(e))return{kind:"forbidden"};throw e}},[ctx.project.id,net,mine],["turn.*","change.*"]);const agentModels=useAgentModels(ctx);const models=agentModels.data??null;const[confirming,setConfirming]=useState11(false);const[consentResult,setConsentResult]=useState11(null);const consent=models?.provisionConsent;const confirm=ctx.app.data.write?.projectAgentModels?.confirmProvisionUse;const myConfigs=loaded.data?.kind==="ok"?loaded.data.myConfigs:[];const presets=loaded.data?.kind==="ok"?loaded.data.presets:[];const names={preset:id=>presetName(id,presets),agent:id=>members.find(m=>m.actor.id===id)?.displayName};const error=loaded.error;const data=loaded.data;const read=data?.kind==="ok"?data:null;const turn=read?.turn;const source=turn?.current?turn.current.modelSource:turn?.last?.modelSource;const running=turn?.current??null;const selections=read?.used??[];if(data?.kind==="forbidden"){return jsx14(NoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u6A21\u578B\u4E0E\u51ED\u636E",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-project/project",params:{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{}}})},children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"})}if(error&&!data){return jsxs14(ErrorNote6,{retry:loaded.reload,children:["\u6A21\u578B\u4E0E\u51ED\u636E\u6CA1\u8BFB\u51FA\u6765\uFF1A",failedBecause8(error,"\u70B9\u91CD\u8BD5")]})}return jsxs14(Fragment12,{children:[jsx14(PageHead,{title:"\u6A21\u578B\u4E0E\u51ED\u636E",desc:DESC7}),consent?.required&&jsxs14(Section,{title:"ModelGate \u4E2A\u4EBA\u989D\u5EA6",children:[jsx14("p",{children:"\u8FD9\u4E2A\u9879\u76EE\u91CC\u6240\u6709\u4EBA\u53D1\u8D77\u7684\u56DE\u5408\u90FD\u82B1\u9879\u76EE\u521B\u5EFA\u4EBA\u7684 ModelGate \u4E2A\u4EBA\u989D\u5EA6\u3002"}),consent.canConfirm&&confirm?jsx14("button",{type:"button",className:"btn primary",disabled:confirming,onClick:()=>{setConfirming(true);setConsentResult(null);confirm(ctx.project.id).then(()=>{setConsentResult("\u5DF2\u786E\u8BA4\uFF0C\u8BF7\u9879\u76EE\u6210\u5458\u91CD\u65B0\u53D1\u9001\u56DE\u5408\u3002");agentModels.reload()}).catch(e=>setConsentResult(failedBecause8(e,"\u786E\u8BA4\u6CA1\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5"))).finally(()=>setConfirming(false))},children:"\u786E\u8BA4\u8FD9\u4E2A\u9879\u76EE\u4F7F\u7528\u6211\u7684\u4E2A\u4EBA\u989D\u5EA6"}):jsx14("p",{children:"\u9879\u76EE\u521B\u5EFA\u4EBA\u5C1A\u672A\u786E\u8BA4\uFF0C\u786E\u8BA4\u540E\u8BF7\u91CD\u65B0\u53D1\u9001\u56DE\u5408\u3002"})]}),consentResult&&jsx14("output",{children:consentResult}),!read?jsx14(Loading,{text:"\u6B63\u5728\u8BFB\u53D6\u6A21\u578B\u4E0E\u51ED\u636E\u2026"}):jsxs14(Fragment12,{children:[jsxs14(Section,{title:"\u56DE\u5408\u7528\u7684 key",children:[jsxs14("dl",{className:"band-sf-facts",children:[jsxs14("div",{className:"band-sf-fact",children:[jsx14("dt",{children:"\u56DE\u5408"}),jsx14("dd",{children:turnText(running,turn?.last??null,members)})]}),jsxs14("div",{className:"band-sf-fact",children:[jsx14("dt",{children:"\u7528\u7684 key"}),jsx14("dd",{children:source?sourceText(source):noSourceText(turn)})]})]}),selections.length>0&&models===null?jsx14(Rows,{label:"\u4F60\u540D\u4E0B\u7684\u914D\u7F6E\u5728\u8FD9\u91CC\u88AB\u54EA\u4E9B Agent \u7528",children:selections.map(s=>jsx14(Row,{title:memberName(members,s.agent),meta:[`\u4F60\u540D\u4E0B\u7684\u914D\u7F6E\u300C${s.config}\u300D`,"\u82B1\u8D39\u8BB0\u5728\u4F60\u7684 key \u4E0A"]},`${s.agent}:${s.config}`))}):null,jsx14("p",{className:"band-sf-muted",children:spendNote(models)}),models&&models.policy!=="off"?jsxs14(Fragment12,{children:[jsx14(AgentModelRows,{ctx,agents:models.agents,policy:models.policy,teamKey:models.teamKey,canManage:models.canManage,provisionConsent:models.provisionConsent,mine:myConfigs,onChanged:agentModels.reload,names}),jsx14("p",{className:"band-sf-muted",children:mineHint(myConfigs)})]}):null]}),jsxs14(Section,{title:"\u7F51\u7EDC\u51ED\u636E",children:[jsx14("p",{className:"band-sf-muted",children:"\u9879\u76EE\u91CC Agent \u80FD\u7528\u7684\u5916\u90E8\u8C03\u7528\u51ED\u636E\uFF0C\u521B\u5EFA\u4EBA\u540D\u4E0B\u7684\u81EA\u52A8\u5E26\u5165\uFF1B\u53EA\u6709\u540D\u5B57\u3001\u57DF\u540D\u4E0E\u6765\u6E90\uFF0C\u770B\u4E0D\u5230\u503C\u3002"}),net&&read.net?read.net.effective.length===0?jsx14(Empty,{children:"\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u6709\u751F\u6548\u7684\u7F51\u7EDC\u51ED\u636E\u3002\u521B\u5EFA\u4EBA\u914D\u8FC7\u7684\u4F1A\u81EA\u52A8\u5E26\u5165\u3002"}):jsx14(Rows,{label:"\u7F51\u7EDC\u51ED\u636E",children:read.net.effective.map(c=>jsx14(Row,{title:c.name,mono:true,meta:[c.domains.join("\u3001"),c.source==="project"?"\u9879\u76EE\u4E0A\u914D\u7684":"\u521B\u5EFA\u4EBA\u5E26\u5165\u7684"]},c.credentialId))}):jsx14("p",{className:"band-sf-muted",children:"\u8FD9\u4E2A\u90E8\u7F72\u6CA1\u6709\u5F00\u901A\u7F51\u7EDC\u51ED\u636E\u3002"})]}),jsxs14("p",{className:"band-sf-muted",children:["\u4E2A\u4EBA\u51ED\u636E\u5728",jsx14("a",{href:"/settings/models",onClick:e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;e.preventDefault();ctx.app.navigate({page:"@kanyun-ai-infra/band-settings/models"})},children:"\u4E2A\u4EBA\u8BBE\u7F6E"}),"\u91CC\u6539\u3002"]})]})]})}function turnText(current,last,members){if(current)return`\u6B63\u5728\u8DD1\u7B2C ${current.number} \u56DE\u5408\uFF08${memberName(members,current.agent)}\uFF09`;if(last)return`\u4E0A\u4E00\u4E2A\u56DE\u5408\u662F\u7B2C ${last.number} \u56DE\u5408`;return"\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u8DD1\u8FC7\u56DE\u5408"}function spendNote(models){if(models?.policy==="off")return models.teamKey?"\u8FD9\u4E2A\u5DE5\u574A\u7528\u56E2\u961F key\uFF0C\u56DE\u5408\u4E0D\u82B1\u6210\u5458\u4E2A\u4EBA\u540D\u4E0B\u7684 key\u3002":"\u8FD9\u4E2A\u5DE5\u574A\u6CA1\u6709\u56E2\u961F key\uFF1A\u56DE\u5408\u4E0D\u4F1A\u6D3E\u53D1\uFF0C\u8981\u5DE5\u574A\u7BA1\u7406\u5458\u5148\u914D\u597D\u56E2\u961F key\u3002";if(models?.policy==="require")return"\u8FD9\u4E2A\u5DE5\u574A\u4E0D\u7528\u56E2\u961F key\uFF0C\u6BCF\u4E2A Agent \u90FD\u5F97\u6709\u4E00\u4EFD\u9009\u7528\u7684\u6A21\u578B\u914D\u7F6E\uFF1B\u6362\u6210\u4F60\u540D\u4E0B\u7684\u4E4B\u540E\uFF0C\u8FD9\u4E2A Agent \u7684\u56DE\u5408\u5C31\u82B1\u4F60\u9009\u7684\u8FD9\u4EFD\u3002";if(models)return models.teamKey?"\u7F3A\u7701\u7528\u5EFA\u9879\u76EE\u65F6\u7ED1\u5B9A\u7684\u90A3\u4EFD\uFF08\u521B\u5EFA\u4EBA\u540D\u4E0B\u7684\uFF09\uFF0C\u6CA1\u7ED1\u5C31\u7528\u56E2\u961F key\uFF1B\u6362\u6210\u4F60\u540D\u4E0B\u7684\u4E4B\u540E\uFF0C\u8FD9\u4E2A Agent \u7684\u56DE\u5408\u5C31\u82B1\u4F60\u9009\u7684\u8FD9\u4EFD\u3002":"\u7F3A\u7701\u7528\u5EFA\u9879\u76EE\u65F6\u7ED1\u5B9A\u7684\u90A3\u4EFD\uFF08\u521B\u5EFA\u4EBA\u540D\u4E0B\u7684\uFF09\uFF1B\u65E2\u6CA1\u7ED1\u3001\u5DE5\u574A\u4E5F\u6CA1\u6709\u56E2\u961F key \u7684 Agent \u4E0D\u4F1A\u6D3E\u53D1\uFF0C\u6362\u6210\u4F60\u540D\u4E0B\u7684\u4E4B\u540E\uFF0C\u8FD9\u4E2A Agent \u7684\u56DE\u5408\u5C31\u82B1\u4F60\u9009\u7684\u8FD9\u4EFD\u3002";return"\u5EFA\u9879\u76EE\u65F6\u628A\u521B\u5EFA\u4EBA\u540D\u4E0B\u7684\u6A21\u578B\u914D\u7F6E\u7ED1\u7ED9\u6BCF\u4E2A Agent\uFF0C\u9879\u76EE\u91CC\u6240\u6709\u4EBA\u53D1\u8D77\u7684\u56DE\u5408\u90FD\u82B1\u90A3\u628A key\u3002"}function noSourceText(turn){if(turn?.current)return"\u8FD9\u4E00\u56DE\u5408\u8FD8\u6CA1\u8BB0\u4E0B\u7528\u7684\u662F\u8C01\u7684 key\u3002";if(turn?.last)return"\u4E0A\u4E00\u4E2A\u56DE\u5408\u6CA1\u6709\u8BB0\u4E0B\u7528\u7684\u662F\u8C01\u7684 key\u3002";return"\u7B2C\u4E00\u6B21\u6D3E\u53D1\u4EE5\u540E\uFF0C\u8FD9\u91CC\u4F1A\u5199\u7528\u7684\u662F\u8C01\u7684 key\u3002"}function sourceText(s){if(s.kind==="platform")return"\u5E73\u53F0\u63D0\u4F9B\u7684 key";if(s.kind==="project")return`\u9879\u76EE\u4E0A\u914D\u7684\u914D\u7F6E${s.name?`\u300C${s.name}\u300D`:""}`;const name=s.name?`\u300C${s.name}\u300D`:"";if(s.mine)return`\u4F60\u540D\u4E0B\u7684\u6A21\u578B\u914D\u7F6E${name}${s.deleted?"\uFF08\u5DF2\u5220\u9664\uFF09":""}`;const owner=s.ownerDisplayName?` \xB7 ${s.ownerDisplayName}\u7684 key`:"";return`\u6210\u5458\u81EA\u5DF1\u7684\u6A21\u578B\u914D\u7F6E${name}${owner}${s.deleted?"\uFF08\u5DF2\u5220\u9664\uFF09":""}`}var DESC8="\u51B3\u5B9A\u300C\u5F85\u6211\u5904\u7406\u300D\u548C\u4FA7\u680F\u6570\u5B57\u91CC\u7B97\u54EA\u4E9B\u4E8B\u3002";var remindersPage=reactMount8(ctx=>jsx15(Reminders,{ctx}));function Reminders({ctx}){const api=ctx.app.data.write?.userSettings;const[saved,setSaved]=useState12(null);const[pending2,setPending]=useState12(null);const[readError,setReadError]=useState12(null);const[forbidden,setForbidden]=useState12(false);const[writeError,setWriteError]=useState12(null);const[justSaved,setJustSaved]=useState12(false);const[reload,setReload]=useState12(0);useEffect10(()=>{let live=true;setReadError(null);setForbidden(false);if(!api){setReadError("\u5F53\u524D\u73AF\u5883\u6CA1\u6709\u4E2A\u4EBA\u8BBE\u7F6E\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458");return}api.get().then(s=>{if(live)setSaved(s.mentionsOnly)},e=>{if(!live)return;setForbidden(isForbidden10(e));setReadError(failedBecause9(e,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,reload]);const toggle=async next=>{if(!api)return;setPending(next);setWriteError(null);setJustSaved(false);try{const s=await api.set({mentionsOnly:next});setSaved(s.mentionsOnly);setJustSaved(true)}catch(e){setWriteError(failedBecause9(e,"\u518D\u62E8\u4E00\u6B21\u5F00\u5173"))}finally{setPending(null)}};const shown=pending2??saved??false;return jsxs15(PersonalFrame,{ctx,current:"reminders",children:[jsx15(PageHead,{title:"\u63D0\u9192",desc:DESC8}),forbidden?jsx15(NoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u63D0\u9192\u8BBE\u7F6E",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u63D0\u9192\u8BBE\u7F6E\u6309\u767B\u5F55\u4EBA\u5F52\u5C5E\uFF0C\u53EA\u6709\u672C\u4EBA\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u3002"}):readError!==null?jsxs15(ErrorNote7,{retry:()=>setReload(n=>n+1),children:["\u63D0\u9192\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]}):saved===null?jsx15(Loading,{text:"\u6B63\u5728\u8BFB\u53D6\u8BBE\u7F6E\u2026"}):jsxs15("section",{className:"band-sf-sec","aria-label":"\u53EA\u5728\u88AB @ \u65F6\u63D0\u9192",children:[jsxs15("div",{className:"band-sf-sw",children:[jsxs15("div",{children:[jsxs15("label",{className:"choice",htmlFor:"mentions-only",children:[jsx15("input",{id:"mentions-only",type:"checkbox",role:"switch",className:"switch",checked:shown,"aria-checked":shown,disabled:pending2!==null,"aria-describedby":"mentions-only-hint",onChange:e=>void toggle(e.target.checked)}),jsx15("b",{children:"\u53EA\u5728\u88AB @ \u65F6\u63D0\u9192"})]}),jsx15("span",{className:"band-sf-hint",id:"mentions-only-hint",children:"\u5F00\u4E86\u4EE5\u540E\uFF0C\u53EA\u6709\u522B\u4EBA @ \u4F60\u65F6\u624D\u63D0\u9192\uFF08\u5FBD\u6807\u548C\u901A\u77E5\uFF09\uFF0C\u5176\u4F59\u7684\u4E8B\u4ECD\u5728\u300C\u5F85\u6211\u5904\u7406\u300D\u7684\u5217\u8868\u91CC\u3002"})]}),justSaved&&pending2===null&&writeError===null&&jsx15("output",{className:"band-sf-ok",children:"\u5DF2\u4FDD\u5B58"})]}),writeError!==null&&jsxs15("p",{className:"band-sf-err",role:"alert",children:["\u6CA1\u4FDD\u5B58\u6210\u529F\uFF1A",writeError,"\u3002\u5F00\u5173\u5DF2\u56DE\u5230\u539F\u503C\u3002"]})]})]})}var teamConnectionsPage=reactMount9(ctx=>jsx16(WorkshopConnections,{ctx}));function WorkshopConnections({ctx}){const route=useRoute6(ctx);const id=route.params.workshop??"";const{data:workshop}=useAppData(ctx,data=>data.workshop(id),[id]);return jsx16(TeamConnections,{ctx,owner:{scope:"workshop",workshopId:id},workshopName:workshop?.name??id},id)}var deploymentConnectionsPage=reactMount9(ctx=>jsx16(TeamConnections,{ctx,owner:{scope:"deployment"}}));var deploymentConnectionsMenu=reactMount9((ctx,{owner})=>jsx16(DeploymentMenu,{ctx,close:owner.close}));function DeploymentMenu({ctx,close}){const api=ctx.app.data.write?.teamConnections;const[allowed,setAllowed]=useState13(false);const[error,setError]=useState13(null);const[revision,setRevision]=useState13(0);useEffect11(()=>{let live=true;api?.isDeploymentAdmin().then(value=>{if(live){setAllowed(value);setError(null)}},reason=>{if(live)setError(failedBecause10(reason,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,revision]);if(error!==null)return jsxs16(ErrorNote8,{retry:()=>setRevision(n=>n+1),children:["\u90E8\u7F72\u7BA1\u7406\u6743\u9650\u6CA1\u8BFB\u51FA\u6765\uFF1A",error]});return allowed?jsx16("button",{className:"btn ghost",type:"button",onClick:()=>{close();ctx.app.navigate({page:DEPLOYMENT_CONNECTIONS_PAGE})},children:"\u90E8\u7F72\u7BA1\u7406"}):null}function TeamConnections({ctx,owner,workshopName}){const api=ctx.app.data.write?.teamConnections;const[data,setData]=useState13(null);const[error,setError]=useState13(null);const[forbidden,setForbidden]=useState13(false);const[optionsError,setOptionsError]=useState13(null);const[projectError,setProjectError]=useState13(false);const[revision,setRevision]=useState13(0);const[project,setProject]=useState13("");const[custom,setCustom]=useState13("");const scope=owner.scope;const workshopId=owner.scope==="workshop"?owner.workshopId:"";useEffect11(()=>{let live=true;setError(null);setForbidden(false);setData(null);setOptionsError(null);if(!api){setError("\u5F53\u524D\u73AF\u5883\u672A\u914D\u7F6E\u56E2\u961F\u8FDE\u63A5\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458");return}const current=scope==="workshop"?{scope,workshopId}:{scope};Promise.allSettled([api.options(current),api.list(current)]).then(([optionResult,rowResult])=>{if(!live)return;if(rowResult.status==="rejected"){if(isForbidden11(rowResult.reason))setForbidden(true);else setError(failedBecause10(rowResult.reason,"\u70B9\u91CD\u8BD5"));return}const rows=rowResult.value;const options=optionResult.status==="fulfilled"?optionResult.value:{connectors:[],hubProjects:[],allowCustomProject:false};if(optionResult.status==="rejected")setOptionsError(failedBecause10(optionResult.reason,"\u70B9\u91CD\u8BD5"));setData({options,rows});setProject(value=>value||options.hubProjects[0]?.id||rows[0]?.hubProjectId||"")});return()=>{live=false}},[api,scope,workshopId,revision]);const title=scope==="workshop"?"\u56E2\u961F\u8FDE\u63A5":"\u90E8\u7F72\u7EA7\u8FDE\u63A5";const projects=[...data?.options.hubProjects??[]];for(const row of data?.rows??[])if(!projects.some(p=>p.id===row.hubProjectId))projects.push({id:row.hubProjectId,label:`${row.hubProjectId}\uFF08\u5DF2\u6709\u8FDE\u63A5\uFF09`});const selected=project==="custom"?custom:project;const[firstProject]=projects;const onlyProject=projects.length===1&&!data?.options.allowCustomProject?firstProject:void 0;const currentRows=data?.rows.filter(row=>row.hubProjectId===selected)??[];const ids=[...new Set([...data?.options.connectors.map(c=>c.id)??[],...currentRows.map(r=>r.connector)])];const labelOf2=id=>data?.options.connectors.find(c=>c.id===id)?.displayName??id;return jsxs16("main",{className:"band-settings band-connections band-team-connections",children:[scope==="workshop"?jsx16(WorkshopCrumb,{ctx,workshopId,workshopName:workshopName??workshopId,here:title}):jsx16(DeploymentCrumb,{title}),jsx16("h1",{children:title}),!forbidden&&jsxs16("p",{className:"band-connections-description",children:[scope==="workshop"?"\u7BA1\u7406\u8FD9\u4E2A\u5DE5\u574A\u5171\u7528\u7684\u8FDE\u63A5\u3002":"\u7BA1\u7406\u6574\u4E2A Band \u90E8\u7F72\u5171\u7528\u7684\u8FDE\u63A5\u3002","\u5DF2\u8FDE\u63A5\u8868\u793A\u51ED\u636E\u5DF2\u4FDD\u5B58\uFF0C\u5916\u90E8\u5E94\u7528\u6743\u9650\u4F1A\u5728\u4F7F\u7528\u65F6\u9A8C\u8BC1\u3002"]}),forbidden?scope==="workshop"?jsx16(NoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u5DE5\u574A\u7684\u56E2\u961F\u8FDE\u63A5",action:{label:"\u56DE\u5230\u5DE5\u574A",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-workshops/about",params:{workshop:workshopId}})},children:"\u56E2\u961F\u8FDE\u63A5\u53EA\u6709\u5DE5\u574A\u7684\u521B\u5EFA\u4EBA\u548C\u7BA1\u7406\u5458\u80FD\u770B\u3001\u80FD\u6539\u3002\u8981\u7528\u6216\u8981\u6539\u8FD9\u91CC\u7684\u8FDE\u63A5\uFF0C\u8BF7\u627E\u8FD9\u4E2A\u5DE5\u574A\u7684\u521B\u5EFA\u4EBA\u6216\u7BA1\u7406\u5458\u3002"}):jsx16(DeploymentNoAccess,{what:title,hint:"\u8981\u7528\u6216\u8981\u6539\uFF0C\u8BF7\u627E Band \u7BA1\u7406\u5458\u3002",leave:()=>leaveDeployment(ctx)}):error!==null?jsxs16(ErrorNote8,{retry:()=>setRevision(n=>n+1),children:[title,"\u6CA1\u8BFB\u51FA\u6765\uFF1A",error]}):!data?jsx16("output",{children:"\u6B63\u5728\u8BFB\u53D6\u8FDE\u63A5\u2026"}):jsxs16(Fragment13,{children:[optionsError!==null&&jsxs16(ErrorNote8,{retry:()=>setRevision(n=>n+1),children:["\u53EF\u7528\u8FDE\u63A5\u9009\u9879\u6CA1\u8BFB\u51FA\u6765\uFF1A",optionsError,"\u3002\u5DF2\u6709\u8FDE\u63A5\u4ECD\u53EF\u65AD\u5F00\u3002"]}),jsxs16("div",{className:"band-connections-form band-team-project",children:[jsx16("label",{htmlFor:onlyProject?"team-project-value":"team-project",children:"AgentHub \u9879\u76EE"}),onlyProject?jsx16("output",{id:"team-project-value",children:onlyProject.label}):jsxs16("select",{id:"team-project",className:"field",value:project,"aria-invalid":project!=="custom"&&projectError,onChange:e=>{setCustom("");setProjectError(false);setProject(e.target.value)},children:[!project&&jsx16("option",{value:"",children:"\u8BF7\u9009\u62E9 AgentHub \u9879\u76EE"}),projects.map(p=>jsx16("option",{value:p.id,children:p.label},p.id)),data.options.allowCustomProject&&jsx16("option",{value:"custom",children:"\u5176\u4ED6\u9879\u76EE"})]}),project==="custom"&&jsxs16(Fragment13,{children:[jsxs16("label",{htmlFor:"team-custom-project",children:["\u9879\u76EE ID ",jsx16("span",{children:"\u5FC5\u586B"})]}),jsx16("input",{id:"team-custom-project",className:"field",value:custom,"aria-invalid":projectError,placeholder:"\u586B\u5199\u6709\u6743\u8BBF\u95EE\u7684\u9879\u76EE UUID",onChange:e=>{setCustom(e.target.value);setProjectError(false)}})]})]}),projectError&&jsx16("p",{role:"alert",className:"band-connections-error",children:"\u8BF7\u586B\u5199\u6709\u6548\u7684\u9879\u76EE UUID"}),optionsError===null&&ids.length===0&&jsx16("p",{children:"\u8FD8\u6CA1\u6709\u53EF\u7528\u7684\u56E2\u961F\u8FDE\u63A5\u5668\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u914D\u7F6E\u8FDE\u63A5\u5668\u76EE\u5F55\u3002"}),api&&ids.map(id=>jsx16(ConnectionRow,{api,owner,connector:id,label:labelOf2(id),inTurn:optionsError!==null||scope!=="workshop"?void 0:data.options.connectors.find(c=>c.id===id)?.inTurn??[],project:selected,row:currentRows.find(r=>r.connector===id),enabled:data.options.connectors.some(c=>c.id===id)&&(data.options.allowCustomProject||data.options.hubProjects.some(p=>p.id===selected)),invalidProject:()=>setProjectError(true),reload:()=>setRevision(n=>n+1)},`${selected}:${id}`))]})]})}function ConnectionRow({api,owner,connector,label,inTurn,project,row,enabled,reload,invalidProject}){const[token,setToken]=useState13("");const[expiry,setExpiry]=useState13(()=>row?.expiresAt?localDate(row.expiresAt):"");const[invalidToken,setInvalidToken]=useState13(false);const[editing,setEditing]=useState13(false);const[error,setError]=useState13("");const[busy,setBusy]=useState13(false);const[needsRefresh,setNeedsRefresh]=useState13(false);const active=row?.status==="active";const failed2=row?.status==="failed";const pending2=row?.busy||row?.status==="pending";const connected=row&&row.status!=="revoked";const enabling=!connected||failed2&&!row.credentialId;const run=async action=>{if(busy||pending2||needsRefresh)return;if(action!=="disconnect"){if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(project)){invalidProject();return}if(!token){setInvalidToken(true);setError("\u8FD8\u5DEE\u56E2\u961F token \u6CA1\u586B");return}if(!WriteTeamConnectionSchema.safeParse({token}).success){setInvalidToken(true);setError("\u56E2\u961F token \u683C\u5F0F\u4E0D\u6B63\u786E\uFF1A\u9700\u4E3A 8\u20138192 \u4E2A\u5B57\u7B26\uFF0C\u4E0D\u80FD\u5305\u542B\u7A7A\u767D\u6216\u63A7\u5236\u5B57\u7B26");return}}setBusy(true);setError("");const input=token;setToken("");try{if(action==="disconnect")await api.disconnect(owner,connector,project);else await api[action](owner,connector,project,{token:input,...expiry?{expiresAt:endOfLocalDay(expiry)}:{}});reload()}catch(error2){setNeedsRefresh(true);const conflict=typeof error2==="object"&&error2!==null&&"code"in error2&&error2.code==="CONFLICT";setError(conflict?"\u64CD\u4F5C\u672A\u5B8C\u6210\uFF0C\u51ED\u636E\u8F93\u5165\u5DF2\u6E05\u7A7A\u3002\u8BF7\u5148\u70B9\u51FB\u300C\u5237\u65B0\u72B6\u6001\u300D\uFF1B\u53EF\u80FD\u9700\u8981\u5148\u65AD\u5F00\u518D\u91CD\u65B0\u8FDE\u63A5\u3002":"\u64CD\u4F5C\u672A\u5B8C\u6210\uFF0C\u51ED\u636E\u8F93\u5165\u5DF2\u6E05\u7A7A\u3002\u8BF7\u5148\u70B9\u51FB\u300C\u5237\u65B0\u72B6\u6001\u300D\uFF0C\u786E\u8BA4\u540E\u518D\u91CD\u8BD5\u3002")}finally{setBusy(false)}};const status=pending2?"\u6B63\u5728\u5904\u7406":active?"\u5DF2\u8FDE\u63A5":failed2?"\u8FDE\u63A5\u5931\u8D25":row?.status==="expired"?"\u5DF2\u8FC7\u671F":"\u672A\u8FDE\u63A5";return jsxs16("section",{className:"band-connections-account","aria-label":`${label} \u8FDE\u63A5`,children:[jsxs16("div",{className:"band-connections-heading",children:[jsx16("h2",{children:label}),jsx16("span",{className:active?"band-connections-active":failed2?"band-connections-error":"band-connections-description",children:status})]}),!enabled&&jsx16("p",{className:"band-connections-description",children:"\u6B64\u8FDE\u63A5\u5668\u6216\u9879\u76EE\u5DF2\u4E0D\u5728\u53EF\u7528\u58F0\u660E\u4E2D\uFF0C\u5DF2\u6709\u8FDE\u63A5\u4ECD\u53EF\u65AD\u5F00\u3002"}),row?.vaultUncertain&&jsx16("p",{className:"band-connections-description",children:row.credentialId?"\u4E0A\u6B21\u64CD\u4F5C\u7684\u8FDC\u7AEF\u7ED3\u679C\u4E0D\u786E\u5B9A\u3002\u91CD\u65B0\u586B\u5199 token \u53EF\u91CD\u8BD5\u539F\u5730\u6362\u503C\u3002":"\u4E0A\u6B21\u64CD\u4F5C\u7684\u8FDC\u7AEF\u7ED3\u679C\u4E0D\u786E\u5B9A\u3002\u91CD\u8BD5\u53EF\u80FD\u91CD\u65B0\u5EFA\u7ACB\u8FDE\u63A5\uFF0C\u4ECD\u6709\u56DE\u5408\u4F7F\u7528\u65F6\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002"}),row?.secretTails.token&&jsxs16("p",{className:"band-connections-description",children:["\u56E2\u961F token \xB7 \u672B 4 \u4F4D ",jsx16("code",{children:row.secretTails.token})]}),connected&&row.expiresAt&&jsx16(Expiry,{status:row.status,expiresAt:row.expiresAt}),connected&&inTurn&&inTurn.length>0&&jsxs16("p",{className:"band-connections-description",children:["\u56DE\u5408\u5185\uFF1A",inTurn.join("\u3001")]}),jsxs16("div",{className:"band-connections-actions",children:[active&&enabled&&!editing&&jsx16("button",{type:"button",className:"btn",disabled:busy||pending2||needsRefresh,onClick:()=>setEditing(true),children:"\u6362\u503C"}),connected&&jsx16("button",{type:"button",className:"btn",disabled:busy||pending2||needsRefresh,onClick:()=>void run("disconnect"),children:"\u65AD\u5F00"}),(connected||needsRefresh)&&jsx16("button",{type:"button",className:"btn",disabled:busy,onClick:reload,children:"\u5237\u65B0\u72B6\u6001"})]}),enabled&&(!active||editing)&&jsxs16("form",{noValidate:true,className:"band-connections-form",onSubmit:e=>{e.preventDefault();void run(active||(row?.status==="expired"||failed2)&&!!row?.vaultId&&!!row.credentialId?"rotate":"connect")},children:[enabling&&inTurn&&jsx16(InTurnNotice,{tools:inTurn}),jsxs16("label",{htmlFor:`team-token-${connector}`,children:["\u56E2\u961F token ",jsx16("span",{className:"band-connections-description",children:"\u5FC5\u586B"})]}),jsx16("input",{id:`team-token-${connector}`,className:"field",type:"password",autoComplete:"off",spellCheck:false,value:token,"aria-invalid":invalidToken,disabled:busy||pending2||needsRefresh,placeholder:"\u7C98\u8D34\u56E2\u961F token\uFF0C\u63D0\u4EA4\u540E\u4E0D\u4F1A\u56DE\u663E",onChange:e=>{setToken(e.target.value);setInvalidToken(false);setError("")}}),jsxs16("label",{htmlFor:`team-expiry-${connector}`,children:["\u8FC7\u671F\u65E5\u671F ",jsx16("span",{className:"band-connections-description",children:"\u9009\u586B"})]}),jsx16("input",{id:`team-expiry-${connector}`,className:"field",type:"date",value:expiry,disabled:busy||pending2||needsRefresh,"aria-describedby":`team-expiry-${connector}-hint`,onChange:e=>setExpiry(e.target.value)}),jsxs16("p",{id:`team-expiry-${connector}-hint`,className:"band-connections-description",children:["token \u8BBE\u4E86\u6709\u6548\u671F\u5C31\u586B\u4E0A\uFF0C\u5230\u671F\u524D ",EXPIRY_WARN_DAYS," ","\u5929\u8D77\u5728\u8FD9\u91CC\u63D0\u9192\uFF1B\u4E0D\u586B\u8868\u793A\u4E0D\u8FC7\u671F\u6216\u4E0D\u77E5\u9053\u3002"]}),jsxs16("div",{className:"band-connections-actions",children:[jsx16("button",{className:"btn primary",type:"submit",disabled:busy||pending2||needsRefresh,children:busy?"\u6B63\u5728\u63D0\u4EA4\u2026":active||row?.status==="expired"?"\u4FDD\u5B58\u65B0\u503C":failed2?row?.credentialId?"\u91CD\u8BD5\u6362\u503C":"\u91CD\u8BD5\u8FDE\u63A5":"\u8FDE\u4E0A"}),editing&&jsx16("button",{className:"btn",type:"button",disabled:busy,onClick:()=>{setToken("");setExpiry(row?.expiresAt?localDate(row.expiresAt):"");setEditing(false);setError("")},children:"\u53D6\u6D88"})]})]}),error&&jsx16("p",{role:"alert",className:"band-connections-error",children:error})]})}var EXPIRY_WARN_DAYS=7;var DAY_MS=864e5;function localDate(iso){const d=new Date(iso);const pad2=n=>String(n).padStart(2,"0");return`${d.getFullYear()}-${pad2(d.getMonth()+1)}-${pad2(d.getDate())}`}function endOfLocalDay(date){const[y=0,m=1,d=1]=date.split("-").map(Number);return new Date(y,m-1,d,23,59,59).toISOString()}function daysLeft(iso,now=Date.now()){const day2=t=>{const d=new Date(t);return new Date(d.getFullYear(),d.getMonth(),d.getDate()).getTime()};return Math.round((day2(Date.parse(iso))-day2(now))/DAY_MS)}function dayText(iso){const d=new Date(iso);const sameYear=d.getFullYear()===new Date().getFullYear();return`${sameYear?"":`${d.getFullYear()}\u5E74`}${d.getMonth()+1}\u6708${d.getDate()}\u65E5`}function Expiry({status,expiresAt}){const left=daysLeft(expiresAt);if(status==="expired"||Date.parse(expiresAt)<=Date.now())return jsxs16("p",{className:"band-connections-expiring",children:[dayText(expiresAt),"\u5DF2\u8FC7\u671F\uFF1A\u4E0A\u6E38\u4F1A\u62D2\u7EDD\u8FD9\u4EFD\u51ED\u636E\uFF0C\u8BF7\u586B\u65B0\u7684 token \u6362\u503C\u3002"]});if(left<=EXPIRY_WARN_DAYS)return jsxs16("p",{className:"band-connections-expiring",children:["\u5230\u671F ",dayText(expiresAt)," \xB7"," ",left===0?"\u4ECA\u5929\u5230\u671F\uFF0C\u8BF7\u5C3D\u5FEB\u6362\u503C":`\u8FD8\u6709 ${left} \u5929\u8FC7\u671F\uFF0C\u5230\u671F\u524D\u8BF7\u6362\u503C`]});return jsxs16("p",{className:"band-connections-description",children:["\u5230\u671F ",dayText(expiresAt)]})}function InTurnNotice({tools}){if(tools.length===0)return jsx16("p",{className:"band-connections-description",children:"\u672C\u5DE5\u574A\u8FD8\u6CA1\u5728\u56DE\u5408\u5185\u7528\u8FD9\u4E2A\u8FDE\u63A5\u5668\uFF0C\u8FDE\u4E0A\u540E\u56DE\u5408\u91CC\u4E0D\u4F1A\u5E26\u4E0A\u5B83\u3002"});return jsxs16("div",{className:"band-connections-notice",role:"note",children:[jsx16("p",{children:"\u8FDE\u4E0A\u540E\uFF0C\u56DE\u5408\u91CC agent \u7528\u8FD9\u4EFD\u56E2\u961F\u51ED\u636E\u8BFB\u5230\u7684\u5185\u5BB9\uFF0C\u6240\u6709\u7528\u672C\u5DE5\u574A\u5EFA\u7684\u9879\u76EE\u7684\u6210\u5458\u90FD\u80FD\u8BFB\u5230\u3002"}),jsxs16("p",{className:"band-connections-description",children:["\u56DE\u5408\u5185\u53EF\u7528\uFF1A",tools.join("\u3001"),"\u3002agent \u770B\u5F97\u5230\u8FD9\u4E2A\u8FDE\u63A5\u5668\u5176\u4ED6\u5DE5\u5177\u7684\u540D\u5B57\uFF0C\u4F46\u8C03\u7528\u4F1A\u88AB\u62D2\u7EDD\u3002"]})]})}var DESC9="\u51B3\u5B9A\u8C01\u80FD\u6253\u5F00\u8FD9\u4E2A\u9879\u76EE\u3002\u6539\u52A8\u7ACB\u5373\u751F\u6548\u3002";var READONLY3="\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u6539\u3002";var LEVELS=[{value:"members",label:"\u53EA\u6709\u9879\u76EE\u6210\u5458",hint:"\u53EA\u6709\u52A0\u8FDB\u8FD9\u4E2A\u9879\u76EE\u7684\u4EBA\u80FD\u6253\u5F00\u3002"},{value:"team",label:"\u8FD9\u4E2A\u5DE5\u574A\u7684\u4EBA",hint:"\u5DE5\u574A\u7684\u521B\u5EFA\u4EBA\u3001\u7BA1\u7406\u5458\u548C\u6210\u5458\u90FD\u80FD\u6253\u5F00\uFF0C\u4E0D\u7528\u4E00\u4E2A\u4E2A\u52A0\u3002"},{value:"users",label:"\u9879\u76EE\u6210\u5458\u548C\u6307\u5B9A\u7684\u4EBA",hint:"\u9664\u4E86\u9879\u76EE\u6210\u5458\uFF0C\u4E0B\u9762\u540D\u5355\u91CC\u7684\u4EBA\u4E5F\u80FD\u6253\u5F00\u3002"},{value:"everyone",label:"\u516C\u53F8\u5185\u6240\u6709\u4EBA",hint:"\u516C\u53F8\u91CC\u767B\u5F55 Band \u7684\u4EBA\u90FD\u80FD\u6253\u5F00\uFF0C\u516C\u53F8\u5916\u7684\u4EBA\u6253\u4E0D\u5F00\u3002"}];var VIEWERS_MAX=200;function VisibilitySettings({ctx}){const api=ctx.visibilitySettings;const[loaded,setLoaded]=useState14(null);const[canManage,setCanManage]=useState14(false);const[level,setLevel]=useState14("members");const[viewers,setViewers]=useState14([]);const[readError,setReadError]=useState14(null);const[writeError,setWriteError]=useState14(null);const[saved,setSaved]=useState14(false);const[busy,setBusy]=useState14(false);const[reload,setReload]=useState14(0);const groupId=useId6();const search=useCallback2(q=>api?api.searchUsers(q):Promise.resolve([]),[api]);useEffect12(()=>{let active=true;setReadError(null);const load=async()=>{if(!api)throw new Error("\u8FD9\u4E2A\u5BBF\u4E3B\u4E0D\u652F\u6301\u9879\u76EE\u53EF\u89C1\u8303\u56F4\u8BBE\u7F6E");return api.get()};void load().then(v=>{if(!active)return;const people=v.viewers??[];setLoaded({visibility:v.visibility,viewers:people});setLevel(v.visibility);setViewers(people);setCanManage(v.canManage)}).catch(e=>{if(active)setReadError(e)});return()=>{active=false}},[api,reload]);const changed=loaded!==null&&(level!==loaded.visibility||level==="users"&&viewers.map(p=>p.id).join("\n")!==loaded.viewers.map(p=>p.id).join("\n"));async function save(){if(!api||busy)return;if(level==="users"&&viewers.length===0){setWriteError("\u8FD8\u5DEE\u540D\u5355\uFF1A\u9009\u300C\u9879\u76EE\u6210\u5458\u548C\u6307\u5B9A\u7684\u4EBA\u300D\u65F6\u81F3\u5C11\u52A0\u4E00\u4E2A\u4EBA");return}setBusy(true);setWriteError(null);setSaved(false);try{const v=await api.set(level==="users"?{visibility:level,viewers:viewers.map(p=>p.id)}:{visibility:level});const people=v.viewers??[];setLoaded({visibility:v.visibility,viewers:people});setLevel(v.visibility);setViewers(people);setCanManage(v.canManage);setSaved(true)}catch(e){setWriteError(`\u6CA1\u6709\u4FDD\u5B58\uFF1A${errorText2(e)}`)}finally{setBusy(false)}}const forbidden=readError!==null&&isForbidden12(readError);const readFailed=readError!==null&&loaded===null&&!forbidden;return jsxs17(Fragment14,{children:[jsx17(PageHead,{title:"\u8C01\u80FD\u770B",desc:DESC9}),forbidden?jsx17(NoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u53EF\u89C1\u8303\u56F4",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-project/project",params:{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{}}})},children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"}):readFailed?jsxs17(ReadError,{retry:()=>setReload(n=>n+1),children:["\u53EF\u89C1\u8303\u56F4\u6CA1\u8BFB\u51FA\u6765\uFF1A",errorText2(readError)]}):loaded===null?jsx17(Loading,{text:"\u6B63\u5728\u8BFB\u53D6\u53EF\u89C1\u8303\u56F4\u2026"}):jsxs17(Fragment14,{children:[!canManage?jsx17("p",{className:"band-sf-muted",children:READONLY3}):null,jsxs17("div",{className:"band-sf-picks",role:"radiogroup","aria-labelledby":groupId,children:[jsx17("span",{className:"sr-only",id:groupId,children:"\u8C01\u80FD\u770B\u8FD9\u4E2A\u9879\u76EE"}),LEVELS.map(l=>jsxs17("label",{className:"band-sf-opt",children:[jsx17("input",{type:"radio",className:"radio",name:`${groupId}-level`,value:l.value,checked:level===l.value,disabled:!canManage||busy,onChange:()=>{setLevel(l.value);setSaved(false);setWriteError(null)}}),jsxs17("span",{children:[jsx17("b",{children:l.label}),jsx17("small",{children:l.hint})]})]},l.value))]}),level==="users"&&(canManage?jsx17(ViewerList,{people:viewers,busy,search,onChange:next=>{setViewers(next);setSaved(false);setWriteError(null)}}):jsx17("p",{className:"band-sf-muted",children:"\u540D\u5355\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u770B\u5F97\u5230\u3002"})),jsx17("p",{className:"band-sf-muted",children:"\u4E0D\u662F\u9879\u76EE\u6210\u5458\u7684\u4EBA\u53EA\u80FD\u770B\u4EA4\u4ED8\u7269\uFF1A\u770B\u4E0D\u5230\u610F\u89C1\uFF0C\u4E0D\u80FD\u8BC4\u8BBA\uFF0C\u4E5F\u4E0D\u80FD\u4EA4\u7ED9 AI\u3002\u6539\u4E86\u7ACB\u5373\u751F\u6548\uFF1A\u4E0D\u5728\u8303\u56F4\u91CC\u7684\u4EBA\u4E0B\u4E00\u6B21\u6253\u5F00\u6216\u5237\u65B0\u5C31\u8FDB\u4E0D\u6765\u4E86\u3002"}),canManage?jsxs17("div",{className:"band-sf-acts",children:[jsx17("button",{type:"button",className:"btn primary",disabled:busy||!changed,onClick:()=>void save(),children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":"\u4FDD\u5B58"}),saved&&!changed?jsx17(Saved,{}):null]}):null,writeError?jsx17("div",{role:"alert",children:jsx17(ErrorNote9,{children:writeError})}):null]})]})}function ViewerList({people,busy,search,onChange}){const[q,setQ]=useState14("");const[found,setFound]=useState14({q:"",users:[]});const inputId=useId6();const listId=useId6();const term=q.trim();const taken=new Set(people.map(p=>p.id));const full=people.length>=VIEWERS_MAX;useEffect12(()=>{if(term===""){setFound({q:"",users:[]});return}let live=true;const t=setTimeout(()=>{search(term).then(users=>live&&setFound({q:term,users}),()=>live&&setFound({q:"",users:[]}))},200);return()=>{live=false;clearTimeout(t)}},[search,term]);const settled=found.q===term;const candidates=settled?found.users.filter(u=>!taken.has(u.id)):[];const add=p=>{onChange([...people,{id:p.id,displayName:p.displayName}]);setQ("")};return jsxs17("div",{className:"band-settings-viewers",children:[jsxs17("label",{htmlFor:inputId,children:["\u6307\u5B9A\u7684\u4EBA ",jsxs17("span",{className:"band-sf-hint",children:["\u5FC5\u586B\uFF0C\u6700\u591A ",VIEWERS_MAX," \u4EBA"]})]}),people.length>0&&jsx17("ul",{className:"band-settings-people","aria-label":"\u540D\u5355",children:people.map(p=>jsxs17("li",{children:[jsxs17("span",{children:[jsx17("b",{children:p.displayName}),p.displayName!==p.id&&jsx17("span",{children:p.id})]}),jsx17("button",{type:"button",className:"btn ghost sm",disabled:busy,"aria-label":`\u628A${p.displayName}\u79FB\u51FA\u540D\u5355`,onClick:()=>onChange(people.filter(x=>x.id!==p.id)),children:"\u79FB\u51FA"})]},p.id))}),jsx17("input",{id:inputId,className:"field",value:q,placeholder:full?"\u540D\u5355\u5DF2\u6EE1":"\u8F93\u5165 ldap \u6216\u59D3\u540D\u67E5\u627E",autoComplete:"off","aria-controls":listId,disabled:busy||full,onChange:e=>setQ(e.target.value)}),candidates.length>0&&jsx17("ul",{className:"band-settings-cands",id:listId,"aria-label":"\u5019\u9009\u7684\u4EBA",children:candidates.map(u=>jsx17("li",{children:jsxs17("button",{type:"button",onClick:()=>add(u),children:[jsx17("b",{children:u.displayName}),jsx17("span",{children:u.id})]})},u.id))}),term!==""&&settled&&candidates.length===0&&jsx17("p",{className:"band-sf-hint",children:taken.has(term)?`${term} \u5DF2\u7ECF\u5728\u540D\u5355\u91CC\u3002`:`\u7528\u6237\u76EE\u5F55\u91CC\u6CA1\u6709\u300C${term}\u300D\uFF1A\u53EA\u80FD\u52A0\u767B\u5F55\u8FC7 Band \u7684\u4EBA\u3002`})]})}var SELF10="@kanyun-ai-infra/band-settings";var TABS=`${SELF10}/tabs`;var PROJECT_HEAD="@kanyun-ai-infra/band-project/project-head";var SETTINGS_PAGE=`${SELF10}/settings`;var SETTINGS_HOME_PAGE=`${SELF10}/settings-home`;var src_default=definePlugin({surfaces:{"settings-index":reactMount10(ctx=>jsx18(SettingsIndex,{ctx})),"settings-menu":reactMount10((ctx,{owner})=>jsx18("button",{type:"button",className:"btn ghost",onClick:()=>{owner.close();ctx.app.navigate({page:`${SELF10}/settings-index`})},children:"\u8BBE\u7F6E"})),models:modelsPage,"models-for":modelsPage,"net-credentials":netCredentialsPage,connections:connectionsPage,"platform-tokens":platformTokensPage,reminders:remindersPage,"team-connections":teamConnectionsPage,"deployment-connections":deploymentConnectionsPage,"deployment-connections-menu":deploymentConnectionsMenu,"beta-members":betaMembersPage,"beta-members-menu":betaMembersMenu,"feedback-admin":feedbackAdminPage,"feedback-admin-menu":feedbackAdminMenu,settings:reactMount10(ctx=>jsx18(ProjectSettings,{ctx})),"settings-home":reactMount10(ctx=>jsx18(ProjectSettings,{ctx})),open:reactMount10(ctx=>jsx18(OpenButton,{ctx})),approval:reactMount10(ctx=>jsx18(ApprovalSettings,{ctx})),visibility:reactMount10(ctx=>jsx18(VisibilitySettings,{ctx})),"project-models":reactMount10(ctx=>jsx18(ProjectModelsSection,{ctx})),notify:notifyPage}});function projectParams(ctx,extra={}){return{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{},...extra}}var settingsHomePath=ctx=>projectPath2(ctx.project,"settings");var settingsPath=(ctx,section,item)=>projectPath2(ctx.project,"settings",...item?[section,item]:[section]);function SettingsIndex({ctx}){const narrow=useNarrow();const[firstOff,setFirstOff]=useState15(false);const firstUnavailable=useCallback3(()=>setFirstOff(true),[]);if(!narrow&&!firstOff)return jsx18(MyModels,{ctx,onUnavailable:firstUnavailable});return jsx18(PersonalFrame,{ctx,view:"index",children:narrow?null:personalGroups().map(g=>jsxs18("section",{className:"band-sf-sec","aria-label":g.group,children:[jsx18("h2",{children:g.group}),jsx18(Rows,{label:g.group,children:g.sections.map(s=>jsx18(Row,{title:s.title,href:personalPath(s.slug),onOpen:()=>ctx.app.navigate({page:personalPage(s.slug)})},s.slug))})]},g.group))})}var tabId=e=>String(e.meta.tab??e.id);var tabTitle=e=>String(e.meta.title??e.id);var LEGACY_TAB_GROUPS={members:"\u534F\u4F5C",memory:"Agent"};var tabGroup=e=>{const g=e.meta.group;if(typeof g==="string"&&g.trim()!=="")return g;return LEGACY_TAB_GROUPS[tabId(e)]??"\u5176\u4ED6"};function sortTabs(entries){return[...entries].sort((a,b)=>a.order-b.order)}function projectGroups(ctx,entries){const byGroup=new Map;for(const e of sortTabs(entries)){const group=tabGroup(e);const section={slug:tabId(e),title:tabTitle(e),href:settingsPath(ctx,tabId(e)),page:SETTINGS_PAGE,params:projectParams(ctx,{tab:tabId(e)})};const list=byGroup.get(group);if(list)list.push(section);else byGroup.set(group,[section])}return[...byGroup].map(([group,sections])=>({group,sections}))}function OpenButton({ctx}){const entries=sortTabs(useSlotEntries(ctx,TABS));const what=entries.map(e=>String(e.meta.hint??tabTitle(e))).join("\u3001");const label=what?`\u9879\u76EE\u8BBE\u7F6E\uFF1A${what}`:"\u9879\u76EE\u8BBE\u7F6E";const first=entries[0];return jsx18("button",{type:"button",className:"iconbtn band-settings-open","aria-label":label,title:label,onClick:()=>ctx.app.navigate({page:SETTINGS_PAGE,params:projectParams(ctx,{tab:first?tabId(first):"members"})}),children:jsxs18("svg",{viewBox:"0 0 24 24","aria-hidden":"true",children:[jsx18("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),jsx18("circle",{cx:"12",cy:"12",r:"3"})]})})}function ProjectSettings({ctx}){const route=useRoute7(ctx);const entries=sortTabs(useSlotEntries(ctx,TABS));const narrow=useNarrow();const asked=route.params.tab;const current=asked===void 0?void 0:entries.find(e=>tabId(e)===asked);const shown=current??(narrow?void 0:entries[0]);const view=shown||entries.length===0?"page":"index";const item=route.params.item;const head=ctx.services.find(PROJECT_HEAD);const frame=jsx18(Frame,{ctx,navLabel:"\u9879\u76EE\u8BBE\u7F6E\u5206\u533A",title:"\u9879\u76EE\u8BBE\u7F6E",crumb:head?void 0:jsx18(Crumb,{ctx}),groups:projectGroups(ctx,entries),current:shown?tabId(shown):void 0,view,back:item!==void 0&&current?{label:tabTitle(current),href:settingsPath(ctx,tabId(current)),page:SETTINGS_PAGE,params:projectParams(ctx,{tab:tabId(current)})}:void 0,backMobile:item===void 0?{label:"\u9879\u76EE\u8BBE\u7F6E",href:settingsHomePath(ctx),page:SETTINGS_HOME_PAGE,params:projectParams(ctx)}:void 0,children:entries.length===0?jsxs18("div",{className:"band-settings-state rest",children:[jsx18("i",{}),jsx18("b",{children:"\u6CA1\u6709\u8BBE\u7F6E\u5206\u533A"}),jsx18("span",{children:"\u8FD9\u4E2A\u90E8\u7F72\u6CA1\u6709\u88C5\u4EFB\u4F55\u8BBE\u7F6E\u63D2\u4EF6\u3002"})]}):shown?jsx18(Mount,{mount:el=>ctx.slots.mount(el,TABS,{key:shown.key,owner:{projectId:ctx.project.id}}),deps:[shown.key,ctx.project.id]}):null});if(!head)return frame;return jsxs18("div",{className:"band-settings-page",children:[jsx18(Mount,{className:"band-settings-projecthead",mount:el=>head.mount(el),deps:[head]}),frame]})}export{ProjectSettings,SETTINGS_HOME_PAGE,SETTINGS_PAGE,SettingsIndex,src_default as default,projectGroups,projectParams,settingsHomePath,settingsPath};
1
+ import"../../chunks/chunk-JFPQMFKF.js";import{Mount,reactMount as reactMount10,useRoute as useRoute7,useSlotEntries}from"@kanyun-ai-infra/band-plugin-react";import{projectPath as projectPath2}from"@kanyun-ai-infra/band-plugin-sdk";import{definePlugin}from"@kanyun-ai-infra/band-plugin-sdk";import{useCallback as useCallback2,useState as useState16}from"react";import{SettingsActions,SettingsChoices,SettingsSaveState,SettingsSingle,errorText,isForbidden as isForbidden2}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect2,useState as useState2}from"react";import{SettingsSection as Section,SettingsBack,SettingsDanger,SettingsDangerRow,SettingsDialog,SettingsEmpty,SettingsFacts,SettingsFrame,SettingsHead,SettingsLoading,SettingsNotice,SettingsReadError,SettingsRow,SettingsRows,SettingsSaved,enterSection as enterSectionKey,isForbidden,settingsLink,settingsNavigate}from"@kanyun-ai-infra/band-plugin-react";import{useEffect,useState}from"react";import{clearFresh,leaveThen,markFresh,markFreshMany,markNotice,peekFresh,peekFreshAll,takeNotice,useCrossPageNotice,useFreshRow,useFreshRows,useNarrow,useSavedNote}from"@kanyun-ai-infra/band-plugin-react";import{jsx}from"react/jsx-runtime";import{SettingsNoAccess}from"@kanyun-ai-infra/band-plugin-react";import{Fragment,jsx as jsx2,jsxs}from"react/jsx-runtime";import{BETA_MEMBERS_BATCH_MAX,parseLdapList}from"@kanyun-ai-infra/band-contracts/api";import{ErrorNote,failedBecause,reactMount}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect3,useRef,useState as useState3}from"react";import{jsx as jsx3,jsxs as jsxs2}from"react/jsx-runtime";import{Fragment as Fragment2,jsx as jsx4,jsxs as jsxs3}from"react/jsx-runtime";import{SettingsActions as SettingsActions2,SettingsField,SettingsForm,SettingsSaveState as SettingsSaveState2,failedBecause as failedBecause2,isForbidden as isForbidden3,reactMount as reactMount2,useRoute}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect4,useState as useState4}from"react";import{jsx as jsx5,jsxs as jsxs4}from"react/jsx-runtime";import{WorkshopIcon}from"@kanyun-ai-infra/band-plugin-react";import{Fragment as Fragment3,jsx as jsx6,jsxs as jsxs5}from"react/jsx-runtime";import{FEEDBACK_NOTE_MAX,FEEDBACK_REPLY_MAX,feedbackTextLength}from"@kanyun-ai-infra/band-contracts/api";import{ErrorNote as ErrorNote2,failedBecause as failedBecause3,isForbidden as isForbidden4,reactMount as reactMount3}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect5,useRef as useRef2,useState as useState5}from"react";import{Fragment as Fragment4,jsx as jsx7,jsxs as jsxs6}from"react/jsx-runtime";import{CUSTOM_MODEL_ENDPOINT_MAX,CUSTOM_MODEL_NAME_MAX,CUSTOM_MODEL_PRESET_ID}from"@kanyun-ai-infra/band-contracts/api";import{Glyph,MODELS_FOR_PAGE,RESUME_PAGE,SettingsActions as SettingsActions3,SettingsField as SettingsField2,SettingsForm as SettingsForm2,SettingsSaveState as SettingsSaveState3,failedBecause as failedBecause4,isForbidden as isForbidden5,reactMount as reactMount4,useRoute as useRoute2,withImeGuard}from"@kanyun-ai-infra/band-plugin-react";import{Fragment as Fragment5,useEffect as useEffect6,useId,useLayoutEffect,useRef as useRef3,useState as useState6}from"react";import{Fragment as Fragment6,jsx as jsx8,jsxs as jsxs7}from"react/jsx-runtime";import{NET_CREDENTIALS_PER_OWNER_MAX,NET_CREDENTIAL_DOMAINS_MAX,NET_CREDENTIAL_KEY_MAX,NET_CREDENTIAL_NAME_PREFIX,NET_CREDENTIAL_NOTE_MAX,NET_CREDENTIAL_SERVICE_ACCOUNT_MAX}from"@kanyun-ai-infra/band-contracts/api";import{SettingsActions as SettingsActions4,SettingsField as SettingsField3,SettingsForm as SettingsForm3,SettingsSaveState as SettingsSaveState4,failedBecause as failedBecause5,isForbidden as isForbidden6,reactMount as reactMount5,useRoute as useRoute3}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect7,useId as useId2,useMemo,useState as useState7}from"react";import{Fragment as Fragment7,jsx as jsx9,jsxs as jsxs8}from"react/jsx-runtime";import{ErrorNote as ErrorNote3,SettingsActions as SettingsActions5,SettingsField as SettingsField4,SettingsForm as SettingsForm4,SettingsSaveState as SettingsSaveState5,failedBecause as failedBecause6,isForbidden as isForbidden7,reactMount as reactMount6,useCtxData,useRoute as useRoute4}from"@kanyun-ai-infra/band-plugin-react";import{projectPath}from"@kanyun-ai-infra/band-plugin-sdk";import{useEffect as useEffect8,useState as useState8}from"react";import{Fragment as Fragment8,jsx as jsx10,jsxs as jsxs9}from"react/jsx-runtime";import{SettingsActions as SettingsActions6,SettingsField as SettingsField5,SettingsForm as SettingsForm5,SettingsSaveState as SettingsSaveState6,isForbidden as isForbidden8,reactMount as reactMount7,useRoute as useRoute5}from"@kanyun-ai-infra/band-plugin-react";import{NETWORK_LOST,isNetworkLost}from"@kanyun-ai-infra/band-plugin-react/errors";import{useEffect as useEffect9,useRef as useRef5,useState as useState9}from"react";import{Fragment as Fragment9,jsx as jsx11,jsxs as jsxs10}from"react/jsx-runtime";import{SettingsSaveState as SettingsSaveState7,canRestoreProject,deletedProjectText,failedBecause as failedBecause8}from"@kanyun-ai-infra/band-plugin-react";import{useState as useState10}from"react";import{Fragment as Fragment10,jsx as jsx12,jsxs as jsxs11}from"react/jsx-runtime";import{failedBecause as failedBecause9,isForbidden as isForbidden9,memberName,useCtxData as useCtxData3,useMembers}from"@kanyun-ai-infra/band-plugin-react";import{useState as useState12}from"react";import{CUSTOM_MODEL_PRESET_ID as CUSTOM_MODEL_PRESET_ID2,MODEL_PROJECT_CONSENT_PENDING}from"@kanyun-ai-infra/band-contracts/api";import{SettingsActions as SettingsActions7,SettingsSaveState as SettingsSaveState8,useCtxData as useCtxData2}from"@kanyun-ai-infra/band-plugin-react";import{useState as useState11}from"react";import{Fragment as Fragment11,jsx as jsx13,jsxs as jsxs12}from"react/jsx-runtime";import{Fragment as Fragment12,jsx as jsx14,jsxs as jsxs13}from"react/jsx-runtime";import{SettingsSaveState as SettingsSaveState9,SettingsSingle as SettingsSingle2,failedBecause as failedBecause10,isForbidden as isForbidden10,reactMount as reactMount8}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect10,useState as useState13}from"react";import{jsx as jsx15,jsxs as jsxs14}from"react/jsx-runtime";import{WriteTeamConnectionSchema}from"@kanyun-ai-infra/band-contracts/api";import{ErrorNote as ErrorNote4,failedBecause as failedBecause11,isForbidden as isForbidden11,reactMount as reactMount9,useAppData,useRoute as useRoute6}from"@kanyun-ai-infra/band-plugin-react";import{useEffect as useEffect11,useState as useState14}from"react";import{Fragment as Fragment13,jsx as jsx16,jsxs as jsxs15}from"react/jsx-runtime";import{SettingsActions as SettingsActions8,SettingsField as SettingsField6,SettingsSaveState as SettingsSaveState10,errorText as errorText2,isForbidden as isForbidden12}from"@kanyun-ai-infra/band-plugin-react";import{useCallback,useEffect as useEffect12,useId as useId3,useState as useState15}from"react";import{Fragment as Fragment14,jsx as jsx17,jsxs as jsxs16}from"react/jsx-runtime";import{jsx as jsx18,jsxs as jsxs17}from"react/jsx-runtime";if(typeof document!=="undefined"&&document.head){const css="/* src/settings.css */\n.band-settings {\n box-sizing: border-box;\n width: 100%;\n max-width: 880px;\n margin: 0 auto;\n padding: 40px 32px 64px;\n display: grid;\n gap: 16px;\n align-content: start;\n}\n.band-settings h1 {\n margin: 0;\n font-family: var(--font-display);\n font-weight: 600;\n font-size: var(--fs-h1);\n line-height: 1.3;\n}\n.band-settings-state {\n padding: 56px 16px;\n}\n.band-settings-page {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n.band-settings-page > .band-sf {\n flex: 1;\n height: auto;\n}\n.band-settings-projecthead {\n flex: none;\n}\n.band-settings-open svg {\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n@media (max-width: 600px) {\n .band-settings {\n padding: 20px 16px 48px;\n gap: 12px;\n }\n .band-settings h1 {\n font-size: var(--fs-h2);\n }\n}\n.band-connections-description {\n color: var(--muted);\n font-size: var(--fs-body);\n margin: 0;\n}\n.band-connections-account {\n display: grid;\n gap: 20px;\n padding: 24px 0;\n}\n.band-connections-heading,\n.band-connections-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n flex-wrap: wrap;\n}\n.band-connections-heading h2 {\n margin: 0;\n font-size: var(--fs-h2);\n}\n.band-connections-active {\n color: var(--ok);\n}\n.band-connections-error {\n color: var(--bad);\n}\n.band-connections-expiring {\n color: var(--warn);\n font-size: var(--fs-body);\n margin: 0;\n}\n.band-connections-notice {\n display: grid;\n gap: 4px;\n font-size: var(--fs-body);\n}\n.band-connections-notice p {\n margin: 0;\n}\n.band-connections-form {\n display: grid;\n gap: 12px;\n max-width: 480px;\n}\n.band-connections-form .field {\n width: 100%;\n box-sizing: border-box;\n}\n.band-connections h1 {\n font-family: var(--font);\n}\n.band-team-project {\n margin-top: 24px;\n}\n.band-connections {\n overflow: auto;\n overscroll-behavior: contain;\n}\n.band-connections-account code {\n overflow-wrap: anywhere;\n}\n.band-team-connections .band-connections-actions {\n justify-content: flex-start;\n}\n.band-settings-viewers {\n display: grid;\n gap: 8px;\n position: relative;\n}\n.band-settings-people {\n list-style: none;\n margin: 0;\n padding: 0;\n display: grid;\n gap: 2px;\n}\n.band-settings-people li {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n min-height: 32px;\n}\n.band-settings-people li > span {\n display: flex;\n align-items: baseline;\n gap: 8px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.band-settings-people li > span > span,\n.band-settings-cands span {\n color: var(--muted);\n font-family: var(--mono);\n font-size: var(--fs-meta);\n}\n.band-settings-cands {\n list-style: none;\n margin: 0;\n padding: 4px;\n border-radius: var(--r-lg);\n background: var(--panel);\n box-shadow: var(--shadow-pop);\n display: grid;\n max-height: 240px;\n overflow: auto;\n overscroll-behavior: contain;\n}\n.band-settings-cands button {\n display: flex;\n align-items: baseline;\n gap: 8px;\n width: 100%;\n border: 0;\n padding: 6px 8px;\n border-radius: var(--r-sm);\n background: none;\n color: var(--ink);\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n.band-settings-cands button:hover {\n background: var(--fill);\n}\n.band-settings-cands button:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--accent);\n}\n.band-beta-members {\n max-width: 720px;\n}\n.band-beta-members header {\n display: grid;\n gap: 8px;\n}\n.band-beta-members header p,\n.band-beta-parse,\n.band-beta-admins {\n margin: 0;\n color: var(--muted);\n line-height: 1.7;\n}\n.band-beta-members h2 {\n margin: 16px 0 8px;\n font-size: var(--fs-title);\n}\n.band-beta-form {\n display: grid;\n gap: 8px;\n max-width: 560px;\n}\n.band-beta-form label {\n display: grid;\n gap: 6px;\n}\n.band-beta-form textarea {\n resize: vertical;\n font-family: var(--mono);\n}\n.band-beta-form .btn {\n justify-self: start;\n}\n.band-beta-members [role=alert] {\n color: var(--bad);\n}\n.band-beta-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.band-beta-list > li {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding: 12px 0;\n border-bottom: var(--hairline) solid var(--rule);\n}\n.band-beta-list > li > div {\n display: grid;\n gap: 2px;\n min-width: 0;\n}\n.band-beta-list strong {\n overflow-wrap: anywhere;\n}\n.band-beta-list span {\n font-size: var(--fs-dense);\n color: var(--muted);\n}\n.band-beta-list p.band-beta-note {\n margin: 4px 0 0;\n color: var(--ink);\n font-size: var(--fs-row);\n line-height: 1.6;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n.band-feedback-admin {\n max-width: 720px;\n}\n.band-feedback-admin header {\n display: grid;\n gap: 8px;\n}\n.band-feedback-admin header p,\n.band-feedback-meta {\n margin: 0;\n color: var(--muted);\n line-height: 1.7;\n}\n.band-feedback-filter {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 16px 0;\n}\n.band-feedback-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n.band-feedback-item {\n display: grid;\n gap: 6px;\n padding: 12px 0;\n border-bottom: var(--hairline) solid var(--rule);\n}\n.band-feedback-head {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.band-feedback-head > div {\n display: grid;\n gap: 2px;\n flex: 1;\n min-width: 0;\n}\n.band-feedback-head > div > span {\n color: var(--muted);\n font-size: var(--fs-meta);\n overflow-wrap: anywhere;\n}\n.band-feedback-body {\n margin: 0;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n line-height: 1.7;\n}\n.band-feedback-body.clamp {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n.band-feedback-detail {\n display: grid;\n gap: 8px;\n justify-items: start;\n}\n.band-feedback-detail label {\n display: grid;\n gap: 6px;\n width: 100%;\n}\n.band-feedback-detail textarea {\n resize: vertical;\n}\n.band-feedback-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n.band-feedback-sent {\n margin: 0;\n color: var(--muted);\n white-space: pre-wrap;\n}\n.band-feedback-admin [role=alert] {\n color: var(--bad);\n}\n.band-sf-picks {\n display: grid;\n gap: 4px;\n margin: 0;\n padding: 0;\n border: 0;\n min-width: 0;\n}\n.band-sf-picks legend {\n padding: 0;\n margin-bottom: 6px;\n font-size: var(--fs-ui);\n font-weight: 500;\n}\n.band-sf-pickgrid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n}\n.band-sf-pickcard {\n display: grid;\n grid-template-columns: 32px minmax(0, 1fr);\n gap: 2px 10px;\n align-items: start;\n padding: 12px;\n border: 0;\n border-radius: var(--r-lg);\n background: var(--panel);\n box-shadow: var(--shadow-card);\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n.band-sf-pickcard:hover {\n background: var(--fill);\n}\n.band-sf-pickcard:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px var(--panel), 0 0 0 3.5px var(--accent);\n}\n.band-sf-pickcard > i {\n grid-row: 1 / span 3;\n width: 32px;\n height: 32px;\n display: grid;\n place-items: center;\n border-radius: var(--r);\n background: var(--fill-2);\n font-style: normal;\n font-weight: 600;\n font-size: var(--fs-ui);\n}\n.band-sf-pickcard > b {\n font-weight: 600;\n}\n.band-sf-pickcard > small {\n color: var(--muted);\n font-size: var(--fs-dense);\n overflow-wrap: anywhere;\n}\n.band-sf-caps {\n grid-column: 2;\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-top: 4px;\n}\n.band-sf-lbl {\n font-size: var(--fs-ui);\n font-weight: 500;\n}\n.band-sf-pcards {\n display: grid;\n grid-template-columns: repeat(4, minmax(0, 1fr));\n gap: 8px;\n}\n.band-sf-pc {\n display: grid;\n gap: 2px;\n align-content: start;\n padding: 10px 12px;\n border-radius: var(--r-lg);\n background: var(--fill);\n cursor: pointer;\n min-width: 0;\n}\n.band-sf-pc > b {\n font-weight: 600;\n font-size: var(--fs-ui);\n overflow-wrap: anywhere;\n}\n.band-sf-pc > small {\n color: var(--muted);\n font-size: var(--fs-dense);\n overflow-wrap: anywhere;\n}\n.band-sf-pc.is-on {\n background: var(--accent-soft);\n box-shadow: inset 0 0 0 2px var(--accent);\n}\n.band-sf-pc.is-on > b {\n color: var(--accent-text);\n}\n.band-sf-pc:has(:focus-visible) {\n box-shadow: 0 0 0 2px var(--panel), 0 0 0 3.5px var(--accent);\n}\n.band-sf-pc:has(:disabled) {\n cursor: default;\n}\n.band-sf-combo {\n position: relative;\n min-width: 0;\n}\n.band-sf-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: 10;\n list-style: none;\n margin: 0;\n padding: 4px;\n background: var(--panel);\n border-radius: var(--r-lg);\n box-shadow: var(--shadow-pop);\n display: grid;\n gap: 1px;\n max-height: 220px;\n overflow: auto;\n}\n.band-sf-menu.is-up {\n top: auto;\n bottom: calc(100% + 4px);\n}\n.band-sf-menu > button {\n display: flex;\n justify-content: space-between;\n gap: 8px;\n padding: 6px 10px;\n border: 0;\n border-radius: var(--r-sm);\n background: none;\n color: inherit;\n font: inherit;\n font-size: var(--fs-ui);\n text-align: left;\n cursor: pointer;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n.band-sf-menu > button[aria-selected=true] {\n background: var(--accent-soft);\n color: var(--accent-text);\n}\n.band-sf-menu small {\n flex: none;\n color: var(--muted);\n}\n.band-sf-tiers {\n display: grid;\n gap: 10px;\n}\n.band-sf-tiers summary {\n cursor: pointer;\n font-size: var(--fs-ui);\n font-weight: 500;\n}\n.band-sf-tiers[open] {\n display: grid;\n gap: 10px;\n}\n.band-sf-inline {\n max-width: 640px;\n padding: 16px 18px;\n border-radius: var(--r-xl);\n background: var(--panel);\n box-shadow: var(--shadow-card);\n gap: 14px;\n}\n.band-sf-inline h3 {\n margin: 0;\n font-size: var(--fs-lead);\n font-weight: 600;\n}\n.band-sf-uses {\n display: grid;\n gap: 8px;\n margin: 0;\n padding: 0;\n border: 0;\n min-width: 0;\n}\n.band-sf-uses legend {\n padding: 0 0 6px;\n font-weight: 500;\n}\n.band-sf-use {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n gap: 4px 12px;\n align-items: center;\n}\n.band-sf-use > label {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n.band-sf-use .band-sf-err {\n grid-column: 1 / -1;\n}\n.band-sf-opt {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 8px 10px;\n border-radius: var(--r-lg);\n cursor: pointer;\n}\n.band-sf-opt:hover,\n.band-sf-opt:has(:checked) {\n background: var(--fill);\n}\n.band-sf-opt > span {\n display: grid;\n gap: 1px;\n min-width: 0;\n}\n.band-sf-opt small {\n color: var(--muted);\n font-size: var(--fs-dense);\n overflow-wrap: anywhere;\n}\n.band-sf-pair {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n.band-sf-pair > span {\n color: var(--muted);\n}\n.band-sf-default {\n color: var(--accent-text);\n background: var(--accent-soft);\n}\n.band-sf-sw {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n max-width: 560px;\n}\n.band-sf-sw > div {\n display: grid;\n gap: 2px;\n}\n.band-sf-reveal {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n max-width: 560px;\n}\n.band-sf-reveal .field {\n flex: 1 1 240px;\n width: auto;\n font-family: var(--mono);\n}\n.band-sf-confirm {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px 12px;\n font-size: var(--fs-ui);\n}\n@media (max-width: 600px) {\n .band-sf-pair {\n grid-template-columns: minmax(0, 1fr);\n }\n .band-sf-pickgrid {\n grid-template-columns: minmax(0, 1fr);\n }\n .band-sf-pcards {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .band-sf-inline {\n padding: 14px;\n }\n .band-sf-use {\n grid-template-columns: minmax(0, 1fr);\n }\n .band-sf-sw {\n display: grid;\n gap: 8px;\n }\n}\n.band-beta-list > li > .band-beta-actions {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 8px;\n flex-shrink: 0;\n}\n.band-beta-copy {\n display: grid;\n gap: 8px;\n margin-top: 12px;\n}\n.band-beta-copy textarea {\n width: 100%;\n}\n@media (max-width: 600px) {\n .band-beta-list > li {\n flex-wrap: wrap;\n }\n}\n";let el=document.head.querySelector('style[data-band-style="@kanyun-ai-infra/band-settings"]');if(!el){el=document.createElement("style");el.setAttribute("data-band-style","@kanyun-ai-infra/band-settings");document.head.prepend(el)}el.textContent=css}var SELF="@kanyun-ai-infra/band-settings";var INDEX_PAGE=`${SELF}/settings-index`;var INDEX_PATH="/settings";var PERSONAL_SECTIONS=[{group:"\u6A21\u578B\u4E0E\u51ED\u636E",slug:"models",title:"\u6A21\u578B\u914D\u7F6E",page:`${SELF}/models`},{group:"\u6A21\u578B\u4E0E\u51ED\u636E",slug:"net-credentials",title:"\u7F51\u7EDC\u51ED\u636E",page:`${SELF}/net-credentials`},{group:"\u8D26\u53F7\u4E0E\u8FDE\u63A5",slug:"connections",title:"\u6211\u7684\u8FDE\u63A5",page:`${SELF}/connections`},{group:"\u8D26\u53F7\u4E0E\u8FDE\u63A5",slug:"tokens",title:"\u5E73\u53F0 token",page:`${SELF}/platform-tokens`},{group:"\u901A\u77E5",slug:"reminders",title:"\u63D0\u9192",page:`${SELF}/reminders`}];var personalPath=(slug,...rest)=>rest.length===0?`/settings/${slug}`:`/settings/${[slug,...rest].map(encodeURIComponent).join("/")}`;var personalPage=slug=>PERSONAL_SECTIONS.find(s=>s.slug===slug)?.page??"";function personalGroups(){const out=[];for(const s of PERSONAL_SECTIONS){const last=out.at(-1);if(last?.group===s.group)last.sections.push({slug:s.slug,title:s.title});else out.push({group:s.group,sections:[{slug:s.slug,title:s.title}]})}return out}var pageLink=(ctx,page,params2)=>settingsLink(ctx,page,params2);function enterSection(slug){enterSectionKey(slug)}function Frame(props){return jsx(SettingsFrame,{...props})}var tokenProbes=new Map;function usePlatformTokensUsable(ctx,ask){const api=ctx.app.data.write?.platformTokens;const who=ctx.app.member?.id??"";const[usable,setUsable]=useState(true);useEffect(()=>{if(!ask||!api)return;let probe=tokenProbes.get(who);if(!probe){probe=api.list().then(()=>true,e=>!isForbidden(e));tokenProbes.set(who,probe)}let live=true;void probe.then(ok=>{if(live)setUsable(ok)});return()=>{live=false}},[api,who,ask]);return usable}function PersonalFrame({ctx,current,view="page",back="settings",children}){useEffect(()=>{enterSection(current??null)},[current]);const tokensUsable=usePlatformTokensUsable(ctx,current!=="tokens");const groups=personalGroups().map(g=>({group:g.group,sections:g.sections.filter(s=>tokensUsable||s.slug!=="tokens"||current==="tokens").map(s=>({slug:s.slug,title:s.title,href:personalPath(s.slug),page:personalPage(s.slug)}))})).filter(g=>g.sections.length>0);return jsx(Frame,{ctx,navLabel:"\u8BBE\u7F6E\u5206\u533A",title:"\u8BBE\u7F6E",obj:"\u53EA\u6709\u4F60\u770B\u5F97\u5230\u8FD9\u91CC",groups,current,view,backMobile:back==="settings"?{label:"\u8BBE\u7F6E",href:INDEX_PATH,page:INDEX_PAGE}:void 0,children})}function Back({ctx,label,page,href:href2,params:params2}){return jsx(SettingsBack,{target:{label,page,href:href2,...params2?{params:params2}:{}},onNavigate:t=>settingsNavigate(ctx,t)})}var ROLES=[["owner","\u521B\u5EFA\u4EBA"],["maintainer","\u7BA1\u7406\u5458"],["member","\u6210\u5458"]];var DESC="\u54EA\u4E9B\u89D2\u8272\u53EF\u4EE5\u6279\u51C6\u81EA\u5DF1\u63D0\u4EA4\u7684\u7248\u672C\u3002\u8BBE\u7F6E\u7ACB\u5373\u5F71\u54CD\u5C1A\u672A\u901A\u8FC7\u7684\u95E8\u7981\u3002";var READONLY="\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u6539\u3002";function ApprovalSettings({ctx}){const api=ctx.approvalSettings;const[roles,setRoles]=useState2(null);const[stored,setStored]=useState2(null);const[canManage,setCanManage]=useState2(false);const[readError,setReadError]=useState2(null);const[writeError,setWriteError]=useState2(null);const[saved,setSaved]=useState2(false);const[busy,setBusy]=useState2(false);const[reload,setReload]=useState2(0);useEffect2(()=>{let active=true;setReadError(null);const load=async()=>{if(!api)throw new Error("\u8FD9\u4E2A\u5BBF\u4E3B\u4E0D\u652F\u6301\u9879\u76EE\u81EA\u6279\u8BBE\u7F6E");return api.get()};void load().then(value=>{if(!active)return;setRoles(value.selfApprovalRoles);setStored(value.selfApprovalRoles);setCanManage(value.canManage)}).catch(e=>{if(active)setReadError(e)});return()=>{active=false}},[api,reload]);async function save(){if(!api||!roles||busy)return;setBusy(true);setWriteError(null);setSaved(false);try{const value=await api.set(roles);setRoles(value.selfApprovalRoles);setStored(value.selfApprovalRoles);setCanManage(value.canManage);setSaved(true)}catch(e){setWriteError(`\u8BBE\u7F6E\u6CA1\u6709\u4FDD\u5B58\uFF1A${errorText(e)}`)}finally{setBusy(false)}}const dirty=roles!==null&&stored!==null&&(roles.length!==stored.length||roles.some(r=>!stored.includes(r)));const forbidden=readError!==null&&isForbidden2(readError);const readFailed=readError!==null&&!forbidden;return jsxs(Fragment,{children:[jsx2(SettingsHead,{title:"\u6279\u51C6",desc:DESC}),forbidden?jsx2(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u6279\u51C6\u8BBE\u7F6E",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-project/project",params:{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{}}})},children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"}):readFailed?jsxs(SettingsReadError,{retry:()=>setReload(n=>n+1),children:["\u6279\u51C6\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",errorText(readError)]}):roles===null?jsx2(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u6279\u51C6\u8BBE\u7F6E\u2026"}):jsxs(Fragment,{children:[!canManage?jsx2("p",{className:"band-sf-muted",children:READONLY}):null,jsxs(SettingsSingle,{label:"\u6279\u51C6\u8BBE\u7F6E",children:[jsxs("fieldset",{children:[jsx2("legend",{className:"sr-only",children:"\u8C01\u53EF\u4EE5\u6279\u51C6\u81EA\u5DF1\u4EA7\u51FA\u7684\u7248\u672C"}),jsx2("p",{className:"band-sf-muted",children:"\u9009\u4E2D\u7684\u89D2\u8272\u4ECD\u987B\u7B26\u5408\u95E8\u7981\u8981\u6C42\u3002\u672A\u9009\u4E2D\u7684\u89D2\u8272\u9700\u8981\u5176\u4ED6\u4EBA\u6279\u51C6\u3002"}),jsx2(SettingsChoices,{children:ROLES.map(([role,label])=>jsxs("label",{className:"choice",children:[jsx2("input",{type:"checkbox",className:"checkbox",checked:roles.includes(role),disabled:!canManage||busy,onChange:e=>{setRoles(e.target.checked?[...roles,role]:roles.filter(r=>r!==role));setSaved(false);setWriteError(null)}}),label]},role))})]}),jsx2("p",{className:"band-sf-muted",children:"\u4E0D\u9009\u4EFB\u4F55\u89D2\u8272\u65F6\uFF0C\u6240\u6709\u4EBA\u90FD\u9700\u8981\u4ED6\u4EBA\u6279\u51C6\u3002Agent \u4EA7\u51FA\u7684\u7248\u672C\u4E0D\u53D7\u5F71\u54CD\u3002\u8BBE\u7F6E\u7ACB\u5373\u5F71\u54CD\u5C1A\u672A\u901A\u8FC7\u7684\u95E8\u7981\uFF0C\u5DF2\u7ECF\u901A\u8FC7\u7684\u9636\u6BB5\u4E0D\u4F1A\u64A4\u9500\u3002"})]}),canManage?jsxs(SettingsActions,{children:[jsx2("button",{type:"button",className:"btn primary",disabled:busy||!dirty,onClick:()=>void save(),children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":"\u4FDD\u5B58"}),jsx2(SettingsSaveState,{failed:writeError,saved:saved&&!dirty,missing:dirty&&!busy?"\u6539\u52A8\u8FD8\u6CA1\u4FDD\u5B58\uFF0C\u5207\u5230\u522B\u7684\u5206\u533A\u4F1A\u4E22\u6389":void 0})]}):null]})]})}var SELF2="@kanyun-ai-infra/band-settings";var DEPLOYMENT_CONNECTIONS_PAGE=`${SELF2}/deployment-connections`;var leaveDeployment=ctx=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"});function DeploymentCrumb({title}){return jsx3("nav",{className:"band-sf-crumb","aria-label":"\u4F4D\u7F6E",children:jsxs2("div",{className:"band-sf-crumb-in",children:[jsx3("span",{children:"\u90E8\u7F72\u7BA1\u7406"}),jsx3("span",{"aria-hidden":"true",children:"\u203A"}),jsx3("span",{"aria-current":"page",children:title})]})})}function DeploymentNoAccess({what,hint,leave:leave2}){return jsxs2(SettingsNoAccess,{title:`\u6CA1\u6709\u6743\u9650\u770B${what}`,action:{label:"\u56DE\u5230\u9996\u9875",onClick:leave2},children:[what,"\u53EA\u6709 Band \u7BA1\u7406\u5458\u80FD\u770B\u3001\u80FD\u6539\u3002",hint]})}var SELF3="@kanyun-ai-infra/band-settings";var betaMembersPage=reactMount(ctx=>jsx4(BetaMembersPanel,{api:ctx.app.data.write?.betaMembers,leave:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})}));var notFound=e=>typeof e==="object"&&e!==null&&e.code==="NOT_FOUND";var betaMembersMenu=reactMount((ctx,{owner})=>jsx4(BetaMembersMenu,{ctx,close:owner.close}));function BetaMembersMenu({ctx,close}){const api=ctx.app.data.write?.betaMembers;const[allowed,setAllowed]=useState3(false);useEffect3(()=>{let live=true;api?.isAdmin().then(value=>live&&setAllowed(value),()=>live&&setAllowed(false));return()=>{live=false}},[api]);if(!allowed)return null;return jsx4("button",{className:"btn ghost",type:"button",onClick:()=>{close();ctx.app.navigate({page:`${SELF3}/beta-members`})},children:"\u5185\u6D4B\u540D\u5355"})}var when=iso=>new Date(iso).toLocaleString("zh-CN",{hour12:false});function BetaMembersPanel({api,leave:leave2}){const[data,setData]=useState3(null);const[readError,setReadError]=useState3(null);const[noAccess,setNoAccess]=useState3(false);const[reload,setReload]=useState3(0);const[text,setText]=useState3("");const[busy,setBusy]=useState3(false);const[notice,setNotice]=useState3("");const[copyNotice,setCopyNotice]=useState3("");const[copyTarget,setCopyTarget]=useState3("");const[manualCopy,setManualCopy]=useState3("");const[error,setError]=useState3("");const alive=useRef(true);useEffect3(()=>{alive.current=true;return()=>{alive.current=false}},[]);useEffect3(()=>{let active=true;setReadError(null);setNoAccess(false);if(!api){setReadError("\u5F53\u524D\u73AF\u5883\u6CA1\u6709\u5185\u6D4B\u540D\u5355");return}api.list().then(value=>active&&setData(value),e=>{if(!active)return;if(notFound(e))setNoAccess(true);else setReadError(failedBecause(e,"\u70B9\u91CD\u8BD5"))});return()=>{active=false}},[api,reload]);const parsed=parseLdapList(text);const tooMany=parsed.valid.length>BETA_MEMBERS_BATCH_MAX;const add=async()=>{if(!api||busy||parsed.valid.length===0||tooMany)return;setBusy(true);setError("");setNotice("");try{const r=await api.add(parsed.valid);if(!alive.current)return;const parts=[`\u52A0\u4E86 ${r.added.length} \u4EBA`];if(r.existing.length>0)parts.push(`${r.existing.length} \u4EBA\u672C\u6765\u5C31\u5728\u540D\u5355\u91CC`);setNotice(parts.join("\uFF0C"));setText(parsed.invalid.join("\n"));setReload(n=>n+1)}catch(e){if(alive.current)setError(`\u6CA1\u52A0\u4E0A\uFF1A${failedBecause(e,"\u8BF7\u91CD\u8BD5")}`)}finally{if(alive.current)setBusy(false)}};const remove=async ldap=>{if(!api||busy)return;setBusy(true);setError("");setNotice("");try{await api.remove(ldap);if(!alive.current)return;setNotice(`\u5DF2\u79FB\u51FA ${ldap}`);setReload(n=>n+1)}catch(e){if(alive.current)setError(`\u6CA1\u79FB\u51FA\uFF1A${failedBecause(e,"\u8BF7\u91CD\u8BD5")}`)}finally{if(alive.current)setBusy(false)}};const invite=async ldap=>{if(!api||busy)return;setBusy(true);setError("");setNotice("");try{const r=await api.add([ldap]);if(!alive.current)return;setNotice(r.added.includes(ldap)?`\u5DF2\u5F00\u901A ${ldap}`:`${ldap} \u5DF2\u7ECF\u5F00\u901A\u8FC7\u4E86\uFF0C\u5237\u65B0\u4E00\u4E0B\u770B\u770B`);setReload(n=>n+1)}catch(e){if(alive.current)setError(`\u6CA1\u5F00\u901A\uFF1A${failedBecause(e,"\u8BF7\u91CD\u8BD5")}`)}finally{if(alive.current)setBusy(false)}};const copy=async(ldaps,target)=>{setCopyTarget(target);const value=ldaps.join("\n");setCopyNotice("");setManualCopy("");try{await navigator.clipboard.writeText(value);if(alive.current)setCopyNotice(`\u5DF2\u590D\u5236 ${ldaps.length} \u4E2A ldap`)}catch{if(!alive.current)return;setCopyNotice("\u6CA1\u80FD\u590D\u5236\uFF0C\u8BF7\u9009\u4E2D\u4E0B\u9762\u7684 ldap \u624B\u52A8\u590D\u5236");setManualCopy(value)}};const copyFeedback=()=>jsxs3(Fragment2,{children:[copyNotice&&jsx4("output",{className:"band-beta-notice","aria-live":"polite",children:copyNotice}),manualCopy&&jsxs3("label",{className:"band-beta-copy",children:[jsx4("span",{children:"\u624B\u52A8\u590D\u5236 ldap"}),jsx4("textarea",{className:"field mono",readOnly:true,rows:Math.min(6,manualCopy.split("\n").length),value:manualCopy,onFocus:e=>e.currentTarget.select()})]})]});const requested=data?.members.filter(m=>m.status==="requested")??[];const invited=data?.members.filter(m=>m.status==="invited")??[];const row=(m,action)=>jsxs3("li",{children:[jsxs3("div",{children:[jsx4("strong",{className:"mono",children:m.ldap}),jsxs3("span",{children:[m.addedBy===m.ldap?`\u62A5\u540D\u65F6\u95F4\uFF1A${when(m.addedAt)}`:`${m.addedBy} \u4E8E ${when(m.addedAt)} \u52A0\u5165`,m.requestTeam&&` \xB7 ${m.requestTeam}`]}),m.requestNote&&jsx4("p",{className:"band-beta-note",children:m.requestNote}),action==="invite"&&copyTarget===m.ldap&&copyFeedback()]}),action==="invite"?jsxs3("div",{className:"band-beta-actions",children:[jsx4("button",{className:"btn ghost",type:"button","aria-label":`\u590D\u5236 ${m.ldap} \u7684 ldap`,onClick:()=>void copy([m.ldap],m.ldap),children:"\u590D\u5236 ldap"}),jsx4("button",{className:"btn primary",type:"button",disabled:busy,"aria-label":`\u5F00\u901A ${m.ldap}`,onClick:()=>void invite(m.ldap),children:"\u5F00\u901A"})]}):jsx4("button",{className:"btn ghost",type:"button",disabled:busy,"aria-label":`\u79FB\u51FA ${m.ldap}`,onClick:()=>void remove(m.ldap),children:"\u79FB\u51FA"})]},m.ldap);return jsxs3("main",{className:"band-settings band-beta-members",children:[jsx4(DeploymentCrumb,{title:"\u5185\u6D4B\u540D\u5355"}),jsxs3("header",{children:[jsx4("h1",{children:"\u5185\u6D4B\u540D\u5355"}),jsx4("p",{children:"\u5185\u6D4B\u5F00\u7740\u65F6\uFF0C\u53EA\u6709\u540D\u5355\u91CC\u7684\u4EBA\u80FD\u7528 Band\uFF0C\u5176\u4ED6\u4EBA\u767B\u5F55\u540E\u770B\u5230\u62A5\u540D\u9875\uFF0C\u81EA\u5DF1\u62A5\u540D\u540E\u6392\u5728\u300C\u62A5\u540D\u5F85\u5F00\u901A\u300D\u91CC\u3002 \u70B9\u300C\u5F00\u901A\u300D\u4ED6\u5C31\u80FD\u7528\u4E86\u3002Band \u7BA1\u7406\u5458\u4E0D\u7528\u52A0\uFF0C\u6C38\u8FDC\u5728\u5185\u3002\u522B\u4EBA\u53D1\u51FA\u7684\u5206\u4EAB\u94FE\u63A5\u4E0D\u53D7\u5F71\u54CD\u3002"})]}),noAccess?jsx4(DeploymentNoAccess,{what:"\u5185\u6D4B\u540D\u5355",hint:"\u8981\u628A\u540C\u4E8B\u52A0\u8FDB\u5185\u6D4B\uFF0C\u8BF7\u627E Band \u7BA1\u7406\u5458\u3002",leave:leave2}):readError!==null?jsxs3(ErrorNote,{retry:()=>setReload(n=>n+1),children:["\u540D\u5355\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]}):data===null?jsx4("output",{children:"\u6B63\u5728\u8BFB\u53D6\u540D\u5355\u2026"}):jsxs3(Fragment2,{children:[jsxs3("form",{className:"band-beta-form",onSubmit:e=>{e.preventDefault();void add()},children:[jsxs3("label",{children:[jsx4("span",{children:"\u52A0\u4EBA"}),jsx4("textarea",{className:"field",rows:4,value:text,placeholder:"\u586B ldap\uFF0C\u53EF\u7C98\u8D34\u591A\u4E2A",onChange:e=>setText(e.target.value),disabled:busy,"aria-invalid":parsed.invalid.length>0,"aria-describedby":"band-beta-hint band-beta-parse",spellCheck:false})]}),jsxs3("p",{id:"band-beta-hint",className:"band-beta-parse",children:["\u7528\u7A7A\u683C\u3001\u9017\u53F7\u6216\u6362\u884C\u9694\u5F00\uFF0C\u4E00\u6B21\u6700\u591A ",BETA_MEMBERS_BATCH_MAX," \u4EBA\u3002"]}),jsxs3("p",{id:"band-beta-parse",className:"band-beta-parse",children:[parsed.valid.length>0?`\u5C06\u52A0 ${parsed.valid.length} \u4EBA`:"\u8FD8\u6CA1\u586B\u4EBA",parsed.invalid.length>0&&jsxs3("span",{role:"alert",children:["\u3002\u8FD9\u4E9B\u4E0D\u662F ldap\uFF0C\u4E0D\u4F1A\u52A0\uFF1A",parsed.invalid.join("\u3001")]}),tooMany&&jsxs3("span",{role:"alert",children:["\u3002\u4E00\u6B21\u6700\u591A\u52A0 ",BETA_MEMBERS_BATCH_MAX," \u4EBA\uFF0C\u8FD9\u6B21\u591A\u4E86"," ",parsed.valid.length-BETA_MEMBERS_BATCH_MAX," \u4EBA\uFF0C\u8BF7\u5206\u6279\u52A0"]})]}),jsx4("button",{className:"btn primary",type:"submit",disabled:busy||parsed.valid.length===0||tooMany,children:busy?"\u6B63\u5728\u5904\u7406\u2026":"\u52A0\u5165\u540D\u5355"})]}),notice&&jsx4("output",{className:"band-beta-notice",children:notice}),error&&jsx4("p",{role:"alert",children:error}),jsxs3("section",{"aria-label":"Band \u7BA1\u7406\u5458",children:[jsx4("h2",{children:"Band \u7BA1\u7406\u5458\uFF08\u6C38\u8FDC\u5728\u5185\uFF09"}),jsx4("p",{className:"band-beta-admins",children:data.admins.length>0?data.admins.join("\u3001"):"\u6CA1\u6709\u914D\u7F6E\u7BA1\u7406\u5458"})]}),jsxs3("section",{"aria-label":"\u62A5\u540D\u5F85\u5F00\u901A",children:[jsxs3("h2",{children:["\u62A5\u540D\u5F85\u5F00\u901A\uFF08",requested.length," \u4EBA\uFF09"]}),requested.length>0&&jsx4("button",{className:"btn ghost",type:"button",onClick:()=>void copy(requested.map(m=>m.ldap),"all"),children:"\u590D\u5236\u5168\u90E8\u5F85\u5F00\u901A ldap"}),copyTarget==="all"&&copyFeedback(),requested.length===0?jsx4("p",{children:"\u8FD8\u6CA1\u6709\u4EBA\u81EA\u5DF1\u62A5\u540D\u3002"}):jsx4("ul",{className:"band-beta-list",children:requested.map(m=>row(m,"invite"))})]}),jsxs3("section",{"aria-label":"\u540D\u5355",children:[jsxs3("h2",{children:["\u540D\u5355\uFF08",invited.length," \u4EBA\uFF09"]}),invited.length===0?jsx4("p",{children:"\u540D\u5355\u8FD8\u662F\u7A7A\u7684\u3002\u73B0\u5728\u53EA\u6709 Band \u7BA1\u7406\u5458\u80FD\u7528\u3002"}):jsx4("ul",{className:"band-beta-list",children:invited.map(m=>row(m,"remove"))})]})]})]})}var SELF4="@kanyun-ai-infra/band-settings";var PAGE=`${SELF4}/connections`;var LIST_HREF="/settings/connections";var DESC2="\u8BA9 Band \u4EE5\u4F60\u7684\u540D\u4E49\u8BFB\u5916\u90E8\u5E73\u53F0\u3002token \u53EA\u663E\u793A\u672B 4 \u4F4D\u3002";var connectionsPage=reactMount2(ctx=>jsx5(Connections,{ctx}));function Connections({ctx}){const route=useRoute(ctx);const api=ctx.app.data.write?.personalConnections;const[rows,setRows]=useState4(null);const[readError,setReadError]=useState4(null);const[forbidden,setForbidden]=useState4(false);const[reload,setReload]=useState4(0);const[notice]=useCrossPageNotice("connections");const[local,flashLocal]=useSavedNote();const[token,setToken]=useState4("");const[busy,setBusy]=useState4(false);const[error,setError]=useState4("");const item=route.params.item;useEffect4(()=>{let live=true;setReadError(null);setForbidden(false);if(!api){setReadError("\u5F53\u524D\u73AF\u5883\u672A\u914D\u7F6E\u4E2A\u4EBA\u8FDE\u63A5\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458");return}api.list().then(r=>{if(live)setRows(r)},e=>{if(!live)return;setForbidden(isForbidden3(e));setReadError(failedBecause2(e,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,reload]);const go=next=>ctx.app.navigate({page:PAGE,...next?{params:{item:next}}:{}});const docz=rows?.find(r=>r.connector==="docz");const connect=async()=>{if(!api||busy||token.length<8)return;setBusy(true);setError("");const input=token;setToken("");try{await api.connect({token:input});flashLocal("docz \u5DF2\u8FDE\u63A5");setReload(n=>n+1)}catch{setError("\u8FDE\u63A5\u5931\u8D25\uFF0C\u91CD\u65B0\u586B\u5199 token \u540E\u518D\u70B9\u300C\u8FDE\u4E0A\u300D")}finally{setBusy(false)}};const disconnect=async()=>{if(!api||busy)return;setBusy(true);setError("");try{await api.disconnect();markNotice("connections","docz \u5DF2\u65AD\u5F00");setReload(n=>n+1);go()}catch{setError("\u65AD\u5F00\u5931\u8D25\uFF0C\u8BF7\u518D\u70B9\u4E00\u6B21\u300C\u65AD\u5F00\u300D")}finally{setBusy(false)}};if(forbidden){return jsxs4(PersonalFrame,{ctx,current:"connections",children:[jsx5(SettingsHead,{title:"\u6211\u7684\u8FDE\u63A5",desc:DESC2}),jsx5(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u6211\u7684\u8FDE\u63A5",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u6211\u7684\u8FDE\u63A5\u6309\u767B\u5F55\u4EBA\u5F52\u5C5E\uFF0C\u53EA\u6709\u672C\u4EBA\u80FD\u770B\u3002\u8981\u7528\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u3002"})]})}if(readError!==null){return jsxs4(PersonalFrame,{ctx,current:"connections",children:[jsx5(SettingsHead,{title:"\u6211\u7684\u8FDE\u63A5",desc:DESC2}),api?jsxs4(SettingsReadError,{retry:()=>setReload(n=>n+1),children:["\u6211\u7684\u8FDE\u63A5\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]}):jsx5(SettingsEmpty,{children:"\u5F53\u524D\u73AF\u5883\u672A\u914D\u7F6E\u4E2A\u4EBA\u8FDE\u63A5\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002"})]})}if(rows===null){return jsxs4(PersonalFrame,{ctx,current:"connections",children:[jsx5(SettingsHead,{title:"\u6211\u7684\u8FDE\u63A5",desc:DESC2}),jsx5(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u8FDE\u63A5\u2026"})]})}if(item==="docz"){const active=docz?.status==="active";return jsxs4(PersonalFrame,{ctx,current:"connections",back:"list",children:[jsx5(Back,{ctx,label:"\u6211\u7684\u8FDE\u63A5",page:PAGE,href:LIST_HREF}),jsx5(SettingsHead,{title:"docz",desc:"\u4EE5\u4F60\u7684\u540D\u4E49\u8BFB\u4F60\u6709\u6743\u9650\u7684\u6587\u6863\u3002\u4FDD\u5B58\u8FDE\u63A5\u4E0D\u4F1A\u8BFB\u53D6\u4F60\u7684\u6587\u6863\uFF0C\u6743\u9650\u4F1A\u5728\u4F7F\u7528\u65F6\u9A8C\u8BC1\u3002"}),jsx5(SettingsFacts,{items:[{key:"\u72B6\u6001",value:statusText(docz)},{key:"\u672B 4 \u4F4D",value:docz?.secretTails.token?`\u2022\u2022\u2022\u2022${docz.secretTails.token}`:"\u2014"},{key:"\u8FDE\u63A5\u4E8E",value:docz?shortDate(docz.createdAt):"\u2014"}]}),active?jsx5("p",{className:"band-sf-banner",children:"\u5DF2\u7ECF\u8FDE\u4E0A\u3002\u8981\u6362 token \u5C31\u5728\u4E0B\u9762\u65AD\u5F00\u518D\u8FDE\u4E00\u6B21\uFF1B\u65AD\u5F00\u540E Band \u4E0D\u518D\u4EE5\u4F60\u7684\u540D\u4E49\u8BFB docz\u3002"}):jsxs4(SettingsForm,{label:"\u8FDE\u63A5 docz",onSubmit:()=>void connect(),children:[jsx5(SettingsField,{label:"\u4E2A\u4EBA token",required:true,hint:"\u5728 docz \u7684\u4E2A\u4EBA\u8BBE\u7F6E\u91CC\u521B\u5EFA token\u3002\u63D0\u4EA4\u540E\u8F93\u5165\u6846\u6E05\u7A7A\uFF0C\u53EA\u7559\u672B 4 \u4F4D\u3002",children:field=>jsx5("input",{...field,className:"field",type:"password",autoComplete:"off",value:token,minLength:8,maxLength:8192,disabled:busy,placeholder:"\u7C98\u8D34\u4F60\u7684 docz \u4E2A\u4EBA token",onChange:e=>setToken(e.target.value)})}),jsx5(SettingsActions2,{children:jsx5("button",{type:"submit",className:"btn primary",disabled:busy||token.length<8,children:busy?"\u6B63\u5728\u8FDE\u63A5\u2026":"\u8FDE\u4E0A"})})]}),jsx5(SettingsDanger,{children:jsx5(SettingsDangerRow,{title:"\u65AD\u5F00 docz",note:"Band \u4E0D\u518D\u4EE5\u4F60\u7684\u540D\u4E49\u8BFB docz\uFF0Ctoken \u5F53\u573A\u5220\u6389\u3002",action:jsx5("button",{type:"button",className:"btn danger",disabled:!active||busy,onClick:()=>void disconnect(),children:"\u65AD\u5F00"})})}),error?jsx5(SettingsSaveState2,{failed:error}):null,jsx5(SettingsNotice,{text:local})]})}return jsxs4(PersonalFrame,{ctx,current:"connections",children:[jsx5(SettingsHead,{title:"\u6211\u7684\u8FDE\u63A5",desc:DESC2}),jsxs4(SettingsRows,{label:"\u6211\u7684\u8FDE\u63A5",children:[jsx5(SettingsRow,{title:"docz",tags:jsx5("span",{className:"chip plain s-approved",children:statusText(docz)}),meta:docz?[docz.secretTails.token?`\u672B 4 \u4F4D \u2022\u2022\u2022\u2022${docz.secretTails.token}`:"\u2014",`${shortDate(docz.createdAt)} \u8FDE\u63A5`]:["\u8FD8\u6CA1\u6709\u8FDE\u63A5\u3002\u8FDE\u4E0A\u4EE5\u540E\uFF0Cagent \u624D\u80FD\u8BFB\u4F60\u6709\u6743\u9650\u7684\u6587\u6863\u3002"],href:`${LIST_HREF}/docz`,onOpen:()=>go("docz"),actions:docz?.status==="active"?jsx5("span",{className:"band-sf-muted",children:"\u66F4\u6362 token"}):jsx5("span",{className:"band-sf-muted",children:"\u8FDE\u63A5"})}),jsx5(SettingsRow,{title:"\u77F3\u58A8",tags:jsx5("span",{className:"tag",children:"\u4E0D\u7528\u8FDE\u63A5"}),meta:["\u8BFB\u516C\u5F00\u5206\u4EAB\u7684\u77F3\u58A8\u6587\u6863\uFF0C\u4E0D\u9700\u8981 token"]})]}),jsx5("p",{className:"band-sf-muted",children:"\u77F3\u58A8\u7528\u4F60\u767B\u5F55 Band \u7684\u8D26\u53F7\u8BFB\uFF0C\u6BCF\u6B21\u5BFC\u5165\u65F6\u73B0\u53D6\u6388\u6743\u3001\u7528\u5B8C\u5C31\u4E22\uFF0CBand \u4E0D\u4FDD\u5B58\u3002"}),jsx5(SettingsNotice,{text:local||notice})]})}function statusText(c){if(!c)return"\u672A\u8FDE\u63A5";if(c.status==="active")return"\u5DF2\u8FDE\u63A5";if(c.status==="expired")return"\u9700\u8981\u91CD\u65B0\u8FDE\u63A5";return"\u5DF2\u65AD\u5F00"}function shortDate(iso){const d=new Date(iso);const p=n=>String(n).padStart(2,"0");return`${p(d.getMonth()+1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`}var PROJECT="@kanyun-ai-infra/band-project";var WORKSHOPS="@kanyun-ai-infra/band-workshops";function Crumb({ctx}){const{workshop,workshopName,workshopIcon,name}=ctx.project;return jsxs5("nav",{className:"band-sf-crumb-in","aria-label":"\u4F4D\u7F6E",children:[workshop?jsxs5(Fragment3,{children:[jsxs5("span",{className:"band-sf-crumb-ws",children:[jsx6(WorkshopIcon,{icon:workshopIcon,size:16}),jsx6("span",{children:workshopName??workshop})]}),jsx6("span",{"aria-hidden":"true",children:"\u203A"})]}):null,jsx6("button",{type:"button",title:name,onClick:()=>ctx.app.navigate({page:`${PROJECT}/project`,params:{project:ctx.project.id,...workshop?{workshop}:{}}}),children:name})]})}function WorkshopCrumb({ctx,workshopId,workshopName,here}){return jsx6("nav",{className:"band-sf-crumb","aria-label":"\u4F4D\u7F6E",children:jsxs5("div",{className:"band-sf-crumb-in",children:[jsx6("a",{href:"/workshops",onClick:pageLink(ctx,`${WORKSHOPS}/workshops`),children:"\u5DE5\u574A"}),jsx6("span",{"aria-hidden":"true",children:"\u203A"}),jsx6("a",{href:`/w/${encodeURIComponent(workshopId)}/about`,onClick:pageLink(ctx,`${WORKSHOPS}/about`,{workshop:workshopId}),children:workshopName}),jsx6("span",{"aria-hidden":"true",children:"\u203A"}),jsx6("span",{"aria-current":"page",children:here})]})})}var SELF5="@kanyun-ai-infra/band-settings";var feedbackAdminPage=reactMount3(ctx=>jsx7(FeedbackAdminPanel,{api:ctx.app.data.write?.feedbackAdmin,leave:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})}));var feedbackAdminMenu=reactMount3((ctx,{owner})=>jsx7(FeedbackAdminMenu,{ctx,close:owner.close}));function FeedbackAdminMenu({ctx,close}){const api=ctx.app.data.write?.feedbackAdmin;const[allowed,setAllowed]=useState5(false);useEffect5(()=>{let live=true;api?.isAdmin().then(value=>live&&setAllowed(value),()=>live&&setAllowed(false));return()=>{live=false}},[api]);if(!allowed)return null;return jsx7("button",{className:"btn ghost",type:"button",onClick:()=>{close();ctx.app.navigate({page:`${SELF5}/feedback-admin`})},children:"\u53CD\u9988\u7BA1\u7406"})}var when2=iso=>new Date(iso).toLocaleString("zh-CN",{hour12:false});var STATUS_LABEL={new:"\u65B0\u53CD\u9988",seen:"\u5DF2\u770B",resolved:"\u5DF2\u89E3\u51B3"};var STATUS_CHIP={new:"s-open",seen:"",resolved:"s-resolved"};var FILTERS=[{value:"open",label:"\u672A\u5904\u7406"},{value:"all",label:"\u5168\u90E8"},{value:"new",label:"\u65B0\u53CD\u9988"},{value:"seen",label:"\u5DF2\u770B"},{value:"resolved",label:"\u5DF2\u89E3\u51B3"}];var EMPTY_LABEL={open:"\u6CA1\u6709\u672A\u5904\u7406\u7684\u53CD\u9988",all:"\u8FD8\u6CA1\u6709\u4EBA\u63D0\u8FC7\u53CD\u9988",new:"\u6CA1\u6709\u65B0\u53CD\u9988",seen:"\u6CA1\u6709\u6807\u4E3A\u5DF2\u770B\u7684\u53CD\u9988",resolved:"\u6CA1\u6709\u5DF2\u89E3\u51B3\u7684\u53CD\u9988"};function FeedbackAdminPanel({api,leave:leave2}){const[admin,setAdmin]=useState5(null);const[filter,setFilter]=useState5("open");const[items,setItems]=useState5(null);const[next,setNext]=useState5(null);const[readError,setReadError]=useState5(null);const[reload,setReload]=useState5(0);const[more,setMore]=useState5(false);const[openId,setOpenId]=useState5(null);const filterRef=useRef2(filter);filterRef.current=filter;useEffect5(()=>{let live=true;if(!api){setReadError("\u5F53\u524D\u73AF\u5883\u6CA1\u6709\u53CD\u9988\u7BA1\u7406");return}api.isAdmin().then(v=>live&&setAdmin(v),()=>live&&setAdmin(true));return()=>{live=false}},[api]);useEffect5(()=>{if(!api||admin!==true)return;let live=true;setReadError(null);setItems(null);setMore(false);api.list({status:filter}).then(r=>{if(!live)return;setItems(r.items);setNext(r.nextCursor)},e=>{if(!live)return;if(isForbidden4(e))setAdmin(false);else setReadError(failedBecause3(e,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,admin,filter,reload]);const loadMore=async()=>{if(!api||next===null||more)return;const at=filter;setMore(true);try{const r=await api.list({status:at,cursor:next});if(filterRef.current!==at)return;setItems(cur=>[...cur??[],...r.items]);setNext(r.nextCursor)}catch(e){if(filterRef.current!==at)return;if(isForbidden4(e))setAdmin(false);else setReadError(failedBecause3(e,"\u70B9\u91CD\u8BD5"))}finally{if(filterRef.current===at)setMore(false)}};const replace=row=>setItems(cur=>{if(!cur)return cur;return cur.map(r=>r.id===row.id?row:r)});return jsxs6("main",{className:"band-settings band-feedback-admin",children:[jsx7(DeploymentCrumb,{title:"\u53CD\u9988\u7BA1\u7406"}),jsxs6("header",{children:[jsx7("h1",{children:"\u53CD\u9988\u7BA1\u7406"}),jsx7("p",{children:"\u7528\u6237\u5728 Band \u91CC\u63D0\u4EA4\u7684\u5185\u6D4B\u53CD\u9988\u3002\u6539\u72B6\u6001\u3001\u5199\u5907\u6CE8\u53EA\u6709\u7BA1\u7406\u5458\u770B\u5F97\u5230\uFF1B\u56DE\u590D\u4F1A\u51FA\u73B0\u5728\u63D0\u4EA4\u4EBA\u7684\u300C\u6211\u7684\u53CD\u9988\u300D\u91CC\u3002"})]}),admin===false?jsx7(DeploymentNoAccess,{what:"\u53CD\u9988\u7BA1\u7406",hint:"\u60F3\u53CD\u9988\u95EE\u9898\uFF0C\u8BF7\u7528\u9875\u9762\u4E0A\u7684\u53CD\u9988\u5165\u53E3\u3002",leave:leave2}):readError!==null?jsxs6(ErrorNote2,{retry:()=>setReload(n=>n+1),children:["\u53CD\u9988\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]}):admin===null||items===null?jsx7("output",{children:"\u6B63\u5728\u8BFB\u53D6\u53CD\u9988\u2026"}):jsxs6(Fragment4,{children:[jsxs6("label",{className:"band-feedback-filter",children:[jsx7("span",{children:"\u72B6\u6001"}),jsx7("select",{className:"select",value:filter,onChange:e=>setFilter(e.target.value),children:FILTERS.map(f=>jsx7("option",{value:f.value,children:f.label},f.value))})]}),items.length===0?jsxs6("p",{children:[EMPTY_LABEL[filter],"\u3002"]}):jsx7("ul",{className:"band-feedback-list",children:items.map(row=>jsx7(FeedbackRow,{row,api,open:openId===row.id,toggle:()=>setOpenId(openId===row.id?null:row.id),onChange:replace},row.id))}),next!==null&&jsx7("button",{className:"btn",type:"button",disabled:more,onClick:()=>void loadMore(),children:more?"\u6B63\u5728\u8BFB\u53D6\u2026":"\u52A0\u8F7D\u66F4\u591A"})]})]})}function FeedbackRow({row,api,open,toggle,onChange}){const[note,setNote]=useState5(row.adminNote??"");const[reply,setReply]=useState5("");const[busy,setBusy]=useState5(false);const[error,setError]=useState5("");const[notice,setNotice]=useState5("");const alive=useRef2(true);useEffect5(()=>{alive.current=true;return()=>{alive.current=false}},[]);const autoSeen=useRef2(false);useEffect5(()=>{if(!open||autoSeen.current||row.status!=="new")return;autoSeen.current=true;api.patch(row.id,{status:"seen"}).then(r=>alive.current&&onChange(r.feedback),()=>{})},[open]);const save=async(input,failed2,done,after)=>{if(busy)return;setBusy(true);setError("");setNotice("");try{const r=await api.patch(row.id,input);if(!alive.current)return;onChange(r.feedback);setNotice(done);after?.()}catch(e){if(alive.current)setError(`${failed2}\uFF1A${failedBecause3(e,"\u8BF7\u91CD\u8BD5")}`)}finally{if(alive.current)setBusy(false)}};const who=row.authorName?`${row.authorName}\uFF08${row.author}\uFF09`:row.author;const where=row.projectName?`${row.workshopName?`${row.workshopName} / `:""}${row.projectName}`:row.pageUrl;const replyLen=feedbackTextLength(reply.trim());const noteLen=feedbackTextLength(note.trim());const noteChanged=note.trim()!==(row.adminNote??"");return jsxs6("li",{className:"band-feedback-item","data-status":row.status,children:[jsxs6("div",{className:"band-feedback-head",children:[jsxs6("div",{children:[jsx7("strong",{children:who}),jsxs6("span",{children:[when2(row.createdAt)," \xB7 ",where]})]}),jsx7("span",{className:`chip band-feedback-status ${STATUS_CHIP[row.status]}`,children:STATUS_LABEL[row.status]}),row.reply!==null&&jsx7("span",{className:"chip",children:"\u5DF2\u56DE\u590D"}),jsx7("button",{className:"btn ghost",type:"button","aria-expanded":open,"aria-label":open?"\u6536\u8D77":"\u5C55\u5F00",onClick:toggle,children:open?"\u6536\u8D77":"\u5C55\u5F00"})]}),jsx7("p",{className:open?"band-feedback-body":"band-feedback-body clamp",children:row.body}),open&&jsxs6("div",{className:"band-feedback-detail",children:[jsxs6("p",{className:"band-feedback-meta",children:["\u9875\u9762"," ",jsx7("a",{className:"mono",href:row.pageUrl,target:"_blank",rel:"noreferrer",children:row.pageUrl})]}),jsxs6("div",{className:"band-feedback-actions",children:[row.status!=="seen"&&jsx7("button",{className:"btn",type:"button",disabled:busy,onClick:()=>void save({status:"seen"},"\u6CA1\u6539\u6210","\u5DF2\u6807\u4E3A\u5DF2\u770B"),children:"\u6807\u4E3A\u5DF2\u770B"}),row.status!=="resolved"&&jsx7("button",{className:"btn",type:"button",disabled:busy,onClick:()=>void save({status:"resolved"},"\u6CA1\u6539\u6210","\u5DF2\u6807\u4E3A\u5DF2\u89E3\u51B3"),children:"\u6807\u4E3A\u5DF2\u89E3\u51B3"}),row.status!=="new"&&jsx7("button",{className:"btn ghost",type:"button",disabled:busy,onClick:()=>void save({status:"new"},"\u6CA1\u6539\u6210","\u5DF2\u6539\u56DE\u65B0\u53CD\u9988"),children:"\u6539\u56DE\u65B0\u53CD\u9988"})]}),row.reply!==null&&jsxs6("p",{className:"band-feedback-sent",children:["\u5DF2\u56DE\u590D",row.repliedBy?`\uFF08${row.repliedBy}\uFF09`:"","\uFF1A",row.reply]}),jsxs6("label",{children:[jsx7("span",{children:"\u7BA1\u7406\u5458\u5907\u6CE8\uFF08\u53EA\u6709\u7BA1\u7406\u5458\u770B\u5F97\u5230\uFF09"}),jsx7("textarea",{className:"field",rows:2,"aria-label":"\u7BA1\u7406\u5458\u5907\u6CE8",value:note,onChange:e=>setNote(e.target.value),disabled:busy,"aria-invalid":noteLen>FEEDBACK_NOTE_MAX})]}),noteLen>FEEDBACK_NOTE_MAX&&jsxs6("p",{role:"alert",children:["\u5907\u6CE8\u6700\u591A ",FEEDBACK_NOTE_MAX," \u5B57\uFF0C\u73B0\u5728 ",noteLen," \u5B57\uFF0C\u8BF7\u5220\u77ED\u4E00\u4E9B\u518D\u5B58"]}),jsx7("button",{className:"btn",type:"button",disabled:busy||!noteChanged||noteLen>FEEDBACK_NOTE_MAX,onClick:()=>void save({adminNote:note.trim()===""?null:note},"\u5907\u6CE8\u6CA1\u5B58\u4E0A","\u5907\u6CE8\u5DF2\u5B58"),children:"\u4FDD\u5B58\u5907\u6CE8"}),jsxs6("label",{children:[jsx7("span",{children:"\u56DE\u590D\u7ED9\u63D0\u4EA4\u4EBA"}),jsx7("textarea",{className:"field",rows:3,"aria-label":"\u56DE\u590D\u7ED9\u63D0\u4EA4\u4EBA",value:reply,placeholder:row.reply!==null?"\u518D\u56DE\u590D\u4F1A\u8986\u76D6\u4E0A\u4E00\u6761":"\u5199\u7ED9\u63D0\u4EA4\u4EBA\u7684\u8BDD\uFF0C\u5BF9\u65B9\u4F1A\u5728\u300C\u6211\u7684\u53CD\u9988\u300D\u91CC\u770B\u5230",onChange:e=>setReply(e.target.value),disabled:busy,"aria-invalid":replyLen>FEEDBACK_REPLY_MAX})]}),replyLen>FEEDBACK_REPLY_MAX&&jsxs6("p",{role:"alert",children:["\u56DE\u590D\u6700\u591A ",FEEDBACK_REPLY_MAX," \u5B57\uFF0C\u73B0\u5728 ",replyLen," \u5B57\uFF0C\u8BF7\u5220\u77ED\u4E00\u4E9B\u518D\u53D1"]}),jsx7("button",{className:"btn primary",type:"button",disabled:busy||replyLen===0||replyLen>FEEDBACK_REPLY_MAX,onClick:()=>void save({reply},"\u6CA1\u53D1\u51FA\u53BB","\u5DF2\u56DE\u590D",()=>setReply("")),children:"\u53D1\u9001\u56DE\u590D"}),notice&&jsx7("output",{className:"band-feedback-notice",children:notice}),error&&jsx7("p",{role:"alert",children:error})]})]})}var SELF6="@kanyun-ai-infra/band-settings";var PAGE2=`${SELF6}/models`;var NEW_ITEM="new";var PRIMARY="\u6DFB\u52A0\u6A21\u578B\u914D\u7F6E";var DESC3="Rondo \u5DE5\u4F5C\u65F6\u7528\u7684\u6A21\u578B\u3002key \u4FDD\u5B58\u540E\u4E0D\u518D\u663E\u793A\uFF0C\u53EA\u7559\u672B 4 \u4F4D\u3002";var CAPABILITY_LABELS={text:"\u6587\u672C",image:"\u51FA\u56FE",tts:"\u914D\u97F3",asr:"\u8BC6\u522B",video:"\u89C6\u9891",music:"\u914D\u4E50"};var isBlockedPreset=preset=>preset?.id==="anthropic";var CUSTOM_LABEL="\u81EA\u5B9A\u4E49";var CUSTOM_CARD_LABEL="\u81EA\u5B9A\u4E49\u670D\u52A1\u5546";var DEFAULT_PRESET_ID="modelgate";var MODELGATE_PREFERRED_MODEL="model-deepseek-v4.1-flash";var LIST_DEBOUNCE_MS=600;var latencyText=ms=>`${(Math.max(ms,100)/1e3).toFixed(1)} s`;var revokeHint=(preset,provider)=>preset===CUSTOM_MODEL_PRESET_ID?"\u8BF7\u540C\u65F6\u5230\u670D\u52A1\u5546\u90A3\u8FB9\u4F5C\u5E9F\u5B83\u3002":`\u8BF7\u540C\u65F6\u5230 ${provider} \u90A3\u91CC\u4F5C\u5E9F\u5B83\u3002`;var modelsPage=reactMount4((ctx,{owner})=>jsx8(MyModels,{ctx,...owner.params.workshop?{backTo:owner.params.workshop}:{}}));function MyModels({ctx,backTo,onUnavailable}){const route=useRoute2(ctx);const api=ctx.app.data.write?.modelCredentials;const[data,setData]=useState6(void 0);const[readError,setReadError]=useState6(null);const[forbidden,setForbidden]=useState6(false);const[reload,setReload]=useState6(0);const fresh=useFreshRow("models");useStaleProbeReload(()=>setReload(n=>n+1));const[notice,flashNotice]=useCrossPageNotice("models");const item=route.params.item;useEffect6(()=>{if(!api)return;let live=true;setReadError(null);setForbidden(false);api.list().then(r=>{if(live)setData(r)},e=>{if(!live)return;setForbidden(isForbidden5(e));setReadError(failedBecause4(e,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,reload]);const[rowError,setRowError]=useState6("");const[rowBusy,setRowBusy]=useState6(null);const[editing,setEditing]=useState6(null);const setDefault=async c=>{if(rowBusy!==null||!api)return;setRowBusy(c.id);setRowError("");try{await api.setDefault(c.id);flashNotice(`\u300C${c.name}\u300D\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4`);setReload(n=>n+1)}catch(e){setRowError(`\u6CA1\u8BBE\u6210\u9ED8\u8BA4\uFF1A${failedBecause4(e,"\u518D\u70B9\u4E00\u6B21\u300C\u8BBE\u4E3A\u9ED8\u8BA4\u300D")}`)}finally{setRowBusy(null)}};const prov=data?.provision;const provisionedIds=new Set(prov&&(prov.status==="active"||prov.status==="rejected")?prov.credentialIds:[]);const provisionApi=api?.provision?.bind(api);const reprovision=async()=>{if(rowBusy!==null||!provisionApi)return;setRowBusy("provision");setRowError("");try{const result=await provisionApi();if(result.kind==="active"){flashNotice("\u5DF2\u7531 Band \u5F00\u901A ModelGate")}else{setRowError("\u6CA1\u5F00\u901A\uFF1A\u8FD9\u4EFD\u914D\u7F6E\u5DF2\u88AB\u5220\u9664\u6216\u66FF\u6362\u3002\u8981\u518D\u7528\uFF0C\u8BF7\u70B9\u300C\u7531 Band \u5F00\u901A\u300D\u3002")}setReload(n=>n+1)}catch(e){setRowError(`\u6CA1\u5F00\u901A\uFF1A${failedBecause4(e,"\u8FC7\u4E00\u4F1A\u518D\u70B9\u4E00\u6B21\uFF0C\u6216\u8005\u81EA\u5DF1\u586B\u4E00\u628A key")}`)}finally{setRowBusy(null)}};const go=next=>ctx.app.navigate({page:backTo?MODELS_FOR_PAGE:PAGE2,...next||backTo?{params:{...backTo?{workshop:backTo}:{},...next?{item:next}:{}}}:{}});const resume=()=>backTo?ctx.app.navigate({page:RESUME_PAGE,params:{workshop:backTo}}):void 0;const unavailable=!api||data===null;useEffect6(()=>{if(unavailable)onUnavailable?.()},[unavailable,onUnavailable]);if(unavailable)return jsxs7(PersonalFrame,{ctx,current:"models",children:[jsx8(SettingsHead,{title:"\u6A21\u578B\u914D\u7F6E",desc:DESC3}),jsx8(SettingsNoAccess,{title:"\u8FD9\u4E2A\u73AF\u5883\u8FD8\u6CA1\u5F00\u901A\u6A21\u578B\u914D\u7F6E",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u5F00\u901A\u8981\u90E8\u7F72\u7BA1\u7406\u5458\u5728\u670D\u52A1\u7AEF\u6253\u5F00\u3002\u5F00\u901A\u4E4B\u524D\uFF0C\u9879\u76EE\u7528\u5DE5\u574A\u914D\u597D\u7684\u6A21\u578B\u3002"})]});if(forbidden){return jsxs7(PersonalFrame,{ctx,current:"models",children:[jsx8(SettingsHead,{title:"\u6A21\u578B\u914D\u7F6E",desc:DESC3}),jsx8(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u6A21\u578B\u914D\u7F6E",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u6A21\u578B\u914D\u7F6E\u6309\u767B\u5F55\u4EBA\u5F52\u5C5E\uFF0C\u53EA\u6709\u672C\u4EBA\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u3002"})]})}if(readError!==null){return jsxs7(PersonalFrame,{ctx,current:"models",children:[jsx8(SettingsHead,{title:"\u6A21\u578B\u914D\u7F6E",desc:DESC3}),jsxs7(SettingsReadError,{retry:()=>setReload(n=>n+1),children:["\u6A21\u578B\u914D\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]})]})}if(data===void 0){return jsxs7(PersonalFrame,{ctx,current:"models",children:[jsx8(SettingsHead,{title:"\u6A21\u578B\u914D\u7F6E",desc:DESC3,action:jsx8("button",{type:"button",className:"btn primary",disabled:true,children:PRIMARY})}),jsx8(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u6A21\u578B\u914D\u7F6E\u2026"})]})}const presets=data.presets;const rows=data.credentials;const canEditModels=typeof api.updateModelCredentialModels==="function";const presetOf=id=>presets.find(p=>p.id===id);const providerOf=id=>id===CUSTOM_MODEL_PRESET_ID?CUSTOM_LABEL:presetOf(id)?.label??id;const current=item&&item!==NEW_ITEM?rows.find(c=>c.id===item):void 0;if(item===NEW_ITEM){return jsx8(PersonalFrame,{ctx,current:"models",back:"list",children:jsx8(ModelForm,{ctx,api,presets,backTo,onCancel:()=>go(),onSaved:(c,latencyMs)=>{setReload(n=>n+1);if(c.isDefault&&backTo){resume();return}const took=latencyMs===void 0?"":` \xB7 \u8017\u65F6 ${latencyText(latencyMs)}`;markNotice("models",c.preset===CUSTOM_MODEL_PRESET_ID?`\u5DF2\u4FDD\u5B58\uFF0C\u81EA\u5B9A\u4E49\u9A8C\u8BC1\u901A\u8FC7${took}`:`\u5DF2\u4FDD\u5B58\uFF0C${providerOf(c.preset)} \u9A8C\u8BC1\u901A\u8FC7${took}`);markFresh("models",c.id);go()}})})}if(current){return jsxs7(PersonalFrame,{ctx,current:"models",back:"list",children:[jsx8(Back,{ctx,label:"\u6A21\u578B\u914D\u7F6E",page:backTo?MODELS_FOR_PAGE:PAGE2,href:listHref(backTo),...backTo?{params:{workshop:backTo}}:{}}),jsx8(ModelDetail,{api,credential:current,othersLeft:rows.length>1,preset:presetOf(current.preset),provider:providerOf(current.preset),provisioned:provisionedIds.has(current.id),modelGateAvailable:presets.some(p=>p.id==="modelgate"),canEditModels,onChanged:()=>setReload(n=>n+1),onDeleted:n=>{markNotice("models",n>0?`\u5DF2\u5220\u9664\u300C${current.name}\u300D\uFF0C\u5DF2\u6E05\u7A7A ${n} \u4E2A agent \u7684\u9009\u7528`:`\u5DF2\u5220\u9664\u300C${current.name}\u300D`);setReload(x=>x+1);go()}}),jsx8(SettingsNotice,{text:notice})]})}const add=jsx8("button",{type:"button",className:"btn primary",onClick:()=>go(NEW_ITEM),children:PRIMARY});return jsxs7(PersonalFrame,{ctx,current:"models",children:[jsx8(SettingsHead,{title:"\u6A21\u578B\u914D\u7F6E",desc:DESC3,action:rows.length>0?jsx8("button",{type:"button",className:"btn primary",onClick:()=>go(NEW_ITEM),children:PRIMARY}):void 0}),rows.length===0?jsx8(SettingsEmpty,{action:add,children:"\u4F60\u8FD8\u6CA1\u6709\u6A21\u578B\u914D\u7F6E\u3002\u6DFB\u52A0\u4E00\u4EFD\u4EE5\u540E\uFF0C\u5728\u8981\u7528\u6210\u5458\u81EA\u5DF1\u6A21\u578B\u7684\u5DE5\u574A\u91CC\u5EFA\u9879\u76EE\u65F6\u624D\u7528\u5F97\u4E0A\u3002"}):jsx8(SettingsRows,{label:"\u6211\u7684\u6A21\u578B\u914D\u7F6E",children:rows.map(c=>{const open=editing===c.id&&canEditModels;return jsx8(SettingsRow,{title:c.name,tags:jsxs7(Fragment6,{children:[c.isDefault&&jsx8("span",{className:"tag band-sf-default",children:"\u9ED8\u8BA4"}),provisionedIds.has(c.id)&&jsx8("span",{className:"tag",children:"\u7531 Band \u4E3A\u4F60\u5F00\u901A"}),provisionedIds.has(c.id)&&prov?.status==="rejected"&&jsx8("span",{className:"tag",children:"\u4E0A\u6E38\u62D2\u4E86"}),c.id===fresh&&jsx8("span",{className:"chip plain s-approved",children:"\u5DF2\u9A8C\u8BC1"}),c.unpriced&&jsx8("span",{className:"chip plain s-failed",title:UNPRICED_NOTE,children:"\u5E73\u53F0\u65E0\u4EF7\u76EE"})]}),meta:metaOf(c,providerOf(c.preset)),...open?{}:{href:itemHref(backTo,c.id),onOpen:()=>go(c.id)},isNew:c.id===fresh,extra:open?jsx8(EditModelsForm,{api,credential:c,preset:presetOf(c.preset),provider:providerOf(c.preset),modelGateAvailable:presets.some(p=>p.id===DEFAULT_PRESET_ID),onCancel:()=>setEditing(null),onSaved:(next,latencyMs)=>{setEditing(null);flashNotice(`\u300C${next.name}\u300D\u6539\u7528 ${next.model}\uFF0C\u9A8C\u8BC1\u901A\u8FC7${latencyMs===void 0?"":` \xB7 \u8017\u65F6 ${latencyText(latencyMs)}`}`);setReload(n=>n+1)}}):void 0,actions:open?void 0:jsxs7(Fragment6,{children:[canEditModels&&jsx8("button",{type:"button",className:"btn ghost sm band-sf-act-edit",disabled:rowBusy!==null,onClick:()=>setEditing(c.id),children:"\u4FEE\u6539\u6A21\u578B"}),c.isDefault?void 0:jsx8("button",{type:"button",className:"btn ghost sm band-sf-act-def",disabled:rowBusy!==null,onClick:()=>void setDefault(c),children:"\u8BBE\u4E3A\u9ED8\u8BA4"}),provisionedIds.has(c.id)&&prov?.status==="rejected"&&provisionApi&&jsx8("button",{type:"button",className:"btn ghost sm band-sf-act-re",disabled:rowBusy!==null,onClick:()=>void reprovision(),children:"\u91CD\u65B0\u5F00\u901A"})]})},c.id)})}),prov?.status==="released"&&provisionApi&&jsxs7("p",{className:"band-sf-muted",children:["\u4F60\u5220\u9664\u6216\u66FF\u6362\u8FC7 Band \u4E3A\u4F60\u5F00\u901A\u7684 ModelGate\uFF0C\u4E4B\u540E\u4E0D\u518D\u81EA\u52A8\u5F00\u901A\u3002\u60F3\u518D\u7528\uFF0C\u70B9"," ",jsx8("button",{type:"button",className:"btn ghost sm",disabled:rowBusy!==null,onClick:()=>void reprovision(),children:"\u7531 Band \u5F00\u901A"}),"\u3002"]}),rowError?jsx8(SettingsSaveState3,{failed:rowError}):null,jsx8(SettingsNotice,{text:notice})]})}var base=backTo=>backTo?`/settings/models/for/${encodeURIComponent(backTo)}`:"/settings/models";var listHref=base;var itemHref=(backTo,id)=>`${base(backTo)}/${encodeURIComponent(id)}`;var UNPRICED_NOTE="\u5E73\u53F0\u62D2\u7EDD\u6D3E\u53D1\u8FC7\u8FD9\u4EFD\u914D\u7F6E\u91CC\u7684\u6A21\u578B\uFF1A\u5E73\u53F0\u4EF7\u76EE\u8868\u91CC\u6CA1\u6709\u5B83\uFF0CRondo \u7528\u4E0D\u4E86\u3002\u300C\u9A8C\u8BC1\u901A\u8FC7\u300D\u53EA\u8BF4\u660E\u7AEF\u70B9\u80FD\u901A\u3002\u8BF7\u6539\u7528\u6709\u4EF7\u76EE\u7684\u6A21\u578B\uFF1B\u5E73\u53F0\u8865\u4E0A\u4EF7\u76EE\u540E\uFF0C\u4E0B\u4E00\u6B21\u6D3E\u53D1\u6210\u529F\u4F1A\u81EA\u52A8\u6E05\u9664\u8FD9\u6761\u63D0\u793A\u3002";function metaOf(c,provider){const used=projectsOf(c);return[jsxs7(Fragment5,{children:[provider," \xB7 ",jsx8("code",{children:c.model})]},"model"),...c.last4!==null?[`\u672B 4 \u4F4D \u2022\u2022\u2022\u2022${c.last4}`]:[],verifiedText(c),used.length>0?`${used.length} \u4E2A\u9879\u76EE\u5728\u7528`:"\u8FD8\u6CA1\u6709\u9879\u76EE\u5728\u7528"]}function verifiedText(c){const ms=c.lastVerifiedMs;return`${shortTime(c.lastVerifiedAt)} \u9A8C\u8BC1\u901A\u8FC7${typeof ms==="number"?` \xB7 ${latencyText(ms)}`:""}`}function probeFailureText(outcome,provider,retry,hints={}){const name=hints.custom?"\u7AEF\u70B9":provider;const space=hints.custom?"":" ";switch(outcome){case"unauthorized":return`${name}${space}\u6CA1\u6709\u63A5\u53D7\u8FD9\u4E2A key\u3002\u68C0\u67E5 key \u662F\u5426\u5B8C\u6574\u3001\u6709\u6CA1\u6709\u88AB\u4F5C\u5E9F\uFF0C\u6539\u597D\u540E\u518D\u70B9\u300C${retry}\u300D\u3002${hints.unauthorizedHint??""}`;case"forbidden":return hints.blocked?`${name}${space}\u62D2\u7EDD\u4E86\u8BF7\u6C42\uFF1A\u53EF\u80FD\u662F\u7F51\u7EDC\u6216\u5730\u533A\u9650\u5236\uFF0C\u4E5F\u53EF\u80FD\u662F\u8FD9\u628A key \u6CA1\u6709\u8FD9\u4E2A\u6A21\u578B\u7684\u6743\u9650\u3002\u8FC7\u4E00\u4F1A\u513F\u518D\u70B9\u300C${retry}\u300D\uFF1B\u4E00\u76F4\u8FD9\u6837\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u68C0\u67E5\u51FA\u7F51\u6216\u8FD9\u628A key \u7684\u6743\u9650\u3002${hints.modelGateAvailable?"\u4E5F\u53EF\u4EE5\u6539\u7528 ModelGate\u3002":""}`:`${name}${space}\u8BA4\u51FA\u4E86\u8FD9\u4E2A key\uFF0C\u4F46\u5B83\u6CA1\u6709\u8C03\u7528\u6743\u9650\u3002\u5230\u670D\u52A1\u5546\u90A3\u8FB9\u786E\u8BA4\u8FD9\u4E2A key \u7684\u6743\u9650\uFF0C\u6539\u597D\u540E\u518D\u70B9\u300C${retry}\u300D\u3002`;case"model_unavailable":return`${hints.custom?"\u7AEF\u70B9\u8BF4\u8FD9\u628A":`${provider} \u8BF4\u8FD9\u4E2A`} key \u4E0D\u80FD\u7528\u8FD9\u4E2A\u6A21\u578B\u3002\u5230\u670D\u52A1\u5546\u90A3\u8FB9\u786E\u8BA4\u8FD9\u4E2A key \u6709\u6CA1\u6709\u5F00\u901A\u5B83\u3001\u6A21\u578B\u540D\u6709\u6CA1\u6709\u5199\u9519\uFF0C\u6539\u597D\u540E\u518D\u70B9\u300C${retry}\u300D\u3002`;case"unreachable":return hints.custom?`\u8FDE\u4E0D\u4E0A\u7AEF\u70B9\uFF0C\u6216\u5B83 10 \u79D2\u5185\u6CA1\u6709\u56DE\u5E94\uFF0C\u6216\u56DE\u4E86\u610F\u6599\u4E4B\u5916\u7684\u72B6\u6001\uFF08\u7AEF\u70B9\u89E3\u6790\u5230\u5185\u7F51\u6216\u672C\u673A\u5730\u5740\u4E5F\u4F1A\u88AB\u62E6\u4E0B\uFF09\u3002\u8FC7\u4E00\u4F1A\u513F\u518D\u70B9\u300C${retry}\u300D\u3002`:`\u8FDE\u4E0D\u4E0A${space}${name}\uFF0C\u6216\u5B83 10 \u79D2\u5185\u6CA1\u6709\u56DE\u5E94\uFF0C\u6216\u56DE\u4E86\u610F\u6599\u4E4B\u5916\u7684\u72B6\u6001\u3002\u8FC7\u4E00\u4F1A\u513F\u518D\u70B9\u300C${retry}\u300D\u3002`}}function shortTime(iso){const d=new Date(iso);const p=n=>String(n).padStart(2,"0");return`${p(d.getMonth()+1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`}function projectsOf(c){return[...new Map(c.usedBy.map(u=>[u.projectId,u.projectName])).values()]}var staleProbes=0;var staleWatchers=new Set;function noteStaleProbe(){staleProbes+=1;for(const w of staleWatchers)w()}function takeStaleProbes(){const n=staleProbes;staleProbes=0;return n}function useStaleProbeReload(onStale){const fn=useRef3(onStale);fn.current=onStale;useEffect6(()=>{if(takeStaleProbes()>0)fn.current()},[]);useEffect6(()=>{const w=()=>{if(takeStaleProbes()>0)fn.current()};staleWatchers.add(w);return()=>{staleWatchers.delete(w)}},[])}function useProbe(){const token=useRef3(0);const[busy,setBusy]=useState6(false);const run=async go=>{const mine=++token.current;setBusy(true);try{const value=await go();if(mine!==token.current)return{done:false};return{done:true,value}}catch(e){if(mine!==token.current)return{done:false};throw e}finally{if(mine===token.current)setBusy(false)}};const abandon=()=>{token.current+=1;setBusy(false)};useEffect6(()=>()=>{token.current+=1},[]);return{busy,run,abandon}}function KeyField({provider,preset,value,onChange,busy,failure}){const label=preset?`${provider} \u7684 API key`:"API key";return jsx8(SettingsField2,{label,required:true,error:failure?jsxs7(Fragment6,{children:["\u6CA1\u4FDD\u5B58\uFF1A",failure]}):void 0,hint:jsxs7(Fragment6,{children:[preset?.keyHint??"key \u53EA\u7528\u6765\u9A8C\u8BC1\u548C\u8C03\u7528\uFF0C\u4FDD\u5B58\u540E\u4E0D\u518D\u663E\u793A\u3002",preset?.docsUrl?jsxs7(Fragment6,{children:[" ",jsxs7("a",{href:preset.docsUrl,target:"_blank",rel:"noreferrer",children:["\u5230 ",provider," \u521B\u5EFA key"]})]}):null]}),children:field=>jsx8("input",{...field,className:"field",type:"password",autoComplete:"off",maxLength:4096,value,disabled:busy,placeholder:preset?`\u7C98\u8D34 ${label}`:"\u7C98\u8D34\u670D\u52A1\u5546\u7ED9\u7684 API key",onChange:e=>onChange(e.target.value)})})}function FormActions({busy,canSubmit,label,provider,custom,missing,onCancel}){return jsxs7(SettingsActions3,{children:[jsx8("button",{type:"submit",className:"btn primary",disabled:busy||!canSubmit,children:busy?"\u6B63\u5728\u9A8C\u8BC1\u2026":label}),jsx8("button",{type:"button",className:"btn ghost",onClick:onCancel,children:"\u53D6\u6D88"}),jsx8(SettingsSaveState3,{saving:busy?jsxs7(Fragment6,{children:[jsx8(Glyph,{kind:"working"}),custom?"\u6B63\u5728\u7528\u8FD9\u4EFD\u914D\u7F6E\u5411\u7AEF\u70B9\u53D1\u4E00\u6B21\u6700\u5C0F\u8BF7\u6C42\uFF0C\u901A\u8FC7\u624D\u4FDD\u5B58":`\u6B63\u5728\u7528\u8FD9\u4EFD\u914D\u7F6E\u5411 ${provider} \u53D1\u4E00\u6B21\u6700\u5C0F\u8BF7\u6C42\uFF0C\u901A\u8FC7\u624D\u4FDD\u5B58`]}):void 0,missing:canSubmit?void 0:missing})]})}var TIERS=["haiku","sonnet","opus"];var TIER_LABELS={haiku:"Haiku",sonnet:"Sonnet",opus:"Opus"};function presetTier(preset,t){const d=preset?.defaultModels;return d&&d[t]!==d.model?d[t]:void 0}var presetSplits=preset=>TIERS.some(t=>presetTier(preset,t)!==void 0);function tierValues(main,edits,preset){const pick=t=>(edits[t]??presetTier(preset,t)??main).trim()||main;return{haiku:pick("haiku"),sonnet:pick("sonnet"),opus:pick("opus")}}function modelsInput(main,split,edits,preset){const model=main.trim();return split?{model,...tierValues(model,edits,preset)}:{model}}var NO_MODELS=[];function useModelList(api,preset,key,endpoint,authScheme){const[state,setState]=useState6({status:"idle"});const custom=preset===CUSTOM_MODEL_PRESET_ID;useEffect6(()=>{setState({status:"idle"});if(typeof api.listProviderModels!=="function")return;if(key.trim()===""||custom&&endpoint.trim()==="")return;let live=true;const timer=setTimeout(()=>{setState({status:"loading"});api.listProviderModels?.({preset,key,...custom?{endpoint:endpoint.trim(),...authScheme!=="bearer"?{authScheme}:{}}:{}}).then(r=>{if(live)setState(listStateOf(r))},e=>{if(live)setState({status:"failed",reason:failedBecause4(e,"\u7A0D\u540E\u518D\u586B\u4E00\u6B21 key")})})},LIST_DEBOUNCE_MS);return()=>{live=false;clearTimeout(timer)}},[api,preset,key,endpoint,authScheme,custom]);return state}function listStateOf(r){if(r.outcome==="ok"&&r.models.length>0)return{status:"ok",models:r.models};return{status:"failed",reason:r.outcome==="ok"?"\u670D\u52A1\u5546\u56DE\u7684\u6A21\u578B\u5217\u8868\u662F\u7A7A\u7684":r.reason}}function useCredentialModelList(api,id){const[state,setState]=useState6({status:"idle"});useEffect6(()=>{const lister=api.listCredentialModels;if(typeof lister!=="function")return;let live=true;setState({status:"loading"});lister.call(api,id).then(r=>{if(live)setState(listStateOf(r))},e=>{if(live)setState({status:"failed",reason:failedBecause4(e,"\u7A0D\u540E\u518D\u6253\u5F00\u4E00\u6B21")})});return()=>{live=false}},[api,id]);return state}function listFailureText(reason){const r=reason.replace(/[。.]+$/,"");return`${r.includes("\u6A21\u578B\u5217\u8868")?r:`\u6CA1\u53D6\u5230\u6A21\u578B\u5217\u8868\uFF1A${r}`}\u3002\u53EF\u4EE5\u76F4\u63A5\u624B\u586B\u6A21\u578B\u540D\u3002`}var MENU_MAX=220;var MENU_GAP=4;var MENU_EDGE=8;function placeMenu(input,contentHeight,viewportHeight,viewportTop=0){const need=Math.min(MENU_MAX,contentHeight);const below=Math.max(0,viewportHeight-input.bottom-MENU_GAP-MENU_EDGE);const above=Math.max(0,input.top-viewportTop-MENU_GAP-MENU_EDGE);if(below>=need)return{up:false,max:MENU_MAX};if(above>=need)return{up:true,max:MENU_MAX};return above>below?{up:true,max:Math.min(MENU_MAX,above)}:{up:false,max:Math.min(MENU_MAX,below)}}function ModelCombo({id,label,value,onChange,models,busy,listName,autoOpen=false,placeholder,failure="",errId}){const listId=`${id}-list`;const[open,setOpen]=useState6(false);const[active,setActive]=useState6(-1);const[typed,setTyped]=useState6(false);const menuRef=useRef3(null);const inputRef=useRef3(null);const[place,setPlace]=useState6({up:false,max:MENU_MAX});useEffect6(()=>{setActive(-1);setTyped(false);setOpen(autoOpen&&models.length>0)},[models,autoOpen]);useEffect6(()=>{if(!open)return;const onFocus=e=>{if(e.target!==inputRef.current)setOpen(false)};document.addEventListener("focusin",onFocus);return()=>document.removeEventListener("focusin",onFocus)},[open]);const v=value.trim();const q=v.toLowerCase();const shown=!typed||v===""||models.includes(v)?models:models.filter(m=>m.toLowerCase().includes(q));const expanded=open&&shown.length>0&&!busy;useLayoutEffect(()=>{if(!expanded)return;const menu=menuRef.current;const input=inputRef.current;if(!menu||!input)return;const panel=input.closest(".band-sf-scroll");const update=()=>{const bounds=panel?.getBoundingClientRect();const next=placeMenu(input.getBoundingClientRect(),menu.scrollHeight,Math.min(window.innerHeight,bounds?.bottom??window.innerHeight),Math.max(0,bounds?.top??0));setPlace(p=>p.up===next.up&&p.max===next.max?p:next)};update();window.addEventListener("resize",update);panel?.addEventListener("scroll",update);return()=>{window.removeEventListener("resize",update);panel?.removeEventListener("scroll",update)}},[expanded,shown.length]);useEffect6(()=>{const menu=menuRef.current;const el=active>=0?menu?.children[active]:void 0;if(!menu||!(el instanceof HTMLElement))return;if(el.offsetTop<menu.scrollTop)menu.scrollTop=el.offsetTop;else if(el.offsetTop+el.offsetHeight>menu.scrollTop+menu.clientHeight)menu.scrollTop=el.offsetTop+el.offsetHeight-menu.clientHeight},[active]);const choose=m=>{onChange(m);setOpen(false);setTyped(false);setActive(-1)};return jsxs7(Fragment6,{children:[jsx8("label",{htmlFor:id,children:label}),jsxs7("div",{className:"band-sf-combo",children:[jsx8("input",{ref:inputRef,id,className:"field band-sf-mono",autoComplete:"off",spellCheck:false,maxLength:CUSTOM_MODEL_NAME_MAX,value,disabled:busy,placeholder,role:"combobox","aria-autocomplete":"list","aria-expanded":expanded,"aria-controls":listId,...expanded&&active>=0?{"aria-activedescendant":`${listId}-${active}`}:{},"aria-invalid":failure?true:void 0,"aria-describedby":failure&&errId?errId:void 0,onFocus:()=>{setTyped(false);if(models.length>0)setOpen(true)},onChange:e=>{onChange(e.target.value);setTyped(true);if(models.length>0)setOpen(true);setActive(-1)},onBlur:()=>{setOpen(false);setTyped(false)},onKeyDown:withImeGuard(e=>{if(models.length===0)return;if(e.key==="ArrowDown"||e.key==="ArrowUp"){e.preventDefault();setOpen(true);if(shown.length===0)return;const step=e.key==="ArrowDown"?1:-1;setActive(i=>(i+step+shown.length)%shown.length)}else if(e.key==="Enter"&&expanded&&active>=0){e.preventDefault();const m=shown[active];if(m!==void 0)choose(m)}else if(e.key==="Escape"&&expanded){e.preventDefault();setOpen(false)}})}),expanded&&jsx8("div",{ref:menuRef,id:listId,className:place.up?"band-sf-menu is-up":"band-sf-menu",style:{maxHeight:place.max},role:"listbox","aria-label":listName,onMouseDown:e=>{e.preventDefault();if(e.target===e.currentTarget)setOpen(false)},children:shown.map((m,i)=>jsxs7("button",{type:"button",id:`${listId}-${i}`,role:"option",tabIndex:-1,"aria-selected":i===active,onMouseEnter:()=>setActive(i),onClick:()=>choose(m),children:[jsx8("span",{className:"band-sf-mono",children:m}),m===v&&jsx8("small",{children:"\u5F53\u524D"})]},m))})]})]})}function ModelFields({id,main,onMain,required,presetDefault,split,onSplit,tiers,onTier,busy,hint,list,listName,failure}){const errId=`${id}-model-err`;const models=list.status==="ok"?list.models:NO_MODELS;return jsxs7(Fragment6,{children:[jsxs7("div",{className:"band-sf-fld",children:[jsx8(ModelCombo,{id:`${id}-model`,label:jsxs7(Fragment6,{children:["\u4E3B\u6A21\u578B"," ",jsx8("span",{className:"band-sf-req",children:required||!presetDefault?"\u5FC5\u586B":`\u7F3A\u7701 ${presetDefault}`})]}),value:main,onChange:onMain,models,busy,listName,autoOpen:true,...required?{placeholder:"\u7167\u670D\u52A1\u5546\u6587\u6863\u586B\uFF0C\u4F8B\u5982 deepseek-flash"}:{},failure,errId}),failure?jsx8("p",{className:"band-sf-err",id:errId,role:"alert",children:failure}):list.status==="loading"?jsxs7("output",{className:"band-sf-state","aria-live":"polite",children:[jsx8(Glyph,{kind:"working"}),"\u6B63\u5728\u53D6\u6A21\u578B\u5217\u8868\u2026"]}):list.status==="failed"?jsx8("p",{className:"band-sf-err",role:"alert",children:listFailureText(list.reason)}):jsx8("span",{className:"band-sf-hint",children:hint})]}),jsxs7("details",{className:"band-sf-tiers",open:split,onToggle:e=>onSplit(e.currentTarget.open),children:[jsx8("summary",{children:"Haiku / Sonnet / Opus \u5206\u5F00\u914D"}),jsx8("p",{className:"band-sf-hint",children:"Claude Code \u91CC Haiku\u3001Sonnet\u3001Opus \u4E09\u6863\u5404\u8C03\u7528\u7684\u6A21\u578B\u3002\u4E0D\u5206\u5F00\u65F6\u4E09\u6863\u90FD\u7528\u4E3B\u6A21\u578B\u3002"}),TIERS.map(t=>jsx8("div",{className:"band-sf-fld",children:jsx8(ModelCombo,{id:`${id}-${t}`,label:TIER_LABELS[t],value:tiers[t],onChange:v=>onTier(t,v),models,busy,listName:`${listName}\uFF08${TIER_LABELS[t]}\uFF09`})},t))]})]})}var AUTH_LABELS={bearer:"Authorization: Bearer\uFF08\u7F3A\u7701\uFF09",x_api_key:"x-api-key"};function saveBody(f){const custom=f.preset===CUSTOM_MODEL_PRESET_ID;return{preset:f.preset,key:f.key,...f.name.trim()?{name:f.name.trim()}:{},...custom?{endpoint:f.endpoint.trim()}:{},...custom&&f.authScheme!=="bearer"?{authScheme:f.authScheme}:{},...modelsInput(f.main,f.split,f.edits,f.tierPreset)}}function ModelForm({ctx,api,presets,backTo,onCancel,onSaved}){const initial=presets.find(p=>p.id===DEFAULT_PRESET_ID)?.id??presets[0]?.id??CUSTOM_MODEL_PRESET_ID;const presetById=pid=>pid===CUSTOM_MODEL_PRESET_ID?void 0:presets.find(p=>p.id===pid);const[picked,setPicked]=useState6(initial);const[name,setName]=useState6("");const[key,setKey]=useState6("");const[endpoint,setEndpoint]=useState6("");const[authScheme,setAuthScheme]=useState6("bearer");const[main,setMain]=useState6(presetById(initial)?.defaultModels.model??"");const[split,setSplit]=useState6(presetSplits(presetById(initial)));const[edits,setEdits]=useState6({});const[touched,setTouched]=useState6(false);const[failure,setFailure]=useState6("");const[modelFailure,setModelFailure]=useState6("");const[formError,setFormError]=useState6("");const probe=useProbe();const id=useId();const isCustom=picked===CUSTOM_MODEL_PRESET_ID;const chosen=presetById(picked);const label="\u4FDD\u5B58\u5E76\u9A8C\u8BC1";const list=useModelList(api,picked,key,isCustom?endpoint:"",authScheme);const hasLister=typeof api.listProviderModels==="function";const listed=list.status==="ok"?list.models:NO_MODELS;useEffect6(()=>{if(touched||picked!==DEFAULT_PRESET_ID||!listed.includes(MODELGATE_PREFERRED_MODEL))return;setMain(MODELGATE_PREFERRED_MODEL)},[listed,picked,touched]);const clearErrors=()=>{setFailure("");setModelFailure("");setFormError("")};const choose=next=>{if(next===picked)return;const p=presetById(next);setPicked(next);setKey("");setMain(p?.defaultModels.model??"");setSplit(presetSplits(p));setEdits({});setTouched(false);clearErrors()};const backToList=jsx8(Back,{ctx,label:"\u6A21\u578B\u914D\u7F6E",page:backTo?MODELS_FOR_PAGE:PAGE2,href:listHref(backTo),...backTo?{params:{workshop:backTo}}:{}});const provider=isCustom?CUSTOM_LABEL:chosen?.label??CUSTOM_LABEL;const others=chosen?chosen.capabilities.filter(c=>c!=="text"):[];const missing=key.trim()===""?"\u8FD8\u5DEE key \u6CA1\u586B":isCustom&&endpoint.trim()===""?"\u8FD8\u5DEE\u7AEF\u70B9\u6CA1\u586B":main.trim()===""?"\u8FD8\u5DEE\u4E3B\u6A21\u578B\u6CA1\u586B":"";const canSubmit=missing==="";const submit=async()=>{if(probe.busy||!canSubmit)return;clearErrors();try{const r=await probe.run(()=>api.save(saveBody({preset:picked,key,name,endpoint,authScheme,main,split,edits,tierPreset:chosen})));if(!r.done){noteStaleProbe();return}const res=r.value;if(res.outcome==="ok"){if(!res.credential)return;setKey("");onSaved(res.credential,res.latencyMs);return}const text=probeFailureText(res.outcome,provider,label,{unauthorizedHint:chosen?.unauthorizedHint??null,blocked:isCustom?false:isBlockedPreset(chosen),modelGateAvailable:presets.some(p=>p.id===DEFAULT_PRESET_ID),custom:isCustom});if(res.outcome==="model_unavailable")setModelFailure(`\u6CA1\u4FDD\u5B58\uFF1A${text}`);else setFailure(text)}catch(e){setFormError(failedBecause4(e,`\u518D\u70B9\u300C${label}\u300D`))}};const cards=[...presets.map(p=>({id:p.id,label:p.label,desc:p.description,line:p.capabilities.map(c=>CAPABILITY_LABELS[c]).join(" / ")})),{id:CUSTOM_MODEL_PRESET_ID,label:CUSTOM_CARD_LABEL,desc:"",line:"\u81EA\u586B\u7AEF\u70B9\u3001\u9274\u6743\u65B9\u5F0F\u548C\u6A21\u578B"}];return jsxs7(Fragment6,{children:[backToList,jsx8(SettingsHead,{title:"\u6DFB\u52A0\u6A21\u578B\u914D\u7F6E",desc:"\u4FDD\u5B58\u524D Band \u4F1A\u7528\u8FD9\u4EFD\u914D\u7F6E\u771F\u6253\u4E00\u6B21\u6700\u5C0F\u8BF7\u6C42\uFF0C\u901A\u8FC7\u624D\u5B58\u3002"}),jsxs7(SettingsForm2,{label:"\u6DFB\u52A0\u6A21\u578B\u914D\u7F6E",onSubmit:()=>void submit(),children:[jsxs7("div",{className:"band-sf-fld",children:[jsx8("span",{className:"band-sf-lbl",id:`${id}-pp`,children:"\u670D\u52A1\u5546"}),jsx8("div",{className:"band-sf-pcards",role:"radiogroup","aria-labelledby":`${id}-pp`,children:cards.map(c=>jsxs7("label",{className:c.id===picked?"band-sf-pc is-on":"band-sf-pc",children:[jsx8("input",{type:"radio",className:"sr-only",name:`${id}-preset`,value:c.id,checked:c.id===picked,disabled:probe.busy,onChange:()=>choose(c.id)}),jsx8("b",{children:c.label}),c.desc?jsx8("small",{children:c.desc}):null,jsx8("small",{children:c.line})]},c.id))}),jsx8("span",{className:"band-sf-hint",children:"\u53EA\u6536\u6309\u91CF\u8BA1\u8D39\u7684 API key\u3002Coding Plan \u8FD9\u7C7B\u5957\u9910\u7684 key \u5382\u5546\u53EA\u8BB8\u5728\u6307\u5B9A\u5DE5\u5177\u91CC\u7528\uFF0C\u4E0D\u80FD\u7528\u5728\u8FD9\u91CC\u3002"})]}),jsx8(SettingsField2,{label:"\u540D\u79F0",optional:true,children:field=>jsx8("input",{...field,className:"field",maxLength:100,value:name,disabled:probe.busy,placeholder:`\u7559\u7A7A\u5C31\u7528\uFF1A${provider}`,onChange:e=>setName(e.target.value)})}),jsx8(KeyField,{provider,preset:chosen,value:key,onChange:v=>{setKey(v);clearErrors()},busy:probe.busy,failure}),isCustom?jsxs7(Fragment6,{children:[jsx8(SettingsField2,{label:"\u7AEF\u70B9",required:true,hint:"Anthropic \u517C\u5BB9\u63A5\u53E3\u7684\u57FA\u5730\u5740\uFF0C\u53EA\u6536 https \u7684\u516C\u7F51\u57DF\u540D\uFF08\u53EF\u4EE5\u5E26\u8DEF\u5F84\uFF09\u3002\u4FDD\u5B58\u65F6\u5411\u5B83\u52A0 /v1/messages \u53D1\u4E00\u6B21\u6700\u5C0F\u8BF7\u6C42\u3002",children:field=>jsx8("input",{...field,className:"field band-sf-mono",type:"url",inputMode:"url",autoComplete:"off",spellCheck:false,maxLength:CUSTOM_MODEL_ENDPOINT_MAX,value:endpoint,disabled:probe.busy,placeholder:"https://api.example.com/anthropic",onChange:e=>{setEndpoint(e.target.value);clearErrors()}})}),jsx8(SettingsField2,{label:"\u9274\u6743\u65B9\u5F0F",hint:"\u7167\u670D\u52A1\u5546\u6587\u6863\u9009 key \u653E\u5728\u54EA\u4E2A\u8BF7\u6C42\u5934\u91CC\u3002",children:field=>jsx8("select",{...field,className:"field",value:authScheme,disabled:probe.busy,onChange:e=>{setAuthScheme(e.target.value==="x_api_key"?"x_api_key":"bearer");clearErrors()},children:Object.keys(AUTH_LABELS).map(a=>jsx8("option",{value:a,children:AUTH_LABELS[a]},a))})})]}):jsxs7("p",{className:"band-sf-muted",children:["\u7AEF\u70B9 ",jsx8("code",{children:chosen?.endpoint}),"\uFF0C\u7531\u90E8\u7F72\u5E26\u51FA\uFF0C\u4E0D\u80FD\u6539\u3002\u8981\u6362\u7AEF\u70B9\uFF0C\u8BF7\u9009\u300C",CUSTOM_CARD_LABEL,"\u300D\u3002"]}),others.length>0&&jsxs7("p",{className:"band-sf-hint",children:["\u8FD9\u5BB6\u8FD8\u80FD",others.map(c=>CAPABILITY_LABELS[c]).join("\u3001"),"\uFF0C\u5230",jsx8("a",{href:personalPath("net-credentials"),onClick:pageLink(ctx,personalPage("net-credentials")),children:"\u7F51\u7EDC\u51ED\u636E"}),"\u6DFB\u52A0\u3002"]}),jsx8(ModelFields,{id,main,onMain:v=>{setMain(v);setTouched(true);setModelFailure("")},required:isCustom,...chosen?{presetDefault:chosen.defaultModels.model}:{},split,onSplit:setSplit,tiers:tierValues(main,edits,chosen),onTier:(t,v)=>{setEdits(x=>({...x,[t]:v}));setTouched(true)},busy:probe.busy,hint:hasLister?isCustom?"\u586B\u597D\u7AEF\u70B9\u548C key \u540E\u81EA\u52A8\u53D6\u6A21\u578B\u5217\u8868\uFF0C\u4E0B\u62C9\u91CC\u9009\uFF1B\u4E5F\u53EF\u4EE5\u76F4\u63A5\u624B\u586B\u3002":"\u586B\u597D key \u540E\u81EA\u52A8\u53D6\u670D\u52A1\u5546\u7684\u6A21\u578B\u5217\u8868\uFF0C\u4E0B\u62C9\u91CC\u9009\uFF1B\u4E5F\u53EF\u4EE5\u76F4\u63A5\u624B\u586B\u3002":"\u624B\u586B\u6A21\u578B\u540D\uFF0C\u4FDD\u5B58\u65F6\u4F1A\u7528\u5B83\u771F\u6253\u4E00\u6B21\u3002",list,listName:`${provider} \u7684\u6A21\u578B`,failure:modelFailure}),formError?jsx8(SettingsSaveState3,{failed:formError}):null,jsx8(FormActions,{busy:probe.busy,canSubmit,label,provider,custom:isCustom,missing,onCancel:()=>leaveThen(()=>{if(probe.busy)probe.abandon();onCancel()})})]})]})}function EditModelsForm({api,credential,preset,provider,modelGateAvailable,onCancel,onSaved}){const isCustom=credential.preset===CUSTOM_MODEL_PRESET_ID;const tierPreset=isCustom?void 0:preset;const[main,setMain]=useState6(credential.model);const[split,setSplit]=useState6(presetSplits(tierPreset));const[edits,setEdits]=useState6({});const[failure,setFailure]=useState6("");const[formError,setFormError]=useState6("");const probe=useProbe();const id=useId();const label="\u4FDD\u5B58\u5E76\u9A8C\u8BC1";const title=`\u4FEE\u6539\u300C${credential.name}\u300D\u7684\u6A21\u578B`;const list=useCredentialModelList(api,credential.id);const form=useRef3(null);useEffect6(()=>{form.current?.querySelector('input[role="combobox"]')?.focus()},[]);const submit=async()=>{const update=api.updateModelCredentialModels?.bind(api);if(probe.busy||main.trim()===""||!update)return;setFailure("");setFormError("");try{const r=await probe.run(()=>update(credential.id,modelsInput(main,split,edits,tierPreset)));if(!r.done){noteStaleProbe();return}if(r.value.outcome==="ok")onSaved(r.value.credential??credential,r.value.latencyMs);else setFailure(`\u6CA1\u4FDD\u5B58\uFF1A${probeFailureText(r.value.outcome,provider,label,{unauthorizedHint:preset?.unauthorizedHint??null,blocked:isCustom?false:isBlockedPreset(preset),modelGateAvailable,custom:isCustom})}`)}catch(e){setFormError(failedBecause4(e,`\u518D\u70B9\u300C${label}\u300D`))}};return jsxs7("form",{ref:form,className:"band-sf-form band-sf-inline","aria-label":title,onSubmit:e=>{e.preventDefault();void submit()},children:[jsx8("h3",{children:title}),jsx8("p",{className:"band-sf-muted",children:isCustom?"\u7AEF\u70B9\u4E0D\u53D8\uFF1B\u8981\u6362\u7AEF\u70B9\uFF0C\u8BF7\u53E6\u52A0\u4E00\u4EFD\u3002":`\u670D\u52A1\u5546\u4E0D\u53D8\uFF08${provider}\uFF09\uFF1B\u8981\u6362\u670D\u52A1\u5546\uFF0C\u8BF7\u53E6\u52A0\u4E00\u4EFD\u3002`}),jsx8(ModelFields,{id,main,onMain:v=>{setMain(v);setFailure("")},required:true,split,onSplit:setSplit,tiers:tierValues(main,edits,tierPreset),onTier:(t,v)=>setEdits(x=>({...x,[t]:v})),busy:probe.busy,hint:typeof api.listCredentialModels==="function"?"\u6539\u6A21\u578B\u4E0D\u7528\u91CD\u586B key\uFF1A\u7528\u5DF2\u5B58\u7684 key \u53D6\u6A21\u578B\u5217\u8868\uFF0C\u4E0B\u62C9\u91CC\u9009\u6216\u624B\u586B\uFF1B\u4FDD\u5B58\u65F6\u9A8C\u8BC1\u4E00\u6B21\u3002":"\u6539\u6A21\u578B\u4E0D\u7528\u91CD\u586B key\uFF1B\u586B\u5B8C\u4F1A\u7528\u5DF2\u5B58\u7684 key \u9A8C\u8BC1\u4E00\u6B21\u3002",list,listName:`${provider} \u7684\u6A21\u578B`,failure}),credential.usedBy.length>0&&jsx8("p",{className:"band-sf-banner",children:"\u4FDD\u5B58\u540E\uFF0C\u4E0B\u4E00\u4E2A\u56DE\u5408\u8D77\u7528\u65B0\u6A21\u578B\u3002"}),formError?jsx8(SettingsSaveState3,{failed:formError}):null,jsx8(FormActions,{busy:probe.busy,canSubmit:main.trim()!=="",label,provider,custom:isCustom,missing:"\u8FD8\u5DEE\u4E3B\u6A21\u578B\u6CA1\u586B",onCancel:()=>leaveThen(()=>{if(probe.busy)probe.abandon();onCancel()})})]})}function ModelDetail({api,credential,preset,provider,othersLeft,modelGateAvailable,provisioned=false,canEditModels=false,onChanged,onDeleted}){const[replacing,setReplacing]=useState6(false);const[editing,setEditing]=useState6(false);const[deleting,setDeleting]=useState6(false);const[busy,setBusy]=useState6(false);const[error,setError]=useState6("");const[saved,flashSaved]=useSavedNote();const used=projectsOf(credential);const setDefault=async()=>{if(busy)return;setBusy(true);setError("");try{await api.setDefault(credential.id);flashSaved("\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4");onChanged()}catch(e){setError(`\u6CA1\u8BBE\u6210\u9ED8\u8BA4\uFF1A${failedBecause4(e,"\u518D\u70B9\u4E00\u6B21\u300C\u8BBE\u4E3A\u9ED8\u8BA4\u300D")}`)}finally{setBusy(false)}};return jsxs7(Fragment6,{children:[jsx8(SettingsHead,{title:jsxs7(Fragment6,{children:[credential.name,credential.isDefault&&jsx8("span",{className:"tag band-sf-default",children:"\u9ED8\u8BA4"}),provisioned&&jsx8("span",{className:"tag",children:"\u7531 Band \u4E3A\u4F60\u5F00\u901A"})]}),desc:"\u53EA\u6709\u4F60\u770B\u5F97\u5230\u8FD9\u4EFD\u914D\u7F6E\u3002"}),saved&&jsx8(SettingsSaved,{text:saved}),jsx8(SettingsFacts,{items:[{key:"\u670D\u52A1\u5546",value:provider},{key:"\u7AEF\u70B9",value:jsx8("code",{children:credential.endpoint})},{key:"\u6A21\u578B",value:jsx8("code",{children:credential.model})},{key:"key",value:credential.last4!==null?`\u672B 4 \u4F4D \u2022\u2022\u2022\u2022${credential.last4}`:"\u2014"},{key:"\u9A8C\u8BC1",value:verifiedText(credential)},{key:"\u5728\u7528",value:used.length>0?`${used.length} \u4E2A\u9879\u76EE\u5728\u7528\uFF1A${used.join("\u3001")}`:"\u8FD8\u6CA1\u6709\u9879\u76EE\u5728\u7528"}]}),credential.unpriced&&jsxs7("p",{className:"band-sf-err band-sf-fail","data-reason":"model_unpriced",children:[jsx8("span",{className:"glyph failed","aria-hidden":"true"}),jsx8("span",{children:UNPRICED_NOTE})]}),canEditModels&&jsx8(Section,{title:"\u4FEE\u6539\u6A21\u578B",children:editing?jsx8(EditModelsForm,{api,credential,preset,provider,modelGateAvailable,onCancel:()=>setEditing(false),onSaved:(next,latencyMs)=>{setEditing(false);flashSaved(`\u6539\u7528 ${next.model}\uFF0C\u9A8C\u8BC1\u901A\u8FC7${latencyMs===void 0?"":` \xB7 \u8017\u65F6 ${latencyText(latencyMs)}`}`);onChanged()}}):jsxs7(Fragment6,{children:[jsx8("p",{children:"\u6362\u4E3B\u6A21\u578B\u548C\u4E09\u6863\uFF0Ckey \u548C\u7AEF\u70B9\u4E0D\u53D8\uFF1B\u4FDD\u5B58\u524D\u7528\u5DF2\u5B58\u7684 key \u5BF9\u65B0\u6A21\u578B\u771F\u6253\u4E00\u6B21\u3002"}),jsx8(SettingsActions3,{children:jsx8("button",{type:"button",className:"btn",onClick:()=>setEditing(true),children:"\u4FEE\u6539\u6A21\u578B"})})]})}),jsx8(Section,{title:"\u66FF\u6362 key",children:replacing?jsx8(ReplaceForm,{api,credential,provider,preset,modelGateAvailable,onCancel:()=>setReplacing(false),onSaved:()=>{setReplacing(false);flashSaved("\u5DF2\u66FF\u6362\uFF0C\u9A8C\u8BC1\u901A\u8FC7");onChanged()}}):jsxs7(Fragment6,{children:[jsx8("p",{children:"\u6362\u4E00\u628A\u65B0\u7684 key\uFF0C\u670D\u52A1\u5546\u548C\u6A21\u578B\u4E0D\u53D8\u3002"}),jsx8(SettingsActions3,{children:jsx8("button",{type:"button",className:"btn",onClick:()=>setReplacing(true),children:"\u66FF\u6362 key"})})]})}),!credential.isDefault&&jsxs7(Section,{title:"\u8BBE\u4E3A\u9ED8\u8BA4",children:[jsx8("p",{children:"\u4E4B\u540E\u5EFA\u9879\u76EE\u7528\u8FD9\u4E00\u4EFD\u3002\u5DF2\u7ECF\u5EFA\u597D\u7684\u9879\u76EE\u4E0D\u53D8\u3002"}),jsx8(SettingsActions3,{children:jsx8("button",{type:"button",className:"btn",disabled:busy,onClick:()=>void setDefault(),children:"\u8BBE\u4E3A\u9ED8\u8BA4"})})]}),jsx8(SettingsDanger,{children:jsx8(SettingsDangerRow,{title:"\u5220\u9664\u8FD9\u4EFD\u914D\u7F6E",note:"\u5728\u7528\u5B83\u7684\u9879\u76EE\u6E05\u7A7A\u9009\u7528\uFF0C\u6B63\u5728\u8DD1\u7684\u56DE\u5408\u7ACB\u523B\u505C\u6B62\u3002key \u4E0D\u80FD\u6062\u590D\u3002",action:jsx8("button",{type:"button",className:"btn danger",onClick:()=>setDeleting(true),children:"\u5220\u9664"})})}),error?jsx8(SettingsSaveState3,{failed:error}):null,deleting&&jsx8(DeleteDialog,{api,credential,provider,othersLeft,provisioned,onClose:()=>setDeleting(false),onDeleted:n=>{setDeleting(false);onDeleted(n)}})]})}function ReplaceForm({api,credential,provider,preset,modelGateAvailable,onCancel,onSaved}){const[key,setKey]=useState6("");const[failure,setFailure]=useState6("");const[formError,setFormError]=useState6("");const probe=useProbe();const id=useId();const label="\u66FF\u6362\u5E76\u9A8C\u8BC1";const isCustom=credential.preset===CUSTOM_MODEL_PRESET_ID;const submit=async()=>{if(probe.busy||key.trim()==="")return;setFailure("");setFormError("");try{const r=await probe.run(()=>api.replaceKey(credential.id,key));if(!r.done){noteStaleProbe();return}if(r.value.outcome==="ok"){setKey("");onSaved()}else setFailure(probeFailureText(r.value.outcome,provider,label,{unauthorizedHint:preset?.unauthorizedHint,blocked:isBlockedPreset(preset),modelGateAvailable,custom:isCustom}))}catch(e){setFormError(failedBecause4(e,`\u518D\u70B9\u300C${label}\u300D`))}};return jsxs7(SettingsForm2,{label:"\u66FF\u6362 key",onSubmit:()=>void submit(),children:[jsx8("p",{className:"band-sf-muted",children:isCustom?"\u7AEF\u70B9\u548C\u6A21\u578B\u4E0D\u53D8\uFF1B\u8981\u6362\u6A21\u578B\uFF0C\u7528\u300C\u4FEE\u6539\u6A21\u578B\u300D\uFF1B\u8981\u6362\u7AEF\u70B9\uFF0C\u8BF7\u53E6\u52A0\u4E00\u4EFD\u3002":`\u670D\u52A1\u5546\u4E0D\u53D8\uFF08${provider}\uFF09\uFF1B\u8981\u6362\u670D\u52A1\u5546\uFF0C\u8BF7\u53E6\u52A0\u4E00\u4EFD\u3002`}),jsx8(KeyField,{provider,preset,value:key,onChange:v=>{setKey(v);setFailure("");setFormError("")},busy:probe.busy,failure}),credential.usedBy.length>0&&jsxs7("p",{className:"band-sf-banner",children:["\u9A8C\u8BC1\u901A\u8FC7\u624D\u6362\u3002\u6362\u5B8C\u4E4B\u540E\u53D1\u8D77\u7684\u56DE\u5408\u7528\u65B0 key\uFF0C\u5305\u62EC\u540C\u9879\u76EE\u5176\u4ED6\u4EBA\u53D1\u8D77\u7684\u56DE\u5408\u3002\u8981\u662F\u65E7 key \u53EF\u80FD\u6CC4\u9732\uFF0C",revokeHint(credential.preset,provider)]}),formError?jsx8(SettingsSaveState3,{failed:formError}):null,jsx8(FormActions,{busy:probe.busy,canSubmit:key.trim()!=="",label,provider,custom:isCustom,missing:"\u8FD8\u5DEE key \u6CA1\u586B",onCancel:()=>leaveThen(()=>{if(probe.busy)probe.abandon();onCancel()})})]})}function DeleteDialog({api,credential,provider,othersLeft,provisioned=false,onClose,onDeleted}){const[busy,setBusy]=useState6(false);const[error,setError]=useState6("");const used=projectsOf(credential);const label=used.length>0?"\u5220\u9664\u5E76\u505C\u6B62\u56DE\u5408":"\u5220\u9664";const go=async()=>{if(busy)return;setBusy(true);setError("");try{const{unselected}=await api.remove(credential.id);onDeleted(unselected.length)}catch(e){setError(`\u6CA1\u5220\u6389\uFF1A${failedBecause4(e,`\u518D\u70B9\u4E00\u6B21\u300C${label}\u300D`)}`);setBusy(false)}};return jsxs7(SettingsDialog,{title:`\u5220\u9664\u300C${credential.name}\u300D\uFF1F`,onClose:()=>!busy&&onClose(),actions:jsxs7(Fragment6,{children:[jsx8("button",{type:"button",className:"btn ghost",disabled:busy,onClick:onClose,children:"\u53D6\u6D88"}),jsx8("button",{type:"button",className:"btn primary",disabled:busy,onClick:()=>void go(),children:busy?"\u6B63\u5728\u5220\u9664\u2026":label})]}),children:[jsxs7("ul",{children:[used.length>0?jsxs7(Fragment6,{children:[jsxs7("li",{children:["\u5728\u7528\u5B83\u7684\u9879\u76EE\uFF1A",used.join("\u3001"),"\u3002\u8FD9\u4E9B\u9879\u76EE\u5BF9\u5B83\u7684\u9009\u7528\u4F1A\u6E05\u7A7A\uFF1A\u8981\u7528\u6210\u5458\u81EA\u5DF1\u6A21\u578B\u7684\u5DE5\u574A\u91CC\uFF0C\u4E0B\u4E00\u6B21\u6D3E\u53D1\u81EA\u52A8\u7528\u521B\u5EFA\u4EBA\u7684\u9ED8\u8BA4\u914D\u7F6E\uFF0C\u6CA1\u6709\u5C31\u4E0D\u6D3E\u53D1\uFF1B\u5176\u4F59\u5DE5\u574A\u56DE\u5230\u5DE5\u574A\u7684\u56E2\u961F key\u3002"]}),jsx8("li",{children:"\u6B63\u5728\u7528\u5B83\u7684\u56DE\u5408\u7ACB\u523B\u505C\u6B62\uFF0C\u5305\u62EC\u522B\u4EBA\u53D1\u8D77\u7684\u3002"})]}):jsx8("li",{children:"\u8FD8\u6CA1\u6709\u9879\u76EE\u5728\u7528\u5B83\u3002"}),credential.isDefault&&othersLeft&&jsx8("li",{children:"\u5B83\u662F\u4F60\u7684\u9ED8\u8BA4\u914D\u7F6E\u3002\u5220\u6389\u540E\u4F60\u540D\u4E0B\u6CA1\u6709\u9ED8\u8BA4\u914D\u7F6E\uFF0C\u5EFA\u9879\u76EE\u524D\u5148\u628A\u53E6\u4E00\u4EFD\u8BBE\u4E3A\u9ED8\u8BA4\u3002"}),jsx8("li",{children:"key \u5F53\u573A\u5220\u6389\uFF0C\u4E0D\u80FD\u6062\u590D\u3002"}),provisioned&&jsx8("li",{children:"\u8FD9\u4EFD\u662F Band \u4E3A\u4F60\u5F00\u901A\u7684\uFF1A\u5220\u9664\u53EA\u5220 Band \u5B58\u7684\u8FD9\u4EFD\uFF0CModelGate \u4E0A\u7684 key \u4ECD\u7136\u6709\u6548\uFF0C\u4E4B\u540E\u518D\u5F00\u901A\u591A\u534A\u627E\u56DE\u540C\u4E00\u628A\u3002\u5220\u9664\u540E\u4E0D\u518D\u81EA\u52A8\u5F00\u901A\uFF0C\u8981\u518D\u7528\u70B9\u300C\u7531 Band \u5F00\u901A\u300D\u3002"})]}),jsxs7("p",{className:"band-sf-muted",children:["\u5982\u679C key \u53EF\u80FD\u5DF2\u7ECF\u6CC4\u9732\uFF0C",revokeHint(credential.preset,provider)]}),error?jsx8(SettingsSaveState3,{failed:error}):null]})}function bindNetCredentials(api){if(!api)return void 0;const me={kind:"user"};return{list:()=>api.list(),save:input=>api.save(me,input),saveMany:input=>api.saveMany(me,input),update:(id,input)=>api.update(me,id,input),replaceKey:(id,value)=>api.replaceKey(me,id,value),remove:id=>api.remove(me,id)}}var SELF7="@kanyun-ai-infra/band-settings";var PAGE3=`${SELF7}/net-credentials`;var NEW_ITEM2="new";var PRIMARY2="\u6DFB\u52A0\u7F51\u7EDC\u51ED\u636E";var LIST_HREF2="/settings/net-credentials";var DESC4="agent \u81EA\u5DF1\u53D1\u51FA\u7684\u5176\u4ED6\u8C03\u7528\uFF08\u51FA\u56FE\u3001\u914D\u97F3\u3001\u89C6\u9891\u3001\u53E6\u4E00\u4E2A\u6A21\u578B\uFF09\u7528\u7684 key\u3002agent \u62FF\u4E0D\u5230 key\uFF0C\u53EA\u62FF\u5230\u5360\u4F4D\u7B26\u3002";var netCredentialsPage=reactMount5(ctx=>jsx9(MyNetCredentials,{ctx}));var itemHref2=id=>`${LIST_HREF2}/${encodeURIComponent(id)}`;function MyNetCredentials({ctx}){const route=useRoute3(ctx);const api=useMemo(()=>bindNetCredentials(ctx.app.data.write?.netCredentials),[ctx]);const[data,setData]=useState7(null);const[readError,setReadError]=useState7(null);const[forbidden,setForbidden]=useState7(false);const[reload,setReload]=useState7(0);const fresh=useFreshRows("net-credentials");const isFresh=id=>fresh.includes(id);const[notice]=useCrossPageNotice("net-credentials");const item=route.params.item;useEffect7(()=>{let live=true;setReadError(null);setForbidden(false);if(!api)return;api.list().then(v=>{if(live)setData(v)},e=>{if(!live)return;setForbidden(isForbidden6(e));setReadError(isForbidden6(e)?"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E9B\u51ED\u636E":failedBecause5(e,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,reload]);const go=next=>ctx.app.navigate({page:PAGE3,...next?{params:{item:next}}:{}});if(!api){return jsxs8(PersonalFrame,{ctx,current:"net-credentials",children:[jsx9(SettingsHead,{title:"\u7F51\u7EDC\u51ED\u636E",desc:DESC4}),jsx9(SettingsNoAccess,{title:"\u8FD9\u4E2A\u73AF\u5883\u8FD8\u6CA1\u5F00\u901A\u7F51\u7EDC\u51ED\u636E",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u5F00\u901A\u8981\u90E8\u7F72\u7BA1\u7406\u5458\u5728\u670D\u52A1\u7AEF\u6253\u5F00\u3002\u5F00\u901A\u4E4B\u524D\uFF0Cagent \u7528\u4E0D\u4E86\u8FD9\u7C7B\u5916\u90E8\u8C03\u7528\u3002"})]})}if(forbidden){return jsxs8(PersonalFrame,{ctx,current:"net-credentials",children:[jsx9(SettingsHead,{title:"\u7F51\u7EDC\u51ED\u636E",desc:DESC4}),jsx9(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u7F51\u7EDC\u51ED\u636E",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u7F51\u7EDC\u51ED\u636E\u6309\u767B\u5F55\u4EBA\u5F52\u5C5E\uFF0C\u53EA\u6709\u672C\u4EBA\u80FD\u770B\u3002\u8981\u7528\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u3002"})]})}if(readError!==null){return jsxs8(PersonalFrame,{ctx,current:"net-credentials",children:[jsx9(SettingsHead,{title:"\u7F51\u7EDC\u51ED\u636E",desc:DESC4}),jsxs8(SettingsReadError,{retry:()=>setReload(n=>n+1),children:["\u7F51\u7EDC\u51ED\u636E\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]})]})}if(data===null){return jsxs8(PersonalFrame,{ctx,current:"net-credentials",children:[jsx9(SettingsHead,{title:"\u7F51\u7EDC\u51ED\u636E",desc:DESC4,action:jsx9("button",{type:"button",className:"btn primary",disabled:true,children:PRIMARY2})}),jsx9(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u7F51\u7EDC\u51ED\u636E\u2026"})]})}const rows=data.credentials;const taken=new Set(rows.map(c=>c.name));const full=rows.length>=PER_OWNER_MAX;const current=item&&item!==NEW_ITEM2?rows.find(c=>c.id===item):void 0;if(item===NEW_ITEM2){return jsxs8(PersonalFrame,{ctx,current:"net-credentials",back:"list",children:[jsx9(Back,{ctx,label:"\u7F51\u7EDC\u51ED\u636E",page:PAGE3,href:LIST_HREF2}),jsx9(NetAdd,{api,presets:data.presets,providerPresets:data.providerPresets,taken,onCancel:()=>go(),onSaved:cs=>{markFreshMany("net-credentials",cs.map(c=>c.id));markNotice("net-credentials",cs.length===1?`${cs[0]?.name??"\u7F51\u7EDC\u51ED\u636E"} \u5DF2\u4FDD\u5B58`:`\u5DF2\u4FDD\u5B58 ${cs.length} \u6761\u7F51\u7EDC\u51ED\u636E`);setReload(n=>n+1);go()}})]})}if(current){return jsxs8(PersonalFrame,{ctx,current:"net-credentials",back:"list",children:[jsx9(Back,{ctx,label:"\u7F51\u7EDC\u51ED\u636E",page:PAGE3,href:LIST_HREF2}),jsx9(NetDetail,{api,credential:current,onChanged:()=>setReload(n=>n+1),onDeleted:stops=>{markNotice("net-credentials",stops>0?`${current.name} \u5DF2\u5220\u9664\uFF0C\u505C\u6B62\u4E86 ${stops} \u4E2A\u5728\u8DD1\u7684\u56DE\u5408`:`${current.name} \u5DF2\u5220\u9664`);setReload(n=>n+1);go()}}),jsx9(SettingsNotice,{text:notice})]})}const add=jsx9("button",{type:"button",className:"btn primary",disabled:full,title:full?MSG.limit:void 0,onClick:()=>go(NEW_ITEM2),children:PRIMARY2});return jsxs8(PersonalFrame,{ctx,current:"net-credentials",children:[jsx9(SettingsHead,{title:"\u7F51\u7EDC\u51ED\u636E",desc:DESC4,action:rows.length>0?add:void 0}),full&&jsx9("p",{className:"band-sf-muted",children:MSG.limit}),rows.length===0?jsx9(SettingsEmpty,{action:add,children:"\u4F60\u8FD8\u6CA1\u6709\u7F51\u7EDC\u51ED\u636E\u3002agent \u8981\u8C03\u7528\u51FA\u56FE\u3001\u914D\u97F3\u3001\u89C6\u9891\u8FD9\u7C7B\u5916\u90E8\u670D\u52A1\u65F6\u624D\u9700\u8981\u3002"}):jsxs8(Fragment7,{children:[jsx9("p",{className:"band-sf-banner",children:"\u4F60\u540D\u4E0B\u7684\u7F51\u7EDC\u51ED\u636E\u4F1A\u7528\u4E8E\u4F60\u521B\u5EFA\u7684\u9879\u76EE\u91CC\u7684 agent \u8C03\u7528\u3002"}),jsx9(SettingsRows,{label:"\u6211\u7684\u7F51\u7EDC\u51ED\u636E",children:rows.map(c=>jsx9(SettingsRow,{title:c.name,mono:true,tags:jsxs8(Fragment7,{children:[c.name===DEFAULT_NAME&&jsx9("span",{className:"tag band-sf-default",children:"\u9ED8\u8BA4"}),isFresh(c.id)&&jsx9("span",{className:"chip plain s-approved",children:"\u5DF2\u4FDD\u5B58"})]}),meta:metaOf2(c),href:itemHref2(c.id),onOpen:()=>go(c.id),isNew:isFresh(c.id)},c.id))})]}),jsx9(SettingsNotice,{text:notice})]})}function metaOf2(c){return[...c.note?[c.note]:[],...c.domains,...c.gcp?[`GCP \xB7 ${c.gcp.projectId}`]:[],injectPurpose(c.inject),...c.last4?[`\u672B 4 \u4F4D \u2022\u2022\u2022\u2022${c.last4}`]:[]]}var NAME_PREFIX=NET_CREDENTIAL_NAME_PREFIX;var DEFAULT_NAME="BAND_NET_DEFAULT";var NOTE_MAX=NET_CREDENTIAL_NOTE_MAX;var DOMAINS_MAX=NET_CREDENTIAL_DOMAINS_MAX;var KEY_MAX=NET_CREDENTIAL_KEY_MAX;var PER_OWNER_MAX=NET_CREDENTIALS_PER_OWNER_MAX;var HEADER_RE=/^[A-Za-z0-9-]{1,64}$/;var PREFIX_MAX=32;var MSG={name:"\u53EA\u80FD\u7528\u5927\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u4E0B\u5212\u7EBF\uFF0C\u540E\u7F00 1\u201332 \u4E2A\u5B57\u7B26\uFF0C\u4E0D\u80FD\u4EE5\u4E0B\u5212\u7EBF\u7ED3\u5C3E\uFF0C\u4E0D\u80FD\u4EE5 _BASE_URL \u6216 _GCP_PROJECT_ID \u7ED3\u5C3E",domainShape:"\u53EA\u5199\u57DF\u540D\uFF0C\u4E0D\u5E26 https:// \u548C\u8DEF\u5F84\uFF1B\u5B50\u57DF\u540D\u5199 *.example.com",domainsMax:`\u6700\u591A ${DOMAINS_MAX} \u4E2A`,key:`\u53EA\u80FD\u7528\u82F1\u6587\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u7B26\u53F7\uFF0C\u4E0D\u80FD\u6709\u4E2D\u6587\u3001\u6362\u884C\u6216\u524D\u540E\u7A7A\u683C\uFF0C\u6700\u957F ${KEY_MAX} \u4E2A\u5B57\u7B26`,serviceAccount:"\u8981 type \u4E3A service_account \u7684 JSON key \u6587\u4EF6\uFF0C\u6574\u4EFD\u7C98\u8D34",header:"\u5934\u540D\u53EA\u80FD\u7528\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u8FDE\u5B57\u7B26\uFF0C\u6700\u957F 64 \u4E2A\u5B57\u7B26",prefix:`\u524D\u7F00\u6700\u957F ${PREFIX_MAX} \u4E2A\u5B57\u7B26\uFF0C\u4E0D\u80FD\u6709\u6362\u884C`,limit:`\u6700\u591A ${PER_OWNER_MAX} \u6761\uFF0C\u5148\u5220\u6389\u4E0D\u7528\u7684`};function nameSuffixProblem(suffix){if(!/^[A-Z][A-Z0-9_]{0,31}$/.test(suffix))return MSG.name;if(suffix.endsWith("_")||suffix.includes("__"))return MSG.name;const name=`${NAME_PREFIX}${suffix}`;if(name.endsWith("_BASE_URL")||name.endsWith("_GCP_PROJECT_ID"))return MSG.name;return null}function parseDomains(text){return text.split(/\r?\n/).map(l=>l.trim()).filter(Boolean)}function domainsProblem(domains){if(domains.length>DOMAINS_MAX)return MSG.domainsMax;for(const d of domains){if(/[/:@?#\s]/.test(d))return MSG.domainShape}return null}function keyProblem(key){if(key.length>KEY_MAX)return MSG.key;if(key!==key.trim())return MSG.key;if(!/^[\x20-\x7e]*$/.test(key))return MSG.key;return null}function serviceAccountProblem(value){try{const parsed=JSON.parse(value);return typeof parsed==="object"&&parsed!==null&&parsed.type==="service_account"?null:MSG.serviceAccount}catch{return MSG.serviceAccount}}function injectOf(kind,header,prefix){if(kind==="bearer")return{header:"Authorization",prefix:"Bearer "};if(kind==="x-api-key")return{header:"x-api-key",prefix:""};return{header,prefix}}function kindOf(inject){if(inject.header.toLowerCase()==="authorization"&&inject.prefix==="Bearer ")return"bearer";if(inject.header.toLowerCase()==="x-api-key"&&inject.prefix==="")return"x-api-key";return"custom"}function injectLabel(inject){const p=inject.prefix.trim();return p?`${inject.header}: ${p}`:inject.header}function injectPurpose(inject){const kind=kindOf(inject);if(kind==="bearer")return"\u4F5C\u4E3A\u767B\u5F55\u51ED\u636E\u53D1\u7ED9\u57DF\u540D";if(kind==="x-api-key")return"\u4F5C\u4E3A API key \u53D1\u7ED9\u57DF\u540D";return`\u6309\u81EA\u5B9A\u4E49\u8BF7\u6C42\u5934\u53D1\u7ED9\u57DF\u540D\uFF08${inject.header}\uFF09`}function detailsOf(e){if(typeof e!=="object"||e===null)return{};const o=e;const d=typeof o.details==="object"&&o.details!==null?o.details:{};return{...typeof o.code==="string"?{code:o.code}:{},...typeof d.field==="string"?{field:d.field}:{},...typeof d.reason==="string"?{reason:d.reason}:{}}}var FIELDS=["name","note","domains","inject","key","serviceAccount"];function errorsFrom(e,next){const{code,field,reason}=detailsOf(e);const text=failedBecause5(e,next);if(code==="VALIDATION_ERROR"&&field&&FIELDS.includes(field))return{[field]:text};if(code==="CONFLICT"&&reason==="NAME_TAKEN")return{name:text};return{form:text}}var CUSTOM="__custom__";function ServiceAccountField({value,onChange,error,hint,busy=false}){const[readError,setReadError]=useState7("");const shown=error??(readError||null);return jsx9(SettingsField3,{label:"\u670D\u52A1\u8D26\u53F7 JSON",required:true,hint,error:fieldError(shown),children:field=>jsxs8(Fragment7,{children:[jsx9("textarea",{...field,className:"field band-sf-mono",rows:6,autoComplete:"off",spellCheck:false,maxLength:NET_CREDENTIAL_SERVICE_ACCOUNT_MAX,disabled:busy,value,placeholder:"\u6574\u4EFD\u7C98\u8D34\u670D\u52A1\u8D26\u53F7\u7684 JSON key \u6587\u4EF6\uFF0C\u6216\u70B9\u300C\u4ECE\u6587\u4EF6\u8BFB\u5165\u300D",onChange:e=>onChange(e.target.value)}),jsx9(SettingsActions4,{children:jsxs8("label",{className:"btn ghost sm",children:["\u4ECE\u6587\u4EF6\u8BFB\u5165",jsx9("input",{type:"file",accept:".json,application/json",hidden:true,tabIndex:-1,disabled:busy,onChange:e=>{const file=e.currentTarget.files?.[0];e.currentTarget.value="";if(!file)return;setReadError("");file.text().then(onChange).catch(()=>setReadError("\u6587\u4EF6\u6CA1\u8BFB\u51FA\u6765\uFF0C\u91CD\u65B0\u9009\u4E00\u6B21"))}})]})})]})})}function fieldError(message){return message||void 0}function NetForm({mode,presets,taken,onSubmit,onCancel,submitError,busy=false}){const id=useId2();const existing=mode.kind==="add"?null:mode.credential;const firstFree=presets.find(p=>!taken.has(p.name))?.name??CUSTOM;const[pick,setPick]=useState7(firstFree);const[suffix,setSuffix]=useState7("");const[note,setNote]=useState7(existing?.note??"");const[domainText,setDomainText]=useState7(existing?existing.domains.join("\n"):"");const initialKind=existing?kindOf(existing.inject):"bearer";const[injectKind,setInjectKind]=useState7(initialKind);const[header,setHeader]=useState7(existing&&initialKind==="custom"?existing.inject.header:"");const[prefix,setPrefix]=useState7(existing&&initialKind==="custom"?existing.inject.prefix:"");const[key,setKey]=useState7("");const[serviceAccount,setServiceAccount]=useState7("");const[local,setLocal]=useState7({});const name=mode.kind==="add"?pick===CUSTOM?`${NAME_PREFIX}${suffix}`:pick:existing?.name??"";const domains=parseDomains(domainText);const showKey=mode.kind!=="edit";const showMeta=mode.kind!=="replace";const rowGcp=existing?.scheme==="gcp_service_account";const replaceGcp=mode.kind==="replace"&&rowGcp;const missing=[];if(mode.kind==="add"&&pick===CUSTOM&&!suffix)missing.push("\u540D\u5B57");if(showMeta&&domains.length===0)missing.push("\u751F\u6548\u57DF\u540D");if(showMeta&&injectKind==="custom"&&!header)missing.push("\u5934\u540D");if(showKey&&!(replaceGcp?serviceAccount:key))missing.push(replaceGcp?"\u670D\u52A1\u8D26\u53F7 JSON":"key");const shown={...submitError,...local};const submit=()=>{const next={};if(mode.kind==="add"&&pick===CUSTOM){const p=nameSuffixProblem(suffix);if(p)next.name=p}if(showMeta){const p=domainsProblem(domains);if(p)next.domains=p;if(injectKind==="custom"){if(!HEADER_RE.test(header))next.inject=MSG.header;else if(prefix.length>PREFIX_MAX||/[\u0000-\u001f\u007f]/.test(prefix))next.inject=MSG.prefix}}if(showKey){const p=replaceGcp?serviceAccountProblem(serviceAccount):keyProblem(key);if(p)next[replaceGcp?"serviceAccount":"key"]=p}setLocal(next);if(Object.keys(next).length>0)return;const inject=injectOf(injectKind,header,prefix);const k=key;const sa=serviceAccount;setKey("");setServiceAccount("");if(mode.kind==="add"){const trimmedNote=note.trim();onSubmit({kind:"add",input:{name,...trimmedNote?{note:trimmedNote}:{},domains,inject,key:k}})}else if(mode.kind==="edit"){const trimmedNote=note.trim();onSubmit({kind:"edit",input:{note:trimmedNote||null,domains,...rowGcp?{}:{inject}}})}else if(replaceGcp){onSubmit({kind:"replace",serviceAccount:sa})}else{onSubmit({kind:"replace",key:k})}};const title=mode.kind==="add"?"\u6DFB\u52A0\u7F51\u7EDC\u51ED\u636E":mode.kind==="edit"?`\u7F16\u8F91\u300C${name}\u300D`:replaceGcp?`\u66FF\u6362\u300C${name}\u300D\u7684\u670D\u52A1\u8D26\u53F7`:`\u66FF\u6362\u300C${name}\u300D\u7684 key`;return jsxs8(SettingsForm3,{label:title,onSubmit:()=>{if(!busy&&missing.length===0)submit()},children:[mode.kind==="add"?jsx9(SettingsField3,{label:"\u540D\u5B57",required:true,error:fieldError(shown.name),hint:"\u4FDD\u5B58\u540E\u540D\u5B57\u4E0D\u80FD\u6539\uFF08agent \u91CC\u5199\u6B7B\u4E86\u5B83\uFF09\u3002Rondo \u548C\u5B98\u65B9\u63D2\u4EF6\u53EA\u8BA4\u8FD9\u516D\u4E2A\u9884\u8BBE\u540D\u3002",children:({id:fieldId,...described})=>jsxs8(Fragment7,{children:[jsxs8("select",{id:fieldId,className:"field band-sf-mono",value:pick,disabled:busy,onChange:e=>setPick(e.target.value),...pick!==CUSTOM?described:{},children:[presets.map(p=>jsxs8("option",{value:p.name,disabled:taken.has(p.name),children:[p.name,"\uFF1A",p.purpose,taken.has(p.name)?"\uFF08\u5DF2\u6709\uFF09":""]},p.name)),jsx9("option",{value:CUSTOM,children:"\u81EA\u5B9A\u4E49\u540D\u5B57\u2026"})]}),pick===CUSTOM?jsxs8("div",{className:"band-sf-pair",children:[jsx9("span",{className:"band-sf-mono","aria-hidden":"true",children:NAME_PREFIX}),jsx9("input",{id:`${id}-suffix`,className:"field band-sf-mono","aria-label":`\u540D\u5B57\u540E\u7F00\uFF08\u524D\u7F00 ${NAME_PREFIX} \u56FA\u5B9A\uFF09`,autoComplete:"off",spellCheck:false,maxLength:32,disabled:busy,value:suffix,placeholder:"\u4F8B\u5982 MUSIC",onChange:e=>setSuffix(e.target.value.toUpperCase()),...described})]}):null]})}):null,showMeta?jsxs8(Fragment7,{children:[jsx9(SettingsField3,{label:"\u5907\u6CE8",optional:true,error:fieldError(shown.note),children:field=>jsx9("input",{...field,className:"field",maxLength:NOTE_MAX,disabled:busy,value:note,placeholder:"\u4F8B\u5982\uFF1A\u56E2\u961F\u7684\u914D\u97F3\u8D26\u53F7",onChange:e=>setNote(e.target.value)})}),jsx9(SettingsField3,{label:"\u751F\u6548\u57DF\u540D",required:true,error:fieldError(shown.domains),hint:jsxs8(Fragment7,{children:["\u4E00\u884C\u4E00\u4E2A\uFF0C\u5B50\u57DF\u540D\u5199 *.example.com\u3002\u53EA\u6709\u53D1\u5F80\u8FD9\u4E9B\u57DF\u540D\u7684 https \u8BF7\u6C42\u624D\u4F1A\u6362\u4E0A\u771F key\u3002\u6700\u591A"," ",DOMAINS_MAX," \u4E2A\u3002"]}),children:field=>jsx9("textarea",{...field,className:"field band-sf-mono",rows:Math.min(Math.max(domains.length+1,2),DOMAINS_MAX),autoComplete:"off",spellCheck:false,disabled:busy,value:domainText,placeholder:"api.example.com\n*.example.com",onChange:e=>setDomainText(e.target.value)})}),rowGcp?jsx9("p",{className:"band-sf-banner",children:"\u6CE8\u5165\u683C\u5F0F\u56FA\u5B9A Authorization: Bearer\uFF08GCP \u670D\u52A1\u8D26\u53F7\u7531\u7F51\u5173\u6362 token\uFF0C\u4E0D\u80FD\u6539\uFF09\u3002"}):jsx9(SettingsField3,{label:"\u6CE8\u5165\u683C\u5F0F",error:fieldError(shown.inject),children:({id:fieldId,...described})=>jsxs8(Fragment7,{children:[jsxs8("select",{id:fieldId,className:"field",value:injectKind,disabled:busy,onChange:e=>setInjectKind(e.target.value),children:[jsx9("option",{value:"bearer",children:"Authorization: Bearer\uFF08\u7F3A\u7701\uFF09"}),jsx9("option",{value:"x-api-key",children:"x-api-key"}),jsx9("option",{value:"custom",children:"\u81EA\u5B9A\u4E49\uFF08\u5934\u540D + \u524D\u7F00\uFF09"})]}),injectKind==="custom"?jsxs8("div",{className:"band-sf-pair",children:[jsx9("input",{className:"field band-sf-mono","aria-label":"\u5934\u540D",autoComplete:"off",spellCheck:false,maxLength:64,disabled:busy,value:header,placeholder:"\u5934\u540D\uFF0C\u4F8B\u5982 X-Api-Token",onChange:e=>setHeader(e.target.value),...described}),jsx9("input",{className:"field band-sf-mono","aria-label":"\u524D\u7F00\uFF08\u9009\u586B\uFF09",autoComplete:"off",spellCheck:false,maxLength:PREFIX_MAX,disabled:busy,value:prefix,placeholder:"\u524D\u7F00\uFF08\u9009\u586B\uFF09\uFF0C\u4F8B\u5982 Token ",onChange:e=>setPrefix(e.target.value)})]}):null]})})]}):null,showKey?replaceGcp?jsx9(ServiceAccountField,{value:serviceAccount,onChange:setServiceAccount,error:shown.serviceAccount??shown.key??null,hint:"\u6574\u4EFD\u91CD\u65B0\u7C98\u8D34\u670D\u52A1\u8D26\u53F7\u7684 JSON key \u6587\u4EF6\uFF1B\u9879\u76EE ID \u548C\u90AE\u7BB1\u53EF\u4EE5\u6362\u6210\u522B\u7684\u3002",busy}):jsx9(SettingsField3,{label:"key",required:true,error:fieldError(shown.key),children:field=>jsx9("input",{...field,className:"field",type:"password",autoComplete:"off",spellCheck:false,maxLength:KEY_MAX+1,disabled:busy,value:key,placeholder:"\u7C98\u8D34\u670D\u52A1\u5546\u7ED9\u4F60\u7684 key",onChange:e=>setKey(e.target.value)})}):null,mode.kind==="replace"?jsx9("p",{className:"band-sf-banner",children:replaceGcp?"\u5728\u8DD1\u7684\u56DE\u5408\u8FD8\u4F1A\u7528\u65E7\u503C\uFF0C\u76F4\u5230\u5B83\u7ED3\u675F\uFF1B\u4E4B\u540E\u7684\u56DE\u5408\u7528\u65B0\u7684\u670D\u52A1\u8D26\u53F7\u3002":"\u5728\u8DD1\u7684\u56DE\u5408\u8FD8\u4F1A\u7528\u65E7\u503C\uFF0C\u76F4\u5230\u5B83\u7ED3\u675F\uFF1B\u4E4B\u540E\u7684\u56DE\u5408\u7528\u65B0 key\u3002"}):mode.kind==="edit"?jsx9("p",{className:"band-sf-banner",children:"\u6539\u4E86\u57DF\u540D\u6216\u6CE8\u5165\u683C\u5F0F\uFF0C\u4E0B\u4E00\u4E2A\u56DE\u5408\u8D77\u751F\u6548\u3002"}):jsxs8(Fragment7,{children:[jsx9("p",{className:"band-sf-banner",children:"\u4FDD\u5B58\u65F6\u4E0D\u4F1A\u6D4B\u8BD5\u8FD9\u628A key\uFF0C\u7B2C\u4E00\u6B21\u4F7F\u7528\u65F6\u624D\u77E5\u9053\u5BF9\u4E0D\u5BF9\u3002"}),jsxs8("p",{className:"band-sf-banner",children:["agent \u4F1A\u770B\u5230 ",jsx9("code",{children:name})," \u548C ",jsxs8("code",{children:[name,"_BASE_URL"]}),"\uFF0C\u628A\u8BF7\u6C42\u53D1\u5230\u540E\u8005\u3001\u5E26\u4E0A\u524D\u8005\uFF1B\u770B\u4E0D\u5230 key\u3002\u8C03\u7528\u65B9\u8981\u80FD\u6539 base URL\uFF0C\u6539\u4E0D\u4E86\u7684 SDK \u7528\u4E0D\u4E0A\u3002"]})]}),shown.form?jsx9(SettingsSaveState4,{failed:`\u6CA1\u4FDD\u5B58\uFF1A${shown.form}`}):null,jsxs8(SettingsActions4,{children:[jsx9("button",{type:"submit",className:"btn primary",disabled:busy||missing.length>0,children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":mode.kind==="replace"?"\u66FF\u6362":"\u4FDD\u5B58"}),jsx9("button",{type:"button",className:"btn ghost",disabled:busy,onClick:()=>{leaveThen(()=>{setKey("");setServiceAccount("");onCancel()})},children:"\u53D6\u6D88"}),missing.length>0?jsx9(SettingsSaveState4,{missing:`\u8FD8\u5DEE${missing.join("\u3001")}\u6CA1\u586B`}):null]})]})}function NetAdd({api,presets,providerPresets,taken,onCancel,onSaved}){const[step,setStep]=useState7({kind:"pick"});if(step.kind==="pick"){return jsx9(ProviderPick,{presets:providerPresets,onPick:preset=>setStep({kind:"preset",preset}),onOther:()=>setStep({kind:"other"})})}if(step.kind==="other"){return jsxs8(Fragment7,{children:[jsx9(StepBack,{label:"\u9009\u670D\u52A1\u5546",onClick:()=>setStep({kind:"pick"})}),jsx9(OtherService,{api,presets,taken,onCancel,onSaved})]})}return jsxs8(Fragment7,{children:[jsx9(StepBack,{label:"\u9009\u670D\u52A1\u5546",onClick:()=>setStep({kind:"pick"})}),jsx9(PresetForm,{api,preset:step.preset,taken,onCancel,onSaved})]})}function ProviderPick({presets,onPick,onOther}){return jsxs8(Fragment7,{children:[jsx9(SettingsHead,{title:"\u6DFB\u52A0\u7F51\u7EDC\u51ED\u636E",desc:"\u9009\u4E00\u5BB6\u670D\u52A1\u5546\u3002\u57DF\u540D\u548C\u6CE8\u5165\u683C\u5F0F\u7531\u9884\u8BBE\u5E26\u51FA\uFF0C\u4F60\u53EA\u586B key\u3002"}),jsxs8("div",{className:"band-sf-pickgrid",children:[presets.map(p=>jsxs8("button",{type:"button",className:"band-sf-pickcard",onClick:()=>onPick(p),children:[jsx9("i",{children:p.label.slice(0,1)}),jsx9("b",{children:p.label}),jsx9("small",{children:p.description}),jsx9("span",{className:"band-sf-caps",children:p.capabilities.map(c=>jsx9("span",{className:"tag",children:CAPABILITY_LABELS2[c]},c))})]},p.id)),jsxs8("button",{type:"button",className:"band-sf-pickcard",onClick:onOther,children:[jsx9("i",{children:"\uFF0B"}),jsx9("b",{children:"\u5176\u4ED6\u670D\u52A1"}),jsx9("small",{children:"\u81EA\u5DF1\u586B\u57DF\u540D\u548C\u6CE8\u5165\u683C\u5F0F"})]})]})]})}function StepBack({label,onClick}){return jsxs8("button",{type:"button",className:"band-sf-stepback",onClick:()=>leaveThen(onClick),children:[jsx9("span",{"aria-hidden":"true",children:"\u2039"})," ",label]})}var CAPABILITY_LABELS2={text:"\u6587\u672C",image:"\u51FA\u56FE",tts:"\u914D\u97F3",asr:"\u8BC6\u522B",video:"\u89C6\u9891",music:"\u914D\u4E50"};function nameProblem(name){if(!name.startsWith(NAME_PREFIX))return MSG.name;return nameSuffixProblem(name.slice(NAME_PREFIX.length))}function PresetForm({api,preset,taken,onCancel,onSaved}){const id=useId2();const[checked,setChecked]=useState7(()=>preset.purposes.map(p=>p.preselected));const[names,setNames]=useState7(()=>preset.purposes.map(p=>p.name));const[rowErrors,setRowErrors]=useState7(()=>preset.purposes.map(()=>null));const[key,setKey]=useState7("");const[serviceAccount,setServiceAccount]=useState7("");const[note,setNote]=useState7("");const[keyError,setKeyError]=useState7(null);const[noteError,setNoteError]=useState7(null);const[formError,setFormError]=useState7("");const[busy,setBusy]=useState7(false);const isGcp=preset.scheme==="gcp_service_account";const chosen=preset.purposes.flatMap((_,i)=>checked[i]?[i]:[]);const missing=[];if(chosen.length===0)missing.push("\u7528\u9014");if(!(isGcp?serviceAccount:key))missing.push(isGcp?"\u670D\u52A1\u8D26\u53F7 JSON":"key");const submit=async()=>{if(busy)return;setFormError("");setNoteError(null);const nextRows=preset.purposes.map(()=>null);let bad=false;const seen=new Set;for(const i of chosen){const name=(names[i]??"").trim();const p=nameProblem(name);if(p){nextRows[i]=p;bad=true;continue}if(seen.has(name)||taken.has(name)){nextRows[i]="\u8FD9\u4E2A\u540D\u5B57\u5DF2\u7ECF\u6709\u4E86\uFF0C\u6362\u4E00\u4E2A\uFF0C\u6216\u8005\u53BB\u66FF\u6362\u90A3\u4E00\u6761\u7684 key";bad=true}seen.add(name)}const vp=isGcp?serviceAccountProblem(serviceAccount):keyProblem(key);setRowErrors(nextRows);setKeyError(vp);if(bad||vp)return;if(chosen.length===0)return;const trimmedNote=note.trim();const credentials=chosen.map(i=>{const name=(names[i]??"").trim();const common={name,...trimmedNote?{note:trimmedNote}:{},domains:[...preset.domains]};return preset.scheme==="gcp_service_account"?{...common,scheme:"gcp_service_account",serviceAccount}:{...common,inject:{...preset.inject},key}});setBusy(true);try{const r=await api.saveMany({credentials});onSaved(r.credentials)}catch(e){const err=errorsFrom(e,"\u6539\u597D\u540E\u518D\u70B9\u4FDD\u5B58");if(err.key)setKeyError(err.key);if(err.serviceAccount)setKeyError(err.serviceAccount);if(err.note)setNoteError(err.note);const rest=err.form??err.name??err.domains??err.inject;if(rest)setFormError(rest);else if(!err.key&&!err.serviceAccount&&!err.note)setFormError("\u5148\u6539\u597D\u6807\u7EA2\u7684\u5B57\u6BB5");setBusy(false)}};return jsxs8(Fragment7,{children:[jsx9(SettingsHead,{title:`\u6DFB\u52A0${preset.label}\u7684\u7F51\u7EDC\u51ED\u636E`,desc:preset.description}),jsxs8(SettingsForm3,{label:`\u6DFB\u52A0${preset.label}\u7684\u7F51\u7EDC\u51ED\u636E`,onSubmit:()=>{if(!busy&&missing.length===0)void submit()},children:[jsxs8("dl",{className:"band-sf-given",children:[jsx9("dt",{children:"\u751F\u6548\u57DF\u540D"}),jsx9("dd",{children:preset.domains.map((d,i)=>jsxs8("span",{children:[i>0?"\u3001":null,jsx9("code",{children:d})]},d))}),jsx9("dt",{children:"\u6CE8\u5165\u683C\u5F0F"}),jsx9("dd",{children:jsx9("code",{children:preset.scheme==="static"?injectLabel(preset.inject):"Authorization: Bearer"})}),jsx9("p",{children:"\u7531\u9884\u8BBE\u5E26\u51FA\uFF0C\u4E0D\u7528\u586B\u3002"})]}),jsxs8("fieldset",{className:"band-sf-uses",children:[jsx9("legend",{children:"\u7528\u9014"}),preset.purposes.map((p,i)=>jsxs8("div",{className:"band-sf-use",children:[jsxs8("label",{children:[jsx9("input",{type:"checkbox",checked:checked[i]??false,disabled:busy,onChange:e=>setChecked(prev=>prev.map((v,j)=>j===i?e.target.checked:v))}),p.purpose]}),jsx9("input",{className:"field band-sf-mono","aria-label":`${p.purpose}\u7684\u540D\u5B57`,autoComplete:"off",spellCheck:false,maxLength:41,disabled:busy||!checked[i],value:names[i]??"",onChange:e=>setNames(prev=>prev.map((v,j)=>j===i?e.target.value:v)),...rowErrors[i]?{"aria-invalid":true,"aria-describedby":`${id}-use-${i}-err`}:{}}),rowErrors[i]?jsx9("p",{className:"band-sf-err",id:`${id}-use-${i}-err`,role:"alert",children:rowErrors[i]}):null]},`${p.name}-${i}`)),jsx9("span",{className:"band-sf-hint",children:preset.purposes.length>1?"\u52FE\u51E0\u4E2A\u7528\u9014\u5C31\u7528\u8FD9\u628A key \u5EFA\u51E0\u6761\uFF0C\u5168\u90E8\u5EFA\u6210\u624D\u7B97\u4FDD\u5B58\u3002":"\u540D\u5B57\u662F agent \u91CC\u7528\u7684\u5F15\u7528\uFF0C\u4FDD\u5B58\u540E\u4E0D\u80FD\u6539\u3002"})]}),isGcp?jsx9(ServiceAccountField,{value:serviceAccount,onChange:setServiceAccount,error:keyError,hint:jsxs8(Fragment7,{children:[preset.keyHint," \u4FDD\u5B58\u65F6\u4E0D\u4F1A\u771F\u8C03 Google \u9A8C\u8BC1\u8FD9\u4EFD\u670D\u52A1\u8D26\u53F7\uFF0C\u7B2C\u4E00\u6B21\u4F7F\u7528\u65F6\u624D\u77E5\u9053\u5BF9\u4E0D\u5BF9\u3002",preset.docsUrl?jsxs8(Fragment7,{children:[" ",jsxs8("a",{href:preset.docsUrl,target:"_blank",rel:"noreferrer",children:["\u5230",preset.label,"\u521B\u5EFA key"]})]}):null]}),busy}):jsx9(SettingsField3,{label:"key",required:true,hint:jsxs8(Fragment7,{children:[preset.keyHint," \u4FDD\u5B58\u65F6\u4E0D\u4F1A\u6D4B\u8BD5\u8FD9\u628A key\uFF0C\u7B2C\u4E00\u6B21\u4F7F\u7528\u65F6\u624D\u77E5\u9053\u5BF9\u4E0D\u5BF9\u3002",preset.docsUrl?jsxs8(Fragment7,{children:[" ",jsxs8("a",{href:preset.docsUrl,target:"_blank",rel:"noreferrer",children:["\u5230",preset.label,"\u521B\u5EFA key"]})]}):null]}),error:keyError?jsxs8(Fragment7,{children:[keyError,preset.docsUrl?jsxs8(Fragment7,{children:[" ",jsxs8("a",{href:preset.docsUrl,target:"_blank",rel:"noreferrer",children:["\u5230",preset.label,"\u521B\u5EFA key"]})]}):null]}):void 0,children:field=>jsx9("input",{...field,className:"field",type:"password",autoComplete:"off",spellCheck:false,maxLength:KEY_MAX+1,disabled:busy,value:key,placeholder:"\u7C98\u8D34\u670D\u52A1\u5546\u7ED9\u4F60\u7684 key",onChange:e=>setKey(e.target.value)})}),jsx9(SettingsField3,{label:"\u5907\u6CE8",optional:true,error:fieldError(noteError),children:field=>jsx9("input",{...field,className:"field",maxLength:NOTE_MAX,disabled:busy,value:note,placeholder:"\u7559\u7A7A\u5C31\u4E0D\u5199\u5907\u6CE8",onChange:e=>setNote(e.target.value)})}),formError?jsx9(SettingsSaveState4,{failed:`\u6CA1\u4FDD\u5B58\uFF1A${formError}`}):null,jsxs8(SettingsActions4,{children:[jsx9("button",{type:"submit",className:"btn primary",disabled:busy||missing.length>0,children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":"\u4FDD\u5B58"}),jsx9("button",{type:"button",className:"btn ghost",disabled:busy,onClick:()=>leaveThen(onCancel),children:"\u53D6\u6D88"}),missing.length>0?jsx9(SettingsSaveState4,{missing:`\u8FD8\u5DEE${missing.join("\u3001")}\u6CA1\u586B`}):null]})]})]})}function OtherService({api,presets,taken,onCancel,onSaved}){const[busy,setBusy]=useState7(false);const[errors,setErrors]=useState7({});const submit=async v=>{if(busy||v.kind!=="add")return;setBusy(true);setErrors({});try{const r=await api.save(v.input);onSaved([r.credential])}catch(e){setErrors(errorsFrom(e,"\u6539\u597D\u540E\u518D\u70B9\u4FDD\u5B58"));setBusy(false)}};return jsxs8(Fragment7,{children:[jsx9(SettingsHead,{title:"\u5176\u4ED6\u670D\u52A1",desc:"\u81EA\u5DF1\u586B\u57DF\u540D\u548C\u6CE8\u5165\u683C\u5F0F\u3002\u4FDD\u5B58\u65F6\u4F1A\u68C0\u67E5\u683C\u5F0F\uFF0C\u4E0D\u4F1A\u6D4B\u8BD5\u8FD9\u628A key\uFF1A\u7B2C\u4E00\u6B21\u4F7F\u7528\u65F6\u624D\u77E5\u9053\u5BF9\u4E0D\u5BF9\u3002"}),jsx9(NetForm,{mode:{kind:"add"},presets:[...presets],taken,busy,submitError:errors,onSubmit:v=>void submit(v),onCancel})]})}function NetDetail({api,credential,onChanged,onDeleted}){const[mode,setMode]=useState7("none");const[busy,setBusy]=useState7(false);const[errors,setErrors]=useState7({});const[deleting,setDeleting]=useState7(false);const[deleteError,setDeleteError]=useState7("");const[saved,setSaved]=useState7("");const replaceLabel=credential.scheme==="gcp_service_account"?"\u66FF\u6362\u670D\u52A1\u8D26\u53F7":"\u66FF\u6362 key";const submit=async v=>{if(busy)return;setBusy(true);setErrors({});setSaved("");try{const r=v.kind==="edit"?await api.update(credential.id,v.input):v.kind==="replace"?await api.replaceKey(credential.id,"key"in v?{key:v.key}:{serviceAccount:v.serviceAccount}):null;setMode("none");setSaved(v.kind==="replace"?"\u5DF2\u66FF\u6362":"\u5DF2\u4FDD\u5B58");void r;onChanged()}catch(e){setErrors(errorsFrom(e,"\u6539\u597D\u540E\u518D\u70B9\u4FDD\u5B58"))}finally{setBusy(false)}};const remove=async()=>{if(busy)return;setBusy(true);setDeleteError("");try{const r=await api.remove(credential.id);onDeleted(r.stops)}catch(e){setDeleteError(failedBecause5(e,"\u518D\u70B9\u4E00\u6B21\u5220\u9664"));setBusy(false)}};return jsxs8(Fragment7,{children:[jsx9(SettingsHead,{title:jsxs8(Fragment7,{children:[jsx9("span",{className:"band-sf-mono",children:credential.name}),credential.name===DEFAULT_NAME&&jsx9("span",{className:"tag band-sf-default",children:"\u9ED8\u8BA4"})]}),desc:"\u53EA\u6709\u4F60\u770B\u5F97\u5230\u8FD9\u4EFD\u51ED\u636E\u3002agent \u53EA\u62FF\u5230\u540D\u5B57\u548C base URL\uFF0C\u62FF\u4E0D\u5230 key\u3002"}),jsx9(SettingsFacts,{items:[{key:"\u540D\u5B57",value:jsx9("code",{children:credential.name})},{key:"\u5907\u6CE8",value:credential.note??"\u2014"},{key:"\u751F\u6548\u57DF\u540D",value:credential.domains.map(d=>jsx9("span",{className:"tag band-sf-mono",children:d},d))},{key:"\u53D1\u9001\u65B9\u5F0F",value:injectPurpose(credential.inject)},...credential.gcp?[{key:"\u9879\u76EE ID",value:jsx9("code",{children:credential.gcp.projectId})},{key:"\u670D\u52A1\u8D26\u53F7\u90AE\u7BB1",value:jsx9("code",{children:credential.gcp.clientEmail})}]:[{key:"key",value:credential.last4?`\u672B 4 \u4F4D \u2022\u2022\u2022\u2022${credential.last4}`:"\u2014"}]]}),jsx9(Section,{title:replaceLabel,children:mode==="replace"?jsx9(NetForm,{mode:{kind:"replace",credential},presets:[],taken:new Set,busy,submitError:errors,onSubmit:v=>void submit(v),onCancel:()=>{setMode("none");setErrors({})}}):jsxs8(Fragment7,{children:[jsxs8("p",{children:["\u5728\u8DD1\u7684\u56DE\u5408\u8FD8\u4F1A\u7528\u65E7\u503C\uFF0C\u76F4\u5230\u5B83\u7ED3\u675F\uFF1B\u4E4B\u540E\u7684\u56DE\u5408\u7528",credential.scheme==="gcp_service_account"?"\u65B0\u7684\u670D\u52A1\u8D26\u53F7":"\u65B0 key","\u3002"]}),jsxs8(SettingsActions4,{children:[jsx9("button",{type:"button",className:"btn",onClick:()=>{setMode("replace");setErrors({});setSaved("")},children:replaceLabel}),saved==="\u5DF2\u66FF\u6362"?jsx9(SettingsSaved,{text:saved}):null]})]})}),jsx9(Section,{title:"\u6539\u5907\u6CE8\u3001\u57DF\u540D\u548C\u6CE8\u5165\u683C\u5F0F",children:mode==="edit"?jsx9(NetForm,{mode:{kind:"edit",credential},presets:[],taken:new Set,busy,submitError:errors,onSubmit:v=>void submit(v),onCancel:()=>{setMode("none");setErrors({})}}):jsxs8(Fragment7,{children:[jsx9("p",{children:"\u540D\u5B57\u4FDD\u5B58\u540E\u4E0D\u80FD\u6539\uFF08agent \u91CC\u5199\u6B7B\u4E86\u5B83\uFF09\u3002\u6539\u57DF\u540D\u6216\u6CE8\u5165\u683C\u5F0F\uFF0C\u4E0B\u4E00\u4E2A\u56DE\u5408\u8D77\u751F\u6548\u3002"}),jsxs8(SettingsActions4,{children:[jsx9("button",{type:"button",className:"btn",onClick:()=>{setMode("edit");setErrors({});setSaved("")},children:"\u7F16\u8F91"}),saved==="\u5DF2\u4FDD\u5B58"?jsx9(SettingsSaved,{text:saved}):null]})]})}),jsx9(SettingsDanger,{children:jsx9(SettingsDangerRow,{title:`\u5220\u9664 ${credential.name}`,note:"\u4F60\u521B\u5EFA\u7684\u9879\u76EE\u91CC agent \u4E0D\u518D\u6709\u8FD9\u4E2A\u5360\u4F4D\u7B26\uFF1B\u6B63\u5728\u7528\u5B83\u7684\u56DE\u5408\u7ACB\u523B\u505C\u6B62\uFF0Ckey \u4E0D\u80FD\u6062\u590D\u3002",action:jsx9("button",{type:"button",className:"btn danger",onClick:()=>setDeleting(true),children:"\u5220\u9664"})})}),deleting&&jsx9(DeleteDialog2,{credential,busy,error:deleteError,onConfirm:()=>void remove(),onCancel:()=>setDeleting(false)})]})}function DeleteDialog2({credential,busy,error,onConfirm,onCancel}){return jsxs8(SettingsDialog,{title:`\u5220\u9664\u300C${credential.name}\u300D\uFF1F`,onClose:()=>{if(!busy)onCancel()},actions:jsxs8(Fragment7,{children:[jsx9("button",{type:"button",className:"btn ghost",disabled:busy,onClick:onCancel,children:"\u53D6\u6D88"}),jsx9("button",{type:"button",className:"btn primary",disabled:busy,onClick:onConfirm,children:busy?"\u6B63\u5728\u5220\u9664\u2026":"\u5220\u9664\u5E76\u505C\u6B62\u56DE\u5408"})]}),children:[jsxs8("ul",{children:[jsxs8("li",{children:["\u4F60\u521B\u5EFA\u7684\u9879\u76EE\u91CC\uFF0Cagent \u4E0D\u518D\u6709 ",jsx9("code",{children:credential.name}),"\u3002"]}),jsx9("li",{children:"\u6B63\u5728\u7528\u5B83\u7684\u56DE\u5408\u4F1A\u88AB\u505C\u6B62\uFF0C\u5305\u62EC\u522B\u4EBA\u53D1\u8D77\u7684\u3002"}),jsx9("li",{children:"key \u5F53\u573A\u5220\u6389\uFF0C\u4E0D\u80FD\u6062\u590D\u3002"})]}),jsx9("p",{className:"band-sf-muted",children:"\u5982\u679C key \u53EF\u80FD\u5DF2\u7ECF\u6CC4\u9732\uFF0C\u8BF7\u540C\u65F6\u5230\u670D\u52A1\u5546\u90A3\u91CC\u4F5C\u5E9F\u5B83\u3002"}),error?jsx9(SettingsSaveState4,{failed:`\u6CA1\u5220\u6210\uFF1A${error}`}):null]})}var SELF8="@kanyun-ai-infra/band-settings";var PAGE4=`${SELF8}/settings`;var SECTION="notify";var NOTIFY_NEW="new";var DESC5="\u9879\u76EE\u91CC\u9700\u8981\u4EBA\u5904\u7406\u7684\u4E8B\u63A8\u5230\u8FD9\u4E9B\u6E20\u9053\uFF1B\u540C\u4E00\u9879\u76EE 5 \u5206\u949F\u5185\u7684\u591A\u4EF6\u4E8B\u5408\u5E76\u6210\u4E00\u6761\u3002";var ADD="\u6DFB\u52A0\u6E20\u9053";var READONLY2="\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u6539\u3002";var CHANNEL_TYPES=[{type:"wecom",label:"\u4F01\u4E1A\u5FAE\u4FE1\u7FA4\u673A\u5668\u4EBA",placeholder:"\u4F8B\u5982 https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=\u2026",hint:"\u5730\u5740\u8981\u4EE5 https://qyapi.weixin.qq.com/ \u5F00\u5934\u3002\u4FDD\u5B58\u540E\u53EA\u663E\u793A\u672B 4 \u4F4D\uFF0C\u8981\u6362\u673A\u5668\u4EBA\u5C31\u5220\u4E86\u91CD\u52A0\u3002\u4FDD\u5B58\u65F6\u4E0D\u4F1A\u53D1\u6D4B\u8BD5\u6D88\u606F\u3002",bad:"\u5730\u5740\u8981\u4EE5 https://qyapi.weixin.qq.com/ \u5F00\u5934"}];var labelOf=type=>CHANNEL_TYPES.find(t=>t.type===type)?.label??type;var FRESH_PREFIX="band-notify:fresh:";function markFresh2(projectId,id){try{globalThis.sessionStorage?.setItem(FRESH_PREFIX+projectId,id)}catch{}}function useFreshRow2(projectId){const[id]=useState8(()=>{try{return globalThis.sessionStorage?.getItem(FRESH_PREFIX+projectId)??null}catch{return null}});useEffect8(()=>{if(id===null)return;try{globalThis.sessionStorage?.removeItem(FRESH_PREFIX+projectId)}catch{}},[id,projectId]);return id}var failed=(e,retry)=>failedBecause6(e,retry);function params(ctx,item){return{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{},tab:SECTION,...item?{item}:{}}}function href(ctx,item){return projectPath(ctx.project,"settings",...item?[SECTION,item]:[SECTION])}var leave=ctx=>ctx.app.navigate({page:"@kanyun-ai-infra/band-project/project",params:{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{}}});var notifyPage=reactMount6(ctx=>jsx10(NotifyTab,{ctx}));function NotifyTab({ctx}){const api=ctx.notify;const route=useRoute4(ctx);const item=route.params.item;const channels=useCtxData(ctx,async()=>{if(!api)return null;try{return{kind:"ok",channels:(await api.list()).channels}}catch(e){if(isForbidden7(e))return{kind:"forbidden"};throw e}},[api],["notify.*"]);const fresh=useFreshRow2(ctx.project.id);const manage=useCanManage(ctx);const canManage=manage.can;const read=channels.data;const list=read?.kind==="ok"?read.channels:void 0;const forbidden=read?.kind==="forbidden";const readFailed=channels.error;if(!api){return jsx10(Fragment8,{children:jsx10(SettingsNoAccess,{title:"\u8FD9\u4E2A\u73AF\u5883\u8FD8\u6CA1\u5F00\u901A\u9879\u76EE\u901A\u77E5",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>leave(ctx)},children:"\u8981\u7528\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u3002"})})}if(item===NOTIFY_NEW){return jsxs9(Fragment8,{children:[manage.error?jsxs9(ErrorNote3,{retry:manage.reload,children:["\u7BA1\u7406\u6743\u9650\u6CA1\u8BFB\u51FA\u6765\uFF1A",manage.error]}):null,jsx10(AddChannel,{ctx,api,canManage,onCancel:()=>ctx.app.navigate({page:PAGE4,params:params(ctx)}),onAdded:id=>{markFresh2(ctx.project.id,id);ctx.app.navigate({page:PAGE4,params:params(ctx)})}})]})}const channel=item?list?.find(c=>c.id===item):void 0;if(item&&channel){return jsxs9(Fragment8,{children:[manage.error?jsxs9(ErrorNote3,{retry:manage.reload,children:["\u7BA1\u7406\u6743\u9650\u6CA1\u8BFB\u51FA\u6765\uFF1A",manage.error]}):null,jsx10(ChannelDetail,{ctx,api,channel,canManage,onDeleted:()=>ctx.app.navigate({page:PAGE4,params:params(ctx)})})]})}if(item){return jsx10(Fragment8,{children:!list?forbidden?jsx10(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u901A\u77E5\u6E20\u9053",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>leave(ctx)},children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"}):readFailed?jsxs9(Fragment8,{children:[jsx10(SettingsHead,{title:"\u901A\u77E5\u6E20\u9053",desc:DESC5}),jsxs9(SettingsReadError,{retry:channels.reload,children:["\u901A\u77E5\u914D\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",readFailed]})]}):jsxs9(Fragment8,{children:[jsx10(SettingsHead,{title:"\u901A\u77E5\u6E20\u9053",desc:DESC5}),jsx10(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u901A\u77E5\u914D\u7F6E\u2026"})]}):jsxs9(Fragment8,{children:[jsx10(SettingsHead,{title:"\u901A\u77E5\u6E20\u9053",desc:DESC5}),jsx10("p",{className:"band-sf-muted",children:"\u8FD9\u6761\u6E20\u9053\u4E0D\u5728\u4E86\uFF1B\u53EF\u80FD\u5DF2\u7ECF\u88AB\u5220\u9664\u3002\u56DE\u5230\u5217\u8868\u770B\u73B0\u5728\u7684\u6E20\u9053\u3002"})]})})}const addHref=href(ctx,NOTIFY_NEW);const addAction=canManage!==false?jsx10(AddLink,{ctx,href:addHref,label:ADD}):null;const headAction=canManage!==false&&list===void 0&&!readFailed?jsx10("button",{type:"button",className:"btn primary",disabled:true,children:ADD}):list&&list.length>0?addAction:void 0;return jsxs9(Fragment8,{children:[jsx10(SettingsHead,{title:"\u901A\u77E5\u6E20\u9053",desc:DESC5,action:headAction}),canManage===false?jsx10("p",{className:"band-sf-muted",children:READONLY2}):null,manage.error?jsxs9(ErrorNote3,{retry:manage.reload,children:["\u7BA1\u7406\u6743\u9650\u6CA1\u8BFB\u51FA\u6765\uFF1A",manage.error]}):null,forbidden?jsx10(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u901A\u77E5\u6E20\u9053",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>leave(ctx)},children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"}):readFailed?jsxs9(SettingsReadError,{retry:channels.reload,children:["\u901A\u77E5\u914D\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",readFailed]}):!list?jsx10(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u901A\u77E5\u914D\u7F6E\u2026"}):list.length===0?jsx10(SettingsEmpty,{action:addAction,children:"\u8FD8\u6CA1\u6709\u914D\u7F6E\u6E20\u9053\uFF0C\u914D\u597D\u4E4B\u524D\u4E0D\u63A8\u9001\u3002"}):jsx10(SettingsRows,{label:"\u901A\u77E5\u6E20\u9053",children:list.map(c=>jsx10(SettingsRow,{title:labelOf(c.type),tags:jsx10("span",{className:"tag",title:"\u5B8C\u6574\u5730\u5740\u4FDD\u5B58\u540E\u4E0D\u518D\u663E\u793A",children:"\u5DF2\u914D\u7F6E"}),meta:[c.display,`${c.createdBy} \u4E8E ${shortAt(c.createdAt)} \u914D\u7F6E`],href:href(ctx,c.id),isNew:c.id===fresh,onOpen:()=>ctx.app.navigate({page:PAGE4,params:params(ctx,c.id)})},c.id))})]})}function AddLink({ctx,href:href2,label}){return jsx10("a",{className:"btn primary",href:href2,onClick:e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;e.preventDefault();ctx.app.navigate({page:PAGE4,params:params(ctx,NOTIFY_NEW)})},children:label})}function useCanManage(ctx){const api=ctx.memberSettings;const[can,setCan]=useState8(api?null:true);const[error,setError]=useState8(null);const[round,setRound]=useState8(0);useEffect8(()=>{if(!api)return;let live=true;setError(null);api.get().then(v=>live&&setCan(v.canManage),e=>live&&setError(e instanceof Error?e.message:String(e)));return()=>{live=false}},[api,round]);return{can,error,reload:()=>setRound(n=>n+1)}}function AddChannel({ctx,api,canManage,onAdded,onCancel}){const type=CHANNEL_TYPES[0];const[url,setUrl]=useState8("");const[fieldError2,setFieldError]=useState8("");const[error,setError]=useState8("");const[busy,setBusy]=useState8(false);const value=url.trim();const looksRight=value===""||value.startsWith("https://qyapi.weixin.qq.com/");if(canManage===false){return jsx10(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u6DFB\u52A0\u6E20\u9053",action:{label:"\u56DE\u5230\u901A\u77E5\u6E20\u9053",onClick:onCancel},children:"\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u6539\u3002"})}const submit=async()=>{if(busy)return;if(value===""){setFieldError("\u586B\u4E0A\u4F01\u4E1A\u5FAE\u4FE1\u7FA4\u673A\u5668\u4EBA\u7684\u5730\u5740");return}if(!looksRight){setFieldError(type.bad);return}setBusy(true);setFieldError("");setError("");try{const before=new Set((await api.list()).channels.map(c=>c.id));const next=await api.add(type.type,{url:value});const added=next.channels.find(c=>!before.has(c.id));onAdded(added?.id??"")}catch(e){setError(`\u6CA1\u4FDD\u5B58\uFF1A${failed(e,"\u518D\u70B9\u4E00\u6B21\u300C\u4FDD\u5B58\u300D")}`)}finally{setBusy(false)}};return jsxs9(Fragment8,{children:[jsx10(SettingsHead,{title:ADD,desc:"\u6E20\u9053\u7C7B\u578B\u53EA\u6709\u4F01\u4E1A\u5FAE\u4FE1\u7FA4\u673A\u5668\u4EBA\u8FD9\u4E00\u79CD\u3002\u4FDD\u5B58\u65F6\u4E0D\u4F1A\u53D1\u6D4B\u8BD5\u6D88\u606F\u3002"}),jsxs9(SettingsForm4,{label:ADD,onSubmit:()=>void submit(),children:[jsxs9("p",{className:"band-sf-muted",children:["\u6E20\u9053\u7C7B\u578B\uFF1A",type.label,"\uFF08\u73B0\u5728\u53EA\u6709\u8FD9\u4E00\u79CD\uFF09"]}),jsx10(SettingsField4,{label:`${type.label}\u7684\u5730\u5740`,required:true,hint:type.hint,error:fieldError2||void 0,children:field=>jsx10("input",{...field,className:"field",type:"text",inputMode:"url",value:url,placeholder:type.placeholder,autoComplete:"off",disabled:busy,onChange:e=>{setUrl(e.target.value);setFieldError("");setError("")}})}),jsxs9(SettingsActions5,{children:[jsx10("button",{type:"submit",className:"btn primary",disabled:busy,children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":"\u4FDD\u5B58"}),jsx10("button",{type:"button",className:"btn ghost",disabled:busy,onClick:()=>leaveThen(onCancel),children:"\u53D6\u6D88"}),error?jsx10(SettingsSaveState5,{failed:error}):null]})]})]})}function ChannelDetail({ctx,api,channel,canManage,onDeleted}){const[confirming,setConfirming]=useState8(false);const[busy,setBusy]=useState8(false);const[error,setError]=useState8("");const remove=async()=>{if(busy)return;setBusy(true);setError("");try{await api.remove(channel.id);onDeleted()}catch(e){setError(`\u6CA1\u5220\u6210\uFF1A${failed(e,"\u518D\u70B9\u4E00\u6B21\u300C\u5220\u9664\u300D")}`)}finally{setBusy(false)}};return jsxs9(Fragment8,{children:[jsx10(SettingsHead,{title:labelOf(channel.type),desc:DESC5}),canManage===false?jsx10("p",{className:"band-sf-muted",children:READONLY2}):null,jsx10(SettingsFacts,{items:[{key:"\u7C7B\u578B",value:labelOf(channel.type)},{key:"\u5730\u5740",value:jsx10("code",{children:channel.display})},{key:"\u914D\u7F6E\u4EBA",value:channel.createdBy},{key:"\u914D\u7F6E\u4E8E",value:shortAt(channel.createdAt)}]}),error?jsx10(SettingsSaveState5,{failed:error}):null,canManage!==false?jsx10(SettingsDanger,{children:jsx10(SettingsDangerRow,{title:"\u5220\u9664\u8FD9\u6761\u6E20\u9053",note:"\u4E0D\u518D\u5F80\u8FD9\u4E2A\u7FA4\u63A8\u9001\uFF1B\u5730\u5740\u5F53\u573A\u5220\u6389\uFF0C\u8981\u7528\u5C31\u91CD\u65B0\u6DFB\u52A0\u3002",action:jsx10("button",{type:"button",className:"btn danger",onClick:()=>setConfirming(true),children:"\u5220\u9664"})})}):null,confirming?jsxs9(SettingsDialog,{title:"\u5220\u9664\u8FD9\u6761\u6E20\u9053\uFF1F",onClose:()=>setConfirming(false),actions:jsxs9(Fragment8,{children:[jsx10("button",{type:"button",className:"btn",onClick:()=>setConfirming(false),children:"\u53D6\u6D88"}),jsx10("button",{type:"button",className:"btn primary",disabled:busy,onClick:()=>void remove(),children:busy?"\u6B63\u5728\u5220\u9664\u2026":"\u5220\u9664"})]}),children:[jsxs9("ul",{children:[jsx10("li",{children:"\u4E0D\u518D\u5F80\u8FD9\u4E2A\u7FA4\u63A8\u9001"}),jsx10("li",{children:"\u5730\u5740\u5F53\u573A\u5220\u6389\uFF0C\u8981\u7528\u5C31\u91CD\u65B0\u6DFB\u52A0"})]}),jsx10("p",{children:"\u4E0D\u80FD\u6062\u590D\u3002"})]}):null]})}function shortAt(iso){const d=new Date(iso);const hm=`${String(d.getHours()).padStart(2,"0")}:${String(d.getMinutes()).padStart(2,"0")}`;const now=new Date;const sameDay=d.getFullYear()===now.getFullYear()&&d.getMonth()===now.getMonth()&&d.getDate()===now.getDate();return sameDay?hm:`${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")} ${hm}`}var SELF9="@kanyun-ai-infra/band-settings";var PAGE5=`${SELF9}/platform-tokens`;var LIST_HREF3="/settings/tokens";var NEW_ITEM3="new";var DESC6="\u4F9B\u547D\u4EE4\u884C\u548C\u5DE5\u574A CI \u4EE5\u4F60\u7684\u8EAB\u4EFD\u53D1\u5E03\u5DE5\u574A\u3002";var GRANTS={publish:{label:"\u53D1\u5E03\u5DE5\u574A",scopes:["workshops:publish"],hint:"\u7ED9 band publish \u7528\uFF1A\u628A\u5DE5\u574A\u4ED3\u5E93\u7684\u63D0\u4EA4\u53D1\u6210\u65B0\u7248\u672C\u3002"},preview:{label:"\u9884\u89C8\u5206\u652F",scopes:["workshops:preview"],hint:"\u7ED9 band preview \u7528\uFF1A\u628A\u5DE5\u574A\u4ED3\u5E93\u7684\u5206\u652F\u5EFA\u6210\u9884\u89C8\uFF0C\u4E0D\u53D1\u65B0\u7248\u672C\u3001\u4E0D\u5F71\u54CD\u9879\u76EE\u3002"},both:{label:"\u53D1\u5E03\u4E0E\u9884\u89C8",scopes:["workshops:publish","workshops:preview"],hint:"\u540C\u4E00\u4E2A token \u53EF\u4EE5 band publish\uFF0C\u4E5F\u53EF\u4EE5 band preview\u3002"}};function scopeLabel(scopes){const names=[scopes.includes("workshops:publish")?"\u53D1\u5E03\u5DE5\u574A":"",scopes.includes("workshops:preview")?"\u9884\u89C8\u5206\u652F":""].filter(Boolean);return names.length?names.join("\u3001"):"\u65E0\u64CD\u4F5C\u6743\u9650"}var SCOPES="\u4F60\u5F53\u524D\u62E5\u6709\u7BA1\u7406\u6743\u9650\u7684\u5DE5\u574A\u3002\u53EA\u80FD\u53D1\u5E03\u5DE5\u574A\u6216\u5EFA\u9884\u89C8\uFF08\u7B7E\u53D1\u65F6\u9009\uFF09\uFF1B\u79FB\u51FA\u5DE5\u574A\u6216\u5931\u53BB\u7BA1\u7406\u6743\u9650\u540E\u7ACB\u5373\u5931\u6548\u3002";var platformTokensPage=reactMount7(ctx=>jsx11(PlatformTokens,{ctx}));function PlatformTokens({ctx}){const route=useRoute5(ctx);const api=ctx.app.data.write?.platformTokens;const[data,setData]=useState9(null);const[readError,setReadError]=useState9(null);const[forbidden,setForbidden]=useState9(false);const[reload,setReload]=useState9(0);const[showRevoked,setShowRevoked]=useState9(false);const[notice]=useCrossPageNotice("tokens");const item=route.params.item;useEffect9(()=>{let active=true;setReadError(null);setForbidden(false);if(!api){setReadError("\u5F53\u524D\u73AF\u5883\u672A\u914D\u7F6E\u5E73\u53F0 token \u7BA1\u7406");return}api.list().then(value=>{if(active)setData(value)},e=>{if(!active)return;setForbidden(isForbidden8(e));setReadError(isNetworkLost(e)?`${NETWORK_LOST}\uFF0C\u70B9\u91CD\u8BD5`:"\u670D\u52A1\u6682\u4E0D\u53EF\u7528")});return()=>{active=false}},[api,reload]);const go=next=>ctx.app.navigate({page:PAGE5,...next?{params:{item:next}}:{}});if(!api){return jsxs10(PersonalFrame,{ctx,current:"tokens",children:[jsx11(SettingsHead,{title:"\u5E73\u53F0 token",desc:DESC6}),jsx11(SettingsEmpty,{children:"\u5F53\u524D\u73AF\u5883\u672A\u914D\u7F6E\u5E73\u53F0 token \u7BA1\u7406\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002"})]})}if(forbidden){return jsxs10(PersonalFrame,{ctx,current:"tokens",children:[jsx11(SettingsHead,{title:"\u5E73\u53F0 token",desc:DESC6}),jsx11(SettingsNoAccess,{title:"\u8FD9\u4E2A\u767B\u5F55\u65B9\u5F0F\u4E0D\u80FD\u7BA1\u7406\u5E73\u53F0 token",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u5E73\u53F0 token \u8981\u7528\u516C\u53F8\u7EDF\u4E00\u767B\u5F55\u6253\u5F00 Band \u624D\u80FD\u7B7E\u53D1\u548C\u64A4\u9500\u3002\u8FD9\u4E2A\u767B\u5F55\u65B9\u5F0F\u4E0D\u884C\uFF0C\u6362\u7EDF\u4E00\u767B\u5F55\u540E\u518D\u6765\u3002"})]})}if(readError!==null){return jsxs10(PersonalFrame,{ctx,current:"tokens",children:[jsx11(SettingsHead,{title:"\u5E73\u53F0 token",desc:DESC6}),jsxs10(SettingsReadError,{retry:()=>setReload(n=>n+1),children:["\u5E73\u53F0 token \u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]})]})}if(data===null){return jsxs10(PersonalFrame,{ctx,current:"tokens",children:[jsx11(SettingsHead,{title:"\u5E73\u53F0 token",desc:DESC6,action:jsx11("button",{type:"button",className:"btn primary",disabled:true,children:"\u7B7E\u53D1 token"})}),jsx11(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u5E73\u53F0 token\u2026"})]})}const revoked=data.items.filter(r=>r.revokedAt);const shown=showRevoked?data.items:data.items.filter(r=>!r.revokedAt);if(item===NEW_ITEM3){return jsxs10(PersonalFrame,{ctx,current:"tokens",back:"list",children:[jsx11(Back,{ctx,label:"\u5E73\u53F0 token",page:PAGE5,href:LIST_HREF3}),jsx11(IssueForm,{api,configured:data.configured,onCancel:()=>go(),onClosed:()=>{setReload(n=>n+1);go()}})]})}const current=item?data.items.find(r=>r.id===item):void 0;if(current){return jsxs10(PersonalFrame,{ctx,current:"tokens",back:"list",children:[jsx11(Back,{ctx,label:"\u5E73\u53F0 token",page:PAGE5,href:LIST_HREF3}),jsx11(TokenDetail,{api,token:current,onRevoked:()=>{markNotice("tokens","\u5DF2\u64A4\u9500\uFF0C\u540E\u7EED\u8BF7\u6C42\u7ACB\u5373\u5931\u6548");setReload(n=>n+1);go()}}),jsx11(SettingsNotice,{text:notice})]})}const issue=jsx11("button",{type:"button",className:"btn primary",onClick:()=>go(NEW_ITEM3),children:"\u7B7E\u53D1 token"});return jsxs10(PersonalFrame,{ctx,current:"tokens",children:[jsx11(SettingsHead,{title:"\u5E73\u53F0 token",desc:DESC6,action:shown.length>0?issue:void 0}),revoked.length>0&&jsxs10("label",{className:"choice",children:[jsx11("input",{type:"checkbox",className:"checkbox",checked:showRevoked,onChange:e=>setShowRevoked(e.target.checked)}),"\u663E\u793A\u5DF2\u64A4\u9500\u7684\uFF08",revoked.length,"\uFF09"]}),!data.configured&&jsx11("p",{className:"band-sf-banner",children:"\u5E73\u53F0 token \u5C1A\u672A\u914D\u7F6E\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002\u5DF2\u6709 token \u4ECD\u53EF\u64A4\u9500\u3002"}),shown.length===0?jsx11(SettingsEmpty,{action:issue,children:showRevoked?"\u6CA1\u6709 token\u3002\u9700\u8981\u4ECE\u547D\u4EE4\u884C\u53D1\u5E03\u5DE5\u574A\u65F6\uFF0C\u5728\u8FD9\u91CC\u7B7E\u53D1\u3002":"\u8FD8\u6CA1\u6709\u6709\u6548\u7684 token\u3002\u9700\u8981\u4ECE\u547D\u4EE4\u884C\u53D1\u5E03\u5DE5\u574A\u65F6\uFF0C\u5728\u8FD9\u91CC\u7B7E\u53D1\u3002"}):jsx11(SettingsRows,{label:"\u6211\u7684\u5E73\u53F0 token",children:shown.map(r=>jsx11(SettingsRow,{title:r.name,tags:r.revokedAt?jsx11("span",{className:"chip plain",children:"\u5DF2\u64A4\u9500"}):void 0,meta:[`\u6743\u9650\uFF1A${scopeLabel(r.scopes)}`,`${day(r.expiresAt)} \u5230\u671F`,expired(r)?"\u5DF2\u8FC7\u671F":r.lastUsedAt?`${day(r.lastUsedAt)} \u7528\u8FC7`:"\u8FD8\u6CA1\u7528\u8FC7"],href:`${LIST_HREF3}/${encodeURIComponent(r.id)}`,onOpen:()=>go(r.id)},r.id))}),jsxs10("p",{className:"band-sf-muted",children:["\u4F5C\u7528\u8303\u56F4\uFF1A",SCOPES]}),jsx11(SettingsNotice,{text:notice})]})}function IssueForm({api,configured,onCancel,onClosed}){const[name,setName]=useState9("");const[days,setDays]=useState9("30");const[grant,setGrant]=useState9("publish");const[busy,setBusy]=useState9(false);const[secret,setSecret]=useState9("");const[notice,flash]=useSavedNote();const[error,setError]=useState9("");const alive=useRef5(true);useEffect9(()=>{alive.current=true;return()=>{alive.current=false}},[]);const issue=async()=>{if(busy||secret)return;if(!name.trim()){setError("\u8BF7\u586B\u5199 token \u540D\u79F0");return}setBusy(true);setError("");try{const result=await api.issue({name:name.trim(),scopes:GRANTS[grant].scopes,targetProjectIds:null,expiresAt:new Date(Date.now()+Number(days)*864e5).toISOString()});if(!alive.current)return;setSecret(result.token);setName("")}catch{if(alive.current)setError("\u7B7E\u53D1\u5931\u8D25\uFF0C\u8BF7\u786E\u8BA4\u5217\u8868\u540E\u518D\u8BD5\uFF1B\u82E5\u5DF2\u751F\u6210\u4F46\u672A\u62FF\u5230 token\uFF0C\u8BF7\u5148\u64A4\u9500\u5B83")}finally{if(alive.current)setBusy(false)}};const copy=async()=>{try{await navigator.clipboard.writeText(secret);if(alive.current)flash("\u5DF2\u590D\u5236\uFF0C\u8BF7\u5B58\u5165\u4F60\u7684\u51ED\u636E\u7BA1\u7406\u5668")}catch{if(alive.current)setError("\u590D\u5236\u5931\u8D25\uFF0C\u8BF7\u5141\u8BB8\u526A\u8D34\u677F\u8BBF\u95EE\u540E\u518D\u70B9\u300C\u590D\u5236\u300D")}};if(secret){return jsxs10(Fragment9,{children:[jsx11(SettingsHead,{title:"\u8BF7\u4FDD\u5B58\u65B0 token",desc:"\u53EA\u663E\u793A\u8FD9\u4E00\u6B21\u3002\u5173\u95ED\u540E\u65E0\u6CD5\u627E\u56DE\uFF0C\u8BF7\u590D\u5236\u5230\u4F60\u7684\u51ED\u636E\u7BA1\u7406\u5668\u3002"}),jsxs10("div",{className:"band-sf-reveal",children:[jsx11("input",{className:"field",type:"password",value:secret,readOnly:true,autoComplete:"off",spellCheck:false,"aria-label":"\u65B0 token"}),jsx11("button",{type:"button",className:"btn primary",onClick:()=>void copy(),children:"\u590D\u5236"})]}),jsx11(SettingsActions6,{children:jsx11("button",{type:"button",className:"btn",onClick:onClosed,children:"\u6211\u5DF2\u4FDD\u5B58"})}),jsx11(SettingsNotice,{text:notice}),error?jsx11(SettingsSaveState6,{failed:error}):null]})}return jsxs10(Fragment9,{children:[jsx11(SettingsHead,{title:"\u7B7E\u53D1 token",desc:"\u7B7E\u53D1\u4EE5\u540E\u53EA\u663E\u793A\u4E00\u6B21\u660E\u6587\uFF1B\u9875\u9762\u4E0D\u518D\u6709\u627E\u56DE\u7684\u5165\u53E3\u3002"}),jsxs10(SettingsForm5,{label:"\u7B7E\u53D1 token",onSubmit:()=>void issue(),children:[jsx11(SettingsField5,{label:"\u540D\u79F0",required:true,children:field=>jsx11("input",{...field,className:"field",value:name,maxLength:80,placeholder:"\u4F8B\u5982\uFF1A\u6559\u5177\u5DE5\u574A\u53D1\u5E03 CI",disabled:busy||!configured,"aria-invalid":Boolean(error&&!name.trim()),onChange:e=>setName(e.target.value)})}),jsx11(SettingsField5,{label:"\u6709\u6548\u671F",children:field=>jsxs10("select",{...field,className:"field",value:days,disabled:busy||!configured,onChange:e=>setDays(e.target.value),children:[jsx11("option",{value:"7",children:"7 \u5929"}),jsx11("option",{value:"30",children:"30 \u5929"}),jsx11("option",{value:"90",children:"90 \u5929"})]})}),jsx11(SettingsField5,{label:"\u6743\u9650",hint:GRANTS[grant].hint,children:field=>jsx11("select",{...field,className:"field",value:grant,disabled:busy||!configured,onChange:e=>setGrant(e.target.value),children:Object.keys(GRANTS).map(k=>jsx11("option",{value:k,children:GRANTS[k].label},k))})}),jsxs10(SettingsActions6,{children:[jsx11("button",{type:"submit",className:"btn primary",disabled:busy||!configured,children:busy?"\u6B63\u5728\u5904\u7406\u2026":"\u7B7E\u53D1"}),jsx11("button",{type:"button",className:"btn ghost",onClick:()=>leaveThen(onCancel),children:"\u53D6\u6D88"})]}),error?jsx11(SettingsSaveState6,{failed:error}):null]})]})}function TokenDetail({api,token,onRevoked}){const[confirm,setConfirm]=useState9(false);const[busy,setBusy]=useState9(false);const[error,setError]=useState9("");const revoke=async()=>{if(busy)return;setBusy(true);setError("");try{await api.revoke(token.id);onRevoked()}catch{setError("\u64A4\u9500\u5931\u8D25\uFF0C\u8BF7\u5237\u65B0\u5217\u8868\u540E\u91CD\u8BD5");setBusy(false)}};return jsxs10(Fragment9,{children:[jsx11(SettingsHead,{title:token.name,desc:"\u4E00\u4EFD\u5E73\u53F0 token\u3002\u660E\u6587\u53EA\u5728\u7B7E\u53D1\u90A3\u4E00\u6B21\u663E\u793A\uFF0C\u8FD9\u91CC\u770B\u4E0D\u5230\u3002"}),jsx11(SettingsFacts,{items:[{key:"\u6743\u9650",value:scopeLabel(token.scopes)},{key:"\u72B6\u6001",value:token.revokedAt?"\u5DF2\u64A4\u9500":expired(token)?"\u5DF2\u8FC7\u671F":"\u6709\u6548"},{key:"\u521B\u5EFA",value:when3(token.createdAt)},{key:"\u5230\u671F",value:day(token.expiresAt)},{key:"\u6700\u8FD1\u4F7F\u7528",value:token.lastUsedAt?when3(token.lastUsedAt):"\u8FD8\u6CA1\u7528\u8FC7"}]}),jsx11(Section,{title:"\u4F5C\u7528\u8303\u56F4",children:jsx11("p",{children:SCOPES})}),!token.revokedAt&&jsx11(SettingsDanger,{children:jsx11(SettingsDangerRow,{title:"\u64A4\u9500\u8FD9\u4E2A token",note:"\u7528\u5B83\u7684\u547D\u4EE4\u884C\u548C CI \u7ACB\u523B\u5931\u6548\uFF0C\u4E0D\u80FD\u6062\u590D\u3002\u8981\u7528\u5C31\u91CD\u65B0\u7B7E\u53D1\u3002",action:jsx11("button",{type:"button",className:"btn danger",disabled:busy,onClick:()=>setConfirm(true),children:"\u64A4\u9500"})})}),confirm&&jsxs10("div",{className:"band-sf-confirm",role:"group","aria-label":"\u786E\u8BA4\u64A4\u9500",children:[jsx11("span",{children:"\u64A4\u9500\u540E\u65E0\u6CD5\u6062\u590D\uFF0C\u786E\u5B9A\u64A4\u9500\uFF1F"}),jsx11("button",{type:"button",className:"btn",disabled:busy,onClick:()=>void revoke(),children:busy?"\u6B63\u5728\u64A4\u9500\u2026":"\u786E\u8BA4\u64A4\u9500"}),jsx11("button",{type:"button",className:"btn ghost",disabled:busy,onClick:()=>setConfirm(false),children:"\u53D6\u6D88"})]}),error?jsx11(SettingsSaveState6,{failed:error}):null]})}var pad=n=>String(n).padStart(2,"0");function day(value){const d=new Date(value);return`${pad(d.getMonth()+1)}-${pad(d.getDate())}`}function when3(value){const d=new Date(value);return`${day(value)} ${pad(d.getHours())}:${pad(d.getMinutes())}`}function expired(r){return Date.parse(r.expiresAt)<=Date.now()}var DESC7="\u5220\u9664\u8FD9\u4E2A\u9879\u76EE\uFF0C\u4EE5\u53CA\u5220\u9664\u540E 7 \u5929\u5185\u7684\u6062\u590D\u3002";function ProjectDangerSettings({ctx}){const deleted=ctx.project.deleted;const remove=ctx.project.remove;const[dialog,setDialog]=useState10(false);const[restoring,setRestoring]=useState10(false);const[restoreError,setRestoreError]=useState10("");const restore=canRestoreProject(deleted)?deleted?.restore:void 0;const doRestore=async()=>{if(!restore||restoring)return;setRestoring(true);setRestoreError("");try{await restore()}catch(e){setRestoreError(`\u6CA1\u6062\u590D\u6210\uFF1A${failedBecause8(e,"\u518D\u70B9\u4E00\u6B21\u300C\u6062\u590D\u9879\u76EE\u300D")}`);setRestoring(false)}};return jsxs11(Fragment10,{children:[jsx12(SettingsHead,{title:"\u5220\u9664\u4E0E\u6062\u590D",desc:DESC7}),jsx12(SettingsDanger,{children:deleted?jsx12(SettingsDangerRow,{title:"\u9879\u76EE\u5DF2\u5220\u9664",note:jsxs11(Fragment10,{children:[deletedProjectText(deleted),"\u3002\u6062\u590D\u540E\u5185\u5BB9\u3001\u7248\u672C\u3001\u610F\u89C1\u90FD\u5728\uFF0C\u5220\u9664\u671F\u95F4\u6392\u7740\u7684\u8BF7\u6C42\u63A5\u7740\u6D3E\u3002"]}),action:restore?jsx12("button",{type:"button",className:"btn",disabled:restoring,onClick:()=>void doRestore(),children:restoring?"\u6B63\u5728\u6062\u590D\u2026":"\u6062\u590D\u9879\u76EE"}):null}):remove?jsx12(SettingsDangerRow,{title:"\u5220\u9664\u9879\u76EE",note:"\u5220\u9664\u540E\u53EA\u6709\u521B\u5EFA\u4EBA\u548C Band \u7BA1\u7406\u5458\u80FD\u6253\u5F00\u5B83\uFF0C\u53EA\u80FD\u770B\uFF1B7 \u5929\u5185\u53EF\u4EE5\u6062\u590D\u3002",action:jsx12("button",{type:"button",className:"btn danger",onClick:()=>setDialog(true),children:"\u5220\u9664\u9879\u76EE"})}):jsx12(SettingsDangerRow,{title:"\u5220\u9664\u9879\u76EE",note:"\u53EA\u6709\u9879\u76EE\u7684\u521B\u5EFA\u4EBA\u548C Band \u7BA1\u7406\u5458\u80FD\u5220\u9664\u9879\u76EE\u3002",action:null})}),restoreError&&jsx12(SettingsSaveState7,{failed:restoreError}),dialog&&remove&&jsx12(DeleteProjectDialog,{name:ctx.project.name,remove,onClose:()=>setDialog(false)})]})}function DeleteProjectDialog({name,remove,onClose}){const[busy,setBusy]=useState10(false);const[error,setError]=useState10("");const go=async()=>{if(busy)return;setBusy(true);setError("");try{await remove()}catch(e){setError(`\u6CA1\u5220\u6389\uFF1A${failedBecause8(e,"\u518D\u70B9\u4E00\u6B21\u300C\u5220\u9664\u9879\u76EE\u300D")}`);setBusy(false)}};return jsxs11(SettingsDialog,{title:`\u5220\u9664\u9879\u76EE\u300C${name}\u300D\uFF1F`,onClose:()=>!busy&&onClose(),actions:jsxs11(Fragment10,{children:[jsx12("button",{type:"button",className:"btn ghost",disabled:busy,onClick:onClose,children:"\u53D6\u6D88"}),jsx12("button",{type:"button",className:"btn danger",disabled:busy,onClick:()=>void go(),children:busy?"\u6B63\u5728\u5220\u9664\u2026":"\u5220\u9664\u9879\u76EE"})]}),children:[jsxs11("ul",{children:[jsx12("li",{children:"\u5220\u9664\u540E\u53EA\u6709\u9879\u76EE\u521B\u5EFA\u4EBA\u548C Band \u7BA1\u7406\u5458\u8FD8\u80FD\u6253\u5F00\u5B83\uFF0C\u53EA\u80FD\u770B\u3001\u4E0D\u80FD\u6539\uFF1B\u5176\u4ED6\u6210\u5458\u548C\u53EF\u89C1\u8303\u56F4\u91CC\u7684\u4EBA\u6253\u4E0D\u5F00\u3002"}),jsx12("li",{children:"\u4E0D\u518D\u6D3E\u65B0\u7684\u56DE\u5408\uFF0C\u6392\u7740\u7684\u8BF7\u6C42\u7559\u5728\u961F\u5217\u91CC\uFF0C\u6062\u590D\u540E\u63A5\u7740\u6D3E\u3002"}),jsx12("li",{children:"\u9879\u76EE\u7528\u4E86\u7F51\u7EDC\u51ED\u636E\u7684\u8BDD\uFF0C\u7528\u5230\u5B83\u4EEC\u7684\u56DE\u5408\u4F1A\u505C\u4E0B\uFF0C\u5305\u62EC\u522B\u4EBA\u53D1\u8D77\u7684\uFF0C\u4E4B\u540E\u4E0D\u518D\u628A\u51ED\u636E\u4EA4\u7ED9 agent\uFF1B\u51ED\u636E\u672C\u8EAB\u7559\u7740\uFF0C\u6062\u590D\u540E\u7167\u5E38\u53EF\u7528\u3002"}),jsx12("li",{children:"7 \u5929\u5185\u80FD\u5728\u9879\u76EE\u9875\u70B9\u300C\u6062\u590D\u9879\u76EE\u300D\u6062\u590D\uFF0C\u5185\u5BB9\u3001\u7248\u672C\u3001\u610F\u89C1\u90FD\u8FD8\u5728\uFF1B\u8FC7\u4E86 7 \u5929\u4E0D\u80FD\u518D\u6062\u590D\u3002"})]}),error&&jsx12(SettingsSaveState7,{failed:error})]})}var PICK="project-agent-model-pick";function presetName(id,presets){if(id===CUSTOM_MODEL_PRESET_ID2)return"\u81EA\u5B9A\u4E49";return presets.find(p=>p.id===id)?.label??id}var RAW_NAMES={preset:id=>id,agent:()=>void 0};function AgentModelRows({ctx,agents,policy,teamKey,canManage,provisionConsent,mine,onChanged,names=RAW_NAMES}){const api=ctx.app.data.write?.projectAgentModels;if(policy==="off"||!api)return null;if(agents.length===0)return jsx13(SettingsEmpty,{children:"\u8FD9\u4E2A\u9879\u76EE\u7684\u5DE5\u574A\u7248\u672C\u91CC\u6CA1\u6709 Agent\u3002"});const missing=agents.filter(a=>a.selection===null).length;return jsxs12(Fragment11,{children:[policy==="require"&&missing>0?jsxs12("p",{className:"band-sf-banner is-warn",children:[jsx13("span",{className:"glyph needs","aria-hidden":"true"}),jsx13("span",{children:provisionConsent?.required?MODEL_PROJECT_CONSENT_PENDING:jsxs12(Fragment11,{children:["\u8FD9\u4E2A\u5DE5\u574A\u8981\u6C42\u6BCF\u4E2A agent \u7528\u6210\u5458\u81EA\u5DF1\u7684\u6A21\u578B\u914D\u7F6E\uFF0C\u73B0\u5728\u6709 ",missing," \u4E2A\u8FD8\u6CA1\u9009\u3002\u6CA1\u9009\u7684 agent \u4E0B\u4E00\u6B21\u6D3E\u53D1\u4F1A\u81EA\u52A8\u7ED1\u5EFA\u9879\u76EE\u4EBA\u7684\u9ED8\u8BA4\u914D\u7F6E\uFF1B\u521B\u5EFA\u4EBA\u6CA1\u6709\u9ED8\u8BA4\u914D\u7F6E\u6216\u5DF2\u4E0D\u5728\u9879\u76EE\u91CC\u65F6\uFF0C\u5B83\u4EEC\u7684\u56DE\u5408\u4E0D\u4F1A\u6D3E\u53D1\u3002"]})})]}):null,jsx13(SettingsRows,{label:"\u6BCF\u4E2A Agent \u7528\u54EA\u4EFD\u6A21\u578B\u914D\u7F6E",children:agents.map(a=>jsx13(AgentModelRow,{ctx,agent:a,policy,teamKey,canManage,consentRequired:provisionConsent?.required===true,mine,onChanged,names},a.agentId))})]})}function AgentModelRow({ctx,agent,policy,teamKey,canManage,consentRequired,mine,onChanged,names}){const api=ctx.app.data.write?.projectAgentModels;const[busy,setBusy]=useState11(false);const[error,setError]=useState11(null);const[pending,setPending]=useState11(null);const[clearing,setClearing]=useState11(false);const sel=agent.selection;const failure=agent.lastModelFailure??null;const label=agent.label??names.agent(agent.agentId)??agent.agentId;const iMayChange=canManage||sel===null||sel.mine;const run=async fn=>{if(busy)return;setBusy(true);setError(null);try{await fn();onChanged()}catch(e){setError(e instanceof Error?e.message:String(e))}finally{setBusy(false)}};const confirmPick=credentialId=>run(async()=>{await api?.select(ctx.project.id,agent.agentId,{credentialId,acknowledged:true});setPending(null)});return jsxs12("li",{className:"band-sf-row",children:[jsx13("div",{className:"band-sf-row-t",children:jsx13("b",{children:label})}),jsx13("div",{className:"band-sf-row-m",children:jsx13("span",{children:selectionText(sel,policy,teamKey,mine.length>0,consentRequired,names.preset)})}),iMayChange?jsxs12(SettingsActions7,{children:[jsxs12("label",{className:"sr-only",htmlFor:`${PICK}-${agent.agentId}`,children:["\u6362 ",label," \u7684\u6A21\u578B\u914D\u7F6E"]}),jsxs12("select",{id:`${PICK}-${agent.agentId}`,className:"field",value:sel?sel.credentialId:"",disabled:busy||mine.length===0,onChange:e=>{const v=e.target.value;if(v===""){setPending(null);if(!sel)return;if(sel.mine)void run(()=>api?.clear(ctx.project.id,agent.agentId));else setClearing(true);return}if(v===sel?.credentialId)return;setPending(v)},children:[policy==="require"||!teamKey?jsx13("option",{value:"",disabled:true,children:"\u8FD8\u6CA1\u9009"}):jsx13("option",{value:"",children:"\u5DE5\u574A\u7684\u56E2\u961F key"}),mine.map(c=>jsxs12("option",{value:c.id,children:["\u6211\u7684 \xB7 ",c.name,c.last4?` \xB7\xB7\xB7\xB7${c.last4}`:` \xB7 ${names.preset(c.preset)}`]},c.id)),sel&&!sel.mine?jsxs12("option",{value:sel.credentialId,disabled:true,children:[sel.ownerKind==="project"?"\u9879\u76EE\u4E0A\u914D\u7684":sel.ownerName," \xB7 ",sel.name,sel.last4?` \xB7\xB7\xB7\xB7${sel.last4}`:` \xB7 ${names.preset(sel.preset)}`,"\uFF08\u53EA\u8BFB\uFF0C\u4E0D\u80FD\u5728\u8FD9\u91CC\u6539\u9009\uFF09"]}):null]}),pending?jsxs12("div",{className:"pop",role:"alertdialog","aria-label":"\u786E\u8BA4\u9009\u7528\u8FD9\u4EFD\u6A21\u578B\u914D\u7F6E",children:[jsx13("p",{children:"\u8FD9\u4E2A\u9879\u76EE\u91CC\u6240\u6709\u4EBA\u53D1\u8D77\u7684\u56DE\u5408\u90FD\u4F1A\u7528\u4F60\u7684\u6A21\u578B\u914D\u7F6E\uFF0C\u82B1\u8D39\u8BB0\u5728\u4F60\u7684 key \u4E0A\u3002"}),jsxs12(SettingsActions7,{children:[jsx13("button",{type:"button",className:"btn ghost",onClick:()=>setPending(null),children:"\u53D6\u6D88"}),jsx13("button",{type:"button",className:"btn primary",disabled:busy,onClick:()=>void confirmPick(pending),children:"\u786E\u8BA4\u9009\u7528"})]})]}):null,sel?jsx13("button",{type:"button",className:"btn ghost",disabled:busy,onClick:()=>sel.mine?void run(()=>api?.clear(ctx.project.id,agent.agentId)):setClearing(true),children:"\u6E05\u6389\u8FD9\u4EFD\u9009\u7528"}):null]}):null,clearing&&sel?jsx13(SettingsDialog,{title:clearTitle(sel),onClose:()=>setClearing(false),actions:jsxs12(Fragment11,{children:[jsx13("button",{type:"button",className:"btn",onClick:()=>setClearing(false),children:"\u53D6\u6D88"}),jsx13("button",{type:"button",className:"btn primary",disabled:busy,onClick:()=>{setClearing(false);void run(()=>api?.clear(ctx.project.id,agent.agentId))},children:"\u6E05\u9664\u9009\u7528"})]}),children:jsx13("p",{children:clearBody(sel,label,policy,teamKey)})}):null,failure?jsxs12("p",{className:"band-sf-err band-sf-fail","data-reason":failure.reason,children:[jsx13("span",{className:"glyph failed","aria-hidden":"true"}),jsx13("span",{children:failure.message})]}):null,error?jsx13(SettingsSaveState8,{failed:error}):null]})}function selectionText(sel,policy="require",teamKey=false,hasMine=true,consentRequired=false,preset=id=>id){if(!sel){if(consentRequired)return`${MODEL_PROJECT_CONSENT_PENDING} \u4E5F\u53EF\u4EE5\u5728\u8FD9\u4E00\u884C\u660E\u786E\u9009\u7528\u4F60\u81EA\u5DF1\u7684\u6A21\u578B\u914D\u7F6E\u3002`;if(policy==="require")return hasMine?"\u8FD8\u6CA1\u6709\u9009\u7528\uFF1A\u5728\u8FD9\u4E00\u884C\u9009\u4E00\u4EFD\u4F60\u7684\u6A21\u578B\u914D\u7F6E\u3002\u4E0D\u9009\u7684\u8BDD\uFF0C\u4E0B\u4E00\u6B21\u6D3E\u53D1\u4F1A\u5148\u81EA\u52A8\u7ED1\u5EFA\u9879\u76EE\u4EBA\u7684\u9ED8\u8BA4\u914D\u7F6E\uFF1B\u521B\u5EFA\u4EBA\u4E5F\u6CA1\u6709\u9ED8\u8BA4\u914D\u7F6E\u6216\u5DF2\u4E0D\u5728\u9879\u76EE\u91CC\u65F6\uFF0C\u8FD9\u4E2A Agent \u7684\u56DE\u5408\u4E0D\u4F1A\u6D3E\u53D1\u3002":"\u8FD8\u6CA1\u6709\u9009\u7528\uFF1A\u4F60\u540D\u4E0B\u8FD8\u6CA1\u6709\u6A21\u578B\u914D\u7F6E\uFF0C\u5230\u4E2A\u4EBA\u8BBE\u7F6E\u6DFB\u52A0\u4E00\u4EFD\uFF0C\u56DE\u6765\u5C31\u80FD\u5728\u8FD9\u4E00\u884C\u9009\u3002";if(teamKey)return"\u8FD8\u6CA1\u6709\u9009\u7528\uFF1A\u56DE\u5408\u7528\u8FD9\u4E2A\u5DE5\u574A\u7684\u56E2\u961F key\u3002\u9009\u4E00\u4EFD\u81EA\u5DF1\u7684\uFF0C\u5C31\u6362\u6210\u82B1\u4F60\u7684 key\u3002";return"\u8FD8\u6CA1\u6709\u9009\u7528\uFF0C\u8FD9\u4E2A\u5DE5\u574A\u4E5F\u6CA1\u6709\u56E2\u961F key\uFF1A\u56DE\u5408\u4E0D\u4F1A\u6D3E\u53D1\uFF0C\u5148\u9009\u4E00\u4EFD\u6A21\u578B\u914D\u7F6E\u3002"}const who=sel.mine?"\u4F60":sel.ownerName;const tail=sel.last4?` \xB7 \u2026${sel.last4}`:"";const cost=sel.mine?"\u82B1\u8D39\u8BB0\u5728\u4F60\u7684 key \u4E0A":`\u82B1\u8D39\u8BB0\u5728 ${sel.ownerName} \u7684 key \u4E0A`;return`${who}\u540D\u4E0B\u7684\u300C${sel.name}\u300D\xB7 ${preset(sel.preset)}${tail}\uFF0C${cost}`}function clearTitle(sel){return sel.ownerKind==="user"?`\u6E05\u9664\u300C${sel.ownerName}\u300D\u7684\u9009\u7528\uFF1F`:`\u6E05\u9664\u300C${sel.name}\u300D\u7684\u9009\u7528\uFF1F`}function clearBody(sel,agent,policy,teamKey){const owner=sel.ownerKind==="user"?sel.ownerName:null;const whose=owner===null?"\u9879\u76EE\u4E0A\u914D\u7684":`${owner}\u7684`;const back=policy==="require"?"\u6E05\u9664\u540E\u5B83\u56DE\u5230\u300C\u8FD8\u6CA1\u9009\u300D\uFF0C\u4E0B\u4E00\u6B21\u6D3E\u53D1\u81EA\u52A8\u7ED1\u5EFA\u9879\u76EE\u4EBA\u7684\u9ED8\u8BA4\u4E2A\u4EBA\u914D\u7F6E\uFF0C\u6CA1\u6709\u914D\u7F6E\u5219\u4E0D\u6D3E\u53D1":teamKey?"\u6E05\u9664\u540E\u5B83\u56DE\u5230\u5DE5\u574A\u7684\u56E2\u961F key":"\u6E05\u9664\u540E\u5B83\u56DE\u5230\u300C\u8FD8\u6CA1\u9009\u300D\uFF0C\u8FD9\u4E2A\u5DE5\u574A\u4E5F\u6CA1\u6709\u56E2\u961F key\uFF1A\u8FD9\u4E2A Agent \u7684\u56DE\u5408\u4E0D\u4F1A\u6D3E\u53D1";const intact=owner===null?"\u9879\u76EE\u4E0A\u914D\u7684\u8FD9\u4EFD":`${owner}\u7684\u914D\u7F6E`;return`${agent} \u73B0\u5728\u7528${whose}\u300C${sel.name}\u300D\u3002${back}\uFF1B${intact}\u4E0D\u53D7\u5F71\u54CD\u3002`}function useAgentModels(ctx){const api=ctx.app.data.write?.projectAgentModels;return useCtxData2(ctx,async()=>api?api.list(ctx.project.id):null,[ctx.project.id,api],["turn.*","change.*"])}function mineHint(mine){return mine.length===0?"\u4F60\u540D\u4E0B\u8FD8\u6CA1\u6709\u6A21\u578B\u914D\u7F6E\uFF1A\u5230\u4E2A\u4EBA\u8BBE\u7F6E\u6DFB\u52A0\u4E00\u4EFD\uFF0C\u56DE\u6765\u5C31\u80FD\u9009\u3002":"\u9009\u4E86\u5C31\u9489\u4F4F\uFF0C\u4E0D\u8DDF\u7740\u4F60\u7684\u9ED8\u8BA4\u914D\u7F6E\u53D8\u3002\u8FD9\u4E2A\u9879\u76EE\u91CC\u6240\u6709\u4EBA\u53D1\u8D77\u7684\u56DE\u5408\u90FD\u4F1A\u82B1\u5B83\u3002"}var DESC8="\u8FD9\u4E2A\u9879\u76EE\u7684\u56DE\u5408\u7528\u54EA\u628A key\u3001\u82B1\u8D39\u8BB0\u5728\u8C01\u3002\u914D\u7F6E\u672C\u8EAB\u5728\u521B\u5EFA\u4EBA\u7684\u4E2A\u4EBA\u8BBE\u7F6E\u91CC\u6539\u3002";function ProjectModelsSection({ctx}){const members=useMembers(ctx);const net=ctx.app.data.write?.netCredentials;const mine=ctx.app.data.write?.modelCredentials;const loaded=useCtxData3(ctx,async()=>{try{const[turn2,own,netList]=await Promise.all([ctx.turns.state(),mine?mine.list():Promise.resolve(null),net?net.listProject(ctx.project.id):Promise.resolve(null)]);const used=[];for(const c of own?.credentials??[]){for(const u of c.usedBy){if(u.projectId!==ctx.project.id)continue;used.push({agent:u.agentId,config:c.name})}}const myConfigs2=(own?.credentials??[]).map(c=>({id:c.id,name:c.name,preset:c.preset,last4:c.last4}));const presets2=(own?.presets??[]).map(p=>({id:p.id,label:p.label}));return{kind:"ok",turn:turn2,used,net:netList,myConfigs:myConfigs2,presets:presets2}}catch(e){if(isForbidden9(e))return{kind:"forbidden"};throw e}},[ctx.project.id,net,mine],["turn.*","change.*"]);const agentModels=useAgentModels(ctx);const models=agentModels.data??null;const[confirming,setConfirming]=useState12(false);const[consentResult,setConsentResult]=useState12(null);const consent=models?.provisionConsent;const confirm=ctx.app.data.write?.projectAgentModels?.confirmProvisionUse;const myConfigs=loaded.data?.kind==="ok"?loaded.data.myConfigs:[];const presets=loaded.data?.kind==="ok"?loaded.data.presets:[];const names={preset:id=>presetName(id,presets),agent:id=>members.find(m=>m.actor.id===id)?.displayName};const error=loaded.error;const data=loaded.data;const read=data?.kind==="ok"?data:null;const turn=read?.turn;const source=turn?.current?turn.current.modelSource:turn?.last?.modelSource;const running=turn?.current??null;const selections=read?.used??[];if(data?.kind==="forbidden"){return jsx14(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u6A21\u578B\u4E0E\u51ED\u636E",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-project/project",params:{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{}}})},children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"})}if(error&&!data){return jsxs13(Fragment12,{children:[jsx14(SettingsHead,{title:"\u6A21\u578B\u4E0E\u51ED\u636E",desc:DESC8}),jsxs13(SettingsReadError,{retry:loaded.reload,children:["\u6A21\u578B\u4E0E\u51ED\u636E\u6CA1\u8BFB\u51FA\u6765\uFF1A",failedBecause9(error,"\u70B9\u91CD\u8BD5")]})]})}return jsxs13(Fragment12,{children:[jsx14(SettingsHead,{title:"\u6A21\u578B\u4E0E\u51ED\u636E",desc:DESC8}),consent?.required&&jsxs13(Section,{title:"ModelGate \u4E2A\u4EBA\u989D\u5EA6",children:[jsx14("p",{children:"\u8FD9\u4E2A\u9879\u76EE\u91CC\u6240\u6709\u4EBA\u53D1\u8D77\u7684\u56DE\u5408\u90FD\u82B1\u9879\u76EE\u521B\u5EFA\u4EBA\u7684 ModelGate \u4E2A\u4EBA\u989D\u5EA6\u3002"}),consent.canConfirm&&confirm?jsx14("button",{type:"button",className:"btn primary",disabled:confirming,onClick:()=>{setConfirming(true);setConsentResult(null);confirm(ctx.project.id).then(()=>{setConsentResult("\u5DF2\u786E\u8BA4\uFF0C\u8BF7\u9879\u76EE\u6210\u5458\u91CD\u65B0\u53D1\u9001\u56DE\u5408\u3002");agentModels.reload()}).catch(e=>setConsentResult(failedBecause9(e,"\u786E\u8BA4\u6CA1\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5"))).finally(()=>setConfirming(false))},children:"\u786E\u8BA4\u8FD9\u4E2A\u9879\u76EE\u4F7F\u7528\u6211\u7684\u4E2A\u4EBA\u989D\u5EA6"}):jsx14("p",{children:"\u9879\u76EE\u521B\u5EFA\u4EBA\u5C1A\u672A\u786E\u8BA4\uFF0C\u786E\u8BA4\u540E\u8BF7\u91CD\u65B0\u53D1\u9001\u56DE\u5408\u3002"})]}),consentResult&&jsx14("output",{children:consentResult}),!read?jsx14(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u6A21\u578B\u4E0E\u51ED\u636E\u2026"}):jsxs13(Fragment12,{children:[jsxs13(Section,{title:"\u56DE\u5408\u7528\u7684 key",children:[jsx14(SettingsFacts,{items:[{key:"\u56DE\u5408",value:turnText(running,turn?.last??null,members)},{key:"\u7528\u7684 key",value:source?sourceText(source):noSourceText(turn)}]}),selections.length>0&&models===null?jsx14(SettingsRows,{label:"\u4F60\u540D\u4E0B\u7684\u914D\u7F6E\u5728\u8FD9\u91CC\u88AB\u54EA\u4E9B Agent \u7528",children:selections.map(s=>jsx14(SettingsRow,{title:memberName(members,s.agent),meta:[`\u4F60\u540D\u4E0B\u7684\u914D\u7F6E\u300C${s.config}\u300D`,"\u82B1\u8D39\u8BB0\u5728\u4F60\u7684 key \u4E0A"]},`${s.agent}:${s.config}`))}):null,jsx14("p",{className:"band-sf-muted",children:spendNote(models)}),models&&models.policy!=="off"?jsxs13(Fragment12,{children:[jsx14(AgentModelRows,{ctx,agents:models.agents,policy:models.policy,teamKey:models.teamKey,canManage:models.canManage,provisionConsent:models.provisionConsent,mine:myConfigs,onChanged:agentModels.reload,names}),jsx14("p",{className:"band-sf-muted",children:mineHint(myConfigs)})]}):null]}),jsx14(Section,{title:"\u7F51\u7EDC\u51ED\u636E",desc:"\u9879\u76EE\u91CC Agent \u80FD\u7528\u7684\u5916\u90E8\u8C03\u7528\u51ED\u636E\uFF0C\u521B\u5EFA\u4EBA\u540D\u4E0B\u7684\u81EA\u52A8\u5E26\u5165\uFF1B\u53EA\u6709\u540D\u5B57\u3001\u57DF\u540D\u4E0E\u6765\u6E90\uFF0C\u770B\u4E0D\u5230\u503C\u3002",children:net&&read.net?read.net.effective.length===0?jsx14(SettingsEmpty,{children:"\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u6709\u751F\u6548\u7684\u7F51\u7EDC\u51ED\u636E\u3002\u521B\u5EFA\u4EBA\u914D\u8FC7\u7684\u4F1A\u81EA\u52A8\u5E26\u5165\u3002"}):jsx14(SettingsRows,{label:"\u7F51\u7EDC\u51ED\u636E",children:read.net.effective.map(c=>jsx14(SettingsRow,{title:c.name,mono:true,meta:[c.domains.join("\u3001"),c.source==="project"?"\u9879\u76EE\u4E0A\u914D\u7684":"\u521B\u5EFA\u4EBA\u5E26\u5165\u7684"]},c.credentialId))}):jsx14("p",{className:"band-sf-muted",children:"\u8FD9\u4E2A\u90E8\u7F72\u6CA1\u6709\u5F00\u901A\u7F51\u7EDC\u51ED\u636E\u3002"})}),jsxs13("p",{className:"band-sf-muted",children:["\u4E2A\u4EBA\u51ED\u636E\u5728",jsx14("a",{href:"/settings/models",onClick:e=>{if(e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;e.preventDefault();ctx.app.navigate({page:"@kanyun-ai-infra/band-settings/models"})},children:"\u4E2A\u4EBA\u8BBE\u7F6E"}),"\u91CC\u6539\u3002"]})]})]})}function turnText(current,last,members){if(current)return`\u6B63\u5728\u8DD1\u7B2C ${current.number} \u56DE\u5408\uFF08${memberName(members,current.agent)}\uFF09`;if(last)return`\u4E0A\u4E00\u4E2A\u56DE\u5408\u662F\u7B2C ${last.number} \u56DE\u5408`;return"\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u8DD1\u8FC7\u56DE\u5408"}function spendNote(models){if(models?.policy==="off")return models.teamKey?"\u8FD9\u4E2A\u5DE5\u574A\u7528\u56E2\u961F key\uFF0C\u56DE\u5408\u4E0D\u82B1\u6210\u5458\u4E2A\u4EBA\u540D\u4E0B\u7684 key\u3002":"\u8FD9\u4E2A\u5DE5\u574A\u6CA1\u6709\u56E2\u961F key\uFF1A\u56DE\u5408\u4E0D\u4F1A\u6D3E\u53D1\uFF0C\u8981\u5DE5\u574A\u7BA1\u7406\u5458\u5148\u914D\u597D\u56E2\u961F key\u3002";if(models?.policy==="require")return"\u8FD9\u4E2A\u5DE5\u574A\u4E0D\u7528\u56E2\u961F key\uFF0C\u6BCF\u4E2A Agent \u90FD\u5F97\u6709\u4E00\u4EFD\u9009\u7528\u7684\u6A21\u578B\u914D\u7F6E\uFF1B\u6362\u6210\u4F60\u540D\u4E0B\u7684\u4E4B\u540E\uFF0C\u8FD9\u4E2A Agent \u7684\u56DE\u5408\u5C31\u82B1\u4F60\u9009\u7684\u8FD9\u4EFD\u3002";if(models)return models.teamKey?"\u7F3A\u7701\u7528\u5EFA\u9879\u76EE\u65F6\u7ED1\u5B9A\u7684\u90A3\u4EFD\uFF08\u521B\u5EFA\u4EBA\u540D\u4E0B\u7684\uFF09\uFF0C\u6CA1\u7ED1\u5C31\u7528\u56E2\u961F key\uFF1B\u6362\u6210\u4F60\u540D\u4E0B\u7684\u4E4B\u540E\uFF0C\u8FD9\u4E2A Agent \u7684\u56DE\u5408\u5C31\u82B1\u4F60\u9009\u7684\u8FD9\u4EFD\u3002":"\u7F3A\u7701\u7528\u5EFA\u9879\u76EE\u65F6\u7ED1\u5B9A\u7684\u90A3\u4EFD\uFF08\u521B\u5EFA\u4EBA\u540D\u4E0B\u7684\uFF09\uFF1B\u65E2\u6CA1\u7ED1\u3001\u5DE5\u574A\u4E5F\u6CA1\u6709\u56E2\u961F key \u7684 Agent \u4E0D\u4F1A\u6D3E\u53D1\uFF0C\u6362\u6210\u4F60\u540D\u4E0B\u7684\u4E4B\u540E\uFF0C\u8FD9\u4E2A Agent \u7684\u56DE\u5408\u5C31\u82B1\u4F60\u9009\u7684\u8FD9\u4EFD\u3002";return"\u5EFA\u9879\u76EE\u65F6\u628A\u521B\u5EFA\u4EBA\u540D\u4E0B\u7684\u6A21\u578B\u914D\u7F6E\u7ED1\u7ED9\u6BCF\u4E2A Agent\uFF0C\u9879\u76EE\u91CC\u6240\u6709\u4EBA\u53D1\u8D77\u7684\u56DE\u5408\u90FD\u82B1\u90A3\u628A key\u3002"}function noSourceText(turn){if(turn?.current)return"\u8FD9\u4E00\u56DE\u5408\u8FD8\u6CA1\u8BB0\u4E0B\u7528\u7684\u662F\u8C01\u7684 key\u3002";if(turn?.last)return"\u4E0A\u4E00\u4E2A\u56DE\u5408\u6CA1\u6709\u8BB0\u4E0B\u7528\u7684\u662F\u8C01\u7684 key\u3002";return"\u7B2C\u4E00\u6B21\u6D3E\u53D1\u4EE5\u540E\uFF0C\u8FD9\u91CC\u4F1A\u5199\u7528\u7684\u662F\u8C01\u7684 key\u3002"}function sourceText(s){if(s.kind==="platform")return"\u5E73\u53F0\u63D0\u4F9B\u7684 key";if(s.kind==="project")return`\u9879\u76EE\u4E0A\u914D\u7684\u914D\u7F6E${s.name?`\u300C${s.name}\u300D`:""}`;const name=s.name?`\u300C${s.name}\u300D`:"";if(s.mine)return`\u4F60\u540D\u4E0B\u7684\u6A21\u578B\u914D\u7F6E${name}${s.deleted?"\uFF08\u5DF2\u5220\u9664\uFF09":""}`;const owner=s.ownerDisplayName?` \xB7 ${s.ownerDisplayName}\u7684 key`:"";return`\u6210\u5458\u81EA\u5DF1\u7684\u6A21\u578B\u914D\u7F6E${name}${owner}${s.deleted?"\uFF08\u5DF2\u5220\u9664\uFF09":""}`}var DESC9="\u51B3\u5B9A\u300C\u5F85\u6211\u5904\u7406\u300D\u548C\u4FA7\u680F\u6570\u5B57\u91CC\u7B97\u54EA\u4E9B\u4E8B\u3002";var remindersPage=reactMount8(ctx=>jsx15(Reminders,{ctx}));function Reminders({ctx}){const api=ctx.app.data.write?.userSettings;const[saved,setSaved]=useState13(null);const[pending,setPending]=useState13(null);const[readError,setReadError]=useState13(null);const[forbidden,setForbidden]=useState13(false);const[writeError,setWriteError]=useState13(null);const[justSaved,setJustSaved]=useState13(false);const[reload,setReload]=useState13(0);useEffect10(()=>{let live=true;setReadError(null);setForbidden(false);if(!api){setReadError("\u5F53\u524D\u73AF\u5883\u6CA1\u6709\u4E2A\u4EBA\u8BBE\u7F6E\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458");return}api.get().then(s=>{if(live)setSaved(s.mentionsOnly)},e=>{if(!live)return;setForbidden(isForbidden10(e));setReadError(failedBecause10(e,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,reload]);const toggle=async next=>{if(!api)return;setPending(next);setWriteError(null);setJustSaved(false);try{const s=await api.set({mentionsOnly:next});setSaved(s.mentionsOnly);setJustSaved(true)}catch(e){setWriteError(failedBecause10(e,"\u518D\u62E8\u4E00\u6B21\u5F00\u5173"))}finally{setPending(null)}};const shown=pending??saved??false;return jsxs14(PersonalFrame,{ctx,current:"reminders",children:[jsx15(SettingsHead,{title:"\u63D0\u9192",desc:DESC9}),forbidden?jsx15(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u63D0\u9192\u8BBE\u7F6E",action:{label:"\u56DE\u5230\u9996\u9875",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-home/home"})},children:"\u63D0\u9192\u8BBE\u7F6E\u6309\u767B\u5F55\u4EBA\u5F52\u5C5E\uFF0C\u53EA\u6709\u672C\u4EBA\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u3002"}):readError!==null?jsxs14(SettingsReadError,{retry:()=>setReload(n=>n+1),children:["\u63D0\u9192\u8BBE\u7F6E\u6CA1\u8BFB\u51FA\u6765\uFF1A",readError]}):saved===null?jsx15(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u8BBE\u7F6E\u2026"}):jsxs14(SettingsSingle2,{label:"\u53EA\u5728\u88AB @ \u65F6\u63D0\u9192",children:[jsxs14("div",{className:"band-sf-sw",children:[jsxs14("div",{children:[jsxs14("label",{className:"choice",htmlFor:"mentions-only",children:[jsx15("input",{id:"mentions-only",type:"checkbox",role:"switch",className:"switch",checked:shown,"aria-checked":shown,disabled:pending!==null,"aria-describedby":"mentions-only-hint",onChange:e=>void toggle(e.target.checked)}),jsx15("b",{children:"\u53EA\u5728\u88AB @ \u65F6\u63D0\u9192"})]}),jsx15("span",{className:"field-note",id:"mentions-only-hint",children:"\u5F00\u4E86\u4EE5\u540E\uFF0C\u53EA\u6709\u522B\u4EBA @ \u4F60\u65F6\u624D\u63D0\u9192\uFF08\u5FBD\u6807\u548C\u901A\u77E5\uFF09\uFF0C\u5176\u4F59\u7684\u4E8B\u4ECD\u5728\u300C\u5F85\u6211\u5904\u7406\u300D\u7684\u5217\u8868\u91CC\u3002"})]}),justSaved&&pending===null&&writeError===null&&jsx15(SettingsSaved,{})]}),writeError!==null&&jsx15(SettingsSaveState9,{failed:`\u6CA1\u4FDD\u5B58\u6210\u529F\uFF1A${writeError}\u3002\u5F00\u5173\u5DF2\u56DE\u5230\u539F\u503C\u3002`})]})]})}var teamConnectionsPage=reactMount9(ctx=>jsx16(WorkshopConnections,{ctx}));function WorkshopConnections({ctx}){const route=useRoute6(ctx);const id=route.params.workshop??"";const{data:workshop}=useAppData(ctx,data=>data.workshop(id),[id]);return jsx16(TeamConnections,{ctx,owner:{scope:"workshop",workshopId:id},workshopName:workshop?.name??id},id)}var deploymentConnectionsPage=reactMount9(ctx=>jsx16(TeamConnections,{ctx,owner:{scope:"deployment"}}));var deploymentConnectionsMenu=reactMount9((ctx,{owner})=>jsx16(DeploymentMenu,{ctx,close:owner.close}));function DeploymentMenu({ctx,close}){const api=ctx.app.data.write?.teamConnections;const[allowed,setAllowed]=useState14(false);const[error,setError]=useState14(null);const[revision,setRevision]=useState14(0);useEffect11(()=>{let live=true;api?.isDeploymentAdmin().then(value=>{if(live){setAllowed(value);setError(null)}},reason=>{if(live)setError(failedBecause11(reason,"\u70B9\u91CD\u8BD5"))});return()=>{live=false}},[api,revision]);if(error!==null)return jsxs15(ErrorNote4,{retry:()=>setRevision(n=>n+1),children:["\u90E8\u7F72\u7BA1\u7406\u6743\u9650\u6CA1\u8BFB\u51FA\u6765\uFF1A",error]});return allowed?jsx16("button",{className:"btn ghost",type:"button",onClick:()=>{close();ctx.app.navigate({page:DEPLOYMENT_CONNECTIONS_PAGE})},children:"\u90E8\u7F72\u7BA1\u7406"}):null}function TeamConnections({ctx,owner,workshopName}){const api=ctx.app.data.write?.teamConnections;const[data,setData]=useState14(null);const[error,setError]=useState14(null);const[forbidden,setForbidden]=useState14(false);const[optionsError,setOptionsError]=useState14(null);const[projectError,setProjectError]=useState14(false);const[revision,setRevision]=useState14(0);const[project,setProject]=useState14("");const[custom,setCustom]=useState14("");const scope=owner.scope;const workshopId=owner.scope==="workshop"?owner.workshopId:"";useEffect11(()=>{let live=true;setError(null);setForbidden(false);setData(null);setOptionsError(null);if(!api){setError("\u5F53\u524D\u73AF\u5883\u672A\u914D\u7F6E\u56E2\u961F\u8FDE\u63A5\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458");return}const current=scope==="workshop"?{scope,workshopId}:{scope};Promise.allSettled([api.options(current),api.list(current)]).then(([optionResult,rowResult])=>{if(!live)return;if(rowResult.status==="rejected"){if(isForbidden11(rowResult.reason))setForbidden(true);else setError(failedBecause11(rowResult.reason,"\u70B9\u91CD\u8BD5"));return}const rows=rowResult.value;const options=optionResult.status==="fulfilled"?optionResult.value:{connectors:[],hubProjects:[],allowCustomProject:false};if(optionResult.status==="rejected")setOptionsError(failedBecause11(optionResult.reason,"\u70B9\u91CD\u8BD5"));setData({options,rows});setProject(value=>value||options.hubProjects[0]?.id||rows[0]?.hubProjectId||"")});return()=>{live=false}},[api,scope,workshopId,revision]);const title=scope==="workshop"?"\u56E2\u961F\u8FDE\u63A5":"\u90E8\u7F72\u7EA7\u8FDE\u63A5";const projects=[...data?.options.hubProjects??[]];for(const row of data?.rows??[])if(!projects.some(p=>p.id===row.hubProjectId))projects.push({id:row.hubProjectId,label:`${row.hubProjectId}\uFF08\u5DF2\u6709\u8FDE\u63A5\uFF09`});const selected=project==="custom"?custom:project;const[firstProject]=projects;const onlyProject=projects.length===1&&!data?.options.allowCustomProject?firstProject:void 0;const currentRows=data?.rows.filter(row=>row.hubProjectId===selected)??[];const ids=[...new Set([...data?.options.connectors.map(c=>c.id)??[],...currentRows.map(r=>r.connector)])];const labelOf2=id=>data?.options.connectors.find(c=>c.id===id)?.displayName??id;return jsxs15("main",{className:"band-settings band-connections band-team-connections",children:[scope==="workshop"?jsx16(WorkshopCrumb,{ctx,workshopId,workshopName:workshopName??workshopId,here:title}):jsx16(DeploymentCrumb,{title}),jsx16("h1",{children:title}),!forbidden&&jsxs15("p",{className:"band-connections-description",children:[scope==="workshop"?"\u7BA1\u7406\u8FD9\u4E2A\u5DE5\u574A\u5171\u7528\u7684\u8FDE\u63A5\u3002":"\u7BA1\u7406\u6574\u4E2A Band \u90E8\u7F72\u5171\u7528\u7684\u8FDE\u63A5\u3002","\u5DF2\u8FDE\u63A5\u8868\u793A\u51ED\u636E\u5DF2\u4FDD\u5B58\uFF0C\u5916\u90E8\u5E94\u7528\u6743\u9650\u4F1A\u5728\u4F7F\u7528\u65F6\u9A8C\u8BC1\u3002"]}),forbidden?scope==="workshop"?jsx16(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u5DE5\u574A\u7684\u56E2\u961F\u8FDE\u63A5",action:{label:"\u56DE\u5230\u5DE5\u574A",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-workshops/about",params:{workshop:workshopId}})},children:"\u56E2\u961F\u8FDE\u63A5\u53EA\u6709\u5DE5\u574A\u7684\u521B\u5EFA\u4EBA\u548C\u7BA1\u7406\u5458\u80FD\u770B\u3001\u80FD\u6539\u3002\u8981\u7528\u6216\u8981\u6539\u8FD9\u91CC\u7684\u8FDE\u63A5\uFF0C\u8BF7\u627E\u8FD9\u4E2A\u5DE5\u574A\u7684\u521B\u5EFA\u4EBA\u6216\u7BA1\u7406\u5458\u3002"}):jsx16(DeploymentNoAccess,{what:title,hint:"\u8981\u7528\u6216\u8981\u6539\uFF0C\u8BF7\u627E Band \u7BA1\u7406\u5458\u3002",leave:()=>leaveDeployment(ctx)}):error!==null?jsxs15(ErrorNote4,{retry:()=>setRevision(n=>n+1),children:[title,"\u6CA1\u8BFB\u51FA\u6765\uFF1A",error]}):!data?jsx16("output",{children:"\u6B63\u5728\u8BFB\u53D6\u8FDE\u63A5\u2026"}):jsxs15(Fragment13,{children:[optionsError!==null&&jsxs15(ErrorNote4,{retry:()=>setRevision(n=>n+1),children:["\u53EF\u7528\u8FDE\u63A5\u9009\u9879\u6CA1\u8BFB\u51FA\u6765\uFF1A",optionsError,"\u3002\u5DF2\u6709\u8FDE\u63A5\u4ECD\u53EF\u65AD\u5F00\u3002"]}),jsxs15("div",{className:"band-connections-form band-team-project",children:[jsx16("label",{htmlFor:onlyProject?"team-project-value":"team-project",children:"AgentHub \u9879\u76EE"}),onlyProject?jsx16("output",{id:"team-project-value",children:onlyProject.label}):jsxs15("select",{id:"team-project",className:"field",value:project,"aria-invalid":project!=="custom"&&projectError,onChange:e=>{setCustom("");setProjectError(false);setProject(e.target.value)},children:[!project&&jsx16("option",{value:"",children:"\u8BF7\u9009\u62E9 AgentHub \u9879\u76EE"}),projects.map(p=>jsx16("option",{value:p.id,children:p.label},p.id)),data.options.allowCustomProject&&jsx16("option",{value:"custom",children:"\u5176\u4ED6\u9879\u76EE"})]}),project==="custom"&&jsxs15(Fragment13,{children:[jsxs15("label",{htmlFor:"team-custom-project",children:["\u9879\u76EE ID ",jsx16("span",{children:"\u5FC5\u586B"})]}),jsx16("input",{id:"team-custom-project",className:"field",value:custom,"aria-invalid":projectError,placeholder:"\u586B\u5199\u6709\u6743\u8BBF\u95EE\u7684\u9879\u76EE UUID",onChange:e=>{setCustom(e.target.value);setProjectError(false)}})]})]}),projectError&&jsx16("p",{role:"alert",className:"band-connections-error",children:"\u8BF7\u586B\u5199\u6709\u6548\u7684\u9879\u76EE UUID"}),optionsError===null&&ids.length===0&&jsx16("p",{children:"\u8FD8\u6CA1\u6709\u53EF\u7528\u7684\u56E2\u961F\u8FDE\u63A5\u5668\uFF0C\u8BF7\u8054\u7CFB Band \u7BA1\u7406\u5458\u914D\u7F6E\u8FDE\u63A5\u5668\u76EE\u5F55\u3002"}),api&&ids.map(id=>jsx16(ConnectionRow,{api,owner,connector:id,label:labelOf2(id),inTurn:optionsError!==null||scope!=="workshop"?void 0:data.options.connectors.find(c=>c.id===id)?.inTurn??[],project:selected,row:currentRows.find(r=>r.connector===id),enabled:data.options.connectors.some(c=>c.id===id)&&(data.options.allowCustomProject||data.options.hubProjects.some(p=>p.id===selected)),invalidProject:()=>setProjectError(true),reload:()=>setRevision(n=>n+1)},`${selected}:${id}`))]})]})}function ConnectionRow({api,owner,connector,label,inTurn,project,row,enabled,reload,invalidProject}){const[token,setToken]=useState14("");const[expiry,setExpiry]=useState14(()=>row?.expiresAt?localDate(row.expiresAt):"");const[invalidToken,setInvalidToken]=useState14(false);const[editing,setEditing]=useState14(false);const[error,setError]=useState14("");const[busy,setBusy]=useState14(false);const[needsRefresh,setNeedsRefresh]=useState14(false);const active=row?.status==="active";const failed2=row?.status==="failed";const pending=row?.busy||row?.status==="pending";const connected=row&&row.status!=="revoked";const enabling=!connected||failed2&&!row.credentialId;const run=async action=>{if(busy||pending||needsRefresh)return;if(action!=="disconnect"){if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(project)){invalidProject();return}if(!token){setInvalidToken(true);setError("\u8FD8\u5DEE\u56E2\u961F token \u6CA1\u586B");return}if(!WriteTeamConnectionSchema.safeParse({token}).success){setInvalidToken(true);setError("\u56E2\u961F token \u683C\u5F0F\u4E0D\u6B63\u786E\uFF1A\u9700\u4E3A 8\u20138192 \u4E2A\u5B57\u7B26\uFF0C\u4E0D\u80FD\u5305\u542B\u7A7A\u767D\u6216\u63A7\u5236\u5B57\u7B26");return}}setBusy(true);setError("");const input=token;setToken("");try{if(action==="disconnect")await api.disconnect(owner,connector,project);else await api[action](owner,connector,project,{token:input,...expiry?{expiresAt:endOfLocalDay(expiry)}:{}});reload()}catch(error2){setNeedsRefresh(true);const conflict=typeof error2==="object"&&error2!==null&&"code"in error2&&error2.code==="CONFLICT";setError(conflict?"\u64CD\u4F5C\u672A\u5B8C\u6210\uFF0C\u51ED\u636E\u8F93\u5165\u5DF2\u6E05\u7A7A\u3002\u8BF7\u5148\u70B9\u51FB\u300C\u5237\u65B0\u72B6\u6001\u300D\uFF1B\u53EF\u80FD\u9700\u8981\u5148\u65AD\u5F00\u518D\u91CD\u65B0\u8FDE\u63A5\u3002":"\u64CD\u4F5C\u672A\u5B8C\u6210\uFF0C\u51ED\u636E\u8F93\u5165\u5DF2\u6E05\u7A7A\u3002\u8BF7\u5148\u70B9\u51FB\u300C\u5237\u65B0\u72B6\u6001\u300D\uFF0C\u786E\u8BA4\u540E\u518D\u91CD\u8BD5\u3002")}finally{setBusy(false)}};const status=pending?"\u6B63\u5728\u5904\u7406":active?"\u5DF2\u8FDE\u63A5":failed2?"\u8FDE\u63A5\u5931\u8D25":row?.status==="expired"?"\u5DF2\u8FC7\u671F":"\u672A\u8FDE\u63A5";return jsxs15("section",{className:"band-connections-account","aria-label":`${label} \u8FDE\u63A5`,children:[jsxs15("div",{className:"band-connections-heading",children:[jsx16("h2",{children:label}),jsx16("span",{className:active?"band-connections-active":failed2?"band-connections-error":"band-connections-description",children:status})]}),!enabled&&jsx16("p",{className:"band-connections-description",children:"\u6B64\u8FDE\u63A5\u5668\u6216\u9879\u76EE\u5DF2\u4E0D\u5728\u53EF\u7528\u58F0\u660E\u4E2D\uFF0C\u5DF2\u6709\u8FDE\u63A5\u4ECD\u53EF\u65AD\u5F00\u3002"}),row?.vaultUncertain&&jsx16("p",{className:"band-connections-description",children:row.credentialId?"\u4E0A\u6B21\u64CD\u4F5C\u7684\u8FDC\u7AEF\u7ED3\u679C\u4E0D\u786E\u5B9A\u3002\u91CD\u65B0\u586B\u5199 token \u53EF\u91CD\u8BD5\u539F\u5730\u6362\u503C\u3002":"\u4E0A\u6B21\u64CD\u4F5C\u7684\u8FDC\u7AEF\u7ED3\u679C\u4E0D\u786E\u5B9A\u3002\u91CD\u8BD5\u53EF\u80FD\u91CD\u65B0\u5EFA\u7ACB\u8FDE\u63A5\uFF0C\u4ECD\u6709\u56DE\u5408\u4F7F\u7528\u65F6\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002"}),row?.secretTails.token&&jsxs15("p",{className:"band-connections-description",children:["\u56E2\u961F token \xB7 \u672B 4 \u4F4D ",jsx16("code",{children:row.secretTails.token})]}),connected&&row.expiresAt&&jsx16(Expiry,{status:row.status,expiresAt:row.expiresAt}),connected&&inTurn&&inTurn.length>0&&jsxs15("p",{className:"band-connections-description",children:["\u56DE\u5408\u5185\uFF1A",inTurn.join("\u3001")]}),jsxs15("div",{className:"band-connections-actions",children:[active&&enabled&&!editing&&jsx16("button",{type:"button",className:"btn",disabled:busy||pending||needsRefresh,onClick:()=>setEditing(true),children:"\u6362\u503C"}),connected&&jsx16("button",{type:"button",className:"btn",disabled:busy||pending||needsRefresh,onClick:()=>void run("disconnect"),children:"\u65AD\u5F00"}),(connected||needsRefresh)&&jsx16("button",{type:"button",className:"btn",disabled:busy,onClick:reload,children:"\u5237\u65B0\u72B6\u6001"})]}),enabled&&(!active||editing)&&jsxs15("form",{noValidate:true,className:"band-connections-form",onSubmit:e=>{e.preventDefault();void run(active||(row?.status==="expired"||failed2)&&!!row?.vaultId&&!!row.credentialId?"rotate":"connect")},children:[enabling&&inTurn&&jsx16(InTurnNotice,{tools:inTurn}),jsxs15("label",{htmlFor:`team-token-${connector}`,children:["\u56E2\u961F token ",jsx16("span",{className:"band-connections-description",children:"\u5FC5\u586B"})]}),jsx16("input",{id:`team-token-${connector}`,className:"field",type:"password",autoComplete:"off",spellCheck:false,value:token,"aria-invalid":invalidToken,disabled:busy||pending||needsRefresh,placeholder:"\u7C98\u8D34\u56E2\u961F token\uFF0C\u63D0\u4EA4\u540E\u4E0D\u4F1A\u56DE\u663E",onChange:e=>{setToken(e.target.value);setInvalidToken(false);setError("")}}),jsxs15("label",{htmlFor:`team-expiry-${connector}`,children:["\u8FC7\u671F\u65E5\u671F ",jsx16("span",{className:"band-connections-description",children:"\u9009\u586B"})]}),jsx16("input",{id:`team-expiry-${connector}`,className:"field",type:"date",value:expiry,disabled:busy||pending||needsRefresh,"aria-describedby":`team-expiry-${connector}-hint`,onChange:e=>setExpiry(e.target.value)}),jsxs15("p",{id:`team-expiry-${connector}-hint`,className:"band-connections-description",children:["token \u8BBE\u4E86\u6709\u6548\u671F\u5C31\u586B\u4E0A\uFF0C\u5230\u671F\u524D ",EXPIRY_WARN_DAYS," ","\u5929\u8D77\u5728\u8FD9\u91CC\u63D0\u9192\uFF1B\u4E0D\u586B\u8868\u793A\u4E0D\u8FC7\u671F\u6216\u4E0D\u77E5\u9053\u3002"]}),jsxs15("div",{className:"band-connections-actions",children:[jsx16("button",{className:"btn primary",type:"submit",disabled:busy||pending||needsRefresh,children:busy?"\u6B63\u5728\u63D0\u4EA4\u2026":active||row?.status==="expired"?"\u4FDD\u5B58\u65B0\u503C":failed2?row?.credentialId?"\u91CD\u8BD5\u6362\u503C":"\u91CD\u8BD5\u8FDE\u63A5":"\u8FDE\u4E0A"}),editing&&jsx16("button",{className:"btn",type:"button",disabled:busy,onClick:()=>{setToken("");setExpiry(row?.expiresAt?localDate(row.expiresAt):"");setEditing(false);setError("")},children:"\u53D6\u6D88"})]})]}),error&&jsx16("p",{role:"alert",className:"band-connections-error",children:error})]})}var EXPIRY_WARN_DAYS=7;var DAY_MS=864e5;function localDate(iso){const d=new Date(iso);const pad2=n=>String(n).padStart(2,"0");return`${d.getFullYear()}-${pad2(d.getMonth()+1)}-${pad2(d.getDate())}`}function endOfLocalDay(date){const[y=0,m=1,d=1]=date.split("-").map(Number);return new Date(y,m-1,d,23,59,59).toISOString()}function daysLeft(iso,now=Date.now()){const day2=t=>{const d=new Date(t);return new Date(d.getFullYear(),d.getMonth(),d.getDate()).getTime()};return Math.round((day2(Date.parse(iso))-day2(now))/DAY_MS)}function dayText(iso){const d=new Date(iso);const sameYear=d.getFullYear()===new Date().getFullYear();return`${sameYear?"":`${d.getFullYear()}\u5E74`}${d.getMonth()+1}\u6708${d.getDate()}\u65E5`}function Expiry({status,expiresAt}){const left=daysLeft(expiresAt);if(status==="expired"||Date.parse(expiresAt)<=Date.now())return jsxs15("p",{className:"band-connections-expiring",children:[dayText(expiresAt),"\u5DF2\u8FC7\u671F\uFF1A\u4E0A\u6E38\u4F1A\u62D2\u7EDD\u8FD9\u4EFD\u51ED\u636E\uFF0C\u8BF7\u586B\u65B0\u7684 token \u6362\u503C\u3002"]});if(left<=EXPIRY_WARN_DAYS)return jsxs15("p",{className:"band-connections-expiring",children:["\u5230\u671F ",dayText(expiresAt)," \xB7"," ",left===0?"\u4ECA\u5929\u5230\u671F\uFF0C\u8BF7\u5C3D\u5FEB\u6362\u503C":`\u8FD8\u6709 ${left} \u5929\u8FC7\u671F\uFF0C\u5230\u671F\u524D\u8BF7\u6362\u503C`]});return jsxs15("p",{className:"band-connections-description",children:["\u5230\u671F ",dayText(expiresAt)]})}function InTurnNotice({tools}){if(tools.length===0)return jsx16("p",{className:"band-connections-description",children:"\u672C\u5DE5\u574A\u8FD8\u6CA1\u5728\u56DE\u5408\u5185\u7528\u8FD9\u4E2A\u8FDE\u63A5\u5668\uFF0C\u8FDE\u4E0A\u540E\u56DE\u5408\u91CC\u4E0D\u4F1A\u5E26\u4E0A\u5B83\u3002"});return jsxs15("div",{className:"band-connections-notice",role:"note",children:[jsx16("p",{children:"\u8FDE\u4E0A\u540E\uFF0C\u56DE\u5408\u91CC agent \u7528\u8FD9\u4EFD\u56E2\u961F\u51ED\u636E\u8BFB\u5230\u7684\u5185\u5BB9\uFF0C\u6240\u6709\u7528\u672C\u5DE5\u574A\u5EFA\u7684\u9879\u76EE\u7684\u6210\u5458\u90FD\u80FD\u8BFB\u5230\u3002"}),jsxs15("p",{className:"band-connections-description",children:["\u56DE\u5408\u5185\u53EF\u7528\uFF1A",tools.join("\u3001"),"\u3002agent \u770B\u5F97\u5230\u8FD9\u4E2A\u8FDE\u63A5\u5668\u5176\u4ED6\u5DE5\u5177\u7684\u540D\u5B57\uFF0C\u4F46\u8C03\u7528\u4F1A\u88AB\u62D2\u7EDD\u3002"]})]})}var DESC10="\u51B3\u5B9A\u8C01\u80FD\u6253\u5F00\u8FD9\u4E2A\u9879\u76EE\u3002\u6539\u52A8\u7ACB\u5373\u751F\u6548\u3002";var READONLY3="\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u80FD\u6539\u3002";var LEVELS=[{value:"members",label:"\u53EA\u6709\u9879\u76EE\u6210\u5458",hint:"\u53EA\u6709\u52A0\u8FDB\u8FD9\u4E2A\u9879\u76EE\u7684\u4EBA\u80FD\u6253\u5F00\u3002"},{value:"team",label:"\u8FD9\u4E2A\u5DE5\u574A\u7684\u4EBA",hint:"\u5DE5\u574A\u7684\u521B\u5EFA\u4EBA\u3001\u7BA1\u7406\u5458\u548C\u6210\u5458\u90FD\u80FD\u6253\u5F00\uFF0C\u4E0D\u7528\u4E00\u4E2A\u4E2A\u52A0\u3002"},{value:"users",label:"\u9879\u76EE\u6210\u5458\u548C\u6307\u5B9A\u7684\u4EBA",hint:"\u9664\u4E86\u9879\u76EE\u6210\u5458\uFF0C\u4E0B\u9762\u540D\u5355\u91CC\u7684\u4EBA\u4E5F\u80FD\u6253\u5F00\u3002"},{value:"everyone",label:"\u516C\u53F8\u5185\u6240\u6709\u4EBA",hint:"\u516C\u53F8\u91CC\u767B\u5F55 Band \u7684\u4EBA\u90FD\u80FD\u6253\u5F00\uFF0C\u516C\u53F8\u5916\u7684\u4EBA\u6253\u4E0D\u5F00\u3002"}];var VIEWERS_MAX=200;function VisibilitySettings({ctx}){const api=ctx.visibilitySettings;const[loaded,setLoaded]=useState15(null);const[canManage,setCanManage]=useState15(false);const[level,setLevel]=useState15("members");const[viewers,setViewers]=useState15([]);const[readError,setReadError]=useState15(null);const[writeError,setWriteError]=useState15(null);const[saved,setSaved]=useState15(false);const[busy,setBusy]=useState15(false);const[reload,setReload]=useState15(0);const groupId=useId3();const search=useCallback(q=>api?api.searchUsers(q):Promise.resolve([]),[api]);useEffect12(()=>{let active=true;setReadError(null);const load=async()=>{if(!api)throw new Error("\u8FD9\u4E2A\u5BBF\u4E3B\u4E0D\u652F\u6301\u9879\u76EE\u53EF\u89C1\u8303\u56F4\u8BBE\u7F6E");return api.get()};void load().then(v=>{if(!active)return;const people=v.viewers??[];setLoaded({visibility:v.visibility,viewers:people});setLevel(v.visibility);setViewers(people);setCanManage(v.canManage)}).catch(e=>{if(active)setReadError(e)});return()=>{active=false}},[api,reload]);const changed=loaded!==null&&(level!==loaded.visibility||level==="users"&&viewers.map(p=>p.id).join("\n")!==loaded.viewers.map(p=>p.id).join("\n"));async function save(){if(!api||busy)return;if(level==="users"&&viewers.length===0){setWriteError("\u8FD8\u5DEE\u540D\u5355\uFF1A\u9009\u300C\u9879\u76EE\u6210\u5458\u548C\u6307\u5B9A\u7684\u4EBA\u300D\u65F6\u81F3\u5C11\u52A0\u4E00\u4E2A\u4EBA");return}setBusy(true);setWriteError(null);setSaved(false);try{const v=await api.set(level==="users"?{visibility:level,viewers:viewers.map(p=>p.id)}:{visibility:level});const people=v.viewers??[];setLoaded({visibility:v.visibility,viewers:people});setLevel(v.visibility);setViewers(people);setCanManage(v.canManage);setSaved(true)}catch(e){setWriteError(`\u6CA1\u6709\u4FDD\u5B58\uFF1A${errorText2(e)}`)}finally{setBusy(false)}}const forbidden=readError!==null&&isForbidden12(readError);const readFailed=readError!==null&&loaded===null&&!forbidden;return jsxs16(Fragment14,{children:[jsx17(SettingsHead,{title:"\u8C01\u80FD\u770B",desc:DESC10}),forbidden?jsx17(SettingsNoAccess,{title:"\u6CA1\u6709\u6743\u9650\u770B\u8FD9\u4E2A\u9879\u76EE\u7684\u53EF\u89C1\u8303\u56F4",action:{label:"\u56DE\u5230\u9879\u76EE",onClick:()=>ctx.app.navigate({page:"@kanyun-ai-infra/band-project/project",params:{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{}}})},children:"\u53EA\u6709\u9879\u76EE\u6210\u5458\u80FD\u770B\u3002\u8981\u770B\u7684\u8BDD\uFF0C\u8BF7\u8054\u7CFB\u9879\u76EE\u7BA1\u7406\u5458\u628A\u4F60\u52A0\u8FDB\u6765\u3002"}):readFailed?jsxs16(SettingsReadError,{retry:()=>setReload(n=>n+1),children:["\u53EF\u89C1\u8303\u56F4\u6CA1\u8BFB\u51FA\u6765\uFF1A",errorText2(readError)]}):loaded===null?jsx17(SettingsLoading,{text:"\u6B63\u5728\u8BFB\u53D6\u53EF\u89C1\u8303\u56F4\u2026"}):jsxs16(Fragment14,{children:[!canManage?jsx17("p",{className:"band-sf-muted",children:READONLY3}):null,jsxs16("div",{className:"band-sf-picks",role:"radiogroup","aria-labelledby":groupId,children:[jsx17("span",{className:"sr-only",id:groupId,children:"\u8C01\u80FD\u770B\u8FD9\u4E2A\u9879\u76EE"}),LEVELS.map(l=>jsxs16("label",{className:"band-sf-opt",children:[jsx17("input",{type:"radio",className:"radio",name:`${groupId}-level`,value:l.value,checked:level===l.value,disabled:!canManage||busy,onChange:()=>{setLevel(l.value);setSaved(false);setWriteError(null)}}),jsxs16("span",{children:[jsx17("b",{children:l.label}),jsx17("small",{children:l.hint})]})]},l.value))]}),level==="users"&&(canManage?jsx17(ViewerList,{people:viewers,busy,search,onChange:next=>{setViewers(next);setSaved(false);setWriteError(null)}}):jsx17("p",{className:"band-sf-muted",children:"\u540D\u5355\u53EA\u6709\u9879\u76EE\u7BA1\u7406\u5458\u770B\u5F97\u5230\u3002"})),jsx17("p",{className:"band-sf-muted",children:"\u4E0D\u662F\u9879\u76EE\u6210\u5458\u7684\u4EBA\u53EA\u80FD\u770B\u4EA4\u4ED8\u7269\uFF1A\u770B\u4E0D\u5230\u610F\u89C1\uFF0C\u4E0D\u80FD\u8BC4\u8BBA\uFF0C\u4E5F\u4E0D\u80FD\u4EA4\u7ED9 AI\u3002\u6539\u4E86\u7ACB\u5373\u751F\u6548\uFF1A\u4E0D\u5728\u8303\u56F4\u91CC\u7684\u4EBA\u4E0B\u4E00\u6B21\u6253\u5F00\u6216\u5237\u65B0\u5C31\u8FDB\u4E0D\u6765\u4E86\u3002"}),canManage?jsxs16(SettingsActions8,{children:[jsx17("button",{type:"button",className:"btn primary",disabled:busy||!changed,onClick:()=>void save(),children:busy?"\u6B63\u5728\u4FDD\u5B58\u2026":"\u4FDD\u5B58"}),jsx17(SettingsSaveState10,{failed:writeError,saved:saved&&!changed})]}):null]})]})}function ViewerList({people,busy,search,onChange}){const[q,setQ]=useState15("");const[found,setFound]=useState15({q:"",users:[]});const listId=useId3();const term=q.trim();const taken=new Set(people.map(p=>p.id));const full=people.length>=VIEWERS_MAX;useEffect12(()=>{if(term===""){setFound({q:"",users:[]});return}let live=true;const t=setTimeout(()=>{search(term).then(users=>live&&setFound({q:term,users}),()=>live&&setFound({q:"",users:[]}))},200);return()=>{live=false;clearTimeout(t)}},[search,term]);const settled=found.q===term;const candidates=settled?found.users.filter(u=>!taken.has(u.id)):[];const add=p=>{onChange([...people,{id:p.id,displayName:p.displayName}]);setQ("")};return jsx17("div",{className:"band-settings-viewers",children:jsx17(SettingsField6,{label:"\u6307\u5B9A\u7684\u4EBA",required:true,hint:term!==""&&settled&&candidates.length===0?taken.has(term)?`${term} \u5DF2\u7ECF\u5728\u540D\u5355\u91CC\u3002`:`\u7528\u6237\u76EE\u5F55\u91CC\u6CA1\u6709\u300C${term}\u300D\uFF1A\u53EA\u80FD\u52A0\u767B\u5F55\u8FC7 Band \u7684\u4EBA\u3002`:`\u6700\u591A ${VIEWERS_MAX} \u4EBA`,children:field=>jsxs16(Fragment14,{children:[people.length>0&&jsx17("ul",{className:"band-settings-people","aria-label":"\u540D\u5355",children:people.map(p=>jsxs16("li",{children:[jsxs16("span",{children:[jsx17("b",{children:p.displayName}),p.displayName!==p.id&&jsx17("span",{children:p.id})]}),jsx17("button",{type:"button",className:"btn ghost sm",disabled:busy,"aria-label":`\u628A${p.displayName}\u79FB\u51FA\u540D\u5355`,onClick:()=>onChange(people.filter(x=>x.id!==p.id)),children:"\u79FB\u51FA"})]},p.id))}),jsx17("input",{...field,className:"field",value:q,placeholder:full?"\u540D\u5355\u5DF2\u6EE1":"\u8F93\u5165 ldap \u6216\u59D3\u540D\u67E5\u627E",autoComplete:"off","aria-controls":listId,disabled:busy||full,onChange:e=>setQ(e.target.value)}),candidates.length>0&&jsx17("ul",{className:"band-settings-cands",id:listId,"aria-label":"\u5019\u9009\u7684\u4EBA",children:candidates.map(u=>jsx17("li",{children:jsxs16("button",{type:"button",onClick:()=>add(u),children:[jsx17("b",{children:u.displayName}),jsx17("span",{children:u.id})]})},u.id))})]})})})}var SELF10="@kanyun-ai-infra/band-settings";var TABS=`${SELF10}/tabs`;var PROJECT_HEAD="@kanyun-ai-infra/band-project/project-head";var SETTINGS_PAGE=`${SELF10}/settings`;var SETTINGS_HOME_PAGE=`${SELF10}/settings-home`;var src_default=definePlugin({surfaces:{"settings-index":reactMount10(ctx=>jsx18(SettingsIndex,{ctx})),"settings-menu":reactMount10((ctx,{owner})=>jsx18("button",{type:"button",className:"btn ghost",onClick:()=>{owner.close();ctx.app.navigate({page:`${SELF10}/settings-index`})},children:"\u8BBE\u7F6E"})),models:modelsPage,"models-for":modelsPage,"net-credentials":netCredentialsPage,connections:connectionsPage,"platform-tokens":platformTokensPage,reminders:remindersPage,"team-connections":teamConnectionsPage,"deployment-connections":deploymentConnectionsPage,"deployment-connections-menu":deploymentConnectionsMenu,"beta-members":betaMembersPage,"beta-members-menu":betaMembersMenu,"feedback-admin":feedbackAdminPage,"feedback-admin-menu":feedbackAdminMenu,settings:reactMount10(ctx=>jsx18(ProjectSettings,{ctx})),"settings-home":reactMount10(ctx=>jsx18(ProjectSettings,{ctx})),open:reactMount10(ctx=>jsx18(OpenButton,{ctx})),approval:reactMount10(ctx=>jsx18(ApprovalSettings,{ctx})),visibility:reactMount10(ctx=>jsx18(VisibilitySettings,{ctx})),"project-models":reactMount10(ctx=>jsx18(ProjectModelsSection,{ctx})),danger:reactMount10(ctx=>jsx18(ProjectDangerSettings,{ctx})),notify:notifyPage}});function projectParams(ctx,extra={}){return{project:ctx.project.id,...ctx.project.workshop?{workshop:ctx.project.workshop}:{},...extra}}var settingsHomePath=ctx=>projectPath2(ctx.project,"settings");var settingsPath=(ctx,section,item)=>projectPath2(ctx.project,"settings",...item?[section,item]:[section]);function SettingsIndex({ctx}){const narrow=useNarrow();const[firstOff,setFirstOff]=useState16(false);const firstUnavailable=useCallback2(()=>setFirstOff(true),[]);if(!narrow&&!firstOff)return jsx18(MyModels,{ctx,onUnavailable:firstUnavailable});return jsx18(PersonalFrame,{ctx,view:"index",children:narrow?null:personalGroups().map(g=>jsxs17("section",{className:"band-sf-sec","aria-label":g.group,children:[jsx18("h2",{children:g.group}),jsx18(SettingsRows,{label:g.group,children:g.sections.map(s=>jsx18(SettingsRow,{title:s.title,href:personalPath(s.slug),onOpen:()=>ctx.app.navigate({page:personalPage(s.slug)})},s.slug))})]},g.group))})}var tabId=e=>String(e.meta.tab??e.id);var tabTitle=e=>String(e.meta.title??e.id);var LEGACY_TAB_GROUPS={members:"\u534F\u4F5C",memory:"Agent"};var tabGroup=e=>{const g=e.meta.group;if(typeof g==="string"&&g.trim()!=="")return g;return LEGACY_TAB_GROUPS[tabId(e)]??"\u5176\u4ED6"};function sortTabs(entries){return[...entries].sort((a,b)=>a.order-b.order)}function projectGroups(ctx,entries){const byGroup=new Map;for(const e of sortTabs(entries)){const group=tabGroup(e);const section={slug:tabId(e),title:tabTitle(e),href:settingsPath(ctx,tabId(e)),page:SETTINGS_PAGE,params:projectParams(ctx,{tab:tabId(e)})};const list=byGroup.get(group);if(list)list.push(section);else byGroup.set(group,[section])}return[...byGroup].map(([group,sections])=>({group,sections}))}function OpenButton({ctx}){const entries=sortTabs(useSlotEntries(ctx,TABS));const what=entries.map(e=>String(e.meta.hint??tabTitle(e))).join("\u3001");const label=what?`\u9879\u76EE\u8BBE\u7F6E\uFF1A${what}`:"\u9879\u76EE\u8BBE\u7F6E";const first=entries[0];return jsx18("button",{type:"button",className:"iconbtn band-settings-open","aria-label":label,title:label,onClick:()=>ctx.app.navigate({page:SETTINGS_PAGE,params:projectParams(ctx,{tab:first?tabId(first):"members"})}),children:jsxs17("svg",{viewBox:"0 0 24 24","aria-hidden":"true",children:[jsx18("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),jsx18("circle",{cx:"12",cy:"12",r:"3"})]})})}function ProjectSettings({ctx}){const route=useRoute7(ctx);const entries=sortTabs(useSlotEntries(ctx,TABS));const narrow=useNarrow();const asked=route.params.tab;const current=asked===void 0?void 0:entries.find(e=>tabId(e)===asked);const shown=current??(narrow?void 0:entries[0]);const view=shown||entries.length===0?"page":"index";const item=route.params.item;const head=ctx.services.find(PROJECT_HEAD);const frame=jsx18(Frame,{ctx,navLabel:"\u9879\u76EE\u8BBE\u7F6E\u5206\u533A",title:"\u9879\u76EE\u8BBE\u7F6E",crumb:head?void 0:jsx18(Crumb,{ctx}),groups:projectGroups(ctx,entries),current:shown?tabId(shown):void 0,view,back:item!==void 0&&current?{label:tabTitle(current),href:settingsPath(ctx,tabId(current)),page:SETTINGS_PAGE,params:projectParams(ctx,{tab:tabId(current)})}:void 0,backMobile:item===void 0?{label:"\u9879\u76EE\u8BBE\u7F6E",href:settingsHomePath(ctx),page:SETTINGS_HOME_PAGE,params:projectParams(ctx)}:void 0,children:entries.length===0?jsxs17("div",{className:"band-settings-state rest",children:[jsx18("i",{}),jsx18("b",{children:"\u6CA1\u6709\u8BBE\u7F6E\u5206\u533A"}),jsx18("span",{children:"\u8FD9\u4E2A\u90E8\u7F72\u6CA1\u6709\u88C5\u4EFB\u4F55\u8BBE\u7F6E\u63D2\u4EF6\u3002"})]}):shown?jsx18(Mount,{mount:el=>ctx.slots.mount(el,TABS,{key:shown.key,owner:{projectId:ctx.project.id}}),deps:[shown.key,ctx.project.id]}):null});if(!head)return frame;return jsxs17("div",{className:"band-settings-page",children:[jsx18(Mount,{className:"band-settings-projecthead",mount:el=>head.mount(el),deps:[head]}),frame]})}export{ProjectSettings,SETTINGS_HOME_PAGE,SETTINGS_PAGE,SettingsIndex,src_default as default,projectGroups,projectParams,settingsHomePath,settingsPath};