claude-code-best 1.3.0 → 1.3.1
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/dist/{chunk-m7v70nw0.js → chunk-01fhgb41.js} +19 -19
- package/dist/{chunk-bfz9aasm.js → chunk-050pwpee.js} +1 -1
- package/dist/{chunk-hycjbxhs.js → chunk-0fvmdap2.js} +1 -1
- package/dist/{chunk-v92zfjm3.js → chunk-0jrmdacn.js} +1 -1
- package/dist/{chunk-eddmb0tc.js → chunk-0m5j0p72.js} +20 -20
- package/dist/{chunk-cabv42ex.js → chunk-0mg0k25x.js} +1 -1
- package/dist/{chunk-mqknmqbj.js → chunk-0pmegb1w.js} +2 -2
- package/dist/{chunk-b8pffs21.js → chunk-0tag2dk1.js} +27 -27
- package/dist/{chunk-dkz51nh3.js → chunk-0w4mrdwb.js} +3 -3
- package/dist/{chunk-h1nt30dj.js → chunk-0w6jz89f.js} +1 -1
- package/dist/{chunk-eeweb4db.js → chunk-1c9k5v15.js} +19 -19
- package/dist/{chunk-0d8p751v.js → chunk-1enjnwgz.js} +19 -19
- package/dist/{chunk-394mdv6k.js → chunk-1fgnyfsq.js} +3 -3
- package/dist/{chunk-sg4tpf00.js → chunk-1n7cey3j.js} +73 -73
- package/dist/{chunk-bpsg7rm0.js → chunk-1w08zx69.js} +7 -7
- package/dist/{chunk-22c48gbt.js → chunk-1wz91dsc.js} +2 -2
- package/dist/{chunk-pmfdbybc.js → chunk-1zgwrq7n.js} +1 -1
- package/dist/{chunk-9p6v7f2v.js → chunk-24g7edd0.js} +20 -20
- package/dist/{chunk-jx0b5fke.js → chunk-26bbhsnc.js} +19 -19
- package/dist/{chunk-kaa0bsrh.js → chunk-27dz7nrf.js} +1 -1
- package/dist/{chunk-m5aqcp3x.js → chunk-2c8n8hnq.js} +3 -3
- package/dist/{chunk-fv5c8gjd.js → chunk-2dq4sza8.js} +19 -19
- package/dist/{chunk-z1rbdm11.js → chunk-2gw5x5s3.js} +20 -20
- package/dist/{chunk-7rjzfjf2.js → chunk-2hr17t2q.js} +29 -29
- package/dist/{chunk-cbrkce20.js → chunk-2trydwx3.js} +2 -2
- package/dist/{chunk-tb5m6pvs.js → chunk-386edscs.js} +20 -20
- package/dist/{chunk-5c7hecb7.js → chunk-3900jrtx.js} +19 -19
- package/dist/{chunk-2222r6sq.js → chunk-39sr0h5a.js} +3 -3
- package/dist/{chunk-4w5k9q5e.js → chunk-3cm9fn9x.js} +6 -6
- package/dist/{chunk-7ms5ykvy.js → chunk-3vbc3efy.js} +2 -2
- package/dist/{chunk-nrv096sc.js → chunk-3wmyq7q5.js} +19 -19
- package/dist/{chunk-bj6fdkbq.js → chunk-43nh9gf2.js} +19 -19
- package/dist/{chunk-3jfd4rc4.js → chunk-462vtmnj.js} +2 -2
- package/dist/{chunk-c58wjfjz.js → chunk-467273by.js} +33 -33
- package/dist/{chunk-kmpf6g9a.js → chunk-49swb4ny.js} +22 -22
- package/dist/{chunk-5wdpxvmh.js → chunk-4m1z07x8.js} +13 -13
- package/dist/{chunk-1gxntv08.js → chunk-4xxq1g6q.js} +1 -1
- package/dist/{chunk-maygbm8y.js → chunk-4y2dxg0h.js} +20 -20
- package/dist/{chunk-838jt14c.js → chunk-511p1hxp.js} +20 -20
- package/dist/{chunk-0bx6wycr.js → chunk-549bvvxw.js} +2 -2
- package/dist/{chunk-sfmxb989.js → chunk-59t0knej.js} +19 -19
- package/dist/{chunk-hbctkmk8.js → chunk-5h7pp04r.js} +21 -21
- package/dist/{chunk-wvg1esxy.js → chunk-601ycjm2.js} +5 -5
- package/dist/{chunk-y0aajevx.js → chunk-60965ra9.js} +3 -3
- package/dist/{chunk-c0rygpkx.js → chunk-63ze8qsk.js} +1 -1
- package/dist/{chunk-5dx8x5s4.js → chunk-6a1xdr64.js} +19 -19
- package/dist/{chunk-f0r878ce.js → chunk-6c7q3e1g.js} +19 -19
- package/dist/{chunk-213ftqxh.js → chunk-6pjwdq37.js} +20 -20
- package/dist/{chunk-g7tarxmc.js → chunk-7dty9kss.js} +109 -109
- package/dist/{chunk-74zz0b6s.js → chunk-7gfj3vr6.js} +29 -29
- package/dist/{chunk-nha4ccb8.js → chunk-7jtc779k.js} +19 -19
- package/dist/{chunk-dcpykn1s.js → chunk-7spb4x2r.js} +25 -25
- package/dist/{chunk-045x8tgs.js → chunk-7tmn40ms.js} +19 -19
- package/dist/{chunk-npxkzvh7.js → chunk-817ta98z.js} +3 -3
- package/dist/{chunk-4h9yhdc6.js → chunk-81jqbdqz.js} +21 -21
- package/dist/{chunk-2v6p7cp3.js → chunk-8282r42g.js} +22 -22
- package/dist/{chunk-trmcwpe0.js → chunk-8dkjrxqz.js} +8 -8
- package/dist/{chunk-1nxhvdk0.js → chunk-8fk2qmtd.js} +26 -26
- package/dist/{chunk-5aktmgbh.js → chunk-8p2tr8tm.js} +2 -2
- package/dist/{chunk-1m0b0qpk.js → chunk-8xbsaj66.js} +2 -2
- package/dist/{chunk-wmbw8xp6.js → chunk-8yk7wcx9.js} +21 -21
- package/dist/{chunk-b60hfpx4.js → chunk-90xncb13.js} +23 -23
- package/dist/{chunk-k1034t1k.js → chunk-92dvdn2j.js} +1 -1
- package/dist/{chunk-m014f9d7.js → chunk-9dr6cj23.js} +5 -5
- package/dist/{chunk-4h134w8m.js → chunk-9g6nwdp3.js} +19 -19
- package/dist/{chunk-3xjxwc8k.js → chunk-9ks728q8.js} +1 -1
- package/dist/{chunk-mc9qxpq9.js → chunk-9pye85q2.js} +2 -2
- package/dist/{chunk-554yxdxw.js → chunk-9pzay1hf.js} +1 -1
- package/dist/{chunk-rbh7pn8z.js → chunk-9tgt3s2b.js} +19 -19
- package/dist/{chunk-pgr3vqs3.js → chunk-9xjs2x90.js} +2 -2
- package/dist/{chunk-mj08khaw.js → chunk-9yctqgqf.js} +20 -20
- package/dist/{chunk-6xrj7fhf.js → chunk-a66dpqvr.js} +1 -1
- package/dist/{chunk-qnk3xdcq.js → chunk-a962fbse.js} +29 -29
- package/dist/{chunk-6wpdkz60.js → chunk-adnz2wwx.js} +20 -20
- package/dist/{chunk-8a3p9cr6.js → chunk-ajbqe5hg.js} +19 -19
- package/dist/{chunk-2vpbdb0e.js → chunk-ajqnq9d8.js} +19 -19
- package/dist/{chunk-nzwsfphb.js → chunk-amqjx5nx.js} +2 -2
- package/dist/{chunk-wmjxh7n1.js → chunk-an8dr2hh.js} +1 -1
- package/dist/{chunk-mcp0f64h.js → chunk-awb4ksjn.js} +2 -2
- package/dist/{chunk-ptkdhmmr.js → chunk-b9n5fe07.js} +17 -17
- package/dist/{chunk-kawnay92.js → chunk-bc4mvfm9.js} +2 -2
- package/dist/{chunk-6bv97bvc.js → chunk-bjzwahz4.js} +1 -1
- package/dist/{chunk-3pwqxjgh.js → chunk-bkzej8c2.js} +20 -20
- package/dist/{chunk-1f0zc36w.js → chunk-bphdsgva.js} +19 -19
- package/dist/{chunk-w1npkbm4.js → chunk-by0gh24s.js} +20 -20
- package/dist/{chunk-ba1fw4a4.js → chunk-c1ddtk65.js} +2 -2
- package/dist/{chunk-sjy1sd8p.js → chunk-c38m15b4.js} +1 -1
- package/dist/{chunk-pc7fbd30.js → chunk-c5bbbeet.js} +2 -2
- package/dist/{chunk-2p2em9s3.js → chunk-c7bv28tq.js} +19 -19
- package/dist/{chunk-p09pr0b9.js → chunk-ce0azfq8.js} +21 -21
- package/dist/{chunk-vvfcsk0m.js → chunk-cgpdv4d1.js} +1 -1
- package/dist/{chunk-sm6k9v6h.js → chunk-cna35bj4.js} +4 -4
- package/dist/{chunk-eebvzgqf.js → chunk-cymx6f6m.js} +2 -2
- package/dist/{chunk-ma8rf7ks.js → chunk-cz6qw5ec.js} +9 -9
- package/dist/{chunk-g0eyjf77.js → chunk-d0dzma5s.js} +4 -4
- package/dist/{chunk-9rpdp503.js → chunk-d2ftse1n.js} +19 -19
- package/dist/{chunk-69enakg4.js → chunk-d2zknskm.js} +3 -3
- package/dist/{chunk-nd9m2fcy.js → chunk-devj67fb.js} +1 -1
- package/dist/{chunk-y6zj86y9.js → chunk-dewz3bgc.js} +19 -19
- package/dist/{chunk-ry9ssncf.js → chunk-dgdkk37z.js} +2 -2
- package/dist/{chunk-7tnc2act.js → chunk-dkbtqb7g.js} +23 -23
- package/dist/{chunk-w2r52cs1.js → chunk-dnw80c3y.js} +50 -50
- package/dist/{chunk-1z41ce2e.js → chunk-dr7bjgwn.js} +20 -20
- package/dist/{chunk-85p1xpaw.js → chunk-dxdaa8qz.js} +29 -29
- package/dist/{chunk-ykzn1be5.js → chunk-e5mdhyhx.js} +19 -19
- package/dist/{chunk-qf0vwde7.js → chunk-e8993r79.js} +1 -1
- package/dist/{chunk-39e8b481.js → chunk-edwk1b23.js} +3 -3
- package/dist/{chunk-4mfkp4e0.js → chunk-eeapc7vz.js} +19 -19
- package/dist/{chunk-ed0ps4v3.js → chunk-eg5qqhjn.js} +1 -1
- package/dist/{chunk-9c6dcfsm.js → chunk-ej6pw264.js} +2 -2
- package/dist/{chunk-wnfgkzsc.js → chunk-emgfv9ne.js} +3 -3
- package/dist/{chunk-hcp4pras.js → chunk-epb53khk.js} +1 -1
- package/dist/{chunk-vv74x62v.js → chunk-erg2py18.js} +8 -8
- package/dist/{chunk-hp82jrck.js → chunk-et5yst40.js} +19 -19
- package/dist/{chunk-mh3y6rp1.js → chunk-ex0ven1b.js} +30 -30
- package/dist/{chunk-xyq2fcnr.js → chunk-ex4ephxn.js} +20 -20
- package/dist/{chunk-wj3ha1cp.js → chunk-ezage7b3.js} +19 -19
- package/dist/{chunk-tr5pmzxb.js → chunk-f7t8nc8w.js} +1 -1
- package/dist/{chunk-nx1mdvj4.js → chunk-fcn1c6x1.js} +2 -2
- package/dist/{chunk-swtyc9pt.js → chunk-fdfws706.js} +25 -25
- package/dist/{chunk-9v9zx8jz.js → chunk-febe4721.js} +9 -9
- package/dist/{chunk-m2remj04.js → chunk-ffwvkdef.js} +19 -19
- package/dist/{chunk-jyzet5tq.js → chunk-fjc7rtwh.js} +1 -1
- package/dist/{chunk-zmyqe6tp.js → chunk-fsdgta0d.js} +19 -19
- package/dist/{chunk-dj02e0n1.js → chunk-ft7x94g7.js} +2 -2
- package/dist/{chunk-k9x48g80.js → chunk-fytwv2vm.js} +1 -1
- package/dist/{chunk-g8w8pe9r.js → chunk-g06stvjp.js} +19 -19
- package/dist/{chunk-hnn6hp3c.js → chunk-g9t125k4.js} +1 -1
- package/dist/{chunk-fzy5ar3g.js → chunk-gar53rp0.js} +25 -25
- package/dist/{chunk-vevm5kq0.js → chunk-gr98a45p.js} +2 -2
- package/dist/{chunk-vegpctq8.js → chunk-gtbynfdg.js} +1 -1
- package/dist/{chunk-sf7akcrv.js → chunk-h0wp75kr.js} +1 -1
- package/dist/{chunk-gtavs9d8.js → chunk-hbn7k214.js} +30 -30
- package/dist/{chunk-mf9jcdfr.js → chunk-hdsan89y.js} +22 -22
- package/dist/{chunk-1aj8hhcq.js → chunk-hk2ns3xa.js} +19 -19
- package/dist/{chunk-awgxvs2z.js → chunk-hnt8qsv6.js} +2 -2
- package/dist/{chunk-tca28hyh.js → chunk-ht0zqd84.js} +21 -21
- package/dist/{chunk-836qnzp6.js → chunk-ht684r1g.js} +19 -19
- package/dist/{chunk-xekss4ge.js → chunk-j20kwmnx.js} +3 -3
- package/dist/{chunk-d74a8stm.js → chunk-j964h5n1.js} +1 -1
- package/dist/{chunk-r7sfa5ck.js → chunk-jjvt0s07.js} +19 -19
- package/dist/{chunk-w4fdphav.js → chunk-jrf67z07.js} +44 -44
- package/dist/{chunk-s9755385.js → chunk-jshec16k.js} +1 -1
- package/dist/{chunk-jyj6h8cw.js → chunk-k1d33z7h.js} +19 -19
- package/dist/{chunk-97b0gbay.js → chunk-k1jbx6h7.js} +19 -19
- package/dist/{chunk-zswgxgy5.js → chunk-k4xwz0w7.js} +2 -2
- package/dist/{chunk-h3yhryqv.js → chunk-k8k3nj3p.js} +1 -1
- package/dist/{chunk-zv6q7p4g.js → chunk-k9yzz2a0.js} +1 -1
- package/dist/{chunk-8xtx2r94.js → chunk-kqzej7t8.js} +1 -1
- package/dist/{chunk-ay8j51m4.js → chunk-kzzpeawm.js} +1 -1
- package/dist/{chunk-rk11yzpm.js → chunk-ma6neeas.js} +21 -21
- package/dist/{chunk-315mjrch.js → chunk-mcct2v6y.js} +20 -20
- package/dist/{chunk-mkmjb03s.js → chunk-mcrsjdfc.js} +22 -22
- package/dist/{chunk-88eq0rc2.js → chunk-mcxsb7w2.js} +19 -19
- package/dist/{chunk-dn922ch4.js → chunk-mg1h998n.js} +19 -19
- package/dist/{chunk-6kapfy0j.js → chunk-mqmqyj64.js} +1 -1
- package/dist/{chunk-wrb2b3es.js → chunk-n1ee5cv5.js} +19 -19
- package/dist/{chunk-zg397m7w.js → chunk-n2rt10gh.js} +2 -2
- package/dist/{chunk-bkarexn9.js → chunk-n8h1dsqj.js} +2 -2
- package/dist/{chunk-tw9ks0n2.js → chunk-ngd9jj5f.js} +22 -22
- package/dist/{chunk-ex3h0avx.js → chunk-nmydkvsg.js} +19 -19
- package/dist/{chunk-ad2mhh92.js → chunk-np0xzzg5.js} +1 -1
- package/dist/{chunk-kswzsqg9.js → chunk-nr5skyan.js} +1 -1
- package/dist/{chunk-qb20jnh4.js → chunk-nw9my2y9.js} +4 -4
- package/dist/{chunk-803d97gs.js → chunk-nwtevv8y.js} +31 -31
- package/dist/{chunk-aqatdryp.js → chunk-p6n9spb6.js} +3 -3
- package/dist/{chunk-s7p63r6r.js → chunk-p9n4qs4w.js} +1 -1
- package/dist/{chunk-rxr02qh4.js → chunk-p9rtzder.js} +20 -20
- package/dist/{chunk-ea4sj0pm.js → chunk-pb00hbq4.js} +1 -1
- package/dist/{chunk-sywgdd0d.js → chunk-pftvzz65.js} +27 -27
- package/dist/{chunk-mbyey93c.js → chunk-phmts3a8.js} +22 -22
- package/dist/{chunk-krfw0afw.js → chunk-pmnes7r7.js} +2 -2
- package/dist/{chunk-z8bk3pqw.js → chunk-pnwk1ce7.js} +2 -2
- package/dist/{chunk-44ah1t5p.js → chunk-psnzmdy2.js} +2 -2
- package/dist/{chunk-r2j97cp4.js → chunk-px25jmm6.js} +4 -4
- package/dist/{chunk-abm8mzz5.js → chunk-py0p2rvr.js} +1 -1
- package/dist/{chunk-jycf23m2.js → chunk-pyq7qsqm.js} +1 -1
- package/dist/{chunk-wj8etzsm.js → chunk-q23q07sc.js} +4 -4
- package/dist/{chunk-k97y5vrw.js → chunk-q6vk9be3.js} +1 -1
- package/dist/{chunk-c0bq9g4f.js → chunk-q87h86hy.js} +1 -1
- package/dist/{chunk-x8ryn0sd.js → chunk-q9z14d8f.js} +2 -2
- package/dist/{chunk-59xdt49j.js → chunk-qa62dem1.js} +20 -20
- package/dist/{chunk-sgxq6mtt.js → chunk-qeg1ye4w.js} +2 -2
- package/dist/{chunk-ksvc2ann.js → chunk-qfex85dr.js} +3 -3
- package/dist/{chunk-fvxqrnrz.js → chunk-qgz6s2xm.js} +19 -19
- package/dist/{chunk-j4mt6rw2.js → chunk-qh5jjrbw.js} +20 -20
- package/dist/{chunk-9dtc364s.js → chunk-qjew74g6.js} +21 -21
- package/dist/{chunk-ffrsgn6x.js → chunk-qyth66h6.js} +19 -19
- package/dist/{chunk-w4z7b4zm.js → chunk-qzr7wsy3.js} +2 -2
- package/dist/{chunk-51x591cq.js → chunk-r1kqzdds.js} +2 -2
- package/dist/{chunk-n64a8qh1.js → chunk-r2ydq9r2.js} +19 -19
- package/dist/{chunk-mbvt9qys.js → chunk-r4bmt1gr.js} +24 -24
- package/dist/{chunk-r7wavjvv.js → chunk-r5m3r29m.js} +3 -3
- package/dist/{chunk-98gz3ere.js → chunk-r5ppyzqd.js} +25 -25
- package/dist/{chunk-2082hk1v.js → chunk-r6j5mbkt.js} +19 -19
- package/dist/{chunk-0frev4tj.js → chunk-r77t00rm.js} +72 -72
- package/dist/{chunk-c2scvgdz.js → chunk-s34pmkqt.js} +20 -20
- package/dist/{chunk-w9r4k1ts.js → chunk-s3ma013j.js} +5 -5
- package/dist/{chunk-dtn9d5ps.js → chunk-s3mvqqjd.js} +1 -1
- package/dist/{chunk-908037c2.js → chunk-se1q11dc.js} +19 -19
- package/dist/{chunk-drzrtvzm.js → chunk-sgg1tn03.js} +3 -3
- package/dist/{chunk-tsn8vqzc.js → chunk-str4dp84.js} +22 -22
- package/dist/{chunk-3tkewezp.js → chunk-sv8gqenr.js} +2 -2
- package/dist/{chunk-7tp0d8y6.js → chunk-svpd0j81.js} +99 -99
- package/dist/{chunk-6w01v7jw.js → chunk-swc4sczv.js} +2 -2
- package/dist/{chunk-c9ehyj0z.js → chunk-swy3hcg1.js} +1 -1
- package/dist/{chunk-86mzts67.js → chunk-sy3d08n0.js} +19 -19
- package/dist/{chunk-srcz921f.js → chunk-t69gyagr.js} +2 -2
- package/dist/{chunk-hxwrsk3g.js → chunk-t6w1d4xk.js} +3 -3
- package/dist/{chunk-1rgbbfx3.js → chunk-tb12nz5c.js} +2 -2
- package/dist/{chunk-2psp44fn.js → chunk-tp54yb92.js} +22 -22
- package/dist/{chunk-jcxpj477.js → chunk-v04r9px7.js} +1 -1
- package/dist/{chunk-h40d4jx6.js → chunk-v0f49rpz.js} +5 -5
- package/dist/{chunk-mkkwx2fp.js → chunk-v0hg9qzq.js} +3 -3
- package/dist/{chunk-mky5spvc.js → chunk-v638cdv3.js} +19 -19
- package/dist/{chunk-h5fxd0qy.js → chunk-v9jsvxra.js} +1 -1
- package/dist/{chunk-nbq1805f.js → chunk-v9ryjarx.js} +19 -19
- package/dist/{chunk-da2b7s2y.js → chunk-va9redkr.js} +2 -2
- package/dist/{chunk-bvq835yd.js → chunk-vd6c8vgv.js} +21 -21
- package/dist/{chunk-hpvbq30z.js → chunk-vhpr96x2.js} +4 -4
- package/dist/{chunk-eef379ac.js → chunk-vr1eqyff.js} +1 -1
- package/dist/{chunk-28y3xm7f.js → chunk-vtrrerj6.js} +20 -20
- package/dist/{chunk-4nfvhspb.js → chunk-vv5x833a.js} +2 -2
- package/dist/{chunk-nhxrqvx9.js → chunk-w08xc6vn.js} +20 -20
- package/dist/{chunk-qhyxfj9j.js → chunk-w0ehrytv.js} +20 -20
- package/dist/{chunk-2gcshtrs.js → chunk-w4x7kzbe.js} +2 -2
- package/dist/{chunk-pjkgkkgk.js → chunk-w5pjyvkb.js} +1 -1
- package/dist/{chunk-1xw2zktc.js → chunk-wavbjba6.js} +3 -3
- package/dist/{chunk-ptg70t70.js → chunk-wk3k6f59.js} +5 -5
- package/dist/{chunk-541thwwe.js → chunk-wtwmfvvx.js} +27 -27
- package/dist/{chunk-99ghae8h.js → chunk-wxjwtrt1.js} +20 -20
- package/dist/{chunk-6dgr99zd.js → chunk-x4r11cpg.js} +1 -1
- package/dist/{chunk-d37c3qdn.js → chunk-x4t9qqy6.js} +1 -1
- package/dist/{chunk-6sf28hta.js → chunk-xegayzjm.js} +12 -12
- package/dist/{chunk-z9ktn6m5.js → chunk-xfprjqtc.js} +19 -19
- package/dist/{chunk-w8cf9tyj.js → chunk-xn5tw4vy.js} +2 -2
- package/dist/{chunk-6x3etkry.js → chunk-xrphw4c4.js} +2 -2
- package/dist/{chunk-qxfmw5r3.js → chunk-xvmdy4n5.js} +20 -20
- package/dist/{chunk-m52s9sgc.js → chunk-xwybntar.js} +19 -19
- package/dist/{chunk-djxhhr4t.js → chunk-y2kwne82.js} +20 -20
- package/dist/{chunk-n861majn.js → chunk-y6xfv4b9.js} +1 -1
- package/dist/{chunk-yysdszkz.js → chunk-y9tdt2na.js} +4 -4
- package/dist/{chunk-3wa4vpe6.js → chunk-yb19pff7.js} +20 -20
- package/dist/{chunk-cktw45b3.js → chunk-ycww575z.js} +1 -1
- package/dist/{chunk-4rtpbpw6.js → chunk-yhndga2y.js} +1 -1
- package/dist/{chunk-7gyy3d4b.js → chunk-yhy5qy94.js} +1 -1
- package/dist/{chunk-tz1m8223.js → chunk-ypdqbtxz.js} +2 -2
- package/dist/{chunk-ge5mf4cm.js → chunk-ywnek1j6.js} +19 -19
- package/dist/{chunk-8dsghfa5.js → chunk-yyg2brsy.js} +11 -11
- package/dist/{chunk-zpvh40s6.js → chunk-yzzjpgz5.js} +30 -30
- package/dist/{chunk-fsb3awj1.js → chunk-z3gcdcks.js} +2 -2
- package/dist/{chunk-cj95nvqr.js → chunk-z9gnfxqg.js} +5 -5
- package/dist/{chunk-hmwgf1mv.js → chunk-zfgzz4dw.js} +1 -1
- package/dist/{chunk-1y6zv558.js → chunk-zr7mcfmy.js} +1 -1
- package/dist/{chunk-f9n7y4yt.js → chunk-zrr9r10k.js} +2 -2
- package/dist/{chunk-3g9q33ab.js → chunk-zx7jp3dn.js} +19 -19
- package/dist/cli.js +8 -8
- package/package.json +3 -3
- package/scripts/setup-chrome-mcp.mjs +46 -0
- package/scripts/download-ripgrep.ts +0 -335
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
import {
|
|
3
3
|
exports_registerProtocol,
|
|
4
4
|
init_registerProtocol
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-pb00hbq4.js";
|
|
6
6
|
import {
|
|
7
7
|
autoUpdateMarketplacesAndPluginsInBackground,
|
|
8
8
|
init_pluginAutoupdate
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-vhpr96x2.js";
|
|
10
10
|
import {
|
|
11
11
|
initMagicDocs,
|
|
12
12
|
init_magicDocs
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-1wz91dsc.js";
|
|
14
14
|
import {
|
|
15
15
|
TOOL_RESULTS_SUBDIR,
|
|
16
16
|
asSystemPrompt,
|
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
init_toolResultStorage,
|
|
44
44
|
init_worktree,
|
|
45
45
|
queryModelWithoutStreaming
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-7dty9kss.js";
|
|
47
47
|
import {
|
|
48
48
|
getSettings_DEPRECATED,
|
|
49
49
|
getSmallFastModel,
|
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
init_model,
|
|
52
52
|
init_settings1 as init_settings,
|
|
53
53
|
rawSettingsContainsKey
|
|
54
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-1zgwrq7n.js";
|
|
55
55
|
import {
|
|
56
56
|
init_array,
|
|
57
57
|
init_lockfile,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
Messages,
|
|
4
4
|
init_Messages
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-4m1z07x8.js";
|
|
6
6
|
import {
|
|
7
7
|
init_staticRender,
|
|
8
8
|
renderToAnsiString
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
init_KeybindingContext,
|
|
14
14
|
init_loadUserBindings,
|
|
15
15
|
loadKeybindingsSyncWithWarnings
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-7dty9kss.js";
|
|
17
17
|
import {
|
|
18
18
|
KeybindingProvider,
|
|
19
19
|
init_strip_ansi,
|
|
@@ -65,51 +65,51 @@ import {
|
|
|
65
65
|
resetMicrocompactState,
|
|
66
66
|
runAgent,
|
|
67
67
|
toArray
|
|
68
|
-
} from "./chunk-
|
|
69
|
-
import"./chunk-
|
|
70
|
-
import"./chunk-
|
|
68
|
+
} from "./chunk-7dty9kss.js";
|
|
69
|
+
import"./chunk-zr7mcfmy.js";
|
|
70
|
+
import"./chunk-devj67fb.js";
|
|
71
71
|
import"./chunk-3c161502.js";
|
|
72
|
-
import"./chunk-
|
|
72
|
+
import"./chunk-9pzay1hf.js";
|
|
73
73
|
import"./chunk-qe3qr56q.js";
|
|
74
74
|
import {
|
|
75
75
|
init_pluginIdentifier,
|
|
76
76
|
isOfficialMarketplaceName,
|
|
77
77
|
parsePluginIdentifier
|
|
78
|
-
} from "./chunk-
|
|
78
|
+
} from "./chunk-epb53khk.js";
|
|
79
79
|
import"./chunk-var1et7e.js";
|
|
80
80
|
import"./chunk-ehtwnxpg.js";
|
|
81
|
-
import"./chunk-
|
|
82
|
-
import"./chunk-
|
|
81
|
+
import"./chunk-ypdqbtxz.js";
|
|
82
|
+
import"./chunk-h0wp75kr.js";
|
|
83
83
|
import"./chunk-2f6hs25r.js";
|
|
84
|
-
import"./chunk-
|
|
84
|
+
import"./chunk-mqmqyj64.js";
|
|
85
85
|
import"./chunk-2gzv8nrw.js";
|
|
86
86
|
import"./chunk-cgfdkzhb.js";
|
|
87
87
|
import"./chunk-s38qgqfs.js";
|
|
88
|
-
import"./chunk-
|
|
89
|
-
import"./chunk-
|
|
88
|
+
import"./chunk-c38m15b4.js";
|
|
89
|
+
import"./chunk-8xbsaj66.js";
|
|
90
90
|
import"./chunk-9r28w6ye.js";
|
|
91
|
-
import"./chunk-
|
|
92
|
-
import"./chunk-
|
|
91
|
+
import"./chunk-pyq7qsqm.js";
|
|
92
|
+
import"./chunk-9ks728q8.js";
|
|
93
93
|
import"./chunk-5ycqyqbj.js";
|
|
94
94
|
import"./chunk-t0twk3e5.js";
|
|
95
95
|
import"./chunk-ps49ymvj.js";
|
|
96
96
|
import"./chunk-p7vkh4wx.js";
|
|
97
97
|
import"./chunk-4tre5ddg.js";
|
|
98
|
-
import"./chunk-
|
|
98
|
+
import"./chunk-jshec16k.js";
|
|
99
99
|
import"./chunk-3nmhzccb.js";
|
|
100
100
|
import"./chunk-4jm600zv.js";
|
|
101
101
|
import"./chunk-hgjn6jcc.js";
|
|
102
|
-
import"./chunk-
|
|
102
|
+
import"./chunk-k8k3nj3p.js";
|
|
103
103
|
import"./chunk-rkmwx1yz.js";
|
|
104
104
|
import {
|
|
105
105
|
init_events,
|
|
106
106
|
logOTelEvent,
|
|
107
107
|
redactIfDisabled
|
|
108
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-w5pjyvkb.js";
|
|
109
109
|
import"./chunk-ykr5qx9v.js";
|
|
110
|
-
import"./chunk-
|
|
111
|
-
import"./chunk-
|
|
112
|
-
import"./chunk-
|
|
110
|
+
import"./chunk-swy3hcg1.js";
|
|
111
|
+
import"./chunk-fytwv2vm.js";
|
|
112
|
+
import"./chunk-a66dpqvr.js";
|
|
113
113
|
import"./chunk-2n45kpbz.js";
|
|
114
114
|
import"./chunk-j50zvssc.js";
|
|
115
115
|
import"./chunk-d6vexw90.js";
|
|
@@ -122,7 +122,7 @@ import {
|
|
|
122
122
|
init_agentSdkTypes,
|
|
123
123
|
init_file,
|
|
124
124
|
init_workloadContext
|
|
125
|
-
} from "./chunk-
|
|
125
|
+
} from "./chunk-1zgwrq7n.js";
|
|
126
126
|
import"./chunk-w9pdqmwg.js";
|
|
127
127
|
import"./chunk-mbv3f2vm.js";
|
|
128
128
|
import"./chunk-z1hsgc00.js";
|
package/dist/cli.js
CHANGED
|
@@ -52,7 +52,7 @@ async function main() {
|
|
|
52
52
|
if (false) {}
|
|
53
53
|
if (process.argv[2] === "--claude-in-chrome-mcp") {
|
|
54
54
|
profileCheckpoint("cli_claude_in_chrome_mcp_path");
|
|
55
|
-
const { runClaudeInChromeMcpServer } = await import("./chunk-
|
|
55
|
+
const { runClaudeInChromeMcpServer } = await import("./chunk-81jqbdqz.js");
|
|
56
56
|
await runClaudeInChromeMcpServer();
|
|
57
57
|
return;
|
|
58
58
|
} else if (process.argv[2] === "--chrome-native-host") {
|
|
@@ -62,21 +62,21 @@ async function main() {
|
|
|
62
62
|
return;
|
|
63
63
|
} else if (process.argv[2] === "--computer-use-mcp") {
|
|
64
64
|
profileCheckpoint("cli_computer_use_mcp_path");
|
|
65
|
-
const { runComputerUseMcpServer } = await import("./chunk-
|
|
65
|
+
const { runComputerUseMcpServer } = await import("./chunk-3cm9fn9x.js");
|
|
66
66
|
await runComputerUseMcpServer();
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
69
|
if (args[0] === "--daemon-worker") {
|
|
70
|
-
const { runDaemonWorker } = await import("./chunk-
|
|
70
|
+
const { runDaemonWorker } = await import("./chunk-wtwmfvvx.js");
|
|
71
71
|
await runDaemonWorker(args[1]);
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
74
74
|
if (false) {}
|
|
75
75
|
if (args[0] === "daemon") {
|
|
76
76
|
profileCheckpoint("cli_daemon_path");
|
|
77
|
-
const { enableConfigs } = await import("./chunk-
|
|
77
|
+
const { enableConfigs } = await import("./chunk-q6vk9be3.js");
|
|
78
78
|
enableConfigs();
|
|
79
|
-
const { initSinks } = await import("./chunk-
|
|
79
|
+
const { initSinks } = await import("./chunk-s3ma013j.js");
|
|
80
80
|
initSinks();
|
|
81
81
|
const { daemonMain } = await import("./chunk-fn510gqw.js");
|
|
82
82
|
await daemonMain(args.slice(1));
|
|
@@ -97,11 +97,11 @@ async function main() {
|
|
|
97
97
|
const hasTmuxFlag = args.includes("--tmux") || args.includes("--tmux=classic");
|
|
98
98
|
if (hasTmuxFlag && (args.includes("-w") || args.includes("--worktree") || args.some((a) => a.startsWith("--worktree=")))) {
|
|
99
99
|
profileCheckpoint("cli_tmux_worktree_fast_path");
|
|
100
|
-
const { enableConfigs } = await import("./chunk-
|
|
100
|
+
const { enableConfigs } = await import("./chunk-q6vk9be3.js");
|
|
101
101
|
enableConfigs();
|
|
102
102
|
const { isWorktreeModeEnabled } = await import("./chunk-pwwa7s62.js");
|
|
103
103
|
if (isWorktreeModeEnabled()) {
|
|
104
|
-
const { execIntoTmuxWorktree } = await import("./chunk-
|
|
104
|
+
const { execIntoTmuxWorktree } = await import("./chunk-43nh9gf2.js");
|
|
105
105
|
const result = await execIntoTmuxWorktree(args);
|
|
106
106
|
if (result.handled) {
|
|
107
107
|
return;
|
|
@@ -121,7 +121,7 @@ async function main() {
|
|
|
121
121
|
const { startCapturingEarlyInput } = await import("./chunk-qtfc6wdh.js");
|
|
122
122
|
startCapturingEarlyInput();
|
|
123
123
|
profileCheckpoint("cli_before_main_import");
|
|
124
|
-
const { main: cliMain } = await import("./chunk-
|
|
124
|
+
const { main: cliMain } = await import("./chunk-svpd0j81.js");
|
|
125
125
|
profileCheckpoint("cli_after_main_import");
|
|
126
126
|
await cliMain();
|
|
127
127
|
profileCheckpoint("cli_after_main_complete");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-code-best",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"description": "Reverse-engineered Anthropic Claude Code CLI — interactive AI coding assistant in the terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "claude-code-best <claude-code-best@proton.me>",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
],
|
|
36
36
|
"files": [
|
|
37
37
|
"dist",
|
|
38
|
-
"scripts/
|
|
39
|
-
"scripts/
|
|
38
|
+
"scripts/postinstall.cjs",
|
|
39
|
+
"scripts/setup-chrome-mcp.mjs"
|
|
40
40
|
],
|
|
41
41
|
"scripts": {
|
|
42
42
|
"build": "bun run build.ts",
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Unified Chrome MCP setup script.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* node scripts/setup-chrome-mcp.mjs # Run full setup (fix-permissions → register → doctor)
|
|
8
|
+
* node scripts/setup-chrome-mcp.mjs doctor # Run a single sub-command
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { execFileSync } from "node:child_process";
|
|
12
|
+
import { dirname, join } from "node:path";
|
|
13
|
+
import { fileURLToPath } from "node:url";
|
|
14
|
+
|
|
15
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
16
|
+
const cliPath = join(
|
|
17
|
+
__dirname,
|
|
18
|
+
"..",
|
|
19
|
+
"node_modules",
|
|
20
|
+
"mcp-chrome-bridge",
|
|
21
|
+
"dist",
|
|
22
|
+
"cli.js",
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
const userArgs = process.argv.slice(2);
|
|
26
|
+
|
|
27
|
+
if (userArgs.length > 0) {
|
|
28
|
+
// Forward single sub-command
|
|
29
|
+
execFileSync("node", [cliPath, ...userArgs], { stdio: "inherit" });
|
|
30
|
+
} else {
|
|
31
|
+
// Full setup sequence
|
|
32
|
+
const steps = [
|
|
33
|
+
["fix-permissions"],
|
|
34
|
+
["register", "--browser", "chrome"],
|
|
35
|
+
["doctor"],
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
for (let i = 0; i < steps.length; i++) {
|
|
39
|
+
const args = steps[i];
|
|
40
|
+
const isLast = i === steps.length - 1;
|
|
41
|
+
if (isLast) console.log(`\n[${i + 1}/${steps.length}] ${args.join(" ")}`);
|
|
42
|
+
execFileSync("node", [cliPath, ...args], { stdio: isLast ? "inherit" : "pipe" });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
console.log("\nChrome MCP setup complete!");
|
|
46
|
+
}
|
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Download ripgrep binary from GitHub releases.
|
|
3
|
-
*
|
|
4
|
-
* Run automatically via `bun install` (postinstall hook),
|
|
5
|
-
* or manually: `bun run scripts/download-ripgrep.ts [--force]`
|
|
6
|
-
*
|
|
7
|
-
* Idempotent — skips download if the binary already exists.
|
|
8
|
-
* Use --force to re-download.
|
|
9
|
-
*
|
|
10
|
-
* Environment:
|
|
11
|
-
* - HTTPS_PROXY / HTTP_PROXY — when set, download uses `undici` + EnvHttpProxyAgent.
|
|
12
|
-
* - RIPGREP_DOWNLOAD_BASE — override release URL prefix, e.g. mirror:
|
|
13
|
-
* `https://ghproxy.net/https://github.com/microsoft/ripgrep-prebuilt/releases/download/v15.0.1`
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, statSync } from 'fs'
|
|
17
|
-
import { setDefaultResultOrder } from 'node:dns'
|
|
18
|
-
import { tmpdir } from 'os'
|
|
19
|
-
import { chmodSync } from 'fs'
|
|
20
|
-
import { spawnSync } from 'child_process'
|
|
21
|
-
import * as path from 'path'
|
|
22
|
-
import { fileURLToPath } from 'url'
|
|
23
|
-
|
|
24
|
-
const __filename = fileURLToPath(import.meta.url)
|
|
25
|
-
const __dirname = path.dirname(__filename)
|
|
26
|
-
|
|
27
|
-
// Prefer IPv4 first — Bun on Windows sometimes fails GitHub over broken IPv6 paths.
|
|
28
|
-
try {
|
|
29
|
-
setDefaultResultOrder('ipv4first')
|
|
30
|
-
} catch {
|
|
31
|
-
/* ignore */
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const RG_VERSION = '15.0.1'
|
|
35
|
-
const DEFAULT_RELEASE_BASE = `https://github.com/microsoft/ripgrep-prebuilt/releases/download/v${RG_VERSION}`
|
|
36
|
-
const RELEASE_BASE = (process.env.RIPGREP_DOWNLOAD_BASE ?? DEFAULT_RELEASE_BASE).replace(/\/$/, '')
|
|
37
|
-
|
|
38
|
-
// --- Platform mapping ---
|
|
39
|
-
|
|
40
|
-
type PlatformMapping = {
|
|
41
|
-
target: string
|
|
42
|
-
ext: 'tar.gz' | 'zip'
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function getPlatformMapping(): PlatformMapping {
|
|
46
|
-
const arch = process.arch
|
|
47
|
-
const platform = process.platform
|
|
48
|
-
|
|
49
|
-
if (platform === 'darwin') {
|
|
50
|
-
if (arch === 'arm64') return { target: 'aarch64-apple-darwin', ext: 'tar.gz' }
|
|
51
|
-
if (arch === 'x64') return { target: 'x86_64-apple-darwin', ext: 'tar.gz' }
|
|
52
|
-
throw new Error(`Unsupported macOS arch: ${arch}`)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (platform === 'win32') {
|
|
56
|
-
if (arch === 'x64') return { target: 'x86_64-pc-windows-msvc', ext: 'zip' }
|
|
57
|
-
if (arch === 'arm64') return { target: 'aarch64-pc-windows-msvc', ext: 'zip' }
|
|
58
|
-
throw new Error(`Unsupported Windows arch: ${arch}`)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (platform === 'linux') {
|
|
62
|
-
const isMusl = detectMusl()
|
|
63
|
-
if (arch === 'x64') {
|
|
64
|
-
// x64 Linux always uses musl (statically linked, most portable)
|
|
65
|
-
return { target: 'x86_64-unknown-linux-musl', ext: 'tar.gz' }
|
|
66
|
-
}
|
|
67
|
-
if (arch === 'arm64') {
|
|
68
|
-
return isMusl
|
|
69
|
-
? { target: 'aarch64-unknown-linux-musl', ext: 'tar.gz' }
|
|
70
|
-
: { target: 'aarch64-unknown-linux-gnu', ext: 'tar.gz' }
|
|
71
|
-
}
|
|
72
|
-
throw new Error(`Unsupported Linux arch: ${arch}`)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
throw new Error(`Unsupported platform: ${platform}`)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function detectMusl(): boolean {
|
|
79
|
-
const muslArch = process.arch === 'x64' ? 'x86_64' : 'aarch64'
|
|
80
|
-
try {
|
|
81
|
-
statSync(`/lib/libc.musl-${muslArch}.so.1`)
|
|
82
|
-
return true
|
|
83
|
-
} catch {
|
|
84
|
-
return false
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// --- Target vendor path (must match ripgrep.ts logic) ---
|
|
89
|
-
|
|
90
|
-
function getVendorDir(): string {
|
|
91
|
-
const packageRoot = path.resolve(__dirname, '..')
|
|
92
|
-
|
|
93
|
-
// Dev mode: package root has src/ directory
|
|
94
|
-
// ripgrep.ts at src/utils/ripgrep.ts: __dirname = src/utils/
|
|
95
|
-
// vendor path = src/utils/vendor/ripgrep/
|
|
96
|
-
if (existsSync(path.join(packageRoot, 'src'))) {
|
|
97
|
-
return path.resolve(packageRoot, 'src', 'utils', 'vendor', 'ripgrep')
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Published mode: compiled chunks are flat in dist/
|
|
101
|
-
// ripgrep chunk at dist/xxxx.js: __dirname = dist/
|
|
102
|
-
// vendor path = dist/vendor/ripgrep/
|
|
103
|
-
return path.resolve(packageRoot, 'dist', 'vendor', 'ripgrep')
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function getBinaryPath(): string {
|
|
107
|
-
const dir = getVendorDir()
|
|
108
|
-
const subdir = `${process.arch}-${process.platform}`
|
|
109
|
-
const binary = process.platform === 'win32' ? 'rg.exe' : 'rg'
|
|
110
|
-
return path.resolve(dir, subdir, binary)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// --- Download & extract ---
|
|
114
|
-
|
|
115
|
-
function proxyEnvSet(): boolean {
|
|
116
|
-
const v = (s: string | undefined) => (s ?? '').trim()
|
|
117
|
-
return !!(
|
|
118
|
-
v(process.env.HTTPS_PROXY) ||
|
|
119
|
-
v(process.env.HTTP_PROXY) ||
|
|
120
|
-
v(process.env.ALL_PROXY) ||
|
|
121
|
-
v(process.env.https_proxy) ||
|
|
122
|
-
v(process.env.http_proxy)
|
|
123
|
-
)
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
async function fetchRelease(url: string): Promise<Response> {
|
|
127
|
-
if (proxyEnvSet()) {
|
|
128
|
-
const { EnvHttpProxyAgent, fetch: undiciFetch } = await import('undici')
|
|
129
|
-
return (await undiciFetch(url, {
|
|
130
|
-
redirect: 'follow',
|
|
131
|
-
dispatcher: new EnvHttpProxyAgent(),
|
|
132
|
-
})) as unknown as Response
|
|
133
|
-
}
|
|
134
|
-
return await fetch(url, { redirect: 'follow' })
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
function tryPowerShellDownload(url: string, dest: string): boolean {
|
|
138
|
-
const u = url.replace(/'/g, "''")
|
|
139
|
-
const d = dest.replace(/'/g, "''")
|
|
140
|
-
const cmd = `Invoke-WebRequest -Uri '${u}' -OutFile '${d}' -UseBasicParsing`
|
|
141
|
-
const result = spawnSync(
|
|
142
|
-
'powershell.exe',
|
|
143
|
-
['-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-Command', cmd],
|
|
144
|
-
{ stdio: 'pipe', windowsHide: true },
|
|
145
|
-
)
|
|
146
|
-
return result.status === 0 && existsSync(dest) && statSync(dest).size > 0
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
function tryCurlDownload(url: string, dest: string): boolean {
|
|
150
|
-
const curl = process.platform === 'win32' ? 'curl.exe' : 'curl'
|
|
151
|
-
const result = spawnSync(curl, ['-fsSL', '-L', '--fail', '-o', dest, url], {
|
|
152
|
-
stdio: 'pipe',
|
|
153
|
-
windowsHide: true,
|
|
154
|
-
})
|
|
155
|
-
return result.status === 0 && existsSync(dest) && statSync(dest).size > 0
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/** Bun `fetch` on Windows can fail while browser / WinINET still works — use subprocess fallbacks. */
|
|
159
|
-
async function downloadUrlToBuffer(url: string): Promise<Buffer> {
|
|
160
|
-
const response = await fetchRelease(url)
|
|
161
|
-
if (!response.ok) {
|
|
162
|
-
throw new Error(`Download failed: ${response.status} ${response.statusText}`)
|
|
163
|
-
}
|
|
164
|
-
return Buffer.from(await response.arrayBuffer())
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
async function downloadUrlToBufferWithFallback(url: string): Promise<Buffer> {
|
|
168
|
-
let firstError: unknown
|
|
169
|
-
try {
|
|
170
|
-
return await downloadUrlToBuffer(url)
|
|
171
|
-
} catch (e) {
|
|
172
|
-
firstError = e
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const tmpRoot = path.join(tmpdir(), `ripgrep-dl-${process.pid}-${Date.now()}`)
|
|
176
|
-
const tmpFile = path.join(tmpRoot, 'archive')
|
|
177
|
-
mkdirSync(tmpRoot, { recursive: true })
|
|
178
|
-
try {
|
|
179
|
-
if (process.platform === 'win32' && tryPowerShellDownload(url, tmpFile)) {
|
|
180
|
-
return readFileSync(tmpFile)
|
|
181
|
-
}
|
|
182
|
-
if (tryCurlDownload(url, tmpFile)) {
|
|
183
|
-
return readFileSync(tmpFile)
|
|
184
|
-
}
|
|
185
|
-
} finally {
|
|
186
|
-
rmSync(tmpRoot, { recursive: true, force: true })
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
throw firstError
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
function findZipEntryKey(files: Record<string, Uint8Array>, want: string): string | undefined {
|
|
193
|
-
return Object.keys(files).find(k => {
|
|
194
|
-
const norm = k.replace(/\\/g, '/')
|
|
195
|
-
return norm === want || norm.endsWith(`/${want}`)
|
|
196
|
-
})
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
async function downloadAndExtract(): Promise<void> {
|
|
200
|
-
const { target, ext } = getPlatformMapping()
|
|
201
|
-
const assetName = `ripgrep-v${RG_VERSION}-${target}.${ext}`
|
|
202
|
-
const downloadUrl = `${RELEASE_BASE}/${assetName}`
|
|
203
|
-
|
|
204
|
-
const binaryPath = getBinaryPath()
|
|
205
|
-
const binaryDir = path.dirname(binaryPath)
|
|
206
|
-
|
|
207
|
-
// Idempotent: skip if binary exists and has content
|
|
208
|
-
const force = process.argv.includes('--force')
|
|
209
|
-
if (!force && existsSync(binaryPath)) {
|
|
210
|
-
const stat = statSync(binaryPath)
|
|
211
|
-
if (stat.size > 0) {
|
|
212
|
-
console.log(`[ripgrep] Binary already exists at ${binaryPath}, skipping.`)
|
|
213
|
-
return
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
console.log(`[ripgrep] Downloading v${RG_VERSION} for ${target}...`)
|
|
218
|
-
console.log(`[ripgrep] URL: ${downloadUrl}`)
|
|
219
|
-
|
|
220
|
-
const extractedBinary = process.platform === 'win32' ? 'rg.exe' : 'rg'
|
|
221
|
-
const { writeFileSync } = await import('fs')
|
|
222
|
-
|
|
223
|
-
try {
|
|
224
|
-
const buffer = await downloadUrlToBufferWithFallback(downloadUrl)
|
|
225
|
-
console.log(`[ripgrep] Downloaded ${Math.round(buffer.length / 1024)} KB`)
|
|
226
|
-
|
|
227
|
-
mkdirSync(binaryDir, { recursive: true })
|
|
228
|
-
|
|
229
|
-
if (ext === 'tar.gz') {
|
|
230
|
-
const tmpDir = path.join(binaryDir, '.tmp-download')
|
|
231
|
-
rmSync(tmpDir, { recursive: true, force: true })
|
|
232
|
-
mkdirSync(tmpDir, { recursive: true })
|
|
233
|
-
try {
|
|
234
|
-
const archivePath = path.join(tmpDir, assetName)
|
|
235
|
-
writeFileSync(archivePath, buffer)
|
|
236
|
-
const result = spawnSync('tar', ['xzf', archivePath, '-C', tmpDir], {
|
|
237
|
-
stdio: 'pipe',
|
|
238
|
-
})
|
|
239
|
-
if (result.status !== 0) {
|
|
240
|
-
throw new Error(`tar extract failed: ${result.stderr?.toString()}`)
|
|
241
|
-
}
|
|
242
|
-
const srcBinary = path.join(tmpDir, extractedBinary)
|
|
243
|
-
if (!existsSync(srcBinary)) {
|
|
244
|
-
throw new Error(`Binary not found at expected path: ${srcBinary}`)
|
|
245
|
-
}
|
|
246
|
-
renameSync(srcBinary, binaryPath)
|
|
247
|
-
} finally {
|
|
248
|
-
rmSync(tmpDir, { recursive: true, force: true })
|
|
249
|
-
}
|
|
250
|
-
} else {
|
|
251
|
-
let fflateError: unknown
|
|
252
|
-
try {
|
|
253
|
-
const { unzipSync } = await import('fflate')
|
|
254
|
-
const unzipped = unzipSync(new Uint8Array(buffer))
|
|
255
|
-
const key = findZipEntryKey(unzipped, extractedBinary)
|
|
256
|
-
if (!key) {
|
|
257
|
-
throw new Error(`Binary ${extractedBinary} not found in zip`)
|
|
258
|
-
}
|
|
259
|
-
writeFileSync(binaryPath, Buffer.from(unzipped[key]))
|
|
260
|
-
fflateError = undefined
|
|
261
|
-
} catch (e) {
|
|
262
|
-
fflateError = e
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
if (fflateError) {
|
|
266
|
-
// fflate failed — try PowerShell Expand-Archive on Windows, then unzip CLI
|
|
267
|
-
const tmpDir = path.join(binaryDir, '.tmp-download')
|
|
268
|
-
rmSync(tmpDir, { recursive: true, force: true })
|
|
269
|
-
mkdirSync(tmpDir, { recursive: true })
|
|
270
|
-
try {
|
|
271
|
-
const archivePath = path.join(tmpDir, assetName)
|
|
272
|
-
writeFileSync(archivePath, buffer)
|
|
273
|
-
|
|
274
|
-
let extracted = false
|
|
275
|
-
|
|
276
|
-
// On Windows, prefer PowerShell Expand-Archive
|
|
277
|
-
if (process.platform === 'win32') {
|
|
278
|
-
const psCmd = `Expand-Archive -Path '${archivePath.replace(/'/g, "''")}' -DestinationPath '${tmpDir.replace(/'/g, "''")}' -Force`
|
|
279
|
-
const psResult = spawnSync(
|
|
280
|
-
'powershell.exe',
|
|
281
|
-
['-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-Command', psCmd],
|
|
282
|
-
{ stdio: 'pipe', windowsHide: true },
|
|
283
|
-
)
|
|
284
|
-
if (psResult.status === 0) {
|
|
285
|
-
extracted = true
|
|
286
|
-
} else {
|
|
287
|
-
const psErr = psResult.stderr?.toString().trim() || 'unknown error'
|
|
288
|
-
console.log(`[ripgrep] PowerShell Expand-Archive failed: ${psErr}`)
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// Fallback: unzip CLI (Git for Windows, MSYS2, or Unix)
|
|
293
|
-
if (!extracted) {
|
|
294
|
-
const result = spawnSync('unzip', ['-o', archivePath, '-d', tmpDir], {
|
|
295
|
-
stdio: 'pipe',
|
|
296
|
-
})
|
|
297
|
-
if (result.status !== 0) {
|
|
298
|
-
const unzipErr = result.stderr?.toString().trim() || 'command not found'
|
|
299
|
-
const fflateMsg = fflateError instanceof Error ? fflateError.message : String(fflateError)
|
|
300
|
-
throw new Error(`zip extraction failed (fflate: ${fflateMsg}; unzip: ${unzipErr})`)
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
const srcBinary = path.join(tmpDir, extractedBinary)
|
|
305
|
-
if (!existsSync(srcBinary)) {
|
|
306
|
-
throw new Error(`Binary not found at expected path: ${srcBinary}`)
|
|
307
|
-
}
|
|
308
|
-
renameSync(srcBinary, binaryPath)
|
|
309
|
-
} finally {
|
|
310
|
-
rmSync(tmpDir, { recursive: true, force: true })
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
if (process.platform !== 'win32') {
|
|
316
|
-
chmodSync(binaryPath, 0o755)
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
console.log(`[ripgrep] Installed to ${binaryPath}`)
|
|
320
|
-
} catch (e) {
|
|
321
|
-
const msg = e instanceof Error ? e.message : String(e)
|
|
322
|
-
const hint =
|
|
323
|
-
'Check network or set HTTPS_PROXY. If GitHub is blocked, set RIPGREP_DOWNLOAD_BASE to a mirror (see script header).'
|
|
324
|
-
throw new Error(`${msg} ${hint}`)
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
// --- Main ---
|
|
329
|
-
|
|
330
|
-
downloadAndExtract().catch(error => {
|
|
331
|
-
console.error(`[ripgrep] Download failed: ${error.message}`)
|
|
332
|
-
console.error(`[ripgrep] You can install ripgrep manually: https://github.com/BurntSushi/ripgrep#installation`)
|
|
333
|
-
// Don't exit with error code — postinstall should not break bun install
|
|
334
|
-
process.exit(0)
|
|
335
|
-
})
|