@redscope-ai/redscope 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +227 -0
- package/README.md +227 -0
- package/dist/{chunk-0a9hafd6.js → chunk-036f834b.js} +4 -4
- package/dist/{chunk-pdbh6mb4.js → chunk-03z007bm.js} +1 -1
- package/dist/{chunk-sz7cmg0p.js → chunk-06sz1p1p.js} +23 -23
- package/dist/{chunk-vd658a8r.js → chunk-0bd2xpz1.js} +23 -23
- package/dist/{chunk-dq5386vr.js → chunk-0bvxx7kk.js} +23 -23
- package/dist/{chunk-sz90jhs0.js → chunk-0c67wh3t.js} +23 -23
- package/dist/{chunk-v97f7p27.js → chunk-0cpg8qh8.js} +2 -2
- package/dist/{chunk-73r0e4zy.js → chunk-0g3eh8kg.js} +26 -26
- package/dist/{chunk-6wk3dh1t.js → chunk-0kcbdg3e.js} +25 -25
- package/dist/{chunk-qa3df8mx.js → chunk-0mg1t6hr.js} +5 -5
- package/dist/{chunk-88c18e2r.js → chunk-0p0wsrb9.js} +24 -24
- package/dist/{chunk-ftfv1rr7.js → chunk-0wz570a3.js} +1 -1
- package/dist/{chunk-z57v05t0.js → chunk-0z13a78r.js} +2 -2
- package/dist/{chunk-gdqtrr9b.js → chunk-120tmt7h.js} +1 -1
- package/dist/{chunk-fby80mw1.js → chunk-14sd3grv.js} +3 -3
- package/dist/{chunk-b6h5t2bw.js → chunk-15fcqyjv.js} +1 -1
- package/dist/{chunk-xqd8sek7.js → chunk-16hc2hjf.js} +24 -24
- package/dist/{chunk-5jx3xmwb.js → chunk-16ykwptb.js} +50 -50
- package/dist/{chunk-ynddg4k0.js → chunk-1aj2t41p.js} +2 -2
- package/dist/{chunk-5cns5ckc.js → chunk-1fc8nbhj.js} +4 -4
- package/dist/{chunk-0p12gjh7.js → chunk-1w614kpt.js} +23 -23
- package/dist/{chunk-54k3qdfj.js → chunk-1wen8dar.js} +4 -4
- package/dist/{chunk-j2vfstyq.js → chunk-221xwc4k.js} +24 -24
- package/dist/{chunk-td8tmtxd.js → chunk-23q0bepd.js} +3 -3
- package/dist/{chunk-j93yrk0t.js → chunk-24x0sp1j.js} +1 -1
- package/dist/{chunk-t41bh398.js → chunk-27qbmcv9.js} +2 -2
- package/dist/{chunk-9gbth640.js → chunk-27zgcapj.js} +1 -1
- package/dist/{chunk-xxp5mnve.js → chunk-295gf6hp.js} +26 -26
- package/dist/{chunk-5t8r33c6.js → chunk-2aeb7pw2.js} +1 -1
- package/dist/{chunk-104tfq0e.js → chunk-2f5c8hst.js} +23 -23
- package/dist/{chunk-xbjgrc5y.js → chunk-2j01njj0.js} +3 -3
- package/dist/{chunk-jqzzyxty.js → chunk-2kz19wy3.js} +23 -23
- package/dist/{chunk-etqm5r9t.js → chunk-2xh8v79x.js} +6 -6
- package/dist/{chunk-m8v167g7.js → chunk-332wpr5t.js} +23 -23
- package/dist/{chunk-nxdtym0r.js → chunk-355ecbty.js} +2 -2
- package/dist/{chunk-6fqk1nyd.js → chunk-39mtg69k.js} +1 -1
- package/dist/{chunk-b6wthqrh.js → chunk-3apkj8j9.js} +3 -3
- package/dist/{chunk-yb2wyq7d.js → chunk-3g7bvgp2.js} +2 -2
- package/dist/{chunk-jgncmxwx.js → chunk-3gam18xn.js} +1 -1
- package/dist/{chunk-t4r4ymmg.js → chunk-3pdk50ye.js} +2 -2
- package/dist/{chunk-dvfpfq1y.js → chunk-3r1f4nb9.js} +31 -31
- package/dist/{chunk-49363km2.js → chunk-3v6g9qgv.js} +24 -24
- package/dist/{chunk-z8r7rpw1.js → chunk-3yn73eva.js} +3 -3
- package/dist/{chunk-d63hynf1.js → chunk-421yegj3.js} +175 -150
- package/dist/{chunk-523ks1kz.js → chunk-446rrwzv.js} +23 -23
- package/dist/{chunk-ebb4qye7.js → chunk-467w66fx.js} +1 -1
- package/dist/{chunk-10vc755g.js → chunk-4b6edzew.js} +2 -2
- package/dist/{chunk-z6kb2b1a.js → chunk-4e3x31c9.js} +4 -4
- package/dist/{chunk-q5ttyf7q.js → chunk-4gdqn56a.js} +26 -26
- package/dist/{chunk-2tfbxs7k.js → chunk-4mmk59bd.js} +2 -2
- package/dist/{chunk-cg2j2h4d.js → chunk-4x26rce5.js} +24 -24
- package/dist/{chunk-qfxecggv.js → chunk-54gqntpa.js} +1 -1
- package/dist/{chunk-rpsjnw2q.js → chunk-54snd7aw.js} +32 -32
- package/dist/{chunk-695xzmze.js → chunk-55s1hn26.js} +3 -3
- package/dist/{chunk-jppvhrpk.js → chunk-55z891s7.js} +1 -1
- package/dist/{chunk-3tvh9ask.js → chunk-56h80trb.js} +5 -5
- package/dist/{chunk-tr6mesnp.js → chunk-58wt4m48.js} +23 -23
- package/dist/{chunk-t9p2hnze.js → chunk-5d4fyc3y.js} +23 -23
- package/dist/{chunk-w60hk3xv.js → chunk-5dtwrtax.js} +8 -8
- package/dist/{chunk-m04dm8n6.js → chunk-5eycrht8.js} +24 -24
- package/dist/{chunk-g13zbzsa.js → chunk-5pqyshc6.js} +10 -10
- package/dist/{chunk-xx6vx8f6.js → chunk-5s2dvnnf.js} +23 -23
- package/dist/{chunk-h0r8z7vv.js → chunk-5tkam0h1.js} +2 -2
- package/dist/{chunk-w8ry7wbm.js → chunk-5tttr583.js} +23 -23
- package/dist/{chunk-eb5m0cje.js → chunk-5xeyth9a.js} +23 -23
- package/dist/{chunk-6yedswyz.js → chunk-5yva30am.js} +2 -2
- package/dist/{chunk-d0qs0bhj.js → chunk-65b4z2hc.js} +2 -2
- package/dist/{chunk-1jcs8jje.js → chunk-666p77sf.js} +23 -23
- package/dist/{chunk-yv66t3eg.js → chunk-67006cbc.js} +1 -1
- package/dist/{chunk-s6jzsz3n.js → chunk-671txhtq.js} +2 -2
- package/dist/{chunk-q15f7rmc.js → chunk-69k6kygz.js} +2 -2
- package/dist/{chunk-st31614a.js → chunk-6ezrjes8.js} +5 -5
- package/dist/{chunk-013cjfbn.js → chunk-6grhvh8m.js} +25 -25
- package/dist/{chunk-f3wwcmqs.js → chunk-6gt42kvj.js} +4 -4
- package/dist/{chunk-6vgzgtcq.js → chunk-6hzx0kqr.js} +4 -4
- package/dist/{chunk-1816zmwy.js → chunk-6k5ez67k.js} +4 -4
- package/dist/{chunk-7br25het.js → chunk-6wthn547.js} +3 -3
- package/dist/{chunk-xkbma4az.js → chunk-70cyabpa.js} +1 -1
- package/dist/{chunk-pmkmv5xq.js → chunk-75r9z3mk.js} +4 -4
- package/dist/{chunk-6eqvbjz1.js → chunk-7fcmqvbz.js} +1 -1
- package/dist/{chunk-9jfn86w6.js → chunk-7mys73mz.js} +1 -1
- package/dist/{chunk-g9g3r48x.js → chunk-7n9mtd6h.js} +1 -1
- package/dist/{chunk-2g80p16a.js → chunk-7nn82y4a.js} +23 -23
- package/dist/{chunk-379pafmf.js → chunk-7qew7jy8.js} +1 -1
- package/dist/{chunk-5pb1qej3.js → chunk-7v74emt6.js} +23 -23
- package/dist/{chunk-e74t64c6.js → chunk-7xsjn6ed.js} +24 -24
- package/dist/{chunk-yjq9vesv.js → chunk-847e87x0.js} +5 -5
- package/dist/{chunk-8rw4exf2.js → chunk-88dstx77.js} +23 -23
- package/dist/{chunk-3vk0gx3f.js → chunk-89yrrbm4.js} +24 -24
- package/dist/{chunk-0bnm50r8.js → chunk-8hrc1wfb.js} +23 -23
- package/dist/{chunk-yyfhhaj4.js → chunk-8mabxggz.js} +31 -31
- package/dist/{chunk-z0bnpkxm.js → chunk-8n99qxye.js} +2 -2
- package/dist/{chunk-kg68bm3c.js → chunk-8rtsqyj0.js} +23 -23
- package/dist/{chunk-er9d2atp.js → chunk-8w72b8n7.js} +2 -2
- package/dist/{chunk-td8k1cy2.js → chunk-94na1xet.js} +2 -2
- package/dist/{chunk-x9v59cjd.js → chunk-963mv8y7.js} +29 -29
- package/dist/{chunk-62a7ege2.js → chunk-9gmw2hgg.js} +24 -24
- package/dist/{chunk-rdxfef3c.js → chunk-9gsd7hq9.js} +24 -24
- package/dist/{chunk-hn792grf.js → chunk-9kqnffts.js} +3 -3
- package/dist/{chunk-mwj25g37.js → chunk-9phn5khx.js} +1 -1
- package/dist/{chunk-g5xsy020.js → chunk-a3chzgp6.js} +26 -26
- package/dist/{chunk-6590xf8k.js → chunk-a3px9ec1.js} +25 -25
- package/dist/{chunk-x250gdqa.js → chunk-a4jpbt1m.js} +2 -2
- package/dist/{chunk-c8sve1h8.js → chunk-a9jm4ykb.js} +24 -24
- package/dist/{chunk-tdqsvjmx.js → chunk-aaxz8a5g.js} +1 -1
- package/dist/{chunk-9kgpjrjh.js → chunk-ab2nzf9g.js} +2 -2
- package/dist/{chunk-x7v777z2.js → chunk-ad48dj0p.js} +24 -24
- package/dist/{chunk-1ksgb74k.js → chunk-ad74n91c.js} +24 -24
- package/dist/{chunk-fw8hbrnb.js → chunk-akjq2bmp.js} +23 -23
- package/dist/{chunk-h922jnmt.js → chunk-am63r8q5.js} +24 -24
- package/dist/{chunk-16cag1dr.js → chunk-b0rn9j35.js} +2 -2
- package/dist/{chunk-f6egyq4v.js → chunk-b16r8m57.js} +3 -3
- package/dist/{chunk-1s89ja0b.js → chunk-b3tykhww.js} +1 -1
- package/dist/{chunk-7ffcax4t.js → chunk-b80kvnj3.js} +3 -3
- package/dist/{chunk-zdhkmsnc.js → chunk-bazy7696.js} +3 -3
- package/dist/{chunk-z3v5rn8e.js → chunk-bbjz65q8.js} +2 -2
- package/dist/{chunk-f3qn06sk.js → chunk-bs22gd95.js} +23 -23
- package/dist/{chunk-bn9sp37v.js → chunk-bt4jz8p8.js} +3 -3
- package/dist/{chunk-9hhw2kfs.js → chunk-bz3k16s2.js} +35 -35
- package/dist/{chunk-ncv3dvsr.js → chunk-c20m02k2.js} +27 -27
- package/dist/{chunk-qqrpfc4y.js → chunk-c21jsmjg.js} +1 -1
- package/dist/{chunk-m514btx2.js → chunk-c4jp71dr.js} +31 -31
- package/dist/{chunk-ymf6p35v.js → chunk-c73gzm86.js} +3 -3
- package/dist/{chunk-hxnxdefa.js → chunk-cax85b5y.js} +2 -2
- package/dist/{chunk-hczknv33.js → chunk-ccw8pse0.js} +1 -1
- package/dist/{chunk-frbmkvw3.js → chunk-cfmkc8ha.js} +4 -4
- package/dist/{chunk-w6jnm2b8.js → chunk-cpmczx39.js} +4 -4
- package/dist/{chunk-2gvh1kgj.js → chunk-cqmsy2s2.js} +343 -414
- package/dist/{chunk-1dyyhewf.js → chunk-cszaksy2.js} +24 -24
- package/dist/{chunk-jezzx4v0.js → chunk-d15br3ec.js} +3 -3
- package/dist/{chunk-ngewr3bg.js → chunk-d5e78pzx.js} +23 -23
- package/dist/{chunk-bt9tefv9.js → chunk-d6txmayg.js} +2 -2
- package/dist/{chunk-cy4399rn.js → chunk-d9mteq06.js} +24 -24
- package/dist/{chunk-5p105eb7.js → chunk-dd89z0aa.js} +9 -9
- package/dist/{chunk-486wpvqa.js → chunk-dd9vcswc.js} +3 -3
- package/dist/{chunk-cjmw31kd.js → chunk-dfhk2ntg.js} +1 -1
- package/dist/{chunk-pnx2erg8.js → chunk-dgbysayg.js} +23 -23
- package/dist/{chunk-4n5mx43k.js → chunk-dv8rh387.js} +2 -2
- package/dist/{chunk-n956z176.js → chunk-dxa3y9vh.js} +1 -1
- package/dist/{chunk-rbe9bvxy.js → chunk-dxh8xx86.js} +24 -24
- package/dist/{chunk-2hp9qgpg.js → chunk-dyg4f57z.js} +26 -26
- package/dist/{chunk-6bq66tgf.js → chunk-e0vtkfks.js} +25 -25
- package/dist/{chunk-0y1717mg.js → chunk-e0wybg90.js} +23 -23
- package/dist/{chunk-qp6egmcc.js → chunk-e2vtstkd.js} +1 -1
- package/dist/{chunk-x3v28hmm.js → chunk-e30nrxjp.js} +23 -23
- package/dist/{chunk-kad1n4nb.js → chunk-e37bqr6g.js} +2 -2
- package/dist/{chunk-74rae9nm.js → chunk-ebesh5hz.js} +26 -26
- package/dist/{chunk-5eqmp077.js → chunk-eh3zc37z.js} +23 -23
- package/dist/{chunk-trmd4gg2.js → chunk-ekty2fdy.js} +4 -4
- package/dist/{chunk-1zenc969.js → chunk-es4npmq2.js} +2 -2
- package/dist/{chunk-xr1pw3qm.js → chunk-ew39k4e4.js} +1 -1
- package/dist/{chunk-6vcejse2.js → chunk-ey68q190.js} +23 -23
- package/dist/{chunk-pja8rs75.js → chunk-ezf40808.js} +2 -2
- package/dist/{chunk-hmmedbwt.js → chunk-f7tma8gp.js} +1 -1
- package/dist/{chunk-yvwv816m.js → chunk-fantdbyf.js} +25 -25
- package/dist/{chunk-gfs1qtrf.js → chunk-fcfs8b3t.js} +1 -1
- package/dist/{chunk-jep2dbtq.js → chunk-fhcn2wz6.js} +33 -33
- package/dist/{chunk-mscdcbx5.js → chunk-fjtzfz1t.js} +1 -1
- package/dist/{chunk-5j85cqk8.js → chunk-fxjcm9bp.js} +3 -3
- package/dist/{chunk-n59xzept.js → chunk-fyhhtbv5.js} +2 -2
- package/dist/{chunk-2g8zs5zr.js → chunk-g0w5w90e.js} +23 -23
- package/dist/{chunk-qzb9et4j.js → chunk-g8est5nk.js} +1 -1
- package/dist/{chunk-hq6p7kxs.js → chunk-g8nymh97.js} +78 -78
- package/dist/{chunk-bm79at54.js → chunk-g8qmawt7.js} +23 -23
- package/dist/{chunk-sxthhgtq.js → chunk-gacbt1vp.js} +24 -24
- package/dist/{chunk-z9kr1d33.js → chunk-ggdcf448.js} +1 -1
- package/dist/{chunk-nnhce0qj.js → chunk-gjvhjywj.js} +1 -1
- package/dist/{chunk-hrptc8p9.js → chunk-gk8vxa1h.js} +29 -29
- package/dist/{chunk-vsy50d3n.js → chunk-gmrghcqg.js} +2 -2
- package/dist/{chunk-gradtbbz.js → chunk-gp6decq8.js} +7 -7
- package/dist/{chunk-w96mfvge.js → chunk-grcc3hvf.js} +11 -11
- package/dist/{chunk-gbarv3k7.js → chunk-gsgrgg88.js} +1 -1
- package/dist/{chunk-33yvkyw0.js → chunk-gw65f5kr.js} +25 -25
- package/dist/{chunk-0y8t2zrz.js → chunk-gz2d42y4.js} +24 -24
- package/dist/{chunk-naq10fec.js → chunk-h097j67z.js} +3 -3
- package/dist/{chunk-xxcmr18s.js → chunk-h4ztym11.js} +4 -4
- package/dist/{chunk-qq38zdw8.js → chunk-h5kknb4r.js} +1 -1
- package/dist/{chunk-ajwpwxnj.js → chunk-h5zz0vxy.js} +1 -1
- package/dist/{chunk-ky13bf33.js → chunk-hem4f4gz.js} +2 -2
- package/dist/{chunk-81stzb58.js → chunk-herypewe.js} +15 -15
- package/dist/{chunk-hkza0cd7.js → chunk-hmbwmc7q.js} +25 -25
- package/dist/{chunk-skqrvfbx.js → chunk-htqfqm8z.js} +23 -23
- package/dist/{chunk-ftgcptnt.js → chunk-j1ezfpjx.js} +2 -2
- package/dist/{chunk-w5ysbvwj.js → chunk-j1wktfe2.js} +1 -1
- package/dist/{chunk-smv9xrkp.js → chunk-j3ta8svw.js} +23 -23
- package/dist/{chunk-w8amat34.js → chunk-j8hd6zfs.js} +23 -23
- package/dist/{chunk-6gr9yry6.js → chunk-jejvhnkp.js} +23 -23
- package/dist/{chunk-2wf4kzn6.js → chunk-jfqzy06p.js} +26 -26
- package/dist/{chunk-prr1hp3m.js → chunk-jjjkjjrb.js} +23 -23
- package/dist/{chunk-nnj6h7tr.js → chunk-jnb9wjgx.js} +1 -1
- package/dist/{chunk-2xfpts3s.js → chunk-js2bptss.js} +1 -1
- package/dist/{chunk-g7vjrdnq.js → chunk-js3dkj4e.js} +3 -3
- package/dist/{chunk-xyc3rc83.js → chunk-jtnmdy5f.js} +8 -8
- package/dist/{chunk-zm1d1g39.js → chunk-jttf1npj.js} +24 -24
- package/dist/{chunk-w7vbwv1c.js → chunk-k1gjymwy.js} +24 -24
- package/dist/{chunk-a7v94ne1.js → chunk-k4496w4a.js} +23 -23
- package/dist/{chunk-5m0wan4r.js → chunk-k6n5g7hc.js} +1 -1
- package/dist/{chunk-dpt14kwg.js → chunk-k7xszak2.js} +1 -1
- package/dist/{chunk-q2j8w9hh.js → chunk-k8nwt8yq.js} +1 -1
- package/dist/{chunk-gphaxbzp.js → chunk-kbv0z6jr.js} +23 -23
- package/dist/{chunk-gbaeczfk.js → chunk-krbqgwft.js} +2 -2
- package/dist/{chunk-vm8hnwv3.js → chunk-ksrd3ynt.js} +24 -24
- package/dist/{chunk-b5q6wcbn.js → chunk-kyvjw1ev.js} +25 -25
- package/dist/{chunk-yq9d4f70.js → chunk-m04nccn6.js} +2 -2
- package/dist/{chunk-48bjdmpv.js → chunk-m0y0cpwp.js} +1 -1
- package/dist/{chunk-y7sc7xhe.js → chunk-m1ssv3qh.js} +23 -23
- package/dist/{chunk-vgmhvg0q.js → chunk-m2pwgqsd.js} +3 -3
- package/dist/{chunk-81v403z7.js → chunk-m42pxgcb.js} +1 -1
- package/dist/{chunk-k5ht0vm5.js → chunk-m8v52bfe.js} +2 -2
- package/dist/{chunk-fnfcg4f0.js → chunk-mc2ax0ff.js} +1 -1
- package/dist/{chunk-k29gsr13.js → chunk-mfpm6ybz.js} +26 -26
- package/dist/{chunk-prg0d45z.js → chunk-mkttdqb0.js} +1 -1
- package/dist/{chunk-4d4cxp74.js → chunk-mv6mynna.js} +26 -26
- package/dist/{chunk-9253esg2.js → chunk-mva6b6vr.js} +2 -2
- package/dist/{chunk-ph3mzdfn.js → chunk-mymg1988.js} +2 -2
- package/dist/{chunk-t5qpgf0m.js → chunk-n92fhgcs.js} +24 -24
- package/dist/{chunk-30cdkfa4.js → chunk-ncdnfpf9.js} +3 -3
- package/dist/{chunk-b7zc3zvs.js → chunk-ned5qknr.js} +1 -1
- package/dist/{chunk-v3z07d2h.js → chunk-ned5whgb.js} +3 -3
- package/dist/{chunk-vakt3r32.js → chunk-nrbk54ec.js} +23 -23
- package/dist/{chunk-vhpx4pxv.js → chunk-nt8g78cp.js} +33 -33
- package/dist/{chunk-9rk3smhd.js → chunk-nxgrp26k.js} +1 -1
- package/dist/{chunk-zdscb3n0.js → chunk-p07wrh8v.js} +2 -2
- package/dist/{chunk-22eyb58s.js → chunk-p3rceszn.js} +2 -2
- package/dist/{chunk-qs2nm8jg.js → chunk-p47gqnyf.js} +23 -23
- package/dist/{chunk-gw6e7zra.js → chunk-p5c18v29.js} +2 -2
- package/dist/{chunk-4fdve91c.js → chunk-p7e3rc2s.js} +2 -2
- package/dist/{chunk-wcjjbz3r.js → chunk-p8jpw7d9.js} +79 -79
- package/dist/{chunk-asjrf25n.js → chunk-pb9v47qr.js} +1 -1
- package/dist/{chunk-7fbjry42.js → chunk-pkq1xaac.js} +25 -25
- package/dist/{chunk-gf6znhgw.js → chunk-pmtz5b93.js} +28 -28
- package/dist/{chunk-3az1exz0.js → chunk-pn23dh3d.js} +1 -1
- package/dist/{chunk-4dhc8vjw.js → chunk-pna15m0n.js} +23 -23
- package/dist/{chunk-5crza5wp.js → chunk-pnzmwkqs.js} +29 -29
- package/dist/{chunk-a29v6bza.js → chunk-pvrbk0yt.js} +5 -5
- package/dist/{chunk-8rqw4xtz.js → chunk-pz64f1f4.js} +23 -23
- package/dist/{chunk-p6g3s1r6.js → chunk-q2ypsn4z.js} +2 -2
- package/dist/{chunk-faejxgvr.js → chunk-qbgf1yhh.js} +23 -23
- package/dist/{chunk-cs7m7zkb.js → chunk-qdg8cqsf.js} +4 -4
- package/dist/{chunk-h4q5e1gt.js → chunk-qh6k86c5.js} +23 -23
- package/dist/{chunk-aw8japnt.js → chunk-qmgjr273.js} +24 -24
- package/dist/{chunk-jjhkr00g.js → chunk-qn0daty2.js} +1 -1
- package/dist/{chunk-9aqxhw4p.js → chunk-qny4m4tt.js} +24 -24
- package/dist/{chunk-w3vh8trc.js → chunk-qpa41hme.js} +25 -25
- package/dist/{chunk-n7wf123a.js → chunk-qq94d59n.js} +2 -2
- package/dist/{chunk-mnmwq199.js → chunk-qs2armyz.js} +16 -16
- package/dist/{chunk-egwr06fz.js → chunk-qx7t79zw.js} +5 -5
- package/dist/{chunk-5nnd31af.js → chunk-r5pyjf4c.js} +134 -134
- package/dist/{chunk-hyzk3zw4.js → chunk-r6b6a4wn.js} +23 -23
- package/dist/{chunk-c7akrakx.js → chunk-rft32jb4.js} +23 -23
- package/dist/{chunk-6fwec1xp.js → chunk-rpdh02rm.js} +1 -1
- package/dist/{chunk-4ntj80qy.js → chunk-rq6v7t1w.js} +26 -26
- package/dist/{chunk-2ra8mt9x.js → chunk-rrsa4j80.js} +23 -23
- package/dist/{chunk-rjn4rnet.js → chunk-rspn97eg.js} +24 -24
- package/dist/{chunk-py5b1aep.js → chunk-rtcm253f.js} +2 -2
- package/dist/{chunk-bahmwnsn.js → chunk-rxjjktqv.js} +29 -29
- package/dist/{chunk-2ws1k5sw.js → chunk-s2t5anwv.js} +174 -107
- package/dist/{chunk-n2e6p5ch.js → chunk-s4vr04qe.js} +7 -7
- package/dist/{chunk-r9hkv3jc.js → chunk-s5ftgn0c.js} +2 -2
- package/dist/{chunk-rz0swd7z.js → chunk-setxbyxk.js} +1 -1
- package/dist/{chunk-vb54rdb3.js → chunk-sev48qbb.js} +1 -1
- package/dist/{chunk-34md8b93.js → chunk-shehhtmm.js} +24 -24
- package/dist/{chunk-zezatygx.js → chunk-sr6gzsr9.js} +27 -27
- package/dist/{chunk-d8wb2591.js → chunk-sv49wzz9.js} +26 -26
- package/dist/{chunk-85b154cx.js → chunk-szcnh73g.js} +23 -23
- package/dist/{chunk-b98mfy3w.js → chunk-t19akzt2.js} +3 -3
- package/dist/{chunk-7bkmxa2j.js → chunk-t2fj3szq.js} +36 -36
- package/dist/{chunk-kjbzeeq3.js → chunk-t58vyxsc.js} +24 -24
- package/dist/{chunk-5p2f741z.js → chunk-t80rws22.js} +4 -4
- package/dist/{chunk-xb8ts07v.js → chunk-tcmeaj2t.js} +2 -2
- package/dist/{chunk-7z0vyp8n.js → chunk-tprq35e6.js} +5 -5
- package/dist/{chunk-chp3mwbs.js → chunk-trgn06h5.js} +23 -23
- package/dist/{chunk-h8czbwvw.js → chunk-ttkzr2wm.js} +27 -27
- package/dist/{chunk-jysdz43m.js → chunk-twcmxmab.js} +23 -23
- package/dist/{chunk-pygcvnyw.js → chunk-tzcrwnrf.js} +2 -2
- package/dist/{chunk-q776bz31.js → chunk-v1rct9rt.js} +2 -2
- package/dist/{chunk-7hd8avq8.js → chunk-v29vt02a.js} +24 -24
- package/dist/{chunk-zvm7r1p5.js → chunk-v3cvnkwf.js} +23 -23
- package/dist/{chunk-amcj797c.js → chunk-v5aem470.js} +2 -2
- package/dist/{chunk-gr57520m.js → chunk-v9h2j8jz.js} +3 -3
- package/dist/{chunk-yqbv4s1f.js → chunk-vex1cb1c.js} +3 -3
- package/dist/{chunk-qh6y02pq.js → chunk-vjxys8eq.js} +23 -23
- package/dist/{chunk-edfq419a.js → chunk-vk9xcryd.js} +1 -1
- package/dist/{chunk-kchqccs2.js → chunk-vt2ft9ke.js} +24 -24
- package/dist/{chunk-j2e5mpns.js → chunk-vyadhr4q.js} +29 -29
- package/dist/{chunk-rvyxw49b.js → chunk-vz5808gs.js} +23 -23
- package/dist/{chunk-a8g3k03j.js → chunk-w56bkvrw.js} +25 -25
- package/dist/{chunk-xpzvyj1j.js → chunk-wcdja0c6.js} +1 -1
- package/dist/{chunk-yptr92na.js → chunk-wfnrfy93.js} +1 -1
- package/dist/{chunk-h2mw6jwy.js → chunk-wnabyty7.js} +17 -17
- package/dist/{chunk-rbvm6bfv.js → chunk-wsnxtggw.js} +1 -1
- package/dist/{chunk-fyqewn2p.js → chunk-wv68xgt9.js} +26 -26
- package/dist/{chunk-y17pjekh.js → chunk-xdv7gpxj.js} +24 -24
- package/dist/{chunk-1b1fbrk4.js → chunk-xfgc43at.js} +3 -3
- package/dist/{chunk-aednpbab.js → chunk-xfxd82q0.js} +23 -23
- package/dist/{chunk-5nx8vatc.js → chunk-xgmvp9gc.js} +23 -23
- package/dist/{chunk-csy6z510.js → chunk-xhe9b46n.js} +23 -23
- package/dist/{chunk-tcyqt0wz.js → chunk-xs3099pt.js} +31 -31
- package/dist/{chunk-x8pae4tf.js → chunk-xw7pszec.js} +32 -32
- package/dist/{chunk-q3v5prf1.js → chunk-y0f5vezg.js} +7 -7
- package/dist/{chunk-636ev6h8.js → chunk-yddn2bf8.js} +23 -23
- package/dist/{chunk-92c8gmhd.js → chunk-yfrh33eq.js} +30 -30
- package/dist/{chunk-z38ekz85.js → chunk-ymqv4hyz.js} +5 -5
- package/dist/{chunk-48yb88gq.js → chunk-yz2aj1m9.js} +23 -23
- package/dist/{chunk-xy8n48n8.js → chunk-z2fr0c07.js} +23 -23
- package/dist/{chunk-w49sckwe.js → chunk-z2kd8w3f.js} +25 -25
- package/dist/{chunk-qrc16f5d.js → chunk-z4psnrvd.js} +1 -1
- package/dist/{chunk-h8q08rtr.js → chunk-z8trftt3.js} +36 -36
- package/dist/{chunk-9asmys7j.js → chunk-zaqfb3tz.js} +1 -1
- package/dist/{chunk-yptna5wd.js → chunk-zckw0dvy.js} +23 -23
- package/dist/{chunk-b0zfnbt3.js → chunk-zeebdzqf.js} +3 -3
- package/dist/{chunk-xycdyfp6.js → chunk-zmqdf4tj.js} +29 -29
- package/dist/{chunk-33vjfmdb.js → chunk-zpqfyz07.js} +1 -1
- package/dist/{chunk-pnwv8156.js → chunk-zq4q74e3.js} +2 -2
- package/dist/{chunk-0czbmrsj.js → chunk-zy4bshw5.js} +3 -3
- package/dist/cli.js +27 -27
- package/package.json +3 -2
- package/tools/authorized-egress.referee-provided.json +895 -0
|
@@ -4242,9 +4242,72 @@ var init_managedEnvConstants = __esm(() => {
|
|
|
4242
4242
|
]);
|
|
4243
4243
|
});
|
|
4244
4244
|
|
|
4245
|
-
// src/utils/
|
|
4245
|
+
// src/utils/authorizedEgressConfig.ts
|
|
4246
4246
|
import { existsSync, mkdirSync, readFileSync as readFileSync2, writeFileSync } from "fs";
|
|
4247
|
-
import { dirname } from "path";
|
|
4247
|
+
import { dirname, join as join3, resolve } from "path";
|
|
4248
|
+
import { fileURLToPath } from "url";
|
|
4249
|
+
function getPreferredRefereeEgressConfigFilePath() {
|
|
4250
|
+
return getPreferredUserConfigFile(REFEREE_EGRESS_CONFIG_FILE);
|
|
4251
|
+
}
|
|
4252
|
+
function ensureUserRefereeEgressConfigFile() {
|
|
4253
|
+
const filePath = getPreferredRefereeEgressConfigFilePath();
|
|
4254
|
+
if (existsSync(filePath)) {
|
|
4255
|
+
return { filePath, created: false, error: null };
|
|
4256
|
+
}
|
|
4257
|
+
try {
|
|
4258
|
+
const template = readBundledRefereeEgressTemplate();
|
|
4259
|
+
const content = prepareUserRefereeEgressConfigContent(template, filePath);
|
|
4260
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
4261
|
+
writeFileSync(filePath, content, {
|
|
4262
|
+
encoding: "utf-8",
|
|
4263
|
+
mode: 384
|
|
4264
|
+
});
|
|
4265
|
+
return { filePath, created: true, error: null };
|
|
4266
|
+
} catch (error) {
|
|
4267
|
+
return {
|
|
4268
|
+
filePath,
|
|
4269
|
+
created: false,
|
|
4270
|
+
error: error instanceof Error ? error : new Error(String(error))
|
|
4271
|
+
};
|
|
4272
|
+
}
|
|
4273
|
+
}
|
|
4274
|
+
function readBundledRefereeEgressTemplate() {
|
|
4275
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
4276
|
+
const argvEntry = process.argv[1] ? dirname(process.argv[1]) : undefined;
|
|
4277
|
+
const candidates = [
|
|
4278
|
+
process.env.REDSCOPE_REFEREE_EGRESS_TEMPLATE_PATH,
|
|
4279
|
+
resolve(moduleDir, "../../tools", REFEREE_EGRESS_CONFIG_FILE),
|
|
4280
|
+
resolve(moduleDir, "../tools", REFEREE_EGRESS_CONFIG_FILE),
|
|
4281
|
+
argvEntry ? resolve(argvEntry, "../tools", REFEREE_EGRESS_CONFIG_FILE) : undefined,
|
|
4282
|
+
argvEntry ? resolve(argvEntry, "../../tools", REFEREE_EGRESS_CONFIG_FILE) : undefined,
|
|
4283
|
+
resolve(process.cwd(), "tools", REFEREE_EGRESS_CONFIG_FILE)
|
|
4284
|
+
].filter((path) => Boolean(path));
|
|
4285
|
+
for (const candidate of uniquePaths(candidates)) {
|
|
4286
|
+
if (existsSync(candidate)) {
|
|
4287
|
+
return readFileSync2(candidate, "utf-8");
|
|
4288
|
+
}
|
|
4289
|
+
}
|
|
4290
|
+
throw new Error(`Could not find bundled ${REFEREE_EGRESS_CONFIG_FILE} template`);
|
|
4291
|
+
}
|
|
4292
|
+
function prepareUserRefereeEgressConfigContent(template, targetFilePath) {
|
|
4293
|
+
const parsed = JSON.parse(template);
|
|
4294
|
+
parsed.policy ??= {};
|
|
4295
|
+
parsed.policy.statePath = join3(dirname(targetFilePath), REFEREE_EGRESS_STATE_FILE);
|
|
4296
|
+
parsed.policy.notes ??= [];
|
|
4297
|
+
if (!parsed.policy.notes.includes("This user-level copy is safe to edit; RedScope will not overwrite it after creation.")) {
|
|
4298
|
+
parsed.policy.notes.push("This user-level copy is safe to edit; RedScope will not overwrite it after creation.");
|
|
4299
|
+
}
|
|
4300
|
+
return `${JSON.stringify(parsed, null, 2)}
|
|
4301
|
+
`;
|
|
4302
|
+
}
|
|
4303
|
+
var REFEREE_EGRESS_CONFIG_FILE = "authorized-egress.referee-provided.json", REFEREE_EGRESS_STATE_FILE = "redscope-egress-referee-provided-state.json";
|
|
4304
|
+
var init_authorizedEgressConfig = __esm(() => {
|
|
4305
|
+
init_redscopeCompat();
|
|
4306
|
+
});
|
|
4307
|
+
|
|
4308
|
+
// src/utils/envConfig.ts
|
|
4309
|
+
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync as readFileSync3, writeFileSync as writeFileSync2 } from "fs";
|
|
4310
|
+
import { dirname as dirname2 } from "path";
|
|
4248
4311
|
function resetEnvConfigCache() {
|
|
4249
4312
|
envConfigCache = undefined;
|
|
4250
4313
|
}
|
|
@@ -4279,9 +4342,10 @@ function getEnvConfigEnvironment() {
|
|
|
4279
4342
|
return { ...envConfigCache };
|
|
4280
4343
|
}
|
|
4281
4344
|
ensureEnvConfigFile();
|
|
4345
|
+
ensureUserRefereeEgressConfigFile();
|
|
4282
4346
|
const merged = {};
|
|
4283
4347
|
for (const filePath of getReadableEnvConfigFiles()) {
|
|
4284
|
-
Object.assign(merged, parseEnvConfig(
|
|
4348
|
+
Object.assign(merged, parseEnvConfig(readFileSync3(filePath, "utf-8")));
|
|
4285
4349
|
}
|
|
4286
4350
|
const expanded = expandEnvConfigEnvironment(merged);
|
|
4287
4351
|
envConfigCache = expanded;
|
|
@@ -4300,7 +4364,7 @@ function updateEnvConfigValues(values) {
|
|
|
4300
4364
|
if (Object.keys(values).length === 0) {
|
|
4301
4365
|
return { error: null, filePath };
|
|
4302
4366
|
}
|
|
4303
|
-
const content =
|
|
4367
|
+
const content = existsSync2(filePath) ? readFileSync3(filePath, "utf-8") : "";
|
|
4304
4368
|
const updated = upsertEnvConfigContent(content, values);
|
|
4305
4369
|
writeEnvConfigFile(filePath, updated);
|
|
4306
4370
|
resetEnvConfigCache();
|
|
@@ -4405,13 +4469,13 @@ function ensureEnvConfigFile() {
|
|
|
4405
4469
|
writeEnvConfigFile(getPreferredEnvConfigFilePath(), content);
|
|
4406
4470
|
}
|
|
4407
4471
|
function getReadableEnvConfigFiles() {
|
|
4408
|
-
return uniquePaths(getEnvConfigFilePaths().filter((path) =>
|
|
4472
|
+
return uniquePaths(getEnvConfigFilePaths().filter((path) => existsSync2(path))).reverse();
|
|
4409
4473
|
}
|
|
4410
4474
|
function readLegacyDotEnvForMigration() {
|
|
4411
4475
|
const merged = {};
|
|
4412
|
-
const files = uniquePaths(getUserConfigFiles(LEGACY_DOTENV_FILE).filter((path) =>
|
|
4476
|
+
const files = uniquePaths(getUserConfigFiles(LEGACY_DOTENV_FILE).filter((path) => existsSync2(path))).reverse();
|
|
4413
4477
|
for (const filePath of files) {
|
|
4414
|
-
Object.assign(merged, parseEnvConfig(
|
|
4478
|
+
Object.assign(merged, parseEnvConfig(readFileSync3(filePath, "utf-8")));
|
|
4415
4479
|
}
|
|
4416
4480
|
return merged;
|
|
4417
4481
|
}
|
|
@@ -4527,6 +4591,8 @@ function createEnvConfigTemplate(values, migratedFromDotEnv) {
|
|
|
4527
4591
|
"# REDSCOPE_AUTO_EGRESS: 1 enables automatic authorized egress; 0 disables it.",
|
|
4528
4592
|
"# REDSCOPE_AUTO_EGRESS=0",
|
|
4529
4593
|
"# REDSCOPE_AUTO_EGRESS_CONFIG: config used when automatic egress is enabled.",
|
|
4594
|
+
"# RedScope creates authorized-egress.referee-provided.json next to this",
|
|
4595
|
+
"# env.config on first startup; edit that user-level copy for referee IPs.",
|
|
4530
4596
|
"# REDSCOPE_AUTO_EGRESS_CONFIG=tools/authorized-egress.referee-provided.json",
|
|
4531
4597
|
"# REDSCOPE_EGRESS_POOL: egress pool id from the authorized egress config.",
|
|
4532
4598
|
"# REDSCOPE_EGRESS_POOL=referee-provided-traffic-simulation",
|
|
@@ -4642,8 +4708,8 @@ function createEnvConfigTemplate(values, migratedFromDotEnv) {
|
|
|
4642
4708
|
`;
|
|
4643
4709
|
}
|
|
4644
4710
|
function writeEnvConfigFile(filePath, content) {
|
|
4645
|
-
|
|
4646
|
-
|
|
4711
|
+
mkdirSync2(dirname2(filePath), { recursive: true });
|
|
4712
|
+
writeFileSync2(filePath, content, {
|
|
4647
4713
|
encoding: "utf-8",
|
|
4648
4714
|
mode: 384
|
|
4649
4715
|
});
|
|
@@ -4651,7 +4717,7 @@ function writeEnvConfigFile(filePath, content) {
|
|
|
4651
4717
|
function hasEnvConfigRuntimeModelValues() {
|
|
4652
4718
|
const merged = {};
|
|
4653
4719
|
for (const filePath of getReadableEnvConfigFiles()) {
|
|
4654
|
-
Object.assign(merged, parseEnvConfig(
|
|
4720
|
+
Object.assign(merged, parseEnvConfig(readFileSync3(filePath, "utf-8")));
|
|
4655
4721
|
}
|
|
4656
4722
|
return Object.keys(merged).some(isRuntimeModelConfigKey);
|
|
4657
4723
|
}
|
|
@@ -4794,6 +4860,7 @@ var ENV_CONFIG_FILE = "env.config", LEGACY_DOTENV_FILE = ".env", ENV_KEY_PATTERN
|
|
|
4794
4860
|
var init_envConfig = __esm(() => {
|
|
4795
4861
|
init_redscopeCompat();
|
|
4796
4862
|
init_managedEnvConstants();
|
|
4863
|
+
init_authorizedEgressConfig();
|
|
4797
4864
|
ENV_KEY_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
4798
4865
|
RUNTIME_MODEL_CONFIG_KEYS = new Set([
|
|
4799
4866
|
"REDSCOPE_MODEL_PROVIDER",
|
|
@@ -5095,7 +5162,7 @@ var init_configConstants = __esm(() => {
|
|
|
5095
5162
|
// src/utils/config.ts
|
|
5096
5163
|
import { randomBytes } from "crypto";
|
|
5097
5164
|
import { unwatchFile, watchFile } from "fs";
|
|
5098
|
-
import { basename, dirname as
|
|
5165
|
+
import { basename, dirname as dirname3, join as join4, resolve as resolve2 } from "path";
|
|
5099
5166
|
function createDefaultGlobalConfig() {
|
|
5100
5167
|
return {
|
|
5101
5168
|
numStartups: 0,
|
|
@@ -5160,7 +5227,7 @@ function computeTrustDialogAccepted() {
|
|
|
5160
5227
|
if (pathConfig?.hasTrustDialogAccepted) {
|
|
5161
5228
|
return true;
|
|
5162
5229
|
}
|
|
5163
|
-
const parentPath = normalizePathForConfigKey(
|
|
5230
|
+
const parentPath = normalizePathForConfigKey(resolve2(currentPath, ".."));
|
|
5164
5231
|
if (parentPath === currentPath) {
|
|
5165
5232
|
break;
|
|
5166
5233
|
}
|
|
@@ -5170,11 +5237,11 @@ function computeTrustDialogAccepted() {
|
|
|
5170
5237
|
}
|
|
5171
5238
|
function isPathTrusted(dir) {
|
|
5172
5239
|
const config = getGlobalConfig();
|
|
5173
|
-
let currentPath = normalizePathForConfigKey(
|
|
5240
|
+
let currentPath = normalizePathForConfigKey(resolve2(dir));
|
|
5174
5241
|
while (true) {
|
|
5175
5242
|
if (config.projects?.[currentPath]?.hasTrustDialogAccepted)
|
|
5176
5243
|
return true;
|
|
5177
|
-
const parentPath = normalizePathForConfigKey(
|
|
5244
|
+
const parentPath = normalizePathForConfigKey(resolve2(currentPath, ".."));
|
|
5178
5245
|
if (parentPath === currentPath)
|
|
5179
5246
|
return false;
|
|
5180
5247
|
currentPath = parentPath;
|
|
@@ -5370,7 +5437,7 @@ function getCustomApiKeyStatus(truncatedApiKey) {
|
|
|
5370
5437
|
return "new";
|
|
5371
5438
|
}
|
|
5372
5439
|
function saveConfig(file, config, defaultConfig) {
|
|
5373
|
-
const dir =
|
|
5440
|
+
const dir = dirname3(file);
|
|
5374
5441
|
const fs = getFsImplementation();
|
|
5375
5442
|
fs.mkdirSync(dir);
|
|
5376
5443
|
const filteredConfig = pickBy_default(config, (value, key) => jsonStringify(value) !== jsonStringify(defaultConfig[key]));
|
|
@@ -5384,7 +5451,7 @@ function saveConfig(file, config, defaultConfig) {
|
|
|
5384
5451
|
}
|
|
5385
5452
|
function saveConfigWithLock(file, createDefault, mergeFn) {
|
|
5386
5453
|
const defaultConfig = createDefault();
|
|
5387
|
-
const dir =
|
|
5454
|
+
const dir = dirname3(file);
|
|
5388
5455
|
const fs = getFsImplementation();
|
|
5389
5456
|
fs.mkdirSync(dir);
|
|
5390
5457
|
let release;
|
|
@@ -5450,14 +5517,14 @@ function saveConfigWithLock(file, createDefault, mergeFn) {
|
|
|
5450
5517
|
const mostRecentTimestamp = mostRecentBackup ? Number(mostRecentBackup.split(".backup.").pop()) : 0;
|
|
5451
5518
|
const shouldCreateBackup = Number.isNaN(mostRecentTimestamp) || Date.now() - mostRecentTimestamp >= MIN_BACKUP_INTERVAL_MS;
|
|
5452
5519
|
if (shouldCreateBackup) {
|
|
5453
|
-
const backupPath =
|
|
5520
|
+
const backupPath = join4(backupDir, `${fileBase}.backup.${Date.now()}`);
|
|
5454
5521
|
fs.copyFileSync(file, backupPath);
|
|
5455
5522
|
}
|
|
5456
5523
|
const MAX_BACKUPS = 5;
|
|
5457
5524
|
const backupsForCleanup = shouldCreateBackup ? fs.readdirStringSync(backupDir).filter((f) => f.startsWith(`${fileBase}.backup.`)).sort().reverse() : existingBackups;
|
|
5458
5525
|
for (const oldBackup of backupsForCleanup.slice(MAX_BACKUPS)) {
|
|
5459
5526
|
try {
|
|
5460
|
-
fs.unlinkSync(
|
|
5527
|
+
fs.unlinkSync(join4(backupDir, oldBackup));
|
|
5461
5528
|
} catch {}
|
|
5462
5529
|
}
|
|
5463
5530
|
} catch (e) {
|
|
@@ -5508,15 +5575,15 @@ function findMostRecentBackup(file) {
|
|
|
5508
5575
|
const backups = fs.readdirStringSync(backupDir).filter((f) => f.startsWith(`${fileBase}.backup.`)).sort();
|
|
5509
5576
|
const mostRecent = backups.at(-1);
|
|
5510
5577
|
if (mostRecent) {
|
|
5511
|
-
return
|
|
5578
|
+
return join4(backupDir, mostRecent);
|
|
5512
5579
|
}
|
|
5513
5580
|
} catch {}
|
|
5514
|
-
const fileDir =
|
|
5581
|
+
const fileDir = dirname3(file);
|
|
5515
5582
|
try {
|
|
5516
5583
|
const backups = fs.readdirStringSync(fileDir).filter((f) => f.startsWith(`${fileBase}.backup.`)).sort();
|
|
5517
5584
|
const mostRecent = backups.at(-1);
|
|
5518
5585
|
if (mostRecent) {
|
|
5519
|
-
return
|
|
5586
|
+
return join4(fileDir, mostRecent);
|
|
5520
5587
|
}
|
|
5521
5588
|
const legacyBackup = `${file}.backup`;
|
|
5522
5589
|
try {
|
|
@@ -5599,7 +5666,7 @@ Claude configuration file at ${file} is corrupted: ${error.message}
|
|
|
5599
5666
|
const currentContent = fs.readFileSync(file, { encoding: "utf-8" });
|
|
5600
5667
|
for (const backup of existingCorruptedBackups) {
|
|
5601
5668
|
try {
|
|
5602
|
-
const backupContent = fs.readFileSync(
|
|
5669
|
+
const backupContent = fs.readFileSync(join4(corruptedBackupDir, backup), { encoding: "utf-8" });
|
|
5603
5670
|
if (currentContent === backupContent) {
|
|
5604
5671
|
alreadyBackedUp = true;
|
|
5605
5672
|
break;
|
|
@@ -5607,7 +5674,7 @@ Claude configuration file at ${file} is corrupted: ${error.message}
|
|
|
5607
5674
|
} catch {}
|
|
5608
5675
|
}
|
|
5609
5676
|
if (!alreadyBackedUp) {
|
|
5610
|
-
corruptedBackupPath =
|
|
5677
|
+
corruptedBackupPath = join4(corruptedBackupDir, `${fileBase}.corrupted.${Date.now()}`);
|
|
5611
5678
|
try {
|
|
5612
5679
|
fs.copyFileSync(file, corruptedBackupPath);
|
|
5613
5680
|
logForDebugging(`Corrupted config backed up to: ${corruptedBackupPath}`, {
|
|
@@ -5757,13 +5824,13 @@ function getMemoryPath(memoryType) {
|
|
|
5757
5824
|
const cwd = getOriginalCwd();
|
|
5758
5825
|
switch (memoryType) {
|
|
5759
5826
|
case "User":
|
|
5760
|
-
return
|
|
5827
|
+
return join4(getClaudeConfigHomeDir(), "CLAUDE.md");
|
|
5761
5828
|
case "Local":
|
|
5762
|
-
return
|
|
5829
|
+
return join4(cwd, "CLAUDE.local.md");
|
|
5763
5830
|
case "Project":
|
|
5764
|
-
return
|
|
5831
|
+
return join4(cwd, "CLAUDE.md");
|
|
5765
5832
|
case "Managed":
|
|
5766
|
-
return
|
|
5833
|
+
return join4(getManagedFilePath(), "CLAUDE.md");
|
|
5767
5834
|
case "AutoMem":
|
|
5768
5835
|
return getAutoMemEntrypoint();
|
|
5769
5836
|
}
|
|
@@ -5771,10 +5838,10 @@ function getMemoryPath(memoryType) {
|
|
|
5771
5838
|
return "";
|
|
5772
5839
|
}
|
|
5773
5840
|
function getManagedClaudeRulesDir() {
|
|
5774
|
-
return
|
|
5841
|
+
return join4(getManagedFilePath(), ".claude", "rules");
|
|
5775
5842
|
}
|
|
5776
5843
|
function getUserClaudeRulesDir() {
|
|
5777
|
-
return
|
|
5844
|
+
return join4(getClaudeConfigHomeDir(), "rules");
|
|
5778
5845
|
}
|
|
5779
5846
|
function _setGlobalConfigCacheForTesting(config) {
|
|
5780
5847
|
globalConfigCache.config = config;
|
|
@@ -5886,7 +5953,7 @@ var init_config = __esm(() => {
|
|
|
5886
5953
|
if (gitRoot) {
|
|
5887
5954
|
return normalizePathForConfigKey(gitRoot);
|
|
5888
5955
|
}
|
|
5889
|
-
return normalizePathForConfigKey(
|
|
5956
|
+
return normalizePathForConfigKey(resolve2(originalCwd));
|
|
5890
5957
|
});
|
|
5891
5958
|
_getConfigForTesting = getConfig;
|
|
5892
5959
|
_wouldLoseAuthStateForTesting = wouldLoseAuthState;
|
|
@@ -5894,7 +5961,7 @@ var init_config = __esm(() => {
|
|
|
5894
5961
|
|
|
5895
5962
|
// src/utils/userAgent.ts
|
|
5896
5963
|
function getClaudeCodeUserAgent() {
|
|
5897
|
-
return `claude-code/${"1.0.
|
|
5964
|
+
return `claude-code/${"1.0.4"}`;
|
|
5898
5965
|
}
|
|
5899
5966
|
var init_userAgent = () => {};
|
|
5900
5967
|
|
|
@@ -5917,7 +5984,7 @@ function getUserAgent() {
|
|
|
5917
5984
|
const clientApp = process.env.CLAUDE_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}` : "";
|
|
5918
5985
|
const workload = getWorkload();
|
|
5919
5986
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
5920
|
-
return `claude-cli/${"1.0.
|
|
5987
|
+
return `claude-cli/${"1.0.4"} (${process.env.USER_TYPE}, ${process.env.CLAUDE_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
5921
5988
|
}
|
|
5922
5989
|
function getMCPUserAgent() {
|
|
5923
5990
|
const parts = [];
|
|
@@ -5931,7 +5998,7 @@ function getMCPUserAgent() {
|
|
|
5931
5998
|
parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
|
|
5932
5999
|
}
|
|
5933
6000
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
5934
|
-
return `claude-code/${"1.0.
|
|
6001
|
+
return `claude-code/${"1.0.4"}${suffix}`;
|
|
5935
6002
|
}
|
|
5936
6003
|
function getWebFetchUserAgent() {
|
|
5937
6004
|
return `Claude-User (${getClaudeCodeUserAgent()}; +https://support.anthropic.com/)`;
|
|
@@ -6070,7 +6137,7 @@ var init_user = __esm(() => {
|
|
|
6070
6137
|
deviceId,
|
|
6071
6138
|
sessionId: getSessionId(),
|
|
6072
6139
|
email: getEmail(),
|
|
6073
|
-
appVersion: "1.0.
|
|
6140
|
+
appVersion: "1.0.4",
|
|
6074
6141
|
platform: getHostPlatformForAnalytics(),
|
|
6075
6142
|
organizationUuid,
|
|
6076
6143
|
accountUuid,
|
|
@@ -6671,8 +6738,8 @@ class ExportOperation {
|
|
|
6671
6738
|
_exportScheduledPromise;
|
|
6672
6739
|
_exportScheduledResolve;
|
|
6673
6740
|
constructor(exporter, logRecords, exportTimeoutMillis) {
|
|
6674
|
-
this._exportScheduledPromise = new Promise((
|
|
6675
|
-
this._exportScheduledResolve =
|
|
6741
|
+
this._exportScheduledPromise = new Promise((resolve3) => {
|
|
6742
|
+
this._exportScheduledResolve = resolve3;
|
|
6676
6743
|
});
|
|
6677
6744
|
this._exportCompleted = this._executeExport(exporter, logRecords, exportTimeoutMillis);
|
|
6678
6745
|
}
|
|
@@ -6694,14 +6761,14 @@ class ExportOperation {
|
|
|
6694
6761
|
}
|
|
6695
6762
|
}
|
|
6696
6763
|
async _exportWithTimeout(exporter, logRecords, exportTimeoutMillis) {
|
|
6697
|
-
return new Promise((
|
|
6764
|
+
return new Promise((resolve3, reject) => {
|
|
6698
6765
|
const timer = setTimeout(() => {
|
|
6699
6766
|
reject(new Error("Timeout"));
|
|
6700
6767
|
}, exportTimeoutMillis);
|
|
6701
6768
|
exporter.export(logRecords, (result) => {
|
|
6702
6769
|
clearTimeout(timer);
|
|
6703
6770
|
if (result.code === import_core7.ExportResultCode.SUCCESS) {
|
|
6704
|
-
|
|
6771
|
+
resolve3();
|
|
6705
6772
|
} else {
|
|
6706
6773
|
reject(result.error ?? new Error("BatchLogRecordProcessor: log record export failed"));
|
|
6707
6774
|
}
|
|
@@ -9291,14 +9358,14 @@ var init_client = __esm(() => {
|
|
|
9291
9358
|
});
|
|
9292
9359
|
|
|
9293
9360
|
// src/utils/model/modelCapabilities.ts
|
|
9294
|
-
import { readFileSync as
|
|
9361
|
+
import { readFileSync as readFileSync4 } from "fs";
|
|
9295
9362
|
import { mkdir, writeFile } from "fs/promises";
|
|
9296
|
-
import { join as
|
|
9363
|
+
import { join as join5 } from "path";
|
|
9297
9364
|
function getCacheDir() {
|
|
9298
|
-
return
|
|
9365
|
+
return join5(getClaudeConfigHomeDir(), "cache");
|
|
9299
9366
|
}
|
|
9300
9367
|
function getCachePath() {
|
|
9301
|
-
return
|
|
9368
|
+
return join5(getCacheDir(), "model-capabilities.json");
|
|
9302
9369
|
}
|
|
9303
9370
|
function isModelCapabilitiesEligible() {
|
|
9304
9371
|
if (getAPIProvider() !== "firstParty")
|
|
@@ -9381,7 +9448,7 @@ var init_modelCapabilities = __esm(() => {
|
|
|
9381
9448
|
}));
|
|
9382
9449
|
loadCache = memoize_default((path) => {
|
|
9383
9450
|
try {
|
|
9384
|
-
const raw =
|
|
9451
|
+
const raw = readFileSync4(path, "utf-8");
|
|
9385
9452
|
const parsed = CacheFileSchema().safeParse(safeParseJSON(raw, false));
|
|
9386
9453
|
return parsed.success ? parsed.data.models : null;
|
|
9387
9454
|
} catch {
|
|
@@ -10275,7 +10342,7 @@ var init_metadata = __esm(() => {
|
|
|
10275
10342
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
10276
10343
|
WHITESPACE_REGEX = /\s+/;
|
|
10277
10344
|
getVersionBase = memoize_default(() => {
|
|
10278
|
-
const match = "1.0.
|
|
10345
|
+
const match = "1.0.4".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
10279
10346
|
return match ? match[0] : undefined;
|
|
10280
10347
|
});
|
|
10281
10348
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -10315,9 +10382,9 @@ var init_metadata = __esm(() => {
|
|
|
10315
10382
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
10316
10383
|
isClaudeCodeAction: isEnvTruthy(process.env.CLAUDE_CODE_ACTION),
|
|
10317
10384
|
isClaudeAiAuth: isClaudeAISubscriber(),
|
|
10318
|
-
version: "1.0.
|
|
10385
|
+
version: "1.0.4",
|
|
10319
10386
|
versionBase: getVersionBase(),
|
|
10320
|
-
buildTime: "2026-05-
|
|
10387
|
+
buildTime: "2026-05-21T06:48:39.722Z",
|
|
10321
10388
|
deploymentEnvironment: env.detectDeploymentEnvironment(),
|
|
10322
10389
|
...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
|
|
10323
10390
|
githubEventName: process.env.GITHUB_EVENT_NAME,
|
|
@@ -10976,7 +11043,7 @@ function initialize1PEventLogging() {
|
|
|
10976
11043
|
const platform = getPlatform();
|
|
10977
11044
|
const attributes = {
|
|
10978
11045
|
[import_semantic_conventions2.ATTR_SERVICE_NAME]: "claude-code",
|
|
10979
|
-
[import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.0.
|
|
11046
|
+
[import_semantic_conventions2.ATTR_SERVICE_VERSION]: "1.0.4"
|
|
10980
11047
|
};
|
|
10981
11048
|
if (platform === "wsl") {
|
|
10982
11049
|
const wslVersion = getWslVersion();
|
|
@@ -11003,7 +11070,7 @@ function initialize1PEventLogging() {
|
|
|
11003
11070
|
})
|
|
11004
11071
|
]
|
|
11005
11072
|
});
|
|
11006
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.claude_code.events", "1.0.
|
|
11073
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.anthropic.claude_code.events", "1.0.4");
|
|
11007
11074
|
}
|
|
11008
11075
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
11009
11076
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -11762,13 +11829,13 @@ import { realpath, stat as stat2 } from "fs/promises";
|
|
|
11762
11829
|
import { homedir as homedir2 } from "os";
|
|
11763
11830
|
import {
|
|
11764
11831
|
basename as basename2,
|
|
11765
|
-
dirname as
|
|
11832
|
+
dirname as dirname4,
|
|
11766
11833
|
extname as extname2,
|
|
11767
11834
|
isAbsolute as isAbsolute2,
|
|
11768
|
-
join as
|
|
11835
|
+
join as join7,
|
|
11769
11836
|
normalize as normalize2,
|
|
11770
11837
|
relative,
|
|
11771
|
-
resolve as
|
|
11838
|
+
resolve as resolve3,
|
|
11772
11839
|
sep as sep2
|
|
11773
11840
|
} from "path";
|
|
11774
11841
|
async function pathExists(path2) {
|
|
@@ -11859,10 +11926,10 @@ function getDisplayPath(filePath) {
|
|
|
11859
11926
|
function findSimilarFile(filePath) {
|
|
11860
11927
|
const fs = getFsImplementation();
|
|
11861
11928
|
try {
|
|
11862
|
-
const dir =
|
|
11929
|
+
const dir = dirname4(filePath);
|
|
11863
11930
|
const fileBaseName = basename2(filePath, extname2(filePath));
|
|
11864
11931
|
const files = fs.readdirSync(dir);
|
|
11865
|
-
const similarFiles = files.filter((file) => basename2(file.name, extname2(file.name)) === fileBaseName &&
|
|
11932
|
+
const similarFiles = files.filter((file) => basename2(file.name, extname2(file.name)) === fileBaseName && join7(dir, file.name) !== filePath);
|
|
11866
11933
|
const firstMatch = similarFiles[0];
|
|
11867
11934
|
if (firstMatch) {
|
|
11868
11935
|
return firstMatch.name;
|
|
@@ -11877,18 +11944,18 @@ function findSimilarFile(filePath) {
|
|
|
11877
11944
|
}
|
|
11878
11945
|
async function suggestPathUnderCwd(requestedPath) {
|
|
11879
11946
|
const cwd = getCwd();
|
|
11880
|
-
const cwdParent =
|
|
11947
|
+
const cwdParent = dirname4(cwd);
|
|
11881
11948
|
let resolvedPath = requestedPath;
|
|
11882
11949
|
try {
|
|
11883
|
-
const resolvedDir = await realpath(
|
|
11884
|
-
resolvedPath =
|
|
11950
|
+
const resolvedDir = await realpath(dirname4(requestedPath));
|
|
11951
|
+
resolvedPath = join7(resolvedDir, basename2(requestedPath));
|
|
11885
11952
|
} catch {}
|
|
11886
11953
|
const cwdParentPrefix = cwdParent === sep2 ? sep2 : cwdParent + sep2;
|
|
11887
11954
|
if (!resolvedPath.startsWith(cwdParentPrefix) || resolvedPath.startsWith(cwd + sep2) || resolvedPath === cwd) {
|
|
11888
11955
|
return;
|
|
11889
11956
|
}
|
|
11890
11957
|
const relFromParent = relative(cwdParent, resolvedPath);
|
|
11891
|
-
const correctedPath =
|
|
11958
|
+
const correctedPath = join7(cwd, relFromParent);
|
|
11892
11959
|
try {
|
|
11893
11960
|
await stat2(correctedPath);
|
|
11894
11961
|
return correctedPath;
|
|
@@ -11940,7 +12007,7 @@ function writeFileSyncAndFlush_DEPRECATED(filePath, content, options = { encodin
|
|
|
11940
12007
|
let targetPath = filePath;
|
|
11941
12008
|
try {
|
|
11942
12009
|
const linkTarget = fs.readlinkSync(filePath);
|
|
11943
|
-
targetPath = isAbsolute2(linkTarget) ? linkTarget :
|
|
12010
|
+
targetPath = isAbsolute2(linkTarget) ? linkTarget : resolve3(dirname4(filePath), linkTarget);
|
|
11944
12011
|
logForDebugging(`Writing through symlink: ${filePath} -> ${targetPath}`);
|
|
11945
12012
|
} catch {}
|
|
11946
12013
|
const tempPath = `${targetPath}.tmp.${process.pid}.${Date.now()}`;
|
|
@@ -12008,7 +12075,7 @@ function getDesktopPath() {
|
|
|
12008
12075
|
const platform = getPlatform();
|
|
12009
12076
|
const homeDir = homedir2();
|
|
12010
12077
|
if (platform === "macos") {
|
|
12011
|
-
return
|
|
12078
|
+
return join7(homeDir, "Desktop");
|
|
12012
12079
|
}
|
|
12013
12080
|
if (platform === "windows") {
|
|
12014
12081
|
const windowsHome = process.env.USERPROFILE ? process.env.USERPROFILE.replace(/\\/g, "/") : null;
|
|
@@ -12026,7 +12093,7 @@ function getDesktopPath() {
|
|
|
12026
12093
|
if (user.name === "Public" || user.name === "Default" || user.name === "Default User" || user.name === "All Users") {
|
|
12027
12094
|
continue;
|
|
12028
12095
|
}
|
|
12029
|
-
const potentialDesktopPath =
|
|
12096
|
+
const potentialDesktopPath = join7(usersDir, user.name, "Desktop");
|
|
12030
12097
|
if (getFsImplementation().existsSync(potentialDesktopPath)) {
|
|
12031
12098
|
return potentialDesktopPath;
|
|
12032
12099
|
}
|
|
@@ -12035,7 +12102,7 @@ function getDesktopPath() {
|
|
|
12035
12102
|
logError(error);
|
|
12036
12103
|
}
|
|
12037
12104
|
}
|
|
12038
|
-
const desktopPath =
|
|
12105
|
+
const desktopPath = join7(homeDir, "Desktop");
|
|
12039
12106
|
if (getFsImplementation().existsSync(desktopPath)) {
|
|
12040
12107
|
return desktopPath;
|
|
12041
12108
|
}
|
|
@@ -12079,7 +12146,7 @@ var init_file = __esm(() => {
|
|
|
12079
12146
|
// src/utils/git/gitignore.ts
|
|
12080
12147
|
import { appendFile as appendFile2, mkdir as mkdir3, readFile, writeFile as writeFile3 } from "fs/promises";
|
|
12081
12148
|
import { homedir as homedir3 } from "os";
|
|
12082
|
-
import { dirname as
|
|
12149
|
+
import { dirname as dirname5, join as join8 } from "path";
|
|
12083
12150
|
async function isPathGitignored(filePath, cwd) {
|
|
12084
12151
|
const { code } = await execFileNoThrowWithCwd("git", ["check-ignore", filePath], {
|
|
12085
12152
|
preserveOutputOnError: false,
|
|
@@ -12088,7 +12155,7 @@ async function isPathGitignored(filePath, cwd) {
|
|
|
12088
12155
|
return code === 0;
|
|
12089
12156
|
}
|
|
12090
12157
|
function getGlobalGitignorePath() {
|
|
12091
|
-
return
|
|
12158
|
+
return join8(homedir3(), ".config", "git", "ignore");
|
|
12092
12159
|
}
|
|
12093
12160
|
async function addFileGlobRuleToGitignore(filename, cwd = getCwd()) {
|
|
12094
12161
|
try {
|
|
@@ -12101,7 +12168,7 @@ async function addFileGlobRuleToGitignore(filename, cwd = getCwd()) {
|
|
|
12101
12168
|
return;
|
|
12102
12169
|
}
|
|
12103
12170
|
const globalGitignorePath = getGlobalGitignorePath();
|
|
12104
|
-
const configGitDir =
|
|
12171
|
+
const configGitDir = dirname5(globalGitignorePath);
|
|
12105
12172
|
await mkdir3(configGitDir, { recursive: true });
|
|
12106
12173
|
try {
|
|
12107
12174
|
const content = await readFile(globalGitignorePath, { encoding: "utf-8" });
|
|
@@ -13757,7 +13824,7 @@ var init_validation2 = __esm(() => {
|
|
|
13757
13824
|
|
|
13758
13825
|
// src/utils/settings/mdm/constants.ts
|
|
13759
13826
|
import { homedir as homedir4, userInfo } from "os";
|
|
13760
|
-
import { join as
|
|
13827
|
+
import { join as join9 } from "path";
|
|
13761
13828
|
function getMacOSPlistPaths() {
|
|
13762
13829
|
let username = "";
|
|
13763
13830
|
try {
|
|
@@ -13776,7 +13843,7 @@ function getMacOSPlistPaths() {
|
|
|
13776
13843
|
});
|
|
13777
13844
|
if (process.env.USER_TYPE === "ant") {
|
|
13778
13845
|
paths.push({
|
|
13779
|
-
path:
|
|
13846
|
+
path: join9(homedir4(), "Library", "Preferences", `${MACOS_PREFERENCE_DOMAIN}.plist`),
|
|
13780
13847
|
label: "user preferences (ant-only)"
|
|
13781
13848
|
});
|
|
13782
13849
|
}
|
|
@@ -13789,11 +13856,11 @@ var init_constants4 = __esm(() => {
|
|
|
13789
13856
|
|
|
13790
13857
|
// src/utils/settings/mdm/rawRead.ts
|
|
13791
13858
|
import { execFile } from "child_process";
|
|
13792
|
-
import { existsSync as
|
|
13859
|
+
import { existsSync as existsSync3 } from "fs";
|
|
13793
13860
|
function execFilePromise(cmd, args) {
|
|
13794
|
-
return new Promise((
|
|
13861
|
+
return new Promise((resolve4) => {
|
|
13795
13862
|
execFile(cmd, args, { encoding: "utf-8", timeout: MDM_SUBPROCESS_TIMEOUT_MS }, (err, stdout) => {
|
|
13796
|
-
|
|
13863
|
+
resolve4({ stdout: stdout ?? "", code: err ? 1 : 0 });
|
|
13797
13864
|
});
|
|
13798
13865
|
});
|
|
13799
13866
|
}
|
|
@@ -13802,7 +13869,7 @@ function fireRawRead() {
|
|
|
13802
13869
|
if (process.platform === "darwin") {
|
|
13803
13870
|
const plistPaths = getMacOSPlistPaths();
|
|
13804
13871
|
const allResults = await Promise.all(plistPaths.map(async ({ path: path2, label }) => {
|
|
13805
|
-
if (!
|
|
13872
|
+
if (!existsSync3(path2)) {
|
|
13806
13873
|
return { stdout: "", label, ok: false };
|
|
13807
13874
|
}
|
|
13808
13875
|
const { stdout, code } = await execFilePromise(PLUTIL_PATH, [
|
|
@@ -13856,7 +13923,7 @@ var init_rawRead = __esm(() => {
|
|
|
13856
13923
|
});
|
|
13857
13924
|
|
|
13858
13925
|
// src/utils/settings/mdm/settings.ts
|
|
13859
|
-
import { join as
|
|
13926
|
+
import { join as join10 } from "path";
|
|
13860
13927
|
function startMdmSettingsLoad() {
|
|
13861
13928
|
if (mdmLoadPromise)
|
|
13862
13929
|
return;
|
|
@@ -13958,7 +14025,7 @@ function consumeRawReadResult(raw) {
|
|
|
13958
14025
|
}
|
|
13959
14026
|
function hasManagedSettingsFile() {
|
|
13960
14027
|
try {
|
|
13961
|
-
const filePath =
|
|
14028
|
+
const filePath = join10(getManagedFilePath(), "managed-settings.json");
|
|
13962
14029
|
const content = readFileSync(filePath);
|
|
13963
14030
|
const data = safeParseJSON(content, false);
|
|
13964
14031
|
if (data && typeof data === "object" && Object.keys(data).length > 0) {
|
|
@@ -13973,7 +14040,7 @@ function hasManagedSettingsFile() {
|
|
|
13973
14040
|
continue;
|
|
13974
14041
|
}
|
|
13975
14042
|
try {
|
|
13976
|
-
const content = readFileSync(
|
|
14043
|
+
const content = readFileSync(join10(dropInDir, d.name));
|
|
13977
14044
|
const data = safeParseJSON(content, false);
|
|
13978
14045
|
if (data && typeof data === "object" && Object.keys(data).length > 0) {
|
|
13979
14046
|
return true;
|
|
@@ -14000,9 +14067,9 @@ var init_settings = __esm(() => {
|
|
|
14000
14067
|
});
|
|
14001
14068
|
|
|
14002
14069
|
// src/utils/settings/settings.ts
|
|
14003
|
-
import { dirname as
|
|
14070
|
+
import { dirname as dirname6, join as join11, resolve as resolve4 } from "path";
|
|
14004
14071
|
function getManagedSettingsFilePath() {
|
|
14005
|
-
return
|
|
14072
|
+
return join11(getManagedFilePath(), "managed-settings.json");
|
|
14006
14073
|
}
|
|
14007
14074
|
function loadManagedFileSettings() {
|
|
14008
14075
|
const errors = [];
|
|
@@ -14018,7 +14085,7 @@ function loadManagedFileSettings() {
|
|
|
14018
14085
|
try {
|
|
14019
14086
|
const entries = getFsImplementation().readdirSync(dropInDir).filter((d) => (d.isFile() || d.isSymbolicLink()) && d.name.endsWith(".json") && !d.name.startsWith(".")).map((d) => d.name).sort();
|
|
14020
14087
|
for (const name of entries) {
|
|
14021
|
-
const { settings: settings2, errors: fileErrors } = parseSettingsFile(
|
|
14088
|
+
const { settings: settings2, errors: fileErrors } = parseSettingsFile(join11(dropInDir, name));
|
|
14022
14089
|
errors.push(...fileErrors);
|
|
14023
14090
|
if (settings2 && Object.keys(settings2).length > 0) {
|
|
14024
14091
|
merged = mergeWith_default(merged, settings2, settingsMergeCustomizer);
|
|
@@ -14088,15 +14155,15 @@ function parseSettingsFileUncached(path2) {
|
|
|
14088
14155
|
function getSettingsRootPathForSource(source) {
|
|
14089
14156
|
switch (source) {
|
|
14090
14157
|
case "userSettings":
|
|
14091
|
-
return
|
|
14158
|
+
return resolve4(getRedScopeConfigHomeDir());
|
|
14092
14159
|
case "policySettings":
|
|
14093
14160
|
case "projectSettings":
|
|
14094
14161
|
case "localSettings": {
|
|
14095
|
-
return
|
|
14162
|
+
return resolve4(getOriginalCwd());
|
|
14096
14163
|
}
|
|
14097
14164
|
case "flagSettings": {
|
|
14098
14165
|
const path2 = getFlagSettingsPath();
|
|
14099
|
-
return path2 ?
|
|
14166
|
+
return path2 ? dirname6(resolve4(path2)) : resolve4(getOriginalCwd());
|
|
14100
14167
|
}
|
|
14101
14168
|
}
|
|
14102
14169
|
}
|
|
@@ -14109,10 +14176,10 @@ function getUserSettingsFilePath() {
|
|
|
14109
14176
|
function getSettingsFilePathForSource(source) {
|
|
14110
14177
|
switch (source) {
|
|
14111
14178
|
case "userSettings":
|
|
14112
|
-
return
|
|
14179
|
+
return join11(getSettingsRootPathForSource(source), getUserSettingsFilePath());
|
|
14113
14180
|
case "projectSettings":
|
|
14114
14181
|
case "localSettings": {
|
|
14115
|
-
return
|
|
14182
|
+
return join11(getSettingsRootPathForSource(source), getRelativeSettingsFilePathForSource(source));
|
|
14116
14183
|
}
|
|
14117
14184
|
case "policySettings":
|
|
14118
14185
|
return getManagedSettingsFilePath();
|
|
@@ -14124,12 +14191,12 @@ function getSettingsFilePathForSource(source) {
|
|
|
14124
14191
|
function getSettingsFilePathsForSource(source) {
|
|
14125
14192
|
switch (source) {
|
|
14126
14193
|
case "userSettings": {
|
|
14127
|
-
const redscopePath =
|
|
14194
|
+
const redscopePath = join11(getRedScopeConfigHomeDir(), getUserSettingsFilePath());
|
|
14128
14195
|
if (!isLegacyClaudeSettingsCompatibilityEnabled()) {
|
|
14129
14196
|
return [redscopePath];
|
|
14130
14197
|
}
|
|
14131
14198
|
return uniquePaths([
|
|
14132
|
-
|
|
14199
|
+
join11(getLegacyClaudeConfigHomeDir(), getUserSettingsFilePath()),
|
|
14133
14200
|
redscopePath
|
|
14134
14201
|
]);
|
|
14135
14202
|
}
|
|
@@ -14137,12 +14204,12 @@ function getSettingsFilePathsForSource(source) {
|
|
|
14137
14204
|
case "localSettings": {
|
|
14138
14205
|
const filename = source === "projectSettings" ? "settings.json" : "settings.local.json";
|
|
14139
14206
|
const root = getSettingsRootPathForSource(source);
|
|
14140
|
-
const redscopePath =
|
|
14207
|
+
const redscopePath = join11(root, REDSCOPE_CONFIG_DIR, filename);
|
|
14141
14208
|
if (!isLegacyClaudeSettingsCompatibilityEnabled()) {
|
|
14142
14209
|
return [redscopePath];
|
|
14143
14210
|
}
|
|
14144
14211
|
return uniquePaths([
|
|
14145
|
-
|
|
14212
|
+
join11(root, CLAUDE_CONFIG_DIR, filename),
|
|
14146
14213
|
redscopePath
|
|
14147
14214
|
]);
|
|
14148
14215
|
}
|
|
@@ -14173,9 +14240,9 @@ function readLegacyClaudeSettingsCompatibilityFlag(filePath) {
|
|
|
14173
14240
|
function getRedScopeSettingsCompatibilityFiles() {
|
|
14174
14241
|
const root = getSettingsRootPathForSource("projectSettings");
|
|
14175
14242
|
return uniquePaths([
|
|
14176
|
-
|
|
14177
|
-
|
|
14178
|
-
|
|
14243
|
+
join11(getRedScopeConfigHomeDir(), getUserSettingsFilePath()),
|
|
14244
|
+
join11(root, REDSCOPE_CONFIG_DIR, "settings.json"),
|
|
14245
|
+
join11(root, REDSCOPE_CONFIG_DIR, "settings.local.json")
|
|
14179
14246
|
]);
|
|
14180
14247
|
}
|
|
14181
14248
|
function isLegacyClaudeSettingsCompatibilityEnabled() {
|
|
@@ -14232,9 +14299,9 @@ function setLegacyClaudeSettingsCompatibility(enabled, scope = "user") {
|
|
|
14232
14299
|
function getRelativeSettingsFilePathForSource(source) {
|
|
14233
14300
|
switch (source) {
|
|
14234
14301
|
case "projectSettings":
|
|
14235
|
-
return
|
|
14302
|
+
return join11(".redscope", "settings.json");
|
|
14236
14303
|
case "localSettings":
|
|
14237
|
-
return
|
|
14304
|
+
return join11(".redscope", "settings.local.json");
|
|
14238
14305
|
}
|
|
14239
14306
|
}
|
|
14240
14307
|
function getSettingsForSource(source) {
|
|
@@ -14319,7 +14386,7 @@ function updateSettingsForSource(source, settings) {
|
|
|
14319
14386
|
return { error: null };
|
|
14320
14387
|
}
|
|
14321
14388
|
try {
|
|
14322
|
-
getFsImplementation().mkdirSync(
|
|
14389
|
+
getFsImplementation().mkdirSync(dirname6(filePath));
|
|
14323
14390
|
let existingSettings = getSettingsForSourceUncached(source);
|
|
14324
14391
|
if (!existingSettings) {
|
|
14325
14392
|
let content = null;
|
|
@@ -14500,7 +14567,7 @@ function loadSettingsFromDisk() {
|
|
|
14500
14567
|
continue;
|
|
14501
14568
|
}
|
|
14502
14569
|
for (const filePath of getSettingsFilePathsForSource(source)) {
|
|
14503
|
-
const resolvedPath =
|
|
14570
|
+
const resolvedPath = resolve4(filePath);
|
|
14504
14571
|
if (!seenFiles.has(resolvedPath)) {
|
|
14505
14572
|
seenFiles.add(resolvedPath);
|
|
14506
14573
|
const { settings, errors } = parseSettingsFile(filePath);
|
|
@@ -15126,14 +15193,14 @@ var init_getOauthProfile = __esm(() => {
|
|
|
15126
15193
|
});
|
|
15127
15194
|
|
|
15128
15195
|
// src/utils/authFileDescriptor.ts
|
|
15129
|
-
import { mkdirSync as
|
|
15196
|
+
import { mkdirSync as mkdirSync3, writeFileSync as writeFileSync3 } from "fs";
|
|
15130
15197
|
function maybePersistTokenForSubprocesses(path2, token, tokenName) {
|
|
15131
15198
|
if (!isEnvTruthy(process.env.CLAUDE_CODE_REMOTE)) {
|
|
15132
15199
|
return;
|
|
15133
15200
|
}
|
|
15134
15201
|
try {
|
|
15135
|
-
|
|
15136
|
-
|
|
15202
|
+
mkdirSync3(CCR_TOKEN_DIR, { recursive: true, mode: 448 });
|
|
15203
|
+
writeFileSync3(path2, token, { encoding: "utf8", mode: 384 });
|
|
15137
15204
|
logForDebugging(`Persisted ${tokenName} to ${path2} for subprocess access`);
|
|
15138
15205
|
} catch (error) {
|
|
15139
15206
|
logForDebugging(`Failed to persist ${tokenName} to disk (non-fatal): ${errorMessage(error)}`, { level: "error" });
|
|
@@ -15579,11 +15646,11 @@ var init_macOsKeychainStorage = __esm(() => {
|
|
|
15579
15646
|
|
|
15580
15647
|
// src/utils/secureStorage/plainTextStorage.ts
|
|
15581
15648
|
import { chmodSync as chmodSync2 } from "fs";
|
|
15582
|
-
import { join as
|
|
15649
|
+
import { join as join12 } from "path";
|
|
15583
15650
|
function getStoragePath() {
|
|
15584
15651
|
const storageDir = getClaudeConfigHomeDir();
|
|
15585
15652
|
const storageFileName = ".credentials.json";
|
|
15586
|
-
return { storageDir, storagePath:
|
|
15653
|
+
return { storageDir, storagePath: join12(storageDir, storageFileName) };
|
|
15587
15654
|
}
|
|
15588
15655
|
var plainTextStorage;
|
|
15589
15656
|
var init_plainTextStorage = __esm(() => {
|
|
@@ -15671,9 +15738,9 @@ var init_secureStorage = __esm(() => {
|
|
|
15671
15738
|
// src/utils/secureStorage/keychainPrefetch.ts
|
|
15672
15739
|
import { execFile as execFile2 } from "child_process";
|
|
15673
15740
|
function spawnSecurity(serviceName) {
|
|
15674
|
-
return new Promise((
|
|
15741
|
+
return new Promise((resolve5) => {
|
|
15675
15742
|
execFile2("security", ["find-generic-password", "-a", getUsername(), "-w", "-s", serviceName], { encoding: "utf-8", timeout: KEYCHAIN_PREFETCH_TIMEOUT_MS }, (err, stdout) => {
|
|
15676
|
-
|
|
15743
|
+
resolve5({
|
|
15677
15744
|
stdout: err ? null : stdout?.trim() || null,
|
|
15678
15745
|
timedOut: Boolean(err && "killed" in err && err.killed)
|
|
15679
15746
|
});
|
|
@@ -15780,7 +15847,7 @@ __export(exports_auth, {
|
|
|
15780
15847
|
});
|
|
15781
15848
|
import { exec } from "child_process";
|
|
15782
15849
|
import { mkdir as mkdir4, stat as stat3 } from "fs/promises";
|
|
15783
|
-
import { join as
|
|
15850
|
+
import { join as join13 } from "path";
|
|
15784
15851
|
function isManagedOAuthContext() {
|
|
15785
15852
|
return isEnvTruthy(process.env.CLAUDE_CODE_REMOTE) || process.env.CLAUDE_CODE_ENTRYPOINT === "claude-desktop";
|
|
15786
15853
|
}
|
|
@@ -16105,7 +16172,7 @@ function refreshAwsAuth(awsAuthRefresh) {
|
|
|
16105
16172
|
logForDebugging("Running AWS auth refresh command");
|
|
16106
16173
|
const authStatusManager = AwsAuthStatusManager.getInstance();
|
|
16107
16174
|
authStatusManager.startAuthentication();
|
|
16108
|
-
return new Promise((
|
|
16175
|
+
return new Promise((resolve5) => {
|
|
16109
16176
|
const refreshProc = exec(awsAuthRefresh, {
|
|
16110
16177
|
timeout: AWS_AUTH_REFRESH_TIMEOUT_MS
|
|
16111
16178
|
});
|
|
@@ -16127,13 +16194,13 @@ function refreshAwsAuth(awsAuthRefresh) {
|
|
|
16127
16194
|
if (code === 0) {
|
|
16128
16195
|
logForDebugging("AWS auth refresh completed successfully");
|
|
16129
16196
|
authStatusManager.endAuthentication(true);
|
|
16130
|
-
|
|
16197
|
+
resolve5(true);
|
|
16131
16198
|
} else {
|
|
16132
16199
|
const timedOut = signal === "SIGTERM";
|
|
16133
16200
|
const message = timedOut ? source_default.red("AWS auth refresh timed out after 3 minutes. Run your auth command manually in a separate terminal.") : source_default.red("Error running awsAuthRefresh (in settings or ~/.claude.json):");
|
|
16134
16201
|
console.error(message);
|
|
16135
16202
|
authStatusManager.endAuthentication(false);
|
|
16136
|
-
|
|
16203
|
+
resolve5(false);
|
|
16137
16204
|
}
|
|
16138
16205
|
});
|
|
16139
16206
|
});
|
|
@@ -16251,7 +16318,7 @@ function refreshGcpAuth(gcpAuthRefresh) {
|
|
|
16251
16318
|
logForDebugging("Running GCP auth refresh command");
|
|
16252
16319
|
const authStatusManager = AwsAuthStatusManager.getInstance();
|
|
16253
16320
|
authStatusManager.startAuthentication();
|
|
16254
|
-
return new Promise((
|
|
16321
|
+
return new Promise((resolve5) => {
|
|
16255
16322
|
const refreshProc = exec(gcpAuthRefresh, {
|
|
16256
16323
|
timeout: GCP_AUTH_REFRESH_TIMEOUT_MS
|
|
16257
16324
|
});
|
|
@@ -16273,13 +16340,13 @@ function refreshGcpAuth(gcpAuthRefresh) {
|
|
|
16273
16340
|
if (code === 0) {
|
|
16274
16341
|
logForDebugging("GCP auth refresh completed successfully");
|
|
16275
16342
|
authStatusManager.endAuthentication(true);
|
|
16276
|
-
|
|
16343
|
+
resolve5(true);
|
|
16277
16344
|
} else {
|
|
16278
16345
|
const timedOut = signal === "SIGTERM";
|
|
16279
16346
|
const message = timedOut ? source_default.red("GCP auth refresh timed out after 3 minutes. Run your auth command manually in a separate terminal.") : source_default.red("Error running gcpAuthRefresh (in settings or ~/.claude.json):");
|
|
16280
16347
|
console.error(message);
|
|
16281
16348
|
authStatusManager.endAuthentication(false);
|
|
16282
|
-
|
|
16349
|
+
resolve5(false);
|
|
16283
16350
|
}
|
|
16284
16351
|
});
|
|
16285
16352
|
});
|
|
@@ -16431,7 +16498,7 @@ function clearOAuthTokenCache() {
|
|
|
16431
16498
|
}
|
|
16432
16499
|
async function invalidateOAuthCacheIfDiskChanged() {
|
|
16433
16500
|
try {
|
|
16434
|
-
const { mtimeMs } = await stat3(
|
|
16501
|
+
const { mtimeMs } = await stat3(join13(getClaudeConfigHomeDir(), ".credentials.json"));
|
|
16435
16502
|
if (mtimeMs !== lastCredentialsMtimeMs) {
|
|
16436
16503
|
lastCredentialsMtimeMs = mtimeMs;
|
|
16437
16504
|
clearOAuthTokenCache();
|