paseo-req-kit 1.12.1 → 1.13.0-beta.2

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 (237) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +8 -3
  3. package/bin/bootstrap.d.mts +13 -0
  4. package/bin/bootstrap.mjs +444 -0
  5. package/bin/req-docs.d.mts +5 -0
  6. package/bin/req-docs.mjs +169 -0
  7. package/bin/req.mjs +21 -1
  8. package/contracts/cli-json.md +2 -0
  9. package/docs/adr/0032-npm-only-install.md +27 -0
  10. package/docs/adr/0033-prototype-review-and-ui-check.md +28 -0
  11. package/docs/adr/README.md +2 -0
  12. package/docs/guide//344/275/277/347/224/250/350/200/205/346/214/207/345/215/227.md +8 -0
  13. package/docs/guide//345/256/211/350/243/205/344/270/216/345/215/207/347/272/247.md +22 -2
  14. package/docs/guide//347/273/264/346/212/244/350/200/205/346/214/207/345/215/227.md +1 -1
  15. package/docs/guide//351/241/271/347/233/256/345/256/232/345/210/266/344/270/216/350/277/220/350/241/214/350/247/204/345/210/231.md +7 -1
  16. package/engine/prompts/03-design.md +5 -1
  17. package/engine/prompts/04b-design-revise.md +1 -1
  18. package/engine/prompts/browser-verify.md +2 -2
  19. package/engine/prompts/ui-check.md +15 -0
  20. package/engine/src/api.ts +17 -2
  21. package/engine/src/config-view.ts +1 -1
  22. package/engine/src/pipeline.ts +15 -7
  23. package/engine/src/review-assets/app.css +420 -0
  24. package/engine/src/review-assets/app.html +95 -0
  25. package/engine/src/review-assets/app.js +954 -0
  26. package/engine/src/review.ts +570 -0
  27. package/engine/src/ui-check-page.js +208 -0
  28. package/engine/src/ui-check.ts +366 -0
  29. package/package.json +3 -1
  30. package/paseo-plugin/client/data.ts +12 -1
  31. package/paseo-plugin/client/detail.tsx +3 -0
  32. package/paseo-plugin/client/inbox.tsx +2 -0
  33. package/paseo-plugin/client/review-link.tsx +29 -0
  34. package/paseo-plugin/index.server.ts +2 -1
  35. package/paseo-plugin/package.json +1 -1
  36. package/paseo-plugin/server/handlers.ts +7 -1
  37. package/paseo-plugin/shared/contracts.ts +9 -0
  38. package/site-dist/404.html +27 -0
  39. package/site-dist/assets/app.DWPPPhFm.js +1 -0
  40. package/site-dist/assets/changelog.md.CoelFFCL.js +1 -0
  41. package/site-dist/assets/changelog.md.CoelFFCL.lean.js +1 -0
  42. package/site-dist/assets/chunks/@localSearchIndexroot.Hdq0-4L3.js +1 -0
  43. package/site-dist/assets/chunks/VPLocalSearchBox.D3_9dRGY.js +9 -0
  44. package/site-dist/assets/chunks/framework.B9qR_F1m.js +20 -0
  45. package/site-dist/assets/chunks/theme.Bm8aLiLN.js +2 -0
  46. package/site-dist/assets/guide_getting-started.md.B4GJeoPz.js +6 -0
  47. package/site-dist/assets/guide_getting-started.md.B4GJeoPz.lean.js +1 -0
  48. package/site-dist/assets/guide_how-it-works.md.D-kQsF1t.js +25 -0
  49. package/site-dist/assets/guide_how-it-works.md.D-kQsF1t.lean.js +1 -0
  50. package/site-dist/assets/guide_index.md.CLnGCmGW.js +1 -0
  51. package/site-dist/assets/guide_index.md.CLnGCmGW.lean.js +1 -0
  52. package/site-dist/assets/guide_install.md.DkCyZsOU.js +42 -0
  53. package/site-dist/assets/guide_install.md.DkCyZsOU.lean.js +42 -0
  54. package/site-dist/assets/guide_maintainer.md.RZIzyCTV.js +1 -0
  55. package/site-dist/assets/guide_maintainer.md.RZIzyCTV.lean.js +1 -0
  56. package/site-dist/assets/guide_phases.md.BpGAb1re.js +1 -0
  57. package/site-dist/assets/guide_phases.md.BpGAb1re.lean.js +1 -0
  58. package/site-dist/assets/guide_project.md.nGlTCo4D.js +77 -0
  59. package/site-dist/assets/guide_project.md.nGlTCo4D.lean.js +77 -0
  60. package/site-dist/assets/guide_user.md.tiHFxIsQ.js +1 -0
  61. package/site-dist/assets/guide_user.md.tiHFxIsQ.lean.js +1 -0
  62. package/site-dist/assets/index.md.Cf_sSf_f.js +1 -0
  63. package/site-dist/assets/index.md.Cf_sSf_f.lean.js +1 -0
  64. package/site-dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  65. package/site-dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  66. package/site-dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  67. package/site-dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  68. package/site-dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  69. package/site-dist/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  70. package/site-dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  71. package/site-dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  72. package/site-dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  73. package/site-dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  74. package/site-dist/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  75. package/site-dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  76. package/site-dist/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  77. package/site-dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  78. package/site-dist/assets/reference_adr_0001-step-agents-under-origin-chat.md.RtRTq7oi.js +1 -0
  79. package/site-dist/assets/reference_adr_0001-step-agents-under-origin-chat.md.RtRTq7oi.lean.js +1 -0
  80. package/site-dist/assets/reference_adr_0002-no-directory-switch-in-chat.md.BxtN-Aa2.js +1 -0
  81. package/site-dist/assets/reference_adr_0002-no-directory-switch-in-chat.md.BxtN-Aa2.lean.js +1 -0
  82. package/site-dist/assets/reference_adr_0003-script-engine-not-hub.md.66EgZtqx.js +1 -0
  83. package/site-dist/assets/reference_adr_0003-script-engine-not-hub.md.66EgZtqx.lean.js +1 -0
  84. package/site-dist/assets/reference_adr_0004-result-files.md.DbqcCozI.js +1 -0
  85. package/site-dist/assets/reference_adr_0004-result-files.md.DbqcCozI.lean.js +1 -0
  86. package/site-dist/assets/reference_adr_0005-no-default-branch-local-commits-only.md.CkImA4s6.js +1 -0
  87. package/site-dist/assets/reference_adr_0005-no-default-branch-local-commits-only.md.CkImA4s6.lean.js +1 -0
  88. package/site-dist/assets/reference_adr_0006-skill-install-targets.md.CwY8YepV.js +1 -0
  89. package/site-dist/assets/reference_adr_0006-skill-install-targets.md.CwY8YepV.lean.js +1 -0
  90. package/site-dist/assets/reference_adr_0007-own-interview-skill.md.CryhxRyG.js +1 -0
  91. package/site-dist/assets/reference_adr_0007-own-interview-skill.md.CryhxRyG.lean.js +1 -0
  92. package/site-dist/assets/reference_adr_0008-entries-do-not-call-entries.md.DsRWAgeA.js +1 -0
  93. package/site-dist/assets/reference_adr_0008-entries-do-not-call-entries.md.DsRWAgeA.lean.js +1 -0
  94. package/site-dist/assets/reference_adr_0009-versioned-install-layout.md.CSg1VqlW.js +1 -0
  95. package/site-dist/assets/reference_adr_0009-versioned-install-layout.md.CSg1VqlW.lean.js +1 -0
  96. package/site-dist/assets/reference_adr_0010-generated-feature-overview.md.D8F3MK-h.js +1 -0
  97. package/site-dist/assets/reference_adr_0010-generated-feature-overview.md.D8F3MK-h.lean.js +1 -0
  98. package/site-dist/assets/reference_adr_0011-resume-after-completion.md.BCrZrKjf.js +1 -0
  99. package/site-dist/assets/reference_adr_0011-resume-after-completion.md.BCrZrKjf.lean.js +1 -0
  100. package/site-dist/assets/reference_adr_0012-review-panel.md.k9rrHFFc.js +1 -0
  101. package/site-dist/assets/reference_adr_0012-review-panel.md.k9rrHFFc.lean.js +1 -0
  102. package/site-dist/assets/reference_adr_0013-no-release-tooling.md.BQeJ8dEI.js +1 -0
  103. package/site-dist/assets/reference_adr_0013-no-release-tooling.md.BQeJ8dEI.lean.js +1 -0
  104. package/site-dist/assets/reference_adr_0014-notifier-slot.md.C23QR1xO.js +1 -0
  105. package/site-dist/assets/reference_adr_0014-notifier-slot.md.C23QR1xO.lean.js +1 -0
  106. package/site-dist/assets/reference_adr_0015-incremental-continue.md.Buy7wwO8.js +1 -0
  107. package/site-dist/assets/reference_adr_0015-incremental-continue.md.Buy7wwO8.lean.js +1 -0
  108. package/site-dist/assets/reference_adr_0016-upgrade-from-tags.md.qfIW-tqJ.js +1 -0
  109. package/site-dist/assets/reference_adr_0016-upgrade-from-tags.md.qfIW-tqJ.lean.js +1 -0
  110. package/site-dist/assets/reference_adr_0017-use-paseo-capabilities.md.CjcGli87.js +1 -0
  111. package/site-dist/assets/reference_adr_0017-use-paseo-capabilities.md.CjcGli87.lean.js +1 -0
  112. package/site-dist/assets/reference_adr_0018-own-worktree-option.md.fVDpgGSE.js +1 -0
  113. package/site-dist/assets/reference_adr_0018-own-worktree-option.md.fVDpgGSE.lean.js +1 -0
  114. package/site-dist/assets/reference_adr_0019-parallel-orchestration.md.DrfrV0To.js +1 -0
  115. package/site-dist/assets/reference_adr_0019-parallel-orchestration.md.DrfrV0To.lean.js +1 -0
  116. package/site-dist/assets/reference_adr_0020-scheduling-through-the-chat.md.BqSemGFG.js +1 -0
  117. package/site-dist/assets/reference_adr_0020-scheduling-through-the-chat.md.BqSemGFG.lean.js +1 -0
  118. package/site-dist/assets/reference_adr_0021-npm-version-manager.md.CU3PG6y5.js +1 -0
  119. package/site-dist/assets/reference_adr_0021-npm-version-manager.md.CU3PG6y5.lean.js +1 -0
  120. package/site-dist/assets/reference_adr_0022-develop-and-verify-phases.md.C6fQDLq4.js +1 -0
  121. package/site-dist/assets/reference_adr_0022-develop-and-verify-phases.md.C6fQDLq4.lean.js +1 -0
  122. package/site-dist/assets/reference_adr_0023-types-gate-slices.md.D2E6yyYQ.js +1 -0
  123. package/site-dist/assets/reference_adr_0023-types-gate-slices.md.D2E6yyYQ.lean.js +1 -0
  124. package/site-dist/assets/reference_adr_0024-confirm-early-review-axes.md.FmK_ke0x.js +1 -0
  125. package/site-dist/assets/reference_adr_0024-confirm-early-review-axes.md.FmK_ke0x.lean.js +1 -0
  126. package/site-dist/assets/reference_adr_0025-joint-requirements.md.ChoKvMUx.js +1 -0
  127. package/site-dist/assets/reference_adr_0025-joint-requirements.md.ChoKvMUx.lean.js +1 -0
  128. package/site-dist/assets/reference_adr_0026-machine-records-and-api.md.veybjBPq.js +1 -0
  129. package/site-dist/assets/reference_adr_0026-machine-records-and-api.md.veybjBPq.lean.js +1 -0
  130. package/site-dist/assets/reference_adr_0027-paseo-plugin.md.BMX33ZNU.js +1 -0
  131. package/site-dist/assets/reference_adr_0027-paseo-plugin.md.BMX33ZNU.lean.js +1 -0
  132. package/site-dist/assets/reference_adr_0028-external-integrations.md.DtdMe8RK.js +1 -0
  133. package/site-dist/assets/reference_adr_0028-external-integrations.md.DtdMe8RK.lean.js +1 -0
  134. package/site-dist/assets/reference_adr_0029-requirements-from-cards.md.BHd1SQPe.js +1 -0
  135. package/site-dist/assets/reference_adr_0029-requirements-from-cards.md.BHd1SQPe.lean.js +1 -0
  136. package/site-dist/assets/reference_adr_0030-card-intake-process.md.kLc-DG9_.js +1 -0
  137. package/site-dist/assets/reference_adr_0030-card-intake-process.md.kLc-DG9_.lean.js +1 -0
  138. package/site-dist/assets/reference_adr_0031-fewer-interventions.md.BDnQcz8g.js +1 -0
  139. package/site-dist/assets/reference_adr_0031-fewer-interventions.md.BDnQcz8g.lean.js +1 -0
  140. package/site-dist/assets/reference_adr_0032-npm-only-install.md.C-3L1FkX.js +1 -0
  141. package/site-dist/assets/reference_adr_0032-npm-only-install.md.C-3L1FkX.lean.js +1 -0
  142. package/site-dist/assets/reference_adr_0033-prototype-review-and-ui-check.md.hFcQzmaa.js +1 -0
  143. package/site-dist/assets/reference_adr_0033-prototype-review-and-ui-check.md.hFcQzmaa.lean.js +1 -0
  144. package/site-dist/assets/reference_adr_index.md.BYF-Ofor.js +1 -0
  145. package/site-dist/assets/reference_adr_index.md.BYF-Ofor.lean.js +1 -0
  146. package/site-dist/assets/reference_commands.md.ClKbS-t8.js +1 -0
  147. package/site-dist/assets/reference_commands.md.ClKbS-t8.lean.js +1 -0
  148. package/site-dist/assets/reference_config.md.CRe27LaA.js +6 -0
  149. package/site-dist/assets/reference_config.md.CRe27LaA.lean.js +1 -0
  150. package/site-dist/assets/reference_contracts_cli-json.md.N-v2HNUd.js +1 -0
  151. package/site-dist/assets/reference_contracts_cli-json.md.N-v2HNUd.lean.js +1 -0
  152. package/site-dist/assets/reference_contracts_feature-files.md.DSiA8OEH.js +26 -0
  153. package/site-dist/assets/reference_contracts_feature-files.md.DSiA8OEH.lean.js +26 -0
  154. package/site-dist/assets/reference_contracts_index.md.Bkznz4px.js +1 -0
  155. package/site-dist/assets/reference_contracts_index.md.Bkznz4px.lean.js +1 -0
  156. package/site-dist/assets/reference_contracts_notifier-event.md.CCfrkm_A.js +24 -0
  157. package/site-dist/assets/reference_contracts_notifier-event.md.CCfrkm_A.lean.js +24 -0
  158. package/site-dist/assets/reference_contracts_result-file.md.DmR4fjB-.js +1 -0
  159. package/site-dist/assets/reference_contracts_result-file.md.DmR4fjB-.lean.js +1 -0
  160. package/site-dist/assets/reference_contracts_spec.md.BwwS0L_j.js +8 -0
  161. package/site-dist/assets/reference_contracts_spec.md.BwwS0L_j.lean.js +8 -0
  162. package/site-dist/assets/reference_contracts_state.md.5bNTC3ow.js +1 -0
  163. package/site-dist/assets/reference_contracts_state.md.5bNTC3ow.lean.js +1 -0
  164. package/site-dist/assets/reference_contracts_usage-record.md._C0OXWeq.js +10 -0
  165. package/site-dist/assets/reference_contracts_usage-record.md._C0OXWeq.lean.js +10 -0
  166. package/site-dist/assets/reference_contracts_verify.md.CbA88u6S.js +29 -0
  167. package/site-dist/assets/reference_contracts_verify.md.CbA88u6S.lean.js +29 -0
  168. package/site-dist/assets/reference_scope.md.Kzqw8U_f.js +1 -0
  169. package/site-dist/assets/reference_scope.md.Kzqw8U_f.lean.js +1 -0
  170. package/site-dist/assets/style.Dwsa4SMe.css +1 -0
  171. package/site-dist/changelog.html +30 -0
  172. package/site-dist/guide/getting-started.html +35 -0
  173. package/site-dist/guide/how-it-works.html +54 -0
  174. package/site-dist/guide/index.html +30 -0
  175. package/site-dist/guide/install.html +71 -0
  176. package/site-dist/guide/maintainer.html +30 -0
  177. package/site-dist/guide/phases.html +30 -0
  178. package/site-dist/guide/project.html +106 -0
  179. package/site-dist/guide/user.html +30 -0
  180. package/site-dist/hashmap.json +1 -0
  181. package/site-dist/icons/agents.svg +1 -0
  182. package/site-dist/icons/chat.svg +1 -0
  183. package/site-dist/icons/paseo.svg +1 -0
  184. package/site-dist/icons/phases.svg +1 -0
  185. package/site-dist/icons/review.svg +1 -0
  186. package/site-dist/icons/safe.svg +1 -0
  187. package/site-dist/index.html +30 -0
  188. package/site-dist/install.ps1 +118 -0
  189. package/site-dist/install.sh +198 -0
  190. package/site-dist/logo.svg +11 -0
  191. package/site-dist/reference/adr/0001-step-agents-under-origin-chat.html +30 -0
  192. package/site-dist/reference/adr/0002-no-directory-switch-in-chat.html +30 -0
  193. package/site-dist/reference/adr/0003-script-engine-not-hub.html +30 -0
  194. package/site-dist/reference/adr/0004-result-files.html +30 -0
  195. package/site-dist/reference/adr/0005-no-default-branch-local-commits-only.html +30 -0
  196. package/site-dist/reference/adr/0006-skill-install-targets.html +30 -0
  197. package/site-dist/reference/adr/0007-own-interview-skill.html +30 -0
  198. package/site-dist/reference/adr/0008-entries-do-not-call-entries.html +30 -0
  199. package/site-dist/reference/adr/0009-versioned-install-layout.html +30 -0
  200. package/site-dist/reference/adr/0010-generated-feature-overview.html +30 -0
  201. package/site-dist/reference/adr/0011-resume-after-completion.html +30 -0
  202. package/site-dist/reference/adr/0012-review-panel.html +30 -0
  203. package/site-dist/reference/adr/0013-no-release-tooling.html +30 -0
  204. package/site-dist/reference/adr/0014-notifier-slot.html +30 -0
  205. package/site-dist/reference/adr/0015-incremental-continue.html +30 -0
  206. package/site-dist/reference/adr/0016-upgrade-from-tags.html +30 -0
  207. package/site-dist/reference/adr/0017-use-paseo-capabilities.html +30 -0
  208. package/site-dist/reference/adr/0018-own-worktree-option.html +30 -0
  209. package/site-dist/reference/adr/0019-parallel-orchestration.html +30 -0
  210. package/site-dist/reference/adr/0020-scheduling-through-the-chat.html +30 -0
  211. package/site-dist/reference/adr/0021-npm-version-manager.html +30 -0
  212. package/site-dist/reference/adr/0022-develop-and-verify-phases.html +30 -0
  213. package/site-dist/reference/adr/0023-types-gate-slices.html +30 -0
  214. package/site-dist/reference/adr/0024-confirm-early-review-axes.html +30 -0
  215. package/site-dist/reference/adr/0025-joint-requirements.html +30 -0
  216. package/site-dist/reference/adr/0026-machine-records-and-api.html +30 -0
  217. package/site-dist/reference/adr/0027-paseo-plugin.html +30 -0
  218. package/site-dist/reference/adr/0028-external-integrations.html +30 -0
  219. package/site-dist/reference/adr/0029-requirements-from-cards.html +30 -0
  220. package/site-dist/reference/adr/0030-card-intake-process.html +30 -0
  221. package/site-dist/reference/adr/0031-fewer-interventions.html +30 -0
  222. package/site-dist/reference/adr/0032-npm-only-install.html +30 -0
  223. package/site-dist/reference/adr/0033-prototype-review-and-ui-check.html +30 -0
  224. package/site-dist/reference/adr/index.html +30 -0
  225. package/site-dist/reference/commands.html +30 -0
  226. package/site-dist/reference/config.html +35 -0
  227. package/site-dist/reference/contracts/cli-json.html +30 -0
  228. package/site-dist/reference/contracts/feature-files.html +55 -0
  229. package/site-dist/reference/contracts/index.html +30 -0
  230. package/site-dist/reference/contracts/notifier-event.html +53 -0
  231. package/site-dist/reference/contracts/result-file.html +30 -0
  232. package/site-dist/reference/contracts/spec.html +37 -0
  233. package/site-dist/reference/contracts/state.html +30 -0
  234. package/site-dist/reference/contracts/usage-record.html +39 -0
  235. package/site-dist/reference/contracts/verify.html +58 -0
  236. package/site-dist/reference/scope.html +30 -0
  237. package/site-dist/vp-icons.css +1 -0
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.D3_9dRGY.js","assets/chunks/framework.B9qR_F1m.js"])))=>i.map(i=>d[i]);
2
+ import{d as k,c as u,r as d,n as w,o,a as q,t as S,b as g,w as h,T as ve,e as p,_ as y,u as Ee,i as Fe,f as De,g as U,h as P,j as l,k as i,l as W,m as le,p as T,q as F,s as Q,v as D,x as fe,y as he,z as Oe,A as Ge,F as x,B as M,C as z,D as Z,E as b,G as Le,H as B,I as Ve,J as ee,K as j,L as te,M as Ue,N as Se,O as re,P as Te,Q as xe,R as ne,S as je,U as qe,V as We,W as Ne,X as we,Y as ze,Z as Ke,$ as Re,a0 as Je,a1 as Ye,a2 as $e}from"./framework.B9qR_F1m.js";const Xe=k({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(o(),u("span",{class:w(["VPBadge",e.type])},[d(t.$slots,"default",{},()=>[q(S(e.text),1)])],2))}}),Qe={key:0,class:"VPBackdrop"},Ze=k({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(o(),g(ve,{name:"fade"},{default:h(()=>[e.show?(o(),u("div",Qe)):p("",!0)]),_:1}))}}),et=y(Ze,[["__scopeId","data-v-54a304ca"]]),V=Ee;function tt(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),(s=!0)&&setTimeout(()=>s=!1,t))}}function ce(e){return e.startsWith("/")?e:`/${e}`}function me(e){const{pathname:t,search:n,hash:s,protocol:a}=new URL(e,"http://a.com");if(Fe(e)||e.startsWith("#")||!a.startsWith("http")||!De(t))return e;const{site:r}=V(),c=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${n}${s}`);return U(c)}function R({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:s,theme:a,hash:r}=V(),c=P(()=>{var v,m;return{label:(v=t.value.locales[n.value])==null?void 0:v.label,link:((m=t.value.locales[n.value])==null?void 0:m.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:P(()=>Object.entries(t.value.locales).flatMap(([v,m])=>c.value.label===m.label?[]:{text:m.label,link:nt(m.link||(v==="root"?"/":`/${v}/`),a.value.i18nRouting!==!1&&e,s.value.relativePath.slice(c.value.link.length-1),!t.value.cleanUrls)+r.value})),currentLang:c}}function nt(e,t,n,s){return t?e.replace(/\/$/,"")+ce(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):e}const st={class:"NotFound"},at={class:"code"},ot={class:"title"},it={class:"quote"},lt={class:"action"},rt=["href","aria-label"],ct=k({__name:"NotFound",setup(e){const{theme:t}=V(),{currentLang:n}=R();return(s,a)=>{var r,c,f,v,m;return o(),u("div",st,[l("p",at,S(((r=i(t).notFound)==null?void 0:r.code)??"404"),1),l("h1",ot,S(((c=i(t).notFound)==null?void 0:c.title)??"PAGE NOT FOUND"),1),a[0]||(a[0]=l("div",{class:"divider"},null,-1)),l("blockquote",it,S(((f=i(t).notFound)==null?void 0:f.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),l("div",lt,[l("a",{class:"link",href:i(U)(i(n).link),"aria-label":((v=i(t).notFound)==null?void 0:v.linkLabel)??"go to home"},S(((m=i(t).notFound)==null?void 0:m.linkText)??"Take me home"),9,rt)])])}}}),ut=y(ct,[["__scopeId","data-v-6ff51ddd"]]);function Ie(e,t){if(Array.isArray(e))return Y(e);if(e==null)return[];t=ce(t);const n=Object.keys(e).sort((a,r)=>r.split("/").length-a.split("/").length).find(a=>t.startsWith(ce(a))),s=n?e[n]:[];return Array.isArray(s)?Y(s):Y(s.items,s.base)}function dt(e){const t=[];let n=0;for(const s in e){const a=e[s];if(a.items){n=t.push(a);continue}t[n]||t.push({items:[]}),t[n].items.push(a)}return t}function vt(e){const t=[];function n(s){for(const a of s)a.text&&a.link&&t.push({text:a.text,link:a.link,docFooterText:a.docFooterText}),a.items&&n(a.items)}return n(e),t}function ue(e,t){return Array.isArray(t)?t.some(n=>ue(e,n)):W(e,t.link)?!0:t.items?ue(e,t.items):!1}function Y(e,t){return[...e].map(n=>{const s={...n},a=s.base||t;return a&&s.link&&(s.link=a+s.link),s.items&&(s.items=Y(s.items,a)),s})}function O(){const{frontmatter:e,page:t,theme:n}=V(),s=le("(min-width: 960px)"),a=T(!1),r=P(()=>{const C=n.value.sidebar,A=t.value.relativePath;return C?Ie(C,A):[]}),c=T(r.value);F(r,(C,A)=>{JSON.stringify(C)!==JSON.stringify(A)&&(c.value=r.value)});const f=P(()=>e.value.sidebar!==!1&&c.value.length>0&&e.value.layout!=="home"),v=P(()=>m?e.value.aside==null?n.value.aside==="left":e.value.aside==="left":!1),m=P(()=>e.value.layout==="home"?!1:e.value.aside!=null?!!e.value.aside:n.value.aside!==!1),_=P(()=>f.value&&s.value),$=P(()=>f.value?dt(c.value):[]);function L(){a.value=!0}function N(){a.value=!1}function I(){a.value?N():L()}return{isOpen:a,sidebar:c,sidebarGroups:$,hasSidebar:f,hasAside:m,leftAside:v,isSidebarEnabled:_,open:L,close:N,toggle:I}}function ft(e,t){let n;Q(()=>{n=e.value?document.activeElement:void 0}),D(()=>{window.addEventListener("keyup",s)}),fe(()=>{window.removeEventListener("keyup",s)});function s(a){a.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function ht(e){const{page:t,hash:n}=V(),s=T(!1),a=P(()=>e.value.collapsed!=null),r=P(()=>!!e.value.link),c=T(!1),f=()=>{c.value=W(t.value.relativePath,e.value.link)};F([t,e,n],f),D(f);const v=P(()=>c.value?!0:e.value.items?ue(t.value.relativePath,e.value.items):!1),m=P(()=>!!(e.value.items&&e.value.items.length));Q(()=>{s.value=!!(a.value&&e.value.collapsed)}),he(()=>{(c.value||v.value)&&(s.value=!1)});function _(){a.value&&(s.value=!s.value)}return{collapsed:s,collapsible:a,isLink:r,isActiveLink:c,hasActiveLink:v,hasChildren:m,toggle:_}}function mt(){const{hasSidebar:e}=O(),t=le("(min-width: 960px)"),n=le("(min-width: 1280px)");return{isAsideEnabled:P(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const pt=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,de=[];function Me(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function pe(e){const t=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const s=Number(n.tagName[1]);return{element:n,title:kt(n),link:"#"+n.id,level:s}});return _t(t,e)}function kt(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(pt.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function _t(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[s,a]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return $t(e,s,a)}function bt(e,t){const{isAsideEnabled:n}=mt(),s=tt(r,100);let a=null;D(()=>{requestAnimationFrame(r),window.addEventListener("scroll",s)}),Oe(()=>{c(location.hash)}),fe(()=>{window.removeEventListener("scroll",s)});function r(){if(!n.value)return;const f=window.scrollY,v=window.innerHeight,m=document.body.offsetHeight,_=Math.abs(f+v-m)<1,$=de.map(({element:N,link:I})=>({link:I,top:gt(N)})).filter(({top:N})=>!Number.isNaN(N)).sort((N,I)=>N.top-I.top);if(!$.length){c(null);return}if(f<1){c(null);return}if(_){c($[$.length-1].link);return}let L=null;for(const{link:N,top:I}of $){if(I>f+Ge()+4)break;L=N}c(L)}function c(f){a&&a.classList.remove("active"),f==null?a=null:a=e.value.querySelector(`a[href="${decodeURIComponent(f)}"]`);const v=a;v?(v.classList.add("active"),t.value.style.top=v.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function gt(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function $t(e,t,n){de.length=0;const s=[],a=[];return e.forEach(r=>{const c={...r,children:[]};let f=a[a.length-1];for(;f&&f.level>=c.level;)a.pop(),f=a[a.length-1];if(c.element.classList.contains("ignore-header")||f&&"shouldIgnore"in f){a.push({level:c.level,shouldIgnore:!0});return}c.level>n||c.level<t||(de.push({element:c.element,link:c.link}),f?f.children.push(c):s.push(c),a.push(c))}),s}const yt=["href","title"],Pt=k({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(e){function t({target:n}){const s=n.href.split("#")[1],a=document.getElementById(decodeURIComponent(s));a==null||a.focus({preventScroll:!0})}return(n,s)=>{const a=z("VPDocOutlineItem",!0);return o(),u("ul",{class:w(["VPDocOutlineItem",e.root?"root":"nested"])},[(o(!0),u(x,null,M(e.headers,({children:r,link:c,title:f})=>(o(),u("li",null,[l("a",{class:"outline-link",href:c,onClick:t,title:f},S(f),9,yt),r!=null&&r.length?(o(),g(a,{key:0,headers:r},null,8,["headers"])):p("",!0)]))),256))],2)}}}),Ce=y(Pt,[["__scopeId","data-v-53c99d69"]]),Lt={class:"content"},Vt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},St=k({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=V(),s=Le([]);Z(()=>{s.value=pe(t.value.outline??n.value.outline)});const a=T(),r=T();return bt(a,r),(c,f)=>(o(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:w(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:a},[l("div",Lt,[l("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),l("div",Vt,S(i(Me)(i(n))),1),b(Ce,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Tt=y(St,[["__scopeId","data-v-f610f197"]]),xt={class:"VPDocAsideCarbonAds"},Nt=k({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,s)=>(o(),u("div",xt,[b(i(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),wt={class:"VPDocAside"},It=k({__name:"VPDocAside",setup(e){const{theme:t}=V();return(n,s)=>(o(),u("div",wt,[d(n.$slots,"aside-top",{},void 0,!0),d(n.$slots,"aside-outline-before",{},void 0,!0),b(Tt),d(n.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=l("div",{class:"spacer"},null,-1)),d(n.$slots,"aside-ads-before",{},void 0,!0),i(t).carbonAds?(o(),g(Nt,{key:0,"carbon-ads":i(t).carbonAds},null,8,["carbon-ads"])):p("",!0),d(n.$slots,"aside-ads-after",{},void 0,!0),d(n.$slots,"aside-bottom",{},void 0,!0)]))}}),Mt=y(It,[["__scopeId","data-v-cb998dce"]]);function Ct(){const{theme:e,page:t}=V();return P(()=>{const{text:n="Edit this page",pattern:s=""}=e.value.editLink||{};let a;return typeof s=="function"?a=s(t.value):a=s.replace(/:path/g,t.value.filePath),{url:a,text:n}})}function At(){const{page:e,theme:t,frontmatter:n}=V();return P(()=>{var m,_,$,L,N,I,C,A;const s=Ie(t.value.sidebar,e.value.relativePath),a=vt(s),r=Ht(a,H=>H.link.replace(/[?#].*$/,"")),c=r.findIndex(H=>W(e.value.relativePath,H.link)),f=((m=t.value.docFooter)==null?void 0:m.prev)===!1&&!n.value.prev||n.value.prev===!1,v=((_=t.value.docFooter)==null?void 0:_.next)===!1&&!n.value.next||n.value.next===!1;return{prev:f?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??(($=r[c-1])==null?void 0:$.docFooterText)??((L=r[c-1])==null?void 0:L.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((N=r[c-1])==null?void 0:N.link)},next:v?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((I=r[c+1])==null?void 0:I.docFooterText)??((C=r[c+1])==null?void 0:C.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((A=r[c+1])==null?void 0:A.link)}}})}function Ht(e,t){const n=new Set;return e.filter(s=>{const a=t(s);return n.has(a)?!1:n.add(a)})}const E=k({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=P(()=>t.tag??(t.href?"a":"span")),s=P(()=>t.href&&Ve.test(t.href)||t.target==="_blank");return(a,r)=>(o(),g(B(n.value),{class:w(["VPLink",{link:e.href,"vp-external-link-icon":s.value,"no-icon":e.noIcon}]),href:e.href?i(me)(e.href):void 0,target:e.target??(s.value?"_blank":void 0),rel:e.rel??(s.value?"noreferrer":void 0)},{default:h(()=>[d(a.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Bt={class:"VPLastUpdated"},Et=["datetime"],Ft=k({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:s}=V(),a=P(()=>new Date(n.value.lastUpdated)),r=P(()=>a.value.toISOString()),c=T("");return D(()=>{Q(()=>{var f,v,m;c.value=new Intl.DateTimeFormat((v=(f=t.value.lastUpdated)==null?void 0:f.formatOptions)!=null&&v.forceLocale?s.value:void 0,((m=t.value.lastUpdated)==null?void 0:m.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(a.value)})}),(f,v)=>{var m;return o(),u("p",Bt,[q(S(((m=i(t).lastUpdated)==null?void 0:m.text)||i(t).lastUpdatedText||"Last updated")+": ",1),l("time",{datetime:r.value},S(c.value),9,Et)])}}}),Dt=y(Ft,[["__scopeId","data-v-1bb0c8a8"]]),Ot={key:0,class:"VPDocFooter"},Gt={key:0,class:"edit-info"},Ut={key:0,class:"edit-link"},jt={key:1,class:"last-updated"},qt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Wt={class:"pager"},zt=["innerHTML"],Kt=["innerHTML"],Rt={class:"pager"},Jt=["innerHTML"],Yt=["innerHTML"],Xt=k({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:s}=V(),a=Ct(),r=At(),c=P(()=>t.value.editLink&&s.value.editLink!==!1),f=P(()=>n.value.lastUpdated),v=P(()=>c.value||f.value||r.value.prev||r.value.next);return(m,_)=>{var $,L,N,I;return v.value?(o(),u("footer",Ot,[d(m.$slots,"doc-footer-before",{},void 0,!0),c.value||f.value?(o(),u("div",Gt,[c.value?(o(),u("div",Ut,[b(E,{class:"edit-link-button",href:i(a).url,"no-icon":!0},{default:h(()=>[_[0]||(_[0]=l("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),q(" "+S(i(a).text),1)]),_:1},8,["href"])])):p("",!0),f.value?(o(),u("div",jt,[b(Dt)])):p("",!0)])):p("",!0),($=i(r).prev)!=null&&$.link||(L=i(r).next)!=null&&L.link?(o(),u("nav",qt,[_[1]||(_[1]=l("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),l("div",Wt,[(N=i(r).prev)!=null&&N.link?(o(),g(E,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:h(()=>{var C;return[l("span",{class:"desc",innerHTML:((C=i(t).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,zt),l("span",{class:"title",innerHTML:i(r).prev.text},null,8,Kt)]}),_:1},8,["href"])):p("",!0)]),l("div",Rt,[(I=i(r).next)!=null&&I.link?(o(),g(E,{key:0,class:"pager-link next",href:i(r).next.link},{default:h(()=>{var C;return[l("span",{class:"desc",innerHTML:((C=i(t).docFooter)==null?void 0:C.next)||"Next page"},null,8,Jt),l("span",{class:"title",innerHTML:i(r).next.text},null,8,Yt)]}),_:1},8,["href"])):p("",!0)])])):p("",!0)])):p("",!0)}}}),Qt=y(Xt,[["__scopeId","data-v-1bcd8184"]]),Zt={class:"container"},en={class:"aside-container"},tn={class:"aside-content"},nn={class:"content"},sn={class:"content-container"},an={class:"main"},on=k({__name:"VPDoc",setup(e){const{theme:t}=V(),n=ee(),{hasSidebar:s,hasAside:a,leftAside:r}=O(),c=P(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(f,v)=>{const m=z("Content");return o(),u("div",{class:w(["VPDoc",{"has-sidebar":i(s),"has-aside":i(a)}])},[d(f.$slots,"doc-top",{},void 0,!0),l("div",Zt,[i(a)?(o(),u("div",{key:0,class:w(["aside",{"left-aside":i(r)}])},[v[0]||(v[0]=l("div",{class:"aside-curtain"},null,-1)),l("div",en,[l("div",tn,[b(Mt,null,{"aside-top":h(()=>[d(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[d(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[d(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[d(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[d(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[d(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):p("",!0),l("div",nn,[l("div",sn,[d(f.$slots,"doc-before",{},void 0,!0),l("main",an,[b(m,{class:w(["vp-doc",[c.value,i(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),b(Qt,null,{"doc-footer-before":h(()=>[d(f.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),d(f.$slots,"doc-after",{},void 0,!0)])])]),d(f.$slots,"doc-bottom",{},void 0,!0)],2)}}}),ln=y(on,[["__scopeId","data-v-e6f2a212"]]),rn=k({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=P(()=>t.href&&Ve.test(t.href)),s=P(()=>t.tag||(t.href?"a":"button"));return(a,r)=>(o(),g(B(s.value),{class:w(["VPButton",[e.size,e.theme]]),href:e.href?i(me)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:h(()=>[q(S(e.text),1)]),_:1},8,["class","href","target","rel"]))}}),cn=y(rn,[["__scopeId","data-v-93dc4167"]]),un=["src","alt"],dn=k({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const s=z("VPImage",!0);return e.image?(o(),u(x,{key:0},[typeof e.image=="string"||"src"in e.image?(o(),u("img",j({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:i(U)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,un)):(o(),u(x,{key:1},[b(s,j({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),b(s,j({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):p("",!0)}}}),X=y(dn,[["__scopeId","data-v-ab19afbb"]]),vn={class:"container"},fn={class:"main"},hn={class:"heading"},mn=["innerHTML"],pn=["innerHTML"],kn=["innerHTML"],_n={key:0,class:"actions"},bn={key:0,class:"image"},gn={class:"image-container"},$n=k({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const t=te("hero-image-slot-exists");return(n,s)=>(o(),u("div",{class:w(["VPHero",{"has-image":e.image||i(t)}])},[l("div",vn,[l("div",fn,[d(n.$slots,"home-hero-info-before",{},void 0,!0),d(n.$slots,"home-hero-info",{},()=>[l("h1",hn,[e.name?(o(),u("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,mn)):p("",!0),e.text?(o(),u("span",{key:1,innerHTML:e.text,class:"text"},null,8,pn)):p("",!0)]),e.tagline?(o(),u("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,kn)):p("",!0)],!0),d(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(o(),u("div",_n,[(o(!0),u(x,null,M(e.actions,a=>(o(),u("div",{key:a.link,class:"action"},[b(cn,{tag:"a",size:"medium",theme:a.theme,text:a.text,href:a.link,target:a.target,rel:a.rel},null,8,["theme","text","href","target","rel"])]))),128))])):p("",!0),d(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||i(t)?(o(),u("div",bn,[l("div",gn,[s[0]||(s[0]=l("div",{class:"image-bg"},null,-1)),d(n.$slots,"home-hero-image",{},()=>[e.image?(o(),g(X,{key:0,class:"image-src",image:e.image},null,8,["image"])):p("",!0)],!0)])])):p("",!0)])],2))}}),yn=y($n,[["__scopeId","data-v-dd8814ff"]]),Pn=k({__name:"VPHomeHero",setup(e){const{frontmatter:t}=V();return(n,s)=>i(t).hero?(o(),g(yn,{key:0,class:"VPHomeHero",name:i(t).hero.name,text:i(t).hero.text,tagline:i(t).hero.tagline,image:i(t).hero.image,actions:i(t).hero.actions},{"home-hero-info-before":h(()=>[d(n.$slots,"home-hero-info-before")]),"home-hero-info":h(()=>[d(n.$slots,"home-hero-info")]),"home-hero-info-after":h(()=>[d(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":h(()=>[d(n.$slots,"home-hero-actions-after")]),"home-hero-image":h(()=>[d(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):p("",!0)}}),Ln={class:"box"},Vn={key:0,class:"icon"},Sn=["innerHTML"],Tn=["innerHTML"],xn=["innerHTML"],Nn={key:4,class:"link-text"},wn={class:"link-text-value"},In=k({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(o(),g(E,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:h(()=>[l("article",Ln,[typeof e.icon=="object"&&e.icon.wrap?(o(),u("div",Vn,[b(X,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(o(),g(X,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(o(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Sn)):p("",!0),l("h2",{class:"title",innerHTML:e.title},null,8,Tn),e.details?(o(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,xn)):p("",!0),e.linkText?(o(),u("div",Nn,[l("p",wn,[q(S(e.linkText)+" ",1),n[0]||(n[0]=l("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):p("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Mn=y(In,[["__scopeId","data-v-bd37d1a2"]]),Cn={key:0,class:"VPFeatures"},An={class:"container"},Hn={class:"items"},Bn=k({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=P(()=>{const s=t.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,a)=>e.features?(o(),u("div",Cn,[l("div",An,[l("div",Hn,[(o(!0),u(x,null,M(e.features,r=>(o(),u("div",{key:r.title,class:w(["item",[n.value]])},[b(Mn,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):p("",!0)}}),En=y(Bn,[["__scopeId","data-v-b1eea84a"]]),Fn=k({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=V();return(n,s)=>i(t).features?(o(),g(En,{key:0,class:"VPHomeFeatures",features:i(t).features},null,8,["features"])):p("",!0)}}),Dn=k({__name:"VPHomeContent",setup(e){const{width:t}=Ue({initialWidth:0,includeScrollbar:!1});return(n,s)=>(o(),u("div",{class:"vp-doc container",style:Se(i(t)?{"--vp-offset":`calc(50% - ${i(t)/2}px)`}:{})},[d(n.$slots,"default",{},void 0,!0)],4))}}),On=y(Dn,[["__scopeId","data-v-c141a4bd"]]),Gn=k({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=V();return(s,a)=>{const r=z("Content");return o(),u("div",{class:w(["VPHome",{"external-link-icon-enabled":i(n).externalLinkIcon}])},[d(s.$slots,"home-hero-before",{},void 0,!0),b(Pn,null,{"home-hero-info-before":h(()=>[d(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[d(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[d(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[d(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[d(s.$slots,"home-hero-image",{},void 0,!0)]),_:3}),d(s.$slots,"home-hero-after",{},void 0,!0),d(s.$slots,"home-features-before",{},void 0,!0),b(Fn),d(s.$slots,"home-features-after",{},void 0,!0),i(t).markdownStyles!==!1?(o(),g(On,{key:0},{default:h(()=>[b(r)]),_:1})):(o(),g(r,{key:1}))],2)}}}),Un=y(Gn,[["__scopeId","data-v-e07eaea7"]]),jn={},qn={class:"VPPage"};function Wn(e,t){const n=z("Content");return o(),u("div",qn,[d(e.$slots,"page-top"),b(n),d(e.$slots,"page-bottom")])}const zn=y(jn,[["render",Wn]]),Kn=k({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=V(),{hasSidebar:s}=O();return(a,r)=>(o(),u("div",{class:w(["VPContent",{"has-sidebar":i(s),"is-home":i(n).layout==="home"}]),id:"VPContent"},[i(t).isNotFound?d(a.$slots,"not-found",{},()=>[b(ut)],!0,0):i(n).layout==="page"?(o(),g(zn,{key:1},{"page-top":h(()=>[d(a.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[d(a.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(n).layout==="home"?(o(),g(Un,{key:2},{"home-hero-before":h(()=>[d(a.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[d(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[d(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[d(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[d(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[d(a.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[d(a.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[d(a.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[d(a.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(n).layout&&i(n).layout!=="doc"?(o(),g(B(i(n).layout),{key:3})):(o(),g(ln,{key:4},{"doc-top":h(()=>[d(a.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[d(a.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":h(()=>[d(a.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[d(a.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[d(a.$slots,"doc-after",{},void 0,!0)]),"aside-top":h(()=>[d(a.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":h(()=>[d(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[d(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[d(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[d(a.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":h(()=>[d(a.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Rn=y(Kn,[["__scopeId","data-v-9a6c75ad"]]),Jn={class:"container"},Yn=["innerHTML"],Xn=["innerHTML"],Qn=k({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=V(),{hasSidebar:s}=O();return(a,r)=>i(t).footer&&i(n).footer!==!1?(o(),u("footer",{key:0,class:w(["VPFooter",{"has-sidebar":i(s)}])},[l("div",Jn,[i(t).footer.message?(o(),u("p",{key:0,class:"message",innerHTML:i(t).footer.message},null,8,Yn)):p("",!0),i(t).footer.copyright?(o(),u("p",{key:1,class:"copyright",innerHTML:i(t).footer.copyright},null,8,Xn)):p("",!0)])],2)):p("",!0)}}),Zn=y(Qn,[["__scopeId","data-v-566314d4"]]);function es(){const{theme:e,frontmatter:t}=V(),n=Le([]),s=P(()=>n.value.length>0);return Z(()=>{n.value=pe(t.value.outline??e.value.outline)}),{headers:n,hasLocalNav:s}}const ts={class:"menu-text"},ns={class:"header"},ss={class:"outline"},as=k({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=V(),s=T(!1),a=T(0),r=T(),c=T();function f($){var L;(L=r.value)!=null&&L.contains($.target)||(s.value=!1)}F(s,$=>{if($){document.addEventListener("click",f);return}document.removeEventListener("click",f)}),re("Escape",()=>{s.value=!1}),Z(()=>{s.value=!1});function v(){s.value=!s.value,a.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function m($){$.target.classList.contains("outline-link")&&(c.value&&(c.value.style.transition="none"),Te(()=>{s.value=!1}))}function _(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return($,L)=>(o(),u("div",{class:"VPLocalNavOutlineDropdown",style:Se({"--vp-vh":a.value+"px"}),ref_key:"main",ref:r},[e.headers.length>0?(o(),u("button",{key:0,onClick:v,class:w({open:s.value})},[l("span",ts,S(i(Me)(i(n))),1),L[0]||(L[0]=l("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(o(),u("button",{key:1,onClick:_},S(i(n).returnToTopLabel||"Return to top"),1)),b(ve,{name:"flyout"},{default:h(()=>[s.value?(o(),u("div",{key:0,ref_key:"items",ref:c,class:"items",onClick:m},[l("div",ns,[l("a",{class:"top-link",href:"#",onClick:_},S(i(n).returnToTopLabel||"Return to top"),1)]),l("div",ss,[b(Ce,{headers:e.headers},null,8,["headers"])])],512)):p("",!0)]),_:1})],4))}}),os=y(as,[["__scopeId","data-v-6b867909"]]),is={class:"container"},ls=["aria-expanded"],rs={class:"menu-text"},cs=k({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t,frontmatter:n}=V(),{hasSidebar:s}=O(),{headers:a}=es(),{y:r}=xe(),c=T(0);D(()=>{c.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Z(()=>{a.value=pe(n.value.outline??t.value.outline)});const f=P(()=>a.value.length===0),v=P(()=>f.value&&!s.value),m=P(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:f.value,fixed:v.value}));return(_,$)=>i(n).layout!=="home"&&(!v.value||i(r)>=c.value)?(o(),u("div",{key:0,class:w(m.value)},[l("div",is,[i(s)?(o(),u("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:$[0]||($[0]=L=>_.$emit("open-menu"))},[$[1]||($[1]=l("span",{class:"vpi-align-left menu-icon"},null,-1)),l("span",rs,S(i(t).sidebarMenuLabel||"Menu"),1)],8,ls)):p("",!0),b(os,{headers:i(a),navHeight:c.value},null,8,["headers","navHeight"])])],2)):p("",!0)}}),us=y(cs,[["__scopeId","data-v-2488c25a"]]);function ds(){const e=T(!1);function t(){e.value=!0,window.addEventListener("resize",a)}function n(){e.value=!1,window.removeEventListener("resize",a)}function s(){e.value?n():t()}function a(){window.outerWidth>=768&&n()}const r=ee();return F(()=>r.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}const vs={},fs={class:"VPSwitch",type:"button",role:"switch"},hs={class:"check"},ms={key:0,class:"icon"};function ps(e,t){return o(),u("button",fs,[l("span",hs,[e.$slots.default?(o(),u("span",ms,[d(e.$slots,"default",{},void 0,!0)])):p("",!0)])])}const ks=y(vs,[["render",ps],["__scopeId","data-v-b4ccac88"]]),_s=k({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=V(),s=te("toggle-appearance",()=>{t.value=!t.value}),a=T("");return he(()=>{a.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,c)=>(o(),g(ks,{title:a.value,class:"VPSwitchAppearance","aria-checked":i(t),onClick:i(s)},{default:h(()=>[...c[0]||(c[0]=[l("span",{class:"vpi-sun sun"},null,-1),l("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),ke=y(_s,[["__scopeId","data-v-be9742d9"]]),bs={key:0,class:"VPNavBarAppearance"},gs=k({__name:"VPNavBarAppearance",setup(e){const{site:t}=V();return(n,s)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(o(),u("div",bs,[b(ke)])):p("",!0)}}),$s=y(gs,[["__scopeId","data-v-3f90c1a5"]]),_e=T();let Ae=!1,ie=0;function ys(e){const t=T(!1);if(ne){!Ae&&Ps(),ie++;const n=F(_e,s=>{var a,r,c;s===e.el.value||(a=e.el.value)!=null&&a.contains(s)?(t.value=!0,(r=e.onFocus)==null||r.call(e)):(t.value=!1,(c=e.onBlur)==null||c.call(e))});fe(()=>{n(),ie--,ie||Ls()})}return je(t)}function Ps(){document.addEventListener("focusin",He),Ae=!0,_e.value=document.activeElement}function Ls(){document.removeEventListener("focusin",He)}function He(){_e.value=document.activeElement}const Vs={class:"VPMenuLink"},Ss=["innerHTML"],Ts=k({__name:"VPMenuLink",props:{item:{}},setup(e){const{page:t}=V();return(n,s)=>(o(),u("div",Vs,[b(E,{class:w({active:i(W)(i(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon},{default:h(()=>[l("span",{innerHTML:e.item.text},null,8,Ss)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),se=y(Ts,[["__scopeId","data-v-7eeeb2dc"]]),xs={class:"VPMenuGroup"},Ns={key:0,class:"title"},ws=k({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(o(),u("div",xs,[e.text?(o(),u("p",Ns,S(e.text),1)):p("",!0),(o(!0),u(x,null,M(e.items,s=>(o(),u(x,null,["link"in s?(o(),g(se,{key:0,item:s},null,8,["item"])):p("",!0)],64))),256))]))}}),Is=y(ws,[["__scopeId","data-v-a6b0397c"]]),Ms={class:"VPMenu"},Cs={key:0,class:"items"},As=k({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(o(),u("div",Ms,[e.items?(o(),u("div",Cs,[(o(!0),u(x,null,M(e.items,s=>(o(),u(x,{key:JSON.stringify(s)},["link"in s?(o(),g(se,{key:0,item:s},null,8,["item"])):"component"in s?(o(),g(B(s.component),j({key:1,ref_for:!0},s.props),null,16)):(o(),g(Is,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):p("",!0),d(t.$slots,"default",{},void 0,!0)]))}}),Hs=y(As,[["__scopeId","data-v-20ed86d6"]]),Bs=["aria-expanded","aria-label"],Es={key:0,class:"text"},Fs=["innerHTML"],Ds={key:1,class:"vpi-more-horizontal icon"},Os={class:"menu"},Gs=k({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=T(!1),n=T();ys({el:n,onBlur:s});function s(){t.value=!1}return(a,r)=>(o(),u("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:r[1]||(r[1]=c=>t.value=!0),onMouseleave:r[2]||(r[2]=c=>t.value=!1)},[l("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:r[0]||(r[0]=c=>t.value=!t.value)},[e.button||e.icon?(o(),u("span",Es,[e.icon?(o(),u("span",{key:0,class:w([e.icon,"option-icon"])},null,2)):p("",!0),e.button?(o(),u("span",{key:1,innerHTML:e.button},null,8,Fs)):p("",!0),r[3]||(r[3]=l("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(o(),u("span",Ds))],8,Bs),l("div",Os,[b(Hs,{items:e.items},{default:h(()=>[d(a.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=y(Gs,[["__scopeId","data-v-bfe7971f"]]),Us=["href","aria-label","innerHTML"],js=k({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(e){const t=e,n=T();D(async()=>{var r;await Te();const a=(r=n.value)==null?void 0:r.children[0];a instanceof HTMLElement&&a.className.startsWith("vpi-social-")&&(getComputedStyle(a).maskImage||getComputedStyle(a).webkitMaskImage)==="none"&&a.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const s=P(()=>typeof t.icon=="object"?t.icon.svg:`<span class="vpi-social-${t.icon}"></span>`);return(a,r)=>(o(),u("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:"noopener",innerHTML:s.value},null,8,Us))}}),qs=y(js,[["__scopeId","data-v-60a9a2d3"]]),Ws={class:"VPSocialLinks"},zs=k({__name:"VPSocialLinks",props:{links:{}},setup(e){return(t,n)=>(o(),u("div",Ws,[(o(!0),u(x,null,M(e.links,({link:s,icon:a,ariaLabel:r})=>(o(),g(qs,{key:s,icon:a,link:s,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),ge=y(zs,[["__scopeId","data-v-e71e869c"]]),Ks={key:0,class:"group translations"},Rs={class:"trans-title"},Js={key:1,class:"group"},Ys={class:"item appearance"},Xs={class:"label"},Qs={class:"appearance-action"},Zs={key:2,class:"group"},ea={class:"item social-links"},ta=k({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=V(),{localeLinks:s,currentLang:a}=R({correspondingLink:!0}),r=P(()=>s.value.length&&a.value.label||t.value.appearance||n.value.socialLinks);return(c,f)=>r.value?(o(),g(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:h(()=>[i(s).length&&i(a).label?(o(),u("div",Ks,[l("p",Rs,S(i(a).label),1),(o(!0),u(x,null,M(i(s),v=>(o(),g(se,{key:v.link,item:v},null,8,["item"]))),128))])):p("",!0),i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(o(),u("div",Js,[l("div",Ys,[l("p",Xs,S(i(n).darkModeSwitchLabel||"Appearance"),1),l("div",Qs,[b(ke)])])])):p("",!0),i(n).socialLinks?(o(),u("div",Zs,[l("div",ea,[b(ge,{class:"social-links-list",links:i(n).socialLinks},null,8,["links"])])])):p("",!0)]),_:1})):p("",!0)}}),na=y(ta,[["__scopeId","data-v-f953d92f"]]),sa=["aria-expanded"],aa=k({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(o(),u("button",{type:"button",class:w(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=s=>t.$emit("click"))},[...n[1]||(n[1]=[l("span",{class:"container"},[l("span",{class:"top"}),l("span",{class:"middle"}),l("span",{class:"bottom"})],-1)])],10,sa))}}),oa=y(aa,[["__scopeId","data-v-6bee1efd"]]),ia=["innerHTML"],la=k({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const{page:t}=V();return(n,s)=>(o(),g(E,{class:w({VPNavBarMenuLink:!0,active:i(W)(i(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:h(()=>[l("span",{innerHTML:e.item.text},null,8,ia)]),_:1},8,["class","href","target","rel","no-icon"]))}}),ra=y(la,[["__scopeId","data-v-815115f5"]]),ca=k({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=V(),s=r=>"component"in r?!1:"link"in r?W(n.value.relativePath,r.link,!!t.item.activeMatch):r.items.some(s),a=P(()=>s(t.item));return(r,c)=>(o(),g(be,{class:w({VPNavBarMenuGroup:!0,active:i(W)(i(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||a.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),ua={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},da=k({__name:"VPNavBarMenu",setup(e){const{theme:t}=V();return(n,s)=>i(t).nav?(o(),u("nav",ua,[s[0]||(s[0]=l("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(o(!0),u(x,null,M(i(t).nav,a=>(o(),u(x,{key:JSON.stringify(a)},["link"in a?(o(),g(ra,{key:0,item:a},null,8,["item"])):"component"in a?(o(),g(B(a.component),j({key:1,ref_for:!0},a.props),null,16)):(o(),g(ca,{key:2,item:a},null,8,["item"]))],64))),128))])):p("",!0)}}),va=y(da,[["__scopeId","data-v-afb2845e"]]);function fa(e){const{localeIndex:t,theme:n}=V();function s(a){var I,C,A;const r=a.split("."),c=(I=n.value.search)==null?void 0:I.options,f=c&&typeof c=="object",v=f&&((A=(C=c.locales)==null?void 0:C[t.value])==null?void 0:A.translations)||null,m=f&&c.translations||null;let _=v,$=m,L=e;const N=r.pop();for(const H of r){let G=null;const K=L==null?void 0:L[H];K&&(G=L=K);const ae=$==null?void 0:$[H];ae&&(G=$=ae);const oe=_==null?void 0:_[H];oe&&(G=_=oe),K||(L=G),ae||($=G),oe||(_=G)}return(_==null?void 0:_[N])??($==null?void 0:$[N])??(L==null?void 0:L[N])??""}return s}const ha=["aria-label"],ma={class:"DocSearch-Button-Container"},pa={class:"DocSearch-Button-Placeholder"},ye=k({__name:"VPNavBarSearchButton",setup(e){const n=fa({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,a)=>(o(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(n)("button.buttonAriaLabel")},[l("span",ma,[a[0]||(a[0]=l("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),l("span",pa,S(i(n)("button.buttonText")),1)]),a[1]||(a[1]=l("span",{class:"DocSearch-Button-Keys"},[l("kbd",{class:"DocSearch-Button-Key"}),l("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,ha))}}),ka={class:"VPNavBarSearch"},_a={id:"local-search"},ba={key:1,id:"docsearch"},ga=k({__name:"VPNavBarSearch",setup(e){const t=qe(()=>We(()=>import("./VPLocalSearchBox.D3_9dRGY.js"),__vite__mapDeps([0,1]))),n=()=>null,{theme:s}=V(),a=T(!1),r=T(!1);D(()=>{});function c(){a.value||(a.value=!0,setTimeout(f,16))}function f(){const $=new Event("keydown");$.key="k",$.metaKey=!0,window.dispatchEvent($),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||f()},16)}function v($){const L=$.target,N=L.tagName;return L.isContentEditable||N==="INPUT"||N==="SELECT"||N==="TEXTAREA"}const m=T(!1);re("k",$=>{($.ctrlKey||$.metaKey)&&($.preventDefault(),m.value=!0)}),re("/",$=>{v($)||($.preventDefault(),m.value=!0)});const _="local";return($,L)=>{var N;return o(),u("div",ka,[i(_)==="local"?(o(),u(x,{key:0},[m.value?(o(),g(i(t),{key:0,onClose:L[0]||(L[0]=I=>m.value=!1)})):p("",!0),l("div",_a,[b(ye,{onClick:L[1]||(L[1]=I=>m.value=!0)})])],64)):i(_)==="algolia"?(o(),u(x,{key:1},[a.value?(o(),g(i(n),{key:0,algolia:((N=i(s).search)==null?void 0:N.options)??i(s).algolia,onVnodeBeforeMount:L[2]||(L[2]=I=>r.value=!0)},null,8,["algolia"])):p("",!0),r.value?p("",!0):(o(),u("div",ba,[b(ye,{onClick:c})]))],64)):p("",!0)])}}}),$a=k({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=V();return(n,s)=>i(t).socialLinks?(o(),g(ge,{key:0,class:"VPNavBarSocialLinks",links:i(t).socialLinks},null,8,["links"])):p("",!0)}}),ya=y($a,[["__scopeId","data-v-ef6192dc"]]),Pa=["href","rel","target"],La=["innerHTML"],Va={key:2},Sa=k({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=V(),{hasSidebar:s}=O(),{currentLang:a}=R(),r=P(()=>{var v;return typeof n.value.logoLink=="string"?n.value.logoLink:(v=n.value.logoLink)==null?void 0:v.link}),c=P(()=>{var v;return typeof n.value.logoLink=="string"||(v=n.value.logoLink)==null?void 0:v.rel}),f=P(()=>{var v;return typeof n.value.logoLink=="string"||(v=n.value.logoLink)==null?void 0:v.target});return(v,m)=>(o(),u("div",{class:w(["VPNavBarTitle",{"has-sidebar":i(s)}])},[l("a",{class:"title",href:r.value??i(me)(i(a).link),rel:c.value,target:f.value},[d(v.$slots,"nav-bar-title-before",{},void 0,!0),i(n).logo?(o(),g(X,{key:0,class:"logo",image:i(n).logo},null,8,["image"])):p("",!0),i(n).siteTitle?(o(),u("span",{key:1,innerHTML:i(n).siteTitle},null,8,La)):i(n).siteTitle===void 0?(o(),u("span",Va,S(i(t).title),1)):p("",!0),d(v.$slots,"nav-bar-title-after",{},void 0,!0)],8,Pa)],2))}}),Ta=y(Sa,[["__scopeId","data-v-9f43907a"]]),xa={class:"items"},Na={class:"title"},wa=k({__name:"VPNavBarTranslations",setup(e){const{theme:t}=V(),{localeLinks:n,currentLang:s}=R({correspondingLink:!0});return(a,r)=>i(n).length&&i(s).label?(o(),g(be,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(t).langMenuLabel||"Change language"},{default:h(()=>[l("div",xa,[l("p",Na,S(i(s).label),1),(o(!0),u(x,null,M(i(n),c=>(o(),g(se,{key:c.link,item:c},null,8,["item"]))),128))])]),_:1},8,["label"])):p("",!0)}}),Ia=y(wa,[["__scopeId","data-v-acee064b"]]),Ma={class:"wrapper"},Ca={class:"container"},Aa={class:"title"},Ha={class:"content"},Ba={class:"content-body"},Ea=k({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=xe(),{hasSidebar:s}=O(),{frontmatter:a}=V(),r=T({});return he(()=>{r.value={"has-sidebar":s.value,home:a.value.layout==="home",top:n.value===0,"screen-open":t.isScreenOpen}}),(c,f)=>(o(),u("div",{class:w(["VPNavBar",r.value])},[l("div",Ma,[l("div",Ca,[l("div",Aa,[b(Ta,null,{"nav-bar-title-before":h(()=>[d(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[d(c.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),l("div",Ha,[l("div",Ba,[d(c.$slots,"nav-bar-content-before",{},void 0,!0),b(ga,{class:"search"}),b(va,{class:"menu"}),b(Ia,{class:"translations"}),b($s,{class:"appearance"}),b(ya,{class:"social-links"}),b(na,{class:"extra"}),d(c.$slots,"nav-bar-content-after",{},void 0,!0),b(oa,{class:"hamburger",active:e.isScreenOpen,onClick:f[0]||(f[0]=v=>c.$emit("toggle-screen"))},null,8,["active"])])])])]),f[1]||(f[1]=l("div",{class:"divider"},[l("div",{class:"divider-line"})],-1))],2))}}),Fa=y(Ea,[["__scopeId","data-v-9fd4d1dd"]]),Da={key:0,class:"VPNavScreenAppearance"},Oa={class:"text"},Ga=k({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=V();return(s,a)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(o(),u("div",Da,[l("p",Oa,S(i(n).darkModeSwitchLabel||"Appearance"),1),b(ke)])):p("",!0)}}),Ua=y(Ga,[["__scopeId","data-v-a3e2920d"]]),ja=["innerHTML"],qa=k({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=te("close-screen");return(n,s)=>(o(),g(E,{class:"VPNavScreenMenuLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(t)},{default:h(()=>[l("span",{innerHTML:e.item.text},null,8,ja)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Wa=y(qa,[["__scopeId","data-v-fa963d97"]]),za=["innerHTML"],Ka=k({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=te("close-screen");return(n,s)=>(o(),g(E,{class:"VPNavScreenMenuGroupLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(t)},{default:h(()=>[l("span",{innerHTML:e.item.text},null,8,za)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Be=y(Ka,[["__scopeId","data-v-e04f3e85"]]),Ra={class:"VPNavScreenMenuGroupSection"},Ja={key:0,class:"title"},Ya=k({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(o(),u("div",Ra,[e.text?(o(),u("p",Ja,S(e.text),1)):p("",!0),(o(!0),u(x,null,M(e.items,s=>(o(),g(Be,{key:s.text,item:s},null,8,["item"]))),128))]))}}),Xa=y(Ya,[["__scopeId","data-v-f60dbfa7"]]),Qa=["aria-controls","aria-expanded"],Za=["innerHTML"],eo=["id"],to={key:0,class:"item"},no={key:1,class:"item"},so={key:2,class:"group"},ao=k({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=T(!1),s=P(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function a(){n.value=!n.value}return(r,c)=>(o(),u("div",{class:w(["VPNavScreenMenuGroup",{open:n.value}])},[l("button",{class:"button","aria-controls":s.value,"aria-expanded":n.value,onClick:a},[l("span",{class:"button-text",innerHTML:e.text},null,8,Za),c[0]||(c[0]=l("span",{class:"vpi-plus button-icon"},null,-1))],8,Qa),l("div",{id:s.value,class:"items"},[(o(!0),u(x,null,M(e.items,f=>(o(),u(x,{key:JSON.stringify(f)},["link"in f?(o(),u("div",to,[b(Be,{item:f},null,8,["item"])])):"component"in f?(o(),u("div",no,[(o(),g(B(f.component),j({ref_for:!0},f.props,{"screen-menu":""}),null,16))])):(o(),u("div",so,[b(Xa,{text:f.text,items:f.items},null,8,["text","items"])]))],64))),128))],8,eo)],2))}}),oo=y(ao,[["__scopeId","data-v-d99bfeec"]]),io={key:0,class:"VPNavScreenMenu"},lo=k({__name:"VPNavScreenMenu",setup(e){const{theme:t}=V();return(n,s)=>i(t).nav?(o(),u("nav",io,[(o(!0),u(x,null,M(i(t).nav,a=>(o(),u(x,{key:JSON.stringify(a)},["link"in a?(o(),g(Wa,{key:0,item:a},null,8,["item"])):"component"in a?(o(),g(B(a.component),j({key:1,ref_for:!0},a.props,{"screen-menu":""}),null,16)):(o(),g(oo,{key:2,text:a.text||"",items:a.items},null,8,["text","items"]))],64))),128))])):p("",!0)}}),ro=k({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=V();return(n,s)=>i(t).socialLinks?(o(),g(ge,{key:0,class:"VPNavScreenSocialLinks",links:i(t).socialLinks},null,8,["links"])):p("",!0)}}),co={class:"list"},uo=k({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=R({correspondingLink:!0}),s=T(!1);function a(){s.value=!s.value}return(r,c)=>i(t).length&&i(n).label?(o(),u("div",{key:0,class:w(["VPNavScreenTranslations",{open:s.value}])},[l("button",{class:"title",onClick:a},[c[0]||(c[0]=l("span",{class:"vpi-languages icon lang"},null,-1)),q(" "+S(i(n).label)+" ",1),c[1]||(c[1]=l("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),l("ul",co,[(o(!0),u(x,null,M(i(t),f=>(o(),u("li",{key:f.link,class:"item"},[b(E,{class:"link",href:f.link},{default:h(()=>[q(S(f.text),1)]),_:2},1032,["href"])]))),128))])],2)):p("",!0)}}),vo=y(uo,[["__scopeId","data-v-516e4bc3"]]),fo={class:"container"},ho=k({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=T(null),n=Ne(ne?document.body:null);return(s,a)=>(o(),g(ve,{name:"fade",onEnter:a[0]||(a[0]=r=>n.value=!0),onAfterLeave:a[1]||(a[1]=r=>n.value=!1)},{default:h(()=>[e.open?(o(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[l("div",fo,[d(s.$slots,"nav-screen-content-before",{},void 0,!0),b(lo,{class:"menu"}),b(vo,{class:"translations"}),b(Ua,{class:"appearance"}),b(ro,{class:"social-links"}),d(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):p("",!0)]),_:3}))}}),mo=y(ho,[["__scopeId","data-v-2dd6d0c7"]]),po={key:0,class:"VPNav"},ko=k({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:s}=ds(),{frontmatter:a}=V(),r=P(()=>a.value.navbar!==!1);return we("close-screen",n),Q(()=>{ne&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(c,f)=>r.value?(o(),u("header",po,[b(Fa,{"is-screen-open":i(t),onToggleScreen:i(s)},{"nav-bar-title-before":h(()=>[d(c.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[d(c.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[d(c.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[d(c.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),b(mo,{open:i(t)},{"nav-screen-content-before":h(()=>[d(c.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[d(c.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):p("",!0)}}),_o=y(ko,[["__scopeId","data-v-7ad780c2"]]),bo=["role","tabindex"],go={key:1,class:"items"},$o=k({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:s,isLink:a,isActiveLink:r,hasActiveLink:c,hasChildren:f,toggle:v}=ht(P(()=>t.item)),m=P(()=>f.value?"section":"div"),_=P(()=>a.value?"a":"div"),$=P(()=>f.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),L=P(()=>a.value?void 0:"button"),N=P(()=>[[`level-${t.depth}`],{collapsible:s.value},{collapsed:n.value},{"is-link":a.value},{"is-active":r.value},{"has-active":c.value}]);function I(A){"key"in A&&A.key!=="Enter"||!t.item.link&&v()}function C(){t.item.link&&v()}return(A,H)=>{const G=z("VPSidebarItem",!0);return o(),g(B(m.value),{class:w(["VPSidebarItem",N.value])},{default:h(()=>[e.item.text?(o(),u("div",j({key:0,class:"item",role:L.value},ze(e.item.items?{click:I,keydown:I}:{},!0),{tabindex:e.item.items&&0}),[H[1]||(H[1]=l("div",{class:"indicator"},null,-1)),e.item.link?(o(),g(E,{key:0,tag:_.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:h(()=>[(o(),g(B($.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(o(),g(B($.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(o(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:Ke(C,["enter"]),tabindex:"0"},[...H[0]||(H[0]=[l("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):p("",!0)],16,bo)):p("",!0),e.item.items&&e.item.items.length?(o(),u("div",go,[e.depth<5?(o(!0),u(x,{key:0},M(e.item.items,K=>(o(),g(G,{key:K.text,item:K,depth:e.depth+1},null,8,["item","depth"]))),128)):p("",!0)])):p("",!0)]),_:1},8,["class"])}}}),yo=y($o,[["__scopeId","data-v-0009425e"]]),Po=k({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=T(!0);let n=null;return D(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),Re(()=>{n!=null&&(clearTimeout(n),n=null)}),(s,a)=>(o(!0),u(x,null,M(e.items,r=>(o(),u("div",{key:r.text,class:w(["group",{"no-transition":t.value}])},[b(yo,{item:r,depth:0},null,8,["item"])],2))),128))}}),Lo=y(Po,[["__scopeId","data-v-51288d80"]]),Vo={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},So=k({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=O(),s=e,a=T(null),r=Ne(ne?document.body:null);F([s,a],()=>{var f;s.open?(r.value=!0,(f=a.value)==null||f.focus()):r.value=!1},{immediate:!0,flush:"post"});const c=T(0);return F(t,()=>{c.value+=1},{deep:!0}),(f,v)=>i(n)?(o(),u("aside",{key:0,class:w(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:a,onClick:v[0]||(v[0]=Je(()=>{},["stop"]))},[v[2]||(v[2]=l("div",{class:"curtain"},null,-1)),l("nav",Vo,[v[1]||(v[1]=l("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),d(f.$slots,"sidebar-nav-before",{},void 0,!0),(o(),g(Lo,{items:i(t),key:c.value},null,8,["items"])),d(f.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):p("",!0)}}),To=y(So,[["__scopeId","data-v-42c4c606"]]),xo=k({__name:"VPSkipLink",setup(e){const{theme:t}=V(),n=ee(),s=T();F(()=>n.path,()=>s.value.focus());function a({target:r}){const c=document.getElementById(decodeURIComponent(r.hash).slice(1));if(c){const f=()=>{c.removeAttribute("tabindex"),c.removeEventListener("blur",f)};c.setAttribute("tabindex","-1"),c.addEventListener("blur",f),c.focus(),window.scrollTo(0,0)}}return(r,c)=>(o(),u(x,null,[l("span",{ref_key:"backToTop",ref:s,tabindex:"-1"},null,512),l("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:a},S(i(t).skipToContentLabel||"Skip to content"),1)],64))}}),No=y(xo,[["__scopeId","data-v-fcbfc0e0"]]),wo=k({__name:"Layout",setup(e){const{isOpen:t,open:n,close:s}=O(),a=ee();F(()=>a.path,s),ft(t,s);const{frontmatter:r}=V(),c=Ye(),f=P(()=>!!c["home-hero-image"]);return we("hero-image-slot-exists",f),(v,m)=>{const _=z("Content");return i(r).layout!==!1?(o(),u("div",{key:0,class:w(["Layout",i(r).pageClass])},[d(v.$slots,"layout-top",{},void 0,!0),b(No),b(et,{class:"backdrop",show:i(t),onClick:i(s)},null,8,["show","onClick"]),b(_o,null,{"nav-bar-title-before":h(()=>[d(v.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[d(v.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[d(v.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[d(v.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":h(()=>[d(v.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[d(v.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),b(us,{open:i(t),onOpenMenu:i(n)},null,8,["open","onOpenMenu"]),b(To,{open:i(t)},{"sidebar-nav-before":h(()=>[d(v.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":h(()=>[d(v.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),b(Rn,null,{"page-top":h(()=>[d(v.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[d(v.$slots,"page-bottom",{},void 0,!0)]),"not-found":h(()=>[d(v.$slots,"not-found",{},void 0,!0)]),"home-hero-before":h(()=>[d(v.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[d(v.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[d(v.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[d(v.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[d(v.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[d(v.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[d(v.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[d(v.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[d(v.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":h(()=>[d(v.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[d(v.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[d(v.$slots,"doc-after",{},void 0,!0)]),"doc-top":h(()=>[d(v.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[d(v.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":h(()=>[d(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[d(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[d(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[d(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[d(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[d(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),b(Zn),d(v.$slots,"layout-bottom",{},void 0,!0)],2)):(o(),g(_,{key:1}))}}}),Io=y(wo,[["__scopeId","data-v-d8b57b2d"]]),Pe={Layout:Io,enhanceApp:({app:e})=>{e.component("Badge",Xe)}},Mo={class:"rk-home"},Co={class:"rk-section"},Ao={class:"rk-stages"},Ho={class:"rk-no"},Bo={class:"rk-section"},Eo={class:"rk-flow"},Fo={class:"rk-phase"},Do={class:"rk-chips"},Oo={class:"rk-phase"},Go={class:"rk-chips"},Uo={class:"rk-more"},jo=["href"],qo={class:"rk-section"},Wo={class:"rk-install-box"},zo={class:"rk-tabs",role:"tablist"},Ko=["aria-selected","onClick"],Ro={key:0,class:"rk-command"},Jo=["aria-label","onClick"],Yo={key:1,class:"rk-note"},Xo={class:"rk-more"},Qo=["href"],Zo={class:"rk-section rk-cta"},ei={class:"rk-cta-actions"},ti=["href"],ni=["href"],J="https://paseo-req-kit.vercel.app",si=k({__name:"HomeExtras",setup(e){const t=T([{id:"npx",label:"任何系统(npx)",command:"npx -y paseo-req-kit@latest install",note:"只需要 Node.js 22+。公司内网只有 npm 镜像时:npx -y --registry=<镜像地址> paseo-req-kit@latest install(会保存为本机的 npm 源)。beta 版把 latest 换成 beta。"},{id:"unix",label:"macOS / Linux",command:`curl -fsSL ${J}/install.sh | sh`,note:"也适用于 Windows 的 Git Bash、WSL。加 -s -- --beta 安装 beta 版。"},{id:"windows",label:"Windows PowerShell",command:`irm ${J}/install.ps1 | iex`,note:"不受脚本执行策略限制。"}]);D(()=>{const v=`${window.location.origin}${U("/").replace(/\/$/,"")}`;v===J||!/^https?:/.test(v)||(t.value=t.value.map(m=>({...m,command:m.command.replace(J,v)})))});const n=T(t.value[0].id),s=T(!1);function a(v){var m;(m=navigator.clipboard)==null||m.writeText(v).then(()=>{s.value=!0,setTimeout(()=>s.value=!1,1500)})}const r=[{no:"01",title:"对话对齐需求",text:"输入 /req 和一句话。AI 先复述理解,再一次问一个问题、给出选项和推荐,最后写成一份需求说明请你确认。"},{no:"02",title:"后台开发",text:"方案设计、方案审核、代码实现、代码评审、修复,由一组 agent 在后台完成。每一步都挂在你的对话下,可以随时点开看。"},{no:"03",title:"提测与验证",text:"研发完成写好提测说明。可以接着自动验证,也可以停下来交给测试同事,在测试环境里验证。"},{no:"04",title:"逐条验收",text:"收到结论和报告后,AI 按验收标准一条一条带你核对,记录结果。合并上线仍然由人决定。"}],c=["方案设计","方案审核 ⇄ 修订","代码实现","代码评审 ⇄ 修复","提测说明"],f=["服务启动","功能验证","缺陷修复 ⇄ 复验","完成报告"];return(v,m)=>(o(),u("div",Mo,[l("section",Co,[m[0]||(m[0]=l("h2",{class:"rk-title"},"一个需求,四个阶段",-1)),m[1]||(m[1]=l("p",{class:"rk-lead"},"你负责把需求讲清楚和最后验收,中间的工作交给 agent。",-1)),l("div",Ao,[(o(),u(x,null,M(r,_=>l("div",{key:_.no,class:"rk-stage"},[l("div",Ho,S(_.no),1),l("h3",null,S(_.title),1),l("p",null,S(_.text),1)])),64))])]),l("section",Bo,[m[5]||(m[5]=l("h2",{class:"rk-title"},"流水线",-1)),m[6]||(m[6]=l("p",{class:"rk-lead"}," 做事的和检查的是不同的 agent,每一步只看文件、不靠记忆;审核、评审、验证不通过就返工,轮数有上限,遗留问题如实写进报告。 ",-1)),l("div",Eo,[l("div",Fo,[m[2]||(m[2]=l("div",{class:"rk-phase-name"},"研发阶段",-1)),l("div",Do,[(o(),u(x,null,M(c,_=>l("span",{key:_,class:"rk-chip"},S(_),1)),64))])]),m[4]||(m[4]=l("div",{class:"rk-gate",title:"执行方式为“分阶段”时在这里停下,等待提测"},[l("span",null,"闸口"),l("small",null,"连续 / 分阶段 / 只做研发")],-1)),l("div",Oo,[m[3]||(m[3]=l("div",{class:"rk-phase-name"},"测试验证阶段",-1)),l("div",Go,[(o(),u(x,null,M(f,_=>l("span",{key:_,class:"rk-chip"},S(_),1)),64))])])]),l("p",Uo,[l("a",{href:i(U)("/guide/how-it-works")},"了解工作原理 →",8,jo)])]),l("section",qo,[m[7]||(m[7]=l("h2",{class:"rk-title"},"安装",-1)),m[8]||(m[8]=l("p",{class:"rk-lead"},"在运行 Paseo daemon 的机器上执行一条命令:检查环境、安装、装好 /req 等 skill、引导你选择 agent。再次运行即升级。",-1)),l("div",Wo,[l("div",zo,[(o(!0),u(x,null,M(t.value,_=>(o(),u("button",{key:_.id,role:"tab","aria-selected":n.value===_.id,class:w({active:n.value===_.id}),onClick:$=>n.value=_.id},S(_.label),11,Ko))),128))]),(o(!0),u(x,null,M(t.value,_=>(o(),u(x,{key:_.id},[n.value===_.id?(o(),u("div",Ro,[l("code",null,S(_.command),1),l("button",{class:"rk-copy","aria-label":s.value?"已复制":"复制命令",onClick:$=>a(_.command)},S(s.value?"已复制":"复制"),9,Jo)])):p("",!0),n.value===_.id?(o(),u("p",Yo,S(_.note),1)):p("",!0)],64))),128))]),l("p",Xo,[l("a",{href:i(U)("/guide/getting-started")},"快速开始 →",8,Qo)])]),l("section",Zo,[m[9]||(m[9]=l("h2",{class:"rk-title"},"给测试、产品、项目经理用的需求开发体系",-1)),m[10]||(m[10]=l("p",{class:"rk-lead"},"不用读代码,也能把一个需求从“我想要……”推进到“可以验收”。每一步的产物都在仓库里,可以随时查看、亲自核对。",-1)),l("div",ei,[l("a",{class:"rk-button brand",href:i(U)("/guide/getting-started")},"开始使用",8,ti),l("a",{class:"rk-button",href:i(U)("/guide/user")},"阅读使用者指南",8,ni)])])]))}}),ai=y(si,[["__scopeId","data-v-4e115be8"]]),ii={extends:Pe,Layout:()=>$e(Pe.Layout,null,{"home-features-after":()=>$e(ai)})};export{ii as R,fa as c,V as u};
@@ -0,0 +1,6 @@
1
+ import{_ as i,o as a,c as t,a3 as e}from"./chunks/framework.B9qR_F1m.js";const c=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md","lastUpdated":1792362729000}'),l={name:"guide/getting-started.md"};function p(h,s,n,d,k,o){return a(),t("div",null,[...s[0]||(s[0]=[e(`<h1 id="快速开始" tabindex="-1">快速开始 <a class="header-anchor" href="#快速开始" aria-label="Permalink to &quot;快速开始&quot;">​</a></h1><p>从安装到第一个需求,大约 15 分钟。安装只需在<strong>运行 Paseo daemon 的那台机器</strong>上做一次。</p><h2 id="_1-安装" tabindex="-1">1. 安装 <a class="header-anchor" href="#_1-安装" aria-label="Permalink to &quot;1. 安装&quot;">​</a></h2><div class="vp-code-group vp-adaptive-theme"><div class="tabs"><input type="radio" name="group-mbg3h" id="tab-w3xPkGw" checked><label data-title="任何系统(npx)" for="tab-w3xPkGw">任何系统(npx)</label><input type="radio" name="group-mbg3h" id="tab-fhMca03"><label data-title="公司内网(npm 镜像)" for="tab-fhMca03">公司内网(npm 镜像)</label><input type="radio" name="group-mbg3h" id="tab-SrGalrX"><label data-title="macOS / Linux" for="tab-SrGalrX">macOS / Linux</label><input type="radio" name="group-mbg3h" id="tab-pY4zThA"><label data-title="Windows PowerShell" for="tab-pY4zThA">Windows PowerShell</label><input type="radio" name="group-mbg3h" id="tab-so3f_8y"><label data-title="Windows Git Bash / WSL" for="tab-so3f_8y">Windows Git Bash / WSL</label></div><div class="blocks"><div class="language-sh vp-adaptive-theme active"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npx</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> paseo-req-kit@latest</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npx</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -y</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --registry=https://npm.example.internal/</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> paseo-req-kit@latest</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -fsSL</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://paseo-req-kit.vercel.app/install.sh</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> sh</span></span></code></pre></div><div class="language-powershell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">powershell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">irm https:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">//</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">paseo</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">req</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">kit.vercel.app</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">install.ps1 </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">|</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> iex</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -fsSL</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://paseo-req-kit.vercel.app/install.sh</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> sh</span></span></code></pre></div></div></div><p>几种写法做的事情完全一样(1.13 起,安装脚本只是先选好版本,再运行这个版本自带的 <code>install</code>)。只要能访问 npm 源就能装:公司内网只有 npm 镜像、打不开 GitHub 和这个站点时,用 <code>--registry</code> 写上镜像地址,它会保存为本机的 npm 源,以后 <code>req upgrade</code> 也从镜像取。</p><p>安装会依次:</p><ol><li>检查 Node.js 22+、npm 和 git;确定 npm 源;</li><li>安装 <code>paseo-req-kit</code>(npm 上有就从 npm 安装,否则用 GitHub Release 的安装包;npm 全局目录不可写时装到 <code>~/.req-kit/npm</code>,不需要 sudo);</li><li>检查 Paseo:没有 Paseo 时安装与 req-kit 匹配的 Paseo 命令行(<code>@getpaseo/cli</code>),开启它自带的网页界面并启动 daemon;已有 Paseo 时核对版本、开启网页界面(不会自动重启正在运行的 daemon)。之后浏览器打开 <code>http://localhost:6767/</code> 就是 Paseo;</li><li>运行 <code>req setup</code>:把这个版本装到 <code>~/tools/req-kit/versions/&lt;版本&gt;</code>,并为 Claude Code、Codex 等安装 <code>/req</code> 等 skill;</li><li>安装脚本会自动选好&quot;实现&quot;(builder)、&quot;评审&quot;(reviewer)和备用模型用的 agent(1.12 起;也可以运行 <code>req configure</code> 逐项选择,或在 Paseo 插件设置的&quot;模型&quot;页修改)——两个不同厂商的模型评审效果更好;</li><li>最后询问是否安装 req-kit 的 Paseo 插件:在 Paseo 的界面里看需求总览、进度和文档,并确认方案、停止、继续(会先征得同意再打开 Paseo 的插件总开关)。</li></ol><p>再次运行同一条命令即升级。装好后运行 <code>req docs</code> 可以在本机打开这份文档(和装的版本一致,不需要外网)。常用选项:</p><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npx</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> paseo-req-kit@beta</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # beta 版</span></span>
2
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npx</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> paseo-req-kit@1.13.0</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 指定版本(1.13 起)</span></span>
3
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npx</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -y</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> paseo-req-kit@latest</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --skip-paseo</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 不检查、不安装 Paseo</span></span>
4
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -fsSL</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://paseo-req-kit.vercel.app/install.sh</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --beta</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 包括 beta 版</span></span>
5
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -fsSL</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://paseo-req-kit.vercel.app/install.sh</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --version</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1.9.1</span></span>
6
+ <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -fsSL</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://paseo-req-kit.vercel.app/install.sh</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -s</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --skip-paseo</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 不检查、不安装 Paseo</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">不能用一键脚本时</p><p>也可以手工安装,或者在公司内网用离线安装包,见 <a href="./install">安装与升级</a>。</p></div><h2 id="_2-体检" tabindex="-1">2. 体检 <a class="header-anchor" href="#_2-体检" aria-label="Permalink to &quot;2. 体检&quot;">​</a></h2><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">req</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> doctor</span></span></code></pre></div><p>它检查安装、配置、Paseo daemon、agent 的模式(必须是免确认模式)和额度。全部是 ✓ 或只有 ⚠ 即可继续;✗ 的项按提示处理。</p><details class="details custom-block"><summary>Windows 上 <code>req</code> 命令被执行策略拦住?</summary><p>在 PowerShell 中改用 <code>req.cmd doctor</code>,或在 cmd 窗口中运行。</p></details><h2 id="_3-接入项目-每个项目一次" tabindex="-1">3. 接入项目(每个项目一次) <a class="header-anchor" href="#_3-接入项目-每个项目一次" aria-label="Permalink to &quot;3. 接入项目(每个项目一次)&quot;">​</a></h2><p>在 Paseo 中打开项目主目录(最好在主分支上),新开对话,输入:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/req-setup</span></span></code></pre></div><p>agent 会读项目、只问读不出来的事、把安装依赖/测试/启动服务的命令实际跑一遍,然后生成并请你确认这些文件:</p><table tabindex="0"><thead><tr><th>文件</th><th>作用</th></tr></thead><tbody><tr><td><code>.requirement-pipeline/project-notes.md</code></td><td>项目约定:包管理工具、不能改的目录、提交格式</td></tr><tr><td><code>.requirement-pipeline/verify.md</code></td><td>验证方法:实际跑通的安装、测试、启动命令</td></tr><tr><td><code>paseo.json</code></td><td>新建工作区时自动准备环境;服务由 Paseo 托管,每个工作区独立端口</td></tr></tbody></table><h2 id="_4-提第一个需求" tabindex="-1">4. 提第一个需求 <a class="header-anchor" href="#_4-提第一个需求" aria-label="Permalink to &quot;4. 提第一个需求&quot;">​</a></h2><p>在项目的 Paseo 对话中输入 <code>/req</code> 和一句话:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/req 登录页增加短信验证码登录</span></span></code></pre></div><p>接下来:</p><ol><li>AI 复述理解,一次问一个问题;拿不准时说&quot;你定&quot;。</li><li>标准档会请另一个模型独立审阅需求说明,把发现的问题逐个问你。</li><li>确认需求说明后,选择现在开始或预约时间(例如今晚 10 点)。</li><li>开发在后台进行,每一步都出现在对话的子 agent 列表中;你会收到几句进展。</li><li>完成后收到结论和报告,说&quot;我要验收&quot;,按验收标准逐条核对。</li></ol><div class="tip custom-block"><p class="custom-block-title">从一个小需求开始</p><p>第一次建议用一个范围很小的改动(例如改一段文案),走快速档,十几分钟就能看到完整的流程。</p></div><h2 id="下一步" tabindex="-1">下一步 <a class="header-anchor" href="#下一步" aria-label="Permalink to &quot;下一步&quot;">​</a></h2><ul><li><a href="./user">使用者指南</a>:过程中可以说什么、会收到哪些通知、怎么验收。</li><li><a href="./how-it-works">工作原理</a>:流水线的每一步做什么、产物在哪里。</li><li><a href="./project">项目定制与运行规则</a>:档位、评审小组、分阶段执行、通知等配置。</li></ul>`,27)])])}const g=i(l,[["render",p]]);export{c as __pageData,g as default};
@@ -0,0 +1 @@
1
+ import{_ as i,o as a,c as t,a3 as e}from"./chunks/framework.B9qR_F1m.js";const c=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md","lastUpdated":1792362729000}'),l={name:"guide/getting-started.md"};function p(h,s,n,d,k,o){return a(),t("div",null,[...s[0]||(s[0]=[e("",27)])])}const g=i(l,[["render",p]]);export{c as __pageData,g as default};
@@ -0,0 +1,25 @@
1
+ import{_ as a,o as s,c as e,a3 as n}from"./chunks/framework.B9qR_F1m.js";const g=JSON.parse('{"title":"工作原理","description":"","frontmatter":{},"headers":[],"relativePath":"guide/how-it-works.md","filePath":"guide/how-it-works.md","lastUpdated":1792020458000}'),d={name:"guide/how-it-works.md"};function o(r,t,i,p,l,c){return s(),e("div",null,[...t[0]||(t[0]=[n(`<h1 id="工作原理" tabindex="-1">工作原理 <a class="header-anchor" href="#工作原理" aria-label="Permalink to &quot;工作原理&quot;">​</a></h1><p>req-kit 由三部分组成:对话中的 <strong>skill</strong>(<code>/req</code> 等入口和方法)、后台的<strong>流水线引擎</strong>(驱动第 3–11 步),以及两者共用的<strong>原则和文件约定</strong>。</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>Paseo 对话(/req) 流水线引擎(后台进程)</span></span>
2
+ <span class="line"><span> 访谈 → spec.md → 独立审阅 → 用户确认</span></span>
3
+ <span class="line"><span> 执行启动命令 ─────────────────────────────────► 检查条件,后台启动,立即返回</span></span>
4
+ <span class="line"><span> 研发:方案设计 → 方案审核 ⇄ 修订 → 实现</span></span>
5
+ <span class="line"><span> → 代码评审 ⇄ 修复 → 提测说明</span></span>
6
+ <span class="line"><span> ┄┄ 闸口(分阶段时停在这里,等待提测)┄┄</span></span>
7
+ <span class="line"><span> 验证:服务启动 → 功能验证 → 缺陷修复 ⇄ 复验</span></span>
8
+ <span class="line"><span> → 完成报告</span></span>
9
+ <span class="line"><span> ◄── 需要业务决定:问题 + 继续命令 ─────────────── (暂停,还没写代码)</span></span>
10
+ <span class="line"><span> ◄── 进展 / 等待批准 / 中断原因 ──────────────────</span></span>
11
+ <span class="line"><span> ◄── 结论 + 摘要 + report.md ────────────────────</span></span></code></pre></div><h2 id="步骤" tabindex="-1">步骤 <a class="header-anchor" href="#步骤" aria-label="Permalink to &quot;步骤&quot;">​</a></h2><p>每个步骤是一个<strong>新的</strong> Paseo agent,作为子 agent 挂在发起的对话下,名字形如 <code>[20261012-sms-login] 6-代码评审 第2轮</code>。步骤之间不靠对话记忆,只靠功能目录里的文件交接。</p><table tabindex="0"><thead><tr><th>步骤</th><th>执行者</th><th>产物</th><th>什么时候执行</th></tr></thead><tbody><tr><td>方案设计</td><td>builder</td><td><code>design.md</code></td><td>总是;开启方案提案时先由几个 agent 各提一份</td></tr><tr><td>方案审核 ⇄ 修订</td><td>reviewer ⇄ builder</td><td><code>design-review.md</code></td><td>标准档最多 2 轮;发现只有需求方能回答的问题时暂停并发回对话</td></tr><tr><td>方案确认</td><td>你</td><td><code>preview.md</code>、<code>prototype/</code></td><td>标准档的界面改动:写代码之前请你确认&quot;做完后会看到什么&quot;</td></tr><tr><td>代码实现</td><td>builder</td><td>代码、<code>implementation.md</code></td><td>适合时用 TDD;标准档方案分了几片就逐片实现,每片一个新的 agent</td></tr><tr><td>代码评审 ⇄ 修复</td><td>reviewer ⇄ builder</td><td><code>code-review.md</code></td><td>标准档最多 3 轮;第一轮由规格评审和规范评审并行,再汇总(开启评审小组时由小组成员并行)</td></tr><tr><td>提测说明</td><td>builder</td><td><code>handoff.md</code></td><td>总是;研发阶段的最后一步</td></tr><tr><td>服务启动</td><td>builder</td><td><code>service-start.md</code></td><td>项目有常驻服务、档位开启时</td></tr><tr><td>功能验证</td><td>reviewer</td><td><code>verification.md</code></td><td>总是(只做研发时除外);按验收标准逐条给出证据</td></tr><tr><td>缺陷修复 ⇄ 复验</td><td>builder ⇄ reviewer</td><td><code>verification.md</code></td><td>发现缺陷时,最多 3 轮</td></tr><tr><td>完成报告</td><td>builder</td><td><code>report.md</code></td><td>只要没有暂停或中断就执行</td></tr></tbody></table><p>builder 和 reviewer 是两个角色,在配置中各选一个 agent,建议用不同的模型。</p><h2 id="按需求类型走不同的做法" tabindex="-1">按需求类型走不同的做法 <a class="header-anchor" href="#按需求类型走不同的做法" aria-label="Permalink to &quot;按需求类型走不同的做法&quot;">​</a></h2><p>需求说明的&quot;类型&quot;一行决定做法。步骤还是这些步骤,但每一步要多做或少做的事不同:</p><table tabindex="0"><thead><tr><th>类型</th><th>做法</th></tr></thead><tbody><tr><td>新需求、小改动</td><td>上表的流程</td></tr><tr><td>缺陷</td><td>方案设计改为<strong>复现与定位</strong>:先提交一个修复前失败的复现测试,找到根因再修;复现不了就停下来,把需要补充的信息发回对话</td></tr><tr><td>重构</td><td>先用特征测试<strong>锁住现有行为</strong>,再小步改动、每步全绿;评审首先看行为有没有变</td></tr><tr><td>评估</td><td><strong>只读</strong>:调研评估 → 评估审阅 ⇄ 修订 → 评估报告,不写代码;报告附需求草稿,可以接着提新需求</td></tr></tbody></table><h2 id="质量门" tabindex="-1">质量门 <a class="header-anchor" href="#质量门" aria-label="Permalink to &quot;质量门&quot;">​</a></h2><p>项目配置了检查命令(lint、类型检查、单元测试、构建,通常由 <code>/req-setup</code> 写入)时,流水线<strong>自己运行</strong>它们,不只听 agent 说&quot;测试通过了&quot;:</p><ol><li>每次尝试开始时先运行一遍,记下哪些检查原本就失败(基线)。</li><li>代码实现(每一片)、评审问题修复、缺陷修复之后再运行。改动前通过、现在失败的,把输出发回那一步的 agent 修复,最多 2 次。</li><li>仍然失败就照常往下走,交给代码评审和报告,报告的结论最高为&quot;有遗留问题&quot;。</li></ol><p>代码评审前,流水线还会比对实际改动的文件和方案列出的文件,清单之外的交给评审逐一说明(范围检查)。多模块的项目,检查可以只在对应的模块有改动时运行;其他仓库(例如后端)可以登记为关联仓库,供各步骤只读参考。详见 <a href="./project">项目定制与运行规则</a>。</p><h2 id="让结果更符合预期" tabindex="-1">让结果更符合预期 <a class="header-anchor" href="#让结果更符合预期" aria-label="Permalink to &quot;让结果更符合预期&quot;">​</a></h2><p>结果不符合预期,多半不是代码写错,而是&quot;做成什么样&quot;的理解不同,直到验收才发现。req-kit 让分歧更早暴露:</p><ul><li><strong>验收标准带例子</strong>:每条验收标准都有具体的输入和期望输出,测试直接用它们作为期望值。验收测试先单独提交,之后被改过的要由评审确认有依据。</li><li><strong>开工前确认</strong>:界面改动在写代码之前停下来,请你看 <code>preview.md</code> 和静态原型,确认后再开工。</li><li><strong>术语表</strong>:<code>GLOSSARY.md</code> 把你的说法和代码里的名字对上,各步骤按它命名。</li><li><strong>评审分两个方向</strong>:规格评审看&quot;做的是不是要做的事&quot;,规范评审看&quot;做得是否符合项目的标准&quot;。</li><li><strong>反复出现的问题变成规则</strong>:完成报告把一条规则就能挡住的问题记进 <code>lessons.tsv</code>,几个需求里反复出现的,需求总览会提示把它变成 lint 规则或测试。</li></ul><h2 id="联合需求-前端和后端一起改" tabindex="-1">联合需求:前端和后端一起改 <a class="header-anchor" href="#联合需求-前端和后端一起改" aria-label="Permalink to &quot;联合需求:前端和后端一起改&quot;">​</a></h2><p>需求说明写了&quot;联合开发:后端&quot;时,主仓库(发起需求的仓库)负责方案、接口约定、提测、验证和报告;后端由流水线新建一个工作区,和主仓库<strong>同时</strong>实现、评审、修复,各用各的检查命令和项目说明:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>主仓库 方案设计 → 方案审核(含接口约定 contract.md)→ 实现 → 评审 ⇄ 修复 ┐</span></span>
12
+ <span class="line"><span> ├→ 提测说明 → 一起验证 → 报告</span></span>
13
+ <span class="line"><span>后端(新工作区) 需求说明、方案、接口约定同步过来 → 实现 → 评审 ⇄ 修复 ┘</span></span></code></pre></div><p>验证时两边的服务都由 Paseo 启动;每个缺陷发回它所在的仓库修复。每个仓库各有自己的分支,合并顺序写在报告里,由人来合并。</p><h2 id="三条基本规则" tabindex="-1">三条基本规则 <a class="header-anchor" href="#三条基本规则" aria-label="Permalink to &quot;三条基本规则&quot;">​</a></h2><p><strong>结论只看结果文件。</strong> 每一步最后写一个 JSON 结果文件(例如 <code>{&quot;verdict&quot;: &quot;changes_required&quot;}</code>),流水线据此决定下一步,不解析 agent 的回复文字。缺失或格式不对时,在同一个会话里提醒补写。</p><p><strong>做事的和检查的分开。</strong> 审核、评审、验证由 reviewer 完成;验证步骤只登记缺陷、不改产品代码。</p><p><strong>如实。</strong> 报告从严判定:&quot;已完成,可以验收&quot;要求所有验收标准都有通过的证据;没验证的就写&quot;未验证&quot;。</p><h2 id="功能目录" tabindex="-1">功能目录 <a class="header-anchor" href="#功能目录" aria-label="Permalink to &quot;功能目录&quot;">​</a></h2><p>一个需求的所有产物都在 <code>docs/features/&lt;日期&gt;-&lt;英文短名&gt;/</code> 中,随代码一起提交:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>docs/features/20261012-sms-login/</span></span>
14
+ <span class="line"><span>├── spec.md 需求说明(你确认的版本)</span></span>
15
+ <span class="line"><span>├── alignment.md 访谈记录</span></span>
16
+ <span class="line"><span>├── design.md 方案(缺陷另有 diagnosis.md,评估写 assessment.md)</span></span>
17
+ <span class="line"><span>├── design-review.md 方案审核</span></span>
18
+ <span class="line"><span>├── implementation.md 实现记录</span></span>
19
+ <span class="line"><span>├── code-review.md 代码评审与处理记录</span></span>
20
+ <span class="line"><span>├── handoff.md 提测说明</span></span>
21
+ <span class="line"><span>├── verification.md 功能验证与复验</span></span>
22
+ <span class="line"><span>├── report.md 完成报告</span></span>
23
+ <span class="line"><span>├── decisions.tsv 过程中的决定(需要你确认的会列进报告)</span></span>
24
+ <span class="line"><span>├── progress.md 每一步的时间线</span></span>
25
+ <span class="line"><span>└── .pipeline/ 运行状态、结果文件、日志(不提交)</span></span></code></pre></div><h2 id="出了问题怎么办" tabindex="-1">出了问题怎么办 <a class="header-anchor" href="#出了问题怎么办" aria-label="Permalink to &quot;出了问题怎么办&quot;">​</a></h2><ul><li><strong>临时错误</strong>(限流、网络中断):自动等待重试;仍然失败时中断,并预约半小时后在对话里自动继续。</li><li><strong>需要你决定</strong>:方案审核发现只有需求方能回答的问题,或者缺陷复现不了,流水线在写代码之前暂停,问题发回对话。回答并更新需求说明后继续,从方案设计开始增量处理。</li><li><strong>你改了需求</strong>:继续时从方案设计开始,在已有方案和代码的基础上只处理变化的部分。</li><li><strong>进程意外退出</strong>:执行继续命令即可,已完成的步骤沿用结果。</li></ul><p>更多细节见 <a href="./project">项目定制与运行规则</a> 和 <a href="/reference/adr/">设计决定</a>。</p>`,31)])])}const u=a(d,[["render",o]]);export{g as __pageData,u as default};
@@ -0,0 +1 @@
1
+ import{_ as a,o as s,c as e,a3 as n}from"./chunks/framework.B9qR_F1m.js";const g=JSON.parse('{"title":"工作原理","description":"","frontmatter":{},"headers":[],"relativePath":"guide/how-it-works.md","filePath":"guide/how-it-works.md","lastUpdated":1792020458000}'),d={name:"guide/how-it-works.md"};function o(r,t,i,p,l,c){return s(),e("div",null,[...t[0]||(t[0]=[n("",31)])])}const u=a(d,[["render",o]]);export{g as __pageData,u as default};
@@ -0,0 +1 @@
1
+ import{_ as e,o as a,c as d,a3 as r}from"./chunks/framework.B9qR_F1m.js";const q=JSON.parse('{"title":"req-kit 是什么","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1791966569000}'),o={name:"guide/index.md"};function i(l,t,n,s,h,u){return a(),d("div",null,[...t[0]||(t[0]=[r('<h1 id="req-kit-是什么" tabindex="-1">req-kit 是什么 <a class="header-anchor" href="#req-kit-是什么" aria-label="Permalink to &quot;req-kit 是什么&quot;">​</a></h1><p>req-kit 是运行在 <a href="https://paseo.sh" target="_blank" rel="noreferrer">Paseo</a> 上的一套<strong>需求开发体系</strong>。它帮助非专职开发、但有一定技术背景的同事——测试、产品经理、项目经理——把一个需求从&quot;我想要……&quot;推进到&quot;可以验收&quot;:</p><ul><li>你在 Paseo 的对话里输入 <code>/req</code> 和一句话,AI 用访谈的方式和你把需求谈清楚,写成一份需求说明(<code>spec.md</code>)请你确认。</li><li>确认后,一组 AI agent 在后台依次完成方案设计、方案审核、代码实现、代码评审、服务启动、功能验证、缺陷修复和完成报告。</li><li>进展、需要你决定的问题和最终结论都发回同一个对话;你再按验收标准逐条验收。</li></ul><p>整个过程只在本地提交代码,合并和上线仍然由人决定。</p><h2 id="为什么需要它" tabindex="-1">为什么需要它 <a class="header-anchor" href="#为什么需要它" aria-label="Permalink to &quot;为什么需要它&quot;">​</a></h2><p>直接让一个编码 agent &quot;把这个需求做了&quot;,常见的问题是:</p><table tabindex="0"><thead><tr><th>问题</th><th>req-kit 的做法</th></tr></thead><tbody><tr><td>需求没谈清楚就开工,做出来不是想要的</td><td>先访谈,一次一个问题,给选项和推荐;确认前另一个模型独立审阅需求说明</td></tr><tr><td>自己写、自己检查,问题被忽略</td><td>做事的和检查的是不同的 agent,可以配置不同的模型;评审小组可以并行审核</td></tr><tr><td>说&quot;做完了&quot;,其实没验证</td><td>验证由独立的 agent 按验收标准逐条进行,结论必须有证据;报告从严判定</td></tr><tr><td>过程不可见,出了问题无从查起</td><td>每一步是一个挂在你对话下的子 agent,产物都是功能目录里的文件</td></tr><tr><td>一跑几个小时,中途断了要重来</td><td>中断后从断点继续;需求变了只处理变化的部分;临时错误自动重试、自动继续</td></tr></tbody></table><h2 id="适合谁" tabindex="-1">适合谁 <a class="header-anchor" href="#适合谁" aria-label="Permalink to &quot;适合谁&quot;">​</a></h2><ul><li><strong>测试同事</strong>:把测试中发现的小需求、改进自己推进;也可以作为&quot;测试阶段&quot;的接手人,按提测说明在测试环境中验证。</li><li><strong>产品经理</strong>:把需求讲清楚,拿到可以试用的结果和一份讲人话的报告。</li><li><strong>项目经理</strong>:用需求总览(<code>req digest</code>)看所有需求的状态,接入企业 IM 收通知。</li><li><strong>开发同事</strong>:负责安装、项目接入(<code>/req-setup</code>)和代码合并;也可以直接用它推进小需求。</li></ul><h2 id="它不做什么" tabindex="-1">它不做什么 <a class="header-anchor" href="#它不做什么" aria-label="Permalink to &quot;它不做什么&quot;">​</a></h2><ul><li>不合并、不推送、不上线,不连接生产环境,不使用生产凭据。</li><li>不替代代码审查:报告的附录写明了分支、提交和改动,由开发同事审阅后合并。</li><li>不追求通用的编码提效,见 <a href="/reference/scope">范围与取舍</a>。</li></ul><h2 id="支持的环境" tabindex="-1">支持的环境 <a class="header-anchor" href="#支持的环境" aria-label="Permalink to &quot;支持的环境&quot;">​</a></h2><table tabindex="0"><thead><tr><th>项目</th><th>要求</th></tr></thead><tbody><tr><td>Paseo</td><td>0.11(daemon 在运行;网页版或桌面版都可以)</td></tr><tr><td>Node.js</td><td>22 或更新</td></tr><tr><td>系统</td><td>macOS、Linux、Windows</td></tr><tr><td>agent</td><td>Claude Code、Codex、OpenCode、Pi 中至少一种,已在 Paseo 中登录</td></tr></tbody></table><p>下一步:<a href="./getting-started">快速开始</a>。</p>',14)])])}const p=e(o,[["render",i]]);export{q as __pageData,p as default};
@@ -0,0 +1 @@
1
+ import{_ as e,o as a,c as d,a3 as r}from"./chunks/framework.B9qR_F1m.js";const q=JSON.parse('{"title":"req-kit 是什么","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1791966569000}'),o={name:"guide/index.md"};function i(l,t,n,s,h,u){return a(),d("div",null,[...t[0]||(t[0]=[r("",14)])])}const p=e(o,[["render",i]]);export{q as __pageData,p as default};