@runfusion/fusion 0.73.0-beta.2 → 0.73.0-beta.4

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 (291) hide show
  1. package/agent-browser.mjs +8 -0
  2. package/dist/bin.js +7664 -11386
  3. package/dist/child-process-worker.js +4292 -8374
  4. package/dist/client/.vite/manifest.json +266 -256
  5. package/dist/client/assets/{AgentDetailView-CUoHZPZr.js → AgentDetailView-BBOL6AgZ.js} +3 -3
  6. package/dist/client/assets/{AgentPermissionPolicyEditor-DKoHJIlF.js → AgentPermissionPolicyEditor-DV7OPUhR.js} +1 -1
  7. package/dist/client/assets/{AgentsView-CaBo-FHV.js → AgentsView-B6xoAHyV.js} +4 -4
  8. package/dist/client/assets/ChatView-DwVjnxM8.js +8 -0
  9. package/dist/client/assets/{CommandCenter-wgiEIVuC.js → CommandCenter-DYWaoYFD.js} +9 -9
  10. package/dist/client/assets/DevServerView-BY5up-NA.js +1 -0
  11. package/dist/client/assets/{DirectoryPicker-B7YwgF53.js → DirectoryPicker-fM8MJa2r.js} +1 -1
  12. package/dist/client/assets/DocumentsView-D2KxsPG_.js +1 -0
  13. package/dist/client/assets/{EvalsView-BjyqxMS_.js → EvalsView-U8dOvTRM.js} +1 -1
  14. package/dist/client/assets/{ExperimentalAgentOnboardingModal-_PMSa_gN.js → ExperimentalAgentOnboardingModal-C27y8Y-1.js} +1 -1
  15. package/dist/client/assets/{GoalsView-BzLA8GX9.js → GoalsView-D-2wmy-O.js} +1 -1
  16. package/dist/client/assets/{InsightsView-Cb_tUr1V.js → InsightsView-zLyuQL_l.js} +2 -2
  17. package/dist/client/assets/{MemoryView-CRxOPCQq.js → MemoryView-D-tSn48u.js} +2 -2
  18. package/dist/client/assets/{PiExtensionsManager-XQ5rWJT3.js → PiExtensionsManager-DvwmvGEY.js} +2 -2
  19. package/dist/client/assets/PluginManager-BACOwQAN.js +1 -0
  20. package/dist/client/assets/{PullRequestView-CX6fScVe.js → PullRequestView-DULyv21u.js} +2 -2
  21. package/dist/client/assets/{ReportModal-BSCk5ER1.css → ReportModal-BuhhqtXJ.css} +1 -1
  22. package/dist/client/assets/ReportModal-CUlKMFWa.js +21 -0
  23. package/dist/client/assets/{ResearchView-DgKzxRUL.js → ResearchView-DM_O3IFc.js} +2 -2
  24. package/dist/client/assets/{SecretsView-C83SIrjR.js → SecretsView-Bq3u_nAf.js} +1 -1
  25. package/dist/client/assets/SessionTerminal-D00ByR6U.js +2 -0
  26. package/dist/client/assets/SettingsModal-Bb3pIxiX.js +21 -0
  27. package/dist/client/assets/SettingsModal-CMLHZBhX.css +1 -0
  28. package/dist/client/assets/SettingsModal-QRaBE1ds.js +1 -0
  29. package/dist/client/assets/{SettingsTextareaRow-BKGsmZ7C.js → SettingsTextareaRow-CHOJ-qHz.js} +1 -1
  30. package/dist/client/assets/{SetupWizardModal-DIb4q-VT.js → SetupWizardModal-DriQyd81.js} +2 -2
  31. package/dist/client/assets/{SkillsView-D1Zxh1iX.js → SkillsView-BtDyujiZ.js} +1 -1
  32. package/dist/client/assets/{TodoView-CGIcE6Yr.js → TodoView-BNHUnz50.js} +2 -2
  33. package/dist/client/assets/{WorkflowNodeEditor-BtWrziOX.css → WorkflowNodeEditor-BNgkFJ_P.css} +1 -1
  34. package/dist/client/assets/WorkflowNodeEditor-BXikFpra.js +8 -0
  35. package/dist/client/assets/agent-import-generation-B2kYEm1O.js +1 -0
  36. package/dist/client/assets/app-B_HrdDXZ.js +13 -0
  37. package/dist/client/assets/{app-BsIXfnu-.js → app-C6yo-M_n.js} +1 -1
  38. package/dist/client/assets/{app-B-IdUeIu.js → app-CH8ZgPm4.js} +1 -1
  39. package/dist/client/assets/{app-D9ktpVhR.js → app-D4DpgDss.js} +1 -1
  40. package/dist/client/assets/{app-nBTNvNKK.js → app-Qv0blCyY.js} +1 -1
  41. package/dist/client/assets/{app-C8muVNUU.js → app-kFdtajPy.js} +1 -1
  42. package/dist/client/assets/{architectureDiagram-3BPJPVTR-Dv83GkUE.js → architectureDiagram-3BPJPVTR-B-Efjj4Z.js} +1 -1
  43. package/dist/client/assets/{blockDiagram-GPEHLZMM-B_j-RJOz.js → blockDiagram-GPEHLZMM-CaOVxrlM.js} +1 -1
  44. package/dist/client/assets/{c4Diagram-AAUBKEIU-Cy3f-SD1.js → c4Diagram-AAUBKEIU-D8aYt5F1.js} +1 -1
  45. package/dist/client/assets/channel-5bPK6pTS.js +1 -0
  46. package/dist/client/assets/{chunk-2J33WTMH-CPolddUJ.js → chunk-2J33WTMH-VSDT0J0r.js} +1 -1
  47. package/dist/client/assets/{chunk-4BX2VUAB-BAGPgwkc.js → chunk-4BX2VUAB-Chx1wQgD.js} +1 -1
  48. package/dist/client/assets/{chunk-55IACEB6-dzYFOH0q.js → chunk-55IACEB6-MlqjhIJg.js} +1 -1
  49. package/dist/client/assets/{chunk-727SXJPM-ul9hGhiR.js → chunk-727SXJPM-BheQNUi8.js} +1 -1
  50. package/dist/client/assets/{chunk-AQP2D5EJ-C75yqe4-.js → chunk-AQP2D5EJ-C5EoJhfJ.js} +1 -1
  51. package/dist/client/assets/{chunk-FMBD7UC4-BwiLAyup.js → chunk-FMBD7UC4-B8_8qP3j.js} +1 -1
  52. package/dist/client/assets/{chunk-ND2GUHAM-CVv1sLhy.js → chunk-ND2GUHAM-BuglCGRx.js} +1 -1
  53. package/dist/client/assets/{chunk-QZHKN3VN-D1c-k3xL.js → chunk-QZHKN3VN-B7_06dxp.js} +1 -1
  54. package/dist/client/assets/classDiagram-4FO5ZUOK-Dv9RQDqG.js +1 -0
  55. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Dv9RQDqG.js +1 -0
  56. package/dist/client/assets/{cose-bilkent-S5V4N54A-DosMsFd6.js → cose-bilkent-S5V4N54A-Cm-ZOycx.js} +1 -1
  57. package/dist/client/assets/{dagre-BM42HDAG-9os-QBXe.js → dagre-BM42HDAG-Dj_Gwjpv.js} +1 -1
  58. package/dist/client/assets/{dashboard-view-CNVTxyWE.js → dashboard-view-B4CRL5Fy.js} +1 -1
  59. package/dist/client/assets/{dashboard-view-Bn7iL770.js → dashboard-view-noD9p0Zs.js} +1 -1
  60. package/dist/client/assets/{dashboard-view-iwAS1HTp.js → dashboard-view-pXXSUxG9.js} +1 -1
  61. package/dist/client/assets/{diagram-2AECGRRQ-ChjuJgA6.js → diagram-2AECGRRQ-C_9BfShy.js} +1 -1
  62. package/dist/client/assets/{diagram-5GNKFQAL-Cq10aB4z.js → diagram-5GNKFQAL-Cmg2qpCj.js} +1 -1
  63. package/dist/client/assets/{diagram-KO2AKTUF-CKjyrzjg.js → diagram-KO2AKTUF-2FNo2HXb.js} +1 -1
  64. package/dist/client/assets/{diagram-LMA3HP47-DxCc1BsH.js → diagram-LMA3HP47-DgnVeCp-.js} +1 -1
  65. package/dist/client/assets/{diagram-OG6HWLK6-DJWEkDsR.js → diagram-OG6HWLK6-iAIR50HH.js} +1 -1
  66. package/dist/client/assets/{erDiagram-TEJ5UH35-gVkDYC92.js → erDiagram-TEJ5UH35-Da4I04eN.js} +1 -1
  67. package/dist/client/assets/{flowDiagram-I6XJVG4X-1lw1mQRQ.js → flowDiagram-I6XJVG4X-Bv9r2T0m.js} +1 -1
  68. package/dist/client/assets/{folder-open-Nmr7nRmN.js → folder-open-CwWtrDh6.js} +1 -1
  69. package/dist/client/assets/{ganttDiagram-6RSMTGT7-Yzq4WZRo.js → ganttDiagram-6RSMTGT7-BMeO84U_.js} +1 -1
  70. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-cFR9Gv8n.js → gitGraphDiagram-PVQCEYII-CWDh_RIb.js} +1 -1
  71. package/dist/client/assets/index-CB3mYxAB.css +1 -0
  72. package/dist/client/assets/index-CE7C_XsS.js +2661 -0
  73. package/dist/client/assets/{infoDiagram-5YYISTIA-BbRiTnD3.js → infoDiagram-5YYISTIA-BAE4KtCL.js} +1 -1
  74. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-DD4i2Znk.js → ishikawaDiagram-YF4QCWOH-C_iXAuOy.js} +1 -1
  75. package/dist/client/assets/{journeyDiagram-JHISSGLW-qHPO2M-C.js → journeyDiagram-JHISSGLW-BnxSHwDo.js} +1 -1
  76. package/dist/client/assets/{kanban-definition-UN3LZRKU-EuFfgxUv.js → kanban-definition-UN3LZRKU-DYNRm3Nu.js} +1 -1
  77. package/dist/client/assets/{mermaid.core-Cru9Vzsy.js → mermaid.core-B3hvDDep.js} +4 -4
  78. package/dist/client/assets/{mindmap-definition-RKZ34NQL-mCvtfapj.js → mindmap-definition-RKZ34NQL-s7KBEuPD.js} +1 -1
  79. package/dist/client/assets/{pieDiagram-4H26LBE5-BSc_a5Dz.js → pieDiagram-4H26LBE5-Cy1_IPUD.js} +1 -1
  80. package/dist/client/assets/{puzzle-Cz66CEWW.js → puzzle-DWc6gFQ7.js} +1 -1
  81. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Um2SLb_d.js → quadrantDiagram-W4KKPZXB-DqgVGp41.js} +1 -1
  82. package/dist/client/assets/{requirementDiagram-4Y6WPE33-B94evN7g.js → requirementDiagram-4Y6WPE33-CA5-TDeF.js} +1 -1
  83. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BH7NLX-K.js → sankeyDiagram-5OEKKPKP-Cuvi3RgE.js} +1 -1
  84. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DusrBGQp.js → sequenceDiagram-3UESZ5HK-Da3GfmGP.js} +1 -1
  85. package/dist/client/assets/{shield-alert-CcQuaRHN.js → shield-alert-_iY63ED4.js} +1 -1
  86. package/dist/client/assets/{standing-instructions-template-CVnY93Xy.js → standing-instructions-template-CCd2YY9c.js} +1 -1
  87. package/dist/client/assets/{stateDiagram-AJRCARHV-GRjL9YlX.js → stateDiagram-AJRCARHV-CZ_I9ENR.js} +1 -1
  88. package/dist/client/assets/{stateDiagram-v2-BHNVJYJU-BBsv6ppQ.js → stateDiagram-v2-BHNVJYJU-BomoRVhY.js} +1 -1
  89. package/dist/client/assets/{timeline-definition-PNZ67QCA-DC6UeqjY.js → timeline-definition-PNZ67QCA-C3CYvIuR.js} +1 -1
  90. package/dist/client/assets/{upload-CjJp7lEX.js → upload-D0RrO65v.js} +1 -1
  91. package/dist/client/assets/{users-DgimRYHz.js → users-CGszBY2v.js} +1 -1
  92. package/dist/client/assets/{vennDiagram-CIIHVFJN-C272zK9h.js → vennDiagram-CIIHVFJN-By9fi8NW.js} +1 -1
  93. package/dist/client/assets/{wardley-L42UT6IY-KkRF-2j9.js → wardley-L42UT6IY-DErnXPkI.js} +1 -1
  94. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-B4brtKRt.js → wardleyDiagram-YWT4CUSO-DFfXZVPk.js} +1 -1
  95. package/dist/client/assets/{xychartDiagram-2RQKCTM6--PFSKt1s.js → xychartDiagram-2RQKCTM6-9Y5oZ5mi.js} +1 -1
  96. package/dist/client/index.html +4 -2
  97. package/dist/client/version.json +1 -1
  98. package/dist/extension.js +4516 -8539
  99. package/dist/migrations/0000_initial.sql +2 -0
  100. package/dist/migrations/0026_bigint_counters.sql +85 -14
  101. package/dist/migrations/0033_fn-8505_wedge_notification.sql +5 -0
  102. package/dist/plugin-sdk/index.js +1 -0
  103. package/dist/plugins/.fusion-ce-agents/.fusion-ce-upstream-provenance.json +7 -0
  104. package/dist/plugins/.fusion-ce-agents/ce-adversarial-document-reviewer.md +115 -0
  105. package/dist/plugins/.fusion-ce-agents/ce-adversarial-reviewer.md +111 -0
  106. package/dist/plugins/.fusion-ce-agents/ce-agent-native-planning-strategist.md +71 -0
  107. package/dist/plugins/.fusion-ce-agents/ce-agent-native-reviewer.md +181 -0
  108. package/dist/plugins/.fusion-ce-agents/ce-ankane-readme-writer.md +50 -0
  109. package/dist/plugins/.fusion-ce-agents/ce-api-contract-reviewer.md +52 -0
  110. package/dist/plugins/.fusion-ce-agents/ce-architecture-strategist.md +53 -0
  111. package/dist/plugins/.fusion-ce-agents/ce-best-practices-researcher.md +122 -0
  112. package/dist/plugins/.fusion-ce-agents/ce-code-simplicity-reviewer.md +87 -0
  113. package/dist/plugins/.fusion-ce-agents/ce-coherence-reviewer.md +73 -0
  114. package/dist/plugins/.fusion-ce-agents/ce-correctness-reviewer.md +52 -0
  115. package/dist/plugins/.fusion-ce-agents/ce-data-integrity-guardian.md +75 -0
  116. package/dist/plugins/.fusion-ce-agents/ce-data-migration-reviewer.md +119 -0
  117. package/dist/plugins/.fusion-ce-agents/ce-deployment-verification-agent.md +164 -0
  118. package/dist/plugins/.fusion-ce-agents/ce-design-implementation-reviewer.md +94 -0
  119. package/dist/plugins/.fusion-ce-agents/ce-design-iterator.md +197 -0
  120. package/dist/plugins/.fusion-ce-agents/ce-design-lens-reviewer.md +56 -0
  121. package/dist/plugins/.fusion-ce-agents/ce-feasibility-reviewer.md +65 -0
  122. package/dist/plugins/.fusion-ce-agents/ce-figma-design-sync.md +172 -0
  123. package/dist/plugins/.fusion-ce-agents/ce-framework-docs-researcher.md +100 -0
  124. package/dist/plugins/.fusion-ce-agents/ce-git-history-analyzer.md +47 -0
  125. package/dist/plugins/.fusion-ce-agents/ce-issue-intelligence-analyst.md +207 -0
  126. package/dist/plugins/.fusion-ce-agents/ce-julik-frontend-races-reviewer.md +52 -0
  127. package/dist/plugins/.fusion-ce-agents/ce-learnings-researcher.md +254 -0
  128. package/dist/plugins/.fusion-ce-agents/ce-maintainability-reviewer.md +77 -0
  129. package/dist/plugins/.fusion-ce-agents/ce-pattern-recognition-specialist.md +62 -0
  130. package/dist/plugins/.fusion-ce-agents/ce-performance-oracle.md +115 -0
  131. package/dist/plugins/.fusion-ce-agents/ce-performance-reviewer.md +54 -0
  132. package/dist/plugins/.fusion-ce-agents/ce-pr-comment-resolver.md +63 -0
  133. package/dist/plugins/.fusion-ce-agents/ce-previous-comments-reviewer.md +68 -0
  134. package/dist/plugins/.fusion-ce-agents/ce-product-lens-reviewer.md +92 -0
  135. package/dist/plugins/.fusion-ce-agents/ce-project-standards-reviewer.md +84 -0
  136. package/dist/plugins/.fusion-ce-agents/ce-reliability-reviewer.md +52 -0
  137. package/dist/plugins/.fusion-ce-agents/ce-repo-research-analyst.md +263 -0
  138. package/dist/plugins/.fusion-ce-agents/ce-scope-guardian-reviewer.md +79 -0
  139. package/dist/plugins/.fusion-ce-agents/ce-security-lens-reviewer.md +48 -0
  140. package/dist/plugins/.fusion-ce-agents/ce-security-reviewer.md +54 -0
  141. package/dist/plugins/.fusion-ce-agents/ce-security-sentinel.md +98 -0
  142. package/dist/plugins/.fusion-ce-agents/ce-session-historian.md +89 -0
  143. package/dist/plugins/.fusion-ce-agents/ce-slack-researcher.md +133 -0
  144. package/dist/plugins/.fusion-ce-agents/ce-spec-flow-analyzer.md +87 -0
  145. package/dist/plugins/.fusion-ce-agents/ce-swift-ios-reviewer.md +107 -0
  146. package/dist/plugins/.fusion-ce-agents/ce-testing-reviewer.md +52 -0
  147. package/dist/plugins/.fusion-ce-agents/ce-web-researcher.md +127 -0
  148. package/dist/plugins/.fusion-ce-skills/.fusion-ce-upstream-provenance.json +7 -0
  149. package/dist/plugins/.fusion-ce-skills/ce-brainstorm/SKILL.md +318 -0
  150. package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/agents/slack-researcher.md +127 -0
  151. package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/brainstorm-sections.md +354 -0
  152. package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/handoff.md +172 -0
  153. package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/html-rendering.md +662 -0
  154. package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/markdown-rendering.md +236 -0
  155. package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/synthesis-summary.md +271 -0
  156. package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/universal-brainstorming.md +71 -0
  157. package/dist/plugins/.fusion-ce-skills/ce-brainstorm/references/visual-probes.md +128 -0
  158. package/dist/plugins/.fusion-ce-skills/ce-brainstorm/scripts/visual-probe-server.js +419 -0
  159. package/dist/plugins/.fusion-ce-skills/ce-code-review/SKILL.md +821 -0
  160. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/action-class-rubric.md +26 -0
  161. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/bulk-preview.md +112 -0
  162. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/cross-model-review.md +63 -0
  163. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/diff-scope.md +41 -0
  164. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/findings-schema.json +137 -0
  165. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/persona-catalog.md +63 -0
  166. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/adversarial-reviewer.md +102 -0
  167. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/agent-native-reviewer.md +173 -0
  168. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/api-contract-reviewer.md +43 -0
  169. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/correctness-reviewer.md +43 -0
  170. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/data-migration-reviewer.md +111 -0
  171. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/deployment-verification-agent.md +157 -0
  172. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/julik-frontend-races-reviewer.md +44 -0
  173. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/learnings-researcher.md +247 -0
  174. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/maintainability-reviewer.md +68 -0
  175. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/performance-reviewer.md +45 -0
  176. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/previous-comments-reviewer.md +59 -0
  177. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/project-standards-reviewer.md +75 -0
  178. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/reliability-reviewer.md +43 -0
  179. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/security-reviewer.md +45 -0
  180. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/swift-ios-reviewer.md +99 -0
  181. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/personas/testing-reviewer.md +43 -0
  182. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/review-output-template.md +170 -0
  183. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/subagent-template.md +199 -0
  184. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/tracker-defer.md +149 -0
  185. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/validator-template.md +89 -0
  186. package/dist/plugins/.fusion-ce-skills/ce-code-review/references/walkthrough.md +249 -0
  187. package/dist/plugins/.fusion-ce-skills/ce-code-review/scripts/cross-model-adversarial-review.sh +218 -0
  188. package/dist/plugins/.fusion-ce-skills/ce-commit/SKILL.md +105 -0
  189. package/dist/plugins/.fusion-ce-skills/ce-commit-push-pr/SKILL.md +134 -0
  190. package/dist/plugins/.fusion-ce-skills/ce-commit-push-pr/references/branch-creation.md +55 -0
  191. package/dist/plugins/.fusion-ce-skills/ce-commit-push-pr/references/pr-description-writing.md +115 -0
  192. package/dist/plugins/.fusion-ce-skills/ce-compound/SKILL.md +712 -0
  193. package/dist/plugins/.fusion-ce-skills/ce-compound/assets/resolution-template.md +94 -0
  194. package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/best-practices-researcher.md +115 -0
  195. package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/data-integrity-guardian.md +68 -0
  196. package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/framework-docs-researcher.md +93 -0
  197. package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/pattern-recognition-specialist.md +55 -0
  198. package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/performance-oracle.md +108 -0
  199. package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/security-sentinel.md +91 -0
  200. package/dist/plugins/.fusion-ce-skills/ce-compound/references/agents/session-historian.md +83 -0
  201. package/dist/plugins/.fusion-ce-skills/ce-compound/references/concepts-vocabulary.md +78 -0
  202. package/dist/plugins/.fusion-ce-skills/ce-compound/references/schema.yaml +231 -0
  203. package/dist/plugins/.fusion-ce-skills/ce-compound/references/yaml-schema.md +118 -0
  204. package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/discover-sessions.sh +130 -0
  205. package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/extract-errors.py +254 -0
  206. package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/extract-metadata.py +456 -0
  207. package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/session-history/extract-skeleton.py +570 -0
  208. package/dist/plugins/.fusion-ce-skills/ce-compound/scripts/validate-frontmatter.py +137 -0
  209. package/dist/plugins/.fusion-ce-skills/ce-debug/SKILL.md +257 -0
  210. package/dist/plugins/.fusion-ce-skills/ce-debug/references/anti-patterns.md +91 -0
  211. package/dist/plugins/.fusion-ce-skills/ce-debug/references/defense-in-depth.md +35 -0
  212. package/dist/plugins/.fusion-ce-skills/ce-debug/references/investigation-techniques.md +374 -0
  213. package/dist/plugins/.fusion-ce-skills/ce-doc-review/SKILL.md +70 -0
  214. package/dist/plugins/.fusion-ce-skills/ce-ideate/SKILL.md +401 -0
  215. package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/issue-intelligence-analyst.md +200 -0
  216. package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/learnings-researcher.md +247 -0
  217. package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/slack-researcher.md +127 -0
  218. package/dist/plugins/.fusion-ce-skills/ce-ideate/references/agents/web-researcher.md +121 -0
  219. package/dist/plugins/.fusion-ce-skills/ce-ideate/references/divergent-ideation.md +89 -0
  220. package/dist/plugins/.fusion-ce-skills/ce-ideate/references/html-rendering.md +662 -0
  221. package/dist/plugins/.fusion-ce-skills/ce-ideate/references/ideation-sections.md +191 -0
  222. package/dist/plugins/.fusion-ce-skills/ce-ideate/references/markdown-rendering.md +236 -0
  223. package/dist/plugins/.fusion-ce-skills/ce-ideate/references/post-ideation-workflow.md +166 -0
  224. package/dist/plugins/.fusion-ce-skills/ce-ideate/references/universal-ideation.md +107 -0
  225. package/dist/plugins/.fusion-ce-skills/ce-ideate/references/web-research-cache.md +55 -0
  226. package/dist/plugins/.fusion-ce-skills/ce-plan/SKILL.md +858 -0
  227. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/agent-native-planning-strategist.md +62 -0
  228. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/architecture-strategist.md +46 -0
  229. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/best-practices-researcher.md +114 -0
  230. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/data-integrity-guardian.md +68 -0
  231. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/data-migration-reviewer.md +103 -0
  232. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/deployment-verification-agent.md +157 -0
  233. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/framework-docs-researcher.md +93 -0
  234. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/git-history-analyzer.md +40 -0
  235. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/learnings-researcher.md +247 -0
  236. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/pattern-recognition-specialist.md +55 -0
  237. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/performance-oracle.md +108 -0
  238. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/repo-research-analyst.md +256 -0
  239. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/security-sentinel.md +91 -0
  240. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/slack-researcher.md +127 -0
  241. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/spec-flow-analyzer.md +80 -0
  242. package/dist/plugins/.fusion-ce-skills/ce-plan/references/agents/web-researcher.md +121 -0
  243. package/dist/plugins/.fusion-ce-skills/ce-plan/references/approach-altitude.md +55 -0
  244. package/dist/plugins/.fusion-ce-skills/ce-plan/references/deepening-workflow.md +259 -0
  245. package/dist/plugins/.fusion-ce-skills/ce-plan/references/html-rendering.md +668 -0
  246. package/dist/plugins/.fusion-ce-skills/ce-plan/references/markdown-rendering.md +236 -0
  247. package/dist/plugins/.fusion-ce-skills/ce-plan/references/plan-handoff.md +126 -0
  248. package/dist/plugins/.fusion-ce-skills/ce-plan/references/plan-sections.md +405 -0
  249. package/dist/plugins/.fusion-ce-skills/ce-plan/references/synthesis-summary.md +396 -0
  250. package/dist/plugins/.fusion-ce-skills/ce-plan/references/universal-planning.md +168 -0
  251. package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/SKILL.md +53 -0
  252. package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/agents/pr-comment-resolver.md +56 -0
  253. package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/evaluation-rubric.md +106 -0
  254. package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/full-mode.md +283 -0
  255. package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/references/targeted-mode.md +45 -0
  256. package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/get-pr-comments +159 -0
  257. package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/get-thread-for-comment +76 -0
  258. package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/reply-to-pr-thread +33 -0
  259. package/dist/plugins/.fusion-ce-skills/ce-resolve-pr-feedback/scripts/resolve-pr-thread +23 -0
  260. package/dist/plugins/.fusion-ce-skills/ce-strategy/SKILL.md +97 -0
  261. package/dist/plugins/.fusion-ce-skills/ce-strategy/references/interview.md +143 -0
  262. package/dist/plugins/.fusion-ce-skills/ce-strategy/references/strategy-template.md +89 -0
  263. package/dist/plugins/.fusion-ce-skills/ce-work/SKILL.md +429 -0
  264. package/dist/plugins/.fusion-ce-skills/ce-work/references/agents/figma-design-sync.md +165 -0
  265. package/dist/plugins/.fusion-ce-skills/ce-work/references/execution-engines.md +85 -0
  266. package/dist/plugins/.fusion-ce-skills/ce-work/references/non-code-execution.md +23 -0
  267. package/dist/plugins/.fusion-ce-skills/ce-work/references/review-findings-followup.md +104 -0
  268. package/dist/plugins/.fusion-ce-skills/ce-work/references/shipping-workflow.md +133 -0
  269. package/dist/plugins/.fusion-ce-skills/ce-work/references/tracker-defer.md +149 -0
  270. package/dist/plugins/fusion-plugin-compound-engineering/.bundled.reload-3.js +11266 -0
  271. package/dist/plugins/fusion-plugin-compound-engineering/.bundled.reload-4.js +11266 -0
  272. package/dist/plugins/fusion-plugin-dependency-graph/.bundled.reload-1.js +8206 -0
  273. package/dist/plugins/fusion-plugin-grok-runtime/.bundled.reload-2.js +26623 -0
  274. package/package.json +6 -3
  275. package/skill/fusion/references/engine-tools.md +6 -2
  276. package/dist/client/assets/ChatView-Bv0J5p5U.js +0 -8
  277. package/dist/client/assets/DevServerView-Ue9XG_4H.js +0 -1
  278. package/dist/client/assets/DocumentsView-C1Ptwcv5.js +0 -1
  279. package/dist/client/assets/PluginManager-CXPSlWxs.js +0 -1
  280. package/dist/client/assets/ReportModal-JhZZXZlj.js +0 -21
  281. package/dist/client/assets/SessionTerminal-BrK3psiC.js +0 -2
  282. package/dist/client/assets/SettingsModal-Bby9vLGx.js +0 -21
  283. package/dist/client/assets/SettingsModal-DVLqY1-7.js +0 -1
  284. package/dist/client/assets/SettingsModal-DXArgTTx.css +0 -1
  285. package/dist/client/assets/WorkflowNodeEditor-BXUC0lim.js +0 -8
  286. package/dist/client/assets/app-DUszvars.js +0 -13
  287. package/dist/client/assets/channel-BuhC8kaT.js +0 -1
  288. package/dist/client/assets/classDiagram-4FO5ZUOK-vpRR5WOg.js +0 -1
  289. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-vpRR5WOg.js +0 -1
  290. package/dist/client/assets/index-Cg9ahVtV.js +0 -2661
  291. package/dist/client/assets/index-uhXHk1ek.css +0 -1
@@ -0,0 +1,218 @@
1
+ #!/usr/bin/env bash
2
+ # cross-model-adversarial-review.sh
3
+ #
4
+ # Runs the adversarial review through a DIFFERENT model family (the "peer") in a
5
+ # separate, read-only process, and writes its findings as JSON into the run dir.
6
+ # The peer gets the same canonical adversarial brief the in-process reviewer uses
7
+ # (references/personas/adversarial-reviewer.md) so it is genuinely "the adversarial
8
+ # persona, on a different model."
9
+ #
10
+ # Usage: cross-model-adversarial-review.sh <peer: codex|claude> <base-ref> <run-dir>
11
+ # <peer> codex -> use Codex (when the host is Claude or Cursor)
12
+ # claude -> use Claude (when the host is Codex)
13
+ # <base-ref> the diff base (e.g. a merge-base SHA or branch); the peer reviews
14
+ # only `git diff <base-ref>` in the current repository
15
+ # <run-dir> an existing dir; output is written to <run-dir>/adversarial-<peer>.json
16
+ #
17
+ # Self-locates its sibling reference files via BASH_SOURCE (NOT the CWD, which is
18
+ # the user's project on every host), and derives the repo root from git. The agent
19
+ # only has to pass the three values above.
20
+ #
21
+ # NON-BLOCKING BY DESIGN: every failure logs to stderr and exits 0 without an output
22
+ # file. The cross-model pass is additive and must never fail the review; the caller
23
+ # detects success purely by the presence of <run-dir>/adversarial-<peer>.json.
24
+
25
+ set -uo pipefail
26
+
27
+ PEER="${1:-}"
28
+ BASE="${2:-}"
29
+ RUN_DIR="${3:-}"
30
+
31
+ log() { printf '[cross-model] %s\n' "$*" >&2; }
32
+ skip() { log "$*"; exit 0; } # non-blocking: announce reason, exit clean, no output
33
+
34
+ # --- validate inputs -------------------------------------------------------
35
+ case "$PEER" in codex|claude) ;; *) skip "invalid peer '${PEER:-<empty>}' (want codex|claude); skipping cross-model pass" ;; esac
36
+ [ -n "$BASE" ] || skip "no base ref given; skipping"
37
+ [ -n "$RUN_DIR" ] && [ -d "$RUN_DIR" ] || skip "run-dir '${RUN_DIR:-<empty>}' is not a directory; skipping"
38
+ command -v "$PEER" >/dev/null 2>&1 || skip "$PEER CLI not installed; skipping"
39
+ command -v jq >/dev/null 2>&1 || skip "jq not installed; skipping"
40
+
41
+ # --- self-locate skill root + canonical sibling files ----------------------
42
+ SKILL_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" || skip "cannot resolve skill root; skipping"
43
+ PERSONA="$SKILL_ROOT/references/personas/adversarial-reviewer.md"
44
+ SCHEMA="$SKILL_ROOT/references/findings-schema.json"
45
+ [ -f "$PERSONA" ] || skip "persona brief not found at $PERSONA; skipping"
46
+ [ -f "$SCHEMA" ] || skip "findings schema not found at $SCHEMA; skipping"
47
+
48
+ # --- derive repo root (read-only) ------------------------------------------
49
+ REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || skip "not inside a git repository; skipping"
50
+
51
+ OUT="$RUN_DIR/adversarial-$PEER.json"
52
+ PROMPT_FILE="$(mktemp "${TMPDIR:-/tmp}/xmodel-prompt-XXXXXX")"
53
+ PEERLOG="$(mktemp "${TMPDIR:-/tmp}/xmodel-log-XXXXXX")"
54
+ trap 'rm -f "$PROMPT_FILE" "$PEERLOG"' EXIT
55
+
56
+ # --- compose the peer prompt from the canonical persona (single source) ----
57
+ # The full findings schema is embedded so BOTH peers know every required field
58
+ # (why_it_matters, confidence, evidence, routing) -- Codex gets no --output-schema
59
+ # (its strict mode rejects the permissive draft-07 schema), so the prompt is its
60
+ # only schema signal. Verified to produce complete, schema-shaped findings.
61
+ {
62
+ cat "$PERSONA"
63
+ printf '\n\n---\n\n'
64
+ printf 'This is an authorized review of the maintainer\047s own repository.\n'
65
+ printf 'Think like an attacker and a chaos engineer: find the ways this change fails in production.\n'
66
+ printf 'Return ONE JSON object and nothing else (no prose, no code fence) matching this schema:\n\n'
67
+ cat "$SCHEMA"
68
+ printf '\n\nSet the top-level "reviewer" field to "adversarial-%s".\n' "$PEER"
69
+ } > "$PROMPT_FILE"
70
+ # Per-peer diff delivery (composed below): codex fetches its own diff inside its
71
+ # read-only sandbox; claude is hard-denied shell (see below), so it gets the diff
72
+ # embedded and needs no git.
73
+ if [ "$PEER" = codex ]; then
74
+ printf '\nRun: git diff %q — review ONLY the changes in that diff, in this repository (read-only).\n' "$BASE" >> "$PROMPT_FILE"
75
+ else
76
+ { printf '\nReview ONLY the change below (the output of `git diff %q`). You may Read repository files for context but cannot run shell commands.\n' "$BASE"
77
+ printf '\n=== BEGIN DIFF ===\n'; git -C "$REPO_ROOT" diff "$BASE"; printf '\n=== END DIFF ===\n'; } >> "$PROMPT_FILE"
78
+ fi
79
+
80
+ # --- run the peer: idle-timeout for streaming codex, hard cap for claude ----
81
+ # codex exec streams its reasoning to stdout, so a productive long run is allowed to
82
+ # continue and is killed only when its output STALLS for IDLE_SECS (the cross-model
83
+ # "second opinion" idle-timeout pattern), with HARD_SECS as an absolute backstop.
84
+ # claude's --output-format json is single-shot, so it gets a hard cap only.
85
+ #
86
+ # Orphan safety: codex runs in its OWN process group (set -m) and the watchdog reaps the
87
+ # whole group (TERM then KILL) on idle/hard -- we do NOT signal a (g)timeout wrapper for
88
+ # this, because an external kill of (g)timeout forwards only TERM (its -k escalates only
89
+ # on gtimeout's OWN expiry), so a peer that defers SIGTERM could survive `wait` and write
90
+ # $OUT after Stage 5 skipped it. claude keeps the (g)timeout wrapper: it is single-shot
91
+ # and gtimeout's own timeout (with -k) escalates to KILL correctly; perl(alarm) is the
92
+ # fallback when neither (g)timeout exists.
93
+ IDLE_SECS="${CROSS_MODEL_IDLE_SECS:-180}" # reap codex if its streamed output stalls this long
94
+ HARD_SECS="${CROSS_MODEL_HARD_SECS:-600}" # absolute ceiling (backstop) for either peer
95
+ TO_BIN="$(command -v gtimeout || command -v timeout || true)"
96
+
97
+ # Reap a backgrounded job's whole process group: TERM, then KILL after a short grace if
98
+ # anything is still alive. The grace loop tests GROUP liveness (kill -0 on the negative
99
+ # pgid), not just the leader pid -- otherwise a leader that exits while a child defers TERM
100
+ # would let reap() return before the group KILL, leaking the child. Falls back to the bare
101
+ # pid only when group signaling isn't accepted at all.
102
+ reap() {
103
+ local pid="$1" grp
104
+ if kill -TERM -- -"$pid" 2>/dev/null; then grp=1; else kill -TERM "$pid" 2>/dev/null; grp=0; fi
105
+ for _ in 1 2 3 4 5; do
106
+ if [ "$grp" = 1 ]; then kill -0 -- -"$pid" 2>/dev/null || return 0
107
+ else kill -0 "$pid" 2>/dev/null || return 0; fi
108
+ sleep 1
109
+ done
110
+ if [ "$grp" = 1 ]; then kill -KILL -- -"$pid" 2>/dev/null; else kill -KILL "$pid" 2>/dev/null; fi
111
+ }
112
+
113
+ # Run codex in its own process group; stream to PEERLOG; reap the group on idle stall or
114
+ # hard cap. This watchdog owns both bounds and the kill -- no (g)timeout wrapper to signal.
115
+ run_codex() {
116
+ local prev; case "$-" in *m*) prev=1;; *) prev=0;; esac
117
+ set -m # background job becomes a process-group leader (pgid == pid) so reap() kills the tree
118
+ # Force reasoning output on for THIS subprocess (overriding a user's hide_agent_reasoning
119
+ # = true), so the streamed reasoning keeps PEERLOG growing and gives the idle watchdog a
120
+ # liveness signal -- otherwise a long, quiet reasoning phase on a big diff could be
121
+ # misread as a stall and reaped.
122
+ codex exec - -C "$REPO_ROOT" -s read-only -o "$OUT" \
123
+ -c 'model_reasoning_effort="high"' -c 'hide_agent_reasoning=false' < "$PROMPT_FILE" > "$PEERLOG" 2>&1 &
124
+ local pid=$!
125
+ [ "$prev" = 0 ] && set +m # group is already assigned; restoring silences job-control noise
126
+ local start last=-1 lastchg now size
127
+ start="$(date +%s)"; lastchg="$start"
128
+ while kill -0 "$pid" 2>/dev/null; do
129
+ sleep 5; now="$(date +%s)"; size="$(wc -c <"$PEERLOG" 2>/dev/null || echo 0)"
130
+ [ "$size" != "$last" ] && { last="$size"; lastchg="$now"; }
131
+ if [ $(( now - lastchg )) -ge "$IDLE_SECS" ]; then
132
+ log "codex output idle ${IDLE_SECS}s; reaping peer process group"; reap "$pid"; break
133
+ fi
134
+ if [ $(( now - start )) -ge "$HARD_SECS" ]; then
135
+ log "codex exceeded hard cap ${HARD_SECS}s; reaping peer process group"; reap "$pid"; break
136
+ fi
137
+ done
138
+ wait "$pid" 2>/dev/null || true
139
+ }
140
+
141
+ log "running $PEER adversarial review against base $BASE (read-only; idle ${IDLE_SECS}s / hard ${HARD_SECS}s)"
142
+ case "$PEER" in
143
+ codex)
144
+ run_codex
145
+ # Fallback: codex's -o write is CLI-level and works under -s read-only, but if it
146
+ # ever fails to materialize, recover the same JSON from the stdout we already
147
+ # captured (codex prints the final message to stdout too). Belt-and-suspenders.
148
+ if { [ ! -s "$OUT" ] || ! jq -e . "$OUT" >/dev/null 2>&1; } && [ -s "$PEERLOG" ] && command -v python3 >/dev/null 2>&1; then
149
+ python3 - "$PEERLOG" "$OUT" <<'PY' 2>/dev/null && [ -s "$OUT" ] && log "recovered codex JSON from stdout (-o file unavailable)"
150
+ import sys, json
151
+ txt = open(sys.argv[1], encoding="utf-8", errors="replace").read()
152
+ best, depth, start = None, 0, None
153
+ for i, ch in enumerate(txt):
154
+ if ch == '{':
155
+ if depth == 0: start = i
156
+ depth += 1
157
+ elif ch == '}' and depth > 0:
158
+ depth -= 1
159
+ if depth == 0 and start is not None:
160
+ try:
161
+ obj = json.loads(txt[start:i+1])
162
+ if isinstance(obj, dict) and "findings" in obj: best = obj
163
+ except Exception: pass
164
+ if best is not None: open(sys.argv[2], "w").write(json.dumps(best))
165
+ PY
166
+ fi
167
+ ;;
168
+ claude)
169
+ # Single-shot output -> hard cap only. Disallowed tools as SEPARATE variadic args
170
+ # (unambiguous; a single quoted "Edit Write NotebookEdit" is risky since tool names
171
+ # can contain spaces). We deny the built-in mutators (Edit/Write/NotebookEdit/Bash)
172
+ # AND `mcp__*` (a user's pre-approved MCP write/deploy tools would otherwise run under
173
+ # dontAsk) AND `Task` (a subagent would bypass this deny list) -- so the peer stays
174
+ # read-only even with MCP servers configured. claude can't write a file under those
175
+ # perms, so it emits the JSON envelope on stdout (captured to PEERLOG); we extract it.
176
+ if [ -n "$TO_BIN" ]; then
177
+ "$TO_BIN" -k 10 "$HARD_SECS" claude -p --model opus --permission-mode dontAsk \
178
+ --disallowedTools Edit Write NotebookEdit Bash Task 'mcp__*' --max-turns 15 --no-session-persistence \
179
+ --json-schema "$(cat "$SCHEMA")" --output-format json \
180
+ < "$PROMPT_FILE" > "$PEERLOG" 2>/dev/null \
181
+ || log "claude exited non-zero or timed out"
182
+ else
183
+ perl -e 'alarm shift; exec @ARGV' "$HARD_SECS" claude -p --model opus --permission-mode dontAsk \
184
+ --disallowedTools Edit Write NotebookEdit Bash Task 'mcp__*' --max-turns 15 --no-session-persistence \
185
+ --json-schema "$(cat "$SCHEMA")" --output-format json \
186
+ < "$PROMPT_FILE" > "$PEERLOG" 2>/dev/null \
187
+ || log "claude exited non-zero or timed out"
188
+ fi
189
+ jq -e '.structured_output' "$PEERLOG" > "$OUT" 2>/dev/null \
190
+ || jq -r '.result // empty' "$PEERLOG" | jq -e '.' > "$OUT" 2>/dev/null \
191
+ || { log "could not parse Claude output"; rm -f "$OUT"; }
192
+ ;;
193
+ esac
194
+
195
+ # --- normalize the reviewer name -------------------------------------------
196
+ # The persona's example JSON uses reviewer:"adversarial"; if the peer echoed that
197
+ # instead of "adversarial-<peer>", Stage 5 would fold it as the in-process reviewer
198
+ # and lose the cross-model agreement signal. Force the distinct name.
199
+ if [ -s "$OUT" ]; then
200
+ _norm="$(mktemp "${TMPDIR:-/tmp}/xmodel-norm-XXXXXX")"
201
+ # Force the distinct reviewer name AND satisfy Stage 5's full top-level contract
202
+ # (reviewer string + findings/residual_risks/testing_gaps arrays). Backfill the two
203
+ # soft arrays if the peer omitted them; drop the return entirely if findings is not
204
+ # an array (empty output -> the validation below removes the file -> clean skip).
205
+ if jq --arg r "adversarial-$PEER" \
206
+ 'if (.findings|type)=="array" then {reviewer:$r, findings, residual_risks:(.residual_risks // []), testing_gaps:(.testing_gaps // [])} else empty end' \
207
+ "$OUT" > "$_norm" 2>/dev/null; then mv "$_norm" "$OUT"; else rm -f "$_norm"; fi
208
+ fi
209
+
210
+ # --- validate the output against the Stage 5 reviewer-return contract -------
211
+ if [ -s "$OUT" ] && jq -e '(.reviewer|type=="string") and (.findings|type=="array") and (.residual_risks|type=="array") and (.testing_gaps|type=="array")' "$OUT" >/dev/null 2>&1; then
212
+ n="$(jq '.findings | length' "$OUT" 2>/dev/null || echo '?')"
213
+ log "wrote $n finding(s) to $OUT (reviewer adversarial-$PEER)"
214
+ else
215
+ log "$PEER produced no usable schema-shaped output; skipping fold-in"
216
+ rm -f "$OUT"
217
+ fi
218
+ exit 0
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: ce-commit
3
+ description: Create a git commit with a clear, value-communication message. Use when the user asks to commit/save staged or unstaged changes with a repo-appropriate, value-communicating message.
4
+ ---
5
+
6
+ # Git Commit
7
+
8
+ Create a single, well-crafted git commit from the current working tree changes.
9
+
10
+ ## Context
11
+
12
+ **On platforms other than Claude Code**, skip to the "Context fallback" section below and run the command there to gather context.
13
+
14
+ **In Claude Code**, the five labeled sections below (Git status, Working tree diff, Current branch, Recent commits, Remote default branch) contain pre-populated data. Use them directly throughout this skill -- do not re-run these commands.
15
+
16
+ **Git status:**
17
+ !`git status`
18
+
19
+ **Working tree diff:**
20
+ !`git diff HEAD`
21
+
22
+ **Current branch:**
23
+ !`git branch --show-current`
24
+
25
+ **Recent commits:**
26
+ !`git log --oneline -10`
27
+
28
+ **Remote default branch:**
29
+ !`git rev-parse --abbrev-ref origin/HEAD 2>/dev/null || echo '__DEFAULT_BRANCH_UNRESOLVED__'`
30
+
31
+ ### Context fallback
32
+
33
+ **In Claude Code, skip this section — the data above is already available.**
34
+
35
+ Run this single command to gather all context:
36
+
37
+ ```bash
38
+ printf '=== STATUS ===\n'; git status; printf '\n=== DIFF ===\n'; git diff HEAD; printf '\n=== BRANCH ===\n'; git branch --show-current; printf '\n=== LOG ===\n'; git log --oneline -10; printf '\n=== DEFAULT_BRANCH ===\n'; git rev-parse --abbrev-ref origin/HEAD 2>/dev/null || echo '__DEFAULT_BRANCH_UNRESOLVED__'
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Workflow
44
+
45
+ ### Step 1: Gather context
46
+
47
+ Use the context above (git status, working tree diff, current branch, recent commits, remote default branch). All data needed for this step is already available -- do not re-run those commands.
48
+
49
+ The remote default branch value returns something like `origin/main`. Strip the `origin/` prefix to get the branch name. If it returned `__DEFAULT_BRANCH_UNRESOLVED__` or a bare `HEAD`, try:
50
+
51
+ ```bash
52
+ gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'
53
+ ```
54
+
55
+ If both fail, fall back to `main`.
56
+
57
+ If the git status from the context above shows a clean working tree (no staged, modified, or untracked files), report that there is nothing to commit and stop.
58
+
59
+ If the current branch from the context above is empty, the repository is in detached HEAD state. Explain that a branch is required before committing if the user wants this work attached to a branch. Ask whether to create a feature branch now. Use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_question` in Antigravity CLI (`agy`), `ask_user` in Pi (requires the `pi-ask-user` extension). Fall back to presenting options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question.
60
+
61
+ - If the user chooses to create a branch, derive the name from the change content, create it with `git checkout -b <branch-name>`, then run `git branch --show-current` again and use that result as the current branch name for the rest of the workflow.
62
+ - If the user declines, continue with the detached HEAD commit.
63
+
64
+ ### Step 2: Determine commit message convention
65
+
66
+ Follow this priority order:
67
+
68
+ 1. **Repo conventions already in context** -- If project instructions (AGENTS.md, CLAUDE.md, or similar) are already loaded and specify commit message conventions, follow those. Do not re-read these files; they are loaded at session start.
69
+ 2. **Recent commit history** -- If no explicit convention is documented, examine the 10 most recent commits from Step 1. If a clear pattern emerges (e.g., conventional commits, ticket prefixes, emoji prefixes), match that pattern.
70
+ 3. **Default: conventional commits** -- If neither source provides a pattern, use conventional commit format: `type(scope): description` where type is one of `feat`, `fix`, `docs`, `refactor`, `test`, `chore`, `perf`, `ci`, `style`, `build`.
71
+
72
+ When using conventional commits, choose the type that most precisely describes the change (the type list above). Where `fix:` and `feat:` both seem to fit, default to `fix:`: a change that remedies broken or missing behavior is `fix:` even when implemented by adding code. Reserve `feat:` for capabilities the user could not previously accomplish. Other types remain primary when they fit better. The user may override for a specific change.
73
+
74
+ ### Step 3: Consider logical commits
75
+
76
+ Before staging everything together, scan the changed files for naturally distinct concerns. If modified files clearly group into separate logical changes (e.g., a refactor in one directory and a new feature in another, or test files for a different change than source files), create separate commits for each group.
77
+
78
+ Keep this lightweight:
79
+ - Group at the **file level only** -- do not use `git add -p` or try to split hunks within a file.
80
+ - If the separation is obvious (different features, unrelated fixes), split. If it's ambiguous, one commit is fine.
81
+ - Two or three logical commits is the sweet spot. Do not over-slice into many tiny commits.
82
+
83
+ ### Step 4: Stage and commit
84
+
85
+ If the current branch from the context above is `main`, `master`, or the resolved default branch from Step 1, automatically create a feature branch before committing. Derive the branch name from the change content, create it with `git checkout -b <branch-name>`, run `git branch --show-current` to confirm, and use the new branch as the current branch for the rest of the workflow. Do not ask whether to branch — committing on the default branch is not an option here.
86
+
87
+ Write the commit message:
88
+ - **Subject line**: Concise, imperative mood, focused on *why* not *what*. Follow the convention determined in Step 2.
89
+ - **Body** (when needed): Add a body separated by a blank line for non-trivial changes. Explain motivation, trade-offs, or anything a future reader would need. Omit the body for obvious single-purpose changes.
90
+
91
+ For each commit group, stage and commit in a single call. Prefer staging specific files by name over `git add -A` or `git add .` to avoid accidentally including sensitive files (.env, credentials) or unrelated changes. Use a heredoc to preserve formatting:
92
+
93
+ ```bash
94
+ git add file1 file2 file3 && git commit -m "$(cat <<'EOF'
95
+ type(scope): subject line here
96
+
97
+ Optional body explaining why this change was made,
98
+ not just what changed.
99
+ EOF
100
+ )"
101
+ ```
102
+
103
+ ### Step 5: Confirm
104
+
105
+ Run `git status` after the commit to verify success. Report the commit hash(es) and subject line(s).
@@ -0,0 +1,134 @@
1
+ ---
2
+ name: ce-commit-push-pr
3
+ description: Commit, push, and open a PR. Use when asked to ship/open a PR, or for PR-description-only flows like writing, rewriting, or describing a PR body.
4
+ ---
5
+
6
+ # Git Commit, Push, and PR
7
+
8
+ **Asking the user:** When this skill says "ask the user", use the platform's blocking question tool: `AskUserQuestion` in Claude Code (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded), `request_user_input` in Codex, `ask_question` in Antigravity CLI (`agy`), `ask_user` in Pi (requires the `pi-ask-user` extension). Fall back to presenting the question in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question.
9
+
10
+ ## Mode
11
+
12
+ - **Description-only** — user wants *just* a description ("write/draft a PR description", "describe this PR", or pasted a PR URL/number alone). Run Step 4 only; print the result. Apply only if the user asks. If a PR ref was pasted, pass it to Step 4 so Pre-A resolves the right range.
13
+ - **Description update** — user wants to refresh/rewrite an existing PR's description with no commit/push intent. If no open PR, report and stop. Otherwise run Step 4 (PR mode using the existing PR's URL), then Step 5 to preview, confirm, and apply via `gh pr edit`.
14
+ - **Full workflow** — otherwise. Run Steps 1-5 in order.
15
+
16
+ ## Context
17
+
18
+ **On platforms other than Claude Code**, run the Context fallback below. **In Claude Code**, the labeled sections contain pre-populated data — use them directly.
19
+
20
+ **Git status:**
21
+ !`git status`
22
+
23
+ **Working tree diff:**
24
+ !`git diff HEAD`
25
+
26
+ **Current branch:**
27
+ !`git branch --show-current`
28
+
29
+ **Recent commits:**
30
+ !`git log --oneline -10`
31
+
32
+ **Remote default branch:**
33
+ !`git rev-parse --abbrev-ref origin/HEAD 2>/dev/null || echo 'DEFAULT_BRANCH_UNRESOLVED'`
34
+
35
+ **Existing PR check:**
36
+ !`gh pr view --json url,title,state 2>/dev/null || echo 'NO_OPEN_PR'`
37
+
38
+ ### Context fallback
39
+
40
+ ```bash
41
+ printf '=== STATUS ===\n'; git status; printf '\n=== DIFF ===\n'; git diff HEAD; printf '\n=== BRANCH ===\n'; git branch --show-current; printf '\n=== LOG ===\n'; git log --oneline -10; printf '\n=== DEFAULT_BRANCH ===\n'; git rev-parse --abbrev-ref origin/HEAD 2>/dev/null || echo 'DEFAULT_BRANCH_UNRESOLVED'; printf '\n=== PR_CHECK ===\n'; gh pr view --json url,title,state 2>/dev/null || echo 'NO_OPEN_PR'
42
+ ```
43
+
44
+ ---
45
+
46
+ ## Step 1: Resolve branch and PR state
47
+
48
+ The remote default branch returns something like `origin/main`; strip the `origin/` prefix. If it returned `DEFAULT_BRANCH_UNRESOLVED` or bare `HEAD`, try `gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'`. If both fail, fall back to `main`.
49
+
50
+ Branch routing:
51
+
52
+ - **Detached HEAD** — explain a branch is required and ask whether to create a feature branch. If yes, derive a name from the change content. If no, stop.
53
+ - **On default branch with work to do** (uncommitted, unpushed, or no upstream) — automatically create a feature branch (pushing the default directly is not supported). Derive a name from the change content and continue at Step 3, which handles branch creation safely. Do not ask whether to branch — committing on the default is not an option here.
54
+ - **On default branch with no work** — report no feature branch work and stop.
55
+ - **Feature branch** — continue.
56
+
57
+ Note the existing PR URL from the PR check if `state: OPEN`. Step 5 uses it to route between new-PR and existing-PR application.
58
+
59
+ ## Step 2: Determine conventions
60
+
61
+ Match repo style for commit messages and PR titles (project instructions in context > recent commits > conventional commits as default). With conventional commits, default to `fix:` over `feat:` when ambiguous — adding code to remedy broken or missing behavior is `fix:`. Reserve `feat:` for capabilities the user could not previously accomplish. The user may override.
62
+
63
+ ## Step 3: Commit and push
64
+
65
+ If on the default branch, branch creation needs to handle stale local `<base>`, unpushed commits on local `<base>`, and uncommitted changes that collide with the fresh remote base. Read `references/branch-creation.md` and follow its decision flow before continuing.
66
+
67
+ Scan changed files for naturally distinct concerns. If they clearly group into separate logical changes, create separate commits (2-3 max). Group at file level only — no `git add -p`. When ambiguous, one commit is fine.
68
+
69
+ Stage and commit each group. **Avoid `git add -A` and `git add .`** — they sweep in `.env`, build artifacts, and generated files:
70
+
71
+ ```bash
72
+ git add file1 file2 file3 && git commit -m "$(cat <<'EOF'
73
+ commit message here
74
+ EOF
75
+ )"
76
+ ```
77
+
78
+ Then push:
79
+
80
+ ```bash
81
+ git push -u origin HEAD
82
+ ```
83
+
84
+ If the working tree is clean and all commits are already pushed, this step is a no-op.
85
+
86
+ ## Step 4: Compose the PR title and body
87
+
88
+ **You MUST read `references/pr-description-writing.md`** in full — the core principle at the top governs every step. The only input it needs from this skill is the PR ref, if one was identified by mode dispatch (description-only with a pasted URL, or description update).
89
+
90
+ **Evidence decision** before composition. CE no longer owns a dedicated capture workflow; modern harnesses provide their own browser, screenshot, terminal recording, and artifact capture tools. Treat evidence as user-supplied context or as validation prose, not as a separate skill dispatch.
91
+
92
+ 1. **User supplied evidence** (URL, markdown image/embed, local artifact path they want referenced) — incorporate it into the PR body as `## Demo`, `## Screenshots`, or `## Evidence`, matching the artifact type. Do not invent or upload evidence.
93
+ 2. **User explicitly asks to include evidence but has not supplied it** — ask for the URL/markdown/path, or tell them to use the current harness's capture flow and return with the artifact. Do not launch another CE skill.
94
+ 3. **Agent judgment on authored changes** — if you authored the commits and know the change is non-observable (internal plumbing, type-only, backend refactor without user-facing effect, docs/markdown/changelog/CI/test-only, pure refactors), skip evidence handling without asking.
95
+
96
+ Otherwise, if the branch diff changes observable behavior (UI, CLI output, API behavior with runnable code, generated artifacts, workflow output), include a concise validation note in the PR body describing what was exercised and how it behaved. If no real run was possible because of unavailable credentials, paid services, deploy-only infrastructure, hardware, or missing local setup, say that plainly in the validation section.
97
+
98
+ Do not block PR creation solely because no visual artifact exists. Test output and manual validation notes are acceptable validation evidence, but do not label test output as "Demo" or "Screenshots."
99
+
100
+ Then continue with the rest of the reference (Steps A through G) to compose the title and body.
101
+
102
+ ## Step 5: Apply and report
103
+
104
+ **Description-only mode** — print the title and body. Stop unless the user asks to apply.
105
+
106
+ **New PR** (full workflow, no existing PR from Step 1) — apply per "Applying via gh" below using `gh pr create`. Report the URL.
107
+
108
+ **Existing PR** (full workflow, found in Step 1) — the new commits are already on the PR from Step 3. Report the PR URL, then ask whether to rewrite the description.
109
+
110
+ - **No** — done.
111
+ - **Yes** — run Step 4 if not already done, then preview and apply (see below).
112
+
113
+ **Description update mode, or existing-PR rewrite confirmed** — preview before applying. Ask: "New title: `<title>` (`<N>` chars). Summary leads with: `<first two sentences>`. Total body: `<L>` lines. Apply?" If declined, the user may pass focus text back for a regenerate; do not apply. If confirmed, apply per "Applying via gh" below using `gh pr edit` and report the URL.
114
+
115
+ ---
116
+
117
+ ## Applying via gh
118
+
119
+ The body **must** be written to a temp file and passed via `--body-file <path>`. Never use `--body-file -`, stdin pipes, heredoc-to-stdin, or `--body "$(cat ...)"` — wrappers and stdin handling can silently produce an empty PR body while `gh` still exits 0 and returns a URL.
120
+
121
+ ```bash
122
+ BODY_FILE=$(mktemp "${TMPDIR:-/tmp}/ce-pr-body.XXXXXX") && cat >> "$BODY_FILE" <<'__CE_PR_BODY_END__'
123
+ <the composed body markdown goes here, verbatim>
124
+ __CE_PR_BODY_END__
125
+ ```
126
+
127
+ The quoted sentinel keeps `$VAR`, backticks, and any literal `EOF` inside the body from being expanded.
128
+
129
+ For `<TITLE>`: substitute verbatim. If it contains `"`, `` ` ``, `$`, or `\`, escape them or switch to single quotes.
130
+
131
+ ```bash
132
+ gh pr create --title "<TITLE>" --body-file "$BODY_FILE" # new PR
133
+ gh pr edit --title "<TITLE>" --body-file "$BODY_FILE" # existing PR
134
+ ```
@@ -0,0 +1,55 @@
1
+ # Branch creation from default branch
2
+
3
+ Local `<base>` may have stale commits (another session/worktree advanced it) or commits the user authored intending to branch from later. Local git can't distinguish these — ask when unpushed commits are present.
4
+
5
+ ## Decision flow
6
+
7
+ ### 1. Fetch fresh remote base
8
+
9
+ ```bash
10
+ git fetch --no-tags origin <base>
11
+ ```
12
+
13
+ If fetch fails (network, auth, no remote), use the fallback at the bottom.
14
+
15
+ ### 2. Check for unpushed local commits on `<base>`
16
+
17
+ ```bash
18
+ git log origin/<base>..HEAD --oneline
19
+ ```
20
+
21
+ - **Empty output:** set `BASE_REF=origin/<base>` and proceed to step 3.
22
+ - **Non-empty output:** show the commit list and ask (per the "Asking the user" convention in `SKILL.md`):
23
+
24
+ > "Local `<base>` has N unpushed commits not on `origin/<base>`. Carry them onto the new feature branch, or leave them on local `<base>`?"
25
+
26
+ - **Carry forward** → `BASE_REF=HEAD`. The new branch starts from local HEAD, preserving the commits.
27
+ - **Leave on `<base>`** → `BASE_REF=origin/<base>`. The new branch starts clean; commits remain on local `<base>`.
28
+
29
+ Never default silently — carrying foreign commits into a PR is worse than asking again.
30
+
31
+ ### 3. Create the feature branch
32
+
33
+ ```bash
34
+ git checkout -b <branch-name> "$BASE_REF"
35
+ ```
36
+
37
+ If checkout fails because uncommitted changes would be overwritten, stash and retry:
38
+
39
+ ```bash
40
+ git stash push -u -m "ce-commit-push-pr: pre-branch <branch-name>"
41
+ git checkout -b <branch-name> "$BASE_REF"
42
+ git stash pop
43
+ ```
44
+
45
+ If `git stash pop` reports conflicts, surface the conflict output and the stash ref to the user — do not auto-resolve.
46
+
47
+ ## Fetch failure fallback
48
+
49
+ If `git fetch` fails, branch from current local HEAD:
50
+
51
+ ```bash
52
+ git checkout -b <branch-name>
53
+ ```
54
+
55
+ Note in the user-facing summary that base freshness was not verified. Skip the unpushed-commits check — without a fresh `origin/<base>`, the answer is unreliable.
@@ -0,0 +1,115 @@
1
+ # PR Description Writing
2
+
3
+ ## The core principle
4
+
5
+ The diff is already visible on GitHub. The description exists to explain what the diff cannot show: what was impossible before and is now possible, what was broken and is now fixed, what shape changed. Cut any sentence a reader could reconstruct from the diff itself.
6
+
7
+ - Bad: "Adds `evidence-decider.ts`, modifies `ce-commit-push-pr/SKILL.md` to call it, and updates two test files."
8
+ - Good: "Evidence capture now decides automatically whether a change has observable behavior. CLI tools and libraries are now eligible alongside web UIs."
9
+
10
+ If the lead sentence describes what was moved, renamed, or added rather than what's now possible or fixed, rewrite it. This applies to every section, not just the opening — restating the diff is the failure mode this skill exists to prevent.
11
+
12
+ For user-facing bugs, run an extra before/after pass before writing the mechanism: name what the user would have seen before and what they now see instead. Only then mention the technical cause or fix, and only if it helps the reviewer understand risk. A lead like "Playback hooks now ignore late async responses" is still too mechanical if the visible bug was "old videos, thumbnails, or errors could appear after switching selections."
13
+
14
+ ---
15
+
16
+ ## Step Pre-A: Resolve the range and base
17
+
18
+ Two modes:
19
+
20
+ - **Current-branch mode** (default) — describe HEAD vs the repo's default base.
21
+ - **PR mode** — describe a specific PR. Triggered when the caller passes a PR ref.
22
+
23
+ For PR mode, fetch metadata first:
24
+
25
+ ```bash
26
+ gh pr view <ref> --json baseRefName,headRefOid,url,body,state,isCrossRepository,headRepositoryOwner
27
+ ```
28
+
29
+ If `state` is not `OPEN`, report and stop — do not invent a description. Use `baseRefName` as `<base>` and `headRefOid` as `<head>`.
30
+
31
+ For current-branch mode, resolve `<base>` in priority order: caller-supplied (`base:<ref>`) → `git rev-parse --abbrev-ref origin/HEAD` (strip `origin/`) → `gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'` → try `main`/`master`/`develop` via `git rev-parse --verify origin/<candidate>`. If none resolve, ask the user. `<head>` is `HEAD`.
32
+
33
+ **Base remote:** `origin` for current-branch mode and same-repo PRs. For fork PRs, match the PR's base owner/repo against `git remote -v`. If no local remote matches, skip to the `gh` fallback — do not diff against `origin` (wrong base).
34
+
35
+ ```bash
36
+ git fetch --no-tags <base-remote> <base>
37
+ git fetch --no-tags <base-remote> <head> # PR mode only: <head> is headRefOid and may not be local
38
+ git log --oneline "<base-remote>/<base>..<head>"
39
+ git diff "<base-remote>/<base>...<head>"
40
+ ```
41
+
42
+ If the commit list is empty, report "No commits to describe" and stop.
43
+
44
+ **Fallback** — use `gh pr diff <ref>` and `gh pr view <ref> --json commits` when local git can't reach the refs (fork PR with no matching remote, shallow clone, offline, merge-base on unrelated histories). For GHES configurations that reject SHA fetch but allow `refs/pull/`:
45
+
46
+ ```bash
47
+ git fetch --no-tags <base-remote> "refs/pull/<number>/head"
48
+ PR_HEAD_SHA=$(awk '/refs\/pull\/[0-9]+\/head/ {print $1; exit}' "$(git rev-parse --git-dir)/FETCH_HEAD")
49
+ ```
50
+
51
+ Note in the user-facing summary when the API fallback was used.
52
+
53
+ ---
54
+
55
+ ## Step A: Size the description
56
+
57
+ Match weight to weight. When in doubt, shorter wins. Subtract fix-up commits (review fixes, lint, rebase resolutions) when sizing — they're invisible to the reader. Large PRs need more selectivity, not more content.
58
+
59
+ | Change profile | Description approach |
60
+ |---|---|
61
+ | Small + simple (typo, config, dep bump) | 1-2 sentences, no headers. Under ~300 characters. |
62
+ | Small + non-trivial (bugfix, behavioral change) | 3-5 sentences. No headers unless two distinct concerns. |
63
+ | Medium feature or refactor | Narrative frame, then what changed and why. Call out design decisions. |
64
+ | Large or architecturally significant | Narrative frame + 3-5 design-decision callouts + brief test summary. Target ~100 lines, cap ~150. For PRs with many mechanisms, use a Summary table; do not create an H3 per mechanism. |
65
+ | Performance improvement | Include before/after measurements as a markdown table. |
66
+
67
+ For small + simple PRs, the value-led sentence is the entire description.
68
+ For small + non-trivial bugfixes, the 3-5 sentence target still needs a user-visible before/after lead when the bug affected UI, CLI output, workflow output, or any other user-observable behavior. Concision is not a reason to skip the visible symptom.
69
+
70
+ ---
71
+
72
+ ## Step B: Compose the title
73
+
74
+ `type: description` or `type(scope): description`.
75
+
76
+ - Type by intent, not file extension. When `fix` and `feat` both seem to fit, default to `fix` — adding code to remedy missing behavior is `fix`. Reserve `feat` for capabilities the user could not previously accomplish. Use `refactor`/`docs`/`chore`/`perf`/`test` when more precise.
77
+ - Scope (optional): narrowest useful label. Omit when no single label adds clarity.
78
+ - Description: imperative, lowercase, under 72 chars, no trailing period.
79
+ - Match repo conventions visible in recent commits.
80
+ - **Never use `!` or `BREAKING CHANGE:` without explicit user confirmation** — they trigger automated major-version bumps.
81
+
82
+ ---
83
+
84
+ ## Step C: Assemble the body
85
+
86
+ In order: opening → body sections that earn their keep → test plan if non-obvious → evidence block if one exists → Compound Engineering badge after a `---` rule.
87
+
88
+ The opening goes under `## Summary` if the body uses any `##` headings; bare paragraph otherwise. No orphaned opening paragraphs above the first heading.
89
+
90
+ **Evidence handling:** preserve any existing `## Demo` or `## Screenshots` block verbatim unless the user's focus asks to refresh it. If the caller passed a freshly captured URL or path, splice as `## Demo`. Otherwise omit. Place before the badge. Never label test output as "Demo" or "Screenshots."
91
+
92
+ **Visual aids:** reach for a diagram or table when it conveys the change faster than prose — relationships, flows, state transitions, sequences, trade-offs, before/after data, or any structure prose would have to enumerate. Mermaid and markdown tables cover most shapes; don't be limited to a particular type if a different one fits the change better. Place inline at the point of relevance. Skip for simple, prose-clear, or rename/dep-bump changes. Prose is authoritative when it conflicts with a visual.
93
+
94
+ **GitHub gotchas:** never prefix list items with `#` (GitHub auto-links `#1` as an issue ref). Use `org/repo#123` or full URL for actual references.
95
+
96
+ ---
97
+
98
+ ## Step D: Badge
99
+
100
+ ```markdown
101
+ ---
102
+
103
+ [![Compound Engineering](https://img.shields.io/badge/Built_with-Compound_Engineering-6366f1)](https://github.com/EveryInc/compound-engineering-plugin)
104
+ ![HARNESS](https://img.shields.io/badge/MODEL_SLUG-COLOR?logo=LOGO&logoColor=white)
105
+ ```
106
+
107
+ | Harness | `LOGO` | `COLOR` |
108
+ |---|---|---|
109
+ | Claude Code | `claude` | `D97757` |
110
+ | Codex | (omit `?logo=` param) | `000000` |
111
+ | Antigravity CLI (`agy`) | `googlegemini` | `4285F4` |
112
+
113
+ **Model slug:** spaces become underscores; append context window and thinking level in parens if known. **URL-encode literal parens as `%28` / `%29`** — unencoded parens inside markdown image URLs break release-please's commit parser, which silently drops the commit from the changelog. Examples: `Opus_4.6_%281M,_Extended_Thinking%29`, `Sonnet_4.6_%28200K%29`, `Gemini_3.1_Pro`.
114
+
115
+ Skip the badge if regenerating a body that already contains it.