@runweave/server-linux-x64 0.1.8 → 0.1.10
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/manifest.json +1494 -161
- package/native.tar.gz +0 -0
- package/package.json +1 -1
- package/payload/.agents/plugins/marketplace.json +20 -0
- package/payload/app-server/build-info.json +4 -4
- package/payload/app-server/index.cjs +6 -2
- package/payload/app-server/index.cjs.map +1 -1
- package/payload/backend/activity-sqlite-worker.cjs +2 -0
- package/payload/backend/build-info.json +4 -4
- package/payload/backend/dev-resources/control.cjs +5 -1
- package/payload/backend/index.cjs +466 -295
- package/payload/backend/ios-simulators/pool.py +3 -3
- package/payload/backend/scheduled-tasks-sqlite-worker.cjs +2 -0
- package/payload/frontend/dist/assets/{_baseUniq-vo4uuhMd.js → _baseUniq--CWv8e7O.js} +1 -1
- package/payload/frontend/dist/assets/{access-_jCu7Rgu.js → access-BCF23Qto.js} +1 -1
- package/payload/frontend/dist/assets/{advanced-CqOhObYj.js → advanced-D8viCLue.js} +1 -1
- package/payload/frontend/dist/assets/{appearance-CrrD5gzC.js → appearance-wPVMx-tB.js} +1 -1
- package/payload/frontend/dist/assets/{arc-dbfyHSF0.js → arc-BXffHD7A.js} +1 -1
- package/payload/frontend/dist/assets/{architectureDiagram-Q4EWVU46-CntSCAsO.js → architectureDiagram-Q4EWVU46-BXHN9QCj.js} +1 -1
- package/payload/frontend/dist/assets/{blockDiagram-DXYQGD6D-Chp0D4qy.js → blockDiagram-DXYQGD6D-DoZjab_0.js} +1 -1
- package/payload/frontend/dist/assets/{c4Diagram-AHTNJAMY-CF91pOuW.js → c4Diagram-AHTNJAMY-Ds2E62Z8.js} +1 -1
- package/payload/frontend/dist/assets/channel-83CTXkVl.js +1 -0
- package/payload/frontend/dist/assets/{chunk-4BX2VUAB-B1gxlVu2.js → chunk-4BX2VUAB-Dk1H2-5_.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-4TB4RGXK-Cxt3mj9b.js → chunk-4TB4RGXK-Sg0gzSvg.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-55IACEB6-BJT6qNik.js → chunk-55IACEB6-Du_EJG4S.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-EDXVE4YY-yI59bCa0.js → chunk-EDXVE4YY-BM1Cs5dU.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-FMBD7UC4-CDvncKKJ.js → chunk-FMBD7UC4-BM9thfyY.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-OYMX7WX6-BblOIU57.js → chunk-OYMX7WX6-C9Bvn4fo.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-QZHKN3VN-rODzNdO0.js → chunk-QZHKN3VN-CaakbFhJ.js} +1 -1
- package/payload/frontend/dist/assets/{chunk-YZCP3GAM-B6D4wQwk.js → chunk-YZCP3GAM-DkVNrd40.js} +1 -1
- package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-oR8IYJwC.js +1 -0
- package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-oR8IYJwC.js +1 -0
- package/payload/frontend/dist/assets/clone-BIDF-bd9.js +1 -0
- package/payload/frontend/dist/assets/connection-DIdF_3aa.js +12 -0
- package/payload/frontend/dist/assets/{connections-DqDmxS-O.js → connections-DBYC8SFl.js} +1 -1
- package/payload/frontend/dist/assets/{cose-bilkent-S5V4N54A-BvwVWp29.js → cose-bilkent-S5V4N54A-B4-fwllY.js} +1 -1
- package/payload/frontend/dist/assets/{dagre-KV5264BT-h_K1TH11.js → dagre-KV5264BT-Byu4wqLk.js} +1 -1
- package/payload/frontend/dist/assets/{desktop-BQ3kGtKG.js → desktop-aESkh0HL.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-5BDNPKRD-B8g2SV6L.js → diagram-5BDNPKRD-DJW8DuCX.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-G4DWMVQ6-BOEnrqYm.js → diagram-G4DWMVQ6-DTBvds5J.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-MMDJMWI5-DlaN_z71.js → diagram-MMDJMWI5-D42e4xzm.js} +1 -1
- package/payload/frontend/dist/assets/{diagram-TYMM5635-C_pSKftn.js → diagram-TYMM5635-BjV43-C_.js} +1 -1
- package/payload/frontend/dist/assets/{erDiagram-SMLLAGMA-C2dL-h3I.js → erDiagram-SMLLAGMA-DE47Ibp_.js} +1 -1
- package/payload/frontend/dist/assets/{flowDiagram-DWJPFMVM-BmXhKWFj.js → flowDiagram-DWJPFMVM-CjGBlzS4.js} +1 -1
- package/payload/frontend/dist/assets/{ganttDiagram-T4ZO3ILL-D_Odnssf.js → ganttDiagram-T4ZO3ILL-vfj40KZi.js} +1 -1
- package/payload/frontend/dist/assets/{gitGraphDiagram-UUTBAWPF-DcQdcwKZ.js → gitGraphDiagram-UUTBAWPF-DT5xfRNb.js} +1 -1
- package/payload/frontend/dist/assets/{graph-C_XsxefA.js → graph-D-AF6yQT.js} +1 -1
- package/payload/frontend/dist/assets/{image-D3hgVr8O.js → image-D9gtSsD9.js} +1 -1
- package/payload/frontend/dist/assets/{index-CEUsFFQq.js → index-BPVP2P-2.js} +95 -105
- package/payload/frontend/dist/assets/{infoDiagram-42DDH7IO-C6TnRyMi.js → infoDiagram-42DDH7IO-C7ew_uLJ.js} +1 -1
- package/payload/frontend/dist/assets/{ishikawaDiagram-UXIWVN3A-BL7rfALJ.js → ishikawaDiagram-UXIWVN3A-B6-YebU9.js} +1 -1
- package/payload/frontend/dist/assets/{journeyDiagram-VCZTEJTY-C_6407GW.js → journeyDiagram-VCZTEJTY-BOFgJDA5.js} +1 -1
- package/payload/frontend/dist/assets/{kanban-definition-6JOO6SKY-CK61Fd0p.js → kanban-definition-6JOO6SKY-jh06wZYz.js} +1 -1
- package/payload/frontend/dist/assets/{layout-DVn6JKbl.js → layout-B4p7V5fB.js} +1 -1
- package/payload/frontend/dist/assets/{linear-DyWskq8H.js → linear-D2JWfvdc.js} +1 -1
- package/payload/frontend/dist/assets/main-CuRgiPQf.js +706 -0
- package/payload/frontend/dist/assets/main-D4_uoZQa.css +33 -0
- package/payload/frontend/dist/assets/{min-apbLpSJ3.js → min--jD4Arnm.js} +1 -1
- package/payload/frontend/dist/assets/{mindmap-definition-QFDTVHPH-MVHZZbma.js → mindmap-definition-QFDTVHPH-DmzjmSuf.js} +1 -1
- package/payload/frontend/dist/assets/{monitoring-BApsVez_.js → monitoring-Tvvk6TfB.js} +1 -1
- package/payload/frontend/dist/assets/{notifications-CjxSNLU1.js → notifications-CqP2AQrW.js} +1 -1
- package/payload/frontend/dist/assets/{pieDiagram-DEJITSTG-Dhbb0AYU.js → pieDiagram-DEJITSTG-B79qIVe5.js} +1 -1
- package/payload/frontend/dist/assets/{quadrantDiagram-34T5L4WZ-Yk6LOF0S.js → quadrantDiagram-34T5L4WZ-DIOj1DhE.js} +1 -1
- package/payload/frontend/dist/assets/{record-content-BCJ80KS5.js → record-content-CzGGCbNs.js} +1 -1
- package/payload/frontend/dist/assets/{requirementDiagram-MS252O5E-BUhS0PEq.js → requirementDiagram-MS252O5E-C-n1j3tN.js} +1 -1
- package/payload/frontend/dist/assets/{sankeyDiagram-XADWPNL6-D2sdxz14.js → sankeyDiagram-XADWPNL6-BVKqWE6C.js} +1 -1
- package/payload/frontend/dist/assets/{sequenceDiagram-FGHM5R23-CRere4Fy.js → sequenceDiagram-FGHM5R23-B980Icqs.js} +1 -1
- package/payload/frontend/dist/assets/{stateDiagram-FHFEXIEX-_pk-OMlm.js → stateDiagram-FHFEXIEX-C-mJHzhL.js} +1 -1
- package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-B4L4fK9G.js +1 -0
- package/payload/frontend/dist/assets/{status-Dk5rRVQF.js → status-Bv4Czr9-.js} +1 -1
- package/payload/frontend/dist/assets/suiji-DyzQqRTE.js +1 -0
- package/payload/frontend/dist/assets/{svg-X7YkMMvx.js → svg-C6Aj62ig.js} +1 -1
- package/payload/frontend/dist/assets/{tabs-BmKbcPVh.js → tabs-BTUOhdAF.js} +1 -1
- package/payload/frontend/dist/assets/{timeline-definition-GMOUNBTQ-BPsI2pMC.js → timeline-definition-GMOUNBTQ-Dr9yRuVq.js} +1 -1
- package/payload/frontend/dist/assets/{vennDiagram-DHZGUBPP-BNJkZ1Az.js → vennDiagram-DHZGUBPP-B0Xsg1-Z.js} +1 -1
- package/payload/frontend/dist/assets/{wardley-RL74JXVD-CVcYeATS.js → wardley-RL74JXVD-BjIKKaA_.js} +1 -1
- package/payload/frontend/dist/assets/{wardleyDiagram-NUSXRM2D-BpLJ0alk.js → wardleyDiagram-NUSXRM2D-DMJ7MEA9.js} +1 -1
- package/payload/frontend/dist/assets/{xychartDiagram-5P7HB3ND-BdsYYk4M.js → xychartDiagram-5P7HB3ND-2tvgfdab.js} +1 -1
- package/payload/frontend/dist/build-info.json +4 -4
- package/payload/frontend/dist/companion.html +1 -1
- package/payload/frontend/dist/index.html +3 -3
- package/payload/packages/agent-bridge/src/install-pi.mjs +81 -0
- package/payload/plugins/pi/dist/SKILL.md +22 -0
- package/payload/plugins/pi/dist/bridge/app-server-client.cjs +82 -0
- package/payload/plugins/pi/dist/bridge/feishu_stop_notify.sh +169 -0
- package/payload/plugins/pi/dist/bridge/runweave-hook-bridge.cjs +583 -0
- package/payload/plugins/pi/dist/bridge/runweave-hook-completion.cjs +42 -0
- package/payload/plugins/pi/dist/bridge/runweave-hook-payload.cjs +578 -0
- package/payload/plugins/pi/dist/bridge/runweave-task-supervision.cjs +167 -0
- package/payload/plugins/pi/dist/runweave.js +316 -0
- package/payload/plugins/toolkit/.codex-plugin/plugin.json +31 -0
- package/payload/plugins/toolkit/README.md +185 -0
- package/payload/plugins/toolkit/hooks/AGENTS.md +6 -0
- package/payload/plugins/toolkit/hooks/app-server-client.cjs +82 -0
- package/payload/plugins/toolkit/hooks/feishu_stop_notify.sh +169 -0
- package/payload/plugins/toolkit/hooks/runweave-hook-bridge.cjs +583 -0
- package/payload/plugins/toolkit/hooks/runweave-hook-completion.cjs +42 -0
- package/payload/plugins/toolkit/hooks/runweave-hook-dispatch.cjs +123 -0
- package/payload/plugins/toolkit/hooks/runweave-hook-payload.cjs +578 -0
- package/payload/plugins/toolkit/hooks/runweave-task-supervision.cjs +167 -0
- package/payload/plugins/toolkit/hooks.json +108 -0
- package/payload/plugins/toolkit/skills/acceptance/SKILL.md +70 -0
- package/payload/plugins/toolkit/skills/acceptance/agents/openai.yaml +4 -0
- package/payload/plugins/toolkit/skills/acceptance/references/capture.md +38 -0
- package/payload/plugins/toolkit/skills/acceptance/references/delivery.md +54 -0
- package/payload/plugins/toolkit/skills/acceptance/references/gallery-contract.md +84 -0
- package/payload/plugins/toolkit/skills/acceptance/references/gallery-copy.md +34 -0
- package/payload/plugins/toolkit/skills/acceptance/references/video.md +52 -0
- package/payload/plugins/toolkit/skills/acceptance/scripts/capture.py +137 -0
- package/payload/plugins/toolkit/skills/acceptance/scripts/common.py +63 -0
- package/payload/plugins/toolkit/skills/acceptance/scripts/gallery.py +353 -0
- package/payload/plugins/toolkit/skills/acceptance/scripts/preview.py +109 -0
- package/payload/plugins/toolkit/skills/acceptance/scripts/video.py +283 -0
- package/payload/plugins/toolkit/skills/acceptance/templates/reader.css +576 -0
- package/payload/plugins/toolkit/skills/acceptance/templates/reader.html +63 -0
- package/payload/plugins/toolkit/skills/acceptance/templates/reader.js +326 -0
- package/payload/plugins/toolkit/skills/acceptance/templates/viewer.css +55 -0
- package/payload/plugins/toolkit/skills/acceptance-gallery/SKILL.md +8 -0
- package/payload/plugins/toolkit/skills/acceptance-gallery/agents/openai.yaml +6 -0
- package/payload/plugins/toolkit/skills/acceptance-gallery/references/capture-and-copy.md +3 -0
- package/payload/plugins/toolkit/skills/acceptance-gallery/references/content-contract.md +3 -0
- package/payload/plugins/toolkit/skills/acceptance-gallery/scripts/gallery.py +9 -0
- package/payload/plugins/toolkit/skills/acceptance-video/SKILL.md +8 -0
- package/payload/plugins/toolkit/skills/acceptance-video/agents/openai.yaml +6 -0
- package/payload/plugins/toolkit/skills/acceptance-video/references/input-and-capture.md +3 -0
- package/payload/plugins/toolkit/skills/acceptance-video/references/mobile-review.md +3 -0
- package/payload/plugins/toolkit/skills/acceptance-video/scripts/capture.py +9 -0
- package/payload/plugins/toolkit/skills/acceptance-video/scripts/video.py +9 -0
- package/payload/plugins/toolkit/skills/agent-device/SKILL.md +86 -0
- package/payload/plugins/toolkit/skills/agent-device/agents/openai.yaml +4 -0
- package/payload/plugins/toolkit/skills/agent-device/references/ios-setup.md +36 -0
- package/payload/plugins/toolkit/skills/agent-device/scripts/device.py +398 -0
- package/payload/plugins/toolkit/skills/agent-device/scripts/resources.py +248 -0
- package/payload/plugins/toolkit/skills/architecture-flow-prototyping/SKILL.md +128 -0
- package/payload/plugins/toolkit/skills/architecture-flow-prototyping/agents/openai.yaml +4 -0
- package/payload/plugins/toolkit/skills/architecture-flow-prototyping/references/architecture-flow-checklist.md +59 -0
- package/payload/plugins/toolkit/skills/architecture-flow-prototyping/references/architecture-flow-guide.md +135 -0
- package/payload/plugins/toolkit/skills/architecture-flow-prototyping/references/architecture-flow-handoff-template.md +57 -0
- package/payload/plugins/toolkit/skills/ask-first/SKILL.md +81 -0
- package/payload/plugins/toolkit/skills/brainstorming/SKILL.md +41 -0
- package/payload/plugins/toolkit/skills/browse-record/SKILL.md +35 -0
- package/payload/plugins/toolkit/skills/browse-record/references/app-usage.md +19 -0
- package/payload/plugins/toolkit/skills/browse-record/references/daily-reporting.md +115 -0
- package/payload/plugins/toolkit/skills/browse-record/references/zhihu.md +33 -0
- package/payload/plugins/toolkit/skills/browse-record/scripts/app_usage.py +110 -0
- package/payload/plugins/toolkit/skills/browse-record/scripts/browse_job.py +385 -0
- package/payload/plugins/toolkit/skills/browse-record/scripts/zhihu-read.js +126 -0
- package/payload/plugins/toolkit/skills/browse-record/scripts/zhihu_http.py +273 -0
- package/payload/plugins/toolkit/skills/clear-technical-explanations/LICENSE +21 -0
- package/payload/plugins/toolkit/skills/clear-technical-explanations/SKILL.md +103 -0
- package/payload/plugins/toolkit/skills/code-grounded-requirements/SKILL.md +54 -0
- package/payload/plugins/toolkit/skills/daily-doc-maintenance/SKILL.md +151 -0
- package/payload/plugins/toolkit/skills/daily-record/SKILL.md +63 -0
- package/payload/plugins/toolkit/skills/daily-record/agents/openai.yaml +4 -0
- package/payload/plugins/toolkit/skills/daily-record/references/browser-history.md +6 -0
- package/payload/plugins/toolkit/skills/daily-record/references/feishu.md +90 -0
- package/payload/plugins/toolkit/skills/daily-record/references/scheduled-reporting.md +144 -0
- package/payload/plugins/toolkit/skills/daily-record/references/scheduled-task.template.json +15 -0
- package/payload/plugins/toolkit/skills/daily-record/references/suiji-work-records.md +57 -0
- package/payload/plugins/toolkit/skills/daily-record/scripts/feishu.py +280 -0
- package/payload/plugins/toolkit/skills/daily-record/scripts/job.py +416 -0
- package/payload/plugins/toolkit/skills/daily-record/scripts/job_browser.py +77 -0
- package/payload/plugins/toolkit/skills/daily-record/scripts/job_facts.py +132 -0
- package/payload/plugins/toolkit/skills/daily-record/scripts/job_isolation.py +69 -0
- package/payload/plugins/toolkit/skills/daily-record/scripts/job_materials.py +154 -0
- package/payload/plugins/toolkit/skills/daily-record/scripts/job_screen.py +77 -0
- package/payload/plugins/toolkit/skills/daily-record/scripts/job_state.py +309 -0
- package/payload/plugins/toolkit/skills/daily-refactor/SKILL.md +101 -0
- package/payload/plugins/toolkit/skills/daily-refactor/scripts/compare-architecture-reports.mjs +168 -0
- package/payload/plugins/toolkit/skills/debugging-strategies/SKILL.md +38 -0
- package/payload/plugins/toolkit/skills/debugging-strategies/resources/implementation-playbook.md +520 -0
- package/payload/plugins/toolkit/skills/diagnostic-log-debugging/SKILL.md +79 -0
- package/payload/plugins/toolkit/skills/doc-coauthoring/SKILL.md +64 -0
- package/payload/plugins/toolkit/skills/eli5/LICENSE +21 -0
- package/payload/plugins/toolkit/skills/eli5/SKILL.md +18 -0
- package/payload/plugins/toolkit/skills/experience/SKILL.md +71 -0
- package/payload/plugins/toolkit/skills/experience/package.json +13 -0
- package/payload/plugins/toolkit/skills/git-advanced-workflows/SKILL.md +457 -0
- package/payload/plugins/toolkit/skills/github-pr/SKILL.md +109 -0
- package/payload/plugins/toolkit/skills/github-pr/scripts/github-access.mjs +292 -0
- package/payload/plugins/toolkit/skills/github-pr/scripts/preflight.mjs +191 -0
- package/payload/plugins/toolkit/skills/github-pr/scripts/source-worktree.mjs +354 -0
- package/payload/plugins/toolkit/skills/grill-with-docs/SKILL.md +66 -0
- package/payload/plugins/toolkit/skills/grill-with-docs/agents/openai.yaml +6 -0
- package/payload/plugins/toolkit/skills/grilling/SKILL.md +14 -0
- package/payload/plugins/toolkit/skills/handoff/SKILL.md +98 -0
- package/payload/plugins/toolkit/skills/karpathy-guidelines/SKILL.md +73 -0
- package/payload/plugins/toolkit/skills/playwright-cli/SKILL.md +562 -0
- package/payload/plugins/toolkit/skills/playwright-cli/references/element-attributes.md +23 -0
- package/payload/plugins/toolkit/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/payload/plugins/toolkit/skills/playwright-cli/references/request-mocking.md +87 -0
- package/payload/plugins/toolkit/skills/playwright-cli/references/running-code.md +240 -0
- package/payload/plugins/toolkit/skills/playwright-cli/references/session-management.md +226 -0
- package/payload/plugins/toolkit/skills/playwright-cli/references/spec-driven-testing.md +312 -0
- package/payload/plugins/toolkit/skills/playwright-cli/references/storage-state.md +275 -0
- package/payload/plugins/toolkit/skills/playwright-cli/references/test-generation.md +138 -0
- package/payload/plugins/toolkit/skills/playwright-cli/references/tracing.md +142 -0
- package/payload/plugins/toolkit/skills/playwright-cli/references/video-recording.md +157 -0
- package/payload/plugins/toolkit/skills/playwright-cli/templates/standalone.config.json +7 -0
- package/payload/plugins/toolkit/skills/product-exploration/SKILL.md +64 -0
- package/payload/plugins/toolkit/skills/product-exploration/agents/openai.yaml +5 -0
- package/payload/plugins/toolkit/skills/prototype-first-development/SKILL.md +134 -0
- package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/README.md +88 -0
- package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/app.js +145 -0
- package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/index.html +229 -0
- package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/mock-state.json +60 -0
- package/payload/plugins/toolkit/skills/prototype-first-development/references/implementation-plan-handoff-template.md +61 -0
- package/payload/plugins/toolkit/skills/prototype-first-development/references/prototype-workflow-checklist.md +64 -0
- package/payload/plugins/toolkit/skills/publish-runweave-server/SKILL.md +69 -0
- package/payload/plugins/toolkit/skills/publish-runweave-server/agents/openai.yaml +4 -0
- package/payload/plugins/toolkit/skills/react-best-practices/AGENTS.md +3227 -0
- package/payload/plugins/toolkit/skills/react-best-practices/README.md +127 -0
- package/payload/plugins/toolkit/skills/react-best-practices/SKILL.md +143 -0
- package/payload/plugins/toolkit/skills/react-best-practices/metadata.json +15 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/advanced/event-handler-refs.md +55 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/advanced/init-once.md +42 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/advanced/use-latest.md +39 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/async/api-routes.md +38 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/async/defer-await.md +80 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/async/dependencies.md +52 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/async/parallel.md +28 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/async/suspense-boundaries.md +99 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/barrel-imports.md +59 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/conditional.md +37 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/defer-third-party.md +49 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/dynamic-imports.md +35 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/preload.md +46 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/client/event-listeners.md +78 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/client/localstorage-schema.md +77 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/client/passive-event-listeners.md +48 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/client/swr-dedup.md +56 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/batch-dom-css.md +110 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/cache-function-results.md +80 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/cache-property-access.md +28 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/cache-storage.md +70 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/combine-iterations.md +32 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/early-exit.md +50 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/flatmap-filter.md +55 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/hoist-regexp.md +45 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/index-maps.md +37 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/length-check-first.md +50 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/min-max-loop.md +82 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/set-map-lookups.md +24 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/js/tosorted-immutable.md +57 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/meta/sections.md +46 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/meta/template.md +28 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/activity.md +26 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/animate-svg-wrapper.md +38 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/conditional-render.md +32 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/content-visibility.md +38 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/hoist-jsx.md +36 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/hydration-no-flicker.md +72 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/hydration-suppress-warning.md +26 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/resource-hints.md +89 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/script-defer-async.md +71 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/svg-precision.md +28 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/usetransition-loading.md +75 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/defer-reads.md +39 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/dependencies.md +45 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/derived-state-no-effect.md +40 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/derived-state.md +29 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/functional-setstate.md +77 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/lazy-state-init.md +58 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/memo-with-default-value.md +36 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/memo.md +44 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/move-effect-to-event.md +45 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/no-inline-components.md +83 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/simple-expression-in-memo.md +35 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/transitions.md +40 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/use-ref-transient-values.md +73 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/server/after-nonblocking.md +74 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/server/auth-actions.md +96 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/server/cache-lru.md +41 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/server/cache-react.md +76 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/server/dedup-props.md +65 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/server/hoist-static-io.md +139 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/server/parallel-fetching.md +83 -0
- package/payload/plugins/toolkit/skills/react-best-practices/rules/server/serialization.md +38 -0
- package/payload/plugins/toolkit/skills/recorded-browser-mcp-verification/SKILL.md +8 -0
- package/payload/plugins/toolkit/skills/recorded-browser-mcp-verification/agents/openai.yaml +6 -0
- package/payload/plugins/toolkit/skills/reproduce-before-fix/SKILL.md +93 -0
- package/payload/plugins/toolkit/skills/reproduce-before-fix/agents/openai.yaml +7 -0
- package/payload/plugins/toolkit/skills/review-only/SKILL.md +72 -0
- package/payload/plugins/toolkit/skills/review-with-runtime-evidence/SKILL.md +134 -0
- package/payload/plugins/toolkit/skills/review-with-runtime-evidence/agents/openai.yaml +7 -0
- package/payload/plugins/toolkit/skills/review-with-runtime-evidence/references/contracts.md +114 -0
- package/payload/plugins/toolkit/skills/review-with-runtime-evidence/scripts/classify-runtime-verdict.mjs +140 -0
- package/payload/plugins/toolkit/skills/review-with-runtime-evidence/scripts/run-static-review.mjs +389 -0
- package/payload/plugins/toolkit/skills/review-with-runtime-evidence/scripts/static-review-contract.mjs +243 -0
- package/payload/plugins/toolkit/skills/run-test-cases/SKILL.md +63 -0
- package/payload/plugins/toolkit/skills/runweave-change-validation/SKILL.md +196 -0
- package/payload/plugins/toolkit/skills/runweave-change-validation/agents/openai.yaml +7 -0
- package/payload/plugins/toolkit/skills/runweave-change-validation/scripts/assert-dev-session-status.mjs +181 -0
- package/payload/plugins/toolkit/skills/runweave-dev-session/SKILL.md +126 -0
- package/payload/plugins/toolkit/skills/runweave-dev-session/agents/openai.yaml +7 -0
- package/payload/plugins/toolkit/skills/runweave-management/SKILL.md +47 -0
- package/payload/plugins/toolkit/skills/scheduled-task/SKILL.md +35 -0
- package/payload/plugins/toolkit/skills/shadcn/SKILL.md +245 -0
- package/payload/plugins/toolkit/skills/shadcn/agents/openai.yml +5 -0
- package/payload/plugins/toolkit/skills/shadcn/assets/shadcn-small.png +0 -0
- package/payload/plugins/toolkit/skills/shadcn/assets/shadcn.png +0 -0
- package/payload/plugins/toolkit/skills/shadcn/cli.md +276 -0
- package/payload/plugins/toolkit/skills/shadcn/customization.md +209 -0
- package/payload/plugins/toolkit/skills/shadcn/evals/evals.json +47 -0
- package/payload/plugins/toolkit/skills/shadcn/mcp.md +94 -0
- package/payload/plugins/toolkit/skills/shadcn/rules/base-vs-radix.md +310 -0
- package/payload/plugins/toolkit/skills/shadcn/rules/composition.md +197 -0
- package/payload/plugins/toolkit/skills/shadcn/rules/forms.md +198 -0
- package/payload/plugins/toolkit/skills/shadcn/rules/icons.md +101 -0
- package/payload/plugins/toolkit/skills/shadcn/rules/styling.md +163 -0
- package/payload/plugins/toolkit/skills/suiji/SKILL.md +54 -0
- package/payload/plugins/toolkit/skills/suiji/references/api.md +72 -0
- package/payload/plugins/toolkit/skills/suiji/references/source-adapter.md +40 -0
- package/payload/plugins/toolkit/skills/suiji/references/work-records.md +36 -0
- package/payload/plugins/toolkit/skills/suiji/scripts/source_adapter.py +46 -0
- package/payload/plugins/toolkit/skills/suiji/scripts/suiji.py +358 -0
- package/payload/plugins/toolkit/skills/suiji/scripts/work_records.py +328 -0
- package/payload/plugins/toolkit/skills/suiji/scripts/work_reports.py +75 -0
- package/payload/plugins/toolkit/skills/sync-branch-hard-reset/SKILL.md +59 -0
- package/payload/plugins/toolkit/skills/update-runweave-backend/SKILL.md +90 -0
- package/payload/plugins/toolkit/skills/update-runweave-backend/agents/openai.yaml +4 -0
- package/payload/plugins/toolkit/skills/update-runweave-backend/references/npm-update.md +68 -0
- package/payload/plugins/toolkit/skills/update-runweave-backend/references/systemd.md +34 -0
- package/payload/plugins/toolkit/skills/update-runweave-desktop/SKILL.md +102 -0
- package/payload/plugins/toolkit/skills/update-runweave-ios/SKILL.md +16 -0
- package/payload/plugins/toolkit/skills/update-runweave-ios/references/ios-wireless-recovery.md +54 -0
- package/payload/plugins/toolkit/skills/using-rw/SKILL.md +265 -0
- package/payload/plugins/toolkit/skills/write-plan/SKILL.md +72 -0
- package/payload/plugins/toolkit/skills/write-test-cases/SKILL.md +100 -0
- package/payload/plugins/toolkit/skills/write-test-cases/assets/test-plan-template.yaml +15 -0
- package/payload/plugins/toolkit/skills/write-test-cases/references/coverage-checklist.md +75 -0
- package/payload/plugins/toolkit/skills/write-test-cases/references/design-techniques.md +91 -0
- package/payload/plugins/toolkit/skills/youtube-reading/SKILL.md +35 -0
- package/payload/plugins/toolkit/skills/youtube-reading/agents/openai.yaml +4 -0
- package/payload/plugins/toolkit/skills/youtube-reading/assets/runtime-lock.json +92 -0
- package/payload/plugins/toolkit/skills/youtube-reading/references/content-contract.md +52 -0
- package/payload/plugins/toolkit/skills/youtube-reading/references/setup.md +70 -0
- package/payload/plugins/toolkit/skills/youtube-reading/requirements.lock +9 -0
- package/payload/plugins/toolkit/skills/youtube-reading/scripts/artifacts.py +206 -0
- package/payload/plugins/toolkit/skills/youtube-reading/scripts/runtime.py +424 -0
- package/payload/plugins/toolkit/skills/youtube-reading/scripts/youtube_reading.py +314 -0
- package/payload/plugins/toolkit-release.json +1 -0
- package/payload/pty-host/index.cjs +99 -31
- package/payload/scripts/toolkit/codex-state.mjs +75 -0
- package/payload/scripts/toolkit/release.mjs +210 -0
- package/payload/scripts/toolkit/sync-runtime.mjs +108 -0
- package/payload/scripts/toolkit/sync.mjs +585 -0
- package/payload/server/index.cjs +5 -1
- package/payload/frontend/dist/assets/channel-Bf3IeONI.js +0 -1
- package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-CFsG2SvG.js +0 -1
- package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-CFsG2SvG.js +0 -1
- package/payload/frontend/dist/assets/clone-CeQXm2YN.js +0 -1
- package/payload/frontend/dist/assets/connection-XriXysSc.js +0 -12
- package/payload/frontend/dist/assets/main-Cg6Oo1xK.css +0 -33
- package/payload/frontend/dist/assets/main-H5R-3_w1.js +0 -696
- package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-CzpdUl_0.js +0 -1
- package/payload/frontend/dist/assets/suiji-CO_L5W1X.js +0 -1
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: runweave-change-validation
|
|
3
|
+
description: 仅当用户在当前请求中显式指定 $toolkit:runweave-change-validation 时使用;不要因普通代码修改、Bug 修复、功能实现、重构、共享协议、服务生命周期、UI 或 CDP 验收自动触发。被显式调用后,根据真实 diff 通过 Dev Session 规划、启动、发现并清理隔离验证环境。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Runweave 变更验证
|
|
7
|
+
|
|
8
|
+
把 Dev Session 当作代码改完后的环境裁决器,而不是编码前猜测 profile 的工具。
|
|
9
|
+
|
|
10
|
+
## 触发边界
|
|
11
|
+
|
|
12
|
+
- 仅当用户在当前请求中显式点名 `$toolkit:runweave-change-validation` 时使用本技能。
|
|
13
|
+
- 未显式点名时,不因代码修改、Bug 修复、功能实现、重构、运行行为、共享协议、服务生命周期、UI 或 CDP 验收而自动使用。
|
|
14
|
+
- 显式调用只对当前请求有效,不跨请求或后续轮次延续。
|
|
15
|
+
- “提交所有代码”、调用 `$toolkit:github-pr`,或 diff 涉及 UI、Backend、共享协议与服务生命周期,
|
|
16
|
+
都不构成显式调用。
|
|
17
|
+
- 未调用本技能时,不执行本技能定义的 diff 规划、隔离 Worktree、Dev Session、UI/CDP 验收或
|
|
18
|
+
Before/After 取证。纯提交、推送或 PR 流程只处理 Git 操作自然触发的已有 hook 与远端 CI,
|
|
19
|
+
不从改动范围推导额外验证。
|
|
20
|
+
|
|
21
|
+
## 必需技能
|
|
22
|
+
|
|
23
|
+
- 实际执行任何 Dev Session planner、start、status、open、attach、recovery 或 stop 操作时,同时使用 `$toolkit:runweave-dev-session`。本技能负责 patch 边界、完整验收和证据合同;该技能负责准确的 Session 生命周期。
|
|
24
|
+
- 因脏工作区需要创建、检查或移除隔离 Worktree 时,同时使用 `$toolkit:git-advanced-workflows`。本技能决定 patch 与验证时序;该技能负责 Git Worktree 的规范路径、身份检查和精确清理。
|
|
25
|
+
|
|
26
|
+
## 不可变边界
|
|
27
|
+
|
|
28
|
+
- 始终从 Stable terminal 执行命令;所有 Dev Session profile 都只是被测面。
|
|
29
|
+
- 第一次 dry-run 不显式指定 profile。先让真实 diff 给出最低影响闭包。
|
|
30
|
+
- 可以因用户明确的安装态、跨版本或桌面验收目标提升 profile;禁止向下降级或绕过 planner。
|
|
31
|
+
- 未提交代码的验证环境只允许通过 `pnpm dev:session` 启动,并只用 `dev:status`、`dev:open`、`dev:stop` 管理生命周期。Agent 直接调用 Backend、App Server、Electron、Beta、手工 profile/端口或任何跳过 planner 的入口都视为绕过;Dev Session 内部调用的 adapter 不受此限制。
|
|
32
|
+
- 当前工作区有无关改动时,使用只包含本次 patch 的独立 Worktree;新建路径固定为任务绑定父 Project 的 `<projectRoot>/.worktree/<validationName>` 直接子目录,禁止 `/tmp`、`/private/tmp`、仓库同级、`.trae/worktrees`、工具私有目录或嵌套 `.worktree`;禁止 stash、reset 或混入他人改动。
|
|
33
|
+
- 浏览器与桌面行为必须真实取证,静态检查不能代替行为验收。
|
|
34
|
+
- Runweave UI/浏览器验收只能显式附着 `dev:open` 返回的 CDP endpoint。禁止使用 `playwright-cli open`、系统浏览器、headless 浏览器、默认 endpoint、环境变量或既有无关 Playwright session 代替目标 surface。
|
|
35
|
+
|
|
36
|
+
## 与真实复现的交接契约
|
|
37
|
+
|
|
38
|
+
与 `$toolkit:reproduce-before-fix` 组合时,先接收并固定:
|
|
39
|
+
|
|
40
|
+
- `validationSessionId`:修复前后共用的 Dev Session 逻辑身份;
|
|
41
|
+
- `scenarioId`:需要原样重跑的用户场景;
|
|
42
|
+
- 修复前 revision、完整步骤、输入和 `before/` 证据路径;
|
|
43
|
+
- 修复前 `dev:status` / `dev:open` 关键身份;若来自既有用户现场,则接收 `sourceSessionId` 映射。
|
|
44
|
+
|
|
45
|
+
修复前 Dev Session 必须先 `dev:stop`,并在重用 ID 前归档 before manifest 关键字段,因为同 ID 再次启动会更新 manifest。修复后继续使用同一个 `validationSessionId`,不得另取随机 ID。service instance ID、PID 和 endpoint 可以变化,需分别记录以证明两轮都属于正确 target。
|
|
46
|
+
|
|
47
|
+
如果修复前来自不可替换的既有用户 session,保留原 `sourceSessionId`,修复后使用既定的 `validationSessionId`;最终明确说明不同 ID 的原因,不把它伪装成同环境复测。
|
|
48
|
+
|
|
49
|
+
## Session ID 生成规则
|
|
50
|
+
|
|
51
|
+
禁止自行使用 UUID、完整时间戳、问题标题或临时字符串作为 session ID。
|
|
52
|
+
|
|
53
|
+
- 默认:第一次实际执行 `dev:session start` 时不传 `--session`,从 JSON 结果捕获 `devSessionId`,立即保存为 `validationSessionId`;后续 `status`、`open`、`stop` 和修复后重启全部显式传入该 ID。
|
|
54
|
+
- 必须预先声明 ID:使用 `rcv-YYYYMMDD-<hash6>`。`hash6` 固定取 `SHA-256("<baselineRevision>\n<scenarioId>")` 前 6 位小写十六进制,例如 `rcv-20260712-a1b2c3`;禁止 `Math.random`、UUID、随意截 commit 或其它来源。只生成一次,并在第一次 start 前写入交接记录。
|
|
55
|
+
- 从 `$toolkit:reproduce-before-fix` 接收到 ID:直接复用,不重新生成。
|
|
56
|
+
|
|
57
|
+
创建证据根目录时使用最终捕获的 ID,不用“latest”、端口或 PID 代替。
|
|
58
|
+
|
|
59
|
+
## 执行流程
|
|
60
|
+
|
|
61
|
+
### 1. 固定本次 patch 边界
|
|
62
|
+
|
|
63
|
+
代码修改完成后读取 `git status --short`、任务开始前状态和当前 diff,区分本次文件与既有改动。
|
|
64
|
+
|
|
65
|
+
若工作区不干净且包含无关改动:
|
|
66
|
+
|
|
67
|
+
1. 使用 `$toolkit:git-advanced-workflows`,从当前基线 commit 创建 detached 隔离 Worktree,路径为任务绑定父 Project 的 `<projectRoot>/.worktree/<validationName>`;若当前 cwd 已是该父 Project 的子 Worktree,则创建同级子 Worktree,禁止继续嵌套。
|
|
68
|
+
2. 通过 Git Worktree 登记和 realpath 确认 source root 是 `.worktree` 下的直接子目录,且没有路径或分支身份冲突。
|
|
69
|
+
3. 只把本次任务文件的 patch 应用到该 Worktree。
|
|
70
|
+
4. 在该 Worktree 安装依赖并执行后续 Dev Session 命令。
|
|
71
|
+
|
|
72
|
+
无法可靠区分 patch 边界时停止,不把整个脏工作区当作本次影响范围。
|
|
73
|
+
|
|
74
|
+
### 2. 让 planner 裁决最低环境
|
|
75
|
+
|
|
76
|
+
在只包含本次 patch 的 source root 中先运行:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
pnpm dev:session --dry-run --json
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
检查 `changedFiles`、`impacts`、`requiredProfile`、每项服务的 `ownership` 和目标 surface。
|
|
83
|
+
|
|
84
|
+
若结果高于预期,先反查实现是否无意修改公共契约、安装运行时或扩大消费者闭包。能收缩实现则修改代码并重新 dry-run;不能收缩则接受 planner 结果。不要用显式低 profile 压过影响闭包。
|
|
85
|
+
|
|
86
|
+
### 3. 启动并核对身份
|
|
87
|
+
|
|
88
|
+
按 Session ID 生成规则得到 `validationSessionId`,再按 planner 结果启动 Dev Session。与 `$toolkit:reproduce-before-fix` 组合时必须使用其交接的 ID;单独使用本技能时默认捕获 Dev Session 自动生成的 ID。用户明确要求更高环境时才显式提升 profile。
|
|
89
|
+
|
|
90
|
+
启动后执行:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
pnpm dev:status --session <id> --json
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
将纯 JSON 状态保存为证据,并使用本技能的 `scripts/assert-dev-session-status.mjs` 做机器断言:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
node ./scripts/dev-session/cli.mjs status --session <id> --json > <status.json>
|
|
100
|
+
node <skill-dir>/scripts/assert-dev-session-status.mjs \
|
|
101
|
+
--file <status.json> \
|
|
102
|
+
--session <id> \
|
|
103
|
+
--source-root <patch-worktree> \
|
|
104
|
+
--profile <profile> \
|
|
105
|
+
--surface <surface>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
脚本必须输出 `healthy: true`;失败时停止,不用人工目测覆盖脚本结论。
|
|
109
|
+
|
|
110
|
+
必须确认:
|
|
111
|
+
|
|
112
|
+
- `controlPlane.appChannel` 是 `stable`;
|
|
113
|
+
- source root、revision 和 dirty 状态对应本次 patch;
|
|
114
|
+
- target profile 与验收目标一致;
|
|
115
|
+
- dedicated/shared ownership 符合 planner;
|
|
116
|
+
- Backend、App Server、Electron/CDP 的 service identity 与 health 均匹配 manifest。
|
|
117
|
+
|
|
118
|
+
任一 dedicated 服务发生身份漂移、隐式 fallback 或能力退化时停止验收。比如 pane 归属用例要求 tmux,却实际退化为 PTY,不能继续把结果算作通过。
|
|
119
|
+
|
|
120
|
+
### 4. 从 Dev Session 解析并附着验收入口
|
|
121
|
+
|
|
122
|
+
根据行为所在层选择 surface:
|
|
123
|
+
|
|
124
|
+
- Electron 主窗口和终端标签:`desktop` CDP;
|
|
125
|
+
- 终端右侧内嵌 Browser:`terminal-browser` CDP;
|
|
126
|
+
- Web 主页面:先用 `web` 取得 URL;需要用户可见的右侧验收时,再用 `terminal-browser` 取得 CDP endpoint,把该 URL 导航到本次新建的内嵌 Browser tab。
|
|
127
|
+
|
|
128
|
+
对每个所需 surface 分别运行:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
pnpm dev:open --session <id> --surface <surface> --json
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
`desktop` 和 `terminal-browser` 的 JSON 必须包含 `health: "ready"`、与目标 Session 一致的 `devSessionId`、`serviceInstanceId`、`endpoint` 和 `suggestedPlaywrightSession`。使用返回值显式附着:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
playwright-cli -s="<suggestedPlaywrightSession>" attach --cdp="<endpoint>"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
不得省略 `--cdp`,不得把 `PLAYWRIGHT_MCP_CDP_ENDPOINT`、默认端口、最近实例、旧 tab 或另一个 Playwright session 当成目标来源。不得执行 `playwright-cli open`;它会创建独立浏览器,不能证明结果来自 Runweave 的目标实例或用户可见 surface。
|
|
141
|
+
|
|
142
|
+
附着后的操作与清理按 surface 区分:
|
|
143
|
+
|
|
144
|
+
- `desktop`:读取 tab/page 列表并选择目标 Electron renderer;验收后只执行 `playwright-cli -s="<session>" detach`,不得关闭 page、窗口或 App。
|
|
145
|
+
- `terminal-browser`:先保存现有 tab 列表和原活动 tab,再新建一个本次验收专属 tab;只在该 tab 中导航、操作和取证。验收后关闭这个专属 tab,必要时恢复原活动 tab,再执行 `detach`;不得关闭用户已有 tab 或外部 Browser。
|
|
146
|
+
- 右侧 Web 验收:同时保存 `dev:open --surface web` 返回的 URL 和 `dev:open --surface terminal-browser` 返回的 CDP endpoint;附着 `terminal-browser` 后新建专属 tab 并导航到 Web URL。不得把 URL 交给 `playwright-cli open` 或系统浏览器。
|
|
147
|
+
|
|
148
|
+
若 attach 失败、endpoint 身份不匹配,或 planner/profile 没有提供用户要求的 CDP surface,立即停止行为验收并报告环境阻塞。可以因为明确的验收目标提升 profile 后重新规划,但不得静默回退到独立、系统级或 headless 浏览器。
|
|
149
|
+
|
|
150
|
+
桌面启动、系统弹窗或菜单准备使用 `$computer-use`;页面 DOM、点击、输入、刷新和截图使用 `$toolkit:playwright-cli`。每轮证据至少记录 `validationSessionId`、surface、`serviceInstanceId`、CDP endpoint、Playwright session 名、目标 page/tab URL,以及 DOM 或截图证据。
|
|
151
|
+
|
|
152
|
+
### 5. 执行真实场景
|
|
153
|
+
|
|
154
|
+
按需求运行真实入口和生产代码路径。若本任务组合了 `$toolkit:reproduce-before-fix`,使用同一个 `scenarioId`,保持用户步骤、输入、数据规模和关键时序不变,原样重跑复现场景,再补受影响回归。
|
|
155
|
+
|
|
156
|
+
将运行前、运行中和运行后的关键状态写入与 `before/` 同级的 `after/`,包括必要的 session/pane、事件、manifest identity、DOM 和截图证据。只验证本次影响闭包,不顺手扩大验收范围。
|
|
157
|
+
|
|
158
|
+
### 6. 清理与交付
|
|
159
|
+
|
|
160
|
+
验收完成或失败后都执行:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
pnpm dev:stop --session <id> --json
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
只停止 manifest 中由该 Session 拥有的 dedicated 服务;不停止 shared 服务。停止后最多等待 10 秒确认状态进入 `stopped` 且目标端口/CDP 不再监听,再使用 `$toolkit:git-advanced-workflows` 移除本次精确的隔离 Worktree;不得强制移除 dirty Worktree,也不得执行全局 `git worktree prune`。
|
|
167
|
+
|
|
168
|
+
10 秒后仍未清理完成时停止等待:重新保存 `dev:status --json`,用 `lsof -nP -iTCP:<port> -sTCP:LISTEN` 记录占用进程并报告环境阻塞。不要无限轮询、按端口盲杀或移除仍被运行服务使用的 worktree。
|
|
169
|
+
|
|
170
|
+
最终报告必须包含:
|
|
171
|
+
|
|
172
|
+
- planner 的最低 profile 与影响原因;
|
|
173
|
+
- 实际使用的 target profile、ownership 和 surface;
|
|
174
|
+
- `dev:status` / `dev:open` 的关键身份;
|
|
175
|
+
- `playwright-cli attach` 使用的 CDP endpoint、Playwright session、目标 page/tab,以及只清理本次 tab 后成功 `detach` 的结果;
|
|
176
|
+
- 真实验收结果与证据;
|
|
177
|
+
- 同一个 `validationSessionId` 下的 Before/After 对照;
|
|
178
|
+
- `dev:stop` 和资源清理结果;
|
|
179
|
+
- 未执行项及阻塞原因。
|
|
180
|
+
|
|
181
|
+
至少并列呈现以下字段:
|
|
182
|
+
|
|
183
|
+
| 字段 | Before | After |
|
|
184
|
+
| --------------- | ------------------------------------ | ---------------------------------- |
|
|
185
|
+
| revision | 修复前 revision | 修复后 revision |
|
|
186
|
+
| session | `validationSessionId` 或 source 映射 | 同一 `validationSessionId` |
|
|
187
|
+
| target identity | profile、service identity、surface | profile、service identity、surface |
|
|
188
|
+
| 场景 | `scenarioId`、步骤、输入 | 原样重跑结果 |
|
|
189
|
+
| 可观察结果 | 原始症状 | 修复后结果 |
|
|
190
|
+
| 证据 | `before/` 路径 | `after/` 路径 |
|
|
191
|
+
|
|
192
|
+
## 例外
|
|
193
|
+
|
|
194
|
+
- 纯诊断、只读评审:不修改代码,也不创建 Dev Session。
|
|
195
|
+
- 纯文档改动:执行文档自身校验,不启动运行环境。
|
|
196
|
+
- Dev Session 明确不支持所需 target:报告环境阻塞,不自行搭建平行环境;需要扩大机制时先与用户对齐。
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
|
|
6
|
+
const args = parseArgs(process.argv.slice(2));
|
|
7
|
+
const status = JSON.parse(readFileSync(args.file, "utf8"));
|
|
8
|
+
const errors = [];
|
|
9
|
+
const checkedServices = [];
|
|
10
|
+
|
|
11
|
+
expectEqual(status.devSessionId, args.session, "devSessionId", errors);
|
|
12
|
+
expectEqual(status.state, "ready", "state", errors);
|
|
13
|
+
expectEqual(
|
|
14
|
+
status.controlPlane?.appChannel,
|
|
15
|
+
"stable",
|
|
16
|
+
"controlPlane.appChannel",
|
|
17
|
+
errors,
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
if (
|
|
21
|
+
typeof status.source?.root !== "string" ||
|
|
22
|
+
path.resolve(status.source.root) !== path.resolve(args.sourceRoot)
|
|
23
|
+
) {
|
|
24
|
+
errors.push(
|
|
25
|
+
`source.root mismatch: expected ${path.resolve(args.sourceRoot)}, received ${String(status.source?.root)}`,
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
if (typeof status.source?.revision !== "string" || !status.source.revision) {
|
|
29
|
+
errors.push("source.revision must be present");
|
|
30
|
+
}
|
|
31
|
+
if (args.profile) {
|
|
32
|
+
expectEqual(status.profile, args.profile, "profile", errors);
|
|
33
|
+
expectEqual(
|
|
34
|
+
status.targetEnvironment?.kind,
|
|
35
|
+
args.profile,
|
|
36
|
+
"targetEnvironment.kind",
|
|
37
|
+
errors,
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
if (
|
|
41
|
+
args.surface &&
|
|
42
|
+
!status.targetEnvironment?.acceptanceSurfaces?.includes(args.surface)
|
|
43
|
+
) {
|
|
44
|
+
errors.push(`targetEnvironment does not include surface ${args.surface}`);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
for (const [name, service] of listServices(status.services)) {
|
|
48
|
+
checkedServices.push(name);
|
|
49
|
+
validateService(name, service, args.session, status.source?.revision, errors);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const result = {
|
|
53
|
+
healthy: errors.length === 0,
|
|
54
|
+
devSessionId: status.devSessionId ?? null,
|
|
55
|
+
profile: status.profile ?? null,
|
|
56
|
+
checkedServices,
|
|
57
|
+
errors,
|
|
58
|
+
};
|
|
59
|
+
process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
60
|
+
if (errors.length > 0) {
|
|
61
|
+
process.exitCode = 1;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function parseArgs(values) {
|
|
65
|
+
const options = {};
|
|
66
|
+
for (let index = 0; index < values.length; index += 2) {
|
|
67
|
+
const flag = values[index];
|
|
68
|
+
const value = values[index + 1];
|
|
69
|
+
if (!value || !flag?.startsWith("--")) {
|
|
70
|
+
fail(
|
|
71
|
+
"usage: assert-dev-session-status.mjs --file <path> --session <id> --source-root <path> --profile <profile> --surface <surface>",
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
const key = flag
|
|
75
|
+
.slice(2)
|
|
76
|
+
.replace(/-([a-z])/g, (_, char) => char.toUpperCase());
|
|
77
|
+
options[key] = value;
|
|
78
|
+
}
|
|
79
|
+
for (const key of ["file", "session", "sourceRoot", "profile", "surface"]) {
|
|
80
|
+
if (!options[key]) {
|
|
81
|
+
fail(
|
|
82
|
+
`missing required argument --${key.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`)}`,
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return options;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function listServices(services) {
|
|
90
|
+
if (!services || typeof services !== "object") {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
return [
|
|
94
|
+
["frontend", services.frontend],
|
|
95
|
+
["backend", services.backend],
|
|
96
|
+
["appServer", services.appServer],
|
|
97
|
+
["electron", services.electron],
|
|
98
|
+
["beta", services.beta],
|
|
99
|
+
["cdp.desktop", services.cdp?.desktop],
|
|
100
|
+
["cdp.terminalBrowser", services.cdp?.terminalBrowser],
|
|
101
|
+
];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function validateService(name, service, sessionId, sourceRevision, errors) {
|
|
105
|
+
if (!service || typeof service !== "object") {
|
|
106
|
+
errors.push(`${name} service is missing`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (
|
|
110
|
+
!new Set(["dedicated", "shared-declared", "disabled"]).has(
|
|
111
|
+
service.ownership,
|
|
112
|
+
)
|
|
113
|
+
) {
|
|
114
|
+
errors.push(`${name}.ownership is invalid`);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (service.ownership === "disabled") {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (
|
|
121
|
+
typeof service.serviceInstanceId !== "string" ||
|
|
122
|
+
!service.serviceInstanceId
|
|
123
|
+
) {
|
|
124
|
+
errors.push(`${name}.serviceInstanceId must be present`);
|
|
125
|
+
}
|
|
126
|
+
if (service.ownership === "dedicated") {
|
|
127
|
+
expectEqual(
|
|
128
|
+
service.ownerDevSessionId,
|
|
129
|
+
sessionId,
|
|
130
|
+
`${name}.ownerDevSessionId`,
|
|
131
|
+
errors,
|
|
132
|
+
);
|
|
133
|
+
if (!Number.isInteger(service.pid) || service.pid < 1) {
|
|
134
|
+
errors.push(`${name}.pid must be a positive integer`);
|
|
135
|
+
}
|
|
136
|
+
expectEqual(
|
|
137
|
+
service.sourceRevision,
|
|
138
|
+
sourceRevision,
|
|
139
|
+
`${name}.sourceRevision`,
|
|
140
|
+
errors,
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
if (!name.startsWith("cdp.") && service.health !== "live") {
|
|
144
|
+
errors.push(
|
|
145
|
+
`${name}.health must be live, received ${String(service.health)}`,
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
if (service.healthFailureReason) {
|
|
149
|
+
errors.push(
|
|
150
|
+
`${name}.healthFailureReason: ${String(service.healthFailureReason)}`,
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
if (name.startsWith("cdp.") && !isLoopbackHttpUrl(service.endpoint)) {
|
|
154
|
+
errors.push(`${name}.endpoint must be a loopback HTTP URL`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function isLoopbackHttpUrl(value) {
|
|
159
|
+
try {
|
|
160
|
+
const url = new URL(value);
|
|
161
|
+
return (
|
|
162
|
+
url.protocol === "http:" &&
|
|
163
|
+
["127.0.0.1", "localhost", "[::1]"].includes(url.hostname)
|
|
164
|
+
);
|
|
165
|
+
} catch {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function expectEqual(actual, expected, label, errors) {
|
|
171
|
+
if (actual !== expected) {
|
|
172
|
+
errors.push(
|
|
173
|
+
`${label} mismatch: expected ${expected}, received ${String(actual)}`,
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function fail(message) {
|
|
179
|
+
process.stderr.write(`${message}\n`);
|
|
180
|
+
process.exit(2);
|
|
181
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: runweave-dev-session
|
|
3
|
+
description: "Use whenever Codex needs to actually plan, start, inspect, open, attach to, recover, or stop a Runweave Dev Session, including any execution of pnpm dev:session, dev:status, dev:open, or dev:stop. Manage exact worktree and Session identity, planner-selected profiles, Beta slots, surfaces, and cleanup. Do not trigger for conceptual discussion that does not operate a runtime Session."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Runweave Dev Session
|
|
7
|
+
|
|
8
|
+
把 Dev Session 作为运行环境事实源。始终从准确的源码 worktree 和 Stable 控制面操作,不按端口、最近启动时间或窗口外观猜测目标。
|
|
9
|
+
|
|
10
|
+
## 与其他技能组合
|
|
11
|
+
|
|
12
|
+
- `$toolkit:runweave-change-validation` 负责完整代码变更验收、patch 边界和证据合同;本技能负责其中的 Dev Session 生命周期。显式调用前者时,两者同时使用。
|
|
13
|
+
- 页面 DOM、点击、输入和截图需要 `$toolkit:playwright-cli`;只附着 `dev:open` 返回的目标 CDP。
|
|
14
|
+
- macOS 原生窗口、菜单或系统弹窗确实参与任务时,使用 `$computer-use`。
|
|
15
|
+
|
|
16
|
+
## 选择操作模式
|
|
17
|
+
|
|
18
|
+
- 只查询现有 Session:执行 `status` 或 `open`,不要创建或停止 Session。
|
|
19
|
+
- 创建环境:先 dry-run,再按 planner 结果启动。
|
|
20
|
+
- 管理指定 Session:后续每条命令显式传入同一个 `--session <id>`。
|
|
21
|
+
- 多 worktree 并行:分别在各自 worktree 执行并保存独立 Session ID;不得从一个 worktree 猜测或操作另一个 worktree 的 Session。
|
|
22
|
+
|
|
23
|
+
## 1. 固定 source root
|
|
24
|
+
|
|
25
|
+
在用户指定或任务实际修改所在的 worktree 中确认:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pwd
|
|
29
|
+
git status --short
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
不要自动切换到主 checkout。正常开发不覆盖 `RUNWEAVE_DEV_SESSION_HOME`;只有测试合同或用户明确要求隔离 registry 时才设置它。
|
|
33
|
+
|
|
34
|
+
## 2. 让 planner 先裁决
|
|
35
|
+
|
|
36
|
+
创建 Session 前先执行无显式 profile 的只读规划:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pnpm dev:session --dry-run --json
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
检查 `sourceRoot`、`changedFiles`、`impacts`、`requiredProfile`、service ownership 和 acceptance surface。profile 高于预期时先检查真实 diff,不得显式向下降级。
|
|
43
|
+
|
|
44
|
+
用户明确要求安装态、跨版本、Electron 或 Beta 目标时,可以在不低于 `requiredProfile` 的前提下提升 profile。只查询或操作既有 Session 时不重复 dry-run。
|
|
45
|
+
|
|
46
|
+
## 3. 启动并捕获身份
|
|
47
|
+
|
|
48
|
+
默认让 CLI 生成 Session ID:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pnpm dev:session --json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
需要提升目标时才显式指定:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pnpm dev:session --profile <profile> --json
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
立即保存返回的 `devSessionId`、`profile`、`source.root` 和 services。不要自行生成随机 ID。只有用户明确指定,或上层复现/变更验证合同已经提供 `validationSessionId` 时,才传入该 ID。
|
|
61
|
+
|
|
62
|
+
Beta profile 使用全机共享的 `pool-01` 至 `pool-05`:
|
|
63
|
+
|
|
64
|
+
- 默认自动分配槽位,不传 `--instance`。
|
|
65
|
+
- 只有用户或测试合同明确要求固定槽位时才传 `--instance pool-0N`。
|
|
66
|
+
- dry-run 的容量快照不是租约承诺;真实 start 才原子获取槽位。
|
|
67
|
+
- 槽位占满或显式槽位已占用时按失败处理,不等待、不抢占、不清理其他 Session。
|
|
68
|
+
|
|
69
|
+
## 4. 核对状态
|
|
70
|
+
|
|
71
|
+
启动后和关键操作前使用精确 ID:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
pnpm dev:status --session <id> --json
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
至少核对:
|
|
78
|
+
|
|
79
|
+
- `devSessionId`、`source.root` 和 revision 属于本次 worktree;
|
|
80
|
+
- state 满足当前操作要求;
|
|
81
|
+
- profile、dedicated/shared ownership 和 service identity 符合 planner;
|
|
82
|
+
- Beta 的 slot、lease 和 CDP identity 一致。
|
|
83
|
+
|
|
84
|
+
若没有 ID,只允许在准确 source root 中调用一次无 `--session` 的 `dev:status` 来解析唯一候选。出现多个候选时停止并列出候选,不选择“最新”的 Session。
|
|
85
|
+
|
|
86
|
+
## 5. 解析 surface
|
|
87
|
+
|
|
88
|
+
只通过 resolver 获取入口:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
pnpm dev:open --session <id> --surface <surface> --json
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
surface 选择:
|
|
95
|
+
|
|
96
|
+
- `web`:Web 页面 URL;
|
|
97
|
+
- `desktop`:Electron 主窗口和终端标签 CDP;
|
|
98
|
+
- `terminal-browser`:终端右侧内嵌 Browser CDP。
|
|
99
|
+
|
|
100
|
+
浏览器验收时,同时使用 `$toolkit:playwright-cli`:
|
|
101
|
+
|
|
102
|
+
- `desktop` 和 `terminal-browser` 按返回的 `suggestedPlaywrightSession` 和 `endpoint` 执行 `attach --cdp=<endpoint>`;
|
|
103
|
+
- `web` 的 `endpoint` 是 URL,不是 CDP。需要自动化 Web 页面时,另外解析 `terminal-browser` CDP,在本次新建的内嵌 Browser tab 中导航到该 Web URL;目标 profile 不提供所需 CDP 时,按验收目标合法提升 profile 或报告阻塞。
|
|
104
|
+
|
|
105
|
+
禁止改用固定端口、ambient endpoint、系统浏览器、`playwright-cli open` 或既有无关 Playwright session。
|
|
106
|
+
|
|
107
|
+
## 6. 停止与清理
|
|
108
|
+
|
|
109
|
+
任务创建的 Session 在完成或失败后都应停止,除非用户明确要求保留:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
pnpm dev:stop --session <id> --json
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
只停止该 manifest 拥有的 dedicated 服务,不停止 shared 服务或其他 worktree 的资源。不是本任务创建的 Session,除非用户明确要求,不得停止。
|
|
116
|
+
|
|
117
|
+
遇到 stale、PID 漂移、占用或清理失败时:
|
|
118
|
+
|
|
119
|
+
- 保存 `dev:status --session <id> --json` 和错误中的 recovery 指引;
|
|
120
|
+
- 只有 recovery 明确要求且目标身份可验证时,才执行 `dev:stop --session <id> --cleanup-stale --json`;
|
|
121
|
+
- 不删除 manifest、profile lock、Beta lease 或端口 lease;
|
|
122
|
+
- 不按端口盲杀进程,不重置其他 worktree,不无限轮询。
|
|
123
|
+
|
|
124
|
+
## 交付
|
|
125
|
+
|
|
126
|
+
报告实际操作结果:source root、Session ID、profile、关键 ownership;Beta 时包含 slot;打开页面时包含 surface 和目标 identity;最后说明 Session 已停止、按要求保留,或具体清理阻塞。
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: runweave-management
|
|
3
|
+
description: 管理 Runweave 实例配置与服务状态,查询 warning/error、解释配置、校验、修改并确认生效;更新安装和 Dev Session 生命周期沿用专属技能。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Runweave 配置与服务管理
|
|
7
|
+
|
|
8
|
+
使用当前源码构建的 CLI 或目标机器已安装的 `rw`,先核对 `rw version --json` 支持以下命令。旧版本缺少命令时报告能力缺失,不直接编辑配置文件补救。
|
|
9
|
+
仓库操作指南:[配置 CLI](https://github.com/jackshen3102/run-weave/blob/main/docs/cli/configuration.md)、[权威字段参考](https://github.com/jackshen3102/run-weave/blob/main/docs/cli/configuration-reference.md)、[服务管理](https://github.com/jackshen3102/run-weave/blob/main/docs/cli/service-management.md)。离开仓库也可通过 `rw config keys --json` 查询当前二进制的字段目录及 constraints(枚举、范围、路径和成组凭据约束),用 `rw config explain <实际键> --instance <id> --json` 读取来源与生效方式。
|
|
10
|
+
|
|
11
|
+
## 定位与只读诊断
|
|
12
|
+
|
|
13
|
+
明确目标机器、Stable 或 Dev 实例,以及 Backend profile。本地配置命令读取执行 CLI 的机器;远端 profile 不会把本地磁盘查询变成远程读取。远端本地字段操作应在目标机器执行。Dev Session 使用其绑定入口及真实 Session ID,不猜端口或路径。
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
rw config path --instance <id> --json
|
|
17
|
+
rw status --instance <id> --profile <name> --json
|
|
18
|
+
rw config status --instance <id> --profile <name> --json
|
|
19
|
+
rw config keys --json
|
|
20
|
+
rw config validate --instance <id> --json
|
|
21
|
+
rw config doctor --instance <id> --json
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`status.management.capabilities` 使用统一 warning/error 与依赖聚合;先看上游故障,再看受阻项。diagnostics.configuration 是候选排查关联,不证明故障由配置导致。动态字段模式要替换成真实键;不要将占位符直接交给 explain/set。
|
|
25
|
+
核对 node、profile、来源和 coverage;Backend 节点快照不包含 Electron IPC、当前页面连接和未上报独立服务。404/协议不支持/认证失败是读取能力或连接问题,不等于服务健康。`rw health` 可达不代表全部服务正常。
|
|
26
|
+
Research MCP 也可通过 `query_data` 的 `source: status` 查询同一 Backend API;旧 Backend 没有 management 时只解释已有证据,不伪造完整覆盖。
|
|
27
|
+
|
|
28
|
+
## 修改与确认结果
|
|
29
|
+
|
|
30
|
+
在本次授权范围内执行配置变更。先 explain 目标键,核对类型、约束、敏感性、归属与生效方式;读取最新 revision/digest 并保存预期值。值通过私有 JSON 文件或 stdin 传入,凭据不进命令参数、stdout 或成果。
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
rw config set <实际键> --value-file <private-json> --instance <id> \
|
|
34
|
+
--expected-revision <revision> --expected-digest <digest> --json
|
|
35
|
+
rw config validate --instance <id> --json
|
|
36
|
+
rw config reload --instance <id> --profile <name> --json
|
|
37
|
+
rw config status --instance <id> --profile <name> --json
|
|
38
|
+
rw status --instance <id> --profile <name> --json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
null 恢复默认。关联凭据需成组变更时使用配置文档的 import 流程,先 dry-run,不通过多次单键保存制造无效中间态。版本冲突重新读取并核对用户意图,不能去掉预期版本强行覆盖。
|
|
42
|
+
保存成功只表示持久化。检查目标字段 fieldStates 的 state、saved、applied 与 appliedRevision;pending/error/notObserved 不能报告为生效,重载失败保留旧采用值。重启字段通过目标服务既有生命周期入口处理,禁止按端口杀进程或重启无关服务。Dev Session 操作使用 runweave-dev-session;macOS Stable 桌面更新在用户显式指定时使用 update-runweave-desktop。
|
|
43
|
+
最后执行该服务真实功能验证,例如读取数据、连接或用户授权的业务操作;healthy 与 applied 本身不能替代业务成功。只读诊断不发送消息或写入终端。
|
|
44
|
+
|
|
45
|
+
Linux 整套后台更新与 systemd 开机自启使用 [update-runweave-backend](../update-runweave-backend/SKILL.md)。恢复备份、迁移、初始化和软件更新不是普通配置写入;按配置文档/专属技能执行精确目标、预览和兼容检查。初始化只用于确认全新安装;不覆盖已有身份。写入响应不确定先核对,不自动重放有副作用的操作。
|
|
46
|
+
|
|
47
|
+
交付区分保存、应用、服务状态及业务验证四种证据,明确来源和未验证范围。
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scheduled-task
|
|
3
|
+
description: 在 Runweave 终端用自然语言创建或编辑 Backend 定时任务:Agent 整理配置、只读校验并展示完整草稿,用户确认最终数据后才写入。用户说“帮我设一个定时任务”“修改这个定时任务”等时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 用 Agent 创建或编辑 Runweave 定时任务
|
|
7
|
+
|
|
8
|
+
本 Skill 管理 **Runweave Backend** 的定时任务,不创建 Codex 或其他产品自己的自动化。入口是 `rw scheduled-task`;在 Runweave 源码 checkout 中可读 `docs/cli/scheduled-task-cli.md`。已安装的 `rw` 没有此命令时,可在当前 Runweave 源码 checkout 运行 `pnpm cli:build` 后使用 `node packages/runweave-cli/dist/index.js`;找不到支持此命令的客户端就报告环境缺口,不绕开鉴权写数据库。
|
|
9
|
+
|
|
10
|
+
## 整理草稿
|
|
11
|
+
|
|
12
|
+
1. 用 `rw auth status --json` 确认目标 Backend/profile,用 `rw scheduled-task capabilities --json` 核对 taskContextVersion=2、provider 与执行权限。版本不兼容或 migration_required 时按 CLI 当前文档处理,不填虚假项目绕过。编辑时先 `list`/`get` 精确定位一条未归档任务;同名多条不能猜测。所有命令使用同一 profile 或 Backend 端口。
|
|
13
|
+
2. 把用户的话整理成任务名称、provider、完整提示词、时间规则与 IANA 时区、补跑策略、启用状态,以及可选模型、推理强度、执行权限。提示词忠实保留目标、约束和验收条件;不自行增加发布、发送消息、删除或提高权限等动作。用户未指定的值可以提出默认建议,但必须在最终核对中明确展示。当前 Web 默认 Codex、启用、仅沙箱、错过后补最近一次且有效期 24 小时;不要把这些当作用户已确认的选择。
|
|
14
|
+
3. 明确一次性时间的日期、时区和 UTC 转换;“明早”“工作日”等相对说法要按当前日期解释并给出绝对日期/规则。缺少时间、时区或任务内容,或存在两种合理解释时先询问。任务提示词提到另一个 Skill 时,确认它在预期后台 Agent 环境可用;无法确认就告知用户这一限制。
|
|
15
|
+
提示词要求真实 Browser、iOS 模拟器、命令联网、Git 元数据或工作区外本机访问时,建议用户选择
|
|
16
|
+
`full-access`,并说明它无沙箱且不等待交互审批。具体能力和验收要求仍写入提示词并遵循对应 Skill;
|
|
17
|
+
不增加或暗中生成 Browser、模拟器、网络、Git 等独立开关,也不因选择 full access 自动调用工具。
|
|
18
|
+
4. 在本次唯一的受保护临时路径写 JSON(权限 `0600`)。创建文件使用 `CreateScheduledTaskRequest`;编辑文件只放改动字段和从 `get` 读到的 `expectedRevision`。编辑草稿应同时保存当前任务原文,以便展示修改后的**完整有效配置**。不把访问 token、密码或无关资料写入草稿。
|
|
19
|
+
|
|
20
|
+
普通任务没有项目或 cwd 配置项,也不需要先登记业务项目。任务从每次运行的私有目录启动,
|
|
21
|
+
需要操作仓库或终端时把准确目标、项目规则和验收条件写入提示词;Agent 自行核对目标,不能按同名目录猜测写入。
|
|
22
|
+
描述不会扩大 sandbox 权限,不能为了免填项目而暗中改成 full-access。旧项目任务的迁移须独立 preview、
|
|
23
|
+
展示全部草稿并获明确确认后 apply;本 Skill 的普通创建/编辑授权不包含批量迁移、重新启用旧任务或重启 Backend。
|
|
24
|
+
|
|
25
|
+
## 只读校验与最终确认
|
|
26
|
+
|
|
27
|
+
- 创建执行 `rw scheduled-task validate-create --file <草稿> --json`;编辑执行 `rw scheduled-task validate-update <精确 taskId> --file <补丁> --json`。校验复用正式写入的 Backend schema、provider、schedule 和 revision 检查,但不写任务。失败时说明具体问题,修改草稿并重验;不可用 provider、过期一次性时间和 revision 冲突不能靠猜测绕过。接口返回 404 表示当前 Backend 尚未提供预校验,应报告需要更新 Backend,不能跳过校验直接写入。
|
|
28
|
+
- 以验证响应的 `validation.config` 为准,向用户展示目标 Backend/profile、任务 ID(编辑)、完整名称与**完整提示词**、provider/model/effort、执行权限、启用状态、时间规则与时区、下一次及后续预览的本地和 UTC 时间、补跑策略,以及编辑前后变化。连同 `sha256` 明确标识本次请求。`full-access` 草稿必须再次突出无沙箱、无交互审批及本机访问风险。预览不保证电脑届时在线;不要声称任务已经创建。
|
|
29
|
+
- **等待用户明确确认这份最终配置。** 初始“帮我创建/修改”不等于确认;用户改任何字段、目标 Backend 改变、编辑任务 revision 改变、或一次性时间已过,都要重新校验并再次展示。没有明确确认不得调用 `create` 或 `update`,也不得以准备好的文件代替确认。
|
|
30
|
+
|
|
31
|
+
## 写入和核对
|
|
32
|
+
|
|
33
|
+
- 创建:为这份已确认草稿生成并保留一个 UUID 幂等键,调用一次 `rw scheduled-task create --file <草稿> --sha256 <验证响应 sha256> --expected-backend <验证响应 backend> --idempotency-key <UUID> --json`。只有成功响应并通过 `get <返回 taskId>` 核对后,才报告创建成功。
|
|
34
|
+
- 编辑:确认前再次 `get` 核对任务仍是原 `expectedRevision`,然后调用一次 `rw scheduled-task update <taskId> --file <补丁> --sha256 <验证响应 sha256> --expected-backend <验证响应 backend> --json`,再 `get` 核对。出现 revision 冲突时保留草稿,重新整理差异并请用户确认,不能覆盖较新版本。
|
|
35
|
+
- 创建请求结果不确定时,保留原文件和幂等键;先只读查询,必要时仅用**相同文件、摘要、Backend 和键**重试。编辑结果不确定时先 `get` 对比 revision 与字段,不盲目再次 PATCH。停止、删除或立即运行是独立操作,本 Skill 不因创建/编辑成功而触发。
|