@opencode/core 2.0.24 → 2.0.26
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 +84 -83
- package/dist/aisdk-native.js +90 -89
- package/dist/aisdk.js +95 -94
- package/dist/app.js +7 -7
- package/dist/bus.js +70 -69
- package/dist/chunks/{repository-4344f0hm.js → location-services-033h4s8k.js} +36 -36
- package/dist/chunks/{repository-srhj5f56.js → location-services-05rbeqff.js} +11 -11
- package/dist/chunks/{repository-m44fkk4m.js → location-services-0dzshrg8.js} +6 -6
- package/dist/chunks/{repository-0vbcp93d.js → location-services-0emb60td.js} +2 -2
- package/dist/chunks/{repository-46tr0mr7.js → location-services-0g2d8ktt.js} +32 -32
- package/dist/chunks/{repository-etdaqrbr.js → location-services-0gyy4w8j.js} +32 -32
- package/dist/chunks/{repository-embw8kgh.js → location-services-0k2v0y72.js} +4 -4
- package/dist/chunks/{repository-0paq2nw3.js → location-services-0paq2nw3.js} +1 -1
- package/dist/chunks/{repository-ntaqe8vs.js → location-services-13z4sfdv.js} +21 -21
- package/dist/chunks/{repository-6x4qebe7.js → location-services-14tdaeeb.js} +35 -35
- package/dist/chunks/{repository-cjwramev.js → location-services-1603qf85.js} +4 -4
- package/dist/chunks/{repository-f8tnf7f1.js → location-services-18cepezj.js} +12 -28
- package/dist/chunks/{repository-q7jxq9y7.js → location-services-1bywdm55.js} +35 -22
- package/dist/chunks/{repository-1dazxqgg.js → location-services-1dazxqgg.js} +2 -2
- package/dist/chunks/{repository-m993mvxq.js → location-services-1yjmjhdz.js} +156 -144
- package/dist/chunks/{repository-yqt58wae.js → location-services-1zmgywvv.js} +12 -12
- package/dist/chunks/{repository-g69c5a8v.js → location-services-22dd1myg.js} +16 -16
- package/dist/chunks/{repository-ef2cw19s.js → location-services-23etyap0.js} +10 -10
- package/dist/chunks/{repository-tk5m56y0.js → location-services-271jn6q7.js} +13 -13
- package/dist/chunks/{repository-2a5m3afh.js → location-services-2a5m3afh.js} +1 -1
- package/dist/chunks/{repository-kfj4fg87.js → location-services-2bz9fvty.js} +1 -1
- package/dist/chunks/{repository-ntbz9wjc.js → location-services-2dfj5p4n.js} +11 -11
- package/dist/chunks/{repository-ajh7mqgq.js → location-services-2h8jr8ns.js} +32 -32
- package/dist/chunks/{repository-erq8vxjr.js → location-services-2p3jady7.js} +1 -1
- package/dist/chunks/{repository-9815d8pv.js → location-services-2qatx596.js} +23 -14
- package/dist/chunks/{repository-ydszhw6d.js → location-services-2rarpg4h.js} +20 -20
- package/dist/chunks/{repository-77apbbcp.js → location-services-2ywvfrer.js} +97 -60
- package/dist/chunks/{repository-4z7pkycv.js → location-services-337ertw6.js} +19 -19
- package/dist/chunks/{repository-ecwx0042.js → location-services-37n1r8jq.js} +15 -15
- package/dist/chunks/{repository-h2b79v29.js → location-services-3cegwx68.js} +2 -2
- package/dist/chunks/{repository-3fc6dm20.js → location-services-3fc6dm20.js} +1 -1
- package/dist/chunks/{repository-3hepkmqq.js → location-services-3hepkmqq.js} +1 -1
- package/dist/chunks/{repository-zd30eb5w.js → location-services-3qaj82j9.js} +5 -5
- package/dist/chunks/{repository-3smtnn6g.js → location-services-3smtnn6g.js} +1 -1
- package/dist/chunks/{repository-3tvqynh2.js → location-services-3tvqynh2.js} +1 -1
- package/dist/chunks/{repository-4y69v0zr.js → location-services-3xwday2w.js} +13 -13
- package/dist/chunks/{repository-0g25qkkf.js → location-services-3ymvsd51.js} +11 -11
- package/dist/chunks/{repository-3zsf4n22.js → location-services-3zsf4n22.js} +1 -1
- package/dist/chunks/{repository-1gfgk62c.js → location-services-4e8vs6eh.js} +8 -8
- package/dist/chunks/{repository-nszdq9jy.js → location-services-4n7p58nn.js} +86 -86
- package/dist/chunks/{repository-2ccvkpx1.js → location-services-4ts7tf6z.js} +2 -2
- package/dist/chunks/{repository-32xj3ztx.js → location-services-4wk6a8dy.js} +38 -34
- package/dist/chunks/{repository-hw3ewgqj.js → location-services-545qbh9j.js} +11 -11
- package/dist/chunks/{repository-54ma36ye.js → location-services-54ma36ye.js} +1 -1
- package/dist/chunks/location-services-54wc3syr.js +26 -0
- package/dist/chunks/{repository-fy698pgn.js → location-services-54whn6c0.js} +20 -20
- package/dist/chunks/{repository-xmy45d6e.js → location-services-5ddhd1dx.js} +23 -23
- package/dist/chunks/{repository-9mhtj97w.js → location-services-5hbgr4ym.js} +26 -26
- package/dist/chunks/{repository-qv02qg64.js → location-services-5j2a3mtt.js} +5 -5
- package/dist/chunks/{repository-5m9w47nd.js → location-services-5m9w47nd.js} +1 -1
- package/dist/chunks/{repository-9yaf30yb.js → location-services-5pv1zqw9.js} +36 -36
- package/dist/chunks/{repository-e3qxr5gk.js → location-services-5qd3pb7m.js} +2 -2
- package/dist/chunks/{repository-qy0n8417.js → location-services-5r6vgt0c.js} +26 -26
- package/dist/chunks/{repository-5t3nmthw.js → location-services-5t3nmthw.js} +2 -2
- package/dist/chunks/{repository-s8qvywtq.js → location-services-685vzyzq.js} +11 -11
- package/dist/chunks/{repository-57myy5jh.js → location-services-69rwvrvy.js} +5 -5
- package/dist/chunks/{repository-0qpq6ar5.js → location-services-6cjchcpv.js} +7 -7
- package/dist/chunks/{repository-cb3fgacg.js → location-services-6czf1ptr.js} +29 -29
- package/dist/chunks/{repository-vngdzw63.js → location-services-6eqgd3yd.js} +40 -36
- package/dist/chunks/{repository-pk7hbv6p.js → location-services-6m2jx756.js} +21 -6
- package/dist/chunks/{repository-t7y8x8j8.js → location-services-6qp67sjv.js} +16 -16
- package/dist/chunks/{repository-zk46kswf.js → location-services-6rb6ntmj.js} +17 -17
- package/dist/chunks/{repository-z6b5w8cf.js → location-services-6rg2adkq.js} +2 -2
- package/dist/chunks/{repository-05t95569.js → location-services-6rt2kzb2.js} +20 -20
- package/dist/chunks/{repository-6xb47vfp.js → location-services-6xb47vfp.js} +1 -1
- package/dist/chunks/{repository-ve1j3q85.js → location-services-72ha41gd.js} +15 -15
- package/dist/chunks/{repository-aqryd466.js → location-services-73b4x9hb.js} +22 -22
- package/dist/chunks/{repository-7bmhse3q.js → location-services-7bmhse3q.js} +1 -1
- package/dist/chunks/{repository-qne3fa44.js → location-services-7cgt7722.js} +5 -5
- package/dist/chunks/{repository-8hjmwb77.js → location-services-7eh8rnse.js} +31 -23
- package/dist/chunks/{repository-2t9hnq90.js → location-services-7eyvw8cj.js} +10 -10
- package/dist/chunks/{repository-7z6z4pna.js → location-services-7f0130xc.js} +12 -12
- package/dist/chunks/{repository-eqh5fpv6.js → location-services-7m8kp9a5.js} +11 -11
- package/dist/chunks/{repository-q76xcmv9.js → location-services-7nk6w983.js} +16 -16
- package/dist/chunks/{repository-gc135ar8.js → location-services-7tpxex51.js} +8 -8
- package/dist/chunks/location-services-83zk0r45.js +91 -0
- package/dist/chunks/{repository-1dvck2a7.js → location-services-84h8c373.js} +2 -2
- package/dist/chunks/location-services-84wd9syh.js +19 -0
- package/dist/chunks/{repository-tcezcvh9.js → location-services-89znhe33.js} +4 -4
- package/dist/chunks/{repository-yfe405ny.js → location-services-8ag043pz.js} +6 -6
- package/dist/chunks/{repository-5ng375bv.js → location-services-8ansnb3t.js} +12 -10
- package/dist/chunks/{repository-8d7r5vzw.js → location-services-8d7r5vzw.js} +1 -1
- package/dist/chunks/{repository-xhv84ab7.js → location-services-8ejvg7qw.js} +25 -25
- package/dist/chunks/{repository-5daktx2q.js → location-services-8m6m0r52.js} +3 -3
- package/dist/chunks/{repository-w7a2abxy.js → location-services-8sc63a00.js} +12 -12
- package/dist/chunks/{repository-k02x6tcx.js → location-services-95kvcnwx.js} +33 -33
- package/dist/chunks/{repository-t550f9t1.js → location-services-9t7a50xb.js} +4 -4
- package/dist/chunks/{repository-tg6e69q8.js → location-services-a69nnjbb.js} +2 -2
- package/dist/chunks/{repository-y16p1w2y.js → location-services-a881zpfh.js} +9 -9
- package/dist/chunks/{repository-aaet6srn.js → location-services-aaet6srn.js} +2 -2
- package/dist/chunks/{repository-t7wcnk30.js → location-services-aqyhgb0m.js} +9 -9
- package/dist/chunks/{repository-my4zabxr.js → location-services-arz7hw7x.js} +2 -2
- package/dist/chunks/{repository-fj3b7143.js → location-services-ayvdrfck.js} +8 -8
- package/dist/chunks/{repository-y6mhs71q.js → location-services-ayx4aqd5.js} +4 -4
- package/dist/chunks/{repository-q6vgfyay.js → location-services-b2y4zj4f.js} +4 -4
- package/dist/chunks/{repository-56a9smke.js → location-services-b3t0zy8v.js} +18 -18
- package/dist/chunks/{repository-cfsekr6v.js → location-services-b4twkq7r.js} +6 -6
- package/dist/chunks/{repository-b6gygkdw.js → location-services-b6gygkdw.js} +2 -2
- package/dist/chunks/{repository-dbp4m4ge.js → location-services-b7gbstx8.js} +35 -35
- package/dist/chunks/{repository-47phkfqm.js → location-services-b83ajrzw.js} +46 -46
- package/dist/chunks/{repository-xvvw76kz.js → location-services-be1k9dy1.js} +7 -7
- package/dist/chunks/{repository-gy4662d6.js → location-services-beme9910.js} +11 -11
- package/dist/chunks/{repository-j2htzqze.js → location-services-bqz0shrj.js} +2 -2
- package/dist/chunks/{repository-fy3w4x98.js → location-services-bx8cgf5b.js} +18 -18
- package/dist/chunks/{repository-h6yzxz9r.js → location-services-c3cny6dd.js} +30 -20
- package/dist/chunks/{repository-2texf5vf.js → location-services-cnxfmxea.js} +19 -19
- package/dist/chunks/{repository-h6c2yg5r.js → location-services-cxc2sms6.js} +8 -8
- package/dist/chunks/{repository-1vvm3xv7.js → location-services-czveazf8.js} +11 -11
- package/dist/chunks/{repository-012g15cx.js → location-services-d0dvav9e.js} +11 -11
- package/dist/chunks/{repository-2455wr4j.js → location-services-d336qae7.js} +15 -15
- package/dist/chunks/{repository-f8xdbq78.js → location-services-d8angek9.js} +9 -9
- package/dist/chunks/{repository-2m8jawch.js → location-services-dd40s8jk.js} +4 -4
- package/dist/chunks/{repository-h16n41p4.js → location-services-dk9npkzx.js} +23 -23
- package/dist/chunks/{repository-xkntkrq7.js → location-services-dmqcgk4z.js} +5 -5
- package/dist/chunks/{repository-dpkg50ah.js → location-services-dpkg50ah.js} +1 -1
- package/dist/chunks/{repository-wnfszx78.js → location-services-dqt71wdb.js} +10 -10
- package/dist/chunks/{repository-0h1qn0y5.js → location-services-ds6dktyv.js} +10 -10
- package/dist/chunks/{repository-h4p4pa57.js → location-services-dtttw669.js} +11 -11
- package/dist/chunks/{repository-4azg6a58.js → location-services-dwccypxr.js} +115 -37
- package/dist/chunks/{repository-wnh11861.js → location-services-e0xah09s.js} +17 -17
- package/dist/chunks/{repository-k37ga4vh.js → location-services-e8242ssa.js} +8 -8
- package/dist/chunks/{repository-00e0wh3q.js → location-services-e8b6y2pt.js} +24 -39
- package/dist/chunks/{repository-cs63tcvs.js → location-services-ecxg4nmc.js} +9 -9
- package/dist/chunks/{repository-kxam66j6.js → location-services-eehqdfn9.js} +13 -13
- package/dist/chunks/{repository-ef5x83kb.js → location-services-ef5x83kb.js} +1 -1
- package/dist/chunks/{repository-1bbkgx8g.js → location-services-eq1pz5kg.js} +3 -3
- package/dist/chunks/{repository-0f0pgr2e.js → location-services-erz44zsw.js} +3 -3
- package/dist/chunks/{repository-etq0c3wd.js → location-services-etq0c3wd.js} +1 -1
- package/dist/chunks/location-services-ewb5cdj2.js +166 -0
- package/dist/chunks/{repository-gpng080p.js → location-services-ez9mb76v.js} +15 -15
- package/dist/chunks/{repository-g34b934z.js → location-services-f4a46b6n.js} +23 -17
- package/dist/chunks/{repository-71az546q.js → location-services-f75zav2x.js} +2 -2
- package/dist/chunks/{repository-a7cd87s2.js → location-services-fab1rbc6.js} +70 -70
- package/dist/chunks/{repository-5t80mpw4.js → location-services-fm6nvr4y.js} +19 -19
- package/dist/chunks/{repository-a2ew8a62.js → location-services-fqb2p7cx.js} +4 -4
- package/dist/chunks/{repository-vt8dt6j6.js → location-services-fy7t80vs.js} +29 -29
- package/dist/chunks/{repository-c8bydgjz.js → location-services-fzmtkgat.js} +6 -6
- package/dist/chunks/{repository-p42hj8p8.js → location-services-g0445xdp.js} +8 -8
- package/dist/chunks/{repository-1wb0x8n3.js → location-services-g4jcj52r.js} +25 -9
- package/dist/chunks/{repository-g5w8qwbj.js → location-services-g5w8qwbj.js} +1 -1
- package/dist/chunks/{repository-9yxvhatz.js → location-services-g93vh8n3.js} +4 -4
- package/dist/chunks/{repository-gd4qta3r.js → location-services-gd4qta3r.js} +1 -1
- package/dist/chunks/{repository-2wredcz9.js → location-services-gjzbw61z.js} +20 -20
- package/dist/chunks/{repository-mfct962c.js → location-services-gnwdqr3s.js} +41 -11
- package/dist/chunks/{repository-g50bcqhp.js → location-services-gsahv7qc.js} +4 -4
- package/dist/chunks/{repository-1cw3fj19.js → location-services-gw15ex2k.js} +3 -3
- package/dist/chunks/{repository-q7ngdz78.js → location-services-gx1aj30x.js} +29 -29
- package/dist/chunks/{repository-h6vf3j39.js → location-services-h6vf3j39.js} +1 -1
- package/dist/chunks/{repository-3556dn8t.js → location-services-he27pt63.js} +4 -3
- package/dist/chunks/{repository-s9nwmxxs.js → location-services-hjwszd6c.js} +30 -30
- package/dist/chunks/{repository-s8v3amej.js → location-services-hm33bzgf.js} +1 -1
- package/dist/chunks/location-services-j07hvfq8.js +507 -0
- package/dist/chunks/{repository-0qqvk1tp.js → location-services-j0p2p2c7.js} +7 -7
- package/dist/chunks/{repository-j56e64zr.js → location-services-j56e64zr.js} +1 -1
- package/dist/chunks/{repository-f6sbv01c.js → location-services-j5w85phq.js} +48 -43
- package/dist/chunks/{repository-rn938jk3.js → location-services-j7ecp1pt.js} +47 -47
- package/dist/chunks/{repository-68ga000j.js → location-services-j7kpd95e.js} +37 -37
- package/dist/chunks/{repository-89za3yyg.js → location-services-j8s9ab9g.js} +9 -9
- package/dist/chunks/{repository-hkgfm0m5.js → location-services-jbqrqj8a.js} +24 -24
- package/dist/chunks/{repository-hp7m3mgg.js → location-services-jhzrzk65.js} +25 -25
- package/dist/chunks/{repository-dfcrteyq.js → location-services-jmy38avr.js} +13 -13
- package/dist/chunks/{repository-dp8mmgq4.js → location-services-jsjec30j.js} +15 -15
- package/dist/chunks/{repository-4cw36es0.js → location-services-jx2ezg5d.js} +9 -9
- package/dist/chunks/{repository-5ej07zgb.js → location-services-jy50qwea.js} +7 -7
- package/dist/chunks/{repository-9e5bzkjp.js → location-services-kb9j3d72.js} +3 -3
- package/dist/chunks/{repository-k70p9jzb.js → location-services-kbc5vjqx.js} +9 -9
- package/dist/chunks/{repository-rm4s95e7.js → location-services-kfd8nr0x.js} +84 -84
- package/dist/chunks/{repository-mpd66srn.js → location-services-km3q0jzz.js} +1 -1
- package/dist/chunks/{repository-2tyga0yy.js → location-services-kn6rpkjj.js} +23 -10
- package/dist/chunks/{repository-wb70vhte.js → location-services-kpdw2w1f.js} +11 -11
- package/dist/chunks/{repository-hdjgtqrb.js → location-services-kpvtvmar.js} +43 -34
- package/dist/chunks/{repository-tbs2jyb2.js → location-services-kxc47ydf.js} +7 -7
- package/dist/chunks/{repository-prjw6x41.js → location-services-ky9wb2b6.js} +4 -4
- package/dist/chunks/location-services-m2wdsk0y.js +72 -0
- package/dist/chunks/{repository-m3fdjcah.js → location-services-m3fdjcah.js} +1 -1
- package/dist/chunks/{repository-mn0942hp.js → location-services-m3tjbat9.js} +32 -32
- package/dist/chunks/location-services-m55qy151.js +53 -0
- package/dist/chunks/{repository-m9w0rfyh.js → location-services-m9w0rfyh.js} +1 -1
- package/dist/chunks/{repository-p5ev1zz5.js → location-services-mbzs7f5w.js} +9 -9
- package/dist/chunks/{repository-56gdpj1q.js → location-services-mfqp6xfm.js} +6 -6
- package/dist/chunks/{repository-h6qw898r.js → location-services-mp6hah50.js} +11 -11
- package/dist/chunks/{repository-zvjhkatg.js → location-services-ms93yq6r.js} +8 -8
- package/dist/chunks/{repository-gry8sgkd.js → location-services-mz0nparr.js} +9 -9
- package/dist/chunks/{repository-042aawn8.js → location-services-n1tn96dy.js} +23 -23
- package/dist/chunks/{repository-tarna68p.js → location-services-n2sybw15.js} +9 -9
- package/dist/chunks/{repository-16558gs3.js → location-services-n4swcb0t.js} +50 -50
- package/dist/chunks/{repository-dt6m3qwv.js → location-services-ncrrbzx4.js} +18 -18
- package/dist/chunks/{repository-rk3ekeb4.js → location-services-nd8mttf9.js} +5 -6
- package/dist/chunks/location-services-ng6mtv9p.js +804 -0
- package/dist/chunks/{repository-w5ystqj3.js → location-services-nnp9mmjf.js} +6 -6
- package/dist/chunks/{repository-6b1pjwt3.js → location-services-npgbbvk3.js} +3 -3
- package/dist/chunks/{repository-zhwzkc0c.js → location-services-nq21c0gd.js} +18 -18
- package/dist/chunks/{repository-drnf6xwf.js → location-services-nqxj0yn4.js} +2 -2
- package/dist/chunks/{repository-c20khjev.js → location-services-nrdmrqsx.js} +21 -21
- package/dist/chunks/{repository-h2yw0gk4.js → location-services-nv669pfy.js} +22 -22
- package/dist/chunks/{repository-yn96zvvk.js → location-services-nw6v932m.js} +11 -11
- package/dist/chunks/{repository-t8n7ymvq.js → location-services-nw7jj9x7.js} +3 -3
- package/dist/chunks/{repository-chyvjp63.js → location-services-nx4qc7m3.js} +12 -12
- package/dist/chunks/{repository-1acjjqhc.js → location-services-nxer0yad.js} +4 -4
- package/dist/chunks/{repository-rjsk0n41.js → location-services-nyc5zq8g.js} +9 -9
- package/dist/chunks/{repository-b3cm3psy.js → location-services-p7jag4ba.js} +7 -7
- package/dist/chunks/{repository-96ctqc5x.js → location-services-pcxghkgz.js} +4 -4
- package/dist/chunks/location-services-phz3h32g.js +18 -0
- package/dist/chunks/{repository-pjvnvgmy.js → location-services-pjvnvgmy.js} +1 -1
- package/dist/chunks/{repository-vqkmcgyv.js → location-services-pjxwrfec.js} +3 -3
- package/dist/chunks/{repository-pknna89w.js → location-services-pknna89w.js} +1 -1
- package/dist/chunks/{repository-mfmqp3ds.js → location-services-pwjskxwy.js} +45 -45
- package/dist/chunks/{repository-4c5k237e.js → location-services-py3xsg43.js} +32 -32
- package/dist/chunks/{repository-0j77ygfz.js → location-services-q0xm7vwc.js} +6 -6
- package/dist/chunks/{repository-gkcjs2dn.js → location-services-q9099wq0.js} +11 -11
- package/dist/chunks/{repository-x4k83k5f.js → location-services-qbqyxtrr.js} +9 -9
- package/dist/chunks/{repository-5k54pn5m.js → location-services-qe1dfmj5.js} +10 -10
- package/dist/chunks/{repository-2k8khapm.js → location-services-qgn6gcr1.js} +5 -5
- package/dist/chunks/{repository-a6rczh0a.js → location-services-qhaz1dgr.js} +42 -42
- package/dist/chunks/{repository-5r637m3f.js → location-services-qmemjc4c.js} +55 -55
- package/dist/chunks/{repository-qnc92qwc.js → location-services-qnc92qwc.js} +1 -1
- package/dist/chunks/{repository-qsdy395h.js → location-services-qsdy395h.js} +1 -1
- package/dist/chunks/{repository-qxjc9qry.js → location-services-qxjc9qry.js} +3 -3
- package/dist/chunks/{repository-zyk1yjk8.js → location-services-qygbw77c.js} +5 -5
- package/dist/chunks/{repository-d4he2qe1.js → location-services-r2m716tb.js} +9 -9
- package/dist/chunks/{repository-j58c5xyq.js → location-services-r9w3djhf.js} +9 -9
- package/dist/chunks/{repository-rdw6cm16.js → location-services-rdw6cm16.js} +1 -1
- package/dist/chunks/{repository-56gyfky0.js → location-services-re778bjs.js} +10 -10
- package/dist/chunks/{repository-rb8xm6cm.js → location-services-rr8str7e.js} +14 -14
- package/dist/chunks/{repository-w6gqnbcy.js → location-services-rv5eepcz.js} +3 -3
- package/dist/chunks/{repository-3vy5pcbx.js → location-services-s4fmg9a9.js} +54 -41
- package/dist/chunks/{repository-t5483b9c.js → location-services-s6cn836p.js} +4 -4
- package/dist/chunks/{repository-7d05dvcz.js → location-services-s89werp4.js} +4 -4
- package/dist/chunks/{repository-9s1pr29s.js → location-services-s9pfz9kw.js} +41 -45
- package/dist/chunks/{repository-tzy9a5tv.js → location-services-sn65mkzm.js} +27 -27
- package/dist/chunks/{repository-ce3pkz8w.js → location-services-stx8q1jh.js} +8 -8
- package/dist/chunks/{repository-h4jx6m0r.js → location-services-sw2694pe.js} +15 -15
- package/dist/chunks/{repository-y6brtjeh.js → location-services-swh0ttr4.js} +31 -31
- package/dist/chunks/{repository-7c08hygz.js → location-services-t35zxaf7.js} +11 -11
- package/dist/chunks/{repository-rpp7c75e.js → location-services-t82x27tp.js} +53 -49
- package/dist/chunks/{repository-tazgh4e4.js → location-services-tazgh4e4.js} +1 -1
- package/dist/chunks/{repository-tdstcens.js → location-services-tdstcens.js} +1 -1
- package/dist/chunks/{repository-23294nz8.js → location-services-tnv0t922.js} +26 -26
- package/dist/chunks/{repository-4ege8dpt.js → location-services-twj6n9q2.js} +12 -12
- package/dist/chunks/{repository-5w6ne2rj.js → location-services-txan1asv.js} +10 -10
- package/dist/chunks/{repository-tdpndm1c.js → location-services-v6ghzfeb.js} +5 -5
- package/dist/chunks/{repository-b5f9cqb8.js → location-services-v8rmp2e0.js} +25 -25
- package/dist/chunks/{repository-pg4zag0e.js → location-services-v8xbzm74.js} +26 -26
- package/dist/chunks/{repository-veqvce7d.js → location-services-veqvce7d.js} +1 -1
- package/dist/chunks/{repository-tgah08rb.js → location-services-vvj8pq1t.js} +30 -30
- package/dist/chunks/{repository-vzs5sf6e.js → location-services-vzs5sf6e.js} +1 -1
- package/dist/chunks/{repository-84txncab.js → location-services-w1eejvng.js} +5 -5
- package/dist/chunks/{repository-w3wsvvr9.js → location-services-w3wsvvr9.js} +1 -1
- package/dist/chunks/{repository-yf33k1p3.js → location-services-w5t7z4tt.js} +22 -22
- package/dist/chunks/{repository-wd87259q.js → location-services-wd87259q.js} +1 -1
- package/dist/chunks/{repository-pe71rtbx.js → location-services-wff4vpe0.js} +14 -14
- package/dist/chunks/{repository-yprc5htm.js → location-services-wsgfm6ye.js} +22 -22
- package/dist/chunks/{repository-rjfypheq.js → location-services-wtq39amh.js} +27 -27
- package/dist/chunks/{repository-7wnc14t4.js → location-services-wxeenkga.js} +21 -21
- package/dist/chunks/{repository-y1w7bwtd.js → location-services-x532wrke.js} +20 -20
- package/dist/chunks/{repository-addxnjmp.js → location-services-x661k3y3.js} +4 -4
- package/dist/chunks/{repository-r3c58j5g.js → location-services-x7m666y7.js} +7 -4
- package/dist/chunks/{repository-s4075y1x.js → location-services-xcarvbce.js} +3 -3
- package/dist/chunks/{repository-v0es1rhs.js → location-services-xecxzrdp.js} +2 -2
- package/dist/chunks/{repository-9mxexfbd.js → location-services-xnernrr1.js} +18 -18
- package/dist/chunks/{repository-xpwv3d90.js → location-services-xrkmrw9n.js} +9 -9
- package/dist/chunks/location-services-xtg7zkvg.js +253 -0
- package/dist/chunks/{repository-y1fvbwt7.js → location-services-y1fvbwt7.js} +1 -1
- package/dist/chunks/{repository-067895h7.js → location-services-y727y3e6.js} +17 -17
- package/dist/chunks/{repository-5pptr25h.js → location-services-y7b45w3g.js} +4 -4
- package/dist/chunks/{repository-jnevnthy.js → location-services-yd0r0rva.js} +24 -24
- package/dist/chunks/{repository-q0cdrezg.js → location-services-yfmvpswg.js} +16 -16
- package/dist/chunks/{repository-6r4hjhnf.js → location-services-yw2f8www.js} +20 -20
- package/dist/chunks/{repository-3t7hfzt0.js → location-services-yxqxmbq1.js} +17 -17
- package/dist/chunks/{repository-b751st24.js → location-services-z04z598v.js} +7 -7
- package/dist/chunks/{repository-8tsdq50x.js → location-services-z0aj456m.js} +4 -4
- package/dist/chunks/{repository-z0bkrqjs.js → location-services-z0bkrqjs.js} +1 -1
- package/dist/chunks/{repository-bzadqhw2.js → location-services-z6n09y6b.js} +4 -4
- package/dist/chunks/{repository-a199weyn.js → location-services-za77p82n.js} +6 -6
- package/dist/chunks/{repository-zr2ceqn5.js → location-services-zr2ceqn5.js} +1 -1
- package/dist/chunks/{repository-4z58m4b4.js → location-services-zsr4wwhv.js} +4 -4
- package/dist/chunks/{repository-8kys6q5k.js → location-services-zx1jgwxt.js} +9 -9
- package/dist/chunks/{repository-zxq2ej10.js → location-services-zxq2ej10.js} +1 -1
- package/dist/chunks/{repository-espax8zg.js → location-services-zy43x3f1.js} +4 -4
- package/dist/codemode/catalog.js +1 -1
- package/dist/codemode/instructions.js +7 -7
- package/dist/codemode/tool.js +3 -3
- package/dist/codemode/web.js +1 -1
- package/dist/command.js +84 -83
- package/dist/config/discovery.js +85 -84
- package/dist/config/markdown.js +1 -1
- package/dist/config/normalize.js +100 -99
- package/dist/config/plugin/agent.js +117 -116
- package/dist/config/plugin/command.js +206 -205
- package/dist/config/plugin/compaction.js +155 -154
- package/dist/config/plugin/compatibility.js +135 -134
- package/dist/config/plugin/entry-observer.js +1 -1
- package/dist/config/plugin/formatter.js +118 -117
- package/dist/config/plugin/image.js +117 -116
- package/dist/config/plugin/instruction.js +91 -90
- package/dist/config/plugin/location-watcher.js +119 -118
- package/dist/config/plugin/mcp.js +122 -121
- package/dist/config/plugin/policy.js +118 -117
- package/dist/config/plugin/provider.js +117 -116
- package/dist/config/plugin/reference.js +119 -118
- package/dist/config/plugin/shell.js +119 -118
- package/dist/config/plugin/skill-file.js +103 -102
- package/dist/config/plugin/skill.js +136 -135
- package/dist/config/plugin/snapshot.js +117 -116
- package/dist/config/plugin/source.js +120 -119
- package/dist/config/plugin/tool-output.js +118 -117
- package/dist/config/plugin/websearch.js +118 -117
- package/dist/config/plugin/worktree.js +119 -118
- package/dist/config/variable.js +3 -3
- package/dist/config/watch.js +1 -1
- package/dist/config.js +120 -119
- package/dist/credential/sql.js +2 -2
- package/dist/credential.js +78 -75
- package/dist/database/database.js +69 -68
- package/dist/database/drizzle/effect-sqlite/driver.js +12 -12
- package/dist/database/drizzle/effect-sqlite/index.js +12 -12
- package/dist/database/drizzle/effect-sqlite/session.js +11 -11
- package/dist/database/drizzle/index.js +13 -13
- 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 +14 -14
- 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 +6 -0
- package/dist/database/migration.gen.js +50 -49
- package/dist/database/migration.js +52 -51
- 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 +1 -1
- package/dist/database/sqlite.js +1 -1
- package/dist/database/sqlite.node.js +1 -1
- package/dist/database/sqlite.workerd.js +1 -1
- package/dist/database/v1-migration.bun.js +77 -76
- package/dist/database/v1-migration.js +1 -1
- package/dist/effect/app-node-builder.js +364 -363
- package/dist/effect/app-node-platform.js +2 -2
- package/dist/effect/keyed-mutex.js +1 -1
- package/dist/effect/websocket-constructor.js +1 -1
- package/dist/environment/driver.js +1 -1
- package/dist/environment/environment.js +94 -93
- package/dist/environment/exec-defaults.js +2 -2
- package/dist/environment/files.js +1 -1
- package/dist/environment/index.js +94 -93
- package/dist/environment/local.js +2 -2
- package/dist/environment/memory.js +2 -2
- package/dist/environment/unavailable.js +1 -1
- package/dist/event/sql.js +1 -1
- package/dist/event-logger.js +71 -70
- package/dist/file-access.js +105 -104
- package/dist/file-mutation.js +95 -94
- 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 +221 -220
- package/dist/filesystem/protected.js +3 -3
- package/dist/filesystem/search.js +104 -103
- package/dist/filesystem/watcher-binding.js +3 -3
- package/dist/filesystem/watcher.js +13 -13
- package/dist/filesystem.js +107 -106
- package/dist/form.js +79 -78
- package/dist/formatter/builtins.js +4 -4
- package/dist/formatter.js +88 -87
- package/dist/generate.js +104 -103
- package/dist/git.js +6 -6
- 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 +92 -91
- 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 +355 -354
- package/dist/instruction-discovery.js +84 -83
- package/dist/instructions/builtins.js +88 -87
- package/dist/instructions/index.js +3 -3
- package/dist/integration/connection.js +3 -3
- package/dist/integration.js +82 -79
- package/dist/job.js +79 -78
- package/dist/kv/sql.js +2 -2
- package/dist/kv.js +74 -73
- package/dist/location-activity.js +132 -131
- package/dist/location-lifecycle.js +108 -107
- package/dist/location-service-map.js +87 -86
- package/dist/location-services.js +352 -351
- package/dist/location.js +88 -87
- package/dist/managed-policy.js +12 -5
- package/dist/mcp/client.js +92 -91
- package/dist/mcp/index.js +110 -109
- package/dist/mcp/instructions.js +130 -129
- package/dist/mcp/oauth.js +76 -75
- package/dist/mcp/stdio.js +91 -90
- package/dist/mime.js +1 -1
- package/dist/modal/models.js +92 -91
- package/dist/model-resolver.js +99 -98
- package/dist/model.js +103 -102
- package/dist/models-dev.js +106 -105
- package/dist/oauth/page.js +1 -1
- package/dist/permission/saved.js +83 -82
- package/dist/permission/sql.js +5 -5
- package/dist/permission.js +114 -113
- package/dist/persistent-pty/binary.bun.js +1 -1
- package/dist/persistent-pty/daemon.js +1 -1
- package/dist/persistent-pty/index.js +89 -88
- package/dist/persistent-pty/pty-binding.js +1 -1
- package/dist/persistent-pty.js +76 -75
- package/dist/plugin/agent.js +75 -102
- package/dist/plugin/command.js +101 -100
- package/dist/plugin/hooks.js +5 -5
- package/dist/plugin/host.js +212 -211
- package/dist/plugin/identity.js +3 -3
- package/dist/plugin/instance.js +5 -5
- package/dist/plugin/internal.js +327 -326
- package/dist/plugin/mcp-codemode-defaults.js +3 -3
- package/dist/plugin/models-dev.js +97 -96
- package/dist/plugin/module.js +118 -7
- package/dist/plugin/optimize.js +4 -4
- package/dist/plugin/plan.js +103 -102
- package/dist/plugin/promise.js +1 -1
- package/dist/plugin/provider/amazon-bedrock.js +91 -90
- package/dist/plugin/provider/azure.js +118 -117
- package/dist/plugin/provider/cerebras.js +1 -1
- package/dist/plugin/provider/chatgpt.js +95 -93
- package/dist/plugin/provider/cloudflare-ai-gateway.js +114 -113
- package/dist/plugin/provider/cloudflare-workers-ai.js +115 -114
- package/dist/plugin/provider/cohere.js +2 -2
- package/dist/plugin/provider/configured.js +113 -112
- package/dist/plugin/provider/digitalocean.js +94 -93
- package/dist/plugin/provider/dynamic.js +2 -2
- package/dist/plugin/provider/factory.js +1 -1
- package/dist/plugin/provider/github-copilot.js +96 -95
- package/dist/plugin/provider/gitlab.js +94 -93
- package/dist/plugin/provider/google-vertex.js +114 -90
- package/dist/plugin/provider/kilo.js +1 -1
- package/dist/plugin/provider/llmgateway.js +79 -78
- package/dist/plugin/provider/lmstudio.js +117 -116
- package/dist/plugin/provider/local.js +114 -113
- package/dist/plugin/provider/modal.js +93 -92
- package/dist/plugin/provider/nvidia.js +1 -1
- package/dist/plugin/provider/ollama.js +117 -116
- package/dist/plugin/provider/openai.js +96 -95
- package/dist/plugin/provider/opencode.js +98 -96
- package/dist/plugin/provider/openrouter.js +92 -91
- package/dist/plugin/provider/perplexity.js +2 -2
- package/dist/plugin/provider/poe.js +80 -79
- package/dist/plugin/provider/prompt-cache-key.js +91 -90
- package/dist/plugin/provider/sap-ai-core.js +92 -91
- package/dist/plugin/provider/sdk-factory.js +1 -1
- package/dist/plugin/provider/snowflake-cortex.js +116 -115
- package/dist/plugin/provider/vercel.js +91 -90
- package/dist/plugin/provider/vllm.js +117 -116
- package/dist/plugin/provider/xai.js +92 -91
- package/dist/plugin/provider/zenmux.js +1 -1
- package/dist/plugin/provider.js +157 -155
- package/dist/plugin/sdk.js +77 -76
- package/dist/plugin/service.js +3 -3
- package/dist/plugin/skill.js +135 -134
- package/dist/plugin/source-directory.js +1 -1
- package/dist/plugin/supervisor.js +346 -345
- package/dist/plugin/tool-input-repair.js +4 -4
- package/dist/plugin/update.js +6 -6
- package/dist/plugin/vcs/git.js +87 -86
- package/dist/plugin/vcs/hg.js +87 -86
- package/dist/plugin/verbosity.js +94 -93
- package/dist/plugin/warming.js +115 -114
- 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 +8 -8
- package/dist/plugin.js +223 -222
- package/dist/project/schema.js +2 -2
- package/dist/project/sql.js +4 -4
- package/dist/project.js +81 -80
- package/dist/provider.js +92 -91
- package/dist/pty/protocol.js +1 -1
- package/dist/pty/ticket.js +1 -1
- package/dist/pty.js +98 -97
- package/dist/reference/instructions.js +90 -89
- package/dist/reference.js +90 -89
- package/dist/repository-cache.js +82 -81
- package/dist/repository.js +3 -3
- package/dist/ripgrep/binary.js +2 -2
- package/dist/ripgrep.js +98 -97
- package/dist/rpc.js +87 -86
- package/dist/schema.js +1 -1
- package/dist/session/affinity.js +1 -1
- package/dist/session/command.js +75 -74
- package/dist/session/compaction.js +134 -133
- package/dist/session/context.js +154 -153
- package/dist/session/diff.js +89 -88
- package/dist/session/environment.js +5 -5
- package/dist/session/error.js +7 -7
- package/dist/session/event.js +1 -1
- package/dist/session/execution/restart.js +215 -214
- package/dist/session/execution.js +126 -125
- package/dist/session/generate.js +153 -152
- package/dist/session/history.js +15 -15
- package/dist/session/inbox.js +87 -86
- package/dist/session/info.js +3 -3
- package/dist/session/instruction-entry.js +80 -79
- package/dist/session/instruction-state.js +8 -8
- package/dist/session/instructions.js +98 -97
- package/dist/session/message-updater.js +4 -4
- package/dist/session/message.js +1 -1
- package/dist/session/model-request.js +121 -120
- package/dist/session/model-transport.js +9 -9
- package/dist/session/move.js +130 -129
- package/dist/session/projector.js +87 -86
- package/dist/session/prompt.js +106 -105
- package/dist/session/provider-context.js +3 -3
- package/dist/session/revert.js +91 -90
- package/dist/session/run-coordinator.js +3 -3
- package/dist/session/runner/index.js +3 -3
- package/dist/session/runner/llm.js +225 -224
- package/dist/session/runner/max-steps.js +1 -1
- package/dist/session/runner/model.js +99 -98
- package/dist/session/runner/publish-llm-event.js +114 -113
- package/dist/session/runner/retry.js +4 -4
- package/dist/session/runner/step.js +126 -125
- package/dist/session/runner/to-llm-message.js +2 -2
- package/dist/session/schema.js +3 -3
- package/dist/session/session.js +165 -164
- package/dist/session/shell.js +131 -130
- package/dist/session/skill.js +104 -103
- package/dist/session/sql.js +5 -5
- package/dist/session/stats.js +74 -73
- package/dist/session/store.js +88 -87
- package/dist/session/subagent-completion.js +1 -1
- package/dist/session/subagent-job.js +204 -203
- package/dist/session/system-prompt.js +1 -1
- package/dist/session/title.js +158 -157
- package/dist/session/to-session-error.js +112 -111
- package/dist/session/transfer.js +208 -207
- package/dist/session/usage.js +1 -1
- package/dist/session.js +212 -211
- 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 +13 -13
- package/dist/shell.js +133 -132
- package/dist/skill/discovery.js +6 -6
- package/dist/skill/instructions.js +108 -107
- package/dist/skill.js +111 -110
- package/dist/snapshot.js +92 -91
- 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 +129 -128
- package/dist/tool/plugin/edit.js +119 -118
- package/dist/tool/plugin/file-diff.js +1 -1
- package/dist/tool/plugin/glob.js +125 -124
- package/dist/tool/plugin/grep.js +125 -124
- package/dist/tool/plugin/mcp-resource.js +118 -117
- package/dist/tool/plugin/opencode.js +3 -3
- package/dist/tool/plugin/patch.js +123 -122
- package/dist/tool/plugin/question.js +104 -103
- package/dist/tool/plugin/read.js +124 -123
- package/dist/tool/plugin/shell.js +211 -210
- package/dist/tool/plugin/skill.js +112 -111
- package/dist/tool/plugin/subagent.js +213 -212
- package/dist/tool/plugin/webfetch.js +113 -112
- package/dist/tool/plugin/websearch.js +115 -114
- package/dist/tool/plugin/write.js +123 -122
- package/dist/tool/read-filesystem.js +101 -100
- package/dist/tool/runtime.js +1 -1
- package/dist/tool-output.js +7 -7
- package/dist/tool.js +14 -14
- package/dist/types/credential/sql.d.ts +6 -0
- package/dist/types/credential.d.ts +14 -0
- package/dist/types/database/migration/20261007190000_azure_cli_external_credential.d.ts +3 -0
- package/dist/types/filesystem.d.ts +11 -5
- package/dist/types/git.d.ts +23 -10
- package/dist/types/integration/connection.d.ts +2 -2
- package/dist/types/integration.d.ts +748 -8
- package/dist/types/managed-policy.d.ts +11 -1
- package/dist/types/model.d.ts +6 -0
- package/dist/types/plugin/internal.d.ts +1 -1
- package/dist/types/plugin/module.d.ts +5 -1
- package/dist/types/plugin/provider/amazon-bedrock.d.ts +2 -1
- package/dist/types/plugin/provider/azure.d.ts +3 -2
- package/dist/types/plugin/provider/google-vertex.d.ts +5 -1
- package/dist/types/session/model-request.d.ts +1 -1
- package/dist/types/session/runner/publish-llm-event.d.ts +3 -2
- package/dist/types/wellknown.d.ts +3 -0
- 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 +7 -7
- package/dist/v1/config/command.js +3 -3
- package/dist/v1/config/error.js +4 -4
- package/dist/v1/config/mcp.js +4 -4
- package/dist/v1/config/migrate.js +93 -92
- package/dist/v1/config/permission.js +7 -7
- 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 +92 -91
- package/dist/vcs/patch.js +1 -1
- package/dist/vcs.js +90 -89
- package/dist/websearch.js +83 -82
- package/dist/wellknown/plugin.js +77 -76
- package/dist/wellknown.js +82 -81
- package/dist/workspace/driver.js +3 -3
- package/dist/workspace/sql.js +1 -1
- package/dist/workspace.js +81 -80
- 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 +90 -89
- package/dist/worktree.js +97 -96
- package/package.json +8 -10
- package/dist/chunks/repository-3b3navdj.js +0 -253
- package/dist/chunks/repository-45085rbj.js +0 -26
- package/dist/chunks/repository-b20bdvd4.js +0 -60
- package/dist/chunks/repository-g4nj3be3.js +0 -507
- package/dist/chunks/repository-j3pg2mx4.js +0 -47
- package/dist/chunks/repository-jqh9b0xq.js +0 -18
- package/dist/chunks/repository-mjqndqed.js +0 -466
- package/dist/chunks/repository-mxr1v1s0.js +0 -28
- package/dist/chunks/repository-pgze7171.js +0 -69
- /package/dist/chunks/{repository-0qkdqm5v.js → location-services-0qkdqm5v.js} +0 -0
- /package/dist/chunks/{repository-0zkw76rk.js → location-services-0zkw76rk.js} +0 -0
- /package/dist/chunks/{repository-17cy0kzp.js → location-services-17cy0kzp.js} +0 -0
- /package/dist/chunks/{repository-1cnp2v09.js → location-services-1cnp2v09.js} +0 -0
- /package/dist/chunks/{repository-1kg9ymc8.js → location-services-1kg9ymc8.js} +0 -0
- /package/dist/chunks/{repository-24dcb14g.js → location-services-24dcb14g.js} +0 -0
- /package/dist/chunks/{repository-2710q6r3.js → location-services-2710q6r3.js} +0 -0
- /package/dist/chunks/{repository-2axfhc9x.js → location-services-2axfhc9x.js} +0 -0
- /package/dist/chunks/{repository-2c3vjs8z.js → location-services-2c3vjs8z.js} +0 -0
- /package/dist/chunks/{repository-34c7v6d4.js → location-services-34c7v6d4.js} +0 -0
- /package/dist/chunks/{repository-359p4xyc.js → location-services-359p4xyc.js} +0 -0
- /package/dist/chunks/{repository-3asan66x.js → location-services-3asan66x.js} +0 -0
- /package/dist/chunks/{repository-3t0ybcrp.js → location-services-3t0ybcrp.js} +0 -0
- /package/dist/chunks/{repository-3v8g72cx.js → location-services-3v8g72cx.js} +0 -0
- /package/dist/chunks/{repository-3w5fmr99.js → location-services-3w5fmr99.js} +0 -0
- /package/dist/chunks/{repository-3wcehsnq.js → location-services-3wcehsnq.js} +0 -0
- /package/dist/chunks/{repository-43n2bw4t.js → location-services-43n2bw4t.js} +0 -0
- /package/dist/chunks/{repository-4knz6hnm.js → location-services-4knz6hnm.js} +0 -0
- /package/dist/chunks/{repository-4vcrnpx2.js → location-services-4vcrnpx2.js} +0 -0
- /package/dist/chunks/{repository-4y7fprxs.js → location-services-4y7fprxs.js} +0 -0
- /package/dist/chunks/{repository-53557ph1.js → location-services-53557ph1.js} +0 -0
- /package/dist/chunks/{repository-550bvhaj.js → location-services-550bvhaj.js} +0 -0
- /package/dist/chunks/{repository-6prwharc.js → location-services-6prwharc.js} +0 -0
- /package/dist/chunks/{repository-6q2bdcd1.js → location-services-6q2bdcd1.js} +0 -0
- /package/dist/chunks/{repository-7akdwqpd.js → location-services-7akdwqpd.js} +0 -0
- /package/dist/chunks/{repository-7m9af43g.js → location-services-7m9af43g.js} +0 -0
- /package/dist/chunks/{repository-822emrt2.js → location-services-822emrt2.js} +0 -0
- /package/dist/chunks/{repository-88xbtdfr.js → location-services-88xbtdfr.js} +0 -0
- /package/dist/chunks/{repository-8n3pysct.js → location-services-8n3pysct.js} +0 -0
- /package/dist/chunks/{repository-8wj87zfr.js → location-services-8wj87zfr.js} +0 -0
- /package/dist/chunks/{repository-9a4afbnw.js → location-services-9a4afbnw.js} +0 -0
- /package/dist/chunks/{repository-9rqn6x4v.js → location-services-9rqn6x4v.js} +0 -0
- /package/dist/chunks/{repository-a6k6eb26.js → location-services-a6k6eb26.js} +0 -0
- /package/dist/chunks/{repository-af5trqkr.js → location-services-af5trqkr.js} +0 -0
- /package/dist/chunks/{repository-afrmfg78.js → location-services-afrmfg78.js} +0 -0
- /package/dist/chunks/{repository-aqzs7mqg.js → location-services-aqzs7mqg.js} +0 -0
- /package/dist/chunks/{repository-atq7p7m5.js → location-services-atq7p7m5.js} +0 -0
- /package/dist/chunks/{repository-bkyjaxrp.js → location-services-bkyjaxrp.js} +0 -0
- /package/dist/chunks/{repository-bmr6ed5q.js → location-services-bmr6ed5q.js} +0 -0
- /package/dist/chunks/{repository-cf4snx6d.js → location-services-cf4snx6d.js} +0 -0
- /package/dist/chunks/{repository-cvy3z8tj.js → location-services-cvy3z8tj.js} +0 -0
- /package/dist/chunks/{repository-d9fn303g.js → location-services-d9fn303g.js} +0 -0
- /package/dist/chunks/{repository-d9jj8t3e.js → location-services-d9jj8t3e.js} +0 -0
- /package/dist/chunks/{repository-dajrwvna.js → location-services-dajrwvna.js} +0 -0
- /package/dist/chunks/{repository-dap0rakb.js → location-services-dap0rakb.js} +0 -0
- /package/dist/chunks/{repository-df08tz66.js → location-services-df08tz66.js} +0 -0
- /package/dist/chunks/{repository-dy18nga0.js → location-services-dy18nga0.js} +0 -0
- /package/dist/chunks/{repository-e5kj55wp.js → location-services-e5kj55wp.js} +0 -0
- /package/dist/chunks/{repository-e73j6tqm.js → location-services-e73j6tqm.js} +0 -0
- /package/dist/chunks/{repository-ec1grn59.js → location-services-ec1grn59.js} +0 -0
- /package/dist/chunks/{repository-eh3zwz77.js → location-services-eh3zwz77.js} +0 -0
- /package/dist/chunks/{repository-emrn6kk6.js → location-services-emrn6kk6.js} +0 -0
- /package/dist/chunks/{repository-f0mxakyp.js → location-services-f0mxakyp.js} +0 -0
- /package/dist/chunks/{repository-f6n9ztr4.js → location-services-f6n9ztr4.js} +0 -0
- /package/dist/chunks/{repository-faypxj3z.js → location-services-faypxj3z.js} +0 -0
- /package/dist/chunks/{repository-fd410y7t.js → location-services-fd410y7t.js} +0 -0
- /package/dist/chunks/{repository-fxgpk5d8.js → location-services-fxgpk5d8.js} +0 -0
- /package/dist/chunks/{repository-g4wezp1m.js → location-services-g4wezp1m.js} +0 -0
- /package/dist/chunks/{repository-g86h250q.js → location-services-g86h250q.js} +0 -0
- /package/dist/chunks/{repository-gebd4c9n.js → location-services-gebd4c9n.js} +0 -0
- /package/dist/chunks/{repository-gftt206x.js → location-services-gftt206x.js} +0 -0
- /package/dist/chunks/{repository-hk9envan.js → location-services-hk9envan.js} +0 -0
- /package/dist/chunks/{repository-j2ntwpah.js → location-services-j2ntwpah.js} +0 -0
- /package/dist/chunks/{repository-j5zkgpj8.js → location-services-j5zkgpj8.js} +0 -0
- /package/dist/chunks/{repository-jjkms2e6.js → location-services-jjkms2e6.js} +0 -0
- /package/dist/chunks/{repository-jr7sbwjy.js → location-services-jr7sbwjy.js} +0 -0
- /package/dist/chunks/{repository-jwfs4k6c.js → location-services-jwfs4k6c.js} +0 -0
- /package/dist/chunks/{repository-jzg6c2d5.js → location-services-jzg6c2d5.js} +0 -0
- /package/dist/chunks/{repository-mp448xyj.js → location-services-mp448xyj.js} +0 -0
- /package/dist/chunks/{repository-msx8hqn2.js → location-services-msx8hqn2.js} +0 -0
- /package/dist/chunks/{repository-n05xt0ee.js → location-services-n05xt0ee.js} +0 -0
- /package/dist/chunks/{repository-n3j8tn72.js → location-services-n3j8tn72.js} +0 -0
- /package/dist/chunks/{repository-njntx4h6.js → location-services-njntx4h6.js} +0 -0
- /package/dist/chunks/{repository-q3sfg36h.js → location-services-q3sfg36h.js} +0 -0
- /package/dist/chunks/{repository-q74kybfr.js → location-services-q74kybfr.js} +0 -0
- /package/dist/chunks/{repository-qaymkmh1.js → location-services-qaymkmh1.js} +0 -0
- /package/dist/chunks/{repository-qb87gjwd.js → location-services-qb87gjwd.js} +0 -0
- /package/dist/chunks/{repository-qfa1cgps.js → location-services-qfa1cgps.js} +0 -0
- /package/dist/chunks/{repository-qg3g05ea.js → location-services-qg3g05ea.js} +0 -0
- /package/dist/chunks/{repository-qrg20bc0.js → location-services-qrg20bc0.js} +0 -0
- /package/dist/chunks/{repository-rcb2kzg1.js → location-services-rcb2kzg1.js} +0 -0
- /package/dist/chunks/{repository-sdp7kfr6.js → location-services-sdp7kfr6.js} +0 -0
- /package/dist/chunks/{repository-ssg3fenm.js → location-services-ssg3fenm.js} +0 -0
- /package/dist/chunks/{repository-w803qqfp.js → location-services-w803qqfp.js} +0 -0
- /package/dist/chunks/{repository-wc3fc9cn.js → location-services-wc3fc9cn.js} +0 -0
- /package/dist/chunks/{repository-wer8tq1h.js → location-services-wer8tq1h.js} +0 -0
- /package/dist/chunks/{repository-wtztk69x.js → location-services-wtztk69x.js} +0 -0
- /package/dist/chunks/{repository-x0ckcb58.js → location-services-x0ckcb58.js} +0 -0
- /package/dist/chunks/{repository-x61499pn.js → location-services-x61499pn.js} +0 -0
- /package/dist/chunks/{repository-y44na4kk.js → location-services-y44na4kk.js} +0 -0
- /package/dist/chunks/{repository-y8cydn3q.js → location-services-y8cydn3q.js} +0 -0
- /package/dist/chunks/{repository-y8f7s663.js → location-services-y8f7s663.js} +0 -0
- /package/dist/chunks/{repository-ygaqb7jw.js → location-services-ygaqb7jw.js} +0 -0
- /package/dist/chunks/{repository-ym463w8f.js → location-services-ym463w8f.js} +0 -0
- /package/dist/chunks/{repository-z5v4ffb3.js → location-services-z5v4ffb3.js} +0 -0
- /package/dist/chunks/{repository-z9919s4g.js → location-services-z9919s4g.js} +0 -0
|
@@ -0,0 +1,804 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AbsolutePath2,
|
|
3
|
+
RelativePath2
|
|
4
|
+
} from "./location-services-z5v4ffb3.js";
|
|
5
|
+
import {
|
|
6
|
+
makeUnsafe2
|
|
7
|
+
} from "./location-services-dpkg50ah.js";
|
|
8
|
+
import {
|
|
9
|
+
MAX_TOTAL_PATCH_BYTES2,
|
|
10
|
+
emptyPatch2,
|
|
11
|
+
chunksByFile2
|
|
12
|
+
} from "./location-services-tazgh4e4.js";
|
|
13
|
+
import {
|
|
14
|
+
gitExecutable2
|
|
15
|
+
} from "./location-services-ef5x83kb.js";
|
|
16
|
+
import {
|
|
17
|
+
__export
|
|
18
|
+
} from "./location-services-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: () => Service82,
|
|
27
|
+
TreeID: () => TreeID2,
|
|
28
|
+
Worktree: () => Worktree2,
|
|
29
|
+
WorktreeError: () => WorktreeError2,
|
|
30
|
+
node: () => node86
|
|
31
|
+
});
|
|
32
|
+
import path from "path";
|
|
33
|
+
import { Cause, Context, Effect, Exit, Layer, Option, Schedule, Schema } from "effect";
|
|
34
|
+
import { ChildProcess } from "effect/unstable/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 Service82 extends Context.Service()("@opencode/Git") {
|
|
104
|
+
}
|
|
105
|
+
var layer = Layer.effect(Service82, 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 Service82.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 node86 = makeGlobalNode({ service: Service82, 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, Service82, node86, exports_git3 };
|