diffing 0.2.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +169 -3
- package/dist/{cli-agent-BNwY5lZE.mjs → cli-agent-B4hU6Xay.mjs} +58 -5
- package/dist/{cli-agent-CbzXDSSF.mjs → cli-agent-B_PHd635.mjs} +58 -5
- package/dist/{cli-agent-ZAkixf4c.mjs → cli-agent-KxNAFIPf.mjs} +6 -2
- package/dist/cli-gh-CDGSpndZ.mjs +147 -0
- package/dist/cli-gh-abs-IJrz.mjs +147 -0
- package/dist/cli.mjs +1214 -56
- package/dist/client/assets/{angular-html-DsssUIMZ.js → angular-html-BVFBJbbm.js} +1 -1
- package/dist/client/assets/{angular-ts-dTg-sJ77.js → angular-ts-CbJB4bNJ.js} +1 -1
- package/dist/client/assets/{apl-C1yUKbqz.js → apl-MzqTwOQT.js} +1 -1
- package/dist/client/assets/arc-DkYz3FVO.js +1 -0
- package/dist/client/assets/architecture-7EHR7CIX-BM5HxebS.js +1 -0
- package/dist/client/assets/architectureDiagram-3BPJPVTR-CU3k1-_g.js +36 -0
- package/dist/client/assets/array-CkF66D10.js +1 -0
- package/dist/client/assets/{astro-BI07ha2y.js → astro-DDblGxmh.js} +1 -1
- package/dist/client/assets/{blade-DkzUGffS.js → blade-DlgT3iuV.js} +1 -1
- package/dist/client/assets/blockDiagram-GPEHLZMM-1lwkHRY_.js +132 -0
- package/dist/client/assets/{bsl-Dx5tFn3i.js → bsl-BrHd4RA2.js} +1 -1
- package/dist/client/assets/{c-KkuqqOvW.js → c-BL61MF4M.js} +1 -1
- package/dist/client/assets/c4Diagram-AAUBKEIU-BPBjnNM8.js +10 -0
- package/dist/client/assets/{cairo-wCCQTdA9.js → cairo-BDZ6TRZS.js} +1 -1
- package/dist/client/assets/channel-BX6tZjG6.js +1 -0
- package/dist/client/assets/chunk-2J33WTMH-C_SASPYW.js +1 -0
- package/dist/client/assets/chunk-3OPIFGDE-CTcbOBts.js +62 -0
- package/dist/client/assets/chunk-4BX2VUAB-BipHnfY4.js +1 -0
- package/dist/client/assets/chunk-4EGX6M5U-C70lfA2p.js +1 -0
- package/dist/client/assets/chunk-55IACEB6-BzJYLlnc.js +1 -0
- package/dist/client/assets/chunk-5DO6E6H7-PprNUwlI.js +1 -0
- package/dist/client/assets/chunk-5ZQYHXKU-CorupEGf.js +2 -0
- package/dist/client/assets/chunk-727SXJPM-Cqjzb4FZ.js +206 -0
- package/dist/client/assets/chunk-AQP2D5EJ-DcaAmtSe.js +231 -0
- package/dist/client/assets/chunk-BR22UD5L-D8XCYMy9.js +1 -0
- package/dist/client/assets/chunk-BSJP7CBP-CiBjSxwv.js +1 -0
- package/dist/client/assets/chunk-CSCIHK7Q-BTbf6qN3.js +124 -0
- package/dist/client/assets/chunk-FHYWG6QK-CcHPrHH1.js +1 -0
- package/dist/client/assets/chunk-FMBD7UC4-BA8_ZS2e.js +15 -0
- package/dist/client/assets/chunk-KSCS5N6A-ChcT2GOp.js +10 -0
- package/dist/client/assets/chunk-L5ZTLDWV-BjzpE0xm.js +1 -0
- package/dist/client/assets/chunk-LZXEDZCA-Bu0azrf_.js +2 -0
- package/dist/client/assets/chunk-MPE355IW-Bf9yHfDS.js +1 -0
- package/dist/client/assets/chunk-MZUSXYTE-CnUIUKI4.js +1 -0
- package/dist/client/assets/chunk-N66VUXT2-ahAf9GvV.js +1 -0
- package/dist/client/assets/chunk-ND2GUHAM-Co55RNsd.js +1 -0
- package/dist/client/assets/chunk-NNHCCRGN-DHF3V75i.js +159 -0
- package/dist/client/assets/chunk-NZK2D7GU-CtPYeO8_.js +1 -0
- package/dist/client/assets/chunk-O5CBEL6O-CzRKb_Hn.js +70 -0
- package/dist/client/assets/chunk-PUPMXCY4-D0KKIhut.js +1 -0
- package/dist/client/assets/chunk-QZHKN3VN-BCSN705V.js +1 -0
- package/dist/client/assets/chunk-UIBZB4QT-TYsZ_c8u.js +1 -0
- package/dist/client/assets/chunk-WCWK7LTN-Dj8SfnMU.js +1 -0
- package/dist/client/assets/chunk-WU5MYG2G-xPWDnrji.js +1 -0
- package/dist/client/assets/chunk-XPW4576I-CYH9wUok.js +32 -0
- package/dist/client/assets/classDiagram-4FO5ZUOK-7xfBUC5E.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CFM5yYso.js +1 -0
- package/dist/client/assets/{cobol-DRh7-jLi.js → cobol-D37UDAkO.js} +1 -1
- package/dist/client/assets/{coffee-wR_ZAh9a.js → coffee-NCjhDwWZ.js} +1 -1
- package/dist/client/assets/cose-bilkent-S5V4N54A-B8RnQ-yF.js +1 -0
- package/dist/client/assets/{cpp-OD_qyywn.js → cpp-CQUNgUz4.js} +1 -1
- package/dist/client/assets/{crystal-E4ahAddE.js → crystal-DGHLJtZ_.js} +1 -1
- package/dist/client/assets/{css-2NgE_uxz.js → css-xCgEbp_3.js} +1 -1
- package/dist/client/assets/cytoscape.esm-B7MQoI9k.js +321 -0
- package/dist/client/assets/dagre-BM42HDAG-CvmQMXPT.js +4 -0
- package/dist/client/assets/dagre-DAhKikc0.js +1 -0
- package/dist/client/assets/defaultLocale-B_TxGd0k.js +1 -0
- package/dist/client/assets/diagram-2AECGRRQ-wIyWTlXo.js +43 -0
- package/dist/client/assets/diagram-5GNKFQAL-BLMMWtHj.js +10 -0
- package/dist/client/assets/diagram-KO2AKTUF-Duz_hHky.js +3 -0
- package/dist/client/assets/diagram-LMA3HP47-CftQIrJ1.js +24 -0
- package/dist/client/assets/diagram-OG6HWLK6-7odjt2qL.js +24 -0
- package/dist/client/assets/dist-PmPhNea3.js +1 -0
- package/dist/client/assets/{edge-8mbscxxD.js → edge-C6_UFojU.js} +1 -1
- package/dist/client/assets/{elixir-CJv1b3Q6.js → elixir-B12MoaTY.js} +1 -1
- package/dist/client/assets/{elm-DUPzqZ9H.js → elm-C80KxC_R.js} +1 -1
- package/dist/client/assets/erDiagram-TEJ5UH35-DOeyf617.js +85 -0
- package/dist/client/assets/{erb-ssvEF26z.js → erb-DqelkF7l.js} +1 -1
- package/dist/client/assets/{erlang-CtK0kQ6z.js → erlang-cuhwpmsu.js} +1 -1
- package/dist/client/assets/eventmodeling-FCH6USID-hlXE2E34.js +1 -0
- package/dist/client/assets/flowDiagram-I6XJVG4X-BJX7W8r0.js +162 -0
- package/dist/client/assets/{fortran-fixed-form-DBM4e0_k.js → fortran-fixed-form-DWr0EnJn.js} +1 -1
- package/dist/client/assets/{fsharp-CmzzGQLe.js → fsharp-CQ5iYSPA.js} +1 -1
- package/dist/client/assets/ganttDiagram-6RSMTGT7-CFWnCca0.js +292 -0
- package/dist/client/assets/{gdresource-B_wbPqHd.js → gdresource-CN-lsNu5.js} +1 -1
- package/dist/client/assets/{git-commit-1z4D6NzL.js → git-commit-6e79eN7Q.js} +1 -1
- package/dist/client/assets/{git-rebase-DiWIK1Oa.js → git-rebase-7L4r_tbx.js} +1 -1
- package/dist/client/assets/gitGraph-WXDBUCRP-D_3ZhTam.js +1 -0
- package/dist/client/assets/gitGraphDiagram-PVQCEYII-oNErRHPR.js +106 -0
- package/dist/client/assets/{glimmer-js-DrHg6AuA.js → glimmer-js-8OQAbTGs.js} +1 -1
- package/dist/client/assets/{glimmer-ts-wQSGOa8A.js → glimmer-ts-3IyQiCHC.js} +1 -1
- package/dist/client/assets/{glsl-OY27QGY0.js → glsl-Bi_bzGJK.js} +1 -1
- package/dist/client/assets/graphlib-DBdw4opr.js +1 -0
- package/dist/client/assets/{graphql-CSWSqe6f.js → graphql-YcGxsBfT.js} +1 -1
- package/dist/client/assets/{hack-Bi1v624Q.js → hack-C9IpUqi6.js} +1 -1
- package/dist/client/assets/{haml-CX94zV9m.js → haml-YWDwVGeX.js} +1 -1
- package/dist/client/assets/{handlebars-C1j6wnjG.js → handlebars-zyG7ocdI.js} +1 -1
- package/dist/client/assets/{html-BcAjMlB7.js → html-CHYhpzfH.js} +1 -1
- package/dist/client/assets/{html-derivative-DcEpOzdx.js → html-derivative-BhgSILdB.js} +1 -1
- package/dist/client/assets/{http-BBxxSc6S.js → http-BPv6bUpq.js} +1 -1
- package/dist/client/assets/{hurl-CpKRNTz4.js → hurl-CpohSten.js} +1 -1
- package/dist/client/assets/{hxml-DC4KwKt2.js → hxml-nwJci6H5.js} +1 -1
- package/dist/client/assets/index-BIrpcT6-.js +3922 -0
- package/dist/client/assets/index-CMyunQt6.css +1 -0
- package/dist/client/assets/info-J43DQDTF-CAllC7mK.js +1 -0
- package/dist/client/assets/infoDiagram-5YYISTIA-D1xM4RZP.js +2 -0
- package/dist/client/assets/init-Ce66tIvf.js +1 -0
- package/dist/client/assets/ishikawaDiagram-YF4QCWOH-7DsxXa1L.js +70 -0
- package/dist/client/assets/{java-CFUlLvAA.js → java-Bt4sAY2m.js} +1 -1
- package/dist/client/assets/{javascript-C-HnT3sE.js → javascript-DZjI42QZ.js} +1 -1
- package/dist/client/assets/{jinja-CPU8RwNP.js → jinja-D2zTW07t.js} +1 -1
- package/dist/client/assets/{jison-CW0TBQOs.js → jison-Dz-ndIM5.js} +1 -1
- package/dist/client/assets/journeyDiagram-JHISSGLW-C_A1TmoL.js +139 -0
- package/dist/client/assets/{json-qUjlNuEJ.js → json-Ykn4LhOH.js} +1 -1
- package/dist/client/assets/{jsx-KWeo60kf.js → jsx-Ce8SKNSt.js} +1 -1
- package/dist/client/assets/{julia-CnJB8y2e.js → julia-DlfibiGU.js} +1 -1
- package/dist/client/assets/{just-Do22d9PP.js → just-CT2PIeY2.js} +1 -1
- package/dist/client/assets/kanban-definition-UN3LZRKU-ccKLE8Df.js +89 -0
- package/dist/client/assets/katex-eRFNlMh0.js +257 -0
- package/dist/client/assets/{latex-CCPgzvKn.js → latex-Dkfo8_p4.js} +1 -1
- package/dist/client/assets/line-BbqJI7bZ.js +1 -0
- package/dist/client/assets/linear-B7c0dSOq.js +1 -0
- package/dist/client/assets/{liquid-B9btdZoI.js → liquid-dWmg5egV.js} +1 -1
- package/dist/client/assets/{lua-IFRifurW.js → lua-6hNhLpj8.js} +1 -1
- package/dist/client/assets/{marko-CCaVBFq1.js → marko-DTVuQVoJ.js} +1 -1
- package/dist/client/assets/{mdc-BtbnOLUc.js → mdc-LbJVW6cj.js} +1 -1
- package/dist/client/assets/mermaid-parser.core-f-eKVdX9.js +4 -0
- package/dist/client/assets/mermaid.core-ClMOD6O3.js +9 -0
- package/dist/client/assets/mindmap-definition-RKZ34NQL-vaLTR09L.js +96 -0
- package/dist/client/assets/{nextflow-CApkvBGW.js → nextflow-DSfydIxt.js} +1 -1
- package/dist/client/assets/{nginx-BkbFZHVt.js → nginx-BvMTgdwH.js} +1 -1
- package/dist/client/assets/{nim-2uCd5j65.js → nim-BdGYhiTu.js} +1 -1
- package/dist/client/assets/ordinal-5ziJS8mo.js +1 -0
- package/dist/client/assets/packet-YPE3B663-Dy58IAiO.js +1 -0
- package/dist/client/assets/path-g3G46IZB.js +1 -0
- package/dist/client/assets/{perl-C4ixqSNT.js → perl-DamEOAxn.js} +1 -1
- package/dist/client/assets/{php-DJ8WOtcI.js → php-DtubpAAy.js} +1 -1
- package/dist/client/assets/pie-LRSECV5Y-FXFFfdz2.js +1 -0
- package/dist/client/assets/pieDiagram-4H26LBE5-yuTkGKaM.js +30 -0
- package/dist/client/assets/{pug-BOaafhT5.js → pug-CMYtl1BN.js} +1 -1
- package/dist/client/assets/{qml-CURE-1y4.js → qml-D76DCV4U.js} +1 -1
- package/dist/client/assets/quadrantDiagram-W4KKPZXB-Db00tlGp.js +7 -0
- package/dist/client/assets/{r-CPWmgzo3.js → r-gMTLVmYP.js} +1 -1
- package/dist/client/assets/radar-GUYGQ44K-BKTzSQ68.js +1 -0
- package/dist/client/assets/{razor-DH83VP_d.js → razor-1oOg77PO.js} +1 -1
- package/dist/client/assets/{regexp-BXVWi-t_.js → regexp-BJzbycG8.js} +1 -1
- package/dist/client/assets/requirementDiagram-4Y6WPE33-CwCGFaVe.js +84 -0
- package/dist/client/assets/rough.esm-BBrzuQ0N.js +1 -0
- package/dist/client/assets/{rst-Bbxxs6E2.js → rst-Be7RtxcU.js} +1 -1
- package/dist/client/assets/{ruby-C-TuWES4.js → ruby-oyNd3WUZ.js} +1 -1
- package/dist/client/assets/sankeyDiagram-5OEKKPKP-D78nH-eA.js +40 -0
- package/dist/client/assets/{sas-njzNYNOq.js → sas-Bx8dCxcK.js} +1 -1
- package/dist/client/assets/{scss-D2i6rHB8.js → scss-DzZEPh1d.js} +1 -1
- package/dist/client/assets/sequenceDiagram-3UESZ5HK-CEy9mjHg.js +162 -0
- package/dist/client/assets/{shaderlab-DXAhMdPo.js → shaderlab-CbbQwRPF.js} +1 -1
- package/dist/client/assets/{shellscript-D6Bxi40C.js → shellscript-t9s0AoBc.js} +1 -1
- package/dist/client/assets/{shellsession-Defxq-I6.js → shellsession-NczJO6Io.js} +1 -1
- package/dist/client/assets/{soy-D0GKXrtT.js → soy-Dl6InSac.js} +1 -1
- package/dist/client/assets/{sparql-BdcL8cbr.js → sparql-DEoxFJ5d.js} +1 -1
- package/dist/client/assets/{sql-BRW_ADkU.js → sql-DXkZEc28.js} +1 -1
- package/dist/client/assets/src-DCIMHd9M.js +1 -0
- package/dist/client/assets/{stata-w7w59F48.js → stata-DmpUDP7M.js} +1 -1
- package/dist/client/assets/stateDiagram-AJRCARHV-Cz0qtN4R.js +1 -0
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-Dye5cILT.js +1 -0
- package/dist/client/assets/{surrealql-O-lLuqz7.js → surrealql-BAZp4tA6.js} +1 -1
- package/dist/client/assets/{svelte-DN3DR5-t.js → svelte-DXBMAgu7.js} +1 -1
- package/dist/client/assets/{templ-CJ2JFoia.js → templ-CF-yfRM7.js} +1 -1
- package/dist/client/assets/{tex-CpWrf5g9.js → tex-D5tGX-j9.js} +1 -1
- package/dist/client/assets/timeline-definition-PNZ67QCA-B6_u5aFI.js +120 -0
- package/dist/client/assets/treeView-BLDUP644-DtjHwb6x.js +1 -0
- package/dist/client/assets/treemap-LRROVOQU-GqTXzMFU.js +1 -0
- package/dist/client/assets/{ts-tags-CZ6Af6Pe.js → ts-tags-DWMVxoO1.js} +1 -1
- package/dist/client/assets/{tsx-gIUSpRih.js → tsx-C6QVlWvX.js} +1 -1
- package/dist/client/assets/{twig-DwZINhmw.js → twig-DKFN0Lvm.js} +1 -1
- package/dist/client/assets/{typescript-Dj2aMECR.js → typescript-DVfrnfSW.js} +1 -1
- package/dist/client/assets/vennDiagram-CIIHVFJN-C_-TQFos.js +34 -0
- package/dist/client/assets/{vue-B5K0aWrP.js → vue-BCLQ-g1T.js} +1 -1
- package/dist/client/assets/{vue-html-DKGgrypd.js → vue-html-Ddr0JbE-.js} +1 -1
- package/dist/client/assets/{vue-vine-B5iDYTCh.js → vue-vine-CX36RUs5.js} +1 -1
- package/dist/client/assets/wardley-L42UT6IY-pROVAAhW.js +1 -0
- package/dist/client/assets/wardleyDiagram-YWT4CUSO-BJQg7Pb-.js +78 -0
- package/dist/client/assets/{xml-CbTzxfc-.js → xml-FnMA1W8C.js} +1 -1
- package/dist/client/assets/{xsl-Dj-Be6nx.js → xsl-CLduN3zs.js} +1 -1
- package/dist/client/assets/xychartDiagram-2RQKCTM6-1Ux8tle4.js +7 -0
- package/dist/client/assets/{yaml-rTK8uEjh.js → yaml-B6hNfHm7.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/{mcp-CE77qfjx.mjs → mcp-BWeWR4yd.mjs} +2 -1
- package/dist/{mcp-CFeE13n-.mjs → mcp-DNZQvKKF.mjs} +45 -1
- package/dist/{mcp-SGCrfYGo.mjs → mcp-DO4zfNZX.mjs} +45 -1
- package/dist/plan-format-DVnF8xrq.mjs +126 -0
- package/dist/plan-format-f62JWFI-.mjs +117 -0
- package/dist/plan-format-mSDtsPcC.mjs +132 -0
- package/dist/{server-lock-B4crz9-_.mjs → server-lock-D73NKKbn.mjs} +267 -133
- package/dist/{server-lock-DpCrvL-Z.mjs → server-lock-Dj9fG9md.mjs} +246 -122
- package/package.json +26 -14
- package/dist/cli-agent-BLPX3oOP.mjs +0 -443
- package/dist/cli-agent-Cfuy9fLC.mjs +0 -179
- package/dist/cli-agent-CtNivjQW.mjs +0 -179
- package/dist/cli-agent-DZBvZoXZ.mjs +0 -179
- package/dist/cli-agent-DsqbS3n7.mjs +0 -443
- package/dist/cli-agent-Vbs-ePHv.mjs +0 -443
- package/dist/cli-agent-WzJPMH52.mjs +0 -174
- package/dist/cli-agent-uYUoCA4X.mjs +0 -179
- package/dist/client/assets/index-Bwv7BWUp.js +0 -3959
- package/dist/client/assets/index-CoZyJYkw.css +0 -1
- package/dist/mcp-BQmH_By-.mjs +0 -119
- package/dist/mcp-CLgzC8_a.mjs +0 -119
- package/dist/mcp-D9E2HQZ9.mjs +0 -119
- package/dist/mcp-DKlThflu.mjs +0 -253
- package/dist/mcp-LVbLV17O.mjs +0 -119
- package/dist/mcp-nMwTAut3.mjs +0 -119
- package/dist/server-lock-BbiF7u3F.mjs +0 -493
- package/dist/server-lock-Bx9ixiF6.mjs +0 -575
- package/dist/server-lock-CAdqFSfl.mjs +0 -691
- package/dist/server-lock-DIkImokU.mjs +0 -487
- package/dist/server-lock-DbxpfF3j.mjs +0 -575
- package/dist/update-check-DJuFE9w6.mjs +0 -128
- package/dist/update-check-DSC02MWQ.mjs +0 -129
- package/dist/client/assets/{abap-CkQ0tsz-.js → abap-cWYhO34H.js} +0 -0
- package/dist/client/assets/{actionscript-3-DHm0ZfF4.js → actionscript-3-B80ndJsD.js} +0 -0
- package/dist/client/assets/{ada-DK_ua92Z.js → ada-C0C0SoYB.js} +0 -0
- package/dist/client/assets/{andromeeda-D2ccw8v4.js → andromeeda-Ch2kWS7s.js} +0 -0
- package/dist/client/assets/{apache-DXtpFu7o.js → apache-DBwBm4bB.js} +0 -0
- package/dist/client/assets/{apex-DlnRRWpl.js → apex-FcV7UxQi.js} +0 -0
- package/dist/client/assets/{applescript-CShk62ad.js → applescript-hQs8VNpS.js} +0 -0
- package/dist/client/assets/{ara-CWN-FDkm.js → ara-BOadBOZg.js} +0 -0
- package/dist/client/assets/{asciidoc-Bg-PM9Vn.js → asciidoc-BsfqiBck.js} +0 -0
- package/dist/client/assets/{asm-DKOhR24S.js → asm-C2vUqzqz.js} +0 -0
- package/dist/client/assets/{aurora-x-DpaEirL8.js → aurora-x-BHLqzt7j.js} +0 -0
- package/dist/client/assets/{awk-3ibKHffv.js → awk-D4e-eeZT.js} +0 -0
- package/dist/client/assets/{ayu-dark-ursiSH5k.js → ayu-dark-DCotN_ZT.js} +0 -0
- package/dist/client/assets/{ayu-light-DMjlrKmx.js → ayu-light-CKB6o_im.js} +0 -0
- package/dist/client/assets/{ayu-mirage-DZEMb75h.js → ayu-mirage-B38lW-C5.js} +0 -0
- package/dist/client/assets/{ballerina-xx7VNGxs.js → ballerina-BzvFqbha.js} +0 -0
- package/dist/client/assets/{bat-DGYsZ5wR.js → bat-CFyw2ERn.js} +0 -0
- package/dist/client/assets/{beancount-D_ATR1UV.js → beancount-a6Gsu5WX.js} +0 -0
- package/dist/client/assets/{berry-BqYMORfH.js → berry-C2jyz4Ah.js} +0 -0
- package/dist/client/assets/{bibtex-CQTBDajW.js → bibtex-Dyet-B83.js} +0 -0
- package/dist/client/assets/{bicep-CfNtxPrK.js → bicep-CghvUIvy.js} +0 -0
- package/dist/client/assets/{bird2-C0dUPe3I.js → bird2-nHigvs-R.js} +0 -0
- package/dist/client/assets/{c3-BUwZ5e3k.js → c3-9ZrcmAmr.js} +0 -0
- package/dist/client/assets/{cadence-C3OKDYrr.js → cadence-BPDgYNWy.js} +0 -0
- package/dist/client/assets/{catppuccin-frappe-CMnRXVZP.js → catppuccin-frappe-BY_2ofjk.js} +0 -0
- package/dist/client/assets/{catppuccin-latte-CqhXSjCC.js → catppuccin-latte-D6GXPBmA.js} +0 -0
- package/dist/client/assets/{catppuccin-macchiato-B6kneE0C.js → catppuccin-macchiato-BuW8_cyo.js} +0 -0
- package/dist/client/assets/{catppuccin-mocha-CP8YZpvj.js → catppuccin-mocha-znex9DPe.js} +0 -0
- package/dist/client/assets/{clarity-Crxe8gSr.js → clarity-Cmao5KSK.js} +0 -0
- package/dist/client/assets/{clojure-BuzOUPMr.js → clojure-D2dPuTkk.js} +0 -0
- package/dist/client/assets/{cmake-CCpZLdLI.js → cmake-DaqQuj4A.js} +0 -0
- package/dist/client/assets/{codeowners-Bo1VYpHz.js → codeowners-B748jmvc.js} +0 -0
- package/dist/client/assets/{codeql-Db01hzHE.js → codeql-CXb_8gHR.js} +0 -0
- package/dist/client/assets/{common-lisp-CMlJIc6Y.js → common-lisp-UZn9nc_5.js} +0 -0
- package/dist/client/assets/{coq-BlzBYp3f.js → coq-DtO6yBIf.js} +0 -0
- package/dist/client/assets/{csharp-kfNshAa7.js → csharp-C3YlYcLV.js} +0 -0
- package/dist/client/assets/{csv-Dr8ri5Nd.js → csv-BBwiVr0X.js} +0 -0
- package/dist/client/assets/{cue-jXfhyOwY.js → cue-ScBFXY5f.js} +0 -0
- package/dist/client/assets/{cypher-CayLeiaR.js → cypher-CGStaC1X.js} +0 -0
- package/dist/client/assets/{d-BMZQ0mAy.js → d-CuTCIvnX.js} +0 -0
- package/dist/client/assets/{dark-plus-B__q47Nr.js → dark-plus-BvePH-r3.js} +0 -0
- package/dist/client/assets/{dart-gMOEMyuz.js → dart-CqEodbm2.js} +0 -0
- package/dist/client/assets/{dax-C3t5LadU.js → dax-UdE5S0Dh.js} +0 -0
- package/dist/client/assets/{desktop-DmhXLwLR.js → desktop-DfmsfHJA.js} +0 -0
- package/dist/client/assets/{diff-togOXQX6.js → diff-CW0RWGd9.js} +0 -0
- package/dist/client/assets/{docker--6N01olR.js → docker-B1qtW4ha.js} +0 -0
- package/dist/client/assets/{dotenv-Bq930Yx8.js → dotenv-BUzOh1k8.js} +0 -0
- package/dist/client/assets/{dracula-CBkSghcw.js → dracula-kJQjC_Gy.js} +0 -0
- package/dist/client/assets/{dracula-soft-CCSYeoxL.js → dracula-soft-B3XhEjCl.js} +0 -0
- package/dist/client/assets/{dream-maker-BiMf3DHl.js → dream-maker-CBvk18nW.js} +0 -0
- package/dist/client/assets/{emacs-lisp-Dhht7he2.js → emacs-lisp-DvSgLhDc.js} +0 -0
- package/dist/client/assets/{everforest-dark-NqSz4oHS.js → everforest-dark-u0zLn75q.js} +0 -0
- package/dist/client/assets/{everforest-light-a3Yzs_lT.js → everforest-light-D3syIoAR.js} +0 -0
- package/dist/client/assets/{fennel-BExc9TZf.js → fennel-C-1kWlGf.js} +0 -0
- package/dist/client/assets/{fish-C2p-AJmZ.js → fish-CCpdtwqS.js} +0 -0
- package/dist/client/assets/{fluent-CeYzs8Qy.js → fluent-BLg032oD.js} +0 -0
- package/dist/client/assets/{fortran-free-form-BIQEK2Jw.js → fortran-free-form-Br4jRtSc.js} +0 -0
- package/dist/client/assets/{gdscript-B5JQPh_-.js → gdscript-hSAZM1eh.js} +0 -0
- package/dist/client/assets/{gdshader-vVjJ_Qr8.js → gdshader-D4XNAEs9.js} +0 -0
- package/dist/client/assets/{genie-DGl5rqC8.js → genie-DmN-ICAN.js} +0 -0
- package/dist/client/assets/{gherkin-CY_VLUnD.js → gherkin-cuHHmRcX.js} +0 -0
- package/dist/client/assets/{github-dark-ClO4AStc.js → github-dark-CEBLh0--.js} +0 -0
- package/dist/client/assets/{github-dark-default-CM0dPco8.js → github-dark-default-Dq0Z4Xai.js} +0 -0
- package/dist/client/assets/{github-dark-dimmed-Cb6xxpXY.js → github-dark-dimmed-D90YmS4w.js} +0 -0
- package/dist/client/assets/{github-dark-high-contrast-BpYtx2-M.js → github-dark-high-contrast-B6BWv1iC.js} +0 -0
- package/dist/client/assets/{github-light-default-BmnCWL6x.js → github-light-default-DsPWmj4v.js} +0 -0
- package/dist/client/assets/{github-light-high-contrast-rpagNF5O.js → github-light-high-contrast-C7aLb3kp.js} +0 -0
- package/dist/client/assets/{github-light-CeOVFgf_.js → github-light-lXSVSq5T.js} +0 -0
- package/dist/client/assets/{gleam-BarIG9kQ.js → gleam-D8VhqPDN.js} +0 -0
- package/dist/client/assets/{gn-DhYsTPYc.js → gn-BjGRlX27.js} +0 -0
- package/dist/client/assets/{gnuplot-CucLlTBc.js → gnuplot-BZCXuE4q.js} +0 -0
- package/dist/client/assets/{go-toi-uWvg.js → go-BJpWXZEs.js} +0 -0
- package/dist/client/assets/{groovy-Ds4dis_k.js → groovy-D9w3Dn-z.js} +0 -0
- package/dist/client/assets/{gruvbox-dark-hard-aPiW8pQh.js → gruvbox-dark-hard-_deksD0U.js} +0 -0
- package/dist/client/assets/{gruvbox-dark-medium-2HJCvzsS.js → gruvbox-dark-medium-CT31284j.js} +0 -0
- package/dist/client/assets/{gruvbox-dark-soft-Da97ODX9.js → gruvbox-dark-soft-BZuEUCbj.js} +0 -0
- package/dist/client/assets/{gruvbox-light-hard-BXlEipFe.js → gruvbox-light-hard-dxv4n_ZS.js} +0 -0
- package/dist/client/assets/{gruvbox-light-medium-Cun-GjGk.js → gruvbox-light-medium-BsW_fVfR.js} +0 -0
- package/dist/client/assets/{gruvbox-light-soft-Bd3qiiSw.js → gruvbox-light-soft-BiGy99gD.js} +0 -0
- package/dist/client/assets/{haskell-B_jvz5Po.js → haskell-DqDdKEgk.js} +0 -0
- package/dist/client/assets/{haxe-BRbuo5UO.js → haxe-DMg0jS3a.js} +0 -0
- package/dist/client/assets/{hcl-BzNUCtsK.js → hcl-SZIZUK_X.js} +0 -0
- package/dist/client/assets/{hjson-BxVo3sS2.js → hjson-DF1VspiE.js} +0 -0
- package/dist/client/assets/{hlsl-C8Wes1nf.js → hlsl-DPe9L0Dt.js} +0 -0
- package/dist/client/assets/{horizon-D54PjLAY.js → horizon-Ngud75Kn.js} +0 -0
- package/dist/client/assets/{horizon-bright-D9RccdIr.js → horizon-bright-Cnljd0XD.js} +0 -0
- package/dist/client/assets/{houston-CMu1N_4K.js → houston-BenZxlMr.js} +0 -0
- package/dist/client/assets/{hy-dMrJKKU_.js → hy-B0f-B1mH.js} +0 -0
- package/dist/client/assets/{imba-DG_oO8tg.js → imba-Bq3j1cW5.js} +0 -0
- package/dist/client/assets/{ini-geHw79Aj.js → ini-BayloP2U.js} +0 -0
- package/dist/client/assets/{json5-CDUsNqz6.js → json5-CRSfdIrY.js} +0 -0
- package/dist/client/assets/{jsonc-D48xcwyD.js → jsonc-y4g9DQPx.js} +0 -0
- package/dist/client/assets/{jsonl-cpIYDXEe.js → jsonl-D2paVn9r.js} +0 -0
- package/dist/client/assets/{jsonnet-Da1lhszN.js → jsonnet-CLH27mtz.js} +0 -0
- package/dist/client/assets/{jssm-B8BLrEGL.js → jssm-CPPYaqX-.js} +0 -0
- package/dist/client/assets/{kanagawa-dragon-2Sk8Rx83.js → kanagawa-dragon-Bt5mhLu1.js} +0 -0
- package/dist/client/assets/{kanagawa-lotus-CQVSWfJp.js → kanagawa-lotus-FGA3pRJk.js} +0 -0
- package/dist/client/assets/{kanagawa-wave-BKWNioLX.js → kanagawa-wave-DnLVZPAD.js} +0 -0
- package/dist/client/assets/{kdl-B-2tSRmp.js → kdl-D1BQjjnw.js} +0 -0
- package/dist/client/assets/{kotlin-DepsEzh3.js → kotlin-ndCaDnf0.js} +0 -0
- package/dist/client/assets/{kusto-BcCtXIb8.js → kusto-D-4nbkD3.js} +0 -0
- package/dist/client/assets/{laserwave-BUqkO46F.js → laserwave-D2qAZkaG.js} +0 -0
- package/dist/client/assets/{lean-CNO9ffpX.js → lean-YmtAsB0p.js} +0 -0
- package/dist/client/assets/{less-Dj0T9pWC.js → less-DyHub3ow.js} +0 -0
- package/dist/client/assets/{light-plus-C9Hnuc1T.js → light-plus-CP13QUvm.js} +0 -0
- package/dist/client/assets/{llvm-DbV9b66l.js → llvm-DCcqrY0D.js} +0 -0
- package/dist/client/assets/{log-BMblmPyH.js → log-DWAAMNbe.js} +0 -0
- package/dist/client/assets/{logo-B78qMxws.js → logo-ClQMGkNL.js} +0 -0
- package/dist/client/assets/{luau-BUd8xsdE.js → luau-CmcXFvLt.js} +0 -0
- package/dist/client/assets/{make-Ev-6cJrd.js → make-DcfJyUzm.js} +0 -0
- package/dist/client/assets/{markdown-CS4LI6sN.js → markdown-DXxotAxn.js} +0 -0
- package/dist/client/assets/{material-theme-5rA1zn0D.js → material-theme-JFoPTBSr.js} +0 -0
- package/dist/client/assets/{material-theme-darker-DGOEiL65.js → material-theme-darker-BHaqZ19v.js} +0 -0
- package/dist/client/assets/{material-theme-lighter-CULfFRX0.js → material-theme-lighter-CGnnS2bs.js} +0 -0
- package/dist/client/assets/{material-theme-ocean-LQZ9CleP.js → material-theme-ocean-Drhewjqf.js} +0 -0
- package/dist/client/assets/{material-theme-palenight-Di_f5oks.js → material-theme-palenight-DbUypmpb.js} +0 -0
- package/dist/client/assets/{matlab-C0qEtAx9.js → matlab-BlfbTznR.js} +0 -0
- package/dist/client/assets/{mdx-CzvnbLXb.js → mdx-H8fyPQd8.js} +0 -0
- package/dist/client/assets/{mermaid-BPquZaKt.js → mermaid-CWAV2dmV.js} +0 -0
- package/dist/client/assets/{min-dark-rkuIbtJV.js → min-dark-BEelvXUB.js} +0 -0
- package/dist/client/assets/{min-light-Dj_HOGsr.js → min-light-CTPBOACR.js} +0 -0
- package/dist/client/assets/{mipsasm-k5DQoS6j.js → mipsasm-BWYFAm2s.js} +0 -0
- package/dist/client/assets/{mojo-sTTDuNnR.js → mojo-DZcPJEIN.js} +0 -0
- package/dist/client/assets/{monokai-D5p-u2ij.js → monokai-DQlZXbkg.js} +0 -0
- package/dist/client/assets/{moonbit-j5ChFtBC.js → moonbit-6eslNlJL.js} +0 -0
- package/dist/client/assets/{move-Dj0Gmn6R.js → move-DxFc9-QU.js} +0 -0
- package/dist/client/assets/{narrat-DJgMz2oW.js → narrat-gv38dJOT.js} +0 -0
- package/dist/client/assets/{nextflow-groovy-eDLuZ_oi.js → nextflow-groovy-DV4H3hok.js} +0 -0
- package/dist/client/assets/{night-owl-CEdtPl3A.js → night-owl-BLcrYhaC.js} +0 -0
- package/dist/client/assets/{night-owl-light-GdSldewm.js → night-owl-light-BG-tBJOz.js} +0 -0
- package/dist/client/assets/{nix-CxIPS3pb.js → nix-NlOz3HGM.js} +0 -0
- package/dist/client/assets/{nord-3WFAz5H9.js → nord-Dm2F5_QB.js} +0 -0
- package/dist/client/assets/{nushell-GDfBmoBU.js → nushell-D86Z8aFF.js} +0 -0
- package/dist/client/assets/{objective-c-MFQ_MGUa.js → objective-c-iuJvUjCv.js} +0 -0
- package/dist/client/assets/{objective-cpp-Y83LcBE7.js → objective-cpp-C62JvfMT.js} +0 -0
- package/dist/client/assets/{ocaml-FxYfaJxu.js → ocaml-Rbryo9lg.js} +0 -0
- package/dist/client/assets/{odin-CprihY3z.js → odin-CfaOVNP_.js} +0 -0
- package/dist/client/assets/{one-dark-pro-BB6mpmmA.js → one-dark-pro-DC9SHdX0.js} +0 -0
- package/dist/client/assets/{one-light-BYLoxNtg.js → one-light-Doo39p0H.js} +0 -0
- package/dist/client/assets/{openscad-Bc1FbpOi.js → openscad-DCRhgheK.js} +0 -0
- package/dist/client/assets/{pascal-Bb4d8cUL.js → pascal-CTesTHtV.js} +0 -0
- package/dist/client/assets/{pierre-dark-cF19s-RM.js → pierre-dark-Gtc9M_gS.js} +0 -0
- package/dist/client/assets/{pierre-light-BdpX8OpD.js → pierre-light-EDxMHmhf.js} +0 -0
- package/dist/client/assets/{pkl-tM25Sq0w.js → pkl-BjUMjQkt.js} +0 -0
- package/dist/client/assets/{plastic-D3k2Xp_5.js → plastic-B3CcSpon.js} +0 -0
- package/dist/client/assets/{plsql-CLEfFhSj.js → plsql-BgKEZSSo.js} +0 -0
- package/dist/client/assets/{po-CaAzdrrh.js → po-C5s_CVt8.js} +0 -0
- package/dist/client/assets/{poimandres-bPTvT4Da.js → poimandres-BsK70ma5.js} +0 -0
- package/dist/client/assets/{polar-TG7aTGdK.js → polar-y4hX8qM0.js} +0 -0
- package/dist/client/assets/{postcss-8kqfa9f0.js → postcss-BHCm7Qae.js} +0 -0
- package/dist/client/assets/{powerquery-CtSu1Nfd.js → powerquery-C2vMt8aZ.js} +0 -0
- package/dist/client/assets/{powershell-87lLBHMy.js → powershell-DEcjmg1c.js} +0 -0
- package/dist/client/assets/{prisma-Dnf694DZ.js → prisma-Ba-Tcxy5.js} +0 -0
- package/dist/client/assets/{prolog-C0XbHTWa.js → prolog-B4o261Jv.js} +0 -0
- package/dist/client/assets/{proto-BZP-HLIb.js → proto-o3IZKiMR.js} +0 -0
- package/dist/client/assets/{puppet-CJYWgYC5.js → puppet-BC0dqZ31.js} +0 -0
- package/dist/client/assets/{purescript-B95Q6BAd.js → purescript-CLDw1y5G.js} +0 -0
- package/dist/client/assets/{python-CqTCsi7P.js → python-D1NFioGW.js} +0 -0
- package/dist/client/assets/{qmldir-DlIL4hls.js → qmldir-B7i9e9Vn.js} +0 -0
- package/dist/client/assets/{qss-BW72E0q_.js → qss-DIe6oKX8.js} +0 -0
- package/dist/client/assets/{racket-CCAimEsC.js → racket-CAOC_yyk.js} +0 -0
- package/dist/client/assets/{raku-mSuqElkM.js → raku-Ccua3vW6.js} +0 -0
- package/dist/client/assets/{red-C-DA4yBI.js → red-DtDH206x.js} +0 -0
- package/dist/client/assets/{reg-CGwMBJ2c.js → reg-CAYZT9kE.js} +0 -0
- package/dist/client/assets/{rel-JwrbYgX4.js → rel-cvB6F5nO.js} +0 -0
- package/dist/client/assets/{riscv-CoYyE75b.js → riscv-SYGtE4EN.js} +0 -0
- package/dist/client/assets/{ron-C5wrhnmJ.js → ron-CRt869SB.js} +0 -0
- package/dist/client/assets/{rose-pine-DlrMPYYd.js → rose-pine-CjBfSJ5b.js} +0 -0
- package/dist/client/assets/{rose-pine-dawn-DBHFtZD2.js → rose-pine-dawn-C0xwy7iJ.js} +0 -0
- package/dist/client/assets/{rose-pine-moon-BBfrpe5q.js → rose-pine-moon-BSNy9Ty0.js} +0 -0
- package/dist/client/assets/{rosmsg-DlimTR9t.js → rosmsg-BwrfJ66Z.js} +0 -0
- package/dist/client/assets/{rust-Cxnkxx3h.js → rust-DCKTTPxN.js} +0 -0
- package/dist/client/assets/{sass-DEyqUIpU.js → sass-CorcwySt.js} +0 -0
- package/dist/client/assets/{scala-i3RN3yAN.js → scala-DlI-OmYj.js} +0 -0
- package/dist/client/assets/{scheme-BcKdjYkO.js → scheme-CcNEGkZH.js} +0 -0
- package/dist/client/assets/{sdbl-Be_XWc3n.js → sdbl-AL_m-RO_.js} +0 -0
- package/dist/client/assets/{slack-dark-3PDtm74m.js → slack-dark-rMhrfPm6.js} +0 -0
- package/dist/client/assets/{slack-ochin-CwiuFRJD.js → slack-ochin-9w8X74hU.js} +0 -0
- package/dist/client/assets/{smalltalk-BdBlL6ks.js → smalltalk-Y2ogrfbk.js} +0 -0
- package/dist/client/assets/{snazzy-light-Dyqc8Is2.js → snazzy-light-DHr9ygpP.js} +0 -0
- package/dist/client/assets/{solarized-dark-DZiTscIX.js → solarized-dark-UPcKev9Q.js} +0 -0
- package/dist/client/assets/{solarized-light-DBcfxrfG.js → solarized-light-DUsjROvl.js} +0 -0
- package/dist/client/assets/{solidity-DH-yUSWc.js → solidity-Bfbm9QZQ.js} +0 -0
- package/dist/client/assets/{splunk-CIjc4kxs.js → splunk-6DJA2XFa.js} +0 -0
- package/dist/client/assets/{ssh-config-BKVd4drG.js → ssh-config-CbQtdF-u.js} +0 -0
- package/dist/client/assets/{stylus-tqAsmugv.js → stylus-B_iq45Sj.js} +0 -0
- package/dist/client/assets/{swift-CdDBQ3_Z.js → swift-C7KIgN-p.js} +0 -0
- package/dist/client/assets/{synthwave-84-CbbRs73K.js → synthwave-84-lf_Wt0K_.js} +0 -0
- package/dist/client/assets/{system-verilog-CBqEY-9v.js → system-verilog-C3G9wERd.js} +0 -0
- package/dist/client/assets/{systemd-khRP5zwK.js → systemd-CwxGrojj.js} +0 -0
- package/dist/client/assets/{talonscript-D_lneH-6.js → talonscript-DqnSo1EO.js} +0 -0
- package/dist/client/assets/{tasl-CLymawGe.js → tasl-T8ethp86.js} +0 -0
- package/dist/client/assets/{tcl-BRY1S87U.js → tcl-Ccl366o0.js} +0 -0
- package/dist/client/assets/{terraform-BqohMo2f.js → terraform-BBf6ZI_0.js} +0 -0
- package/dist/client/assets/{tokyo-night-BWUONxad.js → tokyo-night-BF5ata25.js} +0 -0
- package/dist/client/assets/{toml-C4c85Lwg.js → toml-C5Z_BR4r.js} +0 -0
- package/dist/client/assets/{tsv-DsZq9HBQ.js → tsv-rX8sUJs7.js} +0 -0
- package/dist/client/assets/{turtle-Dpr8zLlw.js → turtle-BM-MG8WY.js} +0 -0
- package/dist/client/assets/{typespec-DcqgATB-.js → typespec-C5gKydvR.js} +0 -0
- package/dist/client/assets/{typst-CeVxmuPg.js → typst--_5VchrY.js} +0 -0
- package/dist/client/assets/{v-C2Qsh2-1.js → v-C6PwpmTC.js} +0 -0
- package/dist/client/assets/{vala-CvZ3yL7c.js → vala-4pTaceSj.js} +0 -0
- package/dist/client/assets/{vb-B_p4qDw4.js → vb-DhoR5A6S.js} +0 -0
- package/dist/client/assets/{verilog-D8MGjxD7.js → verilog-B9f_1lPn.js} +0 -0
- package/dist/client/assets/{vesper-DossXiE1.js → vesper-CmBi_iCT.js} +0 -0
- package/dist/client/assets/{vhdl-MLyYh_Gz.js → vhdl-Cy4RAmOe.js} +0 -0
- package/dist/client/assets/{viml-BuYIArcz.js → viml-CFQW-CcD.js} +0 -0
- package/dist/client/assets/{vitesse-black-C3kc1227.js → vitesse-black-CE8RoBJP.js} +0 -0
- package/dist/client/assets/{vitesse-dark-kWOu5V36.js → vitesse-dark-BpF142p_.js} +0 -0
- package/dist/client/assets/{vitesse-light-DMtiL8bK.js → vitesse-light-CMwxPBrg.js} +0 -0
- package/dist/client/assets/{vyper-CNqG09-_.js → vyper-BW5zj9bE.js} +0 -0
- package/dist/client/assets/{wasm-BsQDV7Y0.js → wasm-BigxSLnm.js} +0 -0
- package/dist/client/assets/{wasm-DFVlQlgd.js → wasm-CSccDuAq.js} +0 -0
- package/dist/client/assets/{wenyan-BmOQge13.js → wenyan-BZzM1SQT.js} +0 -0
- package/dist/client/assets/{wgsl-CgWrmvIg.js → wgsl-xBPHbLlq.js} +0 -0
- package/dist/client/assets/{wikitext-DkwckXCk.js → wikitext-BXJWUNJK.js} +0 -0
- package/dist/client/assets/{wit-CtyVFGe7.js → wit-2GnUs67P.js} +0 -0
- package/dist/client/assets/{wolfram-CXE4FrKz.js → wolfram-DIFDmw-g.js} +0 -0
- package/dist/client/assets/{zenscript-DH15wJt0.js → zenscript-DQaUUjbx.js} +0 -0
- package/dist/client/assets/{zig-CqXN9brD.js → zig-BDepRvBi.js} +0 -0
- package/dist/{update-check-KL-2sGxE.mjs → update-check-DAPFCqpF.mjs} +1 -1
|
@@ -1,443 +0,0 @@
|
|
|
1
|
-
import { c as formatComments, n as readServerLock, o as formatPlanReview, t as isLockAlive } from "./server-lock-CAdqFSfl.mjs";
|
|
2
|
-
import { parseArgs } from "node:util";
|
|
3
|
-
import { readFile } from "node:fs/promises";
|
|
4
|
-
//#region src/cli-agent.ts
|
|
5
|
-
/**
|
|
6
|
-
* Agent-facing `diffing` subcommands. These make the user→agent handoff
|
|
7
|
-
* port-agnostic: each resolves the running server via the per-repo lockfile
|
|
8
|
-
* (`server.json`) so any agent with a shell — or a human — can drive the loop
|
|
9
|
-
* without being told a port.
|
|
10
|
-
*
|
|
11
|
-
* diffing await-review block until the human clicks "Send to agent"
|
|
12
|
-
* diffing reply <id> post an agent reply to a comment
|
|
13
|
-
* diffing resolve <id> mark a comment resolved
|
|
14
|
-
* diffing comments dump the current comments (XML or JSON)
|
|
15
|
-
*/
|
|
16
|
-
const EXIT_OK = 0;
|
|
17
|
-
const EXIT_AWAIT_TIMEOUT = 2;
|
|
18
|
-
const EXIT_NO_SERVER = 3;
|
|
19
|
-
const EXIT_NOT_FOUND = 4;
|
|
20
|
-
const EXIT_USAGE = 5;
|
|
21
|
-
/** Resolve the running server's base URL from the lockfile, or exit cleanly. */
|
|
22
|
-
function baseUrl() {
|
|
23
|
-
const lock = readServerLock();
|
|
24
|
-
if (!lock || !isLockAlive(lock)) {
|
|
25
|
-
console.error("No diffing server running for this repo. Start one with `diffing`.");
|
|
26
|
-
process.exit(EXIT_NO_SERVER);
|
|
27
|
-
}
|
|
28
|
-
return `http://${lock.host === "0.0.0.0" || lock.host === "::" ? "127.0.0.1" : lock.host}:${lock.port}`;
|
|
29
|
-
}
|
|
30
|
-
async function readStdin() {
|
|
31
|
-
const chunks = [];
|
|
32
|
-
for await (const chunk of process.stdin) chunks.push(chunk);
|
|
33
|
-
return Buffer.concat(chunks).toString("utf-8");
|
|
34
|
-
}
|
|
35
|
-
async function awaitReview(args) {
|
|
36
|
-
const { values } = parseArgs({
|
|
37
|
-
args,
|
|
38
|
-
options: {
|
|
39
|
-
timeout: {
|
|
40
|
-
type: "string",
|
|
41
|
-
short: "t"
|
|
42
|
-
},
|
|
43
|
-
since: { type: "string" }
|
|
44
|
-
},
|
|
45
|
-
allowPositionals: false
|
|
46
|
-
});
|
|
47
|
-
const totalBudgetMs = (values.timeout ? Number(values.timeout) : 570) * 1e3;
|
|
48
|
-
const base = baseUrl();
|
|
49
|
-
let sinceRound = 0;
|
|
50
|
-
try {
|
|
51
|
-
sinceRound = (await fetch(`${base}/api/review/status`).then((r) => r.json())).round ?? 0;
|
|
52
|
-
} catch {}
|
|
53
|
-
const deadline = Date.now() + totalBudgetMs;
|
|
54
|
-
while (Date.now() < deadline) {
|
|
55
|
-
let res;
|
|
56
|
-
try {
|
|
57
|
-
res = await fetch(`${base}/api/review/await?timeoutMs=25000&sinceRound=${sinceRound}`, { signal: AbortSignal.timeout(3e4) });
|
|
58
|
-
} catch (err) {
|
|
59
|
-
if (err?.name === "TimeoutError") continue;
|
|
60
|
-
console.error(`Failed to reach diffing server: ${err?.message ?? err}`);
|
|
61
|
-
return EXIT_NO_SERVER;
|
|
62
|
-
}
|
|
63
|
-
const result = await res.json();
|
|
64
|
-
if (result.status === "released") {
|
|
65
|
-
process.stdout.write(result.payload.commentXml + "\n");
|
|
66
|
-
console.error(`DIFFING_REVIEW_ROUND=${result.payload.round}`);
|
|
67
|
-
return EXIT_OK;
|
|
68
|
-
}
|
|
69
|
-
sinceRound = result.round ?? sinceRound;
|
|
70
|
-
}
|
|
71
|
-
console.error("DIFFING_AWAIT_TIMEOUT");
|
|
72
|
-
console.error("No review sent within the timeout. Run `diffing await-review` again to keep waiting.");
|
|
73
|
-
return EXIT_AWAIT_TIMEOUT;
|
|
74
|
-
}
|
|
75
|
-
async function reply(args) {
|
|
76
|
-
const { values, positionals } = parseArgs({
|
|
77
|
-
args,
|
|
78
|
-
options: {
|
|
79
|
-
body: {
|
|
80
|
-
type: "string",
|
|
81
|
-
short: "b"
|
|
82
|
-
},
|
|
83
|
-
model: {
|
|
84
|
-
type: "string",
|
|
85
|
-
short: "m"
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
allowPositionals: true
|
|
89
|
-
});
|
|
90
|
-
const commentId = positionals[0];
|
|
91
|
-
if (!commentId) {
|
|
92
|
-
console.error("Usage: diffing reply <commentId> --body <text> [--model <name>]");
|
|
93
|
-
return EXIT_USAGE;
|
|
94
|
-
}
|
|
95
|
-
let body = values.body;
|
|
96
|
-
if (body === "-" || body === void 0) body = (await readStdin()).trim();
|
|
97
|
-
if (!body) {
|
|
98
|
-
console.error("A reply body is required (--body <text> or pipe via stdin).");
|
|
99
|
-
return EXIT_USAGE;
|
|
100
|
-
}
|
|
101
|
-
const res = await fetch(`${baseUrl()}/api/comments/${commentId}/replies`, {
|
|
102
|
-
method: "POST",
|
|
103
|
-
headers: { "Content-Type": "application/json" },
|
|
104
|
-
body: JSON.stringify({
|
|
105
|
-
body,
|
|
106
|
-
role: "agent",
|
|
107
|
-
model: values.model
|
|
108
|
-
})
|
|
109
|
-
});
|
|
110
|
-
if (res.status === 404) {
|
|
111
|
-
console.error(`Comment ${commentId} not found.`);
|
|
112
|
-
return EXIT_NOT_FOUND;
|
|
113
|
-
}
|
|
114
|
-
if (!res.ok) {
|
|
115
|
-
console.error(`Failed to reply: HTTP ${res.status}`);
|
|
116
|
-
return 1;
|
|
117
|
-
}
|
|
118
|
-
console.error(`Replied to ${commentId}.`);
|
|
119
|
-
return EXIT_OK;
|
|
120
|
-
}
|
|
121
|
-
async function resolve(args) {
|
|
122
|
-
const { positionals } = parseArgs({
|
|
123
|
-
args,
|
|
124
|
-
allowPositionals: true,
|
|
125
|
-
options: {}
|
|
126
|
-
});
|
|
127
|
-
const commentId = positionals[0];
|
|
128
|
-
if (!commentId) {
|
|
129
|
-
console.error("Usage: diffing resolve <commentId>");
|
|
130
|
-
return EXIT_USAGE;
|
|
131
|
-
}
|
|
132
|
-
const res = await fetch(`${baseUrl()}/api/comments/${commentId}`, {
|
|
133
|
-
method: "PUT",
|
|
134
|
-
headers: { "Content-Type": "application/json" },
|
|
135
|
-
body: JSON.stringify({ status: "resolved" })
|
|
136
|
-
});
|
|
137
|
-
if (res.status === 404) {
|
|
138
|
-
console.error(`Comment ${commentId} not found.`);
|
|
139
|
-
return EXIT_NOT_FOUND;
|
|
140
|
-
}
|
|
141
|
-
if (!res.ok) {
|
|
142
|
-
console.error(`Failed to resolve: HTTP ${res.status}`);
|
|
143
|
-
return 1;
|
|
144
|
-
}
|
|
145
|
-
console.error(`Resolved ${commentId}.`);
|
|
146
|
-
return EXIT_OK;
|
|
147
|
-
}
|
|
148
|
-
async function url() {
|
|
149
|
-
process.stdout.write(baseUrl() + "\n");
|
|
150
|
-
return EXIT_OK;
|
|
151
|
-
}
|
|
152
|
-
async function comments(args) {
|
|
153
|
-
const { values } = parseArgs({
|
|
154
|
-
args,
|
|
155
|
-
options: {
|
|
156
|
-
open: { type: "boolean" },
|
|
157
|
-
json: { type: "boolean" }
|
|
158
|
-
},
|
|
159
|
-
allowPositionals: false
|
|
160
|
-
});
|
|
161
|
-
const all = await fetch(`${baseUrl()}/api/comments`).then((r) => r.json());
|
|
162
|
-
const selected = values.open ? all.filter((c) => c.status === "open") : all;
|
|
163
|
-
if (values.json) process.stdout.write(JSON.stringify(selected, null, 2) + "\n");
|
|
164
|
-
else process.stdout.write(formatComments(selected) + "\n");
|
|
165
|
-
return EXIT_OK;
|
|
166
|
-
}
|
|
167
|
-
/** Derive a human title from a plan's first heading or non-empty line. */
|
|
168
|
-
function deriveTitle(body) {
|
|
169
|
-
for (const raw of body.split("\n")) {
|
|
170
|
-
const line = raw.trim();
|
|
171
|
-
if (!line) continue;
|
|
172
|
-
const heading = /^#{1,6}\s+(.*)$/.exec(line);
|
|
173
|
-
return (heading ? heading[1] : line).slice(0, 120);
|
|
174
|
-
}
|
|
175
|
-
return "Untitled plan";
|
|
176
|
-
}
|
|
177
|
-
/** Long-poll the plan-review handoff until a decision arrives or time runs out. */
|
|
178
|
-
async function pollPlanDecision(base, totalBudgetMs, seedSince) {
|
|
179
|
-
let sinceRound = seedSince ?? 0;
|
|
180
|
-
if (seedSince === void 0) try {
|
|
181
|
-
sinceRound = (await fetch(`${base}/api/plan-review/status`).then((r) => r.json())).round ?? 0;
|
|
182
|
-
} catch {}
|
|
183
|
-
const deadline = Date.now() + totalBudgetMs;
|
|
184
|
-
while (Date.now() < deadline) {
|
|
185
|
-
let res;
|
|
186
|
-
try {
|
|
187
|
-
res = await fetch(`${base}/api/plan-review/await?timeoutMs=25000&sinceRound=${sinceRound}`, { signal: AbortSignal.timeout(3e4) });
|
|
188
|
-
} catch (err) {
|
|
189
|
-
if (err?.name === "TimeoutError") continue;
|
|
190
|
-
console.error(`Failed to reach diffing server: ${err?.message ?? err}`);
|
|
191
|
-
return EXIT_NO_SERVER;
|
|
192
|
-
}
|
|
193
|
-
const result = await res.json();
|
|
194
|
-
if (result.status === "released") {
|
|
195
|
-
process.stdout.write(result.payload.reviewXml + "\n");
|
|
196
|
-
console.error(`DIFFING_PLAN_DECISION=${result.payload.decision}`);
|
|
197
|
-
console.error(`DIFFING_PLAN_ROUND=${result.payload.round}`);
|
|
198
|
-
return EXIT_OK;
|
|
199
|
-
}
|
|
200
|
-
sinceRound = result.round ?? sinceRound;
|
|
201
|
-
}
|
|
202
|
-
console.error("DIFFING_PLAN_AWAIT_TIMEOUT");
|
|
203
|
-
console.error("No plan decision within the timeout. Run `diffing plan await` again to keep waiting.");
|
|
204
|
-
return EXIT_AWAIT_TIMEOUT;
|
|
205
|
-
}
|
|
206
|
-
async function planSubmit(args) {
|
|
207
|
-
const { values, positionals } = parseArgs({
|
|
208
|
-
args,
|
|
209
|
-
options: {
|
|
210
|
-
title: { type: "string" },
|
|
211
|
-
source: {
|
|
212
|
-
type: "string",
|
|
213
|
-
short: "s"
|
|
214
|
-
},
|
|
215
|
-
model: {
|
|
216
|
-
type: "string",
|
|
217
|
-
short: "m"
|
|
218
|
-
},
|
|
219
|
-
id: { type: "string" },
|
|
220
|
-
wait: {
|
|
221
|
-
type: "boolean",
|
|
222
|
-
short: "w"
|
|
223
|
-
},
|
|
224
|
-
timeout: {
|
|
225
|
-
type: "string",
|
|
226
|
-
short: "t"
|
|
227
|
-
}
|
|
228
|
-
},
|
|
229
|
-
allowPositionals: true
|
|
230
|
-
});
|
|
231
|
-
const file = positionals[0];
|
|
232
|
-
let body;
|
|
233
|
-
if (!file || file === "-") body = await readStdin();
|
|
234
|
-
else try {
|
|
235
|
-
body = await readFile(file, "utf-8");
|
|
236
|
-
} catch (err) {
|
|
237
|
-
console.error(`Failed to read plan file ${file}: ${err?.message ?? err}`);
|
|
238
|
-
return EXIT_USAGE;
|
|
239
|
-
}
|
|
240
|
-
body = body.replace(/\r\n/g, "\n");
|
|
241
|
-
if (!body.trim()) {
|
|
242
|
-
console.error("A plan body is required (pass a markdown file path or pipe via stdin).");
|
|
243
|
-
return EXIT_USAGE;
|
|
244
|
-
}
|
|
245
|
-
const title = values.title || deriveTitle(body);
|
|
246
|
-
const base = baseUrl();
|
|
247
|
-
let sinceRound = 0;
|
|
248
|
-
if (values.wait) try {
|
|
249
|
-
sinceRound = (await fetch(`${base}/api/plan-review/status`).then((r) => r.json())).round ?? 0;
|
|
250
|
-
} catch {}
|
|
251
|
-
const res = await fetch(`${base}/api/plans`, {
|
|
252
|
-
method: "POST",
|
|
253
|
-
headers: { "Content-Type": "application/json" },
|
|
254
|
-
body: JSON.stringify({
|
|
255
|
-
id: values.id,
|
|
256
|
-
title,
|
|
257
|
-
body,
|
|
258
|
-
source: values.source,
|
|
259
|
-
model: values.model
|
|
260
|
-
})
|
|
261
|
-
});
|
|
262
|
-
if (!res.ok) {
|
|
263
|
-
console.error(`Failed to submit plan: HTTP ${res.status}`);
|
|
264
|
-
return 1;
|
|
265
|
-
}
|
|
266
|
-
const plan = await res.json();
|
|
267
|
-
console.error(`Submitted plan ${plan.id} (v${plan.version}) — review at ${base}/plan/${plan.id}`);
|
|
268
|
-
if (!values.wait) {
|
|
269
|
-
process.stdout.write(plan.id + "\n");
|
|
270
|
-
return EXIT_OK;
|
|
271
|
-
}
|
|
272
|
-
return pollPlanDecision(base, (values.timeout ? Number(values.timeout) : 570) * 1e3, sinceRound);
|
|
273
|
-
}
|
|
274
|
-
async function planAwait(args) {
|
|
275
|
-
const { values } = parseArgs({
|
|
276
|
-
args,
|
|
277
|
-
options: { timeout: {
|
|
278
|
-
type: "string",
|
|
279
|
-
short: "t"
|
|
280
|
-
} },
|
|
281
|
-
allowPositionals: false
|
|
282
|
-
});
|
|
283
|
-
const totalBudgetMs = (values.timeout ? Number(values.timeout) : 570) * 1e3;
|
|
284
|
-
return pollPlanDecision(baseUrl(), totalBudgetMs);
|
|
285
|
-
}
|
|
286
|
-
async function planList(args) {
|
|
287
|
-
const { values } = parseArgs({
|
|
288
|
-
args,
|
|
289
|
-
options: { json: { type: "boolean" } },
|
|
290
|
-
allowPositionals: false
|
|
291
|
-
});
|
|
292
|
-
const all = await fetch(`${baseUrl()}/api/plans`).then((r) => r.json());
|
|
293
|
-
if (values.json) {
|
|
294
|
-
process.stdout.write(JSON.stringify(all, null, 2) + "\n");
|
|
295
|
-
return EXIT_OK;
|
|
296
|
-
}
|
|
297
|
-
if (all.length === 0) {
|
|
298
|
-
console.error("No plans submitted yet.");
|
|
299
|
-
return EXIT_OK;
|
|
300
|
-
}
|
|
301
|
-
for (const p of all) {
|
|
302
|
-
const open = (p.comments ?? []).filter((c) => c.status === "open").length;
|
|
303
|
-
process.stdout.write(`${p.id}\t[${p.decision}]\tv${p.version}\t${open} open comment(s)\t${p.title}\n`);
|
|
304
|
-
}
|
|
305
|
-
return EXIT_OK;
|
|
306
|
-
}
|
|
307
|
-
async function planShow(args) {
|
|
308
|
-
const { values, positionals } = parseArgs({
|
|
309
|
-
args,
|
|
310
|
-
options: { json: { type: "boolean" } },
|
|
311
|
-
allowPositionals: true
|
|
312
|
-
});
|
|
313
|
-
const base = baseUrl();
|
|
314
|
-
let planId = positionals[0];
|
|
315
|
-
if (!planId) {
|
|
316
|
-
const all = await fetch(`${base}/api/plans`).then((r) => r.json());
|
|
317
|
-
if (all.length === 0) {
|
|
318
|
-
console.error("No plans submitted yet.");
|
|
319
|
-
return EXIT_NOT_FOUND;
|
|
320
|
-
}
|
|
321
|
-
planId = all[all.length - 1].id;
|
|
322
|
-
}
|
|
323
|
-
const res = await fetch(`${base}/api/plans/${planId}`);
|
|
324
|
-
if (res.status === 404) {
|
|
325
|
-
console.error(`Plan ${planId} not found.`);
|
|
326
|
-
return EXIT_NOT_FOUND;
|
|
327
|
-
}
|
|
328
|
-
const plan = await res.json();
|
|
329
|
-
if (values.json) process.stdout.write(JSON.stringify(plan, null, 2) + "\n");
|
|
330
|
-
else process.stdout.write(formatPlanReview(plan) + "\n");
|
|
331
|
-
return EXIT_OK;
|
|
332
|
-
}
|
|
333
|
-
/** Locate which plan owns a given comment id (comment ids are globally unique). */
|
|
334
|
-
async function findCommentPlan(base, commentId) {
|
|
335
|
-
return (await fetch(`${base}/api/plans`).then((r) => r.json())).find((p) => (p.comments ?? []).some((c) => c.id === commentId)) ?? null;
|
|
336
|
-
}
|
|
337
|
-
async function planReply(args) {
|
|
338
|
-
const { values, positionals } = parseArgs({
|
|
339
|
-
args,
|
|
340
|
-
options: {
|
|
341
|
-
body: {
|
|
342
|
-
type: "string",
|
|
343
|
-
short: "b"
|
|
344
|
-
},
|
|
345
|
-
model: {
|
|
346
|
-
type: "string",
|
|
347
|
-
short: "m"
|
|
348
|
-
}
|
|
349
|
-
},
|
|
350
|
-
allowPositionals: true
|
|
351
|
-
});
|
|
352
|
-
const commentId = positionals[0];
|
|
353
|
-
if (!commentId) {
|
|
354
|
-
console.error("Usage: diffing plan reply <commentId> --body <text> [--model <name>]");
|
|
355
|
-
return EXIT_USAGE;
|
|
356
|
-
}
|
|
357
|
-
let body = values.body;
|
|
358
|
-
if (body === "-" || body === void 0) body = (await readStdin()).trim();
|
|
359
|
-
if (!body) {
|
|
360
|
-
console.error("A reply body is required (--body <text> or pipe via stdin).");
|
|
361
|
-
return EXIT_USAGE;
|
|
362
|
-
}
|
|
363
|
-
const base = baseUrl();
|
|
364
|
-
const plan = await findCommentPlan(base, commentId);
|
|
365
|
-
if (!plan) {
|
|
366
|
-
console.error(`Plan comment ${commentId} not found.`);
|
|
367
|
-
return EXIT_NOT_FOUND;
|
|
368
|
-
}
|
|
369
|
-
const res = await fetch(`${base}/api/plans/${plan.id}/comments/${commentId}/replies`, {
|
|
370
|
-
method: "POST",
|
|
371
|
-
headers: { "Content-Type": "application/json" },
|
|
372
|
-
body: JSON.stringify({
|
|
373
|
-
body,
|
|
374
|
-
role: "agent",
|
|
375
|
-
model: values.model
|
|
376
|
-
})
|
|
377
|
-
});
|
|
378
|
-
if (!res.ok) {
|
|
379
|
-
console.error(`Failed to reply: HTTP ${res.status}`);
|
|
380
|
-
return 1;
|
|
381
|
-
}
|
|
382
|
-
console.error(`Replied to plan comment ${commentId}.`);
|
|
383
|
-
return EXIT_OK;
|
|
384
|
-
}
|
|
385
|
-
async function planResolve(args) {
|
|
386
|
-
const { positionals } = parseArgs({
|
|
387
|
-
args,
|
|
388
|
-
allowPositionals: true,
|
|
389
|
-
options: {}
|
|
390
|
-
});
|
|
391
|
-
const commentId = positionals[0];
|
|
392
|
-
if (!commentId) {
|
|
393
|
-
console.error("Usage: diffing plan resolve <commentId>");
|
|
394
|
-
return EXIT_USAGE;
|
|
395
|
-
}
|
|
396
|
-
const base = baseUrl();
|
|
397
|
-
const plan = await findCommentPlan(base, commentId);
|
|
398
|
-
if (!plan) {
|
|
399
|
-
console.error(`Plan comment ${commentId} not found.`);
|
|
400
|
-
return EXIT_NOT_FOUND;
|
|
401
|
-
}
|
|
402
|
-
const res = await fetch(`${base}/api/plans/${plan.id}/comments/${commentId}`, {
|
|
403
|
-
method: "PUT",
|
|
404
|
-
headers: { "Content-Type": "application/json" },
|
|
405
|
-
body: JSON.stringify({ status: "resolved" })
|
|
406
|
-
});
|
|
407
|
-
if (!res.ok) {
|
|
408
|
-
console.error(`Failed to resolve: HTTP ${res.status}`);
|
|
409
|
-
return 1;
|
|
410
|
-
}
|
|
411
|
-
console.error(`Resolved plan comment ${commentId}.`);
|
|
412
|
-
return EXIT_OK;
|
|
413
|
-
}
|
|
414
|
-
async function plan(args) {
|
|
415
|
-
const action = args[0];
|
|
416
|
-
const rest = args.slice(1);
|
|
417
|
-
switch (action) {
|
|
418
|
-
case "submit": return planSubmit(rest);
|
|
419
|
-
case "await": return planAwait(rest);
|
|
420
|
-
case "list": return planList(rest);
|
|
421
|
-
case "show": return planShow(rest);
|
|
422
|
-
case "reply": return planReply(rest);
|
|
423
|
-
case "resolve": return planResolve(rest);
|
|
424
|
-
default:
|
|
425
|
-
console.error("Usage: diffing plan <submit|await|list|show|reply|resolve> [...]");
|
|
426
|
-
return EXIT_USAGE;
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
async function runSubcommand(name, args) {
|
|
430
|
-
switch (name) {
|
|
431
|
-
case "await-review": return awaitReview(args);
|
|
432
|
-
case "reply": return reply(args);
|
|
433
|
-
case "resolve": return resolve(args);
|
|
434
|
-
case "comments": return comments(args);
|
|
435
|
-
case "url": return url();
|
|
436
|
-
case "plan": return plan(args);
|
|
437
|
-
default:
|
|
438
|
-
console.error(`Unknown subcommand: ${name}`);
|
|
439
|
-
return EXIT_USAGE;
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
//#endregion
|
|
443
|
-
export { runSubcommand };
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
import { a as formatComments, n as readServerLock, t as isLockAlive } from "./server-lock-DIkImokU.mjs";
|
|
2
|
-
import { parseArgs } from "node:util";
|
|
3
|
-
//#region src/cli-agent.ts
|
|
4
|
-
/**
|
|
5
|
-
* Agent-facing `diffit` subcommands. These make the user→agent handoff
|
|
6
|
-
* port-agnostic: each resolves the running server via the per-repo lockfile
|
|
7
|
-
* (`server.json`) so any agent with a shell — or a human — can drive the loop
|
|
8
|
-
* without being told a port.
|
|
9
|
-
*
|
|
10
|
-
* diffit await-review block until the human clicks "Send to agent"
|
|
11
|
-
* diffit reply <id> post an agent reply to a comment
|
|
12
|
-
* diffit resolve <id> mark a comment resolved
|
|
13
|
-
* diffit comments dump the current comments (XML or JSON)
|
|
14
|
-
*/
|
|
15
|
-
const EXIT_OK = 0;
|
|
16
|
-
const EXIT_AWAIT_TIMEOUT = 2;
|
|
17
|
-
const EXIT_NO_SERVER = 3;
|
|
18
|
-
const EXIT_NOT_FOUND = 4;
|
|
19
|
-
const EXIT_USAGE = 5;
|
|
20
|
-
/** Resolve the running server's base URL from the lockfile, or exit cleanly. */
|
|
21
|
-
function baseUrl() {
|
|
22
|
-
const lock = readServerLock();
|
|
23
|
-
if (!lock || !isLockAlive(lock)) {
|
|
24
|
-
console.error("No diffit server running for this repo. Start one with `diffit`.");
|
|
25
|
-
process.exit(EXIT_NO_SERVER);
|
|
26
|
-
}
|
|
27
|
-
return `http://${lock.host === "0.0.0.0" || lock.host === "::" ? "127.0.0.1" : lock.host}:${lock.port}`;
|
|
28
|
-
}
|
|
29
|
-
async function readStdin() {
|
|
30
|
-
const chunks = [];
|
|
31
|
-
for await (const chunk of process.stdin) chunks.push(chunk);
|
|
32
|
-
return Buffer.concat(chunks).toString("utf-8");
|
|
33
|
-
}
|
|
34
|
-
async function awaitReview(args) {
|
|
35
|
-
const { values } = parseArgs({
|
|
36
|
-
args,
|
|
37
|
-
options: {
|
|
38
|
-
timeout: {
|
|
39
|
-
type: "string",
|
|
40
|
-
short: "t"
|
|
41
|
-
},
|
|
42
|
-
since: { type: "string" }
|
|
43
|
-
},
|
|
44
|
-
allowPositionals: false
|
|
45
|
-
});
|
|
46
|
-
const totalBudgetMs = (values.timeout ? Number(values.timeout) : 570) * 1e3;
|
|
47
|
-
const base = baseUrl();
|
|
48
|
-
let sinceRound = 0;
|
|
49
|
-
try {
|
|
50
|
-
sinceRound = (await fetch(`${base}/api/review/status`).then((r) => r.json())).round ?? 0;
|
|
51
|
-
} catch {}
|
|
52
|
-
const deadline = Date.now() + totalBudgetMs;
|
|
53
|
-
while (Date.now() < deadline) {
|
|
54
|
-
let res;
|
|
55
|
-
try {
|
|
56
|
-
res = await fetch(`${base}/api/review/await?timeoutMs=25000&sinceRound=${sinceRound}`, { signal: AbortSignal.timeout(3e4) });
|
|
57
|
-
} catch (err) {
|
|
58
|
-
if (err?.name === "TimeoutError") continue;
|
|
59
|
-
console.error(`Failed to reach diffit server: ${err?.message ?? err}`);
|
|
60
|
-
return EXIT_NO_SERVER;
|
|
61
|
-
}
|
|
62
|
-
const result = await res.json();
|
|
63
|
-
if (result.status === "released") {
|
|
64
|
-
process.stdout.write(result.payload.commentXml + "\n");
|
|
65
|
-
console.error(`DIFFIT_REVIEW_ROUND=${result.payload.round}`);
|
|
66
|
-
return EXIT_OK;
|
|
67
|
-
}
|
|
68
|
-
sinceRound = result.round ?? sinceRound;
|
|
69
|
-
}
|
|
70
|
-
console.error("DIFFIT_AWAIT_TIMEOUT");
|
|
71
|
-
console.error("No review sent within the timeout. Run `diffit await-review` again to keep waiting.");
|
|
72
|
-
return EXIT_AWAIT_TIMEOUT;
|
|
73
|
-
}
|
|
74
|
-
async function reply(args) {
|
|
75
|
-
const { values, positionals } = parseArgs({
|
|
76
|
-
args,
|
|
77
|
-
options: {
|
|
78
|
-
body: {
|
|
79
|
-
type: "string",
|
|
80
|
-
short: "b"
|
|
81
|
-
},
|
|
82
|
-
model: {
|
|
83
|
-
type: "string",
|
|
84
|
-
short: "m"
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
allowPositionals: true
|
|
88
|
-
});
|
|
89
|
-
const commentId = positionals[0];
|
|
90
|
-
if (!commentId) {
|
|
91
|
-
console.error("Usage: diffit reply <commentId> --body <text> [--model <name>]");
|
|
92
|
-
return EXIT_USAGE;
|
|
93
|
-
}
|
|
94
|
-
let body = values.body;
|
|
95
|
-
if (body === "-" || body === void 0) body = (await readStdin()).trim();
|
|
96
|
-
if (!body) {
|
|
97
|
-
console.error("A reply body is required (--body <text> or pipe via stdin).");
|
|
98
|
-
return EXIT_USAGE;
|
|
99
|
-
}
|
|
100
|
-
const res = await fetch(`${baseUrl()}/api/comments/${commentId}/replies`, {
|
|
101
|
-
method: "POST",
|
|
102
|
-
headers: { "Content-Type": "application/json" },
|
|
103
|
-
body: JSON.stringify({
|
|
104
|
-
body,
|
|
105
|
-
role: "agent",
|
|
106
|
-
model: values.model
|
|
107
|
-
})
|
|
108
|
-
});
|
|
109
|
-
if (res.status === 404) {
|
|
110
|
-
console.error(`Comment ${commentId} not found.`);
|
|
111
|
-
return EXIT_NOT_FOUND;
|
|
112
|
-
}
|
|
113
|
-
if (!res.ok) {
|
|
114
|
-
console.error(`Failed to reply: HTTP ${res.status}`);
|
|
115
|
-
return 1;
|
|
116
|
-
}
|
|
117
|
-
console.error(`Replied to ${commentId}.`);
|
|
118
|
-
return EXIT_OK;
|
|
119
|
-
}
|
|
120
|
-
async function resolve(args) {
|
|
121
|
-
const { positionals } = parseArgs({
|
|
122
|
-
args,
|
|
123
|
-
allowPositionals: true,
|
|
124
|
-
options: {}
|
|
125
|
-
});
|
|
126
|
-
const commentId = positionals[0];
|
|
127
|
-
if (!commentId) {
|
|
128
|
-
console.error("Usage: diffit resolve <commentId>");
|
|
129
|
-
return EXIT_USAGE;
|
|
130
|
-
}
|
|
131
|
-
const res = await fetch(`${baseUrl()}/api/comments/${commentId}`, {
|
|
132
|
-
method: "PUT",
|
|
133
|
-
headers: { "Content-Type": "application/json" },
|
|
134
|
-
body: JSON.stringify({ status: "resolved" })
|
|
135
|
-
});
|
|
136
|
-
if (res.status === 404) {
|
|
137
|
-
console.error(`Comment ${commentId} not found.`);
|
|
138
|
-
return EXIT_NOT_FOUND;
|
|
139
|
-
}
|
|
140
|
-
if (!res.ok) {
|
|
141
|
-
console.error(`Failed to resolve: HTTP ${res.status}`);
|
|
142
|
-
return 1;
|
|
143
|
-
}
|
|
144
|
-
console.error(`Resolved ${commentId}.`);
|
|
145
|
-
return EXIT_OK;
|
|
146
|
-
}
|
|
147
|
-
async function comments(args) {
|
|
148
|
-
const { values } = parseArgs({
|
|
149
|
-
args,
|
|
150
|
-
options: {
|
|
151
|
-
open: { type: "boolean" },
|
|
152
|
-
json: { type: "boolean" }
|
|
153
|
-
},
|
|
154
|
-
allowPositionals: false
|
|
155
|
-
});
|
|
156
|
-
const all = await fetch(`${baseUrl()}/api/comments`).then((r) => r.json());
|
|
157
|
-
const selected = values.open ? all.filter((c) => c.status === "open") : all;
|
|
158
|
-
if (values.json) process.stdout.write(JSON.stringify(selected, null, 2) + "\n");
|
|
159
|
-
else process.stdout.write(formatComments(selected) + "\n");
|
|
160
|
-
return EXIT_OK;
|
|
161
|
-
}
|
|
162
|
-
async function runSubcommand(name, args) {
|
|
163
|
-
switch (name) {
|
|
164
|
-
case "await-review": return awaitReview(args);
|
|
165
|
-
case "reply": return reply(args);
|
|
166
|
-
case "resolve": return resolve(args);
|
|
167
|
-
case "comments": return comments(args);
|
|
168
|
-
default:
|
|
169
|
-
console.error(`Unknown subcommand: ${name}`);
|
|
170
|
-
return EXIT_USAGE;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
//#endregion
|
|
174
|
-
export { runSubcommand };
|