@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,316 @@
1
+ // Runweave managed Pi extension. Generated by pnpm agents:build; do not edit.
2
+
3
+ // plugins/pi/extensions/runweave.ts
4
+ import { spawnSync } from "node:child_process";
5
+ import { createHash, randomUUID } from "node:crypto";
6
+ import { readFileSync, realpathSync } from "node:fs";
7
+ import { chmod, mkdir, unlink } from "node:fs/promises";
8
+ import { createServer, request } from "node:http";
9
+ import { fileURLToPath } from "node:url";
10
+
11
+ // packages/agent-bridge/src/transport.ts
12
+ import { spawn } from "node:child_process";
13
+ import path from "node:path";
14
+ function createBridgeTransport(source, bundledBridge) {
15
+ let delivery = Promise.resolve();
16
+ return {
17
+ publish(payload) {
18
+ const serialized = JSON.stringify(payload);
19
+ delivery = delivery.then(
20
+ () => new Promise((resolve) => {
21
+ const override = process.env.RUNWEAVE_AGENT_BRIDGE_ROOT;
22
+ const bridge = override ? path.join(override, "runweave-hook-bridge.cjs") : bundledBridge;
23
+ const child = spawn(
24
+ process.execPath,
25
+ [bridge, "--source", source],
26
+ {
27
+ stdio: ["pipe", "ignore", "ignore"]
28
+ }
29
+ );
30
+ const timeout = setTimeout(() => child.kill(), 8e3);
31
+ const finish = () => {
32
+ clearTimeout(timeout);
33
+ resolve();
34
+ };
35
+ child.stdin.on("error", () => {
36
+ });
37
+ child.once("error", finish);
38
+ child.once("close", finish);
39
+ child.stdin.end(serialized);
40
+ })
41
+ ).catch(() => {
42
+ });
43
+ },
44
+ drain: () => delivery
45
+ };
46
+ }
47
+
48
+ // plugins/pi/extensions/runweave.ts
49
+ import path2 from "node:path";
50
+ function runweave(pi) {
51
+ const terminalSessionId = process.env.RUNWEAVE_TERMINAL_SESSION_ID;
52
+ const tmuxSocket = process.env.TMUX?.split(",")[0];
53
+ const pane = process.env.TMUX_PANE;
54
+ if (!terminalSessionId || !tmuxSocket || !pane) return;
55
+ let context;
56
+ let closed = false;
57
+ let waitingForUI = false;
58
+ let sequence = 0;
59
+ let runId = null;
60
+ let outcome = null;
61
+ let reply = "";
62
+ const instanceId = randomUUID();
63
+ const startedAt = (/* @__PURE__ */ new Date()).toISOString();
64
+ const transport = createBridgeTransport(
65
+ "pi",
66
+ fileURLToPath(
67
+ new URL("./bridge/runweave-hook-bridge.cjs", import.meta.url)
68
+ )
69
+ );
70
+ let server;
71
+ let socketPath;
72
+ let ownsSocket = false;
73
+ const applied = /* @__PURE__ */ new Map();
74
+ function publish(ctx, event, hook, extra = {}) {
75
+ if (closed) return;
76
+ const fact = {
77
+ version: 1,
78
+ sessionId: ctx.sessionManager.getSessionId(),
79
+ sessionFile: canonicalSessionFile(ctx.sessionManager.getSessionFile()),
80
+ instanceId,
81
+ startedAt,
82
+ sequence: ++sequence,
83
+ runId,
84
+ leafId: ctx.sessionManager.getLeafId(),
85
+ event,
86
+ outcome
87
+ };
88
+ pi.appendEntry("runweave.lifecycle", {
89
+ ...fact,
90
+ terminalSessionId,
91
+ tmuxPaneId: pane,
92
+ operationId: process.env.RUNWEAVE_TERMINAL_AGENT_OPERATION_ID ?? null,
93
+ hook,
94
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
95
+ });
96
+ transport.publish({
97
+ hook_event_name: hook,
98
+ session_id: fact.sessionId,
99
+ cwd: ctx.cwd,
100
+ pi: fact,
101
+ ...extra
102
+ });
103
+ }
104
+ async function openEditor(ctx) {
105
+ if (!ctx.hasUI) return;
106
+ const directory = path2.join(
107
+ "/tmp",
108
+ `rw-pi-${process.getuid?.() ?? "user"}`
109
+ );
110
+ await mkdir(directory, { recursive: true, mode: 448 });
111
+ await chmod(directory, 448);
112
+ const key = createHash("sha256").update(`${tmuxSocket}\0${pane}`).digest("hex").slice(0, 24);
113
+ socketPath = path2.join(directory, `${key}.sock`);
114
+ const alive = await new Promise((resolve) => {
115
+ const probe = request({ socketPath, path: "/", timeout: 300 }, (res) => {
116
+ res.resume();
117
+ resolve(true);
118
+ });
119
+ probe.on("timeout", () => {
120
+ probe.destroy();
121
+ resolve(true);
122
+ });
123
+ probe.on(
124
+ "error",
125
+ (error) => resolve(!["ENOENT", "ECONNREFUSED"].includes(error.code ?? ""))
126
+ );
127
+ probe.end();
128
+ });
129
+ if (alive) {
130
+ closed = true;
131
+ socketPath = void 0;
132
+ return;
133
+ }
134
+ await unlink(socketPath).catch(() => {
135
+ });
136
+ server = createServer((req, res) => {
137
+ let body = "";
138
+ req.setEncoding("utf8");
139
+ req.on("data", (part) => {
140
+ body += part;
141
+ if (Buffer.byteLength(body) > 1024 * 1024) req.destroy();
142
+ });
143
+ req.on("end", () => {
144
+ try {
145
+ const input = JSON.parse(body);
146
+ if (req.method !== "POST" || req.url !== "/editor" || closed || waitingForUI || !context || input.version !== 1 || input.terminalSessionId !== terminalSessionId || input.threadId !== context.sessionManager.getSessionId() || input.instanceId !== instanceId || typeof input.requestId !== "string" || !input.requestId || typeof input.text !== "string")
147
+ throw new Error("Pi editor identity mismatch");
148
+ if (applied.has(input.requestId))
149
+ throw new Error(
150
+ "Pi editor request was already applied; inspect the terminal before retrying"
151
+ );
152
+ if (!applied.has(input.requestId)) {
153
+ context.ui.setEditorText(input.text);
154
+ applied.set(input.requestId, input.text);
155
+ if (applied.size > 64) applied.delete(applied.keys().next().value);
156
+ }
157
+ res.setHeader("Content-Type", "application/json");
158
+ res.end(JSON.stringify({ applied: true }));
159
+ } catch {
160
+ res.statusCode = 409;
161
+ res.end(
162
+ JSON.stringify({
163
+ applied: false,
164
+ error: "Pi editor unavailable or identity changed"
165
+ })
166
+ );
167
+ }
168
+ });
169
+ });
170
+ await new Promise((resolve, reject) => {
171
+ server.once("error", reject);
172
+ server.listen(socketPath, resolve);
173
+ });
174
+ ownsSocket = true;
175
+ await chmod(socketPath, 384);
176
+ }
177
+ pi.on("session_start", async (event, ctx) => {
178
+ if (!ctx.hasUI) {
179
+ closed = true;
180
+ return;
181
+ }
182
+ try {
183
+ let directory = path2.dirname(realpathSync(process.argv[1]));
184
+ let version = "";
185
+ for (let depth = 0; depth < 5; depth++, directory = path2.dirname(directory)) {
186
+ try {
187
+ const pkg = JSON.parse(
188
+ readFileSync(path2.join(directory, "package.json"), "utf8")
189
+ );
190
+ if (pkg.name === "@earendil-works/pi-coding-agent") {
191
+ version = pkg.version;
192
+ break;
193
+ }
194
+ } catch {
195
+ }
196
+ }
197
+ const [major, minor, patch] = version.split(".").map(Number);
198
+ if (major !== 0 || minor < 85 || minor === 85 && patch < 1)
199
+ throw new Error("unsupported");
200
+ } catch {
201
+ closed = true;
202
+ if (ctx.hasUI)
203
+ ctx.ui.notify(
204
+ "Runweave requires Pi 0.85.1 or a compatible 0.x release",
205
+ "warning"
206
+ );
207
+ return;
208
+ }
209
+ context = ctx;
210
+ const result = spawnSync(
211
+ process.env.RUNWEAVE_RUNTIME_TMUX_BINARY || "tmux",
212
+ [
213
+ "-S",
214
+ tmuxSocket,
215
+ "display-message",
216
+ "-p",
217
+ "-t",
218
+ pane,
219
+ "#{@runweave_panel_id}"
220
+ ],
221
+ { encoding: "utf8", timeout: 1e3 }
222
+ );
223
+ const panelId = result.status === 0 ? result.stdout.trim() : "";
224
+ if (!panelId) {
225
+ closed = true;
226
+ return;
227
+ }
228
+ process.env.RUNWEAVE_TERMINAL_PANEL_ID = panelId;
229
+ await openEditor(ctx).catch(
230
+ () => ctx.ui.notify("Runweave Pi editor unavailable", "warning")
231
+ );
232
+ publish(ctx, `session_start:${event.reason}`, "SessionStart", {
233
+ source: event.reason === "resume" ? "resume" : "startup"
234
+ });
235
+ });
236
+ pi.on("agent_start", (_event, ctx) => {
237
+ runId ??= randomUUID();
238
+ outcome = null;
239
+ reply = "";
240
+ publish(ctx, "agent_start", "UserPromptSubmit");
241
+ });
242
+ pi.on("message_start", (event, ctx) => {
243
+ if (event.message.role === "user") {
244
+ const content = event.message.content;
245
+ const prompt = typeof content === "string" ? content : content.filter((part) => part.type === "text").map((part) => part.text).join("\n");
246
+ publish(ctx, "user_message", "UserPromptSubmit", {
247
+ prompt: prompt.slice(0, 8e3)
248
+ });
249
+ }
250
+ });
251
+ pi.on("message_end", (event) => {
252
+ if (event.message.role !== "assistant") return;
253
+ outcome = event.message.stopReason === "error" ? "failed" : event.message.stopReason === "aborted" ? "interrupted" : event.message.stopReason === "stop" ? "completed" : null;
254
+ reply = event.message.content.filter((part) => part.type === "text").map((part) => part.text).join("\n").slice(0, 8e3);
255
+ });
256
+ pi.on("agent_settled", (_event, ctx) => {
257
+ if (!ctx.isIdle() || !runId) return;
258
+ publish(ctx, "agent_settled", "Stop", { last_assistant_message: reply });
259
+ runId = null;
260
+ });
261
+ pi.on(
262
+ "tool_execution_start",
263
+ (event, ctx) => publish(ctx, "tool_execution_start", "PreToolUse", {
264
+ tool_use_id: event.toolCallId,
265
+ tool_name: event.toolName
266
+ })
267
+ );
268
+ pi.on(
269
+ "tool_execution_end",
270
+ (event, ctx) => publish(ctx, "tool_execution_end", "PostToolUse", {
271
+ tool_use_id: event.toolCallId,
272
+ tool_name: event.toolName,
273
+ is_error: event.isError
274
+ })
275
+ );
276
+ pi.on("ui_prompt_start", (_event, ctx) => {
277
+ waitingForUI = true;
278
+ publish(ctx, "ui_prompt_start", "AgentMetadata");
279
+ });
280
+ pi.on("ui_prompt_end", (_event, ctx) => {
281
+ waitingForUI = false;
282
+ publish(ctx, "ui_prompt_end", "AgentMetadata");
283
+ });
284
+ pi.on(
285
+ "session_tree",
286
+ (_event, ctx) => publish(ctx, "session_tree", "AgentMetadata")
287
+ );
288
+ pi.on(
289
+ "model_select",
290
+ (_event, ctx) => publish(ctx, "model_select", "AgentMetadata")
291
+ );
292
+ pi.on("session_shutdown", async () => {
293
+ closed = true;
294
+ context = void 0;
295
+ if (server?.listening)
296
+ await new Promise((resolve) => server.close(() => resolve()));
297
+ if (ownsSocket && socketPath) await unlink(socketPath).catch(() => {
298
+ });
299
+ await transport.drain();
300
+ });
301
+ }
302
+ function canonicalSessionFile(file) {
303
+ if (!file) return null;
304
+ try {
305
+ return realpathSync(file);
306
+ } catch {
307
+ try {
308
+ return path2.join(realpathSync(path2.dirname(file)), path2.basename(file));
309
+ } catch {
310
+ return file;
311
+ }
312
+ }
313
+ }
314
+ export {
315
+ runweave as default
316
+ };
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "toolkit",
3
+ "version": "0.2.0+codex.d39956a605cbf4666c1ca235b085ba12dd5bef055a944658a64f4da7cb8da081",
4
+ "description": "Runweave Toolkit plugin for project-specific skills and automation extensions.",
5
+ "author": {
6
+ "name": "Runweave"
7
+ },
8
+ "keywords": [
9
+ "runweave",
10
+ "codex",
11
+ "skills"
12
+ ],
13
+ "hooks": "./hooks.json",
14
+ "skills": "./skills/",
15
+ "interface": {
16
+ "displayName": "Runweave Toolkit",
17
+ "shortDescription": "Runweave-specific toolkit skills and automations.",
18
+ "longDescription": "A repo-maintained toolkit plugin that packages Runweave-specific skills and related automation surfaces.",
19
+ "developerName": "Runweave",
20
+ "category": "Productivity",
21
+ "capabilities": [
22
+ "Write",
23
+ "Interactive"
24
+ ],
25
+ "defaultPrompt": [
26
+ "Use Runweave toolkit skills in this repo.",
27
+ "Review Runweave repo instructions before coding.",
28
+ "Run Runweave validation commands for this change."
29
+ ]
30
+ }
31
+ }
@@ -0,0 +1,185 @@
1
+ # Runweave Toolkit 插件
2
+
3
+ 这个仓库本地插件是 Runweave Toolkit skills 的唯一规范来源。
4
+
5
+ Skills 统一维护在:
6
+
7
+ ```text
8
+ plugins/toolkit/skills/<skill-name>/SKILL.md
9
+ ```
10
+
11
+ 不要把符号链接作为激活机制。文件存在于这个仓库磁盘上,并不代表当前 Codex 会话已经加载它们。
12
+
13
+ ## 已包含的 Skills
14
+
15
+ - [`acceptance`](./skills/acceptance/SKILL.md):统一手机验收材料入口,默认图文,按判断需要提供视频或原始录屏;共用采集、预览与检查流程。
16
+
17
+ - [`agent-device`](./skills/agent-device/SKILL.md):iOS 模拟器和真机上的 Agent 交互验收,包含设备预检、独立会话及证据记录。
18
+ - [`update-runweave-ios`](./skills/update-runweave-ios/SKILL.md):通过统一 CLI 更新 Runweave 到 iPhone,自动递增产品版本和构建号并核对安装和启动;也可脱离 Agent 直接执行命令。
19
+ - [`publish-runweave-server`](./skills/publish-runweave-server/SKILL.md):发布 Server/CLI npm 新版本,跟进四平台 CI、OIDC、公共安装验证和标签;不自动部署机器。
20
+ - [`update-runweave-backend`](./skills/update-runweave-backend/SKILL.md):完整更新 Linux 后台及已部署配套服务,检查并补齐 systemd 托管与开机自启,区分运行验证和整机重启验证。
21
+ - `brainstorming`
22
+ - [`ask-first`](./skills/ask-first/SKILL.md):复杂任务执行前先探索项目,只对齐高返工成本的关键取舍;源自 ByteTech 的 Ask First,支持按需并行探索,沿用已有授权,不强制文档流程。
23
+ - `code-grounded-requirements`
24
+ - [`clear-technical-explanations`](./skills/clear-technical-explanations/SKILL.md):社区 ASD-STE100 skill 的中文适配,保留 Strict / STE-flavored 两种文本改写模式、语义核对与默认纯文本输出。
25
+ - `daily-doc-maintenance`
26
+ - `daily-refactor`
27
+ - [`daily-record`](./skills/daily-record/SKILL.md):按日期和项目记录本机 Agent 与飞书本人事项,先筛选本人消息再补上下文,合并文档、聊天和 Agent 的重复事实。
28
+ - `debugging-strategies`
29
+ - `diagnostic-log-debugging`
30
+ - `doc-coauthoring`
31
+ - [`eli5`](./skills/eli5/SKILL.md):用大图和少量文字生成零基础 HTML 图解;源自 [Thariq Shihipar 的上游技能](https://github.com/anthropics/claude-plugins-community/blob/863e70dc7cff21a2facc749e40a7ecd1a5d19833/eli5/skills/eli5/SKILL.md),保留核心指令并适配 Codex 主题参数。
32
+ - [`experience`](./skills/experience/SKILL.md):任意 Git 项目的按需经验检索与结果反馈;按仓库隔离,不依赖项目 `AGENTS.md`。
33
+ - `git-advanced-workflows`
34
+ - `grill-with-docs`
35
+ - `grilling`
36
+ - `github-pr`
37
+ - `handoff`
38
+ - `karpathy-guidelines`
39
+ - `playwright-cli`
40
+ - [`product-exploration`](./skills/product-exploration/SKILL.md):显式调用的产品探索,默认 30 分钟;只取证报告,不生成测试代码或自动修复。
41
+ - `react-best-practices`
42
+ - `review-only`
43
+ - `runweave-change-validation`
44
+ - `runweave-dev-session`
45
+ - `run-test-cases`
46
+ - `shadcn`
47
+ - `sync-branch-hard-reset`
48
+ - `using-rw`
49
+ - `write-plan`
50
+ - `write-test-cases`
51
+
52
+ - [youtube-reading](./skills/youtube-reading/SKILL.md):YouTube 字幕与本机识别、保守校对翻译,交付导读与完整中文正文。
53
+
54
+ 原 [`acceptance-gallery`](./skills/acceptance-gallery/SKILL.md)、[`acceptance-video`](./skills/acceptance-video/SKILL.md) 和 [`recorded-browser-mcp-verification`](./skills/recorded-browser-mcp-verification/SKILL.md) 仅作为显式兼容入口;实现与规则统一维护在 `acceptance/`,已有脚本路径继续转发。
55
+
56
+ ## 随记
57
+
58
+ [`suiji`](./skills/suiji/SKILL.md) 支持在任意终端搜索随记或读取交接指令,完整结果在当前终端交付,随记只追加简短最终摘要,默认不上传图片或文档;用户确认后可完成待办。该目录可单独安装,Python 客户端不依赖本仓库或 Runweave Backend。
59
+
60
+ ## 验证
61
+
62
+ 以下命令从仓库根目录执行。
63
+
64
+ 验证插件 manifest 和打包的 skills:
65
+
66
+ ```bash
67
+ CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
68
+ uv run --with pyyaml python "$CODEX_HOME/skills/.system/plugin-creator/scripts/validate_plugin.py" \
69
+ plugins/toolkit
70
+ ```
71
+
72
+ 验证单个 skill(使用项目内入口,官方校验器保持只读):
73
+
74
+ ```bash
75
+ pnpm toolkit:validate -- plugins/toolkit/skills/github-pr
76
+ ```
77
+
78
+ 入口需要 `uv`,从 `CODEX_HOME`(默认 `~/.codex`)定位官方 `skill-creator` 校验器,在隔离环境准备 PyYAML 后调用;不修改全局 Python 依赖、官方技能、项目 Python 环境或提交钩子。首次准备依赖可能需要网络。正常校验的输出与退出码原样保留:0 为通过,1 为内容不合格;启动、依赖准备或执行异常返回 2,不能当作内容校验失败。
79
+
80
+ 验证每个 skill(任一失败立即停止,避免后续成功掩盖失败):
81
+
82
+ ```bash
83
+ for skill_dir in plugins/toolkit/skills/*; do
84
+ [ -d "$skill_dir" ] || continue
85
+ pnpm toolkit:validate -- "$skill_dir" || exit "$?"
86
+ done
87
+ ```
88
+
89
+ ## 本地安装
90
+
91
+ 注册仓库本地 marketplace:
92
+
93
+ ```bash
94
+ codex plugin marketplace add .
95
+ ```
96
+
97
+ 读取 marketplace 名称并安装插件:
98
+
99
+ ```bash
100
+ CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
101
+ MARKETPLACE_NAME="$(python3 "$CODEX_HOME/skills/.system/plugin-creator/scripts/read_marketplace_name.py" \
102
+ --marketplace-path .agents/plugins/marketplace.json)"
103
+ codex plugin add "toolkit@$MARKETPLACE_NAME"
104
+ ```
105
+
106
+ `experience` 是可选 skill:Codex 用户主动安装 Toolkit 后发现它;Pi 用户可单独安装同一源码目录:
107
+
108
+ ```bash
109
+ pi install /absolute/path/to/browser-viewer/plugins/toolkit/skills/experience
110
+ ```
111
+
112
+ 该目录自带 Pi package manifest,不依赖构建或 Electron 分发副本。桌面启动和 Pi hooks 安装器
113
+ 不会安装、升级或覆盖这个 skill;未安装就不提供该检索入口,不做自动补装。
114
+ 项目无需写入提示文件。已有 CLI 和认证连接可用后,Agent 按问题选择 skill,不在启动时强制检索。
115
+
116
+ 重新安装后,在新的 Codex 线程中验证 skill 加载。不要依赖当前线程热加载插件 skills。
117
+
118
+ ## 更新流程
119
+
120
+ 开发过程中更新这个本地插件时,使用 cachebuster helper,不要手动编辑 marketplace 元数据:
121
+
122
+ ```bash
123
+ CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
124
+ python3 "$CODEX_HOME/skills/.system/plugin-creator/scripts/update_plugin_cachebuster.py" \
125
+ plugins/toolkit
126
+ ```
127
+
128
+ 然后读取 marketplace 名称并重新安装插件:
129
+
130
+ ```bash
131
+ CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
132
+ MARKETPLACE_NAME="$(python3 "$CODEX_HOME/skills/.system/plugin-creator/scripts/read_marketplace_name.py" \
133
+ --marketplace-path .agents/plugins/marketplace.json)"
134
+ codex plugin add "toolkit@$MARKETPLACE_NAME"
135
+ ```
136
+
137
+ Hooks 运行时代码放在 `plugins/toolkit/hooks/`。
138
+
139
+ - Codex hook 配置由 `plugins/toolkit/.codex-plugin/plugin.json` 的 `hooks` 字段显式指向
140
+ `plugins/toolkit/hooks.json`,随 `toolkit@runweave` 和 `toolkit@local` 安装进入插件缓存。
141
+ - 不要只在插件根目录放置 `hooks.json` 而不更新 manifest;新启动的 Codex 进程不会因为
142
+ 该文件存在就自动执行 hook。
143
+ - Electron 安装器会从同步后的 `electron/resources/hooks/` 运行副本安装 launcher 与
144
+ 兼容/清理层,旧的 Codex 全局 hooks 与 Trae 全局 TOML hook 会被去重清理。
145
+
146
+ ## 自动更新
147
+
148
+ 提交时如果 staged diff 包含 `plugins/toolkit` 或 `.agents/plugins/marketplace.json`,pre-commit 会先执行:
149
+
150
+ ```bash
151
+ pnpm toolkit:sync:staged
152
+ ```
153
+
154
+ 该命令会同步 toolkit hook 资产到 Electron resources,并将插件安装到 Codex 的
155
+ `toolkit@runweave` 与 Trae CLI 的 `toolkit@local`。分发版本由实际文件内容决定,
156
+ 与同步时间、工作区路径无关;相同内容跳过重复安装,不改写源码 manifest 的版本。
157
+ 插件 `hooks.json` 与 hook 运行副本写回本次提交。需要跳过本机插件安装时,可设置:
158
+
159
+ 三个工作区共用 `$CODEX_HOME/plugins/sources/runweave` 下的固定 marketplace 和不可变
160
+ 内容版本,同步安装通过本机锁串行执行,不再将全局 marketplace 来回切换到不同工作区。
161
+ 自动提交只由主工作区发布全局插件;linked worktree 的提交仅生成并暂存本地资产,
162
+ 避免旧分支回退全局插件。需要主动发布某个工作区时,在该工作区运行 `pnpm toolkit:sync`。
163
+ 包内只包含 Git 跟踪或未忽略的分发文件,不包含 `.playwright-cli` 等本地运行产物。
164
+ 真实插件内容变化仍需在 Codex 的 `/hooks` 中审核;同步命令不修改任何 Hook 信任记录。
165
+
166
+ Codex 线程启动后会保存已加载 skill 的缓存绝对路径。`pnpm toolkit:sync` 会在重新安装
167
+ Codex 插件前快照现有 Toolkit 缓存,并在安装后恢复被历史会话引用过的旧 cachebuster
168
+ 真实目录,避免已经打开的线程继续调用旧 skill 时遇到 `SKILL.md` 路径不存在。新线程仍会
169
+ 加载最新版本。
170
+
171
+ ```bash
172
+ RUNWEAVE_SKIP_TOOLKIT_PLUGIN_SYNC=1 git commit
173
+ ```
174
+
175
+ 也可以手动执行完整同步:
176
+
177
+ ```bash
178
+ pnpm toolkit:sync
179
+ ```
180
+
181
+ Hook 链路的真实验证命令:
182
+
183
+ ```bash
184
+ pnpm toolkit:verify-hooks
185
+ ```