@runweave/server-linux-x64 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/manifest.json +1487 -156
  2. package/native.tar.gz +0 -0
  3. package/package.json +1 -1
  4. package/payload/.agents/plugins/marketplace.json +20 -0
  5. package/payload/app-server/build-info.json +3 -3
  6. package/payload/app-server/index.cjs +1 -1
  7. package/payload/backend/build-info.json +4 -4
  8. package/payload/backend/index.cjs +2416 -1684
  9. package/payload/backend/ios-simulators/pool.py +3 -3
  10. package/payload/backend/scheduled-tasks-sqlite-worker.cjs +224 -171
  11. package/payload/frontend/dist/assets/{_baseUniq-i1Ki3twP.js → _baseUniq-qHFga5V8.js} +1 -1
  12. package/payload/frontend/dist/assets/{access-DK9V0f3W.js → access-DgHvmn15.js} +1 -1
  13. package/payload/frontend/dist/assets/{advanced-B13lWv1d.js → advanced-C1Fh14vw.js} +1 -1
  14. package/payload/frontend/dist/assets/{appearance-DumRYmkD.js → appearance-Bs7cSXqO.js} +1 -1
  15. package/payload/frontend/dist/assets/{arc-HKn3_xyV.js → arc-E3iYHQG_.js} +1 -1
  16. package/payload/frontend/dist/assets/{architectureDiagram-Q4EWVU46-C09x7b94.js → architectureDiagram-Q4EWVU46-DgpYpTb9.js} +1 -1
  17. package/payload/frontend/dist/assets/{blockDiagram-DXYQGD6D-CFLFTR6d.js → blockDiagram-DXYQGD6D-CfFOEKZ7.js} +1 -1
  18. package/payload/frontend/dist/assets/{c4Diagram-AHTNJAMY-8P8Q-xqC.js → c4Diagram-AHTNJAMY-BxlHBUj3.js} +1 -1
  19. package/payload/frontend/dist/assets/channel-amxyNKnk.js +1 -0
  20. package/payload/frontend/dist/assets/{chunk-4BX2VUAB-B1KEkTal.js → chunk-4BX2VUAB-xWocgDo8.js} +1 -1
  21. package/payload/frontend/dist/assets/{chunk-4TB4RGXK-Bu_Z47kJ.js → chunk-4TB4RGXK-Bl1cNICf.js} +1 -1
  22. package/payload/frontend/dist/assets/{chunk-55IACEB6-xzHVCHyi.js → chunk-55IACEB6-DVtE836u.js} +1 -1
  23. package/payload/frontend/dist/assets/{chunk-EDXVE4YY-h3HAW06h.js → chunk-EDXVE4YY-Dbd3tDCr.js} +1 -1
  24. package/payload/frontend/dist/assets/{chunk-FMBD7UC4-CQ4faPSh.js → chunk-FMBD7UC4-MPJaTsyN.js} +1 -1
  25. package/payload/frontend/dist/assets/{chunk-OYMX7WX6-CubmLoGT.js → chunk-OYMX7WX6-D3LuudlW.js} +1 -1
  26. package/payload/frontend/dist/assets/{chunk-QZHKN3VN-xk0zKNja.js → chunk-QZHKN3VN-Dn1aF6iQ.js} +1 -1
  27. package/payload/frontend/dist/assets/{chunk-YZCP3GAM-CHpTv8sd.js → chunk-YZCP3GAM-jZYbHnCw.js} +1 -1
  28. package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-B8cTijjT.js +1 -0
  29. package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-B8cTijjT.js +1 -0
  30. package/payload/frontend/dist/assets/clone-xzI2eGRI.js +1 -0
  31. package/payload/frontend/dist/assets/connection-V2iI-6rM.js +12 -0
  32. package/payload/frontend/dist/assets/{connections-A7InZw2T.js → connections-G_Q7342g.js} +1 -1
  33. package/payload/frontend/dist/assets/{cose-bilkent-S5V4N54A-CQn27vi_.js → cose-bilkent-S5V4N54A-75FLD3RS.js} +1 -1
  34. package/payload/frontend/dist/assets/{dagre-KV5264BT-CClOwB9v.js → dagre-KV5264BT-DEm-DpJL.js} +1 -1
  35. package/payload/frontend/dist/assets/{desktop-BgryfXXM.js → desktop-g5JC-CQd.js} +1 -1
  36. package/payload/frontend/dist/assets/{diagram-5BDNPKRD-DcUJOAmV.js → diagram-5BDNPKRD-BV6P2UTy.js} +1 -1
  37. package/payload/frontend/dist/assets/{diagram-G4DWMVQ6-DdabmTwk.js → diagram-G4DWMVQ6-DuCK-MM2.js} +1 -1
  38. package/payload/frontend/dist/assets/{diagram-MMDJMWI5-DmcxjBIk.js → diagram-MMDJMWI5-D5_GlPgO.js} +1 -1
  39. package/payload/frontend/dist/assets/{diagram-TYMM5635-BUSpXaiN.js → diagram-TYMM5635-QRbOYR1P.js} +1 -1
  40. package/payload/frontend/dist/assets/{erDiagram-SMLLAGMA-vkAXcv5_.js → erDiagram-SMLLAGMA-DefCheAw.js} +1 -1
  41. package/payload/frontend/dist/assets/{flowDiagram-DWJPFMVM-BHDU7BUJ.js → flowDiagram-DWJPFMVM-DVzyWIso.js} +1 -1
  42. package/payload/frontend/dist/assets/{ganttDiagram-T4ZO3ILL-C3lAG7_6.js → ganttDiagram-T4ZO3ILL-BJaClUEF.js} +1 -1
  43. package/payload/frontend/dist/assets/{gitGraphDiagram-UUTBAWPF-DHLyYJf7.js → gitGraphDiagram-UUTBAWPF-BLfbApNz.js} +1 -1
  44. package/payload/frontend/dist/assets/{graph-Bp5bIzXM.js → graph-C-YqFh68.js} +1 -1
  45. package/payload/frontend/dist/assets/{image-DkcKNLTV.js → image-CZo_2Awc.js} +1 -1
  46. package/payload/frontend/dist/assets/{index-BUS7FSlk.js → index-6q2aeqkt.js} +95 -105
  47. package/payload/frontend/dist/assets/{infoDiagram-42DDH7IO-CVp9zvmA.js → infoDiagram-42DDH7IO-BakVOutT.js} +1 -1
  48. package/payload/frontend/dist/assets/{ishikawaDiagram-UXIWVN3A-D07QPX3O.js → ishikawaDiagram-UXIWVN3A-D_1Oa5Dc.js} +1 -1
  49. package/payload/frontend/dist/assets/{journeyDiagram-VCZTEJTY-D-iZPDHM.js → journeyDiagram-VCZTEJTY-Y8TVFv6B.js} +1 -1
  50. package/payload/frontend/dist/assets/{kanban-definition-6JOO6SKY-BR4eWb08.js → kanban-definition-6JOO6SKY-DxeNhTIB.js} +1 -1
  51. package/payload/frontend/dist/assets/{layout-Cyv0DyJm.js → layout-5cMeOTAp.js} +1 -1
  52. package/payload/frontend/dist/assets/{linear-D5M7Pvj1.js → linear-Bnc3ev5g.js} +1 -1
  53. package/payload/frontend/dist/assets/main-3TPtEl66.js +706 -0
  54. package/payload/frontend/dist/assets/main-D4_uoZQa.css +33 -0
  55. package/payload/frontend/dist/assets/{min-BFlloFGg.js → min-BRXKkrS8.js} +1 -1
  56. package/payload/frontend/dist/assets/{mindmap-definition-QFDTVHPH-AKUF178o.js → mindmap-definition-QFDTVHPH-RYZO_BEr.js} +1 -1
  57. package/payload/frontend/dist/assets/{monitoring-B2okceCB.js → monitoring-Fv7kZ4s6.js} +1 -1
  58. package/payload/frontend/dist/assets/{notifications-0lql4_qJ.js → notifications-BzrYqyMH.js} +1 -1
  59. package/payload/frontend/dist/assets/{pieDiagram-DEJITSTG-CRiHmwn7.js → pieDiagram-DEJITSTG-Bzw0dhjz.js} +1 -1
  60. package/payload/frontend/dist/assets/{quadrantDiagram-34T5L4WZ-CzXrq7IJ.js → quadrantDiagram-34T5L4WZ-CQJY_msa.js} +1 -1
  61. package/payload/frontend/dist/assets/{record-content-DTCQKbEj.js → record-content-B7-6olQt.js} +1 -1
  62. package/payload/frontend/dist/assets/{requirementDiagram-MS252O5E-Bbn5ulLV.js → requirementDiagram-MS252O5E-DuP8hAV8.js} +1 -1
  63. package/payload/frontend/dist/assets/{sankeyDiagram-XADWPNL6-D9ZZ46pQ.js → sankeyDiagram-XADWPNL6-D-fQnCZZ.js} +1 -1
  64. package/payload/frontend/dist/assets/{sequenceDiagram-FGHM5R23-DxOP2gDa.js → sequenceDiagram-FGHM5R23-DaZNEccV.js} +1 -1
  65. package/payload/frontend/dist/assets/{stateDiagram-FHFEXIEX-NF_Qq5Cq.js → stateDiagram-FHFEXIEX-CkOLt5R1.js} +1 -1
  66. package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-atg1K4nB.js +1 -0
  67. package/payload/frontend/dist/assets/{status-2U71YpVe.js → status-CIIPajZp.js} +1 -1
  68. package/payload/frontend/dist/assets/suiji-C453W-Sg.js +1 -0
  69. package/payload/frontend/dist/assets/{svg-DpI3GSCw.js → svg-BUqAWGtg.js} +1 -1
  70. package/payload/frontend/dist/assets/{tabs-CYKuiiHg.js → tabs-Cwlp1Meu.js} +1 -1
  71. package/payload/frontend/dist/assets/{timeline-definition-GMOUNBTQ-ChEZSNF_.js → timeline-definition-GMOUNBTQ-BOKDMwHS.js} +1 -1
  72. package/payload/frontend/dist/assets/{vennDiagram-DHZGUBPP-Ch26SNbB.js → vennDiagram-DHZGUBPP-fSZjDS41.js} +1 -1
  73. package/payload/frontend/dist/assets/{wardley-RL74JXVD-D0ap5vv0.js → wardley-RL74JXVD-D1KIsvoD.js} +1 -1
  74. package/payload/frontend/dist/assets/{wardleyDiagram-NUSXRM2D-btdjsmHO.js → wardleyDiagram-NUSXRM2D-FMe67dwE.js} +1 -1
  75. package/payload/frontend/dist/assets/{xychartDiagram-5P7HB3ND-CklPtFGT.js → xychartDiagram-5P7HB3ND-B9AM9_9w.js} +1 -1
  76. package/payload/frontend/dist/build-info.json +4 -4
  77. package/payload/frontend/dist/companion.html +1 -1
  78. package/payload/frontend/dist/index.html +3 -3
  79. package/payload/packages/agent-bridge/src/install-pi.mjs +81 -0
  80. package/payload/plugins/pi/dist/SKILL.md +22 -0
  81. package/payload/plugins/pi/dist/bridge/app-server-client.cjs +82 -0
  82. package/payload/plugins/pi/dist/bridge/feishu_stop_notify.sh +169 -0
  83. package/payload/plugins/pi/dist/bridge/runweave-hook-bridge.cjs +583 -0
  84. package/payload/plugins/pi/dist/bridge/runweave-hook-completion.cjs +42 -0
  85. package/payload/plugins/pi/dist/bridge/runweave-hook-payload.cjs +578 -0
  86. package/payload/plugins/pi/dist/bridge/runweave-task-supervision.cjs +167 -0
  87. package/payload/plugins/pi/dist/runweave.js +316 -0
  88. package/payload/plugins/toolkit/.codex-plugin/plugin.json +31 -0
  89. package/payload/plugins/toolkit/README.md +185 -0
  90. package/payload/plugins/toolkit/hooks/AGENTS.md +6 -0
  91. package/payload/plugins/toolkit/hooks/app-server-client.cjs +82 -0
  92. package/payload/plugins/toolkit/hooks/feishu_stop_notify.sh +169 -0
  93. package/payload/plugins/toolkit/hooks/runweave-hook-bridge.cjs +583 -0
  94. package/payload/plugins/toolkit/hooks/runweave-hook-completion.cjs +42 -0
  95. package/payload/plugins/toolkit/hooks/runweave-hook-dispatch.cjs +123 -0
  96. package/payload/plugins/toolkit/hooks/runweave-hook-payload.cjs +578 -0
  97. package/payload/plugins/toolkit/hooks/runweave-task-supervision.cjs +167 -0
  98. package/payload/plugins/toolkit/hooks.json +108 -0
  99. package/payload/plugins/toolkit/skills/acceptance/SKILL.md +70 -0
  100. package/payload/plugins/toolkit/skills/acceptance/agents/openai.yaml +4 -0
  101. package/payload/plugins/toolkit/skills/acceptance/references/capture.md +38 -0
  102. package/payload/plugins/toolkit/skills/acceptance/references/delivery.md +54 -0
  103. package/payload/plugins/toolkit/skills/acceptance/references/gallery-contract.md +84 -0
  104. package/payload/plugins/toolkit/skills/acceptance/references/gallery-copy.md +34 -0
  105. package/payload/plugins/toolkit/skills/acceptance/references/video.md +52 -0
  106. package/payload/plugins/toolkit/skills/acceptance/scripts/capture.py +137 -0
  107. package/payload/plugins/toolkit/skills/acceptance/scripts/common.py +63 -0
  108. package/payload/plugins/toolkit/skills/acceptance/scripts/gallery.py +353 -0
  109. package/payload/plugins/toolkit/skills/acceptance/scripts/preview.py +109 -0
  110. package/payload/plugins/toolkit/skills/acceptance/scripts/video.py +283 -0
  111. package/payload/plugins/toolkit/skills/acceptance/templates/reader.css +576 -0
  112. package/payload/plugins/toolkit/skills/acceptance/templates/reader.html +63 -0
  113. package/payload/plugins/toolkit/skills/acceptance/templates/reader.js +326 -0
  114. package/payload/plugins/toolkit/skills/acceptance/templates/viewer.css +55 -0
  115. package/payload/plugins/toolkit/skills/acceptance-gallery/SKILL.md +8 -0
  116. package/payload/plugins/toolkit/skills/acceptance-gallery/agents/openai.yaml +6 -0
  117. package/payload/plugins/toolkit/skills/acceptance-gallery/references/capture-and-copy.md +3 -0
  118. package/payload/plugins/toolkit/skills/acceptance-gallery/references/content-contract.md +3 -0
  119. package/payload/plugins/toolkit/skills/acceptance-gallery/scripts/gallery.py +9 -0
  120. package/payload/plugins/toolkit/skills/acceptance-video/SKILL.md +8 -0
  121. package/payload/plugins/toolkit/skills/acceptance-video/agents/openai.yaml +6 -0
  122. package/payload/plugins/toolkit/skills/acceptance-video/references/input-and-capture.md +3 -0
  123. package/payload/plugins/toolkit/skills/acceptance-video/references/mobile-review.md +3 -0
  124. package/payload/plugins/toolkit/skills/acceptance-video/scripts/capture.py +9 -0
  125. package/payload/plugins/toolkit/skills/acceptance-video/scripts/video.py +9 -0
  126. package/payload/plugins/toolkit/skills/agent-device/SKILL.md +86 -0
  127. package/payload/plugins/toolkit/skills/agent-device/agents/openai.yaml +4 -0
  128. package/payload/plugins/toolkit/skills/agent-device/references/ios-setup.md +36 -0
  129. package/payload/plugins/toolkit/skills/agent-device/scripts/device.py +398 -0
  130. package/payload/plugins/toolkit/skills/agent-device/scripts/resources.py +248 -0
  131. package/payload/plugins/toolkit/skills/architecture-flow-prototyping/SKILL.md +128 -0
  132. package/payload/plugins/toolkit/skills/architecture-flow-prototyping/agents/openai.yaml +4 -0
  133. package/payload/plugins/toolkit/skills/architecture-flow-prototyping/references/architecture-flow-checklist.md +59 -0
  134. package/payload/plugins/toolkit/skills/architecture-flow-prototyping/references/architecture-flow-guide.md +135 -0
  135. package/payload/plugins/toolkit/skills/architecture-flow-prototyping/references/architecture-flow-handoff-template.md +57 -0
  136. package/payload/plugins/toolkit/skills/ask-first/SKILL.md +81 -0
  137. package/payload/plugins/toolkit/skills/brainstorming/SKILL.md +41 -0
  138. package/payload/plugins/toolkit/skills/browse-record/SKILL.md +35 -0
  139. package/payload/plugins/toolkit/skills/browse-record/references/app-usage.md +19 -0
  140. package/payload/plugins/toolkit/skills/browse-record/references/daily-reporting.md +115 -0
  141. package/payload/plugins/toolkit/skills/browse-record/references/zhihu.md +33 -0
  142. package/payload/plugins/toolkit/skills/browse-record/scripts/app_usage.py +110 -0
  143. package/payload/plugins/toolkit/skills/browse-record/scripts/browse_job.py +385 -0
  144. package/payload/plugins/toolkit/skills/browse-record/scripts/zhihu-read.js +126 -0
  145. package/payload/plugins/toolkit/skills/browse-record/scripts/zhihu_http.py +273 -0
  146. package/payload/plugins/toolkit/skills/clear-technical-explanations/LICENSE +21 -0
  147. package/payload/plugins/toolkit/skills/clear-technical-explanations/SKILL.md +103 -0
  148. package/payload/plugins/toolkit/skills/code-grounded-requirements/SKILL.md +54 -0
  149. package/payload/plugins/toolkit/skills/daily-doc-maintenance/SKILL.md +151 -0
  150. package/payload/plugins/toolkit/skills/daily-record/SKILL.md +63 -0
  151. package/payload/plugins/toolkit/skills/daily-record/agents/openai.yaml +4 -0
  152. package/payload/plugins/toolkit/skills/daily-record/references/browser-history.md +6 -0
  153. package/payload/plugins/toolkit/skills/daily-record/references/feishu.md +90 -0
  154. package/payload/plugins/toolkit/skills/daily-record/references/scheduled-reporting.md +144 -0
  155. package/payload/plugins/toolkit/skills/daily-record/references/scheduled-task.template.json +15 -0
  156. package/payload/plugins/toolkit/skills/daily-record/references/suiji-work-records.md +57 -0
  157. package/payload/plugins/toolkit/skills/daily-record/scripts/feishu.py +280 -0
  158. package/payload/plugins/toolkit/skills/daily-record/scripts/job.py +416 -0
  159. package/payload/plugins/toolkit/skills/daily-record/scripts/job_browser.py +77 -0
  160. package/payload/plugins/toolkit/skills/daily-record/scripts/job_facts.py +132 -0
  161. package/payload/plugins/toolkit/skills/daily-record/scripts/job_isolation.py +69 -0
  162. package/payload/plugins/toolkit/skills/daily-record/scripts/job_materials.py +154 -0
  163. package/payload/plugins/toolkit/skills/daily-record/scripts/job_screen.py +77 -0
  164. package/payload/plugins/toolkit/skills/daily-record/scripts/job_state.py +309 -0
  165. package/payload/plugins/toolkit/skills/daily-refactor/SKILL.md +101 -0
  166. package/payload/plugins/toolkit/skills/daily-refactor/scripts/compare-architecture-reports.mjs +168 -0
  167. package/payload/plugins/toolkit/skills/debugging-strategies/SKILL.md +38 -0
  168. package/payload/plugins/toolkit/skills/debugging-strategies/resources/implementation-playbook.md +520 -0
  169. package/payload/plugins/toolkit/skills/diagnostic-log-debugging/SKILL.md +79 -0
  170. package/payload/plugins/toolkit/skills/doc-coauthoring/SKILL.md +64 -0
  171. package/payload/plugins/toolkit/skills/eli5/LICENSE +21 -0
  172. package/payload/plugins/toolkit/skills/eli5/SKILL.md +18 -0
  173. package/payload/plugins/toolkit/skills/experience/SKILL.md +71 -0
  174. package/payload/plugins/toolkit/skills/experience/package.json +13 -0
  175. package/payload/plugins/toolkit/skills/git-advanced-workflows/SKILL.md +457 -0
  176. package/payload/plugins/toolkit/skills/github-pr/SKILL.md +109 -0
  177. package/payload/plugins/toolkit/skills/github-pr/scripts/github-access.mjs +292 -0
  178. package/payload/plugins/toolkit/skills/github-pr/scripts/preflight.mjs +191 -0
  179. package/payload/plugins/toolkit/skills/github-pr/scripts/source-worktree.mjs +354 -0
  180. package/payload/plugins/toolkit/skills/grill-with-docs/SKILL.md +66 -0
  181. package/payload/plugins/toolkit/skills/grill-with-docs/agents/openai.yaml +6 -0
  182. package/payload/plugins/toolkit/skills/grilling/SKILL.md +14 -0
  183. package/payload/plugins/toolkit/skills/handoff/SKILL.md +98 -0
  184. package/payload/plugins/toolkit/skills/karpathy-guidelines/SKILL.md +73 -0
  185. package/payload/plugins/toolkit/skills/playwright-cli/SKILL.md +562 -0
  186. package/payload/plugins/toolkit/skills/playwright-cli/references/element-attributes.md +23 -0
  187. package/payload/plugins/toolkit/skills/playwright-cli/references/playwright-tests.md +39 -0
  188. package/payload/plugins/toolkit/skills/playwright-cli/references/request-mocking.md +87 -0
  189. package/payload/plugins/toolkit/skills/playwright-cli/references/running-code.md +240 -0
  190. package/payload/plugins/toolkit/skills/playwright-cli/references/session-management.md +226 -0
  191. package/payload/plugins/toolkit/skills/playwright-cli/references/spec-driven-testing.md +312 -0
  192. package/payload/plugins/toolkit/skills/playwright-cli/references/storage-state.md +275 -0
  193. package/payload/plugins/toolkit/skills/playwright-cli/references/test-generation.md +138 -0
  194. package/payload/plugins/toolkit/skills/playwright-cli/references/tracing.md +142 -0
  195. package/payload/plugins/toolkit/skills/playwright-cli/references/video-recording.md +157 -0
  196. package/payload/plugins/toolkit/skills/playwright-cli/templates/standalone.config.json +7 -0
  197. package/payload/plugins/toolkit/skills/product-exploration/SKILL.md +64 -0
  198. package/payload/plugins/toolkit/skills/product-exploration/agents/openai.yaml +5 -0
  199. package/payload/plugins/toolkit/skills/prototype-first-development/SKILL.md +134 -0
  200. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/README.md +88 -0
  201. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/app.js +145 -0
  202. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/index.html +229 -0
  203. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/mock-state.json +60 -0
  204. package/payload/plugins/toolkit/skills/prototype-first-development/references/implementation-plan-handoff-template.md +61 -0
  205. package/payload/plugins/toolkit/skills/prototype-first-development/references/prototype-workflow-checklist.md +64 -0
  206. package/payload/plugins/toolkit/skills/publish-runweave-server/SKILL.md +64 -0
  207. package/payload/plugins/toolkit/skills/publish-runweave-server/agents/openai.yaml +4 -0
  208. package/payload/plugins/toolkit/skills/react-best-practices/AGENTS.md +3227 -0
  209. package/payload/plugins/toolkit/skills/react-best-practices/README.md +127 -0
  210. package/payload/plugins/toolkit/skills/react-best-practices/SKILL.md +143 -0
  211. package/payload/plugins/toolkit/skills/react-best-practices/metadata.json +15 -0
  212. package/payload/plugins/toolkit/skills/react-best-practices/rules/advanced/event-handler-refs.md +55 -0
  213. package/payload/plugins/toolkit/skills/react-best-practices/rules/advanced/init-once.md +42 -0
  214. package/payload/plugins/toolkit/skills/react-best-practices/rules/advanced/use-latest.md +39 -0
  215. package/payload/plugins/toolkit/skills/react-best-practices/rules/async/api-routes.md +38 -0
  216. package/payload/plugins/toolkit/skills/react-best-practices/rules/async/defer-await.md +80 -0
  217. package/payload/plugins/toolkit/skills/react-best-practices/rules/async/dependencies.md +52 -0
  218. package/payload/plugins/toolkit/skills/react-best-practices/rules/async/parallel.md +28 -0
  219. package/payload/plugins/toolkit/skills/react-best-practices/rules/async/suspense-boundaries.md +99 -0
  220. package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/barrel-imports.md +59 -0
  221. package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/conditional.md +37 -0
  222. package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/defer-third-party.md +49 -0
  223. package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/dynamic-imports.md +35 -0
  224. package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/preload.md +46 -0
  225. package/payload/plugins/toolkit/skills/react-best-practices/rules/client/event-listeners.md +78 -0
  226. package/payload/plugins/toolkit/skills/react-best-practices/rules/client/localstorage-schema.md +77 -0
  227. package/payload/plugins/toolkit/skills/react-best-practices/rules/client/passive-event-listeners.md +48 -0
  228. package/payload/plugins/toolkit/skills/react-best-practices/rules/client/swr-dedup.md +56 -0
  229. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/batch-dom-css.md +110 -0
  230. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/cache-function-results.md +80 -0
  231. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/cache-property-access.md +28 -0
  232. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/cache-storage.md +70 -0
  233. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/combine-iterations.md +32 -0
  234. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/early-exit.md +50 -0
  235. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/flatmap-filter.md +55 -0
  236. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/hoist-regexp.md +45 -0
  237. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/index-maps.md +37 -0
  238. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/length-check-first.md +50 -0
  239. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/min-max-loop.md +82 -0
  240. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/set-map-lookups.md +24 -0
  241. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/tosorted-immutable.md +57 -0
  242. package/payload/plugins/toolkit/skills/react-best-practices/rules/meta/sections.md +46 -0
  243. package/payload/plugins/toolkit/skills/react-best-practices/rules/meta/template.md +28 -0
  244. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/activity.md +26 -0
  245. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/animate-svg-wrapper.md +38 -0
  246. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/conditional-render.md +32 -0
  247. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/content-visibility.md +38 -0
  248. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/hoist-jsx.md +36 -0
  249. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/hydration-no-flicker.md +72 -0
  250. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/hydration-suppress-warning.md +26 -0
  251. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/resource-hints.md +89 -0
  252. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/script-defer-async.md +71 -0
  253. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/svg-precision.md +28 -0
  254. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/usetransition-loading.md +75 -0
  255. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/defer-reads.md +39 -0
  256. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/dependencies.md +45 -0
  257. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/derived-state-no-effect.md +40 -0
  258. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/derived-state.md +29 -0
  259. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/functional-setstate.md +77 -0
  260. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/lazy-state-init.md +58 -0
  261. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/memo-with-default-value.md +36 -0
  262. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/memo.md +44 -0
  263. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/move-effect-to-event.md +45 -0
  264. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/no-inline-components.md +83 -0
  265. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/simple-expression-in-memo.md +35 -0
  266. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/transitions.md +40 -0
  267. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/use-ref-transient-values.md +73 -0
  268. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/after-nonblocking.md +74 -0
  269. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/auth-actions.md +96 -0
  270. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/cache-lru.md +41 -0
  271. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/cache-react.md +76 -0
  272. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/dedup-props.md +65 -0
  273. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/hoist-static-io.md +139 -0
  274. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/parallel-fetching.md +83 -0
  275. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/serialization.md +38 -0
  276. package/payload/plugins/toolkit/skills/recorded-browser-mcp-verification/SKILL.md +8 -0
  277. package/payload/plugins/toolkit/skills/recorded-browser-mcp-verification/agents/openai.yaml +6 -0
  278. package/payload/plugins/toolkit/skills/reproduce-before-fix/SKILL.md +93 -0
  279. package/payload/plugins/toolkit/skills/reproduce-before-fix/agents/openai.yaml +7 -0
  280. package/payload/plugins/toolkit/skills/review-only/SKILL.md +72 -0
  281. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/SKILL.md +134 -0
  282. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/agents/openai.yaml +7 -0
  283. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/references/contracts.md +114 -0
  284. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/scripts/classify-runtime-verdict.mjs +140 -0
  285. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/scripts/run-static-review.mjs +389 -0
  286. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/scripts/static-review-contract.mjs +243 -0
  287. package/payload/plugins/toolkit/skills/run-test-cases/SKILL.md +63 -0
  288. package/payload/plugins/toolkit/skills/runweave-change-validation/SKILL.md +196 -0
  289. package/payload/plugins/toolkit/skills/runweave-change-validation/agents/openai.yaml +7 -0
  290. package/payload/plugins/toolkit/skills/runweave-change-validation/scripts/assert-dev-session-status.mjs +181 -0
  291. package/payload/plugins/toolkit/skills/runweave-dev-session/SKILL.md +126 -0
  292. package/payload/plugins/toolkit/skills/runweave-dev-session/agents/openai.yaml +7 -0
  293. package/payload/plugins/toolkit/skills/runweave-management/SKILL.md +47 -0
  294. package/payload/plugins/toolkit/skills/scheduled-task/SKILL.md +35 -0
  295. package/payload/plugins/toolkit/skills/shadcn/SKILL.md +245 -0
  296. package/payload/plugins/toolkit/skills/shadcn/agents/openai.yml +5 -0
  297. package/payload/plugins/toolkit/skills/shadcn/assets/shadcn-small.png +0 -0
  298. package/payload/plugins/toolkit/skills/shadcn/assets/shadcn.png +0 -0
  299. package/payload/plugins/toolkit/skills/shadcn/cli.md +276 -0
  300. package/payload/plugins/toolkit/skills/shadcn/customization.md +209 -0
  301. package/payload/plugins/toolkit/skills/shadcn/evals/evals.json +47 -0
  302. package/payload/plugins/toolkit/skills/shadcn/mcp.md +94 -0
  303. package/payload/plugins/toolkit/skills/shadcn/rules/base-vs-radix.md +310 -0
  304. package/payload/plugins/toolkit/skills/shadcn/rules/composition.md +197 -0
  305. package/payload/plugins/toolkit/skills/shadcn/rules/forms.md +198 -0
  306. package/payload/plugins/toolkit/skills/shadcn/rules/icons.md +101 -0
  307. package/payload/plugins/toolkit/skills/shadcn/rules/styling.md +163 -0
  308. package/payload/plugins/toolkit/skills/suiji/SKILL.md +54 -0
  309. package/payload/plugins/toolkit/skills/suiji/references/api.md +72 -0
  310. package/payload/plugins/toolkit/skills/suiji/references/source-adapter.md +40 -0
  311. package/payload/plugins/toolkit/skills/suiji/references/work-records.md +36 -0
  312. package/payload/plugins/toolkit/skills/suiji/scripts/source_adapter.py +46 -0
  313. package/payload/plugins/toolkit/skills/suiji/scripts/suiji.py +358 -0
  314. package/payload/plugins/toolkit/skills/suiji/scripts/work_records.py +328 -0
  315. package/payload/plugins/toolkit/skills/suiji/scripts/work_reports.py +75 -0
  316. package/payload/plugins/toolkit/skills/sync-branch-hard-reset/SKILL.md +59 -0
  317. package/payload/plugins/toolkit/skills/update-runweave-backend/SKILL.md +90 -0
  318. package/payload/plugins/toolkit/skills/update-runweave-backend/agents/openai.yaml +4 -0
  319. package/payload/plugins/toolkit/skills/update-runweave-backend/references/npm-update.md +68 -0
  320. package/payload/plugins/toolkit/skills/update-runweave-backend/references/systemd.md +34 -0
  321. package/payload/plugins/toolkit/skills/update-runweave-desktop/SKILL.md +102 -0
  322. package/payload/plugins/toolkit/skills/update-runweave-ios/SKILL.md +16 -0
  323. package/payload/plugins/toolkit/skills/update-runweave-ios/references/ios-wireless-recovery.md +54 -0
  324. package/payload/plugins/toolkit/skills/using-rw/SKILL.md +265 -0
  325. package/payload/plugins/toolkit/skills/write-plan/SKILL.md +72 -0
  326. package/payload/plugins/toolkit/skills/write-test-cases/SKILL.md +100 -0
  327. package/payload/plugins/toolkit/skills/write-test-cases/assets/test-plan-template.yaml +15 -0
  328. package/payload/plugins/toolkit/skills/write-test-cases/references/coverage-checklist.md +75 -0
  329. package/payload/plugins/toolkit/skills/write-test-cases/references/design-techniques.md +91 -0
  330. package/payload/plugins/toolkit/skills/youtube-reading/SKILL.md +35 -0
  331. package/payload/plugins/toolkit/skills/youtube-reading/agents/openai.yaml +4 -0
  332. package/payload/plugins/toolkit/skills/youtube-reading/assets/runtime-lock.json +92 -0
  333. package/payload/plugins/toolkit/skills/youtube-reading/references/content-contract.md +52 -0
  334. package/payload/plugins/toolkit/skills/youtube-reading/references/setup.md +70 -0
  335. package/payload/plugins/toolkit/skills/youtube-reading/requirements.lock +9 -0
  336. package/payload/plugins/toolkit/skills/youtube-reading/scripts/artifacts.py +206 -0
  337. package/payload/plugins/toolkit/skills/youtube-reading/scripts/runtime.py +424 -0
  338. package/payload/plugins/toolkit/skills/youtube-reading/scripts/youtube_reading.py +314 -0
  339. package/payload/plugins/toolkit-release.json +1 -0
  340. package/payload/scripts/toolkit/codex-state.mjs +75 -0
  341. package/payload/scripts/toolkit/release.mjs +210 -0
  342. package/payload/scripts/toolkit/sync-runtime.mjs +108 -0
  343. package/payload/scripts/toolkit/sync.mjs +585 -0
  344. package/payload/frontend/dist/assets/channel-CuSisha8.js +0 -1
  345. package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-ClJkT7PY.js +0 -1
  346. package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-ClJkT7PY.js +0 -1
  347. package/payload/frontend/dist/assets/clone-CPcyXi9g.js +0 -1
  348. package/payload/frontend/dist/assets/connection-BhcgnOMb.js +0 -12
  349. package/payload/frontend/dist/assets/main-BDBhLSX2.js +0 -696
  350. package/payload/frontend/dist/assets/main-Cg6Oo1xK.css +0 -33
  351. package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-DhdOfEAv.js +0 -1
  352. package/payload/frontend/dist/assets/suiji-DXtfgwxj.js +0 -1
@@ -0,0 +1,167 @@
1
+ /* global AbortSignal, fetch, module, process, require, URL */
2
+ /* eslint-disable @typescript-eslint/no-require-imports */
3
+ const { spawnSync } = require("node:child_process");
4
+ const os = require("node:os");
5
+ const path = require("node:path");
6
+ const { extractUserPrompt } = require("./runweave-hook-payload.cjs");
7
+ async function requestSupervision({
8
+ source,
9
+ stateEndpoint,
10
+ threadId,
11
+ terminalPanelId,
12
+ terminalSessionId,
13
+ normalizedEvent,
14
+ token,
15
+ payload,
16
+ hookStartedAt,
17
+ debug = () => {},
18
+ }) {
19
+ if (
20
+ source === "codex" &&
21
+ stateEndpoint &&
22
+ threadId &&
23
+ terminalPanelId &&
24
+ process.env.RUNWEAVE_TERMINAL_AGENT_OPERATION_ID &&
25
+ [
26
+ "sessionstart",
27
+ "userpromptsubmit",
28
+ "interrupt",
29
+ "stop",
30
+ "permissionrequest",
31
+ "pretooluse",
32
+ "posttooluse",
33
+ ].includes(normalizedEvent)
34
+ ) {
35
+ const supervisionEndpoint = new URL(
36
+ "/internal/task-supervision",
37
+ stateEndpoint,
38
+ ).toString();
39
+ const version = !["sessionstart", "userpromptsubmit", "stop"].includes(
40
+ normalizedEvent,
41
+ )
42
+ ? null
43
+ : spawnSync(
44
+ process.env.RUNWEAVE_CODEX_EXECUTABLE ||
45
+ process.env.RUNWEAVE_CODEX_BINARY ||
46
+ "codex",
47
+ ["--version"],
48
+ {
49
+ encoding: "utf8",
50
+ timeout: 500,
51
+ maxBuffer: 1024,
52
+ },
53
+ );
54
+ const event = {
55
+ sessionstart: "SessionStart",
56
+ userpromptsubmit: "UserPromptSubmit",
57
+ interrupt: "Interrupt",
58
+ stop: "Stop",
59
+ permissionrequest: "PermissionRequest",
60
+ pretooluse: "PreToolUse",
61
+ posttooluse: "PostToolUse",
62
+ }[normalizedEvent];
63
+ try {
64
+ const response = await fetch(supervisionEndpoint, {
65
+ method: "POST",
66
+ headers: {
67
+ "Content-Type": "application/json",
68
+ "X-Runweave-Hook-Token": token,
69
+ },
70
+ signal: AbortSignal.timeout(
71
+ normalizedEvent === "stop"
72
+ ? Math.max(1, hookStartedAt + 110000 - Date.now())
73
+ : 700,
74
+ ),
75
+ body: JSON.stringify({
76
+ target: {
77
+ terminalSessionId,
78
+ panelId: terminalPanelId,
79
+ threadId,
80
+ executorGeneration:
81
+ process.env.RUNWEAVE_TERMINAL_AGENT_OPERATION_ID,
82
+ },
83
+ event,
84
+ ...(typeof payload.tool_name === "string"
85
+ ? { toolName: payload.tool_name }
86
+ : {}),
87
+ hookVersion: 1,
88
+ codexVersion: String(version?.stdout || "").trim(),
89
+ ...(process.env.RUNWEAVE_CODEX_CONFIG_ARGS
90
+ ? {
91
+ executionConfig: {
92
+ binary:
93
+ process.env.RUNWEAVE_CODEX_EXECUTABLE ||
94
+ process.env.RUNWEAVE_CODEX_BINARY ||
95
+ "codex",
96
+ home:
97
+ process.env.CODEX_HOME || path.join(os.homedir(), ".codex"),
98
+ cwd: process.cwd(),
99
+ args: JSON.parse(process.env.RUNWEAVE_CODEX_CONFIG_ARGS),
100
+ },
101
+ }
102
+ : {}),
103
+ ...(typeof payload.model === "string"
104
+ ? { executionModel: payload.model }
105
+ : {}),
106
+ rawTurnId: payload.turn_id || undefined,
107
+ ...(normalizedEvent === "stop" &&
108
+ typeof payload.last_assistant_message === "string"
109
+ ? { reply: payload.last_assistant_message }
110
+ : {}),
111
+ ...(normalizedEvent === "userpromptsubmit"
112
+ ? { prompt: extractUserPrompt(payload) }
113
+ : {}),
114
+ deadline:
115
+ hookStartedAt + (normalizedEvent === "stop" ? 110000 : 1500),
116
+ }),
117
+ });
118
+ debug("task supervision hook response", {
119
+ event,
120
+ status: response.status,
121
+ version: String(version?.stdout || "").trim(),
122
+ });
123
+ if (response.ok)
124
+ return { result: await response.json(), endpoint: supervisionEndpoint };
125
+ } catch (error) {
126
+ debug("task supervision hook unavailable", {
127
+ event,
128
+ error: error instanceof Error ? error.name : "unknown",
129
+ });
130
+ /* Allow native stop on unavailable supervision; never paste late input. */
131
+ }
132
+ // Interrupt has a native 3-second ceiling. It only invalidates decisions.
133
+ }
134
+ return null;
135
+ }
136
+ async function writeContinuation(offer, token) {
137
+ const supervision = offer?.result;
138
+ if (
139
+ supervision?.action !== "request-continuation" ||
140
+ !offer.endpoint ||
141
+ Date.now() >= supervision.deadline - 1000
142
+ )
143
+ return;
144
+ try {
145
+ const response = await fetch(`${offer.endpoint}/validate`, {
146
+ method: "POST",
147
+ headers: {
148
+ "Content-Type": "application/json",
149
+ "X-Runweave-Hook-Token": token,
150
+ },
151
+ signal: AbortSignal.timeout(700),
152
+ body: JSON.stringify({
153
+ watchId: supervision.watchId,
154
+ decisionId: supervision.decisionId,
155
+ revision: supervision.revision,
156
+ }),
157
+ });
158
+ const result = response.ok ? await response.json() : null;
159
+ if (result?.valid && Date.now() < supervision.deadline - 500)
160
+ process.stdout.write(
161
+ JSON.stringify({ decision: "block", reason: supervision.reason }),
162
+ );
163
+ } catch {
164
+ /* Keep uncertain offers reserved; never replay. */
165
+ }
166
+ }
167
+ module.exports = { requestSupervision, writeContinuation };
@@ -0,0 +1,108 @@
1
+ {
2
+ "hooks": {
3
+ "PreToolUse": [
4
+ {
5
+ "matcher": ".*",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "sh -c 'for root in \"${RUNWEAVE_TOOLKIT_PLUGIN_ROOT:-}\" \"__PLUGIN_DIR__\" . \"${CODEX_PLUGIN_ROOT:-}\" \"$HOME/.codex/plugins/cache/runweave/toolkit/latest\" \"$HOME/.codex/plugins/cache/runweave/toolkit\"/* \"${CLAUDE_PLUGIN_ROOT:-}\"; do if [ -n \"$root\" ] && [ -f \"$root/hooks/runweave-hook-dispatch.cjs\" ]; then exec node \"$root/hooks/runweave-hook-dispatch.cjs\"; fi; done; exit 0'",
10
+ "timeout": 5
11
+ }
12
+ ]
13
+ }
14
+ ],
15
+ "PostToolUse": [
16
+ {
17
+ "matcher": ".*",
18
+ "hooks": [
19
+ {
20
+ "type": "command",
21
+ "command": "sh -c 'for root in \"${RUNWEAVE_TOOLKIT_PLUGIN_ROOT:-}\" \"__PLUGIN_DIR__\" . \"${CODEX_PLUGIN_ROOT:-}\" \"$HOME/.codex/plugins/cache/runweave/toolkit/latest\" \"$HOME/.codex/plugins/cache/runweave/toolkit\"/* \"${CLAUDE_PLUGIN_ROOT:-}\"; do if [ -n \"$root\" ] && [ -f \"$root/hooks/runweave-hook-dispatch.cjs\" ]; then exec node \"$root/hooks/runweave-hook-dispatch.cjs\"; fi; done; exit 0'",
22
+ "timeout": 5
23
+ }
24
+ ]
25
+ }
26
+ ],
27
+ "SessionStart": [
28
+ {
29
+ "matcher": "*",
30
+ "hooks": [
31
+ {
32
+ "type": "command",
33
+ "command": "sh -c 'for root in \"${RUNWEAVE_TOOLKIT_PLUGIN_ROOT:-}\" \"__PLUGIN_DIR__\" . \"${CODEX_PLUGIN_ROOT:-}\" \"$HOME/.codex/plugins/cache/runweave/toolkit/latest\" \"$HOME/.codex/plugins/cache/runweave/toolkit\"/* \"${CLAUDE_PLUGIN_ROOT:-}\"; do if [ -n \"$root\" ] && [ -f \"$root/hooks/runweave-hook-dispatch.cjs\" ]; then exec node \"$root/hooks/runweave-hook-dispatch.cjs\"; fi; done; exit 0'",
34
+ "timeout": 5
35
+ }
36
+ ]
37
+ }
38
+ ],
39
+ "Stop": [
40
+ {
41
+ "hooks": [
42
+ {
43
+ "type": "command",
44
+ "command": "sh -c 'for root in \"${RUNWEAVE_TOOLKIT_PLUGIN_ROOT:-}\" \"__PLUGIN_DIR__\" . \"${CODEX_PLUGIN_ROOT:-}\" \"$HOME/.codex/plugins/cache/runweave/toolkit/latest\" \"$HOME/.codex/plugins/cache/runweave/toolkit\"/* \"${CLAUDE_PLUGIN_ROOT:-}\"; do if [ -n \"$root\" ] && [ -f \"$root/hooks/runweave-hook-dispatch.cjs\" ]; then exec node \"$root/hooks/runweave-hook-dispatch.cjs\"; fi; done; exit 0'",
45
+ "timeout": 120
46
+ }
47
+ ]
48
+ }
49
+ ],
50
+ "SubagentStop": [
51
+ {
52
+ "hooks": [
53
+ {
54
+ "type": "command",
55
+ "command": "sh -c 'for root in \"${RUNWEAVE_TOOLKIT_PLUGIN_ROOT:-}\" \"__PLUGIN_DIR__\" . \"${CODEX_PLUGIN_ROOT:-}\" \"$HOME/.codex/plugins/cache/runweave/toolkit/latest\" \"$HOME/.codex/plugins/cache/runweave/toolkit\"/* \"${CLAUDE_PLUGIN_ROOT:-}\"; do if [ -n \"$root\" ] && [ -f \"$root/hooks/runweave-hook-dispatch.cjs\" ]; then exec node \"$root/hooks/runweave-hook-dispatch.cjs\"; fi; done; exit 0'",
56
+ "timeout": 5
57
+ }
58
+ ]
59
+ }
60
+ ],
61
+ "UserPromptSubmit": [
62
+ {
63
+ "hooks": [
64
+ {
65
+ "type": "command",
66
+ "command": "sh -c 'for root in \"${RUNWEAVE_TOOLKIT_PLUGIN_ROOT:-}\" \"__PLUGIN_DIR__\" . \"${CODEX_PLUGIN_ROOT:-}\" \"$HOME/.codex/plugins/cache/runweave/toolkit/latest\" \"$HOME/.codex/plugins/cache/runweave/toolkit\"/* \"${CLAUDE_PLUGIN_ROOT:-}\"; do if [ -n \"$root\" ] && [ -f \"$root/hooks/runweave-hook-dispatch.cjs\" ]; then exec node \"$root/hooks/runweave-hook-dispatch.cjs\"; fi; done; exit 0'",
67
+ "timeout": 5
68
+ }
69
+ ]
70
+ }
71
+ ],
72
+ "Notification": [
73
+ {
74
+ "matcher": "permission_prompt|idle_prompt",
75
+ "hooks": [
76
+ {
77
+ "type": "command",
78
+ "command": "sh -c 'for root in \"${RUNWEAVE_TOOLKIT_PLUGIN_ROOT:-}\" \"__PLUGIN_DIR__\" . \"${CODEX_PLUGIN_ROOT:-}\" \"$HOME/.codex/plugins/cache/runweave/toolkit/latest\" \"$HOME/.codex/plugins/cache/runweave/toolkit\"/* \"${CLAUDE_PLUGIN_ROOT:-}\"; do if [ -n \"$root\" ] && [ -f \"$root/hooks/runweave-hook-dispatch.cjs\" ]; then exec node \"$root/hooks/runweave-hook-dispatch.cjs\"; fi; done; exit 0'",
79
+ "timeout": 5
80
+ }
81
+ ]
82
+ }
83
+ ],
84
+ "Interrupt": [
85
+ {
86
+ "hooks": [
87
+ {
88
+ "type": "command",
89
+ "command": "sh -c 'for root in \"${RUNWEAVE_TOOLKIT_PLUGIN_ROOT:-}\" \"__PLUGIN_DIR__\" . \"${CODEX_PLUGIN_ROOT:-}\" \"$HOME/.codex/plugins/cache/runweave/toolkit/latest\" \"$HOME/.codex/plugins/cache/runweave/toolkit\"/* \"${CLAUDE_PLUGIN_ROOT:-}\"; do if [ -n \"$root\" ] && [ -f \"$root/hooks/runweave-hook-dispatch.cjs\" ]; then exec node \"$root/hooks/runweave-hook-dispatch.cjs\"; fi; done; exit 0'",
90
+ "timeout": 3
91
+ }
92
+ ]
93
+ }
94
+ ],
95
+ "PermissionRequest": [
96
+ {
97
+ "matcher": ".*",
98
+ "hooks": [
99
+ {
100
+ "type": "command",
101
+ "command": "sh -c 'for root in \"${RUNWEAVE_TOOLKIT_PLUGIN_ROOT:-}\" \"__PLUGIN_DIR__\" . \"${CODEX_PLUGIN_ROOT:-}\" \"$HOME/.codex/plugins/cache/runweave/toolkit/latest\" \"$HOME/.codex/plugins/cache/runweave/toolkit\"/* \"${CLAUDE_PLUGIN_ROOT:-}\"; do if [ -n \"$root\" ] && [ -f \"$root/hooks/runweave-hook-dispatch.cjs\" ]; then exec node \"$root/hooks/runweave-hook-dispatch.cjs\"; fi; done; exit 0'",
102
+ "timeout": 5
103
+ }
104
+ ]
105
+ }
106
+ ]
107
+ }
108
+ }
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: acceptance
3
+ description: 为当前改动生成适合手机查看的验收材料,默认图文,需要连续过程时制作视频,统一真实采集、来源说明、预览和检查。用户要求验收材料、手机看效果、截图说明、验收视频或录屏证据时使用;普通开发和测试不默认制作材料。
4
+ ---
5
+
6
+ # 验收材料
7
+
8
+ 用户只需提出“给我本次改动的手机验收材料”。Agent 从判断问题出发选择形式,固定脚本负责图册、录制和视频制作。成功生成材料、完成业务验收、用户确认提交是独立事实。
9
+
10
+ 脚本相对本 `SKILL.md` 定位。`SKILL` 为本目录绝对路径,`RUN` 为本次独立产物目录;Runweave 通常使用 `artifacts/verification-runs/<唯一任务目录>/`。只读取本次材料及用户明确引用的历史,不自动检索其他任务。
11
+
12
+ ## 选择形式与证据
13
+
14
+ - **默认图文**:布局、设置、静态结果、少量前后变化。CLI/后台结果可直接作为文字页,不硬配截图。
15
+ - **按需视频**:连续交互、状态流转、等待或恢复过程是判断重点。先复用真实原片;需要补录时采集本次实际操作。
16
+ - **组合**:视频说明过程,图文补充小字号细节、结果或来源。只补有帮助的内容,不为凑套装生成两份。
17
+ - **原始录屏**:用户只要求取证或保存验证过程时,交付原片与采集元数据;不要求 OpenScreen、不增加字幕剪辑。普通“跑测试/浏览器检查”不自动升级为录屏。
18
+
19
+ 先说明本次要展示的变化、运行端与关键操作,沿用已授权范围继续;不重复请求批准故事板。复用已有素材前核对对象、版本、来源和时间,历史示例必须标明历史。离散截图不是连续录像,模拟器、浏览器模拟、已安装 App 与真机结论分开。
20
+
21
+ 需要补素材时:Web/Electron 使用 `toolkit:playwright-cli` 选择正确 Profile、Dev Session 或隔离页面;iOS 使用 `toolkit:agent-device`。操作 Runweave Dev Session 生命周期时使用其专属技能。不为整理材料启动无关环境,不覆盖用户页面,不在截图或原片中录入凭据和无关通知。
22
+
23
+ ## 按形式生成
24
+
25
+ 只读取当前形式的引用,所有浏览器连续帧采集统一使用 `capture.py`:
26
+
27
+ - **图文**:读[取景与配文](references/gallery-copy.md)和[图文输入合同](references/gallery-contract.md),准备 `gallery.json` 与显式列出的真实素材。
28
+ - **视频**:读[视频输入与制作](references/video.md),准备 `video.json`,Agent 只填原片、字幕和放大区间,不重写渲染程序。
29
+ - **需浏览器补录或仅原始录屏**:读[唯一采集流程](references/capture.md)。原生窗口可使用已连接 OpenScreen 的窗口录制工具,先核对权限和目标;不以整个桌面或替代页面冒充目标录屏。
30
+
31
+ ```bash
32
+ # 图文:无需 OpenScreen 或 ffmpeg。
33
+ python3 "$SKILL/scripts/gallery.py" validate --input-root "$RUN" --input gallery.json
34
+ python3 "$SKILL/scripts/gallery.py" build --input-root "$RUN" --input gallery.json --output "$RUN/gallery"
35
+
36
+ # 视频:仅选择视频制作时检查这些依赖。
37
+ python3 "$SKILL/scripts/video.py" doctor
38
+ python3 "$SKILL/scripts/video.py" validate --input "$RUN/video.json"
39
+ python3 "$SKILL/scripts/video.py" build --input "$RUN/video.json" --output "$RUN/video"
40
+ ```
41
+
42
+ 生成器拒绝覆盖成果。图文携带固定阅读器、原图/原文和来源;视频保留原片引用与哈希、独立 OpenScreen 工程/checkpoint、主片、手机压缩版与关键帧。渲染错误、采集错误或结果未知时保留本次证据并如实说明,不以旧文件或空输出代替,不自动重放结果未知的写操作。
43
+
44
+ ## 统一检查与手机入口
45
+
46
+ 读[预览与检查](references/delivery.md)。先看实际产物,再提供入口:
47
+
48
+ - 图文检查逐页解码、翻页、目录、刷新定位、展开返回,以及原图/原文页内查看和实际尺寸;在桌面及手机窄屏核对阅读、遮挡和横向溢出。
49
+ - 视频检查完整解码、每段字幕、放大区域及取景;在手机竖屏与横屏观察真实画面,并通过实际播放器控制条完成播放、暂停、继续、进度跳转和重新打开。精确抽帧不等于触摸验证。
50
+ - 浏览器模拟明确记录引擎、尺寸和范围;iPhone 的 Safari/AVPlayer、全屏/旋转和阅读距离需要真机单独确认。未执行就保留缺口,不能由浏览器截图补成真机通过。
51
+
52
+ 有 Runweave 连接时,图文和视频共用一个文件票据入口:
53
+
54
+ ```bash
55
+ python3 "$SKILL/scripts/preview.py" \
56
+ --file "$RUN/gallery/index.html" --project-id <当前实际项目ID> \
57
+ --profile local --viewer-base-url <手机实际可访问的Backend地址> \
58
+ --output "$RUN/gallery-links-01.json"
59
+ # 视频将 --file 换为 "$RUN/video/review.mp4",并使用新的输出 JSON。
60
+ ```
61
+
62
+ 该步骤核对服务身份、匿名读取和文件字节,不创建公开服务,也不证明手机网络已可达。`127.0.0.1` 和 Mac 文件路径不能当作手机链接;局域网、外网转发和物理手机分别核对。没有适用入口时如实给出本地产物与缺失条件,不擅自改路由、认证或建立隧道。每个链接说明到期时间,续期生成新的链接文件。
63
+
64
+ ## 交付、清理与迭代
65
+
66
+ 最终说明本次改了什么、材料覆盖什么、实际检查结果和未验证部分。给可打开的入口、观看步骤、网络/主机前提,以及正常查看是否需要人在 Mac 操作。按需附 1–3 张能反映实际效果的截图;视频小字看不清时补图文或原图。
67
+
68
+ 只停止本任务创建的采集、MCP、浏览器或本地预览服务,保留用户运行环境、原片及工程。材料不自动判定用户验收通过,不自动提交、上传、发消息或完成待办。随记任务使用 `toolkit:suiji`,只追加成功最终成果,完成状态独立授权。
69
+
70
+ 后续可复现的问题在本目录修正默认值、脚本或对应引用,验证真实输出后同步安装 Toolkit。`acceptance-gallery`、`acceptance-video` 和 `recorded-browser-mcp-verification` 仅保留显式兼容转发,不维护第二套规则或实现;新请求统一使用本入口。
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "验收材料"
3
+ short_description: "根据本次改动选择图文或视频,生成适合手机查看的真实验收材料"
4
+ default_prompt: "使用 $acceptance,给我本次改动的手机验收材料,说明已验证范围和查看方式,等我确认后再提交代码。"
@@ -0,0 +1,38 @@
1
+ # 浏览器采集
2
+
3
+ 用户只要录屏证据时,交付本流程的 `recording.mp4` 与 `capture.json`、帧和动作记录,不依赖 OpenScreen,也不追加字幕剪辑。需要连续操作视频时复用同一流程采集原片,再交给视频制作。
4
+
5
+ 先按 `toolkit:playwright-cli` 选择正确的实际页面并完成准备工作。已有页面不可用隔离浏览器冒充;独立预览页才使用隔离浏览器。采集只包住最终需要展示的操作,不重新执行整段开发过程。
6
+
7
+ 把操作写为 `actions.js`:一个 `async (page, clock) => { ... }` 表达式,无 `import`、`require`、`export`。`clock.now()` 返回相对录制起点的秒数,可记录实际动作和观察。使用本次页面里观察到的 locator;下面只是动作记录格式:
8
+
9
+ ```javascript
10
+ async (page, clock) => {
11
+ const steps = [];
12
+ // 在此使用当前页面观察到的 locator 执行本任务的操作,并验证结果。
13
+ // 每步可记录 {atSeconds: clock.now(), action: '实际动作', observed: '实际观察'}。
14
+ return steps;
15
+ };
16
+ ```
17
+
18
+ 这不是可直接执行的验收案例,必须填入当前任务的真实动作后再采集。避免录入密码、通知或连接凭据。
19
+
20
+ ```bash
21
+ python3 "$SKILL/scripts/capture.py" prepare \
22
+ --actions "$RUN/actions.js" --output "$RUN/capture" --fps 4
23
+
24
+ # 复用已按 Playwright Skill 选择的自有/已附着会话。
25
+ # 采集元数据可能包含目标 URL;限制本次输出文件权限。
26
+ umask 077
27
+ pnpm exec playwright cli -s="$SESSION" --raw run-code \
28
+ --filename="$RUN/capture/run-code.js" > "$RUN/capture/capture.json"
29
+
30
+ python3 "$SKILL/scripts/capture.py" encode \
31
+ --input "$RUN/capture/capture.json" --output "$RUN/recording.mp4"
32
+ ```
33
+
34
+ `prepare` 只生成包装器,不启动浏览器或执行动作;可加 `--clip x,y,width,height` 使用已观察的 viewport 区域。`--fps` 为采样上限,默认 4,不是恒定实际采集频率。包装器并发采集 PNG,记录每张截图的真实相对请求时间;`encode` 使用实际间隔和总时长编码,而不是简单按帧数除以 4 计算。帧采样、截图耗时及 30 FPS 编码的舍入不适合精确性能或流畅度结论。
35
+
36
+ 操作/截图失败时包装器抛错;CLI 错误不是合法采集数据,`encode` 必须拒绝。保留截图用于诊断,不能把未返回成功采集记录的帧当成完整录屏。脚本拒绝覆盖现有目录、原片和时间轴文件。若操作需要高帧率、系统弹窗或原生窗口,改用适当的实际录屏来源,并记录来源差异。
37
+
38
+ 包装器自动记录开始/结束 URL、标题与 viewport,绑定到执行动作的同一个 page。Profile、target 或 Dev Session 身份通过当前任务的解析/附着回执保留,不能由截图猜测。动作需要的项目或终端应属于本次真实工作区;不为凑录屏新建空项目或复制代码冒充当前任务。
@@ -0,0 +1,54 @@
1
+ # 预览与检查
2
+
3
+ 图文、视频和原片共用此处的访问与证据边界。优先使用任务已有的附件或经过验证的预览通道;材料默认留在本地,不自动上传或发布。
4
+
5
+ ## 图文检查
6
+
7
+ 逐页核对图片实际解码、配文、来源、取景及原图字节。检查翻页、目录、刷新定位、展开/返回分页,桌面与约 390–402px 手机窄屏的阅读和横向溢出。
8
+
9
+ 阅读器的原图、原文和来源素材在页内对话框打开,支持图片“实际尺寸/适应屏幕”、滚动、关闭、Escape 和回到原焦点。要通过实际交付入口检查这些操作;本地正常不等于 Backend 预览沙箱里正常。原图保持原始字节,取景只影响正文显示,不修改原片或原图。文字页可直接复制内容,不必截成终端长图。
10
+
11
+ ## 视频与原片检查
12
+
13
+ 固定制作脚本会完整解码并抽取关键帧,Agent 仍需查看每段字幕、放大区间及转场:不能遮住关键反馈、裁掉目标、文字出画或放大到模糊。原始录屏则核对目标页面、动作记录、采样时序和结尾状态,不要求字幕或编辑效果。
14
+
15
+ 独立视频链接按 `toolkit:playwright-cli` 使用隔离会话,清除继承的 CDP/remote endpoint,不覆盖用户业务页面;已有运行界面采集继续使用其正确 Profile/Session。记录引擎、viewport、DPR 和触摸参数,Chrome 的 iPhone 设备参数不能称作 Safari。
16
+
17
+ 在竖屏约 390–402px 宽及对应横屏中:
18
+
19
+ 1. 打开实际交付链接,确认加载视频而非登录页或错误文本。
20
+ 2. 使用当前截图中观察到的播放器控制条,实际播放、暂停、继续、跳转,确认 seek 已完成且帧已显示,再重新打开。
21
+ 3. 看字幕与局部细节是否足以支持本次判断,播放器控制条出现时是否遮挡;小字仍不可读时缩小取景、补局部图文或保留缺口。
22
+ 4. 按任务范围检查全屏、旋转。精确取样可以设置 `video.currentTime`,但这不能证明触摸进度条已通过。Chrome 自动播放不能外推到 iPhone。
23
+
24
+ ## Runweave 预览
25
+
26
+ `preview.py` 专用于已配置 Runweave Backend 的 HTML 或 MP4 文件。它不创建公开文件服务,不转移文件到另一台服务器:传入文件必须存在于对应 Backend 机器,项目身份与路径须符合服务端检查。当前 HTML 接口限入口 1 MiB、同目录单个资源 5 MiB;视频使用独立 Range 入口,不把 MP4 塞进 HTML 静态资源通道。
27
+
28
+ ```bash
29
+ python3 "$SKILL/scripts/preview.py" \
30
+ --file "$RUN/gallery/index.html" --project-id <实际项目ID> \
31
+ --profile local --viewer-base-url <手机实际可访问的Backend地址> \
32
+ --output "$RUN/gallery-links-01.json"
33
+
34
+ python3 "$SKILL/scripts/preview.py" \
35
+ --file "$RUN/video/review.mp4" --project-id <实际项目ID> \
36
+ --profile local --viewer-base-url <手机实际可访问的Backend地址> \
37
+ --output "$RUN/video-links-01.json"
38
+ ```
39
+
40
+ 默认读取 `~/.runweave/settings.yaml` 中 `cli.profiles.<profile>` 的 `baseUrl/accessToken`,要求 0600 权限,需 PyYAML。没有该连接时不遍历凭据或读取应用密码。已有 API token 环境变量可用 `--token-env RUNWEAVE_PREVIEW_TOKEN --backend <已配置地址>`,参数只传变量名称,不传 token 值。
41
+
42
+ 脚本只向配置中的 Backend 发送 Bearer,先核对 viewer `/health` 的服务身份,再匿名核对 HEAD、类型、长度。视频检查 Range 206 与本地字节一致;HTML 检查 GET 与本地字节一致,其脚本、样式和图片还须实际打开核对。拒绝重定向,避免转发凭据或预览权限;新票据保存到新的 0600 JSON。读取 `url/expiresAt` 用于交付,不将链接 JSON、连接文件或素材提交 Git。
43
+
44
+ 票据不是永久链接;文件变化可能使旧票据失效。材料定稿后再生成,过期后换新输出文件续期。旧 `video.py preview --video ...` 仍转发到这套实现,不维护独立逻辑。
45
+
46
+ Mac 文件路径与 `127.0.0.1` 只能用于本机;局域网入口依赖手机可达、Mac 唤醒与 Backend 运行。Agent 从同一机器访问自己的 LAN 地址不等于跨设备验证。远程转发可能只放行健康检查而不放行 `/html-preview/`、`/video-preview/`,以实际匿名读取为准;缺路由就说明,不擅自改网关、认证或新建隧道。
47
+
48
+ ## 真机与最终记录
49
+
50
+ 需要真机时沿用 `toolkit:agent-device` 的已保存目标和独立会话;核对手机实际网络打开、阅读、播放/拖动、旋转/全屏和重新打开。保存分享只在用户要求时验证。真机不可控时保留模拟结论与明确缺口,不换设备冒充目标手机。
51
+
52
+ 在任务产物目录另存 `review-check.json`,仅记录实际执行的检查:产物形式、运行环境与来源、每项动作和观察、证据路径、阅读判断、链接期限和访问前提,以及真机状态。未执行项用 `not-run`,不让生成器填充“验收通过”。
53
+
54
+ `macActionsWhileViewing` 只在观察完整查看流程后填写次数,否则为 `null`。0 仅表示该流程没有要求人在 Mac 点击;Mac 保持在线、后台运行、网络恢复和链接续期仍是访问条件。
@@ -0,0 +1,84 @@
1
+ # 图文材料数据合同 v1
2
+
3
+ ## 输入
4
+
5
+ UTF-8 JSON,拒绝重复键、未知字段、NaN 和未知版本。文件路径相对 `--input-root`;`--input` 默认 `task.json`。根目录必须已存在。ID 为 1–80 位字母、数字、`-`、`_`,首位为字母或数字。
6
+
7
+ | 对象 | 字段 |
8
+ | ------ | ---------------------------------------------------------------------------------------------------------------------------------- |
9
+ | root | `schemaVersion: 1`、`task`、`assets: []`、`pages: []` |
10
+ | task | `id`、`title`、`scope`、`materialKind: current/historical`、`limitations: string[]` |
11
+ | asset | 唯一 `id`、`kind: image/text`、`path`、`label`、`origin` |
12
+ | origin | `surface`、`capturedAt`、`sourceRef`,每项为非空字符串或 `null` |
13
+ | page | 唯一 `id`、`type`、`title`、`description`、`evidenceState`、`items`、`sourceIds: string[]`;可选 `lookAt`、`limitations: string[]` |
14
+ | item | `assetId`、`label`;图片项必需 `alt`,可选 `crop: {x,y,width,height}`;文字项不接受 alt/crop |
15
+
16
+ 文字必填项须为非空字符串。时间按实际采集记录填写,建议带时区 ISO 8601;不知道则 `null`。版本、设备、对象身份等条件写在 scope、description 或关联文字记录中,`sourceRef` 给其原始位置或记录标识。各素材允许不同来源,但不能因此宣称同一事件。
17
+
18
+ | type | items 数量 | 素材 kind |
19
+ | -------- | ---------- | --------- |
20
+ | single | 1 | image |
21
+ | compare | 2 | image |
22
+ | sequence | 2–4 | image |
23
+ | text | 1 | text |
24
+
25
+ `pages` 至少一项;数组顺序为阅读顺序。页面 ID 用于 `#page=<id>`,修改描述时保留 ID。
26
+
27
+ `evidenceState` 为 `observed`(有观察材料)、`insufficient`(证据不足)、`not-run`(未执行),不含业务通过/失败判定。后两项的具体缺口应写在正文或 limitations 中;未执行又没有截图时用真实文字说明页,不造图。
28
+
29
+ `sourceIds` 只引用 text 素材,可为空。PNG/JPEG 图片最大 32 MiB、宽高各最多 32768px;文字 TXT/MD/JSON 及输入 JSON 最大 2 MiB。JSON 素材也要求合法 JSON。PNG 校验结构和 CRC;JPEG 检查容器与常用 SOF 尺寸,完整解码由浏览器验证。若图片打不开,不能只依据 validate 成功交付。
30
+
31
+ `crop` 为原 PNG 整数像素坐标,x/y 非负、width/height 为正且完整位于原图内。JPEG 仅允许完整展示,避免 EXIF 方向与坐标歧义。原图不被重采样或写回。
32
+
33
+ ## 最小可执行输入
34
+
35
+ 在同一输入目录准备真实的 `observation.txt`,再保存如下 `task.json`;把示例内容改成当前任务事实后执行。
36
+
37
+ ```json
38
+ {
39
+ "schemaVersion": 1,
40
+ "task": {
41
+ "id": "current-task",
42
+ "title": "当前任务的核对结果",
43
+ "scope": "说明本次核对范围与环境",
44
+ "materialKind": "current",
45
+ "limitations": []
46
+ },
47
+ "assets": [
48
+ {
49
+ "id": "observation",
50
+ "kind": "text",
51
+ "path": "observation.txt",
52
+ "label": "实际观察记录",
53
+ "origin": { "surface": "CLI", "capturedAt": null, "sourceRef": null }
54
+ }
55
+ ],
56
+ "pages": [
57
+ {
58
+ "id": "result",
59
+ "type": "text",
60
+ "title": "本次实际观察到了什么",
61
+ "description": "交代操作条件、实际动作与观察,不超过原始记录的证据范围。",
62
+ "evidenceState": "observed",
63
+ "items": [{ "assetId": "observation", "label": "结果原文" }],
64
+ "sourceIds": []
65
+ }
66
+ ]
67
+ }
68
+ ```
69
+
70
+ ## 原始素材查看
71
+
72
+ 正文图片、标题旁的原图/原文和来源链接都在阅读器内部打开,不依赖弹窗或页面跳转。图片可切换实际尺寸并滚动;关闭后保持原来的页码和焦点。原图与原文文件仍单独保留,复制成果目录后可直接使用。Backend 的 HTML 预览沙箱与真机阅读仍须通过实际入口核对,不能仅凭本地打开推断。
73
+
74
+ ## 输出与错误
75
+
76
+ `validate` 返回 JSON `{valid, pages, assets}`,不写文件。`build` 返回 `{output, index, pages}`。成功退出 0;输入、文件或运行错误退出 1,命令参数错误退出 2,stderr 给出字段或文件原因。`serve` 前台长驻,第一行返回 `{url,pid,directory,stop}`;Ctrl-C 正常停止。
77
+
78
+ 输出文件:`index.html`、`reader.css`、`viewer.css`、`reader.js`、`task.json`、`manifest.json` 与 `assets/`。正文及关联文字内嵌进页面,不依赖 fetch 或外网;原始文字与图片也单独保留。task.json 保持输入合同,path 改为成果内相对路径。manifest 保存 schemaVersion、templateVersion、原始输入摘要及复制素材 SHA-256。
79
+
80
+ 生成失败不留下最终目录,已有输出拒绝覆盖。生成器用同目标的临时锁串行化生成;进程被强杀可能留下 `.gallery-lock` 和 `.gallery-*`,核对没有相同目标构建在运行后,才清理这些本次临时文件或换新输出目录。不要删除旧成果绕过覆盖检查。
81
+
82
+ 未知版本拒绝;不自动迁移。每份报告带模板副本,后续升级不改变旧报告。生成器只处理显式列出的素材,不自动爬取来源、执行命令或读整个历史。
83
+
84
+ `serve` 只绑定 `127.0.0.1`,只允许清单中的文件,不开放目录列表和写接口;根目录越界及符号链接逃逸均拒绝。素材路径不接受绝对路径、`..`、反斜线、冒号或远程 URL。页面文本转义显示,不支持任务传入 HTML。输入输出根目录应由当前用户控制,不将此本机工具部署为多用户公共服务。
@@ -0,0 +1,34 @@
1
+ # 取景与配文
2
+
3
+ ## 问题决定素材
4
+
5
+ | 要判断什么 | 最少材料 | 容易误读的地方 |
6
+ | ---------------- | -------------------------------------- | -------------------------------------------- |
7
+ | 布局、控件可见性 | 目标区域及所属区域的定位锚点 | 切掉上下文后看不出位置;大块空白压缩关键文字 |
8
+ | 遮挡、安全区 | 遮挡物、目标及相关边缘同时入画 | 只截可见部分,无法判断是否仍被覆盖 |
9
+ | 状态变化 | 同一对象的前后图,说明改变了哪些条件 | 不同窗口或宽度不能直接当作修复前后 |
10
+ | 多步流程 | 入口、关键分支、结果,2–4 张关键图 | 离散截图不证明连续动作或实际时长 |
11
+ | 保存、重启、恢复 | 可见结果与真实事件、身份或状态核对记录 | 成功提示或终点图不证明持久化 |
12
+ | CLI、API 或后台 | 可复制的真实结果文字与来源 | 不需要截成很长的终端图片 |
13
+
14
+ 页数由问题决定,不用“必须三张”一类数量目标驱动采集。需要判断重复稳定性时保留尝试条件和次数;没有这类证据就保留缺口。
15
+
16
+ ## 截图如何放
17
+
18
+ 原始图片保持字节不变。`crop` 仅设置阅读器显示窗口,完整原图仍可打开。第一版只允许 PNG 取景,JPEG 可完整展示;JPEG 的 EXIF 方向可能与像素坐标不一致,需要取景时在原界面重新采集 PNG,不修改或补画原图。
19
+
20
+ 在实际阅读尺寸检查关键文字。太小则缩小取景范围或拆页;不要为了整齐强行把所有图片压进相同尺寸。竖屏原图保持比例;宽图对照在手机上上下排列。图外“看这里”应指向可辨认的具体对象,不重复描述整张图。
21
+
22
+ 对照前核对目标、运行端、版本、尺寸与条件;不同条件必须说明。有结果图但没有前图时退回单图,不能生成假前图。需要真实运动或闪烁证据的任务不以截图模板替代原采集方式。
23
+
24
+ ## 文案如何写
25
+
26
+ 标题说明本页要核对的结果;建议 12–24 个中文字。正文以 1–2 句交代“条件、动作、实际观察”,建议 40–100 字。软长度目标不覆盖准确性要求。
27
+
28
+ - 历史关注区案例:写“A 已从关注区移出,但仍在下方项目列表中”;不写“A 被删除”。到期 fixture 不等于真实等待一小时。
29
+ - 历史配置案例:只有配置截图就写“当前显示四角色配置”;有受控重启、接口和文件哈希记录才可以写“重启后仍保留”,并链接相关记录。
30
+ - 历史跨端案例:两端显示相同状态可比较表达;没有匹配终端和事件身份时,不写“同一任务同步成功”。
31
+
32
+ `observed` 只表示有观察材料,观察到的也可能是失败;不要将它渲染或措辞为业务通过。`insufficient`、`not-run` 配合本页具体缺口。通用环境边界放任务说明,直接影响本页判断的缺口放本页正文或 limitations。
33
+
34
+ 截图事实、记录事实和推断要可区分。文案校对时对照原图和来源逐页检查;生成器不会替 Agent 判断结论真假。不要复制凭据、环境变量全集或无关日志。
@@ -0,0 +1,52 @@
1
+ # 视频输入与制作
2
+
3
+ ## 生成
4
+
5
+ 只在需要编辑视频时运行 `video.py doctor`。制作依赖 Python 3.9+、ffmpeg/ffprobe 和本机 OpenScreen;已装软件只核对缺失项,不自动改全局 MCP 配置或关闭用户应用。首次安装核对[官方发布](https://github.com/getopenscreen/openscreen/releases)的平台、版本、校验值与签名,沿用已有授权。
6
+
7
+ `video.py build --input <video.json> --output <新目录>` 直接调用 OpenScreen stdio MCP,不要求当前 Agent 热加载 MCP 工具。每次新建自己的工程/checkpoint,固定字幕与缩放、720p/30 FPS 导出,再压缩为静音 H.264 fast-start MP4,完整解码并抽帧。输出包含 `review.mp4`、主片、工程文档、输入、来源哈希、调用记录与制作 manifest。`rendered` 仅表示制作成功,不表示业务验收或手机通过;实际检查另按[交付规则](delivery.md)记录。
8
+
9
+ ## 已有原片
10
+
11
+ 把当前任务的原片放在独立产物目录,或引用已存在的绝对路径。不要移动、覆盖历史证据。`video.json` 的相对路径相对于它自身所在目录解析,不依赖调用脚本时的工作目录。
12
+
13
+ ```json
14
+ {
15
+ "schemaVersion": 1,
16
+ "title": "文件预览的操作变化",
17
+ "video": "recording.mp4",
18
+ "source": {
19
+ "surface": "installed-stable-web",
20
+ "description": "本次实际打开的版本、对象和操作范围",
21
+ "captureMethod": "playwright-viewport-screenshot-loop",
22
+ "evidence": "capture.json"
23
+ },
24
+ "callouts": [
25
+ { "start": 0, "end": 4.5, "text": "先看操作结果" },
26
+ { "start": 4.6, "end": 9, "text": "再核对关键变化" }
27
+ ],
28
+ "zooms": [
29
+ { "start": 5.5, "end": 8, "scale": 1.5, "focus": { "x": 0.58, "y": 0.35 } }
30
+ ],
31
+ "captionStyle": { "fontSize": 64, "x": 50, "y": 74 },
32
+ "sampleTimes": [2, 7]
33
+ }
34
+ ```
35
+
36
+ 示例时间需要按真实操作替换,不是固定业务步骤。字段:
37
+
38
+ - `schemaVersion` 固定为 1;`title`、`video`、`source.surface/description/captureMethod` 必填。来源是 Agent 记录的事实,脚本不能独立证明它;用当前任务的 manifest、采集记录或版本回执复核。可在 `source` 中增加 `historical`、设备和证据路径。
39
+ - `callouts` 与 `zooms` 可省略或为空;各自按时间排序、不重叠,`0 <= start < end <= 原片时长`。原片不剪切、不加速,因此时间与原片一致。
40
+ - 字幕用简短、事实性的中文说明动作或结果。不要把“通过”“已修复”写入尚未实际核对的片段。
41
+ - `scale` 使用 OpenScreen 六档缩放:`1.25 / 1.5 / 1.8 / 2.2 / 3.5 / 5`。脚本映射到 MCP 的 `depth`;`depth` 是档位,不是倍率。2.1.2 的 MCP 会给 `depth` 填默认值,直接传 `customScale` 可能被判为同时传入两种缩放参数;固定脚本用已验证的档位调用。
42
+ - `focus.x/y` 为原片中的 0–1 坐标;先看原片,再确定要展示的区域。不能只放大鼠标而裁掉反馈。
43
+ - `captionStyle` 仅支持字号和中心位置,默认 `64/50/74`,字号按 OpenScreen 的 1080p 设计尺寸定义;720p 导出会缩放。播放器覆盖区依设备而异,必须检查最终画面。
44
+ - `sampleTimes` 是最终 MP4 的抽帧时间,必须在结束前至少 0.05 秒。未提供时取每个字幕和放大区间中点;不限制关键帧数量,但不需要逐帧给 Agent 看整段视频。
45
+
46
+ 制作依赖:Python 3.9+ 标准库、`ffmpeg`、`ffprobe`、OpenScreen 的 MCP。macOS 默认可执行文件为 `/Applications/Openscreen.app/Contents/MacOS/Openscreen`;其他安装位置用 `video.py --openscreen <绝对路径> doctor/build ...`。脚本不会安装软件或修改全局 MCP 配置。
47
+
48
+ ## OpenScreen 调用依据
49
+
50
+ 固定脚本在本机 2.1.2 上验证,启动时读取实际 `initialize/tools/list`。工具 schema 与版本保存在产物中;工具缺失、编辑拒绝或超时均停止,不自动重试写操作,不直接改 OpenScreen 工程文件。
51
+
52
+ 官方入口:[CLI](https://getopenscreen.com/docs/cli/)、[Agent 接口](https://getopenscreen.com/docs/ai-editing/)。版本升级后先对真实原片运行 `doctor/build`,检查工程、渲染与关键帧,再调整调用合同。此技能未复制或捆绑 OpenScreen 本体。