diffing 0.18.1 → 0.18.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/dist/{cli-agent-Cf6SAnH4.mjs → cli-agent-DV5ZhMX1.mjs} +209 -25
  2. package/dist/{cli-gh-2NEumKQB.mjs → cli-gh-0hY7pvwJ.mjs} +2 -2
  3. package/dist/cli.mjs +13 -12
  4. package/dist/client/assets/{angular-html-BV3gPi7L.js → angular-html-DgLkj6cM.js} +1 -1
  5. package/dist/client/assets/{angular-ts-DuuSfKJK.js → angular-ts-S7IdfqOh.js} +1 -1
  6. package/dist/client/assets/{apl-BMc69egk.js → apl-dC851k0e.js} +1 -1
  7. package/dist/client/assets/{arc-CEC1cz1S.js → arc-v8u_6qG_.js} +1 -1
  8. package/dist/client/assets/{architectureDiagram-3BPJPVTR-BmJ5OHgd.js → architectureDiagram-3BPJPVTR-CtfNNxPZ.js} +1 -1
  9. package/dist/client/assets/{astro-Bg_CYwmB.js → astro-DgnNzfoZ.js} +1 -1
  10. package/dist/client/assets/{blade-Mca0XoRC.js → blade-By7nZeyV.js} +1 -1
  11. package/dist/client/assets/{blockDiagram-GPEHLZMM--XrThRLW.js → blockDiagram-GPEHLZMM-cfmYosKW.js} +1 -1
  12. package/dist/client/assets/{c-B2Uqi6oI.js → c-C6I1CPq_.js} +1 -1
  13. package/dist/client/assets/{c4Diagram-AAUBKEIU-W8w5oiRi.js → c4Diagram-AAUBKEIU-L52oIoFq.js} +1 -1
  14. package/dist/client/assets/channel-B8Y5aSHX.js +1 -0
  15. package/dist/client/assets/{chunk-2J33WTMH-Bpr3MqKf.js → chunk-2J33WTMH-Dpy-98nI.js} +1 -1
  16. package/dist/client/assets/{chunk-3OPIFGDE-DdMV_3DM.js → chunk-3OPIFGDE-DsFmltuQ.js} +1 -1
  17. package/dist/client/assets/{chunk-4BX2VUAB-BkfeLLsz.js → chunk-4BX2VUAB-B1PXeD30.js} +1 -1
  18. package/dist/client/assets/{chunk-55IACEB6-pCwXbxR0.js → chunk-55IACEB6-BkfaPY5R.js} +1 -1
  19. package/dist/client/assets/{chunk-5ZQYHXKU-BGFzCgvs.js → chunk-5ZQYHXKU-kHj4q0HC.js} +1 -1
  20. package/dist/client/assets/{chunk-727SXJPM-DU7oVWfJ.js → chunk-727SXJPM-DYndNEF7.js} +1 -1
  21. package/dist/client/assets/{chunk-AQP2D5EJ-DaVYG1qm.js → chunk-AQP2D5EJ-CGgu3cJd.js} +1 -1
  22. package/dist/client/assets/{chunk-BSJP7CBP-DAvnzgjY.js → chunk-BSJP7CBP-B85q9YnN.js} +1 -1
  23. package/dist/client/assets/{chunk-CSCIHK7Q-D6ZDvMsi.js → chunk-CSCIHK7Q-D4izdgab.js} +1 -1
  24. package/dist/client/assets/{chunk-FMBD7UC4-BFDCYCqF.js → chunk-FMBD7UC4-CwH6kGrM.js} +1 -1
  25. package/dist/client/assets/{chunk-KSCS5N6A-BmD6XY52.js → chunk-KSCS5N6A-D6WNG6Qv.js} +1 -1
  26. package/dist/client/assets/{chunk-L5ZTLDWV-Dl9iUIBf.js → chunk-L5ZTLDWV-BFzgANjL.js} +1 -1
  27. package/dist/client/assets/{chunk-LZXEDZCA-rOOJDxdB.js → chunk-LZXEDZCA-CXVdeXQA.js} +2 -2
  28. package/dist/client/assets/{chunk-ND2GUHAM-DBDu-JeD.js → chunk-ND2GUHAM-nez7hw5f.js} +1 -1
  29. package/dist/client/assets/{chunk-NZK2D7GU-CRyk4F3R.js → chunk-NZK2D7GU-DQxrGm1r.js} +1 -1
  30. package/dist/client/assets/{chunk-O5CBEL6O-DcKB07iP.js → chunk-O5CBEL6O-BAYDbzO8.js} +1 -1
  31. package/dist/client/assets/chunk-QZHKN3VN-DPZNzASS.js +1 -0
  32. package/dist/client/assets/chunk-WU5MYG2G-DOKX6dPU.js +1 -0
  33. package/dist/client/assets/{chunk-XPW4576I-WuzWMSrp.js → chunk-XPW4576I-DdtioiQK.js} +1 -1
  34. package/dist/client/assets/classDiagram-4FO5ZUOK-CkitIGos.js +1 -0
  35. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BD7zcbFa.js +1 -0
  36. package/dist/client/assets/{cobol-oQ1i-YtO.js → cobol-DVRUz845.js} +1 -1
  37. package/dist/client/assets/{coffee-s9XlmHbB.js → coffee-ywp-ztcj.js} +1 -1
  38. package/dist/client/assets/{cose-bilkent-S5V4N54A-CymUm7fn.js → cose-bilkent-S5V4N54A-YAV-XlD-.js} +1 -1
  39. package/dist/client/assets/{cpp-D60LxTox.js → cpp-lGJg5yP8.js} +1 -1
  40. package/dist/client/assets/{crystal-CHrCczDb.js → crystal-C255DQNq.js} +1 -1
  41. package/dist/client/assets/{css-1PQO32Hw.js → css-D0fueLBG.js} +1 -1
  42. package/dist/client/assets/{dagre-BM42HDAG-DOHZc0tO.js → dagre-BM42HDAG-C-nRRJ_h.js} +1 -1
  43. package/dist/client/assets/{diagram-2AECGRRQ-D8O2cleS.js → diagram-2AECGRRQ-Cy08G2GT.js} +1 -1
  44. package/dist/client/assets/{diagram-5GNKFQAL-CO-Ej4UD.js → diagram-5GNKFQAL-B5KxlMfb.js} +1 -1
  45. package/dist/client/assets/{diagram-KO2AKTUF-DCUr4wzS.js → diagram-KO2AKTUF-BtlklsuV.js} +1 -1
  46. package/dist/client/assets/{diagram-LMA3HP47-D9HnA0Qg.js → diagram-LMA3HP47-DwJhvsVf.js} +1 -1
  47. package/dist/client/assets/{diagram-OG6HWLK6-BxAitO2n.js → diagram-OG6HWLK6-e6mkflzE.js} +1 -1
  48. package/dist/client/assets/{dist-N-ROBnkL.js → dist-8nkFH_K6.js} +1 -1
  49. package/dist/client/assets/{edge-Ck54Fn7y.js → edge-Cy4Xn6qQ.js} +1 -1
  50. package/dist/client/assets/{edit-B8RwtrDs.js → edit-C3wvBNC7.js} +1 -1
  51. package/dist/client/assets/{elixir-xXxdfsfU.js → elixir-CHz66mgQ.js} +1 -1
  52. package/dist/client/assets/{elm-g0vLRWbF.js → elm-CuSKJX5P.js} +1 -1
  53. package/dist/client/assets/{erDiagram-TEJ5UH35-1ZMg7g98.js → erDiagram-TEJ5UH35-U7lAAznz.js} +1 -1
  54. package/dist/client/assets/{erb-CGFnxOST.js → erb-BbtQ1hep.js} +1 -1
  55. package/dist/client/assets/{flowDiagram-I6XJVG4X-D5u9lhJ-.js → flowDiagram-I6XJVG4X-jIylSBs9.js} +1 -1
  56. package/dist/client/assets/{ganttDiagram-6RSMTGT7-BbVKEzs8.js → ganttDiagram-6RSMTGT7-DW3d8a36.js} +1 -1
  57. package/dist/client/assets/{git-rebase-B3s6bE5_.js → git-rebase-R-XkmJUY.js} +1 -1
  58. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-sAottiiz.js → gitGraphDiagram-PVQCEYII-BHzkJu8s.js} +1 -1
  59. package/dist/client/assets/{glimmer-js-C2Xff18_.js → glimmer-js-C_yhese4.js} +1 -1
  60. package/dist/client/assets/{glimmer-ts-CRBS8ftd.js → glimmer-ts-DKD-Bn0M.js} +1 -1
  61. package/dist/client/assets/{glsl-aOY_t6dG.js → glsl-CJScdeHB.js} +1 -1
  62. package/dist/client/assets/{graphql-Cucpdpc6.js → graphql-BUP7lnbX.js} +1 -1
  63. package/dist/client/assets/{hack-Bw0KkVza.js → hack-Uu2tSM5_.js} +1 -1
  64. package/dist/client/assets/{haml-DnyaPoa2.js → haml-BKKDeeb3.js} +1 -1
  65. package/dist/client/assets/{handlebars-AedEof-m.js → handlebars-DXZJVvuj.js} +1 -1
  66. package/dist/client/assets/{html-Bu5h_Kgf.js → html-BNpfcyGi.js} +1 -1
  67. package/dist/client/assets/{html-derivative-CNiVLld1.js → html-derivative-D2Zj9RHU.js} +1 -1
  68. package/dist/client/assets/{http-B9-oOYPw.js → http-BDjsRgLN.js} +1 -1
  69. package/dist/client/assets/{hurl-Bo6NUnnd.js → hurl-D_YxHbnH.js} +1 -1
  70. package/dist/client/assets/{index-BkwV-g6J.js → index-CpN9wq1L.js} +142 -142
  71. package/dist/client/assets/{index-C73yr1tm.css → index-EoTRSuBL.css} +1 -1
  72. package/dist/client/assets/{infoDiagram-5YYISTIA-CfVELF4R.js → infoDiagram-5YYISTIA-oGpzG0Af.js} +1 -1
  73. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-DztjIGfb.js → ishikawaDiagram-YF4QCWOH-066RGSaQ.js} +1 -1
  74. package/dist/client/assets/{java-JJ3dl_jz.js → java-DeOKsdfJ.js} +1 -1
  75. package/dist/client/assets/{javascript-QgUuQNTw.js → javascript-oM5JhL2b.js} +1 -1
  76. package/dist/client/assets/{jinja-GbeEm2-u.js → jinja-CpW87uSV.js} +1 -1
  77. package/dist/client/assets/{jison-BXZbHsO3.js → jison-Du6rTe9r.js} +1 -1
  78. package/dist/client/assets/{journeyDiagram-JHISSGLW-Lg8CkxeI.js → journeyDiagram-JHISSGLW-BB4Aymt4.js} +1 -1
  79. package/dist/client/assets/{json-D02YvQSa.js → json-Cl5vEJGM.js} +1 -1
  80. package/dist/client/assets/{jsx-eZde6NZS.js → jsx-D3lCkT_f.js} +1 -1
  81. package/dist/client/assets/{julia-CfcuUD-A.js → julia-P1bWdzXQ.js} +1 -1
  82. package/dist/client/assets/{just-hQr8WcQp.js → just-BQHIj4wn.js} +1 -1
  83. package/dist/client/assets/{kanban-definition-UN3LZRKU-BWIeZIf6.js → kanban-definition-UN3LZRKU-CveGMVSw.js} +1 -1
  84. package/dist/client/assets/{latex-BxffZwv_.js → latex-CzeBoguz.js} +1 -1
  85. package/dist/client/assets/{line-Cy1AFxf0.js → line-CjLRf0wl.js} +1 -1
  86. package/dist/client/assets/{linear-Kk5IbGHr.js → linear-GmrB0HMZ.js} +1 -1
  87. package/dist/client/assets/{liquid-BvKnpUyR.js → liquid-BNh96Tca.js} +1 -1
  88. package/dist/client/assets/{lua-Bcds2vY9.js → lua-CNQoqqQP.js} +1 -1
  89. package/dist/client/assets/{marko-CZJQLjYc.js → marko-C_xevFIb.js} +1 -1
  90. package/dist/client/assets/{mdc-BRigtixg.js → mdc-XPBTv6ak.js} +1 -1
  91. package/dist/client/assets/{mermaid-parser.core-Dh2uTVxt.js → mermaid-parser.core-HsXe3oD9.js} +1 -1
  92. package/dist/client/assets/{mermaid.core-CXIGVQ74.js → mermaid.core-BukRjtV2.js} +3 -3
  93. package/dist/client/assets/{mindmap-definition-RKZ34NQL-DQNQJuAB.js → mindmap-definition-RKZ34NQL-VTmEFYO4.js} +1 -1
  94. package/dist/client/assets/{nginx-BI3-LI9U.js → nginx-C6cZlyey.js} +1 -1
  95. package/dist/client/assets/{nim-PEd8ZOME.js → nim-Cd9xainG.js} +1 -1
  96. package/dist/client/assets/{perl-BPTGdP4p.js → perl-DUfKG3XX.js} +1 -1
  97. package/dist/client/assets/{php-C8BKL0yL.js → php-DqMFPxyM.js} +1 -1
  98. package/dist/client/assets/{pieDiagram-4H26LBE5-Dz7gE0t5.js → pieDiagram-4H26LBE5-Bwlobw-Z.js} +1 -1
  99. package/dist/client/assets/{pug-H5z9rtbz.js → pug-GUix1iYH.js} +1 -1
  100. package/dist/client/assets/{qml-EzSpo2aM.js → qml-CqF34de7.js} +1 -1
  101. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-pTnmYdEJ.js → quadrantDiagram-W4KKPZXB-CMujQAS2.js} +1 -1
  102. package/dist/client/assets/{r-VMeUwMIt.js → r-BxeiO8R8.js} +1 -1
  103. package/dist/client/assets/{razor-Ne05zcaj.js → razor-Cu8elnMU.js} +1 -1
  104. package/dist/client/assets/{regexp-i5_jUZAj.js → regexp-DxNPsA-x.js} +1 -1
  105. package/dist/client/assets/{requirementDiagram-4Y6WPE33-GVw3NOxE.js → requirementDiagram-4Y6WPE33-CrrnxwFz.js} +1 -1
  106. package/dist/client/assets/{review-export-B4TOUDUE.js → review-export-Bd6rUYIi.js} +1 -1
  107. package/dist/client/assets/{rst-BZWuei_6.js → rst-2Xzw7kAb.js} +1 -1
  108. package/dist/client/assets/{ruby-CApICFTD.js → ruby-tZt1Nxb8.js} +1 -1
  109. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-CwWzwmqj.js → sankeyDiagram-5OEKKPKP-ihur8vgn.js} +1 -1
  110. package/dist/client/assets/{sas-BzEPX6GL.js → sas-DjpUVtXs.js} +1 -1
  111. package/dist/client/assets/{scss-B6Ld2NRm.js → scss-CZffX3V1.js} +1 -1
  112. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-Bz_Q76Kt.js → sequenceDiagram-3UESZ5HK-Bg7fvZIu.js} +1 -1
  113. package/dist/client/assets/{shellscript-KmoqGVVu.js → shellscript-B7bmiOyR.js} +1 -1
  114. package/dist/client/assets/{shellsession-CsSh_KTo.js → shellsession-CS7D1mSi.js} +1 -1
  115. package/dist/client/assets/{soy-CLgOu1If.js → soy-B9Nii6ks.js} +1 -1
  116. package/dist/client/assets/{sql-BdCh56kU.js → sql-CzQPwj1z.js} +1 -1
  117. package/dist/client/assets/{src-D7QQkGEc.js → src-DNsvZq9f.js} +1 -1
  118. package/dist/client/assets/{stata-C3fo8EYS.js → stata-BjQgQlmT.js} +1 -1
  119. package/dist/client/assets/{stateDiagram-AJRCARHV-D0pZtzLu.js → stateDiagram-AJRCARHV-DsgTVCaj.js} +1 -1
  120. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CwRm1eh7.js +1 -0
  121. package/dist/client/assets/{surrealql-qzihsJw_.js → surrealql-D6DnLnn1.js} +1 -1
  122. package/dist/client/assets/{svelte-B4tbn_KI.js → svelte-DRgP3jXp.js} +1 -1
  123. package/dist/client/assets/{templ-Ddev3BvY.js → templ-Cwgx1vj-.js} +1 -1
  124. package/dist/client/assets/{tex-DJLtgNQ6.js → tex-RzUmM9ei.js} +1 -1
  125. package/dist/client/assets/{timeline-definition-PNZ67QCA-CWTWgYi0.js → timeline-definition-PNZ67QCA-rG2Mo1Zq.js} +1 -1
  126. package/dist/client/assets/{ts-tags-qqxigRtr.js → ts-tags-gdlLe8LD.js} +1 -1
  127. package/dist/client/assets/{tsx-Pkf9BaPv.js → tsx-C3y6O1l0.js} +1 -1
  128. package/dist/client/assets/{twig-BiScb10p.js → twig-DLMzUdS6.js} +1 -1
  129. package/dist/client/assets/{typescript-Bhy3UXig.js → typescript-T8PJwqaO.js} +1 -1
  130. package/dist/client/assets/{vennDiagram-CIIHVFJN-DwB89v9I.js → vennDiagram-CIIHVFJN-B-eDjTJG.js} +1 -1
  131. package/dist/client/assets/{vue-CANMWBRv.js → vue-BMIaruOV.js} +1 -1
  132. package/dist/client/assets/{vue-html-DtS6f62r.js → vue-html-D4e4SuHW.js} +1 -1
  133. package/dist/client/assets/{vue-vine-BpQ9kwSB.js → vue-vine-DU2nprLA.js} +1 -1
  134. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DNwwPk4s.js → wardleyDiagram-YWT4CUSO-BkcHoefB.js} +1 -1
  135. package/dist/client/assets/{xml-CD5eIXsm.js → xml-DD7circ2.js} +1 -1
  136. package/dist/client/assets/{xsl-DGNZQAUu.js → xsl-Bu-TQ7Ag.js} +1 -1
  137. package/dist/client/assets/{xychartDiagram-2RQKCTM6-L7M4YSvw.js → xychartDiagram-2RQKCTM6-BGa1-yRO.js} +1 -1
  138. package/dist/client/assets/{yaml-Cm8mwIB7.js → yaml-C12ZIXNt.js} +1 -1
  139. package/dist/client/index.html +2 -2
  140. package/dist/completions-C0ERX2wC.mjs +2 -0
  141. package/dist/design-system-types-QR9xS7o3.mjs +2 -0
  142. package/dist/design-system-types-uiP9W2uj.mjs +75 -0
  143. package/dist/{doctor-BxTaLqAF.mjs → doctor-Dg61wsBc.mjs} +6 -6
  144. package/dist/{doctor-BdDB6p27.mjs → doctor-Y8l1LEDM.mjs} +1 -1
  145. package/dist/{github-CToLsvPu.mjs → github-BtABlwOZ.mjs} +3 -3
  146. package/dist/{github--rpPZ3vK.mjs → github-BuBcy-co.mjs} +1 -1
  147. package/dist/{github-attachments-DEvAeo5P.mjs → github-attachments-Bwr25ItV.mjs} +1 -1
  148. package/dist/{mcp-DoNBucix.mjs → mcp-45VPdWIr.mjs} +136 -17
  149. package/dist/{mockup-format-D4Ln0WxJ.mjs → mockup-lint-BRjhxXSw.mjs} +160 -7
  150. package/dist/native/tui-darwin-arm64/diffing-tui +0 -0
  151. package/dist/native/tui-darwin-x64/diffing-tui +0 -0
  152. package/dist/native/tui-linux-arm64-gnu/diffing-tui +0 -0
  153. package/dist/native/tui-linux-arm64-musl/diffing-tui +0 -0
  154. package/dist/native/tui-linux-x64-gnu/diffing-tui +0 -0
  155. package/dist/native/tui-linux-x64-musl/diffing-tui +0 -0
  156. package/dist/native/tui-win32-x64-msvc/diffing-tui.exe +0 -0
  157. package/dist/{review-export-DoST2oPt.mjs → review-export-BXCeRNjk.mjs} +1 -1
  158. package/dist/{server-BRQdb64n.mjs → server-CH-UPGFR.mjs} +1145 -127
  159. package/dist/{server-lock-CdaUNZyX.mjs → server-lock-ACw2cKDI.mjs} +22 -5
  160. package/dist/{session-conflict-BVgyyerQ.mjs → session-conflict-oUPEv3YT.mjs} +3 -3
  161. package/dist/{session-manager-CUqF8hkP.mjs → session-manager-C9KjVkzq.mjs} +2 -2
  162. package/dist/{session-url-B9FOnF3F.mjs → session-url-CyBpcLAH.mjs} +1 -1
  163. package/dist/{settings-DkPDB_hS.mjs → settings-DIa-3C8o.mjs} +1 -1
  164. package/dist/{setup-BwWZ9Fzq.mjs → setup-B6bOeWQl.mjs} +6 -6
  165. package/dist/{setup-first-run-i1o7DBki.mjs → setup-first-run-CAjtqBal.mjs} +2 -2
  166. package/dist/{setup-first-run-DyT0PlOZ.mjs → setup-first-run-DPXLAMqa.mjs} +1 -1
  167. package/extensions/pi/index.ts +128 -60
  168. package/extensions/pi/skill-heal.ts +73 -0
  169. package/extensions/pi/tsconfig.json +2 -1
  170. package/package.json +1 -1
  171. package/dist/client/assets/channel-C9URWRe4.js +0 -1
  172. package/dist/client/assets/chunk-QZHKN3VN-BBNO2-yv.js +0 -1
  173. package/dist/client/assets/chunk-WU5MYG2G-HP2Om5f9.js +0 -1
  174. package/dist/client/assets/classDiagram-4FO5ZUOK-BW_ZPHe7.js +0 -1
  175. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DOd628kk.js +0 -1
  176. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-P0vTqsyH.js +0 -1
  177. package/dist/completions-CYa5usLb.mjs +0 -2
  178. /package/dist/{apply-suggestion-BsR_8FXW.mjs → apply-suggestion-tLsWREyb.mjs} +0 -0
  179. /package/dist/{comment-format-D4mCqr7T.mjs → comment-format-DS1wOWj_.mjs} +0 -0
  180. /package/dist/{completions-2aHVTmiJ.mjs → completions-ClqvbDYF.mjs} +0 -0
  181. /package/dist/{diff-fingerprint-BL5jNHnP.mjs → diff-fingerprint-PnC8Fs1-.mjs} +0 -0
  182. /package/dist/{find-tui-binary-DGspwyvd.mjs → find-tui-binary-DvADkBkP.mjs} +0 -0
  183. /package/dist/{handoff-DcShCxWJ.mjs → handoff-B85WLpcN.mjs} +0 -0
  184. /package/dist/{terminal-BroplOnw.mjs → terminal-Ce7OL1A-.mjs} +0 -0
  185. /package/dist/{tui-search-bridge-fFKqX4Fi.mjs → tui-search-bridge-N33QmB0q.mjs} +0 -0
  186. /package/dist/{update-check-ISaw61qS.mjs → update-check-D0yDl7sZ.mjs} +0 -0
@@ -1,9 +1,9 @@
1
- import { i as buildGitDiffArgs, s as parseDiffOptions, t as startServer } from "./server-BRQdb64n.mjs";
2
- import { r as formatPlanReview, t as formatMockupReview } from "./mockup-format-D4Ln0WxJ.mjs";
3
- import { t as formatComments } from "./comment-format-D4mCqr7T.mjs";
4
- import { _ as generateSessionToken, c as removeServerLockIfOwned, i as isLockAlive, p as writeServerLock, r as diffScopeKey, s as removeServerLock, t as acquireServerStartupLease, u as resolveActiveServerLock, x as SESSION_TOKEN_HEADER, y as isLoopbackHost } from "./server-lock-CdaUNZyX.mjs";
5
- import { i as reviewSessionUrl, n as joinSessionApiUrl, r as reviewSessionBaseUrl, t as appendSessionToken } from "./session-url-B9FOnF3F.mjs";
6
- import { n as AWAIT_REVIEW_TIMEOUT_NEXT_ACTION, r as AWAIT_TOOL_DESCRIPTION_SUFFIX, s as PLAN_SUBMIT_NEXT_ACTION, t as AWAIT_PLAN_TIMEOUT_NEXT_ACTION } from "./handoff-DcShCxWJ.mjs";
1
+ import { i as buildGitDiffArgs, s as parseDiffOptions, t as startServer } from "./server-CH-UPGFR.mjs";
2
+ import { a as formatPlanReview, r as formatMockupReview, t as formatSubmitHints } from "./mockup-lint-BRjhxXSw.mjs";
3
+ import { t as formatComments } from "./comment-format-DS1wOWj_.mjs";
4
+ import { _ as generateSessionToken, c as removeServerLockIfOwned, i as isLockAlive, p as writeServerLock, r as diffScopeKey, s as removeServerLock, t as acquireServerStartupLease, u as resolveActiveServerLock, x as SESSION_TOKEN_HEADER, y as isLoopbackHost } from "./server-lock-ACw2cKDI.mjs";
5
+ import { i as reviewSessionUrl, n as joinSessionApiUrl, r as reviewSessionBaseUrl, t as appendSessionToken } from "./session-url-CyBpcLAH.mjs";
6
+ import { n as AWAIT_REVIEW_TIMEOUT_NEXT_ACTION, r as AWAIT_TOOL_DESCRIPTION_SUFFIX, s as PLAN_SUBMIT_NEXT_ACTION, t as AWAIT_PLAN_TIMEOUT_NEXT_ACTION } from "./handoff-B85WLpcN.mjs";
7
7
  import { execFileSync } from "node:child_process";
8
8
  import { randomUUID } from "node:crypto";
9
9
  import { fileURLToPath } from "node:url";
@@ -1517,11 +1517,18 @@ function createMcpServer(options) {
1517
1517
  screens: z.array(z.object({
1518
1518
  id: z.string().optional(),
1519
1519
  label: z.string().optional(),
1520
- html: z.string()
1520
+ html: z.string(),
1521
+ stateOf: z.string().optional(),
1522
+ flow: z.string().optional()
1521
1523
  })).optional(),
1522
1524
  mockupId: z.string().optional(),
1523
1525
  source: z.string().optional(),
1524
- model: z.string().optional()
1526
+ model: z.string().optional(),
1527
+ mode: z.enum(["fragment", "document"]).optional(),
1528
+ designSystem: z.string().optional(),
1529
+ planId: z.string().optional(),
1530
+ fromMockupId: z.string().optional(),
1531
+ blank: z.boolean().optional()
1525
1532
  },
1526
1533
  outputSchema: {
1527
1534
  mockupId: z.string(),
@@ -1533,7 +1540,7 @@ function createMcpServer(options) {
1533
1540
  readOnlyHint: false,
1534
1541
  idempotentHint: false
1535
1542
  }
1536
- }, async ({ title, html, screens, mockupId, source, model }) => {
1543
+ }, async ({ title, html, screens, mockupId, source, model, mode, designSystem, planId, fromMockupId, blank }) => {
1537
1544
  const session = requireWebSession();
1538
1545
  await seedMockupCursor(session, void 0, true);
1539
1546
  const mockup = await requestSessionJson(session, "/api/mockups", {
@@ -1545,12 +1552,17 @@ function createMcpServer(options) {
1545
1552
  html,
1546
1553
  screens,
1547
1554
  source,
1548
- model
1555
+ model,
1556
+ mode,
1557
+ designSystemId: designSystem,
1558
+ planId,
1559
+ fromMockupId,
1560
+ blank
1549
1561
  })
1550
1562
  });
1551
1563
  const url = appendSessionToken(`${session.apiOrigin}/mockup/${mockup.id}`, session.lock.authToken);
1552
1564
  const hints = mockup.hints ?? [];
1553
- const hintText = hints.length > 0 ? `\n⚠️ In-page state UI detected — split each state into its own screen:\n${hints.map((h) => ` • ${h.screenId}: ${h.patterns.join(", ")}`).join("\n")}` : "";
1565
+ const hintText = formatSubmitHints(hints);
1554
1566
  return textResult(`Submitted mockup ${mockup.id} (v${mockup.version}) at ${url}.${hintText} ${MOCKUP_SUBMIT_NEXT_ACTION}`, {
1555
1567
  mockupId: mockup.id,
1556
1568
  version: mockup.version,
@@ -1724,7 +1736,8 @@ function createMcpServer(options) {
1724
1736
  "summary",
1725
1737
  "comments",
1726
1738
  "comment",
1727
- "screen"
1739
+ "screen",
1740
+ "preview"
1728
1741
  ]).default("summary"),
1729
1742
  status: z.enum(["open", "resolved"]).optional(),
1730
1743
  screenId: z.string().optional(),
@@ -1761,18 +1774,20 @@ function createMcpServer(options) {
1761
1774
  });
1762
1775
  server.registerTool("revise_mockup", {
1763
1776
  title: "Revise a mockup screen",
1764
- description: "One-screen revision of an HTML mockup. op=upsert adds/replaces a screen (html inline, never files on disk), op=remove deletes a screen, op=patch replaces the first exact occurrence of expectedText with replacement. Every success bumps the mockup version; pass expectedVersion to guard against racing edits (409 version-mismatch on conflict, nothing applied). For revisions touching many screens, resubmit via submit_mockup with the same mockupId instead.",
1777
+ description: "One-screen revision of an HTML mockup. op=upsert adds/replaces a screen (html inline, never files on disk), op=remove deletes a screen, op=patch replaces the first exact occurrence of expectedText with replacement, op=replace-region replaces the inner HTML of the first [data-diffing=region] element. Every success bumps the mockup version; pass expectedVersion to guard against racing edits (409 version-mismatch on conflict, nothing applied). For revisions touching many screens, resubmit via submit_mockup with the same mockupId instead.",
1765
1778
  inputSchema: {
1766
1779
  mockupId: z.string().min(1),
1767
1780
  op: z.enum([
1768
1781
  "upsert",
1769
1782
  "remove",
1770
- "patch"
1783
+ "patch",
1784
+ "replace-region"
1771
1785
  ]),
1772
1786
  screenId: z.string().min(1),
1773
1787
  html: z.string().optional(),
1774
1788
  label: z.string().optional(),
1775
1789
  expectedText: z.string().optional(),
1790
+ region: z.string().optional(),
1776
1791
  replacement: z.string().optional(),
1777
1792
  expectedVersion: z.number().int().positive().optional()
1778
1793
  },
@@ -1783,7 +1798,7 @@ function createMcpServer(options) {
1783
1798
  occurrences: z.number().optional()
1784
1799
  },
1785
1800
  annotations: MUTATING
1786
- }, async ({ mockupId, op, screenId, html, label, expectedText, replacement, expectedVersion }) => {
1801
+ }, async ({ mockupId, op, screenId, html, label, expectedText, region, replacement, expectedVersion }) => {
1787
1802
  const headers = { "Content-Type": "application/json" };
1788
1803
  const base = `/api/mockups/${encodeURIComponent(mockupId)}/screens/${encodeURIComponent(screenId)}`;
1789
1804
  if (op === "upsert") {
@@ -1798,7 +1813,7 @@ function createMcpServer(options) {
1798
1813
  })
1799
1814
  });
1800
1815
  const hints = mockup.hints ?? [];
1801
- const hintText = hints.length > 0 ? `\n⚠️ In-page state UI detected — split each state into its own screen: ${hints.map((h) => h.patterns.join(", ")).join("; ")}` : "";
1816
+ const hintText = formatSubmitHints(hints);
1802
1817
  return textResult(`Upserted screen ${screenId} on ${mockupId} → v${mockup.version}.${hintText}`, {
1803
1818
  mockupId,
1804
1819
  version: mockup.version,
@@ -1814,6 +1829,24 @@ function createMcpServer(options) {
1814
1829
  screenIds: mockup.screens.map((s) => s.id)
1815
1830
  });
1816
1831
  }
1832
+ if (op === "replace-region") {
1833
+ if (!region || replacement === void 0) throw new Error("revise_mockup op=replace-region requires region and replacement");
1834
+ const data = await requestBaseJson(base, {
1835
+ method: "PATCH",
1836
+ headers,
1837
+ body: JSON.stringify({
1838
+ region,
1839
+ replacement,
1840
+ expectedVersion
1841
+ })
1842
+ });
1843
+ return textResult(`Replaced region "${region}" on ${screenId} (${data.occurrences} match(es)) → v${data.mockup.version}`, {
1844
+ mockupId,
1845
+ version: data.mockup.version,
1846
+ screenIds: data.mockup.screens.map((s) => s.id),
1847
+ occurrences: data.occurrences
1848
+ });
1849
+ }
1817
1850
  if (expectedText === void 0 || replacement === void 0) throw new Error("revise_mockup op=patch requires expectedText and replacement");
1818
1851
  const data = await requestBaseJson(base, {
1819
1852
  method: "PATCH",
@@ -1882,6 +1915,92 @@ function createMcpServer(options) {
1882
1915
  results: data.results
1883
1916
  });
1884
1917
  });
1918
+ server.registerTool("get_design_system", {
1919
+ title: "Get the repo design system",
1920
+ description: "Read the published (or draft) per-repo design system: tokens, guidelines, components. Call this before authoring mockup HTML. Omit id for the default system.",
1921
+ inputSchema: { id: z.string().optional() },
1922
+ outputSchema: { system: z.unknown().nullable() },
1923
+ annotations: READ_ONLY
1924
+ }, async ({ id }) => {
1925
+ const path = id ? `/api/design-systems/${encodeURIComponent(id)}` : "/api/design-systems/default";
1926
+ try {
1927
+ return textResult("design system", { system: await requestBaseJson(path) });
1928
+ } catch {
1929
+ return textResult("No design system published yet.", { system: null });
1930
+ }
1931
+ });
1932
+ server.registerTool("extract_design_system", {
1933
+ title: "Extract a draft design system from the repo",
1934
+ description: "Scan the consumer repo for CSS custom properties / token JSON and write a draft design system. Does not publish. Human must publish before fragment mockups inherit it.",
1935
+ inputSchema: {
1936
+ id: z.string().optional(),
1937
+ title: z.string().optional()
1938
+ },
1939
+ outputSchema: {
1940
+ system: z.unknown(),
1941
+ extract: z.unknown()
1942
+ },
1943
+ annotations: MUTATING
1944
+ }, async ({ id, title }) => {
1945
+ const systemId = id || "default";
1946
+ const data = await requestBaseJson(`/api/design-systems/${encodeURIComponent(systemId)}/extract`, {
1947
+ method: "POST",
1948
+ headers: { "Content-Type": "application/json" },
1949
+ body: JSON.stringify({
1950
+ from: "css",
1951
+ title
1952
+ })
1953
+ });
1954
+ return textResult(`Draft design system ${systemId}. Human must publish before it wraps mockups.`, data);
1955
+ });
1956
+ server.registerTool("propose_design_system", {
1957
+ title: "Propose a design-system draft",
1958
+ description: "Update the draft design system (tokens, guidelines, components). Does not publish. Agents may propose; only the human publishes.",
1959
+ inputSchema: {
1960
+ id: z.string().optional(),
1961
+ title: z.string().optional(),
1962
+ guidelines: z.string().optional(),
1963
+ tokens: z.unknown().optional()
1964
+ },
1965
+ outputSchema: { system: z.unknown() },
1966
+ annotations: MUTATING
1967
+ }, async ({ id, title, guidelines, tokens }) => {
1968
+ const systemId = id || "default";
1969
+ const system = await requestBaseJson(`/api/design-systems/${encodeURIComponent(systemId)}`, {
1970
+ method: "PUT",
1971
+ headers: { "Content-Type": "application/json" },
1972
+ body: JSON.stringify({
1973
+ title,
1974
+ guidelines,
1975
+ tokens
1976
+ })
1977
+ });
1978
+ return textResult(`Proposed draft on ${systemId}`, { system });
1979
+ });
1980
+ server.registerTool("publish_design_system", {
1981
+ title: "Publish the design system",
1982
+ description: "Publish the current draft as a new revision. Prefer letting the human do this in the UI. Use only when the user explicitly asked to publish.",
1983
+ inputSchema: { id: z.string().optional() },
1984
+ outputSchema: { system: z.unknown() },
1985
+ annotations: MUTATING
1986
+ }, async ({ id }) => {
1987
+ const systemId = id || "default";
1988
+ const system = await requestBaseJson(`/api/design-systems/${encodeURIComponent(systemId)}/publish`, { method: "POST" });
1989
+ return textResult(`Published ${systemId}`, { system });
1990
+ });
1991
+ server.registerTool("get_mockup_handoff", {
1992
+ title: "Get mockup implementation handoff",
1993
+ description: "Compact handoff after a mockup is approved: tokens, screens with intent, components used, leftover nits. Prefer this over dumping every screen's HTML.",
1994
+ inputSchema: { mockupId: z.string().min(1) },
1995
+ outputSchema: {
1996
+ xml: z.string().optional(),
1997
+ mockupId: z.string().optional()
1998
+ },
1999
+ annotations: READ_ONLY
2000
+ }, async ({ mockupId }) => {
2001
+ const data = await requestBaseJson(`/api/mockups/${encodeURIComponent(mockupId)}/handoff`);
2002
+ return textResult(typeof data.xml === "string" ? data.xml : "handoff", data);
2003
+ });
1885
2004
  server.registerResource("agent-guide", "diffing://agent-guide", {
1886
2005
  title: "diffing agent guide",
1887
2006
  description: "Portable quick reference for the native code-review and plan-review workflows.",
@@ -1916,7 +2035,7 @@ This MCP connection is immutably bound to \`${repoRoot}\`.
1916
2035
  1. Call \`submit_mockup\`, share the URL, and park unless asked to wait; resubmit with the same \`mockupId\` to bump the version.
1917
2036
  2. On resume or sync wait, call \`await_mockup_review\` (or \`list_mockups\` / \`get_mockup\`).
1918
2037
  3. For bounded reads prefer \`inspect_mockup\` (view=summary/comments/comment/screen, filters by status/screenId/viewport/version).
1919
- 4. To revise one screen use \`revise_mockup\` (upsert/remove/patch with \`expectedVersion\` guard); thread ops go through atomic \`update_mockup_threads\`.
2038
+ 4. To revise one screen use \`revise_mockup\` (upsert/remove/patch/replace-region with \`expectedVersion\` guard); thread ops go through atomic \`update_mockup_threads\`.
1920
2039
  5. On \`approved\`, implement; on \`changes-requested\`, revise and resubmit; on \`rejected\`, stop.
1921
2040
 
1922
2041
  ## GitHub PR
@@ -35,9 +35,9 @@ function normalizeSubmitScreens(input) {
35
35
  ok: false,
36
36
  error: "A mockup html body or screens[] is required"
37
37
  };
38
- if (raw.length > 12) return {
38
+ if (raw.length > 24) return {
39
39
  ok: false,
40
- error: `At most 12 screens are allowed`
40
+ error: `At most 24 screens are allowed`
41
41
  };
42
42
  const seen = /* @__PURE__ */ new Set();
43
43
  const screens = [];
@@ -60,12 +60,14 @@ function normalizeSubmitScreens(input) {
60
60
  error: `Duplicate screen id "${id}"`
61
61
  };
62
62
  seen.add(id);
63
- const label = typeof item.label === "string" && item.label.trim() ? item.label.trim() : defaultScreenLabel(id);
64
- screens.push({
63
+ const screen = {
65
64
  id,
66
- label,
65
+ label: typeof item.label === "string" && item.label.trim() ? item.label.trim() : defaultScreenLabel(id),
67
66
  html: item.html.replace(/\r\n/g, "\n")
68
- });
67
+ };
68
+ if (item.stateOf) screen.stateOf = item.stateOf;
69
+ if (item.flow) screen.flow = item.flow;
70
+ screens.push(screen);
69
71
  }
70
72
  return {
71
73
  ok: true,
@@ -324,4 +326,155 @@ function formatComment(comment, fallbackVersion, includeContext) {
324
326
  return parts.join("\n");
325
327
  }
326
328
  //#endregion
327
- export { MOCKUP_MAX_SCREEN_BYTES as a, defaultScreenLabel as c, normalizeSubmitScreens as d, slugifyScreenId as f, sectionTitleForLine as i, isMockupViewport as l, extractPlanLines as n, MOCKUP_SCREEN_ID_RE as o, formatPlanReview as r, commentViewport as s, formatMockupReview as t, normalizeMockupViewport as u };
329
+ //#region src/lib/mockup-lint.ts
330
+ const RULES = [
331
+ {
332
+ label: "tabs",
333
+ re: /role\s*=\s*["']tab(list|panel)?["']/i
334
+ },
335
+ {
336
+ label: "tabs",
337
+ re: /aria-selected\s*=/i
338
+ },
339
+ {
340
+ label: "tabs",
341
+ re: /data-(?:bs-)?toggle\s*=\s*["'](?:tab|pill)["']/i
342
+ },
343
+ {
344
+ label: "tabs",
345
+ re: /\bdata-tabs?\s*=/i
346
+ },
347
+ {
348
+ label: "accordion",
349
+ re: /<details[\s>]/i
350
+ },
351
+ {
352
+ label: "accordion",
353
+ re: /data-(?:bs-)?toggle\s*=\s*["']collapse["']/i
354
+ },
355
+ {
356
+ label: "accordion",
357
+ re: /class\s*=\s*["'][^"']*\baccordion\b/i
358
+ },
359
+ {
360
+ label: "modal",
361
+ re: /role\s*=\s*["'](?:alert)?dialog["']/i
362
+ },
363
+ {
364
+ label: "modal",
365
+ re: /data-(?:bs-)?toggle\s*=\s*["']modal["']/i
366
+ },
367
+ {
368
+ label: "modal",
369
+ re: /class\s*=\s*["'][^"']*\bmodal\b/i
370
+ },
371
+ {
372
+ label: "dropdown",
373
+ re: /role\s*=\s*["']menu(?:bar)?["']/i
374
+ },
375
+ {
376
+ label: "dropdown",
377
+ re: /data-(?:bs-)?toggle\s*=\s*["']dropdown["']/i
378
+ },
379
+ {
380
+ label: "dropdown",
381
+ re: /class\s*=\s*["'][^"']*\bdropdown\b/i
382
+ },
383
+ {
384
+ label: "toggle",
385
+ re: /role\s*=\s*["']switch["']/i
386
+ },
387
+ {
388
+ label: "toggle",
389
+ re: /class\s*=\s*["'][^"']*\b(?:toggle|switch)\b/i
390
+ }
391
+ ];
392
+ const ORDERED_LABELS = [
393
+ "tabs",
394
+ "accordion",
395
+ "modal",
396
+ "dropdown",
397
+ "toggle"
398
+ ];
399
+ /** Find the in-page state UI patterns present in one screen's HTML. */
400
+ function detectInPageState(html) {
401
+ const found = /* @__PURE__ */ new Set();
402
+ for (const rule of RULES) {
403
+ if (found.has(rule.label)) continue;
404
+ if (rule.re.test(html)) found.add(rule.label);
405
+ }
406
+ return ORDERED_LABELS.filter((label) => found.has(label));
407
+ }
408
+ const STYLE_RULES = [
409
+ {
410
+ label: "tailwind-cdn",
411
+ re: /cdn\.tailwindcss\.com/i
412
+ },
413
+ {
414
+ label: "tailwind-cdn",
415
+ re: /(?:unpkg\.com|cdn\.jsdelivr\.net|esm\.sh)\/(?:npm\/)?tailwindcss/i
416
+ },
417
+ {
418
+ label: "google-fonts",
419
+ re: /fonts\.googleapis\.com/i
420
+ },
421
+ {
422
+ label: "google-fonts",
423
+ re: /fonts\.gstatic\.com/i
424
+ }
425
+ ];
426
+ const GENERIC_FONT_RE = /font-family\s*:\s*[^;{]*\bInter\b/i;
427
+ const GENERIC_INDIGO_RE = /#(?:4f46e5|4338ca|6366f1|818cf8|7c3aed|8b5cf6|a78bfa)\b|\b(?:indigo|violet)-(?:[4-9]00|950)\b/i;
428
+ /** Off-brand / generic-AI styling that should not ship as the product look. */
429
+ function detectGenericStyle(html) {
430
+ const found = /* @__PURE__ */ new Set();
431
+ for (const rule of STYLE_RULES) {
432
+ if (found.has(rule.label)) continue;
433
+ if (rule.re.test(html)) found.add(rule.label);
434
+ }
435
+ if (GENERIC_FONT_RE.test(html) && GENERIC_INDIGO_RE.test(html)) found.add("generic-palette");
436
+ return [
437
+ "tailwind-cdn",
438
+ "google-fonts",
439
+ "generic-palette"
440
+ ].filter((label) => found.has(label));
441
+ }
442
+ /** Build submit-time hints for a set of screens (empty when all clean). */
443
+ function lintMockupScreens(screens) {
444
+ const hints = [];
445
+ for (const screen of screens) {
446
+ const state = detectInPageState(screen.html);
447
+ if (state.length > 0) hints.push({
448
+ screenId: screen.id,
449
+ kind: "state",
450
+ patterns: state,
451
+ message: `Screen "${screen.id}" contains in-page state UI (${state.join(", ")}). Split each state into its own screen instead.`
452
+ });
453
+ const style = detectGenericStyle(screen.html);
454
+ if (style.length > 0) hints.push({
455
+ screenId: screen.id,
456
+ kind: "style",
457
+ patterns: style,
458
+ message: `Screen "${screen.id}" looks generic (${style.join(", ")}). Drop CDN Tailwind / Google Fonts and do not invent Inter + indigo — match the product.`
459
+ });
460
+ }
461
+ return hints;
462
+ }
463
+ /** Compact submit/revise warning for CLI and MCP. */
464
+ function formatSubmitHints(hints) {
465
+ if (hints.length === 0) return "";
466
+ const state = hints.filter((h) => h.kind !== "style");
467
+ const style = hints.filter((h) => h.kind === "style");
468
+ const lines = [];
469
+ if (state.length > 0) {
470
+ lines.push("⚠️ In-page state UI detected — split each state into its own screen:");
471
+ for (const hint of state) lines.push(` • ${hint.screenId}: ${hint.patterns.join(", ")}`);
472
+ }
473
+ if (style.length > 0) {
474
+ lines.push("⚠️ Generic styling — match the product (no CDN Tailwind, Google Fonts, or Inter+indigo):");
475
+ for (const hint of style) lines.push(` • ${hint.screenId}: ${hint.patterns.join(", ")}`);
476
+ }
477
+ return `\n${lines.join("\n")}`;
478
+ }
479
+ //#endregion
480
+ export { formatPlanReview as a, MOCKUP_SCREEN_ID_RE as c, isMockupViewport as d, normalizeMockupViewport as f, extractPlanLines as i, commentViewport as l, slugifyScreenId as m, lintMockupScreens as n, sectionTitleForLine as o, normalizeSubmitScreens as p, formatMockupReview as r, MOCKUP_MAX_SCREEN_BYTES as s, formatSubmitHints as t, defaultScreenLabel as u };
@@ -1,4 +1,4 @@
1
- import { n as reviewDecisionSummary } from "./comment-format-D4mCqr7T.mjs";
1
+ import { n as reviewDecisionSummary } from "./comment-format-DS1wOWj_.mjs";
2
2
  //#region src/lib/review-export.ts
3
3
  /**
4
4
  * Export a review as human-readable Markdown (clipboard / download / CLI).