@opencode/core 2.0.25 → 2.0.27
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/account/sql.js +1 -1
- package/dist/agent.js +83 -82
- package/dist/aisdk-native.js +91 -90
- package/dist/aisdk.js +96 -95
- package/dist/app.js +5 -5
- package/dist/bus.js +75 -74
- package/dist/chunks/{variant-xa9kyh0s.js → filesystem-05zcap53.js} +11 -11
- package/dist/chunks/{variant-3g8j9he4.js → filesystem-075nkgpd.js} +1 -1
- package/dist/chunks/{variant-bgs9y14h.js → filesystem-0dfv01xh.js} +5 -5
- package/dist/chunks/{variant-qgn6gcr1.js → filesystem-0jwsre1p.js} +5 -5
- package/dist/chunks/{variant-8aa1p7b5.js → filesystem-0jz028se.js} +24 -24
- package/dist/chunks/{variant-fn04q5tb.js → filesystem-0nqtnax1.js} +22 -22
- package/dist/chunks/{variant-0paq2nw3.js → filesystem-0paq2nw3.js} +1 -1
- package/dist/chunks/{variant-gm3ga81k.js → filesystem-0rj8zrsn.js} +18 -18
- package/dist/chunks/{variant-0vbcp93d.js → filesystem-0vbcp93d.js} +2 -2
- package/dist/chunks/{variant-nv777kha.js → filesystem-17ahada2.js} +32 -32
- package/dist/chunks/{variant-rhraev7y.js → filesystem-1acjjqhc.js} +4 -4
- package/dist/chunks/{variant-1ygqh575.js → filesystem-1ffvrpkg.js} +7 -7
- package/dist/chunks/{variant-pppey5qj.js → filesystem-1k1hwgxp.js} +40 -32
- package/dist/chunks/{variant-z1fxcg55.js → filesystem-1pdq80h1.js} +5 -5
- package/dist/chunks/{variant-p83wwthj.js → filesystem-277mr6gh.js} +7 -4
- package/dist/chunks/{variant-wj82z3q3.js → filesystem-28b6phvf.js} +5 -5
- package/dist/chunks/{variant-7nbd6e42.js → filesystem-28mv0yws.js} +18 -18
- package/dist/chunks/{variant-fxgpk5d8.js → filesystem-2bv980vf.js} +2 -2
- package/dist/chunks/{variant-74d5t6nd.js → filesystem-2q2afj7r.js} +26 -26
- package/dist/chunks/{variant-1h07amyp.js → filesystem-2r4m1mbx.js} +31 -31
- package/dist/chunks/filesystem-2r93mh4x.js +804 -0
- package/dist/chunks/{variant-5t3nmthw.js → filesystem-2vvh33eb.js} +3 -3
- package/dist/chunks/{variant-6jjgb46x.js → filesystem-30hpp6bd.js} +43 -35
- package/dist/chunks/{variant-xkntkrq7.js → filesystem-31xfzrxg.js} +8 -7
- package/dist/chunks/{variant-xa33mv3d.js → filesystem-3c7k6cm5.js} +7 -7
- package/dist/chunks/{variant-m8ke4caa.js → filesystem-3dreg0vn.js} +11 -11
- package/dist/chunks/{variant-3fc6dm20.js → filesystem-3fc6dm20.js} +1 -1
- package/dist/chunks/{variant-bg4pcaf0.js → filesystem-3fm12cj0.js} +10 -19
- package/dist/chunks/{variant-3hepkmqq.js → filesystem-3hepkmqq.js} +1 -1
- package/dist/chunks/{variant-b6gygkdw.js → filesystem-3hwn7j4h.js} +5 -5
- package/dist/chunks/{variant-3smtnn6g.js → filesystem-3smtnn6g.js} +1 -1
- package/dist/chunks/{variant-3tvqynh2.js → filesystem-3tvqynh2.js} +1 -1
- package/dist/chunks/{variant-n5mbdfqn.js → filesystem-3xq304at.js} +24 -24
- package/dist/chunks/{variant-7sbksatv.js → filesystem-3y40vn7b.js} +1 -1
- package/dist/chunks/{variant-3zsf4n22.js → filesystem-3zsf4n22.js} +1 -1
- package/dist/chunks/{variant-c4y3ge1t.js → filesystem-40hy4nm0.js} +7 -9
- package/dist/chunks/{variant-29qym6xz.js → filesystem-41czef58.js} +4 -4
- package/dist/chunks/{variant-02yyzjed.js → filesystem-42nthewb.js} +14 -14
- package/dist/chunks/{variant-2rehhz5t.js → filesystem-43fay8tn.js} +11 -11
- package/dist/chunks/{variant-1x2vtrrc.js → filesystem-45gnhb3v.js} +27 -27
- package/dist/chunks/filesystem-45th5jwr.js +18 -0
- package/dist/chunks/{variant-qy4vpyeb.js → filesystem-4dd6559a.js} +33 -33
- package/dist/chunks/{variant-4ts7tf6z.js → filesystem-4ts7tf6z.js} +2 -2
- package/dist/chunks/{variant-gs3s1a1g.js → filesystem-4w5f3qm5.js} +8 -8
- package/dist/chunks/{variant-qhpxdxn6.js → filesystem-4yh5fkek.js} +38 -38
- package/dist/chunks/{variant-sjsrxvhe.js → filesystem-517r2k0v.js} +12 -12
- package/dist/chunks/{variant-mgbygx5e.js → filesystem-52fe2n6x.js} +8 -8
- package/dist/chunks/{variant-pz8vp5s8.js → filesystem-52hym6es.js} +41 -41
- package/dist/chunks/{variant-54ma36ye.js → filesystem-54ma36ye.js} +1 -1
- package/dist/chunks/{variant-my4zabxr.js → filesystem-58072hz9.js} +3 -3
- package/dist/chunks/{variant-13ffgj4a.js → filesystem-58rgv5ce.js} +32 -32
- package/dist/chunks/{variant-5m9w47nd.js → filesystem-5m9w47nd.js} +1 -1
- package/dist/chunks/{variant-g0445xdp.js → filesystem-5yzzbxa7.js} +8 -8
- package/dist/chunks/{variant-4p4e40p5.js → filesystem-628cnxdp.js} +25 -25
- package/dist/chunks/{variant-gxzxndj0.js → filesystem-6ea2fwcg.js} +6 -6
- package/dist/chunks/{variant-t6vsspdg.js → filesystem-6hh8tjw2.js} +7 -7
- package/dist/chunks/{variant-prq7hedt.js → filesystem-6hjx5zpb.js} +9 -9
- package/dist/chunks/{variant-qjeq5gt4.js → filesystem-6p6bhjzq.js} +13 -13
- package/dist/chunks/{variant-py3kkmfq.js → filesystem-6pc27hjz.js} +6 -6
- package/dist/chunks/{variant-7hqrfg83.js → filesystem-6s1gmk25.js} +22 -22
- package/dist/chunks/{variant-6xb47vfp.js → filesystem-6xb47vfp.js} +1 -1
- package/dist/chunks/{variant-qdfmac3b.js → filesystem-6yajptbt.js} +1 -1
- package/dist/chunks/{variant-6knrp48h.js → filesystem-75czp452.js} +11 -11
- package/dist/chunks/{variant-27cddewx.js → filesystem-75yaxqej.js} +28 -28
- package/dist/chunks/{variant-7bmhse3q.js → filesystem-7bmhse3q.js} +1 -1
- package/dist/chunks/{variant-xjhy8ajq.js → filesystem-7nranytg.js} +22 -22
- package/dist/chunks/{variant-p1knbw1p.js → filesystem-7qtbp6f0.js} +17 -17
- package/dist/chunks/{variant-2nbt55tc.js → filesystem-7t7k8w74.js} +9 -9
- package/dist/chunks/{variant-n49rxvzx.js → filesystem-7wwt250p.js} +93 -93
- package/dist/chunks/{variant-84txncab.js → filesystem-84txncab.js} +1 -1
- package/dist/chunks/{variant-6adhvgr3.js → filesystem-85yr590m.js} +36 -35
- package/dist/chunks/{variant-fzjbfm8r.js → filesystem-8679j8d8.js} +13 -13
- package/dist/chunks/{variant-tcezcvh9.js → filesystem-89znhe33.js} +4 -4
- package/dist/chunks/{variant-8m6m0r52.js → filesystem-8m6m0r52.js} +1 -1
- package/dist/chunks/{variant-1fhrtjm6.js → filesystem-8p91w73h.js} +10 -10
- package/dist/chunks/{variant-dr8qfpz2.js → filesystem-8r0rjxx3.js} +58 -58
- package/dist/chunks/{variant-cf0t0sq2.js → filesystem-8w54sq4a.js} +25 -25
- package/dist/chunks/{variant-qq77mc7s.js → filesystem-8wps0r52.js} +16 -16
- package/dist/chunks/{variant-x22hsb2q.js → filesystem-8y0srtbm.js} +42 -42
- package/dist/chunks/{variant-qxjc9qry.js → filesystem-91qna3x0.js} +3 -3
- package/dist/chunks/{variant-vdva6mjj.js → filesystem-92hybt7t.js} +26 -13
- package/dist/chunks/filesystem-97aeaand.js +31 -0
- package/dist/chunks/{variant-fhz5gfgy.js → filesystem-9bbnj2zh.js} +5 -5
- package/dist/chunks/{variant-wncc9x2v.js → filesystem-9zg8t2tr.js} +46 -37
- package/dist/chunks/{variant-1gpb38yh.js → filesystem-9zhh23v8.js} +3 -3
- package/dist/chunks/{variant-452vf9ez.js → filesystem-a1fpssew.js} +52 -48
- package/dist/chunks/{variant-amhyrjtc.js → filesystem-a7x960be.js} +15 -15
- package/dist/chunks/{variant-4m7gr2sz.js → filesystem-a812m1sc.js} +10 -10
- package/dist/chunks/{variant-eahhehpg.js → filesystem-a89e0tac.js} +4 -4
- package/dist/chunks/{variant-addxnjmp.js → filesystem-addxnjmp.js} +1 -1
- package/dist/chunks/{variant-g9v6bhk7.js → filesystem-ae5sdhnp.js} +30 -30
- package/dist/chunks/{variant-x6g6krdm.js → filesystem-amjhxwh3.js} +4 -4
- package/dist/chunks/{variant-r9jvjj2n.js → filesystem-avya17qh.js} +29 -24
- package/dist/chunks/{variant-b3f8fkhc.js → filesystem-b3f8fkhc.js} +2 -2
- package/dist/chunks/{variant-0bwnrbmb.js → filesystem-b674v2dg.js} +5 -5
- package/dist/chunks/{variant-5nzezdf7.js → filesystem-b6pj8f6d.js} +16 -16
- package/dist/chunks/{variant-vtt0yr3x.js → filesystem-bddt2pqj.js} +12 -12
- package/dist/chunks/{variant-30krspkn.js → filesystem-bhzg07mw.js} +95 -6
- package/dist/chunks/filesystem-bw78ga2c.js +13 -0
- package/dist/chunks/{variant-9z2y94hd.js → filesystem-bwds47ca.js} +3 -3
- package/dist/chunks/{variant-9e5bzkjp.js → filesystem-c1fqxshp.js} +3 -3
- package/dist/chunks/{variant-n1n192bv.js → filesystem-c35597j6.js} +4 -4
- package/dist/chunks/{variant-g2w01a3j.js → filesystem-cd22zj3n.js} +16 -16
- package/dist/chunks/{variant-8pmm23xh.js → filesystem-cfrzcmt6.js} +32 -32
- package/dist/chunks/{variant-1j2s48r7.js → filesystem-chn727mr.js} +8 -8
- package/dist/chunks/{variant-18zb0skh.js → filesystem-cjgcse4q.js} +3 -3
- package/dist/chunks/{variant-61btxmby.js → filesystem-cmdzq1er.js} +30 -30
- package/dist/chunks/{variant-3hfcgw97.js → filesystem-cp3h7zv6.js} +12 -12
- package/dist/chunks/{variant-qmqydgm0.js → filesystem-cztcbjsk.js} +48 -47
- package/dist/chunks/{variant-yyet1bp6.js → filesystem-d6jv500s.js} +5 -5
- package/dist/chunks/{variant-nyh253sr.js → filesystem-d9xsbmzv.js} +11 -11
- package/dist/chunks/{variant-xa75nvv1.js → filesystem-ddg7egp8.js} +14 -14
- package/dist/chunks/{variant-pjgg3r7a.js → filesystem-dmn46mqv.js} +24 -24
- package/dist/chunks/{variant-xfkkasph.js → filesystem-drwq78ky.js} +4 -4
- package/dist/chunks/{variant-4s3kxd3m.js → filesystem-dwatz751.js} +4 -4
- package/dist/chunks/{variant-93ygb5af.js → filesystem-dzse07y5.js} +6 -6
- package/dist/chunks/{variant-3bz51e45.js → filesystem-e6f2cxsr.js} +16 -16
- package/dist/chunks/{variant-2r25bgdf.js → filesystem-e77w7m4c.js} +15 -15
- package/dist/chunks/{variant-nm57fktp.js → filesystem-e850ppb0.js} +1 -1
- package/dist/chunks/{variant-ey895da0.js → filesystem-eaednpsc.js} +19 -19
- package/dist/chunks/{variant-h1qkrmwx.js → filesystem-edp2jp4p.js} +4 -4
- package/dist/chunks/{variant-1dazxqgg.js → filesystem-eej6y6fw.js} +6 -6
- package/dist/chunks/{variant-ef5x83kb.js → filesystem-ef5x83kb.js} +1 -1
- package/dist/chunks/{variant-k57jac8p.js → filesystem-egftk3gc.js} +11 -11
- package/dist/chunks/{variant-g1w795vw.js → filesystem-fs4v6yja.js} +11 -11
- package/dist/chunks/{variant-qz0t4qm7.js → filesystem-g18ezh2c.js} +24 -24
- package/dist/chunks/filesystem-g4vk7v1j.js +253 -0
- package/dist/chunks/{variant-t968jqya.js → filesystem-g6kk69s6.js} +9 -9
- package/dist/chunks/{variant-vrrq7v3g.js → filesystem-g6yfr6ja.js} +5 -5
- package/dist/chunks/{variant-rc8pxfxs.js → filesystem-g8xm47b4.js} +11 -11
- package/dist/chunks/{variant-sza3fptc.js → filesystem-gacw69ge.js} +7 -7
- package/dist/chunks/{variant-k98qre1b.js → filesystem-gbtkprqj.js} +47 -47
- package/dist/chunks/{variant-drnf6xwf.js → filesystem-gccjnz6h.js} +2 -2
- package/dist/chunks/{variant-gd4qta3r.js → filesystem-gd4qta3r.js} +1 -1
- package/dist/chunks/{variant-8a6ws7jr.js → filesystem-gdq97084.js} +10 -10
- package/dist/chunks/filesystem-ge3tf0hw.js +94 -0
- package/dist/chunks/{variant-vhqj0s9d.js → filesystem-gjacmpd0.js} +9 -9
- package/dist/chunks/{variant-8d7r5vzw.js → filesystem-gk8qb678.js} +4 -4
- package/dist/chunks/{variant-ze98vkjw.js → filesystem-gp94me86.js} +10 -10
- package/dist/chunks/{variant-06r90ppk.js → filesystem-gteqr3kb.js} +11 -11
- package/dist/chunks/{variant-yj12ce45.js → filesystem-gty1xwv8.js} +26 -26
- package/dist/chunks/{variant-397njdte.js → filesystem-gvc0m829.js} +24 -24
- package/dist/chunks/{variant-8hg3mrb3.js → filesystem-h0s8229g.js} +14 -14
- package/dist/chunks/{variant-ytxvdrv4.js → filesystem-h18kbg2g.js} +25 -25
- package/dist/chunks/{variant-zy36ej5j.js → filesystem-h3s3f80v.js} +5 -5
- package/dist/chunks/{variant-h6vf3j39.js → filesystem-h6vf3j39.js} +1 -1
- package/dist/chunks/{variant-y7fv8ve9.js → filesystem-hbmg3jd1.js} +71 -71
- package/dist/chunks/{variant-qdr7jx6m.js → filesystem-hdckhky9.js} +10 -10
- package/dist/chunks/{variant-tcbv57ja.js → filesystem-hehj8e2f.js} +17 -17
- package/dist/chunks/{variant-fgsd6912.js → filesystem-hfx4ttpe.js} +12 -12
- package/dist/chunks/{variant-2a5m3afh.js → filesystem-hgz4x7wa.js} +4 -4
- package/dist/chunks/{variant-z5qfcjmc.js → filesystem-hh0yy80h.js} +5 -5
- package/dist/chunks/{variant-gjasn01h.js → filesystem-hhj1gqex.js} +4 -4
- package/dist/chunks/filesystem-hq3c8me3.js +22 -0
- package/dist/chunks/{variant-j56e64zr.js → filesystem-j56e64zr.js} +1 -1
- package/dist/chunks/{variant-v3etbtgk.js → filesystem-jcr0a5xm.js} +40 -40
- package/dist/chunks/{variant-7x1g6g7e.js → filesystem-jd655njr.js} +27 -27
- package/dist/chunks/{variant-5hxx4pyd.js → filesystem-jex0hdh0.js} +29 -29
- package/dist/chunks/{variant-06ednycw.js → filesystem-jh2bfv56.js} +20 -20
- package/dist/chunks/{variant-yt7zt18h.js → filesystem-jnzzg47p.js} +22 -22
- package/dist/chunks/filesystem-jq5272j9.js +170 -0
- package/dist/chunks/{variant-s57remap.js → filesystem-jtpxbk3r.js} +93 -93
- package/dist/chunks/{variant-y8cydn3q.js → filesystem-jze0r7bz.js} +3 -8
- package/dist/chunks/{variant-f73rjn58.js → filesystem-k76fn4kw.js} +4 -4
- package/dist/chunks/{variant-sxzvmjd7.js → filesystem-kc69xce9.js} +28 -16
- package/dist/chunks/{variant-1a37t69z.js → filesystem-kfxykwst.js} +10 -10
- package/dist/chunks/{variant-s0b7t9fd.js → filesystem-kqx1b4hy.js} +4 -4
- package/dist/chunks/{variant-h97ec9bp.js → filesystem-krjgrvpb.js} +8 -8
- package/dist/chunks/filesystem-m18g726c.js +13 -0
- package/dist/chunks/{variant-m9w0rfyh.js → filesystem-m9w0rfyh.js} +1 -1
- package/dist/chunks/{variant-zm31y1th.js → filesystem-ma9a1mz6.js} +14 -7
- package/dist/chunks/{variant-d5qg661p.js → filesystem-mh1qw9wf.js} +14 -14
- package/dist/chunks/{variant-v8gdyxxj.js → filesystem-mm2s9j4z.js} +8 -8
- package/dist/chunks/{variant-qez5g771.js → filesystem-mnav64s8.js} +13 -13
- package/dist/chunks/{variant-yt8edf6v.js → filesystem-mqbwmym3.js} +13 -13
- package/dist/chunks/{variant-bhkpa1rg.js → filesystem-n59f5cqe.js} +27 -27
- package/dist/chunks/{variant-5ygzbsd1.js → filesystem-n61013np.js} +16 -18
- package/dist/chunks/{variant-t4q1mmep.js → filesystem-nbhbhab9.js} +21 -20
- package/dist/chunks/{variant-4acq55hh.js → filesystem-ndz7w8hx.js} +22 -22
- package/dist/chunks/{variant-rhb3b3rg.js → filesystem-njatc343.js} +16 -16
- package/dist/chunks/{variant-wmhvad8c.js → filesystem-nmqm2vvz.js} +18 -18
- package/dist/chunks/{variant-9sk57pab.js → filesystem-nnbqx04f.js} +7 -7
- package/dist/chunks/{variant-nr7nt1j1.js → filesystem-nr11xpps.js} +26 -26
- package/dist/chunks/filesystem-nvjf5yyf.js +513 -0
- package/dist/chunks/{variant-dfdje5vc.js → filesystem-p03r7pt3.js} +10 -10
- package/dist/chunks/{variant-w3fw562n.js → filesystem-p4njbyer.js} +11 -11
- package/dist/chunks/{variant-pjvnvgmy.js → filesystem-pjvnvgmy.js} +1 -1
- package/dist/chunks/{variant-pknna89w.js → filesystem-pknna89w.js} +1 -1
- package/dist/chunks/{variant-34c7v6d4.js → filesystem-pkyv6v7h.js} +1 -0
- package/dist/chunks/{variant-nvwwg556.js → filesystem-psy0m90e.js} +16 -16
- package/dist/chunks/{variant-3w5fmr99.js → filesystem-pyv0edze.js} +8 -5
- package/dist/chunks/{variant-q0xm7vwc.js → filesystem-q0xm7vwc.js} +2 -2
- package/dist/chunks/{variant-1m9c4w4n.js → filesystem-q3kzbh51.js} +50 -50
- package/dist/chunks/{variant-2hpcj340.js → filesystem-qf68ybps.js} +22 -22
- package/dist/chunks/{variant-05a2ta09.js → filesystem-qjke1250.js} +61 -40
- package/dist/chunks/{variant-79qaa2kf.js → filesystem-qmqgtz8f.js} +9 -9
- package/dist/chunks/{variant-4es70h3r.js → filesystem-qmyze75f.js} +21 -21
- package/dist/chunks/{variant-qnc92qwc.js → filesystem-qnc92qwc.js} +1 -1
- package/dist/chunks/{variant-ra5kesbp.js → filesystem-qptcxqn9.js} +13 -13
- package/dist/chunks/{variant-c53d495w.js → filesystem-qr40m89d.js} +22 -22
- package/dist/chunks/{variant-qsdy395h.js → filesystem-qsdy395h.js} +1 -1
- package/dist/chunks/{variant-7mxeeg2g.js → filesystem-qwwffz8c.js} +13 -13
- package/dist/chunks/{variant-gy6j4848.js → filesystem-qz7nybpq.js} +15 -15
- package/dist/chunks/{variant-eq1pz5kg.js → filesystem-r2z489rp.js} +4 -4
- package/dist/chunks/{variant-wwbgt871.js → filesystem-r69zxgc9.js} +11 -11
- package/dist/chunks/{variant-rdw6cm16.js → filesystem-rdw6cm16.js} +1 -1
- package/dist/chunks/{variant-71az546q.js → filesystem-rert0e01.js} +2 -2
- package/dist/chunks/{variant-qzsdnpce.js → filesystem-rezt1fjs.js} +161 -161
- package/dist/chunks/{variant-rhjbct0v.js → filesystem-rhjbct0v.js} +1 -1
- package/dist/chunks/{variant-78xwejay.js → filesystem-rhjt4rsm.js} +5 -5
- package/dist/chunks/{variant-h2b79v29.js → filesystem-rj3eygr5.js} +3 -2
- package/dist/chunks/{variant-ahd542yp.js → filesystem-rzs3gq0x.js} +8 -8
- package/dist/chunks/{variant-6hcewhx6.js → filesystem-s3mqqn9k.js} +19 -19
- package/dist/chunks/{variant-1dvck2a7.js → filesystem-sa8ekw3f.js} +2 -2
- package/dist/chunks/{variant-568a5em1.js → filesystem-sb9d9eyx.js} +7 -7
- package/dist/chunks/{variant-fmxe4r4y.js → filesystem-shj64zqm.js} +9 -9
- package/dist/chunks/{variant-tafngdt4.js → filesystem-sy62yj56.js} +54 -50
- package/dist/chunks/{variant-m3fdjcah.js → filesystem-syv4x271.js} +3 -1
- package/dist/chunks/{variant-mrga4y2h.js → filesystem-t63kk2n9.js} +2 -2
- package/dist/chunks/{variant-tazgh4e4.js → filesystem-tazgh4e4.js} +1 -1
- package/dist/chunks/{variant-9bdjprtk.js → filesystem-tbqraact.js} +40 -40
- package/dist/chunks/{variant-tdstcens.js → filesystem-tdstcens.js} +1 -1
- package/dist/chunks/{variant-1eg5vsqb.js → filesystem-ted6dyzx.js} +41 -41
- package/dist/chunks/{variant-m9r1t6g4.js → filesystem-tjefdw4f.js} +18 -18
- package/dist/chunks/{variant-6s97e1y4.js → filesystem-tkfxpf5w.js} +13 -13
- package/dist/chunks/{variant-964qn63g.js → filesystem-tn22h724.js} +13 -13
- package/dist/chunks/{variant-st28f52c.js → filesystem-tx4skpae.js} +32 -32
- package/dist/chunks/{variant-etq0c3wd.js → filesystem-tyytaxap.js} +2 -2
- package/dist/chunks/{variant-v0es1rhs.js → filesystem-v0es1rhs.js} +2 -2
- package/dist/chunks/{variant-8a6z9e34.js → filesystem-v0t15ase.js} +4 -4
- package/dist/chunks/{variant-yrdak7p3.js → filesystem-v15nq2pf.js} +48 -48
- package/dist/chunks/{variant-er7m31zp.js → filesystem-v45b1mqa.js} +13 -13
- package/dist/chunks/{variant-ants6d3e.js → filesystem-v7gjr6wa.js} +49 -49
- package/dist/chunks/{variant-aaet6srn.js → filesystem-v7p4zvkq.js} +9 -9
- package/dist/chunks/{variant-wbdz0djz.js → filesystem-v7q8sg4f.js} +10 -10
- package/dist/chunks/{variant-68pftax3.js → filesystem-v9rcgtcn.js} +25 -25
- package/dist/chunks/{variant-3cmsdac1.js → filesystem-vc6ht4b9.js} +8 -8
- package/dist/chunks/{variant-9ya6mhzs.js → filesystem-vdfrtany.js} +16 -16
- package/dist/chunks/filesystem-ve7vex1e.js +13 -0
- package/dist/chunks/{variant-veqvce7d.js → filesystem-veqvce7d.js} +1 -1
- package/dist/chunks/{variant-0jt3mewy.js → filesystem-vfb4jdsz.js} +19 -19
- package/dist/chunks/{variant-9rrz4dkr.js → filesystem-vk5e0qsv.js} +11 -11
- package/dist/chunks/{variant-a34t0mpe.js → filesystem-vw56mdd2.js} +6 -6
- package/dist/chunks/{variant-vzs5sf6e.js → filesystem-vzs5sf6e.js} +1 -1
- package/dist/chunks/{variant-w3wsvvr9.js → filesystem-w3wsvvr9.js} +1 -1
- package/dist/chunks/{variant-c964e3b9.js → filesystem-w5j8pc94.js} +116 -38
- package/dist/chunks/{variant-71238w16.js → filesystem-w7mvh2x4.js} +15 -15
- package/dist/chunks/{variant-wd87259q.js → filesystem-wd87259q.js} +1 -1
- package/dist/chunks/{variant-77q2g51s.js → filesystem-wfk26c6d.js} +21 -21
- package/dist/chunks/{variant-16m3yhsa.js → filesystem-wn2vj619.js} +65 -35
- package/dist/chunks/{variant-tczag1pk.js → filesystem-wtsf8rdt.js} +21 -21
- package/dist/chunks/{variant-199h81f9.js → filesystem-wxetx7mh.js} +9 -9
- package/dist/chunks/{variant-49bhe2dh.js → filesystem-wz02ft3p.js} +13 -13
- package/dist/chunks/{variant-1dj608qj.js → filesystem-x2eytdts.js} +35 -35
- package/dist/chunks/{variant-mhng4ka2.js → filesystem-x2t9anc7.js} +27 -26
- package/dist/chunks/{variant-v5c0sq72.js → filesystem-x5s67ttw.js} +33 -33
- package/dist/chunks/{variant-f4emsg9g.js → filesystem-x5w8kc5x.js} +27 -27
- package/dist/chunks/{variant-5f219ejc.js → filesystem-x7xmxswz.js} +13 -13
- package/dist/chunks/{variant-wja9eyn5.js → filesystem-xpeshqab.js} +7 -14
- package/dist/chunks/{variant-nd1pxr6x.js → filesystem-xpk7egw8.js} +6 -6
- package/dist/chunks/{variant-neg622f9.js → filesystem-xq0502x8.js} +1 -1
- package/dist/chunks/{variant-x12m2wf0.js → filesystem-xtzs4z5v.js} +9 -5
- package/dist/chunks/{variant-wr410q8q.js → filesystem-xw91mmsj.js} +7 -7
- package/dist/chunks/{variant-qay45eb9.js → filesystem-xx66htzt.js} +37 -37
- package/dist/chunks/{variant-xdrba4jw.js → filesystem-y15vpdnr.js} +9 -9
- package/dist/chunks/{variant-y1fvbwt7.js → filesystem-y1fvbwt7.js} +1 -1
- package/dist/chunks/{variant-7efsjjwe.js → filesystem-y4861qag.js} +53 -53
- package/dist/chunks/{variant-dpkg50ah.js → filesystem-y71avatq.js} +4 -4
- package/dist/chunks/{variant-1kg0adek.js → filesystem-yj5krche.js} +14 -14
- package/dist/chunks/{variant-tyt8argr.js → filesystem-ykhp3ymj.js} +11 -11
- package/dist/chunks/{variant-gm5v31zk.js → filesystem-yyy8m62c.js} +20 -20
- package/dist/chunks/{variant-z0bkrqjs.js → filesystem-z0bkrqjs.js} +1 -1
- package/dist/chunks/{variant-br07cpn8.js → filesystem-z3pazvy2.js} +18 -18
- package/dist/chunks/{variant-e8pjc55s.js → filesystem-z5eh1vkz.js} +14 -14
- package/dist/chunks/{variant-c4g8b3d2.js → filesystem-zdbbxb0y.js} +6 -7
- package/dist/chunks/{variant-45tbjbdt.js → filesystem-zfgdk5x8.js} +43 -43
- package/dist/chunks/{variant-ydebc2ey.js → filesystem-zp2jr73m.js} +3 -3
- package/dist/chunks/{variant-w8fd2v8c.js → filesystem-zqpzmbkm.js} +13 -13
- package/dist/chunks/filesystem-zr1cpq3k.js +26 -0
- package/dist/chunks/{variant-zr2ceqn5.js → filesystem-zr2ceqn5.js} +1 -1
- package/dist/chunks/{variant-9z8hbw8m.js → filesystem-zsa8nsz8.js} +28 -28
- package/dist/chunks/{variant-wfvae1sy.js → filesystem-zxe4qb9c.js} +37 -29
- package/dist/chunks/{variant-zxq2ej10.js → filesystem-zxq2ej10.js} +1 -1
- package/dist/chunks/{variant-kwzc06gj.js → filesystem-zxy7mtkf.js} +35 -35
- package/dist/chunks/{variant-n2b4x48v.js → filesystem-zzbddhc6.js} +11 -11
- package/dist/codemode/catalog.js +1 -1
- package/dist/codemode/instructions.js +9 -9
- package/dist/codemode/tool.js +3 -3
- package/dist/codemode/web.js +1 -1
- package/dist/command.js +87 -86
- package/dist/config/discovery.js +86 -85
- package/dist/config/markdown.js +1 -1
- package/dist/config/normalize.js +101 -100
- package/dist/config/plugin/agent.js +118 -117
- package/dist/config/plugin/command.js +207 -206
- package/dist/config/plugin/compaction.js +156 -155
- package/dist/config/plugin/compatibility.js +136 -135
- package/dist/config/plugin/entry-observer.js +1 -1
- package/dist/config/plugin/formatter.js +119 -118
- package/dist/config/plugin/image.js +118 -117
- package/dist/config/plugin/instruction.js +92 -91
- package/dist/config/plugin/location-watcher.js +118 -117
- package/dist/config/plugin/mcp.js +125 -124
- package/dist/config/plugin/policy.js +119 -118
- package/dist/config/plugin/provider.js +118 -117
- package/dist/config/plugin/reference.js +120 -119
- package/dist/config/plugin/shell.js +120 -119
- package/dist/config/plugin/skill-file.js +104 -103
- package/dist/config/plugin/skill.js +139 -138
- package/dist/config/plugin/snapshot.js +118 -117
- package/dist/config/plugin/source.js +121 -120
- package/dist/config/plugin/tool-output.js +119 -118
- package/dist/config/plugin/websearch.js +119 -118
- package/dist/config/plugin/worktree.js +120 -119
- package/dist/config/variable.js +3 -3
- package/dist/config/watch.js +1 -1
- package/dist/config.js +121 -120
- package/dist/credential/sql.js +2 -2
- package/dist/credential.js +85 -84
- package/dist/database/database.js +74 -73
- package/dist/database/drizzle/effect-sqlite/driver.js +14 -14
- package/dist/database/drizzle/effect-sqlite/index.js +14 -14
- package/dist/database/drizzle/effect-sqlite/session.js +11 -11
- package/dist/database/drizzle/index.js +15 -15
- package/dist/database/drizzle/internal/drizzle-utils.js +1 -1
- package/dist/database/drizzle/sqlite-core/effect/count.js +1 -1
- package/dist/database/drizzle/sqlite-core/effect/db.js +9 -9
- package/dist/database/drizzle/sqlite-core/effect/delete.js +2 -2
- package/dist/database/drizzle/sqlite-core/effect/index.js +10 -10
- package/dist/database/drizzle/sqlite-core/effect/insert.js +2 -2
- package/dist/database/drizzle/sqlite-core/effect/query.js +1 -1
- package/dist/database/drizzle/sqlite-core/effect/raw.js +1 -1
- package/dist/database/drizzle/sqlite-core/effect/select.js +2 -2
- package/dist/database/drizzle/sqlite-core/effect/session.js +10 -10
- package/dist/database/drizzle/sqlite-core/effect/update.js +2 -2
- package/dist/database/drizzle.js +16 -16
- package/dist/database/migration/20260127222353_familiar_lady_ursula.js +1 -1
- package/dist/database/migration/20260211171708_add_project_commands.js +1 -1
- package/dist/database/migration/20260213144116_wakeful_the_professor.js +1 -1
- package/dist/database/migration/20260225215848_workspace.js +1 -1
- package/dist/database/migration/20260227213759_add_session_workspace_id.js +1 -1
- package/dist/database/migration/20260228203230_blue_harpoon.js +1 -1
- package/dist/database/migration/20260303231226_add_workspace_fields.js +1 -1
- package/dist/database/migration/20260309230000_move_org_to_state.js +1 -1
- package/dist/database/migration/20260312043431_session_message_cursor.js +1 -1
- package/dist/database/migration/20260323234822_events.js +1 -1
- package/dist/database/migration/20260410174513_workspace-name.js +1 -1
- package/dist/database/migration/20260413175956_chief_energizer.js +1 -1
- package/dist/database/migration/20260423070820_add_icon_url_override.js +1 -1
- package/dist/database/migration/20260427172553_slow_nightmare.js +1 -1
- package/dist/database/migration/20260428004200_add_session_path.js +1 -1
- package/dist/database/migration/20260501142318_next_venus.js +1 -1
- package/dist/database/migration/20260504145000_add_sync_owner.js +1 -1
- package/dist/database/migration/20260507164347_add_workspace_time.js +1 -1
- package/dist/database/migration/20260510033149_session_usage.js +1 -1
- package/dist/database/migration/20260511000411_data_migration_state.js +1 -1
- package/dist/database/migration/20260511173437_session-metadata.js +1 -1
- package/dist/database/migration/20260601010001_normalize_storage_paths.js +1 -1
- package/dist/database/migration/20260601202201_amazing_prowler.js +1 -1
- package/dist/database/migration/20260602002951_lowly_union_jack.js +1 -1
- package/dist/database/migration/20260602182828_add_project_directories.js +1 -1
- package/dist/database/migration/20260603001617_session_message_projection_indexes.js +1 -1
- package/dist/database/migration/20260603040000_session_message_projection_order.js +1 -1
- package/dist/database/migration/20260603141458_session_input_inbox.js +1 -1
- package/dist/database/migration/20260603160727_jittery_ezekiel_stane.js +1 -1
- package/dist/database/migration/20260604172448_event_sourced_session_input.js +1 -1
- package/dist/database/migration/20260605003541_add_session_context_snapshot.js +1 -1
- package/dist/database/migration/20260605042240_add_context_epoch_agent.js +1 -1
- package/dist/database/migration/20260611035744_credential.js +1 -1
- package/dist/database/migration/20260611192811_lush_chimera.js +1 -1
- package/dist/database/migration/20260612174303_project_dir_strategy.js +1 -1
- package/dist/database/migration/20260622142730_simplify_session_context_epoch.js +1 -1
- package/dist/database/migration/20260622170816_reset_v2_session_state.js +1 -1
- package/dist/database/migration/20260622202450_simplify_session_input.js +1 -1
- package/dist/database/migration/20260804233008_loose_psylocke.js +1 -1
- package/dist/database/migration/20260805200742_import_legacy_credentials.js +1 -1
- package/dist/database/migration/20260808023530_workspace_domain.js +1 -1
- package/dist/database/migration/20260811161259_execution_claim_attempts.js +1 -1
- package/dist/database/migration/20260812181746_session_inbox.js +1 -1
- package/dist/database/migration/20260812213948_worktree.js +1 -1
- package/dist/database/migration/20260819222447_session_viewed_state.js +1 -1
- package/dist/database/migration/20260823191254_nullable_workspace_binding.js +1 -1
- package/dist/database/migration/20260910120000_clear_v1_session_permission.js +1 -1
- package/dist/database/migration/20260923013825_project_time_active.js +1 -1
- package/dist/database/migration/20261007190000_azure_cli_external_credential.js +1 -1
- package/dist/database/migration/20261010180456_project_time_archived.js +6 -0
- package/dist/database/migration.gen.js +51 -50
- package/dist/database/migration.js +53 -52
- package/dist/database/path.js +2 -2
- package/dist/database/schema.gen.js +1 -1
- package/dist/database/schema.sql.js +1 -1
- package/dist/database/sqlite.bun.js +4 -4
- package/dist/database/sqlite.js +1 -1
- package/dist/database/sqlite.node.js +4 -4
- package/dist/database/sqlite.workerd.js +4 -4
- package/dist/database/v1-migration.bun.js +81 -80
- package/dist/database/v1-migration.js +1 -1
- package/dist/effect/app-node-builder.js +368 -364
- package/dist/effect/app-node-platform.js +2 -2
- package/dist/effect/keyed-mutex.js +3 -3
- package/dist/effect/websocket-constructor.js +1 -1
- package/dist/environment/driver.js +1 -1
- package/dist/environment/environment.js +95 -94
- package/dist/environment/exec-defaults.js +2 -2
- package/dist/environment/files.js +3 -3
- package/dist/environment/index.js +99 -98
- package/dist/environment/local.js +2 -2
- package/dist/environment/memory.js +2 -2
- package/dist/environment/unavailable.js +6 -21
- package/dist/event/sql.js +1 -1
- package/dist/event-logger.js +76 -75
- package/dist/file-access.js +106 -105
- package/dist/file-mutation.js +96 -95
- package/dist/file-retention.js +1 -1
- package/dist/filesystem/fff.bun.js +2 -2
- package/dist/filesystem/fff.js +1 -1
- package/dist/filesystem/fff.node.js +2 -2
- package/dist/filesystem/fff.workerd.js +2 -2
- package/dist/filesystem/location-watcher-policy.js +6 -6
- package/dist/filesystem/location-watcher.js +220 -219
- package/dist/filesystem/protected.js +3 -3
- package/dist/filesystem/search.js +105 -104
- package/dist/filesystem/watcher-binding.js +1 -1
- package/dist/filesystem/watcher.js +13 -13
- package/dist/filesystem.js +108 -107
- package/dist/form.js +84 -83
- package/dist/formatter/builtins.js +4 -4
- package/dist/formatter.js +89 -88
- package/dist/generate.js +105 -104
- package/dist/git.js +10 -10
- package/dist/github-copilot/chat/convert-to-openai-compatible-chat-messages.js +1 -1
- package/dist/github-copilot/chat/get-response-metadata.js +1 -1
- package/dist/github-copilot/chat/map-openai-compatible-finish-reason.js +1 -1
- package/dist/github-copilot/chat/openai-compatible-chat-language-model.js +7 -7
- package/dist/github-copilot/chat/openai-compatible-chat-options.js +1 -1
- package/dist/github-copilot/chat/openai-compatible-prepare-tools.js +1 -1
- package/dist/github-copilot/copilot-provider.js +17 -17
- package/dist/github-copilot/models.js +93 -92
- package/dist/github-copilot/openai-compatible-error.js +1 -1
- package/dist/github-copilot/responses/convert-to-openai-responses-input.js +1 -1
- package/dist/github-copilot/responses/map-openai-responses-finish-reason.js +1 -1
- package/dist/github-copilot/responses/openai-error.js +1 -1
- package/dist/github-copilot/responses/openai-responses-language-model.js +10 -10
- package/dist/github-copilot/responses/openai-responses-prepare-tools.js +6 -6
- package/dist/github-copilot/responses/tool/code-interpreter.js +1 -1
- package/dist/github-copilot/responses/tool/file-search.js +1 -1
- package/dist/github-copilot/responses/tool/image-generation.js +1 -1
- package/dist/github-copilot/responses/tool/web-search-preview.js +1 -1
- package/dist/github-copilot/responses/tool/web-search.js +1 -1
- package/dist/image/photon.js +2 -2
- package/dist/image.js +6 -6
- package/dist/instance/service.js +5 -5
- package/dist/instance.js +359 -355
- package/dist/instruction-discovery.js +87 -86
- package/dist/instructions/builtins.js +89 -88
- package/dist/instructions/index.js +1 -1
- package/dist/integration/connection.js +1 -1
- package/dist/integration.js +79 -78
- package/dist/job.js +78 -77
- package/dist/kv/sql.js +2 -2
- package/dist/kv.js +75 -74
- package/dist/location-activity.js +136 -135
- package/dist/location-lifecycle.js +109 -108
- package/dist/location-service-map.js +88 -87
- package/dist/location-services.js +356 -352
- package/dist/location.js +87 -86
- package/dist/managed-policy.js +8 -8
- package/dist/mcp/client.js +93 -92
- package/dist/mcp/index.js +111 -110
- package/dist/mcp/instructions.js +131 -130
- package/dist/mcp/oauth.js +80 -79
- package/dist/mcp/stdio.js +92 -91
- package/dist/mime.js +1 -1
- package/dist/modal/models.js +93 -92
- package/dist/model-resolver.js +100 -99
- package/dist/model.js +102 -101
- package/dist/models-dev.js +109 -108
- package/dist/oauth/page.js +1 -1
- package/dist/permission/saved.js +82 -81
- package/dist/permission/sql.js +5 -5
- package/dist/permission.js +111 -110
- package/dist/persistent-pty/binary.bun.js +1 -1
- package/dist/persistent-pty/daemon.js +1 -1
- package/dist/persistent-pty/index.js +88 -87
- package/dist/persistent-pty/pty-binding.js +1 -1
- package/dist/persistent-pty.js +77 -76
- package/dist/plugin/agent.js +76 -75
- package/dist/plugin/command.js +102 -101
- package/dist/plugin/hooks.js +5 -5
- package/dist/plugin/host.js +215 -214
- package/dist/plugin/identity.js +3 -3
- package/dist/plugin/instance.js +5 -5
- package/dist/plugin/internal.js +331 -327
- package/dist/plugin/mcp-codemode-defaults.js +3 -3
- package/dist/plugin/models-dev.js +98 -97
- package/dist/plugin/module.js +117 -116
- package/dist/plugin/optimize.js +4 -4
- package/dist/plugin/plan.js +104 -103
- package/dist/plugin/promise.js +1 -1
- package/dist/plugin/provider/amazon-bedrock.js +92 -91
- package/dist/plugin/provider/azure.js +119 -118
- package/dist/plugin/provider/cerebras.js +1 -1
- package/dist/plugin/provider/chatgpt.js +96 -95
- package/dist/plugin/provider/cloudflare-ai-gateway.js +115 -114
- package/dist/plugin/provider/cloudflare-workers-ai.js +116 -115
- package/dist/plugin/provider/cohere.js +2 -2
- package/dist/plugin/provider/configured.js +114 -113
- package/dist/plugin/provider/databricks.js +6 -0
- package/dist/plugin/provider/digitalocean.js +95 -94
- package/dist/plugin/provider/dynamic.js +2 -2
- package/dist/plugin/provider/factory.js +1 -1
- package/dist/plugin/provider/github-copilot.js +97 -96
- package/dist/plugin/provider/gitlab.js +95 -94
- package/dist/plugin/provider/google-vertex.js +115 -91
- package/dist/plugin/provider/kilo.js +1 -1
- package/dist/plugin/provider/llmgateway.js +80 -79
- package/dist/plugin/provider/lmstudio.js +127 -117
- package/dist/plugin/provider/local.js +124 -114
- package/dist/plugin/provider/modal.js +94 -93
- package/dist/plugin/provider/neon.js +6 -0
- package/dist/plugin/provider/nvidia.js +1 -1
- package/dist/plugin/provider/ollama.js +125 -115
- package/dist/plugin/provider/openai.js +97 -96
- package/dist/plugin/provider/opencode.js +99 -98
- package/dist/plugin/provider/openrouter.js +93 -92
- package/dist/plugin/provider/perplexity.js +2 -2
- package/dist/plugin/provider/poe.js +81 -80
- package/dist/plugin/provider/prompt-cache-key.js +92 -91
- package/dist/plugin/provider/sap-ai-core.js +93 -92
- package/dist/plugin/provider/sdk-factory.js +1 -1
- package/dist/plugin/provider/snowflake-cortex.js +117 -116
- package/dist/plugin/provider/vercel.js +92 -91
- package/dist/plugin/provider/vllm.js +127 -117
- package/dist/plugin/provider/xai.js +93 -92
- package/dist/plugin/provider/zenmux.js +1 -1
- package/dist/plugin/provider.js +169 -157
- package/dist/plugin/sdk.js +76 -75
- package/dist/plugin/service.js +3 -3
- package/dist/plugin/skill.js +136 -135
- package/dist/plugin/source-directory.js +1 -1
- package/dist/plugin/supervisor.js +348 -344
- package/dist/plugin/tool-input-repair.js +4 -4
- package/dist/plugin/update.js +6 -6
- package/dist/plugin/vcs/git.js +88 -87
- package/dist/plugin/vcs/hg.js +88 -87
- package/dist/plugin/verbosity.js +95 -94
- package/dist/plugin/warming.js +116 -115
- package/dist/plugin/websearch/exa.js +7 -7
- package/dist/plugin/websearch/firecrawl.js +8 -8
- package/dist/plugin/websearch/index.js +9 -9
- package/dist/plugin/websearch/mcp.js +4 -4
- package/dist/plugin/websearch/parallel.js +8 -8
- package/dist/plugin/websearch/tavily.js +6 -6
- package/dist/plugin/websearch/tinyfish.js +6 -6
- package/dist/plugin.js +224 -223
- package/dist/project/schema.js +2 -2
- package/dist/project/sql.js +4 -4
- package/dist/project.js +89 -86
- package/dist/provider.js +103 -102
- package/dist/pty/protocol.js +1 -1
- package/dist/pty/ticket.js +1 -1
- package/dist/pty.js +101 -100
- package/dist/reference/instructions.js +91 -90
- package/dist/reference.js +91 -90
- package/dist/repository-cache.js +83 -82
- package/dist/repository.js +1 -1
- package/dist/ripgrep/binary.js +2 -2
- package/dist/ripgrep.js +99 -98
- package/dist/rpc.js +88 -87
- package/dist/schema.js +1 -1
- package/dist/session/affinity.js +1 -1
- package/dist/session/command.js +76 -75
- package/dist/session/compaction.js +137 -136
- package/dist/session/context.js +155 -154
- package/dist/session/diff.js +90 -89
- package/dist/session/environment.js +5 -5
- package/dist/session/error.js +3 -3
- package/dist/session/event.js +1 -1
- package/dist/session/execution/restart.js +219 -218
- package/dist/session/execution.js +127 -126
- package/dist/session/generate.js +154 -153
- package/dist/session/history.js +13 -13
- package/dist/session/inbox.js +88 -87
- package/dist/session/info.js +3 -3
- package/dist/session/instruction-entry.js +81 -80
- package/dist/session/instruction-state.js +8 -8
- package/dist/session/instructions.js +99 -98
- package/dist/session/message-updater.js +4 -4
- package/dist/session/message.js +1 -1
- package/dist/session/model-request.js +120 -119
- package/dist/session/model-transport.js +7 -7
- package/dist/session/move.js +131 -130
- package/dist/session/projector.js +88 -87
- package/dist/session/prompt.js +107 -106
- package/dist/session/provider-context.js +3 -3
- package/dist/session/revert.js +92 -91
- package/dist/session/run-coordinator.js +3 -3
- package/dist/session/runner/index.js +3 -3
- package/dist/session/runner/llm.js +226 -225
- package/dist/session/runner/max-steps.js +1 -1
- package/dist/session/runner/model.js +100 -99
- package/dist/session/runner/publish-llm-event.js +115 -114
- package/dist/session/runner/retry.js +2 -2
- package/dist/session/runner/step.js +127 -126
- package/dist/session/runner/to-llm-message.js +2 -2
- package/dist/session/schema.js +5 -5
- package/dist/session/session.js +166 -165
- package/dist/session/shell.js +132 -131
- package/dist/session/skill.js +105 -104
- package/dist/session/sql.js +5 -5
- package/dist/session/stats.js +77 -76
- package/dist/session/store.js +87 -86
- package/dist/session/subagent-completion.js +1 -1
- package/dist/session/subagent-job.js +207 -204
- package/dist/session/system-prompt.js +3 -3
- package/dist/session/title.js +153 -152
- package/dist/session/to-session-error.js +113 -112
- package/dist/session/transfer.js +217 -216
- package/dist/session/usage.js +1 -1
- package/dist/session.js +213 -212
- package/dist/shell/parse.js +6 -6
- package/dist/shell/result.js +1 -1
- package/dist/shell/scan.js +1 -1
- package/dist/shell/select.js +15 -15
- package/dist/shell.js +134 -133
- package/dist/skill/discovery.js +6 -6
- package/dist/skill/instructions.js +107 -106
- package/dist/skill.js +112 -111
- package/dist/snapshot.js +93 -92
- package/dist/state.js +1 -1
- package/dist/tool/html-markdown.js +1 -1
- package/dist/tool/http-body.js +1 -1
- package/dist/tool/mcp.js +130 -129
- package/dist/tool/plugin/edit.js +120 -119
- package/dist/tool/plugin/file-diff.js +1 -1
- package/dist/tool/plugin/glob.js +126 -125
- package/dist/tool/plugin/grep.js +118 -117
- package/dist/tool/plugin/mcp-resource.js +119 -118
- package/dist/tool/plugin/opencode.js +116 -4
- package/dist/tool/plugin/patch.js +124 -123
- package/dist/tool/plugin/question.js +105 -104
- package/dist/tool/plugin/read.js +127 -126
- package/dist/tool/plugin/shell.js +212 -211
- package/dist/tool/plugin/skill.js +113 -112
- package/dist/tool/plugin/subagent.js +212 -211
- package/dist/tool/plugin/webfetch.js +108 -107
- package/dist/tool/plugin/websearch.js +116 -115
- package/dist/tool/plugin/write.js +124 -123
- package/dist/tool/read-filesystem.js +102 -101
- package/dist/tool/runtime.js +1 -1
- package/dist/tool-output.js +7 -7
- package/dist/tool.js +16 -16
- package/dist/types/bus.d.ts +2 -2
- package/dist/types/config/plugin/command.d.ts +2 -1
- package/dist/types/database/database.d.ts +1 -1
- package/dist/types/database/drizzle/effect-sqlite/driver.d.ts +1 -1
- package/dist/types/database/drizzle/effect-sqlite/session.d.ts +2 -2
- package/dist/types/database/drizzle/sqlite-core/effect/db.d.ts +1 -1
- package/dist/types/database/drizzle/sqlite-core/effect/session.d.ts +1 -1
- package/dist/types/database/migration/20261010180456_project_time_archived.d.ts +3 -0
- package/dist/types/database/sqlite.bun.d.ts +1 -1
- package/dist/types/database/sqlite.d.ts +4 -4
- package/dist/types/database/sqlite.node.d.ts +1 -1
- package/dist/types/database/sqlite.workerd.d.ts +1 -1
- package/dist/types/effect/app-node-platform.d.ts +1 -1
- package/dist/types/effect/websocket-constructor.d.ts +1 -1
- package/dist/types/environment/driver.d.ts +1 -1
- package/dist/types/environment/environment.d.ts +1 -1
- package/dist/types/environment/exec-defaults.d.ts +1 -1
- package/dist/types/environment/local.d.ts +1 -1
- package/dist/types/environment/unavailable.d.ts +7 -7
- package/dist/types/filesystem.d.ts +2 -1
- package/dist/types/git.d.ts +23 -10
- package/dist/types/models-dev.d.ts +1 -1
- package/dist/types/plugin/internal.d.ts +4 -3
- package/dist/types/plugin/provider/azure.d.ts +1 -1
- package/dist/types/plugin/provider/chatgpt.d.ts +2 -2
- package/dist/types/plugin/provider/databricks.d.ts +1 -0
- package/dist/types/plugin/provider/digitalocean.d.ts +1 -1
- package/dist/types/plugin/provider/gitlab.d.ts +1 -1
- package/dist/types/plugin/provider/google-vertex.d.ts +5 -1
- package/dist/types/plugin/provider/lmstudio.d.ts +2 -2
- package/dist/types/plugin/provider/local.d.ts +4 -4
- package/dist/types/plugin/provider/neon.d.ts +1 -0
- package/dist/types/plugin/provider/ollama.d.ts +2 -2
- package/dist/types/plugin/provider/opencode.d.ts +1 -1
- package/dist/types/plugin/provider/poe.d.ts +1 -1
- package/dist/types/plugin/provider/snowflake-cortex.d.ts +1 -1
- package/dist/types/plugin/provider/vllm.d.ts +2 -2
- package/dist/types/plugin/websearch/exa.d.ts +1 -1
- package/dist/types/plugin/websearch/firecrawl.d.ts +1 -1
- package/dist/types/plugin/websearch/index.d.ts +1 -1
- package/dist/types/plugin/websearch/mcp.d.ts +2 -2
- package/dist/types/plugin/websearch/parallel.d.ts +1 -1
- package/dist/types/plugin/websearch/tavily.d.ts +1 -1
- package/dist/types/plugin/websearch/tinyfish.d.ts +1 -1
- package/dist/types/project/schema.d.ts +5 -0
- package/dist/types/project/sql.d.ts +16 -0
- package/dist/types/project.d.ts +9 -1
- package/dist/types/session/diff.d.ts +1 -1
- package/dist/types/session/history.d.ts +37 -5
- package/dist/types/session/inbox.d.ts +10 -10
- package/dist/types/session/instruction-entry.d.ts +2 -2
- package/dist/types/session/instruction-state.d.ts +10 -10
- package/dist/types/session/model-transport.d.ts +1 -1
- package/dist/types/session/runner/publish-llm-event.d.ts +2 -1
- package/dist/types/session/subagent-job.d.ts +8 -4
- package/dist/types/session/transfer.d.ts +19 -0
- package/dist/types/shell/parse.d.ts +2 -0
- package/dist/types/tool/http-body.d.ts +2 -2
- package/dist/types/tool/plugin/opencode.d.ts +10 -1
- package/dist/types/tool/plugin/subagent.d.ts +2 -1
- package/dist/types/tool/plugin/webfetch.d.ts +1 -1
- package/dist/types/v1/config/agent.d.ts +6 -66
- package/dist/types/v1/config/migrate.d.ts +1 -1
- package/dist/types/v1/config/permission.d.ts +5 -53
- package/dist/types/wellknown.d.ts +1 -1
- package/dist/util/error-summary.js +1 -1
- package/dist/util/error.js +1 -1
- package/dist/util/git-executable.js +2 -2
- package/dist/util/iife.js +1 -1
- package/dist/util/lazy.js +1 -1
- package/dist/util/slug.js +1 -1
- package/dist/util/token.js +1 -1
- package/dist/util/which.js +1 -1
- package/dist/util/wildcard.js +1 -1
- package/dist/v1/config/agent.js +5 -5
- package/dist/v1/config/command.js +5 -5
- package/dist/v1/config/error.js +2 -2
- package/dist/v1/config/mcp.js +4 -4
- package/dist/v1/config/migrate.js +94 -93
- package/dist/v1/config/permission.js +5 -3
- package/dist/v1/config/plugin.js +3 -3
- package/dist/v1/config/provider-options.js +1 -1
- package/dist/v1/config/provider.js +4 -4
- package/dist/variant.js +95 -94
- package/dist/vcs/patch.js +1 -1
- package/dist/vcs.js +91 -90
- package/dist/websearch.js +84 -83
- package/dist/wellknown/plugin.js +78 -77
- package/dist/wellknown.js +83 -82
- package/dist/workspace/driver.js +5 -5
- package/dist/workspace/sql.js +1 -1
- package/dist/workspace.js +86 -83
- package/dist/worktree/directory.js +2 -2
- package/dist/worktree/git.js +10 -10
- package/dist/worktree/sql.js +5 -5
- package/dist/worktree/strategies.js +91 -90
- package/dist/worktree.js +100 -99
- package/package.json +13 -12
- package/dist/chunks/variant-9zdhvgqs.js +0 -18
- package/dist/chunks/variant-dhyj2516.js +0 -253
- package/dist/chunks/variant-e29b4955.js +0 -89
- package/dist/chunks/variant-hs1x7rht.js +0 -466
- package/dist/chunks/variant-r4e50z9n.js +0 -507
- package/dist/chunks/variant-s6bevt7v.js +0 -26
- package/dist/chunks/variant-sez5jh81.js +0 -41
- package/dist/chunks/variant-vw65f48a.js +0 -69
- /package/dist/chunks/{variant-0qkdqm5v.js → filesystem-0qkdqm5v.js} +0 -0
- /package/dist/chunks/{variant-0zkw76rk.js → filesystem-0zkw76rk.js} +0 -0
- /package/dist/chunks/{variant-17cy0kzp.js → filesystem-17cy0kzp.js} +0 -0
- /package/dist/chunks/{variant-1cnp2v09.js → filesystem-1cnp2v09.js} +0 -0
- /package/dist/chunks/{variant-1kg9ymc8.js → filesystem-1kg9ymc8.js} +0 -0
- /package/dist/chunks/{variant-24dcb14g.js → filesystem-24dcb14g.js} +0 -0
- /package/dist/chunks/{variant-2710q6r3.js → filesystem-2710q6r3.js} +0 -0
- /package/dist/chunks/{variant-2axfhc9x.js → filesystem-2axfhc9x.js} +0 -0
- /package/dist/chunks/{variant-2c3vjs8z.js → filesystem-2c3vjs8z.js} +0 -0
- /package/dist/chunks/{variant-359p4xyc.js → filesystem-359p4xyc.js} +0 -0
- /package/dist/chunks/{variant-3asan66x.js → filesystem-3asan66x.js} +0 -0
- /package/dist/chunks/{variant-3t0ybcrp.js → filesystem-3t0ybcrp.js} +0 -0
- /package/dist/chunks/{variant-3v8g72cx.js → filesystem-3v8g72cx.js} +0 -0
- /package/dist/chunks/{variant-3wcehsnq.js → filesystem-3wcehsnq.js} +0 -0
- /package/dist/chunks/{variant-43n2bw4t.js → filesystem-43n2bw4t.js} +0 -0
- /package/dist/chunks/{variant-4knz6hnm.js → filesystem-4knz6hnm.js} +0 -0
- /package/dist/chunks/{variant-4vcrnpx2.js → filesystem-4vcrnpx2.js} +0 -0
- /package/dist/chunks/{variant-4y7fprxs.js → filesystem-4y7fprxs.js} +0 -0
- /package/dist/chunks/{variant-53557ph1.js → filesystem-53557ph1.js} +0 -0
- /package/dist/chunks/{variant-550bvhaj.js → filesystem-550bvhaj.js} +0 -0
- /package/dist/chunks/{variant-5qd3pb7m.js → filesystem-5qd3pb7m.js} +0 -0
- /package/dist/chunks/{variant-6prwharc.js → filesystem-6prwharc.js} +0 -0
- /package/dist/chunks/{variant-6q2bdcd1.js → filesystem-6q2bdcd1.js} +0 -0
- /package/dist/chunks/{variant-7akdwqpd.js → filesystem-7akdwqpd.js} +0 -0
- /package/dist/chunks/{variant-7m9af43g.js → filesystem-7m9af43g.js} +0 -0
- /package/dist/chunks/{variant-822emrt2.js → filesystem-822emrt2.js} +0 -0
- /package/dist/chunks/{variant-84wd9syh.js → filesystem-84wd9syh.js} +0 -0
- /package/dist/chunks/{variant-88xbtdfr.js → filesystem-88xbtdfr.js} +0 -0
- /package/dist/chunks/{variant-8n3pysct.js → filesystem-8n3pysct.js} +0 -0
- /package/dist/chunks/{variant-8wj87zfr.js → filesystem-8wj87zfr.js} +0 -0
- /package/dist/chunks/{variant-9a4afbnw.js → filesystem-9a4afbnw.js} +0 -0
- /package/dist/chunks/{variant-9rqn6x4v.js → filesystem-9rqn6x4v.js} +0 -0
- /package/dist/chunks/{variant-a6k6eb26.js → filesystem-a6k6eb26.js} +0 -0
- /package/dist/chunks/{variant-af5trqkr.js → filesystem-af5trqkr.js} +0 -0
- /package/dist/chunks/{variant-afrmfg78.js → filesystem-afrmfg78.js} +0 -0
- /package/dist/chunks/{variant-aqzs7mqg.js → filesystem-aqzs7mqg.js} +0 -0
- /package/dist/chunks/{variant-atq7p7m5.js → filesystem-atq7p7m5.js} +0 -0
- /package/dist/chunks/{variant-bkyjaxrp.js → filesystem-bkyjaxrp.js} +0 -0
- /package/dist/chunks/{variant-bmr6ed5q.js → filesystem-bmr6ed5q.js} +0 -0
- /package/dist/chunks/{variant-cf4snx6d.js → filesystem-cf4snx6d.js} +0 -0
- /package/dist/chunks/{variant-cvy3z8tj.js → filesystem-cvy3z8tj.js} +0 -0
- /package/dist/chunks/{variant-d9fn303g.js → filesystem-d9fn303g.js} +0 -0
- /package/dist/chunks/{variant-d9jj8t3e.js → filesystem-d9jj8t3e.js} +0 -0
- /package/dist/chunks/{variant-dajrwvna.js → filesystem-dajrwvna.js} +0 -0
- /package/dist/chunks/{variant-dap0rakb.js → filesystem-dap0rakb.js} +0 -0
- /package/dist/chunks/{variant-df08tz66.js → filesystem-df08tz66.js} +0 -0
- /package/dist/chunks/{variant-dy18nga0.js → filesystem-dy18nga0.js} +0 -0
- /package/dist/chunks/{variant-e5kj55wp.js → filesystem-e5kj55wp.js} +0 -0
- /package/dist/chunks/{variant-e73j6tqm.js → filesystem-e73j6tqm.js} +0 -0
- /package/dist/chunks/{variant-ec1grn59.js → filesystem-ec1grn59.js} +0 -0
- /package/dist/chunks/{variant-eh3zwz77.js → filesystem-eh3zwz77.js} +0 -0
- /package/dist/chunks/{variant-emrn6kk6.js → filesystem-emrn6kk6.js} +0 -0
- /package/dist/chunks/{variant-f0mxakyp.js → filesystem-f0mxakyp.js} +0 -0
- /package/dist/chunks/{variant-f6n9ztr4.js → filesystem-f6n9ztr4.js} +0 -0
- /package/dist/chunks/{variant-faypxj3z.js → filesystem-faypxj3z.js} +0 -0
- /package/dist/chunks/{variant-fd410y7t.js → filesystem-fd410y7t.js} +0 -0
- /package/dist/chunks/{variant-g4wezp1m.js → filesystem-g4wezp1m.js} +0 -0
- /package/dist/chunks/{variant-g86h250q.js → filesystem-g86h250q.js} +0 -0
- /package/dist/chunks/{variant-gebd4c9n.js → filesystem-gebd4c9n.js} +0 -0
- /package/dist/chunks/{variant-gftt206x.js → filesystem-gftt206x.js} +0 -0
- /package/dist/chunks/{variant-hk9envan.js → filesystem-hk9envan.js} +0 -0
- /package/dist/chunks/{variant-j2ntwpah.js → filesystem-j2ntwpah.js} +0 -0
- /package/dist/chunks/{variant-j5zkgpj8.js → filesystem-j5zkgpj8.js} +0 -0
- /package/dist/chunks/{variant-jjkms2e6.js → filesystem-jjkms2e6.js} +0 -0
- /package/dist/chunks/{variant-jr7sbwjy.js → filesystem-jr7sbwjy.js} +0 -0
- /package/dist/chunks/{variant-jwfs4k6c.js → filesystem-jwfs4k6c.js} +0 -0
- /package/dist/chunks/{variant-jzg6c2d5.js → filesystem-jzg6c2d5.js} +0 -0
- /package/dist/chunks/{variant-mp448xyj.js → filesystem-mp448xyj.js} +0 -0
- /package/dist/chunks/{variant-msx8hqn2.js → filesystem-msx8hqn2.js} +0 -0
- /package/dist/chunks/{variant-n05xt0ee.js → filesystem-n05xt0ee.js} +0 -0
- /package/dist/chunks/{variant-n3j8tn72.js → filesystem-n3j8tn72.js} +0 -0
- /package/dist/chunks/{variant-njntx4h6.js → filesystem-njntx4h6.js} +0 -0
- /package/dist/chunks/{variant-q3sfg36h.js → filesystem-q3sfg36h.js} +0 -0
- /package/dist/chunks/{variant-q74kybfr.js → filesystem-q74kybfr.js} +0 -0
- /package/dist/chunks/{variant-qaymkmh1.js → filesystem-qaymkmh1.js} +0 -0
- /package/dist/chunks/{variant-qb87gjwd.js → filesystem-qb87gjwd.js} +0 -0
- /package/dist/chunks/{variant-qfa1cgps.js → filesystem-qfa1cgps.js} +0 -0
- /package/dist/chunks/{variant-qg3g05ea.js → filesystem-qg3g05ea.js} +0 -0
- /package/dist/chunks/{variant-qrg20bc0.js → filesystem-qrg20bc0.js} +0 -0
- /package/dist/chunks/{variant-rcb2kzg1.js → filesystem-rcb2kzg1.js} +0 -0
- /package/dist/chunks/{variant-sdp7kfr6.js → filesystem-sdp7kfr6.js} +0 -0
- /package/dist/chunks/{variant-ssg3fenm.js → filesystem-ssg3fenm.js} +0 -0
- /package/dist/chunks/{variant-w803qqfp.js → filesystem-w803qqfp.js} +0 -0
- /package/dist/chunks/{variant-wc3fc9cn.js → filesystem-wc3fc9cn.js} +0 -0
- /package/dist/chunks/{variant-wer8tq1h.js → filesystem-wer8tq1h.js} +0 -0
- /package/dist/chunks/{variant-wtztk69x.js → filesystem-wtztk69x.js} +0 -0
- /package/dist/chunks/{variant-x0ckcb58.js → filesystem-x0ckcb58.js} +0 -0
- /package/dist/chunks/{variant-x61499pn.js → filesystem-x61499pn.js} +0 -0
- /package/dist/chunks/{variant-y44na4kk.js → filesystem-y44na4kk.js} +0 -0
- /package/dist/chunks/{variant-y8f7s663.js → filesystem-y8f7s663.js} +0 -0
- /package/dist/chunks/{variant-ygaqb7jw.js → filesystem-ygaqb7jw.js} +0 -0
- /package/dist/chunks/{variant-ym463w8f.js → filesystem-ym463w8f.js} +0 -0
- /package/dist/chunks/{variant-z5v4ffb3.js → filesystem-z5v4ffb3.js} +0 -0
- /package/dist/chunks/{variant-z9919s4g.js → filesystem-z9919s4g.js} +0 -0
|
@@ -0,0 +1,804 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AbsolutePath2,
|
|
3
|
+
RelativePath2
|
|
4
|
+
} from "./filesystem-z5v4ffb3.js";
|
|
5
|
+
import {
|
|
6
|
+
makeUnsafe2
|
|
7
|
+
} from "./filesystem-y71avatq.js";
|
|
8
|
+
import {
|
|
9
|
+
MAX_TOTAL_PATCH_BYTES2,
|
|
10
|
+
emptyPatch2,
|
|
11
|
+
chunksByFile2
|
|
12
|
+
} from "./filesystem-tazgh4e4.js";
|
|
13
|
+
import {
|
|
14
|
+
gitExecutable2
|
|
15
|
+
} from "./filesystem-ef5x83kb.js";
|
|
16
|
+
import {
|
|
17
|
+
__export
|
|
18
|
+
} from "./filesystem-9rqn6x4v.js";
|
|
19
|
+
|
|
20
|
+
// src/git.ts
|
|
21
|
+
var exports_git3 = {};
|
|
22
|
+
__export(exports_git3, {
|
|
23
|
+
Git: () => exports_git3,
|
|
24
|
+
OperationError: () => OperationError3,
|
|
25
|
+
Repository: () => Repository2,
|
|
26
|
+
Service: () => Service83,
|
|
27
|
+
TreeID: () => TreeID2,
|
|
28
|
+
Worktree: () => Worktree2,
|
|
29
|
+
WorktreeError: () => WorktreeError2,
|
|
30
|
+
node: () => node87
|
|
31
|
+
});
|
|
32
|
+
import path from "path";
|
|
33
|
+
import { Cause, Context, Effect, Exit, Layer, Option, Schedule, Schema } from "effect";
|
|
34
|
+
import { ChildProcess } from "effect/process";
|
|
35
|
+
import { FSUtil } from "@opencode/util/fs-util";
|
|
36
|
+
import { AppProcess } from "@opencode/util/process";
|
|
37
|
+
import { makeGlobalNode } from "@opencode/util/effect/app-node";
|
|
38
|
+
class Repository2 extends Schema.Class("Git.Repository")({
|
|
39
|
+
worktree: AbsolutePath2,
|
|
40
|
+
gitDirectory: AbsolutePath2,
|
|
41
|
+
commonDirectory: AbsolutePath2
|
|
42
|
+
}) {
|
|
43
|
+
}
|
|
44
|
+
var snapshotConfigFile = "opencode.gitconfig";
|
|
45
|
+
var snapshotConfigInclude = `[include]
|
|
46
|
+
path = ${snapshotConfigFile}
|
|
47
|
+
`;
|
|
48
|
+
var snapshotConfig = `[core]
|
|
49
|
+
autocrlf = false
|
|
50
|
+
longpaths = true
|
|
51
|
+
symlinks = true
|
|
52
|
+
fsmonitor = false
|
|
53
|
+
untrackedCache = true
|
|
54
|
+
# A split index cannot name its shared file once manyFiles skips index checksums.
|
|
55
|
+
splitIndex = false
|
|
56
|
+
[feature]
|
|
57
|
+
manyFiles = true
|
|
58
|
+
[index]
|
|
59
|
+
version = 4
|
|
60
|
+
threads = true
|
|
61
|
+
`;
|
|
62
|
+
var TreeID2 = Schema.String.pipe(Schema.brand("Git.TreeID"));
|
|
63
|
+
var temporaryIndexPrefix = "index.opencode-";
|
|
64
|
+
var argumentBudget = process.platform === "win32" ? 24000 : 128 * 1024;
|
|
65
|
+
var looseObjectLimit = 2048;
|
|
66
|
+
var packCountLimit = 16;
|
|
67
|
+
|
|
68
|
+
class OperationError3 extends Schema.TaggedError()("Git.OperationError", {
|
|
69
|
+
operation: Schema.Literals([
|
|
70
|
+
"clone",
|
|
71
|
+
"fetch",
|
|
72
|
+
"checkout",
|
|
73
|
+
"reset",
|
|
74
|
+
"create",
|
|
75
|
+
"refresh",
|
|
76
|
+
"write_tree",
|
|
77
|
+
"list_files",
|
|
78
|
+
"diff",
|
|
79
|
+
"restore",
|
|
80
|
+
"pack"
|
|
81
|
+
]),
|
|
82
|
+
message: Schema.String,
|
|
83
|
+
directory: Schema.optional(AbsolutePath2),
|
|
84
|
+
cause: Schema.optional(Schema.Defect())
|
|
85
|
+
}) {
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
class Worktree2 extends Schema.Class("Git.Worktree")({
|
|
89
|
+
directory: AbsolutePath2,
|
|
90
|
+
kind: Schema.Literals(["main", "linked"])
|
|
91
|
+
}) {
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
class WorktreeError2 extends Schema.TaggedError()("Git.WorktreeError", {
|
|
95
|
+
operation: Schema.Literals(["create", "remove", "list"]),
|
|
96
|
+
message: Schema.String,
|
|
97
|
+
directory: Schema.optional(AbsolutePath2),
|
|
98
|
+
forceRequired: Schema.optional(Schema.Boolean),
|
|
99
|
+
cause: Schema.optional(Schema.Defect())
|
|
100
|
+
}) {
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
class Service83 extends Context.Service()("@opencode/Git") {
|
|
104
|
+
}
|
|
105
|
+
var layer = Layer.effect(Service83, Effect.gen(function* () {
|
|
106
|
+
const fs = yield* FSUtil.Service;
|
|
107
|
+
const proc = yield* AppProcess.Service;
|
|
108
|
+
const locks = makeUnsafe2();
|
|
109
|
+
const locked = (repository, effect) => locks.withLock(repository.gitDirectory)(effect);
|
|
110
|
+
const discover = Effect.fn("Git.repo.discover")(function* (input) {
|
|
111
|
+
const dotgit = yield* fs.up({ targets: [".git"], start: input, mode: "first" }).pipe(Effect.map((matches) => matches[0]), Effect.orElseSucceed(() => {
|
|
112
|
+
return;
|
|
113
|
+
}));
|
|
114
|
+
if (!dotgit)
|
|
115
|
+
return;
|
|
116
|
+
const cwd = path.dirname(dotgit);
|
|
117
|
+
const result = yield* run(cwd, proc, ["rev-parse", "--git-dir", "--git-common-dir", "--show-toplevel"]);
|
|
118
|
+
const [gitDir, commonDir, topLevel] = result.text.split(/\r?\n/);
|
|
119
|
+
if (!gitDir || !commonDir)
|
|
120
|
+
return;
|
|
121
|
+
return new Repository2({
|
|
122
|
+
worktree: AbsolutePath2.make(topLevel ? resolvePath(cwd, topLevel) : cwd),
|
|
123
|
+
gitDirectory: AbsolutePath2.make(resolvePath(cwd, gitDir)),
|
|
124
|
+
commonDirectory: AbsolutePath2.make(resolvePath(cwd, commonDir))
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
const remote = Effect.fn("Git.remote.get")(function* (repository, name = "origin") {
|
|
128
|
+
const result = yield* run(repository.worktree, proc, ["remote", "get-url", name]);
|
|
129
|
+
if (result.exitCode !== 0)
|
|
130
|
+
return;
|
|
131
|
+
return result.text.trim() || undefined;
|
|
132
|
+
});
|
|
133
|
+
const roots = Effect.fn("Git.history.rootCommits")(function* (repository) {
|
|
134
|
+
const result = yield* run(repository.worktree, proc, ["rev-list", "--max-parents=0", "HEAD"]);
|
|
135
|
+
if (result.exitCode !== 0)
|
|
136
|
+
return [];
|
|
137
|
+
return result.text.split(`
|
|
138
|
+
`).map((item) => item.trim()).filter(Boolean).toSorted();
|
|
139
|
+
});
|
|
140
|
+
const head = Effect.fn("Git.history.head")(function* (repository) {
|
|
141
|
+
const result = yield* run(repository.worktree, proc, ["rev-parse", "HEAD"]);
|
|
142
|
+
if (result.exitCode !== 0)
|
|
143
|
+
return;
|
|
144
|
+
return result.text.trim() || undefined;
|
|
145
|
+
});
|
|
146
|
+
const branch = Effect.fn("Git.history.branch")(function* (repository) {
|
|
147
|
+
const result = yield* run(repository.worktree, proc, ["symbolic-ref", "--quiet", "--short", "HEAD"]);
|
|
148
|
+
if (result.exitCode !== 0)
|
|
149
|
+
return;
|
|
150
|
+
return result.text.trim() || undefined;
|
|
151
|
+
});
|
|
152
|
+
const remoteHead = Effect.fn("Git.history.defaultRemoteBranch")(function* (repository, remoteName = "origin") {
|
|
153
|
+
const result = yield* run(repository.worktree, proc, ["symbolic-ref", `refs/remotes/${remoteName}/HEAD`]);
|
|
154
|
+
if (result.exitCode !== 0)
|
|
155
|
+
return;
|
|
156
|
+
return result.text.trim().replace(new RegExp(`^refs/remotes/${remoteName}/`), "") || undefined;
|
|
157
|
+
});
|
|
158
|
+
const operation = Effect.fnUntraced(function* (operation, directory, args) {
|
|
159
|
+
const result = yield* execute(directory, proc, args).pipe(Effect.mapError((cause) => new OperationError3({ operation, directory, message: cause.message, cause })));
|
|
160
|
+
if (result.exitCode === 0)
|
|
161
|
+
return;
|
|
162
|
+
return yield* new OperationError3({
|
|
163
|
+
operation,
|
|
164
|
+
directory,
|
|
165
|
+
message: result.stderr.trim() || result.text.trim() || `Git ${operation} failed`
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
const clone = Effect.fn("Git.repo.clone")(function* (input) {
|
|
169
|
+
yield* operation("clone", AbsolutePath2.make(path.dirname(input.directory)), [
|
|
170
|
+
"clone",
|
|
171
|
+
"--depth",
|
|
172
|
+
String(input.depth ?? 100),
|
|
173
|
+
...input.branch ? ["--branch", input.branch] : [],
|
|
174
|
+
"--",
|
|
175
|
+
input.remote,
|
|
176
|
+
input.directory
|
|
177
|
+
]);
|
|
178
|
+
const repository = yield* discover(input.directory);
|
|
179
|
+
if (repository)
|
|
180
|
+
return repository;
|
|
181
|
+
return yield* new OperationError3({
|
|
182
|
+
operation: "clone",
|
|
183
|
+
directory: input.directory,
|
|
184
|
+
message: "Cloned repository could not be opened"
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
const fetch = Effect.fn("Git.sync.fetchRemotes")(function* (repository, input = {}) {
|
|
188
|
+
yield* operation("fetch", repository.worktree, ["fetch", "--all", ...input.prune === false ? [] : ["--prune"]]);
|
|
189
|
+
});
|
|
190
|
+
const fetchBranch = Effect.fn("Git.sync.fetchBranch")(function* (repository, input) {
|
|
191
|
+
const remoteName = input.remote ?? "origin";
|
|
192
|
+
const spec = `refs/heads/${input.branch}:refs/remotes/${remoteName}/${input.branch}`;
|
|
193
|
+
yield* operation("fetch", repository.worktree, ["fetch", remoteName, input.force === false ? spec : `+${spec}`]);
|
|
194
|
+
});
|
|
195
|
+
const checkout = Effect.fn("Git.sync.checkoutRemoteBranch")(function* (repository, input) {
|
|
196
|
+
const remoteName = input.remote ?? "origin";
|
|
197
|
+
yield* operation("checkout", repository.worktree, [
|
|
198
|
+
"checkout",
|
|
199
|
+
...input.reset === false ? [input.branch] : ["-B", input.branch, `${remoteName}/${input.branch}`]
|
|
200
|
+
]);
|
|
201
|
+
});
|
|
202
|
+
const reset = Effect.fn("Git.sync.resetHard")(function* (repository, revision) {
|
|
203
|
+
yield* operation("reset", repository.worktree, ["reset", "--hard", revision]);
|
|
204
|
+
});
|
|
205
|
+
const repositoryArgs = (repository, args) => [
|
|
206
|
+
"--git-dir",
|
|
207
|
+
repository.gitDirectory,
|
|
208
|
+
"--work-tree",
|
|
209
|
+
repository.worktree,
|
|
210
|
+
...args
|
|
211
|
+
];
|
|
212
|
+
const repositoryOperation = Effect.fnUntraced(function* (operationName, repository, args, options) {
|
|
213
|
+
const result = yield* proc.run(ChildProcess.make(gitExecutable2, repositoryArgs(repository, args), {
|
|
214
|
+
cwd: repository.worktree,
|
|
215
|
+
env: options?.index ? { ...options.env, GIT_INDEX_FILE: options.index } : options?.env,
|
|
216
|
+
extendEnv: true
|
|
217
|
+
}), { stdin: options?.stdin, maxOutputBytes: options?.maxOutputBytes }).pipe(Effect.mapError((cause) => new OperationError3({
|
|
218
|
+
operation: operationName,
|
|
219
|
+
directory: repository.worktree,
|
|
220
|
+
message: cause.message,
|
|
221
|
+
cause
|
|
222
|
+
})));
|
|
223
|
+
const text = result.stdout.toString("utf8");
|
|
224
|
+
if (result.exitCode === 0)
|
|
225
|
+
return { text, stderr: result.stderr.toString("utf8"), truncated: result.stdoutTruncated };
|
|
226
|
+
return yield* new OperationError3({
|
|
227
|
+
operation: operationName,
|
|
228
|
+
directory: repository.worktree,
|
|
229
|
+
message: result.stderr.toString("utf8").trim() || text.trim() || `Git ${operationName} failed`
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
const create = Effect.fn("Git.repo.create")(function* (input) {
|
|
233
|
+
const repository = new Repository2({
|
|
234
|
+
worktree: input.worktree,
|
|
235
|
+
gitDirectory: input.gitDirectory,
|
|
236
|
+
commonDirectory: input.gitDirectory
|
|
237
|
+
});
|
|
238
|
+
if (yield* fs.existsSafe(path.join(input.gitDirectory, "HEAD"))) {
|
|
239
|
+
yield* initRepository({ ...input, directory: input.gitDirectory });
|
|
240
|
+
return repository;
|
|
241
|
+
}
|
|
242
|
+
const temporaryDirectory = AbsolutePath2.make(`${input.gitDirectory}.init-${uniqueSuffix()}`);
|
|
243
|
+
yield* Effect.gen(function* () {
|
|
244
|
+
yield* initRepository({ ...input, directory: temporaryDirectory });
|
|
245
|
+
const renamed = yield* fs.rename(temporaryDirectory, input.gitDirectory).pipe(Effect.exit);
|
|
246
|
+
if (Exit.isSuccess(renamed) || (yield* fs.existsSafe(path.join(input.gitDirectory, "HEAD"))))
|
|
247
|
+
return;
|
|
248
|
+
return yield* new OperationError3({
|
|
249
|
+
operation: "create",
|
|
250
|
+
directory: input.gitDirectory,
|
|
251
|
+
message: "Failed to move Git storage into place",
|
|
252
|
+
cause: Cause.squash(renamed.cause)
|
|
253
|
+
});
|
|
254
|
+
}).pipe(Effect.ensuring(fs.remove(temporaryDirectory, { recursive: true, force: true }).pipe(Effect.ignore)));
|
|
255
|
+
return repository;
|
|
256
|
+
});
|
|
257
|
+
const initRepository = Effect.fnUntraced(function* (input) {
|
|
258
|
+
const operationError = (message) => (cause) => new OperationError3({ operation: "create", directory: input.gitDirectory, message, cause });
|
|
259
|
+
yield* fs.ensureDir(input.directory).pipe(Effect.mapError(operationError("Failed to create Git storage")));
|
|
260
|
+
yield* repositoryOperation("create", new Repository2({ worktree: input.worktree, gitDirectory: input.directory, commonDirectory: input.directory }), ["init"]);
|
|
261
|
+
yield* Effect.gen(function* () {
|
|
262
|
+
yield* fs.writeFileString(path.join(input.directory, snapshotConfigFile), snapshotConfig);
|
|
263
|
+
const config = path.join(input.directory, "config");
|
|
264
|
+
const current = yield* fs.readFileString(config);
|
|
265
|
+
if (current.includes(snapshotConfigInclude))
|
|
266
|
+
return;
|
|
267
|
+
yield* fs.writeFileString(config, `${current.endsWith(`
|
|
268
|
+
`) ? `
|
|
269
|
+
` : `
|
|
270
|
+
|
|
271
|
+
`}${snapshotConfigInclude}`, {
|
|
272
|
+
flag: "a"
|
|
273
|
+
});
|
|
274
|
+
}).pipe(Effect.mapError(operationError("Failed to configure Git storage")));
|
|
275
|
+
if (!input.seed)
|
|
276
|
+
return;
|
|
277
|
+
yield* fs.ensureDir(path.join(input.directory, "objects", "info")).pipe(Effect.mapError(operationError("Failed to configure shared Git objects")));
|
|
278
|
+
yield* fs.writeFileString(path.join(input.directory, "objects", "info", "alternates"), path.join(input.seed.commonDirectory, "objects") + `
|
|
279
|
+
`).pipe(Effect.mapError(operationError("Failed to configure shared Git objects")));
|
|
280
|
+
yield* fs.copyFile(path.join(input.seed.gitDirectory, "index"), path.join(input.directory, "index")).pipe(Effect.ignore);
|
|
281
|
+
});
|
|
282
|
+
const listChanges = Effect.fnUntraced(function* (repository, scope, index) {
|
|
283
|
+
const list = (args) => repositoryOperation("refresh", repository, args, { index }).pipe(Effect.map((result) => nuls(result.text).map((file) => RelativePath2.make(file.replace(/\/$/, "")))));
|
|
284
|
+
const [tracked, untracked] = yield* Effect.all([
|
|
285
|
+
list(["diff-files", "--name-only", "-z", "--", literalPathspec(scope)]),
|
|
286
|
+
list(["ls-files", "--others", "--exclude-standard", "-z", "--", literalPathspec(scope)])
|
|
287
|
+
], { concurrency: 2 });
|
|
288
|
+
return { tracked, untracked };
|
|
289
|
+
});
|
|
290
|
+
const updateIndex = Effect.fnUntraced(function* (input) {
|
|
291
|
+
const candidates = [...input.changes.tracked, ...input.changes.untracked];
|
|
292
|
+
if (!candidates.length)
|
|
293
|
+
return { skipped: [] };
|
|
294
|
+
const excluded = input.excluded ?? (input.ignores ? yield* ignored({ repository: input.ignores, paths: candidates }) : new Set);
|
|
295
|
+
const maximum = input.maximumUntrackedFileBytes;
|
|
296
|
+
const skipped = maximum ? (yield* Effect.forEach(input.changes.untracked.filter((item) => !excluded.has(item)), (item) => fs.stat(path.join(input.repository.worktree, item)).pipe(Effect.map((info) => info.type === "File" && Number(info.size) > maximum ? item : undefined), Effect.orElseSucceed(() => {
|
|
297
|
+
return;
|
|
298
|
+
})), { concurrency: 8 })).filter((item) => item !== undefined) : [];
|
|
299
|
+
const skip = new Set(skipped);
|
|
300
|
+
const added = candidates.filter((item) => !excluded.has(item) && !skip.has(item));
|
|
301
|
+
const removed = input.changes.tracked.filter((item) => excluded.has(item));
|
|
302
|
+
if (removed.length)
|
|
303
|
+
yield* repositoryOperation("refresh", input.repository, ["update-index", "--force-remove", "-z", "--stdin"], {
|
|
304
|
+
stdin: removed.join("\x00") + "\x00",
|
|
305
|
+
index: input.index
|
|
306
|
+
});
|
|
307
|
+
const embedded = (yield* Effect.forEach(input.changes.tracked.filter((item) => !excluded.has(item)), (item) => fs.existsSafe(path.join(input.repository.worktree, item, ".git")).pipe(Effect.map((found) => found ? item : undefined)), { concurrency: 8 })).filter((item) => item !== undefined);
|
|
308
|
+
if (added.length)
|
|
309
|
+
yield* repositoryOperation("refresh", input.repository, ["update-index", "--add", "--remove", "--replace", "-z", "--stdin"], { stdin: [...added, ...embedded].join("\x00") + "\x00", index: input.index });
|
|
310
|
+
return { skipped };
|
|
311
|
+
});
|
|
312
|
+
const refresh = Effect.fn("Git.index.refresh")(function* (input) {
|
|
313
|
+
return yield* updateIndex({ ...input, changes: yield* listChanges(input.repository, input.scope) });
|
|
314
|
+
});
|
|
315
|
+
const ignored = Effect.fn("Git.index.ignored")(function* (input) {
|
|
316
|
+
if (!input.paths.length)
|
|
317
|
+
return new Set;
|
|
318
|
+
const result = yield* proc.run(ChildProcess.make(gitExecutable2, repositoryArgs(input.repository, ["check-ignore", "--no-index", "--stdin", "-z"]), {
|
|
319
|
+
cwd: input.repository.worktree,
|
|
320
|
+
extendEnv: true
|
|
321
|
+
}), { stdin: input.paths.join("\x00") + "\x00" }).pipe(Effect.mapError((cause) => new OperationError3({
|
|
322
|
+
operation: "list_files",
|
|
323
|
+
directory: input.repository.worktree,
|
|
324
|
+
message: cause.message,
|
|
325
|
+
cause
|
|
326
|
+
})));
|
|
327
|
+
if (result.exitCode !== 0 && result.exitCode !== 1)
|
|
328
|
+
return yield* new OperationError3({
|
|
329
|
+
operation: "list_files",
|
|
330
|
+
directory: input.repository.worktree,
|
|
331
|
+
message: result.stderr.toString("utf8").trim() || "Failed to check ignored paths"
|
|
332
|
+
});
|
|
333
|
+
return new Set(nuls(result.stdout.toString("utf8")).map((file) => RelativePath2.make(file)));
|
|
334
|
+
});
|
|
335
|
+
const writeTree = Effect.fn("Git.tree.write")(function* (repository, index) {
|
|
336
|
+
const tree = (yield* repositoryOperation("write_tree", repository, ["write-tree"], { index })).text.trim();
|
|
337
|
+
if (/^[0-9a-f]{40,64}$/.test(tree))
|
|
338
|
+
return TreeID2.make(tree);
|
|
339
|
+
return yield* new OperationError3({
|
|
340
|
+
operation: "write_tree",
|
|
341
|
+
directory: repository.worktree,
|
|
342
|
+
message: `Invalid tree ID: ${tree}`
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
const indexFile = (repository) => path.join(repository.gitDirectory, "index");
|
|
346
|
+
const indexFingerprint = (file) => fs.stat(file).pipe(Effect.map((info) => [Option.getOrUndefined(info.ino), info.size, Option.getOrUndefined(info.mtime)?.getTime()].join(":")), Effect.orElseSucceed(() => {
|
|
347
|
+
return;
|
|
348
|
+
}));
|
|
349
|
+
const copyIndex = Effect.fnUntraced(function* (from, to) {
|
|
350
|
+
const info = yield* fs.stat(from);
|
|
351
|
+
yield* fs.copyFile(from, to);
|
|
352
|
+
const mtime = Option.getOrUndefined(info.mtime);
|
|
353
|
+
if (mtime)
|
|
354
|
+
yield* fs.utimes(to, Option.getOrElse(info.atime, () => mtime), mtime).pipe(Effect.ignore);
|
|
355
|
+
});
|
|
356
|
+
const withTemporaryIndex = (repository, use) => Effect.acquireUseRelease(Effect.gen(function* () {
|
|
357
|
+
const current = indexFile(repository);
|
|
358
|
+
const index = temporaryIndex(repository);
|
|
359
|
+
if (!(yield* fs.existsSafe(current)))
|
|
360
|
+
return index;
|
|
361
|
+
const linked = yield* fs.link(current, index).pipe(Effect.as(true), Effect.orElseSucceed(() => false));
|
|
362
|
+
if (linked)
|
|
363
|
+
return index;
|
|
364
|
+
yield* copyIndex(current, index).pipe(Effect.mapError((cause) => new OperationError3({
|
|
365
|
+
operation: "refresh",
|
|
366
|
+
directory: repository.gitDirectory,
|
|
367
|
+
message: "Failed to prepare a temporary index",
|
|
368
|
+
cause
|
|
369
|
+
})));
|
|
370
|
+
return index;
|
|
371
|
+
}), (index) => Effect.gen(function* () {
|
|
372
|
+
const value = yield* use(index);
|
|
373
|
+
const installed = yield* Effect.uninterruptible(Effect.gen(function* () {
|
|
374
|
+
const fingerprint = yield* indexFingerprint(index);
|
|
375
|
+
const renamed = yield* fs.rename(index, indexFile(repository)).pipe(Effect.retry({ times: 3, schedule: Schedule.spaced("20 millis") }), Effect.as(true), Effect.orElseSucceed(() => false));
|
|
376
|
+
return renamed ? fingerprint : undefined;
|
|
377
|
+
}));
|
|
378
|
+
return { value, installed };
|
|
379
|
+
}), (index) => fs.remove(index, { force: true }).pipe(Effect.ignore));
|
|
380
|
+
const lastCaptures = new Map;
|
|
381
|
+
const preparedStores = new Set;
|
|
382
|
+
const attemptCapture = Effect.fnUntraced(function* (input) {
|
|
383
|
+
const result = yield* withTemporaryIndex(input.repository, (index) => Effect.gen(function* () {
|
|
384
|
+
const scanned = yield* indexFingerprint(index);
|
|
385
|
+
const changes = yield* Effect.forEach(input.scopes, (scope) => listChanges(input.repository, scope, index), {
|
|
386
|
+
concurrency: "unbounded"
|
|
387
|
+
});
|
|
388
|
+
const last = lastCaptures.get(input.repository.gitDirectory);
|
|
389
|
+
const untracked = changes.flatMap((change) => change.untracked);
|
|
390
|
+
const excluded = scanned && last?.fingerprint === scanned && changes.every((change) => !change.tracked.length) ? input.ignores ? yield* ignored({ repository: input.ignores, paths: untracked }) : new Set : undefined;
|
|
391
|
+
if (last && excluded && untracked.every((file) => excluded.has(file)))
|
|
392
|
+
return last.tree;
|
|
393
|
+
yield* Effect.forEach(changes, (change) => updateIndex({ ...input, changes: change, index, excluded }), {
|
|
394
|
+
discard: true
|
|
395
|
+
});
|
|
396
|
+
return yield* writeTree(input.repository, index);
|
|
397
|
+
}));
|
|
398
|
+
if (result.installed)
|
|
399
|
+
lastCaptures.set(input.repository.gitDirectory, { fingerprint: result.installed, tree: result.value });
|
|
400
|
+
if (!result.installed)
|
|
401
|
+
lastCaptures.delete(input.repository.gitDirectory);
|
|
402
|
+
return result.value;
|
|
403
|
+
});
|
|
404
|
+
const captureTree = Effect.fn("Git.tree.capture")((input) => locked(input.repository, Effect.gen(function* () {
|
|
405
|
+
if (!preparedStores.has(input.repository.gitDirectory)) {
|
|
406
|
+
preparedStores.add(input.repository.gitDirectory);
|
|
407
|
+
yield* sweepTemporaryIndexes(input.repository);
|
|
408
|
+
yield* ensureSnapshotConfig(input.repository);
|
|
409
|
+
}
|
|
410
|
+
return yield* attemptCapture(input).pipe(Effect.catch((error) => Effect.gen(function* () {
|
|
411
|
+
if (!(yield* isIndexUnreadable(input.repository)))
|
|
412
|
+
return yield* error;
|
|
413
|
+
yield* Effect.logWarning("rebuilding unreadable snapshot index", {
|
|
414
|
+
directory: input.repository.gitDirectory,
|
|
415
|
+
message: error.message
|
|
416
|
+
});
|
|
417
|
+
yield* rebuildIndex(input.repository, input.ignores);
|
|
418
|
+
return yield* attemptCapture(input);
|
|
419
|
+
})));
|
|
420
|
+
})));
|
|
421
|
+
const isIndexUnreadable = Effect.fnUntraced(function* (repository) {
|
|
422
|
+
if (!(yield* fs.existsSafe(indexFile(repository))))
|
|
423
|
+
return false;
|
|
424
|
+
return yield* repositoryOperation("refresh", repository, [
|
|
425
|
+
"ls-files",
|
|
426
|
+
"-z",
|
|
427
|
+
"--",
|
|
428
|
+
literalPathspec(".opencode-probe")
|
|
429
|
+
]).pipe(Effect.match({ onSuccess: () => false, onFailure: (error) => error.cause === undefined }));
|
|
430
|
+
});
|
|
431
|
+
const rebuildIndex = Effect.fnUntraced(function* (repository, source) {
|
|
432
|
+
lastCaptures.delete(repository.gitDirectory);
|
|
433
|
+
const temporary = temporaryIndex(repository);
|
|
434
|
+
const copied = source ? yield* copyIndex(path.join(source.gitDirectory, "index"), temporary).pipe(Effect.as(true), Effect.orElseSucceed(() => false)) : false;
|
|
435
|
+
yield* (copied ? fs.rename(temporary, indexFile(repository)) : fs.remove(indexFile(repository), { force: true })).pipe(Effect.ignore, Effect.ensuring(fs.remove(temporary, { force: true }).pipe(Effect.ignore)));
|
|
436
|
+
});
|
|
437
|
+
const ensureSnapshotConfig = Effect.fnUntraced(function* (repository) {
|
|
438
|
+
const file = path.join(repository.gitDirectory, snapshotConfigFile);
|
|
439
|
+
const current = yield* fs.readFileStringSafe(file).pipe(Effect.orElseSucceed(() => {
|
|
440
|
+
return;
|
|
441
|
+
}));
|
|
442
|
+
if (current === undefined || current === snapshotConfig)
|
|
443
|
+
return;
|
|
444
|
+
const temporary = `${file}.${uniqueSuffix()}`;
|
|
445
|
+
yield* fs.writeFileString(temporary, snapshotConfig).pipe(Effect.andThen(fs.rename(temporary, file)), Effect.ignore, Effect.ensuring(fs.remove(temporary, { force: true }).pipe(Effect.ignore)));
|
|
446
|
+
});
|
|
447
|
+
const temporaryIndex = (repository) => path.join(repository.gitDirectory, `${temporaryIndexPrefix}${Date.now()}-${uniqueSuffix()}`);
|
|
448
|
+
const sweepTemporaryIndexes = Effect.fnUntraced(function* (repository) {
|
|
449
|
+
const cutoff = Date.now() - 60 * 60 * 1000;
|
|
450
|
+
const entries = yield* fs.readDirectory(repository.gitDirectory).pipe(Effect.orElseSucceed(() => []));
|
|
451
|
+
yield* Effect.forEach(entries.filter((entry) => entry.startsWith(temporaryIndexPrefix) && Number(entry.slice(temporaryIndexPrefix.length).split("-")[0]) < cutoff), (entry) => fs.remove(path.join(repository.gitDirectory, entry), { force: true }).pipe(Effect.ignore), { discard: true });
|
|
452
|
+
});
|
|
453
|
+
const treeFiles = Effect.fn("Git.tree.files")(function* (input) {
|
|
454
|
+
return nuls((yield* repositoryOperation("list_files", input.repository, [
|
|
455
|
+
"diff",
|
|
456
|
+
"--name-only",
|
|
457
|
+
"--no-renames",
|
|
458
|
+
"-z",
|
|
459
|
+
input.from,
|
|
460
|
+
input.to
|
|
461
|
+
])).text).map((file) => RelativePath2.make(file));
|
|
462
|
+
});
|
|
463
|
+
const treeDiff = Effect.fn("Git.tree.diff")(function* (input) {
|
|
464
|
+
if (input.paths?.length === 0)
|
|
465
|
+
return [];
|
|
466
|
+
const groups = input.paths ? pathGroups(input.paths) : [undefined];
|
|
467
|
+
const diffs = [];
|
|
468
|
+
let patchBudget = MAX_TOTAL_PATCH_BYTES2;
|
|
469
|
+
for (const paths of groups) {
|
|
470
|
+
const group = yield* diffGroup({ ...input, paths }, patchBudget);
|
|
471
|
+
diffs.push(...group.diffs);
|
|
472
|
+
patchBudget = group.truncated ? 0 : patchBudget - group.patchBytes;
|
|
473
|
+
}
|
|
474
|
+
return diffs;
|
|
475
|
+
});
|
|
476
|
+
const diffGroup = Effect.fnUntraced(function* (input, patchBudget) {
|
|
477
|
+
const args = ["--no-renames", input.from, input.to, "--", ...input.paths ?? []];
|
|
478
|
+
const [names, numbers, patch] = yield* Effect.all([
|
|
479
|
+
repositoryOperation("diff", input.repository, [
|
|
480
|
+
"--literal-pathspecs",
|
|
481
|
+
"diff",
|
|
482
|
+
"--name-status",
|
|
483
|
+
"-z",
|
|
484
|
+
...args
|
|
485
|
+
]),
|
|
486
|
+
repositoryOperation("diff", input.repository, ["--literal-pathspecs", "diff", "--numstat", "-z", ...args]),
|
|
487
|
+
patchBudget > 0 ? repositoryOperation("diff", input.repository, [
|
|
488
|
+
"--literal-pathspecs",
|
|
489
|
+
"-c",
|
|
490
|
+
"core.quotepath=false",
|
|
491
|
+
"diff",
|
|
492
|
+
"--no-ext-diff",
|
|
493
|
+
`--unified=${input.context ?? 3}`,
|
|
494
|
+
...args
|
|
495
|
+
], { maxOutputBytes: patchBudget }) : Effect.succeed({ text: "", stderr: "", truncated: true })
|
|
496
|
+
], { concurrency: 3 });
|
|
497
|
+
const statuses = nuls(names.text);
|
|
498
|
+
const files = statuses.flatMap((code, index) => {
|
|
499
|
+
const file = statuses[index + 1];
|
|
500
|
+
if (index % 2 !== 0 || !file)
|
|
501
|
+
return [];
|
|
502
|
+
return [
|
|
503
|
+
{
|
|
504
|
+
file: RelativePath2.make(file),
|
|
505
|
+
status: code.startsWith("A") ? "added" : code.startsWith("D") ? "deleted" : "modified"
|
|
506
|
+
}
|
|
507
|
+
];
|
|
508
|
+
});
|
|
509
|
+
const stats = new Map(nuls(numbers.text).flatMap((line) => {
|
|
510
|
+
const [additions, deletions, ...file] = line.split("\t");
|
|
511
|
+
if (!additions || !deletions || file.length === 0)
|
|
512
|
+
return [];
|
|
513
|
+
return [
|
|
514
|
+
[
|
|
515
|
+
file.join("\t"),
|
|
516
|
+
additions === "-" || deletions === "-" ? { binary: true, additions: 0, deletions: 0 } : { binary: false, additions: Number(additions), deletions: Number(deletions) }
|
|
517
|
+
]
|
|
518
|
+
];
|
|
519
|
+
}));
|
|
520
|
+
const patches = chunksByFile2(patch, (index) => files[index]?.file);
|
|
521
|
+
return {
|
|
522
|
+
diffs: files.map((entry) => {
|
|
523
|
+
const stat = stats.get(entry.file);
|
|
524
|
+
return {
|
|
525
|
+
...entry,
|
|
526
|
+
additions: stat?.additions ?? 0,
|
|
527
|
+
deletions: stat?.deletions ?? 0,
|
|
528
|
+
patch: stat?.binary ? "" : patches.get(entry.file) ?? emptyPatch2(entry.file)
|
|
529
|
+
};
|
|
530
|
+
}),
|
|
531
|
+
patchBytes: Buffer.byteLength(patch.text),
|
|
532
|
+
truncated: patch.truncated
|
|
533
|
+
};
|
|
534
|
+
});
|
|
535
|
+
const hasEntry = Effect.fnUntraced(function* (repository, tree, file) {
|
|
536
|
+
const text = (yield* repositoryOperation("restore", repository, [
|
|
537
|
+
"ls-tree",
|
|
538
|
+
"-z",
|
|
539
|
+
tree,
|
|
540
|
+
"--",
|
|
541
|
+
literalPathspec(file)
|
|
542
|
+
])).text.replace(/\0$/, "");
|
|
543
|
+
if (!text)
|
|
544
|
+
return false;
|
|
545
|
+
if (!/^\d+\s+\w+\s+[0-9a-f]+\t/.test(text))
|
|
546
|
+
return yield* new OperationError3({
|
|
547
|
+
operation: "restore",
|
|
548
|
+
directory: repository.worktree,
|
|
549
|
+
message: `Invalid tree entry for ${file}`
|
|
550
|
+
});
|
|
551
|
+
return true;
|
|
552
|
+
});
|
|
553
|
+
const removePath = (repository, file) => fs.remove(path.join(repository.worktree, file), { recursive: true, force: true }).pipe(Effect.mapError((cause) => new OperationError3({
|
|
554
|
+
operation: "restore",
|
|
555
|
+
directory: repository.worktree,
|
|
556
|
+
message: `Failed to remove ${file}`,
|
|
557
|
+
cause
|
|
558
|
+
})));
|
|
559
|
+
const pathsInTree = Effect.fnUntraced(function* (repository, tree, files) {
|
|
560
|
+
const pathspecs = files.map(literalPathspec);
|
|
561
|
+
const fits = pathspecs.reduce((length, pathspec) => length + pathspec.length + 1, 0) <= argumentBudget;
|
|
562
|
+
const result = yield* repositoryOperation("restore", repository, fits ? ["ls-tree", "-z", tree, "--", ...pathspecs] : ["ls-tree", "-r", "-t", "-z", "--full-tree", tree]);
|
|
563
|
+
const listed = yield* Effect.forEach(nuls(result.text), (record) => {
|
|
564
|
+
const match = /^\d+ \w+ [0-9a-f]+\t(.*)$/s.exec(record);
|
|
565
|
+
if (match)
|
|
566
|
+
return Effect.succeed(RelativePath2.make(match[1]));
|
|
567
|
+
return Effect.fail(new OperationError3({
|
|
568
|
+
operation: "restore",
|
|
569
|
+
directory: repository.worktree,
|
|
570
|
+
message: `Invalid tree entry: ${record}`
|
|
571
|
+
}));
|
|
572
|
+
});
|
|
573
|
+
return new Set(listed);
|
|
574
|
+
});
|
|
575
|
+
const restore = Effect.fn("Git.tree.restore")((input) => locked(input.repository, Effect.gen(function* () {
|
|
576
|
+
if (!input.files.size)
|
|
577
|
+
return;
|
|
578
|
+
if (!canBatchRestore([...input.files.keys()]))
|
|
579
|
+
return yield* Effect.forEach(input.files, ([file, tree]) => Effect.gen(function* () {
|
|
580
|
+
if (!(yield* hasEntry(input.repository, tree, file)))
|
|
581
|
+
return yield* removePath(input.repository, file);
|
|
582
|
+
yield* withTemporaryIndex(input.repository, (index) => repositoryOperation("restore", input.repository, ["checkout", tree, "--", literalPathspec(file)], {
|
|
583
|
+
index
|
|
584
|
+
}));
|
|
585
|
+
}), { discard: true });
|
|
586
|
+
const groups = new Map;
|
|
587
|
+
input.files.forEach((tree, file) => groups.set(tree, [...groups.get(tree) ?? [], file]));
|
|
588
|
+
const plan = yield* Effect.forEach(groups, ([tree, files]) => pathsInTree(input.repository, tree, files).pipe(Effect.map((present) => ({
|
|
589
|
+
tree,
|
|
590
|
+
present: files.filter((file) => present.has(file)),
|
|
591
|
+
absent: files.filter((file) => !present.has(file))
|
|
592
|
+
}))));
|
|
593
|
+
const checkouts = plan.filter((item) => item.present.length);
|
|
594
|
+
if (checkouts.length)
|
|
595
|
+
yield* withTemporaryIndex(input.repository, (index) => Effect.forEach(checkouts, (item) => repositoryOperation("restore", input.repository, ["checkout", item.tree, "--pathspec-from-file=-", "--pathspec-file-nul"], { stdin: item.present.map(literalPathspec).join("\x00") + "\x00", index }), { discard: true }));
|
|
596
|
+
yield* Effect.forEach(plan.flatMap((item) => item.absent), (file) => removePath(input.repository, file), { concurrency: 16, discard: true });
|
|
597
|
+
})));
|
|
598
|
+
const packObjects = Effect.fn("Git.objects.pack")(function* (repository) {
|
|
599
|
+
const objects = path.join(repository.gitDirectory, "objects");
|
|
600
|
+
const packDirectory = path.join(objects, "pack");
|
|
601
|
+
const loose = yield* looseObjects(objects);
|
|
602
|
+
const packs = yield* localPacks(packDirectory);
|
|
603
|
+
const combinePacks = packs.length >= packCountLimit;
|
|
604
|
+
if (loose.length < looseObjectLimit && !combinePacks)
|
|
605
|
+
return;
|
|
606
|
+
yield* withPackLock(repository, Effect.gen(function* () {
|
|
607
|
+
yield* sweepTemporaryPacks(packDirectory);
|
|
608
|
+
const combined = combinePacks ? yield* Effect.forEach(packs, (pack) => packIndex(repository, path.join(packDirectory, `${pack}.idx`)).pipe(Effect.map((oids) => ({ pack, oids })))) : [];
|
|
609
|
+
const objectIds = [...new Set([...loose.map((item) => item.oid), ...combined.flatMap((item) => item.oids)])];
|
|
610
|
+
if (!objectIds.length)
|
|
611
|
+
return;
|
|
612
|
+
const newPacks = (yield* repositoryOperation("pack", repository, [
|
|
613
|
+
"-c",
|
|
614
|
+
"pack.threads=2",
|
|
615
|
+
"-c",
|
|
616
|
+
"pack.windowMemory=64m",
|
|
617
|
+
"pack-objects",
|
|
618
|
+
"-q",
|
|
619
|
+
"--non-empty",
|
|
620
|
+
path.join(packDirectory, "pack")
|
|
621
|
+
], { stdin: objectIds.join(`
|
|
622
|
+
`) + `
|
|
623
|
+
` })).text.split(`
|
|
624
|
+
`).map((line) => line.trim()).filter(Boolean);
|
|
625
|
+
const packedIds = new Set((yield* Effect.forEach(newPacks, (name) => packIndex(repository, path.join(packDirectory, `pack-${name}.idx`)))).flat());
|
|
626
|
+
const missing = objectIds.filter((oid) => !packedIds.has(oid));
|
|
627
|
+
if (missing.length)
|
|
628
|
+
return yield* new OperationError3({
|
|
629
|
+
operation: "pack",
|
|
630
|
+
directory: repository.gitDirectory,
|
|
631
|
+
message: `Packed ${packedIds.size} objects but ${missing.length} are missing; nothing was removed`
|
|
632
|
+
});
|
|
633
|
+
yield* Effect.uninterruptible(Effect.gen(function* () {
|
|
634
|
+
yield* Effect.forEach(loose, (item) => fs.remove(item.file, { force: true }).pipe(Effect.ignore), {
|
|
635
|
+
concurrency: 16,
|
|
636
|
+
discard: true
|
|
637
|
+
});
|
|
638
|
+
const newPackNames = new Set(newPacks.map((name) => `pack-${name}`));
|
|
639
|
+
yield* Effect.forEach(combined.filter((item) => !newPackNames.has(item.pack)), (item) => Effect.forEach([".idx", ".pack", ".rev", ".bitmap", ".mtimes"], (extension) => fs.remove(path.join(packDirectory, `${item.pack}${extension}`), { force: true }).pipe(Effect.ignore), { discard: true }), { discard: true });
|
|
640
|
+
}));
|
|
641
|
+
}));
|
|
642
|
+
});
|
|
643
|
+
const looseObjects = Effect.fnUntraced(function* (objects) {
|
|
644
|
+
const fanout = (yield* fs.readDirectory(objects).pipe(Effect.orElseSucceed(() => []))).filter((entry) => /^[0-9a-f]{2}$/.test(entry));
|
|
645
|
+
const listed = yield* Effect.forEach(fanout, (prefix) => fs.readDirectory(path.join(objects, prefix)).pipe(Effect.orElseSucceed(() => []), Effect.map((entries) => entries.filter((entry) => /^[0-9a-f]{38}$|^[0-9a-f]{62}$/.test(entry)).map((entry) => ({ oid: prefix + entry, file: path.join(objects, prefix, entry) })))), { concurrency: 16 });
|
|
646
|
+
return listed.flat();
|
|
647
|
+
});
|
|
648
|
+
const localPacks = Effect.fnUntraced(function* (directory) {
|
|
649
|
+
const entries = new Set(yield* fs.readDirectory(directory).pipe(Effect.orElseSucceed(() => [])));
|
|
650
|
+
return [...entries].filter((entry) => entry.startsWith("pack-") && entry.endsWith(".pack")).map((entry) => entry.slice(0, -".pack".length)).filter((pack) => entries.has(`${pack}.idx`) && !entries.has(`${pack}.keep`) && !entries.has(`${pack}.promisor`));
|
|
651
|
+
});
|
|
652
|
+
const packIndex = Effect.fnUntraced(function* (repository, file) {
|
|
653
|
+
const bytes = yield* fs.readFile(file).pipe(Effect.mapError((cause) => new OperationError3({
|
|
654
|
+
operation: "pack",
|
|
655
|
+
directory: repository.gitDirectory,
|
|
656
|
+
message: `Failed to read ${file}`,
|
|
657
|
+
cause
|
|
658
|
+
})));
|
|
659
|
+
const parsed = packIndexObjectIDs(bytes);
|
|
660
|
+
if (parsed)
|
|
661
|
+
return parsed;
|
|
662
|
+
const result = yield* repositoryOperation("pack", repository, ["show-index"], { stdin: bytes });
|
|
663
|
+
return result.text.split(`
|
|
664
|
+
`).flatMap((line) => {
|
|
665
|
+
const oid = line.split(" ")[1];
|
|
666
|
+
return oid ? [oid] : [];
|
|
667
|
+
});
|
|
668
|
+
});
|
|
669
|
+
const sweepTemporaryPacks = Effect.fnUntraced(function* (directory) {
|
|
670
|
+
const cutoff = Date.now() - 60 * 60 * 1000;
|
|
671
|
+
const entries = yield* fs.readDirectory(directory).pipe(Effect.orElseSucceed(() => []));
|
|
672
|
+
const indexed = new Set(entries.filter((entry) => entry.endsWith(".idx")).map((entry) => entry.slice(0, -4)));
|
|
673
|
+
yield* Effect.forEach(entries.filter((entry) => entry.startsWith("tmp_") || entry.startsWith("pack-") && entry.endsWith(".pack") && !indexed.has(entry.slice(0, -5))), (entry) => fs.stat(path.join(directory, entry)).pipe(Effect.flatMap((info) => (Option.getOrUndefined(info.mtime)?.getTime() ?? 0) < cutoff ? fs.remove(path.join(directory, entry), { force: true }) : Effect.void), Effect.ignore), { discard: true });
|
|
674
|
+
});
|
|
675
|
+
const withPackLock = (repository, effect) => {
|
|
676
|
+
const file = path.join(repository.gitDirectory, "opencode-pack.lock");
|
|
677
|
+
return Effect.gen(function* () {
|
|
678
|
+
const stale = yield* fs.stat(file).pipe(Effect.map((info) => (Option.getOrUndefined(info.mtime)?.getTime() ?? 0) < Date.now() - 60 * 60 * 1000), Effect.orElseSucceed(() => false));
|
|
679
|
+
if (stale)
|
|
680
|
+
yield* fs.remove(file, { force: true }).pipe(Effect.ignore);
|
|
681
|
+
const acquired = yield* fs.writeFileString(file, String(process.pid), { flag: "wx" }).pipe(Effect.as(true), Effect.orElseSucceed(() => false));
|
|
682
|
+
if (!acquired)
|
|
683
|
+
return;
|
|
684
|
+
yield* effect.pipe(Effect.ensuring(fs.remove(file, { force: true }).pipe(Effect.ignore)));
|
|
685
|
+
});
|
|
686
|
+
};
|
|
687
|
+
const worktreeRun = Effect.fnUntraced(function* (operation, repository, args, worktreeDirectory, cwd = repository.worktree) {
|
|
688
|
+
const result = yield* proc.run(ChildProcess.make(gitExecutable2, args, { cwd, extendEnv: true, stdin: "ignore" })).pipe(Effect.mapError((cause) => new WorktreeError2({ operation, directory: worktreeDirectory, message: cause.message, cause })));
|
|
689
|
+
if (result.exitCode === 0)
|
|
690
|
+
return result.stdout.toString("utf8");
|
|
691
|
+
const message = result.stderr.toString("utf8").trim() || result.stdout.toString("utf8").trim() || "Git failed";
|
|
692
|
+
return yield* new WorktreeError2({
|
|
693
|
+
operation,
|
|
694
|
+
directory: worktreeDirectory,
|
|
695
|
+
message,
|
|
696
|
+
forceRequired: operation === "remove" && /contains modified or untracked files|is dirty/i.test(message)
|
|
697
|
+
});
|
|
698
|
+
});
|
|
699
|
+
const worktreeCreate = Effect.fn("Git.worktree.create")(function* (input) {
|
|
700
|
+
yield* worktreeRun("create", input.repository, ["worktree", "add", "--detach", "--", input.directory, input.ref ?? "HEAD"], input.directory);
|
|
701
|
+
const repository = yield* discover(input.directory);
|
|
702
|
+
if (repository)
|
|
703
|
+
return repository;
|
|
704
|
+
return yield* new WorktreeError2({
|
|
705
|
+
operation: "create",
|
|
706
|
+
directory: input.directory,
|
|
707
|
+
message: "Created worktree could not be opened"
|
|
708
|
+
});
|
|
709
|
+
});
|
|
710
|
+
const worktreeRemove = Effect.fn("Git.worktree.remove")(function* (input) {
|
|
711
|
+
yield* worktreeRun("remove", input.repository, ["worktree", "remove", ...input.force ? ["--force"] : [], input.directory], input.directory, input.repository.commonDirectory);
|
|
712
|
+
});
|
|
713
|
+
const worktreeList = Effect.fn("Git.worktree.list")(function* (repository) {
|
|
714
|
+
return (yield* worktreeRun("list", repository, ["worktree", "list", "--porcelain"])).split(`
|
|
715
|
+
`).filter((line) => line.startsWith("worktree ")).map((line, index) => new Worktree2({
|
|
716
|
+
directory: AbsolutePath2.make(resolvePath(repository.worktree, line.slice("worktree ".length).trim())),
|
|
717
|
+
kind: index === 0 ? "main" : "linked"
|
|
718
|
+
}));
|
|
719
|
+
});
|
|
720
|
+
return Service83.of({
|
|
721
|
+
repo: { discover, clone, create },
|
|
722
|
+
remote: { get: remote },
|
|
723
|
+
history: { head, branch, defaultRemoteBranch: remoteHead, rootCommits: roots },
|
|
724
|
+
sync: { fetchRemotes: fetch, fetchBranch, checkoutRemoteBranch: checkout, resetHard: reset },
|
|
725
|
+
worktree: { create: worktreeCreate, remove: worktreeRemove, list: worktreeList },
|
|
726
|
+
index: { refresh, ignored },
|
|
727
|
+
tree: {
|
|
728
|
+
capture: captureTree,
|
|
729
|
+
write: (repository) => writeTree(repository),
|
|
730
|
+
files: treeFiles,
|
|
731
|
+
diff: treeDiff,
|
|
732
|
+
restore
|
|
733
|
+
},
|
|
734
|
+
objects: { pack: packObjects }
|
|
735
|
+
});
|
|
736
|
+
}));
|
|
737
|
+
var node87 = makeGlobalNode({ service: Service83, layer, deps: [FSUtil.node, AppProcess.node] });
|
|
738
|
+
function run(cwd, proc, args) {
|
|
739
|
+
return execute(cwd, proc, args).pipe(Effect.orElseSucceed(() => ({ exitCode: 1, text: "", stderr: "" })));
|
|
740
|
+
}
|
|
741
|
+
function execute(cwd, proc, args) {
|
|
742
|
+
return proc.run(ChildProcess.make(gitExecutable2, args, {
|
|
743
|
+
cwd,
|
|
744
|
+
extendEnv: true,
|
|
745
|
+
stdin: "ignore"
|
|
746
|
+
})).pipe(Effect.map((result) => ({
|
|
747
|
+
exitCode: result.exitCode,
|
|
748
|
+
text: result.stdout.toString("utf8"),
|
|
749
|
+
stderr: result.stderr.toString("utf8")
|
|
750
|
+
})));
|
|
751
|
+
}
|
|
752
|
+
function nuls(text) {
|
|
753
|
+
return text.split("\x00").filter(Boolean);
|
|
754
|
+
}
|
|
755
|
+
function literalPathspec(file) {
|
|
756
|
+
return `:(literal)${file}`;
|
|
757
|
+
}
|
|
758
|
+
function canBatchRestore(files) {
|
|
759
|
+
const canonical = files.every((file) => file.split("/").every((part) => /^[\x20-\x7e]+$/.test(part) && !/[\\:]/.test(part) && !/[. ]$/.test(part)));
|
|
760
|
+
if (!canonical)
|
|
761
|
+
return false;
|
|
762
|
+
const folded = new Set(files.map((file) => file.toLowerCase()));
|
|
763
|
+
if (folded.size !== files.length)
|
|
764
|
+
return false;
|
|
765
|
+
return files.every((file) => {
|
|
766
|
+
const parts = file.toLowerCase().split("/");
|
|
767
|
+
return parts.slice(1).every((_, index) => !folded.has(parts.slice(0, index + 1).join("/")));
|
|
768
|
+
});
|
|
769
|
+
}
|
|
770
|
+
function packIndexObjectIDs(bytes) {
|
|
771
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
772
|
+
if (bytes.length < 1032 || view.getUint32(0) !== 4285812579 || view.getUint32(4) !== 2)
|
|
773
|
+
return;
|
|
774
|
+
const count = view.getUint32(8 + 255 * 4);
|
|
775
|
+
const hash = (bytes.length - 1032 - 8 * count) / (count + 2);
|
|
776
|
+
if (hash !== 20 && hash !== 32)
|
|
777
|
+
return;
|
|
778
|
+
return Array.from({ length: count }, (_, index) => Buffer.from(bytes.subarray(1032 + index * hash, 1032 + (index + 1) * hash)).toString("hex"));
|
|
779
|
+
}
|
|
780
|
+
function pathGroups(paths) {
|
|
781
|
+
return paths.toSorted((left, right) => Buffer.compare(Buffer.from(left), Buffer.from(right))).reduce((state, file) => {
|
|
782
|
+
const cost = file.length + 3;
|
|
783
|
+
const current = state.groups.at(-1);
|
|
784
|
+
if (current && state.length + cost <= argumentBudget) {
|
|
785
|
+
current.push(file);
|
|
786
|
+
return { groups: state.groups, length: state.length + cost };
|
|
787
|
+
}
|
|
788
|
+
return { groups: [...state.groups, [file]], length: cost };
|
|
789
|
+
}, { groups: [], length: 0 }).groups;
|
|
790
|
+
}
|
|
791
|
+
function uniqueSuffix() {
|
|
792
|
+
return `${process.pid}-${Math.random().toString(36).slice(2)}`;
|
|
793
|
+
}
|
|
794
|
+
function resolvePath(cwd, value) {
|
|
795
|
+
const trimmed = value.replace(/[\r\n]+$/, "");
|
|
796
|
+
if (!trimmed)
|
|
797
|
+
return cwd;
|
|
798
|
+
const normalized = FSUtil.windowsPath(trimmed);
|
|
799
|
+
if (path.isAbsolute(normalized))
|
|
800
|
+
return path.normalize(normalized);
|
|
801
|
+
return path.resolve(cwd, normalized);
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
export { Repository2, TreeID2, OperationError3, Worktree2, WorktreeError2, Service83, node87, exports_git3 };
|