@jayjiang/open-cc 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +8 -0
- package/README.md +107 -0
- package/dist/chunk-00dxqxqj.js +227 -0
- package/dist/chunk-01p8hhsp.js +154 -0
- package/dist/chunk-02wy0m47.js +152 -0
- package/dist/chunk-0465tnzh.js +110 -0
- package/dist/chunk-054mjk62.js +678 -0
- package/dist/chunk-06saje2v.js +39 -0
- package/dist/chunk-0731m51q.js +8 -0
- package/dist/chunk-09y0jvtm.js +165 -0
- package/dist/chunk-0fkqze0v.js +113 -0
- package/dist/chunk-0hn525br.js +1920 -0
- package/dist/chunk-0hneh9ha.js +123 -0
- package/dist/chunk-0paqc2yw.js +15 -0
- package/dist/chunk-0rkbrabt.js +32 -0
- package/dist/chunk-0scs4rpx.js +96 -0
- package/dist/chunk-0vkfrmqm.js +690 -0
- package/dist/chunk-0w2byc95.js +38 -0
- package/dist/chunk-0xjaqda8.js +1124 -0
- package/dist/chunk-0y3vcsv4.js +92 -0
- package/dist/chunk-0yb4dz9c.js +26840 -0
- package/dist/chunk-10fdxge0.js +121 -0
- package/dist/chunk-1141xmr4.js +8 -0
- package/dist/chunk-14vffdmg.js +38 -0
- package/dist/chunk-178ykx7k.js +1493 -0
- package/dist/chunk-1bhva2z9.js +128 -0
- package/dist/chunk-1c8z1b5v.js +16 -0
- package/dist/chunk-1cbn5kxf.js +7 -0
- package/dist/chunk-1che51a5.js +1585 -0
- package/dist/chunk-1h2famwb.js +49 -0
- package/dist/chunk-1jrkpnbn.js +71 -0
- package/dist/chunk-1k4j1xcf.js +154 -0
- package/dist/chunk-1mm9d8p4.js +70 -0
- package/dist/chunk-1n3gnn2t.js +41 -0
- package/dist/chunk-1nqaq1rs.js +654 -0
- package/dist/chunk-1p2j9g3w.js +998 -0
- package/dist/chunk-1p7jfcee.js +533 -0
- package/dist/chunk-1pg8s12r.js +338 -0
- package/dist/chunk-1qjb22fx.js +109 -0
- package/dist/chunk-1yzc16qa.js +39 -0
- package/dist/chunk-20gm89wf.js +208 -0
- package/dist/chunk-238g70xa.js +36 -0
- package/dist/chunk-26k0324b.js +751 -0
- package/dist/chunk-27xc1csx.js +104 -0
- package/dist/chunk-2a42s11t.js +412 -0
- package/dist/chunk-2bhq4emw.js +10476 -0
- package/dist/chunk-2eykm0j0.js +20 -0
- package/dist/chunk-2gzv8nrw.js +205 -0
- package/dist/chunk-2k995y2x.js +880 -0
- package/dist/chunk-2kpzaa7w.js +401 -0
- package/dist/chunk-2nayx6q1.js +63 -0
- package/dist/chunk-2qhs9n36.js +151 -0
- package/dist/chunk-2s5f2nnw.js +603 -0
- package/dist/chunk-2y54j9ew.js +174394 -0
- package/dist/chunk-2zcaw1jd.js +2343 -0
- package/dist/chunk-30chpfyc.js +15275 -0
- package/dist/chunk-30k39xd2.js +28 -0
- package/dist/chunk-30rst83v.js +168 -0
- package/dist/chunk-36z5enc4.js +160 -0
- package/dist/chunk-3c25bcsw.js +17 -0
- package/dist/chunk-3c4qja3e.js +63 -0
- package/dist/chunk-3ccx8k84.js +102 -0
- package/dist/chunk-3envnthj.js +157 -0
- package/dist/chunk-3h8a89gy.js +46 -0
- package/dist/chunk-3kadbep2.js +6956 -0
- package/dist/chunk-3kd79cnk.js +15 -0
- package/dist/chunk-3m45xtza.js +1188 -0
- package/dist/chunk-3q50xe1j.js +17 -0
- package/dist/chunk-3w6s9m5w.js +16 -0
- package/dist/chunk-3x0408tc.js +42 -0
- package/dist/chunk-3z7ae04g.js +372 -0
- package/dist/chunk-40tedt0y.js +275 -0
- package/dist/chunk-44q8kegv.js +811 -0
- package/dist/chunk-47gy6qkp.js +328 -0
- package/dist/chunk-495d85x1.js +8066 -0
- package/dist/chunk-4axcksrv.js +129 -0
- package/dist/chunk-4e1271a8.js +106 -0
- package/dist/chunk-4g3v8y12.js +23 -0
- package/dist/chunk-4g5mrzm0.js +220 -0
- package/dist/chunk-4jm600zv.js +13 -0
- package/dist/chunk-4n989n6h.js +153 -0
- package/dist/chunk-4qedx22a.js +44 -0
- package/dist/chunk-4rze71rx.js +116 -0
- package/dist/chunk-4wbhvcag.js +91 -0
- package/dist/chunk-4zfkzkt6.js +37 -0
- package/dist/chunk-55wgxwa9.js +13877 -0
- package/dist/chunk-56ta4h0b.js +154 -0
- package/dist/chunk-58a0x39g.js +89 -0
- package/dist/chunk-5dbk24zg.js +890 -0
- package/dist/chunk-5gzg4q1k.js +99 -0
- package/dist/chunk-5k2gdxnr.js +336 -0
- package/dist/chunk-5kp252z6.js +202 -0
- package/dist/chunk-5p2ssw3d.js +825 -0
- package/dist/chunk-5w33j8gy.js +1580 -0
- package/dist/chunk-5ywjzvm8.js +61 -0
- package/dist/chunk-5ztxx8gd.js +80 -0
- package/dist/chunk-62vwr0y5.js +117 -0
- package/dist/chunk-6b8ksqmf.js +1153 -0
- package/dist/chunk-6bd8brc4.js +48 -0
- package/dist/chunk-6cpqmd4r.js +132 -0
- package/dist/chunk-6dj5t602.js +341 -0
- package/dist/chunk-6g62sjpf.js +328 -0
- package/dist/chunk-6gr3c3w9.js +378 -0
- package/dist/chunk-6h9n8qbr.js +1170 -0
- package/dist/chunk-6kpbgc5w.js +23 -0
- package/dist/chunk-6n2qgm9v.js +8 -0
- package/dist/chunk-6n6jfmce.js +2833 -0
- package/dist/chunk-6q2x8zeg.js +802 -0
- package/dist/chunk-6tnekwtp.js +849 -0
- package/dist/chunk-6tq2v3rk.js +186 -0
- package/dist/chunk-6vphqqd1.js +27 -0
- package/dist/chunk-6wkdqk81.js +444 -0
- package/dist/chunk-7226mgjt.js +195 -0
- package/dist/chunk-72fey14y.js +565 -0
- package/dist/chunk-73fgm72g.js +698 -0
- package/dist/chunk-73fhat5j.js +212 -0
- package/dist/chunk-73rpbt04.js +1947 -0
- package/dist/chunk-743znc5c.js +56 -0
- package/dist/chunk-760252na.js +101 -0
- package/dist/chunk-76t2h5v2.js +495 -0
- package/dist/chunk-7739pg2c.js +4261 -0
- package/dist/chunk-789khc7a.js +96 -0
- package/dist/chunk-78mma1s7.js +88 -0
- package/dist/chunk-7aw745vx.js +40175 -0
- package/dist/chunk-7azp8c8y.js +584 -0
- package/dist/chunk-7m2nd8da.js +110 -0
- package/dist/chunk-7pemewz2.js +726 -0
- package/dist/chunk-7rjyn5d3.js +125 -0
- package/dist/chunk-7v0wq9nk.js +93 -0
- package/dist/chunk-7wm5s02e.js +216 -0
- package/dist/chunk-83hfzbx3.js +10 -0
- package/dist/chunk-84k64e4a.js +1646 -0
- package/dist/chunk-87jfpcm7.js +438 -0
- package/dist/chunk-8btm871b.js +42 -0
- package/dist/chunk-8hbbzet5.js +34 -0
- package/dist/chunk-8hq5kk3y.js +44 -0
- package/dist/chunk-8j6vs75t.js +256 -0
- package/dist/chunk-8ngxagxq.js +18 -0
- package/dist/chunk-8nsem424.js +110 -0
- package/dist/chunk-8pf73pc8.js +169 -0
- package/dist/chunk-8tnsngw2.js +31 -0
- package/dist/chunk-8y12jxg8.js +10 -0
- package/dist/chunk-8ymf4e6z.js +48 -0
- package/dist/chunk-90wp6wez.js +10510 -0
- package/dist/chunk-95dt8mpg.js +603 -0
- package/dist/chunk-95rj8m4e.js +130 -0
- package/dist/chunk-9ebygqen.js +89 -0
- package/dist/chunk-9gbamk79.js +93 -0
- package/dist/chunk-9tkq3g56.js +642 -0
- package/dist/chunk-a05hje2h.js +105 -0
- package/dist/chunk-a2krhf3c.js +90 -0
- package/dist/chunk-a6q9rehn.js +182 -0
- package/dist/chunk-a78b3pvt.js +71 -0
- package/dist/chunk-a8ejc632.js +3094 -0
- package/dist/chunk-a9vdeb6y.js +258 -0
- package/dist/chunk-a9zh40sj.js +48 -0
- package/dist/chunk-ab59azrr.js +480 -0
- package/dist/chunk-accxhkm6.js +88 -0
- package/dist/chunk-adzd8pzb.js +1095 -0
- package/dist/chunk-ae76ded0.js +30 -0
- package/dist/chunk-aftppv3p.js +691 -0
- package/dist/chunk-agmw1vmf.js +725 -0
- package/dist/chunk-an5cb1vx.js +16 -0
- package/dist/chunk-b1s11z4y.js +63 -0
- package/dist/chunk-b2rkh01x.js +443 -0
- package/dist/chunk-b4w4argn.js +1551 -0
- package/dist/chunk-b4wg70y1.js +54 -0
- package/dist/chunk-b5b7h81y.js +7189 -0
- package/dist/chunk-b9k5cs09.js +50 -0
- package/dist/chunk-bapy5rc8.js +40 -0
- package/dist/chunk-bda3gxxz.js +246 -0
- package/dist/chunk-bhdt6k7w.js +15 -0
- package/dist/chunk-bm1qb16p.js +17 -0
- package/dist/chunk-bp0dnrwg.js +281 -0
- package/dist/chunk-bqfnp99q.js +477 -0
- package/dist/chunk-bs6keys0.js +158 -0
- package/dist/chunk-bsbmmfyt.js +17 -0
- package/dist/chunk-btkettbr.js +166 -0
- package/dist/chunk-bwgde7nf.js +37 -0
- package/dist/chunk-c1zc58pw.js +280 -0
- package/dist/chunk-c2g96ga2.js +184 -0
- package/dist/chunk-c3z7ptb2.js +21933 -0
- package/dist/chunk-c8vn3ynx.js +349 -0
- package/dist/chunk-cdm0k2n0.js +115 -0
- package/dist/chunk-cdz5yb0r.js +57 -0
- package/dist/chunk-cfv996bs.js +22 -0
- package/dist/chunk-cg788ab0.js +100 -0
- package/dist/chunk-cgfdkzhb.js +12 -0
- package/dist/chunk-cp76dsdp.js +386 -0
- package/dist/chunk-cr6t6rth.js +306 -0
- package/dist/chunk-cvp5vayb.js +31 -0
- package/dist/chunk-cwehsmj5.js +114 -0
- package/dist/chunk-cy2hswr1.js +15 -0
- package/dist/chunk-d2rzy2p0.js +42 -0
- package/dist/chunk-d3v2fbay.js +106 -0
- package/dist/chunk-dc4eha8a.js +243 -0
- package/dist/chunk-dcz167d6.js +73 -0
- package/dist/chunk-de55jjre.js +106 -0
- package/dist/chunk-dfx733j3.js +650 -0
- package/dist/chunk-dgqrcy74.js +48 -0
- package/dist/chunk-dj6dk19k.js +55 -0
- package/dist/chunk-dn2xcmc4.js +173 -0
- package/dist/chunk-dndehvfr.js +57 -0
- package/dist/chunk-dnh7jtpb.js +37 -0
- package/dist/chunk-dnwzz9f7.js +88 -0
- package/dist/chunk-dv1wfr85.js +6373 -0
- package/dist/chunk-dwq5rs3q.js +62 -0
- package/dist/chunk-dz8exe78.js +91 -0
- package/dist/chunk-e4rzw1sd.js +606 -0
- package/dist/chunk-e6rrwzv0.js +463 -0
- package/dist/chunk-e6t9kpzq.js +145 -0
- package/dist/chunk-e7c8ypwc.js +287 -0
- package/dist/chunk-e9nkfs4e.js +738 -0
- package/dist/chunk-eaf7c8ck.js +537 -0
- package/dist/chunk-ebyr6p77.js +115 -0
- package/dist/chunk-edfv7pme.js +104 -0
- package/dist/chunk-eh474zhj.js +59 -0
- package/dist/chunk-er8ckwzt.js +140 -0
- package/dist/chunk-ev5p07yh.js +144 -0
- package/dist/chunk-ewadzrm8.js +103 -0
- package/dist/chunk-f2mhrmww.js +62 -0
- package/dist/chunk-f2zhqnb6.js +69 -0
- package/dist/chunk-f5ma3nh5.js +3436 -0
- package/dist/chunk-f63q7vx7.js +756 -0
- package/dist/chunk-fbv4apne.js +51 -0
- package/dist/chunk-fcna95wg.js +113 -0
- package/dist/chunk-fdvcpaz3.js +163 -0
- package/dist/chunk-fgc0q2b2.js +3354 -0
- package/dist/chunk-fm2jvsk7.js +87 -0
- package/dist/chunk-ft7fs35e.js +282 -0
- package/dist/chunk-fyc5fepv.js +10 -0
- package/dist/chunk-g0j0t6qk.js +26 -0
- package/dist/chunk-g0nbec9m.js +32 -0
- package/dist/chunk-g1fdv1kb.js +86 -0
- package/dist/chunk-g338npwr.js +1061 -0
- package/dist/chunk-g3t0act8.js +8 -0
- package/dist/chunk-g6qddbvf.js +1391 -0
- package/dist/chunk-ga5faygf.js +61 -0
- package/dist/chunk-gac6nzhc.js +90 -0
- package/dist/chunk-gck2cswd.js +862 -0
- package/dist/chunk-gntr3b25.js +40683 -0
- package/dist/chunk-gq5bbtme.js +456 -0
- package/dist/chunk-gyj242zr.js +20 -0
- package/dist/chunk-h0qngp9w.js +157 -0
- package/dist/chunk-h1xnvnye.js +524 -0
- package/dist/chunk-h3mhfamg.js +60 -0
- package/dist/chunk-h6s1tx0e.js +250 -0
- package/dist/chunk-h7qb4hyj.js +70 -0
- package/dist/chunk-h8qd1gw2.js +106 -0
- package/dist/chunk-hakdhagh.js +16606 -0
- package/dist/chunk-hcdt34n4.js +143 -0
- package/dist/chunk-hh7cmy4k.js +20 -0
- package/dist/chunk-hk9xz7gk.js +118 -0
- package/dist/chunk-hqmz36b3.js +552 -0
- package/dist/chunk-hs8ph4p8.js +8 -0
- package/dist/chunk-hsq4vtjy.js +92 -0
- package/dist/chunk-hzhd0p1y.js +104 -0
- package/dist/chunk-hzhe8ygc.js +547 -0
- package/dist/chunk-j0tqbsh7.js +176 -0
- package/dist/chunk-j1s1jvad.js +346 -0
- package/dist/chunk-j2k4p94p.js +55 -0
- package/dist/chunk-j3a4p81y.js +184 -0
- package/dist/chunk-j595yd4h.js +439 -0
- package/dist/chunk-j64ga6ta.js +8035 -0
- package/dist/chunk-j7qwxra8.js +2335 -0
- package/dist/chunk-j98f65zv.js +789 -0
- package/dist/chunk-jd32zbps.js +15 -0
- package/dist/chunk-jdgeec04.js +4249 -0
- package/dist/chunk-jdt5s5k7.js +62 -0
- package/dist/chunk-jeaek018.js +97 -0
- package/dist/chunk-jkhvm8yk.js +104 -0
- package/dist/chunk-jmxaze30.js +780 -0
- package/dist/chunk-jne71s1f.js +104 -0
- package/dist/chunk-jnhkref0.js +30 -0
- package/dist/chunk-jpgr7zfs.js +95 -0
- package/dist/chunk-jqp0q5nk.js +339 -0
- package/dist/chunk-jtqgnyaq.js +1317 -0
- package/dist/chunk-jx817w05.js +11 -0
- package/dist/chunk-jynzr5w9.js +71 -0
- package/dist/chunk-jzmz18nn.js +65 -0
- package/dist/chunk-k0p9w03v.js +4957 -0
- package/dist/chunk-k1jnpyj9.js +155 -0
- package/dist/chunk-k445en8h.js +102 -0
- package/dist/chunk-k62k13ya.js +81 -0
- package/dist/chunk-kf8kjmfv.js +821 -0
- package/dist/chunk-kgn1nfg9.js +468 -0
- package/dist/chunk-khmz14d4.js +38 -0
- package/dist/chunk-kjhmt6ba.js +100 -0
- package/dist/chunk-kkrz2zw2.js +122 -0
- package/dist/chunk-kv1ryvtm.js +176 -0
- package/dist/chunk-kwekc97v.js +18 -0
- package/dist/chunk-kyvwf342.js +65 -0
- package/dist/chunk-m0g3xv72.js +266 -0
- package/dist/chunk-m26twd8m.js +277 -0
- package/dist/chunk-m4bc15mz.js +229 -0
- package/dist/chunk-m9t8j37k.js +253 -0
- package/dist/chunk-mb2gpwwf.js +432 -0
- package/dist/chunk-mezwt1bt.js +306 -0
- package/dist/chunk-mfm83xn5.js +84 -0
- package/dist/chunk-mn7870fh.js +4389 -0
- package/dist/chunk-mr9df5v8.js +722 -0
- package/dist/chunk-mt25echc.js +6157 -0
- package/dist/chunk-mwrr6zbb.js +55 -0
- package/dist/chunk-mywpbwad.js +198 -0
- package/dist/chunk-mzdtkccs.js +125 -0
- package/dist/chunk-mzn0z9d3.js +691 -0
- package/dist/chunk-n0qaeaa5.js +256 -0
- package/dist/chunk-n128bzxs.js +2739 -0
- package/dist/chunk-n1erf6kh.js +22820 -0
- package/dist/chunk-n4nbgkvd.js +520 -0
- package/dist/chunk-n5gkdn9v.js +120 -0
- package/dist/chunk-n7ttdtk0.js +641 -0
- package/dist/chunk-n8b1njwb.js +208 -0
- package/dist/chunk-nek12gtk.js +94 -0
- package/dist/chunk-nerv0jvx.js +74 -0
- package/dist/chunk-nka1g8f4.js +773 -0
- package/dist/chunk-nm2cncrq.js +336 -0
- package/dist/chunk-nq0fxyxh.js +752 -0
- package/dist/chunk-nrnkshv2.js +192 -0
- package/dist/chunk-nsqma629.js +128 -0
- package/dist/chunk-nt837qt9.js +21 -0
- package/dist/chunk-nttf3k0r.js +2643 -0
- package/dist/chunk-nx638j6h.js +268 -0
- package/dist/chunk-nx7s0zn5.js +375 -0
- package/dist/chunk-p0hff8zy.js +8871 -0
- package/dist/chunk-p2816w9z.js +1486 -0
- package/dist/chunk-p2d5nh3g.js +342 -0
- package/dist/chunk-p57bz7nv.js +55 -0
- package/dist/chunk-p5z8t6r3.js +130 -0
- package/dist/chunk-pd6653na.js +5394 -0
- package/dist/chunk-pjnzf3cg.js +61 -0
- package/dist/chunk-ps49ymvj.js +43 -0
- package/dist/chunk-pthzapbx.js +348 -0
- package/dist/chunk-pwwa7s62.js +11 -0
- package/dist/chunk-pyx135a5.js +20 -0
- package/dist/chunk-q132dkwr.js +195 -0
- package/dist/chunk-q16y18s1.js +120 -0
- package/dist/chunk-q25bjaev.js +15 -0
- package/dist/chunk-q3jxs36m.js +716 -0
- package/dist/chunk-q5by3da6.js +8 -0
- package/dist/chunk-q663msp4.js +908 -0
- package/dist/chunk-qezgfppb.js +4521 -0
- package/dist/chunk-qgjgqmy5.js +5796 -0
- package/dist/chunk-qj7h3xc3.js +40 -0
- package/dist/chunk-qjcxkbv6.js +644 -0
- package/dist/chunk-qnfx3qtx.js +617 -0
- package/dist/chunk-qnmyzsam.js +84 -0
- package/dist/chunk-qp2qdcda.js +100 -0
- package/dist/chunk-qvrq1sby.js +6107 -0
- package/dist/chunk-qz2x630m.js +49145 -0
- package/dist/chunk-qz3fe4fj.js +469 -0
- package/dist/chunk-r0af6bw0.js +173 -0
- package/dist/chunk-r1v8d6da.js +1299 -0
- package/dist/chunk-r6b58y3x.js +17 -0
- package/dist/chunk-r6e45bzh.js +118 -0
- package/dist/chunk-r843jezp.js +28 -0
- package/dist/chunk-rbgjkg3v.js +90 -0
- package/dist/chunk-rc5bbzx4.js +655 -0
- package/dist/chunk-rca5xtnd.js +267 -0
- package/dist/chunk-rfdbzyjh.js +1865 -0
- package/dist/chunk-rh7q28df.js +93 -0
- package/dist/chunk-rn0v1hk8.js +34 -0
- package/dist/chunk-rvxs7x7j.js +542 -0
- package/dist/chunk-rw6fwk2s.js +98 -0
- package/dist/chunk-rwagvxh5.js +1711 -0
- package/dist/chunk-s10vyjz4.js +224 -0
- package/dist/chunk-s274nv8k.js +8 -0
- package/dist/chunk-s3pzvdss.js +50 -0
- package/dist/chunk-s4w01jsb.js +969 -0
- package/dist/chunk-s56j2d6g.js +500 -0
- package/dist/chunk-sbs1r0h4.js +317 -0
- package/dist/chunk-sd36yzx8.js +954 -0
- package/dist/chunk-sd6env07.js +19 -0
- package/dist/chunk-sdj9b9wh.js +782 -0
- package/dist/chunk-sfht9xvd.js +24 -0
- package/dist/chunk-sk3gpkdt.js +89 -0
- package/dist/chunk-sp5cjcjh.js +526 -0
- package/dist/chunk-sq847dr5.js +1528 -0
- package/dist/chunk-sskngwam.js +89 -0
- package/dist/chunk-svar8pp2.js +276 -0
- package/dist/chunk-szj5wvdy.js +28 -0
- package/dist/chunk-t175chdd.js +714 -0
- package/dist/chunk-t4k75hqs.js +4987 -0
- package/dist/chunk-t7z7vg91.js +225 -0
- package/dist/chunk-tanfpxm1.js +419 -0
- package/dist/chunk-tf9h0cyj.js +3037 -0
- package/dist/chunk-tm1wwvm1.js +99 -0
- package/dist/chunk-trtgjd28.js +9300 -0
- package/dist/chunk-ts2p6bv1.js +224 -0
- package/dist/chunk-ttk5dzz8.js +25 -0
- package/dist/chunk-tvg352rv.js +391 -0
- package/dist/chunk-tww14j0s.js +86 -0
- package/dist/chunk-tz03j2da.js +66 -0
- package/dist/chunk-v1kzp02e.js +785 -0
- package/dist/chunk-v2sm9w6h.js +220 -0
- package/dist/chunk-v3gm2day.js +8 -0
- package/dist/chunk-v4qn3g0d.js +286 -0
- package/dist/chunk-v66tbnn6.js +476 -0
- package/dist/chunk-v78fj8by.js +145 -0
- package/dist/chunk-v9smspw2.js +4301 -0
- package/dist/chunk-v9ybze94.js +713 -0
- package/dist/chunk-vest0y6x.js +3830 -0
- package/dist/chunk-vf5sd1nq.js +12 -0
- package/dist/chunk-vht4mzgb.js +298 -0
- package/dist/chunk-vjwgf4qh.js +41 -0
- package/dist/chunk-vkrhafhf.js +248 -0
- package/dist/chunk-vn56q87z.js +2058 -0
- package/dist/chunk-vscz82fv.js +27 -0
- package/dist/chunk-vvn4gkak.js +642 -0
- package/dist/chunk-vxj5rbg5.js +84 -0
- package/dist/chunk-vyjeh50y.js +2149 -0
- package/dist/chunk-w44nvpvt.js +22 -0
- package/dist/chunk-waambva2.js +2430 -0
- package/dist/chunk-wbhsqc2a.js +275 -0
- package/dist/chunk-wbsnpxzh.js +471 -0
- package/dist/chunk-wfz0qffj.js +3939 -0
- package/dist/chunk-wpqbrv0f.js +83 -0
- package/dist/chunk-wzpdet3m.js +843 -0
- package/dist/chunk-x6tb96y2.js +264 -0
- package/dist/chunk-x8b7vft8.js +132 -0
- package/dist/chunk-x8eg216f.js +99 -0
- package/dist/chunk-xc9khn0r.js +490 -0
- package/dist/chunk-xch406a3.js +673 -0
- package/dist/chunk-xdw5dv00.js +8 -0
- package/dist/chunk-xe0bpcbr.js +3444 -0
- package/dist/chunk-xm3ed3zn.js +300 -0
- package/dist/chunk-xpm4ebhz.js +87 -0
- package/dist/chunk-xr6yfttj.js +43 -0
- package/dist/chunk-xsq9ae7x.js +90 -0
- package/dist/chunk-xszk7n10.js +14358 -0
- package/dist/chunk-xzmkekfb.js +259 -0
- package/dist/chunk-y1784krc.js +19 -0
- package/dist/chunk-y3py9g5d.js +213 -0
- package/dist/chunk-y9nnmev5.js +687 -0
- package/dist/chunk-ya6jq0hf.js +29 -0
- package/dist/chunk-ycc3xnx0.js +374 -0
- package/dist/chunk-yfa54ssn.js +87 -0
- package/dist/chunk-ymy4xrr8.js +101 -0
- package/dist/chunk-yqfz2k9z.js +48 -0
- package/dist/chunk-ywxd4qw4.js +22 -0
- package/dist/chunk-yxmz5k16.js +122 -0
- package/dist/chunk-yxvy4jt4.js +1014 -0
- package/dist/chunk-z2dp53wn.js +17 -0
- package/dist/chunk-z2xxx2sz.js +294 -0
- package/dist/chunk-z31an09g.js +67 -0
- package/dist/chunk-z95xqvr0.js +75 -0
- package/dist/chunk-zbmxxxz8.js +161 -0
- package/dist/chunk-zk2wsm7d.js +15 -0
- package/dist/chunk-zmg1pcp3.js +71 -0
- package/dist/chunk-znrwmznk.js +272 -0
- package/dist/chunk-zq9r43cb.js +26 -0
- package/dist/chunk-zsfxha74.js +17655 -0
- package/dist/chunk-ztpr96av.js +229 -0
- package/dist/chunk-zv7qrz04.js +58 -0
- package/dist/chunk-zxa7st21.js +32 -0
- package/dist/chunk-zxhezavg.js +216 -0
- package/dist/chunk-zz0qcq2n.js +434 -0
- package/dist/cli.js +194 -0
- package/package.json +164 -0
|
@@ -0,0 +1,825 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
TEAM_LEAD_NAME,
|
|
4
|
+
init_constants
|
|
5
|
+
} from "./chunk-4jm600zv.js";
|
|
6
|
+
import {
|
|
7
|
+
getAgentName,
|
|
8
|
+
getTeamName,
|
|
9
|
+
getTeammateContext,
|
|
10
|
+
init_array,
|
|
11
|
+
init_lockfile,
|
|
12
|
+
init_teammate,
|
|
13
|
+
init_teammateContext,
|
|
14
|
+
isTeammate,
|
|
15
|
+
lock
|
|
16
|
+
} from "./chunk-s4w01jsb.js";
|
|
17
|
+
import {
|
|
18
|
+
init_v4
|
|
19
|
+
} from "./chunk-g0j0t6qk.js";
|
|
20
|
+
import {
|
|
21
|
+
exports_external,
|
|
22
|
+
init_lazySchema,
|
|
23
|
+
lazySchema
|
|
24
|
+
} from "./chunk-55wgxwa9.js";
|
|
25
|
+
import {
|
|
26
|
+
gitExe,
|
|
27
|
+
init_git
|
|
28
|
+
} from "./chunk-r1v8d6da.js";
|
|
29
|
+
import {
|
|
30
|
+
execFileNoThrowWithCwd,
|
|
31
|
+
init_execFileNoThrow
|
|
32
|
+
} from "./chunk-b5b7h81y.js";
|
|
33
|
+
import {
|
|
34
|
+
init_log,
|
|
35
|
+
logError
|
|
36
|
+
} from "./chunk-nm2cncrq.js";
|
|
37
|
+
import {
|
|
38
|
+
errorMessage,
|
|
39
|
+
getErrnoCode,
|
|
40
|
+
init_debug,
|
|
41
|
+
init_errors,
|
|
42
|
+
init_slowOperations,
|
|
43
|
+
jsonParse,
|
|
44
|
+
jsonStringify,
|
|
45
|
+
logForDebugging
|
|
46
|
+
} from "./chunk-rwagvxh5.js";
|
|
47
|
+
import {
|
|
48
|
+
getConfigHomeDir,
|
|
49
|
+
getTeamsDir,
|
|
50
|
+
init_envUtils,
|
|
51
|
+
isEnvTruthy
|
|
52
|
+
} from "./chunk-0fkqze0v.js";
|
|
53
|
+
import {
|
|
54
|
+
createSignal,
|
|
55
|
+
getIsNonInteractiveSession,
|
|
56
|
+
getSessionCreatedTeams,
|
|
57
|
+
getSessionId,
|
|
58
|
+
init_signal,
|
|
59
|
+
init_state
|
|
60
|
+
} from "./chunk-2zcaw1jd.js";
|
|
61
|
+
import {
|
|
62
|
+
__esm,
|
|
63
|
+
__require
|
|
64
|
+
} from "./chunk-qp2qdcda.js";
|
|
65
|
+
|
|
66
|
+
// src/utils/tasks.ts
|
|
67
|
+
import { mkdir, readdir, readFile, unlink, writeFile } from "fs/promises";
|
|
68
|
+
import { join } from "path";
|
|
69
|
+
function setLeaderTeamName(teamName) {
|
|
70
|
+
if (leaderTeamName === teamName)
|
|
71
|
+
return;
|
|
72
|
+
leaderTeamName = teamName;
|
|
73
|
+
notifyTasksUpdated();
|
|
74
|
+
}
|
|
75
|
+
function clearLeaderTeamName() {
|
|
76
|
+
if (leaderTeamName === undefined)
|
|
77
|
+
return;
|
|
78
|
+
leaderTeamName = undefined;
|
|
79
|
+
notifyTasksUpdated();
|
|
80
|
+
}
|
|
81
|
+
function notifyTasksUpdated() {
|
|
82
|
+
try {
|
|
83
|
+
tasksUpdated.emit();
|
|
84
|
+
} catch {}
|
|
85
|
+
}
|
|
86
|
+
function getHighWaterMarkPath(taskListId) {
|
|
87
|
+
return join(getTasksDir(taskListId), HIGH_WATER_MARK_FILE);
|
|
88
|
+
}
|
|
89
|
+
async function readHighWaterMark(taskListId) {
|
|
90
|
+
const path = getHighWaterMarkPath(taskListId);
|
|
91
|
+
try {
|
|
92
|
+
const content = (await readFile(path, "utf-8")).trim();
|
|
93
|
+
const value = parseInt(content, 10);
|
|
94
|
+
return isNaN(value) ? 0 : value;
|
|
95
|
+
} catch {
|
|
96
|
+
return 0;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function writeHighWaterMark(taskListId, value) {
|
|
100
|
+
const path = getHighWaterMarkPath(taskListId);
|
|
101
|
+
await writeFile(path, String(value));
|
|
102
|
+
}
|
|
103
|
+
function isTodoV2Enabled() {
|
|
104
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_ENABLE_TASKS)) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
return !getIsNonInteractiveSession();
|
|
108
|
+
}
|
|
109
|
+
async function resetTaskList(taskListId) {
|
|
110
|
+
const dir = getTasksDir(taskListId);
|
|
111
|
+
const lockPath = await ensureTaskListLockFile(taskListId);
|
|
112
|
+
let release;
|
|
113
|
+
try {
|
|
114
|
+
release = await lock(lockPath, LOCK_OPTIONS);
|
|
115
|
+
const currentHighest = await findHighestTaskIdFromFiles(taskListId);
|
|
116
|
+
if (currentHighest > 0) {
|
|
117
|
+
const existingMark = await readHighWaterMark(taskListId);
|
|
118
|
+
if (currentHighest > existingMark) {
|
|
119
|
+
await writeHighWaterMark(taskListId, currentHighest);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
let files;
|
|
123
|
+
try {
|
|
124
|
+
files = await readdir(dir);
|
|
125
|
+
} catch {
|
|
126
|
+
files = [];
|
|
127
|
+
}
|
|
128
|
+
for (const file of files) {
|
|
129
|
+
if (file.endsWith(".json") && !file.startsWith(".")) {
|
|
130
|
+
const filePath = join(dir, file);
|
|
131
|
+
try {
|
|
132
|
+
await unlink(filePath);
|
|
133
|
+
} catch {}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
notifyTasksUpdated();
|
|
137
|
+
} finally {
|
|
138
|
+
if (release) {
|
|
139
|
+
await release();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function getTaskListId() {
|
|
144
|
+
if (process.env.CLAUDE_CODE_TASK_LIST_ID) {
|
|
145
|
+
return process.env.CLAUDE_CODE_TASK_LIST_ID;
|
|
146
|
+
}
|
|
147
|
+
const teammateCtx = getTeammateContext();
|
|
148
|
+
if (teammateCtx) {
|
|
149
|
+
return teammateCtx.teamName;
|
|
150
|
+
}
|
|
151
|
+
return getTeamName() || leaderTeamName || getSessionId();
|
|
152
|
+
}
|
|
153
|
+
function sanitizePathComponent(input) {
|
|
154
|
+
return input.replace(/[^a-zA-Z0-9_-]/g, "-");
|
|
155
|
+
}
|
|
156
|
+
function getTasksDir(taskListId) {
|
|
157
|
+
return join(getConfigHomeDir(), "tasks", sanitizePathComponent(taskListId));
|
|
158
|
+
}
|
|
159
|
+
function getTaskPath(taskListId, taskId) {
|
|
160
|
+
return join(getTasksDir(taskListId), `${sanitizePathComponent(taskId)}.json`);
|
|
161
|
+
}
|
|
162
|
+
async function ensureTasksDir(taskListId) {
|
|
163
|
+
const dir = getTasksDir(taskListId);
|
|
164
|
+
try {
|
|
165
|
+
await mkdir(dir, { recursive: true });
|
|
166
|
+
} catch {}
|
|
167
|
+
}
|
|
168
|
+
async function findHighestTaskIdFromFiles(taskListId) {
|
|
169
|
+
const dir = getTasksDir(taskListId);
|
|
170
|
+
let files;
|
|
171
|
+
try {
|
|
172
|
+
files = await readdir(dir);
|
|
173
|
+
} catch {
|
|
174
|
+
return 0;
|
|
175
|
+
}
|
|
176
|
+
let highest = 0;
|
|
177
|
+
for (const file of files) {
|
|
178
|
+
if (!file.endsWith(".json")) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const taskId = parseInt(file.replace(".json", ""), 10);
|
|
182
|
+
if (!isNaN(taskId) && taskId > highest) {
|
|
183
|
+
highest = taskId;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return highest;
|
|
187
|
+
}
|
|
188
|
+
async function findHighestTaskId(taskListId) {
|
|
189
|
+
const [fromFiles, fromMark] = await Promise.all([
|
|
190
|
+
findHighestTaskIdFromFiles(taskListId),
|
|
191
|
+
readHighWaterMark(taskListId)
|
|
192
|
+
]);
|
|
193
|
+
return Math.max(fromFiles, fromMark);
|
|
194
|
+
}
|
|
195
|
+
async function createTask(taskListId, taskData) {
|
|
196
|
+
const lockPath = await ensureTaskListLockFile(taskListId);
|
|
197
|
+
let release;
|
|
198
|
+
try {
|
|
199
|
+
release = await lock(lockPath, LOCK_OPTIONS);
|
|
200
|
+
const highestId = await findHighestTaskId(taskListId);
|
|
201
|
+
const id = String(highestId + 1);
|
|
202
|
+
const task = { id, ...taskData };
|
|
203
|
+
const path = getTaskPath(taskListId, id);
|
|
204
|
+
await writeFile(path, jsonStringify(task, null, 2));
|
|
205
|
+
notifyTasksUpdated();
|
|
206
|
+
return id;
|
|
207
|
+
} finally {
|
|
208
|
+
if (release) {
|
|
209
|
+
await release();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async function getTask(taskListId, taskId) {
|
|
214
|
+
const path = getTaskPath(taskListId, taskId);
|
|
215
|
+
try {
|
|
216
|
+
const content = await readFile(path, "utf-8");
|
|
217
|
+
const data = jsonParse(content);
|
|
218
|
+
if (process.env.USER_TYPE === "ant") {
|
|
219
|
+
if (data.status === "open")
|
|
220
|
+
data.status = "pending";
|
|
221
|
+
else if (data.status === "resolved")
|
|
222
|
+
data.status = "completed";
|
|
223
|
+
else if (data.status && ["planning", "implementing", "reviewing", "verifying"].includes(data.status)) {
|
|
224
|
+
data.status = "in_progress";
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
const parsed = TaskSchema().safeParse(data);
|
|
228
|
+
if (!parsed.success) {
|
|
229
|
+
logForDebugging(`[Tasks] Task ${taskId} failed schema validation: ${parsed.error.message}`);
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
return parsed.data;
|
|
233
|
+
} catch (e) {
|
|
234
|
+
const code = getErrnoCode(e);
|
|
235
|
+
if (code === "ENOENT") {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
logForDebugging(`[Tasks] Failed to read task ${taskId}: ${errorMessage(e)}`);
|
|
239
|
+
logError(e);
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
async function updateTaskUnsafe(taskListId, taskId, updates) {
|
|
244
|
+
const existing = await getTask(taskListId, taskId);
|
|
245
|
+
if (!existing) {
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
248
|
+
const updated = { ...existing, ...updates, id: taskId };
|
|
249
|
+
const path = getTaskPath(taskListId, taskId);
|
|
250
|
+
await writeFile(path, jsonStringify(updated, null, 2));
|
|
251
|
+
notifyTasksUpdated();
|
|
252
|
+
return updated;
|
|
253
|
+
}
|
|
254
|
+
async function updateTask(taskListId, taskId, updates) {
|
|
255
|
+
const path = getTaskPath(taskListId, taskId);
|
|
256
|
+
const taskBeforeLock = await getTask(taskListId, taskId);
|
|
257
|
+
if (!taskBeforeLock) {
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
let release;
|
|
261
|
+
try {
|
|
262
|
+
release = await lock(path, LOCK_OPTIONS);
|
|
263
|
+
return await updateTaskUnsafe(taskListId, taskId, updates);
|
|
264
|
+
} finally {
|
|
265
|
+
await release?.();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
async function deleteTask(taskListId, taskId) {
|
|
269
|
+
const path = getTaskPath(taskListId, taskId);
|
|
270
|
+
try {
|
|
271
|
+
const numericId = parseInt(taskId, 10);
|
|
272
|
+
if (!isNaN(numericId)) {
|
|
273
|
+
const currentMark = await readHighWaterMark(taskListId);
|
|
274
|
+
if (numericId > currentMark) {
|
|
275
|
+
await writeHighWaterMark(taskListId, numericId);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
try {
|
|
279
|
+
await unlink(path);
|
|
280
|
+
} catch (e) {
|
|
281
|
+
const code = getErrnoCode(e);
|
|
282
|
+
if (code === "ENOENT") {
|
|
283
|
+
return false;
|
|
284
|
+
}
|
|
285
|
+
throw e;
|
|
286
|
+
}
|
|
287
|
+
const allTasks = await listTasks(taskListId);
|
|
288
|
+
for (const task of allTasks) {
|
|
289
|
+
const newBlocks = task.blocks.filter((id) => id !== taskId);
|
|
290
|
+
const newBlockedBy = task.blockedBy.filter((id) => id !== taskId);
|
|
291
|
+
if (newBlocks.length !== task.blocks.length || newBlockedBy.length !== task.blockedBy.length) {
|
|
292
|
+
await updateTask(taskListId, task.id, {
|
|
293
|
+
blocks: newBlocks,
|
|
294
|
+
blockedBy: newBlockedBy
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
notifyTasksUpdated();
|
|
299
|
+
return true;
|
|
300
|
+
} catch {
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
async function listTasks(taskListId) {
|
|
305
|
+
const dir = getTasksDir(taskListId);
|
|
306
|
+
let files;
|
|
307
|
+
try {
|
|
308
|
+
files = await readdir(dir);
|
|
309
|
+
} catch {
|
|
310
|
+
return [];
|
|
311
|
+
}
|
|
312
|
+
const taskIds = files.filter((f) => f.endsWith(".json")).map((f) => f.replace(".json", ""));
|
|
313
|
+
const results = await Promise.all(taskIds.map((id) => getTask(taskListId, id)));
|
|
314
|
+
return results.filter((t) => t !== null);
|
|
315
|
+
}
|
|
316
|
+
async function blockTask(taskListId, fromTaskId, toTaskId) {
|
|
317
|
+
const [fromTask, toTask] = await Promise.all([
|
|
318
|
+
getTask(taskListId, fromTaskId),
|
|
319
|
+
getTask(taskListId, toTaskId)
|
|
320
|
+
]);
|
|
321
|
+
if (!fromTask || !toTask) {
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
if (!fromTask.blocks.includes(toTaskId)) {
|
|
325
|
+
await updateTask(taskListId, fromTaskId, {
|
|
326
|
+
blocks: [...fromTask.blocks, toTaskId]
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
if (!toTask.blockedBy.includes(fromTaskId)) {
|
|
330
|
+
await updateTask(taskListId, toTaskId, {
|
|
331
|
+
blockedBy: [...toTask.blockedBy, fromTaskId]
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
return true;
|
|
335
|
+
}
|
|
336
|
+
function getTaskListLockPath(taskListId) {
|
|
337
|
+
return join(getTasksDir(taskListId), ".lock");
|
|
338
|
+
}
|
|
339
|
+
async function ensureTaskListLockFile(taskListId) {
|
|
340
|
+
await ensureTasksDir(taskListId);
|
|
341
|
+
const lockPath = getTaskListLockPath(taskListId);
|
|
342
|
+
try {
|
|
343
|
+
await writeFile(lockPath, "", { flag: "wx" });
|
|
344
|
+
} catch {}
|
|
345
|
+
return lockPath;
|
|
346
|
+
}
|
|
347
|
+
async function claimTask(taskListId, taskId, claimantAgentId, options = {}) {
|
|
348
|
+
const taskPath = getTaskPath(taskListId, taskId);
|
|
349
|
+
const taskBeforeLock = await getTask(taskListId, taskId);
|
|
350
|
+
if (!taskBeforeLock) {
|
|
351
|
+
return { success: false, reason: "task_not_found" };
|
|
352
|
+
}
|
|
353
|
+
if (options.checkAgentBusy) {
|
|
354
|
+
return claimTaskWithBusyCheck(taskListId, taskId, claimantAgentId);
|
|
355
|
+
}
|
|
356
|
+
let release;
|
|
357
|
+
try {
|
|
358
|
+
release = await lock(taskPath, LOCK_OPTIONS);
|
|
359
|
+
const task = await getTask(taskListId, taskId);
|
|
360
|
+
if (!task) {
|
|
361
|
+
return { success: false, reason: "task_not_found" };
|
|
362
|
+
}
|
|
363
|
+
if (task.owner && task.owner !== claimantAgentId) {
|
|
364
|
+
return { success: false, reason: "already_claimed", task };
|
|
365
|
+
}
|
|
366
|
+
if (task.status === "completed") {
|
|
367
|
+
return { success: false, reason: "already_resolved", task };
|
|
368
|
+
}
|
|
369
|
+
const allTasks = await listTasks(taskListId);
|
|
370
|
+
const unresolvedTaskIds = new Set(allTasks.filter((t) => t.status !== "completed").map((t) => t.id));
|
|
371
|
+
const blockedByTasks = task.blockedBy.filter((id) => unresolvedTaskIds.has(id));
|
|
372
|
+
if (blockedByTasks.length > 0) {
|
|
373
|
+
return { success: false, reason: "blocked", task, blockedByTasks };
|
|
374
|
+
}
|
|
375
|
+
const updated = await updateTaskUnsafe(taskListId, taskId, {
|
|
376
|
+
owner: claimantAgentId
|
|
377
|
+
});
|
|
378
|
+
return { success: true, task: updated };
|
|
379
|
+
} catch (error) {
|
|
380
|
+
logForDebugging(`[Tasks] Failed to claim task ${taskId}: ${errorMessage(error)}`);
|
|
381
|
+
logError(error);
|
|
382
|
+
return { success: false, reason: "task_not_found" };
|
|
383
|
+
} finally {
|
|
384
|
+
if (release) {
|
|
385
|
+
await release();
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
async function claimTaskWithBusyCheck(taskListId, taskId, claimantAgentId) {
|
|
390
|
+
const lockPath = await ensureTaskListLockFile(taskListId);
|
|
391
|
+
let release;
|
|
392
|
+
try {
|
|
393
|
+
release = await lock(lockPath, LOCK_OPTIONS);
|
|
394
|
+
const allTasks = await listTasks(taskListId);
|
|
395
|
+
const task = allTasks.find((t) => t.id === taskId);
|
|
396
|
+
if (!task) {
|
|
397
|
+
return { success: false, reason: "task_not_found" };
|
|
398
|
+
}
|
|
399
|
+
if (task.owner && task.owner !== claimantAgentId) {
|
|
400
|
+
return { success: false, reason: "already_claimed", task };
|
|
401
|
+
}
|
|
402
|
+
if (task.status === "completed") {
|
|
403
|
+
return { success: false, reason: "already_resolved", task };
|
|
404
|
+
}
|
|
405
|
+
const unresolvedTaskIds = new Set(allTasks.filter((t) => t.status !== "completed").map((t) => t.id));
|
|
406
|
+
const blockedByTasks = task.blockedBy.filter((id) => unresolvedTaskIds.has(id));
|
|
407
|
+
if (blockedByTasks.length > 0) {
|
|
408
|
+
return { success: false, reason: "blocked", task, blockedByTasks };
|
|
409
|
+
}
|
|
410
|
+
const agentOpenTasks = allTasks.filter((t) => t.status !== "completed" && t.owner === claimantAgentId && t.id !== taskId);
|
|
411
|
+
if (agentOpenTasks.length > 0) {
|
|
412
|
+
return {
|
|
413
|
+
success: false,
|
|
414
|
+
reason: "agent_busy",
|
|
415
|
+
task,
|
|
416
|
+
busyWithTasks: agentOpenTasks.map((t) => t.id)
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
const updated = await updateTask(taskListId, taskId, {
|
|
420
|
+
owner: claimantAgentId
|
|
421
|
+
});
|
|
422
|
+
return { success: true, task: updated };
|
|
423
|
+
} catch (error) {
|
|
424
|
+
logForDebugging(`[Tasks] Failed to claim task ${taskId} with busy check: ${errorMessage(error)}`);
|
|
425
|
+
logError(error);
|
|
426
|
+
return { success: false, reason: "task_not_found" };
|
|
427
|
+
} finally {
|
|
428
|
+
if (release) {
|
|
429
|
+
await release();
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
async function unassignTeammateTasks(teamName, teammateId, teammateName, reason) {
|
|
434
|
+
const tasks = await listTasks(teamName);
|
|
435
|
+
const unresolvedAssignedTasks = tasks.filter((t) => t.status !== "completed" && (t.owner === teammateId || t.owner === teammateName));
|
|
436
|
+
for (const task of unresolvedAssignedTasks) {
|
|
437
|
+
await updateTask(teamName, task.id, { owner: undefined, status: "pending" });
|
|
438
|
+
}
|
|
439
|
+
if (unresolvedAssignedTasks.length > 0) {
|
|
440
|
+
logForDebugging(`[Tasks] Unassigned ${unresolvedAssignedTasks.length} task(s) from ${teammateName}`);
|
|
441
|
+
}
|
|
442
|
+
const actionVerb = reason === "terminated" ? "was terminated" : "has shut down";
|
|
443
|
+
let notificationMessage = `${teammateName} ${actionVerb}.`;
|
|
444
|
+
if (unresolvedAssignedTasks.length > 0) {
|
|
445
|
+
const taskList = unresolvedAssignedTasks.map((t) => `#${t.id} "${t.subject}"`).join(", ");
|
|
446
|
+
notificationMessage += ` ${unresolvedAssignedTasks.length} task(s) were unassigned: ${taskList}. Use TaskList to check availability and TaskUpdate with owner to reassign them to idle teammates.`;
|
|
447
|
+
}
|
|
448
|
+
return {
|
|
449
|
+
unassignedTasks: unresolvedAssignedTasks.map((t) => ({
|
|
450
|
+
id: t.id,
|
|
451
|
+
subject: t.subject
|
|
452
|
+
})),
|
|
453
|
+
notificationMessage
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
var tasksUpdated, leaderTeamName, onTasksUpdated, TaskStatusSchema, TaskSchema, HIGH_WATER_MARK_FILE = ".highwatermark", LOCK_OPTIONS, DEFAULT_TASKS_MODE_TASK_LIST_ID = "tasklist";
|
|
457
|
+
var init_tasks = __esm(() => {
|
|
458
|
+
init_v4();
|
|
459
|
+
init_state();
|
|
460
|
+
init_array();
|
|
461
|
+
init_debug();
|
|
462
|
+
init_envUtils();
|
|
463
|
+
init_errors();
|
|
464
|
+
init_lazySchema();
|
|
465
|
+
init_lockfile();
|
|
466
|
+
init_log();
|
|
467
|
+
init_signal();
|
|
468
|
+
init_slowOperations();
|
|
469
|
+
init_teammate();
|
|
470
|
+
init_teammateContext();
|
|
471
|
+
tasksUpdated = createSignal();
|
|
472
|
+
onTasksUpdated = tasksUpdated.subscribe;
|
|
473
|
+
TaskStatusSchema = lazySchema(() => exports_external.enum(["pending", "in_progress", "completed"]));
|
|
474
|
+
TaskSchema = lazySchema(() => exports_external.object({
|
|
475
|
+
id: exports_external.string(),
|
|
476
|
+
subject: exports_external.string(),
|
|
477
|
+
description: exports_external.string(),
|
|
478
|
+
activeForm: exports_external.string().optional(),
|
|
479
|
+
owner: exports_external.string().optional(),
|
|
480
|
+
status: TaskStatusSchema(),
|
|
481
|
+
blocks: exports_external.array(exports_external.string()),
|
|
482
|
+
blockedBy: exports_external.array(exports_external.string()),
|
|
483
|
+
metadata: exports_external.record(exports_external.string(), exports_external.unknown()).optional()
|
|
484
|
+
}));
|
|
485
|
+
LOCK_OPTIONS = {
|
|
486
|
+
retries: {
|
|
487
|
+
retries: 30,
|
|
488
|
+
minTimeout: 5,
|
|
489
|
+
maxTimeout: 100
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
});
|
|
493
|
+
|
|
494
|
+
// src/utils/swarm/backends/types.ts
|
|
495
|
+
function isPaneBackend(type) {
|
|
496
|
+
return type === "tmux" || type === "iterm2";
|
|
497
|
+
}
|
|
498
|
+
var init_types = () => {};
|
|
499
|
+
|
|
500
|
+
// src/utils/swarm/teamHelpers.ts
|
|
501
|
+
import { mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
502
|
+
import { mkdir as mkdir2, readFile as readFile2, rm, writeFile as writeFile2 } from "fs/promises";
|
|
503
|
+
import { join as join2 } from "path";
|
|
504
|
+
function sanitizeName(name) {
|
|
505
|
+
return name.replace(/[^a-zA-Z0-9]/g, "-").toLowerCase();
|
|
506
|
+
}
|
|
507
|
+
function sanitizeAgentName(name) {
|
|
508
|
+
return name.replace(/@/g, "-");
|
|
509
|
+
}
|
|
510
|
+
function getTeamDir(teamName) {
|
|
511
|
+
return join2(getTeamsDir(), sanitizeName(teamName));
|
|
512
|
+
}
|
|
513
|
+
function getTeamFilePath(teamName) {
|
|
514
|
+
return join2(getTeamDir(teamName), "config.json");
|
|
515
|
+
}
|
|
516
|
+
function readTeamFile(teamName) {
|
|
517
|
+
try {
|
|
518
|
+
const content = readFileSync(getTeamFilePath(teamName), "utf-8");
|
|
519
|
+
return jsonParse(content);
|
|
520
|
+
} catch (e) {
|
|
521
|
+
if (getErrnoCode(e) === "ENOENT")
|
|
522
|
+
return null;
|
|
523
|
+
logForDebugging(`[TeammateTool] Failed to read team file for ${teamName}: ${errorMessage(e)}`);
|
|
524
|
+
return null;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
async function readTeamFileAsync(teamName) {
|
|
528
|
+
try {
|
|
529
|
+
const content = await readFile2(getTeamFilePath(teamName), "utf-8");
|
|
530
|
+
return jsonParse(content);
|
|
531
|
+
} catch (e) {
|
|
532
|
+
if (getErrnoCode(e) === "ENOENT")
|
|
533
|
+
return null;
|
|
534
|
+
logForDebugging(`[TeammateTool] Failed to read team file for ${teamName}: ${errorMessage(e)}`);
|
|
535
|
+
return null;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
function writeTeamFile(teamName, teamFile) {
|
|
539
|
+
const teamDir = getTeamDir(teamName);
|
|
540
|
+
mkdirSync(teamDir, { recursive: true });
|
|
541
|
+
writeFileSync(getTeamFilePath(teamName), jsonStringify(teamFile, null, 2));
|
|
542
|
+
}
|
|
543
|
+
async function writeTeamFileAsync(teamName, teamFile) {
|
|
544
|
+
const teamDir = getTeamDir(teamName);
|
|
545
|
+
await mkdir2(teamDir, { recursive: true });
|
|
546
|
+
await writeFile2(getTeamFilePath(teamName), jsonStringify(teamFile, null, 2));
|
|
547
|
+
}
|
|
548
|
+
function removeTeammateFromTeamFile(teamName, identifier) {
|
|
549
|
+
const identifierStr = identifier.agentId || identifier.name;
|
|
550
|
+
if (!identifierStr) {
|
|
551
|
+
logForDebugging("[TeammateTool] removeTeammateFromTeamFile called with no identifier");
|
|
552
|
+
return false;
|
|
553
|
+
}
|
|
554
|
+
const teamFile = readTeamFile(teamName);
|
|
555
|
+
if (!teamFile) {
|
|
556
|
+
logForDebugging(`[TeammateTool] Cannot remove teammate ${identifierStr}: failed to read team file for "${teamName}"`);
|
|
557
|
+
return false;
|
|
558
|
+
}
|
|
559
|
+
const originalLength = teamFile.members.length;
|
|
560
|
+
teamFile.members = teamFile.members.filter((m) => {
|
|
561
|
+
if (identifier.agentId && m.agentId === identifier.agentId)
|
|
562
|
+
return false;
|
|
563
|
+
if (identifier.name && m.name === identifier.name)
|
|
564
|
+
return false;
|
|
565
|
+
return true;
|
|
566
|
+
});
|
|
567
|
+
if (teamFile.members.length === originalLength) {
|
|
568
|
+
logForDebugging(`[TeammateTool] Teammate ${identifierStr} not found in team file for "${teamName}"`);
|
|
569
|
+
return false;
|
|
570
|
+
}
|
|
571
|
+
writeTeamFile(teamName, teamFile);
|
|
572
|
+
logForDebugging(`[TeammateTool] Removed teammate from team file: ${identifierStr}`);
|
|
573
|
+
return true;
|
|
574
|
+
}
|
|
575
|
+
function addHiddenPaneId(teamName, paneId) {
|
|
576
|
+
const teamFile = readTeamFile(teamName);
|
|
577
|
+
if (!teamFile) {
|
|
578
|
+
return false;
|
|
579
|
+
}
|
|
580
|
+
const hiddenPaneIds = teamFile.hiddenPaneIds ?? [];
|
|
581
|
+
if (!hiddenPaneIds.includes(paneId)) {
|
|
582
|
+
hiddenPaneIds.push(paneId);
|
|
583
|
+
teamFile.hiddenPaneIds = hiddenPaneIds;
|
|
584
|
+
writeTeamFile(teamName, teamFile);
|
|
585
|
+
logForDebugging(`[TeammateTool] Added ${paneId} to hidden panes for team ${teamName}`);
|
|
586
|
+
}
|
|
587
|
+
return true;
|
|
588
|
+
}
|
|
589
|
+
function removeHiddenPaneId(teamName, paneId) {
|
|
590
|
+
const teamFile = readTeamFile(teamName);
|
|
591
|
+
if (!teamFile) {
|
|
592
|
+
return false;
|
|
593
|
+
}
|
|
594
|
+
const hiddenPaneIds = teamFile.hiddenPaneIds ?? [];
|
|
595
|
+
const index = hiddenPaneIds.indexOf(paneId);
|
|
596
|
+
if (index !== -1) {
|
|
597
|
+
hiddenPaneIds.splice(index, 1);
|
|
598
|
+
teamFile.hiddenPaneIds = hiddenPaneIds;
|
|
599
|
+
writeTeamFile(teamName, teamFile);
|
|
600
|
+
logForDebugging(`[TeammateTool] Removed ${paneId} from hidden panes for team ${teamName}`);
|
|
601
|
+
}
|
|
602
|
+
return true;
|
|
603
|
+
}
|
|
604
|
+
function removeMemberFromTeam(teamName, tmuxPaneId) {
|
|
605
|
+
const teamFile = readTeamFile(teamName);
|
|
606
|
+
if (!teamFile) {
|
|
607
|
+
return false;
|
|
608
|
+
}
|
|
609
|
+
const memberIndex = teamFile.members.findIndex((m) => m.tmuxPaneId === tmuxPaneId);
|
|
610
|
+
if (memberIndex === -1) {
|
|
611
|
+
return false;
|
|
612
|
+
}
|
|
613
|
+
teamFile.members.splice(memberIndex, 1);
|
|
614
|
+
if (teamFile.hiddenPaneIds) {
|
|
615
|
+
const hiddenIndex = teamFile.hiddenPaneIds.indexOf(tmuxPaneId);
|
|
616
|
+
if (hiddenIndex !== -1) {
|
|
617
|
+
teamFile.hiddenPaneIds.splice(hiddenIndex, 1);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
writeTeamFile(teamName, teamFile);
|
|
621
|
+
logForDebugging(`[TeammateTool] Removed member with pane ${tmuxPaneId} from team ${teamName}`);
|
|
622
|
+
return true;
|
|
623
|
+
}
|
|
624
|
+
function removeMemberByAgentId(teamName, agentId) {
|
|
625
|
+
const teamFile = readTeamFile(teamName);
|
|
626
|
+
if (!teamFile) {
|
|
627
|
+
return false;
|
|
628
|
+
}
|
|
629
|
+
const memberIndex = teamFile.members.findIndex((m) => m.agentId === agentId);
|
|
630
|
+
if (memberIndex === -1) {
|
|
631
|
+
return false;
|
|
632
|
+
}
|
|
633
|
+
teamFile.members.splice(memberIndex, 1);
|
|
634
|
+
writeTeamFile(teamName, teamFile);
|
|
635
|
+
logForDebugging(`[TeammateTool] Removed member ${agentId} from team ${teamName}`);
|
|
636
|
+
return true;
|
|
637
|
+
}
|
|
638
|
+
function setMemberMode(teamName, memberName, mode) {
|
|
639
|
+
const teamFile = readTeamFile(teamName);
|
|
640
|
+
if (!teamFile) {
|
|
641
|
+
return false;
|
|
642
|
+
}
|
|
643
|
+
const member = teamFile.members.find((m) => m.name === memberName);
|
|
644
|
+
if (!member) {
|
|
645
|
+
logForDebugging(`[TeammateTool] Cannot set member mode: member ${memberName} not found in team ${teamName}`);
|
|
646
|
+
return false;
|
|
647
|
+
}
|
|
648
|
+
if (member.mode === mode) {
|
|
649
|
+
return true;
|
|
650
|
+
}
|
|
651
|
+
const updatedMembers = teamFile.members.map((m) => m.name === memberName ? { ...m, mode } : m);
|
|
652
|
+
writeTeamFile(teamName, { ...teamFile, members: updatedMembers });
|
|
653
|
+
logForDebugging(`[TeammateTool] Set member ${memberName} in team ${teamName} to mode: ${mode}`);
|
|
654
|
+
return true;
|
|
655
|
+
}
|
|
656
|
+
function syncTeammateMode(mode, teamNameOverride) {
|
|
657
|
+
if (!isTeammate())
|
|
658
|
+
return;
|
|
659
|
+
const teamName = teamNameOverride ?? getTeamName();
|
|
660
|
+
const agentName = getAgentName();
|
|
661
|
+
if (teamName && agentName) {
|
|
662
|
+
setMemberMode(teamName, agentName, mode);
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
function setMultipleMemberModes(teamName, modeUpdates) {
|
|
666
|
+
const teamFile = readTeamFile(teamName);
|
|
667
|
+
if (!teamFile) {
|
|
668
|
+
return false;
|
|
669
|
+
}
|
|
670
|
+
const updateMap = new Map(modeUpdates.map((u) => [u.memberName, u.mode]));
|
|
671
|
+
let anyChanged = false;
|
|
672
|
+
const updatedMembers = teamFile.members.map((member) => {
|
|
673
|
+
const newMode = updateMap.get(member.name);
|
|
674
|
+
if (newMode !== undefined && member.mode !== newMode) {
|
|
675
|
+
anyChanged = true;
|
|
676
|
+
return { ...member, mode: newMode };
|
|
677
|
+
}
|
|
678
|
+
return member;
|
|
679
|
+
});
|
|
680
|
+
if (anyChanged) {
|
|
681
|
+
writeTeamFile(teamName, { ...teamFile, members: updatedMembers });
|
|
682
|
+
logForDebugging(`[TeammateTool] Set ${modeUpdates.length} member modes in team ${teamName}`);
|
|
683
|
+
}
|
|
684
|
+
return true;
|
|
685
|
+
}
|
|
686
|
+
async function setMemberActive(teamName, memberName, isActive) {
|
|
687
|
+
const teamFile = await readTeamFileAsync(teamName);
|
|
688
|
+
if (!teamFile) {
|
|
689
|
+
logForDebugging(`[TeammateTool] Cannot set member active: team ${teamName} not found`);
|
|
690
|
+
return;
|
|
691
|
+
}
|
|
692
|
+
const member = teamFile.members.find((m) => m.name === memberName);
|
|
693
|
+
if (!member) {
|
|
694
|
+
logForDebugging(`[TeammateTool] Cannot set member active: member ${memberName} not found in team ${teamName}`);
|
|
695
|
+
return;
|
|
696
|
+
}
|
|
697
|
+
if (member.isActive === isActive) {
|
|
698
|
+
return;
|
|
699
|
+
}
|
|
700
|
+
member.isActive = isActive;
|
|
701
|
+
await writeTeamFileAsync(teamName, teamFile);
|
|
702
|
+
logForDebugging(`[TeammateTool] Set member ${memberName} in team ${teamName} to ${isActive ? "active" : "idle"}`);
|
|
703
|
+
}
|
|
704
|
+
async function destroyWorktree(worktreePath) {
|
|
705
|
+
const gitFilePath = join2(worktreePath, ".git");
|
|
706
|
+
let mainRepoPath = null;
|
|
707
|
+
try {
|
|
708
|
+
const gitFileContent = (await readFile2(gitFilePath, "utf-8")).trim();
|
|
709
|
+
const match = gitFileContent.match(/^gitdir:\s*(.+)$/);
|
|
710
|
+
if (match && match[1]) {
|
|
711
|
+
const worktreeGitDir = match[1];
|
|
712
|
+
const mainGitDir = join2(worktreeGitDir, "..", "..");
|
|
713
|
+
mainRepoPath = join2(mainGitDir, "..");
|
|
714
|
+
}
|
|
715
|
+
} catch {}
|
|
716
|
+
if (mainRepoPath) {
|
|
717
|
+
const result = await execFileNoThrowWithCwd(gitExe(), ["worktree", "remove", "--force", worktreePath], { cwd: mainRepoPath });
|
|
718
|
+
if (result.code === 0) {
|
|
719
|
+
logForDebugging(`[TeammateTool] Removed worktree via git: ${worktreePath}`);
|
|
720
|
+
return;
|
|
721
|
+
}
|
|
722
|
+
if (result.stderr?.includes("not a working tree")) {
|
|
723
|
+
logForDebugging(`[TeammateTool] Worktree already removed: ${worktreePath}`);
|
|
724
|
+
return;
|
|
725
|
+
}
|
|
726
|
+
logForDebugging(`[TeammateTool] git worktree remove failed, falling back to rm: ${result.stderr}`);
|
|
727
|
+
}
|
|
728
|
+
try {
|
|
729
|
+
await rm(worktreePath, { recursive: true, force: true });
|
|
730
|
+
logForDebugging(`[TeammateTool] Removed worktree directory manually: ${worktreePath}`);
|
|
731
|
+
} catch (error) {
|
|
732
|
+
logForDebugging(`[TeammateTool] Failed to remove worktree ${worktreePath}: ${errorMessage(error)}`);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
function registerTeamForSessionCleanup(teamName) {
|
|
736
|
+
getSessionCreatedTeams().add(teamName);
|
|
737
|
+
}
|
|
738
|
+
function unregisterTeamForSessionCleanup(teamName) {
|
|
739
|
+
getSessionCreatedTeams().delete(teamName);
|
|
740
|
+
}
|
|
741
|
+
async function cleanupSessionTeams() {
|
|
742
|
+
const sessionCreatedTeams = getSessionCreatedTeams();
|
|
743
|
+
if (sessionCreatedTeams.size === 0)
|
|
744
|
+
return;
|
|
745
|
+
const teams = Array.from(sessionCreatedTeams);
|
|
746
|
+
logForDebugging(`cleanupSessionTeams: removing ${teams.length} orphan team dir(s): ${teams.join(", ")}`);
|
|
747
|
+
await Promise.allSettled(teams.map((name) => killOrphanedTeammatePanes(name)));
|
|
748
|
+
await Promise.allSettled(teams.map((name) => cleanupTeamDirectories(name)));
|
|
749
|
+
sessionCreatedTeams.clear();
|
|
750
|
+
}
|
|
751
|
+
async function killOrphanedTeammatePanes(teamName) {
|
|
752
|
+
const teamFile = readTeamFile(teamName);
|
|
753
|
+
if (!teamFile)
|
|
754
|
+
return;
|
|
755
|
+
const paneMembers = teamFile.members.filter((m) => m.name !== TEAM_LEAD_NAME && m.tmuxPaneId && m.backendType && isPaneBackend(m.backendType));
|
|
756
|
+
if (paneMembers.length === 0)
|
|
757
|
+
return;
|
|
758
|
+
const [{ ensureBackendsRegistered, getBackendByType }, { isInsideTmux }] = await Promise.all([
|
|
759
|
+
import("./chunk-8nsem424.js"),
|
|
760
|
+
import("./chunk-d2rzy2p0.js")
|
|
761
|
+
]);
|
|
762
|
+
await ensureBackendsRegistered();
|
|
763
|
+
const useExternalSession = !await isInsideTmux();
|
|
764
|
+
await Promise.allSettled(paneMembers.map(async (m) => {
|
|
765
|
+
if (!m.tmuxPaneId || !m.backendType || !isPaneBackend(m.backendType)) {
|
|
766
|
+
return;
|
|
767
|
+
}
|
|
768
|
+
const ok = await getBackendByType(m.backendType).killPane(m.tmuxPaneId, useExternalSession);
|
|
769
|
+
logForDebugging(`cleanupSessionTeams: killPane ${m.name} (${m.backendType} ${m.tmuxPaneId}) \u2192 ${ok}`);
|
|
770
|
+
}));
|
|
771
|
+
}
|
|
772
|
+
async function cleanupTeamDirectories(teamName) {
|
|
773
|
+
const sanitizedName = sanitizeName(teamName);
|
|
774
|
+
const teamFile = readTeamFile(teamName);
|
|
775
|
+
const worktreePaths = [];
|
|
776
|
+
if (teamFile) {
|
|
777
|
+
for (const member of teamFile.members) {
|
|
778
|
+
if (member.worktreePath) {
|
|
779
|
+
worktreePaths.push(member.worktreePath);
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
for (const worktreePath of worktreePaths) {
|
|
784
|
+
await destroyWorktree(worktreePath);
|
|
785
|
+
}
|
|
786
|
+
const teamDir = getTeamDir(teamName);
|
|
787
|
+
try {
|
|
788
|
+
await rm(teamDir, { recursive: true, force: true });
|
|
789
|
+
logForDebugging(`[TeammateTool] Cleaned up team directory: ${teamDir}`);
|
|
790
|
+
} catch (error) {
|
|
791
|
+
logForDebugging(`[TeammateTool] Failed to clean up team directory ${teamDir}: ${errorMessage(error)}`);
|
|
792
|
+
}
|
|
793
|
+
const tasksDir = getTasksDir(sanitizedName);
|
|
794
|
+
try {
|
|
795
|
+
await rm(tasksDir, { recursive: true, force: true });
|
|
796
|
+
logForDebugging(`[TeammateTool] Cleaned up tasks directory: ${tasksDir}`);
|
|
797
|
+
notifyTasksUpdated();
|
|
798
|
+
} catch (error) {
|
|
799
|
+
logForDebugging(`[TeammateTool] Failed to clean up tasks directory ${tasksDir}: ${errorMessage(error)}`);
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
var inputSchema;
|
|
803
|
+
var init_teamHelpers = __esm(() => {
|
|
804
|
+
init_v4();
|
|
805
|
+
init_state();
|
|
806
|
+
init_debug();
|
|
807
|
+
init_envUtils();
|
|
808
|
+
init_errors();
|
|
809
|
+
init_execFileNoThrow();
|
|
810
|
+
init_git();
|
|
811
|
+
init_lazySchema();
|
|
812
|
+
init_slowOperations();
|
|
813
|
+
init_tasks();
|
|
814
|
+
init_teammate();
|
|
815
|
+
init_types();
|
|
816
|
+
init_constants();
|
|
817
|
+
inputSchema = lazySchema(() => exports_external.strictObject({
|
|
818
|
+
operation: exports_external.enum(["spawnTeam", "cleanup"]).describe("Operation: spawnTeam to create a team, cleanup to remove team and task directories."),
|
|
819
|
+
agent_type: exports_external.string().optional().describe('Type/role of the team lead (e.g., "researcher", "test-runner"). ' + "Used for team file and inter-agent coordination."),
|
|
820
|
+
team_name: exports_external.string().optional().describe("Name for the new team to create (required for spawnTeam)."),
|
|
821
|
+
description: exports_external.string().optional().describe("Team description/purpose (only used with spawnTeam).")
|
|
822
|
+
}));
|
|
823
|
+
});
|
|
824
|
+
|
|
825
|
+
export { setLeaderTeamName, clearLeaderTeamName, onTasksUpdated, TaskStatusSchema, isTodoV2Enabled, resetTaskList, getTaskListId, sanitizePathComponent, getTasksDir, ensureTasksDir, createTask, getTask, updateTask, deleteTask, listTasks, blockTask, claimTask, unassignTeammateTasks, DEFAULT_TASKS_MODE_TASK_LIST_ID, init_tasks, isPaneBackend, init_types, inputSchema, sanitizeName, sanitizeAgentName, getTeamDir, getTeamFilePath, readTeamFile, readTeamFileAsync, writeTeamFileAsync, removeTeammateFromTeamFile, addHiddenPaneId, removeHiddenPaneId, removeMemberFromTeam, removeMemberByAgentId, setMemberMode, syncTeammateMode, setMultipleMemberModes, setMemberActive, registerTeamForSessionCleanup, unregisterTeamForSessionCleanup, cleanupSessionTeams, cleanupTeamDirectories, init_teamHelpers };
|