paseo-req-kit 1.15.0-beta.1 → 1.15.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/engine/src/review-assets/rk.css +2 -2
- package/package.json +1 -1
- package/paseo-plugin/client/detail.tsx +31 -11
- package/paseo-plugin/client/format.ts +56 -0
- package/paseo-plugin/client/inbox.tsx +26 -20
- package/paseo-plugin/client/markdown.tsx +2 -1
- package/paseo-plugin/client/overview.tsx +21 -11
- package/paseo-plugin/client/review.tsx +3 -3
- package/paseo-plugin/client/row.tsx +38 -15
- package/paseo-plugin/client/stats.tsx +5 -4
- package/paseo-plugin/client/ui.tsx +196 -29
- package/paseo-plugin/package.json +1 -1
- package/paseo-plugin/shared/rk-colors.ts +35 -0
- package/site-dist/404.html +5 -5
- package/site-dist/assets/{app.D5s_yGHZ.js → app.Ny0BZHeG.js} +1 -1
- package/site-dist/assets/changelog.md.CUwudFS5.js +1 -0
- package/site-dist/assets/{changelog.md.RJaBnmnw.lean.js → changelog.md.CUwudFS5.lean.js} +1 -1
- package/site-dist/assets/chunks/@localSearchIndexroot.BmFA3hqY.js +1 -0
- package/site-dist/assets/chunks/{VPLocalSearchBox.B4CyDsTr.js → VPLocalSearchBox.BCWGSI0L.js} +1 -1
- package/site-dist/assets/chunks/{framework.B9qR_F1m.js → framework.BetZR81g.js} +1 -1
- package/site-dist/assets/chunks/theme.BeEUWcJI.js +2 -0
- package/site-dist/assets/{guide_getting-started.md.wFOkpMSx.js → guide_getting-started.md.DBJ0aMgy.js} +1 -1
- package/site-dist/assets/{guide_getting-started.md.wFOkpMSx.lean.js → guide_getting-started.md.DBJ0aMgy.lean.js} +1 -1
- package/site-dist/assets/{guide_how-it-works.md.D-kQsF1t.js → guide_how-it-works.md.Rn-g0Um8.js} +1 -1
- package/site-dist/assets/{guide_how-it-works.md.D-kQsF1t.lean.js → guide_how-it-works.md.Rn-g0Um8.lean.js} +1 -1
- package/site-dist/assets/{guide_index.md.CLnGCmGW.js → guide_index.md.BIF6VPBE.js} +1 -1
- package/site-dist/assets/{guide_index.md.CLnGCmGW.lean.js → guide_index.md.BIF6VPBE.lean.js} +1 -1
- package/site-dist/assets/{guide_install.md.DkCyZsOU.js → guide_install.md.kIsj5oWc.js} +1 -1
- package/site-dist/assets/{guide_install.md.DkCyZsOU.lean.js → guide_install.md.kIsj5oWc.lean.js} +1 -1
- package/site-dist/assets/{guide_maintainer.md.mFZprBj1.js → guide_maintainer.md.SWALpGR5.js} +1 -1
- package/site-dist/assets/{guide_maintainer.md.mFZprBj1.lean.js → guide_maintainer.md.SWALpGR5.lean.js} +1 -1
- package/site-dist/assets/{guide_phases.md.BpGAb1re.js → guide_phases.md.Bnd9FQ27.js} +1 -1
- package/site-dist/assets/{guide_phases.md.BpGAb1re.lean.js → guide_phases.md.Bnd9FQ27.lean.js} +1 -1
- package/site-dist/assets/{guide_project.md.DIjDRoAq.js → guide_project.md.CzS92KTI.js} +1 -1
- package/site-dist/assets/{guide_project.md.DIjDRoAq.lean.js → guide_project.md.CzS92KTI.lean.js} +1 -1
- package/site-dist/assets/{guide_user.md.UV0WxdJa.js → guide_user.md.REc1nK8f.js} +1 -1
- package/site-dist/assets/{guide_user.md.UV0WxdJa.lean.js → guide_user.md.REc1nK8f.lean.js} +1 -1
- package/site-dist/assets/index.md.CpaGRB2c.js +1 -0
- package/site-dist/assets/index.md.CpaGRB2c.lean.js +1 -0
- package/site-dist/assets/{reference_adr_0001-step-agents-under-origin-chat.md.RtRTq7oi.js → reference_adr_0001-step-agents-under-origin-chat.md.CPq0ZVSs.js} +1 -1
- package/site-dist/assets/{reference_adr_0001-step-agents-under-origin-chat.md.RtRTq7oi.lean.js → reference_adr_0001-step-agents-under-origin-chat.md.CPq0ZVSs.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0002-no-directory-switch-in-chat.md.BxtN-Aa2.js → reference_adr_0002-no-directory-switch-in-chat.md.BZD1j8xZ.js} +1 -1
- package/site-dist/assets/{reference_adr_0002-no-directory-switch-in-chat.md.BxtN-Aa2.lean.js → reference_adr_0002-no-directory-switch-in-chat.md.BZD1j8xZ.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0003-script-engine-not-hub.md.66EgZtqx.js → reference_adr_0003-script-engine-not-hub.md.Bi4uZZaE.js} +1 -1
- package/site-dist/assets/{reference_adr_0003-script-engine-not-hub.md.66EgZtqx.lean.js → reference_adr_0003-script-engine-not-hub.md.Bi4uZZaE.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0004-result-files.md.DbqcCozI.js → reference_adr_0004-result-files.md.CNQMSs4R.js} +1 -1
- package/site-dist/assets/{reference_adr_0004-result-files.md.DbqcCozI.lean.js → reference_adr_0004-result-files.md.CNQMSs4R.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0005-no-default-branch-local-commits-only.md.CkImA4s6.js → reference_adr_0005-no-default-branch-local-commits-only.md.DeXnMAyg.js} +1 -1
- package/site-dist/assets/{reference_adr_0005-no-default-branch-local-commits-only.md.CkImA4s6.lean.js → reference_adr_0005-no-default-branch-local-commits-only.md.DeXnMAyg.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0006-skill-install-targets.md.CwY8YepV.js → reference_adr_0006-skill-install-targets.md.CwqvB8NW.js} +1 -1
- package/site-dist/assets/{reference_adr_0006-skill-install-targets.md.CwY8YepV.lean.js → reference_adr_0006-skill-install-targets.md.CwqvB8NW.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0007-own-interview-skill.md.CryhxRyG.js → reference_adr_0007-own-interview-skill.md.HlLp78db.js} +1 -1
- package/site-dist/assets/{reference_adr_0007-own-interview-skill.md.CryhxRyG.lean.js → reference_adr_0007-own-interview-skill.md.HlLp78db.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0008-entries-do-not-call-entries.md.DsRWAgeA.js → reference_adr_0008-entries-do-not-call-entries.md.D2VH2uQV.js} +1 -1
- package/site-dist/assets/{reference_adr_0008-entries-do-not-call-entries.md.DsRWAgeA.lean.js → reference_adr_0008-entries-do-not-call-entries.md.D2VH2uQV.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0009-versioned-install-layout.md.CSg1VqlW.js → reference_adr_0009-versioned-install-layout.md.D9g3dWr-.js} +1 -1
- package/site-dist/assets/{reference_adr_0009-versioned-install-layout.md.CSg1VqlW.lean.js → reference_adr_0009-versioned-install-layout.md.D9g3dWr-.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0010-generated-feature-overview.md.D8F3MK-h.js → reference_adr_0010-generated-feature-overview.md.CHOwcV4c.js} +1 -1
- package/site-dist/assets/{reference_adr_0010-generated-feature-overview.md.D8F3MK-h.lean.js → reference_adr_0010-generated-feature-overview.md.CHOwcV4c.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0011-resume-after-completion.md.BCrZrKjf.js → reference_adr_0011-resume-after-completion.md.CqdSPi49.js} +1 -1
- package/site-dist/assets/{reference_adr_0011-resume-after-completion.md.BCrZrKjf.lean.js → reference_adr_0011-resume-after-completion.md.CqdSPi49.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0012-review-panel.md.k9rrHFFc.js → reference_adr_0012-review-panel.md.d4wmLrNF.js} +1 -1
- package/site-dist/assets/{reference_adr_0012-review-panel.md.k9rrHFFc.lean.js → reference_adr_0012-review-panel.md.d4wmLrNF.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0013-no-release-tooling.md.BQeJ8dEI.js → reference_adr_0013-no-release-tooling.md.BOROmwvq.js} +1 -1
- package/site-dist/assets/{reference_adr_0013-no-release-tooling.md.BQeJ8dEI.lean.js → reference_adr_0013-no-release-tooling.md.BOROmwvq.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0014-notifier-slot.md.C23QR1xO.js → reference_adr_0014-notifier-slot.md.BAqt1Xj1.js} +1 -1
- package/site-dist/assets/{reference_adr_0014-notifier-slot.md.C23QR1xO.lean.js → reference_adr_0014-notifier-slot.md.BAqt1Xj1.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0015-incremental-continue.md.Buy7wwO8.js → reference_adr_0015-incremental-continue.md.BiUdpeq5.js} +1 -1
- package/site-dist/assets/{reference_adr_0015-incremental-continue.md.Buy7wwO8.lean.js → reference_adr_0015-incremental-continue.md.BiUdpeq5.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0016-upgrade-from-tags.md.qfIW-tqJ.js → reference_adr_0016-upgrade-from-tags.md.D48PfEFP.js} +1 -1
- package/site-dist/assets/{reference_adr_0016-upgrade-from-tags.md.qfIW-tqJ.lean.js → reference_adr_0016-upgrade-from-tags.md.D48PfEFP.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0017-use-paseo-capabilities.md.CjcGli87.js → reference_adr_0017-use-paseo-capabilities.md.CAMkamzJ.js} +1 -1
- package/site-dist/assets/{reference_adr_0017-use-paseo-capabilities.md.CjcGli87.lean.js → reference_adr_0017-use-paseo-capabilities.md.CAMkamzJ.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0018-own-worktree-option.md.fVDpgGSE.js → reference_adr_0018-own-worktree-option.md.DgkWjYL-.js} +1 -1
- package/site-dist/assets/{reference_adr_0018-own-worktree-option.md.fVDpgGSE.lean.js → reference_adr_0018-own-worktree-option.md.DgkWjYL-.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0019-parallel-orchestration.md.DrfrV0To.js → reference_adr_0019-parallel-orchestration.md.B9xqQidw.js} +1 -1
- package/site-dist/assets/{reference_adr_0019-parallel-orchestration.md.DrfrV0To.lean.js → reference_adr_0019-parallel-orchestration.md.B9xqQidw.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0020-scheduling-through-the-chat.md.BqSemGFG.js → reference_adr_0020-scheduling-through-the-chat.md.Dh81be7G.js} +1 -1
- package/site-dist/assets/{reference_adr_0020-scheduling-through-the-chat.md.BqSemGFG.lean.js → reference_adr_0020-scheduling-through-the-chat.md.Dh81be7G.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0021-npm-version-manager.md.CU3PG6y5.js → reference_adr_0021-npm-version-manager.md.Pz4vZbkE.js} +1 -1
- package/site-dist/assets/{reference_adr_0021-npm-version-manager.md.CU3PG6y5.lean.js → reference_adr_0021-npm-version-manager.md.Pz4vZbkE.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0022-develop-and-verify-phases.md.C6fQDLq4.js → reference_adr_0022-develop-and-verify-phases.md.35MxNOuj.js} +1 -1
- package/site-dist/assets/{reference_adr_0022-develop-and-verify-phases.md.C6fQDLq4.lean.js → reference_adr_0022-develop-and-verify-phases.md.35MxNOuj.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0023-types-gate-slices.md.D2E6yyYQ.js → reference_adr_0023-types-gate-slices.md.Bjufr5EK.js} +1 -1
- package/site-dist/assets/{reference_adr_0023-types-gate-slices.md.D2E6yyYQ.lean.js → reference_adr_0023-types-gate-slices.md.Bjufr5EK.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0024-confirm-early-review-axes.md.FmK_ke0x.js → reference_adr_0024-confirm-early-review-axes.md.BRxVXJa4.js} +1 -1
- package/site-dist/assets/{reference_adr_0024-confirm-early-review-axes.md.FmK_ke0x.lean.js → reference_adr_0024-confirm-early-review-axes.md.BRxVXJa4.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0025-joint-requirements.md.ChoKvMUx.js → reference_adr_0025-joint-requirements.md.ClCFyIiN.js} +1 -1
- package/site-dist/assets/{reference_adr_0025-joint-requirements.md.ChoKvMUx.lean.js → reference_adr_0025-joint-requirements.md.ClCFyIiN.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0026-machine-records-and-api.md.veybjBPq.js → reference_adr_0026-machine-records-and-api.md.Bv1k_WjT.js} +1 -1
- package/site-dist/assets/{reference_adr_0026-machine-records-and-api.md.veybjBPq.lean.js → reference_adr_0026-machine-records-and-api.md.Bv1k_WjT.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0027-paseo-plugin.md.BMX33ZNU.js → reference_adr_0027-paseo-plugin.md.CcpaKksi.js} +1 -1
- package/site-dist/assets/{reference_adr_0027-paseo-plugin.md.BMX33ZNU.lean.js → reference_adr_0027-paseo-plugin.md.CcpaKksi.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0028-external-integrations.md.DtdMe8RK.js → reference_adr_0028-external-integrations.md.CrGqXJux.js} +1 -1
- package/site-dist/assets/{reference_adr_0028-external-integrations.md.DtdMe8RK.lean.js → reference_adr_0028-external-integrations.md.CrGqXJux.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0029-requirements-from-cards.md.BHd1SQPe.js → reference_adr_0029-requirements-from-cards.md.BUVah9hV.js} +1 -1
- package/site-dist/assets/{reference_adr_0029-requirements-from-cards.md.BHd1SQPe.lean.js → reference_adr_0029-requirements-from-cards.md.BUVah9hV.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0030-card-intake-process.md.kLc-DG9_.js → reference_adr_0030-card-intake-process.md.DKMkIFXw.js} +1 -1
- package/site-dist/assets/{reference_adr_0030-card-intake-process.md.kLc-DG9_.lean.js → reference_adr_0030-card-intake-process.md.DKMkIFXw.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0031-fewer-interventions.md.BDnQcz8g.js → reference_adr_0031-fewer-interventions.md.C8e2jpbC.js} +1 -1
- package/site-dist/assets/{reference_adr_0031-fewer-interventions.md.BDnQcz8g.lean.js → reference_adr_0031-fewer-interventions.md.C8e2jpbC.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0032-npm-only-install.md.C-3L1FkX.js → reference_adr_0032-npm-only-install.md.5tFsGLKz.js} +1 -1
- package/site-dist/assets/{reference_adr_0032-npm-only-install.md.C-3L1FkX.lean.js → reference_adr_0032-npm-only-install.md.5tFsGLKz.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_0033-prototype-review-and-ui-check.md.hFcQzmaa.js → reference_adr_0033-prototype-review-and-ui-check.md.CW5Soqvp.js} +1 -1
- package/site-dist/assets/{reference_adr_0033-prototype-review-and-ui-check.md.hFcQzmaa.lean.js → reference_adr_0033-prototype-review-and-ui-check.md.CW5Soqvp.lean.js} +1 -1
- package/site-dist/assets/{reference_adr_index.md.BYF-Ofor.js → reference_adr_index.md.DgUVrHoO.js} +1 -1
- package/site-dist/assets/{reference_adr_index.md.BYF-Ofor.lean.js → reference_adr_index.md.DgUVrHoO.lean.js} +1 -1
- package/site-dist/assets/{reference_commands.md.ClKbS-t8.js → reference_commands.md.BAQ8FugP.js} +1 -1
- package/site-dist/assets/{reference_commands.md.ClKbS-t8.lean.js → reference_commands.md.BAQ8FugP.lean.js} +1 -1
- package/site-dist/assets/{reference_config.md.CRe27LaA.js → reference_config.md.DoQUxHQ2.js} +1 -1
- package/site-dist/assets/{reference_config.md.CRe27LaA.lean.js → reference_config.md.DoQUxHQ2.lean.js} +1 -1
- package/site-dist/assets/{reference_contracts_cli-json.md.CCvKLasM.js → reference_contracts_cli-json.md.nRuTayON.js} +1 -1
- package/site-dist/assets/{reference_contracts_cli-json.md.CCvKLasM.lean.js → reference_contracts_cli-json.md.nRuTayON.lean.js} +1 -1
- package/site-dist/assets/{reference_contracts_feature-files.md.DSiA8OEH.js → reference_contracts_feature-files.md.CgiSHFpq.js} +1 -1
- package/site-dist/assets/{reference_contracts_feature-files.md.DSiA8OEH.lean.js → reference_contracts_feature-files.md.CgiSHFpq.lean.js} +1 -1
- package/site-dist/assets/{reference_contracts_index.md.Bkznz4px.js → reference_contracts_index.md.3h253qSo.js} +1 -1
- package/site-dist/assets/{reference_contracts_index.md.Bkznz4px.lean.js → reference_contracts_index.md.3h253qSo.lean.js} +1 -1
- package/site-dist/assets/{reference_contracts_notifier-event.md.B9WqeZdO.js → reference_contracts_notifier-event.md.DVrifpjH.js} +1 -1
- package/site-dist/assets/{reference_contracts_notifier-event.md.B9WqeZdO.lean.js → reference_contracts_notifier-event.md.DVrifpjH.lean.js} +1 -1
- package/site-dist/assets/{reference_contracts_result-file.md.DmR4fjB-.js → reference_contracts_result-file.md.CiZCk_r-.js} +1 -1
- package/site-dist/assets/{reference_contracts_result-file.md.DmR4fjB-.lean.js → reference_contracts_result-file.md.CiZCk_r-.lean.js} +1 -1
- package/site-dist/assets/{reference_contracts_spec.md.Dh5XczZL.js → reference_contracts_spec.md.B04OndF4.js} +1 -1
- package/site-dist/assets/{reference_contracts_spec.md.Dh5XczZL.lean.js → reference_contracts_spec.md.B04OndF4.lean.js} +1 -1
- package/site-dist/assets/{reference_contracts_state.md.STlqkPPS.js → reference_contracts_state.md.Xu63sMWH.js} +1 -1
- package/site-dist/assets/{reference_contracts_state.md.STlqkPPS.lean.js → reference_contracts_state.md.Xu63sMWH.lean.js} +1 -1
- package/site-dist/assets/{reference_contracts_usage-record.md.MjVps4CA.js → reference_contracts_usage-record.md.gd7f8fyb.js} +1 -1
- package/site-dist/assets/{reference_contracts_usage-record.md.MjVps4CA.lean.js → reference_contracts_usage-record.md.gd7f8fyb.lean.js} +1 -1
- package/site-dist/assets/{reference_contracts_verify.md.CbA88u6S.js → reference_contracts_verify.md.D_bAWUcP.js} +1 -1
- package/site-dist/assets/{reference_contracts_verify.md.CbA88u6S.lean.js → reference_contracts_verify.md.D_bAWUcP.lean.js} +1 -1
- package/site-dist/assets/{reference_scope.md.Kzqw8U_f.js → reference_scope.md.B7JBceSf.js} +1 -1
- package/site-dist/assets/{reference_scope.md.Kzqw8U_f.lean.js → reference_scope.md.B7JBceSf.lean.js} +1 -1
- package/site-dist/assets/{style.Dwsa4SMe.css → style.2G3zLS3c.css} +1 -1
- package/site-dist/changelog.html +9 -9
- package/site-dist/favicon.svg +10 -0
- package/site-dist/guide/getting-started.html +9 -9
- package/site-dist/guide/how-it-works.html +9 -9
- package/site-dist/guide/index.html +9 -9
- package/site-dist/guide/install.html +9 -9
- package/site-dist/guide/maintainer.html +9 -9
- package/site-dist/guide/phases.html +9 -9
- package/site-dist/guide/project.html +9 -9
- package/site-dist/guide/user.html +9 -9
- package/site-dist/hashmap.json +1 -1
- package/site-dist/index.html +9 -9
- package/site-dist/logo-light.svg +6 -0
- package/site-dist/logo.svg +5 -10
- package/site-dist/reference/adr/0001-step-agents-under-origin-chat.html +9 -9
- package/site-dist/reference/adr/0002-no-directory-switch-in-chat.html +9 -9
- package/site-dist/reference/adr/0003-script-engine-not-hub.html +9 -9
- package/site-dist/reference/adr/0004-result-files.html +9 -9
- package/site-dist/reference/adr/0005-no-default-branch-local-commits-only.html +9 -9
- package/site-dist/reference/adr/0006-skill-install-targets.html +9 -9
- package/site-dist/reference/adr/0007-own-interview-skill.html +9 -9
- package/site-dist/reference/adr/0008-entries-do-not-call-entries.html +9 -9
- package/site-dist/reference/adr/0009-versioned-install-layout.html +9 -9
- package/site-dist/reference/adr/0010-generated-feature-overview.html +9 -9
- package/site-dist/reference/adr/0011-resume-after-completion.html +9 -9
- package/site-dist/reference/adr/0012-review-panel.html +9 -9
- package/site-dist/reference/adr/0013-no-release-tooling.html +9 -9
- package/site-dist/reference/adr/0014-notifier-slot.html +9 -9
- package/site-dist/reference/adr/0015-incremental-continue.html +9 -9
- package/site-dist/reference/adr/0016-upgrade-from-tags.html +9 -9
- package/site-dist/reference/adr/0017-use-paseo-capabilities.html +9 -9
- package/site-dist/reference/adr/0018-own-worktree-option.html +9 -9
- package/site-dist/reference/adr/0019-parallel-orchestration.html +9 -9
- package/site-dist/reference/adr/0020-scheduling-through-the-chat.html +9 -9
- package/site-dist/reference/adr/0021-npm-version-manager.html +9 -9
- package/site-dist/reference/adr/0022-develop-and-verify-phases.html +9 -9
- package/site-dist/reference/adr/0023-types-gate-slices.html +9 -9
- package/site-dist/reference/adr/0024-confirm-early-review-axes.html +9 -9
- package/site-dist/reference/adr/0025-joint-requirements.html +9 -9
- package/site-dist/reference/adr/0026-machine-records-and-api.html +9 -9
- package/site-dist/reference/adr/0027-paseo-plugin.html +9 -9
- package/site-dist/reference/adr/0028-external-integrations.html +9 -9
- package/site-dist/reference/adr/0029-requirements-from-cards.html +9 -9
- package/site-dist/reference/adr/0030-card-intake-process.html +9 -9
- package/site-dist/reference/adr/0031-fewer-interventions.html +9 -9
- package/site-dist/reference/adr/0032-npm-only-install.html +9 -9
- package/site-dist/reference/adr/0033-prototype-review-and-ui-check.html +9 -9
- package/site-dist/reference/adr/index.html +9 -9
- package/site-dist/reference/commands.html +9 -9
- package/site-dist/reference/config.html +9 -9
- package/site-dist/reference/contracts/cli-json.html +9 -9
- package/site-dist/reference/contracts/feature-files.html +9 -9
- package/site-dist/reference/contracts/index.html +9 -9
- package/site-dist/reference/contracts/notifier-event.html +9 -9
- package/site-dist/reference/contracts/result-file.html +9 -9
- package/site-dist/reference/contracts/spec.html +9 -9
- package/site-dist/reference/contracts/state.html +9 -9
- package/site-dist/reference/contracts/usage-record.html +9 -9
- package/site-dist/reference/contracts/verify.html +9 -9
- package/site-dist/reference/scope.html +9 -9
- package/site-dist/assets/changelog.md.RJaBnmnw.js +0 -1
- package/site-dist/assets/chunks/@localSearchIndexroot.Dric-MbI.js +0 -1
- package/site-dist/assets/chunks/theme.CCocenmB.js +0 -2
- package/site-dist/assets/index.md.Cf_sSf_f.js +0 -1
- package/site-dist/assets/index.md.Cf_sSf_f.lean.js +0 -1
- package/site-dist/icons/agents.svg +0 -1
- package/site-dist/icons/chat.svg +0 -1
- package/site-dist/icons/paseo.svg +0 -1
- package/site-dist/icons/phases.svg +0 -1
- package/site-dist/icons/review.svg +0 -1
- package/site-dist/icons/safe.svg +0 -1
|
@@ -1,10 +1,30 @@
|
|
|
1
|
-
// Small building blocks
|
|
1
|
+
// Small building blocks. Surfaces, text, borders and status colors come from Paseo's theme
|
|
2
|
+
// (theme.colors), so the plugin sits well in Paseo's light, dark and phone layouts; req-kit's own
|
|
3
|
+
// accents (lime for "you decide", indigo for AI, cyan for running) come from design/ through
|
|
4
|
+
// shared/rk-colors.ts. See design/guidelines/plugin.md.
|
|
2
5
|
import type { PluginHostProps } from "@getpaseo/plugin/client";
|
|
6
|
+
import { Icon } from "@getpaseo/plugin/client/react-native";
|
|
3
7
|
import { type ReactNode, useMemo } from "react";
|
|
4
8
|
import { Pressable, Text, View } from "react-native";
|
|
9
|
+
import { RK_COLORS, type RkColors } from "../shared/rk-colors";
|
|
5
10
|
|
|
6
11
|
type Theme = PluginHostProps["theme"];
|
|
7
12
|
|
|
13
|
+
const MONO = "ui-monospace, Menlo, Consolas, monospace";
|
|
14
|
+
|
|
15
|
+
/** Whether Paseo is in a dark theme: from the brightness of its page background. */
|
|
16
|
+
export function isDark(theme: Theme): boolean {
|
|
17
|
+
const m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i.exec(theme.colors.surface0.trim());
|
|
18
|
+
if (!m) return true;
|
|
19
|
+
const [r, g, b] = [m[1], m[2], m[3]].map((h) => parseInt(h, 16) / 255);
|
|
20
|
+
return 0.2126 * r + 0.7152 * g + 0.0722 * b < 0.45;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** req-kit's accent colors for the current Paseo theme. */
|
|
24
|
+
export function rk(theme: Theme): RkColors {
|
|
25
|
+
return isDark(theme) ? RK_COLORS.dark : (RK_COLORS.light as unknown as RkColors);
|
|
26
|
+
}
|
|
27
|
+
|
|
8
28
|
export function useStyles(theme: Theme, compact: boolean) {
|
|
9
29
|
return useMemo(
|
|
10
30
|
() => ({
|
|
@@ -12,16 +32,18 @@ export function useStyles(theme: Theme, compact: boolean) {
|
|
|
12
32
|
body: { padding: compact ? 16 : 24, gap: compact ? 16 : 20 },
|
|
13
33
|
title: { color: theme.colors.foreground, fontSize: compact ? 18 : 20, fontWeight: "600" as const },
|
|
14
34
|
heading: { color: theme.colors.foregroundMuted, fontSize: 13, fontWeight: "600" as const, marginBottom: 6 },
|
|
15
|
-
text: { color: theme.colors.foreground, fontSize: 14 },
|
|
16
|
-
muted: { color: theme.colors.foregroundMuted, fontSize: 13 },
|
|
35
|
+
text: { color: theme.colors.foreground, fontSize: 14, lineHeight: 22 },
|
|
36
|
+
muted: { color: theme.colors.foregroundMuted, fontSize: 13, lineHeight: 20 },
|
|
37
|
+
mono: { color: theme.colors.foregroundMuted, fontSize: 12, fontFamily: MONO },
|
|
17
38
|
danger: { color: theme.colors.statusDanger, fontSize: 13 },
|
|
39
|
+
eyebrow: { color: theme.colors.foregroundMuted, fontSize: 12, fontFamily: MONO, letterSpacing: 1.9, fontWeight: "500" as const },
|
|
18
40
|
card: {
|
|
19
41
|
backgroundColor: theme.colors.surface1,
|
|
20
42
|
borderColor: theme.colors.border,
|
|
21
43
|
borderWidth: 1,
|
|
22
|
-
borderRadius:
|
|
23
|
-
padding: compact ? 12 :
|
|
24
|
-
gap:
|
|
44
|
+
borderRadius: 14,
|
|
45
|
+
padding: compact ? 12 : 16,
|
|
46
|
+
gap: 6,
|
|
25
47
|
},
|
|
26
48
|
row: { flexDirection: "row" as const, alignItems: "center" as const, gap: 8, flexWrap: "wrap" as const },
|
|
27
49
|
divider: { height: 1, backgroundColor: theme.colors.border },
|
|
@@ -30,78 +52,223 @@ export function useStyles(theme: Theme, compact: boolean) {
|
|
|
30
52
|
);
|
|
31
53
|
}
|
|
32
54
|
|
|
33
|
-
export
|
|
34
|
-
|
|
55
|
+
export type Tone = "warning" | "danger" | "success" | "accent" | "running" | "needs" | "ai" | "muted";
|
|
56
|
+
|
|
57
|
+
/** A status badge: color + (optional) Lucide icon + words. "accent" is an older name for "running". */
|
|
58
|
+
export function Badge({ theme, tone, icon, children }: { theme: Theme; tone: Tone; icon?: string; children: ReactNode }) {
|
|
59
|
+
const c = rk(theme);
|
|
60
|
+
const [fg, bg] =
|
|
35
61
|
tone === "warning"
|
|
36
|
-
? theme.colors.statusWarning
|
|
62
|
+
? [theme.colors.statusWarning, c.warningTint]
|
|
37
63
|
: tone === "danger"
|
|
38
|
-
? theme.colors.statusDanger
|
|
64
|
+
? [theme.colors.statusDanger, c.failedTint]
|
|
39
65
|
: tone === "success"
|
|
40
|
-
? theme.colors.statusSuccess
|
|
41
|
-
: tone === "accent"
|
|
42
|
-
?
|
|
43
|
-
:
|
|
66
|
+
? [theme.colors.statusSuccess, c.successTint]
|
|
67
|
+
: tone === "running" || tone === "accent"
|
|
68
|
+
? [c.data, c.dataTint]
|
|
69
|
+
: tone === "needs"
|
|
70
|
+
? [c.brandText, c.brandTint]
|
|
71
|
+
: tone === "ai"
|
|
72
|
+
? [c.ai, c.aiTint]
|
|
73
|
+
: [theme.colors.foregroundMuted, theme.colors.surface2];
|
|
44
74
|
return (
|
|
45
|
-
<View style={{
|
|
46
|
-
<
|
|
75
|
+
<View style={{ flexDirection: "row", alignItems: "center", gap: 4, borderRadius: 6, paddingHorizontal: 8, paddingVertical: 2, backgroundColor: bg }}>
|
|
76
|
+
{icon ? <Icon name={icon} size={13} color={fg} /> : null}
|
|
77
|
+
<Text style={{ color: fg, fontSize: 12, fontWeight: "600" }}>{children}</Text>
|
|
47
78
|
</View>
|
|
48
79
|
);
|
|
49
80
|
}
|
|
50
81
|
|
|
82
|
+
/**
|
|
83
|
+
* A button. `primary` is req-kit's lime: the one decision this view is asking for (one per card or
|
|
84
|
+
* screen). Others take Paseo's surfaces.
|
|
85
|
+
*/
|
|
51
86
|
export function Button({
|
|
52
87
|
theme,
|
|
53
88
|
label,
|
|
54
89
|
onPress,
|
|
55
90
|
primary,
|
|
56
91
|
disabled,
|
|
92
|
+
icon,
|
|
57
93
|
}: {
|
|
58
94
|
theme: Theme;
|
|
59
95
|
label: string;
|
|
60
96
|
onPress(): void;
|
|
61
97
|
primary?: boolean;
|
|
62
98
|
disabled?: boolean;
|
|
99
|
+
icon?: string;
|
|
63
100
|
}) {
|
|
101
|
+
const c = rk(theme);
|
|
102
|
+
const fg = primary ? c.onBrand : theme.colors.foreground;
|
|
64
103
|
return (
|
|
65
104
|
<Pressable
|
|
66
105
|
accessibilityRole="button"
|
|
67
106
|
accessibilityLabel={label}
|
|
107
|
+
accessibilityState={{ disabled: !!disabled }}
|
|
68
108
|
disabled={disabled}
|
|
69
109
|
onPress={onPress}
|
|
70
|
-
style={{
|
|
110
|
+
style={({ pressed }: { pressed: boolean }) => ({
|
|
111
|
+
flexDirection: "row",
|
|
112
|
+
alignItems: "center",
|
|
113
|
+
gap: 6,
|
|
71
114
|
paddingHorizontal: 14,
|
|
72
115
|
paddingVertical: 8,
|
|
73
|
-
borderRadius:
|
|
116
|
+
borderRadius: 10,
|
|
74
117
|
opacity: disabled ? 0.5 : 1,
|
|
75
|
-
backgroundColor: primary ? theme.colors.
|
|
76
|
-
borderColor: theme.colors.border,
|
|
77
|
-
borderWidth:
|
|
78
|
-
}}
|
|
118
|
+
backgroundColor: primary ? (pressed ? c.brand400 : c.brand500) : pressed ? theme.colors.surface1 : theme.colors.surface2,
|
|
119
|
+
borderColor: primary ? c.brandEdge : theme.colors.border,
|
|
120
|
+
borderWidth: 1,
|
|
121
|
+
})}
|
|
79
122
|
>
|
|
80
|
-
<
|
|
123
|
+
{icon ? <Icon name={icon} size={16} color={fg} /> : null}
|
|
124
|
+
<Text style={{ color: fg, fontSize: 14, fontWeight: "600" }}>{label}</Text>
|
|
81
125
|
</Pressable>
|
|
82
126
|
);
|
|
83
127
|
}
|
|
84
128
|
|
|
129
|
+
/** A filter chip; the selected one carries req-kit's lime. */
|
|
85
130
|
export function Chip({ theme, label, active, onPress }: { theme: Theme; label: string; active: boolean; onPress(): void }) {
|
|
131
|
+
const c = rk(theme);
|
|
86
132
|
return (
|
|
87
133
|
<Pressable
|
|
88
134
|
accessibilityRole="button"
|
|
89
135
|
accessibilityState={{ selected: active }}
|
|
90
136
|
onPress={onPress}
|
|
91
137
|
style={{
|
|
92
|
-
paddingHorizontal:
|
|
93
|
-
paddingVertical:
|
|
138
|
+
paddingHorizontal: 12,
|
|
139
|
+
paddingVertical: 5,
|
|
94
140
|
borderRadius: 999,
|
|
95
|
-
backgroundColor: active ?
|
|
96
|
-
borderColor: theme.colors.border,
|
|
97
|
-
borderWidth:
|
|
141
|
+
backgroundColor: active ? c.brandTint : theme.colors.surface1,
|
|
142
|
+
borderColor: active ? c.brandEdge : theme.colors.border,
|
|
143
|
+
borderWidth: 1,
|
|
98
144
|
}}
|
|
99
145
|
>
|
|
100
|
-
<Text style={{ color: active ?
|
|
146
|
+
<Text style={{ color: active ? c.brandText : theme.colors.foreground, fontSize: 13, fontWeight: active ? "600" : "400" }}>{label}</Text>
|
|
101
147
|
</Pressable>
|
|
102
148
|
);
|
|
103
149
|
}
|
|
104
150
|
|
|
151
|
+
/** An uppercase mono label above a group, e.g. NEEDS YOU · 2. */
|
|
152
|
+
export function Eyebrow({ theme, children, accent, right }: { theme: Theme; children: ReactNode; accent?: boolean; right?: ReactNode }) {
|
|
153
|
+
const c = rk(theme);
|
|
154
|
+
return (
|
|
155
|
+
<View style={{ flexDirection: "row", alignItems: "center", justifyContent: "space-between", gap: 8 }}>
|
|
156
|
+
<Text style={{ color: accent ? c.brandText : theme.colors.foregroundMuted, fontSize: 12, fontFamily: MONO, letterSpacing: 1.9, fontWeight: "500" }}>{children}</Text>
|
|
157
|
+
{right ?? null}
|
|
158
|
+
</View>
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** The req-kit mark (a check-shaped pipeline ending in a lit node), drawn with views. */
|
|
163
|
+
export function Mark({ theme, size = 20 }: { theme: Theme; size?: number }) {
|
|
164
|
+
const c = rk(theme);
|
|
165
|
+
const k = size / 100;
|
|
166
|
+
const bar = (x1: number, y1: number, x2: number, y2: number) => {
|
|
167
|
+
const len = Math.hypot(x2 - x1, y2 - y1);
|
|
168
|
+
const angle = (Math.atan2(y2 - y1, x2 - x1) * 180) / Math.PI;
|
|
169
|
+
return (
|
|
170
|
+
<View
|
|
171
|
+
style={{
|
|
172
|
+
position: "absolute",
|
|
173
|
+
left: ((x1 + x2) / 2 - len / 2) * k,
|
|
174
|
+
top: ((y1 + y2) / 2) * k - 5 * k,
|
|
175
|
+
width: len * k,
|
|
176
|
+
height: 10 * k,
|
|
177
|
+
borderRadius: 5 * k,
|
|
178
|
+
backgroundColor: c.brandEdge,
|
|
179
|
+
transform: [{ rotate: `${angle}deg` }],
|
|
180
|
+
}}
|
|
181
|
+
/>
|
|
182
|
+
);
|
|
183
|
+
};
|
|
184
|
+
const node = (x: number, y: number, r: number, filled: boolean) => (
|
|
185
|
+
<View
|
|
186
|
+
style={{
|
|
187
|
+
position: "absolute",
|
|
188
|
+
left: (x - r) * k,
|
|
189
|
+
top: (y - r) * k,
|
|
190
|
+
width: 2 * r * k,
|
|
191
|
+
height: 2 * r * k,
|
|
192
|
+
borderRadius: r * k,
|
|
193
|
+
backgroundColor: filled ? c.brandEdge : theme.colors.surface0,
|
|
194
|
+
borderColor: c.brandEdge,
|
|
195
|
+
borderWidth: filled ? 0 : Math.max(1, 6 * k),
|
|
196
|
+
}}
|
|
197
|
+
/>
|
|
198
|
+
);
|
|
199
|
+
return (
|
|
200
|
+
<View style={{ width: size, height: size }}>
|
|
201
|
+
{bar(16, 54, 40, 77)}
|
|
202
|
+
{bar(40, 77, 82, 30)}
|
|
203
|
+
{node(16, 54, 9, false)}
|
|
204
|
+
{node(40, 77, 9, false)}
|
|
205
|
+
{node(82, 30, 13, true)}
|
|
206
|
+
</View>
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/** The mark and the wordmark "req-kit" (its hyphen lime), and an optional page name. */
|
|
211
|
+
export function BrandHeader({ theme, page, right }: { theme: Theme; page?: string; right?: ReactNode }) {
|
|
212
|
+
const c = rk(theme);
|
|
213
|
+
return (
|
|
214
|
+
<View style={{ flexDirection: "row", alignItems: "center", gap: 10, flexWrap: "wrap" }}>
|
|
215
|
+
<Mark theme={theme} size={20} />
|
|
216
|
+
<Text style={{ color: theme.colors.foreground, fontSize: 16, fontWeight: "800", letterSpacing: -0.3 }}>
|
|
217
|
+
req<Text style={{ color: c.brandEdge }}>-</Text>kit
|
|
218
|
+
</Text>
|
|
219
|
+
{page ? <Text style={{ color: theme.colors.foregroundMuted, fontSize: 15, fontWeight: "600" }}>{page}</Text> : null}
|
|
220
|
+
<View style={{ flex: 1 }} />
|
|
221
|
+
{right ?? null}
|
|
222
|
+
</View>
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export type TrackState = "done" | "now" | "needs" | "todo";
|
|
227
|
+
|
|
228
|
+
/** The step track: where a requirement is (design/components/StepTrack.md). */
|
|
229
|
+
export function StepTrack({ theme, steps }: { theme: Theme; steps: Array<{ label: string; who: string; state: TrackState }> }) {
|
|
230
|
+
const c = rk(theme);
|
|
231
|
+
return (
|
|
232
|
+
<View style={{ flexDirection: "row", alignItems: "flex-start" }} accessibilityLabel={`进度:${steps.map((s) => `${s.label}${s.state === "done" ? "已完成" : s.state === "now" ? "进行中" : s.state === "needs" ? "等你" : ""}`).join(",")}`}>
|
|
233
|
+
{steps.map((st, i) => {
|
|
234
|
+
const reached = st.state !== "todo";
|
|
235
|
+
const dot =
|
|
236
|
+
st.state === "done"
|
|
237
|
+
? { bg: c.successTint, border: theme.colors.statusSuccess, fg: theme.colors.statusSuccess }
|
|
238
|
+
: st.state === "now"
|
|
239
|
+
? { bg: c.dataTint, border: c.data, fg: c.data }
|
|
240
|
+
: st.state === "needs"
|
|
241
|
+
? { bg: c.brand500, border: c.brandEdge, fg: c.onBrand }
|
|
242
|
+
: { bg: theme.colors.surface1, border: theme.colors.border, fg: theme.colors.foregroundMuted };
|
|
243
|
+
return (
|
|
244
|
+
<View key={st.label} style={{ flex: 1, alignItems: "center", gap: 4, minWidth: 48 }}>
|
|
245
|
+
<View style={{ flexDirection: "row", alignItems: "center", alignSelf: "stretch" }}>
|
|
246
|
+
<View style={{ flex: 1, height: 2, backgroundColor: i === 0 ? "transparent" : reached ? theme.colors.statusSuccess : theme.colors.border }} />
|
|
247
|
+
<View style={{ width: 24, height: 24, borderRadius: 12, alignItems: "center", justifyContent: "center", backgroundColor: dot.bg, borderColor: dot.border, borderWidth: 1.5 }}>
|
|
248
|
+
{st.state === "done" ? <Icon name="Check" size={13} color={dot.fg} /> : <Text style={{ color: dot.fg, fontSize: 11, fontWeight: "700", fontFamily: MONO }}>{i + 1}</Text>}
|
|
249
|
+
</View>
|
|
250
|
+
<View style={{ flex: 1, height: 2, backgroundColor: i === steps.length - 1 ? "transparent" : steps[i + 1].state !== "todo" ? theme.colors.statusSuccess : theme.colors.border }} />
|
|
251
|
+
</View>
|
|
252
|
+
<Text style={{ color: st.state === "needs" ? c.brandText : theme.colors.foreground, fontSize: 12, fontWeight: "600" }}>{st.label}</Text>
|
|
253
|
+
<Text style={{ color: theme.colors.foregroundMuted, fontSize: 11 }}>{st.who}</Text>
|
|
254
|
+
</View>
|
|
255
|
+
);
|
|
256
|
+
})}
|
|
257
|
+
</View>
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** The square icon block at the start of an "等你处理" card. */
|
|
262
|
+
export function AttentionIcon({ theme, icon, tone = "needs" }: { theme: Theme; icon: string; tone?: "needs" | "danger" | "muted" }) {
|
|
263
|
+
const c = rk(theme);
|
|
264
|
+
const [fg, bg] = tone === "danger" ? [theme.colors.statusDanger, c.failedTint] : tone === "muted" ? [theme.colors.foregroundMuted, theme.colors.surface2] : [c.brandText, c.brandTint];
|
|
265
|
+
return (
|
|
266
|
+
<View style={{ width: 36, height: 36, borderRadius: 10, alignItems: "center", justifyContent: "center", backgroundColor: bg }}>
|
|
267
|
+
<Icon name={icon} size={18} color={fg} />
|
|
268
|
+
</View>
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
|
|
105
272
|
/** Loading, error and empty states in one place. */
|
|
106
273
|
export function Status({ theme, loading, error, empty }: { theme: Theme; loading?: boolean; error?: Error | null; empty?: string | null }) {
|
|
107
274
|
if (error) return <Text style={{ color: theme.colors.statusDanger, fontSize: 14 }}>{error.message}</Text>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// req-kit accent colors for the Paseo plugin, generated from design/tokens.json by scripts/tokens-build.mjs. Do not edit.
|
|
2
|
+
export const RK_COLORS = {
|
|
3
|
+
"dark": {
|
|
4
|
+
"brand500": "#a8e01f",
|
|
5
|
+
"brand400": "#bdeb4a",
|
|
6
|
+
"brandEdge": "#a8e01f",
|
|
7
|
+
"brandText": "#c2ee55",
|
|
8
|
+
"brandTint": "#a8e01f24",
|
|
9
|
+
"onBrand": "#0f1a02",
|
|
10
|
+
"ai": "#a5b4fc",
|
|
11
|
+
"aiTint": "#818cf81f",
|
|
12
|
+
"data": "#22d3ee",
|
|
13
|
+
"dataTint": "#22d3ee1f",
|
|
14
|
+
"successTint": "#34d3991f",
|
|
15
|
+
"warningTint": "#fbbf241f",
|
|
16
|
+
"failedTint": "#fb71851f"
|
|
17
|
+
},
|
|
18
|
+
"light": {
|
|
19
|
+
"brand500": "#a8e01f",
|
|
20
|
+
"brand400": "#b3e536",
|
|
21
|
+
"brandEdge": "#65a30d",
|
|
22
|
+
"brandText": "#466f0f",
|
|
23
|
+
"brandTint": "#a8e01f2e",
|
|
24
|
+
"onBrand": "#0f1a02",
|
|
25
|
+
"ai": "#4f46e5",
|
|
26
|
+
"aiTint": "#4f46e514",
|
|
27
|
+
"data": "#0e7490",
|
|
28
|
+
"dataTint": "#0e749014",
|
|
29
|
+
"successTint": "#04785714",
|
|
30
|
+
"warningTint": "#92400e14",
|
|
31
|
+
"failedTint": "#be123c14"
|
|
32
|
+
}
|
|
33
|
+
} as const;
|
|
34
|
+
|
|
35
|
+
export type RkColors = (typeof RK_COLORS)["dark"];
|
package/site-dist/404.html
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
<title>404 · req-kit</title>
|
|
7
7
|
<meta name="description" content="Not Found">
|
|
8
8
|
<meta name="generator" content="VitePress v1.6.3">
|
|
9
|
-
<link rel="preload stylesheet" href="/assets/style.
|
|
9
|
+
<link rel="preload stylesheet" href="/assets/style.2G3zLS3c.css" as="style">
|
|
10
10
|
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
|
|
11
11
|
|
|
12
|
-
<script type="module" src="/assets/app.
|
|
12
|
+
<script type="module" src="/assets/app.Ny0BZHeG.js"></script>
|
|
13
13
|
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
|
-
<link rel="icon" type="image/svg+xml" href="/
|
|
15
|
-
<meta name="theme-color" content="#
|
|
14
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
|
15
|
+
<meta name="theme-color" content="#a8e01f">
|
|
16
16
|
<meta property="og:type" content="website">
|
|
17
17
|
<meta property="og:title" content="req-kit:从一句需求,到可验收的功能">
|
|
18
18
|
<meta property="og:description" content="在 Paseo 中用对话对齐需求,由一组 AI agent 在后台完成设计、实现、评审和验证。">
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
</head>
|
|
22
22
|
<body>
|
|
23
23
|
<div id="app"></div>
|
|
24
|
-
<script>window.__VP_HASH_MAP__=JSON.parse("{\"changelog.md\":\"
|
|
24
|
+
<script>window.__VP_HASH_MAP__=JSON.parse("{\"changelog.md\":\"CUwudFS5\",\"guide_getting-started.md\":\"DBJ0aMgy\",\"guide_how-it-works.md\":\"Rn-g0Um8\",\"guide_index.md\":\"BIF6VPBE\",\"guide_install.md\":\"kIsj5oWc\",\"guide_maintainer.md\":\"SWALpGR5\",\"guide_phases.md\":\"Bnd9FQ27\",\"guide_project.md\":\"CzS92KTI\",\"guide_user.md\":\"REc1nK8f\",\"index.md\":\"CpaGRB2c\",\"reference_adr_0001-step-agents-under-origin-chat.md\":\"CPq0ZVSs\",\"reference_adr_0002-no-directory-switch-in-chat.md\":\"BZD1j8xZ\",\"reference_adr_0003-script-engine-not-hub.md\":\"Bi4uZZaE\",\"reference_adr_0004-result-files.md\":\"CNQMSs4R\",\"reference_adr_0005-no-default-branch-local-commits-only.md\":\"DeXnMAyg\",\"reference_adr_0006-skill-install-targets.md\":\"CwqvB8NW\",\"reference_adr_0007-own-interview-skill.md\":\"HlLp78db\",\"reference_adr_0008-entries-do-not-call-entries.md\":\"D2VH2uQV\",\"reference_adr_0009-versioned-install-layout.md\":\"D9g3dWr-\",\"reference_adr_0010-generated-feature-overview.md\":\"CHOwcV4c\",\"reference_adr_0011-resume-after-completion.md\":\"CqdSPi49\",\"reference_adr_0012-review-panel.md\":\"d4wmLrNF\",\"reference_adr_0013-no-release-tooling.md\":\"BOROmwvq\",\"reference_adr_0014-notifier-slot.md\":\"BAqt1Xj1\",\"reference_adr_0015-incremental-continue.md\":\"BiUdpeq5\",\"reference_adr_0016-upgrade-from-tags.md\":\"D48PfEFP\",\"reference_adr_0017-use-paseo-capabilities.md\":\"CAMkamzJ\",\"reference_adr_0018-own-worktree-option.md\":\"DgkWjYL-\",\"reference_adr_0019-parallel-orchestration.md\":\"B9xqQidw\",\"reference_adr_0020-scheduling-through-the-chat.md\":\"Dh81be7G\",\"reference_adr_0021-npm-version-manager.md\":\"Pz4vZbkE\",\"reference_adr_0022-develop-and-verify-phases.md\":\"35MxNOuj\",\"reference_adr_0023-types-gate-slices.md\":\"Bjufr5EK\",\"reference_adr_0024-confirm-early-review-axes.md\":\"BRxVXJa4\",\"reference_adr_0025-joint-requirements.md\":\"ClCFyIiN\",\"reference_adr_0026-machine-records-and-api.md\":\"Bv1k_WjT\",\"reference_adr_0027-paseo-plugin.md\":\"CcpaKksi\",\"reference_adr_0028-external-integrations.md\":\"CrGqXJux\",\"reference_adr_0029-requirements-from-cards.md\":\"BUVah9hV\",\"reference_adr_0030-card-intake-process.md\":\"DKMkIFXw\",\"reference_adr_0031-fewer-interventions.md\":\"C8e2jpbC\",\"reference_adr_0032-npm-only-install.md\":\"5tFsGLKz\",\"reference_adr_0033-prototype-review-and-ui-check.md\":\"CW5Soqvp\",\"reference_adr_index.md\":\"DgUVrHoO\",\"reference_commands.md\":\"BAQ8FugP\",\"reference_config.md\":\"DoQUxHQ2\",\"reference_contracts_cli-json.md\":\"nRuTayON\",\"reference_contracts_feature-files.md\":\"CgiSHFpq\",\"reference_contracts_index.md\":\"3h253qSo\",\"reference_contracts_notifier-event.md\":\"DVrifpjH\",\"reference_contracts_result-file.md\":\"CiZCk_r-\",\"reference_contracts_spec.md\":\"B04OndF4\",\"reference_contracts_state.md\":\"Xu63sMWH\",\"reference_contracts_usage-record.md\":\"gd7f8fyb\",\"reference_contracts_verify.md\":\"D_bAWUcP\",\"reference_scope.md\":\"B7JBceSf\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"zh-CN\",\"dir\":\"ltr\",\"title\":\"req-kit\",\"titleTemplate\":\":title · req-kit\",\"description\":\"在 Paseo 中用对话对齐需求,由一组 AI agent 在后台完成设计、实现、评审和验证。给测试、产品、项目经理用的需求开发体系。\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"rk\":{\"version\":\"1.15.0-beta.3\",\"beta\":true,\"releases\":43,\"stable\":7,\"adrs\":33},\"logo\":{\"light\":\"/logo-light.svg\",\"dark\":\"/logo.svg\",\"alt\":\"req-kit\"},\"siteTitle\":\"req-kit\",\"nav\":[{\"text\":\"指南\",\"link\":\"/guide/\",\"activeMatch\":\"^/guide/\"},{\"text\":\"参考\",\"link\":\"/reference/commands\",\"activeMatch\":\"^/reference/\"},{\"text\":\"更新记录\",\"link\":\"/changelog\"},{\"text\":\"v1.15.0-beta.3\",\"items\":[{\"text\":\"更新记录\",\"link\":\"/changelog\"},{\"text\":\"GitHub Releases\",\"link\":\"https://github.com/yiyisf/paseo-req-kit/releases\"},{\"text\":\"范围与取舍\",\"link\":\"/reference/scope\"}]}],\"sidebar\":{\"/guide/\":[{\"text\":\"开始\",\"items\":[{\"text\":\"req-kit 是什么\",\"link\":\"/guide/\"},{\"text\":\"快速开始\",\"link\":\"/guide/getting-started\"},{\"text\":\"工作原理\",\"link\":\"/guide/how-it-works\"}]},{\"text\":\"使用\",\"items\":[{\"text\":\"使用者指南\",\"link\":\"/guide/user\"},{\"text\":\"分阶段执行与提测\",\"link\":\"/guide/phases\"}]},{\"text\":\"安装与维护\",\"items\":[{\"text\":\"安装与升级\",\"link\":\"/guide/install\"},{\"text\":\"项目定制与运行规则\",\"link\":\"/guide/project\"},{\"text\":\"维护者指南\",\"link\":\"/guide/maintainer\"}]}],\"/reference/\":[{\"text\":\"参考\",\"items\":[{\"text\":\"命令\",\"link\":\"/reference/commands\"},{\"text\":\"配置项\",\"link\":\"/reference/config\"},{\"text\":\"范围与取舍\",\"link\":\"/reference/scope\"}]},{\"text\":\"文件格式约定\",\"collapsed\":false,\"items\":[{\"text\":\"总览\",\"link\":\"/reference/contracts/\"},{\"text\":\"需求说明 spec.md\",\"link\":\"/reference/contracts/spec\"},{\"text\":\"状态文件 state.json\",\"link\":\"/reference/contracts/state\"},{\"text\":\"结果文件\",\"link\":\"/reference/contracts/result-file\"},{\"text\":\"功能目录中的文件\",\"link\":\"/reference/contracts/feature-files\"},{\"text\":\"验证方法 verify.md\",\"link\":\"/reference/contracts/verify\"},{\"text\":\"外部通知事件\",\"link\":\"/reference/contracts/notifier-event\"},{\"text\":\"req api 的 JSON 输出\",\"link\":\"/reference/contracts/cli-json\"},{\"text\":\"需求索引与使用记录\",\"link\":\"/reference/contracts/usage-record\"}]},{\"text\":\"设计决定(ADR)\",\"collapsed\":true,\"items\":[{\"text\":\"总览\",\"link\":\"/reference/adr/\"},{\"text\":\"0001 步骤 agent 挂在发起的对话下\",\"link\":\"/reference/adr/0001-step-agents-under-origin-chat\"},{\"text\":\"0002 对话过程中不切换工作目录\",\"link\":\"/reference/adr/0002-no-directory-switch-in-chat\"},{\"text\":\"0003 第 3–11 步由脚本引擎驱动,不用 Hub 多步骤工作流\",\"link\":\"/reference/adr/0003-script-engine-not-hub\"},{\"text\":\"0004 步骤结论只看结果文件\",\"link\":\"/reference/adr/0004-result-files\"},{\"text\":\"0005 不在默认分支上运行,只做本地提交\",\"link\":\"/reference/adr/0005-no-default-branch-local-commits-only\"},{\"text\":\"0006 只安装到 ~/.agents/skills 和 ~/.claude/skills\",\"link\":\"/reference/adr/0006-skill-install-targets\"},{\"text\":\"0007 自带需求访谈 skill,不依赖外部 skill 包\",\"link\":\"/reference/adr/0007-own-interview-skill\"},{\"text\":\"0008 入口 skill 之间不互相调用\",\"link\":\"/reference/adr/0008-entries-do-not-call-entries\"},{\"text\":\"0009 程序与本机配置分开存放,按版本目录并存\",\"link\":\"/reference/adr/0009-versioned-install-layout\"},{\"text\":\"0010 需求总览现场生成,不维护 INDEX.md\",\"link\":\"/reference/adr/0010-generated-feature-overview\"},{\"text\":\"0011 完成后修改 spec 可以继续开发\",\"link\":\"/reference/adr/0011-resume-after-completion\"},{\"text\":\"0012 评审小组:首轮并行评审,评审者核实汇总\",\"link\":\"/reference/adr/0012-review-panel\"},{\"text\":\"0013 发布不使用 changesets 等工具\",\"link\":\"/reference/adr/0013-no-release-tooling\"},{\"text\":\"0014 外部通知只留接口,不内置任何 IM\",\"link\":\"/reference/adr/0014-notifier-slot\"},{\"text\":\"0015 需求变更后增量继续,而不是从零重做\",\"link\":\"/reference/adr/0015-incremental-continue\"},{\"text\":\"0016 一键升级:从 git 标签下载到 versions/ 再切换\",\"link\":\"/reference/adr/0016-upgrade-from-tags\"},{\"text\":\"0017 用好 Paseo 自身的能力:profile、工作区脚本、用量和时间线\",\"link\":\"/reference/adr/0017-use-paseo-capabilities\"},{\"text\":\"0018 可选:流水线为需求新建 worktree 工作区\",\"link\":\"/reference/adr/0018-own-worktree-option\"},{\"text\":\"0019 用 Paseo 的并行子 agent:确认前独立审阅、方案提案\",\"link\":\"/reference/adr/0019-parallel-orchestration\"},{\"text\":\"0020 调度:用 Paseo 定时任务把消息发回对话,排队在本机进行\",\"link\":\"/reference/adr/0020-scheduling-through-the-chat\"},{\"text\":\"0021 npm 分发:全局包是版本管理器,各版本仍装在 versions/ 下\",\"link\":\"/reference/adr/0021-npm-version-manager\"},{\"text\":\"0022 分阶段执行:研发阶段、闸口、测试验证阶段\",\"link\":\"/reference/adr/0022-develop-and-verify-phases\"},{\"text\":\"0023 需求类型、质量门、按切片实现\",\"link\":\"/reference/adr/0023-types-gate-slices\"},{\"text\":\"0024 让分歧更早暴露:验收例子、方案确认点、两个方向的评审、反复的问题变成规则\",\"link\":\"/reference/adr/0024-confirm-early-review-axes\"},{\"text\":\"0025 联合需求:一个需求同时改几个仓库\",\"link\":\"/reference/adr/0025-joint-requirements\"},{\"text\":\"0026 本机的需求索引、使用记录和 req api\",\"link\":\"/reference/adr/0026-machine-records-and-api\"},{\"text\":\"0027 Paseo 插件:随 req-kit 一起发布,只通过 req api 工作\",\"link\":\"/reference/adr/0027-paseo-plugin\"},{\"text\":\"0028 外部系统对接:命令写法在配置里,内容由 AI 整理,调用是确定的\",\"link\":\"/reference/adr/0028-external-integrations\"},{\"text\":\"0029 从卡片开始的需求:需求会话代替人,卡片描述代替对话\",\"link\":\"/reference/adr/0029-requirements-from-cards\"},{\"text\":\"0030 接单器:共享机器上定时接卡片、转达回复\",\"link\":\"/reference/adr/0030-card-intake-process\"},{\"text\":\"0031 少等人:每种中断都有自动的下一步\",\"link\":\"/reference/adr/0031-fewer-interventions\"},{\"text\":\"0032 安装、升级和文档只依赖 npm 源\",\"link\":\"/reference/adr/0032-npm-only-install\"},{\"text\":\"0033 原型审查页和不靠看图的界面检查\",\"link\":\"/reference/adr/0033-prototype-review-and-ui-check\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/yiyisf/paseo-req-kit\"}],\"editLink\":{\"pattern\":\"https://github.com/yiyisf/paseo-req-kit/edit/main/site/:path\",\"text\":\"在 GitHub 上编辑此页\"},\"footer\":{\"message\":\"以 MIT 许可发布。req-kit 是运行在 Paseo 上的社区项目。\",\"copyright\":\"Copyright © 2026 yiyisf\"},\"search\":{\"provider\":\"local\",\"options\":{\"translations\":{\"button\":{\"buttonText\":\"搜索文档\",\"buttonAriaLabel\":\"搜索文档\"},\"modal\":{\"noResultsText\":\"没有找到相关结果\",\"resetButtonTitle\":\"清除\",\"footer\":{\"selectText\":\"选择\",\"navigateText\":\"切换\",\"closeText\":\"关闭\"}}}}},\"outline\":{\"level\":[2,3],\"label\":\"本页内容\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"lastUpdated\":{\"text\":\"最后更新\"},\"returnToTopLabel\":\"回到顶部\",\"sidebarMenuLabel\":\"目录\",\"darkModeSwitchLabel\":\"外观\",\"lightModeSwitchTitle\":\"切换到浅色\",\"darkModeSwitchTitle\":\"切换到深色\",\"externalLinkIcon\":true,\"notFound\":{\"title\":\"页面不存在\",\"quote\":\"这个页面可能已经移动或删除。\",\"linkText\":\"回到首页\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
|
|
25
25
|
|
|
26
26
|
</body>
|
|
27
27
|
</html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{R as p}from"./chunks/theme.
|
|
1
|
+
import{R as p}from"./chunks/theme.BeEUWcJI.js";import{R as s,a4 as i,a5 as u,a6 as c,a7 as l,a8 as f,a9 as d,aa as m,ab as h,ac as g,ad as A,d as v,u as R,v as w,s as y,ae as C,af as P,ag as b,a3 as E}from"./chunks/framework.BetZR81g.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),P(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
|