@cloudhal/cli 0.3.0 → 0.3.1

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 (165) hide show
  1. package/dist/assets/starters/blog/package.json +4 -4
  2. package/dist/assets/studio/assets/AccountPage-Bm5BeHWl.js +2 -0
  3. package/dist/assets/studio/assets/{ActivityPage-C0HlgSI5.js → ActivityPage-D8RUaugX.js} +2 -2
  4. package/dist/assets/studio/assets/{AgentModes-B81a2nUo.js → AgentModes-CP8u-uXl.js} +2 -2
  5. package/dist/assets/studio/assets/AgentsPage-CaH_5r7Z.js +2 -0
  6. package/dist/assets/studio/assets/AnalyticsPage-BmO0u8xD.js +3 -0
  7. package/dist/assets/studio/assets/ApprovalDialog-DXKCyEdf.js +2 -0
  8. package/dist/assets/studio/assets/ApprovalsPage-q-birvZ1.js +3 -0
  9. package/dist/assets/studio/assets/ArticleEditorPage-lHoUmERU.js +2 -0
  10. package/dist/assets/studio/assets/ArticlesPage-C4HQcyMZ.js +2 -0
  11. package/dist/assets/studio/assets/{AssetPage-ddWJt0hs.js → AssetPage-b0erj1AI.js} +2 -2
  12. package/dist/assets/studio/assets/{Audit-BCzf5vBq.js → Audit-DgbpP_nz.js} +2 -2
  13. package/dist/assets/studio/assets/AuditBadges-BEqBnWoz.js +2 -0
  14. package/dist/assets/studio/assets/{AuthLayout-Cidy_2Lu.js → AuthLayout-CXAGkrx9.js} +2 -2
  15. package/dist/assets/studio/assets/AutomationsPage-C4pRmT5O.js +2 -0
  16. package/dist/assets/studio/assets/{BlockSection-CnUXl5Sg.js → BlockSection-TZc72IgX.js} +2 -2
  17. package/dist/assets/studio/assets/{BodyChanges-M0zcsivC.js → BodyChanges-WuQnhlDk.js} +3 -3
  18. package/dist/assets/studio/assets/BuildPage-CtH9Zwbu.js +2 -0
  19. package/dist/assets/studio/assets/{CommandMenu-CH5CJ8Kg.js → CommandMenu-BVT-HHW0.js} +2 -2
  20. package/dist/assets/studio/assets/{CommentThreadControls-D04pICZT.js → CommentThreadControls-CXNj8JY7.js} +2 -2
  21. package/dist/assets/studio/assets/{CommentThreadPage-BP0N9T4z.js → CommentThreadPage-DyXjmoOu.js} +2 -2
  22. package/dist/assets/studio/assets/{CommenterPage-CeFR4pn4.js → CommenterPage-ClHD0q_d.js} +2 -2
  23. package/dist/assets/studio/assets/Comments-sU22Wp1j.js +2 -0
  24. package/dist/assets/studio/assets/CommentsPage-C7tWqq_I.js +2 -0
  25. package/dist/assets/studio/assets/{ConfirmDialog-DEHkMoTj.js → ConfirmDialog-DKmz4y5Q.js} +2 -2
  26. package/dist/assets/studio/assets/{Crumbs-Ci_RdgHU.js → Crumbs-DOM6tT0l.js} +2 -2
  27. package/dist/assets/studio/assets/{EditorLayout-DVegYcZT.js → EditorLayout-ieqpWD3O.js} +2 -2
  28. package/dist/assets/studio/assets/{EditorPreview-DsZG4-oJ.js → EditorPreview-BMn8JFyR.js} +2 -2
  29. package/dist/assets/studio/assets/{Elevation-Ca3Q8sk-.js → Elevation-B3H1KYdW.js} +2 -2
  30. package/dist/assets/studio/assets/{ElevationRequest-B0_Q_gVT.js → ElevationRequest-DiCnHA-N.js} +2 -2
  31. package/dist/assets/studio/assets/{ForgotPasswordPage-LNtBXfC8.js → ForgotPasswordPage-ClPZ6VQ0.js} +2 -2
  32. package/dist/assets/studio/assets/Gating-mRuy0Aw6.js +2 -0
  33. package/dist/assets/studio/assets/{GovernanceDialog-DR0m4Bhp.js → GovernanceDialog-BOsmZ9sA.js} +2 -2
  34. package/dist/assets/studio/assets/{InvitePage-CZ-4Clg6.js → InvitePage-DHe4I49a.js} +2 -2
  35. package/dist/assets/studio/assets/{ListToolbar-CE70usqf.js → ListToolbar-D0cz9A9i.js} +2 -2
  36. package/dist/assets/studio/assets/LoginPage-CaYvxxAx.js +2 -0
  37. package/dist/assets/studio/assets/{MediaPage-D7h4RBbB.js → MediaPage-cRqqqjDj.js} +2 -2
  38. package/dist/assets/studio/assets/{MediaPicker-DlJLkaGR.js → MediaPicker-zwukL6LF.js} +2 -2
  39. package/dist/assets/studio/assets/{MediaUpload-BpTyBTHG.js → MediaUpload-D_NqJMLl.js} +2 -2
  40. package/dist/assets/studio/assets/MembersPage-nFZuQGQj.js +2 -0
  41. package/dist/assets/studio/assets/{Menus-ChmyHrPc.js → Menus-DiSEzHBI.js} +2 -2
  42. package/dist/assets/studio/assets/NavigationPage-CnDJF3N5.js +2 -0
  43. package/dist/assets/studio/assets/{NewSiteDialog-D7SUMMY3.js → NewSiteDialog-B5ogDopi.js} +2 -2
  44. package/dist/assets/studio/assets/PageEditorPage-CWb1gYnd.js +5 -0
  45. package/dist/assets/studio/assets/PagesPage-B0efBfNw.js +2 -0
  46. package/dist/assets/studio/assets/{PasswordField-Cn0g88_l.js → PasswordField-CQUUxc5O.js} +2 -2
  47. package/dist/assets/studio/assets/{PreviewPanel-ChFoJD1H.js → PreviewPanel-DJfEXxjT.js} +2 -2
  48. package/dist/assets/studio/assets/{ProjectPage-e5BSkkda.js → ProjectPage-Bkk5B7Kk.js} +2 -2
  49. package/dist/assets/studio/assets/Readers-D8WTNlW_.js +3 -0
  50. package/dist/assets/studio/assets/RedirectDialog-CmFr73CR.js +2 -0
  51. package/dist/assets/studio/assets/RedirectsPage-CiYRLydI.js +2 -0
  52. package/dist/assets/studio/assets/{ReleaseApproval-gkciKrWx.js → ReleaseApproval-Cr8kHN7B.js} +2 -2
  53. package/dist/assets/studio/assets/ReleasePage-qOzPM_1T.js +2 -0
  54. package/dist/assets/studio/assets/ReleaseParts-BJCwLv3d.js +2 -0
  55. package/dist/assets/studio/assets/{ResetPasswordPage-DLpZlh7i.js → ResetPasswordPage-Bga7XJxi.js} +2 -2
  56. package/dist/assets/studio/assets/RocketLaunch.es-BTDML1jE.js +2 -0
  57. package/dist/assets/studio/assets/RowMenu-jMjMjIez.js +2 -0
  58. package/dist/assets/studio/assets/ScheduleCard-DzvtvUrB.js +2 -0
  59. package/dist/assets/studio/assets/{ScheduleDialog-B-QQ_Z3F.js → ScheduleDialog-BEIBEgNY.js} +2 -2
  60. package/dist/assets/studio/assets/{ScheduleHistoryPage-wv3pKfaZ.js → ScheduleHistoryPage-Cqvbso0N.js} +2 -2
  61. package/dist/assets/studio/assets/{ScheduleStatusBadge-DHGmEyDv.js → ScheduleStatusBadge-CvtbjKcE.js} +2 -2
  62. package/dist/assets/studio/assets/{SchedulerStalled-DUmZxbV4.js → SchedulerStalled-v8egx5_5.js} +2 -2
  63. package/dist/assets/studio/assets/Schedules-Bi_9IGap.js +3 -0
  64. package/dist/assets/studio/assets/SchedulesPage-AVUyMVLN.js +2 -0
  65. package/dist/assets/studio/assets/{ScopeBadge-DM2PO5Xk.js → ScopeBadge-CXRIKJV-.js} +2 -2
  66. package/dist/assets/studio/assets/{SectionCard-SzT8t6oM.js → SectionCard-253RWE03.js} +2 -2
  67. package/dist/assets/studio/assets/{Seo-CYyFHl3G.js → Seo-BAmAoHie.js} +2 -2
  68. package/dist/assets/studio/assets/{SeoPreview-tarmyT2Y.js → SeoPreview-BD_qXwU3.js} +2 -2
  69. package/dist/assets/studio/assets/{Settings-C407Vxml.js → Settings-PNFH1Q2d.js} +2 -2
  70. package/dist/assets/studio/assets/{SiteAccessField-D34vIaAo.js → SiteAccessField-B6rXWqPA.js} +2 -2
  71. package/dist/assets/studio/assets/SiteOverviewPage-BHlgtKxn.js +4 -0
  72. package/dist/assets/studio/assets/SiteSettingsPage-CK5oODPR.js +3 -0
  73. package/dist/assets/studio/assets/{SitesPage-B2QS2zaq.js → SitesPage-Bv9wYnBR.js} +3 -3
  74. package/dist/assets/studio/assets/{SkillsPage-BtFk0bBw.js → SkillsPage-CzzFsQCY.js} +3 -3
  75. package/dist/assets/studio/assets/SnapshotsPage-B38WZn18.js +2 -0
  76. package/dist/assets/studio/assets/{Status-BgB2wP8j.js → Status-Ck8cp5VU.js} +2 -2
  77. package/dist/assets/studio/assets/StatusActions-ClWdGpev.js +3 -0
  78. package/dist/assets/studio/assets/{TagsMigration-BggsWH7A.js → TagsMigration-DHPq_z7b.js} +2 -2
  79. package/dist/assets/studio/assets/{Taxonomy-CeQUBEeZ.js → Taxonomy-CDd52lEj.js} +2 -2
  80. package/dist/assets/studio/assets/TaxonomyPage-hmMDxUPP.js +2 -0
  81. package/dist/assets/studio/assets/TermEditorPage-rhF98Ssd.js +2 -0
  82. package/dist/assets/studio/assets/{TermPickers-cZIwRG5t.js → TermPickers-DzlmKYS_.js} +2 -2
  83. package/dist/assets/studio/assets/{Toast-BHyBhGXI.js → Toast-MSfrCjAr.js} +2 -2
  84. package/dist/assets/studio/assets/TranslationList-BOWeWTue.js +2 -0
  85. package/dist/assets/studio/assets/{TranslationsPage-MFJsWMgX.js → TranslationsPage-B0DP9mDX.js} +2 -2
  86. package/dist/assets/studio/assets/{api-Sbz4Rbu7.js → api-K4ZsoxSR.js} +2 -2
  87. package/dist/assets/studio/assets/{api-errors-FBnZYqCy.js → api-errors-MOGC4Qux.js} +2 -2
  88. package/dist/assets/studio/assets/{approvals-BB74ogKx.js → approvals-0AbtJUeH.js} +2 -2
  89. package/dist/assets/studio/assets/{ar-6o5tS7uI.js → ar-B7Q-Tnf1.js} +2 -2
  90. package/dist/assets/studio/assets/{charts-DL9SbRU8.js → charts-CcTdxwHf.js} +2 -2
  91. package/dist/assets/studio/assets/{clipboard-text-gd6s3n1bqse9zgt8-DXnAaY6R.js → clipboard-text-gd6s3n1bqse9zgt8-8cLlgBwE.js} +2 -2
  92. package/dist/assets/studio/assets/{collapsible-l8g94on4w7qfosmn-udgP1bfF.js → collapsible-l8g94on4w7qfosmn-B4g2i1uh.js} +2 -2
  93. package/dist/assets/studio/assets/{combobox-hdxtsm2gqcxxgfju-BzzDlvd3.js → combobox-hdxtsm2gqcxxgfju-DXYGsrSK.js} +2 -2
  94. package/dist/assets/studio/assets/{createToastManager-onmoqrmr8zo02rif-DtEv4lxV.js → createToastManager-onmoqrmr8zo02rif-DFnQWIYL.js} +2 -2
  95. package/dist/assets/studio/assets/{de-BN-GS_nX.js → de-DLXuL-X-.js} +2 -2
  96. package/dist/assets/studio/assets/{deleteLabels-DwQes2_M.js → deleteLabels-QAHG4PeV.js} +2 -2
  97. package/dist/assets/studio/assets/{dialog-glpnivujociqs9lh-BefDeRGC.js → dialog-glpnivujociqs9lh-B2sB0Q83.js} +2 -2
  98. package/dist/assets/studio/assets/dropdown-m53ji1d66mws89wh-CX3moquw.js +2 -0
  99. package/dist/assets/studio/assets/{editor-C9MhZu7g.js → editor-Bq67msVD.js} +2 -2
  100. package/dist/assets/studio/assets/{es-C1E3agwU.js → es-BygirbfZ.js} +2 -2
  101. package/dist/assets/studio/assets/{fa-VZyv0VcS.js → fa-CYekV1Xs.js} +2 -2
  102. package/dist/assets/studio/assets/{fr-IaaUvy1z.js → fr-D-Y48Px4.js} +2 -2
  103. package/dist/assets/studio/assets/{he-Ca3dnXtb.js → he-CfuQu8tf.js} +2 -2
  104. package/dist/assets/studio/assets/{hi-BXkaH5dy.js → hi-HzeORH2z.js} +2 -2
  105. package/dist/assets/studio/assets/{i18n-Cjiv6Esx.js → i18n-B-06kDA4.js} +3 -3
  106. package/dist/assets/studio/assets/{id-BuNEmn7g.js → id-AW4tXw9G.js} +2 -2
  107. package/dist/assets/studio/assets/index-BLFwX4Tg.css +2 -0
  108. package/dist/assets/studio/assets/index-DWzjnrnl.js +4 -0
  109. package/dist/assets/studio/assets/{it-DEB0m7yM.js → it-EGuJa8fC.js} +2 -2
  110. package/dist/assets/studio/assets/{ja-BJv09PXI.js → ja-JiIbNjTZ.js} +2 -2
  111. package/dist/assets/studio/assets/{ko-Cikp2ojH.js → ko-yEoxGMly.js} +2 -2
  112. package/dist/assets/studio/assets/{layer-dialog-j5ywmzs46ccg6oqy-DyWF5y24.js → layer-dialog-j5ywmzs46ccg6oqy-Dg9cqt2A.js} +2 -2
  113. package/dist/assets/studio/assets/{media-DqHiLqTz.js → media-BnpTZ1vj.js} +2 -2
  114. package/dist/assets/studio/assets/{nl-BiYEXj4B.js → nl-s9UiFHkp.js} +2 -2
  115. package/dist/assets/studio/assets/{pl-Iaem81Jv.js → pl-B9qa5oln.js} +2 -2
  116. package/dist/assets/studio/assets/{pt-BR-CM8N0OoK.js → pt-BR-B2hZUyrW.js} +2 -2
  117. package/dist/assets/studio/assets/{ru-2qsjd_Gm.js → ru-DYmqB5PL.js} +2 -2
  118. package/dist/assets/studio/assets/{schedules-api-B7c4AXSw.js → schedules-api-CZRkol2x.js} +2 -2
  119. package/dist/assets/studio/assets/{tag-input-ohfybx5dbxy3houy-DhZt3VBi.js → tag-input-ohfybx5dbxy3houy-0qdjxuFW.js} +2 -2
  120. package/dist/assets/studio/assets/{tr-BK-gVqHj.js → tr-COm1KgYY.js} +2 -2
  121. package/dist/assets/studio/assets/{uk-PoqqfkaM.js → uk-DdtNKfpf.js} +2 -2
  122. package/dist/assets/studio/assets/{useAnalyticsCard-MXajmsui.js → useAnalyticsCard-k_xTTAyd.js} +2 -2
  123. package/dist/assets/studio/assets/{useMe-z-wff5FW.js → useMe-Cx8D2_vf.js} +2 -2
  124. package/dist/assets/studio/assets/{usePaging-BiNrjkE2.js → usePaging-pE8aE7JW.js} +2 -2
  125. package/dist/assets/studio/assets/usePendingApprovals-B6g17X7P.js +2 -0
  126. package/dist/assets/studio/assets/{zh-Hans-BYiQm8Cr.js → zh-Hans-DCvEU7yR.js} +2 -2
  127. package/dist/assets/studio/index.html +24 -20
  128. package/package.json +11 -11
  129. package/dist/assets/studio/assets/AccountPage-Dzr5d8sk.js +0 -2
  130. package/dist/assets/studio/assets/AgentsPage-BzCOyX4g.js +0 -2
  131. package/dist/assets/studio/assets/AnalyticsPage-7yb7DBOH.js +0 -3
  132. package/dist/assets/studio/assets/ApprovalsPage-_tqc02mk.js +0 -3
  133. package/dist/assets/studio/assets/ArticleEditorPage-Bcb81dXC.js +0 -2
  134. package/dist/assets/studio/assets/ArticlesPage-152INxny.js +0 -2
  135. package/dist/assets/studio/assets/AuditBadges-C4sNtzf9.js +0 -2
  136. package/dist/assets/studio/assets/AutomationsPage-Dc6g5v_v.js +0 -2
  137. package/dist/assets/studio/assets/BuildPage-C1Nwy4dt.js +0 -2
  138. package/dist/assets/studio/assets/Comments-CnfKPS2z.js +0 -2
  139. package/dist/assets/studio/assets/CommentsPage-BlP_knlf.js +0 -2
  140. package/dist/assets/studio/assets/Gating-BdY3KxOv.js +0 -2
  141. package/dist/assets/studio/assets/LockSimple.es-D3HQqnoN.js +0 -2
  142. package/dist/assets/studio/assets/LoginPage-BfUjD7n3.js +0 -2
  143. package/dist/assets/studio/assets/MembersPage-BNu1FOBL.js +0 -2
  144. package/dist/assets/studio/assets/NavigationPage-C10U827y.js +0 -2
  145. package/dist/assets/studio/assets/PageEditorPage-DBJUAqjk.js +0 -5
  146. package/dist/assets/studio/assets/PagesPage-Bwm8b58m.js +0 -2
  147. package/dist/assets/studio/assets/Readers-CvhU7wCy.js +0 -3
  148. package/dist/assets/studio/assets/RedirectDialog-DCNKLV43.js +0 -2
  149. package/dist/assets/studio/assets/RedirectsPage-CR1Di-T6.js +0 -2
  150. package/dist/assets/studio/assets/ReleasePage-BRa167d9.js +0 -2
  151. package/dist/assets/studio/assets/ReleaseParts-BEMf510p.js +0 -2
  152. package/dist/assets/studio/assets/RowMenu-BTHdea9k.js +0 -2
  153. package/dist/assets/studio/assets/ScheduleCard-BQWUIwPX.js +0 -2
  154. package/dist/assets/studio/assets/Schedules-R6HfROIM.js +0 -3
  155. package/dist/assets/studio/assets/SchedulesPage-CIbzmMag.js +0 -2
  156. package/dist/assets/studio/assets/SiteOverviewPage-Bm0-f1bp.js +0 -4
  157. package/dist/assets/studio/assets/SiteSettingsPage-tq4SzyMQ.js +0 -3
  158. package/dist/assets/studio/assets/SnapshotsPage-cltqpJLv.js +0 -2
  159. package/dist/assets/studio/assets/StatusActions-tY-DY4Wa.js +0 -3
  160. package/dist/assets/studio/assets/TaxonomyPage-hm0h5Ug5.js +0 -2
  161. package/dist/assets/studio/assets/TermEditorPage-tRUgbC0f.js +0 -2
  162. package/dist/assets/studio/assets/TranslationList-Cc4K8uy_.js +0 -2
  163. package/dist/assets/studio/assets/index-Boved2Nz.js +0 -4
  164. package/dist/assets/studio/assets/index-DaI1wvdp.css +0 -2
  165. package/dist/assets/studio/assets/usePendingApprovals-BRHKM3-1.js +0 -2
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{Ut as t,at as n,tn as r,vn as i}from"./useBaseUiId-lg1teubxudgin0w2-CrAc3DRu.js";import{i as a}from"./react-CDCuUAOg.js";import{_ as o}from"./tanstack-BiJ_7SEB.js";import{t as s}from"./clamp-jcjhzx71s6wt1rnc-D0kAXd-u.js";import{n as c,t as l}from"./scrollable-b6m9ze1u7ps0q1qn-BDQyLiel.js";import{t as u}from"./getElementTransform-cuiqmjglkrz4db6c-CjP1vzKy.js";import{c as d,t as f,u as p}from"./api-Sbz4Rbu7.js";import{u as m}from"./i18n-Cjiv6Esx.js";import{f as h,m as g,x as _}from"./roles-B7USahqW.js";var v=e(a(),1);function y(e,t,n){return typeof e?.elementFromPoint==`function`?e.elementFromPoint(t,n):null}var b=40,x=10,ee=1,te=50,ne=16,re=80,S=`button,a,input,select,textarea,label,[role="button"]`;function C(e,t,n){switch(e){case`up`:return-n;case`down`:return n;case`left`:return-t;case`right`:return t;default:return 0}}function ie(e){return Number.isFinite(e)&&e>0?e:null}function w(e,t){return`translate3d(${e.x}px,${e.y}px,0) scale(${t})`}function T(e){return e%2==1}function ae(e,t,n){let r=e[n];if(typeof r==`function`)try{r.call(e,t)}catch(e){if(e&&typeof e==`object`&&`name`in e&&e.name===`NotFoundError`)return;throw e}}function oe(e){let{enabled:a,directions:o,elementRef:d,movementCssVars:f,canStart:p,ignoreSelectorWhenTouch:m=!0,ignoreScrollableAncestors:h=!1,swipeThreshold:g,onDismiss:_,onProgress:oe,onCancel:se,onSwipeStart:ce,onRelease:E,onSwipingChange:le,trackDrag:ue=!0}=e,de=S,D=o.length===1?o[0]:void 0,O=Math.max(0,typeof g==`number`?g:b),k=o.includes(`left`),A=o.includes(`right`),j=o.includes(`up`),M=o.includes(`down`),N=k||A,P=j||M,fe=v.useMemo(()=>{let e=[];return P&&e.push(`vertical`),N&&e.push(`horizontal`),e},[N,P]),[pe,F]=v.useState(void 0),[me,he]=v.useState(!1),[ge,_e]=v.useState(!1),I=v.useRef({x:0,y:0}),L=v.useRef({x:0,y:0}),R=v.useRef(null),z=v.useRef({x:0,y:0,scale:1}),B=v.useRef(void 0),ve=v.useRef(0),V=v.useRef(!1),H=v.useRef({x:0,y:0}),U=v.useRef(null),W=v.useRef(!1),ye=v.useRef(!1),be=v.useRef(null),G=v.useRef(!1),K=v.useRef(!1),xe=v.useRef({width:0,height:0}),Se=v.useRef(0),q=v.useRef(O),Ce=v.useRef(null),J=v.useRef(null),we=v.useRef(null),Te=v.useRef({x:0,y:0}),Ee=v.useRef(null),Y=v.useRef(!1),De=v.useRef(null),X=n(e=>{Y.current!==e&&(Y.current=e,he(e),le?.(e))});function Oe(e){if(!e)return;let t=d.current,n=Ce.current;if(!t||!n)return;let r=n({element:t,direction:e});q.current=Math.max(0,r)}let Z=n((e,t)=>{let n=Number.isFinite(e)?s(e,0,1):0,r=n!==Se.current,i=!1;if(t){let e=Ee.current;i=!e||e.deltaX!==t.deltaX||e.deltaY!==t.deltaY||e.direction!==t.direction}(r||i)&&(Se.current=n,t?Ee.current=t:r&&(Ee.current=null),oe?.(n,t))}),Q=n(e=>{let t=d.current;if(!ue||!t){e||(De.current=null);return}let n=t.style,r=De.current;e?(r||(De.current=[n.transition,n.transform]),n.transition=`none`):r&&([n.transition,n.transform]=r,De.current=null);let i=L.current,a=z.current,o=i.x-a.x,s=i.y-a.y;e&&(n.transform=w(i,a.scale)),n.setProperty(f.x,`${o}px`),n.setProperty(f.y,`${s}px`)});function ke(e,t){if(t===null)return;let n=we.current;if(n&&t>n.time){let r=Math.max(t-n.time,ne);Te.current={x:(e.x-n.x)/r,y:(e.y-n.y)/r}}we.current={x:e.x,y:e.y,time:t}}let Ae=v.useCallback(()=>{F(void 0),X(!1),_e(!1),Z(0),q.current=O,Ce.current=null,I.current={x:0,y:0},L.current={x:0,y:0},z.current={x:0,y:0,scale:1},B.current=void 0,ve.current=0,V.current=!1,H.current={x:0,y:0},U.current=null,W.current=!1,R.current=null,ye.current=!1,be.current=null,G.current=!1,K.current=!1,xe.current={width:0,height:0},J.current=null,we.current=null,Te.current={x:0,y:0},Ee.current=null,Q(!1)},[X,O,Q,Z]);function je(e){if(`touches`in e){let t=e.touches[0];return t?{x:t.clientX,y:t.clientY}:null}return{x:e.clientX,y:e.clientY}}function Me(e){return`touches`in e||e.pointerType===`touch`}function Ne(e,t){let n=d.current?.getRootNode();return y(n,e.x,e.y)??r(t)}function Pe(e,t){let n=n=>{let r=l(e,t,n),a=i(r);return r===a.body||r===a.documentElement?null:r};return N&&!P?n(`horizontal`):P&&!N?n(`vertical`):n(`vertical`)??n(`horizontal`)}function Fe(e,t,n){G.current=!1;let r=Me(e),a=Ne(t,e.nativeEvent),o=i(d.current).body,s=r&&o?Pe(a,o):null,l=n?.ignoreScrollableTarget??!1;if(s&&!l||(G.current=!!(s&&l),a&&a.closest(de)&&(!r||m)))return!1;let f=d.current;if(h&&f&&a&&fe.length>0&&!(n?.ignoreScrollableAncestors??!1)&&c(a,f,fe))return!1;if(V.current=!1,B.current=void 0,ve.current=0,I.current=t,J.current=ie(e.timeStamp),H.current=t,R.current=t,q.current=O,Ce.current=typeof g==`function`?g:null,f){xe.current={width:f.offsetWidth,height:f.offsetHeight},Oe(D);let t=u(f);z.current=t,L.current={x:t.x,y:t.y},ke({x:t.x,y:t.y},J.current),`touches`in e||ae(f,e.pointerId,`setPointerCapture`)}return ce?.(e.nativeEvent),X(!0),U.current=null,W.current=!0,Z(0),Q(!0),!0}function Ie(){Le(),G.current=!1,R.current=null}function Le(){ye.current=!1,be.current=null}function Re(e){if(Ie(),!Y.current)return;X(!1),U.current=null;let t=z.current;L.current={x:t.x,y:t.y},F(void 0),K.current=!1,Q(!1);let n=d.current;n&&ae(n,e.pointerId,`releasePointerCapture`),Z(0,{deltaX:0,deltaY:0,direction:void 0}),se?.(e.nativeEvent)}function ze(e,t){let n=e=>Math.sign(e)*Math.abs(e)**.5,r=(e,t,r)=>!t&&e<0||!r&&e>0?n(e):e;return{x:N?r(e,k,A):n(e),y:P?r(t,j,M):n(t)}}function Be(e,t,n){let r=(e,t,n,r,i)=>e>0&&t<=0&&r||e<0&&t>=Math.max(0,n)&&i,i=Math.abs(t),a=Math.abs(n);return P&&n!==0&&(!N||a>=i)?r(n,e.scrollTop,e.scrollHeight-e.clientHeight,M,j):N&&t!==0&&(!P||i>a)?r(t,e.scrollLeft,e.scrollWidth-e.clientWidth,A,k):null}let Ve=n(e=>{if(!a||e.defaultPrevented||e.nativeEvent.defaultPrevented||!(`touches`in e)&&e.button!==0)return;let t=je(e);t&&(ye.current=!0,be.current=t,G.current=!1,K.current=!(`touches`in e),(!p||p(t,{nativeEvent:e.nativeEvent,direction:D}))&&Fe(e,t)&&Le())});function He(e,t,n){if(!a||!Y.current)return;let i=r(e.nativeEvent);if(Me(e)&&!G.current){let t=e.currentTarget;if(Pe(i,t))return}if(`touches`in e||e.preventDefault(),W.current&&(W.current=!1,ue)){I.current=t;let n=ie(e.timeStamp);n!==null&&(J.current=n)}let o=t.x,s=t.y,c=n.x,l=n.y;(l<0&&s>H.current.y||l>0&&s<H.current.y)&&(H.current={x:H.current.x,y:s}),(c<0&&o>H.current.x||c>0&&o<H.current.x)&&(H.current={x:o,y:H.current.y});let u=o-I.current.x,d=s-I.current.y,f=s-H.current.y,p=o-H.current.x,m=U.current;m===null&&N&&P&&Math.sqrt(u*u+d*d)>=ee&&(m=Math.abs(u)>Math.abs(d)?`horizontal`:`vertical`,U.current=m);let h;if(!B.current)m===`vertical`?d>0?h=`down`:d<0&&(h=`up`):m===`horizontal`?u>0?h=`right`:u<0&&(h=`left`):h=Math.abs(u)>=Math.abs(d)?u>0?`right`:`left`:d>0?`down`:`up`,h&&(h===`left`&&k||h===`right`&&A||h===`up`&&j||h===`down`&&M)&&(B.current=h,ve.current=C(h,u,d),F(h),Oe(h));else{let e=B.current,t=C(e,p,f);t>q.current?(V.current=!1,F(e)):!(k&&A)&&!(j&&M)&&ve.current-t>=x&&(V.current=!0)}let g=ze(u,d),_=z.current.x,v=z.current.y;m===`horizontal`?N&&(_+=g.x):(m===`vertical`||N&&(_+=g.x),P&&(v+=g.y));let y=L.current,b=_!==y.x||v!==y.y;L.current={x:_,y:v},b&&Q(!0),ke({x:_,y:v},ie(e.timeStamp));let te=_-z.current.x,ne=v-z.current.y,re={deltaX:te,deltaY:ne,direction:B.current},S=0,w=D??B.current;if(w){let e=w===`left`||w===`right`?xe.current.width:xe.current.height,t=z.current.scale||1,n=C(w,te,ne);e>0&&t>0&&n>0&&(S=n/(e*t))}Z(S,re)}let $=n(e=>{if(!a)return;let t=L.current,n=z.current,r=t.x-n.x,i=t.y-n.y,s={deltaX:r,deltaY:i,direction:B.current};if(!Y.current){Ie(),Z(0,s);return}X(!1),U.current=null,Ie(),K.current=!1;let c=d.current;c&&(`touches`in e||ae(c,e.pointerId,`releasePointerCapture`));let l=r,u=i,f=J.current,p=ie(e.timeStamp),m=f!==null&&p!==null&&p>f?p-f:0,h=m>0?Math.max(m,te):0,g=h>0?l/h:0,v=h>0?u/h:0,y=Te.current.x,b=Te.current.y,x=we.current;if(x&&p!==null&&p>=x.time){let e=p-x.time;if(e<=re){let n=Math.max(e,ne),r=t.x-x.x,i=t.y-x.y,a=r/n,o=i/n;a!==0&&(y=a),o!==0&&(b=o)}else y=0,b=0}let ee=E?.({event:e.nativeEvent,direction:B.current,deltaX:l,deltaY:u,velocityX:g,velocityY:v,releaseVelocityX:y,releaseVelocityY:b}),S=typeof ee==`boolean`;if(V.current&&!S){L.current={x:n.x,y:n.y},F(void 0),Q(!1),Z(0,s);return}let w=!1,T;if(S)w=ee,T=B.current??D;else for(let e of o)if(C(e,l,u)>q.current){w=!0,T=e;break}w&&T?(F(T),_e(!0),Q(!1),_?.(e.nativeEvent,{direction:T})):(L.current={x:n.x,y:n.y},F(void 0),Q(!1),Z(0,s))}),Ue=n(e=>{let n=je(e);if(!n)return;let r=!1;if(!(`touches`in e)){let t=T(e.buttons);if(t&&(K.current=!0),e.buttons!==0&&!t){Re(e);return}if(e.buttons===0&&K.current){if(!Y.current){$(e);return}r=!0}}if(!me&&ye.current){if(!Me(e)&&(e.defaultPrevented||e.nativeEvent.defaultPrevented)){Ie();return}if(!p||p(n,{nativeEvent:e.nativeEvent,direction:D})){let r=be.current,a=!1;if(Me(e)){let o=d.current;if(r&&o){let s=Ne(n,e.nativeEvent),c=i(o).body,l=c?Pe(s,c):null;if(l&&(t(o,l)||t(l,o))){let e=Be(l,n.x-r.x,n.y-r.y);if(e===!1)return;e===!0&&(a=!0)}}}Fe(e,n,{ignoreScrollableTarget:a,ignoreScrollableAncestors:a})&&(r&&a?(Le(),I.current=r,H.current=r,R.current=r,W.current=!1):(Le(),G.current=!1))}}let a=R.current,o=a===null?{x:0,y:0}:{x:n.x-a.x,y:n.y-a.y};R.current=n,He(e,n,o),r&&!(`touches`in e)&&$(e)}),We=n((e,t)=>{Ue({touches:e.touches,currentTarget:t,nativeEvent:e,defaultPrevented:e.defaultPrevented,timeStamp:e.timeStamp})}),Ge=v.useCallback(()=>{let e=Y.current,t=L.current,n=z.current,r=t.x-n.x,i=t.y-n.y;return!e&&r===0&&i===0&&!ge?{[f.x]:`0px`,[f.y]:`0px`}:{transition:e?`none`:void 0,transform:e?w(t,n.scale):void 0,[f.x]:`${r}px`,[f.y]:`${i}px`}},[ge,f]);return{swiping:me,swipeDirection:pe,dragDismissed:ge,getPointerProps:v.useCallback(()=>a?{onPointerDown:Ve,onPointerMove:Ue,onPointerUp:$,onPointerCancel:$}:{},[a,$,Ue,Ve]),getTouchProps:v.useCallback(()=>a?{onTouchStart:Ve,onTouchMove:Ue,onTouchEnd:$,onTouchCancel:$}:{},[a,$,Ue,Ve]),moveNative:We,getDragStyles:Ge,reset:Ae}}var se=[`me`];function ce(){let e=/^\/sites\/([^/]+)/.exec(globalThis.location?.pathname??``);return e?.[1]?decodeURIComponent(e[1]):void 0}function E(){let e=o({queryKey:se,queryFn:f.me,staleTime:6e4}),t=ce(),n=e.data?.sites!==void 0,r=o({queryKey:[...se,t],queryFn:()=>f.meOnSite(t),enabled:n&&t!==void 0,staleTime:6e4,retry:!1});return n&&t&&r.data?{...e,data:r.data}:e}function le(e,t){return e?.can?.[t]!==!1}function ue(e){return le(E().data,e)}function de(){let e=o({queryKey:[`instance`],queryFn:f.instance,staleTime:3e5,retry:!1});return(0,v.useMemo)(()=>_(e.data?.roles),[e.data])}function D(){let e=o({queryKey:[`instance`],queryFn:f.instance,staleTime:3e5,retry:!1});return(0,v.useMemo)(()=>h(e.data?.invites),[e.data])}function O(e){let t=m(),n=E().data,r=de(),i=le(n,e);if(i)return{allowed:i,reason:void 0};let a=g(r,e);return{allowed:i,reason:t(`gating.abilities.${e}`,{role:t(`roles.names.${a}`),roles:t(`roles.plural.${a}`)})}}var k=[`members`];function A(e=!0){return o({queryKey:k,queryFn:f.members.list,enabled:e,staleTime:3e4,retry:(e,t)=>!d(t)&&e<1})}function j(){let e=A();return(0,v.useMemo)(()=>new Map(p(e.data).map(e=>[e.actorId,e.role])),[e.data])}function M(){let e=E().data,t=o({queryKey:[`agent-keys`],queryFn:f.agentKeys.list,retry:!1,staleTime:6e4});return(0,v.useMemo)(()=>({actorId:e?.actor.id,agentIds:new Set(p(t.data).map(e=>e.agentId).filter(e=>!!e))}),[e?.actor.id,t.data])}export{D as a,A as c,C as d,y as f,O as i,de as l,le as n,E as o,oe as p,ue as r,j as s,k as t,M as u};
2
- //# sourceMappingURL=useMe-z-wff5FW.js.map
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{Ut as t,at as n,tn as r,vn as i}from"./useBaseUiId-lg1teubxudgin0w2-CrAc3DRu.js";import{i as a}from"./react-CDCuUAOg.js";import{_ as o}from"./tanstack-BiJ_7SEB.js";import{t as s}from"./clamp-jcjhzx71s6wt1rnc-D0kAXd-u.js";import{n as c,t as l}from"./scrollable-b6m9ze1u7ps0q1qn-BDQyLiel.js";import{t as u}from"./getElementTransform-cuiqmjglkrz4db6c-CjP1vzKy.js";import{c as d,t as f,u as p}from"./api-K4ZsoxSR.js";import{u as m}from"./i18n-B-06kDA4.js";import{f as h,m as g,x as _}from"./roles-B7USahqW.js";var v=e(a(),1);function y(e,t,n){return typeof e?.elementFromPoint==`function`?e.elementFromPoint(t,n):null}var b=40,x=10,ee=1,te=50,ne=16,re=80,S=`button,a,input,select,textarea,label,[role="button"]`;function C(e,t,n){switch(e){case`up`:return-n;case`down`:return n;case`left`:return-t;case`right`:return t;default:return 0}}function ie(e){return Number.isFinite(e)&&e>0?e:null}function w(e,t){return`translate3d(${e.x}px,${e.y}px,0) scale(${t})`}function T(e){return e%2==1}function ae(e,t,n){let r=e[n];if(typeof r==`function`)try{r.call(e,t)}catch(e){if(e&&typeof e==`object`&&`name`in e&&e.name===`NotFoundError`)return;throw e}}function oe(e){let{enabled:a,directions:o,elementRef:d,movementCssVars:f,canStart:p,ignoreSelectorWhenTouch:m=!0,ignoreScrollableAncestors:h=!1,swipeThreshold:g,onDismiss:_,onProgress:oe,onCancel:se,onSwipeStart:ce,onRelease:E,onSwipingChange:le,trackDrag:ue=!0}=e,de=S,D=o.length===1?o[0]:void 0,O=Math.max(0,typeof g==`number`?g:b),k=o.includes(`left`),A=o.includes(`right`),j=o.includes(`up`),M=o.includes(`down`),N=k||A,P=j||M,fe=v.useMemo(()=>{let e=[];return P&&e.push(`vertical`),N&&e.push(`horizontal`),e},[N,P]),[pe,F]=v.useState(void 0),[me,he]=v.useState(!1),[ge,_e]=v.useState(!1),I=v.useRef({x:0,y:0}),L=v.useRef({x:0,y:0}),R=v.useRef(null),z=v.useRef({x:0,y:0,scale:1}),B=v.useRef(void 0),ve=v.useRef(0),V=v.useRef(!1),H=v.useRef({x:0,y:0}),U=v.useRef(null),W=v.useRef(!1),ye=v.useRef(!1),be=v.useRef(null),G=v.useRef(!1),K=v.useRef(!1),xe=v.useRef({width:0,height:0}),Se=v.useRef(0),q=v.useRef(O),Ce=v.useRef(null),J=v.useRef(null),we=v.useRef(null),Te=v.useRef({x:0,y:0}),Ee=v.useRef(null),Y=v.useRef(!1),De=v.useRef(null),X=n(e=>{Y.current!==e&&(Y.current=e,he(e),le?.(e))});function Oe(e){if(!e)return;let t=d.current,n=Ce.current;if(!t||!n)return;let r=n({element:t,direction:e});q.current=Math.max(0,r)}let Z=n((e,t)=>{let n=Number.isFinite(e)?s(e,0,1):0,r=n!==Se.current,i=!1;if(t){let e=Ee.current;i=!e||e.deltaX!==t.deltaX||e.deltaY!==t.deltaY||e.direction!==t.direction}(r||i)&&(Se.current=n,t?Ee.current=t:r&&(Ee.current=null),oe?.(n,t))}),Q=n(e=>{let t=d.current;if(!ue||!t){e||(De.current=null);return}let n=t.style,r=De.current;e?(r||(De.current=[n.transition,n.transform]),n.transition=`none`):r&&([n.transition,n.transform]=r,De.current=null);let i=L.current,a=z.current,o=i.x-a.x,s=i.y-a.y;e&&(n.transform=w(i,a.scale)),n.setProperty(f.x,`${o}px`),n.setProperty(f.y,`${s}px`)});function ke(e,t){if(t===null)return;let n=we.current;if(n&&t>n.time){let r=Math.max(t-n.time,ne);Te.current={x:(e.x-n.x)/r,y:(e.y-n.y)/r}}we.current={x:e.x,y:e.y,time:t}}let Ae=v.useCallback(()=>{F(void 0),X(!1),_e(!1),Z(0),q.current=O,Ce.current=null,I.current={x:0,y:0},L.current={x:0,y:0},z.current={x:0,y:0,scale:1},B.current=void 0,ve.current=0,V.current=!1,H.current={x:0,y:0},U.current=null,W.current=!1,R.current=null,ye.current=!1,be.current=null,G.current=!1,K.current=!1,xe.current={width:0,height:0},J.current=null,we.current=null,Te.current={x:0,y:0},Ee.current=null,Q(!1)},[X,O,Q,Z]);function je(e){if(`touches`in e){let t=e.touches[0];return t?{x:t.clientX,y:t.clientY}:null}return{x:e.clientX,y:e.clientY}}function Me(e){return`touches`in e||e.pointerType===`touch`}function Ne(e,t){let n=d.current?.getRootNode();return y(n,e.x,e.y)??r(t)}function Pe(e,t){let n=n=>{let r=l(e,t,n),a=i(r);return r===a.body||r===a.documentElement?null:r};return N&&!P?n(`horizontal`):P&&!N?n(`vertical`):n(`vertical`)??n(`horizontal`)}function Fe(e,t,n){G.current=!1;let r=Me(e),a=Ne(t,e.nativeEvent),o=i(d.current).body,s=r&&o?Pe(a,o):null,l=n?.ignoreScrollableTarget??!1;if(s&&!l||(G.current=!!(s&&l),a&&a.closest(de)&&(!r||m)))return!1;let f=d.current;if(h&&f&&a&&fe.length>0&&!(n?.ignoreScrollableAncestors??!1)&&c(a,f,fe))return!1;if(V.current=!1,B.current=void 0,ve.current=0,I.current=t,J.current=ie(e.timeStamp),H.current=t,R.current=t,q.current=O,Ce.current=typeof g==`function`?g:null,f){xe.current={width:f.offsetWidth,height:f.offsetHeight},Oe(D);let t=u(f);z.current=t,L.current={x:t.x,y:t.y},ke({x:t.x,y:t.y},J.current),`touches`in e||ae(f,e.pointerId,`setPointerCapture`)}return ce?.(e.nativeEvent),X(!0),U.current=null,W.current=!0,Z(0),Q(!0),!0}function Ie(){Le(),G.current=!1,R.current=null}function Le(){ye.current=!1,be.current=null}function Re(e){if(Ie(),!Y.current)return;X(!1),U.current=null;let t=z.current;L.current={x:t.x,y:t.y},F(void 0),K.current=!1,Q(!1);let n=d.current;n&&ae(n,e.pointerId,`releasePointerCapture`),Z(0,{deltaX:0,deltaY:0,direction:void 0}),se?.(e.nativeEvent)}function ze(e,t){let n=e=>Math.sign(e)*Math.abs(e)**.5,r=(e,t,r)=>!t&&e<0||!r&&e>0?n(e):e;return{x:N?r(e,k,A):n(e),y:P?r(t,j,M):n(t)}}function Be(e,t,n){let r=(e,t,n,r,i)=>e>0&&t<=0&&r||e<0&&t>=Math.max(0,n)&&i,i=Math.abs(t),a=Math.abs(n);return P&&n!==0&&(!N||a>=i)?r(n,e.scrollTop,e.scrollHeight-e.clientHeight,M,j):N&&t!==0&&(!P||i>a)?r(t,e.scrollLeft,e.scrollWidth-e.clientWidth,A,k):null}let Ve=n(e=>{if(!a||e.defaultPrevented||e.nativeEvent.defaultPrevented||!(`touches`in e)&&e.button!==0)return;let t=je(e);t&&(ye.current=!0,be.current=t,G.current=!1,K.current=!(`touches`in e),(!p||p(t,{nativeEvent:e.nativeEvent,direction:D}))&&Fe(e,t)&&Le())});function He(e,t,n){if(!a||!Y.current)return;let i=r(e.nativeEvent);if(Me(e)&&!G.current){let t=e.currentTarget;if(Pe(i,t))return}if(`touches`in e||e.preventDefault(),W.current&&(W.current=!1,ue)){I.current=t;let n=ie(e.timeStamp);n!==null&&(J.current=n)}let o=t.x,s=t.y,c=n.x,l=n.y;(l<0&&s>H.current.y||l>0&&s<H.current.y)&&(H.current={x:H.current.x,y:s}),(c<0&&o>H.current.x||c>0&&o<H.current.x)&&(H.current={x:o,y:H.current.y});let u=o-I.current.x,d=s-I.current.y,f=s-H.current.y,p=o-H.current.x,m=U.current;m===null&&N&&P&&Math.sqrt(u*u+d*d)>=ee&&(m=Math.abs(u)>Math.abs(d)?`horizontal`:`vertical`,U.current=m);let h;if(!B.current)m===`vertical`?d>0?h=`down`:d<0&&(h=`up`):m===`horizontal`?u>0?h=`right`:u<0&&(h=`left`):h=Math.abs(u)>=Math.abs(d)?u>0?`right`:`left`:d>0?`down`:`up`,h&&(h===`left`&&k||h===`right`&&A||h===`up`&&j||h===`down`&&M)&&(B.current=h,ve.current=C(h,u,d),F(h),Oe(h));else{let e=B.current,t=C(e,p,f);t>q.current?(V.current=!1,F(e)):!(k&&A)&&!(j&&M)&&ve.current-t>=x&&(V.current=!0)}let g=ze(u,d),_=z.current.x,v=z.current.y;m===`horizontal`?N&&(_+=g.x):(m===`vertical`||N&&(_+=g.x),P&&(v+=g.y));let y=L.current,b=_!==y.x||v!==y.y;L.current={x:_,y:v},b&&Q(!0),ke({x:_,y:v},ie(e.timeStamp));let te=_-z.current.x,ne=v-z.current.y,re={deltaX:te,deltaY:ne,direction:B.current},S=0,w=D??B.current;if(w){let e=w===`left`||w===`right`?xe.current.width:xe.current.height,t=z.current.scale||1,n=C(w,te,ne);e>0&&t>0&&n>0&&(S=n/(e*t))}Z(S,re)}let $=n(e=>{if(!a)return;let t=L.current,n=z.current,r=t.x-n.x,i=t.y-n.y,s={deltaX:r,deltaY:i,direction:B.current};if(!Y.current){Ie(),Z(0,s);return}X(!1),U.current=null,Ie(),K.current=!1;let c=d.current;c&&(`touches`in e||ae(c,e.pointerId,`releasePointerCapture`));let l=r,u=i,f=J.current,p=ie(e.timeStamp),m=f!==null&&p!==null&&p>f?p-f:0,h=m>0?Math.max(m,te):0,g=h>0?l/h:0,v=h>0?u/h:0,y=Te.current.x,b=Te.current.y,x=we.current;if(x&&p!==null&&p>=x.time){let e=p-x.time;if(e<=re){let n=Math.max(e,ne),r=t.x-x.x,i=t.y-x.y,a=r/n,o=i/n;a!==0&&(y=a),o!==0&&(b=o)}else y=0,b=0}let ee=E?.({event:e.nativeEvent,direction:B.current,deltaX:l,deltaY:u,velocityX:g,velocityY:v,releaseVelocityX:y,releaseVelocityY:b}),S=typeof ee==`boolean`;if(V.current&&!S){L.current={x:n.x,y:n.y},F(void 0),Q(!1),Z(0,s);return}let w=!1,T;if(S)w=ee,T=B.current??D;else for(let e of o)if(C(e,l,u)>q.current){w=!0,T=e;break}w&&T?(F(T),_e(!0),Q(!1),_?.(e.nativeEvent,{direction:T})):(L.current={x:n.x,y:n.y},F(void 0),Q(!1),Z(0,s))}),Ue=n(e=>{let n=je(e);if(!n)return;let r=!1;if(!(`touches`in e)){let t=T(e.buttons);if(t&&(K.current=!0),e.buttons!==0&&!t){Re(e);return}if(e.buttons===0&&K.current){if(!Y.current){$(e);return}r=!0}}if(!me&&ye.current){if(!Me(e)&&(e.defaultPrevented||e.nativeEvent.defaultPrevented)){Ie();return}if(!p||p(n,{nativeEvent:e.nativeEvent,direction:D})){let r=be.current,a=!1;if(Me(e)){let o=d.current;if(r&&o){let s=Ne(n,e.nativeEvent),c=i(o).body,l=c?Pe(s,c):null;if(l&&(t(o,l)||t(l,o))){let e=Be(l,n.x-r.x,n.y-r.y);if(e===!1)return;e===!0&&(a=!0)}}}Fe(e,n,{ignoreScrollableTarget:a,ignoreScrollableAncestors:a})&&(r&&a?(Le(),I.current=r,H.current=r,R.current=r,W.current=!1):(Le(),G.current=!1))}}let a=R.current,o=a===null?{x:0,y:0}:{x:n.x-a.x,y:n.y-a.y};R.current=n,He(e,n,o),r&&!(`touches`in e)&&$(e)}),We=n((e,t)=>{Ue({touches:e.touches,currentTarget:t,nativeEvent:e,defaultPrevented:e.defaultPrevented,timeStamp:e.timeStamp})}),Ge=v.useCallback(()=>{let e=Y.current,t=L.current,n=z.current,r=t.x-n.x,i=t.y-n.y;return!e&&r===0&&i===0&&!ge?{[f.x]:`0px`,[f.y]:`0px`}:{transition:e?`none`:void 0,transform:e?w(t,n.scale):void 0,[f.x]:`${r}px`,[f.y]:`${i}px`}},[ge,f]);return{swiping:me,swipeDirection:pe,dragDismissed:ge,getPointerProps:v.useCallback(()=>a?{onPointerDown:Ve,onPointerMove:Ue,onPointerUp:$,onPointerCancel:$}:{},[a,$,Ue,Ve]),getTouchProps:v.useCallback(()=>a?{onTouchStart:Ve,onTouchMove:Ue,onTouchEnd:$,onTouchCancel:$}:{},[a,$,Ue,Ve]),moveNative:We,getDragStyles:Ge,reset:Ae}}var se=[`me`];function ce(){let e=/^\/sites\/([^/]+)/.exec(globalThis.location?.pathname??``);return e?.[1]?decodeURIComponent(e[1]):void 0}function E(){let e=o({queryKey:se,queryFn:f.me,staleTime:6e4}),t=ce(),n=e.data?.sites!==void 0,r=o({queryKey:[...se,t],queryFn:()=>f.meOnSite(t),enabled:n&&t!==void 0,staleTime:6e4,retry:!1});return n&&t&&r.data?{...e,data:r.data}:e}function le(e,t){return e?.can?.[t]!==!1}function ue(e){return le(E().data,e)}function de(){let e=o({queryKey:[`instance`],queryFn:f.instance,staleTime:3e5,retry:!1});return(0,v.useMemo)(()=>_(e.data?.roles),[e.data])}function D(){let e=o({queryKey:[`instance`],queryFn:f.instance,staleTime:3e5,retry:!1});return(0,v.useMemo)(()=>h(e.data?.invites),[e.data])}function O(e){let t=m(),n=E().data,r=de(),i=le(n,e);if(i)return{allowed:i,reason:void 0};let a=g(r,e);return{allowed:i,reason:t(`gating.abilities.${e}`,{role:t(`roles.names.${a}`),roles:t(`roles.plural.${a}`)})}}var k=[`members`];function A(e=!0){return o({queryKey:k,queryFn:f.members.list,enabled:e,staleTime:3e4,retry:(e,t)=>!d(t)&&e<1})}function j(){let e=A();return(0,v.useMemo)(()=>new Map(p(e.data).map(e=>[e.actorId,e.role])),[e.data])}function M(){let e=E().data,t=o({queryKey:[`agent-keys`],queryFn:f.agentKeys.list,retry:!1,staleTime:6e4});return(0,v.useMemo)(()=>({actorId:e?.actor.id,agentIds:new Set(p(t.data).map(e=>e.agentId).filter(e=>!!e))}),[e?.actor.id,t.data])}export{D as a,A as c,C as d,y as f,O as i,de as l,le as n,E as o,oe as p,ue as r,j as s,k as t,M as u};
2
+ //# sourceMappingURL=useMe-Cx8D2_vf.js.map
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./react-CDCuUAOg.js";import{c as n}from"./i18n-Cjiv6Esx.js";var r=e(t(),1);function i(e,t,i=25){let[a,o]=(0,r.useState)(``),[s,c]=(0,r.useState)(1),{locale:l}=n(),u=(0,r.useCallback)(e=>e.toLocaleLowerCase(l),[l]),d=(0,r.useMemo)(()=>{let n=u(a.trim());return(e??[]).filter(e=>!n||t(e,n,u))},[e,a,t,u]),f=d.slice((s-1)*i,s*i);return{search:a,setSearch:e=>{o(e),c(1)},page:s,setPage:c,perPage:i,total:d.length,pageItems:f}}export{i as t};
2
- //# sourceMappingURL=usePaging-BiNrjkE2.js.map
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./react-CDCuUAOg.js";import{c as n}from"./i18n-B-06kDA4.js";var r=e(t(),1);function i(e,t,i=25){let[a,o]=(0,r.useState)(``),[s,c]=(0,r.useState)(1),{locale:l}=n(),u=(0,r.useCallback)(e=>e.toLocaleLowerCase(l),[l]),d=(0,r.useMemo)(()=>{let n=u(a.trim());return(e??[]).filter(e=>!n||t(e,n,u))},[e,a,t,u]),f=d.slice((s-1)*i,s*i);return{search:a,setSearch:e=>{o(e),c(1)},page:s,setPage:c,perPage:i,total:d.length,pageItems:f}}export{i as t};
2
+ //# sourceMappingURL=usePaging-pE8aE7JW.js.map
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./react-CDCuUAOg.js";import{_ as n,v as r}from"./tanstack-BiJ_7SEB.js";import{c as i,t as a}from"./api-K4ZsoxSR.js";import{f as o,t as s}from"./approvals-0AbtJUeH.js";var c=e(t(),1),l=e=>[`approvals`,e],u=e=>({queryKey:[...l(e),`pending`],queryFn:()=>a.approvals.list(e,`pending`),retry:(e,t)=>!i(t)&&e<1});function d(e,t=!0){return n({...u(e),enabled:t,refetchInterval:e=>!i(e.state.error)&&s})}function f(){let e=n({queryKey:[`instance`],queryFn:a.instance,staleTime:3e5,retry:!1}).data?.features.elevationRequests===!0,t=n({queryKey:[`sites`],queryFn:a.sites.list,enabled:e}),i=e?(t.data??[]).map(e=>e.id):[],s=r({queries:i.map(t=>({...u(t),enabled:e})),combine:e=>e.map((e,t)=>({siteId:i[t]??``,items:e.data}))});return(0,c.useMemo)(()=>o(s),[s])}export{d as n,f as r,l as t};
2
+ //# sourceMappingURL=usePendingApprovals-B6g17X7P.js.map
@@ -1,6 +1,6 @@
1
- var e={app:{name:`Cloudhal Studio`,tagline:`登录以管理你的站点。`},common:{save:`保存`,cancel:`取消`,delete:`删除`,publish:`发布`,rollBack:`回滚`,loading:`加载中…`,signOut:`退出登录`,live:`线上`,language:`语言`,more:`更多`,rev:`版本 {rev}`,close:`关闭`,optional:`(可选)`,moreInformation:`更多信息`,copy:`复制`,copied:`已复制`,retry:`重试`,discard:`放弃`,saveChanges:`保存更改`,unsaved:`有未保存的更改`,onThisPage:`本页内容`,on:`开`,off:`关`,deleteResource:{title:`删除 {name}`,warning:`此操作无法撤销。这将永久删除{type} {name}。`,typeToConfirm:`输入 {name} 以确认:`,copy:`将 {name} 复制到剪贴板`,confirmInput:`输入 {name} 以确认删除`,delete:`删除{type}`}},theme:{label:`主题`,current:`主题:{name}`,light:`浅色`,dark:`深色`,system:`跟随系统`},auth:{signInTitle:`欢迎回来`,signUpTitle:`创建你的账户`,signUpDescription:`新 Studio 上的第一个账户将成为其所有者。`,footer:`开源 · Apache-2.0`,signIn:`登录`,createAccount:`创建账户`,name:`名称`,email:`电子邮件`,password:`密码`,passwordHint:`至少 8 个字符`,failed:`登录失败`,setupTitle:`设置此 Studio`,setupDescription:"你打开了 `cloudhal deploy` 提供的设置链接。你现在创建的账户将成为所有者;之后注册将关闭。"},sites:{title:`站点`,description:`每个站点都是由页面和内容组成的图,智能体在你的批准下进行操作。`,columns:{project:`项目`,name:`名称`,slug:`别名`,pages:`页面`,status:`状态`},notPublished:`未发布`,empty:`还没有站点`,emptyDescription:`从终端创建一个,它就会显示在这里。`,search:`搜索站点`,usageTitle:`从终端`,usageDescription:`Studio 中的一切也都是 CLI 命令,因此智能体和脚本可以完成同样的工作。`,open:`打开`},pageHeaders:{media:{title:`媒体`,description:`此站点的图片、视频、音频、文档和数据文件。新文件会在下次发布时上线。`},pages:{title:`页面`,description:`此站点的路由。每个页面都是由主题渲染的一组区块。`},articles:{title:`文章`,description:`由人或智能体撰写、随站点发布的帖子和其他条目。`},snapshots:{title:`快照`,description:`站点的冻结版本。发布会让线上站点指向某个快照;回滚会让它指向更早的快照。`},activity:{title:`动态`,description:`智能体或人员在此站点上进行的每次工具调用,以及策略决定。`},approvals:{title:`审批`,description:`智能体的发布、回滚和删除,它们在手动模式下的编辑,它们对更多自主权的请求,以及人员的角色无法单独完成的发布,都会在这里等待,直到有决定权的人处理。`},settings:{title:`设置`,description:`此站点的名称、语言、域名和预览链接。`},agents:{title:`智能体`,description:`密钥让智能体、CI 任务和 MCP 客户端能在你的站点上工作。密钥的模式决定了智能体能自行做什么、哪些需要等你处理。`},skills:{title:`技能`,description:`智能体通过 MCP 读取的操作手册。在技能下进行的调用只会获得它声明的权限范围,其中列出的工具始终需要等待人工处理。`},account:{title:`账户`,description:`你的个人资料、登录方式,以及还有谁可以进入此 Studio。`},taxonomy:{title:`分类和标签`,description:`文章如何归档和被找到。重命名、合并或停用都是一次更改、一个快照,并会留下重定向。`},navigation:{title:`导航`,description:`访客用来找路的菜单:页眉、页脚以及主题放置的其他菜单。菜单项指向页面和分类,因此重命名永远不会破坏它们。`},translations:{title:`翻译`,description:`按语言查看每个页面和文章:缺失的、过时的,或等待人工审核的。`},redirects:{title:`重定向`,description:`旧地址及其将访客引向的位置。别名更改、合并和停用会自动添加重定向;你也可以自行添加。`},team:{title:`团队`,description:`谁在此 Studio 上工作以及担任什么角色。成员通过一次性邀请链接加入;他们的智能体永远不会超出他们的权限。`}},nav:{media:`媒体`,comments:`评论`,overview:`概览`,content:`内容`,history:`历史`,automation:`自动化`,account:`账户`,home:`概览`,pages:`页面`,articles:`文章`,snapshots:`快照`,agents:`智能体`,allSites:`所有站点`,sites:`站点`,switchSite:`切换站点`,search:`搜索或运行命令…`,shortcutHint:`⌘K`,shortcutHintCtrl:`Ctrl K`,agentSkills:`技能`,schedules:`计划`,activity:`动态`,agentKeys:`密钥和 MCP`,approvals:`审批`,settings:`设置`,siteSettings:`设置`,taxonomy:`分类和标签`,navigation:`导航`,redirects:`重定向`,translations:`翻译`,team:`团队`,analytics:`分析`},commands:{goMedia:`前往媒体`,goComments:`前往评论`,goAnalytics:`前往分析`,placeholder:`输入命令…`,empty:`没有匹配的命令`,hintNavigate:`导航`,hintSelect:`运行`,hintClose:`关闭`,goOverview:`前往概览`,goArticles:`前往文章`,goSnapshots:`前往快照`,newArticle:`新建文章`,createSnapshot:`创建快照`,publishSite:`创建快照并发布站点`,goActivity:`前往动态`,goAgents:`前往智能体`,createAgentKey:`创建智能体密钥`,goSkills:`前往技能`,goAccount:`前往账户设置`,goTeam:`前往团队`,goSiteSettings:`前往站点设置`,goApprovals:`前往审批`,goTaxonomy:`前往分类和标签`,goNavigation:`前往导航菜单`,goRedirects:`前往重定向`,goSchedules:`前往计划`,newSchedule:`定时发布…`,searchPlaceholder:`搜索内容或运行命令…`,searchEmpty:`没有匹配的命令或内容`,hintNewTab:`新标签页`,groups:{commands:`命令`,entry:`文章`,page:`页面`,term:`分类和标签`,asset:`媒体`,menu:`菜单项`,redirect:`重定向`}},overview:{commentsWaiting:[[2,`count`,{other:[[4],` 条评论正在等待`]}]],commentsWaitingDescription:`在有人批准之前,读者看不到它们。`,liveSnapshotLabel:`线上快照`,notPublished:`尚未发布`,newPage:`新建页面`,pages:`页面`,columns:{title:`标题`,path:`路径`,status:`状态`,updated:`更新时间`},empty:`还没有页面`,emptyDescription:`创建第一个页面,或让智能体搭建一个。`,search:`搜索页面`,status:`状态`,live:`线上`,recentArticles:`最近的文章`,viewAll:`查看全部`,cli:`从终端`},articles:{description:`“posts”集合中的帖子。`,newArticle:`新建文章`,empty:`还没有文章`,emptyDescription:`写第一篇,或让智能体来写。`,untitled:`无标题`,columns:{title:`标题`,author:`作者`,status:`状态`,updated:`更新时间`},search:`搜索文章`,none:`—`,noCategory:`无分类`,primary:`主分类`,facets:{label:`筛选文章`,category:`按分类筛选`,tag:`按标签筛选`,allCategories:`全部{label}`,allTags:`全部{label}`,clear:`清除筛选`,empty:`没有符合这些筛选条件的文章`,emptyDescription:`试试其他分类或标签,或清除筛选。`}},articleCorrections:{title:`更正`,description:`读者会在文章末尾看到这些内容,最新的在前,最新一条即为文章的更新日期。更正一经发布就会保留:有发布权限的人可以改写,但没有人能删除。`,empty:`没有更正`,emptyDescription:`已发布的报道发生实质性变化时,请添加一条。`,kind:`类型`,kinds:{correction:`更正`,clarification:`澄清`,update:`更新`},note:`变更内容`,noteHint:`一两句话。支持 Markdown 链接和强调。`,add:`添加更正`,unsaved:`未保存`,remove:`移除更正`,pending:`保存文章即可添加;它会在下次发布时上线。`},articleTerms:{title:`分类和标签`,description:`分类用于归档文章,标签用于描述文章。主分类会显示在面包屑导航和文章的元数据中。`,legacyDescription:`此站点仍以纯文本保存标签。将它们迁移到分类和标签,即可获得名称、归档和重定向。`,legacyTitle:`此文章的旧标签`,legacyPending:`保存后,{tags} 将变为标签。`,required:`请选择一个{singular},才能将此文章提交审核或发布。`,requiredToast:`请先选择一个{singular}`,slugRedirect:`小写,用连字符连接。此文章已发布:新别名会从旧地址留下重定向。`},pickers:{under:`位于 {path}`,clear:`清除`,showOptions:`显示选项`,noMatch:`没有匹配项`,remove:`移除 {name}`,atMost:`最多 {max} 个。移除一个才能添加新的。`,categoryHint:`最多 {max} 个。输入以搜索名称和同义词。`,categoryRequiredHint:`提交审核或发布时必填。最多 {max} 个。`,categoryPlaceholder:`选择分类…`,noCategory:`没有匹配的分类。请在“分类和标签”中添加分类。`,primary:`主分类`,primaryHint:`显示在面包屑导航中,并用作文章的栏目。`,primaryNone:`选择一个…`,tagHint:`最多 {max} 个。已有标签排在前面,同义词也能找到它们。`,tagPlaceholder:`添加标签…`,tagFull:`已达到标签上限`,viaSynonym:`同义词“{value}”`,similar:`相似`,create:`创建“{name}”`,createNoSlug:`此名称没有可用于地址的字母或数字。请换个名称。`,nearDuplicate:`看起来与 {names} 相似。如果意思相同,请使用已有标签。`,proposedChip:`由智能体提议。有人批准后它才会获得公开页面。`},editor:{schedule:`计划…`,locked:`已有计划的发布批次锁定了此内容。取消计划后即可编辑。`,heroNoImage:`无首屏图片`,status:`状态`,title:`标题`,slug:`别名`,summary:`摘要`,summaryHint:`用作搜索结果和分享链接中的元描述。`,body:`正文(Markdown)`,tags:`标签`,tagsHint:`以逗号分隔`,path:`路径`,pathHint:`绝对路径,小写,末尾不带斜杠`,sections:`区块`,addSection:`添加区块`,noSections:`还没有区块`,noSectionsDescription:`添加首屏、富文本、图片或内容列表。`,remove:`移除`,moveUp:`上移`,moveDown:`下移`,heading:`标题`,subheading:`副标题`,caption:`说明文字`,collection:`集合`,limit:`数量上限`,sort:`排序`,sortNewest:`最新`,sortOldest:`最早`,sortTitle:`标题`,saved:`已保存`,sendToReview:`提交审核`,submitForReview:`提交审核`,backToDraft:`退回草稿`,archive:`归档`,restore:`恢复为草稿`,publishArticleTitle:`发布此文章?`,publishArticleDescription:`下次站点创建快照并发布时,它将在站点上可见。`,publishPageTitle:`发布此页面?`,deleteArticle:`删除文章`,deletePage:`删除页面`,article:`文章`,page:`页面`,slugHint:`小写,用连字符连接;将成为 URL。`,metadata:`详情`,moreActions:`更多操作`,unpublish:`取消发布(退回草稿)`,duplicate:`复制`,duplicated:`已创建副本`,copyTitle:`{title}(副本)`,dangerZone:`危险区域`,deletePageTitle:`删除此页面`,deletePageHint:`移除页面及其区块。已发布的快照会保留其副本。`,deleteArticleTitle:`删除此文章`,deleteArticleHint:`从站点移除此文章。已发布的快照会保留其副本。`,removeSectionTitle:`移除此区块?`,removeSectionDescription:`{kind}区块将从草稿中移除。只有保存后页面才会更改。`,sectionKinds:{hero:`首屏`,richText:`富文本`,image:`图片`,contentList:`内容列表`,component:`块`,surface:`生成的界面`},buildLive:`实时构建`,buildLiveHint:`实时观看智能体构建此页面`,surface:{title:`生成的界面 · {count} 个组件`,hint:`由主题的组件构建。在此更改文本;如需更改布局,请询问 AI。`,json:`生成的界面数据`,showJson:`显示 JSON`,outline:`此区块的组件`,expand:`显示 {title} 内部的内容`,collapse:`隐藏 {title} 内部的内容`,changeWithAi:`用 AI 更改`,editTexts:`编辑 {title} 的文本`,changePart:`用 AI 更改 {title}`,bound:`显示 {path}`,computed:`计算值({fn})`,notPlaced:`不在页面上`},blocks:{menu:`块`,unknown:`未知块 · {type}`,unknownHint:`此部署没有该名称的块类型(主题可能已更改)。它会原样保留,不会显示在站点上。`,item:`项目 {n}`,addItem:`添加项目`,removeItem:`移除项目`,moveUp:`上移`,moveDown:`下移`,values:{tone:{info:`信息`,success:`成功`,warning:`警告`,danger:`危险`},variant:{primary:`主要`,secondary:`次要`}}},bodyTitle:`正文`,markdown:`Markdown`,words:[[2,`count`,{other:[[4],` 字`]}]],id:`ID`,revision:`版本`,locale:`语言`,author:`作者`,updatedAt:`更新时间`,publishedAt:`发布时间`},seo:{counter:`{count} / {max}`,fixErrors:`保存前请修正突出显示的字段。`,cover:{title:`封面图片`,description:`显示在文章上方,并在分享链接时用作配图。从媒体库中选择,或在那里上传新图片。`,url:`图片 URL`,urlHint:`https:// 地址,或你站点上的路径,例如 /images/cover.jpg。`,urlPlaceholder:`https://… 或 /images/cover.jpg`,alt:`替代文本`,altHint:`描述图片显示的内容。屏幕阅读器会为看不到图片的人朗读,搜索引擎也用它来理解图片。`,altPlaceholder:`黄昏时平静海面上的灯塔`,remove:`移除图片`,empty:`无封面图片`,loading:`正在加载图片…`,broken:`无法加载此图片`,brokenHint:`请检查地址,并确认图片是公开的。`,brokenPathHost:`站点路径从 {host} 加载。请检查路径,或确认站点已部署。`,brokenPathNoDomain:`站点路径从主域名加载。请在“设置 › 域名”中添加主域名,以便在此查看。`,size:`{width} × {height} 像素`,errors:{required:`请输入图片地址,或移除图片。`,insecure:`请使用 https://。浏览器会在安全站点上阻止 http 图片。`,invalid:`请输入 https:// 地址或以 / 开头的路径。`,tooLong:`最多 2,048 个字符。`,altRequired:`请描述图片。封面图片必须有替代文本。`,altTooLong:`最多 500 个字符。`}},preview:{title:`搜索和社交预览`,description:`此文章在搜索结果中和链接被分享时的样子。摘要用作元描述,封面图片用作分享图片。`,search:`搜索结果`,social:`社交卡片`,noSummary:`还没有摘要。搜索引擎和社交网络会从文章中选取文本。`,noDescription:`没有元描述。搜索引擎会从页面中选取文本。`},checks:{label:`检查`,title:`标题`,titleGood:`{count} 个字符。适合搜索结果显示。`,titleLong:`{count} 个字符。搜索结果会在约 60 个字符后截断标题。`,titleMissing:`请添加标题。`,description:`元描述`,summary:`元描述(摘要)`,descriptionGood:`{count} 个字符。适合搜索结果显示。`,descriptionShort:`{count} 个字符。过短的描述常被替换;建议 50–160 个字符。`,descriptionLong:`{count} 个字符。搜索结果会在约 160 个字符后截断。`,summaryMissing:`请添加摘要。没有摘要时,搜索引擎会从文章中选取文本。`,image:`分享图片`,imageSet:`使用封面图片。`,imageMissing:`没有封面图片,分享的链接不会显示配图。`,imageBroken:`封面图片无法加载。`,status:{good:`良好`,short:`过短`,long:`过长`,missing:`缺失`,broken:`损坏`}},page:{title:`搜索引擎和分享`,description:`此页面在搜索结果中和链接被分享时的样子。`,seoTitle:`SEO 标题`,seoTitleHint:`留空则使用页面标题。`,seoDescription:`元描述`,seoDescriptionHint:`用一两句话说明页面提供的内容。建议 50–160 个字符。`,seoDescriptionPlaceholder:`访客在此页面上能找到什么`,noindex:`对搜索引擎隐藏`,noindexHint:`添加 noindex 标记。页面仍可通过链接访问。`,noindexWarningTitle:`此页面已对搜索引擎隐藏`,noindexWarning:`会要求搜索引擎不要收录它,已收录的页面会在其下次抓取后移除。对于希望人们通过搜索找到的页面,请保持关闭。`,advanced:`高级`,custom:`自定义`,canonical:`规范 URL`,canonicalHintHost:`通常留空:使用页面在 {host} 上的地址。仅当此内容的原始版本位于其他地址时才设置。`,canonicalHint:`通常留空:使用页面在站点主域名上的地址。仅当此内容的原始版本位于其他地址时才设置。`,canonicalPlaceholder:`https://example.com/original-page`,searchPreview:`搜索预览`,hidden:`已对搜索隐藏`,errors:{titleTooLong:`最多 300 个字符。`,descriptionTooLong:`最多 500 个字符。`,canonicalInvalid:`请输入以 https:// 开头的完整地址。`,canonicalTooLong:`最多 2,048 个字符。`}},noindexBadge:`noindex`,noindexBadgeHint:`已对搜索引擎隐藏。请在页面的搜索设置中更改。`,noCover:`无封面图片`,archive:{seoTitleHint:`留空则使用分类项名称。`,noindexHint:`为归档添加 noindex 标记。它仍可通过链接访问。`,noindexWarningTitle:`此归档已对搜索引擎隐藏`,noindexWarning:`会要求搜索引擎不要收录它,并将其移出站点地图。对于希望人们通过搜索找到的主题,请保持关闭。`}},status:{draft:`草稿`,review:`审核中`,published:`已发布`,archived:`已归档`},site:{publish:`发布`,publishDescription:`记录当前图的快照,并将其设为线上版本。`,description:`/{slug} · {locale}`,rowMenu:`更多操作`},snapshots:{description:`每个快照都不可变;发布会让站点指向其中一个。`,label:`标签`,labelPlaceholder:`例如:早间版`,empty:`还没有快照`,emptyDescription:`创建快照以冻结站点的当前状态。`,created:`快照已创建`,published:`已发布`,publishedSnapshot:`快照已发布`,rolledBack:`已回滚`,failed:`失败`,rollbackTitle:`回滚线上站点?`,publishTitle:`发布到线上站点?`,createDescription:`将记录当前图的快照,并使其成为线上版本。`,becomesLive:`{name} 将成为线上版本。`,fromStudio:`来自 Studio 的快照`,publishedFromStudio:`从 Studio 发布`,compare:`比较`,create:`创建快照`,createTitle:`创建快照`,createIntro:`冻结站点当前的页面、文章和设置。快照一经创建便不会改变。`,labelDescription:`可选。在列表和动态中代替原因显示。`,afterCreate:`创建后`,keepOption:`保持线上站点不变`,keepOptionDescription:`仅保存快照。之后可在此列表中发布或比较。`,publishOption:`发布到线上站点`,publishOptionDescription:`快照将成为线上版本。上线前你会先确认。`,continueToPublish:`继续发布`,search:`搜索快照`,noMatches:`没有匹配的快照`,noMatchesDescription:`试试其他标签或快照 ID。`,actions:`操作`,columns:{snapshot:`快照`,actor:`创建者`,changes:`更改`,when:`创建时间`},reasons:{manual:`手动`,agentMutation:`智能体更改`,publish:`发布`,rollback:`回滚`,scheduled:`定时发布`,import:`导入`}},errors:{title:`出了点问题`,conflict:`在你打开后,有人更改了此内容。请重新加载以获取最新版本。`,api:{not_found:`它已不在这里。可能有人删除了它。`,forbidden:`你没有执行此操作的权限。`,unauthorized:`你的会话已结束。请重新登录。`,rank:`你的角色不允许此操作。`,not_own:`你只能对自己的内容执行此操作。`,missing_scope:`此密钥或会话不允许执行此操作。`,rate_limited:`请求过多。请稍等片刻再试。`,internal:`服务器出了点问题。请重试。`,invalid_json:`服务器返回了 Studio 无法读取的响应。请重试。`,unique:`已存在同名或同地址的内容。`,slug_taken:`此地址已被使用。`,path_conflict:`已有其他页面或文章使用此路径。`,in_use:`它仍在使用中,因此无法移除。`,quota_exceeded:`存储配额已满。`,too_large:`此更改过大,无法一次完成。请拆分处理。`,state_changed:`此内容在此期间已更改。请重新加载后重试。`,network:`无法连接服务器。请检查网络连接后重试。`,status:`请求失败(HTTP {status})。`}},agents:{description:`密钥让智能体、CI 任务和 MCP 客户端能在你的站点上工作。每个密钥都有一个模式,决定智能体能自行做什么、哪些需要等你处理。每次调用都会经过策略检查,并记录在站点的动态中。`,createKey:`创建密钥`,search:`搜索密钥`,columns:{name:`名称`,owner:`创建者`,mode:`模式`,scopes:`权限范围`,created:`创建时间`,status:`状态`},views:{mine:`你的密钥`,all:`所有密钥`},all:{title:`此部署上的所有智能体密钥`,description:`作为管理员,你可以结束提权或吊销任何密钥。只有密钥的创建者可以更改其模式或为其提权。`,search:`搜索密钥或人员`,empty:`还没有智能体密钥`,emptyDescription:`人员创建的密钥会连同创建者显示在这里。`,unknownOwner:`已移除的成员`,elevateOnlyCreator:`只有创建此密钥的人可以为其提权。你可以结束提权或吊销密钥。`},roleCap:`你的角色允许的智能体密钥最高为{mode}模式。`,narrowed:{badge:`受角色限制`,hint:`创建者的角色限制了此密钥当前能做的事;以下是它实际使用的权限范围。`,hintRole:`创建者的角色现在是{role},因此此密钥使用以下权限范围。升级角色不会让它重新扩大。`,stored:`授予:{scopes}`},active:`有效`,disabled:`已停用`,never:`永不过期`,expires:`{when}过期`,unnamed:`未命名的密钥`,keyPrefix:`{start}…`,fullAccess:`完全访问`,scopesModeDefault:`模式默认 · {count} 个权限范围`,empty:`还没有智能体密钥`,emptyDescription:`为每个智能体或自动化创建一个密钥,只授予它需要的权限范围,工作完成后吊销。`,noMatches:`没有匹配“{query}”的密钥`,notEnabledTitle:`此服务器不支持智能体密钥`,notEnabledDescription:`此服务器未启用登录,因此无法签发密钥。你机器上的智能体仍可通过 cloudhal mcp 以 stdio 连接。`,copyId:`复制密钥 ID`,revoke:`吊销`,revokeKey:`吊销密钥`,keyResource:`智能体密钥`,revoked:`密钥已吊销`,revokedDescription:`{name} 已无法再访问 Studio。`,scopes:{"site:read":`查看站点和快照`,"content:read":`读取页面和文章`,"content:write":`创建、编辑和删除页面和文章`,"asset:upload":`上传媒体并编辑自己上传的内容`,"asset:manage":`编辑、停用和删除任何媒体`,"analytics:read":`读取站点分析(不含个人数据)`,"site:write":`更改站点设置`,"preview:create":`渲染草稿预览`,"site:publish":`将快照发布到线上站点`,"site:rollback":`回滚线上站点`,"content:write:own":`创建文章并更改自己的文章`,"content:draft:own":`撰写草稿并提交审核`,"content:propose":`建议正文修改;由你接受或拒绝`,"site:publish:own":`当所有更改都是自己的时发布`,"comments:read":`读取读者评论(不含电子邮件)`,"comments:moderate":`标记和隐藏评论;批准需等你处理`,"comments:moderate:own":`标记和隐藏自己文章上的评论`,"comments:reply":`起草评论回复;由你发布`,"comments:reply:own":`在自己的文章上起草回复;由你发布`,"schedules:read":`查看计划、发布批次和自动化运行`,"schedules:write":`提议和计划发布批次、禁发期和到期下线`,"schedules:write:own":`计划自己页面和文章的发布批次`,"releases:publish":`批准发布批次;在自动模式下,低风险的无需你即可运行`,"releases:publish:own":`当所有内容项都是自己的时批准发布批次`},modes:{legend:`模式`,names:{plan:`规划`,manual:`手动`,edits:`编辑`,auto:`自动`,bypass:`绕过`},descriptions:{plan:`读取你的站点并渲染预览。可以建议更改,但从不实际更改。`,manual:`每次更改前都会先询问你,无论多小。`,edits:`可自由创建和编辑内容。每次更改都会生成快照,并可回滚。`,auto:`与“编辑”相同,此外小型文章发布无需你即可上线。`,bypass:`无需等待任何人。仅适用于你自己机器上的 cloudhal mcp。`},waitsFor:[[3,`mode`,{plan:[`需等你处理:无,因为它无法更改任何内容`],manual:[`需等你处理:每次编辑、发布、回滚和删除`],edits:[`需等你处理:发布、回滚和删除`],auto:[`需等你处理:较大的发布、回滚和删除`],bypass:[`需等你处理:无`],other:[`需等你处理:每次编辑、发布、回滚和删除`]}]],risk:{safest:`最安全`,recommended:`推荐`,caution:`谨慎使用`},current:`当前`,bypassHint:`“绕过”模式无需等待任何人,不适用于密钥。它仅存在于你自己机器上的本地服务器:`,autoTitle:`小型发布无需你即可上线`,autoDescription:`在自动模式下,仅添加或编辑文章的发布会立即上线:不移除任何内容,不更改页面、菜单、站点设置、分类法或重定向,最多 {limit} 处更改。动态会将其标记为自动批准,你可以一键回滚。较大的发布、回滚和删除仍需等你处理。`,autoConfirm:`我了解此智能体可以在未经我批准的情况下发布`,autoConfirmRequired:`请确认你了解自动模式的作用`},howModes:{title:`模式如何运作`,description:`模式决定智能体能自行做什么、哪些需要等你处理。权限范围始终是硬性上限:模式永远不会授予更多权限。`,columns:{mode:`模式`,edits:`内容`,publish:`发布`,rollback:`回滚、删除`},rules:{denied:`禁止`,waits:`等待`,free:`自由`,lowRisk:`小型:自由`},rulesHint:{denied:`在此模式下智能体无法执行此操作。`,waits:`智能体发出请求;你在站点的“动态 › 审批”中批准。`,free:`智能体自行执行此操作。每次更改都会生成快照。`,lowRisk:`仅添加或编辑文章,不移除任何内容,最多 {limit} 处更改。更大的更改需等你处理。`},gated:`使用密钥时始终需等你处理`,bypass:`“绕过”仅适用于你自己的机器:`},changeMode:{menu:`更改模式`,title:`更改模式`,description:`选择“{name}”今后的工作方式。`,from:`当前`,to:`新`,nextCallTitle:`在智能体的下次调用时生效`,nextCall:`正在进行的调用会以当前模式完成。此更改会记录在审计日志中。`,submit:`更改模式`,failed:`无法更改模式`,changed:`模式已更改`,changedDescription:`{name} 现在以{mode}模式工作。`,elevatedTitle:`已提权至{mode},直到 {time}`,elevationKeeps:`提权将持续到 {time},之后密钥以{mode}模式工作。`,elevationEnds:`{mode}已达到提权后的模式,因此此更改将结束提权。`},elevate:{menu:`临时提权`,menuDisabled:`已处于自动模式,这是密钥可拥有的最高自主模式。`,title:`临时提权`,description:`让“{name}”在一段时间内以更高自主的模式工作。时间到后,它会自动恢复到原有模式。`,ownMode:`原有模式`,ownModeHint:`保持不变。提权结束后密钥会恢复到此模式。`,legend:`提权至`,duration:`时长`,presets:{15:`15 分钟`,60:`1 小时`,240:`4 小时`,1440:`1 天`,custom:`自定义`},customValue:`自定义时长`,customUnit:`单位`,units:{minutes:`分钟`,hours:`小时`},customHint:`介于 {min} 和 {max} 之间。`,customErrors:{invalid:`请输入数字`,tooShort:`至少 {min}`,tooLong:`最多 {max}`},reason:`原因`,reasonPlaceholder:`例如:发布日当天,让它自行发布小更新`,reasonHint:`可选。显示在审计日志中。`,replacesTitle:`这将替换当前生效的提权`,replaces:`“{name}”在 {time} 之前以{mode}模式工作。新的提权将取而代之。`,now:`当前`,elevated:`提权后`,summary:`直到 {time}({duration}后),然后恢复为{from}。`,nextCall:`在智能体的下次调用时生效。你可以从密钥的菜单中提前结束。`,submit:`提权`,failed:`无法为密钥提权`,done:`密钥已提权`,doneDescription:`{name} 在 {time} 之前以{mode}模式工作,然后恢复为{from}。`},elevation:{left:`剩余 {time}`,ownMode:`原有模式:{mode}`,tooltip:`由 {who} 从{from}提权,直到 {time}`,requestedReason:`智能体请求:“{reason}”`,byYou:`你`,temporary:`临时提权`,marker:`从{from}临时提权,直到 {time}`,endMenu:`立即结束提权`,ended:`提权已结束`,endedDescription:`{name} 已恢复为{mode}模式。`,endFailed:`无法结束提权`,bannerTitle:[[2,`count`,{other:[[4],` 个智能体密钥已提权`]}]],bannerItem:`{name}:{from} → {to},直到 {time}`,endNow:`立即结束`,endAll:`全部立即结束`,endsIn:`{time}后结束`,extendAll:`全部延长 {duration}`,howModes:`需要临时获得更多自主权?请临时为密钥提权,而不是让它一直处于自动模式:它会自动恢复到原有模式。`},create:{title:`创建智能体密钥`,description:`此密钥以你选择的模式,在你能打开的每个站点上作为智能体行事。`,stepMode:`第 1 步,共 2 步 · 选择模式`,stepDetails:`第 2 步,共 2 步 · 名称和权限范围`,continue:`继续`,mode:`模式`,changeMode:`更改`,name:`名称`,namePlaceholder:`例如:我笔记本上的 Claude Code`,nameHint:`智能体会以此名称显示在动态日志中。`,nameRequired:`请为密钥命名`,advanced:`高级:权限范围`,advancedHint:`已按{mode}模式预填。权限范围是硬性上限;模式决定哪些需要等你处理。`,customised:`已自定义`,resetScopes:`使用模式的权限范围`,missingScopesTitle:`此模式允许的部分操作将无法执行`,missingScopes:`缺少 {scopes} 时,智能体无法执行{mode}模式允许的所有操作。`,scopes:`权限范围`,scopesRequired:`请至少选择一个权限范围`,groups:{read:`读取`,write:`写入`,release:`发布和回滚`},groupHints:{read:`足以满足研究、总结或审阅类智能体。`,write:`更改会生成快照,并可回滚。`,release:`让智能体更改(或请求更改)访客看到的内容。`},submit:`创建密钥`,failed:`无法创建密钥`,scopeAboveRole:`你的角色无法将此权限授予密钥。`,scopeNarrowed:`你的角色仅对你自己的内容授予 {scope}。`,errors:{scopeAboveRole:`你的角色无法将其中某些权限范围授予密钥。请取消勾选后重试。`,modeAboveRole:`你的角色不允许此模式的密钥。请选择自主性较低的模式。`}},reveal:{title:`复制你的新密钥`,description:`“{name}”已就绪。你的智能体通过 x-api-key 请求头发送它。`,warningTitle:`你将无法再次看到此密钥`,warning:`请立即将它保存在你的密码管理器或智能体的密钥存储中。如果丢失,请吊销并创建新密钥。`,key:`智能体密钥`,config:`客户端配置`,done:`我已保存密钥`},connect:{title:`连接 MCP 客户端`,description:`智能体通过此地址以 MCP 访问 Studio,并在请求头中发送密钥。连接时,智能体会得知其密钥的模式,从而知道哪些需要等你处理。`,endpoint:`MCP 端点`,header:`请求头`,tabs:{json:`JSON`,claude:`Claude Code`,stdio:`本地`},stdioHint:`在你自己的机器上,于站点文件夹中运行 stdio 服务器;无需密钥。--mode 设置其工作方式,且只有在这里才能使用 bypass。`}},activity:{search:`搜索工具、操作者或技能`,refresh:`刷新动态`,filters:{label:`筛选`,kind:`操作者类型`,decision:`决定`,allKinds:`所有操作者`,allDecisions:`所有决定`},kinds:{agent:`智能体`,human:`人员`,system:`系统`},decisions:{allow:`已允许`,deny:`已拒绝`,"approval-required":`需要审批`},outcomes:{ok:`成功`,error:`失败`,pending:`待处理`},columns:{when:`时间`,actor:`操作者`,tool:`工具`,decision:`决定`,outcome:`结果`,skill:`技能`,snapshot:`快照`},empty:`还没有动态`,emptyDescription:`智能体或人员通过 MCP 进行的每次工具调用都会记录在这里:已允许、已拒绝或等待审批。`,noMatches:`没有符合这些筛选条件的事件`,noMatchesDescription:`筛选仅作用于已加载的事件。加载更多以查看更早的记录。`,clearFilters:`清除筛选`,showing:`显示已加载的 {loaded} 个事件中的 {shown} 个`,allLoaded:`已到第一条记录的事件。`,loadMore:`加载更多`,notEnabledTitle:`此服务器不保留动态日志`,notEnabledDescription:`使用 cloudhal studio 运行 Studio,即可记录每次智能体和人员的工具调用。`,ownOnlyTitle:`你的动态`,ownOnly:`你可以看到你和你的智能体在此站点上的操作。编辑者及以上角色可以看到所有人的动态。`,viewEvent:`显示详情`,detail:{when:`时间`,actor:`操作者`,decision:`决定`,outcome:`结果`,skill:`技能`,duration:`耗时`,durationValue:`{ms} 毫秒`,snapshot:`快照`,viewChanges:`查看更改`,reason:`原因`,input:`输入`,noInput:`此调用没有输入。`,event:`事件 #{id}`,mode:`模式`,modeHint:`智能体密钥在进行此调用时所处的模式。`,elevation:`提权`,elevationHint:`密钥的原有模式是{from}。其所有者临时授予了更多自主权;提权结束后,密钥会恢复以{from}模式工作。`,elevationGranted:`已授予提权`,elevationGrantedUntil:`{mode}模式直到 {time},然后恢复为{from}。`,requestedByAgent:`响应智能体的请求`},autoApproved:`自动批准`,autoApprovedHint:`无人参与即上线:智能体以自动模式工作,且此发布风险较低。`,autoApprovedTitle:`无人参与发布`,autoApprovedCount:`已发布的文章更改:{count}`,autoApprovedDescription:`智能体以自动模式工作,且此发布仅添加或编辑了文章。你可以在“快照”中回滚。`,autoApprovedDescriptionCount:`智能体以自动模式工作,且此发布仅添加或编辑了文章(共 {count} 处)。你可以在“快照”中回滚。`,requestedByAgent:`由智能体请求`,requestedByAgentHint:`智能体请求了此提权,并由人员在“审批”中授予。`,recent:`最近动态`,recentEmpty:`还没有智能体动态`,recentEmptyDescription:`连接智能体后,其工具调用会显示在这里。`},account:{description:`你的个人资料、登录方式,以及还有谁可以进入此 Studio。`,sections:{profile:`个人资料`,password:`密码`,sessions:`活动会话`,notifications:`通知`,access:`Studio 访问`,server:`此服务器`},notifications:{description:`顶栏中的铃铛会列出即将结束的提权和请求提权的智能体。Studio 在后台标签页中时也可以通知你。`,switch:`提权即将结束或智能体请求提权时,在此浏览器中通知我`,switchHint:`仅在 Studio 于某个标签页中打开时。每条通知只出现一次。`,permission:`浏览器权限`,permissions:{granted:`已允许`,default:`尚未询问`,denied:`已阻止`},permissionHints:{granted:`此浏览器允许 Studio 显示通知。`,default:`开启通知时,浏览器会询问你。`,denied:`需在浏览器中更改,而不是在 Studio 中。`},deniedTitle:`Studio 的通知已被阻止`,denied:`如需开启,请在浏览器的网站设置(地址旁的图标)中允许此网站的通知,然后重新加载 Studio。`,unsupported:`此浏览器无法显示通知。顶栏中的铃铛仍会列出所有内容。`,enabled:`浏览器通知已开启`,test:`发送测试通知`,testTitle:`通知已开启`,testBody:`提权即将结束或智能体请求提权时,Studio 会这样通知你。`},profile:{description:`你在 Studio 和各站点动态日志中的显示方式。`,name:`名称`,nameHint:`显示在你所做的更改和审批旁边。`,email:`电子邮件`,emailHint:`你使用此地址登录。无法在此更改。`,memberSince:`加入于 {date}`,actorId:`操作者 ID`,actorIdHint:`动态和快照用来识别你的方式。`,role:`角色`,roleHint:`你在此可以做的事。由管理员或所有者更改。`,saved:`个人资料已保存`,failed:`无法保存你的个人资料`,errors:{required:`请输入你的名称`,tooLong:`最多 {max} 个字符`}},password:{description:`请使用一个未在其他地方用过的长密码短语。`,current:`当前密码`,new:`新密码`,newHint:`至少 {min} 个字符。`,confirmHint:`再次输入新密码。`,confirm:`确认新密码`,show:`显示密码`,hide:`隐藏密码`,signOutOthers:`退出所有其他会话`,signOutOthersHint:`如果有人可能知道你的旧密码,建议这样做。`,submit:`更改密码`,changed:`密码已更改`,changedOthers:`你的其他会话已退出登录。`,failed:`无法更改你的密码`,errors:{currentRequired:`请输入当前密码`,currentWrong:`这不是你的当前密码`,newRequired:`请输入新密码`,tooShort:`至少 {min} 个字符`,tooLong:`最多 {max} 个字符`,same:`请选择与当前密码不同的密码`,confirmRequired:`请再次输入新密码`,mismatch:`两次输入的密码不一致`}},sessions:{showAll:`显示全部 {count} 个`,showFewer:`收起`,description:`登录你账户的浏览器和客户端。退出任何你不认识的会话。智能体密钥列在“智能体”下。`,columns:{device:`设备`,ip:`IP 地址`,lastActive:`最近活动`,signedIn:`登录时间`},current:`此设备`,unknownDevice:`未知设备`,unknownIp:`未知`,deviceOn:`{os} 上的 {browser}`,revoke:`退出登录`,revokeLabel:`退出 {device}`,signOutOthers:`退出其他会话`,onlyThis:`这是你唯一的活动会话。`,count:`{count} 个活动`,revokeTitle:`退出此会话?`,revokeDescription:`{device} 需要重新登录。`,revokeOthersTitle:`退出所有其他会话?`,revokeOthersDescription:`除此之外的所有浏览器和客户端都需要重新登录。智能体密钥继续有效。`,revoked:`会话已退出`,revokedOthers:`其他会话已退出`,staleTitle:`重新登录以查看你的会话`,staleDescription:`为了你的安全,查看会话列表需要在最近 24 小时内登录过。`,signInAgain:`重新登录`},access:{description:`谁可以在此 Studio 上创建账户。这在服务器运行处设置,而不是在这里。`,signUp:`注册`,policies:{"first-user":`仅所有者`,closed:`已关闭`,open:`对所有人开放`,unknown:`未报告`},explanations:{"first-user":`第一个注册的人成为所有者,之后注册随即关闭。其他人需要由他人为其创建账户。`,closed:`任何人都无法注册。账户由所有者创建。`,open:`任何能访问此地址的人都可以创建账户,且每个账户都拥有所有站点的完全访问权限。`,unknown:`此服务器未报告注册的配置方式。`},openWarningTitle:`任何人都可以注册`,openWarning:`每个账户都拥有所有站点的完全访问权限。分享此地址前请关闭注册。`,howToChange:`在 Cloudflare 上,将管理 Worker 的 CLOUDHAL_SIGNUP 设为 open 或 closed(未设置表示仅所有者)。你机器上的 cloudhal studio 始终为仅所有者。`,serverDescription:`此 Studio 部署运行的内容。`,features:{members:`团队和角色`,agentKeys:`智能体密钥`,mcp:`MCP 服务器`,activity:`动态日志`,previewLinks:`预览链接`,deployTransfer:`部署和传输`,approvals:`Studio 中的审批`,elevationRequests:`提权请求`},featureHints:{members:`成员通过邀请链接加入,并担任某个角色:所有者、管理员、编辑者、作者或投稿者。`,agentKeys:`智能体和 CI 任务使用你创建的密钥登录。`,mcp:`智能体在 /mcp 连接。`,activity:`每次工具调用都按站点记录。`,previewLinks:`在已部署站点上显示草稿的签名链接。`,deployTransfer:`cloudhal push 和 pull 可以访问此服务器。`,approvals:`智能体的发布、回滚和删除请求会在这里等待人工处理。`,elevationRequests:`智能体可以请求临时使用更高自主的模式;由人员在“审批”中授予。`}}},siteSettings:{sections:{general:`常规`,domains:`域名`,appearance:`外观`,design:`设计规范`,previews:`预览链接`},design:{description:`以 Markdown 编写的品牌和设计规范(DESIGN.md)。每个智能体和构建对话在构建前都会读取它们:站点的用途、颜色和字体、优先使用的布局和组件、页面范例,以及要避免的内容。它们影响选择,但从不影响权限。`,label:`此站点的规范`,placeholder:`## 品牌
1
+ var e={app:{name:`Cloudhal Studio`,tagline:`登录以管理你的站点。`},playground:{title:`Playground`,description:[[2,`count`,{other:[`剩余 `,[4],` 分钟`]}],`。会话结束后这里的所有内容都会被删除,请勿输入个人信息。`],reset:`重置`,deploy:`部署到 Cloudflare`,unavailableTitle:`在你自己的安装中可用`,unavailableDescription:`团队成员、Agent 密钥和账户设置需要登录,因此 playground 中没有这些功能。将 Cloudhal 部署到你的 Cloudflare 账户即可使用。`},common:{save:`保存`,cancel:`取消`,delete:`删除`,publish:`发布`,rollBack:`回滚`,loading:`加载中…`,signOut:`退出登录`,live:`线上`,language:`语言`,more:`更多`,rev:`版本 {rev}`,close:`关闭`,optional:`(可选)`,moreInformation:`更多信息`,copy:`复制`,copied:`已复制`,retry:`重试`,discard:`放弃`,saveChanges:`保存更改`,unsaved:`有未保存的更改`,onThisPage:`本页内容`,on:`开`,off:`关`,deleteResource:{title:`删除 {name}`,warning:`此操作无法撤销。这将永久删除{type} {name}。`,typeToConfirm:`输入 {name} 以确认:`,copy:`将 {name} 复制到剪贴板`,confirmInput:`输入 {name} 以确认删除`,delete:`删除{type}`}},theme:{label:`主题`,current:`主题:{name}`,light:`浅色`,dark:`深色`,system:`跟随系统`},auth:{signInTitle:`欢迎回来`,signUpTitle:`创建你的账户`,signUpDescription:`新 Studio 上的第一个账户将成为其所有者。`,footer:`开源 · Apache-2.0`,signIn:`登录`,createAccount:`创建账户`,name:`名称`,email:`电子邮件`,password:`密码`,passwordHint:`至少 8 个字符`,failed:`登录失败`,setupTitle:`设置此 Studio`,setupDescription:"你打开了 `cloudhal deploy` 提供的设置链接。你现在创建的账户将成为所有者;之后注册将关闭。"},sites:{title:`站点`,description:`每个站点都是由页面和内容组成的图,智能体在你的批准下进行操作。`,columns:{project:`项目`,name:`名称`,slug:`别名`,pages:`页面`,status:`状态`},notPublished:`未发布`,empty:`还没有站点`,emptyDescription:`从终端创建一个,它就会显示在这里。`,search:`搜索站点`,usageTitle:`从终端`,usageDescription:`Studio 中的一切也都是 CLI 命令,因此智能体和脚本可以完成同样的工作。`,open:`打开`},pageHeaders:{media:{title:`媒体`,description:`此站点的图片、视频、音频、文档和数据文件。新文件会在下次发布时上线。`},pages:{title:`页面`,description:`此站点的路由。每个页面都是由主题渲染的一组区块。`},articles:{title:`文章`,description:`由人或智能体撰写、随站点发布的帖子和其他条目。`},snapshots:{title:`快照`,description:`站点的冻结版本。发布会让线上站点指向某个快照;回滚会让它指向更早的快照。`},activity:{title:`动态`,description:`智能体或人员在此站点上进行的每次工具调用,以及策略决定。`},approvals:{title:`审批`,description:`智能体的发布、回滚和删除,它们在手动模式下的编辑,它们对更多自主权的请求,以及人员的角色无法单独完成的发布,都会在这里等待,直到有决定权的人处理。`},settings:{title:`设置`,description:`此站点的名称、语言、域名和预览链接。`},agents:{title:`智能体`,description:`密钥让智能体、CI 任务和 MCP 客户端能在你的站点上工作。密钥的模式决定了智能体能自行做什么、哪些需要等你处理。`},skills:{title:`技能`,description:`智能体通过 MCP 读取的操作手册。在技能下进行的调用只会获得它声明的权限范围,其中列出的工具始终需要等待人工处理。`},account:{title:`账户`,description:`你的个人资料、登录方式,以及还有谁可以进入此 Studio。`},taxonomy:{title:`分类和标签`,description:`文章如何归档和被找到。重命名、合并或停用都是一次更改、一个快照,并会留下重定向。`},navigation:{title:`导航`,description:`访客用来找路的菜单:页眉、页脚以及主题放置的其他菜单。菜单项指向页面和分类,因此重命名永远不会破坏它们。`},translations:{title:`翻译`,description:`按语言查看每个页面和文章:缺失的、过时的,或等待人工审核的。`},redirects:{title:`重定向`,description:`旧地址及其将访客引向的位置。别名更改、合并和停用会自动添加重定向;你也可以自行添加。`},team:{title:`团队`,description:`谁在此 Studio 上工作以及担任什么角色。成员通过一次性邀请链接加入;他们的智能体永远不会超出他们的权限。`}},nav:{media:`媒体`,comments:`评论`,overview:`概览`,content:`内容`,history:`历史`,automation:`自动化`,account:`账户`,home:`概览`,pages:`页面`,articles:`文章`,snapshots:`快照`,agents:`智能体`,allSites:`所有站点`,sites:`站点`,switchSite:`切换站点`,search:`搜索或运行命令…`,shortcutHint:`⌘K`,shortcutHintCtrl:`Ctrl K`,agentSkills:`技能`,schedules:`计划`,activity:`动态`,agentKeys:`密钥和 MCP`,approvals:`审批`,settings:`设置`,siteSettings:`设置`,taxonomy:`分类和标签`,navigation:`导航`,redirects:`重定向`,translations:`翻译`,team:`团队`,analytics:`分析`},commands:{goMedia:`前往媒体`,goComments:`前往评论`,goAnalytics:`前往分析`,placeholder:`输入命令…`,empty:`没有匹配的命令`,hintNavigate:`导航`,hintSelect:`运行`,hintClose:`关闭`,goOverview:`前往概览`,goArticles:`前往文章`,goSnapshots:`前往快照`,newArticle:`新建文章`,createSnapshot:`创建快照`,publishSite:`创建快照并发布站点`,goActivity:`前往动态`,goAgents:`前往智能体`,createAgentKey:`创建智能体密钥`,goSkills:`前往技能`,goAccount:`前往账户设置`,goTeam:`前往团队`,goSiteSettings:`前往站点设置`,goApprovals:`前往审批`,goTaxonomy:`前往分类和标签`,goNavigation:`前往导航菜单`,goRedirects:`前往重定向`,goSchedules:`前往计划`,newSchedule:`定时发布…`,searchPlaceholder:`搜索内容或运行命令…`,searchEmpty:`没有匹配的命令或内容`,hintNewTab:`新标签页`,groups:{commands:`命令`,entry:`文章`,page:`页面`,term:`分类和标签`,asset:`媒体`,menu:`菜单项`,redirect:`重定向`}},overview:{commentsWaiting:[[2,`count`,{other:[[4],` 条评论正在等待`]}]],commentsWaitingDescription:`在有人批准之前,读者看不到它们。`,liveSnapshotLabel:`线上快照`,notPublished:`尚未发布`,newPage:`新建页面`,pages:`页面`,columns:{title:`标题`,path:`路径`,status:`状态`,updated:`更新时间`},empty:`还没有页面`,emptyDescription:`创建第一个页面,或让智能体搭建一个。`,search:`搜索页面`,status:`状态`,live:`线上`,recentArticles:`最近的文章`,viewAll:`查看全部`,cli:`从终端`},pageStatus:{publishTitle:`发布“{title}”?`,published:`页面已发布`,unpublished:`页面已退回草稿`,failed:`页面状态未更改`,leftOut:[[2,`count`,{other:[[4],` 个页面未发布`]}]],leftOutDescription:`草稿和审核中的页面(包括新翻译)不会出现在线上网站。请先发布它们。`,review:`查看页面`},articles:{description:`“posts”集合中的帖子。`,newArticle:`新建文章`,empty:`还没有文章`,emptyDescription:`写第一篇,或让智能体来写。`,untitled:`无标题`,columns:{title:`标题`,author:`作者`,status:`状态`,updated:`更新时间`},search:`搜索文章`,none:`—`,noCategory:`无分类`,primary:`主分类`,facets:{label:`筛选文章`,category:`按分类筛选`,tag:`按标签筛选`,allCategories:`全部{label}`,allTags:`全部{label}`,clear:`清除筛选`,empty:`没有符合这些筛选条件的文章`,emptyDescription:`试试其他分类或标签,或清除筛选。`}},articleCorrections:{title:`更正`,description:`读者会在文章末尾看到这些内容,最新的在前,最新一条即为文章的更新日期。更正一经发布就会保留:有发布权限的人可以改写,但没有人能删除。`,empty:`没有更正`,emptyDescription:`已发布的报道发生实质性变化时,请添加一条。`,kind:`类型`,kinds:{correction:`更正`,clarification:`澄清`,update:`更新`},note:`变更内容`,noteHint:`一两句话。支持 Markdown 链接和强调。`,add:`添加更正`,unsaved:`未保存`,remove:`移除更正`,pending:`保存文章即可添加;它会在下次发布时上线。`},articleTerms:{title:`分类和标签`,description:`分类用于归档文章,标签用于描述文章。主分类会显示在面包屑导航和文章的元数据中。`,legacyDescription:`此站点仍以纯文本保存标签。将它们迁移到分类和标签,即可获得名称、归档和重定向。`,legacyTitle:`此文章的旧标签`,legacyPending:`保存后,{tags} 将变为标签。`,required:`请选择一个{singular},才能将此文章提交审核或发布。`,requiredToast:`请先选择一个{singular}`,slugRedirect:`小写,用连字符连接。此文章已发布:新别名会从旧地址留下重定向。`},pickers:{under:`位于 {path}`,clear:`清除`,showOptions:`显示选项`,noMatch:`没有匹配项`,remove:`移除 {name}`,atMost:`最多 {max} 个。移除一个才能添加新的。`,categoryHint:`最多 {max} 个。输入以搜索名称和同义词。`,categoryRequiredHint:`提交审核或发布时必填。最多 {max} 个。`,categoryPlaceholder:`选择分类…`,noCategory:`没有匹配的分类。请在“分类和标签”中添加分类。`,primary:`主分类`,primaryHint:`显示在面包屑导航中,并用作文章的栏目。`,primaryNone:`选择一个…`,tagHint:`最多 {max} 个。已有标签排在前面,同义词也能找到它们。`,tagPlaceholder:`添加标签…`,tagFull:`已达到标签上限`,viaSynonym:`同义词“{value}”`,similar:`相似`,create:`创建“{name}”`,createNoSlug:`此名称没有可用于地址的字母或数字。请换个名称。`,nearDuplicate:`看起来与 {names} 相似。如果意思相同,请使用已有标签。`,proposedChip:`由智能体提议。有人批准后它才会获得公开页面。`},editor:{schedule:`计划…`,locked:`已有计划的发布批次锁定了此内容。取消计划后即可编辑。`,heroNoImage:`无首屏图片`,status:`状态`,title:`标题`,slug:`别名`,summary:`摘要`,summaryHint:`用作搜索结果和分享链接中的元描述。`,body:`正文(Markdown)`,tags:`标签`,tagsHint:`以逗号分隔`,path:`路径`,pathHint:`绝对路径,小写,末尾不带斜杠`,sections:`区块`,addSection:`添加区块`,noSections:`还没有区块`,noSectionsDescription:`添加首屏、富文本、图片或内容列表。`,remove:`移除`,moveUp:`上移`,moveDown:`下移`,heading:`标题`,subheading:`副标题`,caption:`说明文字`,collection:`集合`,limit:`数量上限`,sort:`排序`,sortNewest:`最新`,sortOldest:`最早`,sortTitle:`标题`,saved:`已保存`,sendToReview:`提交审核`,submitForReview:`提交审核`,backToDraft:`退回草稿`,archive:`归档`,restore:`恢复为草稿`,publishArticleTitle:`发布此文章?`,publishArticleDescription:`下次站点创建快照并发布时,它将在站点上可见。`,publishPageTitle:`发布此页面?`,publishPageDescription:`下次发布网站时上线。其他页面和语言保留各自的状态。`,deleteArticle:`删除文章`,deletePage:`删除页面`,article:`文章`,page:`页面`,slugHint:`小写,用连字符连接;将成为 URL。`,metadata:`详情`,moreActions:`更多操作`,unpublish:`取消发布(退回草稿)`,duplicate:`复制`,duplicated:`已创建副本`,copyTitle:`{title}(副本)`,dangerZone:`危险区域`,deletePageTitle:`删除此页面`,deletePageHint:`移除页面及其区块。已发布的快照会保留其副本。`,deleteArticleTitle:`删除此文章`,deleteArticleHint:`从站点移除此文章。已发布的快照会保留其副本。`,removeSectionTitle:`移除此区块?`,removeSectionDescription:`{kind}区块将从草稿中移除。只有保存后页面才会更改。`,sectionKinds:{hero:`首屏`,richText:`富文本`,image:`图片`,contentList:`内容列表`,component:`块`,surface:`生成的界面`},buildLive:`实时构建`,buildLiveHint:`实时观看智能体构建此页面`,surface:{title:`生成的界面 · {count} 个组件`,hint:`由主题的组件构建。在此更改文本;如需更改布局,请询问 AI。`,json:`生成的界面数据`,showJson:`显示 JSON`,outline:`此区块的组件`,expand:`显示 {title} 内部的内容`,collapse:`隐藏 {title} 内部的内容`,changeWithAi:`用 AI 更改`,editTexts:`编辑 {title} 的文本`,changePart:`用 AI 更改 {title}`,bound:`显示 {path}`,computed:`计算值({fn})`,notPlaced:`不在页面上`},blocks:{menu:`块`,unknown:`未知块 · {type}`,unknownHint:`此部署没有该名称的块类型(主题可能已更改)。它会原样保留,不会显示在站点上。`,item:`项目 {n}`,addItem:`添加项目`,removeItem:`移除项目`,moveUp:`上移`,moveDown:`下移`,values:{tone:{info:`信息`,success:`成功`,warning:`警告`,danger:`危险`},variant:{primary:`主要`,secondary:`次要`}}},bodyTitle:`正文`,markdown:`Markdown`,words:[[2,`count`,{other:[[4],` 字`]}]],id:`ID`,revision:`版本`,locale:`语言`,author:`作者`,updatedAt:`更新时间`,publishedAt:`发布时间`},seo:{counter:`{count} / {max}`,fixErrors:`保存前请修正突出显示的字段。`,cover:{title:`封面图片`,description:`显示在文章上方,并在分享链接时用作配图。从媒体库中选择,或在那里上传新图片。`,url:`图片 URL`,urlHint:`https:// 地址,或你站点上的路径,例如 /images/cover.jpg。`,urlPlaceholder:`https://… 或 /images/cover.jpg`,alt:`替代文本`,altHint:`描述图片显示的内容。屏幕阅读器会为看不到图片的人朗读,搜索引擎也用它来理解图片。`,altPlaceholder:`黄昏时平静海面上的灯塔`,remove:`移除图片`,empty:`无封面图片`,loading:`正在加载图片…`,broken:`无法加载此图片`,brokenHint:`请检查地址,并确认图片是公开的。`,brokenPathHost:`站点路径从 {host} 加载。请检查路径,或确认站点已部署。`,brokenPathNoDomain:`站点路径从主域名加载。请在“设置 › 域名”中添加主域名,以便在此查看。`,size:`{width} × {height} 像素`,errors:{required:`请输入图片地址,或移除图片。`,insecure:`请使用 https://。浏览器会在安全站点上阻止 http 图片。`,invalid:`请输入 https:// 地址或以 / 开头的路径。`,tooLong:`最多 2,048 个字符。`,altRequired:`请描述图片。封面图片必须有替代文本。`,altTooLong:`最多 500 个字符。`}},preview:{title:`搜索和社交预览`,description:`此文章在搜索结果中和链接被分享时的样子。摘要用作元描述,封面图片用作分享图片。`,search:`搜索结果`,social:`社交卡片`,noSummary:`还没有摘要。搜索引擎和社交网络会从文章中选取文本。`,noDescription:`没有元描述。搜索引擎会从页面中选取文本。`},checks:{label:`检查`,title:`标题`,titleGood:`{count} 个字符。适合搜索结果显示。`,titleLong:`{count} 个字符。搜索结果会在约 60 个字符后截断标题。`,titleMissing:`请添加标题。`,description:`元描述`,summary:`元描述(摘要)`,descriptionGood:`{count} 个字符。适合搜索结果显示。`,descriptionShort:`{count} 个字符。过短的描述常被替换;建议 50–160 个字符。`,descriptionLong:`{count} 个字符。搜索结果会在约 160 个字符后截断。`,summaryMissing:`请添加摘要。没有摘要时,搜索引擎会从文章中选取文本。`,image:`分享图片`,imageSet:`使用封面图片。`,imageMissing:`没有封面图片,分享的链接不会显示配图。`,imageBroken:`封面图片无法加载。`,status:{good:`良好`,short:`过短`,long:`过长`,missing:`缺失`,broken:`损坏`}},page:{title:`搜索引擎和分享`,description:`此页面在搜索结果中和链接被分享时的样子。`,seoTitle:`SEO 标题`,seoTitleHint:`留空则使用页面标题。`,seoDescription:`元描述`,seoDescriptionHint:`用一两句话说明页面提供的内容。建议 50–160 个字符。`,seoDescriptionPlaceholder:`访客在此页面上能找到什么`,noindex:`对搜索引擎隐藏`,noindexHint:`添加 noindex 标记。页面仍可通过链接访问。`,noindexWarningTitle:`此页面已对搜索引擎隐藏`,noindexWarning:`会要求搜索引擎不要收录它,已收录的页面会在其下次抓取后移除。对于希望人们通过搜索找到的页面,请保持关闭。`,advanced:`高级`,custom:`自定义`,canonical:`规范 URL`,canonicalHintHost:`通常留空:使用页面在 {host} 上的地址。仅当此内容的原始版本位于其他地址时才设置。`,canonicalHint:`通常留空:使用页面在站点主域名上的地址。仅当此内容的原始版本位于其他地址时才设置。`,canonicalPlaceholder:`https://example.com/original-page`,searchPreview:`搜索预览`,hidden:`已对搜索隐藏`,errors:{titleTooLong:`最多 300 个字符。`,descriptionTooLong:`最多 500 个字符。`,canonicalInvalid:`请输入以 https:// 开头的完整地址。`,canonicalTooLong:`最多 2,048 个字符。`}},noindexBadge:`noindex`,noindexBadgeHint:`已对搜索引擎隐藏。请在页面的搜索设置中更改。`,noCover:`无封面图片`,archive:{seoTitleHint:`留空则使用分类项名称。`,noindexHint:`为归档添加 noindex 标记。它仍可通过链接访问。`,noindexWarningTitle:`此归档已对搜索引擎隐藏`,noindexWarning:`会要求搜索引擎不要收录它,并将其移出站点地图。对于希望人们通过搜索找到的主题,请保持关闭。`}},status:{draft:`草稿`,review:`审核中`,published:`已发布`,archived:`已归档`},site:{publish:`发布`,publishDescription:`记录当前图的快照,并将其设为线上版本。`,description:`/{slug} · {locale}`,rowMenu:`更多操作`},snapshots:{description:`每个快照都不可变;发布会让站点指向其中一个。`,label:`标签`,labelPlaceholder:`例如:早间版`,empty:`还没有快照`,emptyDescription:`创建快照以冻结站点的当前状态。`,created:`快照已创建`,published:`已发布`,publishedSnapshot:`快照已发布`,rolledBack:`已回滚`,failed:`失败`,rollbackTitle:`回滚线上站点?`,publishTitle:`发布到线上站点?`,createDescription:`将记录当前图的快照,并使其成为线上版本。`,becomesLive:`{name} 将成为线上版本。`,fromStudio:`来自 Studio 的快照`,publishedFromStudio:`从 Studio 发布`,compare:`比较`,create:`创建快照`,createTitle:`创建快照`,createIntro:`冻结站点当前的页面、文章和设置。快照一经创建便不会改变。`,labelDescription:`可选。在列表和动态中代替原因显示。`,afterCreate:`创建后`,keepOption:`保持线上站点不变`,keepOptionDescription:`仅保存快照。之后可在此列表中发布或比较。`,publishOption:`发布到线上站点`,publishOptionDescription:`快照将成为线上版本。上线前你会先确认。`,continueToPublish:`继续发布`,search:`搜索快照`,noMatches:`没有匹配的快照`,noMatchesDescription:`试试其他标签或快照 ID。`,actions:`操作`,columns:{snapshot:`快照`,actor:`创建者`,changes:`更改`,when:`创建时间`},reasons:{manual:`手动`,agentMutation:`智能体更改`,publish:`发布`,rollback:`回滚`,scheduled:`定时发布`,import:`导入`}},errors:{title:`出了点问题`,conflict:`在你打开后,有人更改了此内容。请重新加载以获取最新版本。`,api:{not_found:`它已不在这里。可能有人删除了它。`,forbidden:`你没有执行此操作的权限。`,unauthorized:`你的会话已结束。请重新登录。`,rank:`你的角色不允许此操作。`,not_own:`你只能对自己的内容执行此操作。`,missing_scope:`此密钥或会话不允许执行此操作。`,rate_limited:`请求过多。请稍等片刻再试。`,internal:`服务器出了点问题。请重试。`,invalid_json:`服务器返回了 Studio 无法读取的响应。请重试。`,unique:`已存在同名或同地址的内容。`,slug_taken:`此地址已被使用。`,path_conflict:`已有其他页面或文章使用此路径。`,in_use:`它仍在使用中,因此无法移除。`,quota_exceeded:`存储配额已满。`,too_large:`此更改过大,无法一次完成。请拆分处理。`,state_changed:`此内容在此期间已更改。请重新加载后重试。`,network:`无法连接服务器。请检查网络连接后重试。`,status:`请求失败(HTTP {status})。`}},agents:{description:`密钥让智能体、CI 任务和 MCP 客户端能在你的站点上工作。每个密钥都有一个模式,决定智能体能自行做什么、哪些需要等你处理。每次调用都会经过策略检查,并记录在站点的动态中。`,createKey:`创建密钥`,search:`搜索密钥`,columns:{name:`名称`,owner:`创建者`,mode:`模式`,scopes:`权限范围`,created:`创建时间`,status:`状态`},views:{mine:`你的密钥`,all:`所有密钥`},all:{title:`此部署上的所有智能体密钥`,description:`作为管理员,你可以结束提权或吊销任何密钥。只有密钥的创建者可以更改其模式或为其提权。`,search:`搜索密钥或人员`,empty:`还没有智能体密钥`,emptyDescription:`人员创建的密钥会连同创建者显示在这里。`,unknownOwner:`已移除的成员`,elevateOnlyCreator:`只有创建此密钥的人可以为其提权。你可以结束提权或吊销密钥。`},roleCap:`你的角色允许的智能体密钥最高为{mode}模式。`,narrowed:{badge:`受角色限制`,hint:`创建者的角色限制了此密钥当前能做的事;以下是它实际使用的权限范围。`,hintRole:`创建者的角色现在是{role},因此此密钥使用以下权限范围。升级角色不会让它重新扩大。`,stored:`授予:{scopes}`},active:`有效`,disabled:`已停用`,never:`永不过期`,expires:`{when}过期`,unnamed:`未命名的密钥`,keyPrefix:`{start}…`,fullAccess:`完全访问`,scopesModeDefault:`模式默认 · {count} 个权限范围`,empty:`还没有智能体密钥`,emptyDescription:`为每个智能体或自动化创建一个密钥,只授予它需要的权限范围,工作完成后吊销。`,noMatches:`没有匹配“{query}”的密钥`,notEnabledTitle:`此服务器不支持智能体密钥`,notEnabledDescription:`此服务器未启用登录,因此无法签发密钥。你机器上的智能体仍可通过 cloudhal mcp 以 stdio 连接。`,copyId:`复制密钥 ID`,revoke:`吊销`,revokeKey:`吊销密钥`,keyResource:`智能体密钥`,revoked:`密钥已吊销`,revokedDescription:`{name} 已无法再访问 Studio。`,scopes:{"site:read":`查看站点和快照`,"content:read":`读取页面和文章`,"content:write":`创建、编辑和删除页面和文章`,"asset:upload":`上传媒体并编辑自己上传的内容`,"asset:manage":`编辑、停用和删除任何媒体`,"analytics:read":`读取站点分析(不含个人数据)`,"site:write":`更改站点设置`,"preview:create":`渲染草稿预览`,"site:publish":`将快照发布到线上站点`,"site:rollback":`回滚线上站点`,"content:write:own":`创建文章并更改自己的文章`,"content:draft:own":`撰写草稿并提交审核`,"content:propose":`建议正文修改;由你接受或拒绝`,"site:publish:own":`当所有更改都是自己的时发布`,"comments:read":`读取读者评论(不含电子邮件)`,"comments:moderate":`标记和隐藏评论;批准需等你处理`,"comments:moderate:own":`标记和隐藏自己文章上的评论`,"comments:reply":`起草评论回复;由你发布`,"comments:reply:own":`在自己的文章上起草回复;由你发布`,"schedules:read":`查看计划、发布批次和自动化运行`,"schedules:write":`提议和计划发布批次、禁发期和到期下线`,"schedules:write:own":`计划自己页面和文章的发布批次`,"releases:publish":`批准发布批次;在自动模式下,低风险的无需你即可运行`,"releases:publish:own":`当所有内容项都是自己的时批准发布批次`},modes:{legend:`模式`,names:{plan:`规划`,manual:`手动`,edits:`编辑`,auto:`自动`,bypass:`绕过`},descriptions:{plan:`读取你的站点并渲染预览。可以建议更改,但从不实际更改。`,manual:`每次更改前都会先询问你,无论多小。`,edits:`可自由创建和编辑内容。每次更改都会生成快照,并可回滚。`,auto:`与“编辑”相同,此外小型文章发布无需你即可上线。`,bypass:`无需等待任何人。仅适用于你自己机器上的 cloudhal mcp。`},waitsFor:[[3,`mode`,{plan:[`需等你处理:无,因为它无法更改任何内容`],manual:[`需等你处理:每次编辑、发布、回滚和删除`],edits:[`需等你处理:发布、回滚和删除`],auto:[`需等你处理:较大的发布、回滚和删除`],bypass:[`需等你处理:无`],other:[`需等你处理:每次编辑、发布、回滚和删除`]}]],risk:{safest:`最安全`,recommended:`推荐`,caution:`谨慎使用`},current:`当前`,bypassHint:`“绕过”模式无需等待任何人,不适用于密钥。它仅存在于你自己机器上的本地服务器:`,autoTitle:`小型发布无需你即可上线`,autoDescription:`在自动模式下,仅添加或编辑文章的发布会立即上线:不移除任何内容,不更改页面、菜单、站点设置、分类法或重定向,最多 {limit} 处更改。动态会将其标记为自动批准,你可以一键回滚。较大的发布、回滚和删除仍需等你处理。`,autoConfirm:`我了解此智能体可以在未经我批准的情况下发布`,autoConfirmRequired:`请确认你了解自动模式的作用`},howModes:{title:`模式如何运作`,description:`模式决定智能体能自行做什么、哪些需要等你处理。权限范围始终是硬性上限:模式永远不会授予更多权限。`,columns:{mode:`模式`,edits:`内容`,publish:`发布`,rollback:`回滚、删除`},rules:{denied:`禁止`,waits:`等待`,free:`自由`,lowRisk:`小型:自由`},rulesHint:{denied:`在此模式下智能体无法执行此操作。`,waits:`智能体发出请求;你在站点的“动态 › 审批”中批准。`,free:`智能体自行执行此操作。每次更改都会生成快照。`,lowRisk:`仅添加或编辑文章,不移除任何内容,最多 {limit} 处更改。更大的更改需等你处理。`},gated:`使用密钥时始终需等你处理`,bypass:`“绕过”仅适用于你自己的机器:`},changeMode:{menu:`更改模式`,title:`更改模式`,description:`选择“{name}”今后的工作方式。`,from:`当前`,to:`新`,nextCallTitle:`在智能体的下次调用时生效`,nextCall:`正在进行的调用会以当前模式完成。此更改会记录在审计日志中。`,submit:`更改模式`,failed:`无法更改模式`,changed:`模式已更改`,changedDescription:`{name} 现在以{mode}模式工作。`,elevatedTitle:`已提权至{mode},直到 {time}`,elevationKeeps:`提权将持续到 {time},之后密钥以{mode}模式工作。`,elevationEnds:`{mode}已达到提权后的模式,因此此更改将结束提权。`},elevate:{menu:`临时提权`,menuDisabled:`已处于自动模式,这是密钥可拥有的最高自主模式。`,title:`临时提权`,description:`让“{name}”在一段时间内以更高自主的模式工作。时间到后,它会自动恢复到原有模式。`,ownMode:`原有模式`,ownModeHint:`保持不变。提权结束后密钥会恢复到此模式。`,legend:`提权至`,duration:`时长`,presets:{15:`15 分钟`,60:`1 小时`,240:`4 小时`,1440:`1 天`,custom:`自定义`},customValue:`自定义时长`,customUnit:`单位`,units:{minutes:`分钟`,hours:`小时`},customHint:`介于 {min} 和 {max} 之间。`,customErrors:{invalid:`请输入数字`,tooShort:`至少 {min}`,tooLong:`最多 {max}`},reason:`原因`,reasonPlaceholder:`例如:发布日当天,让它自行发布小更新`,reasonHint:`可选。显示在审计日志中。`,replacesTitle:`这将替换当前生效的提权`,replaces:`“{name}”在 {time} 之前以{mode}模式工作。新的提权将取而代之。`,now:`当前`,elevated:`提权后`,summary:`直到 {time}({duration}后),然后恢复为{from}。`,nextCall:`在智能体的下次调用时生效。你可以从密钥的菜单中提前结束。`,submit:`提权`,failed:`无法为密钥提权`,done:`密钥已提权`,doneDescription:`{name} 在 {time} 之前以{mode}模式工作,然后恢复为{from}。`},elevation:{left:`剩余 {time}`,ownMode:`原有模式:{mode}`,tooltip:`由 {who} 从{from}提权,直到 {time}`,requestedReason:`智能体请求:“{reason}”`,byYou:`你`,temporary:`临时提权`,marker:`从{from}临时提权,直到 {time}`,endMenu:`立即结束提权`,ended:`提权已结束`,endedDescription:`{name} 已恢复为{mode}模式。`,endFailed:`无法结束提权`,bannerTitle:[[2,`count`,{other:[[4],` 个智能体密钥已提权`]}]],bannerItem:`{name}:{from} → {to},直到 {time}`,endNow:`立即结束`,endAll:`全部立即结束`,endsIn:`{time}后结束`,extendAll:`全部延长 {duration}`,howModes:`需要临时获得更多自主权?请临时为密钥提权,而不是让它一直处于自动模式:它会自动恢复到原有模式。`},create:{title:`创建智能体密钥`,description:`此密钥以你选择的模式,在你能打开的每个站点上作为智能体行事。`,stepMode:`第 1 步,共 2 步 · 选择模式`,stepDetails:`第 2 步,共 2 步 · 名称和权限范围`,continue:`继续`,mode:`模式`,changeMode:`更改`,name:`名称`,namePlaceholder:`例如:我笔记本上的 Claude Code`,nameHint:`智能体会以此名称显示在动态日志中。`,nameRequired:`请为密钥命名`,advanced:`高级:权限范围`,advancedHint:`已按{mode}模式预填。权限范围是硬性上限;模式决定哪些需要等你处理。`,customised:`已自定义`,resetScopes:`使用模式的权限范围`,missingScopesTitle:`此模式允许的部分操作将无法执行`,missingScopes:`缺少 {scopes} 时,智能体无法执行{mode}模式允许的所有操作。`,scopes:`权限范围`,scopesRequired:`请至少选择一个权限范围`,groups:{read:`读取`,write:`写入`,release:`发布和回滚`},groupHints:{read:`足以满足研究、总结或审阅类智能体。`,write:`更改会生成快照,并可回滚。`,release:`让智能体更改(或请求更改)访客看到的内容。`},submit:`创建密钥`,failed:`无法创建密钥`,scopeAboveRole:`你的角色无法将此权限授予密钥。`,scopeNarrowed:`你的角色仅对你自己的内容授予 {scope}。`,errors:{scopeAboveRole:`你的角色无法将其中某些权限范围授予密钥。请取消勾选后重试。`,modeAboveRole:`你的角色不允许此模式的密钥。请选择自主性较低的模式。`}},reveal:{title:`复制你的新密钥`,description:`“{name}”已就绪。你的智能体通过 x-api-key 请求头发送它。`,warningTitle:`你将无法再次看到此密钥`,warning:`请立即将它保存在你的密码管理器或智能体的密钥存储中。如果丢失,请吊销并创建新密钥。`,key:`智能体密钥`,config:`客户端配置`,done:`我已保存密钥`},connect:{title:`连接 MCP 客户端`,description:`智能体通过此地址以 MCP 访问 Studio,并在请求头中发送密钥。连接时,智能体会得知其密钥的模式,从而知道哪些需要等你处理。`,endpoint:`MCP 端点`,header:`请求头`,tabs:{json:`JSON`,claude:`Claude Code`,stdio:`本地`},stdioHint:`在你自己的机器上,于站点文件夹中运行 stdio 服务器;无需密钥。--mode 设置其工作方式,且只有在这里才能使用 bypass。`}},activity:{search:`搜索工具、操作者或技能`,refresh:`刷新动态`,filters:{label:`筛选`,kind:`操作者类型`,decision:`决定`,allKinds:`所有操作者`,allDecisions:`所有决定`},kinds:{agent:`智能体`,human:`人员`,system:`系统`},decisions:{allow:`已允许`,deny:`已拒绝`,"approval-required":`需要审批`},outcomes:{ok:`成功`,error:`失败`,pending:`待处理`},columns:{when:`时间`,actor:`操作者`,tool:`工具`,decision:`决定`,outcome:`结果`,skill:`技能`,snapshot:`快照`},empty:`还没有动态`,emptyDescription:`智能体或人员通过 MCP 进行的每次工具调用都会记录在这里:已允许、已拒绝或等待审批。`,noMatches:`没有符合这些筛选条件的事件`,noMatchesDescription:`筛选仅作用于已加载的事件。加载更多以查看更早的记录。`,clearFilters:`清除筛选`,showing:`显示已加载的 {loaded} 个事件中的 {shown} 个`,allLoaded:`已到第一条记录的事件。`,loadMore:`加载更多`,notEnabledTitle:`此服务器不保留动态日志`,notEnabledDescription:`使用 cloudhal studio 运行 Studio,即可记录每次智能体和人员的工具调用。`,ownOnlyTitle:`你的动态`,ownOnly:`你可以看到你和你的智能体在此站点上的操作。编辑者及以上角色可以看到所有人的动态。`,viewEvent:`显示详情`,detail:{when:`时间`,actor:`操作者`,decision:`决定`,outcome:`结果`,skill:`技能`,duration:`耗时`,durationValue:`{ms} 毫秒`,snapshot:`快照`,viewChanges:`查看更改`,reason:`原因`,input:`输入`,noInput:`此调用没有输入。`,event:`事件 #{id}`,mode:`模式`,modeHint:`智能体密钥在进行此调用时所处的模式。`,elevation:`提权`,elevationHint:`密钥的原有模式是{from}。其所有者临时授予了更多自主权;提权结束后,密钥会恢复以{from}模式工作。`,elevationGranted:`已授予提权`,elevationGrantedUntil:`{mode}模式直到 {time},然后恢复为{from}。`,requestedByAgent:`响应智能体的请求`},autoApproved:`自动批准`,autoApprovedHint:`无人参与即上线:智能体以自动模式工作,且此发布风险较低。`,autoApprovedTitle:`无人参与发布`,autoApprovedCount:`已发布的文章更改:{count}`,autoApprovedDescription:`智能体以自动模式工作,且此发布仅添加或编辑了文章。你可以在“快照”中回滚。`,autoApprovedDescriptionCount:`智能体以自动模式工作,且此发布仅添加或编辑了文章(共 {count} 处)。你可以在“快照”中回滚。`,requestedByAgent:`由智能体请求`,requestedByAgentHint:`智能体请求了此提权,并由人员在“审批”中授予。`,recent:`最近动态`,recentEmpty:`还没有智能体动态`,recentEmptyDescription:`连接智能体后,其工具调用会显示在这里。`},account:{description:`你的个人资料、登录方式,以及还有谁可以进入此 Studio。`,sections:{profile:`个人资料`,password:`密码`,sessions:`活动会话`,notifications:`通知`,access:`Studio 访问`,server:`此服务器`},notifications:{description:`顶栏中的铃铛会列出即将结束的提权和请求提权的智能体。Studio 在后台标签页中时也可以通知你。`,switch:`提权即将结束或智能体请求提权时,在此浏览器中通知我`,switchHint:`仅在 Studio 于某个标签页中打开时。每条通知只出现一次。`,permission:`浏览器权限`,permissions:{granted:`已允许`,default:`尚未询问`,denied:`已阻止`},permissionHints:{granted:`此浏览器允许 Studio 显示通知。`,default:`开启通知时,浏览器会询问你。`,denied:`需在浏览器中更改,而不是在 Studio 中。`},deniedTitle:`Studio 的通知已被阻止`,denied:`如需开启,请在浏览器的网站设置(地址旁的图标)中允许此网站的通知,然后重新加载 Studio。`,unsupported:`此浏览器无法显示通知。顶栏中的铃铛仍会列出所有内容。`,enabled:`浏览器通知已开启`,test:`发送测试通知`,testTitle:`通知已开启`,testBody:`提权即将结束或智能体请求提权时,Studio 会这样通知你。`},profile:{description:`你在 Studio 和各站点动态日志中的显示方式。`,name:`名称`,nameHint:`显示在你所做的更改和审批旁边。`,email:`电子邮件`,emailHint:`你使用此地址登录。无法在此更改。`,memberSince:`加入于 {date}`,actorId:`操作者 ID`,actorIdHint:`动态和快照用来识别你的方式。`,role:`角色`,roleHint:`你在此可以做的事。由管理员或所有者更改。`,saved:`个人资料已保存`,failed:`无法保存你的个人资料`,errors:{required:`请输入你的名称`,tooLong:`最多 {max} 个字符`}},password:{description:`请使用一个未在其他地方用过的长密码短语。`,current:`当前密码`,new:`新密码`,newHint:`至少 {min} 个字符。`,confirmHint:`再次输入新密码。`,confirm:`确认新密码`,show:`显示密码`,hide:`隐藏密码`,signOutOthers:`退出所有其他会话`,signOutOthersHint:`如果有人可能知道你的旧密码,建议这样做。`,submit:`更改密码`,changed:`密码已更改`,changedOthers:`你的其他会话已退出登录。`,failed:`无法更改你的密码`,errors:{currentRequired:`请输入当前密码`,currentWrong:`这不是你的当前密码`,newRequired:`请输入新密码`,tooShort:`至少 {min} 个字符`,tooLong:`最多 {max} 个字符`,same:`请选择与当前密码不同的密码`,confirmRequired:`请再次输入新密码`,mismatch:`两次输入的密码不一致`}},sessions:{showAll:`显示全部 {count} 个`,showFewer:`收起`,description:`登录你账户的浏览器和客户端。退出任何你不认识的会话。智能体密钥列在“智能体”下。`,columns:{device:`设备`,ip:`IP 地址`,lastActive:`最近活动`,signedIn:`登录时间`},current:`此设备`,unknownDevice:`未知设备`,unknownIp:`未知`,deviceOn:`{os} 上的 {browser}`,revoke:`退出登录`,revokeLabel:`退出 {device}`,signOutOthers:`退出其他会话`,onlyThis:`这是你唯一的活动会话。`,count:`{count} 个活动`,revokeTitle:`退出此会话?`,revokeDescription:`{device} 需要重新登录。`,revokeOthersTitle:`退出所有其他会话?`,revokeOthersDescription:`除此之外的所有浏览器和客户端都需要重新登录。智能体密钥继续有效。`,revoked:`会话已退出`,revokedOthers:`其他会话已退出`,staleTitle:`重新登录以查看你的会话`,staleDescription:`为了你的安全,查看会话列表需要在最近 24 小时内登录过。`,signInAgain:`重新登录`},access:{description:`谁可以在此 Studio 上创建账户。这在服务器运行处设置,而不是在这里。`,signUp:`注册`,policies:{"first-user":`仅所有者`,closed:`已关闭`,open:`对所有人开放`,unknown:`未报告`},explanations:{"first-user":`第一个注册的人成为所有者,之后注册随即关闭。其他人需要由他人为其创建账户。`,closed:`任何人都无法注册。账户由所有者创建。`,open:`任何能访问此地址的人都可以创建账户,且每个账户都拥有所有站点的完全访问权限。`,unknown:`此服务器未报告注册的配置方式。`},openWarningTitle:`任何人都可以注册`,openWarning:`每个账户都拥有所有站点的完全访问权限。分享此地址前请关闭注册。`,howToChange:`在 Cloudflare 上,将管理 Worker 的 CLOUDHAL_SIGNUP 设为 open 或 closed(未设置表示仅所有者)。你机器上的 cloudhal studio 始终为仅所有者。`,serverDescription:`此 Studio 部署运行的内容。`,features:{members:`团队和角色`,agentKeys:`智能体密钥`,mcp:`MCP 服务器`,activity:`动态日志`,previewLinks:`预览链接`,deployTransfer:`部署和传输`,approvals:`Studio 中的审批`,elevationRequests:`提权请求`},featureHints:{members:`成员通过邀请链接加入,并担任某个角色:所有者、管理员、编辑者、作者或投稿者。`,agentKeys:`智能体和 CI 任务使用你创建的密钥登录。`,mcp:`智能体在 /mcp 连接。`,activity:`每次工具调用都按站点记录。`,previewLinks:`在已部署站点上显示草稿的签名链接。`,deployTransfer:`cloudhal push 和 pull 可以访问此服务器。`,approvals:`智能体的发布、回滚和删除请求会在这里等待人工处理。`,elevationRequests:`智能体可以请求临时使用更高自主的模式;由人员在“审批”中授予。`}}},siteSettings:{sections:{general:`常规`,domains:`域名`,appearance:`外观`,design:`设计规范`,previews:`预览链接`},design:{description:`以 Markdown 编写的品牌和设计规范(DESIGN.md)。每个智能体和构建对话在构建前都会读取它们:站点的用途、颜色和字体、优先使用的布局和组件、页面范例,以及要避免的内容。它们影响选择,但从不影响权限。`,label:`此站点的规范`,placeholder:`## 品牌
2
2
  站点的用途、读者和语气。
3
3
 
4
4
  ## 布局
5
5
  …`,template:`从标题模板开始`,theme:`{theme} 主题的规范`,themeHint:`智能体会先读取这些;与之不同时,以你的规范为准。`,noTheme:`{theme} 主题没有附带设计规范。`,warnings:`值得一看`,saved:`设计规范已保存`,failed:`无法保存设计规范`,count:`{count}/{max} 个字符`,agentHint:`智能体可以提议更改;这些更改会在“审批”中等待人工处理。`},appearance:{description:`{theme} 主题允许你更改的颜色、字体和形状。`,none:`{theme} 主题没有可更改的设计设置。`,publishHint:`保存的更改会在下次发布后显示在站点上。`,saved:`外观已保存`,failed:`无法保存外观`},conflictTitle:`此站点已在别处更改`,conflictDescription:`在你打开后,有人或智能体保存了此站点。请加载最新版本,检查你的更改后再次保存。`,loadLatest:`加载最新版本`,general:{description:`智能体和主题看到的此站点基本信息。`,name:`站点名称`,nameHint:`显示在 Studio 中,并可供主题使用。`,slug:`别名`,slugHint:`在 CLI 和 API 中标识站点。无法更改。`,siteId:`站点 ID`,defaultLocale:`默认语言`,defaultLocaleHint:`用于未指定语言的新页面和文章。`,locales:`语言`,localesHint:`此站点发布所用的语言。`,saved:`设置已保存`,failed:`无法保存设置`,errors:{required:`请为站点命名`,tooLong:`最多 {max} 个字符`}},domains:{description:`为此站点提供服务的主机名。主域名用于预览链接。`,dnsHint:`在此添加域名只会将其记录到站点上。请另行将其 DNS 指向你的部署。`,columns:{hostname:`主机名`,role:`角色`},primary:`主域名`,alias:`别名域名`,add:`添加域名`,hostname:`主机名`,placeholder:`www.example.com`,makePrimary:`设为主域名`,remove:`移除域名`,visit:`访问`,empty:`还没有域名`,emptyDescription:`添加访客使用的主机名。在此之前,预览链接只提供令牌,不含 URL。`,added:`域名已添加`,addedDescription:`{hostname} 现在为此站点提供服务。`,addedPrimaryDescription:`{hostname} 是主域名。`,removed:`域名已移除`,primaryChanged:`主域名已更改`,primaryChangedDescription:`{hostname} 现在是主域名。`,removeTitle:`移除 {hostname}?`,removeDescription:`站点将不再列出此主机名。其 DNS 不会更改。`,removePrimaryDetail:`{next} 将成为主域名。`,removeLastDetail:`站点将没有域名,因此预览链接不会包含 URL。`,failed:`无法更新域名`,errors:{required:`请输入主机名`,invalid:`请使用类似 blog.example.com 的主机名:字母、数字和连字符,不含端口`,tooLong:`主机名最多 253 个字符`,duplicate:`此站点已有该域名`}},previews:{description:`签名链接,让没有 Studio 账户的人也能在已部署站点上查看草稿或更早的快照。`,target:`显示`,targets:{live:`当前草稿`,snapshot:`某个快照`},targetHints:{live:`Studio 中保存的所有内容,无论是否已发布。`,snapshot:`站点在该快照时的确切样子。`},snapshot:`快照`,snapshotPlaceholder:`选择快照`,noSnapshots:`此站点还没有快照。`,snapshotRequired:`请选择快照`,live:`线上`,path:`页面`,pathHint:`留空则为首页。`,pathPlaceholder:`blog/hello`,pathInvalid:`请使用类似 /blog/hello 的路径,而不是完整 URL`,ttl:`有效期`,ttls:{"1h":`1 小时`,"1d":`1 天`,"7d":`7 天`},create:`创建链接`,created:`预览链接已创建`,result:`预览链接`,expires:`{when}过期`,opens:`打开 {path}`,showing:{live:`草稿`,snapshot:`快照`},openLink:`打开链接`,token:`令牌`,noDomainTitle:`此站点没有域名,因此没有完整 URL`,noDomainDescription:`请在上方添加域名,或在已部署站点的地址后附加 ?cloudhal-preview= 和此令牌。`,revokeHint:`链接无法逐个吊销;它们会在过期时失效。轮换预览密钥会一次性使所有链接失效。`,notEnabledTitle:`此服务器未启用预览链接`,notEnabledDescription:`在管理 Worker 上设置 CLOUDHAL_PREVIEW_SECRET 密钥即可签名链接。你机器上的 cloudhal studio 会改为在编辑器预览中显示草稿。`,failed:`无法创建链接`}},skills:{description:`智能体通过 MCP 读取的操作手册。在技能下进行的调用只能使用它声明的权限范围,其中列出的工具始终需要等待人工处理。`,search:`搜索技能`,columns:{skill:`技能`,scopes:`权限范围`,approval:`需要审批`,references:`参考文件`},none:`无`,referenceCount:[[2,`count`,{other:[[4],` 个文件`]}]],empty:`未加载任何技能`,emptyDescription:`在项目的 skills/ 下添加一个包含 SKILL.md 的文件夹,然后重启 Studio。`,noMatches:`没有匹配“{query}”的技能`,notEnabledTitle:`此服务器未运行 MCP`,notEnabledDescription:`技能通过 MCP 提供给智能体。使用 cloudhal studio 启动 Studio,或部署管理 Worker,即可提供技能。`,view:`显示详情`,detail:{scopes:`权限范围`,scopesHint:`此技能下的调用最多只能使用这些权限,且永远不会超过密钥本身的权限。`,approval:`始终由人批准`,approvalHint:`在此技能下,无论密钥允许什么,这些工具都会暂停等待人工处理。`,noApproval:`除始终需要审批的工具外,没有额外的审批。`,requires:`需要`,references:`参考文件`,noReferences:`没有参考文件。`,resource:`MCP 资源`,call:`在此技能下调用工具`},how:{title:`智能体如何使用技能`,steps:{read:`智能体列出 skill:// 资源,并读取适合任务的 SKILL.md。`,declare:`每次工具调用都在请求元数据中注明技能:`,narrow:`策略将该调用限制在技能的权限范围内,且永远不会超出密钥本身的权限范围。`,approve:`技能列为需要审批的工具会暂停,直到有人同意。`},example:`技能下的工具调用`},add:{title:`添加你自己的技能`,description:`Studio 从你项目的 skills/ 文件夹加载技能。没有该文件夹时,提供官方技能集。`}},notifications:{title:`通知`,bellCount:`通知({count})`,empty:`全部处理完了`,emptyDescription:`提权即将结束或智能体请求提权时,会显示在这里。`,settings:`通知设置`,openAgents:`打开智能体`,openTeam:`打开团队`,memberJoined:{title:`{name} 已加入`,body:`接受了你的邀请。`,toast:`对方接受了你的邀请,现在担任{role}。`},roleChanged:{title:`你的角色现在是{role}`,body:`由 {name} 更改。你和你的智能体能做的事也随之改变。`},ending:{title:`提权即将结束`,sentence:`{name} 的{mode}模式将在 {left}后({time})结束,然后恢复为{from}。`},request:{title:`{agent} 请求{mode} · {duration}`,reason:`“{reason}”`,review:`审阅`},comments:{pending:{title:[[2,`count`,{other:[[4],` 条评论等待审核`]}]],body:`最早的一条已等待 {age}。`,bodyNew:`在有人批准之前,没有人能看到它们。`},reported:{title:[[2,`count`,{other:[[4],` 条评论被举报`]}]],body:`读者标记了它们。举报本身不会隐藏任何内容。`},paused:{title:`今天的评论已暂停`,body:`已达到每日上限({cap})。在 UTC 午夜之前,新评论会被拒绝。`},purgeWaiting:{title:`已隐藏的评论可能仍在线上页面上`,body:`{count} 个页面正在等待缓存刷新。`,purge:`清除站点缓存`,purged:`站点缓存已清除`,failed:`无法清除缓存`},approval:{title:`{agent} 有关于评论的请求`,tools:{moderate:`它请求批准或恢复评论。你批准后它们将公开。`,reply:`它起草了一条将以你的名字发布的回复。`,thread:`它请求重新开放某篇文章的评论。`,label:`它请求为评论添加标签。`}},review:`审阅`,open:`打开评论`,settings:`评论设置`},toast:{endingTitle:`{name} 的{mode}模式将在 {left}后结束`,endingBody:`它将在 {time} 恢复为{from}。如果智能体仍然需要,请延长。`},extend:{button:`延长 {duration}`,group:`延长提权`,more:`其他时长`,fromNow:`从现在开始计算`,presets:{30:`30 分钟`,60:`1 小时`,240:`4 小时`},presetUntil:`{duration} · 直到 {time}`,done:`提权已延长`,failed:`无法延长提权`,gone:`此提权已结束`,goneDescription:`没有延长任何内容。如需再次为密钥提权,请在“智能体”页面使用“临时提权”。`}},approvals:{refresh:`刷新审批`,pending:`等待你处理`,pendingDescription:`批准后,智能体可以执行一次完全相同的调用,或获得其请求的提权。拒绝会通知智能体。`,history:`历史`,noPending:`没有等待你处理的内容`,noPendingDescription:`当智能体请求发布、回滚或删除,请求临时使用更高自主的模式,或在手动模式下想要更改任何内容时,其请求会显示在这里,智能体会等待你的决定。`,elevation:{badge:`提权请求`,sentence:`{agent} 请求以{mode}模式工作 {duration}。`,history:`提权至{mode} · {duration}`,historyShortened:`提权至{mode} · {duration}(请求 {asked})`,reasonLabel:`智能体的理由`,noReason:`智能体未提供理由。`,untilIfNow:`如果现在批准:直到 {time}`,hint:`批准后,会在你选择的时间内授予智能体密钥该模式,之后密钥会自动恢复到原有模式。站点上不会有任何变化。`,granted:`已授予`,cannotTake:`{agent} 的密钥现在本身就以{own}模式工作,因此没有可授予的内容。请拒绝该请求以通知智能体。`,title:`授予 {agent} {mode}模式?`,description:`这是 {agent} 请求的。你可以缩短时间,但不能延长。`,mode:`模式`,modeFixed:`按请求授予。如需授予其他模式,请拒绝此请求,并从“智能体”为密钥提权。`,presetHours:`{count} 小时`,presetMinutes:`{count} 分钟`,requested:`请求时长:{duration}。可以更短,但不能更长。`,summary:`{agent} 在 {time} 之前以{mode}模式工作,然后恢复为{from}。`,summaryNoOwn:`{agent} 在 {time} 之前以{mode}模式工作,然后恢复为原有模式。`,nextCall:`在智能体的下次调用时生效。你可以从“智能体”中提前结束。`,submit:`授予提权`,failed:`无法授予提权`,stillPending:`请求在待处理期间会保留在列表中。你可以拒绝它,或在密钥可以接受时授予。`,done:`提权已授予`,doneDescription:`{agent} 在 {time} 之前以{mode}模式工作,然后恢复为{from}。`,doneDescriptionNoOwn:`{agent} 在 {time} 之前以{mode}模式工作。`,asksFor:`请求{mode}`,asksForTooltip:`{agent} 请求以{mode}模式工作 {duration}。打开“审批”进行决定。`},manualPrompt:`{agent} 以手动模式工作,因此此更改需等你处理:{tool}。`,manualPromptShort:`手动模式:{tool}`,bodyChanges:`批准后“{title}”中的变化`,manualHint:`手动模式会在每次更改前询问。批准后,智能体可以用完全相同的参数进行这一次编辑;它会像其他更改一样生成快照。`,autoHeldBack:`自动模式会自行发布小型文章更新。此次需等你处理,因为{reason}。`,autoCheck:{"removes-content":`它移除了内容`,nothing:`没有新的内容可发布`,structure:`它更改了页面、菜单、站点设置、分类法或重定向`,"too-many":`它包含 {changes} 处更改,而自动模式的上限是 {limit}`,media:`它添加或更改了不属于文章更改的媒体`,"outside-window":`它将在智能体的自主时段结束后运行`,correction:`它为已发布的文章添加了更正`},noHistory:`还没有决定`,noHistoryDescription:`已批准、已拒绝、已使用和已过期的请求会列在这里。`,requested:`请求时间`,expires:`过期时间`,expiresSoon:`即将过期`,arguments:`参数`,noArguments:`此调用没有参数。`,approve:`批准`,deny:`拒绝`,withdraw:`撤回`,withdrawn:`请求已撤回`,decide:{own_request:`你不能批准自己的请求。由角色允许的其他人决定。`,not_key_creator:`只有创建此智能体密钥的人才能授予它更多自主权。`,mode_above_role:`你的角色允许的智能体密钥最高为{mode}模式,因此你无法授予此模式。`,missing_scope:`你的角色无法进行此更改,因此你无法批准。`,not_own:`其中包含不属于你的内容。由编辑者及以上角色决定。`},role:{waiting:`等待编辑者处理`,yours:`这是你的请求。你可以撤回。`,prompt:`{name} 想要发布站点。`,foreign:`其中包含他人的 {count} 篇已发布文章,而其角色只能发布自己的内容。`,structure:`它更改了页面、分类、标签或重定向,其角色无法单独发布这些更改。`,generic:`其角色无法单独发布这组更改。`,published:`已批准并发布`,publishedDescription:`{name} 的请求现已上线。`,stateChanged:`此请求之后站点发生了变化`,stateChangedDescription:`该请求已不再与站点匹配,因此已关闭。请自行发布当前状态。`},approved:`请求已批准`,approvedDescription:`{agent} 现在可以执行一次此调用。`,denied:`请求已拒绝`,deniedDescription:`{agent} 将被告知请求已被拒绝。`,failed:`无法记录你的决定`,noLongerPending:`此请求已不再待处理`,noLongerPendingDescription:`在此期间它已被决定、使用或已过期。列表已刷新。`,statuses:{pending:`待处理`,approved:`已批准`,denied:`已拒绝`,consumed:`已使用`,expired:`已过期`},columns:{request:`请求`,status:`状态`,agent:`请求者`,requested:`请求时间`,decided:`决定时间`},decidedBy:`由 {actor}`,decidedByYou:`由你`,notEnabledTitle:`此服务器不保留审批`,notEnabledDescription:`在这里,智能体的发布和回滚请求在其 MCP 客户端中确认。Studio 中的审批需要 cloudhal studio 或管理 Worker。`,confirm:{title:`批准“{tool}”?`,requestedBy:`由 {agent} 请求`,singleUseTitle:`一次性,仅适用于站点的当前状态`,singleUse:`{agent} 可以执行一次完全相同的调用。如果在智能体再次调用前站点有任何变化,批准即失效,它必须重新请求。`,changes:`大致更改`,changesHint:`线上版本与最新快照的比较。该快照之后保存的编辑也会一并发布,但不计入此处。`,viewChanges:`查看更改`,first:`还没有任何内容上线:此次发布将首次公开站点。`,upToDate:`最新快照已经上线,因此只会发布此后保存的编辑。`,rollbackTarget:`线上站点将回到`,deleteTarget:`删除`,submit:`批准`},banner:{title:[[2,`count`,{"=1":[`有一个智能体请求正在等待你批准`],other:[[4],` 个智能体请求正在等待你批准`]}]],description:`在有人决定之前,智能体无法发布、回滚或删除,手动模式下的智能体无法更改任何内容。`,action:`审阅请求`}},tools:{list_assets:`列出媒体`,get_asset:`获取媒体文件`,upload_asset:`上传媒体`,fetch_asset_url:`从 URL 添加媒体`,update_asset:`更新媒体详情`,retire_asset:`停用媒体`,restore_asset:`恢复媒体`,delete_asset:`删除媒体`,assetUpload:`上传文件`,assetUpdate:`更新文件详情`,assetRetire:`停用文件`,assetRestore:`恢复文件`,assetDelete:`删除文件`,assetPurge:`下架文件`,assetLiftPurge:`重新允许文件`,list_sites:`列出站点`,get_site:`获取站点`,list_pages:`列出页面`,get_page:`获取页面`,create_page:`创建页面`,update_page:`更新页面`,delete_page:`删除页面`,list_entries:`列出文章`,get_entry:`获取文章`,create_entry:`创建文章`,update_entry:`更新文章`,add_correction:`添加更正`,delete_entry:`删除文章`,get_theme_settings:`读取设计设置`,set_theme_settings:`更改设计设置`,list_block_types:`列出块类型`,get_body:`读取正文`,edit_body:`编辑正文`,diff_node:`比较版本`,create_snapshot:`创建快照`,list_snapshots:`列出快照`,diff_snapshots:`比较快照`,preview_page:`预览页面`,publish:`发布站点`,rollback:`回滚站点`,list_menus:`列出菜单`,get_menu:`获取菜单`,update_menu:`更新菜单`,set_menu:`替换菜单`,delete_menu:`删除菜单`,request_elevation:`请求提权`,list_comments:`列出评论`,get_comment_thread:`读取评论串`,comments_summary:`汇总评论`,label_comments:`标记评论`,moderate_comments:`审核评论`,draft_comment_reply:`起草评论回复`,set_comment_thread:`更改评论串`,list_schedule:`列出计划`,get_schedule:`获取计划项`,list_releases:`列出发布批次`,get_release:`获取发布批次`,propose_release:`提议发布批次`,schedule_release:`计划发布批次`,reschedule:`移动发布批次`,cancel_schedule:`取消发布批次`,set_embargo:`设置禁发期`,lift_embargo:`解除禁发期`,schedule_unpublish:`计划到期下线`,list_automations:`列出自动化`,list_runs:`列出运行`,get_run:`获取运行`,begin_run:`开始运行`,end_run:`结束运行`,pause_automation:`暂停自动化`,get_mode:`获取模式`,agentKeyMode:`更改智能体密钥模式`,agentKeyElevate:`为智能体密钥提权`,agentKeyElevationEnd:`结束提权`,agentKeyNarrow:`收窄智能体密钥`,agentKeyRevoke:`吊销智能体密钥`,memberInvite:`邀请成员`,memberInviteRevoke:`吊销邀请`,memberInviteFailed:`邀请邮件发送失败`,memberInviteAccept:`接受邀请`,memberRole:`更改成员角色`,memberRemove:`移除成员`,memberTransferOwnership:`转让所有权`,memberPasswordReset:`创建密码重置链接`,memberPasswordResetComplete:`重置密码`},preview:{title:`预览`,frameTitle:`{name} 的预览`,device:`设备宽度`,desktop:`桌面设备`,tablet:`平板电脑`,mobile:`手机`,reload:`重新加载预览`,openInNewTab:`在新标签页中打开预览`,loading:`正在加载预览…`,unsaved:`有未保存的更改`,unsavedHint:`预览显示的是上次保存的版本。保存即可更新。`,edit:`编辑`,show:`显示预览`,hide:`隐藏预览`,toggleHint:`在表单旁显示上次保存的版本`,toggleHintLive:`在表单旁显示包含未保存更改的页面`,openSaved:`在新标签页中打开已保存的版本`,failed:`预览不可用`},proposals:{title:`建议`,count:`{count} 条待处理`,from:`{name} 建议`,outOfDate:`已过时`,outOfDateHint:`提出此建议后文本已更改。请拒绝它,或请求新的建议。`,accept:`接受`,reject:`拒绝`,saveFirst:`请先保存或放弃你的更改。`,accepted:`建议已接受`,rejected:`建议已拒绝`,failed:`无法处理此建议`,steps:`要接受的更改`,acceptSome:`接受 {total} 处中的 {count} 处`,chooseRequired:`请至少选择一处更改。`,step:{replace:`改写“{before}”`,replaceText:`将“{before}”改为“{after}”`,insert:`添加“{after}”`,move:`移动“{before}”`,delete:`移除“{before}”`},aBlock:`一个块`},coverage:{scope:`哪些站点`,thisSite:`此站点`,allSites:`项目中的所有站点`,siteLanguage:`{site} · {language}`,search:`按标题搜索`,filter:`显示`,needsWork:`待处理`,all:`全部`,item:`页面或文章`,page:`页面`,article:`文章`,missing:`缺失`,toReview:`待审核`,oneLanguage:`此网站只有一种语言`,oneLanguageDescription:`在网站设置中添加语言,翻译会显示在这里。`,openSettings:`打开语言设置`,allDone:`没有待处理的内容`,empty:`这里还没有内容`,emptyDescription:`每种语言都有最新且已审核的版本。`},languages:{title:`语言`,description:`本网站发布所用的语言,以及读者如何访问它们。其他语言的页面或文章是原文的翻译。`,language:`语言`,tag:`标签`,default:`默认`,remove:`移除{language}`,add:`添加语言`,addHint:`从列表中选择,或输入任意 BCP 47 标签,例如 gsw 或 pt-AO。`,addPlaceholder:`搜索语言`,useTag:`使用标签 {tag}`,noMatch:`没有匹配的语言。输入 BCP 47 标签即可使用。`,clear:`清除`,showOptions:`显示语言`,routing:`网址`,routingHint:`每种语言所在的位置。其他语言始终带有前缀。`,routingOptions:{prefixExceptDefault:`默认语言位于根目录,其他语言位于各自前缀下`,prefixAll:`所有语言都位于各自前缀下`},fallback:`缺少翻译时`,fallbackHint:`读者访问没有该语言版本的网址时看到的内容。`,fallbackOptions:{none:`未找到`,defaultWithNotice:`显示原文并附提示,不被搜索引擎收录`},review:`发布前审核`,reviewHint:`这些内容的机器翻译只有在人工审核后才会上线。`,reviewOptions:{pages:`页面`,posts:`文章`},label:`机器翻译提示`,labelHint:`读者何时会看到页面是自动翻译的。`,labelOptions:{unreviewed:`直到有人审核翻译`,always:`始终显示,审核后也显示`},saved:`语言已保存`,failed:`无法保存语言`},glossary:{title:`术语表`,description:`智能体翻译时保留的术语:从不翻译的名称,以及每种语言中认可的译法。`,empty:`暂无术语`,emptyDescription:`添加品牌和产品名称,以及有固定译法的词语。`,oneLanguage:`请先添加第二种语言:术语表保存网站其他语言的词语。`,term:`术语`,neverTranslate:`不翻译`,translationIn:`{language}`,add:`添加术语`,remove:`移除{term}`,saved:`术语表已保存`,failed:`无法保存术语表`},translations:{title:`翻译`,none:`仅有{language}版`,noneDescription:`智能体会将页面和文章翻译成网站的其他语言,每个语言版本都会显示在这里。`,current:`此版本`,method:{original:`原文`,human:`人工翻译`,machine:`机器翻译`,machineReviewed:`机器翻译(已审核)`},stale:`已过时`,sourceMissing:`原文已删除`,review:`标记为已审核`,reviewTitle:`将此翻译标记为已审核?`,reviewDescription:`你确认已有人对照原文阅读了这份机器翻译。除非网站设置为始终显示,读者将不再看到机器翻译提示。`,reviewSaveFirst:`请先保存更改再审核。`},translationList:{column:`语言`,filter:`语言`,grouped:`所有语言(分组)`,state:[[0,`language`],`:`,[3,`state`,{published:[`已发布`],draft:[`草稿`],outdated:[`已过时`],review:[`待审阅`],missing:[`缺失`],other:[`缺失`]}]],summary:[[1,`count`],`/`,[1,`total`]],summaryLabel:[[1,`count`],`/`,[2,`total`,{other:[[4],` 种语言`]}]],writeByHand:`手动撰写`},diff:{title:`{name} 中的更改`,against:`比较对象`,previous:`上一个快照`,live:`线上版本`,descriptions:{previous:`自上一个快照以来的变化。`,live:`如果此快照替换线上版本,会发生的变化。`},added:`已添加`,changed:`已更改`,removed:`已移除`,counts:{added:`添加 {count} 项`,changed:`更改 {count} 项`,removed:`移除 {count} 项`},none:`没有差异`,noneDescription:`两个快照的内容完全相同。`,nothingToCompare:`没有可比较的对象`,nothingToCompareDescription:`这是站点的第一个快照,且没有其他线上版本,因此暂时没有可比较的对象。`,kinds:{site:`站点设置`,page:`页面`,contentEntry:`文章`,taxonomy:`分类法`,term:`分类项`,redirect:`重定向`,menu:`菜单`,asset:`媒体`,glossary:`术语表`},gone:`已不存在`,revs:`版本 {from} → {to}`,rev:`版本 {rev}`,columns:{item:`项目`,revision:`版本`},textChanges:{show:`显示更改`,hide:`隐藏更改`,loading:`正在加载两个版本…`,body:`正文`,title:`标题`,summary:`摘要`,slug:`别名`,path:`路径`,section:`{kind}区块`,sectionAdded:`已添加`,sectionRemoved:`已移除`,sectionChanged:`已更改`,noTextChanges:`仅设置有更改;文本相同。`,added:`已添加`,removed:`已移除`,edited:`已编辑`,unchanged:[[2,`count`,{other:[[4],` 个未更改的块`]}]],wordsAdded:`+{count} 字`,wordsRemoved:`−{count} 字`,same:`没有文本更改`},assignments:{added:`+ {taxonomy} {name}`,removed:`− {taxonomy} {name}`,primary:`主{taxonomy} → {name}`,none:`无`}},taxonomy:{newTerm:`新建{singular}`,search:`搜索{plural}`,columns:{name:`名称`,usage:`文章`,lastUsed:`最近使用`,index:`搜索引擎`,visibility:`可见性`},filters:{all:`全部`,public:`公开`,internal:`内部`,proposed:`已提议`,retired:`已停用`},state:{proposed:`已提议`,proposedHint:`由智能体提议。可以分配给文章,但在有人批准之前没有公开页面。`,internal:`内部`,internalHint:`没有归档、订阅源或站点地图条目,文章上也不显示。主题和筛选仍可使用它。`,retired:`已停用`,mergedInto:`已合并到 {name}`},visibility:{public:`公开`,internal:`内部`,none:`—`},defaults:{category:{singular:`分类`,plural:`分类`},tag:{singular:`标签`,plural:`标签`}},usage:{value:`{published} / {total}`,hint:`{total} 篇文章中已发布 {published} 篇。在“文章”中打开。`,none:`无`},index:{indexed:`已收录`,indexedHint:`{count} 篇已发布文章:归档会出现在搜索结果和站点地图中。`,thin:`未收录:{count}/{min}`,thinHint:`已发布文章少于 {min} 篇的归档会以 noindex, follow 提供,并且不列入站点地图。`,empty:`空`,emptyHint:`没有已发布的文章:在有文章归入之前,归档返回 404。`,noindex:`noindex`,noindexHint:`已在其搜索设置中对搜索引擎隐藏。`,none:{internal:`无归档`,proposed:`尚未公开`,retired:`已停用`,archiveOff:`归档已关闭`},noneHint:{internal:`内部分类项没有公开归档。`,proposed:`已提议的分类项在有人批准之前没有公开归档。`,retired:`已停用的分类项没有归档;旧链接会重定向或返回 410 Gone。`,archiveOff:`此分类法不发布归档页面。`}},menu:{label:`分类项操作`,edit:`编辑`,view:`查看`,rename:`重命名别名`,merge:`合并到…`,mergeExisting:`合并到已有分类项…`,move:`移动…`,makeInternal:`设为内部`,makePublic:`设为公开`,retire:`停用`},review:{waiting:`等待审核的提议:{count}`,waitingDescription:`这些{plural}由智能体提议。批准即可为其提供公开页面,也可以合并到已有项或拒绝。`,open:`审核`,approve:`批准`,approved:`{name} 已批准`,failed:`无法批准`,reject:`拒绝`,merge:`合并…`,rejectNamed:`拒绝 {name}`,proposedBy:`提议者`},empty:{all:`还没有{plural}`,public:`没有公开的{plural}`,internal:`没有内部{plural}`,proposed:`没有等待审核的内容`,retired:`没有已停用的{plural}`,search:`没有符合搜索的内容`,allDescription:`创建第一个,或让智能体在写作时提议标签。`,filteredDescription:`试试其他筛选条件或搜索。`,noTaxonomies:`还没有分类或标签`,noTaxonomiesDescription:`此站点仍在每篇文章上以纯文本保存标签。将它们迁移到分类和标签;写入任何内容之前,你都会先看到将发生的变化。`},create:{title:`新建{singular}`,description:`为它命名。同义词、简介、图片和搜索设置可以稍后在其编辑器中添加。`,descriptionTree:`为它命名;如果它属于另一个分类,请指定上级。其余内容可以稍后在其编辑器中添加。`,name:`名称({locale})`,slugHint:`其归档的地址。在你更改之前,它会跟随名称变化。`,parentHint:`保留在顶级,或归入另一个分类。`,internal:`内部`,internalHint:`内部分类项没有公开页面;主题和筛选仍可使用它们。`,similarTitle:`这看起来与已有分类项相似`,similar:`相似:{names}。如果意思相同,请使用已有的。`,submit:`创建{singular}`,created:`{name} 已创建`},health:{title:`词汇健康度`,description:`与智能体在打标签前读取的报告相同。每个主题保留一个页面,方便读者和搜索引擎找到。`,issues:`{count} 项待审核`,clean:`没有需要整理的内容`,cleanDescription:`目前没有近似重复、仅用一次或空的分类项。`,nearDuplicates:`近似重复({count})`,nearDuplicatesHint:`可能是同一主题。合并会保留使用较多的那个,并重定向另一个。`,mergeInto:`{source} → {target}`,merge:`合并`,morePairs:`还有 {count} 对`,reasons:{similar:`拼写几乎相同`,plural:`单数和复数`,synonym:`一个的同义词是另一个的名称`},proposed:`等待审核({count})`,review:`审核`,missingPrimary:`没有主{singular}的文章({count})`,missingPrimaryHint:`在选定之前,它们无法提交审核或发布。`,unfiled:`没有{singular}的文章({count})`,unfiledHint:`为它们归类,使其出现在归档和面包屑导航中。`,noIntro:`没有简介的已收录归档({count})`,noIntroHint:`简短的简介有助于读者和搜索引擎`,singleUse:`仅使用一次({count})`,unused:`未用于任何文章({count})`,unusedHint:`停用它们,或将文章归入其中`,empty:`空分类({count})`,emptyHint:`在有文章归入之前,其归档返回 404`,oversized:`过大的分类({count})`,oversizedHint:`超过所有文章的一半;子分类会有帮助`,more:[`还有 `,[1,`count`],` 项`]},rules:{title:`{plural}如何运作`,description:`此分类法的规则。智能体看到的规则相同。`,structure:`结构`,tree:`树形`,flat:`平铺列表`,treeHint:`分类项可以位于上级之下,最多 5 级。`,flatHint:`分类项没有上级。`,newTerms:`新分类项`,newTermsValue:{none:`仅限人员`,propose:`智能体提议`,free:`智能体添加`},newTermsHint:{none:`只有人员可以创建;智能体从已有的分类项中选择。`,propose:`智能体提议新分类项,有人批准后会获得公开页面。`,free:`智能体可以直接添加有效的分类项。`},perArticle:`每篇文章`,required:`必填 · 最多 {max} 个`,optional:`可选 · 最多 {max} 个`,requiredHint:`文章需要至少一个(含一个主项)才能审核或发布。`,optionalHint:`文章可以没有。`,archive:`归档`,archiveHint:`已发布文章达到 {min} 篇时收录;较少的归档为 noindex。`,archiveOff:`不发布归档页面。`}},governance:{oneSnapshot:`一次更改,一个快照。它会在下次发布时上线。`,conflict:`在此期间此分类项已在别处更改。请关闭对话框,在最新版本上重试。`,rename:{title:`重命名 {name} 的别名`,description:`归档会移到新地址。旧地址通过永久重定向继续有效,旧别名也会保留。`,slug:`新别名`,slugHint:`小写字母、数字和单个连字符。`,reclaim:`收回:从之前的分类项释放此别名并删除其重定向`,history:`之前的别名:{slugs}`,confirm:`重命名`,errors:{required:`请输入别名。`,invalid:`请使用小写字母、数字和单个连字符。`,tooLong:`最多 128 个字符。`,taken:`另一个分类项正在使用此别名。`,reserved:`之前有分类项使用过此别名,其旧地址会重定向。请在下方收回后再在此使用。`}},merge:{title:`将 {name} 合并到…`,description:`其文章会移到你选择的分类项,该分类项还会接管其名称和别名,因此旧链接和同义词仍然有效。`,target:`合并到`,targetHint:`同一分类法中的有效分类项。`,targetPlaceholder:`搜索分类项…`,confirm:`合并`},reviewMerge:{title:`将提议 {name} 合并到…`,description:`该提议会被停用,其文章会移到已有分类项,已有分类项会将其名称保留为同义词。`,confirm:`合并`},retire:{title:`停用 {name}`,description:`它会从所有文章中移除,且无法再被分配。其归档可以重定向到另一个分类项。`,redirectTo:`重定向到…`,redirectToHint:`没有重定向时,其归档返回 410 Gone,搜索引擎会永久移除它。`,redirectToParentHint:`未选择时,如果上级分类是公开的,归档会重定向到上级分类。`,noRedirect:`不重定向`,redirectPlaceholder:`搜索分类项…`,confirm:`停用`},move:{title:`移动 {name}`,description:`选择新的上级。文章和地址保持不变;菜单、面包屑导航和上级的归档会变化。`,parent:`上级`,parentHint:`最多 {max} 级。分类不能移到自身或其下级之下。`,parentPlaceholder:`搜索分类…`,topLevel:`顶级`,confirm:`移动`},visibility:{title:{internal:`将 {name} 设为内部`,public:`将 {name} 设为公开`},description:{internal:`其归档、订阅源和站点地图条目会被移除,文章上也不再显示。主题和筛选仍可使用它。`,public:`它会获得公开归档、订阅源和站点地图条目,并在文章上显示。`},confirm:{internal:`设为内部`,public:`设为公开`}},reject:{title:`拒绝提议 {name}`,description:`该提议会被停用,并从带有它的文章中移除。智能体会看到它被拒绝。`,confirm:`拒绝`},preview:{waiting:`做出选择即可查看变化。`,loading:`正在计算变化`,articles:`文章`,noArticles:`没有文章带有它。`,articlesMove:`这些文章会在同一操作中变化。一次更改最多涉及 {limit} 篇文章。`,articlesLose:`这些文章会在同一操作中失去它。一次更改最多涉及 {limit} 篇文章。`,articlesKeep:`这些文章会保留它;其链接会跟随新地址。`,more:`还有 {count} 篇`,redirects:`重定向`,noRedirects:`不会创建重定向。`,permanent:`301 永久`,prefix:`旧地址下的页面和订阅源也会跟随。`,repointed:`{count} 个指向旧地址的现有重定向现在指向新地址。`},tooLarge:{title:`无法一次完成`,description:`这将更改 {count} 篇文章;一次更改最多涉及 {limit} 篇。请拆分为更小的步骤,或请求分阶段任务。`},blocked:{title:`{count} 篇已发布或审核中的文章将失去唯一的分类`,description:`它们需要一个分类。请改为将此分类项合并到另一个,或先将这些文章归入别处。`},gone:{title:`其归档将返回 410 Gone`,description:`{path} 没有重定向,搜索引擎会永久移除它。请在上方选择一个分类项,将访客引向那里。`},hidden:{title:`其归档将不再公开`,description:`下次发布后,{path} 将返回 404。`},appears:{title:`其归档将变为公开`,description:`{path} 将在下次发布时上线。`},done:{rename:`{name} 已重命名`,merge:`{name} 已合并`,reviewMerge:`{name} 已合并`,retire:`{name} 已停用`,reject:`{name} 已拒绝`,move:`{name} 已移动`,visibility:`{name} 的可见性已更改`,detail:`已更改的文章:{entries}。重定向:{redirects}。一个快照;下次发布时上线。`}},taxonomySettings:{titleNew:`新建分类法`,titleEdit:`{Singular}设置`,descriptionNew:`除分类和标签外,用另一种方式组织文章,例如系列或地区。智能体在归类文章前会读取其规则。`,descriptionEdit:`人员和智能体对{plural}遵循的规则。`,open:`{Singular}设置`,newTaxonomy:`新建分类法`,edit:`编辑`,exampleSlug:`summer-2026`,sections:{name:`名称`,terms:`分类项`,termsHint:`智能体总是优先复用已有的分类项。这些规则决定在没有合适项时它们可以做什么。`,articles:`文章上`,archive:`归档页面`},key:`键`,keyHint:`用于筛选和智能体(series:summer-2026)。小写字母、数字和连字符。之后无法更改。`,keyFixed:`键永不改变:文章、筛选和智能体都会引用它。`,singular:`单数({locale})`,plural:`复数({locale})`,singularPlaceholder:`地区`,pluralPlaceholder:`地区`,labelsHint:`Studio、站点和智能体对它的称呼,例如“地区”。`,labelsOptional:`可选。两者都留空则使用 {locale} 名称。`,hierarchical:`分类项可以有上级`,hierarchicalHint:`与分类一样,最多 5 级的树形结构;归档也会列出其子分类项的文章。关闭:与标签一样的平铺列表。`,newTerms:`谁添加新分类项`,newTermsOptions:{none:`仅限人员`,propose:`智能体提议`,free:`智能体自由添加`},newTermsHints:{none:`智能体只能将文章归入已有的分类项。如果没有合适的,它们会说明并询问你。`,propose:`智能体可以建议新的分类项。在有人于此处批准、合并或拒绝之前,它保持私有(无归档,文章上不显示)。`,free:`智能体无需询问即可创建公开分类项(含归档)。适合宽松的词汇表;请留意词汇健康度。`},badges:{safest:`最安全`,recommended:`推荐`,careful:`谨慎使用`},required:`必填`,requiredHint:`文章在提交审核或发布前至少需要一个(含一个主项)。草稿可以暂缓。`,maxPerEntry:`每篇文章最多`,maxPerEntryHint:`留空:最多 {max} 个。`,allCollections:`适用于所有集合`,allCollectionsHint:`关闭:选择其文章可以使用它的集合。`,collections:`集合`,archiveEnabled:`公开归档页面`,archiveEnabledHint:`每个有已发布文章的公开分类项都会获得一个列出其文章的页面。`,basePath:`地址`,basePathHint:`归档位于类似 {example} 的地址。`,feed:`每个分类项的 RSS 订阅源`,feedHint:`位于 {example}/rss.xml。`,feedNeedsArchive:`需要公开归档页面。`,minEntries:`被搜索引擎收录所需的文章数`,minEntriesHint:`已发布文章较少的归档会以 noindex, follow 提供,并且不列入站点地图。0:从第一篇文章起即收录。`,move:{title:`地址变更`,description:`归档会移动。旧地址通过永久重定向继续有效。`,offTitle:`归档页面将返回 404`,offDescription:`不会创建重定向:下次发布后,指向 {path}/… 的链接将失效。`,onTitle:`归档将在 {path}/… 公开`,onDescription:`下次发布后,有已发布文章的分类项会获得页面。`},create:`创建分类法`,save:`保存设置`,created:`{name} 已创建`,saved:`{name} 设置已保存`,errors:{keyRequired:`请输入键。`,keyInvalid:`请使用小写字母、数字和单个连字符,例如 series 或 reading-list。`,keyTooLong:`最多 128 个字符。`,keyReserved:`“{key}”是筛选语言的保留字(primary、collection、locale、status、id)。`,keyTaken:`此站点已有使用此键的分类法。`,labelRequired:`请输入站点默认语言的名称。`,labelTooLong:`最多 {max} 个字符。`,labelPair:`请两者都填写,或都留空。`,pathRequired:`请输入地址。`,pathInvalid:`以 / 开头,并使用以连字符连接的小写单词,例如 /series。`,pathTooLong:`最多 1,024 个字符。`,pathRoot:`归档不能位于站点根目录。`,pathTaxonomy:`它与“{conflict}”的归档重叠。`,pathPage:`页面 {conflict} 位于此处。请选择其他地址。`,pathCollection:`文章地址以 {conflict} 开头。请选择其他地址。`,range:`{min} 到 {max} 之间的整数。`,collections:`请至少选择一个集合。`,hasParents:`仍有 {count} 个分类项有上级。请先将它们移到顶级。`,hasProposals:`有 {count} 个提议正在等待。请先批准、合并或拒绝它们。`}},termEditor:{language:`语言`,default:`默认`,names:{title:`名称和同义词`,description:`读者看到的内容,以及人员和智能体可以输入以找到它的内容。`,name:`名称({locale})`,nameHintDefault:`站点默认语言中为必填。`,nameHint:`留空则显示 {locale} 名称。`,altNames:`同义词`,altNamesHint:`有人输入或智能体按名称分配时,可以找到此分类项的其他名称。从不作为单独的分类项显示。`},intro:{title:`归档简介`,description:`显示在 {path} 顶部的 Markdown,仅在第一页显示。`,hint:`Markdown。HTML 会以文本显示。`},image:{title:`图片`,description:`显示在归档上,并在分享链接时用作配图。请链接到已在线的图片。`},seo:{title:`搜索引擎和分享`,description:`归档在搜索结果中的显示方式({locale})。`},indexing:{title:`收录`,indexed:`{path} 已被搜索引擎收录,有 {count} 篇已发布文章。`,thin:`{path} 有 {count} 篇已发布文章,需要 {min} 篇;在此之前以 noindex, follow 提供。`,empty:`{path} 没有已发布的文章,在有文章归入之前返回 404。`,noindex:`{path} 已在其搜索设置中对搜索引擎隐藏。`},preview:{statusHint:`应用这些更改后 {path} 的响应:{status}。即使尚未公开,预览也始终显示页面。`},placement:{title:`排列`,position:`位置`,positionHint:`同级中数字越小越靠前。留空:按名称排序。`},history:{title:`别名历史`,description:`此归档之前的地址。它们会被保留并重定向到这里。`,empty:`没有之前的别名`,emptyDescription:`它的地址一直是 {path}。`,reserved:`已保留`},details:{taxonomy:`分类法`,visibility:`可见性`,usage:`文章`},retire:{title:`停用此{singular}`,description:`从所有文章中移除;其归档会重定向或返回 410 Gone。`},retired:{title:`此分类项已停用`,merged:`此分类项已合并到 {name}`,description:`它没有归档,也无法被分配。如果设置了重定向,其旧地址会重定向。`},errors:{nameRequired:`请输入站点默认语言的名称。`,nameTooLong:`最多 200 个字符。`,altTooLong:`“{value}”超过 200 个字符。`,altDuplicate:`“{value}”重复列出,或与名称重复。`,altCollision:`“{value}”已是 {other} 的名称。同义词不能指向两个分类项。`,introTooLong:`最多 20,000 个字符。`,position:`请使用 0 到 {max} 之间的整数。`}},migration:{banner:{title:`将你的标签迁移到分类和标签`,description:`此站点上的标签仍是纯文本。将它们转换为带有名称、归档和重定向的标签,并开始按分类归档文章。你会先看到结果,并且可以撤销。`,action:`预览迁移`},dialog:{title:`将标签迁移到分类和标签`,description:`这是一次试运行:在你运行之前不会写入任何内容。`,summary:`迁移会做什么`,tags:`找到的标签`,entries:`重写的文章`,terms:`标签`,termsValue:`新建 {created} 个,复用 {reused} 个`,taxonomies:`创建的分类法`,none:`无`,skipped:`跳过 {count} 篇文章`,how:`Studio 会在迁移前后各创建一个快照。此站点上的分类初始为可选,因此不会阻止任何操作,在你发布之前也不会上线任何内容。`,upToDate:`没有需要迁移的内容`,upToDateDescription:`所有文章都已在使用标签和分类。`,run:`运行迁移`},done:{title:`标签已迁移`,description:`你的文章现在使用标签。准备好后即可发布。`,toast:`标签已迁移`,toastDetail:`{entries} 篇文章上的 {tags} 个标签,前后均有快照。`,undoHint:`改主意了?撤销会在此后无人编辑过的文章上恢复旧标签。`,undo:`撤销迁移`,close:`完成`},revert:{toast:`迁移已撤销`,toastDetail:`已在 {count} 篇文章上恢复旧标签。`}},redirects:{new:`新建重定向`,search:`搜索地址`,menu:`{from} 的操作`,edit:`编辑`,filters:{reason:`来源`,all:`所有来源`},reasons:{"slug-change":`别名更改`,merge:`合并`,retire:`停用`,manual:`手动`},columns:{from:`旧地址`,to:`目标`,type:`类型`,source:`来源`,updated:`更新时间`},status:{301:`永久(301)`,302:`临时(302)`,"301Hint":`搜索引擎会将旧地址的权重转移到新地址。适用于永久迁移。`,"302Hint":`用于短期情况,例如推广活动;搜索引擎会保留旧地址。`,short301:`301`,short302:`302`},match:{exact:`仅此地址`,exactHint:`仅此确切路径。`,prefix:`此地址及其下的所有内容`,prefixHint:`保留路径的其余部分:/old/a 会转到 /new/a。`,prefixShort:`及其下级`},external:{badge:`外部`,title:`将访客引向其他站点?`,description:`创建重定向前,请检查目标地址。`,leave:`访客将前往 {host}`,warning:`所有打开旧地址的人都会前往你无法控制的站点。智能体永远无法创建此类重定向;只有人员可以。`,target:`目标`,host:`主机`,confirm:`重定向到 {host}`},externalHint:`将访客引向此站点之外的 {host}。`,dialog:{createTitle:`新建重定向`,editTitle:`编辑重定向`,description:`将访客从站点不再提供的地址引向新地址。`,from:`旧地址`,fromHint:`此站点上的路径,例如 /old-page。不能是站点仍在提供的地址。`,fromLocked:`旧地址无法更改。请删除此重定向并另建一个。`,to:`目标`,toHint:`此站点上的路径(/new-page)或 https:// 地址。`,toExternal:`此站点之外:{host}。你将在下一步确认。`,toPlaceholder:`/new-page 或 https://…`,match:`适用范围`,status:`类型`,automatic:`自动重定向始终为永久(301)。`,note:`备注`,noteHint:`可选。为后来查看的人说明它存在的原因。`,create:`创建重定向`},errors:{fromRequired:`请输入旧地址。`,fromInvalid:`请使用以 / 开头的路径,不含空格、? 或 #。`,fromTooLong:`最多 1,024 个字符。`,fromTaken:`已存在来自此地址的重定向。请改为编辑那一个。`,fromServed:`站点正在提供此地址。重定向不能隐藏页面、已发布的文章或归档。`,toRequired:`请输入访客将被引向的位置。`,toInvalid:`请使用以 / 开头的路径或 https:// 地址。`,toInsecure:`请使用 https://。`,toTooLong:`最多 2,048 个字符。`,toSelf:`不能将访客引向同一地址。`,toLoop:`这会造成循环:目标会重定向回这里。`},saved:`重定向已保存`,created:`已创建来自 {from} 的重定向`,deleted:`已删除来自 {from} 的重定向`,deleteTitle:`删除来自 {from} 的重定向?`,deleteDescription:`下次发布后,旧地址将返回 404。`,deleteAutomatic:`这是 Studio 在地址变更时创建的。下次发布后,旧地址将返回 404,指向它的链接会失效。`,deleteConfirm:`删除重定向`,empty:`还没有重定向`,emptyFiltered:`没有来自此来源的重定向`,emptyDescription:`别名更改、合并和停用会自动在此添加重定向。你也可以为已迁移的地址自行添加。`},roles:{yours:`你的角色`,names:{owner:`所有者`,administrator:`管理员`,editor:`编辑者`,author:`作者`,contributor:`投稿者`},plural:{owner:`所有者`,administrator:`管理员`,editor:`编辑者`,author:`作者`,contributor:`投稿者`},summaries:{owner:`拥有所有权限,包括转让所有权。所有者只有一位;所有权只能通过转让变更。`,administrator:`管理部署:团队、角色、站点设置和域名,以及所有人的智能体密钥。可编辑和发布任何内容。`,editor:`可编辑和发布任何内容,组织站点结构(页面、分类、重定向),回滚,并邀请作者和投稿者。`,author:`撰写、编辑和发布自己的文章。更多操作需等待编辑者处理。`,contributor:`撰写草稿并提交审核。由编辑者发布;已发布的内容对其只读。`},explainer:{role:`角色`,columns:{articles:`文章`,publish:`发布`,structure:`结构`,team:`团队`},levels:{all:`全部`,own:`自己的`,drafts:`草稿`,none:`无`,invite:`邀请`,full:`管理`},hints:{articles:{all:`撰写和编辑所有文章,并可将他人署名为作者。`,own:`撰写文章,并编辑自己的文章(无论是否已发布)。`,drafts:`撰写草稿,并在编辑者发布前编辑自己的草稿。`,none:`无法更改文章。`},publish:{all:`发布任何内容并可回滚。`,own:`当所有公开更改都是自己的时发布;其他情况会变为请求。`,none:`提交审核;由他人发布。`},structure:{all:`页面、分类和标签、重定向。`,none:`可查看页面、分类和重定向,但不能更改。`},team:{full:`邀请、更改角色、移除成员,管理站点设置和域名,以及所有人的智能体密钥。`,invite:`邀请作者和投稿者。`,none:`查看团队成员。`}}}},gating:{readOnlyTitle:`你可以查看此内容`,entryNotOwn:`此文章属于他人。其作者以及编辑者及以上角色可以更改它。`,entryPublished:`此文章已发布。投稿者无法更改已发布的内容;编辑者可以。`,entryDelete:`只有其作者(在你的角色允许时)以及编辑者及以上角色可以删除它。`,abilities:{entries:{create:`只有{roles}及以上角色可以撰写文章。`,editOwnPublished:`只有{roles}及以上角色可以发布文章。你的文章由编辑者审核后发布。`,editAny:`只有{roles}及以上角色可以更改他人的文章。`},pages:{write:`只有{roles}及以上角色可以更改页面。`},publish:{own:`只有{roles}及以上角色可以发布。请提交你的内容审核;由编辑者发布。`,any:`只有{roles}及以上角色可以发布他人的内容。`},rollback:`只有{roles}及以上角色可以回滚站点。`,structure:{write:`只有{roles}及以上角色可以更改分类、标签和重定向。`},assets:{upload:`只有{roles}及以上角色可以上传文件。`,manage:`只有{roles}及以上角色可以管理所有文件。`},activity:{all:`只有{roles}及以上角色可以查看整个团队的动态。`},analytics:{read:`只有{roles}及以上角色可以查看分析。`,settings:`只有{roles}及以上角色可以更改分析设置。`},comments:{read:`只有{roles}及以上角色可以查看读者评论。`,moderate:`只有{roles}及以上角色可以审核评论。`,moderateAny:`只有{roles}及以上角色可以审核他人文章上的评论。`,reply:`只有{roles}及以上角色可以回复评论。`,replyAny:`只有{roles}及以上角色可以在他人的文章上回复。`,settings:`只有{roles}及以上角色可以更改评论设置。`},commenters:{data:`只有{roles}及以上角色可以查看评论者的电子邮件或抹除其数据。`},settings:{write:`只有{roles}及以上角色可以更改站点设置和域名。`},members:{invite:`只有{roles}及以上角色可以邀请成员。`,manage:`只有{roles}及以上角色可以更改角色或移除成员。`},agents:{manage:`只有{roles}及以上角色可以管理他人的智能体密钥。`},sites:{create:`只有{roles}及以上可以创建站点。`},schedules:{read:`只有{roles}及以上角色可以查看计划。`,write:`只有{roles}及以上角色可以为自己的内容安排计划。`,writeAny:`只有{roles}及以上角色可以更改他人的计划。`,settings:`只有{roles}及以上角色可以暂停计划或更改其上限。`},releases:{approve:`只有{roles}及以上角色可以批准自己内容的发布批次。`,approveAny:`只有{roles}及以上角色可以批准发布批次。`},automations:{manage:`只有{roles}及以上角色可以管理自动化。`},ai:{invoke:`只有{roles}及以上角色可以在编辑器中使用 AI。`,settings:`只有{roles}及以上角色可以更改 AI 设置。`},ownership:{transfer:`只有{roles}可以转让所有权。`}}},publishing:{request:`请求发布`,requestCommand:`创建快照并请求发布`,requestTitle:`请求发布?`,requestDescription:`你的更改包含他人的内容或站点结构的更改,因此需由编辑者批准发布。Studio 现在会创建快照;请求将在“审批”中等待。`,sendRequest:`发送请求`,requestOption:`请求发布`,requestOptionDescription:`上线前由编辑者在“审批”中批准。`,requested:`已请求发布`,requestedDescription:`你的更改包含不属于你的内容,因此必须由编辑者批准发布。你可以在“审批”中找到该请求。`,openRequest:`打开审批`,refused:`你无法发布`},members:{invite:`邀请成员`,search:`搜索成员`,you:`你`,someone:`某人`,menu:`{name} 的操作`,tabs:{members:`成员`,activity:`动态`},columns:{member:`成员`,role:`角色`,joined:`加入时间`,actions:`操作`},empty:`还没有成员`,emptyDescription:`Studio 上的第一个账户将成为其所有者。从这里邀请成员。`,noMatches:`没有匹配“{query}”的成员`,notEnabledTitle:`此服务器没有团队`,notEnabledDescription:`角色和邀请需要带账户的 Studio(cloudhal studio 或已部署的管理 Worker)。没有账户时,每个已登录的人都可以做任何事。`,changeRole:`更改角色…`,resetLink:`创建密码重置链接…`,transferOwnership:`转让所有权…`,rank:{self:`你不能更改自己的角色或移除自己。`,owner_role:`所有者角色只能通过转让所有权变更。`,target_is_owner:`所有者不能被降级或移除。请先转让所有权。`,role_too_high:`你的角色无法授予此角色。`,not_allowed:`只有管理员和所有者可以管理成员。`},roles:{title:`角色`,description:`每个角色可以做什么。智能体密钥的权限永远不会超过创建它的人。`},how:{title:`邀请如何运作`,single:`每个链接只能使用一次。最先打开的人会加入,因此请私下分享。`,bound:`它绑定到一个电子邮件地址和一个角色;受邀者无法更改。`,expiry:`链接默认在 {default}后过期。管理员邀请在 {admin}内过期。`,keys:`成员的智能体密钥永远不会超出其角色权限,角色降级时会立即收窄。`,owner:`所有者只有一位。所有权只能转让给管理员,并需要所有者的密码。`},invites:{title:`待处理的邀请`,description:`尚未使用的链接。吊销后会立即失效。`,empty:`没有待处理的邀请`,emptyDescription:`你创建的邀请链接会显示在这里,直到被使用、吊销或过期。`,columns:{email:`电子邮件`,role:`角色`,expires:`过期时间`,inviter:`邀请者`,actions:`操作`},byLink:`链接`,byEmail:`已通过电子邮件发送`,expired:`已过期`,incomplete:`未完成`,incompleteHint:`链接已被使用,但账户未创建。请重新邀请以发送新链接。`,you:`你`,someone:`前成员`,reinvite:`重新邀请`,menu:`发给 {email} 的邀请的操作`,revoke:`吊销`,revokeTitle:`吊销此邀请?`,revokeDescription:`发给 {email} 的链接会立即失效。你之后可以再次邀请。`,revoked:`邀请已吊销`,revokedDescription:`发给 {email} 的链接已失效。`},role:{title:`更改 {name} 的角色`,description:`在其下次点击或智能体调用时生效。会记录在动态日志中。`,member:`成员`,newRole:`新角色`,change:`角色变更`,now:`当前`,immediate:`立即生效`,demotionTitle:`其智能体密钥也会收窄`,demotion:`作为{role},其密钥只保留该角色允许的权限范围和模式,超出的提权会结束。之后升级角色不会让密钥重新扩大。`,submit:`更改角色`,failed:`无法更改角色`,changed:`角色已更改`,changedDescription:`{name} 现在是{to}。`,narrowedTitle:`智能体密钥已收窄`,narrowedDescription:`其 {count} 个智能体密钥现在只能执行新角色允许的操作。`,narrowedBanner:`已收窄的智能体密钥:{count}`,narrowedBannerDescription:`下面的每个密钥只保留新角色允许的权限。其智能体会在下次调用时察觉。`,narrowedMode:`模式`,narrowedScopes:`现在使用`,elevationEnded:`由于新角色不允许,其提权已结束。`,done:`完成`},remove:{menu:`从团队中移除…`,title:`将 {name} 从团队中移除?`,description:`对方会立即失去访问权限。此操作会记录在动态日志中。`,signOut:`对方会在所有设备上退出登录。`,keys:`其智能体密钥会被停用(保留记录,可删除)。`,keysCount:`其智能体密钥会被停用:{count} 个。`,invites:`其发出且仍待处理的邀请会被取消。`,invitesCount:`其待处理的邀请会被取消:{count} 个。`,requests:`其智能体正在等待的请求会被拒绝。`,kept:`其文章和动态会保留。再次邀请即可恢复访问权限。`,submit:`移除`,failed:`无法移除`,done:`{name} 已被移除`,doneDescription:`停用的智能体密钥:{keys} · 取消的邀请:{invites} · 拒绝的请求:{requests}。`},reset:{title:`创建密码重置链接?`,description:`{name} 可以用它设置新密码。目前还没有邮件发送功能,因此需要你自行分享链接。`,once:`它只能使用一次,一小时后过期。`,signsOut:`设置新密码后,对方会在所有地方退出登录。`,replaces:`新链接会使之前的链接失效。`,submit:`创建链接`,failed:`无法创建链接`,revealTitle:`复制重置链接`,revealDescription:`请通过私信将它私下发送给 {name}。`,warningTitle:`你将无法再次看到此链接`,warning:`请立即复制。任何打开它的人都可以设置此账户的密码,因此切勿将其发布在共享频道中。`,link:`重置链接`,expires:`{relative}过期({absolute})。`,done:`我已复制链接`},transfer:{title:`将所有权转让给 {name}?`,description:`所有者可以做任何事,包括转让所有权。所有者只有一位。`,warningTitle:`你无法自行撤销此操作`,warning:`{name} 将成为所有者,你将成为管理员。只有 {name} 可以将所有权转回。`,to:`新所有者`,youBecome:`你会立即成为管理员。`,keys:`你的智能体密钥会收窄到管理员可执行的范围。`,onlyThey:`只有新所有者可以再次转让所有权。`,password:`你的密码`,passwordHint:`再次输入以确认是你本人。`,passwordRequired:`请输入你的密码`,wrongPassword:`密码不正确`,notAdministrator:`所有权只能转让给管理员。请先将对方设为管理员,然后重试。`,needsAdministrator:`所有权只能转让给管理员。请先更改其角色。`,submit:`转让所有权`,failed:`无法转让所有权`,done:`所有权已转让`,doneDescription:`{name} 现在是所有者。你现在是管理员。`},activity:{empty:`还没有团队事件`,emptyDescription:`邀请、角色变更、移除和所有权转让会显示在这里。`,restrictedTitle:`团队动态仅对编辑者及以上角色开放`}},editionGuide:{title:`另一种语言:加在这里,还是作为独立站点?`,hereTitle:`添加到此站点`,here:`每种语言都是相同的页面和菜单,一个团队,一次发布。适合各语言互为镜像的情况。`,editionTitle:`开始语言版本`,edition:`以此站点为起点、属于本项目的独立站点:拥有自己的页面、菜单、团队角色和发布,仍作为翻译相互关联。适合某个市场需要自己的结构或团队的情况。`,create:`创建语言版本…`},newSite:{open:`新建站点`,title:`新建站点`,description:`此安装中的独立站点:拥有自己的页面、设置、团队角色和分析。它从首页开始,不会发布任何内容。`,name:`名称`,nameRequired:`为站点起个名称。`,slug:`短名称`,slugHint:`小写字母、数字和连字符;用于在 Studio 和 CLI 中识别站点。`,slugInvalid:`请使用小写字母、数字和连字符。`,language:`语言`,languageHint:`站点的默认语言;以后可在语言设置中添加更多语言。`,project:`项目`,projectHint:`项目把相关站点归在一起,例如同一出版物的各语言版本。`,newProject:`新项目`,submit:`创建站点`,failed:`无法创建站点`,created:`站点已创建`,createdDescription:`{name} 已可编辑;尚未发布任何内容。`,from:`起点`,fromHint:`空白站点从首页和“关于”页面开始。`,blank:`空白站点`,copyOf:`{name} 的副本(语言版本)`,editionHint:`以新语言草稿的形式复制该站点的页面,并带上其菜单和设计,作为翻译相互关联;不复制文章和媒体。新站点加入该站点所在的项目。`,editionCreated:[[0,`name`],` 从 `,[2,`count`,{other:[[4],` 个待翻译页面`]}],` 开始;尚未发布任何内容。`]},projects:{title:`项目`,description:`并排显示本项目的站点:语言、地址、发布状态和待处理的审批。`,newSite:`在此项目中新建站点`,sites:`站点`,notFound:`没有这个项目`,notFoundDescription:`它已被删除,或你无法打开它的任何站点。`,columns:{site:`站点`,languages:`语言`,address:`地址`,status:`状态`,approvals:`审批`},noAddress:`尚无域名`,none:`无`,waiting:[[2,`count`,{other:[[4],` 个待处理`]}]],summary:{title:`概览`,sites:`站点`,languages:`语言`,live:`已上线`,waiting:`待处理审批`}},siteAccess:{legend:`站点`,all:`所有站点`,some:`仅部分站点`,roleOn:`在 {site} 上的角色`,everySite:`所有者和管理员可在此安装的所有站点上工作。`,required:`请至少选择一个站点。`,menu:`站点`,title:`{name} 的站点`,description:`选择此人在哪些站点上工作,以及在每个站点上的角色。更改立即生效。`,failed:`无法保存站点`,submit:`保存站点`,saved:`站点已保存`,savedDescription:`已更新 {name} 的站点。`,count:[[2,`count`,{other:[[4],` 个站点`]}]]},invites:{create:{title:`邀请成员`,reinviteTitle:`再次邀请`,description:`对方会收到一个一次性链接,用于以你选择的角色创建账户。`,step:`第 1 步,共 2 步 · 邀请谁以及什么角色`,email:`电子邮件`,emailHint:`账户将使用此地址创建;对方无法更改。`,emailPlaceholder:`name@example.com`,role:`角色`,roleHint:`只列出你的角色可以授予的角色。`,expiry:`链接有效期`,expiryHint:`请选择对方可用的最短时间。`,expiryAdmin:`管理员邀请在 {max}内过期。`,explainer:`每个角色可以做什么`,delivery:`发送方式`,deliveryLink:`复制链接`,deliveryLinkHint:`由你自行私下分享。`,deliveryEmail:`通过电子邮件发送`,deliveryEmailHint:`Studio 会通过邮件发送链接;你不会看到它。`,submit:`创建邀请链接`,send:`发送邀请`,failed:`无法创建邀请`},reveal:{title:`复制邀请链接`,sentTitle:`邀请已发送`,description:`发给 {email},角色为{role}。第 2 步,共 2 步。`,warningTitle:`你将无法再次看到此链接`,warning:`请立即复制并通过私信私下分享,不要发到共享频道。最先打开它的人将以{role}身份加入。`,link:`邀请链接`,summary:`邀请`,expires:`{relative}过期({absolute})。`,private:`如果它被发给了错误的人,请在“待处理的邀请”中吊销。`,done:`我已复制链接`,sent:`已发送至 {email}`,sentDescription:`该链接只能使用一次。你可以在“待处理的邀请”中吊销它。`},errors:{emailRequired:`请输入电子邮件地址`,emailInvalid:`请输入有效的电子邮件地址,例如 name@example.com`,rank:`你的角色无法邀请他人担任{role}。`,invalid_expiry:`此角色不允许该有效期。请选择更短的。`,delivery_unavailable:`此服务器无法发送电子邮件。请改为复制链接。`,delivery_failed:`邮件无法发送,因此邀请已取消。请选择“复制链接”后重试。`,already_member:`{email} 已在团队中。`,too_many_invites:`待处理的邀请过多。请先吊销一些。`,rate_limited:`你在过去一小时内创建了大量邀请。请稍后重试。`}},inviteAccept:{titleGeneric:`加入 Cloudhal Studio`,title:`加入 {name}`,descriptionGeneric:`正在打开你的邀请…`,descriptionDead:`此链接已失效。`,description:`{inviter} 邀请你担任{role}。`,someone:`某人`,summary:`你的邀请`,as:`你将加入的角色`,expires:`此邀请{relative}过期({absolute})。`,emailHint:`邀请是发给此地址的。`,nameHint:`显示在你的更改和审批旁边。`,existingTitle:`你已经有账户`,existing:`输入该账户的密码即可用它加入。`,submit:`接受邀请`,toSignIn:`前往登录`,signOutFirst:`请先退出登录,再接受邀请。`,welcome:`欢迎加入 {name}`,welcomeDescription:`你已以{role}身份登录。`,missingTitle:`此链接不完整`,missing:`请打开你收到的完整链接;# 之后的部分缺失了。如果仍然无效,请索取新的邀请。`,goneTitle:`此邀请无法使用`,gone:`它已被使用、吊销或已过期。请向邀请你的人索取新的邀请。`,otherSessionTitle:`你已以 {email} 登录`,otherSessionTitleGeneric:`你已以其他身份登录`,otherSession:`此邀请是发给 {email} 的。请退出登录后再接受。`,alreadyMemberTitle:`你已在团队中`,alreadyMember:`此账户已是成员。请直接登录。`,errors:{nameRequired:`请输入你的名称`,nameTooLong:`最多 {max} 个字符`,weakPassword:`至少 8 个字符`,wrongPassword:`此账户的密码不正确`}},resetPassword:{title:`设置新密码`,description:`用于 {name} 的账户。`,descriptionGeneric:`正在打开你的重置链接…`,descriptionDead:`此链接已失效。`,expires:`此链接{relative}过期({absolute})。`,signsOut:`你将在所有设备上退出登录;之后请使用新密码登录。`,submit:`设置新密码`,doneTitle:`密码已更改`,doneDescription:`请使用新密码登录。`,changed:`你的密码已设置`,changedDescription:`你已在所有地方退出登录。`,missingTitle:`此链接不完整`,missing:`请打开你收到的完整链接;# 之后的部分缺失了。`,goneTitle:`此重置链接无法使用`,gone:`它已被使用或已过期。请在登录页面申请新的链接,或联系管理员。`},forgotPassword:{link:`忘记密码?`,title:`重置你的密码`,description:`我们会通过邮件向你发送设置新密码的链接。`,submit:`通过邮件发送链接`,sentTitle:`请查收邮件`,sent:`如果 {email} 属于此处的某个账户,重置链接已在发送途中。它只能使用一次,有效期一小时。`,unavailableTitle:`此服务器无法发送电子邮件`,unavailable:`请向此 Studio 的管理员索取重置链接。`,back:`返回登录`},passwords:{new:`新密码`,confirm:`再次输入密码`,strength:`强度:{level}`,levels:{empty:`—`,tooShort:`太短`,weak:`弱`,fair:`中等`,strong:`强`},advice:{empty:`至少 {min} 个字符。几个不相关的词就能组成强密码。`,tooShort:`至少 {min} 个字符。`,weak:`越长越安全:试试 12 个或更多字符,或几个不相关的词。`,fair:`不错。再加几个字符就会更强。`,strong:`强密码。`},errors:{required:`请输入密码`,tooShort:`至少 {min} 个字符`,tooLong:`最多 {max} 个字符`,confirmRequired:`请再次输入密码`,mismatch:`两次输入的密码不一致`}}};export{e as messages};
6
- //# sourceMappingURL=zh-Hans-BYiQm8Cr.js.map
6
+ //# sourceMappingURL=zh-Hans-DCvEU7yR.js.map
@@ -18,7 +18,7 @@
18
18
  document.documentElement.style.colorScheme = mode;
19
19
  })();
20
20
  </script>
21
- <script type="module" crossorigin src="/assets/index-Boved2Nz.js"></script>
21
+ <script type="module" crossorigin src="/assets/index-DWzjnrnl.js"></script>
22
22
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-hePW80VL.js">
23
23
  <link rel="modulepreload" crossorigin href="/assets/react-CDCuUAOg.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/IconBase.es-BZDpYMnj.js">
@@ -28,6 +28,7 @@
28
28
  <link rel="modulepreload" crossorigin href="/assets/button-pa1bq9b85hawg41a-BcGpLLER.js">
29
29
  <link rel="modulepreload" crossorigin href="/assets/inertValue-e0o6qvuef83v78fk-DAETOorM.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/ArrowClockwise.es-BA0pzb0Y.js">
31
+ <link rel="modulepreload" crossorigin href="/assets/ArrowCounterClockwise.es-Bn2jikgp.js">
31
32
  <link rel="modulepreload" crossorigin href="/assets/useRender-onwjigxa00uch2ip-DueSv9wh.js">
32
33
  <link rel="modulepreload" crossorigin href="/assets/link-cqyfjezntvr53rh7-CwZJ95XT.js">
33
34
  <link rel="modulepreload" crossorigin href="/assets/DirectionalIcon-BKKMj3KT.js">
@@ -36,15 +37,15 @@
36
37
  <link rel="modulepreload" crossorigin href="/assets/CheckCircle.es-XJ9Tr9Tu.js">
37
38
  <link rel="modulepreload" crossorigin href="/assets/EyeSlash.es-YoqigHIr.js">
38
39
  <link rel="modulepreload" crossorigin href="/assets/Hourglass.es-aqS22q0y.js">
39
- <link rel="modulepreload" crossorigin href="/assets/api-Sbz4Rbu7.js">
40
+ <link rel="modulepreload" crossorigin href="/assets/api-K4ZsoxSR.js">
40
41
  <link rel="modulepreload" crossorigin href="/assets/intl-C22KAx_l.js">
41
42
  <link rel="modulepreload" crossorigin href="/assets/format-DGE2c-4V.js">
42
43
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-DjzSQ1t3.js">
43
- <link rel="modulepreload" crossorigin href="/assets/i18n-Cjiv6Esx.js">
44
+ <link rel="modulepreload" crossorigin href="/assets/i18n-B-06kDA4.js">
44
45
  <link rel="modulepreload" crossorigin href="/assets/names-R-Dypr9Y.js">
45
46
  <link rel="modulepreload" crossorigin href="/assets/seo-C-YSZ4mD.js">
46
47
  <link rel="modulepreload" crossorigin href="/assets/taxonomy-S-y5xbUa.js">
47
- <link rel="modulepreload" crossorigin href="/assets/Taxonomy-CeQUBEeZ.js">
48
+ <link rel="modulepreload" crossorigin href="/assets/Taxonomy-CDd52lEj.js">
48
49
  <link rel="modulepreload" crossorigin href="/assets/CaretRight.es-D_coqYai.js">
49
50
  <link rel="modulepreload" crossorigin href="/assets/resolveAriaLabelledBy-nc8mdie5shy87nsb-asx42i8W.js">
50
51
  <link rel="modulepreload" crossorigin href="/assets/ClockClockwise.es-1egHMnBk.js">
@@ -70,29 +71,27 @@
70
71
  <link rel="modulepreload" crossorigin href="/assets/useCompositeItem-p7090ga00dpqcg5j-CiGYXm-8.js">
71
72
  <link rel="modulepreload" crossorigin href="/assets/CompositeItem-hzuk5x3e5zsfgnyj-XaSr50DG.js">
72
73
  <link rel="modulepreload" crossorigin href="/assets/radio-35dx7y6rjrezbjsp-DY9M1ouC.js">
73
- <link rel="modulepreload" crossorigin href="/assets/SectionCard-SzT8t6oM.js">
74
+ <link rel="modulepreload" crossorigin href="/assets/SectionCard-253RWE03.js">
74
75
  <link rel="modulepreload" crossorigin href="/assets/roles-B7USahqW.js">
75
76
  <link rel="modulepreload" crossorigin href="/assets/agents-BBsojpg9.js">
76
- <link rel="modulepreload" crossorigin href="/assets/AgentModes-B81a2nUo.js">
77
+ <link rel="modulepreload" crossorigin href="/assets/AgentModes-CP8u-uXl.js">
78
+ <link rel="modulepreload" crossorigin href="/assets/RocketLaunch.es-BTDML1jE.js">
77
79
  <link rel="modulepreload" crossorigin href="/assets/getElementTransform-cuiqmjglkrz4db6c-CjP1vzKy.js">
78
80
  <link rel="modulepreload" crossorigin href="/assets/clamp-jcjhzx71s6wt1rnc-D0kAXd-u.js">
79
81
  <link rel="modulepreload" crossorigin href="/assets/scrollable-b6m9ze1u7ps0q1qn-BDQyLiel.js">
80
- <link rel="modulepreload" crossorigin href="/assets/useMe-z-wff5FW.js">
81
- <link rel="modulepreload" crossorigin href="/assets/createToastManager-onmoqrmr8zo02rif-DtEv4lxV.js">
82
- <link rel="modulepreload" crossorigin href="/assets/Toast-BHyBhGXI.js">
83
- <link rel="modulepreload" crossorigin href="/assets/api-errors-FBnZYqCy.js">
82
+ <link rel="modulepreload" crossorigin href="/assets/useMe-Cx8D2_vf.js">
83
+ <link rel="modulepreload" crossorigin href="/assets/createToastManager-onmoqrmr8zo02rif-DFnQWIYL.js">
84
+ <link rel="modulepreload" crossorigin href="/assets/Toast-MSfrCjAr.js">
85
+ <link rel="modulepreload" crossorigin href="/assets/api-errors-MOGC4Qux.js">
84
86
  <link rel="modulepreload" crossorigin href="/assets/InsetPanel-CHSg953_.js">
85
- <link rel="modulepreload" crossorigin href="/assets/approvals-BB74ogKx.js">
86
- <link rel="modulepreload" crossorigin href="/assets/ElevationRequest-B0_Q_gVT.js">
87
- <link rel="modulepreload" crossorigin href="/assets/Elevation-Ca3Q8sk-.js">
87
+ <link rel="modulepreload" crossorigin href="/assets/approvals-0AbtJUeH.js">
88
+ <link rel="modulepreload" crossorigin href="/assets/ElevationRequest-DiCnHA-N.js">
89
+ <link rel="modulepreload" crossorigin href="/assets/Elevation-B3H1KYdW.js">
88
90
  <link rel="modulepreload" crossorigin href="/assets/useClick-l0p0endoxrlp0ae5-Bbq8u-IC.js">
89
- <link rel="modulepreload" crossorigin href="/assets/useListNavigation-3nyjs362qcau34in-DAKhz5rq.js">
90
91
  <link rel="modulepreload" crossorigin href="/assets/ToolbarRootContext-eqk40r8uh4h6r211-DBIMpkd1.js">
91
- <link rel="modulepreload" crossorigin href="/assets/useRenderDialogRoot-lddunc01twftravv-CpXvIQfS.js">
92
- <link rel="modulepreload" crossorigin href="/assets/DialogRoot-hl3genvzl9h8ridm-BRUDLjaw.js">
93
- <link rel="modulepreload" crossorigin href="/assets/DialogTrigger-g44cuem7n4wez533-B5K8lQD3.js">
94
- <link rel="modulepreload" crossorigin href="/assets/dialog-glpnivujociqs9lh-BefDeRGC.js">
92
+ <link rel="modulepreload" crossorigin href="/assets/useListNavigation-3nyjs362qcau34in-DAKhz5rq.js">
95
93
  <link rel="modulepreload" crossorigin href="/assets/useTriggerFocusGuards-lz7wt484xltizro4-Dd4azd_G.js">
94
+ <link rel="modulepreload" crossorigin href="/assets/dropdown-m53ji1d66mws89wh-CX3moquw.js">
96
95
  <link rel="modulepreload" crossorigin href="/assets/input-c8lv9ulv0kortliq-Cum0c7P1.js">
97
96
  <link rel="modulepreload" crossorigin href="/assets/resolveValueLabel-hpmsash3ektitvnb-X_gYut6U.js">
98
97
  <link rel="modulepreload" crossorigin href="/assets/styles-kl02oyrlnld7arja-BX5Ypy0Y.js">
@@ -100,10 +99,15 @@
100
99
  <link rel="modulepreload" crossorigin href="/assets/tabs-gf57qqf1wcclaejq-Cay-6qhK.js">
101
100
  <link rel="modulepreload" crossorigin href="/assets/empty-hkvg3is3uc6dj1at-BGNUzomN.js">
102
101
  <link rel="modulepreload" crossorigin href="/assets/analytics-range-BqKm9TTo.js">
102
+ <link rel="modulepreload" crossorigin href="/assets/useRenderDialogRoot-lddunc01twftravv-CpXvIQfS.js">
103
+ <link rel="modulepreload" crossorigin href="/assets/DialogRoot-hl3genvzl9h8ridm-BRUDLjaw.js">
104
+ <link rel="modulepreload" crossorigin href="/assets/DialogTrigger-g44cuem7n4wez533-B5K8lQD3.js">
105
+ <link rel="modulepreload" crossorigin href="/assets/dialog-glpnivujociqs9lh-B2sB0Q83.js">
106
+ <link rel="modulepreload" crossorigin href="/assets/ApprovalDialog-DXKCyEdf.js">
103
107
  <link rel="modulepreload" crossorigin href="/assets/auth-BXDbnIpO.js">
104
108
  <link rel="modulepreload" crossorigin href="/assets/activity-C0we9-m8.js">
105
- <link rel="modulepreload" crossorigin href="/assets/usePendingApprovals-BRHKM3-1.js">
106
- <link rel="stylesheet" crossorigin href="/assets/index-DaI1wvdp.css">
109
+ <link rel="modulepreload" crossorigin href="/assets/usePendingApprovals-B6g17X7P.js">
110
+ <link rel="stylesheet" crossorigin href="/assets/index-BLFwX4Tg.css">
107
111
  </head>
108
112
  <body class="overscroll-none bg-kumo-canvas text-kumo-default">
109
113
  <div id="root" class="isolate min-h-dvh bg-kumo-canvas"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudhal/cli",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "cloudhal — create, run and build Cloudhal sites locally",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://cloudhal.dev",
@@ -27,16 +27,16 @@
27
27
  "README.md"
28
28
  ],
29
29
  "dependencies": {
30
- "@cloudhal/agent-runtime": "0.3.0",
31
- "@cloudhal/analytics": "0.3.0",
32
- "@cloudhal/api": "0.3.0",
33
- "@cloudhal/cloudflare": "0.3.0",
34
- "@cloudhal/comments": "0.3.0",
35
- "@cloudhal/core-contracts": "0.3.0",
36
- "@cloudhal/core-ts": "0.3.0",
37
- "@cloudhal/mcp-server": "0.3.0",
38
- "@cloudhal/schedules": "0.3.0",
39
- "@cloudhal/storage": "0.3.0",
30
+ "@cloudhal/agent-runtime": "0.3.1",
31
+ "@cloudhal/analytics": "0.3.1",
32
+ "@cloudhal/api": "0.3.1",
33
+ "@cloudhal/cloudflare": "0.3.1",
34
+ "@cloudhal/comments": "0.3.1",
35
+ "@cloudhal/core-contracts": "0.3.1",
36
+ "@cloudhal/core-ts": "0.3.1",
37
+ "@cloudhal/mcp-server": "0.3.1",
38
+ "@cloudhal/schedules": "0.3.1",
39
+ "@cloudhal/storage": "0.3.1",
40
40
  "@hono/node-server": "^2.1.4",
41
41
  "better-sqlite3": "13.0.3"
42
42
  },